PHP Internals News: Episode 45: Language Evolution Overview Proposal – Derick Rethans

PHP Internals News: Episode 45: Language Evolution Overview Proposal

In this episode of “PHP Internals News” I chat with Nikita Popov (Twitter, GitHub, Website) about the Language Evolution Overview Proposal RFC.

The RSS feed for this podcast is https://derickrethans.nl/feed-phpinternalsnews.xml, you can download this episode’s MP3 file, and it’s available on Spotify and iTunes. There is a dedicated website: https://phpinternals.news

Transcript

Derick Rethans 0:16

Hi, I’m Derick. And this is PHP internals news, a weekly podcast dedicated to demystifying the development of the PHP language. This is Episode 45. Today I’m talking with Nikita Popov yet again about a non technical RFC that he’s produced titled language evolution overview. Somewhere last year, there was a big discussion about P++, an alternative ID of how to deal with improving PHP as a language but also still think about how some other people already use PHP and I don’t really want to change how they currently use PHP. Like then I didn’t really have an episode about that because I’d like to keep politics out of this podcast, or definitely PHP’s internals politics. I do think that we realised at that moment that something did have to happen, because there’s not really policy about when we can add things, when we can remove things, and so on. So I was quite pleased to see that you have come up with a quite wordy RFC, not talking about anything technical, but more looking forward of were will see PHP in the near or medium future, I would say. What are your thoughts about making this RFC to start with?

Nikita Popov 1:29

As you mentioned we had some pretty, let’s say heated discussions last year, concerning especially backwards incompatible changes. So there were a number of very, very contentious RFCs. One of them was the short opentags removal, and another one was the classification of undefined variable warnings. So whether those should throw or not throw, and well basic contention is this that PHP is a by now pretty old language, 25 years old. And we can all admit that it’s not the language with the best design. So it has evolved relatively organically with quite a few words, and the famous inconsistencies. And now we have this problem where we would like to resolve some of these long standing issues. Many of them are genuine problems that are introducing bugs in code, that reduce developer productivity. But at the same time, we have a huge amount of legacy code. So there are probably many hundreds of millions of lines of PHP code. And every time we do a backwards compatibility break, that code has to be updated, or more realistically, that code does not get updated and keeps hitting on old PHP version that, at some point also drops out of security support. And now the question is how can we fix the problems that PHP has, while still allowing this legacy code to update their PHP version. The general idea of how to fix this is to make certain backwards compatibility breaks opt in. By default, you just get the old behaviour, but you can specify in some way, exactly how it’s done doesn’t really matter at this point, that you want to opt into some kind of change or improvement.

Derick Rethans 3:34

As one example being the strict types that have been introduced in PHP that you need to turn on with a switch with a declare switch.

Nikita Popov 3:42

Strict types is really a great example because it has the important characteristic that has done per file. So you can turn on the strict types in one file and not affect any other code, at least in theory. So there are some edge cases, but I think like mostly you can just enable strict types in your library and you don’t affect any other library that the project uses. We would like to extend this concept. It should be possible that libraries can update to

Truncated by Planet PHP, read more at the original (another 29307 bytes)

PHP 7.4.4 Released! – PHP: Hypertext Preprocessor

The PHP development team announces the immediate availability of PHP 7.4.4. This is a bug fix release.All PHP 7.4 users are encouraged to upgrade to this version.For source downloads of PHP 7.4.4 please visit our downloads page Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog.

PHP 7.3.16 Released – PHP: Hypertext Preprocessor

The PHP development team announces the immediate availability of PHP 7.3.16. This is a security release which also contains several bug fixes.All PHP 7.3 users are encouraged to upgrade to this version.For source downloads of PHP 7.3.16 please visit our downloads page, Windows source and binaries can be found on windows.php.net/download/. The list of changes is recorded in the ChangeLog.

PHP 7.2.29 Released – PHP: Hypertext Preprocessor

The PHP development team announces the immediate availability of PHP 7.2.29. This is a security release.All PHP 7.2 users are encouraged to upgrade to this version.For source downloads of PHP 7.2.29 please visit our downloads page, Windows source and binaries can be found on windows.php.net/download/. The list of changes is recorded in the ChangeLog.

Curveball – March updates – Evert Pot

Curveball

Curveball is the freshest new microframework for Typescript.

Since the last big announcement, there’s been a number new curveball
users, and also a few framework changes.

I thought it would be nice to list some of the things we’ve been working on
this month.

Starter template

Probably the most significant, curveball now has a starter template.
This template is designed to be as minimal as possible, but just enough to
get a working Curveball application in a few minutes.

The golden path looks like this:

git clone https://github.com/curveball/starter.git <project_name>
cd <project_name>
npm i
npm run build
npm start

Website updates

