Interview With Eric Mann Release Manager PHP 8.3
In this episode, Scott talks with Eric Mann about his experience as one of the PHP 8.3 Release Managers and writing his book PHP Cookbook.
Note: this transcript was transcribed by AI and then edited for clarity.
Scott Keck-Warren:
Eric Mann is a well-established cybersecurity, software, and infrastructure engineer, having led multiple teams of various sizes in the private sector. Eric has experience architecting highly-available and resilient SaaS platforms, scalable e-commerce websites, and industry-defining AI/ML operations. In addition to leading technical teams, Eric frequently lectures at events on both scalable engineering and cybersecurity. He also publishes books on programming and secure software design. Eric is a member of both ISACA (Information Systems Audit and Control Association) and OWASP (Open Worldwide Application Security Project) and is a release manager for PHP 8.3.
I wanted to start out today and ask you about your experience as one of the release managers for PHP 8.3.
Eric Mann
One of the things that is really interesting, I did not understand the PHP release process before I started this. I knew we had release managers. I knew we had a release process, but I didn’t really understand what it looked like. So understanding that we cut the release or package the release on one day. On the next day, people will bundle the release for various distributions, and then on the third day we will announce it actually made me feel a lot better just knowing that everybody works from very disparate time zones. And I was really concerned about calendar coordination.
So one of the biggest things I learned was both what the release process looked like, but also just how well suited it is for asynchronous operations and remote work. The fact that I am on the US West Coast and the rest of the release managers are not even in the US, it’s been amazing to coordinate with folks across borders and make sure that we can do things both across borders and across time zones. And as far as how seamless things are from the outside perspective, you can’t tell. Everything is just nice and smooth, and the operation moves forward perfectly well. And I think that’s been amazing and fantastic to learn and see from the inside.
Scott Keck-Warren:
Eric Mann
Sometime on Wednesday, the builders will run their builds and say, hey, here are the builds. They’ll check to see if anything unexpected happened and then let people know where the builds live. And then on Thursday, at some point in time, the release manager will go through and post the announcement for the release, showing where the hash checksums live, where the signatures live, where the binaries live, and all of the compressed artifacts. But all of these happen at different times and everything’s coordinated completely asynchronously via email.
I have now personally managed releases from three separate time zones from Portland, where I live on the West Coast. I’ve gone to the East Coast for work because my office is on the East coast and actually packaged PHP from a hotel room on my laptop, and then most recently was on vacation with my family in Hawaii, and from my hotel room in Hawaii was able to package a release again, exact same process, regardless of where you are, because everything is mediated over email. But it works very well with the asynchronous nature of the work.
Scott Keck-Warren:
Eric Mann
Honestly, I could queue up the release, run the scripts. Maybe 15 minutes later I’m ready to alert the mailing list that the builds are ready. But the process is pretty well streamlined because it’s build the release, sign the release, upload the packages to downloads.php.net, and then alert the release manager mailing list to let everybody know that it’s done. So maybe 15 minutes. The longest was half an hour because I was having network issues.
And then on Thursday, coming back to actually publish the release and announce it, that takes a little bit longer. Not because of the process, but because of the builds in the background. So when you publish an update to the Php.net website or to the QA website, you have to wait up to an hour for the job in the background to actually build the website and make sure that everything is available before you email internals and say, hey everybody, the release is ready to go. You really want to wait for it to be visible on the website before you tell everybody that you released it.
Scott Keck-Warren:
Eric Mann
Scott Keck-Warren:
Eric Mann
If you don’t understand single transferable vote, we are an equal company. Because I did not. I thought I lost the election this last time around because I miscalculated. But there are pretty good Wikipedia articles explaining how it works, and some great scripts that some folks have built that help automate counting the votes and tallying the votes. So single transferable vote. Everything happens on the PHP wiki in the public eye to make it really easy and really transparent to understand who’s being selected and when they’re being selected and who is running from release to release.
Scott Keck-Warren:
Eric Mann
Scott Keck-Warren:
Eric Mann
So even though I built the releases from three different time zones, they were all done by the same machine, open source machine, open source network connections, and has been really fun to be able to leverage all of these tools that years ago were just kind of pie in the sky ideas that I didn’t think we’d ever figured out. But sitting in a hotel room after eating breakfast before I met with my coworkers, using an old machine to remote into my work machine at home to push a PHP release through jump boxes all the way to downloads that php.net was. It felt like I was living in the future. It was one of the coolest things I’ve done professionally in quite a while.
Scott Keck-Warren:
Eric Mann
Scott Keck-Warren:
Eric Mann
Php itself is remarkably simple, straightforward, easy to use, and that’s one of the reasons why I love it. Some of the packages that we leverage for some more sophisticated features less so.
The most frustrating thing was talking about asynchronous coding in PHP and building all of my examples using these industry standard asynchronous coding frameworks, only to have the frameworks themselves iterate a major version with breaking changes. Literally the day after I sent my manuscript to the technical reviewers to edit it. So all of my technical reviewers went through all of my code samples and said, none of your code works. None of your code is functional. We don’t understand why. Only for me to go back and see between the time I wrote the chapter and the time they received the chapter for review, a major version released that completely changed the entire API, and I had to go back and scrap two months worth of work on a chapter to completely rebuild it, to meet the new API that this platform had released.
That was incredibly frustrating but great from a usability perspective because the newer versions were much more performant, much more streamlined, much more seamless. I think the changes they made were perfect, but trying to document those changes in effectively a third party dead tree edition of documentation that cannot change as the library iterates. Very difficult, very frustrating and had me beating my head against the wall for a couple of weeks trying to figure out a way through it.
Scott Keck-Warren:
Eric Mann
So around strings, what’s something I might want to do with strings or around streams? What’s something I might want to do with streams in PHP? I then turn it into a problem.
So an example with streams. Specifically, I have two streams. How do I copy data from one stream to the other stream, potentially without ballooning memory, because one of the streams might be more or less infinite. And this is something that you might face if you’re building a very large web application with a very long running connection, and you need to generate a very large data stream that needs to go to the PHP output stream. One way you can do this is just by saying echo and just like printing content to the buffer, but eventually you might exhaust PHP memory. I’ve seen other examples where people try to concatenate a string to try to build a very large document, typically XML or something else where you can’t afford for the server to shut down mid transmission.
And again, you’re exhausting memory by just trying to do this. The alternative is to use things like a temporary file stream, and you can write data to that temporary file stream, build your entire document, your entire XML document or Json document to completion. And then you can read that file again and pipe that directly to the output stream, the output, the web client or API client, whatever is reading from that stream is going to get the full content. You’re not going to exhaust memory because none of this is written into memory, it just passes directly through PHP. But that’s also not something that a lot of people are looking for, because they don’t really understand what is the problem that you’re trying to solve. So taking it from the perspective of what is the problem and then what is the solution? And then walk through not just that full implementation, but potential alternatives, helps really illustrate both the technologies and the fundamentals that are going into the solution, as well as other applications you might have for a similar approach down the road.
Scott Keck-Warren:
Eric Mann
Scott Keck-Warren:
Links:
Single Transferable Vote: https://en.wikipedia.org/wiki/Single_transferable_vote
PHP Cookbook: https://www.oreilly.com/library/view/php-cookbook/9781098121310/
The post Community Corner: Interview With Eric Mann appeared first on php[architect].
![php[podcast] episodes from php[architect]](https://cdn-images.podbay.fm/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3d3dy5waHBhcmNoLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAxNy8wOC9wb2RjYXN0LW9uLWRrLWJsdWUtZTE1MDM1MDQyNzU0ODIucG5nIiwiZmFsbGJhY2siOiJodHRwczovL2lzMy1zc2wubXpzdGF0aWMuY29tL2ltYWdlL3RodW1iL1BvZGNhc3RzMTIyL3Y0L2YzL2FiL2I2L2YzYWJiNjhhLTM1YjUtNjcwZS1hNTdmLWU4M2VlZTU1NTkwNy9temFfMjI1NzAwNTc1ODYwNDk1MTc4Ny5wbmcvNjAweDYwMGJiLmpwZyJ9.VNteU9LtJPpJ8JDinYd2ah6hCvfsWUuI9ULQRvQOG0I.jpg?width=400&height=400)

