Change /talks to /presentations

This commit is contained in:
Oliver Davies 2024-09-02 18:00:00 +01:00
parent 8158c679fd
commit 37603296f0
91 changed files with 168 additions and 166 deletions

View file

@ -8,13 +8,13 @@ sculpin_content_types:
permalink: /podcast/:basename/
posts:
permalink: /blog/:basename/
talks:
permalink: /talks/:basename/
presentations:
permalink: /presentations/:basename/
services:
Modules\Experience\TwigExtension\ExperienceTwigExtension:
tags:
- {name: twig.extension}
Modules\Talk\TwigExtension\TalkTwigExtension:
Modules\Presentations\TwigExtension\PresentationTwigExtension:
tags:
- {name: twig.extension}

View file

@ -35,8 +35,8 @@ menu_links:
url: /press
- title: Services
url: /pricing
- title: Talks and Workshops
url: /talks
- title: Presentations
url: /presentations
- title: Podcast
url: /podcast
- title: Daily list

View file

@ -1,52 +1,52 @@
<?php
namespace Modules\Talk\Tests\TwigExtension;
namespace Modules\Presentations\Tests\TwigExtension;
use Dflydev\DotAccessConfiguration\Configuration;
use Modules\Talk\TwigExtension\TalkTwigExtension;
use Modules\Presentations\TwigExtension\PresentationTwigExtension;
use PHPUnit\Framework\TestCase;
use Sculpin\Contrib\ProxySourceCollection\ProxySourceItem;
class TalkTwigExtensionTest extends TestCase
class PresentationTwigExtensionTest extends TestCase
{
private TalkTwigExtension $extension;
private PresentationTwigExtension $extension;
public function setUp(): void
{
$this->extension = new TalkTwigExtension();
$this->extension = new PresentationTwigExtension();
}
public function testNoPastEvents(): void
{
$talk = $this->createTalk(
$presentation = $this->createPresentation(
events: [
['date' => (new \DateTime('+1 days'))->getTimestamp()],
],
);
$this->assertTalkCount(expectedCount: 0, talks: [$talk]);
$this->assertPresentationCount(expectedCount: 0, presentations: [$presentation]);
}
public function testSinglePastEvent(): void
{
$talkA = $this->createTalk(
$presentationA = $this->createPresentation(
events: [
['date' => (new \DateTime('+1 days'))->getTimestamp()],
],
);
$talkB = $this->createTalk(
$presentationB = $this->createPresentation(
events: [
['date' => (new \DateTime('-3 days'))->getTimestamp()],
],
);
$this->assertTalkCount(expectedCount: 1, talks: [$talkA, $talkB]);
$this->assertPresentationCount(expectedCount: 1, presentations: [$presentationA, $presentationB]);
}
public function testSingleTalkWithMultiplePastEvents(): void
public function testSinglePresentationWithMultiplePastEvents(): void
{
$talk = $this->createTalk(
$presentation = $this->createPresentation(
events: [
['date' => (new \DateTime('-1 days'))->getTimestamp()],
['date' => (new \DateTime('-1 week'))->getTimestamp()],
@ -54,12 +54,12 @@ class TalkTwigExtensionTest extends TestCase
],
);
$this->assertTalkCount(expectedCount: 3, talks: [$talk]);
$this->assertPresentationCount(expectedCount: 3, presentations: [$presentation]);
}
public function testSingleTalkWithMultiplePastAndFutureEvents(): void
public function testSinglePresentationWithMultiplePastAndFutureEvents(): void
{
$talk = $this->createTalk(
$presentation = $this->createPresentation(
events: [
['date' => (new \DateTime('+1 day'))->getTimestamp()],
['date' => (new \DateTime('-1 day'))->getTimestamp()],
@ -69,73 +69,73 @@ class TalkTwigExtensionTest extends TestCase
],
);
$this->assertTalkCount(expectedCount: 3, talks: [$talk]);
$this->assertPresentationCount(expectedCount: 3, presentations: [$presentation]);
}
public function testMultiplePastEvents(): void
{
$talkA = $this->createTalk(
$presentationA = $this->createPresentation(
events: [
['date' => (new \DateTime('-1 days'))->getTimestamp()],
['date' => (new \DateTime('+1 days'))->getTimestamp()],
],
);
$talkB = $this->createTalk(
$presentationB = $this->createPresentation(
events: [
['date' => (new \DateTime('-3 days'))->getTimestamp()],
],
);
$this->assertTalkCount(expectedCount: 2, talks: [$talkA, $talkB]);
$this->assertPresentationCount(expectedCount: 2, presentations: [$presentationA, $presentationB]);
}
public function testTheCurrentDayIsNotCounted(): void
{
$talkA = $this->createTalk(
$presentationA = $this->createPresentation(
events: [
['date' => (new \DateTime('yesterday'))->getTimestamp()],
['date' => (new \DateTime('today'))->getTimestamp()],
],
);
$talkB = $this->createTalk(
$presentationB = $this->createPresentation(
events: [
['date' => (new \DateTime('today'))->getTimestamp()],
],
);
$talkC = $this->createTalk(
$presentationC = $this->createPresentation(
events: [
['date' => (new \DateTime('yesterday'))->getTimestamp()],
],
);
$this->assertTalkCount(expectedCount: 2, talks: [$talkA, $talkB, $talkC]);
$this->assertPresentationCount(expectedCount: 2, presentations: [$presentationA, $presentationB, $presentationC]);
}
/**
* Assert the extension uses the correct number of talks.
* Assert the extension uses the correct number of presentations.
*/
private function assertTalkCount(int $expectedCount, array $talks): void
private function assertPresentationCount(int $expectedCount, array $presentations): void
{
self::assertSame(
actual: $this->extension->getPastTalkCount($talks),
actual: $this->extension->getPresentationCount($presentations),
expected: $expectedCount,
);
}
/**
* Create a mock talk with a list of events.
* Create a mock presentation with a list of events.
*/
private function createTalk(array $events): ProxySourceItem
private function createPresentation(array $events): ProxySourceItem
{
$configuration = $this->createMock(Configuration::class);
$configuration->method('get')->with($this->identicalTo('events'))->willReturn($events);
$talk = $this->createMock(ProxySourceItem::class);
$talk->method('data')->willReturn($configuration);
$presentation = $this->createMock(ProxySourceItem::class);
$presentation->method('data')->willReturn($configuration);
return $talk;
return $presentation;
}
}

View file

@ -1,31 +1,31 @@
<?php
namespace Modules\Talk\TwigExtension;
namespace Modules\Presentations\TwigExtension;
use Sculpin\Contrib\ProxySourceCollection\ProxySourceItem;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class TalkTwigExtension extends AbstractExtension
class PresentationTwigExtension extends AbstractExtension
{
public function getFunctions(): array
{
return [
new TwigFunction('get_past_talk_count', [$this, 'getPastTalkCount']),
new TwigFunction('get_presentation_count', [$this, 'getPresentationCount']),
];
}
public function getName(): string
{
return 'modules.talk';
return 'modules.presentations';
}
public function getPastTalkCount(array $talks): int
public function getPresentationCount(array $presentations): int
{
$today = (new \DateTime('today'))->getTimestamp();
return collect($talks)
->flatMap(fn (ProxySourceItem $talk) => $talk->data()->get('events'))
return collect($presentations)
->flatMap(fn (ProxySourceItem $presentation) => $presentation->data()->get('events'))
->filter(
function (array $event) use ($today): bool {
assert(array_key_exists(array: $event, key: 'date'));

View file

@ -21,11 +21,6 @@ RewriteRule ^(.*)index\.html$ /$1 [L,R=301]
ErrorDocument 404 /404/index.html
# RewriteCond %{REQUEST_URI} !^/archive/?$
# RewriteRule ^archive/(.*)$ /daily/$1 [L,R=301]
RewriteRule ^articles/(.*) /blog/$1 [L,R=301]
Redirect 301 /daily/2024/08/15/docblocks-or-annotations /daily/2024/08/15/docblocks-or-attributes
Redirect 301 /10-useful-drupal-6-modules-i-use-every-project /blog/10-useful-drupal-6-modules
Redirect 301 /2010/04/05/styling-drupal-6s-taxonomy-lists-with-php-css-and-jquery /blog/style-drupal-6s-taxonomy-lists-php-css-jquery
@ -59,7 +54,7 @@ Redirect 301 /ansible https://galaxy.ansible.com/opdavies
Redirect 301 /ansible-molecule /articles/test-driven-ansible-role-development-molecule
Redirect 301 /ansistrano-code https://github.com/opdavies/dransible
Redirect 301 /ansistrano-demo https://www.youtube.com/watch?v=PLS4ET7FAcU
Redirect 301 /ansistrano-slides /talks/deploying-php-ansible-ansistrano
Redirect 301 /ansistrano-slides /presentations/deploying-php-ansible-ansistrano
Redirect 301 /archive/2022/10/20/run-vs-task-runner /archive/2022/10/19/run-vs-task-runners
Redirect 301 /atNOQ https://youtu.be/r41dkD2EOo8
Redirect 301 /automatically-updating-talk-created-date https://gist.github.com/opdavies/4e75e1753d8603113f07f8264bb783d6
@ -206,7 +201,7 @@ Redirect 301 /blog/drupal-8-commerce-fixing-no-such-customer-error-checkout /blo
Redirect 301 /blog/drupal-8-commerce-fixing-no-such-customer-error-on-checkout /blog/drupal-8-commerce-fixing-no-such-customer-error-checkou
Redirect 301 /blog/drupal-vm-generator-291-released /blog/drupal-vm-generator-updates
Redirect 301 /blog/drupalcamp-london-2019-tickets /blog/drupalcamp-london-2019-tickets-available-call-sessions
Redirect 301 /blog/drush-make-drupalbristol /talks/drush-make-drupalbristol
Redirect 301 /blog/drush-make-drupalbristol /presentations/drush-make-drupalbristol
Redirect 301 /blog/easier-git-repository-cloning-with-insteadof /blog/easier-git-repository-cloning-insteadof
Redirect 301 /blog/easier-sculpin-commands-with-composer-and-npm-scripts /blog/easier-sculpin-commands-composer-npm-scripts
Redirect 301 /blog/editing-meetup-videos-kdenlive /blog/editing-meetup-videos-linux-kdenlive
@ -275,7 +270,7 @@ Redirect 301 /code-enigma-interview https://blog.codeenigma.com/interview-with-a
Redirect 301 /consulting /
Redirect 301 /contrib-half-hour https://www.youtube.com/playlist?list=PLu-MxhbnjI9rHroPvZO5LEUhr58Yl0j_F
Redirect 301 /cv /cv.txt
Redirect 301 /d0P5z /talks/drupal-8-php-libraries-drupalorg-api
Redirect 301 /d0P5z /presentations/drupal-8-php-libraries-drupalorg-api
Redirect 301 /d7 /drupal7
Redirect 301 /dcbristol-cfp https://www.papercall.io/drupalcamp-bristol-2019
Redirect 301 /dcbristol17-videos https://www.youtube.com/playlist?list=PLOwPvExSyLLngtd6R4PUD9MCXa6QL_obA
@ -284,7 +279,7 @@ Redirect 301 /dclondon-sat https://drupalcamp.london/schedule/saturday
Redirect 301 /dclondon-sun https://drupalcamp.london/schedule/sunday
Redirect 301 /dclondon20 /articles/drupalcamp-london-testing-workshop
Redirect 301 /ddev-phpunit-command /blog/creating-custom-phpunit-command-ddev
Redirect 301 /deploying-php-ansible /talks/deploying-php-ansible-ansistrano
Redirect 301 /deploying-php-ansible /presentations/deploying-php-ansible-ansistrano
Redirect 301 /dks7E https://www.youtube.com/watch?v=PLS4ET7FAcU
Redirect 301 /do-library https://github.com/opdavies/drupalorg-api-php
Redirect 301 /do-projects https://github.com/opdavies/drupal-module-drupalorg-projects
@ -306,7 +301,7 @@ Redirect 301 /drupal-php-developer /drupal-consultant
Redirect 301 /drupal-php-developer-consultant-uk /drupal-php-developer
Redirect 301 /drupal-tailwind-demo https://www.youtube.com/watch?v=1eM-Gw6GI4g
Redirect 301 /drupal-tailwindcss https://www.drupal.org/project/tailwindcss
Redirect 301 /drupal-vuejs /talks/decoupling-drupal-vuejs/
Redirect 301 /drupal-vuejs /presentations/decoupling-drupal-vuejs
Redirect 301 /drupal7 /drupal-upgrade
Redirect 301 /drupalcamp-london-2019-tickets /articles/drupalcamp-london-2019-tickets
Redirect 301 /drupalcamp-nyc-training https://www.youtube.com/watch?v=3M9c4UUzKm0
@ -318,7 +313,7 @@ Redirect 301 /feed /rss.xml
Redirect 301 /first-drupal-core-issue https://www.drupal.org/project/drupal/issues/753898
Redirect 301 /first-npm-package https://www.npmjs.com/package/tailwindcss-vuejs
Redirect 301 /freeagent https://opdavies.freeagent.com
Redirect 301 /git-flow /talks/git-flow
Redirect 301 /git-flow /presentations/git-flow
Redirect 301 /github-sculpin https://github.com/opdavies?tab=repositories&q=sculpin
Redirect 301 /gitlab https://gitlab.com/opdavies
Redirect 301 /gitstore https://enjoy.gitstore.app/maintainers/opdavies
@ -338,7 +333,7 @@ Redirect 301 /oliver-davies-uk-based-drupal-symfony-developer /oliver-davies-uk-
Redirect 301 /pair-programming /pair
Redirect 301 /pair-with-me /pair
Redirect 301 /pairing /pair
Redirect 301 /php-ansible /talks/deploying-php-ansible-ansistrano
Redirect 301 /php-ansible /presentations/deploying-php-ansible-ansistrano
Redirect 301 /qSHAl /articles/published-my-first-npm-package/
Redirect 301 /qT1Rb https://github.com/opdavies/drupal-meetups-twitterbot
Redirect 301 /rebuilding-acquia https://rebuilding-acquia.oliverdavies.uk
@ -350,9 +345,9 @@ Redirect 301 /rebuilding-symfony https://github.com/opdavies/rebuilding-symfony
Redirect 301 /rk29B https://www.meetup.com/PHP-South-Wales/events/268422525
Redirect 301 /roadmap /drupal-upgrade
# Redirect 301 /rss /rss.xml
Redirect 301 /rst2pdf /talks/building-presenting-slide-decks-rst2pdf
Redirect 301 /rst2pdf /presentations/building-presenting-slide-decks-rst2pdf
Redirect 301 /s9MjJ https://symfonycasts.com/screencast/symfony
Redirect 301 /sculpin /talks/building-static-websites-sculpin
Redirect 301 /sculpin /presentations/building-static-websites-sculpin
Redirect 301 /sculpin-encore-versioning https://github.com/opdavies/oliverdavies.uk/commit/d192b04aefa6e7a21bfc1f2e0fe0a16111e0e8a2
Redirect 301 /sites/default/files/images/social-avatar. /images/social-avatar.jpg
Redirect 301 /skills https://opdavies-skills-tailwindcss.netlify.com/
@ -371,69 +366,76 @@ Redirect 301 /symfony https://connect.symfony.com/profile/opdavies
Redirect 301 /symfony-server /articles/running-drupal-with-symfony-local-server
Redirect 301 /symfonylive /articles/live-blogging-symfonylive-london
Redirect 301 /symposium https://symposiumapp.com/u/opdavies
Redirect 301 /tailwind-css-talk /talks/taking-flight-tailwind-css
Redirect 301 /tailwind-css-talk /presentations/taking-flight-tailwind-css
Redirect 301 /tailwind-repos https://github.com/opdavies?utf8=%E2%9C%93&tab=repositories&q=tailwindcss
Redirect 301 /tailwind-talk /talks/taking-flight-with-tailwind-css
Redirect 301 /tailwind-talk /presentations/taking-flight-with-tailwind-css
Redirect 301 /tailwindcss-demo http://tailwindcss-demo.oliverdavies.uk/
Redirect 301 /talks /presentations
Redirect 301 /talks-offer-tweet https://twitter.com/opdavies/status/1250870367712935938
Redirect 301 /talks/2012/09/05/what-is-this-drupal-thing-unified-diff /talks/what-is-this-drupal-thing
Redirect 301 /talks/2013/07/10/drupal-ldap-swdug /talks/drupal-ldap
Redirect 301 /talks/2014/03/01/git-flow-drupalcamp-london-2014 /talks/git-flow
Redirect 301 /talks/2014/07/02/drush-make-drupalbristol-drupal-bristol /talks/drush-make-drupalbristol
Redirect 301 /talks/2014/08/19/drupal-association-swdug /talks/drupal-association
Redirect 301 /talks/2015/01/18/drupalorg-2015-drupalcamp-brighton-2015 /talks/drupalorg-in-2015-whats-coming-next
Redirect 301 /talks/2015/02/28/drupalorg-2015-drupalcamp-london-2015 /talks/drupalorg-in-2015-whats-coming-next
Redirect 301 /talks/2015/04/08/drupal-8-phpsw /talks/drupal-8
Redirect 301 /talks/2015/07/25/test-drive-twig-with-sculpin-drupalcamp-north-2015 /talks/test-drive-twig-with-sculpin
Redirect 301 /talks/2015/08/25/dancing-for-drupal-umbristol /talks/dancing-for-drupal
Redirect 301 /talks/2015/10/14/sculpin-phpsw /talks/sculpin
Redirect 301 /talks/2016/03/05/drupal-8-module-development-drupalcamp-london-2016 /talks/getting-started-with-drupal-8-module-development
Redirect 301 /talks/2016/03/09/drupal-vm-generator-nwdug /talks/drupal-vm-generator
Redirect 301 /talks/2016/04/02/drupal-vm-generator-drupal-bristol /talks/drupal-vm-generator
Redirect 301 /talks/2016/06/11/drupal-8-rejoining-the-herd-php-south-coast-2016 /talks/drupal-8-rejoining-the-herd
Redirect 301 /talks/2016/07/23/drupal-vm-meet-symfony-console-drupalcamp-bristol-2016 /talks/drupal-vm-meet-symfony-console
Redirect 301 /talks/2016/11/09/drupal-development-with-composer-phpsw /talks/drupal-development-with-composer
Redirect 301 /talks/2016/11/17/goodbye-drush-make-hello-composer-drupal-bristol /talks/goodbye-drush-make-hello-composer
Redirect 301 /talks/2017/01/18/getting-your-data-into-drupal-8-drupal-bristol /talks/getting-your-data-into-drupal-8
Redirect 301 /talks/2017/03/04/getting-your-data-into-drupal-8-drupalcamp-london-2017 /talks/getting-your-data-into-drupal-8
Redirect 301 /talks/ansible-ansistrano https://www.oliverdavies.uk/talks/deploying-php-ansible-ansistrano
Redirect 301 /talks/archive /talks
Redirect 301 /talks/deploying-php-applications-fabric /talks/deploying-php-fabric
Redirect 301 /talks/deploying-php-applications-with-fabric /talks/deploying-php-fabric
Redirect 301 /talks/drupal-vm-generator-2 /talks/drupal-vm-generator
Redirect 301 /talks/drupalorg-2015-2 /talks/drupalorg-2015
Redirect 301 /talks/drupalorg-in-2015-whats-coming-next /talks/drupalorg-2015
Redirect 301 /talks/2012/09/05/what-is-this-drupal-thing-unified-diff /presentations/what-is-this-drupal-thing
Redirect 301 /talks/2013/07/10/drupal-ldap-swdug /presentations/drupal-ldap
Redirect 301 /talks/2014/03/01/git-flow-drupalcamp-london-2014 /presentations/git-flow
Redirect 301 /talks/2014/07/02/drush-make-drupalbristol-drupal-bristol /presentations/drush-make-drupalbristol
Redirect 301 /talks/2014/08/19/drupal-association-swdug /presentations/drupal-association
Redirect 301 /talks/2015/01/18/drupalorg-2015-drupalcamp-brighton-2015 /presentations/drupalorg-in-2015-whats-coming-next
Redirect 301 /talks/2015/02/28/drupalorg-2015-drupalcamp-london-2015 /presentations/drupalorg-in-2015-whats-coming-next
Redirect 301 /talks/2015/04/08/drupal-8-phpsw /presentations/drupal-8
Redirect 301 /talks/2015/07/25/test-drive-twig-with-sculpin-drupalcamp-north-2015 /presentations/test-drive-twig-with-sculpin
Redirect 301 /talks/2015/08/25/dancing-for-drupal-umbristol /presentations/dancing-for-drupal
Redirect 301 /talks/2015/10/14/sculpin-phpsw /presentations/sculpin
Redirect 301 /talks/2016/03/05/drupal-8-module-development-drupalcamp-london-2016 /presentations/getting-started-with-drupal-8-module-development
Redirect 301 /talks/2016/03/09/drupal-vm-generator-nwdug /presentations/drupal-vm-generator
Redirect 301 /talks/2016/04/02/drupal-vm-generator-drupal-bristol /presentations/drupal-vm-generator
Redirect 301 /talks/2016/06/11/drupal-8-rejoining-the-herd-php-south-coast-2016 /presentations/drupal-8-rejoining-the-herd
Redirect 301 /talks/2016/07/23/drupal-vm-meet-symfony-console-drupalcamp-bristol-2016 /presentations/drupal-vm-meet-symfony-console
Redirect 301 /talks/2016/11/09/drupal-development-with-composer-phpsw /presentations/drupal-development-with-composer
Redirect 301 /talks/2016/11/17/goodbye-drush-make-hello-composer-drupal-bristol /presentations/goodbye-drush-make-hello-composer
Redirect 301 /talks/2017/01/18/getting-your-data-into-drupal-8-drupal-bristol /presentations/getting-your-data-into-drupal-8
Redirect 301 /talks/2017/03/04/getting-your-data-into-drupal-8-drupalcamp-london-2017 /presentations/getting-your-data-into-drupal-8
Redirect 301 /talks/ansible-ansistrano https://www.oliverdavies.uk/presentations/deploying-php-ansible-ansistrano
Redirect 301 /talks/archive /presentations
Redirect 301 /talks/deploying-php-applications-fabric /presentations/deploying-php-fabric
Redirect 301 /talks/deploying-php-applications-with-fabric /presentations/deploying-php-fabric
Redirect 301 /talks/drupal-vm-generator-2 /presentations/drupal-vm-generator
Redirect 301 /talks/drupalorg-2015-2 /presentations/drupalorg-2015
Redirect 301 /talks/drupalorg-in-2015-whats-coming-next /presentations/drupalorg-2015
Redirect 301 /talks/getting-started-with-drupal-8-module-development /drupal-8-module-development
Redirect 301 /talks/having-fun-drupal-8-php-libraries-drupalorg-api /talks/drupal-8-php-libraries-drupalorg-api
Redirect 301 /talks/never-commit-master-introduction-git-flow /talks/git-flow
Redirect 301 /talks/sculpin /talks/building-static-websites-sculpin
Redirect 301 /talks/tailwind /talks/taking-flight-with-tailwind-css/
Redirect 301 /talks/taking-flight-tailwind-css /talks/taking-flight-with-tailwind-css
Redirect 301 /talks/using-laravel-collections-outside-laravel /talks/using-illuminate-collections-outside-laravel
Redirect 301 /talks/working-workspace /talks/working-with-workspace
Redirect 301 /talks/having-fun-drupal-8-php-libraries-drupalorg-api /presentations/drupal-8-php-libraries-drupalorg-api
Redirect 301 /talks/never-commit-master-introduction-git-flow /presentations/git-flow
Redirect 301 /talks/sculpin /presentations/building-static-websites-sculpin
Redirect 301 /talks/tailwind /presentations/taking-flight-with-tailwind-css/
Redirect 301 /talks/taking-flight-tailwind-css /presentations/taking-flight-with-tailwind-css
Redirect 301 /talks/using-laravel-collections-outside-laravel /presentations/using-illuminate-collections-outside-laravel
Redirect 301 /talks/working-workspace /presentations/working-with-workspace
Redirect 301 /tdd-blog https://github.com/opdavies/drupal-module-tdd-blog
Redirect 301 /tdd-test-driven-drupal /talks/tdd-test-driven-drupal/
Redirect 301 /tdd-test-driven-drupal /presentations/tdd-test-driven-drupal/
Redirect 301 /team-coaching /
Redirect 301 /test-driven-drupal-book /test-driven-drupal
Redirect 301 /testing-drupal https://www.oliverdavies.uk/talks/tdd-test-driven-drupal
Redirect 301 /testing-drupal /presentations/tdd-test-driven-drupal
Redirect 301 /testing-drupal-intro https://inviqa.com/blog/drupal-automated-testing-introduction
Redirect 301 /testing-tailwind-plugins /articles/testing-tailwindcss-plugins-with-jest
Redirect 301 /testing-workshop https://github.com/opdavies/workshop-drupal-automated-testing
Redirect 301 /testing-workshop-code https://github.com/opdavies/workshop-drupal-automated-testing-code
Redirect 301 /todoist-filters https://gist.github.com/opdavies/6709fbdac5c3babbd94137bcc8b8e3c2
Redirect 301 /twitter-tweaks https://github.com/opdavies/chrome-extension-twitter-tweaks
Redirect 301 /upgrading-to-drupal-9 /talks/upgrading-your-site-drupal-9
Redirect 301 /upgrading-to-drupal-9 /presentations/upgrading-your-site-drupal-9
Redirect 301 /uxbjV https://www.drupal.org/project/copyright_block
Redirect 301 /vyTEF https://www.npmjs.com/package/tailwindcss-vuejs
Redirect 301 /webpack-encore-pcss-regex https://regexr.com/51iaf
Redirect 301 /wordcamp-bristol-tailwindcss https://2019.bristol.wordcamp.org/session/taking-flight-with-tailwind-css
Redirect 301 /wordpress-tailwind https://github.com/opdavies/wordcamp-bristol-2019
Redirect 301 /work /drupal-php-developer
Redirect 301 /working-with-workspace /talks/working-with-workspace
Redirect 301 /working-with-workspace /presentations/working-with-workspace
Redirect 301 /workshop-drupal-testing https://github.com/opdavies/workshop-drupal-automated-testing
Redirect 301 /workspace-demo https://github.com/opdavies/working-with-workspace-demo
Redirect 301 /wp-tailwind https://wp-tailwind.oliverdavies.uk
Redirect 301 /wp-tailwind-repo https://github.com/opdavies/wordcamp-bristol-2019
Redirect 301 /wp-tailwind-starter https://github.com/opdavies/wordpress-tailwindcss-startker-kit
Redirect 301 /wp-tailwind-static https://wp-tailwind.oliverdavies.uk
Redirect 301 /yXhoS /talks/things-you-should-know-about-php
Redirect 301 /yXhoS /presentations/things-you-should-know-about-php
# RewriteCond %{REQUEST_URI} !^/archive/?$
# RewriteRule ^archive/(.*)$ /daily/$1 [L,R=301]
RewriteRule ^articles/(.*) /blog/$1 [L,R=301]
RewriteRule ^talks/(.*) /presentations/$1 [L,R=301]

View file

@ -33,4 +33,4 @@ I also worked on an event booking and management website, where we had code resp
The great thing about testing is that it gives you confidence that everything still works how you expect - not only when you wrote the code, but also in the future.
I've talked about this, and how to get started with automated testing in Drupal, in a presentation called [TDD - Test-Driven Drupal]({{site.url}}/talks/tdd-test-driven-drupal). If you want to find out more, the slides and a video recording are embedded there.
I've talked about this, and how to get started with automated testing in Drupal, in a presentation called [TDD - Test-Driven Drupal]({{site.url}}/presentations/tdd-test-driven-drupal). If you want to find out more, the slides and a video recording are embedded there.

View file

@ -35,7 +35,7 @@ Makefiles work well, but I don't use the full functionality that they offer, suc
In the example, to pass arguments to the `drush` command, I'd have to type `ARGS="cache:rebuild" make drush` for them to get added and the command to work as expected.
An agency that I worked for created and open-sourced their own Makefile-like tool, written in PHP and built on Symfony Console. I gave a talk on it called [Working with Workspace]({{site.url}}/talks/working-with-workspace) and used it on some of my own personal and client projects.
An agency that I worked for created and open-sourced their own Makefile-like tool, written in PHP and built on Symfony Console. I gave a talk on it called [Working with Workspace]({{site.url}}/presentations/working-with-workspace) and used it on some of my own personal and client projects.
## What I'm using now

View file

@ -21,4 +21,4 @@ There may be other constraints like budgets or deadlines to consider - maybe som
There are situations though where a tool may be the best choice even though it's not the ideal fit based purely on the technical requirements. Maybe the client is already familiar with publishing content in Drupal, or an in-house development team is used to working with a certain tool or language. In that case, those things should be considered too.
Also, for me, having a chance to evaluate other technologies and explore what's happening outside of the Drupal ecosystem is a good opportunity. A lot of what I've learned about automated testing, for example, is from the wider PHP and JavaScript communities, as well as tools like [Tailwind CSS]({{site.url}}/talks/taking-flight-with-tailwind-css) and [Illuminate Collections]({{site.url}}//talks/using-illuminate-collections-outside-laravel) that I've been able to bring back into my other Drupal projects.
Also, for me, having a chance to evaluate other technologies and explore what's happening outside of the Drupal ecosystem is a good opportunity. A lot of what I've learned about automated testing, for example, is from the wider PHP and JavaScript communities, as well as tools like [Tailwind CSS]({{site.url}}/presentations/taking-flight-with-tailwind-css) and [Illuminate Collections]({{site.url}}//presentations/using-illuminate-collections-outside-laravel) that I've been able to bring back into my other Drupal projects.

View file

@ -23,7 +23,7 @@ I started to use Tachyons on some personal and client projects as a layer on oth
I was working in this way on a project when I released that I could use Tailwind for all of the styling instead of just adding small sprinklings of utilities here and there. I refactored everything and removed the other framework that I'd been using - leaving just Tailwind CSS.
With the exception of some legacy projects, now I use Tailwind CSS exclusively and have used it for a number of projects. I've given lunch and learn sessions to teams that I've worked on, [presented a Tailwind CSS talk]({{site.url}}/talks/taking-flight-tailwind-css) at a number of PHP, Drupal, WordPress, and JavaScript events, and maintain [a starter-kit theme](https://www.drupal.org/project/tailwindcss) for using Tailwind in custom Drupal themes.
With the exception of some legacy projects, now I use Tailwind CSS exclusively and have used it for a number of projects. I've given lunch and learn sessions to teams that I've worked on, [presented a Tailwind CSS talk]({{site.url}}/presentations/taking-flight-tailwind-css) at a number of PHP, Drupal, WordPress, and JavaScript events, and maintain [a starter-kit theme](https://www.drupal.org/project/tailwindcss) for using Tailwind in custom Drupal themes.
I've also rebuilt a [number of existing sites]({{site.url}}/blog/uis-ive-rebuilt-tailwind-css) as examples and written some [Tailwind CSS related blog posts]({{site.url}}/blog/tags/tailwind-css).

View file

@ -27,7 +27,7 @@ You can use it within a playbook, and you'll be prompted to re-enter the passwor
Rather than a single string, you could have a file of variables that you want to encrypt. You can do this by running `ansible-vault encrypt vault.yml` and include it as before. Again, you'll be prompted by Ansible so that it can decrypt and use the values.
For an example of how I'm using Ansible Vault, see [the Dransible repository](https://github.com/opdavies/dransible/tree/986ba5097d62ff4cd0e637d40181bab2c4417f2e/tools/ansible) on GitHub or my [ Deploying PHP applications with Ansible, Ansible Vault and Ansistrano]({{site.url}}/talks/deploying-php-ansible-ansistrano) talk.
For an example of how I'm using Ansible Vault, see [the Dransible repository](https://github.com/opdavies/dransible/tree/986ba5097d62ff4cd0e637d40181bab2c4417f2e/tools/ansible) on GitHub or my [ Deploying PHP applications with Ansible, Ansible Vault and Ansistrano]({{site.url}}/presentations/deploying-php-ansible-ansistrano) talk.
---

View file

@ -64,4 +64,4 @@ public function the_admin_page_is_accessible_by_admin_users() {
}
```
Hopefully, this shows how quickly you can get tests running for a Drupal module. If you'd like to see more, the slides and video recording of my [Test-Driven Drupal talk]({{site.url}}/talks/tdd-test-driven-drupal) are online.
Hopefully, this shows how quickly you can get tests running for a Drupal module. If you'd like to see more, the slides and video recording of my [Test-Driven Drupal talk]({{site.url}}/presentations/tdd-test-driven-drupal) are online.

View file

@ -23,6 +23,6 @@ There are other advantages too - clients or product owners are generally happier
If you're familiar with the DevOps Research and Assessment (DORA) team, three of their key metrics are deployment frequency, lead time for changes, and time to restore service. All of these are improved by small and frequent releases.
In my [Deployments with Ansible and Ansistrano talk](https://www.oliverdavies.uk/talks/deploying-php-ansible-ansistrano), I mention that there is a separate rollback role, but I don't think that I've ever used it.
In my [Deployments with Ansible and Ansistrano talk](https://www.oliverdavies.uk/presentations/deploying-php-ansible-ansistrano), I mention that there is a separate rollback role, but I don't think that I've ever used it.
Because I'm deploying small changes often, it's usually much easier to fix forward than it is to rollback, and knowing this makes me a lot less anxious when deploying changes.

View file

@ -8,7 +8,7 @@ permalink: >-
Im happy to have had a conference talk proposal accepted for what will be my first in-person conference since DrupalCamp London in February 2020.
Ill be giving my "[Taking Flight with Tailwind CSS](https://www.oliverdavies.uk/talks/taking-flight-with-tailwind-css)" talk for the first time since February 2021, and in front of an in-person audience since June 2019.
Ill be giving my "[Taking Flight with Tailwind CSS](https://www.oliverdavies.uk/presentations/taking-flight-with-tailwind-css)" talk for the first time since February 2021, and in front of an in-person audience since June 2019.
The talk itself will need some updating. The last time I gave it, Tailwind CSS was on version 2.0.3. Its now on version 3.2.2 and includes features like the just-in-time engine, arbitrary values and variants, container queries, and a load of new utility classes.

View file

@ -14,7 +14,7 @@ After reading this, my question is, "Should you, or do you need to, create branc
These days, I use trunk-based development as much as possible, so I hardly ever create new branches, whether working on a project myself or with a team.
[I used to use Git Flow](https://www.oliverdavies.uk/talks/git-flow) and create branches for every new feature and bug fix, but I remember, whilst demonstrating two work-in-progress features to a client, switching between the different branches caused my local site to break. Whilst it wasnt a major issue, it wouldn't have seemed professional.
[I used to use Git Flow](https://www.oliverdavies.uk/presentations/git-flow) and create branches for every new feature and bug fix, but I remember, whilst demonstrating two work-in-progress features to a client, switching between the different branches caused my local site to break. Whilst it wasnt a major issue, it wouldn't have seemed professional.
In a team environment, feature branches are intended to keep different changes and different people's work separate.

View file

@ -12,12 +12,12 @@ I had some early presents this month and have been accepted to present talks at
## PHP Stoke
The first PHP Stoke meetup will be held at Genr8 Smithfield Works on the 12th of January. I'll be presenting "[Things you should know about PHP](https://www.oliverdavies.uk/talks/things-you-should-know-about-php)". It'll be great to be the first speaker at this new meetup.
The first PHP Stoke meetup will be held at Genr8 Smithfield Works on the 12th of January. I'll be presenting "[Things you should know about PHP](https://www.oliverdavies.uk/presentations/things-you-should-know-about-php)". It'll be great to be the first speaker at this new meetup.
## nor(DEV):con
The Norfolk Developers conference is in Norwich on the 23rd and 24th of February.
I'll be presenting "[Taking Flight about Tailwind CSS](https://www.oliverdavies.uk/talks/taking-flight-with-tailwind-css)". It's been a while since I last gave this talk so I'm looking forward to updating it with the latest changes and new features in Tailwind CSS.
I'll be presenting "[Taking Flight about Tailwind CSS](https://www.oliverdavies.uk/presentations/taking-flight-with-tailwind-css)". It's been a while since I last gave this talk so I'm looking forward to updating it with the latest changes and new features in Tailwind CSS.
It'll be great to be speaking at these events and hopefully others in 2023.

View file

@ -13,8 +13,8 @@ I took a bit of time off from these emails whilst I was preparing for the first
It was a great event with around 35 attendees and two other speakers as well as myself.
The [latest version of my slides are online](https://www.oliverdavies.uk/talks/things-you-should-know-about-php) as well [some updated resources](https://www.oliverdavies.uk/things-about-php).
The [latest version of my slides are online](https://www.oliverdavies.uk/presentations/things-you-should-know-about-php) as well [some updated resources](https://www.oliverdavies.uk/things-about-php).
My next talk will be at the Norfolk Developers conference next month where I'll be presenting an updated version of [Taking Flight with Tailwind CSS](https://www.oliverdavies.uk/talks/taking-flight-with-tailwind-css).
My next talk will be at the Norfolk Developers conference next month where I'll be presenting an updated version of [Taking Flight with Tailwind CSS](https://www.oliverdavies.uk/presentations/taking-flight-with-tailwind-css).
If you have a topic idea for a talk or would like me to speak at your meetup or conference, please get in touch.

View file

@ -8,7 +8,7 @@ tags:
- php
---
The talk that I gave last week at PHP Stoke was [Things to know about PHP](https://www.oliverdavies.uk/talks/things-you-should-know-about-php) - a talk that I was originally asked to give at the Swansea Software Development Meetup (SSDC) in January 2019, and this was the second time that I've been asked to give this talk at a PHP meetup.
The talk that I gave last week at PHP Stoke was [Things to know about PHP](https://www.oliverdavies.uk/presentations/things-you-should-know-about-php) - a talk that I was originally asked to give at the Swansea Software Development Meetup (SSDC) in January 2019, and this was the second time that I've been asked to give this talk at a PHP meetup.
Originally to give a group of various Software Developers an introduction to PHP, I didn't want the talk to be focused just on the language itself and be a walkthough the PHP manual.

View file

@ -16,7 +16,7 @@ Last month, I started my first Drupal 10 project for a client.
I'm proud that over a year of that time was spent working for the Drupal Association where I improved the Drupal.org websites and resolved issues that would have blocked the Drupal 8 release in 2015.
I'm also happy to have [presented talks and workshops](https://www.oliverdavies.uk/talks) at events like DrupalCamps, Drupal Developer Days and twice at DrupalCon. I've also organised Drupal events such as the Drupal Bristol meetup and DrupalCamp Bristol conference.
I'm also happy to have [presented talks and workshops](https://www.oliverdavies.uk/presentations) at events like DrupalCamps, Drupal Developer Days and twice at DrupalCon. I've also organised Drupal events such as the Drupal Bristol meetup and DrupalCamp Bristol conference.
I've had opportunities to contribute to open-source by having patches committed to Drupal core and maintaining modules and themes like [Override Node Options](https://www.drupal.org/project/override_node_options) and the [Tailwind CSS starter kit](https://www.drupal.org/project/tailwindcss). I've also mentored and helped others to get their first commits to Drupal core and open-source.

View file

@ -9,7 +9,7 @@ tags:
- tailwind-css
---
Previously when I gave my [Taking Flight with Tailwind CSS](https://www.oliverdavies.uk/talks/taking-flight-with-tailwind-css) talk, I created examples that relate to the event such as something related to that technology or event.
Previously when I gave my [Taking Flight with Tailwind CSS](https://www.oliverdavies.uk/presentations/taking-flight-with-tailwind-css) talk, I created examples that relate to the event such as something related to that technology or event.
The nor(DEV):con website already uses Tailwind CSS so I've been looking for other examples and have started to build some of the [Bootstrap CSS components](https://getbootstrap.com/docs/4.0/examples) with Tailwind CSS.

View file

@ -10,7 +10,7 @@ I'm always working on various personal and client projects, and they contain a l
The majority of those files are the same with some slight configuration for each project - such as whether it uses `web` or `docroot`, or which paths are checked with static analysis or for coding standards issues.
I've given a talk called [Working with Workspace](https://www.oliverdavies.uk/talks/working-with-workspace) - a tool that we used at an agency I worked at. It had two functions - to execute project tasks and to generate configuration files from templates.
I've given a talk called [Working with Workspace](https://www.oliverdavies.uk/presentations/working-with-workspace) - a tool that we used at an agency I worked at. It had two functions - to execute project tasks and to generate configuration files from templates.
I use a `justfile` to execute tasks and commands but needed to write my own tool to generate the configuration files.

View file

@ -9,7 +9,7 @@ tags:
- open-source
---
Note: The numbers within this post are taken from my [Test-Driven Drupal talk](https://www.oliverdavies.uk/talks/tdd-test-driven-drupal), in which I also talk about this.
Note: The numbers within this post are taken from my [Test-Driven Drupal talk](https://www.oliverdavies.uk/presentations/tdd-test-driven-drupal), in which I also talk about this.
My first commit to the 7.x-1.x branch of the Override Node Options module was in March 2012. According to Drupal.org, the module was used on 9,212 websites then.

View file

@ -24,5 +24,5 @@ If you have any questions, hit reply and let me know!
[commerce_example]: https://github.com/opdavies/docker-example-drupal-commerce-kickstart
[example]: https://github.com/opdavies/docker-example-drupal
[slides]: https://www.oliverdavies.uk/talks/building-build-configs
[slides]: https://www.oliverdavies.uk/presentations/building-build-configs
[video]: https://www.oliverdavies.uk/build-configs

View file

@ -48,5 +48,5 @@ It's quicker to create and onboard projects using existing configurations instea
If you want to see an example, [watch this video][video] where I set up a new Drupal 10 project from nothing to running website in less than a minute.
[build configs]: https://www.oliverdavies.uk/build-configs
[talk]: https://www.oliverdavies.uk/talks/building-build-configs
[talk]: https://www.oliverdavies.uk/presentations/building-build-configs
[video]: https://www.youtube.com/watch?v=LkhsdmxReUc

View file

@ -30,4 +30,4 @@ Register now to find out when the email course is live, or [read the first lesso
[atdc]: {{site.url}}/atdc
[first lesson]: {{site.url}}/archive/2023/12/25/zero-to-test
[working without workspace talk]: {{site.url}}/talks/working-without-workspace
[working without workspace talk]: {{site.url}}/presentations/working-without-workspace

View file

@ -28,4 +28,4 @@ If you use it and don't like it, don't continue and return to what you did befor
Whether you keep it or not, you better understand what you're evaluating and not dismiss it out of hand.
[talk]: {{site.url}}/talks/taking-flight-with-tailwind-css
[talk]: {{site.url}}/presentations/taking-flight-with-tailwind-css

View file

@ -15,7 +15,7 @@ Here is some code from my website:
![A screenshot of the code that calculates the number of talks I've given.]({{site.url}}/assets/images/talk-count-code.png)
If you want, you can also [view it on GitHub](https://raw.githubusercontent.com/opdavies/oliverdavies.uk/main/source/_pages/talks.md).
If you want, you can also [view it on GitHub](https://raw.githubusercontent.com/opdavies/oliverdavies.uk/main/source/_pages/presentations.md).
It is business logic responsible for counting the number of talks I've given at different events so I can display it on my Talks page.

View file

@ -21,7 +21,7 @@ It's one of my most popular talks and, during COVID lockdowns, I also gave a wor
If this helps anyone on their Tailwind CSS learning journey, please reply and let me know!
[recording]: https://www.youtube.com/watch?v=phFDKF-9j0Y
[talk]: {{site.url}}/talks/taking-flight-with-tailwind-css
[talk]: {{site.url}}/presentations/taking-flight-with-tailwind-css
{% endblock %}
{% block cta %}

View file

@ -20,5 +20,5 @@ If you'd like a sneak peek of the demo site I'm building, [it's on GitHub][repo]
[event]: https://www.meetup.com/php-sw/events/298880313
[repo]: https://github.com/opdavies/phpsw-sculpin-demo
[talk]: {{site.url}}/talks/test-drive-twig-with-sculpin
[talk]: {{site.url}}/presentations/test-drive-twig-with-sculpin
[tweet]: https://twitter.com/opdavies/status/1754629305575874738

View file

@ -42,4 +42,4 @@ I don't need to think about whether this branch is a feature or a hotfix, and I'
Do what works best for you and your team, but don't adopt something because it's the "standard" approach.
[talk]: {{site.url}}/talks/git-flow
[talk]: {{site.url}}/presentations/git-flow

View file

@ -26,5 +26,5 @@ You can [watch the full stream][video] on YouTube now. I'll split it into sectio
I won't post a link to every video here, so please subscribe to my YouTube channel to be notified when I go live next.
[build configs]: {{site.url}}/build-configs
[talk]: {{site.url}}/talks/building-build-configs
[talk]: {{site.url}}/presentations/building-build-configs
[video]: https://www.youtube.com/watch?v=Wlkcf1PLWN8

View file

@ -18,5 +18,5 @@ In the talk, I explain what Sculpin is and how it works before a live demo where
If you have any feedback or questions, reply to this email and let me know.
[talk]: {{site.url}}/talks/building-static-websites-sculpin
[talk]: {{site.url}}/presentations/building-static-websites-sculpin
[video]: https://youtu.be/axy6ltc9meA?si=FtR4DZ5BVi_Se60J

View file

@ -28,4 +28,4 @@ Ansible is a great tool for this type of task and, just because it's a tool I ha
It's still in my toolkit, just in case I need it.
[commit]: https://github.com/opdavies/oliverdavies.uk/commit/cd6575c6fcc091a0b7c98b6985b3a92b85e279e3
[talk]: {{site.url}}/talks/deploying-php-ansible-ansistrano
[talk]: {{site.url}}/presentations/deploying-php-ansible-ansistrano

View file

@ -19,5 +19,5 @@ We discussed his experience with coding bootcamps, getting into the software ind
It will be released soon on [the Beyond Blocks podcast page][1].
[0]: {{site.url}}/talks/communities-contribution
[0]: {{site.url}}/presentations/communities-contribution
[1]: {{site.url}}/podcast

View file

@ -60,4 +60,4 @@ If I tried searching for `.sidebar-wrapper` or `.sidebar-wrapper a:hover`, they
It's taken me a while to get back into this way of working with CSS, but it does remind me [why I prefer to use utility styles][talk] for my own projects.
[nesting]: {{site.url}}/daily/2024/07/08/back-to-sass-and-traditional-css
[talk]: {{site.url}}/talks/taking-flight-with-tailwind-css
[talk]: {{site.url}}/presentations/taking-flight-with-tailwind-css

View file

@ -46,6 +46,6 @@ Similar to feature flags, this is temporary code that will later be removed when
In the future, I can refactor the internal logic to use a different approach and when I'm ready, eventually remove the compatibility layer and tag a new major version with the breaking changes.
[0]: {{site.url}}/talks/building-build-configs
[1]: {{site.url}}/talks/working-with-workspace
[0]: {{site.url}}/presentations/building-build-configs
[1]: {{site.url}}/presentations/working-with-workspace
[2]: https://github.com/ALT-F4-LLC/build-configs

View file

@ -32,7 +32,7 @@ Similar to [why I use Linux][4], I believe in owning your own content rather tha
And I learned something new about Git at the same time.
[0]: {{site.url}}/talks/test-drive-twig-with-sculpin
[0]: {{site.url}}/presentations/test-drive-twig-with-sculpin
[1]: https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---allow-unrelated-histories
[3]: https://github.com/opdavies/oliverdavies.uk
[4]: {{site.url}}/daily/2024/07/31/why-i-use-linux

View file

@ -24,4 +24,4 @@ There is no styling yet, as I wanted to focus on deploying the MVP version, but
At the moment, I'm focusing on writing as often as possible for this email list and in my new Zettelkasten.
[0]: https://zet.oliverdavies.uk
[1]: {{site.url}}/talks/building-static-websites-sculpin
[1]: {{site.url}}/presentations/building-static-websites-sculpin

View file

@ -22,7 +22,7 @@ I have some things I want to make sure I mention, so expect a note in my Zettlek
If you're interested, [here's the demo website][2] I did for PHP South West, [along with the code on GitHub][3].
[0]: {{site.url}}/talks/building-static-websites-sculpin
[0]: {{site.url}}/presentations/building-static-websites-sculpin
[1]: https://zet.oliverdavies.uk
[2]: https://phpsw-sculpin-demo.oliverdavies.uk
[3]: https://github.com/opdavies/phpsw-sculpin-demo

View file

@ -8,7 +8,7 @@
</div>
<div class="{{ site.prose_classes }}">
<p>I'm an Acquia-certified Drupal Triple Expert with {{ get_years_of_experience() }} years of experience, an open-source software maintainer and Drupal core contributor, <a href="/talks">public speaker</a>, <a href="{{ site.youtube.channel.url }}/streams">live streamer</a>, and host of the <a href="/podcast">Beyond Blocks podcast</a>.</p>
<p>I'm an Acquia-certified Drupal Triple Expert with {{ get_years_of_experience() }} years of experience, an open-source software maintainer and Drupal core contributor, <a href="/presentations">public speaker</a>, <a href="{{ site.youtube.channel.url }}/streams">live streamer</a>, and host of the <a href="/podcast">Beyond Blocks podcast</a>.</p>
</div>
</div>
</div>

View file

@ -3,15 +3,15 @@
{% block content_wrapper %}
{{ parent() }}
{% include 'talk/slides' with {
{% include 'presentation/slides' with {
speakerdeck: page.speakerdeck,
} %}
{% include 'talk/video' with {
{% include 'presentation/video' with {
video: page.video,
} %}
{% include 'talk/events' with {
{% include 'presentation/events' with {
events: page.events,
} %}
{% endblock %}

View file

@ -6,7 +6,7 @@ title: Page not found
Perhaps you were looking for one of these pages:
- [Products and services](/pricing)
- [Public speaking and workshops](/talks)
- [Public speaking and workshops](/presentations)
- [My daily email list](/daily)
- [The Beyond Blocks podcast](/podcast)

@ -1 +1 @@
Subproject commit 646df70626c07503d7ab7e90c8d257c63fb1e5b7
Subproject commit f31e5c4364890b2a31b3acd961f78565ad822de9

View file

@ -9,7 +9,7 @@ title: Hi, PHP Oxford!
{% block content %}
Thanks for attending my talk on [Build Configs](/build-configs).
[These are the slides](/talks/building-build-configs) I presented and the example video:
[These are the slides](/presentations/building-build-configs) I presented and the example video:
{% include 'youtube-video' with { id: 'LkhsdmxReUc'} %}
@ -21,7 +21,7 @@ If you have any further questions, let me know.
[Get in touch](/contact) if you're interested in using Build Configs-based managed configuration files in your projects (I offer one-off implementations or ongoing updates via a subscription), you need an in-house tool built for your team, or if we can [work together another way](/pricing).
If you liked the talk, or [any of my others](/talks), I can also present talks and run workshops for companies.
If you liked the talk, or [any of my others](/presentations), I can also present talks and run workshops for companies.
## While you're here

View file

@ -28,8 +28,8 @@ All emails are sent from my personal email address, so you can press reply and c
[consulting]: /consulting
[course]: /atdc
[email list]: /daily
[tailwind css]: /talks/taking-flight-with-tailwind-css
[test driven drupal]: /talks/tdd-test-driven-drupal
[tailwind css]: /presentations/taking-flight-with-tailwind-css
[test driven drupal]: /presentations/tdd-test-driven-drupal
[workshop]: /archive/2024/01/22/tailwind-css-workshop-recording
{% endblock %}

View file

@ -9,7 +9,7 @@ title: PHP Berkshire
{% block content %}
Thank you for attending my Sculpin talk at PHP Berkshire.
[The slides and a previous recording](/talks/building-static-websites-sculpin) are on the talk page.
[The slides and a previous recording](/presentations/building-static-websites-sculpin) are on the talk page.
To see an example of a Sculpin project, you can see [the source code for this website](https://github.com/opdavies/oliverdavies.uk), [my Zettlekasten](https://github.com/opdavies/zet.oliverdavies.uk) or [my demo for PHP South West](https://github.com/opdavies/phpsw-sculpin-demo).

View file

@ -0,0 +1,18 @@
---
title: Presentations
use: [presentations]
---
Since September 2012, I have given {{ get_presentation_count(data.presentations) }} public talks and workshops at various conferences and meetups, in-person and remotely, on topics including PHP, Drupal, automated testing, Git, CSS, and systems administration.
{% for talk in data.presentations|sort((a, b) => a.events|last.date|date('U') > b.events|last.date|date('U') ? -1 : 1) %}
<article>
<div class="not-prose">
<h2 class="text-xl font-bold">
<a class="font-bold text-blue-primary dark:text-blue-400" href="{{ talk.url|trim('/', 'right') }}">{{ talk.title }}</a>
</h2>
</div>
<p>{{ talk.description }}</p>
</article>
{% endfor %}

View file

@ -1,18 +0,0 @@
---
title: Talks and Workshops
use: [talks]
---
Since September 2012, I have given {{ get_past_talk_count(data.talks) }} public presentations and workshops at various conferences and meetups, in-person and remotely, on topics including PHP, Drupal, automated testing, Git, CSS, and systems administration.
{% for talk in data.talks|sort((a, b) => a.events|last.date|date('U') > b.events|last.date|date('U') ? -1 : 1) %}
<article>
<div class="not-prose">
<h2 class="text-xl font-bold">
<a class="font-bold text-blue-primary dark:text-blue-400" href="{{ talk.url|trim('/', 'right') }}">{{ talk.title }}</a>
</h2>
</div>
<p>{{ talk.description }}</p>
</article>
{% endfor %}

View file

@ -70,7 +70,7 @@ that weve written on my work project over the last few months.
I didnt record this workshop, but I have exported the slides and embedded them
below:
{% include 'talk/slides' with {
{% include 'presentation/slides' with {
speakerdeck: {
id: '2679401cb2ad421789d372cb8d38e368',
ratio: '1.77777777777778',

View file

@ -13,7 +13,7 @@ tweets: true
Here are my slides from my "What is Git Flow?" session at
[DrupalCamp London](http://2014.drupalcamplondon.co.uk).
{% include 'talk/slides' with { speakerdeck: {
{% include 'presentation/slides' with { speakerdeck: {
data_id: '201559e0f103013198dd5a5f6f23ab67' }
} only %}

View file

@ -52,4 +52,4 @@ This session will cover various topics including:
[4]: https://laravel.com/docs/collections
[5]: https://github.com/opdavies/drupal-module-drupalorg-project-statistics
[6]: https://github.com/opdavies/drupal-module-drupalversary
[7]: /talks/using-laravel-collections-outside-laravel/
[7]: /presentations/using-laravel-collections-outside-laravel/