[PRES] [presentations] master: DPC talk, and PHP talks for phpDay and IPC

[email protected] (Derick Rethans) Sun, 4 May 2025 17:45:03 +0000
Newsgroups php.pres
Message-ID <[email protected]>
Author: Derick Rethans (derickr)
Date: 2025-05-04T18:34:16+01:00

Commit: https://github.com/php/presentations/commit/6380e3233b2c687aff5f1deaab807b990adf7791
Raw diff: https://github.com/php/presentations/commit/6380e3233b2c687aff5f1deaab807b990adf7791.diff

DPC talk, and PHP talks for phpDay and IPC

Changed paths:
  A  php-ipc25.xml
  A  php-phpday25.xml
  A  slides/internals/php85-asymmetric-visibility-static.xml
  A  slides/internals/php85-attributes-on-constants.xml
  A  slides/internals/php85-closures-in-constant-expressions.xml
  A  slides/internals/php85-fcc-in-constant-expressions.xml
  A  slides/internals/php85-grapheme-levenstein.xml
  A  slides/internals/php85-grapheme-levenstein2.xml
  A  slides/internals/php85-nodiscard-attribute.xml
  A  slides/internals/timeline-2025-05.png
  A  xdebug-dpc25.xml
  M  slides/internals/php84-policy-repository.xml
  M  slides/internals/php84-release-cycle.xml
  M  slides/mongodb/me.xml


Diff:

