From 27cac8a6595026cc435cff26aee23048b9e335b5 Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Wed, 9 Sep 2026 16:40:52 -0700 Subject: [PATCH] [Blog] PHP Ecosystem Security Team Also update open source and work information --- files/Resume.pdf | Bin 188225 -> 188949 bytes sitemap.xml | 3 ++ src/Blog/feed-rss.xml | 7 +++- src/Blog/posts/20260909-ecosystem-security.md | 34 +++++++++++++++++ src/Pages/OpenSourcePage.php | 21 ++++++++++ src/Pages/WorkPage.php | 36 +++++++++++++++--- tests/data/Home.html | 6 +-- tests/data/OpenSource.html | 2 +- tests/data/Work.html | 14 ++++--- tests/data/blog-index.html | 3 +- 10 files changed, 107 insertions(+), 19 deletions(-) create mode 100644 src/Blog/posts/20260909-ecosystem-security.md diff --git a/files/Resume.pdf b/files/Resume.pdf index 417ec9440449fc2a13f4b5119f50c83098069bf4..66cbdb02bbff04cbcefb5cf68c30beda85fd559c 100644 GIT binary patch delta 13888 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 delta 13186 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 https://scherzer.dev/Blog/20260810-fossy-2026 + + https://scherzer.dev/Blog/20260909-ecosystem-security + diff --git a/src/Blog/feed-rss.xml b/src/Blog/feed-rss.xml index e5a7b4d..8a58163 100644 --- a/src/Blog/feed-rss.xml +++ b/src/Blog/feed-rss.xml @@ -3,9 +3,14 @@ Daniel Scherzer's Blog Entries from Daniel Scherzer' personal blog - Mon, 10 Aug 2026 00:00:00 +0000 + Wed, 09 Sep 2026 00:00:00 +0000 https://github.com/DanielEScherzer/website-content https://scherzer.dev/Blog + + Joining the PHP Ecosystem Security Team + Wed, 09 Sep 2026 00:00:00 +0000 + https://scherzer.dev/Blog/20260909-ecosystem-security + FOSSY 2026 Mon, 10 Aug 2026 00:00:00 +0000 diff --git a/src/Blog/posts/20260909-ecosystem-security.md b/src/Blog/posts/20260909-ecosystem-security.md new file mode 100644 index 0000000..191c7b8 --- /dev/null +++ b/src/Blog/posts/20260909-ecosystem-security.md @@ -0,0 +1,34 @@ +--- +title: Joining the PHP Ecosystem Security Team +--- + +# Joining the PHP Ecosystem Security Team + +I'm excited to share that I am joining the PHP Foundation's Ecosystem Security +Team to help harden the PHP codebase. + +As AI tools generate more and more security reports, they frequently report +issues that the PHP project does not consider to be security vulnerabilities, +but which are still worth addressing as code hardening measures. Other times, +the AI agents simply don't understand something because it isn't documented +well. In those cases, the solution is to improve the documentation, benefiting +both AI agents and regular PHP developers. More details about this work are +available [on the PHP Foundation blog][phpf-blog]. + +I've only just begun, but I've found the work so far to be fascinating, giving +me a chance to work on parts of the PHP codebase that I'm not very familiar +with. + +I now contribute to PHP wearing three different "hats": + +* as a volunteer developer, maintaining the Reflection extension, implementing +new features, addressing bugs, etc. +* as a release manager, building and releasing new versions of the PHP 8.5 +branch +* [new] as a contractor for the PHP Foundation Ecosystem Security Team, helping +address non-security issues that are reported to the security team and qualify +as hardening + +I look forward to helping secure the PHP project moving forward. + +[phpf-blog]: https://thephp.foundation/blog/2026/09/09/welcome-daniel-scherzer/ diff --git a/src/Pages/OpenSourcePage.php b/src/Pages/OpenSourcePage.php index a2c33d7..ccd3795 100644 --- a/src/Pages/OpenSourcePage.php +++ b/src/Pages/OpenSourcePage.php @@ -58,6 +58,12 @@ class OpenSourcePage extends BasePage { 'slides' => '20260520 PHPTek PHP 8.6 presentation.pdf', 'blog' => '20260525-phptek-2026', ], + [ + 'conf' => 'Longhorn PHP Conference', + 'loc' => 'Austin, Texas', + 'date' => 'October 2026', + 'upcoming' => true, + ], ], ], 'PHP-SemVer' => [ @@ -84,6 +90,18 @@ class OpenSourcePage extends BasePage { ], ], ], + 'Workshop-PHP-extensions-Rust' => [ + 'title' => 'Creating new PHP extensions in Rust', + 'workshop' => true, + 'iterations' => [ + [ + 'conf' => 'Longhorn PHP Conference', + 'loc' => 'Austin, Texas', + 'date' => 'October 2026', + 'upcoming' => true, + ], + ], + ], ]; private const PHP_RFCS = [ @@ -258,12 +276,14 @@ private function addTalksSection(): void { ]; $list = FluentHTML::fromTag( 'ul' ); foreach ( array_reverse( self::OPEN_SOURCE_PRESENTATIONS ) as $details ) { + $workshop = ( $details['workshop'] ?? false ) ? '[workshop] ' : ''; if ( count( $details['iterations'] ) === 1 ) { $once = $details['iterations'][0]; $item = FluentHTML::make( 'li', [], [ + $workshop, '"' . $details['title'] . '," ', ...( $makeDetails( $details['iterations'][0] ) ), ] @@ -279,6 +299,7 @@ private function addTalksSection(): void { 'li', [], [ + $workshop, '"' . $details['title'] . '"', FluentHTML::make( 'ul', [], $iterations ), ] diff --git a/src/Pages/WorkPage.php b/src/Pages/WorkPage.php index cbe00d6..6267cac 100644 --- a/src/Pages/WorkPage.php +++ b/src/Pages/WorkPage.php @@ -95,9 +95,33 @@ protected function build(): void { $this->contentWrapper->append( FluentHTML::make( 'h1', [], 'Work experience' ), ); + $this->addPHPSecuritySection(); $this->addWikiTeqSection(); } + private function addPHPSecuritySection(): void { + $this->contentWrapper->append( + FluentHTML::make( 'h3', [ 'class' => 'subsection-header' ], 'PHP Ecosystem Security' ), + FluentHTML::make( + 'p', + [], + [ + << './Blog/20260909-ecosystem-security' ], + 'my blog post' + ), + ' for more details.', + ] + ), + ); + } + private function addWikiTeqSection(): void { $makeLink = static fn ( $href, $text ) => FluentHTML::make( 'a', @@ -115,12 +139,12 @@ private function addWikiTeqSection(): void { [], [ <<