We’ve made some progress on the website. It’s actually something we’re
happy to share now. Thank you LFO Industries for the great design. They
also made our logo and brand identity!

In the future, the website needs to host a solid tutorial and documentation
for all the core plugins. Watch this space.

Accesslog plugin uses ANSI colors

The accesslog has two main purposes: to emit useful logging for production
systems, and for a developer to be able to see what’s going on their console.

For the latter case, the accesslog middleware now detects if it’s running in
a terminal, and emit colors, making it easier to spot errors.

Accesslog screenshot

Conditional request helpers

The core package now has a number of helper functions for conditional
requests.

These helpers make it easier to evaluate conditions for If-Match,
If-None-Match, If-Modified-Since and If-Unmodified-Since.

import { checkConditional } from '@curveball/core';
const result = checkConditional(ctx.request, lastModifiedDate, eTag);

The result variable will contain either 200, 304 or 412,
which is a suggestion for what status code you might want to return.

In the future this utility will be used to automate conditional requests
further using the controller.

PHP Internals News: Episode 44: Write Once Properties – Derick Rethans

PHP Internals News: Episode 44: Write Once Properties

In this episode of “PHP Internals News” I chat with Máté Kocsis (Twitter, GitHub, LinkedIn) about the Write Once Properties RFC.

The RSS feed for this podcast is https://derickrethans.nl/feed-phpinternalsnews.xml, you can download this episode’s MP3 file, and it’s available on Spotify and iTunes. There is a dedicated website: https://phpinternals.news

Transcript

Derick Rethans 0:16

Hi, I’m Derick. And this is PHP internals news, a weekly podcast dedicated to demystifying the development of the PHP language. This is Episode 44. Today I’m talking with Máté Kocsis about an RFC that he produced called write only properties. Hello, Máté. How’s it going?

Máté Kocsis 0:34

Yeah, fine. Thanks.

Derick Rethans 0:36

Would you mind introducing yourself a moment?

Máté Kocsis 0:38

My name is Máté Kocsis and I’m a software engineer at LogMeIn. I’ve been using PHP for 15 years now. And after having followed the mailing list for quite some time, I started contributing to the project last October, and now Write Once properties is my first RFC.

Derick Rethans 0:58

What is the concept of Write Once Properties?

Máté Kocsis 1:00

Write Once Properties can only be initialised, but not modified afterwards. So you can either define a default value for them, or assign them a value, but you can’t modify them later. So any other attempts to modify, unset, increment, or decrements them, would cause an exception to be thrown. Basically, this RFC would bring Java’s final properties, or C#’s, read only properties to PHP. However, contrary how these languages work, this RFC would allow lazy initialization. It means that these properties don’t necessarily have to be initialised until the object construction ends, so you can do that later in the object’s life cycle.

Derick Rethans 1:48

PHP already has constants, which are pretty much write only properties as long as they’re being defined in a class definition. How does differ?

Máté Kocsis 1:58

Yeah, it’s it’s the difference because, so you can assign these properties value in the constructor or anywhere. You don’t don’t have to define them a default value.

Derick Rethans 2:12

Okay, and of course constants have the other problem is that you can only set its values to constants, not necessarily to any sort of expressions, or the result of other method calls.

Unknown Speaker 2:22

So you can use objects, resources, any kind of property value here.

Derick Rethans 2:28 You mentioned C#’s read only properties. And you sort of mentioned them in the same breath as write ones properties for PHP. These seem like opposite things

Máté Kocsis 2:39

Not quite opposite, but there’s some distinction between the two. C sharp requires these properties to be initialised until the object construction ends. And this is very difficult to achieve in PHP. And now I’m using Nikita’s words: Object construction is a fuzzy term and you can be sure if, if the contractor is involved at all. For example, if you are using Doctrine or proxy manager, so we decided to allow lazy initialization, which means that you don’t have to assign these properties a value, you are free to do anytime when you want.

Derick Rethans 3:22

Truncated by Planet PHP, read more at the original (another 11609 bytes)

Xdebug Update: February 2020 – Derick Rethans

Xdebug Update: February 2020

Another month, another monthly update where I explain what happened with Xdebug development in this past month. It will be published on the first Tuesday after the 5th of each month. Patreon supporters will get it earlier, on the first of each month. You can become a patron here to support my work on Xdebug. If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In February, I worked on Xdebug for just over 75 hours, on the following things:

dbgpClient and dbgpProxy

I have now finished work on early-release versions of a DBGp Client (dbgpClient) and DBGp Proxy (dbgpProxy). These tools are written in Go, and binaries can be downloaded from the download page. Source code is not yet available, but I am intending to open that at some point in the near future.

For Xdebug Cloud I can no longer have the debugging protocol going over the network unencrypted. I am therefore working at including SSL support in Xdebug, as well as in the dbgpClient and dbgpProxy tools. The tools already have support as it was easy to add that in Go, but Xdebug does not yet. I’ve done research and selected BearSSL to provide this.

