[presentations] master: Commit missing presentations

[email protected] (Derick Rethans) Fri, 18 Jun 2021 12:19:49 +0000
Newsgroups php.pres
Message-ID <[email protected]>
Author: Derick Rethans (derickr)
Date: 2021-06-18T13:19:18+01:00

Commit: https://github.com/php/presentations/commit/4287ea354385c4a2a1af476da5e2aa6d0f9c3b31
Raw diff: https://github.com/php/presentations/commit/4287ea354385c4a2a1af476da5e2aa6d0f9c3b31.diff

Commit missing presentations

Changed paths:
  A  php-confoo21.xml
  A  php-phpday21.xml
  A  slides/internals/ben-ramsey.jpg
  A  slides/internals/patrick-allaert.jpg
  A  slides/internals/php81-auto-capture-multi-statement-closures.xml
  A  slides/internals/php81-enums-1.xml
  A  slides/internals/php81-enums-2.xml
  A  slides/internals/php81-enums-3.xml
  A  slides/internals/php81-enums-4.xml
  A  slides/internals/php81-enums-5.xml
  A  slides/internals/php81-enums-6.xml
  A  slides/internals/php81-enums-7.xml
  A  slides/internals/php81-fibers.xml
  A  slides/internals/php81-final-class-constants.xml
  A  slides/internals/php81-implicit-float-conversions.xml
  A  slides/internals/php81-intl-date-pattern-generator.xml
  A  slides/internals/php81-never-type.xml
  A  slides/internals/php81-new-in-initialisers-locations.xml
  A  slides/internals/php81-new-in-initialisers.xml
  A  slides/internals/php81-null-internal-functions.xml
  A  slides/internals/php81-property-accessors-explicit.xml
  A  slides/internals/php81-property-accessors-implicit.xml
  A  slides/internals/php81-property-accessors-interface.xml
  A  slides/internals/php81-property-accessors.xml
  A  slides/internals/php81-restrict-globals-usage.xml
  A  slides/internals/php81-rms.xml
  A  slides/internals/php81-serializable.xml
  A  slides/internals/php81-static-vars.xml
  A  slides/internals/win311-scaled.jpg
  A  slides/internals/win311.jpg
  A  slides/xdebug/php81-when.xml
  A  xdebug-confoo21.xml
  A  xdebug-phpmad21.xml
  A  xdebug-zagreb21.xml
  M  slides/xdebug/business-support.xml
  M  slides/xdebug/config-settings-3b.xml
  M  slides/xdebug/php80-when.xml
  M  slides/xdebug/resources.xml
  M  slides/xdebug/xdebug-cloud-announcement.xml


Diff:

