diff --git a/files/20251025 Longhorn PHP presentation.pdf b/files/20251025 Longhorn PHP presentation.pdf new file mode 100644 index 0000000..f968883 Binary files /dev/null and b/files/20251025 Longhorn PHP presentation.pdf differ diff --git a/files/Resume.pdf b/files/Resume.pdf index b7c5bf2..8cb35d5 100644 Binary files a/files/Resume.pdf and b/files/Resume.pdf differ diff --git a/sitemap.xml b/sitemap.xml index ef8ea5a..ce6d958 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -54,4 +54,7 @@ https://scherzer.dev/Blog/20250919-rust-euler + + https://scherzer.dev/Blog/20251029-longhorn-php + diff --git a/src/Blog/posts/20251029-longhorn-php.md b/src/Blog/posts/20251029-longhorn-php.md new file mode 100644 index 0000000..e50a247 --- /dev/null +++ b/src/Blog/posts/20251029-longhorn-php.md @@ -0,0 +1,295 @@ +--- +extensions: + toc: true +title: Longhorn PHP 2025 +--- + +# Longhorn PHP 2025 + +Last week, I attended the Longhorn PHP conference in Austin, Texas. I had the +opportunity to meet with a slew of open source contributors, listen to some +amazing talks, and even present my own. + +The main conference was on Friday and Saturday, with an optional tutorial day +on Thursday. I opted to attend the tutorial day, and so spent a full three days +learning from industry experts about PHP and related concepts. + +## Thursday + +Thursday was a workshop day, and there were plenty of great options to choose +from. For the first session, I chose to attend +[Observing PHP for Fun and Profit][tutorial-rust] talking about building +a PHP extension in Rust to add profiling, and then using the data from the +profiling to analyze the compilation time for included files. + +While the profiling part was interesting, the reason I attended was the focus +on building the extension in Rust. Most PHP extensions are written in C, +though I know of at least one (intl) that is written in C++. Having recently +started to teach myself Rust, I figured that this talk would be a nice +intersection of coding in Rust and interacting with the C-ABI for PHP, and it +was. + +During the lunch break, in addition to eating I spent some time announcing PHP +8.5.0RC3, the latest release candidate (as of writing). The next version of +PHP that I tag and release is expected to be the official general availability +release of PHP 8.5.0. + +After lunch, for the second round of workshops I attended +[How to Run an Accessibility WCAG Audit: Step-by-Step for Beginners][tutorial-wcag]. +It was fascinating to see how the guidelines for accessibility are actually +presented, and to learn about common pitfalls for inaccessible websites. One of +the tools (contrast) for checking accessibility was a Chrome plugin, and I +decided to install the plugin and check the pages on my site. I found two pages +with accessibility issues: + +* the JavaScript demo from my undergrad thesis ([see here][thesis-interface]) +* my blog post about the syntax highlighting plugin for CommonMark +([see here][blog-syntax-highlight]) + +Given that the thesis interface page is meant to represent the version of the +interface that I submitted as part of my thesis, I am not planning to change +the styles for that page at the moment. If I ever build on my thesis and reuse +the code that I wrote, I will be sure to adjust the styles. + +On the other hand, for the blog page the solution was easy - just adjust some +sitewide styles. Which I did, +[choosing a slightly darker shade of red][commit-contrast]. + +I plan to investigate adding accessibility checks to my GitHub Actions CI to +ensure that I don't accidentally slip up. + +Also during the tutorial day, I had a chance to meet Scott Keck-Warren, who +interviewed me a few weeks back for the PHP Architect's Community Corner +podcast; see that podcast episode [here][podcast-episode]. + +## Friday + +Friday was the first day of the main conference, and it kicked off with a +keynote, [The Immutable Laws of Software and Life: Code Accordingly][talk-laws]. +The various laws were fascinating, but I was slightly pulled out of the +experience by the discussion of [Cunningham's Law][wp-cunningham-law], which +suggests that posting something wrong is the easiest way to get the right answer +on the internet, because people love to correct others. Last year I had the +chance to hear Cunningham speak at [a MediaWiki conference][mwcon-spring-2024], +and heard first-hand from Cunningham that he disputes the attribution of the +law. + +Just as the keynote was starting, I got an email that two of my talks had been +accepted for [ConFoo Montreal 2026][confoo]; more on that later. + +After the keynote, I stuck around in the main ballroom to attend +[Defining an API Specification: A Step-by-Step Guide][talk-api-spec]. My primary +experience with API specifications has been interacting with MediaWiki's API +endpoints, and MediaWiki [exposes a REST API][mw-rest-api] as an alternative to +its [action API][mw-action-api]. I haven't written any REST endpoints, but now +I think I understand them a bit better. Who knows, I might add an API endpoint +for my website, and if I do I'll definitely keep this guide in mind. + +For the last talk before lunch, I moved down the hall to attend +[Better Database Testing with PHPUnit][talk-db-testing]. The library that was +presented, [`cspray/database-testing`][lib-db-testing], looks fascinating. +Unfortunately, the database testing that I do is generally in the context of +MediaWiki, which has its own database testing infrastructure, but if I ever +write a non-MediaWiki tool that interacts with the database, I'll try to +remember to use this helpful library for testing. + +After lunch, I attended [Love Your Monolith][talk-monolith]. Even before this +talk, I was a fan of monoliths, but now I better understand the potential risks +when using microservices - network calls can fail, increased indirection can +make things confusing, etc. + +I then walked next door for [Local development made easy with DDEV][talk-ddev]. +The talk was fascinating, but I am already very used to using Docker for my +local development, and it is also what I use at work (and for my website) for +deployments. While it is probably possible to use DDEV for deployments, I am +comfortable with Docker for the moment. + +Before the next round of talks, there was a short "open spaces" period, where +various groups discussed topics that had been voted on earlier. When topics +were solicited during lunch, I had put forward an offer: as a PHP core +developer very familiar with attributes, and as the maintainer of the PHP +reflection extension, I was open to hearing about feature requests for things +to work on. That topic received enough interest that it was selected, and I +got to hear from some other developers (both in person and remotely via Discord) +regarding features they would like implemented in the reflection extension. +The list of requests is [on GitHub][issue-reflection-reqs], and should give me +some projects to work on when I get the itch to write code but don't have any +specific topics in mind. During the open spaces, I already started diving in to +work on one of the requests, adding a way for an attribute to get information +about the target it had been applied to. + +Once the open spaces were over, I made my way over to +[Git as Game Logic: What Video Games Can Teach Us About Version Control][talk-git], +where I learned a few new tricks about using the git command line. The metaphor +of git as a video game was amusing, but as someone already familiar with using +git it wasn't necessary for me to understand the content. The most surprising +feature that I learned about was [git rerere][git-rerere], where git will +remember how you resolved a merge conflict and then automatically reapply the +resolution if the same conflict is encountered again. I'm sure this will come +in handy. + +I then stuck around for [PHP Attributes: Let's get Meta][talk-attributes]. While +I am familiar with the current ways to use attributes and their implementation, +I did not know much about the history of how they were added to the language. +I also enjoyed the discussion of the +[Crell/AttributeUtils package][lib-attribs], and expect to look through that +userland library for ideas of things to have built-in to PHP. + +## Saturday + +Saturday kicked off with another keynote, +[Turtles all the way down][talk-turtles]. When I first saw the name of the talk, +I was reminded of [a Reddit post][reddit-turtles] about having excessive levels +of inheritance. But, it didn't seem like that was going to be the focus of the +talk until the third part, when the origin of the "Turtles all the way down" +saying was discussed. While the history was fascinating, and the talk was great +overall, I found the creation of an HTTP request handler directly in C to be +the most interesting part, and plan to try and experiment with something like +that myself. + +Next up was a [discussion of decoupled tests][talk-decoupled], where I learned +a way to quantify the value of tests: the cost of the bugs found by the tests, +minus the cost of developing the tests, plus the benefits of a more adaptable +codebase. Tests that are too tightly coupled with the system under test are +less valuable, because the codebase is then not as adaptable, but of course +there needs to be some coupling, or otherwise the tests would be entirely +unrelated to the code! + +Before lunch, I attended [a talk about PIE][talk-pie], the new installer for +PHP extensions. I haven't actually tested it out much, but I have read the +documentation (and even contributed a few typo fixes) and have been meaning to +add support for PIE to my [CustomCast extension][ext-customcast]. Perhaps +once PHP 8.5 is fully released I'll have a chance to resume work on CustomCast. + +After lunch was a second keynote of the day, +[Work Smarter: Code Like a Musician][talk-musician]. It was fascinating to hear +how Cori applied lessons from a music career to writing code. Unfortunately, +I wasn't able to fully focus on this talk, because my own talk was going to be +right after it. I definitely plan to rewatch this talk when I have a chance to +look at the recordings. + +I then presented my own talk, about new features in PHP 8.5, which I discuss +more later on. + +After my talk, I attended [A Field Guide to PHProperties][talk-phpproperties], +which focused on making the most of the new PHP 8.4 features for properties, +including property hooks, interface properties, and asymmetric visibility. +The message makes sense, if you only code in PHP 8.4+. However, given how many +languages I commonly write code in, and the fact that the code I write for work +generally doesn't run on PHP 8.4, the majority of code that I write will not be +able to make use of the PHP 8.4 features that the talk focused on. The new +features are great, but using them would mean not supporting any previous +version of PHP. + +Next up was another round of open spaces, and a final round of talks. I had +planned to attend [Creating Developer Friendly Projects][talk-friendly], but +unfortunately I was starting to feel burnt out. I opted to skip the last +round of talks, and will make sure I watch the recordings that were made. I +wanted to make sure I was able to pay attention at the final keynote, which I +expected to be the most engaging. + +The final keynote, [Saving Open Source][talk-saving], was engaging throughout, +at different points funny, somber, optimistic, and relatable. I found the +discussion of lice fatigue especially entertaining - when it comes to posting +code in GitHub without bothering to include a license, I have done that myself +(e.g. for the repository with the code for my website). The discussion of the +[DBAD license][license-dbad] and the [ABRMS license][license-abrms] was +especially funny; the only other funny license I had previously come across was +the [WTFPL license][license-wtfpl]. I was also particularly struck by the +discussion of why people contribute to open source projects, and the idea of +people asking others for ideas of open source packages to build - which is +basically what I did yesterday when asking for feature requests for the +reflection extension. I came away from this keynote with a list of a few books +to read, and a number of ideas to ponder. + +## My talk + +My talk, presented on Saturday afternoon, covered what was new in PHP 8.5. +My talk started off fairly well - I knew the material, and began with a +discussion of the deprecations that are a part of PHP 8.5. However, I ended up +spending too long going over the details of the various deprecations, their +background, equivalent replacements or workarounds, and other migration +strategies for upgrading codebases to avoid the deprecation warnings. As a +result, I ended up running out of time - when I got to the actual discussion +of the new features, I was already running through the slides much faster than +I would have liked, and for the last few slides, when I was going to discuss the +biggest new features (expanded constant syntax, the new uri extension, clone() +with, and the pipe operator) I only had enough time for a few sentences on each +of those topics. You can see a copy of the slides for my talk [here][slides], +I had 52 slides to try and get through! + +As I noted earlier, two of my talks were accepted for the ConFoo conference in +February; one of them was this talk about PHP 8.5. For ConFoo my understanding +is that I will have 45 minutes to present rather than 50, so I need to get +through the deprecations faster - really, 30 seconds per slide for the most +part, given that the details are fairly straightforward and can be automated +(migration or just analysis to find them) with the tools listed. I also might +want to cut out a few of the slides/discussions so that I can have more time +to spend on the features. I definitely need to change the order of the talk and +start with the features rather than ending with them, both because the features +are the bigger part of the new version (deprecations are not exceptions and can +be suppressed). Maybe I'll just reverse the order of the slides (except the +title slide and the thank you slide, those still need to go first/last +respectively). + +One thing that works in my favor is that at ConFoo, PHP 8.5 will already have +been released to general availability. Thus, I won't need to spend time +encouraging people to test release candidates and report bugs before the +GA release, nor will I need to cover the details of changes made between the +different release candidates. That should help me save a few minutes. + +After I got home from the conference, and while working on this blog post, I +was reminded that at the speakers' dinner I had tentatively agreed to present +this same PHP 8.5 talk for [MergePHP][mergephp], a monthly online PHP meetup. +I confirmed that I was available to give the talk at the next meetup on +November 13; I was told the talk should be between 45 and 60 minutes. Thus, +MergePHP will give me a chance to present my talk again, applying some of the +changes I need for ConFoo but hopefully without needing to cut down the material +too much. I'll post a retrospective about that experience in a few weeks. + +## Final thoughts + +I am definitely glad that I attended this conference, and am thankful to the +organizers for allowing me to speak. Austin was the site of my first +professional conference, [EMWCon Spring 2023][emwcon-2023], which I attended on +behalf of my employer. It seems oddly fitting that it was also the site of the +first professional conference I attended and spoke at that was unrelated to my +job. I look forward to hopefully returning for Longhorn 2026. + +[tutorial-rust]: https://longhornphp.com/sessions#observing-php-for-fun-and-profit +[tutorial-wcag]: https://longhornphp.com/sessions#how-to-run-an-accessibility-wcag-audit-step-by-step-for-beginners +[thesis-interface]: ./../files/Thesis/Simulator.html +[blog-syntax-highlight]: ./20250718-pygments-highlighting +[commit-contrast]: https://github.com/DanielEScherzer/website-content/commit/343e4872a19516d874255a4e249d7b3fb0bf4426 +[podcast-episode]: https://www.phparch.com/podcast/community-corner-php-8-5-release-manager-daniel-scherzer/ +[talk-laws]: https://longhornphp.com/sessions#the-immutable-laws-of-software-and-life-code-accordingly +[wp-cunningham-law]: http://en.wikipedia.org/wiki/Cunningham's%20Law +[mwcon-spring-2024]: https://www.mediawiki.org/wiki/MediaWiki_Users_and_Developers_Conference_Spring_2024 +[confoo]: https://confoo.ca/en/2026 +[talk-api-spec]: https://longhornphp.com/sessions#defining-an-api-specification-a-step-by-step-guide +[mw-rest-api]: https://www.mediawiki.org/wiki/API:REST_API +[mw-action-api]: https://www.mediawiki.org/wiki/API:Action_API +[talk-db-testing]: https://longhornphp.com/sessions#better-database-testing-with-phpunit +[lib-db-testing]: https://github.com/cspray/database-testing +[talk-monolith]: https://longhornphp.com/sessions#love-your-monolith +[talk-ddev]: https://longhornphp.com/sessions#local-development-made-easy-with-ddev +[issue-reflection-reqs]: https://github.com/DanielEScherzer/website-content/issues/49 +[talk-git]: https://longhornphp.com/sessions#git-as-game-logic-what-video-games-can-teach-us-about-version-control +[git-rerere]: https://git-scm.com/book/en/v2/Git-Tools-Rerere +[talk-attributes]: https://longhornphp.com/sessions#php-attributes-lets-get-meta +[lib-attribs]: https://packagist.org/packages/Crell/AttributeUtils +[talk-turtles]: https://longhornphp.com/sessions#turtles-all-the-way-down +[reddit-turtles]: https://www.reddit.com/r/ProgrammerHumor/comments/1bya392/whywouldtheyrewardthis/ +[talk-decoupled]: https://longhornphp.com/sessions#asserttrueisdecoupledmy-tests +[talk-pie]: https://longhornphp.com/sessions#a-slice-of-pie-revolutionising-php-extension-installation +[ext-customcast]: https://github.com/DanielEScherzer/CustomCast +[talk-musician]: https://longhornphp.com/sessions#work-smarter-code-like-a-musician +[talk-phpproperties]: https://longhornphp.com/sessions#a-field-guide-to-phproperties +[talk-friendly]: https://longhornphp.com/sessions#creating-developer-friendly-projects +[talk-saving]: https://longhornphp.com/sessions#saving-open-source +[license-dbad]: https://dbad-license.org/ +[license-abrms]: https://www.reddit.com/r/ProgrammerHumor/comments/8ebl4b/the_anyone_but_richard_m_stallman_license/ +[license-wtfpl]: https://www.wtfpl.net/ +[slides]: ./../files/20251025%20Longhorn%20PHP%20presentation.pdf +[mergephp]: https://www.mergephp.com/ +[emwcon-2023]: https://www.mediawiki.org/wiki/EMWCon_Spring_2023 diff --git a/tests/data/Home.html b/tests/data/Home.html index ad20b18..f8a6a36 100644 --- a/tests/data/Home.html +++ b/tests/data/Home.html @@ -4,8 +4,6 @@ Computer Science and Political Science and graduating magna cum laude in 2024 with a Bachelor of Science degree. As part of my work in Computer Science, I chose to write an honors thesis in my senior year, see here for details. I continued at Tufts for graduate school, graduating in 2025 with a Master of Science in Computer Science degree.

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

