com presentations: Added InternetDagarna Talks: jump-bcn19.xml php-internetdagerna19.xml slides/intro/3018.png slides/intro/PH PUnit_Logo.svg slides/intro/composer.xml slides/intro /composer2012.jpg slides/intro/composer2019 .jpg slides/intro/ecosystem-beginning.xml slides/intro/ fig.png slides/intro/fig.xml slides/intro/frameworks. png slides/intro/frameworks.xml slides/intro/interesting- choices.xml slides/intro/msx.jpg slides/intro/msx.xml slides/in

[email protected] (Derick Rethans) Mon, 04 Nov 2019 18:27:01 +0000
Newsgroups php.pres
Message-ID <[email protected]>
Commit:    3377c1dac4de1b06782b337b3106d744715d1e4f
Author:    Derick Rethans <[email protected]>         Mon, 4 Nov 2019 18:27:01 +0000
Parents:   7f4495bf35e78ffd1ddc81dea411de583cff67f3
Branches:  master

Link:       http://git.php.net/?p=presentations.git;a=commitdiff;h=3377c1dac4de1b06782b337b3106d744715d1e4f

Log:
Added InternetDagarna Talks

Changed paths:
  M  jump-bcn19.xml
  A  php-internetdagerna19.xml
  A  slides/intro/3018.png
  A  slides/intro/PHPUnit_Logo.svg
  A  slides/intro/composer.xml
  A  slides/intro/composer2012.jpg
  A  slides/intro/composer2019.jpg
  A  slides/intro/ecosystem-beginning.xml
  A  slides/intro/fig.png
  A  slides/intro/fig.xml
  A  slides/intro/frameworks.png
  A  slides/intro/frameworks.xml
  A  slides/intro/interesting-choices.xml
  A  slides/intro/msx.jpg
  A  slides/intro/msx.xml
  A  slides/intro/new-in-php74.xml
  A  slides/intro/new-in-php80.xml
  A  slides/intro/packagist.xml
  A  slides/intro/packagist2011a.jpg
  A  slides/intro/packagist2011b.jpg
  A  slides/intro/packagist2019.jpg
  A  slides/intro/pear-over-time.xml
  A  slides/intro/pear2003.jpg
  A  slides/intro/pear2019.jpg
  A  slides/intro/php-3018.xml
  A  slides/intro/php-at-25.xml
  A  slides/intro/php7-dce-vld.xml
  A  slides/intro/php7-new.xml
  A  slides/intro/php7-prod.xml
  A  slides/intro/phpclasses.xml
  A  slides/intro/phpclasses2003.jpg
  A  slides/intro/phpclasses2010.jpg
  A  slides/intro/phpclasses2019.jpg
  A  slides/intro/phpstan.png
  A  slides/intro/phpstan.xml
  A  slides/intro/phpunit.xml
  A  slides/intro/psrs.png
  A  slides/intro/tools.xml
  A  slides/intro/user-groups.xml
  A  slides/intro/var_dump.xml
  M  slides/xdebug/infinite.xml
  M  slides/xdebug/local-vars.xml
  M  slides/xdebug/phpinternalsnews.xml
  M  slides/xdebug/phpstorm.xml
  M  slides/xdebug/pimp1-quick.xml
  M  slides/xdebug/resources.xml
  M  slides/xdebug/xdebug.xml
  M  templates/default/image.ezt
  A  templates/default/notes.ezt
diff_3377c1dac4de1b06782b337b3106d744715d1e4f.txt (text/plain, 28.7 KB)
diff --git a/jump-bcn19.xml b/jump-bcn19.xml
index 88ce4aa3..561947da 100644
--- a/jump-bcn19.xml
+++ b/jump-bcn19.xml
@@ -10,7 +10,7 @@
 <twitter>derickr</twitter>
 <joindin>https://joind.in/XXXXX</joindin>
 
-<slide>slides/mongodb/title.xml</slide>
+<slide>slides/xdebug/title.xml</slide>
 <slide>slides/mongodb/me.xml</slide>
 
 <slide>slides/internals/title-agenda.xml</slide>
