Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 4 min 56 sec ago Blog: AGILEDROP: Other Top Drupal Blogs from January

Tue, 02/14/2017 - 10:05
a href= src= //a Maybe a little late, but nevertheless, it's time to present you the best Drupal blogs that were written in the previous month. So, here's the work by other authors from January. We begin our overview with Danny Sipos, who wrote Advanced techniques for route access control in Drupal 8. In his article, he looked at an example of a complex access requirement. He used a trick that opened the door to some complex access restriction rules on your routes. You can read the full blog post here. Our second choice was How to Build Drupal Slideshow Using Views and Slick by Daniel Pickering. The… a href= MORE/a

MidCamp - Midwest Drupal Camp: We want you to speak at MidCamp 2017!

Tue, 02/14/2017 - 05:44
h2Session Submissions close Saturday, February 18th/h2 pMidCamp is looking for folks just like you to speak to our Drupal audience! Experienced speakers are always welcome, but MidCamp is also a great place to start for first-time speakers. We currently have 69 submitted sessions and are looking for more.nbsp; Please see our a href= tracks page/a to see what kind of talks we are looking for. Subject matter can be Drupal, PHP in general, related technologies, soft skills, testing, tools, workflow, etc./p pSessions submission will close Saturday, February 18th, 2017, so don#39;t delay!/p h3Find out more at:/h3 ul lia href= your Session/a/li lia href= FAQs/a/li lia href= Topics/a/li lia href= Terms and Conditions/a/li lia href= the list of Submitted Sessions/a/li /ul h2Buy a Ticket/h2 pTickets and Individual Sponsorships are available on the site for MidCamp 2017. a href= here to get yours!/a/p h2Schedule of Events/h2 ul liThursday, March 30th, 2017 - Training and Sprints/li liFriday, March 31st, 2017 - Sessions and Social/li liSaturday, April 1st, 2017 - Sessions and Social/li liSunday, April 2nd, 2017 - Sprints/li /ul h2Sponsor MidCamp 2017!/h2 pAre you or your company interested in becoming a sponsor for the 2017 event? Sponsoring MidCamp is a great way to promote your company, organization, or product and to show your support for Drupal and the Midwest Drupal community. It also is a great opportunity to connect with potential customers and recruit talent./p h3Find out more at:/h3 ul lia href= Sponsor Prospectus/a/li lia href= our amazing sponsors!/a/li /ul h3Stay connected:/h3 ul liVisit a href=http://www.midcamp.org liLike a href= on Facebook/a/li liFollow a href= on twitter/li liWatch a href= on Youtube/a/li /ul pemquot;The time is coming,quot; the walrus said, quot;to talk of many thingshellip;quot;/em/p

Cocomore: From A Small Start-up To The Big Agency - A Retrospective Of More Than A Decade Of Agency Life

Tue, 02/14/2017 - 00:00
pMany say working in an agency is a world of its own. After eleven years of agency life I can only confirm this notion. When I started at Cocomore, our IT department was still being built. Today we have 160 employees at three locations, and our departments have become increasingly specialized over time. It is about time to look back on the beginnings of the agency and the technical development during the past years./p

Dries Buytaert: How Nasdaq offers a Drupal distribution as-a-service

Mon, 02/13/2017 - 21:29
pfigure class=figurediv class=img style=border: 1px solid #ccc; display: inline-block img src= style=display:block alt= //div figcaption style=font-style: italic; color: #777;Nasdaq CIO and vice president Brad Peterson at the Acquia Engage conference showing the Drupal logo on Nasdaq's MarketSite billboard in Times Square NYC./figcaption/figure/p pLast October, I shared the news that a href= Corporate Solutions has selected Acquia and Drupal 8/a for its next generation Investor Relations and Newsroom Website Platforms. 3,000 of the largest companies in the world, such as Apple, Amazon, Costco, ExxonMobil and Tesla are currently eligible to use Drupal 8 for their a href= relations websites/a. /p pHow does Nasdaq's investor relations website platform work? /p pFirst, Nasdaq developed a Drupal 8 distribution that is optimized for creating investor relations sites. They started with Drupal 8 and extended it with both contributed and custom modules, documentation, and a default Drupal configuration. The result is a version of Drupal that provides Nasdaq's clients with an investor relations website out-of-the-box. /p pNext, Nasdaq decided to offer this distribution as-a-service to all of their publicly listed clients through a href= Cloud Site Factory/a. By offering it as-a-service, Nasdaq's customers don't have to worry about installing, hosting, upgrading or maintaining their investor relations site. Nasdaq's new IR website platform also ensures top performance, scalability and meets the needs of strict security and compliance standards. Having all of these features available out-of-the-box enables Nasdaq's clients to focus on providing their stakeholders with critical news and information. /p pOffering Drupal as a web service is not a new idea. In fact, I have been talking about a href= service models for distributions since 2007/a. It's a powerful model, and Nasdaq's Drupal 8 distribution as-a-service is creating a win-win-win-win. It's good for Nasdaq's clients, good for Nasdaq, good for Drupal, and in this case, good for Acquia./p pIt's good for Nasdaq's customers because it provides them with a platform that incorporates the best of both worlds; it gives them the maintainability, reliability, security and scalability that comes with a cloud offering, while still providing the innovation and freedom that comes from using Open Source. /p pIt is great for Nasdaq because it establishes a business model that leverages Open Source. It's good for Drupal because it encourages Nasdaq to invest back into Drupal and their Drupal distribution. And it's obviously good for Acquia as well, because we get to sell our Acquia Site Factory Platform./p pIf you don't believe me, take Nasdaq's word for it. In the video below, which features Stacie Swanstrom, executive vice president and head of Nasdaq Corporate Solutions, you can see how Nasdaq pitches the value of this offering to their customers. Swanstrom explains that with Drupal 8, Nasdaq's IR Website Platform brings clients the advantages of open source technology, including the ability to accelerate product enhancements compared to proprietary platforms./p iframe width=853 height=480 src= frameborder=0 allowfullscreen=/iframe

