 All right, it's one o'clock. So welcome to the first feature session in the coding and development track. And let's all welcome Pierre-Pierre Joins, PHP core developer, who works, well, it says he works with the old dark force. Maybe he can explain it, but probably you all know. Pierre's here to talk about one thing, especially. So there's a lot of very successful PHP products and a lot of communities. And we all care about the quality of the language PHP, but there's not much contribution from those communities, like ours, Drupal, also Joomla, whatever, that try to improve the language PHP itself. And Pierre's here to convince us how easy that is. So I don't want to steal more of your time. Please go ahead. Good afternoon. Thank you for coming. So thank you for the introduction. So my name is Pierre-Joins or Joie, depending on which side of the attendee you are coming from. And I work mainly as a PHP core developer, working with Microsoft. That's what I call the old dark force, because I think the new one is another one with an Apple or something like that. And I work mainly on PHP itself. And everything I want PHP, MongoDB, Couch Base, or more known as CouchDB now. And Azure stuff, for example, for cloud, and so on. And I work like since 14 years or something like that on PHP or project like per, if you heard about it, for the older one. So yes, that's what I'm doing. Also, portability fan, what he tried to say is, I'm trying to make all these tools working well on every single platform, be Linux, PSD, SolarWindows, or Windows Azure, and so on. If you have any question, don't hesitate to contact me on Twitter or email. Usually I'm faster to answer on Twitter than mails. OK, so I will just begin. Before I always do that, I mean, in my talk here's a couple of questions. I think you all use PHP. That's a pretty sure thing. Which PHP version do you use, if I may ask? Who used PHP 4 still? The door is behind you, if you. So who used PHP 5.2? OK, 5.3. Hey, that's very good. 5.4, maybe? Very good as well. So for the record, PHP 5.3 is two times faster than 5.2. And 5.4 is two times faster than 5.3. And 5.2 is dead. For the few ones, we still use 5.2. So we don't do any longer security fixes or whatever else. Only distributions. But almost all new distributions are using now 5.3. And the next Debian will have 5.4, for example, as well. That's also a small miracle, by the way. I will explain in the first slide why. And who used Windows as well? Oh, quite a couple of guys. No, it's always more than usual. That's pretty good. Linux? OK, who used Cloud already? Amazon? Asia? 1.2. And all the cloud providers or something like that? No? OK. And who knows Vagrant or Vagrant? Who used it? OK, who plans to use it in the next couple of months or next years? OK, I think Vagrant is one of the next big things in cloud computing and testing and visualization. Take a look at it. It's Vagrant project.org, I think. If I remember correctly. So the first thing about PHP 4, I would just make three parts in my talk, or two parts in my talk. The first one is talking about the PHP project and how we can get involved. And the second part, more technical stuff, how to debug and contribute and so on. For years, we have been a very bad reputation from being some kind of asians or something like that. If I may say this word, but we were like that. And I'm talking about myself as well. So slow release or nobody's at all for months or years. And unsecure and all these kind of things. And all these things were pretty much true. And three years ago with Lukas Smith, maybe you will hear about him because he's working a lot on Synphony and CMS or CMF. And a couple of other core developers, we're talking about making the PHP projects better, the PHP organization better to ease new developers and new contributors to join us. The first thing we did is to create an IFC process. Who heard about it already? OK. The idea of an IFC process is exactly the same as what you have on the W3C, for example. Everyone can write one. And the next best thing is each IFC I've voted on. When it's accepted, it will get in the core or get in the given project. Without objects, nobody, no more single person can object to get a patch or feature in PHP if an IFC was accepted by the core developer and the communities. And the shots delay to get in a release. For example, you can see it in 4.5. Almost every feature we have in 4.5 was developed one year before the release. We are working now on 4.5. Sorry, 5.4. We are working now on PHP 5.5. And every single feature you will see has been developed or implemented since 4.5. 5.4. Or you can translate it. I will make it wrong. So the PHP.NET members can vote. If you are a documentation writer or the core developer or PICL or PUR, you can vote on it. And the communities can vote. That means as soon as you are a partner up on this project, an active contributor like Drupal or typo3, symphony, whatever else, even WordPress, you can ask to be one of the representatives of this project. This is a hard step because we are moving to a way where we are listening to our users. I mean, what our users are looking for or which features you would like to get for the next PHP version. The next thing we did after that is to have a release process. That means we do a lot more releases. Maybe you have notized it like 4.5. 5.4. We have already six releases for that. We just released 5.4.6. We are working on 5.4.7 now. And we do something like every month a new release with security fixes or small bug fixes and so on. The next thing is we do a yearly release for major version with new features like 5.4, 5.5, 5.6, and so on. So the next 5.5 will be around, I think, early next year with a lot of cool features. If you have a question about what features are coming, I can answer this question after the talk and so on. But I think there is a lot of things that will be useful for Drupal 8. And you can take a look at the IFC. Everything is described there, how it works, which we don't allow BCBREX, for example, anymore between small releases and so on, or even between 5.0 and 5.0 plus 1.0. We don't allow any breakage inside it. And we have now, and the security part, a lot of Linux distribution active in the security mailing list. It's a private list to discuss security issues. We have Microsoft people involved as well. So this is a hard step for us. We are now trying to get also projects like Drupal, core developers from Drupal to get involved as well in this area, because many security issues are found using projects like Drupal. Indeed, they are the targets. So we have to figure out a way to work together to fix these issues. And now a little bit history about how, since three years, before we were like almost old guys, the guys you always see at conferences and so on. And now we have, this is a top contributor in this time, in this period. This is a guy walking, he was walking for the Yau in China, I don't remember the name. And the two guys on the right, they don't matter anymore, but you have Gustavo and Anatoli, that they are the top five contributors in this period. I mean, with an amount of commit about a new amount of new features. And in this top five, three are new. They are younger than one year inside the project. Anatoli is working in my team as well. I mean, he works with me with Microsoft. I mean, just for the story to make my colleagues IP, two of the top five contributors are working with Microsoft on every single platform. That's also a kind of something was almost impossible five years ago. So, in short, you have no more issues, you can contribute very easily. If you don't know how or what to contribute, there is always a nice URL here, bugsp.net random, just select a random bug which is still open. There are quite some funny bugs. So, if you're feeling boring or something like that, you can always do that. You should do that for the Drupal bug tracker as well. And one of the parties, you don't have to be a C developer and so on, you can contribute very easily to the documentation online without knowing too much of dog book and so on. I will just show you a demo now. That's a quick screenshot here, but I won't say what I'm doing, but if I have a network, anyone with a laptop can access it already or not? Edit.sp.net or it's only me. If not, I will simply switch it. Okay, so I have, ah, only slow. Please stop to look at YouTube for a few seconds. Oh, it's working there, but not here. So, as you can see, you can sign in with Facebook. Don't worry, we don't take your personal data or whatever else, we don't sell it, or not officially. You can sign it with Google as well, or you can request an account or you can log in with your VCS, I mean Git account or version account or whatever else. Okay, so, and now you have here the online editor. You can just select the part you like to edit, make you, oh, okay, I know why it doesn't work now. I have to leave the, okay, I will simply show the screenshot then. So, you can select the part you, because it's still loading the page, I was not able to load it. You can select the part you like to edit. If you see, for example, a little dramatic mistake or typo or whatever else, you can edit online, save it. It will be online within one hour. There is moderation. I mean, you won't put your favorite URL inside the documentation, but it's a pretty easy way to contribute to the PG project, to document it. Did anyone know, heard about it before? Hear about it before? Or not, about this little project? No? Okay, so I hope to see many documentation contributions in the next couple of weeks or days or this afternoon. The next big step to ease contribution is the move to Git. Who knows what Git is, I think everyone. Okay, who used Git already? Okay, everyone using Drupal should use Git anyway. Drupal moved to Git as well, right? And just a little ad for a good friend who spent months to work on that. He migrated, almost still working on it. It's David Soryapawa, he did the migration from Subversion to Git and the GitHub firewall. That means you don't have to go on git.pg.net, you can use a GitHub directly to contribute to PHP. You can do a fork per request and so on. Who knows what the per request is on GitHub, or I mean, okay, if I have time at the end, I can make a small demo of how we can do it. The thing is very easy. You see the little fork button over on the white. I hope it's big enough. When you go on the PHP SRC project on GitHub, you just do a fork. You do a clone locally, you do a new modification, commit it, push it, and you can directly on the GitHub web page do a per request and we will see it directly. So, and we can merge it normally within one, a couple of days, what you have done will be merged directly if you have a wider test and so on. Who, by the way, who already contributes to PHP just to see if this, thank you. Only one, so this talk makes sense. Okay, any question until now? I mean, about the IFC or whatever else? For PHP itself? No. I try to convince them to do that, but they love DocBook. I don't know why, but the documentation team use DocBook since years because we have many, many other formats, but now Markdown is getting much better, but especially thanks to GitHub, you have a lot of good tools to convert from Markdown to PDF or HTML, Windows file, or Windows help files and so on. But I don't think it will happen anytime soon because we have a lot of documentation on DocBook. If you take a look at the repository, it's like, I don't remember, two gigabytes of docs in DocBook. Any other question? Okay, so let's talk about the call. I will make first a small introduction how PHP works internally. Just to explain a bit of the structure, our request works very simplified. Who knows already about that? I mean, oh, David knows that, what a surprise. And who else? Okay, so it may make sense. It's a very simplified version, so it's not, don't take it as, that's how PHP works, I switch some parts just to make it easier. The first thing is when you get a script from a web server or for the command line, it goes through CLI or Apache or IES and so on, the file will get compiled. If there is no syntax error or whatever, whatever else, it will go to the execution process and then you'll see what happens, for example, if there is a function call, it goes back to the execute loop for a function call, or if you have included a file require or include, or the include uns and so on, the compile method will be called again. That's how it works without any opcode cache. I will talk about the opcode cache later on the next slide. If you use APC, WinCache on Windows or eAccelerator and so on, that's the process how it works. So when a script comes in, first the opcode cache will check if we have already that in the cache, this file could be a request or the URL and so on. If not, it will call the then compiler, get so the symbol tables or the code table and store it in the cache and then send to the execution module and so on. And the same app will happen if you do a require or include, it will check if it's already in the cache and do the same process again. You can see it pretty easily if you do a little CD debugging to see how it works and so on. That's also why if you find a bug and you are using APC or another opcache, just try to test this bug again without the opcode cache to be sure there is no interference between the two. The same if you use xdebug and so on. I hope everyone use xdebug here. Who use xdebug for his development? Okay. You can send Derek Retins here. He is the main author of xdebug. Okay, when is it? Oh, okay. It's on the planning here. Okay, that could be a very interesting chance and because I think every single Drupal developer working seriously with PHP and Drupal should have a clue about how to debug and profiling PHP with xdebug. Be on Windows or Unix. And now, I will just make a small demo. This is a small, I first thought about using Drupal to make my demo when I thought, okay, it could be maybe to take too much time to figure out a bug inside. So I just took a very simple script and so everyone has to understand what this script is doing. Who does not? Okay. So, and I will use another extension from Derek to explain what an opcode is. So if you are against this crap. So, sorry. Okay, so I have to leave PowerPoint. I have to report this. I'm playing a risky life. I installed Windows 8 and the latest version of this. It's too small, huh? Ah, yeah, yeah. Thank you. You don't, you don't what? You don't have to. Okay, so it's called VLB what you see over there, over there. You can download from Derek Redham's website or on GitHub and we have the DLL for Windows on windows.php.net downloads as well. So, let's see if I can now. Okay, it's too big now. We just make the font smaller. 14, you say? So it should be better. Yeah. So it doesn't matter. We can still read it. Exactly. So we see the first part is the assign of the value of one, two, three, four, five, six to the A. Then we have the function call substring. If you call a userline function like your own function, you have another call for that. It's called userline, a userfunk. And then the echo and the unset var. And the return is the last exit. Let's allow you to see, for example, if you have a small script to figure out pretty quickly which part of the engine you are using in your script or and so on to compare how it works. It sounds a little bit complex, but it's very easy to understand. And then you can find out where this code is inside the engine. So that's for the VLD part. I will go back to, okay. The screenshot for those who did not see the. And a little explanation about the structure of the PHP source code as well is what you have in the core that means everything you don't activate inside your PHP and so on is what I would call or what we define as a PHP core core or the main part of PHP. That's what we have in Zend, the SAPI. SAPI is Apache, Ember, Endler, or IES, fast GICLI and so on. And also there is a couple of things you cannot disable. At least you cannot disable them on Unix. Like extandart, extdate, SPL, PCI, revag and reflection. SPL for those who don't know it's a standard PHP library. It's a kind of like where you have the iterators and so on. For the rest, I mean it's very well known. You have bundled extensions like ZIP in YNTL and so on. And then you have all the extensions coming from Pickel, GitHub, or something else that you could build or install using APT get or I don't know where it works on Mac but on Windows you can download the DLL and so on. Quick question. Who knows about YNTL? YNTL. Okay, I think if you symphony use it a lot as well as so and for Drupal 8, I think they will rely on that as well for Internet integration, localization. It's one very good Unicode support. It's an extension working with the ICU library. The ICU library is one of the IBM project. Now it's an open project for Unicode support. It deals with all the data management and localization and so on. Couple of people, Gustavo, Stas, Derrick too as well. I made some couple of things in there as well. I've made a very, very good job to integrate ICU inside PHP. So if you are working on this part of Drupal, take a look at that. Take a look at how it was going in symphony in symphony 2.1 and later. That's a pretty good start. A much easier than get text and so on for example. And one thing is very easy, I will get as well. If you don't know where a function is defined, indeed you can use grep or whatever. It's always easy, but sometimes there is a good tool called LXR. I hope I have a net connection if not I will show the screenshot. Cool. So you select the project you want and let's say I don't remember, we are looking for, I will explain what I'm doing now but you don't know where we substring the user line function substring because if you look for substrayer you will find all the C1 as well. So it's not very helpful. All one you have in the test and so on. But one way to figure out a function is if I remember correctly, if not there it can help me. You can add brackets and we have less results usually. And you can use regex and so on to define a smaller chart. And what I'm looking for is for the C5, string C for substring, this one. So we can find here and when you find it, can you read it or I think I can do it bigger I see. Okay, so now we have found as the network is too slow. But we have found using, so we have found where the string function is. It's still not loaded but we find it when you have a PHP function, PHP underscore function with the name of the function that's the name you have in the user line when you use a script for example. So long screen. Okay, I have to fix this stuff for PowerPoint it's been always designed. Okay, so and so you can very easily find where is it that's this part. PHP underscore function. At least from almost all functions there's a couple of functions which are in Zen and use something else or operators are not defined like that but that's another story we may talk about that after or if you have questions afterwards. And one of the main issues many of the people I met are trying to find or figure out our memory leaks. For example, you are especially with big application you are wondering why you use so much memory why it keeps growing I don't know how to fix it or I don't know if my script has a memory leak and so on. So I will try to show you how to see a memory leak inside a small script. I will keep using the script I showed you before the substring one. And this is the command who knows about Valgrind or Valgrind, I will say it, I don't remember. So I think every C developer know it and for all the north non-C developer it looks like a bit like Shinazer or very hard to understand but it's very easy to, I mean it's very easy to use and I will just show you a little demo now. And I will show first demo on Unix and then on Windows using another tool than Valgrind but so I just compiled a fresh checkout of a clone of PHP this morning. And as far as I remember I already did a leak somewhere. Yes. With that? We don't have leaks, do we? No, it's a wild couple. So there is one thing about memory leak I won't explain today but I gave at the end of the deck there is a resources page and there is a link to our wiki explaining how the memory management works in PHP because that would be a talk in its own garbage collection and so on but this page explains that it's being very, very well. It's been written by Lawrence, the Shinazer guide I showed you before. It was a very good explanation of how things work inside PHP. So you can understand how when you create a variable when it will be destroyed and so on and so on. So I just removed the leak. Who knows how to compile PHP by the way or I have to show it. Who does not know how to compile PHP? Okay, I'll just make a quick. The easy part is to just call in this case, I can make bigger this time I think. Is it easier to read like that or? Okay, so the easier way when you test a core feature, like not something in an extension, you just disable everything and enable CLI for example. CLI gives you as well but since PHP 5.4 you have a web server inside PHP CLI. Who knows about it? It's very, very handy to test. I remember a blog post about how to use Drupal with this web server. It's very easy. Just you run it on the CLI, PHP storm works with it as well now so you don't have to install Apache or whatever else to test the script. So you just run it, take some time. You don't have to read everything happening here. Only if you have an error or something like that. If you don't know which option to use, you can find it either in the documentation. Every single configure option is documented on in the PHP manual. Or if you have to use a custom extension like something from GitHub or other repositories. A few seconds left. That's a tool called AutoTools on Unix. That's something I really like, would like to kill. That's the worst tool I have ever heard of. I've ever used before. And then you just run make. That will call and make file and compile all the files you selected. Yeah, no, not if you disable everything. If you compile PHP with every single extension in a virtual machine on my small laptop. It's an i7, but I still need like 10 minutes or something like that to compile everything. On a single core, if you have many core at home, you can use this option. For example, let's say you have a four core minus J4. And if you use all the four cores to compile. It's not exactly four time faster, but it's definitely 30% faster. So you get your PHP version here. On SAP ICLI PHP, I don't want this version. You can see now if it's built correctly, it's 4.0, 4.5.0. No, I won't make it today with that. And that you can always check the time when the build was done. And now you can always check the built-in module because you don't get them, and now I don't remember if you get, but you don't always get them warning if one of the options did not work out. So you can always check which modules has been built in or not. But I don't remember if 5.4 has now an option if you do a configure or something. We enabled something, but it was not possible to enable it. I don't remember if you get the warning. On Windows, you get it now, but I don't remember. And just for the record, I will show you now on Windows. You are right, that's my, it's a new box. I made Aliases now. I have LAS and so on on Windows and Unix, because I keep switching the command. So the same thing is, the first thing I forgot to say is, but you can find it in the realme, you have to do a build, come. So it will generate the configure script. Then exactly just like on Unix, and I do disable all and enable CLI. Only one option I do as well on Windows is I disable the thread safe mode. It's another story, we can talk about that later. And enable the debug mode, sorry. Oh, thank you. So, and the good thing on Windows, I tried to pause that to auto-tools, but I gave up, it was too painful. You got a summary directly after the configure line, so you know what you have enabled, which SAPI, which compiler you are using. I'm using the latest Visual Studio. I did not commit that part, so if you have 2012 now, it won't build. It won't run the configure, but tonight it will be possible. And which architecture? You can also build your 64 and so on. And then you can compile. Ah, yes. I will clean it up. Okay, I will let it build and go back to Unix in the meantime. Okay, so now we have our small PHP. Minimalize, that means no hard stuff. It's easy to test. And the same script I showed you before, if you have any questions, stop me. This is a script, sort of the same as before. If you'd like to run it, I mean everyone, I think, know how to run a script in the CLI. It works perfectly. Now let's see if we have a memory leak here. First, I used no option just to see if there were leak. It's a little bit faster to just run while going without any option, but you just see, for example, if you have any use at exit, zero bytes in zero blocks, that means we don't have a memory leak right now. But if you see one, you can use other option. And like, what was the name for the seven one? Okay, so we can now just, we say S. We get a more furbows report, but still nothing. So I will just do, as we don't have a leak in PHP anyway, I will just create one. Yes, I know, but it's easier to make. You know, I could call leak, but it doesn't help for my demo afterwards. There is one. Oh, that's cool. Okay, we don't need that. So where is, am I in substring? No. Okay, here is the PHP function substring. You don't have to understand everything going on here, but it's very easy to, I will just create one here. So what I did is just to allocate some memories, one K. Just have to recompile, to be faster because it just want to compile string C. It sounds hard to do that. I mean, but if you do it a couple of times, it's very easy to see, oh, I have a memory leak or maybe I just, just my code is bad. It's not about PHP being using too much memory and whatever else. And then you come in the game with xdebug to see, okay, if I use really too much memories and where, how and so on. And the integration between xdebug, PHP storm, or that's my favorite IDE, but there are other ones. And yet, yet then you use like xcash, green and so on to visualize your memory usage. It's very easy to understand where you do a per application or using more memory and so on. So, okay. First the fast version or almost faster. So, we have 1044 bytes, obviously. And now, when you have that, it's not very useful. So, the question is, where the hell is the leak? So, that's where you get, I don't remember if I, it's a debug version. So, I do a full check leak, memory, full check for memory leaks and you get a very nice report telling you exactly on which line in which source code you did an alloc, which was not free. That means as an end user, within 10 minutes you can send us information with a small script telling us, hey, guys, you have a memory leak here and one of the, any code developers, me, Derek, Stas, anyone else seeing such a bug report with a small script, get fixed usually in one, two days, because it's very easy for us to fix when we have such things. Indeed, when you come and say, okay, I have Drupal, sevens, blah, blah, blah, with 20,000 plugins and blah, blah, and you say, I have a memory leak. I think you can wait forever to get these leaks fixed. So, the main part of, I mean, after this talk is really to attend, Derek talked, to see how you can debug your script to create very small, reproduced script to, small, very, very small script so we can use it easily. Because we don't have the time or resources to debug with Drupal or Synphony or Type O3 or WordPress or whatever else. Any question until now? GDB is my next step. Oh, the question was, okay there. The question was if we use GDB as well. So, I will show you, GDB is a debugger for C and, I think, for the language as well. You can use it with Xdebug, I think, too. Not anymore. Anyway, it's a kind of, it's a debugger, like just like a common line debugger. You have a graphical front end as well. But we will use GDB to debug when PHP crashes or when PHP has some more logic issues or design issues and we have to figure out what's the flow PHP is following. But to detect memory leaks and so on, GDB is not very, very useful. I mean, it's useful to debug afterwards why we have a memory leak because it's not always easy as it is now. So you have to use a debugger to see where the allocation happens really. I will show how to use it afterwards in the next slide. I think I'm still in time. Yes, oh, no, I have to hurry up a little bit. So, so why you can see it's very easy now to figure out where it is. You copy of this text in a bug report and you can even fix it yourself. So many times you just see it in small function, you see if free is missing or free is missing, you can create a patch in two minutes and that's it. Who finds that difficult to do or easy? Nobody finds that easy, okay. So, I will just remove the leak so we don't have too many issues here. I won't do the demo on Windows, but you saw that to compile it is very easy. I mean, just as easy as on Unix. You'd only have to accept if you use the latest Visual Studio that changed so many things that it's not, you need Visual Studio to compile PHP on Windows now with 2012. If you use 2009 on the old Windows SDK, you can just download the Windows SDK and you can compile Windows. You can compile PHP or any libraries on Windows easily. It's not the case anymore now. But on Windows, there is a tool called memory validator. For people working on PHP.NET, I can get the licenses as well. So you can, this is what you get. There is a couple right now, for example, in the 54543, there is a couple of memory leaks in the registry and link stuff. This is what you get as a report tool. So you just do exactly the same as Valguine. You call PHP with a command line or you attach to a service or to a process or to Apache or whatever else. And you just do a hook and just type Valguine and give you all the reports. The good thing about memory validator, it also checks if all the handles, like file handles, resources, image, bitmap and whatever else you are using or PHP is using or external library are using. And you can figure out, for example, I found many bugs, for example, in Oracle libraries or MySQL in the beginning because they have had many leaks. They are not closing files and so on. And indeed, when you use MySQL 20 hours a day and you have vendor leaks at the end of the week at one point, the server just crashed. So it's a very handy tool. Okay, the next step is also something happening quite often now if you are using a 5.4 and APC or some features with traits and so on. That means working with Drupal 8 or Synchrony 2. Secfold. The tool is what you asked before, is JDB. And this is what you see. It's a bit small, but I will just show you now. The same demo, but using... Oh, I will make the Windows version is pretty easy. So I will do the fast way to create a crash. So we have the substring. Let's say we have something bad and we have null pointer here. Oh, and there is a bug in Visual Studio now. No, I know, I forget to change it. I know what the bug is. It doesn't support this because we are adding meta-information to the library and somehow the link in Visual Studio 2012 doesn't support it. So it's compiled. And the difference is on Windows you can have many builds inside the same directory. You can do that on Linux as well. I can show you after the talk. So I just build a debug one and I have PHP here and I will call my little script. Okay, I got a crash and it doesn't want to use Visual Studio anymore, okay? No, it should call the debugger directly now. I don't know why it doesn't do it anymore. Anyway, so usually what you get here I will show you the screenshot after. Yeah, you get directly the crash. There's an application inside Visual Studio. I will show you the screenshot now. That's always the case when I use the latest software I can get. So this is a screenshot. When the crash happened, I just show you Visual Studio opens. Just show you a back trace which is the down white part of the screen. You can copy past as well that in the bug tracker. And where is the source code is? The good thing in Visual Studio is also you can find, if you see a bug and you see directly in the editor, you can change the code and it will compile live and you can continue the debugging. That means you just fix the bug, change the value, whatever else it will do a live compiling and you continue the debugging where you were. It will take the same context and so on. That's a pretty cool feature. It's even better now on 2012 when it works. But right now it's not working very well. I have to check why. This is now back to the unique session. Okay, so let me do the same crash. Okay, the same crash that I did before is to reset the pointer. It's where the string will be returned. The string you get from a substring is stored in str. str. So I call the script segmentation fold. We all have seen that in our logs or in the CLI or whatever else. You can do again using Valgrind. Valgrind will tell you that you have some illegal access. As far as I remember, yes. On the line on the top here. That means it's telling you that you are trying to access a memory not allocated. And now the problem is when you do a bug report, it's usually an OS with such an easy bug. It's an OS for us as a back as a information but usually we need a back trace. The back trace is what we have seen before with Visual Studio. So I will do the same now with GBB. I set the arguments, I mean, what I'm giving to PHP as a script. And now it tells me, it tells me, told me, okay, you have a sec fold here and you can say BT for back trace and you get the same information as you had before. That means the same line is just a little bit less visible but you have some plug-ins also when you can have highlight string and so on to see that better. And now you get directly a back trace where the crash happened. It's not with 5.4, it's a little bit harder to see where the crash actually happened because you have another kind of function called. But it's very easy now to still see on the line string. Let's see 22.75, so you see where we, when we see here, that's the call where we were. Sorry, down there, that's the line 22.75. So using a simple GBB, get the back trace, you know exactly where the crash happened and you can begin to debug. Now, how to debug? When you have a complex issue to really debug it, it's a little bit harder. So you have to learn C and something like that but only with these steps, you can get one of your critical bugs for your projects or your production system to fix in very, very short time because we won't do that for you. I mean, to get a small script and so on. If you have any question, for example, to go further or to use GDB to do breakpoints and so on, you can either ask Derek or me anytime per email on the main internet menu list or at the conference here. Someone asked me if I can do a workshop or whatever else or hacking session with such things. We'll be available in tomorrow and today for that. So I am sorry, I just took a part of the question part. I mean, it's already 10 to two. So do you have any question on these two peaks or maybe on the first part of the talk? Or you can use the same tools with Apache as well. If you use Apache, you can call Apache using Valgrind or GDB as well. It's very well described on bugspish.net how to do it. Any question? So the question is about another topic which is certainly more interesting for us is which new features are coming to 5.5? It's nothing is decided right now, but one, a couple of things are certainly coming is like generators, getters setters, in which form we don't know, but new getters setters are certainly coming in. Finally, it's always the, you know, exception in PHP. Okay. The finale keyword is already committed. Let's, what I forget. There is many, many new cool stuff in YNTL for Unicode support and so on. You can see that, let me show you. If you go on the wiki, we don't have a direct link to the IRC. Ah, we do. When you go here, I don't find it. You have a description of all IRC which are under discussion and voting phase that you are voting on it and so on. OAPart is one of the new function. Something to use a new function for each and away as unused list. It was not possible to use list before inside a for each. And some, a couple of thing is the generators, it's like, you know who use Python, for example, with yield and so on. That's something you can see on the IRC, wikiphp.net IRC generators. There is one very cool thing. It's a .NET like getter setter. I really love this feature. That's something many, many developer askers. And we are discussing now how the best way, what's the best way we can implement it easily. That means we have the flexibility of what we have in .nc-sharp. We show you here. Incident simply declaring, for example, public hours and using the underscore underscore get underscore underscore set. You can define a method directly as well. So you don't have to do this hudge, use switch case to if blah blah blah or whatever else. You can do read-only properties very easily as well. And the question now is how to make it easier. For example, with only a read-only keyword and stuff like that. We have the question, Derek was asking about this read-only stuff. The question now is whether we should add another keyword called read-only to define a read-only property instead of you or not defining a setter or not define. This is a getter and setter. So you can, when you don't define a setter, that means the property will be read-only. So that someone immediately say, oh, we can simply add a keyword called read-only and that's it. Like it's done I think in Java or C++ or one of the other design. So, and this is the kind of features we are getting plus a couple of performance improvement, including on Windows or sweet-safe SAPI, could be much faster with 5.5 as well. Does that answer your question? Okay, any other question? Any kind of topic? Okay, PHP related I mean. Yes, two times faster. Only my only worry right now is, no, compatibility is 100%. As we said before is through the release process IFC, we don't allow backward compatibility breakage between what is it. The next one with breakage will be a six or whatever is a big one. There is maybe small stuff, very, very small, but something like features you should not use at least not in the last 10 years. That may not work as well as before. Yeah, but we, I mean, if there are features from PHP 4, PHP 4 is dead, PHP 5 is dead, PHP 5.2 is dead. And we made this release. I mean, I know Drupal is the same problem in WordPress. I got the same description with WordPress guide, I said, okay, clean your mess. I mean, if you are in production, if you are in production and you could still realize on PHP 4 or PHP 5, zero features, you have a problem, much problem, much bigger than some small incompatibilities. And I'm talking about security issue. So, but if you use 5.3 and you move to 5.4, you have no issue. The U-cuts runs smoothly without issue. And David May, yeah, that's also one of the goal of this talk. No, but you can come here. David, come around. By the way, is someone from the QA team here, from Drupal? Testing team in Drupal? Because what we have done for Symphony, Doctrine, and many other projects, we are testing snapshot of PHP using released version of Drupal. We do that with Drupal as well, but we would like to test old version of Drupal to test with snapshot of PHP to see that everything is working fine. What David means is, for example, now we released 5.4.6. Maybe we broke something, but we didn't know. That means the idea is to test the old Drupal version using all release candidates of PHP before we go final to be sure that we did not break anything. We do that now with WordPress, Symphony, Doctrine, Propel, Type O3, and so on. So it would be awesome to do that as well with Drupal. Okay, I'm done. Okay, it's already three. Sorry for taking some of your time. Thank you.