[presentations] master: Birmingham PHP, 010PHP, and WebCamp talks

[email protected] (Derick Rethans) Wed, 12 Oct 2022 10:05:32 +0000
Newsgroups php.pres
Message-ID <[email protected]>
Author: Derick Rethans (derickr)
Date: 2022-10-12T10:55:50+01:00

Commit: https://github.com/php/presentations/commit/1fba5eb983ea2aaed261936012a3b12f3f4a7f66
Raw diff: https://github.com/php/presentations/commit/1fba5eb983ea2aaed261936012a3b12f3f4a7f66.diff

Birmingham PHP, 010PHP, and WebCamp talks

Changed paths:
  A  php-010php22.xml
  A  php-brumphp22.xml
  A  php-webcamp22.xml
  A  slides/internals/php81-fcc.xml
  A  slides/internals/webcamp22-agenda.xml
  A  slides/internals/webcamp22-exercise-fibers.xml
  A  slides/internals/webcamp22-exercise-static-vars-debug.xml
  M  slides/internals/php80-named-with.xml
  M  slides/internals/php80-named-without.xml
  M  slides/internals/php81-enums-1.xml
  M  slides/internals/php81-enums-2.xml
  M  slides/internals/php81-enums-3.xml
  M  slides/internals/php81-enums-4.xml
  M  slides/internals/php81-enums-7.xml
  M  slides/internals/php81-static-vars.xml
  M  slides/mongodb/me.xml


Diff:

diff --git a/php-010php22.xml b/php-010php22.xml
new file mode 100644
index 00000000..0c0a7312
--- /dev/null
+++ b/php-010php22.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title>What's New in PHP 8.x</title>
+<event>010PHP</event>
+<location>Den Haag, The Netherlands</location>
+<date>September 21st, 2022</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/php-010php22</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.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-union-types-law.xml</slide>
+<!--<s lide>slides/internals/php80-union-types-coercive.xml</slide> -->
+
+Readonly properties 2.0 (https://wiki.php.net/rfc/readonly_properties_v2)
+<slide>slides/internals/php81-readonly.xml</slide>
+
+https://wiki.php.net/rfc/readonly_classes
+<slide>slides/internals/php82-readonly.xml</slide>
+
+Mixed Type v2
+<slide>slides/internals/php80-mixed-types.xml</slide>
+
+PHP 8.0:
+https://wiki.php.net/rfc/static_return_type
+static return type
+<slide>slides/internals/php80-static-return.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>
+
+<!-- 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>
+
+https://wiki.php.net/rfc/fetch_property_in_const_expressions
+<slide>slides/internals/php82-enums-1.xml</slide>
+
+Noreturn type (https://wiki.php.net/rfc/noreturn_type) (never)
+<slide>slides/internals/php81-never-type.xml</slide>
+
+Pure Intersection Types (https://wiki.php.net/rfc/pure-intersection-types)
+<slide>slides/internals/php81-pure-intersection.xml</slide>
+
+Array unpacking with string keys (https://wiki.php.net/rfc/array_unpacking_string_keys)
+<slide>slides/internals/php81-array-unpacking.xml</slide>
+
+Fibers (https://wiki.php.net/rfc/fibers)
+<slide>slides/internals/php81-fibers.xml</slide>
+
+First Class Callable (https://wiki.php.net/rfc/first_class_callable_syntax)
+<slide>slides/internals/php81-fcc.xml</slide>
+
+PHP 8.2:
+
+https://wiki.php.net/rfc/null-false-standalone-types
+'null' and 'false' as standalone
+<slide>slides/internals/php82-null-false-standalone.xml</slide>
+
+https://wiki.php.net/rfc/true-type
+'true' type
+<slide>slides/internals/php82-true.xml</slide>
+
+https://wiki.php.net/rfc/dnf_types
+? Disjunctive Normal Form Types
+<slide>slides/internals/php82-dnf-types.xml</slide>
+
+https://wiki.php.net/rfc/deprecate_dynamic_properties
+<slide>slides/internals/php82-deprecate-dynamic-properties.xml</slide>
+
+https://wiki.php.net/rfc/redact_parameters_in_back_traces
+<slide>slides/internals/php82-redact-parameters.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-brumphp22.xml b/php-brumphp22.xml
new file mode 100644
index 00000000..3df915c6
--- /dev/null
+++ b/php-brumphp22.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title>What's New in PHP 8.1/8.2</title>
+<event>BrumPHP</event>
+<location>Birmingham, United Kingdom</location>
+<date>October 13th, 2022</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/php-brumphp22</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.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-union-types-law.xml</slide>
+<!--<s lide>slides/internals/php80-union-types-coercive.xml</slide> -->
+
+Readonly properties 2.0 (https://wiki.php.net/rfc/readonly_properties_v2)
+<slide>slides/internals/php81-readonly.xml</slide>
+
+https://wiki.php.net/rfc/readonly_classes
+<slide>slides/internals/php82-readonly.xml</slide>
+
+Mixed Type v2
+<slide>slides/internals/php80-mixed-types.xml</slide>
+
+PHP 8.0:
+https://wiki.php.net/rfc/static_return_type
+static return type
+<!-- <s lide>slides/internals/php80-static-return.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>
+
+<!-- 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>
+<!-- <s lide>slides/internals/php81-enums-6.xml</slide> -->
+<slide>slides/internals/php81-enums-7.xml</slide>
+
+https://wiki.php.net/rfc/fetch_property_in_const_expressions
+<slide>slides/internals/php82-enums-1.xml</slide>
+
+Noreturn type (https://wiki.php.net/rfc/noreturn_type) (never)
+<slide>slides/internals/php81-never-type.xml</slide>
+
+Pure Intersection Types (https://wiki.php.net/rfc/pure-intersection-types)
+<slide>slides/internals/php81-pure-intersection.xml</slide>
+
+Array unpacking with string keys (https://wiki.php.net/rfc/array_unpacking_string_keys)
+<slide>slides/internals/php81-array-unpacking.xml</slide>
+
+Fibers (https://wiki.php.net/rfc/fibers)
+<slide>slides/internals/php81-fibers.xml</slide>
+
+First Class Callable (https://wiki.php.net/rfc/first_class_callable_syntax)
+<slide>slides/internals/php81-fcc.xml</slide>
+
+PHP 8.2:
+
+https://wiki.php.net/rfc/null-false-standalone-types
+'null' and 'false' as standalone
+<slide>slides/internals/php82-null-false-standalone.xml</slide>
+
+https://wiki.php.net/rfc/true-type
+'true' type
+<slide>slides/internals/php82-true.xml</slide>
+
+https://wiki.php.net/rfc/dnf_types
+? Disjunctive Normal Form Types
+<slide>slides/internals/php82-dnf-types.xml</slide>
+
+https://wiki.php.net/rfc/deprecate_dynamic_properties
+<slide>slides/internals/php82-deprecate-dynamic-properties.xml</slide>
+
+https://wiki.php.net/rfc/redact_parameters_in_back_traces
+<slide>slides/internals/php82-redact-parameters.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-webcamp22.xml b/php-webcamp22.xml
new file mode 100644
index 00000000..f5dd5fb1
--- /dev/null
+++ b/php-webcamp22.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title>Debugging PHP 8 Features</title>
+<event>Web Summer Camp</event>
+<location>Sibenik, Croatia</location>
+<date>September 1st, 2022</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/php-webcamp22</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<slide>slides/internals/webcamp22-agenda.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-union-types-law.xml</slide>
+<slide>slides/internals/php80-union-types-coercive.xml</slide>
+
+Readonly properties 2.0 (https://wiki.php.net/rfc/readonly_properties_v2)
+<slide>slides/internals/php81-readonly.xml</slide>
+
+https://wiki.php.net/rfc/readonly_classes
+<slide>slides/internals/php82-readonly.xml</slide>
+
+Mixed Type v2
+<slide>slides/internals/php80-mixed-types.xml</slide>
+
+PHP 8.0:
+https://wiki.php.net/rfc/static_return_type
+static return type
+<slide>slides/internals/php80-static-return.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>
+
+PHP 8.1:
+
+Static Variables in Inherited Methods (https://wiki.php.net/rfc/static_variable_inheritance)
+<slide>slides/internals/php81-static-vars.xml</slide>
+
+<slide>slides/internals/webcamp22-exercise-static-vars-debug.xml</slide>
+
+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>
+
+<!-- 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>
+
+https://wiki.php.net/rfc/fetch_property_in_const_expressions
+<slide>slides/internals/php82-enums-1.xml</slide>
+
+Noreturn type (https://wiki.php.net/rfc/noreturn_type) (never)
+<slide>slides/internals/php81-never-type.xml</slide>
+
+Pure Intersection Types (https://wiki.php.net/rfc/pure-intersection-types)
+<slide>slides/internals/php81-pure-intersection.xml</slide>
+
+Array unpacking with string keys (https://wiki.php.net/rfc/array_unpacking_string_keys)
+<slide>slides/internals/php81-array-unpacking.xml</slide>
+
+Fibers (https://wiki.php.net/rfc/fibers)
+<slide>slides/internals/php81-fibers.xml</slide>
+
+<slide>slides/internals/webcamp22-exercise-fibers.xml</slide>
+
+Final class constants (https://wiki.php.net/rfc/final_class_const)
+<slide>slides/internals/php81-final-class-constants.xml</slide>
+
+PHP 8.2:
+
+https://wiki.php.net/rfc/null-false-standalone-types
+'null' and 'false' as standalone
+<slide>slides/internals/php82-null-false-standalone.xml</slide>
+
+https://wiki.php.net/rfc/true-type
+'true' type
+<slide>slides/internals/php82-true.xml</slide>
+
+https://wiki.php.net/rfc/dnf_types
+? Disjunctive Normal Form Types
+<slide>slides/internals/php82-dnf-types.xml</slide>
+
+https://wiki.php.net/rfc/deprecate_dynamic_properties
+<slide>slides/internals/php82-deprecate-dynamic-properties.xml</slide>
+
+https://wiki.php.net/rfc/redact_parameters_in_back_traces
+<slide>slides/internals/php82-redact-parameters.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/php80-named-with.xml b/slides/internals/php80-named-with.xml
index 885a4cf8..851b53a2 100644
--- a/slides/internals/php80-named-with.xml
+++ b/slides/internals/php80-named-with.xml
@@ -17,7 +17,7 @@ class Settings
 <div effect="fade-in">
 <blurb>Instantiation with different includes:</blurb>
 <example inline="2">
-$settings = new \Settings(*includeDistillery: false*);
+$settings = new \Settings(*includeDescription: false*);
 </example>
 </div>
 <div effect="fade-in">
diff --git a/slides/internals/php80-named-without.xml b/slides/internals/php80-named-without.xml
index 8cbc9d80..8ef02821 100644
--- a/slides/internals/php80-named-without.xml
+++ b/slides/internals/php80-named-without.xml
@@ -17,7 +17,7 @@ class Settings
 <div effect="fade-in">
 <blurb>Instantiation with different includes:</blurb>
 <example inline="1">
-$settings = new \Settings(*false*, true, false);
+$settings = new \Settings(true, *false*);
 </example>
 </div>
 <div effect="fade-in">
diff --git a/slides/internals/php81-enums-1.xml b/slides/internals/php81-enums-1.xml
index daa998ab..76a0eb6f 100644
--- a/slides/internals/php81-enums-1.xml
+++ b/slides/internals/php81-enums-1.xml
@@ -26,14 +26,11 @@ var_dump( $elephpant );
 </div>
 
 <div effect="fade-in">
+<break lines="2"/>
 <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>
+  private *Currency* $currency => *enum Currency::EUR*;
+}</example>
 </div>
 </slide>
diff --git a/slides/internals/php81-enums-2.xml b/slides/internals/php81-enums-2.xml
index e8f79889..5c68e43c 100644
--- a/slides/internals/php81-enums-2.xml
+++ b/slides/internals/php81-enums-2.xml
@@ -16,7 +16,7 @@ class Product {
 $elephpant = new Product( 'Chilli', 5.50, *"EUR"* );
 ]]></example>
 </div>
-<break/>
+<break lines="2"/>
 <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*
diff --git a/slides/internals/php81-enums-3.xml b/slides/internals/php81-enums-3.xml
index aaf5b439..23087daa 100644
--- a/slides/internals/php81-enums-3.xml
+++ b/slides/internals/php81-enums-3.xml
@@ -18,15 +18,11 @@ var_dump( $elephpant );]]></example>
 </div>
 
 <div effect="fade-in">
+<break lines="2"/>
 <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) "£"
-  }
+  private Currency $currency => enum Currency::GBP *: string("£")*;
 }
 </example>
 </div>
diff --git a/slides/internals/php81-enums-4.xml b/slides/internals/php81-enums-4.xml
index 5f9ca432..13a81c98 100644
--- a/slides/internals/php81-enums-4.xml
+++ b/slides/internals/php81-enums-4.xml
@@ -18,10 +18,7 @@ enum Currency: string {
 <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>
+<example class="result">enum Currency::GBP : string("£");</example>
 </div>
 
 <div effect="fade-in">
diff --git a/slides/internals/php81-enums-7.xml b/slides/internals/php81-enums-7.xml
index 76dab8f1..e632b59b 100644
--- a/slides/internals/php81-enums-7.xml
+++ b/slides/internals/php81-enums-7.xml
@@ -15,14 +15,10 @@ enum Currency: string {
 <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) "€"
-  }
+  [0]=>
+  enum(Currency::GBP)
+  [1]=>
+  enum(Currency::EUR)
 }
 </example>
 </div>
diff --git a/slides/internals/php81-fcc.xml b/slides/internals/php81-fcc.xml
new file mode 100644
index 00000000..3fd73e87
--- /dev/null
+++ b/slides/internals/php81-fcc.xml
@@ -0,0 +1,98 @@
+<slide>
+<title>First Class Callable Syntax</title>
+
+<div effect="fade-out">
+<example inline="1">
+<![CDATA[&lt?php
+class Test {
+    public function getPrivateMethod() {
+        *return [$this, 'privateMethod'];*
+        |aaaaaa|return Closure::fromCallable([$this, 'privateMethod']);|
+        |aaaaaa|return $this->privateMethod(...);|
+    }
+
+    private function privateMethod() {
+        echo ___METHOD___, "\n";
+    }
+}
+
+$test = new Test;
+$privateMethod = $test->getPrivateMethod();
+$privateMethod();
+?>]]>
+</example>
+</div>
+
+<div effect="fade-in-out">
+<example inline="1">
+<![CDATA[&lt?php
+class Test {
+    public function getPrivateMethod() {
+        |bbbbbb|return [$this, 'privateMethod'];|
+        *return Closure::fromCallable([$this, 'privateMethod']);*
+        |aaaaaa|return $this->privateMethod(...);|
+    }
+
+    private function privateMethod() {
+        echo ___METHOD___, "\n";
+    }
+}
+
+$test = new Test;
+$privateMethod = $test->getPrivateMethod();
+$privateMethod();
+?>]]>
+</example>
+</div>
+
+<div effect="fade-in-out">
+<example inline="1">
+<![CDATA[&lt?php
+class Test {
+    public function getPrivateMethod() {
+        |bbbbbb|return [$this, 'privateMethod'];*|
+        |bbbbbb|return Closure::fromCallable([$this, 'privateMethod']);|
+        *return $this->privateMethod(...);*
+    }
+
+    private function privateMethod() {
+        echo ___METHOD___, "\n";
+    }
+}
+
+$test = new Test;
+$privateMethod = $test->getPrivateMethod();
+$privateMethod();
+?>]]>
+</example>
+</div>
+
+<div effect="fade-in">
+<blurb>Syntactic Sugar</blurb>
+<example>
+$fn = Closure::fromCallable('strlen');
+$fn = strlen(...);
+
+$fn = Closure::fromCallable([$this, 'method']);
+$fn = $this->method(...)
+
+$fn = Closure::fromCallable([Foo::class, 'method']);
+$fn = Foo::method(...);
+</example>
+<break/>
+<blurb>Other variants</blurb>
+<example>
+strlen(...);
+$closure(...);
+$obj->method(...);
+$obj->$methodStr(...);
+($obj->property)(...);
+Foo::method(...);
+$classStr::$methodStr(...);
+self::{$complex . $expression}(...);
+[$obj, 'method'](...);
+[Foo::class, 'method'](...);
+</example>
+</div>
+
+</slide>
diff --git a/slides/internals/php81-static-vars.xml b/slides/internals/php81-static-vars.xml
index 45104598..8a33418b 100644
--- a/slides/internals/php81-static-vars.xml
+++ b/slides/internals/php81-static-vars.xml
@@ -10,10 +10,10 @@ class A {
 }
 class B extends A {}
  
-echo A::counter(), ' ',
-     A::counter(), ' ',
-     B::counter(), ' ',
-     B::counter();
+echo A::counter(), ' ';
+echo A::counter(), ' ';
+echo B::counter(), ' ';
+echo B::counter();
 ]]></example>
 
 <blurb>PHP 8.0:</blurb>
diff --git a/slides/internals/webcamp22-agenda.xml b/slides/internals/webcamp22-agenda.xml
new file mode 100644
index 00000000..fe34de73
--- /dev/null
+++ b/slides/internals/webcamp22-agenda.xml
@@ -0,0 +1,11 @@
+<slide>
+<title>Topics</title>
+
+<list>
+	<bullet>Improvements in PHP's Type System</bullet>
+	<bullet>Xdebug 3's improvements for debugging</bullet>
+	<bullet>Complicated new PHP features and changes</bullet>
+	<bullet>Exercises!</bullet>
+</list>
+
+</slide>
diff --git a/slides/internals/webcamp22-exercise-fibers.xml b/slides/internals/webcamp22-exercise-fibers.xml
new file mode 100644
index 00000000..6a2e68e4
--- /dev/null
+++ b/slides/internals/webcamp22-exercise-fibers.xml
@@ -0,0 +1,25 @@
+<slide>
+<title>Show and Tell: %Fibers%</title>
+
+<blurb>*Everyone*:</blurb>
+<list>
+	<bullet>Open %fibers.php%</bullet>
+</list>
+<break/>
+
+<blurb>*VS Code*:</blurb>
+<list>
+	<bullet>Click green triangle / %F5% to start listening</bullet>
+</list>
+<break/>
+<blurb>*PhpStorm*</blurb>
+<list>
+	<bullet>Click: %Run%, %Start Listening for PHP Debug Connections%</bullet>
+</list>
+
+<break/>
+<blurb>*Everyone*:</blurb>
+<list>
+	<bullet>Open %http://localhost:8123/fibers.php% in browser</bullet>
+</list>
+</slide>
diff --git a/slides/internals/webcamp22-exercise-static-vars-debug.xml b/slides/internals/webcamp22-exercise-static-vars-debug.xml
new file mode 100644
index 00000000..5fdb8dd4
--- /dev/null
+++ b/slides/internals/webcamp22-exercise-static-vars-debug.xml
@@ -0,0 +1,38 @@
+<slide>
+<title>Exercise</title>
+<div effect="fade-out">
+<list>
+	<bullet>GIT checkout: %https://github.com/derickr/workshop-webcamp22%</bullet>
+	<bullet>Run: %docker compose up%</bullet>
+	<bullet>Go to: %http://localhost:8123/info.php%</bullet>
+	<bullet>Let's go through the output...</bullet>
+</list>
+</div>
+<div effect="fade-in-out">
+<list>
+	<bullet>Fix permissions of %logs% directory to make it writeable to all</bullet>
+	<bullet>Refresh browser (%http://localhost:8123/info.php%)</bullet>
+	<bullet>Check output of log file (%./logs/xdebug.log%)</bullet>
+	<bullet>Start VS Code or PhpStorm</bullet>
+</list>
+</div>
+<div effect="fade-in">
+<blurb>*VS Code*:</blurb>
+<list>
+	<bullet>Open the GIT checkout folder</bullet>
+	<bullet>Open "Run and Debug" (%Ctrl-Shift-D%)</bullet>
+	<bullet>Click "create a launch.json file"</bullet>
+	<bullet>Open %static-properties.php%</bullet>
+	<bullet>Click green triangle / %F5% to start listening</bullet>
+</list>
+<break/>
+<blurb>*PhpStorm*</blurb>
+<list>
+	<bullet>Click: %File%, %New Project From Existing Files%</bullet>
+	<bullet>Select %Source files are in a local...configured%</bullet>
+	<bullet>Select workshop folder</bullet>
+	<bullet>Open %static-properties.php%</bullet>
+	<bullet>Click: %Run%, %Start Listening for PHP Debug Connections%</bullet>
+</list>
+</div>
+</slide>
diff --git a/slides/mongodb/me.xml b/slides/mongodb/me.xml
index 5c7ca251..c80d3f80 100644
--- a/slides/mongodb/me.xml
+++ b/slides/mongodb/me.xml
@@ -8,6 +8,7 @@
 	<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 ♥🌍 maps, I ♥🍺 beer, I ♥🥃  whisky</bullet>