diff --git a/php-ipc25.xml b/php-ipc25.xml
new file mode 100644
index 00000000..b62777c9
--- /dev/null
+++ b/php-ipc25.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title>What's New in PHP 8.[45]</title>
+<event>International PHP Conference</event>
+<location>Berlin, Germany</location>
+<date>June 4th, 2025</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<mastodon>@[email protected]</mastodon>
+<url>https://derickrethans.nl/talks/php-ipc25</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+
+Syntax:
+
+https://wiki.php.net/rfc/asymmetric-visibility-v2
+<slide>slides/internals/php84-asymmetric-visibility.xml</slide>
+<slide>slides/internals/php84-asymmetric-visibility-2.xml</slide>
+
+https://wiki.php.net/rfc/static-aviz
+<slide>slides/internals/php85-asymmetric-visibility-static.xml</slide>
+
+https://wiki.php.net/rfc/property-hooks
+<slide>slides/internals/php84-property-hooks.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-1.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-2.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-3.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-4.xml</slide>
+
+https://wiki.php.net/rfc/new_without_parentheses
+<slide>slides/internals/php84-new-without-parentheses.xml</slide>
+
+https://wiki.php.net/rfc/closures_in_const_expr
+<slide>slides/internals/php85-closures-in-constant-expressions.xml</slide>
+
+https://wiki.php.net/rfc/fcc_in_const_expr
+<slide>slides/internals/php85-fcc-in-constant-expressions.xml</slide>
+
+Major additions:
+
+https://wiki.php.net/rfc/domdocument_html5_parser
+<slide>slides/internals/php84-dom-html5.xml</slide>
+
+<!--
+https://wiki.php.net/rfc/improve_callbacks_dom_and_xsl
+<sl ide>slides/internals/php84-dom-callbacks.xml</slide>
+
+https://wiki.php.net/rfc/lazy-objects
+<slide>slides/internals/php84-lazy-objects.xml</slide>
+-->
+
+https://wiki.php.net/rfc/jit-ir
+<slide>slides/internals/php80-jit.xml</slide>
+<slide>slides/internals/php84-jit.xml</slide>
+
+Minor additions:
+
+https://wiki.php.net/rfc/deprecated_attribute
+<slide>slides/internals/php84-deprecated-attribute.xml</slide>
+
+https://wiki.php.net/rfc/attributes-on-constants
+<slide>slides/internals/php85-attributes-on-constants.xml</slide>
+
+https://wiki.php.net/rfc/marking_return_value_as_important
+<slide>slides/internals/php85-nodiscard-attribute.xml</slide>
+
+https://wiki.php.net/rfc/pdo_driver_specific_subclasses
+<slide>slides/internals/php84-pdo-subclass.xml</slide>
+
+<!--
+https://wiki.php.net/rfc/new_rounding_modes_to_round_function
+<slide>slides/internals/php84-round-modes.xml</slide>
+-->
+
+https://wiki.php.net/rfc/bcrypt_cost_2023
+<slide>slides/internals/php84-bcrypt-cost.xml</slide>
+
+https://wiki.php.net/rfc/grapheme_str_split
+<slide>slides/internals/php84-grapheme-str-split.xml</slide>
+<slide>slides/internals/php84-grapheme-str-split-2.xml</slide>
+<slide>slides/internals/php84-grapheme-str-split-3.xml</slide>
+
+https://wiki.php.net/rfc/grapheme_levenshtein
+<slide>slides/internals/php85-grapheme-levenstein.xml</slide>
+<slide>slides/internals/php85-grapheme-levenstein2.xml</slide>
+
+Deprecations:
+
+https://wiki.php.net/rfc/deprecate-implicitly-nullable-types
+<slide>slides/internals/php84-deprecate-implicitly-nullable-types.xml</slide>
+
+https://wiki.php.net/rfc/unbundle_imap_pspell_oci8
+
+
+Policy:
+
+https://wiki.php.net/rfc/policy-repository
+<slide>slides/internals/php84-policy-repository.xml</slide>
+
+https://wiki.php.net/rfc/release_cycle_update
+<slide>slides/internals/php84-release-cycle.xml</slide>
+
+<slide>slides/internals/questions-new.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>
diff --git a/php-phpday25.xml b/php-phpday25.xml
new file mode 100644
index 00000000..b8cfddca
--- /dev/null
+++ b/php-phpday25.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title>What's New in PHP 8.4 (and PHP 8.5)!</title>
+<event>phpDay</event>
+<location>Verona, Italy</location>
+<date>May 15th, 2025</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<mastodon>@[email protected]</mastodon>
+<url>https://derickrethans.nl/talks/php-phpday25</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+
+Syntax:
+
+https://wiki.php.net/rfc/asymmetric-visibility-v2
+<slide>slides/internals/php84-asymmetric-visibility.xml</slide>
+<slide>slides/internals/php84-asymmetric-visibility-2.xml</slide>
+
+https://wiki.php.net/rfc/static-aviz
+<slide>slides/internals/php85-asymmetric-visibility-static.xml</slide>
+
+https://wiki.php.net/rfc/property-hooks
+<slide>slides/internals/php84-property-hooks.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-1.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-2.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-3.xml</slide>
+<slide>slides/internals/php84-property-hooks-example-4.xml</slide>
+
+https://wiki.php.net/rfc/new_without_parentheses
+<slide>slides/internals/php84-new-without-parentheses.xml</slide>
+
+https://wiki.php.net/rfc/closures_in_const_expr
+<slide>slides/internals/php85-closures-in-constant-expressions.xml</slide>
+
+https://wiki.php.net/rfc/fcc_in_const_expr
+<slide>slides/internals/php85-fcc-in-constant-expressions.xml</slide>
+
+Major additions:
+
+https://wiki.php.net/rfc/domdocument_html5_parser
+<slide>slides/internals/php84-dom-html5.xml</slide>
+
+<!--
+https://wiki.php.net/rfc/improve_callbacks_dom_and_xsl
+<sl ide>slides/internals/php84-dom-callbacks.xml</slide>
+
+https://wiki.php.net/rfc/lazy-objects
+<slide>slides/internals/php84-lazy-objects.xml</slide>
+-->
+
+https://wiki.php.net/rfc/jit-ir
+<slide>slides/internals/php80-jit.xml</slide>
+<slide>slides/internals/php84-jit.xml</slide>
+
+Minor additions:
+
+https://wiki.php.net/rfc/deprecated_attribute
+<slide>slides/internals/php84-deprecated-attribute.xml</slide>
+
+https://wiki.php.net/rfc/attributes-on-constants
+<slide>slides/internals/php85-attributes-on-constants.xml</slide>
+
+https://wiki.php.net/rfc/marking_return_value_as_important
+<slide>slides/internals/php85-nodiscard-attribute.xml</slide>
+
+https://wiki.php.net/rfc/pdo_driver_specific_subclasses
+<slide>slides/internals/php84-pdo-subclass.xml</slide>
+
+<!--
+https://wiki.php.net/rfc/new_rounding_modes_to_round_function
+<slide>slides/internals/php84-round-modes.xml</slide>
+-->
+
+https://wiki.php.net/rfc/bcrypt_cost_2023
+<slide>slides/internals/php84-bcrypt-cost.xml</slide>
+
+https://wiki.php.net/rfc/grapheme_str_split
+<slide>slides/internals/php84-grapheme-str-split.xml</slide>
+<slide>slides/internals/php84-grapheme-str-split-2.xml</slide>
+<slide>slides/internals/php84-grapheme-str-split-3.xml</slide>
+
+https://wiki.php.net/rfc/grapheme_levenshtein
+<slide>slides/internals/php85-grapheme-levenstein.xml</slide>
+<slide>slides/internals/php85-grapheme-levenstein2.xml</slide>
+
+Deprecations:
+
+https://wiki.php.net/rfc/deprecate-implicitly-nullable-types
+<slide>slides/internals/php84-deprecate-implicitly-nullable-types.xml</slide>
+
+https://wiki.php.net/rfc/unbundle_imap_pspell_oci8
+
+
+Policy:
+
+https://wiki.php.net/rfc/policy-repository
+<slide>slides/internals/php84-policy-repository.xml</slide>
+
+https://wiki.php.net/rfc/release_cycle_update
+<slide>slides/internals/php84-release-cycle.xml</slide>
+
+<slide>slides/internals/questions-new.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>
diff --git a/slides/internals/php84-policy-repository.xml b/slides/internals/php84-policy-repository.xml
index 781f632d..27fa0025 100644
--- a/slides/internals/php84-policy-repository.xml
+++ b/slides/internals/php84-policy-repository.xml
@@ -11,14 +11,4 @@
 <div effect="fade-in">
 <blurb class="big-centre">%https://github.com/php/policies%</blurb>
 </div>