Asynchronous Debugging Support

Robert Lu has been working on asynchronous support in Xdebug’s debugging protocol for a while, the #1016: Support for pause-execution issue. After extensive testing, review, and reworking of the patch by Robert and I, this patch finally landed in Xdebug. The asynchronous support allows you to pause scripts while they are running without a breakpoint to have been hit. This feature needs support in a debugging client, which actively needs to opt into this behaviour. The new dbgpClient from the previous section supports this.

I will be working with purveyors of IDE to also include “pause-exection” in their feature set.

Business Supporter Scheme and Funding

In February, a few new supporters signed up. They are:

Supermetrics, Private Packagist, and CHECK24.

Thanks!

If you, or your company, would also like to support Xdebug, head over to the support page!

Besides business support, I also maintain a Patreon page and a profile on GitHub sponsors.

Podcast

The PHP Internals News continues its second season. In this weekly podcast, I discuss in 15-30 minutes, proposed new features to the PHP language with fellow PHP internals developers. It is available on Spotify and iTunes, and through an RSS Feed. In the first episode I spoke with Nikita Popov about Preloading and WeakMaps.

PHP Internals News: Episode 43: Syntax Tweaks – Derick Rethans

PHP Internals News: Episode 43: Syntax Tweaks

In this episode of “PHP Internals News” I chat with Nikita Popov (Twitter, GitHub, Website) about the RFCs. One on abstract methods in traits, and one about an improvement to the tokenizer.

The RSS feed for this podcast is https://derickrethans.nl/feed-phpinternalsnews.xml, you can download this episode’s MP3 file, and it’s available on Spotify and iTunes. There is a dedicated website: https://phpinternals.news

Transcript

Derick Rethans 0:16

Hi, I’m Derick. And this is PHP internals news, a weekly podcast dedicated to demystifying the development of the PHP language. This is Episode 43. Today I’m talking with Nikita Popov yet again about a few RFCs that he’s produced for PHP 8. Good morning, Nikita. How are you doing?

Nikita 0:34

Good morning, Derick. I’m doing great.

Derick Rethans 0:37

I’ve given up on introducing you because we’ve done this so many times. Now, you don’t need an introduction any more. The first RFC I wanted to talk about a little bit this morning is the abstract trait methods validation RFC. What are traits?

Nikita 0:51

We usually talk about traits as compiler assisted copy and paste. Basically, we just take all the methods and properties from a trait and copy them into the class that’s using the trait. That’s a bit over simplified, in particular, you can use multiple traits in the single class. And those traits might be defining the same method, in which case you have to resolve the conflict in some way. So that’s where you have these insteadof or use annotations to specify precedents and aliases.

Derick Rethans 1:23

Traits has been in PHP for quite a long time. What is now the problem that you’re trying to solve through this RFC?

Nikita 1:29

The problem is that traits are sometimes not self contained. So to give a specific example, we have in the logger PSR, we have a trait called logger trait, which has a bunch of methods like warning, error, info, notice, and so on. So just simple helper methods, which all called the log method with a specific log level and this trait only specified these helper methods but still requires the actual class to implement the log method. The way you’ll usually indicate that is by adding an abstract method to the trait. You have all the methods you actually want to provide by the trait. And you have a number of abstract methods that the trait itself requires to work. This already works fine, but the problem is just that these methods are not actually validated, or they are only inconsistently validated. Even though the trait specifies this abstract methods, you could implement it in the class with a completely different signature.

Derick Rethans 2:30

Okay, just like any signature?

Nikita 2:32

Just like any signature right. The method still has to be present in some way. But the signature can be completely different. Could also be like different method type, like a static method, or an instance method.

Derick Rethans 2:43

Just basically checks for the name is what you’re saying?

Nikita 2:46

Yeah, it only checks with the name.

Derick Rethans 2:49

Is this the only place, is this the only time where these abstract methods are not being validated. Or are there other situations where that could happen as well?

Nikita 2:57

No, I think thi

Truncated by Planet PHP, read more at the original (another 25347 bytes)

Clustered Web Applications – Mysql and File replication – Alan Knowles

Article originally from rooJSolutions blog

In mid-2018, one of our clients asked if we could improve the reliability of their web applications. The system was developed by us and was hosted on a single server in Hong Kong. Over the last 5 years or so, the server had been sporadically unavailable due to various reasons

  • DDOS attack on the Hosting provider’s network
  • Hardware failure – both on the hosting machine and the provider’s network hardware.
  • Disk capacity issues


While most of these had been dealt with reasonably promptly, the service provided by our client to their customers had been down for periods up to a day. So we started the investigation into the solution to make this redundant and considerably more reliable.

the original (another 26317 bytes)