diff --git a/php-internetdagerna19.xml b/php-internetdagerna19.xml
new file mode 100644
index 00000000..82446c16
--- /dev/null
+++ b/php-internetdagerna19.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="derick.css">
+<topic>PHP</topic>
+<title> The state of PHP</title>
+<event>InternetDagarna</event>
+<location>Stockholm, Sweden</location>
+<date>November 25th, 2019</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>https://derickrethans.nl/talks/php-internetdagerna19</url>
+<joindin></joindin>
+<slide>slides/xdebug/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<slide>slides/intro/msx.xml</slide>
+
+<slide>slides/intro/nold3.xml</slide>
+<slide>slides/intro/phpannounce.xml</slide>
+<slide>slides/intro/capi.xml</slide>
+<slide>slides/intro/php-3018.xml</slide>
+
+<slide>slides/intro/ecosystem-beginning.xml</slide>
+<slide>slides/intro/interesting-choices.xml</slide>
+
+<slide>slides/intro/php-at-25.xml</slide>
+
+<slide>slides/intro/tools.xml</slide>
+
+<slide>slides/intro/pear-over-time.xml</slide>
+<slide>slides/intro/phpclasses.xml</slide>
+<slide>slides/intro/packagist.xml</slide>
+<slide>slides/intro/composer.xml</slide>
+
+<slide>slides/intro/frameworks.xml</slide>
+<slide>slides/intro/fig.xml</slide>
+
+<slide>slides/intro/var_dump.xml</slide>
+<slide>slides/xdebug/xdebug.xml</slide>
+<slide>slides/xdebug/local-vars.xml</slide>
+<slide>slides/xdebug/infinite.xml</slide>
+<slide>slides/xdebug/pimp1-quick.xml</slide>
+<slide>slides/xdebug/phpstorm.xml</slide>
+
+<slide>slides/intro/phpunit.xml</slide>
+<slide>slides/intro/phpstan.xml</slide>
+
+<slide>slides/internals/stages.xml</slide>
+
+<slide>slides/intro/php7-new.xml</slide>
+<slide>slides/intro/php7-prod.xml</slide>
+
+<slide>slides/intro/php7-dce-vld.xml</slide>
+
+<slide>slides/intro/new-in-php74.xml</slide>
+<slide>slides/internals/php74-typed-properties.xml</slide>
+<slide>slides/internals/php74-variance-return-ok.xml</slide>
+<slide>slides/internals/php74-variance-argument-wrong.xml</slide>
+
+<slide>slides/internals/php74-ffi.xml</slide>
+<slide>slides/internals/php74-preloading-setup.xml</slide>
+<slide>slides/internals/php74-preloading-zf.xml</slide>
+<slide>slides/internals/php74-preloading-with-ffi.xml</slide>
+<slide>slides/internals/php74-timeline.xml</slide>
+<slide>slides/xdebug/phpinternalsnews.xml</slide>
+
+<slide>slides/intro/new-in-php80.xml</slide>
+
+<slide>slides/intro/user-groups.xml</slide>
+
+<slide>slides/mongodb/questions.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>
diff --git a/slides/intro/3018.png b/slides/intro/3018.png
new file mode 100644
index 00000000..b7a3e5a8
Binary files /dev/null and b/slides/intro/3018.png differ
diff --git a/slides/intro/PHPUnit_Logo.svg b/slides/intro/PHPUnit_Logo.svg
new file mode 100644
index 00000000..c46bfb0c
--- /dev/null
+++ b/slides/intro/PHPUnit_Logo.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.5, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 56.69 22.68" style="enable-background:new 0 0 56.69 22.68;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#356388;}
+	.st1{fill:#39B54A;}
+	.st2{fill:#3C9CD7;}
+</style>
+<g>
+	<rect x="32.09" y="6.47" class="st0" width="1.97" height="1.77"/>
+	<rect x="40.93" y="6.47" class="st1" width="1.93" height="1.88"/>
+	<rect x="35.05" y="14.09" class="st1" width="1.93" height="1.88"/>
+	<rect x="32.09" y="8.8" class="st1" width="1.97" height="1.88"/>
+	<path class="st0" d="M32.09,11.24v2.22c0,0.52-0.28,0.84-0.75,0.84c-0.44,0-0.76-0.28-0.76-0.85V6.47H30.3
+		c-1.18,0-1.81,0.76-1.81,2.24v4.8c0,1.8,1.03,2.61,2.73,2.61c1.6,0,2.85-0.92,2.84-2.65v-2.22H32.09z"/>
+	<path class="st2" d="M25.25,6.47H24c-1.18,0-1.81,0.76-1.81,2.24v7.27h2.08V12.6h0.92c1.72,0,2.45-1.2,2.45-3.19
+		C27.64,7.47,26.81,6.47,25.25,6.47z M24.87,10.91h-0.6V8.18h0.61c0.49,0,0.73,0.37,0.73,1.29C25.61,10.45,25.35,10.91,24.87,10.91z
+		"/>
+	<path class="st2" d="M12.43,6.47h-1.25c-1.18,0-1.81,0.76-1.81,2.24v7.27h2.08V12.6h0.92c1.72,0,2.45-1.2,2.45-3.19
+		C14.82,7.47,13.99,6.47,12.43,6.47z M12.04,10.91h-0.6V8.18h0.61c0.49,0,0.73,0.37,0.73,1.29C12.79,10.45,12.52,10.91,12.04,10.91z
+		"/>
+	<path class="st2" d="M20.89,6.47c-1.18,0-1.81,0.76-1.81,2.24v1.36v0.19H17.6v-0.19v-3.6h-0.27c-1.18,0-1.81,0.76-1.81,2.24v7.27
+		h2.08v-3.65v-0.19v0h1.48v0v0.19v3.65h2.07v-9.5H20.89z"/>
+	<path class="st0" d="M47.18,10.36V8.87h-0.97V7.26H45.6c-0.85,0-1.31,0.55-1.31,1.61h-0.63v1.49h0.63v4.2
+		c0,1.05,0.75,1.52,1.69,1.52c0.37,0,0.84-0.07,1.19-0.19v-1.53c-0.15,0.03-0.36,0.04-0.56,0.04c-0.31,0-0.4-0.15-0.4-0.41v-3.63
+		H47.18z"/>
+	<path class="st0" d="M38.46,8.64c-0.63,0-1.13,0.27-1.48,0.77V8.8h-0.63c-0.85,0-1.31,0.55-1.31,1.61v3.12h1.93V11
+		c0-0.43,0.21-0.75,0.53-0.75c0.43,0,0.52,0.33,0.52,0.63v5.09h1.92v-5.81C39.96,9.22,39.29,8.64,38.46,8.64z"/>
+	<path class="st0" d="M42.24,8.87c-0.85,0-1.31,0.55-1.31,1.61v5.49h1.93v-7.1H42.24z"/>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/slides/intro/composer.xml b/slides/intro/composer.xml
new file mode 100644
index 00000000..b5db0e55
--- /dev/null
+++ b/slides/intro/composer.xml
@@ -0,0 +1,13 @@
+<slide>
+<title>Composer</title>
+
+<div effect="fade-out">
+<blurb class="center">2012</blurb>
+<image width="100%" filename="composer2012.jpg"/>
+</div>
+
+<div effect="fade-in">
+<blurb class="center">2019</blurb>
+<image width="100%" filename="composer2019.jpg"/>
+</div>
+</slide>
diff --git a/slides/intro/composer2012.jpg b/slides/intro/composer2012.jpg
new file mode 100644
index 00000000..028a4bb2
Binary files /dev/null and b/slides/intro/composer2012.jpg differ
diff --git a/slides/intro/composer2019.jpg b/slides/intro/composer2019.jpg
new file mode 100644
index 00000000..01766623
Binary files /dev/null and b/slides/intro/composer2019.jpg differ
diff --git a/slides/intro/ecosystem-beginning.xml b/slides/intro/ecosystem-beginning.xml
new file mode 100644
index 00000000..a4482838
--- /dev/null
+++ b/slides/intro/ecosystem-beginning.xml
@@ -0,0 +1,14 @@
+<slide>
+<title>LAMP</title>
+
+<blurb class="centre">Linux, Apache, MySQL, PHP</blurb>
+<break lines="2"/>
+
+<blurb>Performance:<br/><small>%mod_php%, shared-nothing, easy to scale up</small></blurb>
+<blurb>Robust:<br/><small>Prefork, shared-nothing, SQL LIMIT</small></blurb>
+<blurb>Security:<br/><small>%max_execution_time%, %memory_limit%, %"safe" mode%</small></blurb>
+
+<break lines="2"/>
+<blurb class="big-centre">Perfect for shared hosting</blurb>
+</slide>
+
diff --git a/slides/intro/fig.png b/slides/intro/fig.png
new file mode 100644
index 00000000..bc90db4c
Binary files /dev/null and b/slides/intro/fig.png differ
diff --git a/slides/intro/fig.xml b/slides/intro/fig.xml
new file mode 100644
index 00000000..b23d392b
--- /dev/null
+++ b/slides/intro/fig.xml
@@ -0,0 +1,24 @@
+<slide>
+<image filename="fig.png" width="25%"/>
+
+<break lines="2"/>
+<image align="right" filename="psrs.png"/>
+
+<list>
+	<bullet>2009: *PHP Standards Group*</bullet>
+	<bullet>2011: *Framework Interoperability Group*</bullet>
+</list>
+<break/>
+
+<list>
+	<bullet>*PSR-0* and *PSR-4*: key enabler for Composer</bullet>
+	<bullet>*PSR-1* and *PSR-12*: preset in many IDEs, which makes them the default coding standard for nearly all PHP projects</bullet>
+</list>
+<break/>
+
+<list>
+	<bullet>2017: *FIG 3.0*</bullet>
+	<bullet>2018: *Symfony leaves FIG*</bullet>
+</list>
+
+</slide>
diff --git a/slides/intro/frameworks.png b/slides/intro/frameworks.png
new file mode 100644
index 00000000..034a818f
Binary files /dev/null and b/slides/intro/frameworks.png differ
diff --git a/slides/intro/frameworks.xml b/slides/intro/frameworks.xml
new file mode 100644
index 00000000..154ab421
--- /dev/null
+++ b/slides/intro/frameworks.xml
@@ -0,0 +1,5 @@
+<slide>
+<title>Frameworks</title>
+
+<image filename="frameworks.png" width="100%"/>
+</slide>
diff --git a/slides/intro/interesting-choices.xml b/slides/intro/interesting-choices.xml
new file mode 100644
index 00000000..38729e3d
--- /dev/null
+++ b/slides/intro/interesting-choices.xml
@@ -0,0 +1,24 @@
+<slide>
+<title>What Was Rasmus Thinking?</title>
+
+<break lines="3"/>
+<div effect="fade-in-out"><blurb class="big-centre">Case insensitive<br/>function names?</blurb></div>
+<div effect="fade-in-out"><blurb class="big-centre">Naming inconsistencies?</blurb></div>
+<div effect="fade-in-out"><blurb class="big-centre">What's with the %$% signs?</blurb></div>
+<div effect="fade-in-out"><blurb class="big-centre">Globals?</blurb></div>
+<div effect="fade-in-out"><blurb class="big-centre">%register_globals%β€½</blurb></div>
+<div effect="fade-in-out"><blurb class="big-centre">⸘%magic_quotes%β€½</blurb></div>
+
+<div effect="fade-in">
+<blurb class="big-centre">OMGWTFBBQ?</blurb>
+<example><![CDATA[<?php
+array_search($needle, $haystack);
+strstr($haystack, $needle);
+in_array($needle, $haystack);
+substr_count($haystack, $needle);
+array_key_exists($needle, $haystack);
+strchr($haystack, $needle);
+?>]]></example>
+</div>
+
+</slide>
diff --git a/slides/intro/msx.jpg b/slides/intro/msx.jpg
new file mode 100644
index 00000000..6c6f220c
Binary files /dev/null and b/slides/intro/msx.jpg differ
diff --git a/slides/intro/msx.xml b/slides/intro/msx.xml
new file mode 100644
index 00000000..1a15632f
--- /dev/null
+++ b/slides/intro/msx.xml
@@ -0,0 +1,6 @@
+<slide>
+<title>My First Computer</title>
+
+<break lines="4"/>
+<image filename="msx.jpg"/>
+</slide>
diff --git a/slides/intro/new-in-php74.xml b/slides/intro/new-in-php74.xml
new file mode 100644
index 00000000..4344ebbc
--- /dev/null
+++ b/slides/intro/new-in-php74.xml
@@ -0,0 +1,18 @@
+<slide>
+<title>What's new in PHP 7.4?</title>
+
+<list>
+<bullet>*Typed Properties*</bullet>
+<bullet>*FFI*</bullet>
+<bullet>*Preloading*</bullet>
+<bullet>Variance Checking for Arguments/Return Types</bullet>
+<bullet>Null Coalesce Assignment (%??=%)</bullet>
+<bullet>Spread Operator:<br/>%$apples = ['🍎',  '🍏']; $fruits = ['πŸ‘', ...$apples, 'πŸ…'];%</bullet>
+<bullet>Hash Extension always available</bullet>
+<bullet>New Custom Serialisation</bullet>
+<bullet>Weak References</bullet>
+<bullet>Short Arrow Functions: %$arrow = fn($x) => $x + $y;%</bullet>
+<bullet>Numerical Literal Separator: %3.141_592_653_589_793_238_462_643_383%</bullet>
+</list>
+
+</slide>
diff --git a/slides/intro/new-in-php80.xml b/slides/intro/new-in-php80.xml
new file mode 100644
index 00000000..7e5311a6
--- /dev/null
+++ b/slides/intro/new-in-php80.xml
@@ -0,0 +1,8 @@
+<slide>
+<title>What's coming in PHP 8.0?</title>
+
+<div effect="fade-in">
+<blurb class="big-centre">JIT<br/><small>*Just In Time* Compiler</small></blurb>
+</div>
+
+</slide>
diff --git a/slides/intro/packagist.xml b/slides/intro/packagist.xml
new file mode 100644
index 00000000..40a479d9
--- /dev/null
+++ b/slides/intro/packagist.xml
@@ -0,0 +1,18 @@
+<slide>
+<title>Packagist</title>
+
+<div effect="fade-out">
+<blurb class="center">2011 (start)</blurb>
+<image width="100%" filename="packagist2011a.jpg"/>
+</div>
+
+<div effect="fade-in-out">
+<blurb class="center">2011 (end)</blurb>
+<image width="100%" filename="packagist2011b.jpg"/>
+</div>
+
+<div effect="fade-in">
+<blurb class="center">2019</blurb>
+<image width="100%" filename="packagist2019.jpg"/>
+</div>
+</slide>
diff --git a/slides/intro/packagist2011a.jpg b/slides/intro/packagist2011a.jpg
new file mode 100644
index 00000000..439a89c5
Binary files /dev/null and b/slides/intro/packagist2011a.jpg differ
diff --git a/slides/intro/packagist2011b.jpg b/slides/intro/packagist2011b.jpg
new file mode 100644
index 00000000..7228272e
Binary files /dev/null and b/slides/intro/packagist2011b.jpg differ
diff --git a/slides/intro/packagist2019.jpg b/slides/intro/packagist2019.jpg
new file mode 100644
index 00000000..ffc77fc8
Binary files /dev/null and b/slides/intro/packagist2019.jpg differ
diff --git a/slides/intro/pear-over-time.xml b/slides/intro/pear-over-time.xml
new file mode 100644
index 00000000..99413281
--- /dev/null
+++ b/slides/intro/pear-over-time.xml
@@ -0,0 +1,13 @@
+<slide>
+<title>PEAR</title>
+
+<div effect="fade-out">
+<blurb class="center">2003</blurb>
+<image width="100%" filename="pear2003.jpg"/>
+</div>
+
+<div effect="fade-in">
+<blurb class="center">2019</blurb>
+<image width="100%" filename="pear2019.jpg"/>
+</div>
+</slide>
diff --git a/slides/intro/pear2003.jpg b/slides/intro/pear2003.jpg
new file mode 100644
index 00000000..33b18ab8
Binary files /dev/null and b/slides/intro/pear2003.jpg differ
diff --git a/slides/intro/pear2019.jpg b/slides/intro/pear2019.jpg
new file mode 100644
index 00000000..931ecdcc
Binary files /dev/null and b/slides/intro/pear2019.jpg differ
diff --git a/slides/intro/php-3018.xml b/slides/intro/php-3018.xml
new file mode 100644
index 00000000..ee05a96f
--- /dev/null
+++ b/slides/intro/php-3018.xml
@@ -0,0 +1,6 @@
+<slide>
+<title>My First PHP</title>
+
+<break lines="2"/>
+<image filename="3018.png"/>
+</slide>
diff --git a/slides/intro/php-at-25.xml b/slides/intro/php-at-25.xml
new file mode 100644
index 00000000..58d41204
--- /dev/null
+++ b/slides/intro/php-at-25.xml
@@ -0,0 +1,4 @@
+<slide>
+<break lines="9"/>
+<blurb class="big-centre">PHP at 25<br/><br/>πŸŽ‚ 🍸 🍰 🍷 🍻 πŸ₯‚ 🍩 🍾</blurb>
+</slide>
diff --git a/slides/intro/php7-dce-vld.xml b/slides/intro/php7-dce-vld.xml
new file mode 100644
index 00000000..50584edb
--- /dev/null
+++ b/slides/intro/php7-dce-vld.xml
@@ -0,0 +1,218 @@
+<slide>
+<title>Dead Code Elimination (DCE)</title>
+
+<div effect="fade-out">
+<example><![CDATA[
+php -d opcache.optimization_level=-1 -d vld.active=1 script
+]]></example>
+
+<example><![CDATA[
+<?php
+function fn() {
+    $a = 1;
+    return 0;
+}
+]]></example>
+
+<blurb>PHP 7.1</blurb>
+<example>
+compiled vars:  !0 = $a
+line     #* E I O op                           ext  return  operands
+   3     0  E >   QM_ASSIGN                         !0      1
+   4     1      > RETURN                                    0
+</example>
+
+<blurb>PHP 7.2</blurb>
+<example>
+compiled vars:  none
+line     #* E I O op                           ext  return  operands
+   4     0  E > > RETURN                                    0
+</example>
+</div>
+
+<div effect="fade-in-out">
+<example><![CDATA[
+<?php
+function foo(string $s1, string $s2, string $s3, string $s4) {
+    $x = ($s1 . $s2) . ($s3 . $s4);
+    $x = 0;
+    return $x;
+}
+]]></example>
+
+<example><![CDATA[
+PHP 7.1                                   PHP 7.2
+foo: (lines=10, args=4, vars=5, tmps=3)   foo: (lines=5, args=4, vars=4, tmps=3)
+L0:   CV0($s1) = RECV 1                   L0:   CV0($s1) = RECV 1
+L1:   CV1($s2) = RECV 2                   L1:   CV1($s2) = RECV 2
+L2:   CV2($s3) = RECV 3                   L2:   CV2($s3) = RECV 3
+L3:   CV3($s4) = RECV 4                   L3:   CV3($s4) = RECV 4
+L4:   T6 = CONCAT CV0($s1) CV1($s2)       L4:   RETURN int(0)
+L5:   T7 = CONCAT CV2($s3) CV3($s4)
+L6:   T5 = CONCAT T6 T7
+L7:   ASSIGN CV4($x) T5
+L8:   ASSIGN CV4($x) int(0)
+L9:   RETURN CV4($x)
+]]></example>
+</div>
+
+<div effect="fade-in-out">
+<blurb>Try to trick it:</blurb>
+<example><![CDATA[
+<?php
+function foo($a) {
+    $b = $a += 3;
+    return $a;
+}
+]]></example>
+
+<blurb>PHP 7.2</blurb>
+<example><![CDATA[
+compiled vars:  !0 = $a, !1 = $b
+line     #* E I O op                           ext  return  operands
+   2     0  E >   RECV                              !0      
+   3     1        ASSIGN_ADD                     0  !1      !0, 3
+   4     2      > RETURN                                    !0
+]]></example>
+</div>
+
+<div effect="fade-in-out">
+<blurb>But...</blurb>
+<example fontsize="1.05em" result='0' title="" type=""><![CDATA[
+function foo(int $x, int $y) {
+    $a = [$x];
+    $a[1] = $y;
+    $a = $y;
+    return $a;
+}
+]]></example>
+
+<table class="two"><tr>
+<td>
+<blurb>PHP 7.2</blurb>
+<example>
+compiled vars:  !0 = $x, !1 = $y, !2 = $a
+line     #*  op            return  operands
+   2     0   RECV          !0
+         1   RECV          !1
+   3     2   INIT_ARRAY    !2      !0
+   4     3   ASSIGN_DIM            !2, 1
+         4   OP_DATA               !1
+   5     5   ASSIGN                !2, !1
+   6     6   RETURN                !2
+</example>
+</td>
+<td>
+<blurb>PHP 7.3</blurb>
+<example>
+compiled vars:  !0 = $x, !1 = $y, !2 = $a
+line     #* op             return  operands
+   2     0  RECV           !0      
+         1  RECV           !1      
+   5     2  QM_ASSIGN      !2      !1
+   6     3  RETURN                 !2
+</example>
+</td>
+</tr>
+</table>
+</div>
+
+<div effect="fade-in-out">
+<example fontsize="1.05em" result='0' title="" type=""><![CDATA[
+<?php
+class A { }
+function foo(int $x) {
+    $a = new A;
+    $a->foo = $x;
+    return $x;
+}
+]]></example>
+
+<blurb>PHP 7.3</blurb>
+<example><![CDATA[
+compiled vars:  !0 = $x
+line     #* op         return  operands
+   3     0  RECV       !0      
+   6     1  RETURN             !0
+]]></example>
+</div>
+
+<div effect="fade-in-out">
+<example fontsize="1.05em" result='0' title="" type=""><![CDATA[
+<?php
+class A {
+    function __destruct() {}
+}
+function foo(int $x) {
+    $a = new A;
+    $a->foo = $x;
+    return $x;
+}
+]]></example>
+
+<blurb>PHP 7.3</blurb>
+<example><![CDATA[
+compiled vars:  !0 = $x, !1 = $a
+line     #* op            return  operands
+   5     0  RECV          !0      
+   6     1  NEW           $2      :9
+         2  DO_FCALL              
+         3  ASSIGN                !1, $2
+   7     4  ASSIGN_OBJ            !1, 'foo'
+         5  OP_DATA               !0
+   8     6  RETURN                !0
+   9     7* RETURN                null
+]]></example>
+</div>
+
+<div effect="fade-in-out">
+<example><![CDATA[
+<?php
+function foo(int $x) {
+    if ($x) {
+        $a = [0,1];
+    } else {
+        $a = [0,2];
+    }
+    return $a[0];
+}
+]]></example>
+
+<blurb fontsize="1.1em" align="left">PHP 7.3</blurb>
+<example><![CDATA[
+compiled vars:  !0 = $x
+line     #* op          return  operands
+   2     0  RECV        !0      
+   8     1  RETURN              0
+]]></example>
+</div>
+
+<div effect="fade-in-out">
+<example fontsize="1.05em" result='0' title="" type=""><![CDATA[
+<?php
+function foo() {
+    $o = new stdClass();
+    $o->foo = 0;
+    $i = 1;
+    $c = $i < 2;
+    if ($c) {
+        $k = 2 * $i;
+        $o->foo = $i;
+        echo $o->foo;
+    }
+    $o->foo += 2;
+    $o->foo++;
+    return $o->foo;
+}
+]]></example>
+
+<blurb>PHP 7.4</blurb>
+<example><![CDATA[
+compiled vars:  none
+line     #* op             return  operands
+  10     0  ECHO                   1
+  14     1  RETURN                 4
+]]></example>
+</div>
+
+</slide>
diff --git a/slides/intro/php7-new.xml b/slides/intro/php7-new.xml
new file mode 100644
index 00000000..07851590
--- /dev/null
+++ b/slides/intro/php7-new.xml
@@ -0,0 +1,33 @@
+<slide><title>PHP 7</title>
+
+<div effect="fade-out">
+<blurb class="big-centre">Engine Improvements</blurb>
+
+<blurb class="center">βœ” 100%+ performance gain on most real-world applications</blurb>
+<blurb class="center">βœ” Lower memory usage, sometimes drastically lower</blurb>
+<break/>
+<hr/>
+<break/>
+<list>
+	<bullet type="none">zval size reduced from 24 to 16 bytes</bullet>
+	<bullet type="none">Hashtable size reduced from 72 to 56 bytes</bullet>
+	<bullet type="none">Hashtable bucket size reduced from 72 to 32 bytes</bullet>
+	<bullet type="none">Immutable array optimization</bullet>
+</list>
+</div>
+
+<div effect="fade-in">
+<list>
+<bullet>New memory allocator similar to jemalloc</bullet>
+<bullet>Faster hashtable iteration API</bullet>
+<bullet>Array duplication optimization</bullet>
+<bullet>PCRE JIT enabled by default</bullet>
+<bullet>Precomputed string hashes</bullet>
+<bullet>Fast ZPP (ZendParseParameters) implementation</bullet>
+<bullet>Faster stack-allocated zvals (instead of heap)</bullet>
+<bullet>Optimized VM calling</bullet>
+<bullet>Global register variables with gcc 4.8+</bullet>
+<bullet>plus hundreds of micro-optimizations</bullet>
+</list>
+</div>
+</slide>
diff --git a/slides/intro/php7-prod.xml b/slides/intro/php7-prod.xml
new file mode 100644
index 00000000..b8c81b35
--- /dev/null
+++ b/slides/intro/php7-prod.xml
@@ -0,0 +1,10 @@
+<slide>
+<title>PHP 7 in production</title>
+
+<div effect="fade-out">
+<image width="100%" filename="perc95.png" align="center"/>
+</div>
+<div effect="fade-in">
+<image width="100%" filename="mem.png" align="center"/>
+</div>
+</slide>
diff --git a/slides/intro/phpclasses.xml b/slides/intro/phpclasses.xml
new file mode 100644
index 00000000..ce2dae5c
--- /dev/null
+++ b/slides/intro/phpclasses.xml
@@ -0,0 +1,18 @@
+<slide>
+<title>phpclasses</title>
+
+<div effect="fade-out">
+<blurb class="center">2003</blurb>
+<image width="100%" filename="phpclasses2003.jpg"/>
+</div>
+
+<div effect="fade-in-out">
+<blurb class="center">2010</blurb>
+<image width="100%" filename="phpclasses2010.jpg"/>
+</div>
+
+<div effect="fade-in">
+<blurb class="center">2019</blurb>
+<image width="100%" filename="phpclasses2019.jpg"/>
+</div>
+</slide>
diff --git a/slides/intro/phpclasses2003.jpg b/slides/intro/phpclasses2003.jpg
new file mode 100644
index 00000000..a44752fb
Binary files /dev/null and b/slides/intro/phpclasses2003.jpg differ
diff --git a/slides/intro/phpclasses2010.jpg b/slides/intro/phpclasses2010.jpg
new file mode 100644
index 00000000..8d99ecf0
Binary files /dev/null and b/slides/intro/phpclasses2010.jpg differ
diff --git a/slides/intro/phpclasses2019.jpg b/slides/intro/phpclasses2019.jpg
new file mode 100644
index 00000000..5d84ec5c
Binary files /dev/null and b/slides/intro/phpclasses2019.jpg differ
diff --git a/slides/intro/phpstan.png b/slides/intro/phpstan.png
new file mode 100644
index 00000000..809f6e18
Binary files /dev/null and b/slides/intro/phpstan.png differ
diff --git a/slides/intro/phpstan.xml b/slides/intro/phpstan.xml
new file mode 100644
index 00000000..4b332078
--- /dev/null
+++ b/slides/intro/phpstan.xml
@@ -0,0 +1,4 @@
+<slide>
+<break lines="1"/>
+<image filename="phpstan.png" width="80%"/>
+</slide>
diff --git a/slides/intro/phpunit.xml b/slides/intro/phpunit.xml
new file mode 100644
index 00000000..91c9a615
--- /dev/null
+++ b/slides/intro/phpunit.xml
@@ -0,0 +1,4 @@
+<slide>
+<break lines="7"/>
+<image filename="PHPUnit_Logo.svg" width="80%"/>
+</slide>
diff --git a/slides/intro/psrs.png b/slides/intro/psrs.png
new file mode 100644
index 00000000..388ec04d
Binary files /dev/null and b/slides/intro/psrs.png differ
diff --git a/slides/intro/tools.xml b/slides/intro/tools.xml
new file mode 100644
index 00000000..ec39f6f9
--- /dev/null
+++ b/slides/intro/tools.xml
@@ -0,0 +1,8 @@
+<slide>
+
+<break lines="2"/>
+<blurb class="big-centre">Libraries and Tools</blurb>
+<break lines="2"/>
+<blurb class="big-centre">πŸ“– πŸ“— πŸ“œ πŸ“„ πŸ“’ πŸ“š </blurb>
+<blurb class="big-centre">πŸ”¨ πŸ—‘οΈ ⛏️ βš’οΈ πŸ› οΈ πŸ—‘οΈ<br/>πŸ”© πŸ”§ βš™οΈ πŸ—œοΈ πŸ”— ⛓️ </blurb>
+</slide>
diff --git a/slides/intro/user-groups.xml b/slides/intro/user-groups.xml
new file mode 100644
index 00000000..49d2299c
--- /dev/null
+++ b/slides/intro/user-groups.xml
@@ -0,0 +1,7 @@
+<slide>
+<title>Usergroups</title>
+
+<div class="center" width="100%">
+<iframe align="center" width="1200" height="700" filename="http://php.ug/"/>
+</div>
+</slide>
diff --git a/slides/intro/var_dump.xml b/slides/intro/var_dump.xml
new file mode 100644
index 00000000..05de5c1d
--- /dev/null
+++ b/slides/intro/var_dump.xml
@@ -0,0 +1,18 @@
+<slide>
+<title>Debugging</title>
+
+<div effect="fade-out">
+<break lines="5"/>
+<blurb class="big-centre">With<br/><br/>%echo%, %var_dump%, and %print_r%</blurb>
+</div>
+
+<div effect="fade-in">
+<blurb class="big-centre">With helpers like *Kint*</blurb>
+
+<iframe zoom="2" width="1580" filename="http://whisky/test/xdebug/var_dump-kint.php"/>
+
+<break/>
+<blurb>%https://github.com/raveren/kint.git%</blurb>
+</div>
+
+</slide>
diff --git a/slides/xdebug/infinite.xml b/slides/xdebug/infinite.xml
index d653ecab..cd946514 100644
--- a/slides/xdebug/infinite.xml
+++ b/slides/xdebug/infinite.xml
@@ -2,7 +2,9 @@
 <slide fontsize="6em">
 	<title>Protection</title>
 
-	<image filename="infinite.png" align="right"/>
+	<image filename="infinite.png" width="75%" align="center"/>
+
+	<break lines="3" />
 
 	<example class="code_large" fontsize="1.7em">
 xdebug.max_nesting_level=4</example>
diff --git a/slides/xdebug/local-vars.xml b/slides/xdebug/local-vars.xml
index 174536c9..0a2d8360 100644
--- a/slides/xdebug/local-vars.xml
+++ b/slides/xdebug/local-vars.xml
@@ -2,7 +2,7 @@
 <slide fontsize="6em">
 	<title>Local variables</title>
 
-	<image filename="local-vars.png" align="center"/>
+	<image width="75%" filename="local-vars.png" align="center"/>
 
 	<break lines="3" />
 	<example class="code_large">; enable showing local vars in error messages
diff --git a/slides/xdebug/phpinternalsnews.xml b/slides/xdebug/phpinternalsnews.xml
index 5ac5671c..03a5946e 100644
--- a/slides/xdebug/phpinternalsnews.xml
+++ b/slides/xdebug/phpinternalsnews.xml
@@ -1,5 +1,6 @@
 <slide>
+<break/>
 <iframe align="center" scrolling="no" width="1280" height="720" filename="http://phpinternals.news" attr="&#160;"/>
 <break lines="2"/>
-<blurb align="center">%https://phpinternals.news%</blurb>
+<blurb class="big-centre">%https://phpinternals.news%</blurb>
 </slide>
diff --git a/slides/xdebug/phpstorm.xml b/slides/xdebug/phpstorm.xml
index f5e54a4a..e727e6ec 100644
--- a/slides/xdebug/phpstorm.xml
+++ b/slides/xdebug/phpstorm.xml
@@ -1 +1 @@
-<slide><title>PhpStorm</title><break/><image filename="phpstorm.png"/></slide>
+<slide><title>PhpStorm</title><break/><image width="80%" filename="phpstorm.png"/></slide>
diff --git a/slides/xdebug/pimp1-quick.xml b/slides/xdebug/pimp1-quick.xml
index 6a8ae552..6728b7cb 100644
--- a/slides/xdebug/pimp1-quick.xml
+++ b/slides/xdebug/pimp1-quick.xml
@@ -3,11 +3,11 @@
 	<title>Error Messages</title>
 
 <div effect="fade-out">
-	<image align="center" filename="stacktrace4.png"/>
+	<image width="75%" align="center" filename="stacktrace4.png"/>
 </div>
 
 <div effect="fade-in">
-	<image align="center" filename="stacktrace4a.png"/>
+	<image width="75%" align="center" filename="stacktrace4a.png"/>
 </div>
 
 </slide>
diff --git a/slides/xdebug/resources.xml b/slides/xdebug/resources.xml
index c074a09c..741a0c26 100644
--- a/slides/xdebug/resources.xml
+++ b/slides/xdebug/resources.xml
@@ -5,6 +5,7 @@
 <qrcode>https://derickrethans.nl/talks/:-:talk_id:-:</qrcode>
 <break line="2"/>
 	<blurb class="center">*Slides*</blurb>
+	<blurb class="center">%:-:url:-:%</blurb>
 	<blurb class="center">%:-:joindin:-:%</blurb>
 <break line="2"/>
 	<blurb class="center">:-:speaker:-: β€” @:-:twitter:-: β€” :-:email:-:</blurb>
diff --git a/slides/xdebug/xdebug.xml b/slides/xdebug/xdebug.xml
index a6f5275c..8104590a 100644
--- a/slides/xdebug/xdebug.xml
+++ b/slides/xdebug/xdebug.xml
@@ -1,17 +1,9 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<slide fontsize="6em">
-	<title>Xdebug</title>
-	<blurb> </blurb>
-	<blurb> </blurb>
-	<blurb> </blurb>
-	<blurb> </blurb>
-	<list fontsize="4.5em">
-		<bullet>No more "echo' debugging"</bullet>
-		<bullet>Zend extension</bullet>
-		<bullet type="none" marginleft="2em">zend_extension=/path/to/xdebug.so</bullet>
-		<bullet type="none" marginleft="2em">zend_extension_ts=C:/path/to/xdebug.dll</bullet>
-		<bullet>Hooks into the standard error handler</bullet>
-		<bullet type="none" marginleft="2em">and into the execution of functions</bullet>
-	</list>
+<slide>
+
+<image filename="xdebug-logo.png"/>
+
+<break lines="4"/>
+<blurb class="big-centre">Debugging Aid</blurb>
+<blurb class="big-centre">Step Debugger</blurb>
 
 </slide>
diff --git a/templates/default/image.ezt b/templates/default/image.ezt
index cb4e93be..acdb5a28 100644
--- a/templates/default/image.ezt
+++ b/templates/default/image.ezt
@@ -1,6 +1,7 @@
 {use $node, $pres, $inline = false}
 {var $align = get_attribute( $node, 'align' )}
 {var $attr = get_attribute( $node, 'attr' )}
+{var $width = get_attribute( $node, 'width' )}
 {if $attr}<div{if $align} style='float: {$align}'{/if}><div>{/if}
-<img {if $inline}class='inline' {/if}{if $align}align='{$align}' class='{$align}' {/if}src='{$pres->base}{get_attribute( $node, 'filename' )}'/>
+<img {if $inline}class='inline' {/if}{if $align}align='{$align}' class='{$align}' {/if}{if $width}width='{$width}' {/if}src='{$pres->base}{get_attribute( $node, 'filename' )}'/>
 {if $attr}<p class='attribution'>{$attr}</p></div></div>{/if}
diff --git a/templates/default/notes.ezt b/templates/default/notes.ezt
new file mode 100644
index 00000000..e69de29b