From 4fa5cd767d3c12585c10268afa60c71c2352f155 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Wed, 9 May 2018 23:24:08 +0100 Subject: [PATCH 1/2] wip --- app/SculpinKernel.php | 3 + app/config/sculpin_kernel.yml | 5 +- app/config/sculpin_site.yml | 14 +- app/config/sculpin_site_prod.yml | 6 +- composer.json | 18 ++ composer.lock | 98 ++++----- source/_includes/talks-table-row.html.twig | 59 ++++++ source/_includes/talks-table.html.twig | 26 +++ .../building-static-websites-sculpin.md | 23 +++ source/_talks/dancing-for-drupal.md | 25 +++ source/_talks/deploying-drupal-fabric.md | 27 +++ source/_talks/deploying-php-fabric.md | 31 +++ source/_talks/drupal-8-module-development.md | 36 ++++ source/_talks/drupal-8-rejoining-the-herd.md | 14 ++ source/_talks/drupal-8.md | 16 ++ source/_talks/drupal-vm-generator.md | 18 ++ .../_talks/drupal-vm-meet-symfony-console.md | 19 ++ source/_talks/drupalorg-2015.md | 10 + source/_talks/drush-make-drupalbristol.md | 9 + .../_talks/getting-your-data-into-drupal-8.md | 29 +++ source/_talks/git-flow.md | 13 ++ .../goodbye-drush-make-hello-composer.md | 17 ++ source/_talks/it-all-started-with-a-patch.md | 14 ++ ...modern-drupal-development-with-composer.md | 18 ++ source/_talks/so-what-is-this-drupal-thing.md | 9 + .../_talks/taking-flight-with-tailwind-css.md | 30 +++ source/_talks/tdd-test-driven-drupal.md | 30 +++ source/_talks/test-drive-twig-with-sculpin.md | 19 ++ ...ing-laravel-collections-outside-laravel.md | 14 ++ source/talks-archive.html.twig | 40 ++++ source/talks.html.twig | 29 ++- .../SculpinFormatTalksExtension.php | 20 ++ .../Resources/config/services.yml | 5 + .../SculpinFormatTalksBundle.php | 9 + .../TwigExtension/FormatTalksExtension.php | 114 +++++++++++ src/FormatTalksBundle/composer.json | 5 + src/helpers.php | 8 + .../TwigExtension/FormatTalksTest.php | 192 ++++++++++++++++++ 38 files changed, 996 insertions(+), 76 deletions(-) create mode 100644 source/_includes/talks-table-row.html.twig create mode 100644 source/_includes/talks-table.html.twig create mode 100644 source/_talks/building-static-websites-sculpin.md create mode 100644 source/_talks/dancing-for-drupal.md create mode 100644 source/_talks/deploying-drupal-fabric.md create mode 100644 source/_talks/deploying-php-fabric.md create mode 100644 source/_talks/drupal-8-module-development.md create mode 100644 source/_talks/drupal-8-rejoining-the-herd.md create mode 100644 source/_talks/drupal-8.md create mode 100644 source/_talks/drupal-vm-generator.md create mode 100644 source/_talks/drupal-vm-meet-symfony-console.md create mode 100644 source/_talks/drupalorg-2015.md create mode 100644 source/_talks/drush-make-drupalbristol.md create mode 100644 source/_talks/getting-your-data-into-drupal-8.md create mode 100644 source/_talks/git-flow.md create mode 100644 source/_talks/goodbye-drush-make-hello-composer.md create mode 100644 source/_talks/it-all-started-with-a-patch.md create mode 100644 source/_talks/modern-drupal-development-with-composer.md create mode 100644 source/_talks/so-what-is-this-drupal-thing.md create mode 100644 source/_talks/taking-flight-with-tailwind-css.md create mode 100644 source/_talks/tdd-test-driven-drupal.md create mode 100644 source/_talks/test-drive-twig-with-sculpin.md create mode 100644 source/_talks/using-laravel-collections-outside-laravel.md create mode 100644 source/talks-archive.html.twig create mode 100644 src/FormatTalksBundle/DependencyInjection/SculpinFormatTalksExtension.php create mode 100644 src/FormatTalksBundle/Resources/config/services.yml create mode 100644 src/FormatTalksBundle/SculpinFormatTalksBundle.php create mode 100644 src/FormatTalksBundle/TwigExtension/FormatTalksExtension.php create mode 100644 src/FormatTalksBundle/composer.json create mode 100644 src/helpers.php create mode 100644 tests/FormatTalksBundle/TwigExtension/FormatTalksTest.php diff --git a/app/SculpinKernel.php b/app/SculpinKernel.php index 3fcf7484..025e686f 100644 --- a/app/SculpinKernel.php +++ b/app/SculpinKernel.php @@ -1,5 +1,6 @@ =5.6.4" + }, + "require-dev": { + "mockery/mockery": "^0.9.7", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "autoload": { + "files": [ + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "Collect - Illuminate Collections as a separate package.", + "keywords": [ + "collection", + "laravel" + ], + "time": "2017-08-14T20:47:19+00:00" + }, { "name": "tsphethean/sculpin-related-posts-bundle", "version": "0.1.0", @@ -4083,53 +4130,6 @@ "homepage": "https://github.com/sebastianbergmann/version", "time": "2016-10-03T07:35:21+00:00" }, - { - "name": "tightenco/collect", - "version": "v5.4.33", - "source": { - "type": "git", - "url": "https://github.com/tightenco/collect.git", - "reference": "73aa38b20d932f5e8f8ccf721e4c27f4304783d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tightenco/collect/zipball/73aa38b20d932f5e8f8ccf721e4c27f4304783d6", - "reference": "73aa38b20d932f5e8f8ccf721e4c27f4304783d6", - "shasum": "" - }, - "require": { - "php": ">=5.6.4" - }, - "require-dev": { - "mockery/mockery": "^0.9.7", - "phpunit/phpunit": "^5.7" - }, - "type": "library", - "autoload": { - "files": [ - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - } - ], - "description": "Collect - Illuminate Collections as a separate package.", - "keywords": [ - "collection", - "laravel" - ], - "time": "2017-08-14T20:47:19+00:00" - }, { "name": "webmozart/assert", "version": "1.2.0", diff --git a/source/_includes/talks-table-row.html.twig b/source/_includes/talks-table-row.html.twig new file mode 100644 index 00000000..5a8a550d --- /dev/null +++ b/source/_includes/talks-table-row.html.twig @@ -0,0 +1,59 @@ + + + {{ row.event.date|date(row.event.fuzzy_date ? 'F Y' : 'j F Y') }} + + {% if row.event.time is defined %} +
+ {{ row.event.time }} +
+ {% endif %} + + + {% if not talk_page %} + + {% if row.talk.url is not empty %} + + {{ row.talk.title }} + + {% else %} + {{ row.talk.title }} + {% endif %} + +
+ {% if row.talk.type %} + {{ row.talk.type }} + {% else %} + {{ row.event.type|default('Talk') }} + {% endif %} +
+ + {% endif %} + + + {% if row.event.website is not empty %} + + {{ row.event.name }} + + {% else %} + {{ row.event.name }} + {% endif %} + + {% if row.event.location is defined %} +
+ {{ row.event.location }} +
+ {% endif %} + + + {% if not upcoming %} + + {% if row.event.feedback and row.event.date <= today %} + + joind.in + + {% endif %} + + {% endif %} + diff --git a/source/_includes/talks-table.html.twig b/source/_includes/talks-table.html.twig new file mode 100644 index 00000000..4dd604a3 --- /dev/null +++ b/source/_includes/talks-table.html.twig @@ -0,0 +1,26 @@ +
+ + + + + + {% if not talk_page %} + + {% endif %} + + + + {% if not upcoming %} + + {% endif %} + + + + {% for row in talks %} + {% include "talks-table-row" with { + today: 'today'|date('Y-m-d') + } %} + {% endfor %} + +
DateTalkEventFeedback
+
diff --git a/source/_talks/building-static-websites-sculpin.md b/source/_talks/building-static-websites-sculpin.md new file mode 100644 index 00000000..146deb9b --- /dev/null +++ b/source/_talks/building-static-websites-sculpin.md @@ -0,0 +1,23 @@ +--- +title: Building Static Websites with Sculpin +type: Lightning talk +slides: + url: https://speakerdeck.com/opdavies/building-static-websites-with-sculpin + embed: +code: https://github.com/opdavies/sculpin-demo +tags: [meetups, phpsw, sculpin] +tweets: yes +video: + embed: + url: https://www.youtube.com/watch?v=aN53arCKZAU +events: + - { event: phpsw, date: '2015-10-14', feedback: https://joind.in/talk/view/15486 } +--- +[Sculpin][0] is a static site generator written in PHP. It converts Markdown files, Twig templates and standard HTML into a static HTML site that can be easily deployed. + +This talk will cover a little of the background to Sculpin and what it is, and then will move into some demonstrations of how to build a Sculpin site and what it can do! + +You can [view the full slides][1], including the embedded videos. + +[0]: http://sculpin.io +[1]: https://opdavies.github.io/slides-phpsw-sculpin diff --git a/source/_talks/dancing-for-drupal.md b/source/_talks/dancing-for-drupal.md new file mode 100644 index 00000000..38c5eea0 --- /dev/null +++ b/source/_talks/dancing-for-drupal.md @@ -0,0 +1,25 @@ +--- +title: Dancing for Drupal +slides: + url: https://speakerdeck.com/opdavies/umbristol-dancing-for-drupal + embed: +tags: [meetup, umbristol, drupal] +tweets: yes +events: + - { event: umbristol, date: '2015-08-25' } +--- +As part of their [CMS Dance-Off][1], I was selected to speak about Drupal alongside other speakers representing Umbraco, Sitecore and Episerver. + +The points to cover were: + +* How does your CMS store configuration data, 'structure' and content? +* How do you manage source-control, versioning and deployment? +* How do you manage multiple simultaneous editors and/or developers? +* How do you manage upgrades? +* What are the 3 best things about your CMS? +* What are the 3 worst things about your CMS? +* What does the future of your CMS look like? + +In each point, tried to cover the differences between Drupal core and developing a project using Drupal, as well as between Drupal 7 and Drupal 8, as things like source control and versioning would be approached differently. + +[1]: http://www.meetup.com/umBristol/events/223807592 diff --git a/source/_talks/deploying-drupal-fabric.md b/source/_talks/deploying-drupal-fabric.md new file mode 100644 index 00000000..7059ea52 --- /dev/null +++ b/source/_talks/deploying-drupal-fabric.md @@ -0,0 +1,27 @@ +--- +title: 'Deploying Drupal with Fabric' +type: Talk +slides: + url: 'https://speakerdeck.com/opdavies/deploying-drupal-and-anything-else-with-fabric' + embed: '' +video: + embed: ~ + url: ~ +tags: [meetup, conference, php, fabric, drupal] +meta: + og: + title: Deploying Drupal with Fabric + description: "You've built your Drupal site, now learn how to deploy it with Fabric." + type: website +events: + - { event: drupalcamp-dublin-17, date: '2017-10-20', time: '15:00 - 15:40' } + - { event: drupal-somerset, date: '2017-10-26' } + - { event: drupalcamp-london-18, date: '2018-03-03', time: '14:00 - 14:45' } +--- +You’ve built your website, and now you just need to deploy it. There are various ways that this could be done - from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended). + +My favourite deployment tool of late is [Fabric][1] - a Python based command line tool for running commands locally as well as on remote servers. It’s language and framework agnostic, and unopinionated so you define the steps and workflow that you need - from a basic few-step deployment to a full Capistrano style zero-downtime deployment. + +This talk will cover some introduction to Fabric and how to write your own fabfiles, to then covering some examples and demos of different use case deployments for your Drupal project. + +[1]: http://www.fabfile.org diff --git a/source/_talks/deploying-php-fabric.md b/source/_talks/deploying-php-fabric.md new file mode 100644 index 00000000..ffe7e396 --- /dev/null +++ b/source/_talks/deploying-php-fabric.md @@ -0,0 +1,31 @@ +--- +title: Deploying PHP Applications with Fabric +slides: + url: https://speakerdeck.com/opdavies/deploying-php-applications-with-fabric + embed: '' +# video: +# embed: '' +# url: https://www.youtube.com/watch?v=kM0MDUJE8ys +tags: [meetup, conference, php, fabric] +meta: + og: + title: Deploying PHP Applcations with Fabric + description: "You've built your PHP application, now learn how to deploy it with Fabric." + type: website + image: + url: /assets/images/talks/deploying-php-fabric.png + width: 2560 + height: 1440 + type: image/png +events: + - { event: nomad-php, date: '2017-04-20', time: '19:00 (CET)', type: 'Lightning talk' } + - { event: phpsw, date: '2017-09-13', feedback: https://joind.in/talk/a5ff3 } + - { event: phpnw17, date: '2017-10-01', time: '09:00 - 09:45', feedback: https://joind.in/talk/4e35d } +--- +You’ve built your application, and now you just need to deploy it. There are various ways that this could be done – from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended). + +My favourite deployment tool of late is [Fabric][1] – a Python based command line tool for running commands locally as well as on remote servers. It’s language and framework agnostic, and unopinionated so you define the steps and workflow that you need – from a basic few-step deployment to a full Capistrano style zero-downtime deployment. + +This talk will cover some introduction to Fabric and how to write your own fabfiles, and then look at some examples of different use case deployments for your PHP project. + +[1]: http://www.fabfile.org diff --git a/source/_talks/drupal-8-module-development.md b/source/_talks/drupal-8-module-development.md new file mode 100644 index 00000000..dccfe518 --- /dev/null +++ b/source/_talks/drupal-8-module-development.md @@ -0,0 +1,36 @@ +--- +title: Getting Started with Drupal 8 Module Development +tags: [conference, php, drupal, drupalcamp, drupal-8] +tweets: yes +code: https://github.com/opdavies/dclondon16-d8-module +slides: + url: https://speakerdeck.com/opdavies/getting-started-with-drupal-8-module-development + embed: +video: + url: https://www.youtube.com/watch?v=qO_Wh5WE3VA + embed: +meta: + og: + title: Getting Started with Drupal 8 Module Development + image: + url: /assets/images/talks/dclondon16.png + type: 'image/png' + height: 540 + width: 960 +events: + - { event: drupalcamp-london-16, date: '2016-03-05' } +--- +New to object-orientated PHP, Symfony or YAML, and want to get started building modules in Drupal 8? This is the session for you! + +In this session, we’ll cover: + +* Where Drupal 8 modules are located, and how they are structured. +* How to build a simple module, including our own permissions and routes. +* How to add your own controller and service classes. +* What is the service/dependency injection container, and how do we use it? +* How we can use tools such as PhpStorm and Drupal Console to speed up the process. + +What we won’t be covering: + +* Automated testing in PHPUnit or Simpletest. +* Adding third party libraries and external dependencies via Composer. diff --git a/source/_talks/drupal-8-rejoining-the-herd.md b/source/_talks/drupal-8-rejoining-the-herd.md new file mode 100644 index 00000000..75e64d01 --- /dev/null +++ b/source/_talks/drupal-8-rejoining-the-herd.md @@ -0,0 +1,14 @@ +--- +title: Drupal 8: Rejoining the Herd +tags: [conference, php, drupal, drupal-8] +slides: + url: https://speakerdeck.com/opdavies/drupal-rejoining-the-herd + embed: +events: + - { event: phpsc16, date: '2016-06-11', feedback: https://joind.in/talk/41d0f } +--- +[Drupal 8][0] was (finally) released on November 19th 2015, after almost 4 years of work and code commits by over 3,200 different contributors. Whilst it’s pretty much the same as the Drupal that we know and, hopefully, love, a lot has changed behind the scenes and under the hood! + +In this talk, I'll highlight some of the new features and improvements in Drupal 8, and discuss some of the benefits to Drupal site builders, themers, and module developers. I'll also talk about some of the non-technical changes and the cultural shift from "not invented here" to "proudly found elsewhere", and how we are rejoining the PHP herd. + +[0]: https://www.drupal.org/8 diff --git a/source/_talks/drupal-8.md b/source/_talks/drupal-8.md new file mode 100644 index 00000000..072efe00 --- /dev/null +++ b/source/_talks/drupal-8.md @@ -0,0 +1,16 @@ +--- +title: Drupal 8 +slides: + url: https://speakerdeck.com/opdavies/drupal-8 + embed: +video: + url: https://www.youtube.com/watch?v=36zCxPrOOzM + embed: +tags: [meetup, phpsw, drupal, drupal-8] +tweets: yes +events: + - { event: phpsw, date: '2015-04-08' } +--- +This was a ten minute lightning talk, designed to highlight the major changes coming in Drupal 8. + +I categorised the technical changes into groups for site builders, developers and themers, and also highlighted the cultural shift from "not invented here" to "proudly found elsewhere" and the benefits that brings. diff --git a/source/_talks/drupal-vm-generator.md b/source/_talks/drupal-vm-generator.md new file mode 100644 index 00000000..e9e73247 --- /dev/null +++ b/source/_talks/drupal-vm-generator.md @@ -0,0 +1,18 @@ +--- +title: Drupal VM Generator +type: Lightning talk +code: https://github.com/opdavies/drupal-vm-generator +tags: [drupal-vm, drupal-vm-generator, meetup, symfony] +slides: + url: https://speakerdeck.com/opdavies/bristol-dug-drupal-vm-generator + embed: +video: + url: https://youtu.be/U1pbKAAO2Wo?t=3696 + embed: +events: + - { event: nwdug, date: '2016-03-08' } + - { event: drupal-bristol, date: '2016-04-02' } +--- +An short talk about the [Drupal VM Generator][1] project. + +[1]: https://github.com/opdavies/drupal-vm-generator diff --git a/source/_talks/drupal-vm-meet-symfony-console.md b/source/_talks/drupal-vm-meet-symfony-console.md new file mode 100644 index 00000000..fc805950 --- /dev/null +++ b/source/_talks/drupal-vm-meet-symfony-console.md @@ -0,0 +1,19 @@ +--- +title: Drupal VM, Meet Symfony Console +tags: [conference, php, drupal-vm, symfony] +slides: + url: https://speakerdeck.com/opdavies/drupal-vm-meet-symfony-console + embed: +image: drupal-vm-meet-symfony-console.png +events: + - { event: drupalcamp-bristol-16, date: '2016-07-23' } +--- +_TL;DR - Come and learn about Symfony Console, with examples from a real-world project._ + +The [Drupal VM Generator][2] is a CLI application, built on [Symfony Console][0], that generates configuration files for [Drupal VM][1] based on personal settings and user interaction. + +After an introduction to Drupal VM itself and the Drupal VM Generator, we’ll jump into the code and see how Symfony Console applications are structured, how to write new commands, and how to integrate additional libraries like Guzzle, Twig and other Symfony components - whilst referencing code from the Drupal VM Generator project. + +[0]: http://symfony.com/doc/current/components/console/introduction.html +[1]: https://www.drupalvm.com +[2]: https://www.drupalvmgenerator.com diff --git a/source/_talks/drupalorg-2015.md b/source/_talks/drupalorg-2015.md new file mode 100644 index 00000000..3c40570a --- /dev/null +++ b/source/_talks/drupalorg-2015.md @@ -0,0 +1,10 @@ +--- +title: Drupal.org in 2015: What's Coming Next +tags: [conference, drupalcamp, drupalcamp-london, drupal-association] +slides: + url: https://speakerdeck.com/opdavies/drupal-dot-org-in-15 + embed: +events: + - { event: drupalcamp-brighton-15, date: '2015-01-18' } + - { event: drupalcamp-london-15, date: '2015-02-28' } +--- diff --git a/source/_talks/drush-make-drupalbristol.md b/source/_talks/drush-make-drupalbristol.md new file mode 100644 index 00000000..375e8347 --- /dev/null +++ b/source/_talks/drush-make-drupalbristol.md @@ -0,0 +1,9 @@ +--- +title: drush make drupalbristol +slides: + url: https://speakerdeck.com/opdavies/drush-make-drupalbristol + embed: +tags: [meetup, drupal, drupal-bristol, drush, drush-make] +events: + - { event: drupal-bristol, date: '2014-08-19' } +--- diff --git a/source/_talks/getting-your-data-into-drupal-8.md b/source/_talks/getting-your-data-into-drupal-8.md new file mode 100644 index 00000000..38c9749f --- /dev/null +++ b/source/_talks/getting-your-data-into-drupal-8.md @@ -0,0 +1,29 @@ +--- +title: Getting (Your Data) Into Drupal 8 +slides: + url: https://speakerdeck.com/opdavies/getting-your-data-into-drupal-8-drupal-bristol + embed: '' +video: + url: https://www.youtube.com/watch?v=jtmARTuYhp8 + embed: +tags: [drupalcamp, migration, drupal-8] +meta: + og: + title: Getting (Your Data) into Drupal 8 + description: "How I migrated the Drupal Bristol website onto Drupal 8." + type: website + image: + url: /assets/images/talks/getting-your-data-into-drupal-8.png + width: 2560 + height: 1440 + type: image/png +use: [talks] +events: + - { event: drupal-bristol, date: '2017-01-18' } + - { event: drupalcamp-london-17, date: '2017-03-04', time: '12:05 - 12:50' } +--- +If you’ve moved a site from Drupal 6 to 7, the chances are that you’ve either used the upgrade path to update your old site in-place, or you built a new site from scratch and used the Migrate module from contrib to migrate your data from the old database. + +In Drupal 8, things have changed as there’s no upgrade path from Drupal 7 and the Migrate module has been moved into core, though there are still migration related modules available in contrib. + +This talk will look at the core Migrate module and how it implements Drupal 8 features such as YAML and the plugin and configuration systems, and how to write your own migrations to get your data into Drupal 8. diff --git a/source/_talks/git-flow.md b/source/_talks/git-flow.md new file mode 100644 index 00000000..476fdf2e --- /dev/null +++ b/source/_talks/git-flow.md @@ -0,0 +1,13 @@ +--- +title: Never Commit to Master - An Introduction to Git Flow +slides: + url: https://speakerdeck.com/opdavies/never-commit-to-master-an-introduction-to-git-flow + embed: +video: + url: https://www.youtube.com/watch?v=T-miCpHxfds + embed: +tags: [conference, drupalcamp, drupalcamp-london, git, git-flow] +tweets: yes +events: + - { event: drupalcamp-london-14, date: '2014-03-01' } +--- diff --git a/source/_talks/goodbye-drush-make-hello-composer.md b/source/_talks/goodbye-drush-make-hello-composer.md new file mode 100644 index 00000000..86bd06f0 --- /dev/null +++ b/source/_talks/goodbye-drush-make-hello-composer.md @@ -0,0 +1,17 @@ +--- +title: Goodbye Drush Make. Hello Composer! +tags: ['meetup', 'drupal', 'composer'] +slides: + url: http://bit.ly/slides-goodbye-drush-make-hello-composer2 + embed: '' +events: + - { event: drupal-bristol, date: '2016-11-17' } + - { event: phpuk18, date: '2018-02-16', time: '14:40 - 15:40' } +--- +One of the main outcomes of Drupal 8 was “getting off the island” with third-party code included in core and adopting modern best practices from the wider PHP ecosystem - including [Composer][1], PHP’s dependency manager. + +Included to manage core’s dependencies, it has also gained traction in the contrib space with the creation of the Drupal Composer project, and the Drupal Packagist and now native endpoints on Drupal.org exposing contrib project metadata. + +In this session, I'll show how to fully manage a Drupal 7 or Drupal 8 website including contributed modules and themes and external libraries with Composer. + +[1]: https://getcomposer.org diff --git a/source/_talks/it-all-started-with-a-patch.md b/source/_talks/it-all-started-with-a-patch.md new file mode 100644 index 00000000..1d6d7082 --- /dev/null +++ b/source/_talks/it-all-started-with-a-patch.md @@ -0,0 +1,14 @@ +--- +title: It All Started With A Patch +type: Lightning talk +tags: [meetup, phpsw, open-source] +slides: + url: https://speakerdeck.com/opdavies/it-all-started-with-a-patch-phpsw + embed: +video: + url: https://www.youtube.com/watch?v=5FYMRR61sdo + embed: '' +events: + - { event: phpsw, date: '2017-02-08' } +--- +A crash course of why and how to get involved with open source. diff --git a/source/_talks/modern-drupal-development-with-composer.md b/source/_talks/modern-drupal-development-with-composer.md new file mode 100644 index 00000000..d47abe32 --- /dev/null +++ b/source/_talks/modern-drupal-development-with-composer.md @@ -0,0 +1,18 @@ +--- +title: Modern Drupal Development with Composer +type: Lightning talk +tags: ['meetups', 'phpsw', 'drupal', 'composer'] +slides: + url: https://speakerdeck.com/opdavies/modern-drupal-development-with-composer + embed: '' +video: + url: https://www.youtube.com/watch?v=Yi_FPI3xHwc + embed: '' +events: + - { event: phpsw, date: '2016-11-09' } +--- +Building a Drupal application? You no longer need to download archives to add new modules or update core, or deal with Drupal specific tools to manage your codebase. + +With Drupal "getting off the island" there has been an increase in the adoption of common PHP tools within the Drupal ecosystem. + +In this lightning talk, I’ll show how to build a Drupal application using Composer for dependency management. diff --git a/source/_talks/so-what-is-this-drupal-thing.md b/source/_talks/so-what-is-this-drupal-thing.md new file mode 100644 index 00000000..b540068b --- /dev/null +++ b/source/_talks/so-what-is-this-drupal-thing.md @@ -0,0 +1,9 @@ +--- +title: So, what is this Drupal thing? +video: + url: https://vimeo.com/49827006 + embed: +tags: [meetup, drupal, unified-diff] +events: + - { event: unifieddiff, date: '2012-09-05' } +--- diff --git a/source/_talks/taking-flight-with-tailwind-css.md b/source/_talks/taking-flight-with-tailwind-css.md new file mode 100644 index 00000000..a965673d --- /dev/null +++ b/source/_talks/taking-flight-with-tailwind-css.md @@ -0,0 +1,30 @@ +--- +title: Taking Flight with Tailwind CSS +slides: + url: https://speakerdeck.com/opdavies/taking-flight-with-tailwind-css + embed: '' +tags: [css, tailwind, meetup] +type: Lightning talk +events: + - { event: drupal-bristol, date: '2018-01-17' } +meta: + og: + title: Taking Flight with Tailwind CSS + description: An introduction to utility CSS and Tailwind. + type: website + image: + url: '/assets/images/talks/taking-flight-tailwind.png' + width: 2560 + height: 1440 + type: 'image/png' +--- +An introduction to utility class and component based styling, and how to soar with [Tailwind CSS][1]. + +Things we’ll cover: + +- Advantages and disadvantages to utility based styling and Tailwind. +- How to install Tailwind and add it to your build process. +- How to customise Tailwind. +- How to promote repeating classes into re-usable components. + +[1]: https://tailwindcss.com diff --git a/source/_talks/tdd-test-driven-drupal.md b/source/_talks/tdd-test-driven-drupal.md new file mode 100644 index 00000000..68b4e92c --- /dev/null +++ b/source/_talks/tdd-test-driven-drupal.md @@ -0,0 +1,30 @@ +--- +title: TDD - Test Driven Drupal +slides: + url: 'https://speakerdeck.com/opdavies/tdd-test-driven-drupal' + embed: '' +video: + url: https://www.youtube.com/watch?v=fdbxXOi2HP4 + embed: +tags: [drupalcamp, simpletest, phpunit, testing] +meta: + og: + title: TDD - Test Driven Drupal + description: "How to write tests and follow TDD for Drupal applications." + type: website + image: + url: /assets/images/talks/test-driven-drupal-development.png + width: 2560 + height: 1440 + type: image/png +use: [talks] +events: + - { event: drupalcamp-london-17, date: '2017-03-04', time: '16:15 - 17:00' } + - { event: drupalcamp-dublin-17, date: '2017-10-21', time: '12:00 - 12:40' } + - { event: drupal-bristol, date: '2017-11-22' } +--- +Testing is important. Why? It allows developers to add new features and edit and refactor existing code without the worry of adding regressions, reduces the reliance on manual testing to discover bugs, and by taking a test driven approach, your implementation code is leaner as you only write what is needed for your tests to pass. + +Drupal 7 includes the SimpleTest module for unit and functional testing, whilst Drupal 8 also includes and supports PHPUnit - the defacto PHP testing framework, used by other PHP projects including Symfony and Laravel - making it easier for people to test their code. And with testing being one of the Drupal core gates with tests needing to be included with every new feature or bug fix, and core’s 100% pass rate policy, testing has become an essential skill when contributing to core, or when working on your own projects. + +In this talk, we’ll cover the methodology and terminology involved with automated testing, and then take a test driven approach to creating a new Drupal module. diff --git a/source/_talks/test-drive-twig-with-sculpin.md b/source/_talks/test-drive-twig-with-sculpin.md new file mode 100644 index 00000000..9fcb05ae --- /dev/null +++ b/source/_talks/test-drive-twig-with-sculpin.md @@ -0,0 +1,19 @@ +--- +title: Test Drive Twig with Sculpin +slides: + url: https://speakerdeck.com/opdavies/test-drive-twig-with-sculpin + embed: +code: https://github.com/opdavies/sculpin-demo +tags: [conference, drupalcamp, drupalcamp-north, sculpin, twig] +tweets: yes +events: + - { event: drupalcamp-north-15, date: '2015-07-25' } +--- +[Sculpin][1] is a static site generator written in PHP, and based on [Symfony components][2]. It uses [YAML][3] and [Twig][4], which makes it very appealing to Drupal people wanting to learn these in preparation for Drupal 8. + +This session covered how to install Sculpin itself, as well as how to use it to build a static site from Markdown, HTML and Twig templates. We also covered Sculpin concepts such as content types, themes and partials, and Twig layouts, blocks and inheritance, as well as some tips and tricks that I've found whilst developing with Sculpin. + +[1]: https://sculpin.io +[2]: http://symfony.com/doc/current/components/index.html +[3]: http://yaml.org +[4]: http://twig.sensiolabs.org diff --git a/source/_talks/using-laravel-collections-outside-laravel.md b/source/_talks/using-laravel-collections-outside-laravel.md new file mode 100644 index 00000000..675b96b9 --- /dev/null +++ b/source/_talks/using-laravel-collections-outside-laravel.md @@ -0,0 +1,14 @@ +--- +title: Using Laravel Collections... Outside Laravel +slides: + url: https://speakerdeck.com/opdavies/using-laravel-collections-dot-dot-dot-outside-laravel + embed: '' +video: + url: https://youtu.be/1l0kO-iaN_o + embed: '' +tags: [nomad-php, lightning-talk, laravel, collections] +type: Lightning talk +events: + - { event: nomad-php, date: '2017-12-21', 'time': 19:00 CET } +--- +Laravel Collections are a powerful object-orientated way of interacting with PHP arrays, but did you know that they can be used outside of Laravel, in any PHP project? This short talk shows how we can use Composer to include Laravel Collections within a non-Laravel project and put them to use within your own code. diff --git a/source/talks-archive.html.twig b/source/talks-archive.html.twig new file mode 100644 index 00000000..86b66044 --- /dev/null +++ b/source/talks-archive.html.twig @@ -0,0 +1,40 @@ +--- +layout: page +title: Talk Archive +permalink: talks/archive +use: [talks] +talks: + - title: 'Drupal and the LDAP module' + events: + - { date: '2013-07-10', event: swdug } + - title: 'About the Drupal Association' + events: + - { date: '2014-08-19', event: swdug } +--- +{% block breadcrumb %} + +{% endblock %} + +{% block content %} +

