Drupal Planet

Syndicate content
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 8 hours 43 min ago

Drupalize.Me: Guide to Drupal 8 at DrupalCon Bogotá

Mon, 02/09/2015 - 7:00am
div class=field field-name-body field-type-text-with-summary field-label-hidden text-content text-secondarydiv class=field-itemsdiv class=field-item evenpAre you lucky enough to attend DrupalCon Latin America in Bogotá, Columbia? Excited to learn more about Drupal 8 in particular? If so, put these Drupal 8-related sessions on your radar. If you'll be watching from home, keep an eye on the Drupal Association's YouTube channel for session recordings. Here's the Drupalize.Me guide to Drupal 8 at DrupalCon Latin America 2015./p /div/div/divdiv id=comment-wrapper-nid-2065/div
Categories: Drupal Feeds

Code Enigma: Testing Frameworks - an Exploration

Mon, 02/09/2015 - 4:03am
div id=node-328 class=node node-page clearfix h2a href=/community/blog/testing-frameworks-explorationTesting Frameworks - an Exploration/a/h2 div class=content div class=form-item form-type-item labelLanguage /label English /div article div class=max article-banner-top revimg src=https://www.codeenigma.com/sites/default/files/styles/banner_mobile/public/3658162161_ab3f84cfd2_o.jpg?itok=bCc6LcqY width=400 height=225 alt=Crash Test Dummy Heads title=Crash Test Dummy Heads //div header class=altdiv h1Testing Frameworks - an Exploration/h1 /div/headerdiv class=revdiv class=main p class=leadIn this blog post, I walk through an automated testing setup, using Behat, Mink and Selenium./p /divfooter class=aside vcarda href=/community/blog?author=jamieimg src=https://www.codeenigma.com/sites/default/files/jamie-blue.jpg width=240 height=240 alt=Photo f Jamie Wiseman //adiv class=vcard-detailsabbr class=published command contemporary title=2015-02-09T10:03:01+00:009th February 2015/abbrspan class=author contemporary secondaryBy a href=/community/blog?author=jamie class=fn urljamie/a/span/div/footer/divdiv class=revdiv class=mainpMany months ago, a discussion between my colleague Chris Maiden and I sparked off an idea that we developed into an automated testing framework, which is capable of taking any assertions from user stories, and running them either as unit tests against code, or as functional tests against a staged or development web interface./p pThere are two main reasons for developing this. The first and simplest is that our clients want it, and we like to help our clients. The second is that it makes sense to have a set of standardised ‘Drupal’ web tests which we can execute in part or full against builds, to ensure that we’re not breaking critical behaviour. A library of standard tests would be beneficial on any current or future projects./p h2Enter Behat/h2 pBehat is a testing framework for PHP, based on work done for Ruby (which resulted in a project called Cucumber). Since there’s a natural link to long, green vegetables, the syntax shared by both behat and cucumber is called Gherkin - no I’m not sure where this came from./p pEssentially, Behat exists to make unit tests easy. The gherkin syntax is fairly close to natural language (as scripting syntax goes). An example:/p p /p pre # features/search.feature Feature: Search In order to see a word definition As a website user I need to be able to search for a word Scenario: Searching for a page that does exist Given I am on /wiki/Main_Page When I fill in search with Behavior Driven Development And I press searchButton Then I should see agile software development /prep /p pYou can probably follow this. The awesome thing about Behat is that it takes this syntax (this is actually valid) and runs tests. The orange bits are keywords. The green bits are variables. Within the scenario block, the bits between keywords and variables actually map to PHP functions in the background, which are stored within context classes./p pAlone, Behat would be used to run unit tests, with contexts providing accessor functions for PHP units, which provide assertions to test. As useful as this may be, it’s arguably not always the best way to test a website, which is where Mink comes into play. Mink is effectively an abstraction layer, which lets Behat talk to different functional testing frameworks. It provides a handful of web oriented contexts, but most importantly, it executes gherkin syntax test cases in browser emulators, or live browser sessions, using any framework you’d care to name! In our case, we’ve used Mink’s default settings to plug into gouette (a ‘headless browser’ implementation) and selenium (a framework which allows tests to be run directly through the browser)./p pSo this is all great. We can use gouette for all test instances where we do not require an actual browser. However, some of our functional tests are going to require Javascript to run, and in those cases (at least) we’ll need Selenium./p pWatching Selenium in action is a little bizarre. When you run tests, it literally opens up a browser, and starts clicking on things, typing into search boxes, going to URLs you’ve specified. But having seen it run, you begin to wonder how it would ever work on a server, running automated tests post-build. In most cases, our servers are running a linux distribution which doesn’t even have a desktop GUI installed, let alone a browser, but there’s a trick to getting this to work; a little package called Xvfb. It stands for X-windows Virtual Frame Buffer, and gives you a ‘virtual’ desktop GUI in which you can run standard applications, which would otherwise require a desktop. You can’t see it, because it doesn’t actually have a front end, but your desktop applications run in it, and return whatever output they’ve been designed to return./p h2Setting it up:/h2 h3Behat, Mink Selenium/h3 pThe default, and by far the easiest way to install Behat is to use Composer - which is a tool employed by Symfony (and other PHP projects) to resolve dependencies in a graceful and automated way./p pIn the root of our project, we’ve created a behat/ subdirectory, and in it created a file called composer.json, which contains the following JSON structure:/p pre { require: { behat/mink: *, behat/mink-goutte-driver: *, behat/mink-selenium2-driver: *, } } /prepHaving saved this, we run the following commands from the terminal, in our behat/ subdirectory:/p pre $ curl http://getcomposer.org/installer | php $ php composer.phar install /prepThis will download a file called composer.phar - a compressed PHP application which will download and install all the dependencies, plus the Behat, Mink, Gouette and Selenium packages required for this exercise. Once present, they’ll live in the behat/vendor/ subdirectory./p pThere’s a little more work to do before we can test this out. First of all we’ll need to initialise a behat test project. From our behat/ subdirectory we run:/p pre $ bin/behat --init /prepThis will create a project structure for us, which will consist of a behat.yml file, and a behat/features/ subdirectory, which is where our tests will live. By default, behat.yml is not set up to autoload all of Mink’s extra classes within feature tests, so this will need to be edited so that it looks like this:/p pre # behat.yml default: extensions: Behat\MinkExtension\Extension: goutte: ~ selenium2: ~ /prepthis tells Behat that any tests not defined as using a user-defined context, will use the MinkContext class by default, which means they’ll know how to perform all the defined common web-related actions. We can test this is the case by running/p pre $ bin/behat -dl /prepfrom within the behat/ subdirectory. This should return a list of contexts which Behat/Mink knows about./p pAssuming this all works, next we’re going to need some tests! We’ll save the following in a file at behat/features/search.feature:br /  /p pre # features/search.feature Feature: Search In order to see a word definition As a website user I need to be able to search for a word Scenario: Searching for a page that does exist Given I am on /wiki/Main_Page When I fill in search with Behavior Driven Development And I press searchButton Then I should see agile software development Scenario: Searching for a page that does NOT exist Given I am on /wiki/Main_Page When I fill in search with Glory Driven Development And I press searchButton Then I should see Search results /prep /p pThe astute among us will notice that the feature defined above is checking a wiki’s search functionality. Wikipedia, to be exact. We need to tell Behat which site it is we’re running tests on, which happens back in the behat.yml file:/p pre # behat.yml default: extensions: Behat\MinkExtension\Extension: base_url: http://en.wikipedia.org goutte: ~ selenium2: ~ /prepOnce that’s done, we’re ready to run our Behat tests!/p pAs it stands, we can execute these tests by running:/p pre $ bin/behat /prepin our behat/ subdirectory. By default, Behat will use the gouette driver to run tests, so you won’t see anything spectacular happen - just some test results in your terminal window. Next, we need Selenium.br /  /p h3Testing Selenium Locally/h3 pFirst off, to test using Selenium, we’re going to need a Selenium server running. It can be downloaded as a .jar file from a href=http://seleniumhq.org/download/http://seleniumhq.org/download//a and running it is a simple matter of getting into whichever directory it’s saved to, and running:/p pre $ java -jar selenium-server-*.jar /prepObviously, we need a JRE installed, and we could replaced the ‘*’ with the specific file name or version number we downloaded./p pOnce we have Selenium running in the background (hence the ), we need to modify our feature file like so:/p pre @javascript Scenario: Searching for a page that does exist Given I am on /wiki/Main_Page When I fill in search with Behavior Driven Development And I press searchButton Then I should see agile software development /prep /p pThe ‘@javascript’ tag above the Scenario tells Mink to use a driver which supports, predictably, javascript (and therefore will load the test in an actual browser, rather than an emulation of a browser)./p pIf we now run/p pre $ bin/behat /prepfrom our behat/ subdirectory, we should see Firefox open up, navigate to the Wikipedia site, and start running our tests. When it’s finished, it will close again, and our test results will be displayed in the terminal./p h2Xvfb, Testing Selenium on a headless server/h2 pSo, having got all the following working, we need to take it a step further. Supposing we want our test framework to run on a server machine - one that’s hosted at Linode, or Rackspace, and which we don’t want to install Gnome, or KDE or even Windows. We could just use the Gouette driver to execute tests, but that doesn’t allow us to test any javascript-rich functionality. We need a way of emulating the desktop environment, and running a browser./p pThis is where a package called Xvfb comes in. We can find it in most package repositories - my favourite flavour of Linux is usually Debian or Ubuntu, so we’d install it with:/p pre $ sudo apt-get install xvfb /prepAnd it can be run with:/p pre $ Xvfb :99 -ac /prepThis means to run Xvfb on a display we’ve numbered 99, with no user access control, and send it to the background./p pWe can now start up Selenium, and run our tests on this server (assuming we’ve deployed our tests on this server), but we’ll need to tell Selenium which display to open browser instances on:/p pre $ export DISPLAY=:99 $ java -jar selenium-server-*.jar /prepand now we’re good to go. As before, we go to our behat/ subdirectory, and run:/p pre $ bin/behat /prepWe’ll see the same output as we did when running tests in Selenium locally, and we should also get output from Selenium and Xvfb, since they’re running as background tasks in the current shell./p h2Oh no, my server needs a different setup to my local machine/vm!/h2 pWhen we first committed our Behat framework to a project, pushed it to a stage server, and tried to execute our tests, we found that there were dependency problems. This is largely because when Behat is installed, it uses the Composer framework to check which libraries are needed, downloads them automatically, and includes them from a vendor/ subdirectory which is created as part of the install task./p pSince the vendor/ subdir is the only place in which these dependencies are resolved, our solution was to install Behat/Mink locally to the server via composer, somewhere safely away from the project. Then when code was pushed up to our stage server, it’s a simple task to remove the vendor/ subdir from the project, and symlink in one which we’re confident contains all the dependencies for the current server./p pAnother way we could tackle this problem could be to install Behat/Mink/Selenium/Xvfb on our server as before, and have Behat’s features/ subdir version controlled, and managed by a CI setup, such as Jenkins. That way, our tests would be separate from our project, and could be run as needed without worrying about dependencies at all.br /  /p h2Running Selenium/Xvfb as a service/h2 pThere are a few ways of having Selenium and Xvfb running in the background on our server, without having to run them explicitly from the terminal each time we need them. One way we explored was to have them installed as ‘service’ scripts, from /etc/init.d/ but the simplest and easiest way we opted for was simply to place the following in /etc/rc.local, which executes commands when the machine starts:/p pre /usr/bin/Xvfb -ac :99 export DISPLAY=:99 java -jar /usr/local/bin/selenium-server-standalone-2.25.0.jar exit 0 /prepThis is enough to have the necessary programs running when we need them, which is especially useful if we’re integrating our test framework with a Continuous Integration framework, such as Jenkins. Which is exactly what we intend to do ;-)/p h2Jenkins, Fabric.py and Continuous Integration/h2 pThe idea behind this is to have tests run whenever a changeset is pushed to a git branch. As we get out into the realms of CI setups, there are fewer and fewer absolutes, because each CI setup is different depending on who created it, and where and why it’s been set up./p pIn our case, we’ve added a step to our fabric file, which looks like:/p div class=geshifilterdiv class=python geshifilter-pythonpre class=de1span class=co1# Run behat tests, if present/span span class=kw1def/span run_behat_testsspan class=br0(/spanrepospan class=sy0,/span branchspan class=sy0,/span buildspan class=br0)/span: span class=kw1if/span span class=kw3os/span.span class=me1path/span.span class=me1isdir/spanspan class=br0(/spancwd + span class=st0'/behat'/spanspan class=br0)/span span class=kw1and/span env.span class=me1host/span span class=sy0==/span span class=st0'staging_host_name.codeenigma.com'/span: span class=kw1print/span span class=st0=== Re-linking vendor directory/span runspan class=br0(/spanspan class=st0cd /var/www/%s_%s_%s/behat rm -rf vendor ln -s /var/www/shared/behat/vendor/span % span class=br0(/spanrepospan class=sy0,/spanbranchspan class=sy0,/spanbuildspan class=br0)/spanspan class=br0)/span span class=kw1print/span span class=st0=== Running behat tests.../span runspan class=br0(/spanspan class=st0export DISPLAY=:99 cd /var/www/%s_%s_%s/behat bin/behat/span % span class=br0(/spanrepospan class=sy0,/spanbranchspan class=sy0,/spanbuildspan class=br0)/span/pre/div/divp /p pAll this is doing, is checking to see if a behat/ subdirectory exists, and that the hostname we’re deploying to matches our expectations for the for the environment on which we’d like to run tests, and then if these criteria are met, we remove and then symlink the behat/vendor/ subdirectory to one we know is good for this server, and then run the test suite (having exported the display variable)./p pUltimately, a continuous integration setup is going to vary depending on the individual circumstances involved, but building a ‘test’ step in is pretty simple. Behat returns FALSE if tests pass, and an error message if not, so it’s very simple to check for./p pIt’s also possible to run Behat with command line options to output the results to HTML, so this can be combined with a CI framework to just email the results of any tests, and pass the build regardless - again, it’s down to the individual needs of the project./p p(Main banner image: a href=https://www.flickr.com/photos/imagesbywestfall/3658162161/in/photolist-6zg3ap-cTzAam-a6mgP8-9k3CZ4-5tKnL9-7suFKB-4gETfN-8y3ukc-6ULHvD-eKTAQp-bFpueB-kNHY-bCQYdT-5yRz4v-bCzBBi-ymcip-bCcXmk-bEkLm8-bD2Aga-qxK1w4-bD5MnM-56QXRt-bsr1j1-bCPqag-6EyFMo-8LMmD-C7pWB-2WTjK-nmV7A9-bs36yy-a1pPiw-bsD1WS-87PR7E-r57cX-8Uvutv-bFoxoH-brKHKu-nVfLCv-aoQeD6-6VnNjz-brHmkL-brtXEW-85bwQi-y9u86-7LM4L7-ncQSMB-cWbYgJ-6rBoqm-mVdWh-88aoEwdummies by Greg Westfall/a)/p p /p /div/divaside class=article-list max div class=article-list-item diva href=/community/blog/introduction-test-driven-development class=article-list-item-linkAn Introduction to Test Driven Development/adiv class=article-list-item-typeBlog/div/div /div div class=article-list-item diva href=/community/blog/getting-started-test-driven-development-choosing-test-harness class=article-list-item-linkGetting started with Test Driven Development - Choosing a Test Harness/adiv class=article-list-item-typeBlog/div/div /div div class=article-list-item diva href=/host/faq/how-do-code-enigma-provide-continuous-integration class=article-list-item-linkHow do Code Enigma provide continuous integration?/adiv class=article-list-item-typeFAQ/div/div /div div class=article-list-item diva href=/community/blog/meaningful-commit-messages class=article-list-item-linkMeaningful commit messages/adiv class=article-list-item-typeBlog/div/div /div /aside/article /div /div
Categories: Drupal Feeds