See the links in the navigation bar above for more information about my -experience.

Contact

  • LinkedIn
  • Email: daniel.e.scherzer@gmail.com

Blog

I also have a blog. You can see a full index of my posts here. My latest blog post is:

FOSSY 2026

Monday, 10 August 2026

Last week, I was in Vancouver for the FOSSY 2026 conference, where I gave a talk -about my experience as a new open-source contributor. My experiences as a -contributor, and previous conferences I have attended, have mostly been focused -on PHP, but FOSSY is a conference about open source software more broadly. Continue reading...

\ No newline at end of file +experience.

Contact

  • LinkedIn
  • Email: daniel.e.scherzer@gmail.com

Blog

I also have a blog. You can see a full index of my posts here. My latest blog post is:

Joining the PHP Ecosystem Security Team

Wednesday, 09 September 2026

I'm excited to share that I am joining the PHP Foundation's Ecosystem Security +Team to help harden the PHP codebase. Continue reading...

\ No newline at end of file diff --git a/tests/data/OpenSource.html b/tests/data/OpenSource.html index 7ba01f3..1d19090 100644 --- a/tests/data/OpenSource.html +++ b/tests/data/OpenSource.html @@ -1,7 +1,7 @@ Open source

Open source contributions

I contribute to open-source projects on GitHub as @DanielEScherzer.

Conference Presentations

I have given a few presentation at various open-source-related conferences. The slides and my post-conference write-ups in my blog are listed below. Note that -even when a presentation is given multiple times, the content changes.

  • "From First PR to Release Manager: A Path into Open Source," FOSSY 2026. Vancouver, Canada, August 2026. (Slides, Blog write up)
  • "Semantic Versioning and the PHP Ecosystem: A Reality Check," PHP Tek 2026. Chicago, Illinois, May 2026. (Slides, Blog write up)
  • "PHP 8.6: The Inside Scoop," PHP Tek 2026. Chicago, Illinois, May 2026. (Slides, Blog write up)
  • "Introduction to Rust for Experienced Software Developers," ConFoo Montreal 2026. Montreal, Canada, February 2026. (Slides, Blog write up)
  • "PHP 8.5: New Features from the Source"

PHP