CU Boulder - Webcentral: Upgrading A Drupal 7 Module to Drupal 8 - Adding Routing and Menu Links

Mon, 02/13/2017 - 20:10
div class=field field-name-field-image field-type-image field-label-hidden img class=image-medium src= width=600 height=212 alt=Invite Users Page / /div div class=field field-name-field-image field-type-image field-label-hidden img class=image-medium src= width=600 height=349 alt=Users Overview Page / /div div class=field field-name-field-image field-type-image field-label-hidden img class=image-medium src= width=600 height=334 alt=Invite Management Page / /div div class=field field-name-field-image field-type-image field-label-hidden img class=image-medium src= width=600 height=290 alt=Invite Configuration Form / /div div class=field field-name-field-image field-type-image field-label-hidden img class=image-medium src= width=600 height=294 alt=Invite Config Form Menu Link / /div div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpWhen planning to upgrade a module from Drupal 7 to Drupal 8, I was originally going to start out doing TDD and unit testing before I wrote any code for this module, but since I know very little about OOP practices and Drupal 8 changes, I figured it would be easier to start out with the simplest test I could think of: visiting a path and getting a 200 response code.nbsp;/p pIn my module, an action link is added to admin/people in order for users to navigate to the form where they invite new users to thenbsp;site. To test if the path exists and returns a 200 HTTP response, I have to create that part of the module first./p h2Learn By Example/h2 pI've mentioned before that my module depends on the Token module and that I would be using examples in that codebase when I need guidance...which is all the time currently :) So, I looked in that module's routing file to copy an example route.nbsp;/p pIf you don't know anything about how Symfony's routing system works, then you should read up on a href='s documentation for routing/a. To start, you need to create a .routing.yml file. My user_external_invite.routing.ymlnbsp;file started out like this:/p pre code user_external_invite.invite_users: path: '/admin/people/invite/invite' defaults: _controller: '\Drupal\user_external_invite\Controller\UserInviteController::inviteUsers' _title: 'Invite Users' requirements: _permission: 'invite users' user_external_invite.manage_invites: path: '/admin/people/invite/operations' defaults: _controller: '\Drupal\user_external_invite\Controller\UserInviteController::manageInvites' _title: 'Manage Invites' requirements: _permission: 'invite users' user_external_invite.settings.form: path: '/admin/config/people/invite' defaults: _form: '\Drupal\user_external_invite\Form\InviteSettingsForm' _title: 'User External Invite Settings' requirements: _permission: 'administer users' /code /pre pAs you can see, at the top level you start out with the route name which will be your module's machine name and the purpose of the route. I only have three routes for my module: the page where you can invite users, the page where you can manage invites that have been sent out, and the configuration page for admins.nbsp;/p h2Adding A Controller/h2 pThe part of the routing file that is most different, at least for me, is the _controller parameter. In Drupal 7, the page callback part of hook_menu() essentially acted as the controller; however, the function specified generally ended up in the same .module file making it simple to connect the two parts together./p pBy placing the controller file in a certain directory structure, Drupal will automatically load that class and call the method you specify. The exact structure of your file placement is kind of arbitrary, but it is common to separate different functionality into different folders. So, I have src/Controller/ for controller classes and src/Form for forms. Entities, Plugins, and Event Subscribersnbsp;are other examples of other types of things that might warrant their own directories; however, you can place all your files directly in the src directory if you were lazy and wanted to do so. Don't be lazy, though; I won't pick you to join my Drupal dodgeball team if you are./p pre code class UserInviteController extends ControllerBase { public function inviteUsers() { return array( '#markup' =gt; 'Page Content...', ); } } /code /pre pAlthough my controller has a lot more going on in it, in order to get a working page up and running that we can browse to I had to write an inviteUsers function and return something in it. After adding that code and clearing the cache, I can navigate to admin/people/invite/invite and see the fruits of my labor.nbsp;/p img src= width=1200 height=424 alt=Invite Users Page class=image-large / pnbsp;/p h2Action Links/h2 pWhile adding a link to that page of the module is all fine and good, I still have no way of having users know that can getnbsp;to that page since it existed as an action link in Drupal 7 on the user overview page.nbsp;/p pIf you remember the good ole days of hook_menu(), you could define an itemnbsp;as a MENU_LOCAL_TASK with a MENU_DEFAULT_LOCAL_TASKnbsp;item to render a page with two or more tabs on it. In Drupal 8, those tabs have been split up into files for tasks and actions. The definitions for tasks and actions are very similar; the distinction is in where you want them placed on the page.nbsp;/p pre code user_external_invite.invite_users: route_name: user_external_invite.invite_users title: 'Invite user' appears_on: - entity.user.collection /code /pre pFor users to see the invite page from admin/people as it had been placed in Drupal 7, I had to create a user_external_invite.links.action.yml file. In it, I provided the route that matches the Invite user page and told Drupal what page the action link appears on. I ended up searching the User module's files in order to get the parent route to place in the appears_on key./p img src= width=1200 height=697 alt=Users Overview Page class=image-large / pnbsp;/p h2Local Tasks/h2 pTo add tabs for the invite management pages, I had to create another file specifically for the local tasks, user_external_invite.links.task.yml, a.k.a tabs.nbsp;/p pre code user_external_invite.invite: route_name: user_external_invite.invite_users base_route: user_external_invite.invite_users title: 'Invite Users' weight: 1 user_external_invite.manage: route_name: user_external_invite.manage_invites base_route: user_external_invite.invite_users title: 'Manage Invites' weight: 2 /code /pre pInstead of having duplicate entries to define the base path and the default tab, a base_route key is added to define link hierarchy. This key is essentially the same as the appears_on key for action items. For the default tab, the base_route and route_name are the same, and for any subsequent tabs, the base route will be the default tab's route name. Once you add that code and rebuild the cache, you should see tabs show up on your module's page.nbsp;/p img src= width=1200 height=669 alt=Invite Management Page class=image-large / pnbsp;/p h2Forms/h2 pThe last path I need users to get to for my module is a configuration form. In Drupal 7, you could use drupal_get_form() as a special callback to load a form at a path, and in Drupal 8, the _form key takes over that functionality. In InviteSettingsForm.php, I have a class that extends ConfigFormBase giving me some useful functionality related to getting configuration objects to manipulate.nbsp;/p pre code class InviteSettingsForm extends ConfigFormBase { /** * InviteSettingsForm constructor. * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory */ public function __construct(ConfigFactoryInterface $config_factory) { parent::__construct($config_factory); } /** * @param \Symfony\Component\DependencyInjection\ContainerInterface $container * @return static */ public static function create(ContainerInterface $container) { return new static( $container-gt;get('config.factory') ); } /** * {@inheritdoc} */ public function getFormId() { return 'user_external_invite_settings_form'; } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return ['user_external_invite.settings']; } public function buildForm(array $form, FormStateInterface $form_state) { $config = $this-gt;config('user_external_invite.settings'); // Days invite valid for. $form['user_external_invite_days_valid_for'] = array( '#type' =gt; 'textfield', '#title' =gt; t('Number of days invites are valid'), '#description' =gt; t(Invites are set to expire so many days after they are created. If a user hasn't accepted the invite by that time, then you will have to send a new invite to grant that user a role.), '#default_value' =gt; $config-gt;get('user_external_invite_days_valid_for'), '#element_validate' =gt; array('element_validate_number'), '#maxlength' =gt; 3, ); // More form items... // Submit button. $form['actions'] = ['#type' =gt; 'actions']; $form['actions']['submit'] = [ '#type' =gt; 'submit', '#value' =gt; $this-gt;t('Save configuration'), ]; return parent::buildForm($form, $form_state); } /code /pre pThe getFormId() and getEditableConfigNames() methods are required when extending ConfigFormBase. The form ID can be arbitrary, but I made it resemble the machine name in the routing.yml file. The editable config name should correspond to the file you would have in config/install for default configuration settings./p img src= width=1200 height=581 alt=Invite Configuration Form class=image-large / pnbsp;/p pAfter adding that code and clearing the cache, my form shows up at the right path. However, a user would have to know the exact path of the form in order to see it until I declare a menu link pointing to the form's route./p pre code user_external_invite.settings: title: 'User External Invite Settings' description: 'Configure roles to invite and invite message settings.' route_name: user_external_invite.settings.form parent: user.admin_index /code /pre pThe tricky part of adding is finding the parent route to link it to. For some reason, the admin/config/people route is different than all of the other routes on admin/config so to find out which parent route I needed to add, I used Drupal Console and the drupal router:debug command. When I grepped that command for config routes, every other top level section on admin/config had a route that started off with system.admin_config_ while the people config section was user.admin_index. Go figure.nbsp;/p pAfter adding that menu links file and clearing the cache, I can see the link to the config form in the people section./p img src= width=1200 height=588 alt=Invite Config Form Menu Link class=image-large / pnbsp;/p pWith those three links files and the routing file, you should be good to go setting up routing in your Drupal 8 module. Now comes the hard part of writing the code to fill out those pages you've just made links for. nbsp;/p /div/div/div Developer Blog