Here are a list of my previous conference and user group talks:

+ + {% include "talks-table" with { talks: getPastTalks(data.talks, site.events) } %} + +

Upcoming talks can be found on the talks page.

+{% endblock %} diff --git a/source/talks.html.twig b/source/talks.html.twig index 2ea6a317..6b431bb6 100644 --- a/source/talks.html.twig +++ b/source/talks.html.twig @@ -6,21 +6,20 @@ meta: use: [talks] --- {% block content %} - {% for talk in data.talks %} -
-
-

- - {{ talk.title }} - -

+

I regularly speak at conferences and user groups about a range of subjects including Drupal, Sculpin and Git. If you would like to me to speak at your group or conference, please get in touch.

-
- {{ talk.summary|markdown }} -
-
+

Upcoming Talks

- {% include 'talk/image.html.twig' %} -
- {% endfor %} + {% set upcoming_talks = getUpcomingTalks(data.talks, site.events) %} + {% if upcoming_talks %} + {% include "talks-table" with { talks: upcoming_talks, upcoming: true } %} + {% else %} +

Nothing scheduled at the moment.

+ {% endif %} + +

Last 5 Talks

+ + {% include "talks-table" with { talks: getPastTalks(data.talks, site.events)|slice(0,5) } %} + +

All previous talks can be found in the talks archive.