I started contributing to the PHP source in August 2024, working primarily on +even when a presentation is given multiple times, the content changes.

  • [workshop] "Creating new PHP extensions in Rust," Longhorn PHP Conference. Austin, Texas, October 2026. Upcoming.
  • "From First PR to Release Manager: A Path into Open Source," FOSSY 2026. Vancouver, Canada, August 2026. (Slides, Blog write up)
  • "Semantic Versioning and the PHP Ecosystem: A Reality Check," PHP Tek 2026. Chicago, Illinois, May 2026. (Slides, Blog write up)
  • "PHP 8.6: The Inside Scoop"
    • Longhorn PHP Conference. Austin, Texas, October 2026. Upcoming.
    • PHP Tek 2026. Chicago, Illinois, May 2026. (Slides, Blog write up)
  • "Introduction to Rust for Experienced Software Developers," ConFoo Montreal 2026. Montreal, Canada, February 2026. (Slides, Blog write up)
  • "PHP 8.5: New Features from the Source"

PHP

I started contributing to the PHP source in August 2024, working primarily on bug fixes, improvements to the Reflection extension and various cleanup. In March 2025, I requested and was granted access to make direct changes (and approve others' changes) to PHP. I also became the official maintainer of the reflection extension.

Also in March 2025, I volunteered to serve as one of the release managers for diff --git a/tests/data/Work.html b/tests/data/Work.html index a5fb637..ab3cfb6 100644 --- a/tests/data/Work.html +++ b/tests/data/Work.html @@ -1,8 +1,10 @@ -Work

Work experience

WikiTeq

I joined WikiTeq in January 2023 as a Technical Project Manager, working with a -team of developers around the world to support clients that use MediaWiki, -including major corporations and government agencies. As part of my work at -WikiTeq, I developed multiple MediaWiki extensions, though most of them are -private. My contributions made as part of my work at WikiTeq are all available -under the account @DanielButAtWork on GitHub. Public extensions that I created include:

  • MixedVisibilityFiles: Support making some on-wiki files public and others private
  • ZoteroConnector: Import references and attachments from Zotero into a wiki
  • MarkdownPages: Add support for markdown as a page content model
  • HoneyPot: Implementation of a honey pot during account creation
  • MinimalExample: Demonstration of the process of building an extension

I also gave talks at multiple MediaWiki-related conferences on behalf of +Work

Work experience

PHP Ecosystem Security

In September 2026, I joined the PHP Foundation's Ecosystem Security Team to work +on hardening the PHP codebase and addressing non-security issues that are +reported to the security team. See my blog post for more details.

WikiTeq

I worked at WikiTeq from January 2023 until May 2026 as a Technical Project +Manager, working with a team of developers around the world to support clients +that use MediaWiki, including major corporations and government agencies. As +part of my work at WikiTeq, I developed multiple MediaWiki extensions, though +most of them are private. My contributions made as part of my work at WikiTeq +are all available under the account @DanielButAtWork on GitHub. Public extensions that I created include:

  • MixedVisibilityFiles: Support making some on-wiki files public and others private
  • ZoteroConnector: Import references and attachments from Zotero into a wiki
  • MarkdownPages: Add support for markdown as a page content model
  • HoneyPot: Implementation of a honey pot during account creation
  • MinimalExample: Demonstration of the process of building an extension

I also gave talks at multiple MediaWiki-related conferences on behalf of WikiTeq. Those talks were recorded and are available publicly:

For talks that I have given at open-source conferences in my personal capacity, see the page about open source.

\ No newline at end of file diff --git a/tests/data/blog-index.html b/tests/data/blog-index.html index 7678744..3fff344 100644 --- a/tests/data/blog-index.html +++ b/tests/data/blog-index.html @@ -1,5 +1,6 @@ -Blog index

Blog index

FOSSY 2026

Monday, 10 August 2026

Last week, I was in Vancouver for the FOSSY 2026 conference, where I gave a talk +Blog index

Blog index

Joining the PHP Ecosystem Security Team

Wednesday, 09 September 2026

I'm excited to share that I am joining the PHP Foundation's Ecosystem Security +Team to help harden the PHP codebase. Continue reading...

FOSSY 2026

Monday, 10 August 2026

Last week, I was in Vancouver for the FOSSY 2026 conference, where I gave a talk about my experience as a new open-source contributor. My experiences as a contributor, and previous conferences I have attended, have mostly been focused on PHP, but FOSSY is a conference about open source software more broadly. Continue reading...

Rewriting Reflection with Rust

Friday, 10 July 2026

Over the last few weeks, I have been working on rewriting the PHP Reflection