Jeff Geerling's Blog: Tips for Managing Drupal 8 projects with Composer

Mon, 02/13/2017 - 19:12
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpIt's been over a year since Drupal 8.0.0 was released, and the entire ecosystem has improved vastly between that version's release and the start of the 8.3.0-alpha releases (which a href= happened/a a couple weeks ago)./p pOne area that's seen a vast improvement in documentation and best practices—yet still has a ways to go—is Composer-based project management./p pAlong with a thousand other 'get off the island' initiatives, the Drupal community has started to take dependency management more seriously, by integrating with the wider PHP ecosystem and maintaining a a href= packagist/a for Drupal modules, themes, and other projects./p/div/div/div

Web Wash: Webinar: How to Build Custom Search Pages in Drupal 8

Mon, 02/13/2017 - 18:13
The definition of what a search page is varies from project to project. Some clients are happy with the core Search module, others want a full blown search engine. Drupal offers a wide range of options when it comes to building custom search pages. You can create a basic search page using the core Search module or if you're looking for something advanced you could use Search API.

Evolving Web: Drupal 8 Configuration Management for Multi-site

Mon, 02/13/2017 - 16:17
a href= img src= width=220 height=100 alt=Drupal 8 Configuration Management for Multi-site typeof=Image class=img-responsive //apOften, you develop a website to be installed and used once, by one organization. But sometimes, for larger organizations, you need to develop a series of websites that are very similar. This case is very common in big institutions with independent departments or branches, such as:/pa href= hreflang=enread more/a DIY Drupal hosting: OpenDevShop

