diff --git a/hosts/hetznix/services/caddy/vhosts/www.oliverdavies.uk-redirects.caddy b/hosts/hetznix/services/caddy/vhosts/www.oliverdavies.uk-redirects.caddy index 02d55784..fc7212df 100644 --- a/hosts/hetznix/services/caddy/vhosts/www.oliverdavies.uk-redirects.caddy +++ b/hosts/hetznix/services/caddy/vhosts/www.oliverdavies.uk-redirects.caddy @@ -30,16 +30,373 @@ redir /YK1VH /articles/psr4-autoloading-test-cases-drupal-7 permanent redir /YilTZ$ https://drupalcamp.london/tickets/training permanent redir /about / permanent redir /about/cv /cv permanent -redir /about/speaker-information /speaker-information permanent redir /about/speaker /speaker permanent +redir /about/speaker-information /speaker-information permanent redir /acquia-certifications https://certification.acquia.com/registry?fname=Oliver&lname=Davies&city=&state=&country=United+Kingdom&org=&exam=All permanent redir /acquia-certified https://certification.acquia.com/?fname=Oliver&lname=Davies permanent -redir /ansible-molecule /articles/test-driven-ansible-role-development-molecule permanent redir /ansible https://galaxy.ansible.com/opdavies permanent +redir /ansible-molecule /articles/test-driven-ansible-role-development-molecule permanent redir /ansistrano-code https://github.com/opdavies/dransible permanent redir /ansistrano-demo https://www.youtube.com/watch?v=PLS4ET7FAcU permanent redir /ansistrano-slides /talks/deploying-php-ansible-ansistrano permanent +redir /archive/2022-08-28/how-started-programming /daily/2022-08-28/how-started-programming permanent +redir /archive/2022/08/20/return-to-offline-meetups-conferences /daily/2022/08/20/return-to-offline-meetups-conferences permanent +redir /archive/2022/08/23/git-gui-command-line /daily/2022/08/23/git-gui-command-line permanent +redir /archive/2022/08/25/why-i-work-in-neovim /daily/2022/08/25/why-i-work-in-neovim permanent +redir /archive/2022/08/26/always-be-learning /daily/2022/08/26/always-be-learning permanent +redir /archive/2022/08/27/giving-back /daily/2022/08/27/giving-back permanent +redir /archive/2022/08/29/why-like-drupal /daily/2022/08/29/why-like-drupal permanent +redir /archive/2022/08/30/why-dont-only-use-drupal /daily/2022/08/30/why-dont-only-use-drupal permanent +redir /archive/2022/08/31/monorepo-or-not /daily/2022/08/31/monorepo-or-not permanent +redir /archive/2022/09/01/conventional-commits-changelogs /daily/2022/09/01/conventional-commits-changelogs permanent +redir /archive/2022/09/02/automating-all-the-things-with-ansible /daily/2022/09/02/automating-all-the-things-with-ansible permanent +redir /archive/2022/09/04/using-ansible-for-server-configuration /daily/2022/09/04/using-ansible-for-server-configuration permanent +redir /archive/2022/09/05/using-ansible-for-local-configuration /daily/2022/09/05/using-ansible-for-local-configuration permanent +redir /archive/2022/09/06/deploying-applications-with-ansible /daily/2022/09/06/deploying-applications-with-ansible permanent +redir /archive/2022/09/07/my-tailwind-css-origin-story /daily/2022/09/07/my-tailwind-css-origin-story permanent +redir /archive/2022/09/08/keeping-secrets-with-ansible-vault /daily/2022/09/08/keeping-secrets-with-ansible-vault permanent +redir /archive/2022/09/09/refactoring-tailwind-component /daily/2022/09/09/refactoring-tailwind-component permanent +redir /archive/2022/09/10/automating-ansible-deployments-ci /daily/2022/09/10/automating-ansible-deployments-ci permanent +redir /archive/2022/09/11/custom-styles-tailwind-css-apply-theme-custom-plugins /daily/2022/09/11/custom-styles-tailwind-css-apply-theme-custom-plugins permanent +redir /archive/2022/09/12/month-/daily-emails daily/2022/09/12/month-daily-emails permanent +redir /archive/2022/09/14/simpletest-drupal-test /daily/2022/09/14/simpletest-drupal-test permanent +redir /archive/2022/09/16/why-mostly-write-functional-and-integration-tests /daily/2022/09/16/why-mostly-write-functional-and-integration-tests permanent +redir /archive/2022/09/17/thoughts-automated-code-formatting /daily/2022/09/17/thoughts-automated-code-formatting permanent +redir /archive/2022/09/19/useful-git-configuration /daily/2022/09/19/useful-git-configuration permanent +redir /archive/2022/09/20/why-like-trunk-based-development /daily/2022/09/20/why-like-trunk-based-development permanent +redir /archive/2022/09/21/being-drupal-contribution-mentor /daily/2022/09/21/being-drupal-contribution-mentor permanent +redir /archive/2022/09/22/releasing-drupal-module-template /daily/2022/09/22/releasing-drupal-module-template permanent +redir /archive/2022/09/23/adrs-technical-design-documents /daily/2022/09/23/adrs-technical-design-documents permanent +redir /archive/2022/09/25/using-component-library-for-front-end-development /daily/2022/09/25/using-component-library-for-front-end-development permanent +redir /archive/2022/09/26/experimenting-with-the-nix-package-manager /daily/2022/09/26/experimenting-with-the-nix-package-manager permanent +redir /archive/2022/09/27/mentoring-with-drupal-career-online /daily/2022/09/27/mentoring-with-drupal-career-online permanent +redir /archive/2022/09/28/mob-programming-php-south-wales /daily/2022/09/28/mob-programming-php-south-wales permanent +redir /archive/2022/09/30/store-wars-vuejs /daily/2022/09/30/store-wars-vuejs permanent +redir /archive/2022/10/12/overcoming-deployment-anxiety /daily/2022/10/12/overcoming-deployment-anxiety permanent +redir /archive/2022/10/17/14-years-drupalorg /daily/2022/10/17/14-years-drupalorg permanent +redir /archive/2022/10/18/pair-mob-programming /daily/2022/10/18/pair-mob-programming permanent +redir /archive/2022/10/20/cherry-picking-commits-is-an-anti-pattern /daily/2022/10/20/cherry-picking-commits-is-an-anti-pattern permanent redir /archive/2022/10/20/run-vs-task-runners/? /archive/2022/10/19/run-vs-task-runners permanent +redir /archive/2022/10/21/automated-testing-and-test-driven-development-are-not-the-same /daily/2022/10/21/automated-testing-and-test-driven-development-are-not-the-same permanent +redir /archive/2022/10/24/looking-at-localgov-drupal /daily/2022/10/24/looking-at-localgov-drupal permanent +redir /archive/2022/10/25/what-are-drupal-distributions /daily/2022/10/25/what-are-drupal-distributions permanent +redir /archive/2022/10/26/neovim-as-a-personalised-development-environment /daily/2022/10/26/neovim-as-a-personalised-development-environment permanent +redir /archive/2022/10/27/getting-back-into-live-streaming /daily/2022/10/27/getting-back-into-live-streaming permanent +redir /archive/2022/10/28/why-write-framework-agnostic-packages /daily/2022/10/28/why-write-framework-agnostic-packages permanent +redir /archive/2022/10/29/the-open-source-first-development-workflow /daily/2022/10/29/the-open-source-first-development-workflow permanent +redir /archive/2022/10/30/refactoring-one-large-test-into-multiple-smaller-tests /daily/2022/10/30/refactoring-one-large-test-into-multiple-smaller-tests permanent +redir /archive/2022/11/08/are-sprints-incompatible-with-continuous-deployment /daily/2022/11/08/are-sprints-incompatible-with-continuous-deployment permanent +redir /archive/2022/11/09/your-conference-talk-has-been-accepted /daily/2022/11/09/your-conference-talk-has-been-accepted permanent +redir /archive/2022/11/12/building-a-minimum-viable-product-and-managing-technical-debt /daily/2022/11/12/building-a-minimum-viable-product-and-managing-technical-debt permanent +redir /archive/2022/11/12/creating-small-proof-of-concept-application-afternoon /daily/2022/11/12/creating-small-proof-of-concept-application-afternoon permanent +redir /archive/2022/11/13/how-i-manage-multiple-drupal-websites-using-the-same-codebase /daily/2022/11/13/how-i-manage-multiple-drupal-websites-using-the-same-codebase permanent +redir /archive/2022/11/14/camel-case-or-snake-case-for-test-methods /daily/2022/11/14/camel-case-or-snake-case-for-test-methods permanent +redir /archive/2022/11/15/writing-good-automated-test-names /daily/2022/11/15/writing-good-automated-test-names permanent +redir /archive/2022/11/16/why-don't-you-write-automated-tests /daily/2022/11/16/why-don't-you-write-automated-tests permanent +redir /archive/2022/11/17/agnostic-ci-pipelines-with-run-files /daily/2022/11/17/agnostic-ci-pipelines-with-run-files permanent +redir /archive/2022/11/18/one-test-a-day-keeps-bugs-away /daily/2022/11/18/one-test-a-day-keeps-bugs-away permanent +redir /archive/2022/11/19/are-missing-tests-a-blocker-to-refactoring /daily/2022/11/19/are-missing-tests-a-blocker-to-refactoring permanent +redir /archive/2022/11/20/version-controlled-commented-out-code /daily/2022/11/20/version-controlled-commented-out-code permanent +redir /archive/2022/11/21/git-tricks-to-avoid-committing-commented-out-and-other-unneeded-code /daily/2022/11/21/git-tricks-to-avoid-committing-commented-out-and-other-unneeded-code permanent +redir /archive/2022/11/22/tldr /daily/2022/11/22/tldr permanent +redir /archive/2022/11/23/do-you-need-to-branch /daily/2022/11/23/do-you-need-to-branch permanent +redir /archive/2022/11/24/doing-the-simplest-possible-thing /daily/2022/11/24/doing-the-simplest-possible-thing permanent +redir /archive/2022/11/25/plan-then-code /daily/2022/11/25/plan-then-code permanent +redir /archive/2022/11/30/ship-show-or-ask /daily/2022/11/30/ship-show-or-ask permanent +redir /archive/2022/12/01/writing-readable-code /daily/2022/12/01/writing-readable-code permanent +redir /archive/2022/12/02/commit-and-push-something-every-day /daily/2022/12/02/commit-and-push-something-every-day permanent +redir /archive/2022/12/03/what-to-do-with-todo-comments /daily/2022/12/03/what-to-do-with-todo-comments permanent +redir /archive/2022/12/04/writing-why-first-user-stories /daily/2022/12/04/writing-why-first-user-stories permanent +redir /archive/2022/12/05/outcomes-or-output /daily/2022/12/05/outcomes-or-output permanent +redir /archive/2022/12/06/should-you-comment-your-code /daily/2022/12/06/should-you-comment-your-code permanent +redir /archive/2022/12/07/separating-releases-from-deployments-with-feature-flags /daily/2022/12/07/separating-releases-from-deployments-with-feature-flags permanent +redir /archive/2022/12/08/the-decorator-design-pattern /daily/2022/12/08/the-decorator-design-pattern permanent +redir /archive/2022/12/09/how-and-why-i-started-using-postcss /daily/2022/12/09/how-and-why-i-started-using-postcss permanent +redir /archive/2022/12/10/managing-databases-with-neovim-and-docker /daily/2022/12/10/managing-databases-with-neovim-and-docker permanent +redir /archive/2022/12/15/happy-drupal-10-release-day /daily/2022/12/15/happy-drupal-10-release-day permanent +redir /archive/2022/12/20/automating-all-the-things,-including-infrastructure /daily/2022/12/20/automating-all-the-things,-including-infrastructure permanent +redir /archive/2022/12/21/duck-typing /daily/2022/12/21/duck-typing permanent +redir /archive/2022/12/22/the-boy-scout-rule /daily/2022/12/22/the-boy-scout-rule permanent +redir /archive/2022/12/23/speaking-at-php-stoke-and-nordevcon /daily/2022/12/23/speaking-at-php-stoke-and-nordevcon permanent +redir /archive/2022/12/28/debugging-gitignore-rules /daily/2022/12/28/debugging-gitignore-rules permanent +redir /archive/2022/12/29/what-is-the-cost-of-a-bug /daily/2022/12/29/what-is-the-cost-of-a-bug permanent +redir /archive/2022/12/30/tests-are-living-documentation /daily/2022/12/30/tests-are-living-documentation permanent +redir /archive/2022/12/31/just-start-writing /daily/2022/12/31/just-start-writing permanent +redir /archive/2023/01/01/types-and-static-analysis-saved-me-today /daily/2023/01/01/types-and-static-analysis-saved-me-today permanent +redir /archive/2023/01/02/dont-use-arbitrary-values-in-tailwind-css /daily/2023/01/02/dont-use-arbitrary-values-in-tailwind-css permanent +redir /archive/2023/01/03/tailwind-css-extensibility-is-one-of-its-best-features /daily/2023/01/03/tailwind-css-extensibility-is-one-of-its-best-features permanent +redir /archive/2023/01/04/testable-tailwind-css-plugins /daily/2023/01/04/testable-tailwind-css-plugins permanent +redir /archive/2023/01/05/adding-tailwind-to-an-existing-project /daily/2023/01/05/adding-tailwind-to-an-existing-project permanent +redir /archive/2023/01/06/utility-first-or-utility-last /daily/2023/01/06/utility-first-or-utility-last permanent +redir /archive/2023/01/07/reducing-utility-class-duplication /daily/2023/01/07/reducing-utility-class-duplication permanent +redir /archive/2023/01/16/back-after-php-stoke /daily/2023/01/16/back-after-php-stoke permanent +redir /archive/2023/01/17/things-to-know-about-php /daily/2023/01/17/things-to-know-about-php permanent +redir /archive/2023/01/18/drupal-turns-22 /daily/2023/01/18/drupal-turns-22 permanent +redir /archive/2023/01/19/long-term-maintainability-with-utility-classes-and-tailwind-css /daily/2023/01/19/long-term-maintainability-with-utility-classes-and-tailwind-css permanent +redir /archive/2023/01/20/tailwinds-classes-are-your-classes /daily/2023/01/20/tailwinds-classes-are-your-classes permanent +redir /archive/2023/01/21/tailwind-not-just-translating-css-to-utility-classes /daily/2023/01/21/tailwind-not-just-translating-css-to-utility-classes permanent +redir /archive/2023/01/22/building-bootstrap-css-examples-with-tailwind /daily/2023/01/22/building-bootstrap-css-examples-with-tailwind permanent +redir /archive/2023/01/23/debugging-with-git-bisect /daily/2023/01/23/debugging-with-git-bisect permanent +redir /archive/2023/01/24/small-commits-and-good-commit-messges /daily/2023/01/24/small-commits-and-good-commit-messges permanent +redir /archive/2023/01/25/to-squash-or-not-to-squash /daily/2023/01/25/to-squash-or-not-to-squash permanent +redir /archive/2023/02/07/astro-as-a-static-site-generator /daily/2023/02/07/astro-as-a-static-site-generator permanent +redir /archive/2023/02/08/fetching-api-data-with-astro /daily/2023/02/08/fetching-api-data-with-astro permanent +redir /archive/2023/02/09/creating-api-endpoints-with-astro /daily/2023/02/09/creating-api-endpoints-with-astro permanent +redir /archive/2023/02/16/tailwind-css-at-the-bristol-software-development-meetup /daily/2023/02/16/tailwind-css-at-the-bristol-software-development-meetup permanent +redir /archive/2023/02/17/upgrading-my-drupal-example-project-to-drupal-10 /daily/2023/02/17/upgrading-my-drupal-example-project-to-drupal-10 permanent +redir /archive/2023/02/18/drupal-10-version-of-override-node-options /daily/2023/02/18/drupal-10-version-of-override-node-options permanent +redir /archive/2023/02/19/clients-dont-care-which-design-pattern-you-use /daily/2023/02/19/clients-dont-care-which-design-pattern-you-use permanent +redir /archive/2023/02/20/tailwind-why-i-prefer-to-extract-html-components /daily/2023/02/20/tailwind-why-i-prefer-to-extract-html-components permanent +redir /archive/2023/03/01/tailwind-css-at-the-norfolk-developer-conference /daily/2023/03/01/tailwind-css-at-the-norfolk-developer-conference permanent +redir /archive/2023/03/02/busy-working-on-client-projects /daily/2023/03/02/busy-working-on-client-projects permanent +redir /archive/2023/03/03/adding-a-localgov-drupal-example /daily/2023/03/03/adding-a-localgov-drupal-example permanent +redir /archive/2023/03/04/why-i-built-a-tool-to-generate-configuration-files /daily/2023/03/04/why-i-built-a-tool-to-generate-configuration-files permanent +redir /archive/2023/03/05/mentoring-for-school-of-code /daily/2023/03/05/mentoring-for-school-of-code permanent +redir /archive/2023/03/08/automating-infrastructure-with-iac /daily/2023/03/08/automating-infrastructure-with-iac permanent +redir /archive/2023/03/09/in-what-language-should-i-write-my-automation /daily/2023/03/09/in-what-language-should-i-write-my-automation permanent +redir /archive/2023/03/13/what-problem-am-i-trying-to-solve /daily/2023/03/13/what-problem-am-i-trying-to-solve permanent +redir /archive/2023/03/14/automating-all-the-things /daily/2023/03/14/automating-all-the-things permanent +redir /archive/2023/03/15/the-benefits-of-automation /daily/2023/03/15/the-benefits-of-automation permanent +redir /archive/2023/03/21/there-isnt-a-tailwind-looking-site /daily/2023/03/21/there-isnt-a-tailwind-looking-site permanent +redir /archive/2023/03/22/with-utility-styles-your-css-stops-growing /daily/2023/03/22/with-utility-styles-your-css-stops-growing permanent +redir /archive/2023/03/27/software-development-solving-problems-and-adding-value /daily/2023/03/27/software-development-solving-problems-and-adding-value permanent +redir /archive/2023/04/07/speaking-at-php-london /daily/2023/04/07/speaking-at-php-london permanent +redir /archive/2023/04/08/why-i-use-tmux /daily/2023/04/08/why-i-use-tmux permanent +redir /archive/2023/04/09/nix-nixos-home-manager-and-wsl2 /daily/2023/04/09/nix-nixos-home-manager-and-wsl2 permanent +redir /archive/2023/04/10/how-i-use-neovim-for-writing-php /daily/2023/04/10/how-i-use-neovim-for-writing-php permanent +redir /archive/2023/04/11/just-vs-make /daily/2023/04/11/just-vs-make permanent +redir /archive/2023/04/12/cleaner-php-code-with-promoted-constructor-properties /daily/2023/04/12/cleaner-php-code-with-promoted-constructor-properties permanent +redir /archive/2023/04/13/immutable-read-only-properties-in-php-8-1 /daily/2023/04/13/immutable-read-only-properties-in-php-8-1 permanent +redir /archive/2023/04/14/data-transfer-objects-and-value-objects /daily/2023/04/14/data-transfer-objects-and-value-objects permanent +redir /archive/2023/04/15/automatically-running-commands-with-nodemon /daily/2023/04/15/automatically-running-commands-with-nodemon permanent +redir /archive/2023/04/16/refactoring-with-readonly-classes-in-php-8-2 /daily/2023/04/16/refactoring-with-readonly-classes-in-php-8-2 permanent +redir /archive/2023/04/17/introducing-feature-flags-to-build-configs /daily/2023/04/17/introducing-feature-flags-to-build-configs permanent +redir /archive/2023/04/18/consistency-is-key /daily/2023/04/18/consistency-is-key permanent +redir /archive/2023/04/19/camel-case-or-snake-case-for-drupal-code /daily/2023/04/19/camel-case-or-snake-case-for-drupal-code permanent +redir /archive/2023/04/20/micro-refactorings /daily/2023/04/20/micro-refactorings permanent +redir /archive/2023/04/21/making-my-drupal-module-template-drupal-10-compatible /daily/2023/04/21/making-my-drupal-module-template-drupal-10-compatible permanent +redir /archive/2023/04/22/build-configs-as-a-service /daily/2023/04/22/build-configs-as-a-service permanent +redir /archive/2023/04/23/laravel-pipelines /daily/2023/04/23/laravel-pipelines permanent +redir /archive/2023/04/24/ci-pipelines-should-start-locally /daily/2023/04/24/ci-pipelines-should-start-locally permanent +redir /archive/2023/04/25/shortening-the-feedback-loop-even-more /daily/2023/04/25/shortening-the-feedback-loop-even-more permanent +redir /archive/2023/04/26/tdd-structure-a-new-test-by-writing-comments-first /daily/2023/04/26/tdd-structure-a-new-test-by-writing-comments-first permanent +redir /archive/2023/04/27/tdd-write-the-test-backwards /daily/2023/04/27/tdd-write-the-test-backwards permanent +redir /archive/2023/04/30/will-we-see-drupal-7-100 /daily/2023/04/30/will-we-see-drupal-7-100 permanent +redir /archive/2023/05/01/should-drupal-7-support-be-extended-again /daily/2023/05/01/should-drupal-7-support-be-extended-again permanent +redir /archive/2023/05/02/does-it-depend-on-who-you-ask /daily/2023/05/02/does-it-depend-on-who-you-ask permanent +redir /archive/2023/05/03/just-because-core-is-supported /daily/2023/05/03/just-because-core-is-supported permanent +redir /archive/2023/05/04/speaking-at-the-symfony-uk-meetup-london /daily/2023/05/04/speaking-at-the-symfony-uk-meetup-london permanent +redir /archive/2023/05/05/getting-to-green /daily/2023/05/05/getting-to-green permanent +redir /archive/2023/05/06/why-its-important-to-see-the-test-fail /daily/2023/05/06/why-its-important-to-see-the-test-fail permanent +redir /archive/2023/05/07/you-dont-need-to-think-about-what-to-do-next /daily/2023/05/07/you-dont-need-to-think-about-what-to-do-next permanent +redir /archive/2023/05/08/only-write-enough-code-to-get-a-failing-test /daily/2023/05/08/only-write-enough-code-to-get-a-failing-test permanent +redir /archive/2023/05/09/the-single-responsibility-principle /daily/2023/05/09/the-single-responsibility-principle permanent +redir /archive/2023/05/10/tailwind-css-makes-change-easier /daily/2023/05/10/tailwind-css-makes-change-easier permanent +redir /archive/2023/05/11/why-i-like-pair-and-mob-programming /daily/2023/05/11/why-i-like-pair-and-mob-programming permanent +redir /archive/2023/05/12/always-listen-to-the-mob /daily/2023/05/12/always-listen-to-the-mob permanent +redir /archive/2023/05/13/when-you-do-things-right /daily/2023/05/13/when-you-do-things-right permanent +redir /archive/2023/05/14/releasing-small-changes-often-is-less-risky /daily/2023/05/14/releasing-small-changes-often-is-less-risky permanent +redir /archive/2023/05/15/is-the-drupal-release-cycle-too-fast /daily/2023/05/15/is-the-drupal-release-cycle-too-fast permanent +redir /archive/2023/05/16/mastering-your-tools-improves-productivity /daily/2023/05/16/mastering-your-tools-improves-productivity permanent +redir /archive/2023/05/17/what-is-deprecated-code /daily/2023/05/17/what-is-deprecated-code permanent +redir /archive/2023/05/18/why-is-backward-compatibility-important /daily/2023/05/18/why-is-backward-compatibility-important permanent +redir /archive/2023/05/19/semantic-versioning /daily/2023/05/19/semantic-versioning permanent +redir /archive/2023/05/20/a-minor-breaking-change /daily/2023/05/20/a-minor-breaking-change permanent +redir /archive/2023/05/21/drupal-9-almost-end-of-life-already /daily/2023/05/21/drupal-9-almost-end-of-life-already permanent +redir /archive/2023/06/05/how-long-should-a-feature-flag-live /daily/2023/06/05/how-long-should-a-feature-flag-live permanent +redir /archive/2023/06/06/drupal-7-end-of-life-extended /daily/2023/06/06/drupal-7-end-of-life-extended permanent +redir /archive/2023/06/07/what-does-the-drupal-7-eol-extension-mean-to-you /daily/2023/06/07/what-does-the-drupal-7-eol-extension-mean-to-you permanent +redir /archive/2023/06/08/write-less-drupal-code /daily/2023/06/08/write-less-drupal-code permanent +redir /archive/2023/06/09/drupal-is-built-by-people /daily/2023/06/09/drupal-is-built-by-people permanent +redir /archive/2023/06/10/how-do-you-know-when-to-remove-a-feature-flag /daily/2023/06/10/how-do-you-know-when-to-remove-a-feature-flag permanent +redir /archive/2023/06/11/failing-fast /daily/2023/06/11/failing-fast permanent +redir /archive/2023/06/12/feature-flags-in-a-multi-tenancy-application /daily/2023/06/12/feature-flags-in-a-multi-tenancy-application permanent +redir /archive/2023/06/13/should-you-feature-flag-everything /daily/2023/06/13/should-you-feature-flag-everything permanent +redir /archive/2023/06/14/what-if-there-was-no-open-source-software /daily/2023/06/14/what-if-there-was-no-open-source-software permanent +redir /archive/2023/06/15/done-is-better-than-perfect /daily/2023/06/15/done-is-better-than-perfect permanent +redir /archive/2023/06/16/make-the-easy-change /daily/2023/06/16/make-the-easy-change permanent +redir /archive/2023/06/17/avoid-git-merge-hell-with-trunk-based-development /daily/2023/06/17/avoid-git-merge-hell-with-trunk-based-development permanent +redir /archive/2023/06/18/are-you-doing-ci-cd /daily/2023/06/18/are-you-doing-ci-cd permanent +redir /archive/2023/06/19/should-you-upgrade-from-drupal-7-to-drupal-10 /daily/2023/06/19/should-you-upgrade-from-drupal-7-to-drupal-10 permanent +redir /archive/2023/06/20/should-you-deploy-on-a-friday /daily/2023/06/20/should-you-deploy-on-a-friday permanent +redir /archive/2023/06/21/deployments-or-releases /daily/2023/06/21/deployments-or-releases permanent +redir /archive/2023/06/22/fail-to-lear /daily/2023/06/22/fail-to-lear permanent +redir /archive/2023/06/23/why-keep-a-changelog /daily/2023/06/23/why-keep-a-changelog permanent +redir /archive/2023/06/24/credited-on-200-fixed-issues /daily/2023/06/24/credited-on-200-fixed-issues permanent +redir /archive/2023/06/25/do-you-need-permission-test-driven-development /daily/2023/06/25/do-you-need-permission-test-driven-development permanent +redir /archive/2023/06/26/is-any-code-without-tests-legacy /daily/2023/06/26/is-any-code-without-tests-legacy permanent +redir /archive/2023/06/27/ci-pipeline-additional-team-member /daily/2023/06/27/ci-pipeline-additional-team-member permanent +redir /archive/2023/06/28/theres-no-value-in-a-broken-ci-pipeline /daily/2023/06/28/theres-no-value-in-a-broken-ci-pipeline permanent +redir /archive/2023/06/29/tests-wont-tell-you-if-your-code-works /daily/2023/06/29/tests-wont-tell-you-if-your-code-works permanent +redir /archive/2023/06/30/how-did-you-learn-automated-testing /daily/2023/06/30/how-did-you-learn-automated-testing permanent +redir /archive/2023/07/01/once-you-start-writing-tests-you-cant-stop /daily/2023/07/01/once-you-start-writing-tests-you-cant-stop permanent +redir /archive/2023/07/02/docker-or-nix /daily/2023/07/02/docker-or-nix permanent +redir /archive/2023/07/03/why-write-custom-assertions-in-your-tests /daily/2023/07/03/why-write-custom-assertions-in-your-tests permanent +redir /archive/2023/07/04/think-smaller-with-tdd /daily/2023/07/04/think-smaller-with-tdd permanent +redir /archive/2023/07/05/services-vs-actions /daily/2023/07/05/services-vs-actions permanent +redir /archive/2023/07/06/automated-testing-is-more-than-just-unit-testing /daily/2023/07/06/automated-testing-is-more-than-just-unit-testing permanent +redir /archive/2023/07/15/test-driven-development-makes-you-more-productive /daily/2023/07/15/test-driven-development-makes-you-more-productive permanent +redir /archive/2023/07/16/when-writing-a-failing-test-youre-designing-your-code /daily/2023/07/16/when-writing-a-failing-test-youre-designing-your-code permanent +redir /archive/2023/07/17/too-many-choices /daily/2023/07/17/too-many-choices permanent +redir /archive/2023/07/18/tdd-as-a-concept-is-simple-but-tdd-is-difficult /daily/2023/07/18/tdd-as-a-concept-is-simple-but-tdd-is-difficult permanent +redir /archive/2023/07/19/tdd-is-like-clicker-training /daily/2023/07/19/tdd-is-like-clicker-training permanent +redir /archive/2023/07/20/tests-as-communication /daily/2023/07/20/tests-as-communication permanent +redir /archive/2023/07/21/comments-as-communication /daily/2023/07/21/comments-as-communication permanent +redir /archive/2023/07/22/more-code-more-problems /daily/2023/07/22/more-code-more-problems permanent +redir /archive/2023/07/23/tomorrow-is-easier-if-todays-code-is-simpler /daily/2023/07/23/tomorrow-is-easier-if-todays-code-is-simpler permanent +redir /archive/2023/07/24/testing-is-all-about-confidence /daily/2023/07/24/testing-is-all-about-confidence permanent +redir /archive/2023/07/25/working-backwards /daily/2023/07/25/working-backwards permanent +redir /archive/2023/07/26/prove-the-concept /daily/2023/07/26/prove-the-concept permanent +redir /archive/2023/07/27/stick-to-conventions /daily/2023/07/27/stick-to-conventions permanent +redir /archive/2023/07/28/generic-commit-messages /daily/2023/07/28/generic-commit-messages permanent +redir /archive/2023/07/29/should-i-wait-to-upgrade-from-drupal-7 /daily/2023/07/29/should-i-wait-to-upgrade-from-drupal-7 permanent +redir /archive/2023/07/30/commit-often-deploy-often /daily/2023/07/30/commit-often-deploy-often permanent +redir /archive/2023/07/31/upgrading-from-drupal-9-is-easier /daily/2023/07/31/upgrading-from-drupal-9-is-easier permanent +redir /archive/2023/08/01/maintaining-a-module-used-on-35000-drupal-websites /daily/2023/08/01/maintaining-a-module-used-on-35000-drupal-websites permanent +redir /archive/2023/08/02/a-crash-course-into-drupal-testing /daily/2023/08/02/a-crash-course-into-drupal-testing permanent +redir /archive/2023/08/03/what-problem-are-we-trying-to-solve /daily/2023/08/03/what-problem-are-we-trying-to-solve permanent +redir /archive/2023/08/04/laravel-prompts /daily/2023/08/04/laravel-prompts permanent +redir /archive/2023/08/05/use-drupal-to-own-your-content /daily/2023/08/05/use-drupal-to-own-your-content permanent +redir /archive/2023/08/06/yagni /daily/2023/08/06/yagni permanent +redir /archive/2023/08/07/tests-make-upgrades-less-risky /daily/2023/08/07/tests-make-upgrades-less-risky permanent +redir /archive/2023/08/08/8-years-of-dotfiles /daily/2023/08/08/8-years-of-dotfiles permanent +redir /archive/2023/08/09/vim-is-my-lightsaber /daily/2023/08/09/vim-is-my-lightsaber permanent +redir /archive/2023/08/10/testing-fixed-prices-and-bug-free-guarantees /daily/2023/08/10/testing-fixed-prices-and-bug-free-guarantees permanent +redir /archive/2023/08/11/everyone-tests-their-code /daily/2023/08/11/everyone-tests-their-code permanent +redir /archive/2023/08/12/does-not-writing-tests-actually-save-time /daily/2023/08/12/does-not-writing-tests-actually-save-time permanent +redir /archive/2023/08/13/dont-estimate-separately-for-testing /daily/2023/08/13/dont-estimate-separately-for-testing permanent +redir /archive/2023/08/14/why-keep-a-dotfiles-repository /daily/2023/08/14/why-keep-a-dotfiles-repository permanent +redir /archive/2023/08/15/writing-test-and-implementation-code-are-the-same-task /daily/2023/08/15/writing-test-and-implementation-code-are-the-same-task permanent +redir /archive/2023/08/16/writing-tests-in-your-own-time /daily/2023/08/16/writing-tests-in-your-own-time permanent +redir /archive/2023/08/17/writing-custom-assertions-in-your-tests /daily/2023/08/17/writing-custom-assertions-in-your-tests permanent +redir /archive/2023/08/18/types-vs-tests /daily/2023/08/18/types-vs-tests permanent +redir /archive/2023/08/19/asserting-all-the-things /daily/2023/08/19/asserting-all-the-things permanent +redir /archive/2023/08/20/php-types-and-assertions /daily/2023/08/20/php-types-and-assertions permanent +redir /archive/2023/08/21/which-part-of-the-ci-pipeline-has-the-most-value /daily/2023/08/21/which-part-of-the-ci-pipeline-has-the-most-value permanent +redir /archive/2023/08/22/deployments-with-your-ci-pipeline /daily/2023/08/22/deployments-with-your-ci-pipeline permanent +redir /archive/2023/08/23/dont-use-third-party-services-directly /daily/2023/08/23/dont-use-third-party-services-directly permanent +redir /archive/2023/08/24/testing-multiple-implementations-with-contract-tests /daily/2023/08/24/testing-multiple-implementations-with-contract-tests permanent +redir /archive/2023/08/25/start-with-a-vague-test /daily/2023/08/25/start-with-a-vague-test permanent +redir /archive/2023/08/26/work-in-small-chunks /daily/2023/08/26/work-in-small-chunks permanent +redir /archive/2023/08/27/pull-requests-are-great-for-open-source /daily/2023/08/27/pull-requests-are-great-for-open-source permanent +redir /archive/2023/08/28/pair-and-mob-programming-are-continuous-code-review /daily/2023/08/28/pair-and-mob-programming-are-continuous-code-review permanent +redir /archive/2023/08/29/ci-pipelines-are-an-automated-code-review /daily/2023/08/29/ci-pipelines-are-an-automated-code-review permanent +redir /archive/2023/08/30/tdd-and-unexpected-errors /daily/2023/08/30/tdd-and-unexpected-errors permanent +redir /archive/2023/08/31/code-review-discourages-small-refactorings /daily/2023/08/31/code-review-discourages-small-refactorings permanent +redir /archive/2023/09/01/non-blocking-code-reviews /daily/2023/09/01/non-blocking-code-reviews permanent +redir /archive/2023/09/02/planning-first-or-reviewing-last /daily/2023/09/02/planning-first-or-reviewing-last permanent +redir /archive/2023/09/03/including-time-for-tests-in-estimates /daily/2023/09/03/including-time-for-tests-in-estimates permanent +redir /archive/2023/09/04/charging-more-not-to-write-tests /daily/2023/09/04/charging-more-not-to-write-tests permanent +redir /archive/2023/09/05/spring-clean-before-upgrading /daily/2023/09/05/spring-clean-before-upgrading permanent +redir /archive/2023/09/06/verbosity-over-abstraction /daily/2023/09/06/verbosity-over-abstraction permanent +redir /archive/2023/09/07/what-s-the-simplest-test-to-begin-with /daily/2023/09/07/what-s-the-simplest-test-to-begin-with permanent +redir /archive/2023/09/08/do-you-proactively-refactor-your-code /daily/2023/09/08/do-you-proactively-refactor-your-code permanent +redir /archive/2023/09/09/a-lack-of-tests-discourages-refactoring /daily/2023/09/09/a-lack-of-tests-discourages-refactoring permanent +redir /archive/2023/09/10/code-is-read-more-than-it-s-written /daily/2023/09/10/code-is-read-more-than-it-s-written permanent +redir /archive/2023/09/11/dont-use-else /daily/2023/09/11/dont-use-else permanent +redir /archive/2023/09/12/dont-inject-too-many-dependencies /daily/2023/09/12/dont-inject-too-many-dependencies permanent +redir /archive/2023/09/13/which-type-of-test-should-i-use /daily/2023/09/13/which-type-of-test-should-i-use permanent +redir /archive/2023/09/14/outside-in-or-inside-out /daily/2023/09/14/outside-in-or-inside-out permanent +redir /archive/2023/09/15/types-or-no-types /daily/2023/09/15/types-or-no-types permanent +redir /archive/2023/09/16/how-not-to-break-36-000-websites /daily/2023/09/16/how-not-to-break-36-000-websites permanent +redir /archive/2023/09/17/how-much-refactoring-should-i-be-doing /daily/2023/09/17/how-much-refactoring-should-i-be-doing permanent +redir /archive/2023/09/18/increasing-test-coverage-with-regression-tests /daily/2023/09/18/increasing-test-coverage-with-regression-tests permanent +redir /archive/2023/09/19/stop-writing-tests /daily/2023/09/19/stop-writing-tests permanent +redir /archive/2023/09/20/why-i-prefer-types /daily/2023/09/20/why-i-prefer-types permanent +redir /archive/2023/09/21/buggy-software-causes-reputational-damage /daily/2023/09/21/buggy-software-causes-reputational-damage permanent +redir /archive/2023/09/22/documentation-and-comments-get-stale /daily/2023/09/22/documentation-and-comments-get-stale permanent +redir /archive/2023/09/23/not-everyone-writes-automated-tests /daily/2023/09/23/not-everyone-writes-automated-tests permanent +redir /archive/2023/09/24/test-to-save-your-job /daily/2023/09/24/test-to-save-your-job permanent +redir /archive/2023/09/25/should-you-use-a-staging-environment /daily/2023/09/25/should-you-use-a-staging-environment permanent +redir /archive/2023/09/26/which-branch-should-be-in-which-environment /daily/2023/09/26/which-branch-should-be-in-which-environment permanent +redir /archive/2023/09/27/separating-environments-with-feature-flags /daily/2023/09/27/separating-environments-with-feature-flags permanent +redir /archive/2023/09/28/feature-flags-enable-continuous-integration /daily/2023/09/28/feature-flags-enable-continuous-integration permanent +redir /archive/2023/09/29/92-changed-files-with-885-additions-and-156-deletions /daily/2023/09/29/92-changed-files-with-885-additions-and-156-deletions permanent +redir /archive/2023/09/30/automated-testing-offers-repeatability /daily/2023/09/30/automated-testing-offers-repeatability permanent +redir /archive/2023/10/01/tdd--repeat-and-refactor /daily/2023/10/01/tdd--repeat-and-refactor permanent +redir /archive/2023/10/02/only-comment-what-needs-to-be-commented /daily/2023/10/02/only-comment-what-needs-to-be-commented permanent +redir /archive/2023/10/03/there-is-no-perfect-solution /daily/2023/10/03/there-is-no-perfect-solution permanent +redir /archive/2023/10/04/the-best-solution-is-the-one-that-gets-the-tests-to-pass /daily/2023/10/04/the-best-solution-is-the-one-that-gets-the-tests-to-pass permanent +redir /archive/2023/10/05/some-solutions-are-good-enough /daily/2023/10/05/some-solutions-are-good-enough permanent +redir /archive/2023/10/06/software-development-is-like-going-to-the-dentist /daily/2023/10/06/software-development-is-like-going-to-the-dentist permanent +redir /archive/2023/10/07/a-breakdown-of-tests-from-a-current-project /daily/2023/10/07/a-breakdown-of-tests-from-a-current-project permanent +redir /archive/2023/10/08/is-test-driven-development-difficult /daily/2023/10/08/is-test-driven-development-difficult permanent +redir /archive/2023/10/09/spotting-new-things-in-drupal-10-1 /daily/2023/10/09/spotting-new-things-in-drupal-10-1 permanent +redir /archive/2023/10/10/why-use-composer-to-manage-drupal-dependencies /daily/2023/10/10/why-use-composer-to-manage-drupal-dependencies permanent +redir /archive/2023/10/11/do-you-need-that-module /daily/2023/10/11/do-you-need-that-module permanent +redir /archive/2023/10/12/business-logic-in-template-files /daily/2023/10/12/business-logic-in-template-files permanent +redir /archive/2023/10/13/writing-tests-is-an-investment /daily/2023/10/13/writing-tests-is-an-investment permanent +redir /archive/2023/10/14/do-you-need-to-write-tests-for-small-or-short-lived-projects /daily/2023/10/14/do-you-need-to-write-tests-for-small-or-short-lived-projects permanent +redir /archive/2023/10/15/off-to-drupalcon /daily/2023/10/15/off-to-drupalcon permanent +redir /archive/2023/10/23/when-should-run-your-tests /daily/2023/10/23/when-should-run-your-tests permanent +redir /archive/2023/10/24/how-to-test-code-you-didnt-write /daily/2023/10/24/how-to-test-code-you-didnt-write permanent +redir /archive/2023/10/25/automated-tests-prevent-regressions-when-upgrading /daily/2023/10/25/automated-tests-prevent-regressions-when-upgrading permanent +redir /archive/2023/10/26/is-decoupled-drupal-still-a-thing /daily/2023/10/26/is-decoupled-drupal-still-a-thing permanent +redir /archive/2023/10/27/work-with-me-and-support-the-drupal-association /daily/2023/10/27/work-with-me-and-support-the-drupal-association permanent +redir /archive/2023/10/28/can-you-move-faster-without-tests /daily/2023/10/28/can-you-move-faster-without-tests permanent +redir /archive/2023/10/29/i-can-drive-my-car-blindfolded-but-is-it-a-good-idea /daily/2023/10/29/i-can-drive-my-car-blindfolded-but-is-it-a-good-idea permanent +redir /archive/2023/10/30/is-drupal-a-cms-or-a-framework /daily/2023/10/30/is-drupal-a-cms-or-a-framework permanent +redir /archive/2023/10/31/one-official-drupal-development-environment /daily/2023/10/31/one-official-drupal-development-environment permanent +redir /archive/2023/11/01/drupal-9-is-now-end-of-life /daily/2023/11/01/drupal-9-is-now-end-of-life permanent +redir /archive/2023/11/02/is-code-coverage-an-objective-or-guideline /daily/2023/11/02/is-code-coverage-an-objective-or-guideline permanent +redir /archive/2023/11/03/why-your-company-should-contribute-to-open-source-software /daily/2023/11/03/why-your-company-should-contribute-to-open-source-software permanent +redir /archive/2023/11/04/why-you-should-contribute-to-open-source-software /daily/2023/11/04/why-you-should-contribute-to-open-source-software permanent +redir /archive/2023/11/05/i-m-starting-a-podcast /daily/2023/11/05/i-m-starting-a-podcast permanent +redir /archive/2023/11/06/the-first-beyond-blocks-podcast-episode-is-recorded /daily/2023/11/06/the-first-beyond-blocks-podcast-episode-is-recorded permanent +redir /archive/2023/11/07/it-depends /daily/2023/11/07/it-depends permanent +redir /archive/2023/11/08/building-build-configs /daily/2023/11/08/building-build-configs permanent +redir /archive/2023/11/09/readme-driven-development /daily/2023/11/09/readme-driven-development permanent +redir /archive/2023/11/10/retrofit-with-matt-glaman /daily/2023/11/10/retrofit-with-matt-glaman permanent +redir /archive/2023/11/11/work-in-small-batches /daily/2023/11/11/work-in-small-batches permanent +redir /archive/2023/11/12/drupal-gives-you-so-much-out-of-the-box /daily/2023/11/12/drupal-gives-you-so-much-out-of-the-box permanent +redir /archive/2023/11/13/phpunit-does-more-than-unit-testing /daily/2023/11/13/phpunit-does-more-than-unit-testing permanent +redir /archive/2023/11/14/why-i-prefer-integration-tests-to-unit-tests /daily/2023/11/14/why-i-prefer-integration-tests-to-unit-tests permanent +redir /archive/2023/11/15/dont-pre-optimise-and-over-customise /daily/2023/11/15/dont-pre-optimise-and-over-customise permanent +redir /archive/2023/11/16/avoiding-over-mocking /daily/2023/11/16/avoiding-over-mocking permanent +redir /archive/2023/11/17/drupal-s-alternate-realities /daily/2023/11/17/drupal-s-alternate-realities permanent +redir /archive/2023/11/18/writing-good-test-names /daily/2023/11/18/writing-good-test-names permanent +redir /archive/2023/11/19/why-ive-standardised-on-run-scripts /daily/2023/11/19/why-ive-standardised-on-run-scripts permanent +redir /archive/2023/11/20/whatll-be-in-drupal-11 /daily/2023/11/20/whatll-be-in-drupal-11 permanent +redir /archive/2023/11/21/why-i-built-build-configs /daily/2023/11/21/why-i-built-build-configs permanent +redir /archive/2023/11/22/frequency-reduces-difficulty /daily/2023/11/22/frequency-reduces-difficulty permanent +redir /archive/2023/11/23/partial-mocking /daily/2023/11/23/partial-mocking permanent +redir /archive/2023/11/24/are-conventional-commits-worth-it /daily/2023/11/24/are-conventional-commits-worth-it permanent +redir /archive/2023/11/25/community-engagement-for-non-technical-drupal-enthusiasts /daily/2023/11/25/community-engagement-for-non-technical-drupal-enthusiasts permanent +redir /archive/2023/11/26/to-docblock-or-not-to-docblock /daily/2023/11/26/to-docblock-or-not-to-docblock permanent +redir /archive/2023/11/27/finding-the-best-test-base /daily/2023/11/27/finding-the-best-test-base permanent +redir /archive/2023/11/28/which-phpstan-level-should-you-use /daily/2023/11/28/which-phpstan-level-should-you-use permanent +redir /archive/2023/11/29/the-lowest-level-is-better-than-no-level /daily/2023/11/29/the-lowest-level-is-better-than-no-level permanent +redir /archive/2023/11/30/are-bugs-good-for-users /daily/2023/11/30/are-bugs-good-for-users permanent +redir /archive/2023/12/01/the-contribution-first-workflow /daily/2023/12/01/the-contribution-first-workflow permanent +redir /archive/2023/12/04/writing-contrib-modules-as-glue-between-your-custom-code /daily/2023/12/04/writing-contrib-modules-as-glue-between-your-custom-code permanent +redir /archive/2023/12/05/open-source-encourages-open-source /daily/2023/12/05/open-source-encourages-open-source permanent +redir /archive/2023/12/06/open-source-first-doesnt-mean-you-need-to-cover-every-use-case /daily/2023/12/06/open-source-first-doesnt-mean-you-need-to-cover-every-use-case permanent +redir /archive/2023/12/07/a-drupal-case-study-from-oxfam /daily/2023/12/07/a-drupal-case-study-from-oxfam permanent +redir /archive/2023/12/08/dont-just-rewrite /daily/2023/12/08/dont-just-rewrite permanent +redir /archive/2023/12/09/rebuild-or-iterate /daily/2023/12/09/rebuild-or-iterate permanent +redir /archive/2023/12/10/suffixing-names /daily/2023/12/10/suffixing-names permanent +redir /archive/2023/12/11/custom-coding-standards-and-conventions /daily/2023/12/11/custom-coding-standards-and-conventions permanent +redir /archive/2023/12/12/drupalcon-session-survey-results /daily/2023/12/12/drupalcon-session-survey-results permanent +redir /archive/2023/12/13/reviving-an-old-php-project /daily/2023/12/13/reviving-an-old-php-project permanent +redir /archive/2023/12/14/save-time-and-effort-with-drupal-distributions /daily/2023/12/14/save-time-and-effort-with-drupal-distributions permanent +redir /archive/2023/12/15/building-your-own-in-house-drupal-distribution /daily/2023/12/15/building-your-own-in-house-drupal-distribution permanent +redir /archive/2023/12/16/adding-snapshot-tests-to-build-configs /daily/2023/12/16/adding-snapshot-tests-to-build-configs permanent +redir /archive/2023/12/17/fail-fast-fix-fast /daily/2023/12/17/fail-fast-fix-fast permanent +redir /archive/2023/12/18/static-analysis-on-tests /daily/2023/12/18/static-analysis-on-tests permanent +redir /archive/2023/12/19/php-tui-dan-leech /daily/2023/12/19/php-tui-dan-leech permanent +redir /archive/2023/12/20/hover-focus-hocus /daily/2023/12/20/hover-focus-hocus permanent +redir /archive/2023/12/21/new-year-coaching /daily/2023/12/21/new-year-coaching permanent +redir /archive/2023/12/22/best-language-cms-or-framework /daily/2023/12/22/best-language-cms-or-framework permanent +redir /archive/2023/12/23/using-a-whole-framework-or-part-of-it /daily/2023/12/23/using-a-whole-framework-or-part-of-it permanent +redir /archive/2023/12/24/this-should-never-happen /daily/2023/12/24/this-should-never-happen permanent +redir /archive/2023/12/25/zero-to-test /daily/2023/12/25/zero-to-test permanent +redir /archive/2023/12/26/good-code-is-not-about-being-easy-to-write /daily/2023/12/26/good-code-is-not-about-being-easy-to-write permanent +redir /archive/2023/12/27/writing-new-code-is-quick-to-begin-with /daily/2023/12/27/writing-new-code-is-quick-to-begin-with permanent +redir /archive/2023/12/28/pride-and-productivity /daily/2023/12/28/pride-and-productivity permanent +redir /archive/2023/12/29/decide-automate-document /daily/2023/12/29/decide-automate-document permanent +redir /archive/2023/12/30/weve-always-done-it-this-way /daily/2023/12/30/weve-always-done-it-this-way permanent +redir /archive/2023/12/31/just /daily/2023/12/31/just permanent +redir /archive/2024/03/03/centarro-and-drupal-commerce-with-ryan-szrama /daily/2024/03/03/centarro-and-drupal-commerce-with-ryan-szrama permanent redir /atNOQ https://youtu.be/r41dkD2EOo8 permanent redir /automatically-updating-talk-created-date https://gist.github.com/opdavies/4e75e1753d8603113f07f8264bb783d6 permanent redir /blog.xml /rss.xml permanent @@ -215,8 +572,8 @@ redir /blog/publishing-sculpin-sites-(with-)?github-pages /blog/publishing-sculp redir /blog/queuing-private-messages-in-drupal-8 /blog/queuing-private-messages-drupal-8 permanent redir /blog/quick-project-switching-in-phpstorm /blog/quick-project-switching-phpstorm permanent redir /blog/quickly-apply-patches-using-git-and-curl-or-wget /blog/quickly-apply-patches-using-git-curl-or-wget permanent -redir /blog/rebuilding-bartik-with-vuejs-tailwind-css-part-2 /blog/rebuilding-bartik-drupals-default-theme-vuejs-tailwind-css-part-2 permanent redir /blog/rebuilding-bartik-with-vuejs-tailwind-css /blog/rebuilding-bartik-drupals-default-theme-vuejs-tailwind-css permanent +redir /blog/rebuilding-bartik-with-vuejs-tailwind-css-part-2 /blog/rebuilding-bartik-drupals-default-theme-vuejs-tailwind-css-part-2 permanent redir /blog/rebuilding-uis-tailwind-css /blog/uis-ive-rebuilt-tailwind-css permanent redir /blog/restructuring-my-tailwindjs-config-files /blog/restructuring-my-tailwindjs-configuration-files permanent redir /blog/retrieving-profile-data-user-using-entity-metadata-wrapper /blog/cleanly-retrieving-user-profile-data-using-entity-metadata-wrapper permanent @@ -267,8 +624,8 @@ redir /do-library https://github.com/opdavies/drupalorg-api-php permanent redir /do-projects https://github.com/opdavies/drupal-module-drupalorg-projects permanent redir /docksal-phpunit-phpstorm /articles/running-phpunit-tests-docksal-phpstorm permanent redir /docksal-posts /articles/tags/docksal permanent -redir /dransible-drupal-9 /blog/upgrading-dransible-project-drupal-9 permanent redir /dransible https://github.com/opdavies/dransible permanent +redir /dransible-drupal-9 /blog/upgrading-dransible-project-drupal-9 permanent redir /drupal-bristol-march-19 https://docs.google.com/presentation/d/1pk9LIN-hHX73kvDdo-lzgmKlAeH33_K_uvI0t7A-rvY/edit?usp=sharing permanent redir /drupal-consultant /drupal-consulting permanent redir /drupal-consulting / permanent @@ -279,16 +636,16 @@ redir /drupal-forum-post http://www.webmaster-forums.net/webmasters-corner/devel redir /drupal-marketplace-uk https://www.drupal.org/drupal-services?offices%5B%5D=24460 permanent redir /drupal-meetups-twitterbot /articles/introducing-the-drupal-meetups-twitterbot permanent redir /drupal-novice-issues https://www.drupal.org/project/issues/search?text=&projects=&assigned=&submitted=&project_issue_followers=&status%5B%5D=Open&issue_tags_op=%3D&issue_tags=Novice permanent -redir /drupal-php-developer-consultant-uk /drupal-php-developer permanent redir /drupal-php-developer /drupal-consultant permanent +redir /drupal-php-developer-consultant-uk /drupal-php-developer permanent redir /drupal-tailwind-demo https://www.youtube.com/watch?v=1eM-Gw6GI4g permanent redir /drupal-tailwindcss https://www.drupal.org/project/tailwindcss permanent redir /drupal-vuejs /talks/decoupling-drupal-vuejs/ permanent redir /drupal7 /drupal-upgrade permanent redir /drupalcamp-london-2019-tickets /articles/drupalcamp-london-2019-tickets permanent redir /drupalcamp-nyc-training https://www.youtube.com/watch?v=3M9c4UUzKm0 permanent -redir /drupalorg-project-issues https://www.drupal.org/project/issues/search?projects=Override+Node+Options%2C+Tailwind+CSS+Starter+Kit%2C+Block+ARIA+Landmark+Roles%2C+Copyright+Block+module%2C+System+User%2C+Null+User%2C+Collection+class%2C+Pathauto+Menu+Link%2C+Webform+ARIA&project_issue_followers=&status%5B%5D=1&status%5B%5D=13&status%5B%5D=8&status%5B%5D=14&status%5B%5D=15&issue_tags_op=%3D permanent redir /drupalorg https://www.drupal.org/u/opdavies permanent +redir /drupalorg-project-issues https://www.drupal.org/project/issues/search?projects=Override+Node+Options%2C+Tailwind+CSS+Starter+Kit%2C+Block+ARIA+Landmark+Roles%2C+Copyright+Block+module%2C+System+User%2C+Null+User%2C+Collection+class%2C+Pathauto+Menu+Link%2C+Webform+ARIA&project_issue_followers=&status%5B%5D=1&status%5B%5D=13&status%5B%5D=8&status%5B%5D=14&status%5B%5D=15&issue_tags_op=%3D permanent redir /drupalversary https://github.com/opdavies/drupal-module-drupalversary permanent redir /elewant https://elewant.com/shepherd/admire/opdavies permanent redir /feed /rss.xml permanent @@ -315,8 +672,8 @@ redir /pair-programming /pair permanent redir /pair-with-me /pair permanent redir /pairing /pair permanent redir /php-ansible /talks/deploying-php-ansible-ansistrano permanent -redir /presentations/building-static-websites-sculpin /presentations/sculpin permanent redir /presentations/building-presenting-slide-decks-rst2pdf /presentations/rst2pdf permanent +redir /presentations/building-static-websites-sculpin /presentations/sculpin permanent redir /qSHAl /articles/published-my-first-npm-package/ permanent redir /qT1Rb https://github.com/opdavies/drupal-meetups-twitterbot permanent redir /rebuilding-acquia https://rebuilding-acquia.oliverdavies.uk permanent @@ -330,23 +687,23 @@ redir /roadmap /drupal-upgrade permanent redir /rss /rss.xml permanent redir /rst2pdf /talks/building-presenting-slide-decks-rst2pdf permanent redir /s9MjJ https://symfonycasts.com/screencast/symfony permanent -redir /sculpin-encore-versioning https://github.com/opdavies/oliverdavies.uk/commit/d192b04aefa6e7a21bfc1f2e0fe0a16111e0e8a2 permanent redir /sculpin /talks/building-static-websites-sculpin permanent +redir /sculpin-encore-versioning https://github.com/opdavies/oliverdavies.uk/commit/d192b04aefa6e7a21bfc1f2e0fe0a16111e0e8a2 permanent redir /sites/default/files/images/social-avatar.jpg /images/social-avatar.jpg permanent redir /skills https://opdavies-skills-tailwindcss.netlify.com/ permanent redir /slides-drupal-9 https://slides-upgrading-to-drupal-9.oliverdavies.uk permanent redir /slides-upgrading-to-drupal-9 https://slides-upgrading-to-drupal-9.oliverdavies.uk permanent redir /slides-upgrading-to-drupal-9/index.html https://slides-upgrading-to-drupal-9.oliverdavies.uk permanent redir /slides-working-with-workspace https://slides-working-with-workspace.oliverdavies.uk permanent +redir /speaker /press permanent redir /speaker-info /speaker permanent redir /speaker-information /speaker permanent -redir /speaker /press permanent redir /speaking-videos https://www.youtube.com/playlist?list=PLHn41Ay7w7kfAzczswrANch5oHAPZBlvu permanent redir /stream https://www.youtube.com/channel/UCkeK0qF9HHUPQH_fvn4ghqQ/live permanent redir /subscription / permanent redir /swap-markdown-parser https://github.com/opdavies/sculpin-twig-markdown-bundle-example/tree/swap-markdown-parser permanent -redir /symfony-server /articles/running-drupal-with-symfony-local-server permanent redir /symfony https://connect.symfony.com/profile/opdavies permanent +redir /symfony-server /articles/running-drupal-with-symfony-local-server permanent redir /symfonylive /articles/live-blogging-symfonylive-london permanent redir /symposium https://symposiumapp.com/u/opdavies permanent redir /tailwind-css-talk /talks/taking-flight-tailwind-css permanent @@ -393,11 +750,11 @@ redir /tdd-blog https://github.com/opdavies/drupal-module-tdd-blog permanent redir /tdd-test-driven-drupal /talks/tdd-test-driven-drupal/ permanent redir /team-coaching / permanent redir /test-driven-drupal-book /test-driven-drupal permanent -redir /testing-drupal-intro https://inviqa.com/blog/drupal-automated-testing-introduction permanent redir /testing-drupal https://www.oliverdavies.uk/talks/tdd-test-driven-drupal permanent +redir /testing-drupal-intro https://inviqa.com/blog/drupal-automated-testing-introduction permanent redir /testing-tailwind-plugins /articles/testing-tailwindcss-plugins-with-jest permanent -redir /testing-workshop-code https://github.com/opdavies/workshop-drupal-automated-testing-code permanent redir /testing-workshop https://github.com/opdavies/workshop-drupal-automated-testing permanent +redir /testing-workshop-code https://github.com/opdavies/workshop-drupal-automated-testing-code permanent redir /todoist-filters https://gist.github.com/opdavies/6709fbdac5c3babbd94137bcc8b8e3c2 permanent redir /twitter-tweaks https://github.com/opdavies/chrome-extension-twitter-tweaks permanent redir /upgrading-to-drupal-9 /talks/upgrading-your-site-drupal-9 permanent @@ -410,8 +767,8 @@ redir /work /drupal-php-developer permanent redir /working-with-workspace /talks/working-with-workspace permanent redir /workshop-drupal-testing https://github.com/opdavies/workshop-drupal-automated-testing permanent redir /workspace-demo https://github.com/opdavies/working-with-workspace-demo permanent +redir /wp-tailwind https://wp-tailwind.oliverdavies.uk permanent redir /wp-tailwind-repo https://github.com/opdavies/wordcamp-bristol-2019 permanent redir /wp-tailwind-starter https://github.com/opdavies/wordpress-tailwindcss-startker-kit permanent redir /wp-tailwind-static https://wp-tailwind.oliverdavies.uk permanent -redir /wp-tailwind https://wp-tailwind.oliverdavies.uk permanent redir /yXhoS /talks/things-you-should-know-about-php permanent