-
-<break lines="4"/>
-<div effect="fade-in">
-<blurb>Still to do:</blurb>
-
-<list>
-	<bullet>Rewrite documents to be statements of facts instead of intent</bullet>
-	<bullet>Figure out which information isn't written down authoritativily yet</bullet>
-</list>
-</div>
 </slide>
diff --git a/slides/internals/php84-release-cycle.xml b/slides/internals/php84-release-cycle.xml
index 6f6d4914..fa64e347 100644
--- a/slides/internals/php84-release-cycle.xml
+++ b/slides/internals/php84-release-cycle.xml
@@ -2,7 +2,7 @@
 <title>Release Cycle Update</title>
 
 <div effect="fade-out">
-<blurb>Current:</blurb>
+<blurb>Before:</blurb>
 
 <list>
 	<bullet>2 + 1 years of support</bullet>
@@ -26,10 +26,8 @@
 </div>
 
 <div effect="fade-in">
-<break lines="2"/>
-<blurb class="center">Effective Immediately</blurb>
-<break/>
-<image filename="timeline-2024-11.png"/>
+<break lines="3"/>
+<image filename="timeline-2025-05.png"/>
 </div>
 
 </slide>
diff --git a/slides/internals/php85-asymmetric-visibility-static.xml b/slides/internals/php85-asymmetric-visibility-static.xml
new file mode 100644
index 00000000..4e8fe84b
--- /dev/null
+++ b/slides/internals/php85-asymmetric-visibility-static.xml
@@ -0,0 +1,26 @@
+<slide>
+<title>PHP 8.5: Asymmetric Visibility for Constants</title>
+
+<blurb>Was missing in PHP 8.4, but turned out to be easy.</blurb>
+
+<example><![CDATA[<?php
+class Example
+{
+    public private(set) static string $classTitle = 'Example class';
+
+    // Implicitly public-read, just like object properties.
+    protected(set) static int $counter = 0;
+
+    public static function changeName(string $name): void
+    {
+        // From private scope, so this is allowed.
+        self::$classTitle = $name;
+    }
+}
+
+print Example::$classTitle; // Allowed.
+
+Example::$classTitle = 'Nope'; // Disallowed.
+?>]]>
+</example>
+</slide>
diff --git a/slides/internals/php85-attributes-on-constants.xml b/slides/internals/php85-attributes-on-constants.xml
new file mode 100644
index 00000000..1a150764
--- /dev/null
+++ b/slides/internals/php85-attributes-on-constants.xml
@@ -0,0 +1,54 @@
+<slide>
+<title>PHP 8.5: Attributes on Constants</title>
+
+<div effect="fade-out">
+<blurb>Since PHP 8.0, attributes can be set on:</blurb>
+
+<list>
+	<bullet>functions ~(including closures and short closures)~</bullet>
+	<bullet>classes ~(including anonymous classes), interfaces, traits~</bullet>
+	<bullet>class constants</bullet>
+	<bullet>class properties</bullet>
+	<bullet>class methods</bullet>
+	<bullet>function/method parameters</bullet>
+</list>
+</div>
+
+<div effect="fade-in">
+<blurb>PHP 8.5 adds:</blurb>
+<list>
+	<bullet>non-class constants:</bullet>
+</list>
+
+<example><![CDATA[<?php
+#[\MyAttribute]
+const Example1 = 1;
+?>]]></example>
+
+</div>
+
+<div effect="fade-in">
+<blurb>Not allowed:</blurb>
+
+<example><![CDATA[<?php
+#[\MyAttribute]
+const Example2 = 2,
+    Example3 = 3;
+
+#[\MyAttribute]
+define('Example1', 1);
+?>]]></example>
+
+</div>
+
+<div effect="fade-in">
+<blurb>This also adds:</blurb>
+
+<example><![CDATA[
+\Attribute::TARGET_CONSTANT
+]]></example>
+
+</div>
+
+
+</slide>
diff --git a/slides/internals/php85-closures-in-constant-expressions.xml b/slides/internals/php85-closures-in-constant-expressions.xml
new file mode 100644
index 00000000..f8bd4d00
--- /dev/null
+++ b/slides/internals/php85-closures-in-constant-expressions.xml
@@ -0,0 +1,31 @@
+<slide>
+<title>PHP 8.5: Closures in Constant Expressions</title>
+
+<example><![CDATA[<?php
+function slugger(
+    string $input,
+    array $callbacks = [
+        static function ($value) { return \strtolower($value); },
+        static function ($value) { return \preg_replace('/[^a-z]/', '-', $value); },
+        static function ($value) { return \trim($value, '-'); },
+        static function ($value) { return \preg_replace('/-+/', '-', $value); },
+    ]
+) {
+    foreach ($callbacks as $callback) {
+        $input = $callback($input);
+    }
+    return $input;
+}
+ 
+var_dump(slugger('Hello, World!')); // string(11) "hello-world"
+?>]]></example>
+
+<div effect="fade-in">
+<list>
+    <bullet>They must be %static%</bullet>
+    <bullet>They may not include variables from the surrounding scope<br/>no:
+%use($foo)%, nor: short closures (%fn … =>%)</bullet>
+</list>
+</div>
+
+</slide>
diff --git a/slides/internals/php85-fcc-in-constant-expressions.xml b/slides/internals/php85-fcc-in-constant-expressions.xml
new file mode 100644
index 00000000..c7e0d661
--- /dev/null
+++ b/slides/internals/php85-fcc-in-constant-expressions.xml
@@ -0,0 +1,31 @@
+<slide>
+<title>PHP 8.5: First Class Callables in Constant Expressions</title>
+
+<example><![CDATA[<?php
+function slugger(
+    string $input,
+    array $callbacks = [
+        \strtolower(...),
+        static function ($value) { return \preg_replace('/[^a-z]/', '-', $value); },
+        static function ($value) { return \trim($value, '-'); },
+        static function ($value) { return \preg_replace('/-+/', '-', $value); },
+    ]
+) {
+    foreach ($callbacks as $callback) {
+        $input = $callback($input);
+    }
+    return $input;
+}
+ 
+var_dump(slugger('Hello, World!')); // string(11) "hello-world"
+?>]]></example>
+
+<div effect="fade-in">
+<list>
+    <bullet>They must be free-standing functions or %static% methods</bullet>
+    <bullet>%__callStatic()% methods,<br/>or % [ClassName::class, 'methodName'](...)% is not supported</bullet>
+</list>
+</div>
+
+</slide>
+
diff --git a/slides/internals/php85-grapheme-levenstein.xml b/slides/internals/php85-grapheme-levenstein.xml
new file mode 100644
index 00000000..e0cce810
--- /dev/null
+++ b/slides/internals/php85-grapheme-levenstein.xml
@@ -0,0 +1,58 @@
+<slide>
+<title>PHP 8.5: Levenstein</title>
+
+<div effect="fade-out">
+<example result="0"><![CDATA[<?php
+$myName =        'Derick';
+$notMyName =     'Derrick';
+$alsoNotMyName = 'Dirk';
+
+echo levenshtein($myName, $notMyName), "\n";
+echo levenshtein($myName, $alsoNotMyName, 100, 10, 1), "\n";
+?>]]></example>
+
+<example inline="2"><![CDATA[
+%  1%
+%|000099|0||009900|1||990000|2|%
+%┃┃┗━ deletion%
+%┃┗━━ replacement%
+%┗━━━ insertion%
+
+D|990000|er|i|009900|c|k
+Di|009900|r|k
+]]></example>
+</div>
+
+<div effect="fade-in">
+<example result="0"><![CDATA[<?php
+$flagUA = '🇺🇦';
+$flagPS = '🇵🇸';
+
+echo levenshtein($flagUA, $flagPS, 1, 10, 100), "\n";
+?>]]></example>
+</div>
+
+<div effect="fade-in">
+<example>20</example>
+
+<example inline="2"><![CDATA[
+%|cccccc|0||009900|2||000099|0|%
+%┃┃┗━ insertion%
+%┃┗━━ replacement%
+%┗━━━ deletion%
+]]></example>
+</div>
+
+<div effect="fade-in">
+<example><![CDATA[<?php
+echo bin2hex($flagUA), "\n";
+echo bin2hex($flagPS), "\n";
+?>]]></example>
+
+<example inline="2">
+f09f87|009900|ba|f09f87|009900|a6|
+f09f87|009900|b5|f09f87|009900|b8|
+</example>
+</div>
+
+</slide>
diff --git a/slides/internals/php85-grapheme-levenstein2.xml b/slides/internals/php85-grapheme-levenstein2.xml
new file mode 100644
index 00000000..a614c174
--- /dev/null
+++ b/slides/internals/php85-grapheme-levenstein2.xml
@@ -0,0 +1,23 @@
+<slide>
+<title>PHP 8.5: grapheme_levenstein</title>
+
+<example result="0"><![CDATA[<?php
+$flagUA = '🇺🇦';
+$flagPS = '🇵🇸';
+
+echo grapheme_levenshtein($flagUA, $flagPS, 1, 10, 100), "\n";
+?>]]></example>
+
+<div effect="fade-in">
+<example>10</example>
+
+<example inline="2"><![CDATA[
+%|cccccc|0||009900|1||000099|0|%
+%┃┃┗━ insertion%
+%┃┗━━ replacement%
+%┗━━━ deletion%
+]]></example>
+
+</div>
+
+</slide>
diff --git a/slides/internals/php85-nodiscard-attribute.xml b/slides/internals/php85-nodiscard-attribute.xml
new file mode 100644
index 00000000..6e15b52b
--- /dev/null
+++ b/slides/internals/php85-nodiscard-attribute.xml
@@ -0,0 +1,40 @@
+<slide>
+<title>PHP 8.5: #[NoDiscard] Attribute</title>
+
+<blurb>A new attribute for functions (%TARGET_FUNCTION%) and methods (%TARGET_METHOD%).</blurb>
+
+<blurb>It enforces that the calling function consumes the return value.</blurb>
+
+<div effect="fade-in-out">
+<example><![CDATA[<?php
+$a = new DateTimeImmutable();
+$a->setDate(2025, 5, 4);
+?>]]></example>
+
+<example class="result">
+Warning: The return value of method DateTimeImmutable::setDate()
+    should either be used or intentionally ignored by casting it as
+    (void), as DateTimeImmutable::setDate() does not modify the
+    object itself in /tmp/discard.php on line 3
+</example>
+</div>
+
+<div effect="fade-in">
+<blurb>A %(void)% cast disables it:</blurb>
+<example inline="2"><![CDATA[&lt;?php
+$a = new DateTimeImmutable();
+*(void)* $a->setDate(2025, 5, 4);
+?>]]></example>
+
+<break/>
+<blurb>You can't use %#[Discard]% when:</blurb>
+
+<list>
+    <bullet>The function is typed with %: void% or %: never%</bullet>
+    <bullet>For magic methods (including the constructor) that require %: void%, or have no return type at all</bullet>
+    <bullet>For property hooks</bullet>
+</list>
+</div>
+
+</slide>
+
diff --git a/slides/internals/timeline-2025-05.png b/slides/internals/timeline-2025-05.png
new file mode 100644
index 00000000..86f745c0
Binary files /dev/null and b/slides/internals/timeline-2025-05.png differ
diff --git a/slides/mongodb/me.xml b/slides/mongodb/me.xml
index 4c7fe8ce..92b310ef 100644
--- a/slides/mongodb/me.xml
+++ b/slides/mongodb/me.xml
@@ -7,10 +7,9 @@
 	<blurb>Derick Rethans</blurb>
 	<list>
 		<bullet>I'm European, living in London</bullet>