lakshminp.com: Annotations in Drupal 8

Mon, 02/09/2015 - 1:12am
pAnnotations are PHP comments which hold metadata about your function or class. They do not directly affect program semantics as they are comment blocks. They are read and parsed at runtime by an annotation engine./p pAnnotations are already used in other PHP projects for various purposes. Symfony2 uses annotations for specifying routing rules. Doctrine uses them for adding ORM related metadata.Though handy in various situations, their utility is debated about a lot, like:/p ol lipHow to actually differentiate between annotations and actual user comments?/p/li lipWhy put business logic inside comment blocks. Shouldn't they be a part of core language semantics?/p/li lipAnnotations blur the boundary between code and comments. If the developer misses an annotation(Remember, its not a program semantic). It might compile fine, but might not work as expected./p/li lipAnother closely related gripe is, annotations are hard to test and debug./p/li /ol pMost of the acquisitions are around the concept of annotations implemented as comments in PHP. There is however, a a href='https://wiki.php.net/rfc/annotations' proposal/a to add it as a first class language feature. In the meantime, we are stuck to using comment based annotations./p pAnnotations are not all evil. They make it easier to inject behaviour without adding a lot of boilerplate./p pHere is an example taken from a href='http://stackoverflow.com/questions/3623499/how-is-annotation-useful-in-php' stackoverflow/a which shows how annotations can cut a lot of boilerplate code./p pLet's say we want to inject codeweapon/code object to a codeSoldier/code instance./p precode class=language-phpclass Weapon { public function shoot() { print ... shooting ...; } } class Soldier { private $weapon; public function setWeapon($weapon) { $this-gt;weapon = $weapon; } public function fight() { $this-gt;weapon-gt;shoot(); } } /code/pre pIf the DI is done by hand, then:/p precode class=language-php$weapon = new Weapon(); $soldier = new Soldier(); $soldier-gt;setWeapon($weapon); $soldier-gt;fight(); /code/pre pWe could go a step further and decouple the DI and put it in an external file, like:/p pstrongSoldier.php/strong/p precode class=language-php$soldier = Container::getInstance('Soldier'); $soldier-gt;fight(); // ! weapon is already injected /code/pre pstrongsoldierconfig.xml/strong/p precode class=language-markuplt;class name=Soldiergt; lt;!-- call setWeapon, inject new Weapon instance --gt; lt;call method=setWeapongt; lt;argument name=Weapon /gt; lt;/callgt; lt;/classgt; /code/pre pIf we use annotations instead:/p precode class=language-phpclass Soldier { ... /** * @inject $weapon Weapon */ public function setWeapon($weapon) { $this-gt;weapon = $weapon; } /code/pre pAnnotations also give the additional advantage of having both code and metadata co-located. I think this is another reason why it was a href='http://www.drupal4hu.com/node/377' decided/a to use annotations and do away with external configuration files in Drupal 8(at least for plugins)./p h2 id=thedrupalpartThe Drupal part/h2 pDrupal 8 borrows annotations syntax from a href='http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/annotations.html' Doctrine/a. Drupal 7 had metadata tucked away in info hooks. This involves reading the whole module file into memory for every request. Annotations, on the other hand, are tokenized and parsed and don't incur as much memory requirements as in the hook based approach. Also, docblocks are cached by the opcode cache./p h2 id=syntaxSyntax/h2 pDrupal annotations are nested key value pairs very similar to json dumps. There are some gotchas though. You MUST use double quotes for strings and no quotes at all for numbers. Lists are represented by curly brackets and don't have a training comma. br / Here's a code dump of annotations in action, from codeTextDefaultFormatter.php/code file in codetext/code module./p precode class=language-php/** * Plugin implementation of the 'text_default' formatter. * * @FieldFormatter( * id = text_default, * label = @Translation(Default), * field_types = { * text, * text_long, * text_with_summary, * }, * quickedit = { * editor = plain_text * } * ) */ class TextDefaultFormatter extends FormatterBase { ... /code/pre pWith so many conveniences, I hope annotations become a first class citizen of PHP pretty soon!/p
Categories: Drupal Feeds