{% endblock %} diff --git a/src/FormatTalksBundle/DependencyInjection/SculpinFormatTalksExtension.php b/src/FormatTalksBundle/DependencyInjection/SculpinFormatTalksExtension.php new file mode 100644 index 00000000..a992f0f3 --- /dev/null +++ b/src/FormatTalksBundle/DependencyInjection/SculpinFormatTalksExtension.php @@ -0,0 +1,20 @@ +load('services.yml'); + } +} diff --git a/src/FormatTalksBundle/Resources/config/services.yml b/src/FormatTalksBundle/Resources/config/services.yml new file mode 100644 index 00000000..8ed1edab --- /dev/null +++ b/src/FormatTalksBundle/Resources/config/services.yml @@ -0,0 +1,5 @@ +services: + twig.format_talks: + class: 'FormatTalksBundle\TwigExtension\FormatTalksExtension' + tags: + - { name: twig.extension } diff --git a/src/FormatTalksBundle/SculpinFormatTalksBundle.php b/src/FormatTalksBundle/SculpinFormatTalksBundle.php new file mode 100644 index 00000000..6e5071b7 --- /dev/null +++ b/src/FormatTalksBundle/SculpinFormatTalksBundle.php @@ -0,0 +1,9 @@ +today = (new \DateTime())->format('Y-m-d'); + } + + /** + * {@inheritdoc} + */ + public function getFunctions() + { + return [ + new Twig_SimpleFunction('getAllTalks', [$this, 'getAll']), + new Twig_SimpleFunction('getUpcomingTalks', [$this, 'getUpcoming']), + new Twig_SimpleFunction('getPastTalks', [$this, 'getPast']), + ]; + } + + /** + * Get all upcoming and previous talks. + * + * @param ProxySourceCollection|array $talks All talk nodes. + * @param array $eventData Shared event data. + * + * @return Collection A sorted collection of talks. + */ + public function getAll($talks, array $eventData = []) + { + return $this->format($talks, $eventData)->sortBy('event.date'); + } + + /** + * Get all upcoming talks. + * + * @param ProxySourceCollection|array $talks All talk nodes. + * @param array $eventData Shared event data. + * + * @return Collection A sorted collection of talks. + */ + public function getUpcoming($talks, array $eventData = []) + { + return $this->format($talks, $eventData) + ->filter(function ($talk) { + return $talk['event']['date'] >= $this->today; + }) + ->sortBy('event.date'); + } + + /** + * Get all past talks. + * + * @param ProxySourceCollection|array $talks All talk nodes. + * @param array $eventData Shared event data. + * + * @return Collection A sorted collection of talks. + */ + public function getPast($talks, array $eventData = []) + { + return $this->format($talks, $eventData) + ->filter(function ($talk) { + return $talk['event']['date'] < $this->today; + }) + ->sortByDesc('event.date'); + } + + /** + * Format the talk data into the required format. + * + * @param ProxySourceCollection|array $talks All talk nodes. + * @param array $eventData Shared event data. + * + * @return Collection The combined event and talk data. + */ + public function format($talks, array $eventData) + { + $eventData = collect($eventData); + + return collect($talks)->flatMap(function ($talk) use ($eventData) { + // Build an associative array with the talk, as well as the + // specified event data (e.g. date and time) as well as the shared + // event data (e.g. event name and website). + return collect($talk['events']) + ->map(function ($event) use ($talk, $eventData) { + $event = collect($event); + $event = $event->merge($eventData->get($event->get('event')))->all(); + + return compact('event', 'talk'); + }); + }); + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'format_talks'; + } +} diff --git a/src/FormatTalksBundle/composer.json b/src/FormatTalksBundle/composer.json new file mode 100644 index 00000000..6ce35c37 --- /dev/null +++ b/src/FormatTalksBundle/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "tightenco/collect": "^5.4" + } +} diff --git a/src/helpers.php b/src/helpers.php new file mode 100644 index 00000000..14aa5116 --- /dev/null +++ b/src/helpers.php @@ -0,0 +1,8 @@ +extension = new FormatTalksExtension(); + } + + /** + * @covers FormatTalksExtension::format() + */ + public function testFormat() + { + $event_data = [ + 'event-a' => [ + 'name' => 'Event A', + 'location' => 'Somewhere', + 'website' => 'http://event-a.com', + ], + 'event-b' => [ + 'name' => 'Event B', + 'location' => 'Somewhere else', + 'website' => 'http://event-b.com', + ], + ]; + + $talks = [ + [ + 'title' => 'Talk A', + 'events' => [ + ['event' => 'event-a', 'date' => '2018-01-01', 'time' => '09:00'], + ['event' => 'event-b', 'date' => '2018-01-30', 'time' => '12:00'], + ], + ], + [ + 'title' => 'Talk B', + 'events' => [ + ['event' => 'event-b', 'date' => '2018-01-31', 'time' => '17:00'], + ], + ], + ]; + + $results = $this->extension->format($talks, $event_data)->all(); + + $this->assertCount(3, $results); + + tap($results[0], function ($result) { + $this->assertArrayHasKey('event', $result); + $this->assertArrayHasKey('talk', $result); + + $this->assertEquals([ + 'date' => '2018-01-01', + 'event' => 'event-a', + 'location' => 'Somewhere', + 'name' => 'Event A', + 'time' => '09:00', + 'website' => 'http://event-a.com', + ], $result['event']); + + $this->assertEquals('Talk A', $result['talk']['title']); + }); + + tap($results[1], function ($result) { + $this->assertArrayHasKey('event', $result); + $this->assertArrayHasKey('talk', $result); + + $this->assertEquals([ + 'date' => '2018-01-30', + 'event' => 'event-b', + 'location' => 'Somewhere else', + 'name' => 'Event B', + 'time' => '12:00', + 'website' => 'http://event-b.com', + ], $result['event']); + + $this->assertEquals('Talk A', $result['talk']['title']); + }); + + tap($results[2], function ($result) { + $this->assertEquals('Talk B', $result['talk']['title']); + }); + } + + /** + * @covers FormatTalksExtension::getAll() + */ + public function testGetAll() + { + $eventA = ['date' => (new DateTime('+1 week'))->format('Y-m-d')]; + $eventB = ['date' => (new DateTime('-2 weeks'))->format('Y-m-d')]; + $eventC = ['date' => (new DateTime('today'))->format('Y-m-d')]; + + $talks = [ + ['events' => [$eventA, $eventB]], + ['events' => [$eventC]], + ]; + + $results = $this->extension->getAll($talks); + + $this->assertCount(3, $results); + + // Earliest events should be returned first. + $this->assertEquals( + [$eventB['date'], $eventC['date'], $eventA['date']], + $this->extractDates($results) + ); + } + + /** + * @covers FormatTalksExtension::getUpcoming() + */ + public function testGetUpcoming() + { + $eventA = ['date' => (new DateTime('+1 week'))->format('Y-m-d')]; + $eventB = ['date' => (new DateTime('-2 weeks'))->format('Y-m-d')]; + $eventC = ['date' => (new DateTime('today'))->format('Y-m-d')]; + $eventD = ['date' => (new DateTime('+1 day'))->format('Y-m-d')]; + $eventE = ['date' => (new DateTime('+2 weeks'))->format('Y-m-d')]; + + $talks = [ + ['events' => [$eventA, $eventC]], + ['events' => [$eventB, $eventE]], + ]; + + $results = $this->extension->getUpcoming($talks); + + $this->assertCount(3, $results); + + // Earliest events should be returned first. + $this->assertEquals( + [$eventC['date'], $eventA['date'], $eventE['date']], + $this->extractDates($results) + ); + } + + /** + * @covers FormatTalksExtension::getPast() + */ + public function testGetPast() + { + $eventA = ['date' => (new DateTime('+1 week'))->format('Y-m-d')]; + $eventB = ['date' => (new DateTime('-2 weeks'))->format('Y-m-d')]; + $eventC = ['date' => (new DateTime('today'))->format('Y-m-d')]; + $eventD = ['date' => (new DateTime('+1 day'))->format('Y-m-d')]; + $eventE = ['date' => (new DateTime('-2 days'))->format('Y-m-d')]; + $eventF = ['date' => (new DateTime('-2 months'))->format('Y-m-d')]; + + $talks = [ + ['events' => [$eventD]], + ['events' => [$eventA, $eventB, $eventC]], + ['events' => [$eventF]], + ]; + + $results = $this->extension->getPast($talks); + + $this->assertCount(2, $results); + + // Latest events should be returned first. + $this->assertEquals( + [$eventB['date'], $eventF['date']], + $this->extractDates($results) + ); + } + + /** + * Extract the returned dates from the results. + * + * @param Collection $results The results returned from the filter. + * + * @return array An array of dates. + */ + private function extractDates(Collection $results) + { + return $results->pluck('event.date')->all(); + } +} From 135de801bc1e93f016d47a64406627c9b929ef76 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 10 May 2018 00:17:07 +0100 Subject: [PATCH 2/2] Use tables again for talks --- .circleci/config.yml | 5 +++ source/_includes/talk/events.html.twig | 8 ++++ source/_layouts/talk.html.twig | 6 +-- ...2012-09-05-so-what-is-this-drupal-thing.md | 7 ---- source/_talks/2014-03-01-git-flow.md | 11 ------ .../2014-08-19-drush-make-drupalbristol.md | 9 ----- source/_talks/2015-01-18-drupalorg-2015.md | 9 ----- source/_talks/2015-04-08-drupal-8.md | 13 ------- ...2015-07-25-test-drive-twig-with-sculpin.md | 12 ------ .../_talks/2015-08-25-dancing-for-drupal.md | 21 ----------- ...-10-14-building-static-websites-sculpin.md | 14 ------- .../2016-03-05-drupal-8-module-development.md | 37 ------------------- .../_talks/2016-03-08-drupal-vm-generator.md | 17 --------- .../2016-06-11-drupal-8-rejoining-the-herd.md | 11 ------ ...16-07-23-drupal-vm-meet-symfony-console.md | 14 ------- ...modern-drupal-development-with-composer.md | 15 -------- ...11-17-goodbye-drush-make-hello-composer.md | 14 ------- ...7-01-18-getting-your-data-into-drupal-8.md | 26 ------------- .../2017-02-08-it-all-started-with-a-patch.md | 10 ----- .../2017-03-04-tdd-test-driven-drupal.md | 32 ---------------- .../_talks/2017-04-20-deploying-php-fabric.md | 24 ------------ .../2017-10-20-deploying-drupal-fabric.md | 19 ---------- ...ing-laravel-collections-outside-laravel.md | 11 ------ ...8-01-17-taking-flight-with-tailwind-css.md | 26 ------------- .../building-static-websites-sculpin.md | 14 ++++--- source/_talks/dancing-for-drupal.md | 8 ++-- source/_talks/deploying-drupal-fabric.md | 17 +++++---- source/_talks/deploying-php-fabric.md | 22 +++++++---- source/_talks/drupal-8-module-development.md | 13 ++++--- ...> drupal-8-php-libraries-drupalorg-api.md} | 12 +++--- source/_talks/drupal-8-rejoining-the-herd.md | 9 +++-- source/_talks/drupal-8.md | 13 ++++--- source/_talks/drupal-vm-generator.md | 16 ++++---- .../_talks/drupal-vm-meet-symfony-console.md | 8 ++-- source/_talks/drupalorg-2015.md | 12 ++++-- source/_talks/drush-make-drupalbristol.md | 9 +++-- .../_talks/getting-your-data-into-drupal-8.md | 19 ++++++---- source/_talks/git-flow.md | 14 ++++--- .../goodbye-drush-make-hello-composer.md | 15 ++++++-- source/_talks/it-all-started-with-a-patch.md | 13 ++++--- ...modern-drupal-development-with-composer.md | 13 ++++--- source/_talks/so-what-is-this-drupal-thing.md | 9 +++-- .../_talks/taking-flight-with-tailwind-css.md | 10 +++-- source/_talks/tdd-test-driven-drupal.md | 21 +++++++---- source/_talks/test-drive-twig-with-sculpin.md | 8 ++-- ...ing-laravel-collections-outside-laravel.md | 14 ++++--- source/talks.html.twig | 2 +- 47 files changed, 186 insertions(+), 476 deletions(-) create mode 100644 source/_includes/talk/events.html.twig delete mode 100644 source/_talks/2012-09-05-so-what-is-this-drupal-thing.md delete mode 100644 source/_talks/2014-03-01-git-flow.md delete mode 100644 source/_talks/2014-08-19-drush-make-drupalbristol.md delete mode 100644 source/_talks/2015-01-18-drupalorg-2015.md delete mode 100644 source/_talks/2015-04-08-drupal-8.md delete mode 100644 source/_talks/2015-07-25-test-drive-twig-with-sculpin.md delete mode 100644 source/_talks/2015-08-25-dancing-for-drupal.md delete mode 100644 source/_talks/2015-10-14-building-static-websites-sculpin.md delete mode 100644 source/_talks/2016-03-05-drupal-8-module-development.md delete mode 100644 source/_talks/2016-03-08-drupal-vm-generator.md delete mode 100644 source/_talks/2016-06-11-drupal-8-rejoining-the-herd.md delete mode 100644 source/_talks/2016-07-23-drupal-vm-meet-symfony-console.md delete mode 100644 source/_talks/2016-11-09-modern-drupal-development-with-composer.md delete mode 100644 source/_talks/2016-11-17-goodbye-drush-make-hello-composer.md delete mode 100644 source/_talks/2017-01-18-getting-your-data-into-drupal-8.md delete mode 100644 source/_talks/2017-02-08-it-all-started-with-a-patch.md delete mode 100644 source/_talks/2017-03-04-tdd-test-driven-drupal.md delete mode 100644 source/_talks/2017-04-20-deploying-php-fabric.md delete mode 100644 source/_talks/2017-10-20-deploying-drupal-fabric.md delete mode 100644 source/_talks/2017-12-12-using-laravel-collections-outside-laravel.md delete mode 100644 source/_talks/2018-01-17-taking-flight-with-tailwind-css.md rename source/_talks/{2018-04-18-drupal-8-php-libraries-drupalorg-api.md => drupal-8-php-libraries-drupalorg-api.md} (70%) diff --git a/.circleci/config.yml b/.circleci/config.yml index eab05651..54b58626 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,6 +15,11 @@ jobs: paths: - ./vendor key: v1-dependencies-{{ checksum "composer.json" }} + - run: ./vendor/bin/phpunit --log-junit ~/phpunit/junit.xml + - store_test_results: + path: ~/phpunit + - store_artifacts: + path: ~/phpunit deploy: docker: diff --git a/source/_includes/talk/events.html.twig b/source/_includes/talk/events.html.twig new file mode 100644 index 00000000..f5ad5d28 --- /dev/null +++ b/source/_includes/talk/events.html.twig @@ -0,0 +1,8 @@ +
+

Events

+ + {% include "talks-table" with { + talks: getAllTalks([page], site.events), + talk_page: true + } %} +
diff --git a/source/_layouts/talk.html.twig b/source/_layouts/talk.html.twig index 126db531..a340f43d 100644 --- a/source/_layouts/talk.html.twig +++ b/source/_layouts/talk.html.twig @@ -2,11 +2,8 @@ {% block content_wrapper %}
-
- {{ page.date|date('jS F Y') }} -
-
+

Abstract

{{ page.summary|markdown }} {% block content %}{% endblock %}
@@ -14,4 +11,5 @@ {% include 'talk/slides' %} {% include 'talk/video' %} + {% include 'talk/events' %} {% endblock %} diff --git a/source/_talks/2012-09-05-so-what-is-this-drupal-thing.md b/source/_talks/2012-09-05-so-what-is-this-drupal-thing.md deleted file mode 100644 index e9b2b3c2..00000000 --- a/source/_talks/2012-09-05-so-what-is-this-drupal-thing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: So, what is this Drupal thing? -summary: My very first talk, where I talk about Drupal, what it is and what it can do. -vimeo: - id: 49827006 ---- -Presented at the [unified.diff meetup](http://unifieddiff.co.uk) in September 2012. diff --git a/source/_talks/2014-03-01-git-flow.md b/source/_talks/2014-03-01-git-flow.md deleted file mode 100644 index 55bc880d..00000000 --- a/source/_talks/2014-03-01-git-flow.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Never Commit to Master - An Introduction to Git Flow -summary: An introduction to the Git Flow branching model and the git-flow plugin, and how I’ve used them to manage a Drupal development project. -speakerdeck: - id: 201559e0f103013198dd5a5f6f23ab67 - ratio: 1.29456384323641 -youtube: - id: T-miCpHxfds -image: git-flow.png ---- -Presented at [DrupalCamp London 2014](http://drupalcamp.london). diff --git a/source/_talks/2014-08-19-drush-make-drupalbristol.md b/source/_talks/2014-08-19-drush-make-drupalbristol.md deleted file mode 100644 index 3f23e181..00000000 --- a/source/_talks/2014-08-19-drush-make-drupalbristol.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: drush make drupalbristol -summary: An introduction to Drush Make and how to use it to build reusable custom installation profiles or entire websites. -speakerdeck: - id: 42605700f102013198de5a5f6f23ab67 - ratio: 1.29456384323641 -image: drush-make-drupalbristol.png ---- -Presented at the [Drupal Bristol user group](https://www.drupalbristol.org.uk) in August 2014. diff --git a/source/_talks/2015-01-18-drupalorg-2015.md b/source/_talks/2015-01-18-drupalorg-2015.md deleted file mode 100644 index fe8bec6f..00000000 --- a/source/_talks/2015-01-18-drupalorg-2015.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Drupal.org in 2015: What’s Coming Next' -summary: A retrospective of the Drupal Association’s work in 2014 and a look forward to what we’ll be working on in 2015. -speakerdeck: - id: 0cf8d7b647c94ae289e9db2b46a9e8f2 - ratio: 1.77777777777778 -image: drupalorg-2014-retrospective.png ---- -Presented at [DrupalCamp Brighton](http://www.drupalcampbrighton.co.uk) and [DrupalCamp London](https://drupalcamp.london) 2015. diff --git a/source/_talks/2015-04-08-drupal-8.md b/source/_talks/2015-04-08-drupal-8.md deleted file mode 100644 index 0051fd4b..00000000 --- a/source/_talks/2015-04-08-drupal-8.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Drupal 8 -summary: This was a ten minute lightning talk, designed to highlight the major changes coming in Drupal 8. -speakerdeck: - id: 46ba4ba577d94a32b7abdade610ceb69 - ratio: 1.29456384323641 -youtube: - id: 36zCxPrOOzM -image: drupal-8.png ---- -I categorised the technical changes into groups for site builders, developers and themers, and also highlighted the cultural shift from "not invented here" to "proudly found elsewhere" and the benefits that brings. - -Presented at the [PHPSW user group](https://phpsw.uk) in April 2015. diff --git a/source/_talks/2015-07-25-test-drive-twig-with-sculpin.md b/source/_talks/2015-07-25-test-drive-twig-with-sculpin.md deleted file mode 100644 index c7ebfed4..00000000 --- a/source/_talks/2015-07-25-test-drive-twig-with-sculpin.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Test Drive Twig with Sculpin -summary: Sculpin is a static site generator written in PHP, and based on Symfony components. It uses YAML and Twig, which makes it very appealing to Drupal people wanting to learn these in preparation for Drupal 8. -speakerdeck: - id: 54589d2e50a3476a9a75aed809e9edf1 - ratio: 1.77777777777778 -image: test-drive-twig-sculpin.png ---- - -This session covers how to install Sculpin itself, as well as how to use it to build a static site from Markdown, HTML and Twig templates. We also covered Sculpin concepts such as content types, themes and partials, and Twig layouts, blocks and inheritance, as well as some tips and tricks that I've found whilst developing with Sculpin. - -Presented at [DrupalCamp North](http://drupalcampnorth.org) 2015. diff --git a/source/_talks/2015-08-25-dancing-for-drupal.md b/source/_talks/2015-08-25-dancing-for-drupal.md deleted file mode 100644 index 50b1071d..00000000 --- a/source/_talks/2015-08-25-dancing-for-drupal.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Dancing for Drupal -speakerdeck: - id: ffa9b6dea6dc4a8eb207b9982ed6e1bd - ratio: 1.33333333333333 -summary: As part of their CMS Dance-Off event, I was selected to speak about Drupal alongside other speakers representing Umbraco, Sitecore and Episerver. -image: dancing-for-drupal.png ---- -The points to cover were: - -* How does your CMS store configuration data, 'structure' and content? -* How do you manage source-control, versioning and deployment? -* How do you manage multiple simultaneous editors and/or developers? -* How do you manage upgrades? -* What are the 3 best things about your CMS? -* What are the 3 worst things about your CMS? -* What does the future of your CMS look like? - -In each point, tried to cover the differences between Drupal core and developing a project using Drupal, as well as between Drupal 7 and Drupal 8, as things like source control and versioning would be approached differently. - -Presented at the [umBristol user group](http://umbristol.co.uk) in August 2015. diff --git a/source/_talks/2015-10-14-building-static-websites-sculpin.md b/source/_talks/2015-10-14-building-static-websites-sculpin.md deleted file mode 100644 index 00fdf2fe..00000000 --- a/source/_talks/2015-10-14-building-static-websites-sculpin.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Building Static Websites with Sculpin -summary: | - Sculpin is a static site generator written in PHP. It converts Markdown files, Twig templates and standard HTML into a static HTML site that can be easily deployed. - - This talk will cover a little of the background to Sculpin and what it is, and then will move into some demonstrations of how to build a Sculpin site and what it can do! -speakerdeck: - id: 6c9c4be1a1344f1291ff13a391674a66 - ratio: 1.37081659973226 -youtube: - id: aN53arCKZAU -image: static-websites-sculpin.png ---- -Presented at the [PHPSW user group](https://phpsw.uk) in October 2015. diff --git a/source/_talks/2016-03-05-drupal-8-module-development.md b/source/_talks/2016-03-05-drupal-8-module-development.md deleted file mode 100644 index 298b3381..00000000 --- a/source/_talks/2016-03-05-drupal-8-module-development.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Getting Started with Drupal 8 Module Development -summary: New to object-orientated PHP, Symfony or YAML, and want to get started building modules in Drupal 8? This is the session for you! -speakerdeck: - id: 0041804e52664d12a8e31cd118264813 - ratio: 1.77777777777778 -youtube: - id: qO_Wh5WE3VA -image: dclondon16.png -meta: - og: - title: Getting Started with Drupal 8 Module Development - image: - url: /build/static/images/talks/dclondon16.png - type: 'image/png' - height: 540 - width: 960 ---- -In this session, we’ll cover: - -* Where Drupal 8 modules are located, and how they are structured. -* How to build a simple module, including our own permissions and routes. -* How to add your own controller and service classes. -* What is the service/dependency injection container, and how do we use it? -* How we can use tools such as PhpStorm and Drupal Console to speed up the process. - -What we won’t be covering: - -* Automated testing in PHPUnit or Simpletest. -* Adding third party libraries and external dependencies via Composer. - -Presented at [DrupalCamp London][1] 2016. - -The source code is available on [GitHub][0]. - -[0]: https://github.com/opdavies/dclondon16-d8-module -[1]: http://drupalcamp.london diff --git a/source/_talks/2016-03-08-drupal-vm-generator.md b/source/_talks/2016-03-08-drupal-vm-generator.md deleted file mode 100644 index f2dead5e..00000000 --- a/source/_talks/2016-03-08-drupal-vm-generator.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Drupal VM Generator -summary: An short talk about the Drupal VM Generator project. -speakerdeck: - id: a27ee1d2bfed4a209dc395fa455acb41 - ratio: 1.37081659973226 -youtube: - id: U1pbKAAO2Wo?t=1h1m37s -image: drupal-vm-generator.png ---- -Presented at the [NWDUG][1] and [Drupal Bristol][2] user groups in 2016. - -The source code for the project is available on [GitHub][0]. - -[0]: https://github.com/opdavies/drupal-vm-generator -[1]: http://nwdrupal.org.uk -[2]: https://www.drupalbristol.org.uk diff --git a/source/_talks/2016-06-11-drupal-8-rejoining-the-herd.md b/source/_talks/2016-06-11-drupal-8-rejoining-the-herd.md deleted file mode 100644 index 85870853..00000000 --- a/source/_talks/2016-06-11-drupal-8-rejoining-the-herd.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Drupal 8: Rejoining the Herd -summary: Drupal 8 was (finally) released on November 19th 2015, after almost 4 years of work and code commits by over 3,200 different contributors. Whilst it’s pretty much the same as the Drupal that we know and, hopefully, love, a lot has changed behind the scenes and under the hood! -speakerdeck: - id: 440fd6592f474741bc606c96bc32c104 - ratio: 1. -image: drupal-rejoining-php-herd.png ---- -In this talk, I'll highlight some of the new features and improvements in Drupal 8, and discuss some of the benefits to Drupal site builders, themers, and module developers. I'll also talk about some of the non-technical changes and the cultural shift from "not invented here" to "proudly found elsewhere", and how we are rejoining the PHP herd. - -Presented at [PHP South Coast 2016](http://2016.phpsouthcoast.co.uk). diff --git a/source/_talks/2016-07-23-drupal-vm-meet-symfony-console.md b/source/_talks/2016-07-23-drupal-vm-meet-symfony-console.md deleted file mode 100644 index 4c755f88..00000000 --- a/source/_talks/2016-07-23-drupal-vm-meet-symfony-console.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Drupal VM, Meet Symfony Console -summary: | - _TL;DR - Come and learn about Symfony Console, with examples from a real-world project._ - - The Drupal VM Generator is a CLI application, built on Symfony Console, that generates configuration files for Drupal VM based on personal settings and user interaction. -speakerdeck: - id: 56c79770f73f4e47a542a30243437c49 - ratio: 1.37081659973226 -image: drupal-vm-meet-symfony-console.png ---- -After an introduction to Drupal VM itself and the Drupal VM Generator, we’ll jump into the code and see how Symfony Console applications are structured, how to write new commands, and how to integrate additional libraries like Guzzle, Twig and other Symfony components - whilst referencing code from the Drupal VM Generator project. - -Presented at [DrupalCamp Bristol 2016](https://2016.drupalcampbristol.co.uk). diff --git a/source/_talks/2016-11-09-modern-drupal-development-with-composer.md b/source/_talks/2016-11-09-modern-drupal-development-with-composer.md deleted file mode 100644 index b50ed51e..00000000 --- a/source/_talks/2016-11-09-modern-drupal-development-with-composer.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Modern Drupal Development with Composer -summary: Building a Drupal application? You no longer need to download archives to add new modules or update core, or deal with Drupal specific tools to manage your codebase. -speakerdeck: - id: 7a1358502526425a9cfd288f85fb32f3 - ratio: 1.37081659973226 -youtube: - id: Yi_FPI3xHwc -image: modern-drupal-development-composer.png ---- -With Drupal "getting off the island" there has been an increase in the adoption of common PHP tools within the Drupal ecosystem. - -In this lightning talk, I’ll show how to build a Drupal application using Composer for dependency management. - -Presented at the [PHPSW user group](https://phpsw.uk) in November 2016. diff --git a/source/_talks/2016-11-17-goodbye-drush-make-hello-composer.md b/source/_talks/2016-11-17-goodbye-drush-make-hello-composer.md deleted file mode 100644 index 69ccba9b..00000000 --- a/source/_talks/2016-11-17-goodbye-drush-make-hello-composer.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Goodbye Drush Make. Hello Composer! -summary: - One of the main outcomes of Drupal 8 was “getting off the island” with third-party code included in core and adopting modern best practices from the wider PHP ecosystem - including Composer, PHP’s dependency manager. -speakerdeck: - id: f7de07ae513f49798de78b6f8c3ef8cd - ratio: 1.37081659973226 -image: drush-make-composer-2.png ---- -Included to manage core’s dependencies, it has also gained traction in the contrib space with the creation of the Drupal Composer project, and the Drupal Packagist and now native endpoints on Drupal.org exposing contrib project metadata. - -In this session, I'll show how to fully manage a Drupal 7 or Drupal 8 website including contributed modules and themes and external libraries with Composer. - -Presented at the [Drupal Bristol](https://www.drupalbristol.org.uk) user group in 2016 and the [PHP UK conference](https://www.phpconference.co.uk) in 2018. diff --git a/source/_talks/2017-01-18-getting-your-data-into-drupal-8.md b/source/_talks/2017-01-18-getting-your-data-into-drupal-8.md deleted file mode 100644 index 26e25281..00000000 --- a/source/_talks/2017-01-18-getting-your-data-into-drupal-8.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Getting (Your Data) Into Drupal 8 -summary: | - If you’ve moved a site from Drupal 6 to 7, the chances are that you’ve either used the upgrade path to update your old site in-place, or you built a new site from scratch and used the Migrate module from contrib to migrate your data from the old database. - - In Drupal 8, things have changed as there’s no upgrade path from Drupal 7 and the Migrate module has been moved into core, though there are still migration related modules available in contrib. -speakerdeck: - id: 63e5dfce996e46699e304d50e896477b - ratio: 1.77777777777778 -youtube: - id: jtmARTuYhp8 -image: getting-your-data-into-drupal-8.png -meta: - og: - title: Getting (Your Data) into Drupal 8 - description: "How I migrated the Drupal Bristol website onto Drupal 8." - type: website - image: - url: /build/static/images/talks/getting-your-data-into-drupal-8.png - width: 2560 - height: 1440 - type: image/png ---- -This talk will look at the core Migrate module and how it implements Drupal 8 features such as YAML and the plugin and configuration systems, and how to write your own migrations to get your data into Drupal 8. - -Presented at the [Drupal Bristol](https://www.drupalbristol.org.uk) user group and [DrupalCamp London](https://drupalcamp.london) in 2017. diff --git a/source/_talks/2017-02-08-it-all-started-with-a-patch.md b/source/_talks/2017-02-08-it-all-started-with-a-patch.md deleted file mode 100644 index ca2fdfdb..00000000 --- a/source/_talks/2017-02-08-it-all-started-with-a-patch.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: It All Started With A Patch -summary: A crash course of why and how to get involved with open source. -speakerdeck: - id: 5862bdecb7a24cfaa5fc844696fafa0c - ratio: 1.37081659973226 -youtube: - id: 5FYMRR61sdo -image: it-all-started-with-a-patch.png ---- diff --git a/source/_talks/2017-03-04-tdd-test-driven-drupal.md b/source/_talks/2017-03-04-tdd-test-driven-drupal.md deleted file mode 100644 index 64c40a2e..00000000 --- a/source/_talks/2017-03-04-tdd-test-driven-drupal.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: TDD - Test Driven Drupal -summary: Testing is important. Why? It allows developers to add new features and edit and refactor existing code without the worry of adding regressions, reduces the reliance on manual testing to discover bugs, and by taking a test driven approach, your implementation code is leaner as you only write what is needed for your tests to pass. -speakerdeck: - id: 088cb18033064f5cb18d1079795294a1 - ratio: 1.77777777777778 -youtube: - id: fdbxXOi2HP4 -image: test-driven-drupal-development.png -meta: - og: - title: TDD - Test Driven Drupal - description: "How to write tests and follow TDD for Drupal applications." - type: website - image: - url: /build/static/images/talks/test-driven-drupal-development.png - width: 2560 - height: 1440 - type: image/png ---- -Drupal 7 includes the SimpleTest module for unit and functional testing, whilst Drupal 8 also includes and supports PHPUnit - the defacto PHP testing framework, used by other PHP projects including Symfony and Laravel - making it easier for people to test their code. And with testing being one of the Drupal core gates with tests needing to be included with every new feature or bug fix, and core’s 100% pass rate policy, testing has become an essential skill when contributing to core, or when working on your own projects. - -In this talk, we’ll cover the methodology and terminology involved with automated testing, and then take a test driven approach to creating a new Drupal module. - -Presented at [DrupalCamp London][1], [DrupalCamp Dublin][2] and the [Drupal Bristol][3] user group in 2017. - -The example code is available on [GitHub][0]. The 8.x-1.x branch contains the original code from the presentation which uses functional tests. The 8.x-2.x branch contains the refactored code that instead uses kernel tests. - -[0]: https://github.com/opdavies/drupal-module-tdd-dublin -[1]: https://drupalcamp.london -[2]: http://2017.drupal.ie -[3]: https://www.drupalbristol.org.uk diff --git a/source/_talks/2017-04-20-deploying-php-fabric.md b/source/_talks/2017-04-20-deploying-php-fabric.md deleted file mode 100644 index c1b0550a..00000000 --- a/source/_talks/2017-04-20-deploying-php-fabric.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Deploying PHP Applications with Fabric -summary: | - You’ve built your application, and now you just need to deploy it. There are various ways that this could be done – from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended). - - My favourite deployment tool of late is Fabric – a Python based command line tool for running commands locally as well as on remote servers. It’s language and framework agnostic, and unopinionated so you define the steps and workflow that you need – from a basic few-step deployment to a full Capistrano style zero-downtime deployment. -speakerdeck: - id: c147618ce07546ca92f92983c52d6a41 - ratio: 1.77777777777778 -image: deploying-php-fabric.png -meta: - og: - title: Deploying PHP Applcations with Fabric - description: "You've built your PHP application, now learn how to deploy it with Fabric." - type: website - image: - url: /build/static/images/talks/deploying-php-fabric.png - width: 2560 - height: 1440 - type: image/png ---- -This talk will cover some introduction to Fabric and how to write your own fabfiles, and then look at some examples of different use case deployments for your PHP project. - -Originally presented as a [Nomad PHP](https://nomadphp.com) lightning talk, but then I presented a full version to the [PHPSW user group](https://phpsw.uk) and the [PHPNW conference](https://conference.phpnw.org.uk/phpnw17) in 2017. diff --git a/source/_talks/2017-10-20-deploying-drupal-fabric.md b/source/_talks/2017-10-20-deploying-drupal-fabric.md deleted file mode 100644 index e2d55a7b..00000000 --- a/source/_talks/2017-10-20-deploying-drupal-fabric.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Deploying Drupal with Fabric -summary: | - You’ve built your website, and now you just need to deploy it. There are various ways that this could be done - from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended). - - My favourite deployment tool of late is Fabric - a Python based command line tool for running commands locally as well as on remote servers. It’s language and framework agnostic, and unopinionated so you define the steps and workflow that you need - from a basic few-step deployment to a full Capistrano style zero-downtime deployment. -speakerdeck: - id: 40d1eca4bd484afc86295924fff5dd41 - ratio: 1.77777777777778 -image: fabric-drupal.png -meta: - og: - title: Deploying Drupal with Fabric - description: "You've built your Drupal site, now learn how to deploy it with Fabric." - type: website ---- -This talk will cover some introduction to Fabric and how to write your own fabfiles, to then covering some examples and demos of different use case deployments for your Drupal project. - -Presented at [DrupalCamp Dublin](http://2017.drupal.ie) and the Drupal Somerset user group in 2017. diff --git a/source/_talks/2017-12-12-using-laravel-collections-outside-laravel.md b/source/_talks/2017-12-12-using-laravel-collections-outside-laravel.md deleted file mode 100644 index 5dad8d04..00000000 --- a/source/_talks/2017-12-12-using-laravel-collections-outside-laravel.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Using Laravel Collections... Outside Laravel -summary: Laravel Collections are a powerful object-orientated way of interacting with PHP arrays, but did you know that they can be used outside of Laravel, in any PHP project? This short talk shows how we can use Composer to include Laravel Collections within a non-Laravel project and put them to use within your own code. -speakerdeck: - id: 76f1718a75a74940b0b028aac8b9f78b - ratio: 1.77777777777778 -youtube: - id: 1l0kO-iaN_o -image: laravel-collections.png ---- -Presented as a lightning talk for [Nomad PHP](https://nomadphp.com). diff --git a/source/_talks/2018-01-17-taking-flight-with-tailwind-css.md b/source/_talks/2018-01-17-taking-flight-with-tailwind-css.md deleted file mode 100644 index e47ae885..00000000 --- a/source/_talks/2018-01-17-taking-flight-with-tailwind-css.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Taking Flight with Tailwind CSS -summary: An introduction to utility class and component based styling, and how to soar with Tailwind CSS. -speakerdeck: - id: 10ca51f23560443d83b898a92929b4b3 - ratio: "1.77777777777778" -image: taking-flight-tailwind.png -meta: - og: - title: Taking Flight with Tailwind CSS - description: An introduction to utility CSS and Tailwind. - type: website - image: - url: '/build/static/images/talks/taking-flight-tailwind.png' - width: 2560 - height: 1440 - type: 'image/png' ---- -Things we’ll cover: - -- Advantages and disadvantages to utility based styling and Tailwind. -- How to install Tailwind and add it to your build process. -- How to customise Tailwind. -- How to promote repeating classes into re-usable components. - -Presented at the [Drupal Bristol](https://www.drupalbristol.org.uk) user group in January 2018. diff --git a/source/_talks/building-static-websites-sculpin.md b/source/_talks/building-static-websites-sculpin.md index 146deb9b..83a9f04b 100644 --- a/source/_talks/building-static-websites-sculpin.md +++ b/source/_talks/building-static-websites-sculpin.md @@ -1,17 +1,19 @@ --- title: Building Static Websites with Sculpin type: Lightning talk -slides: +speakerdeck: + id: 6c9c4be1a1344f1291ff13a391674a66 + ratio: '1.37081659973226' url: https://speakerdeck.com/opdavies/building-static-websites-with-sculpin - embed: code: https://github.com/opdavies/sculpin-demo tags: [meetups, phpsw, sculpin] tweets: yes -video: - embed: - url: https://www.youtube.com/watch?v=aN53arCKZAU +youtube: + id: aN53arCKZAU events: - - { event: phpsw, date: '2015-10-14', feedback: https://joind.in/talk/view/15486 } + - event: phpsw + date: '2015-10-14' + feedback: https://joind.in/talk/view/15486 --- [Sculpin][0] is a static site generator written in PHP. It converts Markdown files, Twig templates and standard HTML into a static HTML site that can be easily deployed. diff --git a/source/_talks/dancing-for-drupal.md b/source/_talks/dancing-for-drupal.md index 38c5eea0..dfe4a7cb 100644 --- a/source/_talks/dancing-for-drupal.md +++ b/source/_talks/dancing-for-drupal.md @@ -1,12 +1,14 @@ --- title: Dancing for Drupal -slides: +speakerdeck: + id: ffa9b6dea6dc4a8eb207b9982ed6e1bd + ratio: '1.33333333333333' url: https://speakerdeck.com/opdavies/umbristol-dancing-for-drupal - embed: tags: [meetup, umbristol, drupal] tweets: yes events: - - { event: umbristol, date: '2015-08-25' } + - event: umbristol + date: '2015-08-25' --- As part of their [CMS Dance-Off][1], I was selected to speak about Drupal alongside other speakers representing Umbraco, Sitecore and Episerver. diff --git a/source/_talks/deploying-drupal-fabric.md b/source/_talks/deploying-drupal-fabric.md index 7059ea52..6c006998 100644 --- a/source/_talks/deploying-drupal-fabric.md +++ b/source/_talks/deploying-drupal-fabric.md @@ -1,12 +1,11 @@ --- title: 'Deploying Drupal with Fabric' type: Talk -slides: +speakerdeck: + id: 40d1eca4bd484afc86295924fff5dd41 + ratio: '1.77777777777778' url: 'https://speakerdeck.com/opdavies/deploying-drupal-and-anything-else-with-fabric' - embed: '' -video: - embed: ~ - url: ~ + embed: '' tags: [meetup, conference, php, fabric, drupal] meta: og: @@ -14,9 +13,11 @@ meta: description: "You've built your Drupal site, now learn how to deploy it with Fabric." type: website events: - - { event: drupalcamp-dublin-17, date: '2017-10-20', time: '15:00 - 15:40' } - - { event: drupal-somerset, date: '2017-10-26' } - - { event: drupalcamp-london-18, date: '2018-03-03', time: '14:00 - 14:45' } + - event: drupalcamp-dublin-17 + date: '2017-10-20' + time: '15:00 - 15:40' + - event: drupal-somerset + date: '2017-10-26' --- You’ve built your website, and now you just need to deploy it. There are various ways that this could be done - from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended). diff --git a/source/_talks/deploying-php-fabric.md b/source/_talks/deploying-php-fabric.md index ffe7e396..6ae2ae12 100644 --- a/source/_talks/deploying-php-fabric.md +++ b/source/_talks/deploying-php-fabric.md @@ -1,11 +1,9 @@ --- title: Deploying PHP Applications with Fabric -slides: +speakerdeck: + id: c147618ce07546ca92f92983c52d6a41 + ratio: '1.77777777777778' url: https://speakerdeck.com/opdavies/deploying-php-applications-with-fabric - embed: '' -# video: -# embed: '' -# url: https://www.youtube.com/watch?v=kM0MDUJE8ys tags: [meetup, conference, php, fabric] meta: og: @@ -18,9 +16,17 @@ meta: height: 1440 type: image/png events: - - { event: nomad-php, date: '2017-04-20', time: '19:00 (CET)', type: 'Lightning talk' } - - { event: phpsw, date: '2017-09-13', feedback: https://joind.in/talk/a5ff3 } - - { event: phpnw17, date: '2017-10-01', time: '09:00 - 09:45', feedback: https://joind.in/talk/4e35d } + - event: nomad-php + date: '2017-04-20' + time: '19:00 (CET)' + type: 'Lightning talk' + - event: phpsw + date: '2017-09-13' + feedback: https://joind.in/talk/a5ff3 + - event: phpnw17 + date: '2017-10-01' + time: '09:00 - 09:45' + feedback: https://joind.in/talk/4e35d --- You’ve built your application, and now you just need to deploy it. There are various ways that this could be done – from (S)FTP, to SCP and rsync, to running commands like “git pull” and “composer install” directly on the server (not recommended). diff --git a/source/_talks/drupal-8-module-development.md b/source/_talks/drupal-8-module-development.md index dccfe518..9f0fe1f0 100644 --- a/source/_talks/drupal-8-module-development.md +++ b/source/_talks/drupal-8-module-development.md @@ -3,12 +3,12 @@ title: Getting Started with Drupal 8 Module Development tags: [conference, php, drupal, drupalcamp, drupal-8] tweets: yes code: https://github.com/opdavies/dclondon16-d8-module -slides: +speakerdeck: + id: 0041804e52664d12a8e31cd118264813 + ratio: '1.77777777777778' url: https://speakerdeck.com/opdavies/getting-started-with-drupal-8-module-development - embed: -video: - url: https://www.youtube.com/watch?v=qO_Wh5WE3VA - embed: +youtube: + id: qO_Wh5WE3VA meta: og: title: Getting Started with Drupal 8 Module Development @@ -18,7 +18,8 @@ meta: height: 540 width: 960 events: - - { event: drupalcamp-london-16, date: '2016-03-05' } + - event: drupalcamp-london-16 + date: '2016-03-05' --- New to object-orientated PHP, Symfony or YAML, and want to get started building modules in Drupal 8? This is the session for you! diff --git a/source/_talks/2018-04-18-drupal-8-php-libraries-drupalorg-api.md b/source/_talks/drupal-8-php-libraries-drupalorg-api.md similarity index 70% rename from source/_talks/2018-04-18-drupal-8-php-libraries-drupalorg-api.md rename to source/_talks/drupal-8-php-libraries-drupalorg-api.md index 910ff539..136ead43 100644 --- a/source/_talks/2018-04-18-drupal-8-php-libraries-drupalorg-api.md +++ b/source/_talks/drupal-8-php-libraries-drupalorg-api.md @@ -1,9 +1,5 @@ --- title: Having Fun with Drupal 8, PHP libraries and the Drupal.org API -summary: | - A demo of some of the open source projects that I’ve been working on lately - that are based on information from the Drupal.org API, including a PHP library - for the API itself as well as some Drupal 8 modules that use it. speakerdeck: id: 6e42ae9620bb4e91b3955f8c30d66934 ratio: '1.77777777777778' @@ -14,12 +10,15 @@ tags: - php youtube: id: JyDjC7gGDpU +events: + - event: drupal-bristol + date: '2018-04-18' + feedback: https://joind.in/talk/14851 --- -Presented at the [Drupal Bristol][0] user group in April 2018. +A demo of some of the open source projects that I’ve been working on lately that are based on information from the Drupal.org API, including a PHP library for the API itself as well as some Drupal 8 modules that use it. ## Links -- [Joind.in][1] - [Drupal.org API library][2] - [Drupal.org API documentation][3] - [Laravel Collections][4] @@ -28,7 +27,6 @@ Presented at the [Drupal Bristol][0] user group in April 2018. - Talk: [Using Laravel Collections outside Laravel][7] [0]: https://www.drupalbristol.org.uk -[1]: https://joind.in/talk/14851 [2]: https://github.com/opdavies/drupalorg-api-php [3]: https://www.drupal.org/drupalorg/docs/api [4]: https://laravel.com/docs/collections diff --git a/source/_talks/drupal-8-rejoining-the-herd.md b/source/_talks/drupal-8-rejoining-the-herd.md index 75e64d01..a501b9f3 100644 --- a/source/_talks/drupal-8-rejoining-the-herd.md +++ b/source/_talks/drupal-8-rejoining-the-herd.md @@ -1,11 +1,14 @@ --- title: Drupal 8: Rejoining the Herd tags: [conference, php, drupal, drupal-8] -slides: +speakerdeck: + id: 440fd6592f474741bc606c96bc32c104 + ratio: '1.37081659973226' url: https://speakerdeck.com/opdavies/drupal-rejoining-the-herd - embed: events: - - { event: phpsc16, date: '2016-06-11', feedback: https://joind.in/talk/41d0f } + - event: phpsc16 + date: '2016-06-11' + feedback: https://joind.in/talk/41d0f --- [Drupal 8][0] was (finally) released on November 19th 2015, after almost 4 years of work and code commits by over 3,200 different contributors. Whilst it’s pretty much the same as the Drupal that we know and, hopefully, love, a lot has changed behind the scenes and under the hood! diff --git a/source/_talks/drupal-8.md b/source/_talks/drupal-8.md index 072efe00..21ed6e9b 100644 --- a/source/_talks/drupal-8.md +++ b/source/_talks/drupal-8.md @@ -1,15 +1,16 @@ --- title: Drupal 8 -slides: +speakerdeck: url: https://speakerdeck.com/opdavies/drupal-8 - embed: -video: - url: https://www.youtube.com/watch?v=36zCxPrOOzM - embed: + id: 46ba4ba577d94a32b7abdade610ceb69 + ratio: "1.29456384323641" +youtube: + id: 36zCxPrOOzM tags: [meetup, phpsw, drupal, drupal-8] tweets: yes events: - - { event: phpsw, date: '2015-04-08' } + - event: phpsw + date: '2015-04-08' --- This was a ten minute lightning talk, designed to highlight the major changes coming in Drupal 8. diff --git a/source/_talks/drupal-vm-generator.md b/source/_talks/drupal-vm-generator.md index e9e73247..28fd117b 100644 --- a/source/_talks/drupal-vm-generator.md +++ b/source/_talks/drupal-vm-generator.md @@ -3,15 +3,17 @@ title: Drupal VM Generator type: Lightning talk code: https://github.com/opdavies/drupal-vm-generator tags: [drupal-vm, drupal-vm-generator, meetup, symfony] -slides: +speakerdeck: + id: a27ee1d2bfed4a209dc395fa455acb41 + ratio: '1.37081659973226' url: https://speakerdeck.com/opdavies/bristol-dug-drupal-vm-generator - embed: -video: - url: https://youtu.be/U1pbKAAO2Wo?t=3696 - embed: +youtube: + id: U1pbKAAO2Wo events: - - { event: nwdug, date: '2016-03-08' } - - { event: drupal-bristol, date: '2016-04-02' } + - event: nwdug + date: '2016-03-08' + - event: drupal-bristol + date: '2016-04-02' --- An short talk about the [Drupal VM Generator][1] project. diff --git a/source/_talks/drupal-vm-meet-symfony-console.md b/source/_talks/drupal-vm-meet-symfony-console.md index fc805950..d3ca52bd 100644 --- a/source/_talks/drupal-vm-meet-symfony-console.md +++ b/source/_talks/drupal-vm-meet-symfony-console.md @@ -1,12 +1,14 @@ --- title: Drupal VM, Meet Symfony Console tags: [conference, php, drupal-vm, symfony] -slides: +speakerdeck: + id: 56c79770f73f4e47a542a30243437c49 + ratio: '1.37081659973226' url: https://speakerdeck.com/opdavies/drupal-vm-meet-symfony-console - embed: image: drupal-vm-meet-symfony-console.png events: - - { event: drupalcamp-bristol-16, date: '2016-07-23' } + - event: drupalcamp-bristol-16 + date: '2016-07-23' --- _TL;DR - Come and learn about Symfony Console, with examples from a real-world project._ diff --git a/source/_talks/drupalorg-2015.md b/source/_talks/drupalorg-2015.md index 3c40570a..29b4d82b 100644 --- a/source/_talks/drupalorg-2015.md +++ b/source/_talks/drupalorg-2015.md @@ -1,10 +1,14 @@ --- title: Drupal.org in 2015: What's Coming Next tags: [conference, drupalcamp, drupalcamp-london, drupal-association] -slides: +speakerdeck: + id: 0cf8d7b647c94ae289e9db2b46a9e8f2 + ratio: "1.77777777777778" url: https://speakerdeck.com/opdavies/drupal-dot-org-in-15 - embed: events: - - { event: drupalcamp-brighton-15, date: '2015-01-18' } - - { event: drupalcamp-london-15, date: '2015-02-28' } + - event: drupalcamp-brighton-15 + date: '2015-01-18' + - event: drupalcamp-london-15 + date: '2015-02-28' --- +A retrospective of the Drupal Association’s work in 2014 and a look forward to what we’ll be working on in 2015. diff --git a/source/_talks/drush-make-drupalbristol.md b/source/_talks/drush-make-drupalbristol.md index 375e8347..4c77a03e 100644 --- a/source/_talks/drush-make-drupalbristol.md +++ b/source/_talks/drush-make-drupalbristol.md @@ -1,9 +1,12 @@ --- title: drush make drupalbristol -slides: +speakerdeck: + id: 42605700f102013198de5a5f6f23ab67 + ratio: '1.29456384323641' url: https://speakerdeck.com/opdavies/drush-make-drupalbristol - embed: tags: [meetup, drupal, drupal-bristol, drush, drush-make] events: - - { event: drupal-bristol, date: '2014-08-19' } + - event: drupal-bristol + date: '2014-08-19' --- +An introduction to Drush Make and how to use it to build reusable custom installation profiles or entire websites. diff --git a/source/_talks/getting-your-data-into-drupal-8.md b/source/_talks/getting-your-data-into-drupal-8.md index 38c9749f..938b22bf 100644 --- a/source/_talks/getting-your-data-into-drupal-8.md +++ b/source/_talks/getting-your-data-into-drupal-8.md @@ -1,11 +1,11 @@ --- title: Getting (Your Data) Into Drupal 8 -slides: - url: https://speakerdeck.com/opdavies/getting-your-data-into-drupal-8-drupal-bristol - embed: '' -video: - url: https://www.youtube.com/watch?v=jtmARTuYhp8 - embed: +speakerdeck: + id: 63e5dfce996e46699e304d50e896477b + ratio: '1.77777777777778' + url: 'https://speakerdeck.com/opdavies/getting-your-data-into-drupal-8-drupal-bristol' +youtube: + id: jtmARTuYhp8 tags: [drupalcamp, migration, drupal-8] meta: og: @@ -19,8 +19,11 @@ meta: type: image/png use: [talks] events: - - { event: drupal-bristol, date: '2017-01-18' } - - { event: drupalcamp-london-17, date: '2017-03-04', time: '12:05 - 12:50' } + - event: drupal-bristol + date: '2017-01-18' + - event: drupalcamp-london-17 + date: '2017-03-04' + time: '12:05 - 12:50' --- If you’ve moved a site from Drupal 6 to 7, the chances are that you’ve either used the upgrade path to update your old site in-place, or you built a new site from scratch and used the Migrate module from contrib to migrate your data from the old database. diff --git a/source/_talks/git-flow.md b/source/_talks/git-flow.md index 476fdf2e..aba06cf2 100644 --- a/source/_talks/git-flow.md +++ b/source/_talks/git-flow.md @@ -1,13 +1,15 @@ --- title: Never Commit to Master - An Introduction to Git Flow -slides: +speakerdeck: + id: 201559e0f103013198dd5a5f6f23ab67 + ratio: '1.29456384323641' url: https://speakerdeck.com/opdavies/never-commit-to-master-an-introduction-to-git-flow - embed: -video: - url: https://www.youtube.com/watch?v=T-miCpHxfds - embed: +youtube: + id: T-miCpHxfds tags: [conference, drupalcamp, drupalcamp-london, git, git-flow] tweets: yes events: - - { event: drupalcamp-london-14, date: '2014-03-01' } + - event: drupalcamp-london-14 + date: '2014-03-01' --- +An introduction to the Git Flow branching model and the git-flow plugin, and how I’ve used them to manage a Drupal development project. diff --git a/source/_talks/goodbye-drush-make-hello-composer.md b/source/_talks/goodbye-drush-make-hello-composer.md index 86bd06f0..39a208cb 100644 --- a/source/_talks/goodbye-drush-make-hello-composer.md +++ b/source/_talks/goodbye-drush-make-hello-composer.md @@ -1,12 +1,19 @@ --- title: Goodbye Drush Make. Hello Composer! tags: ['meetup', 'drupal', 'composer'] -slides: +speakerdeck: + id: f7de07ae513f49798de78b6f8c3ef8cd + ratio: '1.37081659973226' url: http://bit.ly/slides-goodbye-drush-make-hello-composer2 - embed: '' +youtube: + id: ZL2FtRTX9Y8 events: - - { event: drupal-bristol, date: '2016-11-17' } - - { event: phpuk18, date: '2018-02-16', time: '14:40 - 15:40' } + - event: drupal-bristol + date: '2016-11-17' + - event: phpuk18 + date: '2018-02-16' + time: '14:40 - 15:40' + feedback: https://joind.in/talk/650ab --- One of the main outcomes of Drupal 8 was “getting off the island” with third-party code included in core and adopting modern best practices from the wider PHP ecosystem - including [Composer][1], PHP’s dependency manager. diff --git a/source/_talks/it-all-started-with-a-patch.md b/source/_talks/it-all-started-with-a-patch.md index 1d6d7082..51e2a280 100644 --- a/source/_talks/it-all-started-with-a-patch.md +++ b/source/_talks/it-all-started-with-a-patch.md @@ -2,13 +2,14 @@ title: It All Started With A Patch type: Lightning talk tags: [meetup, phpsw, open-source] -slides: +speakerdeck: + id: 5862bdecb7a24cfaa5fc844696fafa0c + ratio: '1.37081659973226' url: https://speakerdeck.com/opdavies/it-all-started-with-a-patch-phpsw - embed: -video: - url: https://www.youtube.com/watch?v=5FYMRR61sdo - embed: '' +youtube: + id: 5FYMRR61sdo events: - - { event: phpsw, date: '2017-02-08' } + - event: phpsw + date: '2017-02-08' --- A crash course of why and how to get involved with open source. diff --git a/source/_talks/modern-drupal-development-with-composer.md b/source/_talks/modern-drupal-development-with-composer.md index d47abe32..6e12baef 100644 --- a/source/_talks/modern-drupal-development-with-composer.md +++ b/source/_talks/modern-drupal-development-with-composer.md @@ -2,14 +2,15 @@ title: Modern Drupal Development with Composer type: Lightning talk tags: ['meetups', 'phpsw', 'drupal', 'composer'] -slides: +speakerdeck: + id: 7a1358502526425a9cfd288f85fb32f3 + ratio: '1.37081659973226' url: https://speakerdeck.com/opdavies/modern-drupal-development-with-composer - embed: '' -video: - url: https://www.youtube.com/watch?v=Yi_FPI3xHwc - embed: '' +youtube: + id: Yi_FPI3xHwc events: - - { event: phpsw, date: '2016-11-09' } + - event: phpsw + date: '2016-11-09' --- Building a Drupal application? You no longer need to download archives to add new modules or update core, or deal with Drupal specific tools to manage your codebase. diff --git a/source/_talks/so-what-is-this-drupal-thing.md b/source/_talks/so-what-is-this-drupal-thing.md index b540068b..7028f8a5 100644 --- a/source/_talks/so-what-is-this-drupal-thing.md +++ b/source/_talks/so-what-is-this-drupal-thing.md @@ -1,9 +1,10 @@ --- title: So, what is this Drupal thing? -video: - url: https://vimeo.com/49827006 - embed: +vimeo: + id: 49827006 tags: [meetup, drupal, unified-diff] events: - - { event: unifieddiff, date: '2012-09-05' } + - event: unifieddiff + date: '2012-09-05' --- +My very first talk, where I talk about Drupal, what it is and what it can do. diff --git a/source/_talks/taking-flight-with-tailwind-css.md b/source/_talks/taking-flight-with-tailwind-css.md index a965673d..cbfcc801 100644 --- a/source/_talks/taking-flight-with-tailwind-css.md +++ b/source/_talks/taking-flight-with-tailwind-css.md @@ -1,12 +1,14 @@ --- title: Taking Flight with Tailwind CSS -slides: +speakerdeck: + id: 10ca51f23560443d83b898a92929b4b3 + ratio: '1.77777777777778' url: https://speakerdeck.com/opdavies/taking-flight-with-tailwind-css - embed: '' tags: [css, tailwind, meetup] -type: Lightning talk events: - - { event: drupal-bristol, date: '2018-01-17' } + - event: drupal-bristol + date: '2018-01-17' + type: Lightning talk meta: og: title: Taking Flight with Tailwind CSS diff --git a/source/_talks/tdd-test-driven-drupal.md b/source/_talks/tdd-test-driven-drupal.md index 68b4e92c..93d76eb6 100644 --- a/source/_talks/tdd-test-driven-drupal.md +++ b/source/_talks/tdd-test-driven-drupal.md @@ -1,11 +1,11 @@ --- title: TDD - Test Driven Drupal -slides: +speakerdeck: + id: 088cb18033064f5cb18d1079795294a1 + ratio: '1.77777777777778' url: 'https://speakerdeck.com/opdavies/tdd-test-driven-drupal' - embed: '' -video: - url: https://www.youtube.com/watch?v=fdbxXOi2HP4 - embed: +youtube: + id: fdbxXOi2HP4 tags: [drupalcamp, simpletest, phpunit, testing] meta: og: @@ -19,9 +19,14 @@ meta: type: image/png use: [talks] events: - - { event: drupalcamp-london-17, date: '2017-03-04', time: '16:15 - 17:00' } - - { event: drupalcamp-dublin-17, date: '2017-10-21', time: '12:00 - 12:40' } - - { event: drupal-bristol, date: '2017-11-22' } + - event: drupalcamp-london-17 + date: '2017-03-04' + time: '16:15 - 17:00' + - event: drupalcamp-dublin-17 + date: '2017-10-21' + time: '12:00 - 12:40' + - event: drupal-bristol + date: '2017-11-22' --- Testing is important. Why? It allows developers to add new features and edit and refactor existing code without the worry of adding regressions, reduces the reliance on manual testing to discover bugs, and by taking a test driven approach, your implementation code is leaner as you only write what is needed for your tests to pass. diff --git a/source/_talks/test-drive-twig-with-sculpin.md b/source/_talks/test-drive-twig-with-sculpin.md index 9fcb05ae..246dfb9e 100644 --- a/source/_talks/test-drive-twig-with-sculpin.md +++ b/source/_talks/test-drive-twig-with-sculpin.md @@ -1,13 +1,15 @@ --- title: Test Drive Twig with Sculpin -slides: +speakerdeck: + id: 54589d2e50a3476a9a75aed809e9edf1 + ratio: '1.77777777777778' url: https://speakerdeck.com/opdavies/test-drive-twig-with-sculpin - embed: code: https://github.com/opdavies/sculpin-demo tags: [conference, drupalcamp, drupalcamp-north, sculpin, twig] tweets: yes events: - - { event: drupalcamp-north-15, date: '2015-07-25' } + - event: drupalcamp-north-15 + date: '2015-07-25' --- [Sculpin][1] is a static site generator written in PHP, and based on [Symfony components][2]. It uses [YAML][3] and [Twig][4], which makes it very appealing to Drupal people wanting to learn these in preparation for Drupal 8. diff --git a/source/_talks/using-laravel-collections-outside-laravel.md b/source/_talks/using-laravel-collections-outside-laravel.md index 675b96b9..929253b2 100644 --- a/source/_talks/using-laravel-collections-outside-laravel.md +++ b/source/_talks/using-laravel-collections-outside-laravel.md @@ -1,14 +1,16 @@ --- title: Using Laravel Collections... Outside Laravel -slides: +speakerdeck: + id: 76f1718a75a74940b0b028aac8b9f78b + ratio: '1.77777777777778' url: https://speakerdeck.com/opdavies/using-laravel-collections-dot-dot-dot-outside-laravel - embed: '' -video: - url: https://youtu.be/1l0kO-iaN_o - embed: '' +youtube: + id: 1l0kO-iaN_o tags: [nomad-php, lightning-talk, laravel, collections] type: Lightning talk events: - - { event: nomad-php, date: '2017-12-21', 'time': 19:00 CET } + - event: nomad-php + date: '2017-12-21' + time: 19:00 CET --- Laravel Collections are a powerful object-orientated way of interacting with PHP arrays, but did you know that they can be used outside of Laravel, in any PHP project? This short talk shows how we can use Composer to include Laravel Collections within a non-Laravel project and put them to use within your own code. diff --git a/source/talks.html.twig b/source/talks.html.twig index 6b431bb6..80a0d72e 100644 --- a/source/talks.html.twig +++ b/source/talks.html.twig @@ -11,7 +11,7 @@ use: [talks]

Upcoming Talks

{% set upcoming_talks = getUpcomingTalks(data.talks, site.events) %} - {% if upcoming_talks %} + {% if not upcoming_talks.empty %} {% include "talks-table" with { talks: upcoming_talks, upcoming: true } %} {% else %}

Nothing scheduled at the moment.