Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified files/Resume.pdf
Binary file not shown.
156 changes: 151 additions & 5 deletions src/Pages/OpenSourcePage.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,69 @@
#[SitemapEntry( 'OpenSource' )]
class OpenSourcePage extends BasePage {

private const OPEN_SOURCE_PRESENTATIONS = [
'PHP-8.5' => [
'title' => 'PHP 8.5: New Features from the Source',
'iterations' => [
[
'conf' => 'Longhorn PHP Conference',
'loc' => 'Austin, Texas',
'date' => 'October 2025',
'slides' => '20251025 Longhorn PHP presentation.pdf',
'blog' => '20251029-longhorn-php#content-my-talk',
],
[
'conf' => 'MergePHP',
'loc' => 'Remote',
'date' => 'November 2025',
'slides' => '20251117 MergePHP presentation.pdf',
'blog' => '20251118-mergephp-talk',
],
[
'conf' => 'ConFoo Montreal 2026',
'loc' => 'Montreal, Canada',
'date' => 'February 2026',
'slides' => '20260226 ConFoo PHP presentation.pdf',
'blog' => '20260302-confoo#content-php-85',
],
],
],
'Intro-Rust-Experience-Devs' => [
'title' => 'Introduction to Rust for Experienced Software Developers',
'iterations' => [
[
'conf' => 'ConFoo Montreal 2026',
'loc' => 'Montreal, Canada',
'date' => 'February 2026',
'slides' => '20260225 ConFoo Rust presentation.pdf',
'blog' => '20260302-confoo#content-intro-to-rust',
],
],
],
'PHP-8.6' => [
'title' => 'PHP 8.6: The Inside Scoop',
'iterations' => [
[
'conf' => 'PHP Tek 2026',
'loc' => 'Chicago, Illinois',
'date' => 'May 2026',
'upcoming' => true,
],
],
],
'PHP-SemVer' => [
'title' => 'Semantic Versioning and the PHP Ecosystem: A Reality Check',
'iterations' => [
[
'conf' => 'PHP Tek 2026',
'loc' => 'Chicago, Illinois',
'date' => 'May 2026',
'upcoming' => true,
],
],
],
];

private const PHP_RFCS = [
'Attributes-on-constants' => [
'name' => 'Attributes on Constants',
Expand Down Expand Up @@ -45,6 +108,20 @@ class OpenSourcePage extends BasePage {
'desc' => 'Support the #[\Deprecated] attribute on traits',
'status' => 'implemented in PHP 8.5',
],
'Debugable Enums' => [
'name' => 'Debugable Enums',
'link' => 'https://wiki.php.net/rfc/debugable-enums',
'date' => 'March 2026',
'desc' => 'Allow __debugInfo() on enums',
'status' => 'under discussion',
],
'#[\Override] for class constants' => [
'name' => '#[\Override] for class constants',
'link' => 'https://wiki.php.net/rfc/override_constants',
'date' => 'March 2026',
'desc' => 'Extend #[\Override] to target class constants',
'status' => 'in draft',
],
];

private const PHP_PACKAGES = [
Expand Down Expand Up @@ -79,7 +156,7 @@ protected function build(): void {
'p',
[],
[
'I contribute to open-source libraries on GitHub as ',
'I contribute to open-source projects on GitHub as ',
FluentHTML::make(
'a',
[
Expand All @@ -93,11 +170,84 @@ protected function build(): void {
]
)
);
$this->addTalksSection();
$this->addPHPSection();
$this->addPackagesSection();
$this->addWebsiteSection();
}

private function addTalksSection(): void {
$this->contentWrapper->append(
FluentHTML::make( 'h3', [ 'class' => 'subsection-header' ], 'Conference Presentations' ),
FluentHTML::make(
'p',
[],
[
<<<END
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.
END,
]
)
);
$makeDetails = static fn ( $details ) => [
FluentHTML::make( 'em', [], $details['conf'] ),
'. ',
$details['loc'],
', ',
$details['date'],
...(
( $details['upcoming'] ?? false ) ? [ '. Upcoming.' ] :
[
'. (',
FluentHTML::make(
'a',
[ 'href' => './files/' . $details['slides'] ],
'Slides'
),
', ',
FluentHTML::make(
'a',
[ 'href' => './blog/' . $details['blog'] ],
'Blog write up'
),
')',
]
),
];
$list = FluentHTML::fromTag( 'ul' );
foreach ( array_reverse( self::OPEN_SOURCE_PRESENTATIONS ) as $details ) {
if ( count( $details['iterations'] ) === 1 ) {
$once = $details['iterations'][0];
$item = FluentHTML::make(
'li',
[],
[
'"' . $details['title'] . '," ',
...( $makeDetails( $details['iterations'][0] ) ),
]
);
$list->append( $item );
continue;
}
$iterations = array_map(
static fn ( $iter ) => FluentHTML::make( 'li', [], $makeDetails( $iter ) ),
array_reverse( $details['iterations'] )
);
$item = FluentHTML::make(
'li',
[],
[
'"' . $details['title'] . '"',
FluentHTML::make( 'ul', [], $iterations ),
]
);
$list->append( $item );
}
$this->contentWrapper->append( $list );
}

private function addPHPSection(): void {
$makeLink = static fn ( $href, $text ) => FluentHTML::make(
'a',
Expand Down Expand Up @@ -189,10 +339,6 @@ private function addPackagesSection(): void {
],
$text
);
$reflectionLink = $makeLink(
'https://www.php.net/manual/en/book.reflection.php',
'Reflection extension'
);
$this->contentWrapper->append(
FluentHTML::make( 'h3', [ 'class' => 'subsection-header' ], 'Packages' ),
FluentHTML::make(
Expand Down
41 changes: 31 additions & 10 deletions src/Pages/WorkPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,25 @@
class WorkPage extends BasePage {

private const WIKITEQ_EXTENSIONS = [
'MixedVisibilityFiles' => [
'https://github.com/WikiTeq/mediawiki-extension-MixedVisibilityFiles',
'Support making some on-wiki files public and others private',
],
'ZoteroConnector' => [
'https://github.com/WikiTeq/mediawiki-extension-ZoteroConnector',
'Import references and attachments from Zotero into a wiki',
],
'MarkdownPages' => [
'https://github.com/WikiTeq/mediawiki-extension-MarkdownPages',
'Add support for markdown as a page content model',
],
'HoneyPot' => [
'https://gerrit.wikimedia.org/g/mediawiki/extensions/HoneyPot',
'Implementation of a honey pot during account creation [created]',
'Implementation of a honey pot during account creation',
],
'MinimalExample' => [
'https://github.com/WikiTeq/mediawiki-extension-MinimalExample',
'Demonstration of the process of building an extension [created]',
],
'PagePort' => [
'https://gerrit.wikimedia.org/g/mediawiki/extensions/PagePort/',
'Extension for exporting and importing groups of wiki pages [significant improvements]',
'Demonstration of the process of building an extension',
],
];

Expand Down Expand Up @@ -95,13 +103,14 @@ private function addWikiTeqSection(): void {
<<<END
I first 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. As part of my work at WikiTeq, I have worked with 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
MediaWiki, including major corporations and government agencies. As part of my
work at WikiTeq, I have 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
END,
$makeLink( 'https://github.com/DanielWTQ', '@DanielWTQ' ),
<<<END
on GitHub. Some public extension contributions include:
on GitHub. Public extensions that I created include:
END,
]
),
Expand Down Expand Up @@ -147,6 +156,18 @@ private function addWikiTeqSection(): void {
$list->append( $item );
}
$this->contentWrapper->append( $list );
$this->contentWrapper->append(
FluentHTML::make(
'p',
[],
[
'For talks that I have given at open-source conferences in '
. 'my personal capacity, see ',
FluentHTMl::make( 'a', [ 'href' => './OpenSource' ], 'the page about open source' ),
'.',
]
)
);
}

}
6 changes: 4 additions & 2 deletions tests/data/OpenSource.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
<!DOCTYPE html>
<html lang="en"><head><link rel="icon" href="data:,"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1"><link rel="stylesheet" type="text/css" href="/resources/default-styles.css"><title>Open source</title></head><body><div class="des-navbar"><a href="/Home">Home</a><a href="/files/Resume.pdf">Résumé</a><strong class="des-strong-page-link">Open Source</strong><a href="/Work">Work</a><a href="/Blog">Blog</a></div><div class="content-wrapper"><h1>Open source contributions</h1><p>I contribute to open-source libraries on GitHub as <a href="https://github.com/DanielEScherzer" target="_blank" class="external-link">@DanielEScherzer</a>.</p><h3 class="subsection-header">PHP</h3><p>I started contributing to the PHP source in August 2024, working primarily on
<html lang="en"><head><link rel="icon" href="data:,"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1"><link rel="stylesheet" type="text/css" href="/resources/default-styles.css"><title>Open source</title></head><body><div class="des-navbar"><a href="/Home">Home</a><a href="/files/Resume.pdf">Résumé</a><strong class="des-strong-page-link">Open Source</strong><a href="/Work">Work</a><a href="/Blog">Blog</a></div><div class="content-wrapper"><h1>Open source contributions</h1><p>I contribute to open-source projects on GitHub as <a href="https://github.com/DanielEScherzer" target="_blank" class="external-link">@DanielEScherzer</a>.</p><h3 class="subsection-header">Conference Presentations</h3><p>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.</p><ul><li>&quot;Semantic Versioning and the PHP Ecosystem: A Reality Check,&quot; <em>PHP Tek 2026</em>. Chicago, Illinois, May 2026. Upcoming.</li><li>&quot;PHP 8.6: The Inside Scoop,&quot; <em>PHP Tek 2026</em>. Chicago, Illinois, May 2026. Upcoming.</li><li>&quot;Introduction to Rust for Experienced Software Developers,&quot; <em>ConFoo Montreal 2026</em>. Montreal, Canada, February 2026. (<a href="./files/20260225 ConFoo Rust presentation.pdf">Slides</a>, <a href="./blog/20260302-confoo#content-intro-to-rust">Blog write up</a>)</li><li>&quot;PHP 8.5: New Features from the Source&quot;<ul><li><em>ConFoo Montreal 2026</em>. Montreal, Canada, February 2026. (<a href="./files/20260226 ConFoo PHP presentation.pdf">Slides</a>, <a href="./blog/20260302-confoo#content-php-85">Blog write up</a>)</li><li><em>MergePHP</em>. Remote, November 2025. (<a href="./files/20251117 MergePHP presentation.pdf">Slides</a>, <a href="./blog/20251118-mergephp-talk">Blog write up</a>)</li><li><em>Longhorn PHP Conference</em>. Austin, Texas, October 2025. (<a href="./files/20251025 Longhorn PHP presentation.pdf">Slides</a>, <a href="./blog/20251029-longhorn-php#content-my-talk">Blog write up</a>)</li></ul></li></ul><h3 class="subsection-header">PHP</h3><p>I started contributing to the PHP source in August 2024, working primarily on
bug fixes, improvements to the <a href="https://www.php.net/manual/en/book.reflection.php" target="_blank" class="external-link">Reflection extension</a> and various cleanup. In March 2025, I requested and was granted access to make
direct changes (and approve others&#039; changes) to PHP. I also became the official
maintainer of the reflection extension.</p><p>Also in March 2025, I volunteered to serve as one of the release managers for
the then-subsequent version of PHP, PHP 8.5. In April, the community voted to
decide between the volunteers (luckily there were plenty of candidates) and I
was one of the two &quot;rookie&quot; candidates chosen to help with the release. You can
read more in <a href="/Blog/20250417-php85-release-manager">my blog post</a>.</p><p>PHP uses a process of requests for comment when proposing and implementing major
changes; my RFCs include:</p><ul><li>July 2025: <a href="https://wiki.php.net/rfc/deprecated_traits" target="_blank" class="external-link">#[\Deprecated] for traits</a> - Support the #[\Deprecated] attribute on traits (implemented in PHP 8.5)</li><li>July 2025: <a href="https://wiki.php.net/rfc/filter_throw_on_failure" target="_blank" class="external-link">FILTER_THROW_ON_FAILURE</a> - Add FILTER_THROW_ON_FAILURE flag to the filter extension (implemented in PHP 8.5)</li><li>June 2025: <a href="https://wiki.php.net/rfc/delayedtargetvalidation_attribute" target="_blank" class="external-link">#[\DelayedTargetValidation] attribute</a> - Delaying compile-time attribute target validation errors with #[\DelayedTargetValidation] (implemented in PHP 8.5)</li><li>March 2025: <a href="https://wiki.php.net/rfc/final_promotion" target="_blank" class="external-link">Final Property Promotion</a> - Adding support for final modifiers in constructor property promotion (implemented in PHP 8.5)</li><li>November 2024: <a href="https://wiki.php.net/rfc/attributes-on-constants" target="_blank" class="external-link">Attributes on Constants</a> - Adding support for attributes on compile-time constants (implemented in PHP 8.5)</li></ul><h3 class="subsection-header">Packages</h3><p>I also wrote multiple open-source PHP packages - though they are currently
changes; my RFCs include:</p><ul><li>March 2026: <a href="https://wiki.php.net/rfc/override_constants" target="_blank" class="external-link">#[\Override] for class constants</a> - Extend #[\Override] to target class constants (in draft)</li><li>March 2026: <a href="https://wiki.php.net/rfc/debugable-enums" target="_blank" class="external-link">Debugable Enums</a> - Allow __debugInfo() on enums (under discussion)</li><li>July 2025: <a href="https://wiki.php.net/rfc/deprecated_traits" target="_blank" class="external-link">#[\Deprecated] for traits</a> - Support the #[\Deprecated] attribute on traits (implemented in PHP 8.5)</li><li>July 2025: <a href="https://wiki.php.net/rfc/filter_throw_on_failure" target="_blank" class="external-link">FILTER_THROW_ON_FAILURE</a> - Add FILTER_THROW_ON_FAILURE flag to the filter extension (implemented in PHP 8.5)</li><li>June 2025: <a href="https://wiki.php.net/rfc/delayedtargetvalidation_attribute" target="_blank" class="external-link">#[\DelayedTargetValidation] attribute</a> - Delaying compile-time attribute target validation errors with #[\DelayedTargetValidation] (implemented in PHP 8.5)</li><li>March 2025: <a href="https://wiki.php.net/rfc/final_promotion" target="_blank" class="external-link">Final Property Promotion</a> - Adding support for final modifiers in constructor property promotion (implemented in PHP 8.5)</li><li>November 2024: <a href="https://wiki.php.net/rfc/attributes-on-constants" target="_blank" class="external-link">Attributes on Constants</a> - Adding support for attributes on compile-time constants (implemented in PHP 8.5)</li></ul><h3 class="subsection-header">Packages</h3><p>I also wrote multiple open-source PHP packages - though they are currently
primarily used by me, I am a firm supporter of open-source code and figured that
they might be useful to others. The packages that I have created so far are:</p><ul><li><a href="https://packagist.org/packages/danielescherzer/common-phpcs" target="_blank" class="external-link">danielescherzer/common-phpcs</a> - Collection of common codesniffer standards for my projects</li><li><a href="https://packagist.org/packages/danielescherzer/commonmark-ext-pygments-highlighter" target="_blank" class="external-link">danielescherzer/commonmark-ext-pygments-highlighter</a> - CommonMark extension for code highlighting with Pygments</li><li><a href="https://packagist.org/packages/danielescherzer/html-builder" target="_blank" class="external-link">danielescherzer/html-builder</a> - Tools for building HTML</li></ul><h3 class="subsection-header">Website</h3><p>The source code for my website is also public, in case the code is useful to
others. The actual text about me is probably not going to be relevant, but my
Expand Down
Loading
Loading