com presentations: Oz15: oz15.html oz15.xml sunshinephp15.xml

[email protected] (Rasmus Lerdorf)
Newsgroups php.pres
Message-ID <[email protected]>
Commit:    931873ca1f989c27c4d40c50e8740f5224f4d605
Author:    Rasmus Lerdorf <[email protected]>         Sun, 8 Mar 2015 11:58:44 -0700
Parents:   6dbf1d517fa11a05f75f5655225e278d93918c56
Branches:  master

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

Log:
Oz15

Changed paths:
  A  oz15.html
  A  oz15.xml
  M  sunshinephp15.xml
diff_931873ca1f989c27c4d40c50e8740f5224f4d605.txt (text/plain, 29.1 KB)
diff --git a/oz15.html b/oz15.html
new file mode 100644
index 0000000..2dbe3de
--- /dev/null
+++ b/oz15.html
@@ -0,0 +1,720 @@
+<!doctype html>
+<html lang="en">
+
+	<head>
+		<meta charset="utf-8">
+
+		<title>PHP</title>
+
+		<meta name="description" content="PHP">
+		<meta name="author" content="Rasmus Lerdorf">
+
+		<meta name="apple-mobile-web-app-capable" content="yes" />
+		<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
+
+		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
+
+		<link rel="stylesheet" href="/reveal.js/css/reveal.css">
+		<link rel="stylesheet" href="/reveal.js/css/theme/white.css" id="theme">
+
+		<!-- For syntax highlighting - note that these are not the generic highlight.js theme files - see https://github.com/nwinkler/reveal-highlight-themes -->
+		<link rel="stylesheet" href="/styles/xcode.css">
+
+		<!-- Override a few styles -->
+        <style>
+        /*
+		   Not actually sure why this block isn't being picked up from the syntax highlight css 
+		   If you change the syntax highlight theme, copy the first block here
+		*/
+        .reveal pre code {
+                display: block;
+                overflow-x: auto;
+                padding: 0.5em;
+                line-height: 125%;
+                background: #fff;
+                color: black;
+                -webkit-text-size-adjust: none;
+        }
+        /* Left-align h3 and h4 if they are p elements */
+        h3.p {
+                text-align: left;
+        }
+        h4.p {
+                text-align: left;
+        }
+        /* and left-aligned but slightly indented bullet lists */
+        .reveal ul {
+            display: block;
+            margin: 0 0 1em 3em;
+        }
+		/* Example titles */
+		p.example {
+			text-align: left;
+			margin: 0 0 -0.5em 1em;
+			font-weight: bold;
+		}
+		/* Example output style */
+		pre.output {
+            display: block;
+            overflow-x: auto;
+            padding: 0.5em;
+            background: #ddd;
+            color: black;
+			line-height: 200%;
+            -webkit-text-size-adjust: none;
+		}
+        </style>
+
+		 <!-- Printing and PDF exports -->
+		<script>
+			var link = document.createElement( 'link' );
+			link.rel = 'stylesheet';
+			link.type = 'text/css';
+			link.href = window.location.search.match( /print-pdf/gi ) ? '/reveal.js/css/print/pdf.css' : '/reveal.js/css/print/paper.css';
+			document.getElementsByTagName( 'head' )[0].appendChild( link );
+		</script>
+
+        <!-- Needed for charts to work. Fall back to network if no local copy -->
+        <script type='text/javascript' src='/jquery.min.js'></script> 
+        <script>window.jQuery || document.write('<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">\x3C/script>')</script>
+        <script src="/highcharts.js"></script>
+        <script>window.Highcharts || document.write('<script src="http://code.highcharts.com/highcharts.js">\x3C/script>')</script>
+
+		<!--[if lt IE 9]>
+		<script src="/reveal.js/lib/js/html5shiv.js"></script>
+		<![endif]-->
+	</head>
+
+	<body>
+
+		<div class="reveal">
+
+			<!-- Any section element inside of this container is displayed as a slide -->
+			<div class="slides">
+				<section>
+					<h1>PHP</h1>
+					<h3>PHP Australia</h3>
+					<h3>Sydney</h3>
+					<h3>Mar. 12, 2015</h3>
+					<a href="http://talks.php.net/oz15">http://talks.php.net/oz15</a><br><br>
+					<p>Rasmus Lerdorf<br>
+					<small><a href="http://twitter.com/@rasmus">@rasmus</a></small>
+					</p>
+					<aside class="notes">
+						PHP in 2015 with a focus on performance					</aside>
+				</section>
+					<section>
+		<h1 style="text-align:center;">20 Years of PHP!??</h1>
+<aside class="notes"><br />
+Argh!<br />
+</aside>
+	</section>
+	<section>
+		<h3 class="p">PHP Announcement June 8, 1995</h3>
+		<h4 class="p">Posted to comp.infosystems.www.authoring.cgi</h4>
+		<pre><code class="html" data-trim>Subject: Announce: Personal Home Page Tools (PHP Tools)
+
+Announcing the Personal Home Page Tools (PHP Tools) version 1.0.
+These tools are a set of small tight cgi binaries written in C.
+They perform a number of functions including:
+
+. Logging accesses to your pages in your own private log files
+. Real-time viewing of log information
+. Providing a nice interface to this log information
+. Displaying last access information right on your pages
+. Full daily and total access counters
+. Banning access to users based on their domain
+. Password protecting pages based on users' domains
+. Tracking accesses ** based on users' e-mail addresses **
+. Tracking referring URL's - HTTP_REFERER support
+. Performing server-side includes without needing server support for it
+. Ability to not log accesses from certain domains (ie. your own)
+. Easily create and display forms
+. Ability to use form information in following documents
+
+Here is what you don't need to use these tools:
+
+. You do not need root access - install in your ~/public_html dir
+. You do not need server-side includes enabled in your server
+. You do not need access to Perl or Tcl or any other script interpreter
+. You do not need access to the httpd log files
+
+The only requirement for these tools to work is that you have
+the ability to execute your own cgi programs.  Ask your system
+administrator if you are not sure what this means.
+
+The tools also allow you to implement a guestbook or any other
+form that needs to write information and display it to users
+later in about 2 minutes.
+
+The tools are in the public domain distributed under the GNU
+Public License.  Yes, that means they are free!
+
+For a complete demonstration of these tools, point your browser
+at: http://www.io.org/~rasmus
+
+--
+Rasmus Lerdorf
[email protected]
+http://www.io.org/~rasmus</code></pre>
+<aside class="notes"><br />
+- focused on problems that could be solved<br />
+- PHP was hidden in there in these two points:<br />
+  . Easily create and display forms<br />
+  . Ability to use form information in following documents<br />
+</aside>
+	</section>
+	<section>
+		<h2>C API for the Web</h2>
+		<pre><code class="C" data-trim>void Cos(void) {
+    Stack *s;
+    char temp[64];
+
+    s = Pop();
+    if(!s) {
+        Error(&quot;Stack error in cos&quot;);
+        return;
+    }
+    sprintf(temp,&quot;%f&quot;,cos(s-&gt;douval));
+    Push(temp,DNUMBER);
+}</code></pre>
+		<h4 class="p">And you could then use it like this:</h4>
+		<pre><code class="nohighlight" data-trim>&lt;html&gt;&lt;head&gt;&lt;title&gt;Cos Example&lt;/title&gt;&lt;/head&gt;
+&lt;body&gt;&lt;h1&gt;Cos Example&lt;/h1&gt;
+&lt;?echo Cos($input)&gt;
+&lt;/body&gt;&lt;/html&gt;</code></pre>
+<aside class="notes"><br />
+Actually the very first markup used html comments<br />
+&lt;? ... &gt; came shortly after.<br />
+Note the lack of the closing '?'<br />
+BUT nobody was interested!<br />
+</aside>
+	</section>
+	<section>
+		<h1 style="text-align:center;"></h1>
+		<h1 style="text-align:center;">Open Source!</h1>
+<aside class="notes"><br />
+Entered the world of open source<br />
+Although the term didn't exist at the time<br />
+</aside>
+	</section>
+	<section>
+		<section id="php7">
+		<h2 margin-bottom="2em">PHP 7</h2><br>
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ engine improvements</p>
+		<ul>
+			<li style="font-size: 1em;">100%+ performance gain on most real-world applications</li>
+			<li style="font-size: 1em;">Lower memory usage</li>
+			<li style="font-size: 1em;">Native thread local storage</li>
+		</ul>
+		</section>
+<section id="php7ast">
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Abstract Syntax Tree</p>
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Return Types</p>
+		<pre><code data-trim style="font-size:1.1em;">function get_config(): array {
+    return 42;
+}
+get_config();
+
+// Catchable fatal error: Return value of get_config() must
+//  be of the type array, integer returned in %s on line %d</code></pre>
+		</section>
+<section id="php7coalesce">
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Null Coalesce Operator</p>
+		<pre><code data-trim style="font-size:1.5em;">$a = NULL;
+$b = 1;
+$c = 2;
+
+echo $a ?? $b; // 1
+echo $c ?? $b; // 2
+echo $a ?? $b ?? $c; // 1
+echo $a ?? $x ?? $c; // 2</code></pre>
+		</section>
+<section id="php7excep">
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Exceptions on Fatals</p>
+		<pre><code data-trim style="font-size:1.5em;">function call_method($obj) {
+    $obj-&gt;method();
+}
+
+call_method(null);
+// Fatal error: Call to a member function method() on a non-object</code></pre>
+		<pre><code data-trim style="font-size:1.5em;">try {
+    call_method(null);
+} catch (EngineException $e) {
+    echo &quot;Exception: {$e-&gt;getMessage()}\n&quot;;
+}
+// Exception: Call to a member function method() on a non-object</code></pre>
+		</section>
+<section id="php7cleanups">
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Removal of many deprecated features<BR/>
+     (Your PHP4 code will break!)</p>
+		<pre><code data-trim>- ext/ereg (use ext/pcre instead)
+- ext/mysql (use ext/mysqli or ext/pdo_mysql instead)
+- Assignment of new by reference
+- Scoped calls of non-static methods from incompatible $this context
+
+- dl() in php-fpm
+- set_magic_quotes_runtime() and magic_quotes_runtime()
+- set_socket_blocking() (use stream_set_blocking() instead)
+- mcrypt_generic_end() (use mcrypt_generic_deinit() instead)
+- mcrypt_ecb, mcrypt_cbc, mcrypt_cfb and mcrypt_ofb 
+  (use mcrypt_encrypt() and mcrypt_decrypt() instead)
+- datefmt_set_timezone_id() and IntlDateFormatter::setTimeZoneID() 
+  (use datefmt_set_timezone() or IntlDateFormatter::setTimeZone() instead)
+
+- xsl.security_prefs (use XsltProcessor::setSecurityPrefs() instead)
+- iconv.input_encoding, iconv.output_encoding, iconv.internal_encoding,
+  mbstring.http_input, mbstring.http_output and mbstring.internal_encoding
+  (use php.input_encoding, php.internal_encoding and php.output_encoding instead)
+
+- $is_dst parameter of the mktime() and gmmktime() functions
+- # style comments in ini files (use ; style comments instead)
+- String category names in setlocale() (use LC_* constants instead)
+- Unsafe curl file uploads (use CurlFile instead)
+- preg_replace() eval modifier (use preg_replace_callback() instead)
+- PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT driver option 
+  (use PDO::ATTR_EMULATE_PREPARES instead)
+- CN_match and SNI_server_name stream context option (use peer_name instead)</code></pre>
+		</section>
+<section id="php7nonobject">
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ 64-bit integer support on Windows</p>
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Cleanup edge-case integer overflow/underflow</p>
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Catchable "call to member function of non-object"</p>
+		<pre><code data-trim>$this-&gt;getAction()-&gt;invoke();
+// PHP 5.5: Fatal error: Call to a member function invoke() on a non-object in file on line N
+// PHP 5.6: Fatal error: Call to a member function invoke() on null in file on line N
+// PHP 7.0: Catchable fatal error: Call to a member function invoke() on null in file on line N</code></pre>
+		</section>
+<section id="php7UVS">
+		<p class="p" style="font-size:1.1em;text-align:left;">✔ Uniform variable syntax</p>
+		<pre><code data-trim>// support missing combinations of operations
+$foo()['bar']()
+[$obj1, $obj2][0]-&gt;prop
+getStr(){0}
+ 
+// support nested ::
+$foo['bar']::$baz
+$foo::$bar::$baz
+$foo-&gt;bar()::baz()
+ 
+// support nested ()
+foo()()
+$foo-&gt;bar()()
+Foo::bar()()
+$foo()()
+ 
+// support operations on arbitrary (...) expressions
+(...)['foo']
+(...)-&gt;foo
+(...)-&gt;foo()
+(...)::$foo
+(...)::foo()
+(...)()
+ 
+// two more practical examples for the last point
+(function() { ... })()
+($obj-&gt;closure)()
+ 
+// support all operations on dereferencable scalars
+// (not very useful)
+&quot;string&quot;-&gt;toLower()
+[$obj, 'method']()
+'Foo'::$bar</code></pre>
+		</section>
+<section id="php7unicode">
+		<p class="p" style="font-size:1.1em;text-align:left;">✔  Unicode Codepoint Escape Syntax</p>
+		<pre><code data-trim style="font-size:1.2em;">echo &quot;\u{202E}Right-to-left text&quot;;
+
+echo &quot;\u{1F602}&quot;;</code></pre>
+		<pre class="output" style="font-size:1.2em;">‮Right-to-left text😂		</pre>		<p class="p" style="font-size:1.1em;text-align:left;">✔ ICU IntlChar class added to intl extension</p>
+		</section>
+<section id="php7more">
+		<p class="p" style="font-size:1.5em;">More things will be added</p>
+		<p class="p" style="font-size:1.5em;">First RC scheduled for June 2015</p>
+		</section>	</section>
+	<section>
+		<section id="perf2014">
+		<p class="p" style="font-size:0.8em;text-align:left;">Time and number of machine instructions for 100 requests against Wordpress-3.6.0 front page</p>
+
+<div id="perf2014_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/perf2014.js"></script>
+		<p class="p" style="font-size:0.5em;">(click on legend items to show/hide data sets)</p>
+		</section>	</section>
+	<section>
+		<h1 style="text-align:center;">Lies, damn lies and benchmarks</h1>
+	</section>
+	<section>
+		<section id="boxspecs">
+		<h2 margin-bottom="2em">Test Box Specs</h2><br>
+		<ul>
+			<li style="font-size: 0.8em;">Gigabyte Z87X-UD3H i7-4771 4 cores @ 3.50GHz w/ 16G of Ram @ 1600MHz</li>
+			<li style="font-size: 0.8em;">Hyperthreading enabled for a total of 8 virtual cores</li>
+			<li style="font-size: 0.8em;">Toshiba THNSNHH256GBST SSD</li>
+			<li style="font-size: 0.8em;">Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u1 x86_64 GNU/Linux</li>
+			<li style="font-size: 0.8em;">MySQL 5.6.22</li>
+			<li style="font-size: 0.8em;">nginx-1.2.1 + php-fpm for all tests unless indicated otherwise</li>
+			<li style="font-size: 0.8em;">Quiet local 100Mbps network</li>
+			<li style="font-size: 0.8em;">siege benchmark tool run from a separate machine</li>
+		</ul>
+		</section>
+<section id="phpconf1">
+		<p class="p" style="text-align:left;">All versions of PHP compiled locally using gcc-4.7.2 -O2</p>
+<p class="example">configure flags</p>
+		<pre><code class="bash" data-trim>./configure --disable-debug       --with-apxs2=/usr/bin/apxs2 \
+            --enable-zend-signals --with-gd \
+            --without-pear        --with-jpeg-dir=/usr \
+            --with-png-dir=/usr   --with-vpx-dir=/usr \
+            --with-t1lib=/usr     --with-freetype-dir=/usr \
+            --enable-exif         --enable-gd-native-ttf \
+            --with-zlib           --with-mysql=/usr \
+            --with-gmp            --with-zlib-dir=/usr \
+            --with-gettext        --with-kerberos \
+            --with-imap-ssl       --with-mcrypt=/usr/local \
+            --with-iconv          --enable-sockets \
+            --with-openssl        --with-pspell \
+            --with-pdo-sqlite     --with-pdo-mysql=mysqlnd \
+            --enable-soap         --enable-xmlreader \
+            --enable-phar=shared  --with-xsl \
+            --enable-ftp          --enable-cgi \
+            --with-curl=/usr      --with-tidy \
+            --with-xmlrpc         --enable-mbstring \
+            --enable-sysvsem      --enable-sysvshm \
+            --enable-shmop        --with-readline \
+            --enable-pcntl        --enable-fpm \
+            --enable-intl         --enable-zip \
+            --with-imap           --with-mysqli=mysqlnd \
+            --enable-calendar     --prefix=/usr/local \
+            --with-mysql-sock=/var/run/mysqld/mysqld.sock \
+            --with-config-file-scan-dir=/etc/php7/conf.d \
+            --with-config-file-path=/etc/php7</code></pre>
+		</section>
+<section id="phpconf2">
+<p class="example">php.ini</p>
+		<pre><code class="ini" data-trim>[PHP]
+zend.multibyte=On
+date.timezone=&quot;America/Los_Angeles&quot;
+display_startup_errors=On
+zend.enable_gc=Off
+include_path=&quot;/usr/local/lib/php&quot;
+default_charset=&quot;UTF-8&quot;
+error_reporting=-1
+
+variables_order=GPCS
+sendmail_path=&quot;&quot;
+
+max_execution_time=60
+memory_limit=512M
+post_max_size=1024M
+cgi.force_redirect=0
+cgi.fix_pathinfo=1
+
+magic_quotes=0
+magic_quotes_gpc=0
+user_ini.filename=
+realpath_cache_size=2M
+cgi.check_shebang_line=0
+
+max_input_vars=1000
+max_file_uploads=50
+
+zend_extension=opcache.so
+opcache.enable=1
+opcache.memory_consumption=256
+opcache.interned_strings_buffer=8
+opcache.max_accelerated_files=10000
+opcache.revalidate_freq=60
+opcache.fast_shutdown=1
+opcache.enable_cli=1</code></pre>
+		</section>
+<section id="phpconf3">
+<p class="example">php-fpm.d/www.conf</p>
+		<pre><code class="ini" data-trim>[www]
+user = www-data
+group = www-data
+listen = /var/run/php-fpm.sock
+listen.owner = www-data
+listen.group = www-data
+listen.mode = 0660
+
+pm = static
+pm.max_children = 10
+pm.status_path = /status
+ping.path = /ping
+ping.response = pong</code></pre>
+		</section>
+<section id="nginxconf1">
+<p class="example">nginx.conf</p>
+		<pre><code class="nginx" data-trim>user www-data;
+worker_processes 4;
+pid /var/run/nginx.pid;
+
+events {
+        worker_connections 768;
+}
+
+http {
+        sendfile on;
+        tcp_nopush on;
+        tcp_nodelay on;
+        keepalive_timeout 65;
+        types_hash_max_size 2048;
+
+        include /etc/nginx/mime.types;
+        default_type application/octet-stream;
+
+        access_log /var/log/nginx/access.log;
+        error_log /var/log/nginx/error.log;
+
+        gzip on;
+        gzip_disable &quot;msie6&quot;;
+
+        include /etc/nginx/conf.d/*.conf;
+        include /etc/nginx/sites-enabled/*;
+}</code></pre>
+		</section>
+<section id="nginxconf2">
+<p class="example">php.conf</p>
+		<pre><code class="nginx" data-trim>location ~ \.php {
+  include                  fastcgi_params;
+  fastcgi_keep_conn        on;
+  fastcgi_index            index.php;
+  fastcgi_split_path_info  ^(.+\.php)(/.+)$;
+  fastcgi_param PATH_INFO  $fastcgi_path_info;
+  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+  fastcgi_intercept_errors on;
+  fastcgi_pass             unix:/var/run/php-fpm.sock;
+}</code></pre>
+<p class="example">hhvm.conf</p>
+		<pre><code data-trim>location ~ \.php$ {
+  include           fastcgi_params;
+  fastcgi_keep_conn on;
+  fastcgi_pass      unix:/var/run/hhvm/server.sock;
+  fastcgi_index     index.php;
+  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+}</code></pre>
+		</section>
+<section id="nginxconf3">
+<p class="example">sites-enabled/wordpress</p>
+		<pre><code class="nginx" data-trim>server {
+    listen 80;
+    server_name wordpress;
+    root /var/www/wordpress;
+    access_log /var/log/nginx/wordpress-access.log;
+    error_log /var/log/nginx/wordpress-error.log;
+
+    location / {
+        index     index.html index.htm index.php;
+        autoindex on;
+    }
+
+    location ~ /\.  { return 403; }
+
+    include php.conf;
+#   include hhvm.conf;
+}</code></pre>
+		</section>
+<section id="hhvmconf1">
+		<p class="p" style="font-size:1em;">hhvm (tags/HHVM-3.5.0-0-ga90f4733cfa0d8fefdafc7433f758f78cdc75424) from <BR/>
+"deb http://dl.hhvm.com/debian wheezy main"</p>
+<p class="example">server.ini</p>
+		<pre><code class="ini" data-trim>pid = /var/run/hhvm/pid
+hhvm.server.file_socket = /var/run/hhvm/server.sock
+hhvm.server.type = fastcgi
+hhvm.server.default_document = index.php
+hhvm.log.use_log_file = true
+hhvm.log.file = /var/log/hhvm/error.log
+hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc</code></pre>
+<p class="example">php.ini</p>
+		<pre><code class="ini" data-trim>session.save_handler = files
+session.save_path = /var/lib/php5
+session.gc_maxlifetime = 1440
+
+hhvm.log.level = Warning
+hhvm.log.always_log_unhandled_exceptions = true
+hhvm.log.runtime_error_reporting_level = 8191
+hhvm.mysql.typed_results = false</code></pre>
+		</section>	</section>
+	<section>
+		<section id="drupalbench">
+
+<div id="drupalbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/drupalbench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="wpbench">
+
+<div id="wpbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/wpbench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="bbbench">
+
+<div id="bbbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/bbbench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="mwbench">
+
+<div id="mwbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/mwbench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="opencartbench">
+
+<div id="opencartbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/opencartbench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="wardrobebench">
+
+<div id="wardrobebench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/wardrobebench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="geeklogbench">
+
+<div id="geeklogbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/geeklogbench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="traqbench">
+
+<div id="traqbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/traqbench.js"></script>
+		</section>
+<section id="traqfix">
+		<p class="p" style="font-size:1.1em;text-align:left;">Had to fix one line of code in the Avalon database library:</p>
+		<pre><code data-trim style="font-size:1em;">diff --git a/database/model.php b/database/model.php
+index 6c5f7da..c93e726 100644
+--- a/database/model.php
++++ b/database/model.php
+@@ -397,7 +397,7 @@ public function __get($var) {
+           $belongs_to['column'] = $var . '_id';
+       }
+       $model = $belongs_to['model'];
+-      return $this-&gt;$var = $model::find($belongs_to['foreign_key'], $this-&gt;$belongs_to['column']);
++      return $this-&gt;$var = $model::find($belongs_to['foreign_key'], $this-&gt;{$belongs_to['column']});
+   } else {
+       $val = $this-&gt;$var;</code></pre>
+		</section>	</section>
+	<section>
+		<section id="moodlebench">
+
+<div id="moodlebench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/moodlebench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="zencartbench">
+
+<div id="zencartbench_container" class="stretch" style="margin: 0 auto"></div>
+<script src="presentations/slides/intro/zencartbench.js"></script>
+		</section>	</section>
+	<section>
+		<section id="php_contribute">
+		<h2>Help us test!</h2>
+		</section>
+<section id="php_contribute1">
+		<h2>It is really easy!</h2>
+		</section>
+<section id="php_contribute2">
+		<p class="p" style="font-size:1.5em;text-align:left;">Install Vagrant and Virtualbox</p>
+		<p class="p" style="font-size:1.2em;text-align:left;">Then:</p>
+		<pre><code class="shell" data-trim style="font-size:1.2em;">$ git clone https://github.com/rlerdorf/php7dev.git
+
+$ cd php7dev
+
+$ vagrant up
+... (takes a bit - it is downloading 1.5G)
+
+$ vagrant ssh</code></pre>
+		<p class="p" style="font-size:1.1em;text-align:left;">It will NAT, DHCP and also has a fixed address of 192.168.7.7</p>
+		</section>
+<section id="php_contribute3">
+		<p class="p" style="font-size:1.1em;text-align:left;">http://192.168.7.7/ will show you the PHP 7 phpinfo() page</p>
+		<p class="p" style="font-size:1.1em;text-align:left;">Now you have a working Rasmus-approved dev box on your network</p>
+		</section>
+<section id="php_contribute4">
+		<p class="p" style="font-size:1.1em;text-align:left;">Switching PHP versions is trivial</p>
+		<pre><code class="shell" data-trim style="font-size:1.2em;">vagrant@php7dev:~$ sudo newphp 56
+Activating PHP 5.6.6-dev and restarting php-fpm
+
+vagrant@php7dev:~$ sudo newphp 7 debug
+Activating PHP 7.0.0-dev and restarting php-fpm</code></pre>
+		<p class="p" style="font-size:1.1em;text-align:left;">20 pre-compiled versions</p>
+		<pre><code class="shell" data-trim style="font-size:0.8em;">/usr/local/php53            /usr/local/php54-zts        /usr/local/php56-debug-zts
+/usr/local/php53-debug      /usr/local/php55            /usr/local/php56-zts
+/usr/local/php53-debug-zts  /usr/local/php55-debug      /usr/local/php70
+/usr/local/php53-zts        /usr/local/php55-debug-zts  /usr/local/php70-debug
+/usr/local/php54            /usr/local/php55-zts        /usr/local/php70-debug-zts
+/usr/local/php54-debug      /usr/local/php56            /usr/local/php70-zts
+/usr/local/php54-debug-zts  /usr/local/php56-debug</code></pre>
+		</section>
+<section id="php_contribute5">
+		<p class="p" style="font-size:1.1em;text-align:left;">Build any version</p>
+		<pre><code class="shell" data-trim style="font-size:1.2em;">$ cd php-src
+$ git checkout master
+$ git pull -r
+$ make distclean
+$ ./buildconf -f
+$ ./cn
+$ make
+$ sudo make install</code></pre>
+		<p class="p" style="font-size:1.1em;text-align:left;">or</p>
+		<pre><code class="shell" data-trim style="font-size:1.2em;">$ cd php-src
+$ git checkout PHP-5.6
+$ git pull -r
+$ make distclean
+$ ./buildconf -f
+$ ./cn56
+$ make
+$ sudo make install</code></pre>
+		</section>
+<section id="php_contribute6">
+		<div align="" style="font-size: 1.25em; color: ; margin-left: 2em; margin-right: ; margin-top: ; margin-bottom: ;"><a href="https://github.com/rlerdorf/php7dev" target="">github.com/rlerdorf/php7dev</a></div><br />
+		<p class="p" style="font-size:1.1em;">Report Bugs</p>
+		<p class="p" style="font-size:1.1em;">Useful bug reports, please!</p>
+		</section>	</section>
+			</div>
+
+		</div>
+
+		<script src="/reveal.js/lib/js/head.min.js"></script>
+		<script src="/reveal.js/js/reveal.js"></script>
+
+		<script>
+
+			Reveal.initialize({
+				controls: true,
+				progress: true,
+				history: true,
+				center: true,
+
+				transition: 'slide', // none/fade/slide/convex/concave/zoom
+				transitionSpeed: 'fast',
+
+				// Optional reveal.js plugins
+				dependencies: [
+					{ src: '/reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+					{ src: '/highlight.min.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
+					{ src: '/reveal.js/plugin/zoom-js/zoom.js', async: true },
+					{ src: '/reveal.js/plugin/notes/notes.js', async: true }
+				]
+			});
+			/* This draws the graph on the slide on a slidechanged event */
+			Reveal.addEventListener('slidechanged', function(event) {
+				var callback = "render_"+event.currentSlide.id;
+				if(typeof(window[callback])=="function") {
+					window[callback]();
+				}
+			} );
+			/* This draws the graph if we got here directly without coming from another slide */
+			Reveal.addEventListener('ready', function(event) {
+				var callback = "render_"+event.currentSlide.id;
+				if(typeof(window[callback])=="function") {
+					window[callback]();
+				}
+			} );
+		</script>
+
+	</body>
+</html>
diff --git a/oz15.xml b/oz15.xml
new file mode 100644
index 0000000..66dccf4
--- /dev/null
+++ b/oz15.xml
@@ -0,0 +1,53 @@
+<presentation 
+    template="simple" 
+    navmode="html"
+    titlecolor="#000000"
+    navbarbackground="#bbbbbb"
+    navbartopiclinks="0"
+    logo1="images/php-med-trans.png"
+    titlesize="6em"
+    navbarheight="3.5em"
+    examplebackground="#ffffff"
+    outputbackground="#ffffff"
+    exampleclass="noshadow"
+    exampleoutputclass="noshadow"
+>
+
+<notes>
+PHP in 2015 with a focus on performance
+</notes>
+
+<topic>PHP</topic>
+<title>PHP</title>
+<event>PHP Australia</event>
+<location>Sydney</location>
+<date>Mar. 12, 2015</date>
+<speaker>Rasmus Lerdorf</speaker>
+<url>http://talks.php.net/oz15</url>
+<twitter>@rasmus</twitter>
+
+<slide>slides/intro/titlepage.xml</slide>
+
+<slide>slides/intro/20years.xml</slide>
+<slide>slides/intro/phpannounce.xml</slide>
+<slide>slides/intro/capi.xml</slide>
+<slide>slides/intro/opensource.xml</slide>
+
+<slide>slides/intro/php7_2015.xml</slide>
+<slide>slides/intro/perf2014.xml</slide>
+<slide>slides/intro/benchlies.xml</slide>
+<slide>slides/intro/benchbox.xml</slide>
+<slide>slides/intro/drupalbench.xml</slide>
+<slide>slides/intro/wpbench.xml</slide>
+<slide>slides/intro/bbbench.xml</slide>
+<slide>slides/intro/mwbench.xml</slide>
+<slide>slides/intro/opencartbench.xml</slide>
+<slide>slides/intro/wardrobebench.xml</slide>
+<slide>slides/intro/geeklogbench.xml</slide>
+<slide>slides/intro/traqbench.xml</slide>
+<slide>slides/intro/moodlebench.xml</slide>
+<slide>slides/intro/zencartbench.xml</slide>
+
+<slide>slides/intro/php_contribute.xml</slide>
+
+</presentation>
diff --git a/sunshinephp15.xml b/sunshinephp15.xml
index eb0ccda..4ea7a12 100644
--- a/sunshinephp15.xml
+++ b/sunshinephp15.xml
@@ -22,7 +22,7 @@ Conference theme is team work, so talk about open source and oxytocin
 <title>Good Chemistry</title>
 <event>Sunshine PHP</event>
 <location>Miami</location>
-<date>Feb. 6, 2016</date>
+<date>Feb. 6, 2015</date>
 <speaker>Rasmus Lerdorf</speaker>
 <url>http://talks.php.net/sunshinephp15</url>
 <twitter>@rasmus</twitter>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.