DrupalOnWindows: Getting #2,000 requests per second without varnish

Sun, 02/08/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:encodedpNow that Varnish is finally the free version of a propietary software, it's time to look somewhere else, and the answer is right in front of our noses. When the word pripietary starts to appear, let's stick to the big guys. If you want to know how to strongget #2,000 requests per second without depending on anything else but your current webserver/strong (yes, the same one you are using to serve your pages, no need to setup anything else here) then keep on reading./p/div/div/divdiv class=view view-read-more view-id-read_more view-display-id-entity_view_1 view-dom-id-61346a320a8a4fa6902a1a4466ac5581 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/drupal-iis-or-apacheDrupal on IIS or Apache/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/distinct-options-views-exposed-filter-views-selective-filters-moduleDistinct options in a views exposed filter: The Views Selective Filters Module/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/node-comment-and-forum-working-together-boost-user-participationNode Comment and Forum working together to boost user participation/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/getting-2000-requests-second-without-varnishGetting #2,000 requests per second without varnish/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/installing-drupal-windows-and-sql-serverInstalling Drupal on Windows and SQL Server/a/span /div/li li class=views-row views-row-6 views-row-even views-row-last 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 /ul/div /div /div
Categories: Drupal Feeds

Daniel Pocock: Lumicall's 3rd Birthday

Fri, 02/06/2015 - 2:33pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpToday, 6 February, is the third birthday of the a href=http://www.lumicall.orgLumicall/a app for secure SIP on Android./p pimg src=http://danielpocock.com/sites/danielpocock.com/files/yellow-three-candle-cake-md.png //p h3Happy birthday/h3 pLumicall's a href=https://github.com/opentelecoms-org/lumicall/releases/tag/1.01.0 tag/a was created in the Git repository on this day in 2012. It was released to the Google Play store, known as the Android Market back then, while I was in Brussels, the day after a href=https://archive.fosdem.org/2012/FOSDEM/a./p pSince then, Lumicall has also become available through the a href=https://f-droid.org/repository/browse/?fdfilter=lumicallamp;fdid=org.lumicall.androidF-Droid/a free software marketplace for Android and this is the recommended way to download it./p h3An international effort/h3 pMost of the work on Lumicall itself has taken place in Switzerland. Many of the building blocks come from Switzerland's neighbours:/p ulliThe a href=http://www.ice4j.orgice4j/a a href=http://en.wikipedia.org/wiki/Interactive_Connectivity_EstablishmentICE/STUN/TURN/a implementation comes from the amazing a href=http://jitsi.orgJitsi softphone/a, which is developed in France./li liThe a href=http://www.zrtp.org/ZORG open source ZRTP stack/a comes from a href=http://support.privatewave.com/display/WS/ZRTPPrivateWave/a in Italy/li liLumicall itself is based on the a href=http://sipdroid.org/Sipdroid/a project that has a German influence, while Sipdroid is based on a href=http://www.mjsip.org/MjSIP/a which comes out of Italy./li liThe a href=http://danielpocock.com/a-quick-look-at-enumENUM dialing/a logic uses code from a href=https://code.google.com/p/enumdroid/ENUMdroid/a, published by a href=http://www.nominet.org.uk/Nominet/a in the UK. The UK is not exactly a neighbour of Switzerland but there is a tremendous connection between the two countries./li liGoogle's a href=https://github.com/googlei18n/libphonenumberlibPhoneNumber/a has been developed by the Google team in Zurich and helps Lumicall format phone numbers for dialing through international VoIP gateways and ENUM./li /ulpLumicall also uses the a href=http://www.resiprocate.orgreSIProcate/a project for server-side infrastructure. The repro SIP proxy and TURN server run on secure and reliable a href=http://www.debian.orgDebian servers/a in a leading Swiss data center./p h3An interesting three years for free communications/h3 pFree communications is not just about avoiding excessive charges for phone calls. Free communications is about freedom./p pIn the three years Lumicall has been promoting freedom, the issue of communications privacy has grabbed more headlines than I could have ever imagined./p pOn 5 June 2013 I published a blog about the a href=http://danielpocock.com/the-gold-standard-in-free-communications-technologyGold Standard in Free Communications Technology/a. Just hours later a leading British newspaper, a href=http://www.theguardian.com/The Guardian/a, published damning revelations about the a href=http://www.theguardian.com/world/2013/jun/06/nsa-phone-records-verizon-court-orderUS Government spying on its own citizens/a. Within a week, Edward Snowden was a household name./p pGoogle's Eric Schmidt had previously told us that a href=https://www.eff.org/deeplinks/2009/12/google-ceo-eric-schmidt-dismisses-privacyIf you have something that you don't want anyone to know, maybe you shouldn't be doing it in the first place./a. This statement is easily debunked: as CEO of a corporation listed on a public stock exchange, Schmidt and his senior executives are under an obligation to protect commercially sensitive information that could be used for crimes such as insider trading./p pThere is no guarantee that Lumicall will keep the most determined NSA agent out of your phone but nonetheless using a free and open source application for communications does help to avoid the defacto leakage of your conversations to a plethora of marketing and profiling companies that occurs when using a regular phone service or messaging app./p h3How you can help free communications technology evolve/h3 pAs I mentioned in a href=http://danielpocock.com/lumicall-big-steps-forward-help-neededmy previous blog on Lumicall/a, the best way you can help Lumicall is by a href=http://danielpocock.com/lumicall-big-steps-forward-help-neededhelping the F-Droid team/a. a href=https://f-droid.org/repository/browse/?fdfilter=lumicallamp;fdid=org.lumicall.androidF-Droid/a provides a wonderful platform for distributing free software for Android and my own life really wouldn't be the same without it. It is a privilege for Lumicall to be featured in the F-Droid eco-system./p pThat said, if you try Lumicall and it doesn't work for you, please feel free to send details from a href=http://developer.android.com/tools/help/logcat.htmlthe Android logs/a through a href=https://github.com/opentelecoms-org/lumicall/issuesthe Lumicall issue tracker on Github/a and they will be looked at. It is impossible for Lumicall developers to test every possible phone but where errors are obvious in the logs some attempt can be made to fix them./p h3Beyond regular SIP/h3 pAnother thing that has emerged in the three years since Lumicall was launched is a href=http://danielpocock.com/tags/webrtcWebRTC/a, browser based real-time communications and VoIP./p pIn its present form, WebRTC provides tremendous opportunities on the desktop but it does not displace the need for dedicated VoIP apps on mobile handsets. WebRTC applications using JavaScript are a demanding solution that don't integrate as seamlessly with the Android UI as a native app and they currently tend to be more intensive users of the battery./p pLumicall users can receive calls from desktop users with a WebRTC browser using the a href=http://www.lumicall.org/free-calls-from-pc-to-mobile-webrtcfree calling from browser to mobile/a feature on the Lumicall web site. This service is powered by a href=http://jscommunicator.orgJSCommunicator/a and a href=http://drucall.orgDruCall/a for Drupal./p /div/div/div
Categories: Drupal Feeds

Dries Buytaert: Growing Drupal in Latin America

Fri, 02/06/2015 - 1:45pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpWhen I visited Brazil in 2011, I was so impressed by the Latin American Drupal community and how active and passionate the people are. The region is fun and beautiful, with a href=http://buytaert.net/album/brazil-2011some of the most amazing sites/a I have seen anywhere in the world. It also happens to be a strategic region for the project. /p pLatin American community members are doing their part to grow the project and the Drupal community. In 2014, the region hosted 19 Global Training Day events to recruit newcomers, and community leaders coordinated many Drupal camps to help convert those new Drupal users into skilled talent. Members of the Latin American community help promote Drupal at local technology and Open Source events, visiting events like a href=http://softwarelivre.org/fisl14?lang=enFISL/a (7,000+ participants), a href=http://www.consegi.gov.br/?set_language=enConsegi/a (5,000+ participants) and a href=http://latinoware.org/Latinoware/a (4,500+ participants)./p pYou can see the results of all the hard work in the growth of the Latin American Drupal business ecosystem. The region has a huge number of talented developers working at agencies large and small. When they aren't creating great Drupal websites like the one for the a href=http://www.rio2016.com/enRio 2016 Olympics/a, they are contributing code back to the project. For example, during our recent Global Sprint Weekend, communities in Bolivia, Colombia, Costa Rica, and Nicaragua participated and made valuable contributions./p pThe community has also been instrumental in translation efforts. On a href=https://localize.drupal.org/translate?sort=descamp;order=Drupal+core+progresslocalize.drupal.org/a, the top translation is Spanish with 500 contributors, and a significant portion of those contributors come from the Latin America region. Community members are also investing time and energy translating Drupal educational videos, conducting camps in Spanish, and even publishing a Drupal magazine in Spanish. All of these efforts lower the barrier to entry for Spanish speakers, which is incredibly important because Spanish is one of the top spoken languages in the world. While the official language of the Drupal project is English, there can be a language divide for newcomers who primarily speak other languages./p pLast but not least, I am excited that a href=https://latinamerica2015.drupal.org/we are bringing DrupalCon to Latin America/a next week. This is the fruit of many hours spent by passionate volunteers in the Latin American local communities, working together with the a href=http://association.drupal.orgDrupal Association/a to figure out how to make a DrupalCon happen in this part of the world. At every DrupalCon we have had so far, we have seen an increase in energy for the project and a bump in engagement. Come for the software, stay for the community! emHasta pronto!/em/p /div/div/div
Categories: Drupal Feeds