Contact

Blog

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

Project Euler in Rust

Friday, 19 September 2025

After writing the obligatory "Hello, World!", I wanted to work on something -more substantial in Rust. When I learn a new programming language, my go-to -source of coding problems to try and solve in the new language is -Project Euler, which features hundreds of coding challenges of -various difficulty levels. Continue reading...

\ No newline at end of file +experience.

Contact

Blog

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

Longhorn PHP 2025

Wednesday, 29 October 2025

Last week, I attended the Longhorn PHP conference in Austin, Texas. I had the +opportunity to meet with a slew of open source contributors, listen to some +amazing talks, and even present my own. Continue reading...

\ No newline at end of file diff --git a/tests/data/blog-index.html b/tests/data/blog-index.html index 3b612ff..857711d 100644 --- a/tests/data/blog-index.html +++ b/tests/data/blog-index.html @@ -1,5 +1,7 @@ -Blog index
HomeRésuméOpen SourceWorkBlog

Blog index

Project Euler in Rust

Friday, 19 September 2025

After writing the obligatory "Hello, World!", I wanted to work on something +Blog index

Blog index

Longhorn PHP 2025

Wednesday, 29 October 2025

Last week, I attended the Longhorn PHP conference in Austin, Texas. I had the +opportunity to meet with a slew of open source contributors, listen to some +amazing talks, and even present my own. Continue reading...

Project Euler in Rust

Friday, 19 September 2025

After writing the obligatory "Hello, World!", I wanted to work on something more substantial in Rust. When I learn a new programming language, my go-to source of coding problems to try and solve in the new language is Project Euler, which features hundreds of coding challenges of