DrupalCon Amsterdam is coming soon, and I can’t wait to welcome the Drupal community to this wonderful city. The conference is shaping up to be an absolutely incredible experience.
The local Dutch Drupal community has been hard at work coming up with a huge number of fun and cultural activities. From the Tour de Drupal bike ride from London to Amsterdam, to the Drupal bar crawl up and down the canals; DrupalCon Amsterdam is going to be a great place to learn more about Drupal, celebrate the community, and have a fantastic time.
Make sure you buy your ticket and reserve your hotel room as soon as possible, so you can get the best prices. In the coming weeks, we’ll be rolling out more information about the convention, sponsorship opportunities, and more.
The website is now live, so get your tickets here!
Chairman, Stitching Drupal Nederland
As the Simpletest sprint in Paris was exactly six years ago I feel it's a good time to remind the community how and why Simpletest was chosen especially in the light of the Simpletest hate lately. At that time we had almost no tests (compared to the massive test battery today with over 68 000 asserts) and it was paramount to allow anyone to be able to write and run tests. Drupal in 2008 was not really API driven and so we needed browser based testing. Selenium at this time (Selenium 2 / WebDriver was released in 2011) required a standalone Java program to drive a browser -- we didn't quite feel being a Java-on-your-desktop helpdesk. So Selenium was out. PHPUnit offered a big fat nothing for Drupal -- Rok and I actually printed the source code out and read the whole thing at Boston DrupalCon and found nothing useful in there. Mind you, it was a very young project at that time. Behat? Mink? In 2008? Come on, Cucumber itself didn't appear until 2008 fall. So. In 2014 it is easy to say there are better and/or faster alternatives but those weren't there in 2008. Also, it's the massive refactoring in Drupal 8 that made it possible to use PHPUnit -- but guess what made the refactoring possible.
When you need to dynamically display a block within a region, nothing can really beat the Context module. It allows you to define a set of conditions, that when met, executes a set of reactions. For example, you could create a context rule which adds a block to the sidebar second region (reaction) when a user is viewing an Article content type (condition).
A lot of what Context does can also be achieved using Panels. But if you're new to Drupal, and never used Panels than Context will be easier to use.
If you're new to Context then I would highly recommend you watch the two introductory videos below:
- Drupal 7 Context module - Daily Dose of Drupal episode 72 by Shane Thomas
- Drupal Tutorials #63 - Intro to Context - Adding Blocks With Context by LevelUpTuts
Recently I've discovered a powerful module called Context entity field. It allows you to define a condition that checks the value of a field on an entity.
Over the past month, a lot of work has gone into the configuration system. With the addition of a separate module install/uninstall step for the config import process, it's finally possible to properly synchronize configuration changes with module installations or uninstallations. You can now transform a site installed with the Minimum install profile into a site using the Standard install profile by importing configuration (the case we've long said will be our indicator that CMI "works"). (Watch this screencast to see it in action!)
Additionally, after thorough discussion, the active storage for the configuration management system has been moved into the database by default. This means existing Drupal 8 sites will likely need to be reinstalled (or otherwise migrate the active configuration). Read the change record on active configuration in the database for details on why this decision was made.
Now is the time to start really testing CMI deployments. Spin up a dev site, make a copy of it, and test synchronizing complex configuration system changes between the two. See if the system behaves as you expect (and report the problems you find!) For an overview of the outstanding work being done on the configuration system, see #2187339: [meta] CMI path to beta.NYC Camp at the United Nations
Where's Drupal 8 at in terms of release?
The third annual NYC Camp was held at the United Nations. (Yes, that United Nations, with the flags.) In addition to numerous sessions about Drupal 8 (check out fmitchell's session on 30 Drupal 8 API functions you should already know), we held several days of Drupal 8 core sprints. Media contributors also sprinted on Media for Drupal 8; check out their sprint status report for more information. Finally, Drupal Association executive director Holly Ross worked on a Drupal 8 patch got her first Drupal core commit credit! Are you next? :)
We're in the last stretch of Drupal 8's alpha phase. We've fixed over 130 beta-blocking issues, including 9 in the last week, plus written more than 70 missing change records. The last 28 beta blockers include some difficult issues, but consider some of what we've already accomplished since the beginning of 2014:
- The removal of the variable subsystem after 18 months.
- The rearchitecture of configuration synchronization to support the minimum viable usecase after 16 months.
- The removal of the legacy menu router after nearly a year.
- The removal of widely used cache-breaking functions including drupal_set_title(), drupal_add_css(), drupal_add_js(), and theme().
- The removal of all stale hook_update_N() implementations and the modification of update.php to require Migrate for major version upgrades instead.
(And of course so much more.)Where can I help? Top criticals to hit this week
Each week, we check with core maintainers and contributors for the "extra critical" criticals that are blocking other work. These issues are often tough problems with a long history. If you're familiar with the problem space of one of these issues and have the time to dig in, help drive it forward by reviewing, improving, and testing its patch, and by making sure the issue's summary is up to date and any API changes are documented with a draft change record.
#2116363: Unified repository of field definitions (cache + API) converts remaining usages of the deprecated field info API to use methods from the entity manager, and is therefore critical to stabilizing the Entity Field API for the beta release. This significant (~150 KB) patch needs thorough code review from contributors familiar with Drupal 8's entity and field systems.
#2183231: Make ContentEntityDatabaseStorage generate static database schemas for content entities is an even larger (~250 KB) beta-blocking patch for the entity system that allows the entity system to automatically create the necessary database tables for entities, resolving numerous different issues. This is another significant change and needs lots of thorough review from as many people as possible.
#2198429: Make deleted fields work with config synch needs review of the patch's architecture and functionality. Deleting a field is a significant operation, because the site has to go on to purge all the field instance data for entities that have the field while leaving those entities intact. Drupal 7 includes a lot of code to support this functionality, and in Drupal 8, there's additional complexity since this purge needs to happen when a deleted field is staged and synchronized to another environment.
#2124749: [meta] Stop using request attributes as a storage mechanism for other services covers a collection of issues to improve the developer experience around Drupal 8's use of Symfony's request attributes (a public property on the request object that can be used for context-specific information about the request). This context information is not easily discoverable for contributed module developers, and, in some cases, using it adds to the apparent verbosity and complexity (e.g. in the replacements for the common D7 functions menu_get_object() and menu_get_item()). The numerous sub-issues for this meta issue are intended to weed out misuses of the request attributes and provide clear public APIs for others. Help discuss the developer experience and architecture in the numerous child issues for this meta.
We've put together a list of approchable beta blocker and beta target issues from the tasks remaining after our two back-to-back sprints on the beta at Szeged and NYC Camp.
As always, if you're new to contributing to core, check out Core contribution mentoring hours. Twice per week, you can log into IRC and helpful Drupal core mentors will get you set up with answers to any of your questions, plus provide some useful issues to work on.
The best of git log --after=2014-04-02 --pretty=oneline (207 commits in total):Configuration management
As we described above, it's been another couple weeks of fantastic progress in getting the configuration management system solid for beta. Notably:
- Issue #2161591 by pwolanin, beejeebus, sun: Change default active config from file storage to DB storage.
- Issue #1808248 by alexpott, beejeebus, tayzlor, Nitesh Sethia: Add a separate module install/uninstall step to the config import process.
- Issue #2124535 by Berdir, alexpott, Désiré, xjm | yched: Prevent secondary configuration creates and deletes from breaking the ConfigImporter.
- Issue #1740378 by xjm, Désiré, alexpott | heyrocker: Implement renames in the import cycle.
There is still plenty to help out on in the CMI path to beta meta issue if you want to help keep the excellent momentum of the last few weeks going.Entities and fields
One of the many accomplishments from Drupal DevDays a few weeks ago, was a cute and colorful visualization of the long dependency chain of issues remaining to stabilize the Entity and Field APIs for beta. Two of them were committed in the last two weeks:
- Issue #2225739 by killua99, Berdir, andypost, pfrenssen: Remove usage of field_info_instances(), use EntityManager::getFieldDefinitions() instead.
- Issue #2226197 by fago, jessebeach: Introduce FieldStorageDefinitionInterface in the Entity Field API.
That has unblocked Unified repository of field definitions, which is now making good progress, and when committed, will unblock the next level of the dependency chain.Migration
With a Drupal 8 beta approaching, how exciting will it be to start testing it out with content and configuration from an existing Drupal 6 site?! Several issues were committed that pave the way for that, including:
- Issue #2211949 by chx, Berdir, fago, benjy: Support keeping new revision id for migrate.
- Issue #2190561 by chx, pcambra, benjy: Migrate in core: Add a load system for migrate plugins.
And now, there's a 600KB patch containing 82 actual migrations ready for review.A meta for everyone
No matter what part of Drupal you're interested in, there's probably a meta issue available for you to chip away at. Here's just some of the ones that had a commit in the last two weeks.Front-end
- When creating a theme, just when you thought you overrode everything you needed to to get all your markup exactly how you like it, do you hate having to discover yet another obscure theme function that inserts an unwanted <div>? Well, the Twig team is cleaning that up as part of converting theme functions to Twig. Congratulations to them for removing a function entirely in: Issue #2151123 by joelpittet | Cottser: Remove theme_system_modules_incompatible().
- What's even better than fewer one-off theme functions to override? How about default markup that's perfect to begin with? There's a meta issue and an issue tag for that. Yay for progress on that with: Issue #2226923 by pakmanlh, mandar.harkare, mortendk, galooph: Views: remove wrapper around more link - add class to the link.
- Great default markup is only half the battle. We need great default CSS to go along with it. Nice to see another issue completed on that: Issue #1662954 by balis_m, mjonesdinero, kalpaitch, IshaDakota, kerasai, ckrina, BarisW | ZenDoodles: Use less-specific tabledrag selectors.
- Issue #2209145 by slashrsm, fgm, chx: Move all path alias SQL queries to a single storage controller: gets us another step closer to making all of Drupal's data storage swappable.
- Issue #2223631 by znerol: Use request stack in database flood backend.: gets us another step closer to aligning Drupal's request management with the improvements made in Symfony 2.4.
- Issue #2228341 by sun, znerol, skipyT, ParisLiakos: Objectify session management functions + remove session.inc.: gets us a large step closer to a fully modern Session API.
- Issue #1987848 by disasm, ocsilalala, kim.pepper, pwieck, Cottser, pratik60, h3rj4n, pfrenssen, InternetDevels, ParisLiakos, rgoodine, tlyngej, vijaycs85, robeano: Convert system_theme_default() to a new style controller.: chips away at modernizing every single Drupal controller.
- Issue #2225399 by marcvangend, yanniboi, mr.baileys, Wim Leers, visabhishek: Apply formatters and widgets to Feed base fields: only a few more issues left to go before every field of every content entity has a swappable formatter and widget and is in-place editable.
- Issue #2217749 by Wim Leers, Jalandhar, visabhishek, damiankloip: Entity base class should provide standardized cache tags and built-in invalidation.: another great step towards making sure everything in Drupal 8 is cacheable and correctly invalidated.
- Issue #1399846 by slashrsm, Gábor Hojtsy, Berdir, brantwynn, visabhishek, David_Rothstein, cweagans, martin107, SteffenR, Dave Reid: Make unused file 'cleanup' configurable.: part of clearing the path for media management modules in contrib to do everything they need to do without having to fight core to do it.
You can also always check the Change records for Drupal core for the full list of Drupal 8 API changes from Drupal 7.Drupal 8 Around the Interwebs
Blog posts about Drupal 8 and how much it's going to rock your face.
- With Drupal 8 embracing modern PHP patterns and libraries, we have a great opportunity to welcome developers from other frameworks, and even languages, into our community. Larry Garfield writes about teaching Drupal 8 to a C# developer and Jeffrey McGuire interviews developers with Symfony and Java backgrounds about their thoughts on modern PHP and early Drupal 8 adoption, while DrupalCon Austin extends a special invitation to the Symfony community.
- At the same time, we already have a strong community that learned Drupal prior to PHP 5.3 and all the changes to the PHP world that came with that. While we decided to not let that stop us from modernizing, we can at least help each other make the transition. Which is why it's so great to see Chris Eastwood's post on upgrading his Simple Dialog module and Danny Englander's post on upgrading his Gratis theme.
- Of course, some people don't want to wait until Drupal 8 to get the benefits of PHP modernization. Christopher Skene published Object-oriented page callbacks for Drupal 7, the next installment of Writing Drupal 7 code with an eye towards Drupal 8, and Chris Pliakas wrote about Using Composer Manager to get off the Island Now.
- Speaking of modernizing, now that Windows XP is officially end of life, how long will it take for everyone still using IE8 to upgrade? Who knows, but David Corbacho summarizes the current situation in relation to Drupal 8.
- And for the site builders out there, Joe Fender explains how to hide form fields using Drupal 8's Field UI.
- First off, there are numerous upcoming sprints in Washington, DC (April 22), Brisbane (April 23), London (April 26-27), and Stockholm (May 4), plus a Drupal 8 Search API sprint in Zurich (April 28-May 2). Try working on a Drupal 8 core or contrib issue at one of these sprints!
- April 23-25: DrupalCamp Mexico has several Drupal 8-related sessions and a whole "SymfonyDay" track!
- April 25-27: DrupalCamp Donetsk will include a presentation on Drupal 8 from webchick.
- April 26: DrupalCamp St. Louis also includes a Drupal 8 introduction.
- May 2: DrupalJam in the Netherlands has a session on Drupal 8 patterns (plus maybe a streamed Q&A with Dries!)
- May 2-4: DrupalCamp Toronto doesn't have a set schedule yet, but there are numerous Drupal 8 session proposals.
- May 31-June 8: DrupalCon Austin and extended sprints. This year's North American DrupalCon will include many Drupal 8 sessions, trainings, and sprints. The conference is June 2-6 with the community sprint on Jun 7, and there are plans extended sprints the weekends before and after the conference. See the signup sheet for Austin's extended sprints. Austin will be critical to make progress toward Drupal 8's release, so please plan to participate in the sprints if you can!
Do you follow Drupal Planet with devotion, or keep a close eye on the Drupal event calendar, or git pull origin 8.x 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. Contact xjm if you'd like to help communicate all the interesting happenings in Drupal 8!
DrupalCamp Alpe-Adria will be one of the most scenic Drupal events this spring in Europe. It will take place in a magnificent costal town Portorož, which is conveniently located in the northern part of Adriatic sea.
Camp will happen on 17th and 18th May with extended sprints happening also on 19th and 20th. We already have some great session proposals and new ones are coming in almost every day! Are you new to Drupal? No problems! We're preparing some very interesting beginner-level sessions and on-site trainings. For those who prefer to code we have some very interesting sprints to offer! There will be Drupal 8 core and Drupal 8 media sprints going on. Are you interested in organizing another sprint? Do not hesitate to contact us immediately!
Early bird tickets are available only until 25th April. Don't miss your last chance to get them and start planning your travels well in advance. Portorož is very nice for families and children so you should really consider bringing your significant others with you and maybe extending Drupal camp into a short spring vacation.
Slightly related to @TravisCarden I created https://github.com/clemens-tolboom/drush_alias_crud to inject settings from the commandline. I guess we…
At MidCamp (Midwest Drupal camp), I found out a really fascinating thing about Drupal 8: Support for PHPUnit is going to be part of the base distribution. This means a great deal to Solutions Architects and Developers at Promet because we have been striving to integrate automated tests into our build. Perhaps you remember from my talks or previous posts, number four of my 10 Principles of Continuous Integration is "Self-Testing Build". This makes Drupal a much more sought-after platform for shops looking to fully embrace Continuous Integration.What do we do now?
Currently, Promet uses PHPUnit for testing purposes. Our team (Michelle Krejci and Will Milton), have instituted the use of Behavioral Driven Development (BDD) using Travis-CI, Behat, Mink, PhantomJS, and PHPUnit. This provides our requirements, use-cases and a way to easily self-code-review. For those not familiar with Gherkin, I urge you review it. It's a simple process to write use-cases in English, such that someone can program tests against it. The confidence this has given our team in our quality of code, and the confidence the client has in the outcome is phenomenal.
Michelle can attest to this being the case. In a project she’s working on now, the tests are actually being used to get sign-off that work is complete. All of the tests were created ahead of time and the scenarios are added as needed; therefore, change orders are obvious because the tests are in version control. There is no question on what scenarios we are supporting, when one was added, or when a piece of work is completed to the specifications.So how do we improve on BDD?
The problem with this workflow is that we have to jump to the Functional Test level to test anything at all. In terms of testability, it’s a tiny improvement compared to the Simple Test workflow Drupal has now. However, we have seen improvement since we’ve moved from Selenium to PhantomJS. As you probably know, PhantomJS and Selenium both do browser testing.
In the case of PhantomJS though, we aren’t testing specific browsers. In fact, PhantomJS is a browser, and a mighty fast one at that. This is fine for Promet where it is less significant whether specific browsers function a certain way. PhantomJS has improved our performance for testing over Selenium by strides.
But there is something even better! Testing at a Unit Level!
Drupal has been nearly impossible until Drupal 8. We had the Simple Test framework that was baked into Drupal, but it did what I like to call the "Use a Car to Test Another Car" approach. Specifically, you had to have a full instance of Drupal running so that it could make a fake instance of Drupal so that you could test. Additionally, functional code isn't very encapsulated. That is, you can't specifically say, "My inputs are xyz, and my outputs are abc.". The lack of encapsulation is mostly due to frequent use of global variables and not being able to group functionality with data like you can with objects in Object Oriented Programming (OOP).
Fear not. The new object oriented framework gives us easy access to new-fangled Dependency Injection, mocking of objects, and other programming patterns that allow us to consolidate a single unit of code. In our case, a unit is a single function within a class, which is the smallest unit of code that can be tested using PHPUnit.
This inspires developers to not only write better, testable code, but in smaller testable units that are...(insert drumroll, please) Reusable, not to mention, easier to test.So how does Unit Testing make things easier?
In several situations, we could rid ourselves of functional tests altogether. If every single piece of a component is working as expected, then the sum of those parts would equal a feature that works as expected. Lastly, those tests run a couple of orders of magnitude faster than the PhantomJS tests. This means that the tests can easily be part of the build script and not just something that runs on Travis-CI.
Speaking of Travis-CI, now we can integrate Travis-CI directly with Drupal. No more hacking the pieces together to get a testable environment outside the box.Final Thoughts
Overall, BDD is still flippin’ awesome and has its place in projects; we will still continue to use it. BDD is great for communicating directly with the client with something testable. However, Unit tests will allow us to build a set of reusable code at a lower cost to maintain. These unit tests allow us to better gauge our quality of code. I think these facts, speaking strictly as a Developer, will improve upon the testing process that we already have in place, particularly for our migrations and more technical projects with APIs and integrations. Looking into the future and our use of Drupal 8, I am excited for the availability of new unit test results to be used as insurance to our clients to backup our claims of quality. Developers happy and clients happy? Yes please! Thank you, Drupal 8.
I'm excited to announce that we've built our first Drupal-powered apps for iOS and Android. The apps are in the Android and Apple marketplace and are helped to improve one association's yearly technical conference.
There are times when apps are overkill and unneeded. Frankly there are already too many apps out there. But as we as a company continue to focus on conference sites, this was an obvious use case where taking the plunge into mobile app development made sense. It’s nearly become standard to have an event app at major conferences around the world.
At events, internet connectivity isn't that reliable and attendees, speakers and organizers are able to navigate the event much easier with the right mobile tool. Conference sites provide more media attention for sponsors and also provide various ways for networking.
In this post, I'd like to discuss our recent work building two mobile apps---one for Apple iOS and another for Google Android. Specifically in this post we’ll look at what we built, and in a future post, we’ll look at how we built these apps using different technologies (Drupal, iOS and Android) as well as some technical and business takeways we gained from this process of integrating a CMS like Drupal with a mobile device.
Let's take a look at what we've built.Drupal-Powered Conference Sites
One of our main focuses over the last several years has been event and conference sites.
Drupal handles content, users and commerce with increasing sophistication and flexiblity. In Drupal 6, we used COD to build club and simple event management systems. In Drupal 7, we decided to shift away from COD and Ubercart and have been building our own events registration system using Panopoly, Drupal Commerce and Registration.
The first fruit of this work was a romance writers conference that last year took some 150+ orders in the first 10 minutes for signup. This year the same event was even more rapid fire and took 200+ orders in the first 3 minutes after registration opened!
We love building Drupal sites for events so much that we are, in fact, also working on our first alpha release for this platform called "Events for Drupal".
Along with that site, this past year we've gotten the chance to test and refine the system on other projects.
Several months ago, SPE Environomental Division came to us to overhaul their site to better deal with their yearly event, GPEC (Global Plastics Environmental Conference). Specifically, we cleaned up their legacy content and sessions and built a clean flexible design and layout. We organized their content and products around their yearly event and we empowered them to handle their own ecommmerce needs and registrations.
Along with a full upgrade to handle registration and paid sponsorship, we overhauled their session and awards submissions processes. Potential speakers could submit their abstracts months before the event and admin could manage it from approval to scheduling and room assignment. This allowed them to create a dynamic schedule and, most importantly for their app, to make their content available for mobile distribution.
So, with the content exposed via an API, what did we build?
To be honest, it's not that uncommon to see conference apps these days. It's one of the easier mobile use cases to build for. (There are even several companies that provide a platform for generating your own apps for events, like Guidebook.)
Most conference or event apps provide the following features: event schedule, session and speaker info, venue maps and various "about" pages as well as perhaps a facebook or twitter feed.
We wanted to have all of this along with one key additional change: it needed to be dynamic. In particularly, we wanted a dynamic "my schedule" functionality; a way that the user could mark sessions they wanted to go to and a dynamic my schedule display. This "marking attendance" needed to be available and synced on either the site or app. This would then allow the "my schedule" page to be seen on the app, in the site or even in an exportable and printable format.
In the Drupal world, there are also several conference apps. There is nearly a new app for each DrupalCon. These apps provide attendees with the schedule and other event info. While these "Drupal" apps are quite helpful, they are in most cases static. The event content (sessions, rooms, speakers, etc) was exported and simply built into a page-by-page functionality. Some do provide data pulls but I didn't see any that went far into the functionality we wanted, like login and “flagging” sessions to attend.
In many cases this static format is enough, but we felt that these apps missed out on providing a more dynamic and interactive experience. In big events with dozens or hundreds of sessions, a conference without a personalized user schedule is not that helpful. Many attendees end up using a paper version for the simple ability to circle and markup the sessions they want to go to.
As such, we took the more dramatic choice to build a dynamic app integrated into the website's backend.
This approach allowed us to provide a way for attendees to download the most up to date session info (meaning you didn't have to wait to download a revised version of the app itself, just the content). Event administrators could change the session info even minutes before the event and users could update and see it.
The method also allowed attendees to create and manage their own schedule. Users could mark sessions they wanted to attend either via the site or one of the apps. They could then view their personalized schedule both before and during the conference. From a user perspective this was a huge success.
From administrative side, since the attendence data was synced with the site, it also gave the event organizers some rough total attendence numbers for different sessions BEFORE the actual start. Sessions that appeared to have higher demand could be moved to bigger rooms accordingly.
Like most conference apps, we also chose to put various bits of static info in the app. As I had to explain to different organizers, you can't just extend an existing site into a mobile app. Unlike a CMS like Drupal, each dynamic app functionality takes longer to develop, so where the content was likely to stay static, we built it into the app as static. As such, we elected to keep our about pages, organizer pages and sponsor lists as embedded content.
From a technical perspective, building Mobile Apps with Android and iOS wasn't that easy. It's also not without additional time and cost. Many times a responsive, mobile design is enough since it allows users to have a reasonably good experience on whatever device they use.
From my personal builder and developer perspective, it wasn't quite as hard as I imagined it could have been either. Neither easy nor hard, this approach carried various challenges.
For iOS, we were fortunate to have a preexisting library that made developing an iOS onto of an existing Drupal Site: Drupal iOS SDK from Kyle Browning. This library significantly helped in creating our iOS app. Specifically, this library abstracted out several common features like logins, pulling node data, etc as well provided an add-on library for integrating flags.
Like a lot of US-based development, we started with iOS and then built the Android app after. There was no doubt though that we were going to build for both platforms. Unfortunately there wasn’t a preexisting library to use but the basics and structures in the iOS library helped clarify what we needed for the Android version.
In conclusion, mobile apps are the more recent and current tech wave. In some cases mobile apps are superfluous. But for Drupal-powered conference sites, a mobile app can be a good fit to improve the user experience and interaction before, during and after you event.Tags: Drupal Conferenceconferencesmobile appsiOSAndroidDrupal PlanetPlanet DrupaldrupalDrupal Commerce Mark Koester @markwkoester Mark has worked on Drupal since the early days of D6. He is passionate about open source as well as entrepreneurship. When he isn't building, he enjoys traveling and speaking one of his many foreign languages. Chengdu, China
This past Wednesday night, I participated in the DevNation Hack Night in conjunction with Red Hat Summit. I was joined by Phase2’s CTO Frank Febbraro and Joe Caccavano, our CMO. Here at Phase2 we are big fans of OpenShift, RedHat’s open source Platform-as-a-Service (PaaS) offering, and we see a huge opportunity for Drupal in this space. In order to make Drupal a first class citizen on OpenShift, we helped develop Drupal 7 and 8 quickstart packages for Openshift in addition to building the official OpenShift Origin community site using Open Atrium, our Drupal social collaboration distribution.
Some of the benefits of using a PaaS like OpenShift is the ability to have a uniform environment, security, and automatic deployments with the Git distributed version control system. PaaS also gives you an API to spin up applications the same way Infrastructure as a Service (cloud computing) providers give you an API to spin up compute resources.
With our enthusiasm for OpenShift and Drupal, we decided to develop our own Drupal-based PaaS on top of OpenShift as a proof of concept at DevNation’s Hack Night. In just under two and half hours, we were able to create an application to host an OpenShift Origin set up on Google compute engine, and build a Drupal based PaaS on top of this.
In order to create a Drupal-based PaaS that can be used like other cloud hosting providers, we developed an application that runs on OpenShift that communicates with the OpenShift API to quickly spin up new applications. Our application was built with node.js and Angular and works alongside another application we built with PHP to help set up Drush-based automation for Drupal sites. With these applications running on OpenShift, you can have your dev, stage and live site all together with the ability to pull a database from stage to dev or promote a database from stage to live.
Here is a demo I have recorded to show the MVP we put together in 2.5 hours during the hack night. We had a blast building this Drupal hosting dashboard with OpenShift and I’m happy to say that our team won first prize. Earlier during the conference, we also contributed a number of improvements to a Node.js OpenShift Client.
This project really shows the power of OpenShift Rest API’s: if you have access to any language that can consume REST web services, you can fully automate your application lifecycle. I’m looking forward to continuing to build, develop, and hack with open source partners like OpenShift.
In this screencast, you will discover how you can use the OSF for Drupal user interface to browse, filter and search for Resource entities that have been indexed in Open Semantic Framework (OSF) datasets. You will see how you can use it to manage what you want to expose on your Drupal portal.