Aten Design Group: Removing Duplicate Content Across Multiple Drupal Views

Fri, 02/06/2015 - 12:31pm
img src=http://atendesigngroup.com/sites/default/files/removing-duplicate-content.png width=1000 height=600 alt= /pa href=https://www.drupal.org/project/viewsViews/a is an indispensable and powerful module at the heart of Drupal that you can use to quickly generate structured tables or lists of consistently formatted content, and filter and group that content by simple or complex logic. But in pushing Views to do ever more complex and useful things, we can sort of paint ourselves into a corner sometimes. For instance, I have many times created multiple Views displays on a single page that contain overlapping content. My homepage has a Views display of manually curated content, using a href=https://www.drupal.org/project/nodequeueNodequeue/a or a similar module. On the same homepage, I have a Views display of news content that shows the most recent content. Since the two different Views displays pull from the same bucket of content, it is very possible to have duplicate content across the displays. Here is an example:/p pimg src=https://www.evernote.com/shard/s201/sh/6c37faaa-4384-4a4e-85c0-0f3fb04aa4eb/fe4405a678537c5e30dba0876ddb8698/deep/0/views_before.png alt=Before image showing overlapping content. //p pemNotice the underlined duplicate titles across the two Views displays./em/p pstrongThis is what we want:/strong/p pimg src=https://www.evernote.com/shard/s201/sh/78978421-b83e-4450-b026-1458c15ee6e9/2e82a5d85d56efbe7e0342328e242f00/deep/0/views_after.png alt=After image showing the deduped Views display. //p pemNotice the missing featured titles from the deduped Views display./em/p pBy creating a custom Drupal module and utilizing a a href=https://api.drupal.org/api/views/views.api.php/group/views_hooks/7Views hook/a, we can remove the duplicate content across the two Views displays. We programmatically check exactly which pieces of content are in one View, and we feed that information to a filter in the second View that excludes it./p h3Before diving into my example, I want to cover a few assumptions I’m making about you./h3 ul liYou are using Drupal 7/li liYou are familiar with Views module/li liYou know how to install modules/li liYou know at least a touch of PHP/li /ul h2Steps to Follow Along/h2 pa href=https://github.com/joelsteidl/dedup_viewsView Example Code on Github/a/p h3Step 1/h3 pMy example code assumes that you have created two Views displays./p ul listrongFeatured/strong - A View display of manually curated content. This display will be used to generate a list of content to exclude from our automated Views display./li listrongAutomated/strong - A View display of news content that shows the most recent content. This display will accept a list of content to be excluded./li /ul pYou can of course adapt the Views displays to your exact needs./p pAfter creating the Views you wish to use, you’ll need to know the machine name of the View and View display./p pOne way to retrieve these names is from the view edit URL. While editing your view, notice the URL:/p pspan class=geshifiltercode class=text geshifilter-text/admin/structure/views/view/automated_news/edit/block/code/span/p pIn my case, automated_news is the view name and block is the view display name./p pemMake a note of your machine names for Step 3/em/p h3Step 2/h3 pOn the view you wish to dedup or exclude content from, you’ll need to add and configure a contextual filter./p ol liNavigate to edit the automated content view/li liUnder “Advanced” amp; “Contextual Filters”, click add and select “Content: Nid (The node ID.)”/li liSelect “Provide default value” and choose “Fixed value”./li liLeave the Fixed value empty as we’ll provide this in code/li liUnder “More” select “Allow multiple values” and “Exclude”/li liSave the view/li /ol h3Step 3/h3 pEnable your custom module that contains the deduping code. You are welcome to a href=https://github.com/joelsteidl/dedup_viewsdownload the example module on Github/a and use it, or add the code to an existing custom module if it makes more sense. In any case, you’ll need to customize the module a little bit to work with your Views./p ol liUpdate the machine name variables from Step 1. See $featured_view_name, $featured_view_display, $automated_view_name and 2. $automated_view_display/li liSave your module/li liEnable your module/li liClear your Drupal cache/li /ol pIf everything was configured correctly, you should see your Views displays properly deduped./p h2Code Explained/h2 pa href=https://github.com/joelsteidl/dedup_viewsView Example Code on Github/a/p pThe code relies on a href=https://api.drupal.org/api/views/views.api.php/function/hook_views_pre_view/7hook_views_pre_view()/a, a Views hook. Using this hook, we can pass values to the Views display contextual filter set in Step 2. Here is a version where content IDs (NIDs) 1, 2, 5 amp; 6 are manually being passed to a view for exclusion./p div class=geshifilterpre class=geshifilter-phpspan style=color: #808080; font-style: italic;/** * @implements hook_views_pre_view(). * * https://api.drupal.org/api/views/views.api.php/function/hook_views_pre_view/7 *//span span style=color: #000000; font-weight: bold;function/span hook_views_pre_viewspan style=color: #66cc66;#40;/spanamp;span style=color: #0000ff;$view/span, amp;span style=color: #0000ff;$display_id/span, amp;span style=color: #0000ff;$args/spanspan style=color: #66cc66;#41;/spanspan style=color: #66cc66;#123;/span span style=color: #808080; font-style: italic;// Check for the specific View name and display/span span style=color: #b1b100;if/span span style=color: #66cc66;#40;/spanspan style=color: #0000ff;$view/span-gt;span style=color: #006600;name/span == ‘automated_news’ amp;amp; span style=color: #0000ff;$display_id/span == ‘block’span style=color: #66cc66;#41;/span span style=color: #66cc66;#123;/span span style=color: #0000ff;$args/spanspan style=color: #66cc66;#91;/spanspan style=color: #66cc66;#93;/span = span style=color: #cc66cc;1/spanspan style=color: #cc66cc;+2/spanspan style=color: #cc66cc;+5/spanspan style=color: #cc66cc;+6/span; span style=color: #66cc66;#125;/span span style=color: #66cc66;#125;/span/pre/div pThere are many ways you could dynamically build a list of NIDs you wish to exclude. In my example, we are loading another Views display to build a list of NIDs. The function a href=https://api.drupal.org/api/views/views.module/function/views_get_view/7views_get_view()/a loads a Views display in code and provides access to the result set./p div class=geshifilterpre class=geshifilter-phpspan style=color: #808080; font-style: italic;// Load the view/span span style=color: #808080; font-style: italic;// https://api.drupal.org/api/views/views.module/function/views_get_view/7/span span style=color: #0000ff;$view/span = views_get_viewspan style=color: #66cc66;#40;/spanspan style=color: #ff0000;'automated_news'/spanspan style=color: #66cc66;#41;/span; span style=color: #0000ff;$view/span-gt;span style=color: #006600;set_display/spanspan style=color: #66cc66;#40;/spanspan style=color: #ff0000;'block'/spanspan style=color: #66cc66;#41;/span; span style=color: #0000ff;$view/span-gt;span style=color: #006600;pre_execute/spanspan style=color: #66cc66;#40;/spanspan style=color: #66cc66;#41;/span; span style=color: #0000ff;$view/span-gt;span style=color: #006600;execute/spanspan style=color: #66cc66;#40;/spanspan style=color: #66cc66;#41;/span; nbsp; span style=color: #808080; font-style: italic;// Get the results/span span style=color: #0000ff;$results/span = span style=color: #0000ff;$view/span-gt;span style=color: #006600;result/span;/pre/div pDrupal Views is a powerful module and I like the ability to extend it even further using the extensive Views hooks API. In the case of my example, we can keep using Views with writing complex database queries./p
Categories: Drupal Feeds

Annertech: 5 Tips for a Responsive Website

Fri, 02/06/2015 - 11:36am
span class=field field-node--title field-name-title field-type-string field-label-hidden5 Tips for a Responsive Website/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-itempLast month a href=/blog/responsive-website-design-yawnI wrote about why we care about responsive websites/a, and why you should too. This month I'm going to brush the surface of how one might achieve such a goal./p h3Responsive Buzzword Bingo/h3 pI'm not about to go knee-deep into the semantics of the various jargon words surrounding this topic and their pros and cons, but here are broad descriptions of some of the approaches./p/div /div /div
Categories: Drupal Feeds

Dcycle: Two tips for debugging Simpletest tests