-		<bullet>---PHP 7.4 *Release Manager*---</bullet>
 		<bullet>*PHP Foundation*</bullet>
 		<bullet>*Xdebug* &amp; PHP's Date/Time support</bullet>
-<!--		<bullet>Host of *https://phpinternals.news* podcast</bullet> -->
+		<bullet>I am |999999|g|root!</bullet>
 		<bullet>I ♥🌍 maps, I ♥🍺 beer, I ♥🥃  whisky</bullet>
 		<bullet>mastodon: :-:mastodon:-:</bullet>
 	</list>
diff --git a/xdebug-dpc25.xml b/xdebug-dpc25.xml
new file mode 100644
index 00000000..f350d274
--- /dev/null
+++ b/xdebug-dpc25.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>Debugging</topic>
+<title>Better Debugging with Xdebug</title>
+<event>Dutch PHP Conference</event>
+<location>Amsterdam, The Netherlands</location>
+<date>March 21st, 2025</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<mastodon>@[email protected]</mastodon>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/xdebug-dpc25</url>
+<joindin>https://xdebug.org</joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+Code reorganisation
+Modes
+- only do what is needed
+Reduce Configuration Options
+Code Improvements (algorithms, memory, etc)
+<!--<s lide>slides/xdebug/code-reorgnisation.xml</slide>-->
+<!--< slide>slides/xdebug/modes.xml</slide>-->
+<!--<s lide>slides/xdebug/config-settings-3.xml</slide>-->
+<!--<s lide>slides/xdebug/config-settings-3b.xml</slide>-->
+<!--<s lide>slides/xdebug/xdebug-3-speedup-1.xml</slide>-->
+
+- xdebug_info() (demo, VS Code or PhpStorm)
+
+	- an API through xdebug_info() for mode detection (VS Code or PhpStorm)
+		'mode'
+		'extension-flags'
+
+<slide>slides/xdebug/xdebug_info.xml</slide>
+<slide>slides/xdebug/xdebug_info-2.xml</slide>
+
+- xdebug_notify() (demo, VS Code)
+
+<slide>slides/xdebug/xdebug_notify.xml</slide>
+
+- file_link_format (demo, PhpStorm)
+
+<!-- <s lide>slides/xdebug/xdebug_file_link_format.xml</slide>-->
+
+
+  -> ticket
+
+<!--<s lide>slides/xdebug/diagnostic-log.xml</slide> (Also console output) -->
+
+<slide>slides/xdebug/xdebug-recent-new-features.xml</slide>
+Step debugging improvements
+Step debugging improvements
+
+<slide>slides/xdebug/breakpoint_resolving.xml</slide>
+- breakpoint resolving (demo, PhpStorm)
+
+<slide>slides/xdebug/return_value.xml</slide>
+- return value debugging (demo, VS Code or PhpStorm)
+
+<slide>slides/xdebug/breakpoint_not_resolving.xml</slide>
+- Xdebug will now also log a warning if an IDE attempts to set a breakpoint on
+  a file that does not exist on the file system. (demo, PhpStorm)
+
+<slide>slides/xdebug/xdebug_connect_to_client.xml</slide>
+- xdebug_connect_to_client() (demo, PhpStorm)
+
+<slide>slides/xdebug/xdebug_pseudo_hosts.xml</slide>
+- xdebug://gateway and xdebug://nameserver (explain)
+
+<slide>slides/xdebug/xdebug-recent-new-features.xml</slide>
+
+<slide>slides/xdebug/xdebug-control-socket.xml</slide>
+
+<slide>slides/xdebug/xdebug-future-features.xml</slide>
+
+<slide>slides/xdebug/xdebug-native-path-mapping.xml</slide>
+<slide>slides/xdebug/restaurant.xml</slide>
+
+<slide>slides/xdebug/xdebug-cloud-announcement.xml</slide>
+
+<slide>slides/xdebug/donate.xml</slide>
+<slide>slides/xdebug/business-support.xml</slide>
+<slide>slides/xdebug/transparency.xml</slide>
+
+
+<!-- <s lide>slides/xdebug/phpinternalsnews.xml</slide> -->
+<slide>slides/mongodb/questions.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>