diff --git a/php-confoo21.xml b/php-confoo21.xml
new file mode 100644
index 00000000..87db1966
--- /dev/null
+++ b/php-confoo21.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title>What's&#160;new&#160;in&#160;PHP&#160;8</title>
+<event>Confoo 2021</event>
+<location>Virtual Montreal, Canada</location>
+<date>February 24th, 2021</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/php-confoo21</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<!-- TYPES -->
+<slide>slides/internals/php74-typed-properties.xml</slide>
+<slide>slides/internals/php74-variance-argument-ok.xml</slide>
+
+<slide>slides/internals/php80-union-types.xml</slide>
+<slide>slides/internals/php80-union-types-phpdoc.xml</slide>
+<slide>slides/internals/php80-union-types-new.xml</slide>
+<slide>slides/internals/php80-union-types-examples.xml</slide>
+<slide>slides/internals/php80-trailing-comma-example.xml</slide>
+<!--<s lide>slides/internals/php80-union-types-law.xml</slide> -->
+<slide>slides/internals/php80-union-types-coercive.xml</slide>
+
+Mixed Type v2
+<slide>slides/internals/php80-mixed-types.xml</slide>
+
+Constructor Property Promotion
+<slide>slides/internals/php80-cpp-without.xml</slide>
+<slide>slides/internals/php80-cpp-with.xml</slide>
+
+<slide>slides/internals/php80-named-without.xml</slide>
+<slide>slides/internals/php80-named-with.xml</slide>
+
+Attributes v2
+<slide>slides/internals/php80-attributes-before.xml</slide>
+<slide>slides/internals/php80-attributes-after.xml</slide>
+<slide>slides/internals/php80-attributes-attribute-definition.xml</slide>
+<slide>slides/internals/php80-attributes-use-cases.xml</slide>
+
+New Syntax
+<slide>slides/internals/php80-match.xml</slide>
+<slide>slides/internals/php80-null-safe.xml</slide>
+<slide>slides/internals/php80-null-safe-short-circuit.xml</slide>
+
+Small Fry
+<slide>slides/internals/php80-str-functions.xml</slide>
+<slide>slides/internals/php80-weakmap.xml</slide>
+
+<slide>slides/internals/php80-warning-to-error.xml</slide>
+
+Non-Capturing Catches
+<slide>slides/internals/php80-new-catch.xml</slide>
+
+JIT
+<slide>slides/internals/php80-jit.xml</slide>
+
+<slide>slides/xdebug/php80-when.xml</slide>
+
+<slide>slides/xdebug/phpinternalsnews.xml</slide>
+
+<slide>slides/internals/questions-new.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>
diff --git a/php-phpday21.xml b/php-phpday21.xml
new file mode 100644
index 00000000..e11c4a0e
--- /dev/null
+++ b/php-phpday21.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title>What's&#160;new&#160;in&#160;PHP&#160;8.1</title>
+<event>phpDay 2021</event>
+<location>Virtual Verona, Italy</location>
+<date>June 8th, 2021</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/php-phpday21</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<!-- PHP 8.1 RMs -->
+<slide>slides/internals/php81-rms.xml</slide>
+
+
+<!-- BIG NEW FEATURES -->
+Enumerations (https://wiki.php.net/rfc/enumerations)
+<slide>slides/internals/php81-enums-1.xml</slide>
+<slide>slides/internals/php81-enums-2.xml</slide>
+<slide>slides/internals/php81-enums-3.xml</slide>
+<slide>slides/internals/php81-enums-4.xml</slide>
+<slide>slides/internals/php81-enums-5.xml</slide>
+<slide>slides/internals/php81-enums-6.xml</slide>
+<slide>slides/internals/php81-enums-7.xml</slide>
+
+Fibers (https://wiki.php.net/rfc/fibers)
+<slide>slides/internals/php81-fibers.xml</slide>
+
+<!-- SYNTAX -->
+Implemented:
+Static Variables in Inherited Methods (https://wiki.php.net/rfc/static_variable_inheritance)
+<slide>slides/internals/php81-static-vars.xml</slide>
+
+Array unpacking with string keys (https://wiki.php.net/rfc/array_unpacking_string_keys)
+Noreturn type (https://wiki.php.net/rfc/noreturn_type) (never)
+<slide>slides/internals/php81-never-type.xml</slide>
+
+In voting:
+Final class constants (https://wiki.php.net/rfc/final_class_const)
+<slide>slides/internals/php81-final-class-constants.xml</slide>
+
+Still proposed:
+New in Initialisers (https://wiki.php.net/rfc/new_in_initializers)
+<slide>slides/internals/php81-new-in-initialisers.xml</slide>
+<slide>slides/internals/php81-new-in-initialisers-locations.xml</slide>
+
+Auto-capturing multi-statement closures (https://wiki.php.net/rfc/auto-capture-closure)
+<slide>slides/internals/php81-auto-capture-multi-statement-closures.xml</slide>
+
+Property Accessors (https://wiki.php.net/rfc/property_accessors)
+<slide>slides/internals/php81-property-accessors.xml</slide>
+<slide>slides/internals/php81-property-accessors-implicit.xml</slide>
+<slide>slides/internals/php81-property-accessors-explicit.xml</slide>
+<slide>slides/internals/php81-property-accessors-interface.xml</slide>
+
+<!-- FEATURES -->
+Voted in:
+Add IntlDatePatternGenerator (https://wiki.php.net/rfc/intldatetimepatterngenerator)
+<slide>slides/internals/php81-intl-date-pattern-generator.xml</slide>
+
+<!-- DEPRECATIONS -->
+Implemented:
+Restrict $GLOBALS usage (https://wiki.php.net/rfc/restrict_globals_usage)
+<slide>slides/internals/php81-restrict-globals-usage.xml</slide>
+
+Phasing out Serializable (https://wiki.php.net/rfc/phase_out_serializable)
+<slide>slides/internals/php81-serializable.xml</slide>
+
+Deprecate passing null to non-nullable arguments of internal functions (https://wiki.php.net/rfc/deprecate_null_to_scalar_internal_arg)
+<slide>slides/internals/php81-null-internal-functions.xml</slide>
+
+Voted in:
+Deprecate implicit non-integer-compatible float to int conversions (https://wiki.php.net/rfc/implicit-float-int-deprecate)
+<slide>slides/internals/php81-implicit-float-conversions.xml</slide>
+
+
+<slide>slides/xdebug/php81-when.xml</slide>
+
+<slide>slides/xdebug/phpinternalsnews.xml</slide>
+
+<slide>slides/internals/questions-new.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>
diff --git a/slides/internals/ben-ramsey.jpg b/slides/internals/ben-ramsey.jpg
new file mode 100644
index 00000000..ee49abd1
Binary files /dev/null and b/slides/internals/ben-ramsey.jpg differ
diff --git a/slides/internals/patrick-allaert.jpg b/slides/internals/patrick-allaert.jpg
new file mode 100644
index 00000000..f2903cd7
Binary files /dev/null and b/slides/internals/patrick-allaert.jpg differ
diff --git a/slides/internals/php81-auto-capture-multi-statement-closures.xml b/slides/internals/php81-auto-capture-multi-statement-closures.xml
new file mode 100644
index 00000000..cfc67f82
--- /dev/null
+++ b/slides/internals/php81-auto-capture-multi-statement-closures.xml
@@ -0,0 +1,31 @@
+<slide template="draft">
+<title>Auto-Capture with Statement List</title>
+
+<div effect="fade-in">
+<blurb>Auto-Capture with Single Expressions</blurb>
+<example inline="1"><![CDATA[&lt;?php
+$factor = M_PI / 180;
+
+$adder = *fn* ($x) *=>* $x * $factor;
+]]></example>
+
+<blurb>Manual-Capture with Statement List</blurb>
+<example inline="1"><![CDATA[$wordCharacters = 'A-Za-z-';
+
+$wordCounter = *function* ($sentence) *use ($wordCharacters)*: int *{*
+    $sanitised = preg_replace("/[^{$wordCharacters}]/", ' ', $sentence);
+    $condensed = preg_replace('/\s+/', ' ', $sanitised);
+    return count(explode(' ', $condensed));
+*}*]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>Auto-Capture with Statement List</blurb>
+<example inline="1"><![CDATA[$wordCounter = *fn* ($sentence): int *{*
+    $sanitised = preg_replace("/[^{$wordCharacters}]/", ' ', $sentence);
+    $condensed = preg_replace('/\s+/', ' ', $sanitised);
+    return count(explode(' ', $condensed));
+*}*]]></example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-enums-1.xml b/slides/internals/php81-enums-1.xml
new file mode 100644
index 00000000..daa998ab
--- /dev/null
+++ b/slides/internals/php81-enums-1.xml
@@ -0,0 +1,39 @@
+<slide>
+<title>Enumerations</title>
+
+<div effect="fade-out">
+<blurb class="big-centre">%enum%</blurb>
+<blurb class="centre">a data type consisting of a set of named values</blurb>
+</div>
+
+<div effect="fade-in">
+<example><![CDATA[<?php
+enum Currency {
+    case GBP;
+    case EUR;
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<example inline="1"><![CDATA[class Product {
+    function __construct(
+        private string $name, private float $amount, private *Currency* $currency) { }
+}
+
+$elephpant = new Product( 'Chilli', 5.50, *Currency::EUR* );
+var_dump( $elephpant );
+]]></example>
+</div>
+
+<div effect="fade-in">
+<example inline="1">class Product#1 (3) {
+  private string $name => string(6) "Chilli"
+  private float $amount => double(5.5)
+
+  private *Currency* $currency =>
+    *class Currency*#2 (1) {
+      public string $name => string(3) "EUR"
+    }
+} </example>
+</div>
+</slide>
diff --git a/slides/internals/php81-enums-2.xml b/slides/internals/php81-enums-2.xml
new file mode 100644
index 00000000..e8f79889
--- /dev/null
+++ b/slides/internals/php81-enums-2.xml
@@ -0,0 +1,25 @@
+<slide>
+<title>Enumerations — Typed</title>
+
+<div>
+<example inline="1"><![CDATA[&lt;?php
+enum Currency {
+    case GBP;
+    case EUR;
+}
+
+class Product {
+    function __construct(
+        private string $name, private float $amount, private Currency $currency) { }
+}
+
+$elephpant = new Product( 'Chilli', 5.50, *"EUR"* );
+]]></example>
+</div>
+<break/>
+<div effect="fade-in">
+<example inline="1">*TypeError: Product::__construct(): Argument #3 ($currency) must be of type Currency,*
+    *string given, called in /tmp/enum-2.php on line 12 in /tmp/enum-2.php on line 8*
+</example>
+</div>
+</slide>
diff --git a/slides/internals/php81-enums-3.xml b/slides/internals/php81-enums-3.xml
new file mode 100644
index 00000000..aaf5b439
--- /dev/null
+++ b/slides/internals/php81-enums-3.xml
@@ -0,0 +1,33 @@
+<slide>
+<title>Enumerations — Backed</title>
+
+<div>
+<example inline='1'><![CDATA[&lt;?php
+enum Currency*: string* {
+    case GBP *= '£'*;
+    case EUR = '€';
+}
+
+class Product {
+    function __construct(
+        private string $name, private float $amount, private Currency $currency) { }
+}
+
+$elephpant = new Product( 'Chilli', 5.50, Currency::GBP );
+var_dump( $elephpant );]]></example>
+</div>
+
+<div effect="fade-in">
+<example inline="1">class Product#1 (3) {
+  private string $name => string(6) "Chilli"
+  private float $amount => double(5.5)
+
+  private Currency $currency =>
+    class Currency#2 (2) {
+      public string $name => string(3) "GBP"
+      public string *$value* => string(2) "£"
+  }
+}
+</example>
+</div>
+</slide>
diff --git a/slides/internals/php81-enums-4.xml b/slides/internals/php81-enums-4.xml
new file mode 100644
index 00000000..5f9ca432
--- /dev/null
+++ b/slides/internals/php81-enums-4.xml
@@ -0,0 +1,32 @@
+<slide>
+<title>Enumerations — Backed Values</title>
+
+<div>
+<example><![CDATA[<?php
+enum Currency: string {
+    case GBP = '£';
+    case EUR = '€';
+}]]></example>
+</div>
+<break lines="3"/>
+<div effect="fade-in-out">
+<blurb>Value Property:</blurb>
+<example inline="1">var_dump( Currency::EUR*->value* );</example>
+<example class="result">string(3) "€"</example>
+</div>
+
+<div effect="fade-in-out">
+<blurb>Create from Value:</blurb>
+<example inline="1">var_dump( Currency*::from('£')* );</example>
+<example class="result">class Currency#2 (2) {
+  public string $name => string(3) "GBP"
+  public string $value => string(2) "£"
+}</example>
+</div>
+
+<div effect="fade-in">
+<blurb>Try Create from Value:</blurb>
+<example inline="1">var_dump( Currency*::tryFrom('$')* );</example>
+<example class="result">NULL</example>
+</div>
+</slide>
diff --git a/slides/internals/php81-enums-5.xml b/slides/internals/php81-enums-5.xml
new file mode 100644
index 00000000..eef883b7
--- /dev/null
+++ b/slides/internals/php81-enums-5.xml
@@ -0,0 +1,28 @@
+<slide>
+<title>Enumerations — Functions</title>
+
+<div>
+<example><![CDATA[<?php
+enum Currency: string {
+    case GBP = '£';
+    case EUR = '€';
+
+    public function format( float $amount )
+    {
+        $pattern = match( $this ) {
+            Currency::GBP => "{$this->value} %.2f",
+            Currency::EUR => "%.2f {$this->value}",
+        };
+
+        return sprintf( $pattern, $amount );
+    }
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>Calling Methods:</blurb>
+<example inline="1">$cur = Currency::GBP;
+echo $cur->format( 42.75 );</example>
+<example class="result">£ 42.75</example>
+</div>
+</slide>
diff --git a/slides/internals/php81-enums-6.xml b/slides/internals/php81-enums-6.xml
new file mode 100644
index 00000000..d5a0d80a
--- /dev/null
+++ b/slides/internals/php81-enums-6.xml
@@ -0,0 +1,27 @@
+<slide>
+<title>Enumerations — Static Methods</title>
+
+<div>
+<example><![CDATA[<?php
+enum Currency: string {
+    case GBP = '£';
+    case EUR = '€';
+
+    static public function fromLocale( string $locale )
+    {   
+        return match( $locale ) {
+            'nl_NL' => static::EUR,
+            'it_IT' => static::EUR,
+            'uk_GB' => static::GBP,
+        };
+    }
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>Alternative Constructor:</blurb>
+<example inline="1">$cur = Currency::fromLocale( 'it_IT' );
+echo $cur->value, "\n";</example>
+<example class="result">€</example>
+</div>
+</slide>
diff --git a/slides/internals/php81-enums-7.xml b/slides/internals/php81-enums-7.xml
new file mode 100644
index 00000000..76dab8f1
--- /dev/null
+++ b/slides/internals/php81-enums-7.xml
@@ -0,0 +1,29 @@
+<slide>
+<title>Enumerations — Value Listing</title>
+
+<div>
+<example><![CDATA[<?php
+enum Currency: string {
+    case GBP = '£';
+    case EUR = '€';
+}]]></example>
+</div>
+
+<break lines="3"/>
+
+<div effect="fade-in">
+<blurb>List Cases:</blurb>
+<example inline="1">var_dump( Currency::cases() );</example>
+<example class="result" inline="1">array(2) {
+  [0] => *class* Currency#1 (2) {
+    public string $name => string(3) "GBP"
+    public string $value => string(2) "£"
+  }
+  [1] => class Currency#2 (2) {
+    public string $name => string(3) "EUR"
+    public string $value => string(3) "€"
+  }
+}
+</example>
+</div>
+</slide>
diff --git a/slides/internals/php81-fibers.xml b/slides/internals/php81-fibers.xml
new file mode 100644
index 00000000..477ba5ce
--- /dev/null
+++ b/slides/internals/php81-fibers.xml
@@ -0,0 +1,11 @@
+<slide>
+<title>Fibers</title>
+
+<blurb class="big-centre">Co-operative Multi-Tasking</blurb>
+
+<div effect="fade-in">
+<break lines="2"/>
+<image filename='win311-scaled.jpg'/>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-final-class-constants.xml b/slides/internals/php81-final-class-constants.xml
new file mode 100644
index 00000000..0e6cbb86
--- /dev/null
+++ b/slides/internals/php81-final-class-constants.xml
@@ -0,0 +1,25 @@
+<slide template="draft">
+<title>Final Class Constants</title>
+
+<blurb class="centre">Currently, class constants are always overridable by child classes</blurb>
+
+<example inline="1"><![CDATA[&lt;?php
+class Universe
+{
+    *final* public const SPEED_OF_LIGHT = 299_458_792;
+}]]></example>
+
+<div effect="fade-in">
+<example inline="1"><![CDATA[class RingSpace extends Universe
+{
+    public const SPEED_OF_LIGHT = 12_758;
+}
+]]></example>
+
+<example class="result">
+Fatal error: RingSpace::SPEED_OF_LIGHT cannot override
+    final constant Universe::SPEED_OF_LIGHT
+</example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-implicit-float-conversions.xml b/slides/internals/php81-implicit-float-conversions.xml
new file mode 100644
index 00000000..1847efef
--- /dev/null
+++ b/slides/internals/php81-implicit-float-conversions.xml
@@ -0,0 +1,40 @@
+<slide>
+<title>Implicit Non-Integer-Compatible Float to Int Conversion</title>
+
+<blurb>Integer Compatible Floats</blurb>
+
+<list>
+    <bullet>It is a number (---NaN--- or ---INF---)</bullet>
+    <bullet>It is in range of a PHP integer:<br/>%(PHP_INT_MIN >= $float >= PHP_INT_MAX)%</bullet>
+    <bullet>Has no fractional part (42---.76---)</bullet>
+</list>
+
+<break lines="2"/>
+
+<div effect="fade-out">
+<blurb>In PHP 8.0:</blurb>
+<example><![CDATA[<?php
+function doTheNumber(int $number)
+{
+	var_dump( $number );
+}
+
+doTheNumber( 42.76 );]]></example>
+<example class="result">int(42)</example>
+</div>
+
+<div effect="fade-in">
+<blurb>In PHP 8.1:</blurb>
+<example><![CDATA[<?php
+function doTheNumber(int $number)
+{
+	var_dump( $number );
+}
+
+doTheNumber( 42.76 );]]></example>
+<example class="result">
+Deprecated: Implicit conversion from non-compatible float-string "42.76" to int
+int(42)</example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-intl-date-pattern-generator.xml b/slides/internals/php81-intl-date-pattern-generator.xml
new file mode 100644
index 00000000..48923e85
--- /dev/null
+++ b/slides/internals/php81-intl-date-pattern-generator.xml
@@ -0,0 +1,88 @@
+<slide template="draft">
+<title>IntlDatePatternGenerator</title>
+
+<div effect="fade-out">
+<example><![CDATA[<?php
+use IntlDateFormatter as IDF;
+
+$now = new \DateTimeImmutable;
+$locale = 'en_US';
+
+echo 'Short:  ', IDF::formatObject($now, [ IDF::SHORT, IDF::NONE ], $locale), "\n";
+echo 'Medium: ', IDF::formatObject($now, [ IDF::MEDIUM, IDF::NONE ], $locale), "\n";
+echo 'Long:   ', IDF::formatObject($now, [ IDF::LONG, IDF::NONE ], $locale), "\n";
+echo 'Manual: ', $now->format( 'n/d/Y' ), "\n";
+]]></example>
+<example class="result">
+Short:  5/31/21
+Medium: May 31, 2021
+Long:   May 31, 2021
+Manual: 5/31/2021
+</example>
+</div>
+
+<div effect="fade-in-out">
+<example inline="1"><![CDATA[&lt;?php
+use IntlDateFormatter as IDF;
+
+$now = new \DateTimeImmutable;
+$locale = *'it_IT'*;
+
+echo 'Short:  ', IDF::formatObject($now, [ IDF::SHORT, IDF::NONE ], $locale), "\n";
+echo 'Medium: ', IDF::formatObject($now, [ IDF::MEDIUM, IDF::NONE ], $locale), "\n";
+echo 'Long:   ', IDF::formatObject($now, [ IDF::LONG, IDF::NONE ], $locale), "\n";
+echo 'Manual: ', $now->format( 'n/d/Y' ), "\n";
+]]></example>
+<example inline="1" class="result">
+Short:  30/05/21
+Medium: 30 mag 2021
+Long:   30 maggio 2021
+Manual: ---5/30/2021---
+        30/05/2021
+</example>
+</div>
+
+<div effect="fade-in-out">
+<example inline="1"><![CDATA[&lt;?php
+use IntlDateFormatter as IDF;
+
+$now = new \DateTimeImmutable;
+
+$locale = 'it_IT';
+*$skeleton = 'YYYYMMdd';*
+
+$dtpg = new *\IntlDatePatternGenerator*($locale);
+$pattern = $dtpg->getBestPattern($skeleton), "\n";
+
+echo 'Correct: ', IDF::formatObject($now, *$pattern*, $locale), "\n";
+]]></example>
+<example inline="1" class="result">
+Correct: 30/05/2021
+</example>
+</div>
+
+<div effect="fade-in">
+<example inline="1"><![CDATA[&lt;?php
+use IntlDateFormatter as IDF;
+
+$now = new \DateTimeImmutable;
+
+$locale = *'en_US'*;
+$skeleton = 'YYYYMMdd';
+
+$dtpg = new \IntlDatePatternGenerator($locale);
+$pattern = $dtpg->getBestPattern($skeleton), "\n";
+
+echo 'Correct: ', IDF::formatObject($now, $pattern, $locale), "\n";
+]]></example>
+<example inline="1" class="result">
+Correct: *05/30/2021*
+</example>
+</div>
+
+<div effect="fade-in">
+<break lines="3"/>
+<blurb class="big-centre">"Correct" 🤔</blurb>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-never-type.xml b/slides/internals/php81-never-type.xml
new file mode 100644
index 00000000..5eabbf0b
--- /dev/null
+++ b/slides/internals/php81-never-type.xml
@@ -0,0 +1,31 @@
+<slide>
+<title>The 'never' Type</title>
+
+<blurb>Explicitly mark a function that it never returns:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+function redirect(string $uri): *never* {
+    header('Location: ' . $uri);
+    exit();
+}
+]]></example>
+
+<div effect="fade-in">
+<break lines="2"/>
+
+<blurb>Or implicitily:</blurb>
+<example>function redirectToLoginPage(): never {
+    redirect('/login');
+}</example>
+</div>
+
+<div effect="fade-in">
+<break lines="2"/>
+
+<blurb>Remarks:</blurb>
+<list>
+<bullet>Just like %void%, only as a return type</bullet>
+<bullet>It is a *bottom* type</bullet>
+</list>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-new-in-initialisers-locations.xml b/slides/internals/php81-new-in-initialisers-locations.xml
new file mode 100644
index 00000000..c86a750c
--- /dev/null
+++ b/slides/internals/php81-new-in-initialisers-locations.xml
@@ -0,0 +1,31 @@
+<slide template="draft">
+<title>New in Initialisers — Where?</title>
+
+<div effect="fade-in">
+<blurb>Static variables:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+function counter()
+{
+    static $i = *new* Counter;
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>Constants:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+class Repository
+{
+    const DB = *new* DatabaseLink(dsn: 'sqlite://:memory:');
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>(Nested) Attributes:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+#[Constraint(*new Tries(3)*)]
+class Login
+{
+}]]></example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-new-in-initialisers.xml b/slides/internals/php81-new-in-initialisers.xml
new file mode 100644
index 00000000..20b81732
--- /dev/null
+++ b/slides/internals/php81-new-in-initialisers.xml
@@ -0,0 +1,42 @@
+<slide template="draft">
+<title>New in Initialisers</title>
+
+<blurb>In PHP 8.0:</blurb>
+
+<example inline="1"><![CDATA[&lt;?php
+class Roci {
+    private Logger $logger;
+
+    public function __construct( ?Logger $logger = null )
+    {
+        $this->logger = $logger ?? new NullLogger;
+    }
+}]]></example>
+
+<blurb>From PHP 8.1:</blurb>
+
+<div effect="fade-in-out">
+<example inline="1"><![CDATA[&lt;?php
+class Roci {
+    public function __construct(
+        private Logger $logger = *new* NullLogger) {}
+}]]></example>
+</div>
+
+<div effect="fade-in-out">
+<example inline="1"><![CDATA[&lt;?php
+class Roci {
+    public function __construct(
+        private Logger $logger = new FileLogger('/tmp/my-log.log')) {}
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<example inline="1"><![CDATA[&lt;?php
+class Roci {
+    public function __construct(
+        private Logger $logger = new FileLogger(directory: '/tmp/logs')) {}
+}]]></example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-null-internal-functions.xml b/slides/internals/php81-null-internal-functions.xml
new file mode 100644
index 00000000..a950d336
--- /dev/null
+++ b/slides/internals/php81-null-internal-functions.xml
@@ -0,0 +1,29 @@
+<slide>
+<title>Null to Non-Nullable Arguments for Internal Functions</title>
+
+<blurb>Internal Function:</blurb>
+<example><![CDATA[var_dump(str_contains("foobar", null));]]></example>
+<example class="result">bool(null)</example>
+
+<div effect="fade-in-out">
+<break/>
+<blurb>User Function:</blurb>
+<example><![CDATA[function my_str_contains(string $haystack, string $needle): bool {
+    return false !== strpos($haystack, $needle);
+}
+
+var_dump(my_str_contains("foobar", null));]]></example>
+<example class="result">TypeError: my_str_contains(): Argument #2 ($needle) must be of type string, null given</example>
+</div>
+
+<div effect="fade-in">
+<break lines="3"/>
+<list>
+    <bullet>PHP 8.1 will start throwing a deprecation warning:<br/>
+    <example class="result">Deprecated: Passing null to argument of type string is deprecated</example></bullet>
+    <bullet>PHP 9.0 will then make this a %TypeError%:<br/>
+    <example class="result">TypeError: str_contains(): Argument #2 ($needle) must be of type string, null given</example></bullet>
+</list>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-property-accessors-explicit.xml b/slides/internals/php81-property-accessors-explicit.xml
new file mode 100644
index 00000000..618c0af5
--- /dev/null
+++ b/slides/internals/php81-property-accessors-explicit.xml
@@ -0,0 +1,25 @@
+<slide template="draft">
+<title>Explicit Property Accessors</title>
+
+<example inline="1"><![CDATA[&lt;?php
+class Whisky {
+    *private* string *$_name*;
+
+    public string $name {
+        *get {*
+            return $this->_name;
+        *}*
+        *set* {
+            if (*$value* === '') {
+                thrown new ValueError('Name must be non-empty');
+            }
+            $this->_name = $value;
+        }
+    }
+
+    public function __construct(string $name) {
+        $this->name = $name;
+    }
+}]]></example>
+
+</slide>
diff --git a/slides/internals/php81-property-accessors-implicit.xml b/slides/internals/php81-property-accessors-implicit.xml
new file mode 100644
index 00000000..de5e07fc
--- /dev/null
+++ b/slides/internals/php81-property-accessors-implicit.xml
@@ -0,0 +1,21 @@
+<slide template="draft">
+<title>Implicit Property Accessors</title>
+
+<blurb>Standard Visibility</blurb>
+<example inline="1"><![CDATA[&lt;?php
+class Whisky {
+    public string $name       { *get;* *set;* }
+]]></example>
+
+<div effect="fade-in">
+<blurb>Read-Only</blurb>
+<example inline="1"><![CDATA[    public string $distillery { *get;* }]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>Asymetric Visibility</blurb>
+<example inline="1"><![CDATA[    public float  $abv        { get; *private set;* }
+}]]></example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-property-accessors-interface.xml b/slides/internals/php81-property-accessors-interface.xml
new file mode 100644
index 00000000..d336d6ff
--- /dev/null
+++ b/slides/internals/php81-property-accessors-interface.xml
@@ -0,0 +1,47 @@
+<slide template="draft">
+<title>Property Accessors</title>
+
+<div effect="fade-out">
+<blurb>Interfaces:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+interface Namer {
+    public string $name { *get;* }
+}
+
+class Whisky implements Namer {
+    public string $name;
+}]]></example>
+</div>
+
+<div effect="fade-in-out">
+<blurb>Inheritance:</blurb>
+<example><![CDATA[&lt;?php
+class Whisky {
+    public $name {
+        get { echo __METHOD__, "\n"; }
+        set { echo __METHOD__, "\n"; }
+    }
+}
+
+class SingleMalt {
+    public $name {
+        set { echo __METHOD__, "\n"; }
+    }
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>Variance:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+class Whisky {
+    public int|string $invariant { get; set; }
+    public int|string $covariant { get; }
+}
+
+class SingleMalt {
+    public int    $invariant; // Illegal
+    public string $covariant;
+}]]></example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-property-accessors.xml b/slides/internals/php81-property-accessors.xml
new file mode 100644
index 00000000..f4313e56
--- /dev/null
+++ b/slides/internals/php81-property-accessors.xml
@@ -0,0 +1,60 @@
+<slide template="draft">
+<title>Property Accessors</title>
+
+<div effect="fade-out">
+<blurb>PHP 7.3:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+class Whisky {
+    private $name;
+ 
+    public function __construct(*string* $name) {
+        $this->name = $name;
+    }
+ 
+    public function getName(): *string* {
+        return $this->name;
+    }
+ 
+    public function setName(*string* $name): void {
+        $this->name = $name;
+    }
+}]]></example>
+</div>
+
+<div effect="fade-in-out">
+<blurb>PHP 7.4:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+class Whisky {
+    public *string* $name;
+ 
+    public function __construct(string $name) {
+        $this->name = $name;
+    }
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb>PHP 8.0:</blurb>
+<example inline="1"><![CDATA[&lt;?php
+class Whisky {
+    public function __construct(*public* string $name) {
+    }
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<blurb class="centre">Now also make sure it can't be empty 😭</blurb>
+</div>
+<div effect="fade-in">
+<blurb class="centre">… and read only 😭😭😭😭</blurb>
+</div>
+
+<div effect="fade-in">
+<blurb>Options:</blurb>
+<list>
+    <bullet>Going back to explicit setters/getters</bullet>
+    <bullet>Introduce magic %__get()%, %__set()%, and %__isset()%</bullet>
+</list>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-restrict-globals-usage.xml b/slides/internals/php81-restrict-globals-usage.xml
new file mode 100644
index 00000000..a4609dad
--- /dev/null
+++ b/slides/internals/php81-restrict-globals-usage.xml
@@ -0,0 +1,44 @@
+<slide>
+<title>Changes to $GLOBALS</title>
+
+<div effect="fade-out">
+<blurb>%$GLOBALS% uses INDIRECT variables:</blurb>
+<example><![CDATA[<?php
+$a = 1;
+$GLOBALS['a'] = 2;
+var_dump($a);]]></example>
+<example class="result">int(2)</example>
+</div>
+
+<div effect="fade-in-out">
+<blurb>%$GLOBALS% are by-ref:</blurb>
+<example><![CDATA[<?php
+$a = 1;
+$globals = $GLOBALS;
+$globals['a'] = 2;
+var_dump($a);]]></example>
+<example class="result">int(2)</example>
+</div>
+
+<div effect="fade-in">
+<break lines="2"/>
+<blurb class="centre">Writes to %$GLOBALS% as a whole are no longer supported</blurb>
+<break lines="2"/>
+<blurb>Generates compile-time error:</blurb>
+<example>
+$GLOBALS = [];
+$GLOBALS += [];
+</example>
+<break lines="2"/>
+<blurb>This no longer modifies %$a%:</blurb>
+<example>
+$a = 4;
+$globals = $GLOBALS;
+$globals['a'] = 1;
+
+var_dump($a);
+</example>
+<example class="result">int(4)</example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-rms.xml b/slides/internals/php81-rms.xml
new file mode 100644
index 00000000..4cbf4895
--- /dev/null
+++ b/slides/internals/php81-rms.xml
@@ -0,0 +1,19 @@
+<slide>
+<title>Meet the PHP 8.1 Release Managers</title>
+
+<break lines="4"/>
+<table>
+<tr>
+<td><image filename="patrick-allaert.jpg"/></td>
+<td><image filename="ben-ramsey.jpg"/></td>
+</tr>
+<tr>
+<td><break lines="2"/></td>
+<td></td>
+</tr>
+<tr>
+<td>Patrick Allaert</td>
+<td>Ben Ramsey</td>
+</tr>
+</table>
+</slide>
diff --git a/slides/internals/php81-serializable.xml b/slides/internals/php81-serializable.xml
new file mode 100644
index 00000000..7a783e62
--- /dev/null
+++ b/slides/internals/php81-serializable.xml
@@ -0,0 +1,57 @@
+<slide>
+<title>Phasing out Serializable interface</title>
+
+<div effect="fade-out">
+<blurb>The Serializable mechanism has issues:</blurb>
+
+<example><![CDATA[<?php
+class 🔥 implements Serializable
+{
+    private $temperature;
+
+    public function serialize() {
+        return serialize($this->temperature);
+    }
+    public function unserialize($payload) {
+        $this->temperature = unserialize($payload);
+    }
+}]]></example>
+
+<list>
+    <bullet>State is required between nested calls with %parent::serialize%</bullet>
+    <bullet>There is no requirement for what *is* used in %serialize%/%unserialize%</bullet>
+</list>
+</div>
+
+<div effect="fade-in-out">
+<blurb>PHP 7.4 introduced a new serializing mechanism through magic methods, with a stricter set of guarantees:</blurb>
+<example><![CDATA[<?php
+class 🔥
+{
+    private $temperature;
+
+    public function __serialize(): array {
+        return ["t" => $this->temperature];
+    }
+    public function __unserialize(array $data) {
+        $this->temperature = $data['t'];
+    }
+}]]></example>
+</div>
+
+<div effect="fade-in">
+<break lines="2"/>
+<blurb>PHP 8.1 starts the removal process of "only %Serializable%" classes:</blurb>
+</div>
+
+<div effect="fade-in">
+<break lines="2"/>
+<list><bullet>In PHP 8.1, implementing %Serializable% will throw a deprecation warning</bullet></list>
+</div>
+
+<div effect="fade-in">
+<break lines="2"/>
+<list><bullet>In PHP 9.0, the %Serializable% interface will be removed, and %unserialize% will stop understanding its serialisation format</bullet></list>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-static-vars.xml b/slides/internals/php81-static-vars.xml
new file mode 100644
index 00000000..45104598
--- /dev/null
+++ b/slides/internals/php81-static-vars.xml
@@ -0,0 +1,26 @@
+<slide>
+<title>Static Variables in Inherited Methods</title>
+
+<example><![CDATA[<?php
+class A {
+    public static function counter() {
+        static $i = 0;
+        return ++$i;
+    }
+}
+class B extends A {}
+ 
+echo A::counter(), ' ',
+     A::counter(), ' ',
+     B::counter(), ' ',
+     B::counter();
+]]></example>
+
+<blurb>PHP 8.0:</blurb>
+<example>1 2 1 2</example>
+
+<div effect="fade-in">
+<blurb>PHP 8.1:</blurb>
+<example>1 2 3 4</example>
+</div>
+</slide>
diff --git a/slides/internals/win311-scaled.jpg b/slides/internals/win311-scaled.jpg
new file mode 100644
index 00000000..b1401994
Binary files /dev/null and b/slides/internals/win311-scaled.jpg differ
diff --git a/slides/internals/win311.jpg b/slides/internals/win311.jpg
new file mode 100644
index 00000000..6f0a22c6
Binary files /dev/null and b/slides/internals/win311.jpg differ
diff --git a/slides/xdebug/business-support.xml b/slides/xdebug/business-support.xml
index 2c34f7a9..103a8144 100644
--- a/slides/xdebug/business-support.xml
+++ b/slides/xdebug/business-support.xml
@@ -8,7 +8,8 @@
 <break/>
 
 <blurb class="centre">
-Seravo&#160; — &#160;CHECK24&#160; — &#160;Private&#160;Packagist&#160; — &#160;Supermetrics&#160; — &#160;Intracto&#160; — &#160;Strategery&#160; — &#160;e3N&#160; — &#160;Automattic&#160; — &#160;JetBrains&#160; — &#160;TYPO3&#160;GmbH&#160; — &#160;Tideways
+Intracto — Private&#160;Packagist — Edmonds&#160;Commerce — Find&#160;My&#160;Electric — Tideways — TYPO3&#160;GmbH —
+Seravo — CHECK24 — Supermetrics 
 </blurb>
 
 </slide>
diff --git a/slides/xdebug/config-settings-3b.xml b/slides/xdebug/config-settings-3b.xml
index 2f197a22..75ea942f 100644
--- a/slides/xdebug/config-settings-3b.xml
+++ b/slides/xdebug/config-settings-3b.xml
@@ -6,7 +6,7 @@
 <td>
 <example inline="2">
 xdebug.cli_color
-xdebug.cloud.userid
+|0000ff|xdebug.cloud_id|
 xdebug.collect_assignments
 xdebug.collect_return
 xdebug.dump.COOKIE
@@ -33,14 +33,14 @@ xdebug.max_nesting_level
 </example></td><td><example inline="2">
 xdebug.max_stack_frames
 |ff0000|xdebug.mode|
-xdebug.output_dir
+|00ff00|xdebug.output_dir|
 xdebug.profiler_append
 xdebug.profiler_output_name
 xdebug.remote_addr_header
-xdebug.remote_connect_back
 xdebug.remote_cookie_expire_time
-xdebug.remote_host
-xdebug.remote_port
+|0000ff|xdebug.discover_client_host|
+|0000ff|xdebug.client_host|
+|0000ff|xdebug.remote_port|
 xdebug.remote_timeout
 xdebug.scream
 xdebug.show_error_trace
diff --git a/slides/xdebug/php80-when.xml b/slides/xdebug/php80-when.xml
index 1777039f..edbb243d 100644
--- a/slides/xdebug/php80-when.xml
+++ b/slides/xdebug/php80-when.xml
@@ -1,14 +1,9 @@
 <slide>
 <break lines="7"/>
-<blurb class="centre">When is it out?</blurb>
+<blurb class="centre">When was it released?</blurb>
 
 <div effect="fade-in">
 <break lines="1"/>
 <blurb class="big-centre">*November 26th, 2020*</blurb>
 </div>
-
-<div effect="fade-in">
-<break lines="1"/>
-<blurb class="center">(hopefully)</blurb>
-</div>
 </slide>
diff --git a/slides/xdebug/php81-when.xml b/slides/xdebug/php81-when.xml
new file mode 100644
index 00000000..eee1c90c
--- /dev/null
+++ b/slides/xdebug/php81-when.xml
@@ -0,0 +1,12 @@
+<slide>
+<break lines="7"/>
+<blurb class="centre">When is available?</blurb>
+
+<div effect="fade-in">
+<break lines="1"/>
+<blurb class="big-centre">*November 25th, 2021*</blurb>
+</div>
+<div effect="fade-in">
+<blurb class="center">(maybe)</blurb>
+</div>
+</slide>
diff --git a/slides/xdebug/resources.xml b/slides/xdebug/resources.xml
index 8c39014e..cf61f2fd 100644
--- a/slides/xdebug/resources.xml
+++ b/slides/xdebug/resources.xml
@@ -7,6 +7,7 @@
 	<blurb class="center">*Slides*</blurb>
 	<blurb class="center">%:-:url:-:%</blurb>
 	<blurb class="center">%:-:joindin:-:%</blurb>
+	<blurb class="center">%https://xdebug.cloud%</blurb>
 <break line="3"/>
 	<blurb class="center">%https://phpinternals.news%</blurb>
 <break line="3"/>
diff --git a/slides/xdebug/xdebug-cloud-announcement.xml b/slides/xdebug/xdebug-cloud-announcement.xml
index 55a93926..1f26b1d1 100644
--- a/slides/xdebug/xdebug-cloud-announcement.xml
+++ b/slides/xdebug/xdebug-cloud-announcement.xml
@@ -1,6 +1,6 @@
 <slide>
 <video width="1800" height="900" filename="xdebug-cloud-animation.webm"/>
 <div effect="fade-in">
-<blurb class="big-centre">%cloud.xdebug.com%</blurb>
+<blurb class="big-centre">%https://xdebug.cloud%</blurb>
 </div>
 </slide>
diff --git a/xdebug-confoo21.xml b/xdebug-confoo21.xml
new file mode 100644
index 00000000..1cdc9e96
--- /dev/null
+++ b/xdebug-confoo21.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>Debugging</topic>
+<title>Xdebug 3</title>
+<event>Confoo 2021</event>
+<location>Virtual Montréal, Canada</location>
+<date>February 25th, 2021</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/xdebug-confoo21</url>
+<joindin>https://xdebug.org</joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<slide>slides/xdebug/focus-on-xdebug.xml</slide>
+The Xdebug Experience
+17 years
+
+<slide>slides/xdebug/xdebug-slow.xml</slide>
+
+<slide>slides/xdebug/focus-on-xdebug3.xml</slide>
+breakpoint behaviour
+New versions (7.4)
+CI
+<!--
+<s lide>slides/xdebug/xdebug-2.8.xml</slide>
+<s lide>slides/xdebug/breakpoint-behaviour.xml</slide>
+-->
+
+<slide>slides/xdebug/test-with-many-versions.xml</slide>
+<slide>slides/xdebug/xdebug-ci.xml</slide>
+
+<slide>slides/xdebug/xdebug-3.xml</slide>
+Code reorganisation
+Modes
+- only do what is needed
+Reduce Configuration Options
+Code Improvements (algorithms, memory, etc)
+<slide>slides/xdebug/code-reorgnisation.xml</slide>
+<slide>slides/xdebug/modes.xml</slide>
+<slide>slides/xdebug/config-settings-3.xml</slide>
+<slide>slides/xdebug/config-settings-3b.xml</slide>
+
+<slide>slides/xdebug/xdebug-hard.xml</slide>
+<!-- <s lide>slides/xdebug/connect1.xml</slide> -->
+<!-- <s lide>slides/xdebug/connect2.xml</slide> -->
+<slide>slides/xdebug/debugger-activation.xml</slide>
+<slide>slides/xdebug/debugger-connection-log.xml</slide>
+<slide>slides/xdebug/diagnostic-log.xml</slide>
+
+<slide>slides/xdebug/xdebug-3-speedup-1.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>
+
+
+<slide>slides/xdebug/phpinternalsnews.xml</slide>
+<slide>slides/mongodb/questions.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>
diff --git a/xdebug-phpmad21.xml b/xdebug-phpmad21.xml
new file mode 100644
index 00000000..84eb84f0
--- /dev/null
+++ b/xdebug-phpmad21.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>Debugging</topic>
+<title>Xdebug on the way to time traveling</title>
+<event>PHPMad March 2021</event>
+<location>Virtual Madrid, Spain</location>
+<date>March 3rd, 2021</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/xdebug-phpmad21</url>
+<joindin>https://xdebug.org</joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<slide>slides/xdebug/focus-on-xdebug.xml</slide>
+The Xdebug Experience
+17 years
+
+<slide>slides/xdebug/xdebug-slow.xml</slide>
+
+<slide>slides/xdebug/focus-on-xdebug3.xml</slide>
+breakpoint behaviour
+New versions (7.4)
+CI
+<!--
+<s lide>slides/xdebug/xdebug-2.8.xml</slide>
+<s lide>slides/xdebug/breakpoint-behaviour.xml</slide>
+-->
+
+<slide>slides/xdebug/test-with-many-versions.xml</slide>
+<slide>slides/xdebug/xdebug-ci.xml</slide>
+
+<slide>slides/xdebug/xdebug-3.xml</slide>
+Code reorganisation
+Modes
+- only do what is needed
+Reduce Configuration Options
+Code Improvements (algorithms, memory, etc)
+<slide>slides/xdebug/code-reorgnisation.xml</slide>
+<slide>slides/xdebug/modes.xml</slide>
+<slide>slides/xdebug/config-settings-3.xml</slide>
+<slide>slides/xdebug/config-settings-3b.xml</slide>
+
+<slide>slides/xdebug/xdebug-hard.xml</slide>
+<!-- <s lide>slides/xdebug/connect1.xml</slide> -->
+<!-- <s lide>slides/xdebug/connect2.xml</slide> -->
+<slide>slides/xdebug/debugger-activation.xml</slide>
+<slide>slides/xdebug/debugger-connection-log.xml</slide>
+<slide>slides/xdebug/diagnostic-log.xml</slide>
+
+<slide>slides/xdebug/xdebug-3-speedup-1.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>
+
+
+<slide>slides/xdebug/phpinternalsnews.xml</slide>
+<slide>slides/mongodb/questions.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>
diff --git a/xdebug-zagreb21.xml b/xdebug-zagreb21.xml
new file mode 100644
index 00000000..adf59964
--- /dev/null
+++ b/xdebug-zagreb21.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>Debugging</topic>
+<title>Xdebug 3.0</title>
+<event>ZgPHP</event>
+<location>Virtual Zagreb, Croatia</location>
+<date>April 15th, 2021</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/xdebug-phpmad21</url>
+<joindin>https://xdebug.org</joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<slide>slides/xdebug/focus-on-xdebug.xml</slide>
+The Xdebug Experience
+17 years
+
+<slide>slides/xdebug/xdebug-slow.xml</slide>
+
+<slide>slides/xdebug/focus-on-xdebug3.xml</slide>
+breakpoint behaviour
+New versions (7.4)
+CI
+<!--
+<s lide>slides/xdebug/xdebug-2.8.xml</slide>
+<s lide>slides/xdebug/breakpoint-behaviour.xml</slide>
+-->
+
+<slide>slides/xdebug/test-with-many-versions.xml</slide>
+<slide>slides/xdebug/xdebug-ci.xml</slide>
+
+<slide>slides/xdebug/xdebug-3.xml</slide>
+Code reorganisation
+Modes
+- only do what is needed
+Reduce Configuration Options
+Code Improvements (algorithms, memory, etc)
+<slide>slides/xdebug/code-reorgnisation.xml</slide>
+<slide>slides/xdebug/modes.xml</slide>
+<slide>slides/xdebug/config-settings-3.xml</slide>
+<slide>slides/xdebug/config-settings-3b.xml</slide>
+
+<slide>slides/xdebug/xdebug-hard.xml</slide>
+<!-- <s lide>slides/xdebug/connect1.xml</slide> -->
+<!-- <s lide>slides/xdebug/connect2.xml</slide> -->
+<slide>slides/xdebug/debugger-activation.xml</slide>
+<slide>slides/xdebug/debugger-connection-log.xml</slide>
+<slide>slides/xdebug/diagnostic-log.xml</slide>
+
+<slide>slides/xdebug/xdebug-3-speedup-1.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>
+
+
+<slide>slides/xdebug/phpinternalsnews.xml</slide>
+<slide>slides/mongodb/questions.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>