Fri, 02/06/2015 - 8:52am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpI have been using Simpletest on Drupal 7 for several years, and, used well, it can greatly enhance the quality of your code. I like to practice a href=http://en.wikipedia.org/wiki/Test-driven_developmenttest-driven development/a: writing a failing test first, then run it multiple times, each time tweaking the code, until the test passes./p pSimpletest works by spawning a completely new Drupal site (ignoring your current database), running tests, and destroying the database. Sometimes, a test will fail and you're not quite sure why. Here are two tips to help you debug why your tests are failing:/p h2Tip #1: debug()/h2 pThe Drupal a href=https://api.drupal.org/api/drupal/includes!common.inc/function/debug/7codedebug()/code function/a can be placed emanywhere in your test or your source code/em, and the result will appear on the test results page in the GUI./p pFor example, if when you are playing around with the dev version of your site, things work fine, but in the test, a specific node contains invalid data, you can add this line anywhere in your test or source code which is being called during your test:/p precode... debug($node); ... /code/pre pThis will provide formatted output of your code$node/code variable, alongside your test results./p h2Tip #2: die()/h2 pSometimes the temporary test environment's behaviour seems to make no sense. And it can be frustrating to not be able to simply log into it and play around with it, because it is destroyed after the test is over./p pTo understand this technique, here is quick primer on how Simpletest works:/p ul liIn Drupal 7, running a test requires a host site and database. This is basically an installed Drupal site with Simpletest enabled, and your module somewhere in the codemodules/code directory (the module you are testing does not have to be enabled)./li liWhen you run a test, Simpletest creates a brand-new installation of Drupal using a special prefix codesimpletest123456/code where code123456/code is a random number. This allows Simpletest to have an isolated environment where to run tests, but on the same database and with the same credentials as the host./li liWhen your test does something, like call a function, or load a page with, for example, code$this-gt;drupalGet('user')/code, the host environment is ignored and temporary environment (which uses the prefixed database tables) is used. In the previous example, the test loads the user page using a real HTTP calls. Simpletest knows to use the temporary environment because the call is made using a specially-crafted user agent./li liWhen the test is over, all tables with the prefix codesimpletest123456/code are destroyed./li /ul pIf you have ever tried to run a test on a host environment which already contains a prefix, you will understand why you can get table name too long errors in certain cases: Simpletest is trying to add a prefix to another prefix. That's one reason to avoid prefixes when you can, but I digress./p pNow you can try this: somewhere in your test code, add codedie()/code, this will kill Simpletest, leaving the temporary database intact./p pHere is an example: a colleague recently was testing a feature which exported a view. In the dev environment, the view was available to users with the role codemanager/code, as was expected. However when the test logged in as a codemanager/code user and attempted to access the view, the result was an Access denied page./p pBecause we couldn't easily figure it out, I suggested adding codedie()/code to play around in the environment:/p precode... $this-gt;drupalLogin($manager); $this-gt;drupalGet('inventory'); die(); $this-gt;assertNoText('denied', 'A manager accessing the inventory page does not see access denied'); ... /code/pre pNow, when the test was run, we could:/p ul liwait for it to crash,/li lithen examine our database to figure out which prefix the test was using,/li lichange the database prefix in codesites/default/settings.php/code from code''/code to (for example) code'simpletest73845'/code./li lirun codedrush uli/code to get a one-time login./li /ul pNow, it was easier to debug the source of the problem by visiting the views configuration for codeinventory/code: it turns out that features exports views with access by role using the role ID, not the role name (the role ID can be different for each environment). Simply changing the access method for the view from by role to by permission made the test pass, and prevented a potential security flaw in the code./p p(Another reason to avoid by role access in views is that User 1 often does not have the role required, and it is often disconcerting to be user 1 and have access denied to a view.)/p pSo in conclusion, Simpletest is great when it works as expected and when you understand what it does, but when you don't, it is always good to know a few techniques for further investigation./p /div/div/divdiv class=field field-name-field-tags field-type-taxonomy-term-reference field-label-abovediv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item even rel=dc:subjecta href=/tags/blog typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=blog/a/divdiv class=field-item odd rel=dc:subjecta href=/tags/planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=planet/a/div/div/div
Categories: Drupal Feeds

OpenLucius: A robot in your Drupal social intranet / extranet – why and how?

Fri, 02/06/2015 - 3:15am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpstrongIf you work with a team on projects, then there are (obviously) tasks to share/strong. Including tasks to be followed up by your clients./ppFor example: the delivery of a design in Photoshop/fireworks for their new social intranet./ppNow it can happen that somebody does not follow-up on his/her task in time resulting in problems for your planning. Usually this is not on purpose, often they simply 'forgot'./p/div/div/div
Categories: Drupal Feeds

Drupal core announcements: Princeton Critical Sprint Recap