Mon, 02/13/2017 - 12:49
div class=field field--name-field-featured-image field--type-image field--label-hiddendiv class=field__itemsdiv class=field__item evenimg class=panopoly-image-half src= alt=DIY Drupal hosting OpenDevShop title=DIY Drupal hosting OpenDevShop //div/div/divdiv class=post__body pemCheckout a href= and a href= 1/a if you haven't already./em/p pRicha(all proper nouns changed to protect privacy), our QA, is doing the final testing of a client feature which will go live in a while. Its 4 PM and Friday Happy hour will start soon. Richa is testing a Drupal 7 site packed with tons of contrib and custom modules, and in case you are wondering, yes, we do deploy on Friday evenings at Acme Inc. Its like any other day here./p /div

Out About On The Third Rock: Agile Coaching: A guide for project managers stepping into a Scrum team – Health warnings!

Mon, 02/13/2017 - 00:26
pThis is first of a series of blogs to support traditional project managers I am coaching. To help get their bearings in deep and murky waters of Agile projects and Scrum teams. Before the scrum purists amongst you vehemently shake your heads or berate me on the title, consider being pragmatic. In the Professional Services world there [#8230;]/p pThe post a rel=nofollow href= Coaching: A guide for project managers stepping into a Scrum team #8211; Health warnings!/a appeared first on a rel=nofollow href=http://www.kubairshirazee.comAgile Transformation - Eradicating Poverty - Human Rights - Open Source - Random - Batman/a./p

Vardot: Why Open Source Will Dominate the Market

Sun, 02/12/2017 - 23:24
a href=/blog/categories/case-studiesCase Studies/a span class=read-timeRead time: 7 minutes/span img typeof=foaf:Image class=img-responsive src= width=695 height=348 alt=Open Source (OSS) will become more and more popular and dominate the market title=Why Open Source Will Dominate the Market / h2 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Introduction/span/h2 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291How times have changed. In the old days, an article about open source software (OSS) typically starts off by defending OSS as a viable alternative to proprietary software. To make its argument, it would defer to the Apache web server and the Linux operating system, both OSS centerpieces. Back in those days, OSS is almost synonymous with nonprofit organizations such as the Apache Software Foundation, the Linux Foundation, and the Free Software Foundation. To justify the adoption of OSS to the skeptical world, one would focus on the return of investment and argues how OSS lowers the total cost of ownership./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291This article is about the dawning of the new OSS generation. We argue that OSS will dominate the market, which is a far cry from just being a viable alternative./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291A whole new horde of world-dominating OSS software has entered the picture. The new faces of OSS are /spana href= and a href=, a href= and a href= p dir=ltr /p h2 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Open source software in 2017/span/h2 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291New players have since entered the OSS market. The /spana href= Future of Open Source survey/a, conducted with 1,300 companies across 64 countries, indicated that 65% of the respondents had increased the use of OSS in the past year./p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291World-class, for-profit companies, such as /spanAmazon, Google, Microsoft, Facebook, and Twitter, are now major users and contributors to OSS. This is unthinkable back in the old OSS days, much like the teardown of the Berlin wall. These companies have open-sourced their own products, with the most notable being:/p ulli dir=ltr p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291a href= DSSTNE/a/span (pronounced destiny),/p /li li dir=ltr p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291a href= TensorFlow/a/span, and/p /li li dir=ltr p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291a href= CNTK/a/span which stands for Computational Network Toolkit./p /li /ulp dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291These 3 products share some common characteristics:/span/p olli dir=ltr p dir=ltrstrongspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291They are all software frameworks. /span/strong/p /li /olp dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291A software framework is the software infrastructure for solving a general class of problems. Unlike Drupal and LibreOffice which are application programs, the aforementioned new OSS are software frameworks, specifically in the area of pattern recognition. Amazon uses DSSTNE to provide product recommendations for its online customers. Google and Microsoft use their respective products in speech recognition, text understanding and photo recognition./span/p olli dir=ltr value=2 p dir=ltrstrongspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291They are all core and mission-critical with their respective owner companies. /span/strong/p /li /olp dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291For an online retail business, product recommendation is unequivocally mission-critical. Yet, Amazon opted to open-source its product recommendation engine, DSSTNE. Not to be outdone, Google open-sourced TensorFlow, the pattern recognition component in its search engine business. Similarly, Microsoft open-sourced CNTK, the speech recognition engine that powers Windows and Skype applications./span/p olli dir=ltr value=3 p dir=ltrstrongspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291No feature or licensing handicap. /span/strong/p /li /olp dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291The pressure is on for software vendors to release OSS that is uncrippled, fully functional, and freely distributable. The first open-sourced version of TensorFlow did not support distributed processing: it can only run on a single host. Google subsequently released another version of the software that can run in parallel across multiple hosts. The first version of CNTK that Microsoft open-sourced was restricted to only non-commercial use. Later, the restriction was removed to allow commercial exploitation of the technology./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291If the aforementioned products are core to their underlying businesses, we have to ask why their respective companies have chosen to open source them. The rest of this article elaborates on the benefits and the future of this new breed of open source software./span/p pa href= Source Software: The Ultimate List/a/p p dir=ltr /p h2 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Benefits of open source/span/h2 p dir=ltrimg alt=Keep calm and use open software title=Open source is always a right choice height=720 width=730 class=media-element file-default img-responsive typeof=Image src= //p p dir=ltr /p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Lowering cost is no longer the number 1 benefit. The new buzzwords for OSS are innovation, quality, and speed of adoption. If helpful, we will illustrate using the example of Drupal, an open source Content Management System (CMS)./span/p pa href= Drupal is the Best CMS for Your Website/a/p p /p h3 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Innovation/span/h3 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291By definition, the source code for OSS is made available to everyone. This attracts a large, global community of committed contributors who share the passion and want to make the software better. The /spana href= community/a claims to have over 1 million developers, designers, trainers, strategists, coordinators, editors, and sponsors./p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291In traditional proprietary software development, one person (or a small group) determines the vision and direction of the software. In contrast, OSS is characterized by the free flow of ideas among members of a large community with diverse skillsets and experience. End decisions are made based on merit, not seniority. As a result, OSS is a much better nurturing ground for innovation than its proprietary counterpart./span/p p dir=ltr /p h3 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Quality/span/h3 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Given that the source code is open, and that a large pool of developers is available to work on it, the development cycle for OSS is typically shorter. Product features are rolled out and bugs are fixed in frequent software updates. With more eyes on the problem, /spansecurity holes can be spotted earlier and fixed sooner./p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Members in the community who are not developers can contribute in their own ways to make a quality product. Writers and editors contribute by writing documentation. Everyone in the community is presumably a user, and can provide feedback to the team, and answer questions in the support forum./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Companies can customize open source software to satisfy their unique requirements. Subsequently, they can contribute the code back to the community to make the product even better. Drupal 8 represents the quality end result of work done collaboratively by 4,500 individual and corporate contributors. It has over 200 new and improved features, and is made available in 100 languages./span/p p dir=ltr /p h3 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Cost/span/h3 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Most OSS is royalty free: you are not charged any money to use it. However, there are several different OSS licenses in the market. So, you must read the licensing terms carefully./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291OSS is generally free because it is developed and supported by a community of volunteers. Drupal has a large repository of free modules (30,000+) and themes (2,000+). The development cost is close to nothing, unless you decide to customize a module or theme yourself./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Many companies do customize OSS to satisfy their own unique requirements. This adds to the total cost of ownership for OSS. Yet, the cost is largely constrained because you are not starting from scratch./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291When you buy proprietary software, you are locked in to that particular vendor, and become susceptible to its pricing changes. For OSS, you can choose from a sufficiently large supply of contractors who do custom work for OSS. Because the source code is opened, you gain the freedom to switch vendors./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Overall, the total cost of OSS is still lower than that of proprietary software, making it more affordable./span/p p dir=ltr /p h3 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Speed/span/h3 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291If you use proprietary software, you are tied down by the company's product roadmap which may cater more to the fiscal reporting periods than to its technical merits. With its open platform, OSS development accelerates at Internet speed. The developer base and the installed base are distributed around the world. This means that requirements are gathered around the clock, features are designed and coded 24x7, and bugs are squashed non-stop./span/p p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Not only is OSS being developed at a breakneck pace, the scale of its adoption is nothing but phenomenal. Take Drupal and CMS as an example. Drupal has an installed base of over a million websites. With this many websites, a would-be customer can look at any number of them to find the right features to use in his own website./span/p p dir=ltr /p h2 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Future of open source/span/h2 h3 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Cloud computing/span/h3 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291The future of OSS is in the cloud. 76% of all respondents in the above cited 2016 survey claimed that they had plans to use containers. The cloud is not just a repository where OSS contributors network and store their code and document artifacts. It will become the deployment platform of choice for open source software./span/p p dir=ltr /p h3 dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291Commoditization/span/h3 p dir=ltrspan id=docs-internal-guid-b5776007-3459-2216-592a-fd40e05fd291OSS is becoming a commodity in the world of software development. Companies will expect more and more enterprise software to be OSS. They will expect OSS to remain free and be of the highest quality. They will expect their ideas and feedback to be heard in the larger community, and readily included in the constant software updates which will continuously benefit them./span/p p dir=ltr /p p dir=ltrOpen source is playing a bigger and bigger role every year, and there is no doubt that its future is full of possibilities. And which open software do you use? Share your thoughts with us in a comment section below./p Tags:nbsp; a href=/blog/tags/design-user-experience typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Design amp; User Experience/a a href=/taxonomy/term/236 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal Planet/a div class=field field-name-title-field field-type-text field-label-above clearfix div class=field-label Title:nbsp; /div div class=field-item even Why Open Source Will Dominate the Market /div /div

Drupal @ Penn State: Turn your Drupal site into Google Home

Sun, 02/12/2017 - 21:34
pI’ve dreamed of a day when systems start to work like the home automation and listening (span class=capsNSA/span Spying…) devices that people are inviting into their home. “Robots” that listen to trigger words and act on commands are very exciting. What’s most interesting to me in trying to build such systems is,… they really aren’t that hard any more. Why?/p Drupal Developer's blog: Ctools: custom argument plugin

Sun, 02/12/2017 - 17:36
div dir=ltr style=text-align: left; trbidi=onThis time we will consider an bargument/b plugin. Arguments are pretty similar to contexts. Actually arguments are context objects loaded from url. By default ctools provides a full set of needed arguments such as quot;Node: IDquot;, quot;User: IDquot;, quot;User: namequot; etc. But what if you#39;ve created a custom bcontext/b?b /bYou might need to create a custom bargument /bfor your context (if you want to use your context as an argument of course). I advise you to read previous articles from quot;Ctools custom pluginquot; series such as a href= target=_blankquot;Ctools: custom access pluginquot;/a anda href= target=_blank quot;Ctools: custom context pluginquot;/a. It#39;s also brequired to read /ba href= target=_blankquot;Ctools: custom content type pluginquot;/a before reading this post because there I#39;ve described how to create a module integrated with ctools API which can contain ctools plugins. br/diva href= more »/a

Unimity Solutions Drupal Blog: Cheering the Drupal Association Team as they start 2017 with a bang!

Sun, 02/12/2017 - 16:43
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpThe Association staff have been doing wonderful stuff over the last few months./p/div/div/div

Roy Scholten: Status page redesign in review

Sun, 02/12/2017 - 07:57
div class=field field-name-field-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/pieces/status-page-redesign-reviewimg src= width=640 height=330 alt=Stylized screengrab with colorfull circles overlaid //a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpThe a href= page redesign got committed/a to core the other week. This is a good thing because it shows that we can actually get decent design work done in core./p pOr is it, because it has become the longest issue on d.o. and took way too long and seems too much work for redesigning a single page. It shows we still emcan’t/em get good design work done in an effective way./p h2 id=But if you look closer you’ll find that:/h2 pA first iteration was committed at ±60 comments in. This was 5 years ago. Then another 60 or so comments of discussion about what could be improved about that initial redesign./p p“Only” 9 months ago, a href= kicked off/a a whole new redesign. That actual design was agreed on in a decent amount of time and discussion (35 comments, 2 months and 2 or 3 discussions of it in our UX meetings). We spent a lot of time with a first and maybe even second round of implementation approaches before settling on a core worthy architecture. Refining that approach still took a lot of effort to get right but not extremely so./p h3 id=In summary:/h3 ulli60 comments for the first iteration, this was a long time ago/li li60 comments discussing additional details of that first iteration/li li35 comments to agree on a whole new design (!)/li li170 comments to arrive at a core worthy approach for the frontend code/li li150 comments refining the code, reviewing it and fixing minor design issues/li /ulh2 id=Some lessons maybe:/h2 ulliRestarting a whole new redesign in an already years old and fixed issue is not how we normally work. It might have been better to start a new issue for the redesign./li liI think we’d now also choose to create and agree on the design in one issue and implement it in yet another. Although we really didn’t redesign by committee that much in this issue. 35 Comments to arrive at a whole new design is in fact a quite spectacularly short amount of time./li liLearn to recognise when a design introduced new frontend patterns. Because we need expert guidance on how to implement it correctly./li liOutline and agree on the architecture for implementation before starting to write code./li liGetting good design done + changing a stable core feature is still lot of work. It needs visual design, interaction design and information architecture. It needs HTML, CSS, JavaScript and PHP code. It needs to be checked on correctness for each of those. And don’t forget about accessibility (we didn’t). Without breaking backwards compatibility because we were changing a stable core feature. That’s a lot of disciplines that need to be involved, which means it takes more people to complete./li /ulpI’m happy the issue got committed. I had mixed feelings about whether this is really is an achievement worth celebrating given the length of the issue. Looking back at how the process went, it shows that we did in fact manage to redesign a core feature in a reasonable amount of time. And despite the length and complexity the discussion never went off rails and tone remained civil at all times. /p pFor the design part it has been very valuable to discuss things in our a href= meetings/a where we can share screen and provide feedback while looking at the actual thing. Imagine that! :-)/p pThank you Christina, Sumit, Chris, Joel, Lauriii, Gabor and everybody else who chipped in. Well done./p /div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-inline clearfixdiv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tag/drupaldrupal/a/divdiv class=field-item odda href=/drupaldrupalplanet/a/div/div/divdiv class=field field-name-field-sub-title field-type-text field-label-abovediv class=field-labelSub title:nbsp;/divdiv class=field-itemsdiv class=field-item evenNot seven years but nine months in the making/div/div/div

Drupal core announcements: Drupal core security release window on Wednesday, February 15, 2017

Sun, 02/12/2017 - 05:28
div class=field field-type-userreference field-field-organizers div class=field-labelOrganizers:nbsp;/div div class=field-items div class=field-item odd a href=/user/24722 title=View user profile.xjm/a /div div class=field-item even a href=/user/1639494 title=View user profile.cilefen/a /div /div /div div class=field field-type-text field-field-event-type div class=field-labelEvent type:nbsp;/div div class=field-items div class=field-item odd Online meeting (eg. IRC meeting) /div /div /div pThe monthly security release window for Drupal 8 and 7 core will take place on Wednesday, February 15./p pThis does not mean that a Drupal core security release will necessarily take place on that date for any of the Drupal 8 or 7 branches, only that you should watch for one (and be ready to update your Drupal sites in the event that the Drupal security team decides to make a release)./p pFebruary 15 is also the planned release date for Drupal 8.3.0-beta1. (See a href= release notes/a for the recent alpha and a href= recent announcement about 8.3.0/a for more information on the alpha and beta phases.)/p pThere will be no bug fix or stable feature release on this date. The next window for a Drupal core patch (bug fix) release for all branches is Wednesday, March 01. The next scheduled minor (feature) release for Drupal 8 will be on Wednesday, April 5./p pa href= 6 is end-of-life/a and will not receive further security releases./p pFor more information on Drupal core release windows, see the documentation on a href= timing/a and a href= releases/a, and the a href= that led to this policy being implemented./p Drupal Developer's blog: Ctools: custom context plugin

Sat, 02/11/2017 - 23:40
div dir=ltr style=text-align: left; trbidi=onIn previous post we created an a href= target=_blankaccess ctools plugin/a which can be used as a selection or visibility rule in bpanels/b. It#39;s time to learn how to create another important custom plugin - a bcontext/b. It provides additional information for a panel page. For example if you#39;ve put a node context to the page you will be able to use node properties as substitutions for a page title. Moreover you will be able to put node fields as panes to a page. By default ctools module provides useful contexts (node, user, taxonomy_term, entity etc) but you can define your own. Please, read a href= target=_blankfirst post/a of quot;Ctools custom pluginsquot; series before continue reading this. There we#39;ve created a module integrated with ctools. br/diva href= more »/a

Jeff Geerling's Blog: Profiling Drupal 8 Sites in Drupal VM with XHProf and Tideways

Sat, 02/11/2017 - 15:30
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpXHProf, a PHP extension formerly created and maintained by Facebook, has for many years been the de-facto standard in profiling Drupal's PHP code and performance issues. Unfortunately, as Facebook has matured and shifted resources, the XHProf extension maintenance tailed off around the time of the PHP 7.0 era, and now that we're hitting PHP 7.1, even some sparsely-maintained forks are difficult (if not impossible) to get running with newer versions of PHP./p pEnter a href=https://tideways.ioTideways/a./p pTideways has basically taken on the XHProf extension, a href= it for modern PHP versions/a, but also re-branded it to be named 'Tideways' instead of 'XHProf'. This has created a little confusion, since Tideways also offers a branded and proprietary service for aggregating and displaying profiling information through a href= But strongyou can use Tideways completely independent from, as a drop-in replacement for XHProf. And you can even browse profiling results using the same old XHProf UI!/p/div/div/div

OhTheHugeManatee: Between the Cracks of Decoupled (Drupal) Architecture

Sat, 02/11/2017 - 11:18
pIn any decoupled architecture, people tend to focus on the pieces that will fit together. But what nobody ever tells you is: emwatch out for the cracks!/em/p pThe cracks are the integration points between the different components. Itrsquo;s not GraphQL as a communication layer; itrsquo;s that no one thinks to log GraphQL inconsistencies when they occur. Itrsquo;s not ldquo;whatrsquo;s my development environmentrdquo;, itrsquo;s ldquo;how do these three development environments work on my localhost at the same time?rdquo;. Itrsquo;s the thousand little complexities that you donrsquo;t think about, basically because they arenrsquo;t directly associated with a noun. Wersquo;ve discovered ldquo;crackrdquo; problems like this in technical architecture and devops, communication, and even project management. They add up to a lot of unplanned time, and they have presented some serious project risks./p pA bit more about my recent project with a href=https://amazeelabs.comAmazee Labs/a. Itrsquo;s quite a cool stack: several data sources feed into a href=https://drupal.orgDrupal 8/a, which offers an editorial experience and a href=https://graphql.orgGraphQL/a endpoints. Four a href= href= sites sit in front, consuming the data and even offering an authenticated user experience (a href=https://auth0.comAuth0/a). Irsquo;ve been working with brilliant people: a href= Siemssen/a, a href= Weitzman/a, a href= Melab/a, and others. It has taken all of us to deal with the crack complexity./p pThe first crack appeared as we were setting up environments for our development teams. How do you segment repositories? They get deployed to different servers, and run in very different environments. But they are critically connected to each other. We decided to have a separate ldquo;back endrdquo; repo, and separate repos for each ldquo;front endrdquo; site. Since Relay needs to compile the entire data schema on startup, this means that every time the back end is redeployed with a data model change, we have to automatically redeploy the front end(s). For local development, we ended up building a mock data backend in MongoDB running in Docker. Add one more technology to support to your list, with normal attendant support and maintenance issues./p pDevOps in general is more complicated and expensive in a decoupled environment. Itrsquo;s all easy at first, but at some point you have to start connecting the front- and back-ends on peoples#8217; local development environments. Cue obvious problems like port conflicts, but also less obvious ones. The React developers donrsquo;t know anything about drupal, drush, or php development environments. This means your enviroment setup needs to be VERY streamlined, even idiot-proof. Your devops team has to support a much wider variety of users than normal. Two of our front-enders had setups that made spinning up the back-end take more than 30 minutes. 30 minutes! We didnrsquo;t even know that was possible with our stack. The project coordinater has to budget significant time for this kind of support and maintenance./p pSome of the cracks just mean you have to code emvery/em carefully. At one point we discovered that certain kinds of invalid schema are perfectly tolerable to the GraphQL module. We could query everything just fine ndash; but React couldnrsquo;t compile the schema, and gave cryptic errors that were hard to track down. Or what about the issues where there emare/em no error messages to work with? CORS problems were notoriously easy to miss, until everything broke without clear errors. Some of these are impossible to avoid. The best you can do is be thorough about your test coverage, add integration tests which consider all environments, and emdocument all the things/em./p pNot all the cracks are technological; some are purely communication. In order to use a shared data service, we need a shared data model and API. So how do you communicate and coordinate that between 5 teams and 5 applications? We found this bottleneck extremely difficult. At first, it simply took a long time to get API components built. We had to coordinate so many stakeholders, that the back-end data arch and GraphQL endpoints got way behind the front-end sites. At another point, one backender organically became the go-to for everything GraphQL. He was a bottleneck within weeks, and was stuck with all the information silo#8217;ed in his head. This is still an active problem area for us. Wersquo;re working on thorough and well-maintained documentation as a reference point, but this costs time as well./p pEven project managers and scrum masters found new complexities. We had more than 30 people working on this project, and everyone had to be well coordinated and informed. You certainly canrsquo;t do scrum with 30 people together ndash; the sprint review would take days! But split it out into many smaller teams and your information and coordination problems just got much harder. Eventually we found our solution: we have 3 teams, each with their own PO, frontender(s) and backender(s), who take responsibility for whole features at a time. Each team does its own, quite vanilla, scrum process. Layered on top of this, developers are in groups which cut across the scrum teams, which have coordination meetings and maintain documentation and code standards. All the back-enders meet weekly and work with the same standards, but the tightest coordination is internal to a feature. So far this is working well, but ask me again in a few months. :)/p pWorking in a fully decoupled architecture and team structure has been amazing. It really is possible, and it really does provide a lot more flexibility. But it demands a harder focus on standards, communication, coordination, and architecture. Sometimes itrsquo;s not about the bricks; itrsquo;s about the mortar between them. So the next time you start work on a decoupled architecture, emwatch out for the cracks!/em/p

Jeff Geerling's Blog: YAML formatting and Drupal 8 - making things readable

Fri, 02/10/2017 - 22:01
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpAs someone who loves a href= syntax/a (so much more pleasant to work with than JSON!), I wanted to jot down a few notes about syntax formatting for the benefit of Drupal 8 developers everywhere./p pI often see copy/pasted YAML examples like the following:/p div class=codeblockcodesomething:br /  something-else: {key: value, key2: {key: value}}/code/div pThis is perfectly valid YAML. And technically a href= JSON is valid YAML too/a. That's part of what makes YAML so powerful—it's easy to translate between JSON and YAML, but YAML is way more readable!/p pSo instead of using YAML like that, you can make the structure and relationships so much more apparent by formatting it like so:/p/div/div/div