Thu, 02/05/2015 - 7:35pm
pAt the end of January, 2015, sprinters gathered in a href=https://groups.drupal.org/node/453848 Princeton, NJ, USA/a for a focused a href=https://assoc.drupal.org/d8accelerateD8 Accelerate/a sprint designed to accelerate work on critical and upgrade-path-blocking issues related to menus, menu links, and link generation./p pThe sprint was coordinated with the a href=https://www.drupalcampnj.org/drupalcamp-nj-2015/news/drupal-8-core-critical-issues-sprint-coincide-camp4th annual DrupalCamp NJ/a. a href=https://www.drupal.org/user/49851pwolanin/a, a href=https://www.drupal.org/user/99340dawehner/a, a href=https://www.drupal.org/u/kgoelkgoel/a, a href=https://www.drupal.org/user/65776xjm/a, a href=https://www.drupal.org/user/99777Wim Leers/a, a href=https://www.drupal.org/u/mpdonadiompdonadio/a, a href=https://www.drupal.org/u/yesctYesCT/a, a href=https://www.drupal.org/user/78040effulgentsia/a, and a href=https://www.drupal.org/u/tim.plunketttim.plunkett/a participated onsite. (In addition to the D8 Accelerate Group, local Drupalists a href=https://www.drupal.org/u/davidhernandezdavidhernandez/a, a href=https://www.drupal.org/u/cilefencilefen/a, a href=https://www.drupal.org/u/crowdcgcrowdcg/a, a href=https://www.drupal.org/u/wheatpennywheatpenny/a, a href=https://www.drupal.org/u/ijf8090ijf8090/a, and a href=https://www.drupal.org/u/humanskyHumanSky/a joined the sprint primarily to work on Drupal 8 Twig and theme issues, and a href=https://www.drupal.org/user/61203EclipseGC/a and a href=https://www.drupal.org/u/evolvingwebevolvingweb/a dropped in too.)/p pThe sprint benefitted from pre-sprint planning meetings and discussion with the sprinters and a broader group of contributors (including a href=https://www.drupal.org/user/24967webchick/a and a href=https://www.drupal.org/user/35733catch/a, as well as a href=https://www.drupal.org/u/amateescuamateescu/a, a href=https://www.drupal.org/u/larowlanlarowlan/a, a href=https://www.drupal.org/user/4166Gábor Hojtsy/a, a href=https://www.drupal.org/u/bojhanBojhan/a, and a href=https://www.drupal.org/user/26398Crell/a), and daily support from webchick to track, summarize, and unblock progress with issue posts and commits so the sprinters could move on to the next steps./p pThanks to the pre-sprint planning, sprint focus, and the tremendous experience of the participants and their history of working together on hard issues in the past, this sprint achieved a very high level and breadth of success. Sprinters worked on a total of 17 critical issues (14 of which are now fixed) as well as 27 other related bugs and DX fixes. All the issues opened or worked on during the sprint can bee seen under the tag a href=https://www.drupal.org/project/issues/search?issue_tags=D8%20Accelerate%20NJD8 Accelerate NJ/a./p h2uTake-away lessons/u/h2 pIdentifying key issues in advance made the sprint more productive, as did meeting via video chat and in IRC to discuss possible solutions ahead of time. The pending deadline of the sprint helped push contributors to forge consensus and begin work on the issues before the event even happened. Never underestimate the value of a hard deadline!/p pAs always, having the group in the same room (and timezone) with a whiteboard allowed resolution of discussions that would have taken weeks via issue comments and online meetings. We also were able to scale our progress with occasional a href=http://en.wikipedia.org/wiki/Pair_programmingpair programming/a and pair code review - very effective for ramping up skilled sprinters to unfamiliar and difficult problem spaces./p pIn addition, while the sprint was happening at the same time as a href=https://www.drupalcampnj.org/DrupalCamp NJ/a activities (and for 2 days in the same building), the sprinters deliberately avoided the presentations or general Drupal mentoring they might have done in other circumstances. This relative lack of distractions was part of what we learned made the prior a href=https://groups.drupal.org/node/453798Ghent sprint/a a success and it helped maintain the focus at this sprint as well./p pThe sprinters stayed in 2 adjoining hotels, which made coordination easy./p pChanging the sprint room each day initially seemed like it might be a drawback, but instead seemed to keep things a bit fresher. Note, however, that every room had windows and natural light - especially important the first days as people were dealing with jet lag./p pIt's off-season for New Jersey in January, so the low flight costs that allowed us to fund many more people to come and also accommodated people who made travel plans as late as a week prior to the event. This allowed us to recruit more participants even with a very short time frame to plan. (When the sprint was first given the D8 Accelerate Grant at the end of December, we had only 3 confirmed attendees and just a rough idea of the issues and goals to be addressed.)/p h2uSponsors/u/h2 pThe sprint was sponsored by a a href=https://assoc.drupal.org/d8accelerateDrupal Association grant/a and by a href=www.princeton.edu/wdsPrinceton University Web Development Services/a providing space and logistical support./p pIn addition, Black Mesh sponsored all travel costs for YesCT, Forum One provided time off for kgoel, Night Kitchen Interactive provided time off for mpdonadio, and Acquia provided several employees' time (pwolanin, effulgentsia, xjm, tim.plunkett, and Wim Leers)./p h2uDaily sprint updates from webchick/u/h2 pThese daily issue summaries were originally provided by webchick on a href=https://www.drupal.org/node/2407505[meta] Finalize the menu links system/a./p h3January 27/h3 pA very hyped snow storm leads to the cancelation of all 3 flights coming from Europe - but the snow fell further North and East, so all 3 participants were able to reschedule for the next day./p h3January 28/h3 pMost participants arrived in Princeton and settled in./p h3January 29/h3 pDay one of the sprint! Occupying the lounge at the NE corner of 701 Carnegie, part of the facilities of Princeton University./p ul liIssues being worked on at the sprint are being catalogued under the a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;issue_tags_op=%3Damp;issue_tags=D8+Accelerate+NJ rel=nofollowD8 Accelerate NJ/a tag./li liFormerly critical issue a href=https://www.drupal.org/node/2413029 title= Postponed#2413029: Change LinkItem schema to also store a description/a is no longer critical; upon further inspection this is actually not something links currently do, so totally fine to move to a postponed feature for 8.1.x. Yay./li liThe critical issue at a href=https://www.drupal.org/node/2411333 title= Fixed#2411333: Create standard logic to handle a entity: URI scheme /a that was blocking other criticals got committed today. It's the first step in those outlined in #39./li lia href=https://www.drupal.org/node/2364157 title= Fixed#2364157: Replace most existing _url calls with Url objects/a, another critical issue, was also committed; this was one that had been on the go since Amsterdam, and bringing the behemoth critical at a href=https://www.drupal.org/node/2343669 title= Postponed#2343669: [PP-2] Remove _l() and _url()/a officially down to just 3 blockers./li liLooks like we arrived at consensus at a href=https://www.drupal.org/node/2407913 title= Fixed#2407913: Discuss/define the minimal UX for adding menu links to entities/a on how to implement the UI for adding menu links (and resolve a UX problem at the same time, yay!) so spun off another critical at a href=https://www.drupal.org/node/2416987 title= Fixed#2416987: Fix UI regression in the menu link form/a to do implementation./li liAlso got to RTBC on two other criticals: a href=https://www.drupal.org/node/1965074 title= Needs review#1965074: Add cache wrapper to the UrlGenerator/a and a href=https://www.drupal.org/node/2341357 title= alexpott#2341357: Views entity area config is not deployable and missing dependencies/a, but they need review from other core maintainers who are not me. :D/li liLots of great work on basically all of the issues in the a href=https://docs.google.com/a/acquia.com/document/d/1zNg3qDgWVjqqtpq41rRa8ly1WCH3JKBhKif3S-yTLNI/edit# rel=nofollowMenu link sprint hit-list/a./li /ul pimg src=/files/IMG_20150129_113016 sm.jpg //p pDinner plans were inspired by the DrupalCamp NJ theme for 2015 - a New Jersey diner! Just reading the menu was an exotic treat for the Europeans./p pimg src=/files/IMG_20150129_194113.jpg //p h3January 30/h3 pOccupying a multi-purpose room at the SE Corner of 701 Carnegie./p pAt the same time, about 70 people participated in 4 Drupal training courses in other rooms on the ground floor./p ul liCritical issue a href=https://www.drupal.org/node/2406749 title= Fixed#2406749: Use a link field for custom menu link/a made it in, making us 2 for 3 of menu link UIs that need to be updated to use link field. The final one is at a href=https://www.drupal.org/node/2416955 title= Fixed#2416955: Convert MenuLinkContent to use a link widget/a and being actively worked on as I write this!/li liThe data model of menu links is now finalized with the commit of a href=https://www.drupal.org/node/2412509 title= Fixed#2412509: Change LinkItem.uri to type 'uri' rather than 'string' and introduce user-path: scheme/a. Also added support for the user-path: schema in critical issue a href=https://www.drupal.org/node/2417333 title= Fixed#2417333: Add support for user-path: scheme to Url class/a./li liThis in turn unblocks work on the family of criticals around removing old calls to _l() and _url(). Hopefully we'll have good news on that front tomorrow! strongEDIT/strong I lied. Tonight! :) a href=https://www.drupal.org/node/2368653 title= Fixed#2368653: Replace _l in all places (3) besides one./a/li liSo far the sprint has contributed to the killing of 7 a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;status%5B%5D=1amp;status%5B%5D=13amp;status%5B%5D=8amp;status%5B%5D=14amp;status%5B%5D=4amp;priorities%5B%5D=400amp;version%5B%5D=8.xamp;issue_tags_op=%3Damp;issue_tags=D8+upgrade+path rel=nofollowD8 upgrade path blockers/a. Assuming the final 3 menu/router ones make it in (and we don't find new ones creeping about), we'll be down to only strong6/strong issues blocking a D8 upgrade path!/li liWe're now at a href=https://www.drupal.org/drupal-8.0/get-involved rel=nofollow66 criticals/a, the lowest we've been so far in the 8.0.0 beta cycle. :D/li /ul pimg src=/files/_Q4A6761.jpg //p pThanks to the prompting of Tim Plunkett, dinner was real New Jersey pizza at Nino's Pizza Star in Princeton (a local favorite among the Central NJ Drupal meetup regulars). EclipseGC even treated the group to a Nutella pizza for dessert!/p pimg src=/files/IMG_20150130_202211 sm.jpg //p h3January 31/h3 pOccupying room 111 at the Friend Engineering Center, on the campus of Princeton University. In the neighboring rooms the sessions and BoFs were happening for the 4th annual DrupalCamp NJ. The sprinters were counted among the a href=https://www.drupalcampnj.org/2015/attendees257 registered attendees/a./p ul liCritical, D8 upgrade path blocker issue a href=https://www.drupal.org/node/2416955 title= Fixed#2416955: Convert MenuLinkContent to use a link widget/a made it in early this morning, making us officially strongdone/strong with the link conversions! Yeah!/li liThis unblocked progress on a href=https://www.drupal.org/node/2417423 title= Fixed#2417423: Re-process the user-entered-paths for custom menu links when there is a menu rebuild/a, which is the last a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;status%5B%5D=1amp;status%5B%5D=13amp;status%5B%5D=8amp;status%5B%5D=14amp;status%5B%5D=4amp;priorities%5B%5D=400amp;version%5B%5D=8.xamp;issue_tags_op=%3Damp;issue_tags=D8+upgrade+path rel=nofollowD8 upgrade path blocker/a in the set, and was actively being worked on throughout the day./li liCritical issue a href=https://www.drupal.org/node/2417793 title= Fixed#2417793: Allow entity: URIs to be entered in link fields/a was the second big commit, which added support for the codeentity:/code URI scheme./li liAs a result, the critical UI issue at a href=https://www.drupal.org/node/2418017 title= Needs review#2418017: [PP-1] Implement autocomplete UI for the link widget/a is now unblocked for your patching pleasure! :) Note that there's also a href=https://www.drupal.org/node/2416987 title= Fixed#2416987: Fix UI regression in the menu link form/a which is attempting to fix a few UX regressions caused by moving to the link field./li liAlso committed a few other patches to lay the ground work for some of the remaining criticals. Good luck tomorrow, sprinters!/li /ul pimg src=/files/IMG_20150131_160647_sm.jpg //p h3February 1/h3 pOccupying a (paid) meeting room at the hotel where most sprinters were staying./p pimg src=/files/IMG_20150201_110428.jpg //p pApparently there was some football game going on too./p ul lia href=https://www.drupal.org/node/2417837 title= Fixed#2417837: Update menu link definitions when aliases change/a and a href=https://www.drupal.org/node/2417423 title= Fixed#2417423: Re-process the user-entered-paths for custom menu links when there is a menu rebuild/a made it in today, officially marking the end of a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;status%5B%5D=1amp;status%5B%5D=13amp;status%5B%5D=8amp;status%5B%5D=14amp;status%5B%5D=4amp;priorities%5B%5D=400amp;version%5B%5D=8.xamp;issue_tags_op=%3Damp;issue_tags=D8+upgrade+path rel=nofollowD8 upgrade path/a issues related to menu / routing! strongBOOM!/strong Only 6 of those upgrade path blockers left now, so the end is in sight!/li lia href=https://www.drupal.org/node/2418139 title= Fixed#2418139: Add a toUriString method to Url class and add a route: scheme/a also landed, clearing the path for more _l()/_url() removal. Next in line is a href=https://www.drupal.org/node/2404603 title= Needs work#2404603: Add proper support for Url objects in FieldPluginBase::renderAsLink(), so we can remove EntityInterface::getSystemPath()/a. Will the patch fairy visit them in the night? Stay tuned!/li liIn UI land, a href=https://www.drupal.org/node/1959806 title= Fixed#1959806: Provide a generic 'entity_autocomplete' Form API element/a made its way to RTBC, pending review from entity/field API maintainers. In the meantime, steady progress has been happening at a href=https://www.drupal.org/node/2418017 title= Needs review#2418017: [PP-1] Implement autocomplete UI for the link widget/a. Here's a preview! pimg src=https://www.drupal.org/files/issues/Screen%20Shot%202015-02-01%20at%2011.04.36%20PM.png alt=Autocomplete of node titles /br / (Note that yes, the fieldset looks wonky; that's being cleaned up in a href=https://www.drupal.org/node/2416987 title= Fixed#2416987: Fix UI regression in the menu link form/a.)/p pYes, no more need to sit down and patiently explain to your content authors what a path is, which requires explaining what a URL is, which then requires explaining what all those funny slashes are for, which then requires you developing a drinking habit. Nay! Now they can simply type the name of a piece of content on their site and voilà! It is linked./p pWhile there are still some test failures to figure out, the new UI is definitely en route (Eh? Eh? Get it? ;)) /p /li liWe're now down to a href=https://www.drupal.org/drupal-8.0/get-involved rel=nofollow64 critical issues/a in total! And while the numbers are still coming in, we already know at this point that this sprint has been responsible for either fixing or demoting at least a href=https://docs.google.com/a/acquia.com/document/d/1zNg3qDgWVjqqtpq41rRa8ly1WCH3JKBhKif3S-yTLNI/edit# rel=nofollow17 critical issues/a in total. In 4 days. And a huge blizzard. emstrongAmazing!/strong/em/li /ul pWhile most people are headed home tomorrow, there are a few stalwart hangers-on who are staying through to Tuesday./p pimg src=/files/IMG_20150201_110529.jpg /br / img src=/files/IMG_20150201_110607-silly.jpg //p h3February 2/h3 pPeople worked together at the hotel or remotely. A Farewell lunch in Princeton was followed by a brief look at the Princeton University campus as a scenic amount of snow fell again./p pimg src=/files/16262327588_bbce0882cc_o sm.jpg //p
Categories: Drupal Feeds

Mediacurrent: Introducing the Mediacurrent Dropcast!

Thu, 02/05/2015 - 3:03pm
img typeof=foaf:Image src=http://d1l4od7sxc8nwf.cloudfront.net/sites/default/files/styles/thumb_blog_spotlight/public/introducing-meidacurrent-dropcast-01.png?itok=f65GiXYs width=200 height=152 / pspan style=line-height: 1.538em;Our inaugural episode. Team Kool-Aide starts a podcast and we talk about a variety of topics taken from a href=http://www.theweeklydrop.com/ target=_blankThe Weekly Drop/a./span/p paudio controls= src=https://mis-marketing.s3.amazonaws.com/Dropcast/Dropcast-Episode-0.mp3Your browser does not support the audio element./audiobr /a href=https://mis-marketing.s3.amazonaws.com/Dropcast/Dropcast-Episode-0.mp3 target=_blankEpisode 0 Audio Download Link/a/p p /p
Categories: Drupal Feeds

more onion - devblog: Stale static cache - you're likely to have seen this bug!

Thu, 02/05/2015 - 2:18pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even pThis week I've finally found the core of several issues that I've had in the past. Are you using install-profiles or features? Then this bug is likely to have affected you too./p /div/div/divdiv class=field field-name-field-tag field-type-taxonomy-term-reference field-label-inline clearfixh3 class=field-labelTags: /h3ul class=links inlineli class=taxonomy-term-reference-0a href=/tags/drupal-planetDrupal Planet/a/lili class=taxonomy-term-reference-1a href=/tags/bugbug/a/lili class=taxonomy-term-reference-2a href=/tags/corecore/a/lili class=taxonomy-term-reference-3a href=/tags/site-builderssite-builders/a/li/ul/div
Categories: Drupal Feeds

Drupal core announcements: All the sprints at and around Drupal Dev Days Montpellier France

Thu, 02/05/2015 - 12:57pm
div class=field field-type-datestamp field-field-start7 div class=field-items div class=field-item odd div class=field-label-inline-first Start:nbsp;/div span class=date-display-start2015-04-13 09:00/spanspan class=date-display-separator - /spanspan class=date-display-end2015-04-19 09:00 Europe/Zurich/span /div /div /div div class=field field-type-text field-field-event-type div class=field-items div class=field-item odd Sprint /div /div /div div class=field field-type-text field-field-url div class=field-items div class=field-item odd pa href=http://montpellier2015.drupaldays.org title=http://montpellier2015.drupaldays.orghttp://montpellier2015.drupaldays.org/a/p /div /div /div pimg src=https://groups.drupal.org/files/9963614865_0e7fd208ed_m.jpg style=float: right; margin: 0 0 2em 2em; /We have a great tradition of extended sprints around big Drupal events including DrupalCons and Drupal Dev Days. Given that a lot of the Drupal core and contrib developers fly in for these events, it makes a lot of sense to use this opportunity to start sooner and/or extend our stay and work together in one space on the harder problems./p pa href=http://montpellier2015.drupaldays.org/Drupal Dev Days Montpellier France/a is next up! Monday April 13 2015 to Sunday April 19 2015. The host event is looking for sponsors to help make the sprints happen, so you have a comfortable environment with internet, coffee, tea and maybe food. There are already various sprints signed up including emMultilingual, Drupal 8 critical burndown, documentation, and Frontend/em. We are really friendly and need all kinds of expertise!/p pstrongNow is the time to consider if you can be available and book your travel and hotel accordingly!/strong/p div style=text-align: center; margin: 2em; a href=https://docs.google.com/spreadsheet/ccc?key=0Aqxsrc5BVkagdFZXZ0lWWk5sVUIwbWZtV0RyWWhzNUEamp;usp=sharing#gid=0 class=link-buttonspanJoin the sprinters -- sign up now!/span/a/div !--break--!--break--!-- div style=text-align: center;img src=https://groups.drupal.org/files/Berlage2.jpg //div --!-- div style=text-align: center;img src=https://groups.drupal.org/files/Berlage2.jpg //div --div style=border: 1em solid #ffffcc; padding: 1em; margin-bottom: 2em; h3 class=contentPractical details/h3 dl dtDates/dt ddApril 13 to April 19/dd dtTimes and locations/dt dd table tr thDay/Time/th thLocation/th /tr tr tdApril 13-19, 09:00 to 18:00./td tdTBA, a href=https://www.google.com/maps/TBA/a/td /tr tr tdApril 13-19, 18:00 to 24:00./td tdHotel lobby, TBA, a href=https://www.google.hu/mapsTBA/a./td /tr /table /dd /dl /div h3 class=contentLooking for sponsors/h3 pWe are looking for more sponsors to be able to pay for extra expenses on the sprint too. If you are interested sponsoring or if you need sponsors to cover expenses, please contact me at a href=https://drupal.org/user/258568/contact title=https://drupal.org/user/258568/contacthttps://drupal.org/user/258568/contact/a/p h3 class=contentFrequently asked questions/h3 h4What is a sprint?/h4 pDrupal sprints are opportunities to join existing teams and further Drupal the software, our processes, drupal.org and so on./p h4Do I need to be a pro developer?/h4 pNo, not at all. First of all sprints include groups working on user experience, designs, frontend guidelines, drupal.org software setup, testing improvements, figuring out policies, etc. However you can be more productive at most sprints if you have a laptop./p h4How come there are 7 consecutive days of sprints?/h4 pWe are all travel to the same place. We try to use this time to share our knowledge as well as further the platform in all possible ways. Therefore there is almost always an opportunity and a place to participate in moving Drupal forward./p h4What if I'm new to Drupal and/or sprinting, how can I join?/h4 pThere will be no formal mentoring, but there will be a place for you. Once you get there, hopefully someone will introduce themselves and help you find your place in the sprint. If not, please reach out and say, Hi, I'm new to sprinting, but I want to help. And then, someone will find you a group of sprinters to join. Expect your first day to be mostly about finding a group or a couple issues, reading them, understanding, and getting set up to work on them. Your second day you will probably get some progress on things. And then your third, forth, etc day *you* will be getting things done (and maybe helping people who are there for their first day.)/p h4I worked on Drupal before, which sprints are for me?/h4 pIf you have experience with Drupal issues and maybe already know a team/topic, jump right in, but of course if you have questions, there are always plenty of friendly people to help you. /p h4Why do I have to sign up?/h4 pThese sprints are broken down to teams working on different topics. It is a href=https://docs.google.com/spreadsheet/ccc?key=0AlRKD0XsivA1dDRIZEFCeXR2ZF9tQzVTU0lRN2lWRncamp;usp=drive_web#gid=0very important that you sign up for them/a, so we know what capacity to plan with, so we have enough space (and maybe food/coffee)./p h4Further questions?/h4 pAsk at a href=https://drupal.org/user/258568/contact title=https://drupal.org/user/258568/contacthttps://drupal.org/user/258568/contact/a, I am happy to answer./p style#node-427578 .picture, #node-427578 h3 { display: none; } #node-427578 .field-type-datestamp { margin: 0 0 2em 0; } #node-427578 dl { margin-bottom: 1em; } #node-427578 dd { margin-top: 0.5em; } #node-427578 h3.content { display: block; }/style
Categories: Drupal Feeds

Drupal Watchdog: Baby Steps

Thu, 02/05/2015 - 10:39am
div class=field field--article-edit-printtype field-type-list-text field-label-hidden field--rss Column /div div class=field field--article-body field-type-text-long field-label-hidden field--rss pimg src=http://cdn1.drupalwatchdog.com/sites/default/files/images/web/4.1-BabySteps.jpg alt=Confused looking people class=img-responsive img-thumbnail margin-left width=66% align=right /FADE IN:br / INT. RONNIE’S APARTMENT - NIGHTbr /emRonnie is on the phone. Vanessa is on her iPad, chuckling./em/p pstrongRONNIE:/strong em(into phone)/em Jeremy, calm down – I understand. You need the Baby Steps column in three days. No problem, man, I'm on it... Okay. Cool. em(he disconnects)/em Damn. em(to Vanessa)/em What’s so funny?/p pstrongVANESSA:/strong This comic I follow on Twitter./p pstrongRONNIE:/strong Did you know that Twitter is built on Drupal? So is YouTube and Facebook and – /p pstrongVANESSA:/strong – Glad to see you’re getting somewhere./p pstrongRONNIE:/strong Hey, I already downloaded a WAMP server./p pstrongVANESSA:/strong A what?/p pstrongRONNIE:/strong WAMP. It’s an acronym for Windows... Apache... MySQL... PHP. /p pstrongVANESSA:/strong Which means?/p pstrongRONNIE:/strong I have no idea./p pstrongVANESSA:/strong You’re procrastinating./p pstrongRONNIE:/strong emNo!/em Yeah. I didn't realize, when I proposed writing the column, how complicated Drupal is. You want coffee?/p pstrongVANESSA:/strong It's eleven o'clock. I'm going to bed./p pstrongRONNIE:/strong I'll just watch one of the instructional videos they have./p pstrongVANESSA:/strong Like last night?/p pstrongRONNIE:/strong Yeah?/p pstrongVANESSA:/strong You watched emPulp Fiction/em for the hundredth time./p pstrongRONNIE:/strong emPulp Fiction/em has always been an inspiration./p pstrongVANESSA:/strong And the night before that, emAmerican Psycho./em /p pstrongRONNIE:/strong Also inspiring./p pstrongVANESSA:/strong Goodnight. Don't wake me up./p pemShe’s gone. Ronnie grabs the remote./em/p pON TV: emThe Big Lebowski./em/p pINT. MIRA SUSHI - NIGHT/p pemRonnie, gloomy, sits at the bar. Polo pours a martini and removes the empty glass./em/p pstrongPOLO: /strong She broke up with you?/p pstrongRONNIE:/strong No, man, we're just... we're on, like... a hiatus. Until I have my website built.br /emAs Ronnie slurps down most of his drink – /em/p /div
Categories: Drupal Feeds

Merge: What we learned by building our new company site in Drupal 8

Thu, 02/05/2015 - 10:25am
div class=field field-name-field-main-img field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/2015/02/09/drupal-8-learnings-building-new-siteimg src=http://blog.merge.nl/sites/merge_blog/files/styles/square_thumbnail/public/table-tools.jpg?itok=H8UI-3HT width=150 height=150 alt=Table tools office chair //a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpLast week, we launched our newnbsp;a href=http://merge.nl/company site/anbsp;built in Drupal 8. Previously, it was a Drupal 6 site built ages ago and in high need of a redesign anyway. So, with Drupal 8 around the corner, what better way to learn Drupal 8 andnbsp;a href=https://www.drupal.org/drupal-8.0/get-involvedhelp development/anbsp;at the same time?/p pWe started exploringnbsp;around the time of the first beta, and decided to write up all the bumps in the road we encountered along the way. Overall, it was a great experience and we even managed to squeeze in anbsp;a href=https://www.drupal.org/node/2373283patch/anbsp;ornbsp;a href=https://www.drupal.org/node/2414279two/anbsp;to fix some bugs.nbsp;Drupal 8 clearly has a lot ofnbsp;improvements for everybody:nbsp;a href=https://www.drupal.org/drupal-8.0/developersdevelopers/anbsp;willnbsp;enjoy the solid framework,nbsp;a href=https://www.drupal.org/drupal-8.0/themersfrontend people/anbsp;get Twig,nbsp;and I can't wait to show clients thenbsp;a href=https://www.drupal.org/node/1872284quick edit/anbsp;functionality./p /div/div/div
Categories: Drupal Feeds

Chocolate Lily: Customizing the Open Outreach distribution: A case study

Thu, 02/05/2015 - 10:15am
div class=field field-name-body field-type-text-with-summary field-label-hidden view-mode-rssdiv class=field-itemsdiv class=field-item even property=content:encodedpAs part of a long-term collaborative partnership with the University of Victoria's a href=http://www.uvic.ca/socialsciences/geographyGeography Department/a, Chocolate Lily has been working on producing a customized version of a href=http://openoutreach.orgOpen Outreach/a suitable for community mapping. In a nutshell, we have been able to take the work we produced on a customized site build in 2013 and bundle those features into a new distribution called a href=http://drupal.org/project/storiedmaps_coreStoriedMaps/a./p/div/div/div
Categories: Drupal Feeds

Code Karate: An introduction to Git (part 5): Using Git with Drupal and Git hosting services

Thu, 02/05/2015 - 3:18am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpIn a href=/blog/introduction-git-part-4-git-branchesAn Introduction to Git Part 4/a, you le/p/div/div/div
Categories: Drupal Feeds

Drupal core announcements: Drupal core updates for Feb 4, 2015

Wed, 02/04/2015 - 7:02pm
pSince a href=https://groups.drupal.org/node/454488the last Drupal Core Update on January 12th/a, the Drupal Association a href=https://assoc.drupal.org/d8accelerate/awardedawarded the first round/a of the new a href=https://assoc.drupal.org/d8accelerateemD8 Accelerate/em grants/a; a href=https://assoc.drupal.org/2015-nominations-opennominations for the Drupal Association Director at Large have opened/a (and there are a href=https://assoc.drupal.org/election/8/candidatesalready some candidates/a); and, in spite of the blizzard raging outside, the contributors at the a href=https://www.drupalcampnj.org/drupalcamp-nj-2015/news/drupal-8-core-critical-issues-sprint-coincide-campDrupal 8 core critical issues sprint/a at DrupalCamp NJ a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;issue_tags_op=%3Damp;issue_tags=D8+Accelerate+NJfixed 12 critical issues, 4 major issues, plus moved another 7 criticals and 7 majors forward, and more/a in a href=https://www.drupal.org/node/2407505the Drupal 8 menu links system/a!/p pWe're making excellent progress on Drupal 8! a href=https://www.drupal.org/core-mentoring/criticalsCore critical hours/a have been a href=https://www.drupal.org/project/issues/search/drupal?text=amp;assigned=amp;submitted=amp;project_issue_followers=amp;issue_tags_op=%3Damp;issue_tags=Critical+Office+Hoursa great success/a and the number of critical issues is steadily falling:/p pimg src=https://groups.drupal.org/files/dcu-2015-02-04-critical-count_0.png alt=Graph of remaining critical issues during the Drupal 8 beta, showing an encouraging falling trend starting after about mid-November 2014. //p pSome other highlights of the month were:/p ul lia href=http://cgit.drupalcode.org/drupal/commit/?id=6e88265b1f5fd984c7bff8207e214982ec260e3eDrupal turned 14/a; and a href=https://www.drupal.org/user/2569096Joe Saylor/a posted a href=https://assoc.drupal.org/blog/jsaylor/few-things-unwrap-drupals-birthdaythe results of the recent community survey/a./li liThe Drupal.org team posted a href=https://assoc.drupal.org/blog/tvn/drupal.org-team-week-notes-31-2014-reviewthe Drupal.org usage statistics for 2014/a./li liAmazee Labs a href=http://www.amazeelabs.com/en/blog/launch-of-d8-customer-websitelaunched their first Drupal 8 customer website/a!/li liPantheon a href=https://www.getpantheon.com/blog/open-source-open-strategy-announcing-greg-and-katehired/a long-time Drupal contributors a href=https://www.drupal.org/u/greg.1.andersonGreg Anderson/a and a href=https://www.drupal.org/u/kate-kligmanKate Klingman/a as dedictaed Open Source Contributors!/li lia href=https://www.drupal.org/node/2350013The emPromoted to front page/em and emSticky at top of lists/em checkboxes and their descriptions were re-worded/a to be less-technical and easier to understand./li liOn the front-end, a href=http://drupal.org/node/2306407breadcrumbs were removed from the page template and put into a block/a, a href=https://www.drupal.org/node/2308187linking to a file from a Twig template was made easier/a, and a href=https://www.drupal.org/node/2329753HTML classes were moved from preprocess functions into templates/a./li liOn the back-end, a href=https://www.drupal.org/node/2366539codeformat_plural()/code was removed/a, and a href=https://www.drupal.org/node/2403485comments now use entity validation/a./li liOn and off the island, a number of third-party libraries were updated: a href=https://www.drupal.org/node/2414235Symfony/a, a href=https://www.drupal.org/node/2415111CKEditor/a, a href=https://www.drupal.org/node/2387027PHPUnit/a, a href=https://www.drupal.org/node/2403269jQuery UI/a, a href=https://www.drupal.org/node/2396307html5shiv/a, a href=https://www.drupal.org/node/2397711normalize.css/a and a href=https://www.drupal.org/node/2409121jQuery Touch Punch/a; and a href=https://www.drupal.org/node/2373197it became easier to install Drupal to the correct folder with Composer/a./li liOn the performance front, a href=https://www.drupal.org/node/2368769Route enhancers are now run lazily/a, a href=https://www.drupal.org/node/2348679page caching code was moved to the middleware/a, and a href=https://www.drupal.org/node/2368797codedrupalSettings.ajaxPageState/code was optimized/a./li lia href=https://www.drupal.org/u/BerdirSascha Grossenbacher (Berdir)/a made a href=https://github.com/berdir/d8modulestatusa script/a that run tests on all the contributed modules with D8 branches and testing enabled and a href=http://d8ms.worldempire.ch/displays the results/a./li /ul h3How can I help get Drupal 8 done?/h3 pSee a href=https://www.drupal.org/drupal-8.0/get-involvedHelp get Drupal 8 released!/a for updated information on the current state of the release and more information on how you can help./p pEven if you're not yet familiar with Drupal 8's code, we need people with Drupal 7 skills to make a href=https://www.drupal.org/node/2267715changes to Drupal.org's infrastructure/a and fix a href=https://www.drupal.org/node/2362065contribution barriers/a so that Drupal.org is ready for Drupal 8's release. Check out a href=https://groups.drupal.org/drupal-org-testing-infrastructurethe meeting notes/a for more information./p pWe're also looking for more contributors to help compile these posts. a href=https://www.drupal.org/user/65776/contactContact xjm/a if you'd like to help!/p h2Drupal 8 In Real Life/h2 ul lia href=https://latinamerica2015.drupal.org/DrupalCon Latin America 2015/a is coming up fast! It starts on strongFebruary 10th/strong! If you're looking to a href=https://latinamerica2015.drupal.org/ticketsbuy a ticket/a, you need to do so before February 8th if you want to take advantage of regular ticket pricing! The price goes up USD$36 if you wait to buy your tickets at the door!/li lia href=https://groups.drupal.org/node/455093The MidWest Developers Summit/a is happening on strongAugust 12—15/strong. More details later this year./li /ul h2Whew! That's a wrap!/h2 pDo you follow a href=https://drupal.org/planetDrupal Planet/a with devotion, or keep a close eye on the a href=http://www.drupical.com/Drupal event calendar/a, or codegit pull origin 8.0.x/code every morning without fail before your coffee? We're looking for more contributors to help compile these posts. You could either take a few hours once every six weeks or so to put together a whole post, or help with one section more regularly. If you'd like to volunteer for helping to draft these posts, please a href=https://drupal.org/node/2220285follow the steps here/a!/p
Categories: Drupal Feeds