<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>PHP 10.0 Blog</title>
	<atom:link href="http://php100.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://php100.wordpress.com</link>
	<description>What if...</description>
	<lastBuildDate>Sat, 24 Oct 2009 00:03:14 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='php100.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/2776df63d66d5449aed01652d1b4c185?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>PHP 10.0 Blog</title>
		<link>http://php100.wordpress.com</link>
	</image>
			<item>
		<title>Zend Server PHP sources</title>
		<link>http://php100.wordpress.com/2009/10/23/zend-server-php-sources/</link>
		<comments>http://php100.wordpress.com/2009/10/23/zend-server-php-sources/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 00:01:49 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Server]]></category>
		<category><![CDATA[sources]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zendserver]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=104</guid>
		<description><![CDATA[I was asked about PHP going with Zend Server, specifically from which sources it is built &#8211; as we don&#8217;t ship source packages for the builds. Since Zend Server includes PHP build that can have some patches applied from SVN past the release (i.e. if the package has version 5.2.10 it might have some patches [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=104&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I was asked about PHP going with <a href="http://www.zend.com/products/server/">Zend Server</a>, specifically from which sources it is built &#8211; as we don&#8217;t ship source packages for the builds. Since Zend Server includes PHP build that can have some patches applied from SVN past the release (i.e. if the package has version 5.2.10 it might have some patches that were in SVN 5.2 branch past 5.2.10 tag) &#8211; I think it is important that people know what they are going to run if the use Zend Server.</p>
<p>So, there is some solution for that &#8211; we do have packages with PHP sources called <em>php-5.2-source-zend-server</em> and <em>php-5.3-source-zend-server</em>. If you are using RPM/DEB setup for Zend Server, you can just install these packages by name and get it in <em>/usr/local/zend/share/php-source/</em> and if you install it any other way (or just curious?)  I guess you could take packages directly from <a href="http://repos.zend.com/zend-server/rpm/noarch/">RPM</a> or <a href="http://repos.zend.com/zend-server/deb/pool/non-free/p/php-source-zend-pe/">DEB</a> repo and install them manually <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Those are exactly the sources from which the binaries are built.</p>
<p>What we don&#8217;t have yet is a changelog that describes in detail which patches are going into that release additionally to pure X.Y.Z tag. I&#8217;ve asked Powers That Be to add it, so hopefully it&#8217;d happen soon too.</p>
<p>P.S. If you need help on how to add custom extension to ZS, we have <a title="Building custom extension with Zend Server" href="http://devzone.zend.com/article/4512-Compiling-PHP-extensions-with-Zend-Server">DevZone article about it</a>.</p>
 Tagged: PHP, sources, zend, Zend Server, zendserver <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/104/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=104&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/10/23/zend-server-php-sources/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>syntax I miss in PHP</title>
		<link>http://php100.wordpress.com/2009/08/21/syntax-i-miss-in-php/</link>
		<comments>http://php100.wordpress.com/2009/08/21/syntax-i-miss-in-php/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 01:03:57 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[Engine]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[syntactic sugar]]></category>
		<category><![CDATA[syntax]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=102</guid>
		<description><![CDATA[Here are some syntax additions I'd like to see in PHP:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=102&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Here are some syntax additions I&#8217;d like to see in PHP:</p>
<p>1.<strong> a()() </strong><br />
When <strong>a()</strong> returns a callable object (such as a closure) the second set of brackets would call it. That would allow to write some neat code. I am working on a patch for that but it&#8217;s a bit harder than I thought.</p>
<p>2. <strong>a()[$x]</strong><br />
This is kind of obvious, I wonder why don&#8217;t we have it? Should also be able to be an lvalue, though unless <strong>a()</strong> returns by-ref or return value is an object it may not do what one wanted.</p>
<p>3. <strong>foo(1,2,,4)</strong><br />
Syntax to skip a parameter in a call, which then will be substituted with the default as defined by the function. Would come handy if you have function with many defaults, and you only want to change the last one but leave the rest alone &#8211; now you don&#8217;t have to look up the actual default&#8217;s values.</p>
<p>4. <strong>foo(&#8220;a&#8221; =&gt; 1, &#8220;c&#8221; =&gt; 2, &#8220;d&#8221; =&gt; 4)</strong><br />
Named parameters call, which allows you to specify parameters in arbitrary order by name. Would allow to build nice APIs which could accept wider ranges of parameters without resorting to using arrays. That&#8217;d also imply call_user_func_array() would accept named arguments.<br />
The problem here might be what to do with unknown arguments &#8211; i.e. ones that the function did not expect. I guess the function could just ignore them.</p>
<p>5. <strong>$a = ["a", "b" =&gt; "c"];</strong><br />
I&#8217;d really like to have short array syntax. Yes, I know it was rejected so many times already, but I still like it.</p>
 Tagged: PHP, syntactic sugar, syntax <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=102&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/08/21/syntax-i-miss-in-php/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>More on PHP performance</title>
		<link>http://php100.wordpress.com/2009/07/13/php-performance/</link>
		<comments>http://php100.wordpress.com/2009/07/13/php-performance/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 20:50:46 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[display_errors]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=92</guid>
		<description><![CDATA[After writing the post criticizing Google&#8217;s &#8220;performance advice&#8221; for PHP beginners, I started thinking &#8211; OK, I don&#8217;t like Google&#8217;s advice, what would I propose instead?
So here are my thoughts about what would be good for the beginner to consider when he starts with PHP performance optimizations. Note that I do not say it&#8217;s the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=92&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>After writing the post <a href="http://php100.wordpress.com/2009/06/26/php-performance-google/">criticizing Google&#8217;s &#8220;performance advice&#8221;</a> for PHP beginners, I started thinking &#8211; OK, I don&#8217;t like Google&#8217;s advice, what would I propose instead?</p>
<p>So here are my thoughts about what would be good for the beginner to consider when he starts with PHP performance optimizations. Note that I do not say it&#8217;s the only thing you should do &#8211; there are a bunch of articles, talks, blogs, etc. about PHP performance and many of them contain very good advice and go into much more details than I intend to go into. But I think the items below are ones that you should ensure you are doing to the full extent before you go to look around for performance tricks.</p>
<p>Also, from the start I want to say that I work for <a href="http://www.zend.com/">Zend Technologies</a> and I participated in development of many <a href="http://www.zend.com/en/products/">Zend solutions</a>, both free and commercial. I am going to mention both kinds in this article, where relevant. I am aware that there are alternative solutions, but I will mention the ones I know the best. So please do not take this as commercial advertisement or any claim on relative merits of other solutions &#8211; it is not the intent. The intent is to give general direction and some examples, if somebody prefers other solutions in the same direction &#8211; that&#8217;s fine.</p>
<p><strong>Bytecode cache</strong><br />
If you care about performance and don&#8217;t use bytecode cache then you don&#8217;t really care about performance. Please get one and start using it. If you want ready-made commercially-supported solution with nice GUI, etc., look at <a href="http://www.zend.com/en/community/zend-server-ce">Zend Server</a>, if you&#8217;re more into compile-it-yourself command-line then you may want to look at <a href="http://php.net/apc">APC</a>, or other alternatives.</p>
<p><strong>Profiling</strong><br />
Profile you code <em>before</em> you start optimizing it! Otherwise it would be like travelling around a foreign city with signs written in an unreadable language witout any map or GPS. You&#8217;ll probably get <em>somewhere</em>, but you wouldn&#8217;t have any idea where you are, where you should go and how far are you from the place you need to be. Profiling would allow you to know which parts of code are worth investing into and which aren&#8217;t. You can use <a href="http://www.zend.com/en/products/studio/">Zend Studio/Debugger</a> or <a href="http://xdebug.org/">Xdebug</a> for that.</p>
<p><strong>Caching</strong><br />
Most PHP installations run in &#8220;shared nothing&#8221; mode where as soon as the request processing ends, all the data associated with the request is gone. It has some advantages, but also one big disadvantage &#8211; you can not preserve results of repeated operations. That is, unless you use caching.<br />
You should look into caching all operations which take considerable time and can return the same result for a prolonged period of time or same data set. That may include configurations, database queries, service requests, complex calculations, full pages or page fragments, etc., etc. Caching expensive operations is one of the most powerful performance improvements you can do.<br />
There are numerous low-level caching solutions &#8211; <a href="http://www.php.net/manual/en/book.memcached.php">memcached</a>, APC, Zend Server (you can find a <a title="Zend Server caching intro" href="http://devzone.zend.com/article/4457">good guide to it on DevZone</a>) and others. On top of it, you may look into <a href="http://framework.zend.com/manual/en/zend.cache.html">Zend Framework&#8217;s caching infrastructure</a> &#8211; which support the backends described above and more and makes caching much easier.</p>
<p><strong>Optimize your data</strong><br />
Usually the most expensive places of the PHP application are where it accesses external data &#8211; namely, database or filesystem or network. Look hard into optimizing that &#8211; reduce number of queries, improve database structure, reduce filesystem accesses, try to bundle data to make one service call instead of several, etc. For more advanced in-depth look, use tools like <em>strace </em>(Unix) and <em>Process Explorer</em> (Windows) to look into system calls your script produces and think about ways to eliminate some of  them. You would not be able to eliminate all of them but each of them is a worthy target.</p>
<p><strong>Don&#8217;t try to outsmart the engine</strong><br />
There are a lot of &#8220;tips&#8221; floating around about which constructs in PHP are faster or slower than others. I think you can safely ignore all of these tips, especially if you&#8217;re a beginner. Odd are, 9 cases out of 10 they won&#8217;t give you any improvement at all, and in the remaining one case it will be either not applicable in your code or not worth the time spent on it. Yes, there are ways to save couple of opcodes and remove couple of lookups here and there &#8211; but unless you&#8217;ve already done with all of the previous steps it is not worth it. And some of the advice out there will actually make you code slower, less robust and less secure without you even noticing. So I think for the beginners is better to stay away from trying to outsmart the engine altogether.<br />
<strong><br />
Benchmark in real life</strong><br />
Many of the advices I mentioned above have benchmarks as a proof. The problem is these benchmarks always test only a short piece of code. However, you would not be running that one-liner &#8211; you would be running the whole big application. This reminds me of a joke about a physicist that developed the model of a spherical horse in vacuum in order to use it to win bets on horse racing. If you want better chances to win than that physicist, test in real environment, not in vacuum. If you have an idea for some improvement, verify that this improvement actually improves your application, not just an artificial benchmark. If this is impossible, use profile results to estimate potential benefit &#8211; if you find a way to optimize function that summarily runs for 0.1% of overall execution time, you probably won&#8217;t do any good to the application as a whole.</p>
<p><strong>Leverage the extensions</strong><br />
That seems too obvious, but I have seen a lot of code that duplicates functions available in some PHP extension. There are a lot of functions in PHP and if you do something that others may have done before, check in the manual. You have DOM/SimpleXML extensions for XML, JSON extension for JSON, SOAP extension for doing SOAP, etc., etc. Do not create custom serialization/deserialization if serialize()/deserialize() would work for you.<br />
If you have some very performance-sensitive bit of script and you can do C programming (beginner in PHP doesn&#8217;t mean beginner in everything <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , consider even making your own extension, it&#8217;s not that hard.</p>
<p><strong>Avoid extra notices/errors/etc.</strong><br />
Even suppressed errors have cost in PHP, so try and write your code so it would not produce notices, strict notices, warnings, etc. You may want to enable logging of all errors to examine that. Never enable displaying errors in production though &#8211; it will only lead to a major public embarrassment.</p>
<p><strong>Use php.ini-production as a start</strong><br />
If you need a set of php.ini settings which would not hurt your performance and not break anything, look into php.ini-production in PHP source. You may need to change a couple of details (e.g. include path) but it&#8217;s a good starting point.</p>
<p><strong>Use big realpath cache</strong><br />
Realpath cache is very useful for the engine when it tries to find the unique full name of the file from just filename or relative path. By default, it&#8217;s 16K but if you have a lot of files with long pathes, it&#8217;s better to increase the size &#8211; it would save the expensive disk accesses.</p>
<p>There are probably more things that could be said, but this post is pretty long already, so I will end it here and you are welcome to add your opinion in comments.</p>
 Tagged: benchmark, display_errors, performance, PHP, zend framework <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=92&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/07/13/php-performance/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>intl in 5.3</title>
		<link>http://php100.wordpress.com/2009/07/06/intl-in-5-3/</link>
		<comments>http://php100.wordpress.com/2009/07/06/intl-in-5-3/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 18:46:11 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[Functions]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[intl]]></category>
		<category><![CDATA[php53]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=90</guid>
		<description><![CDATA[Wrote an article for DevZone about intl extension: Internationalization in PHP 5.3.
 Tagged: intl, PHP, php53      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=90&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Wrote an article for DevZone about intl extension: <a href="http://devzone.zend.com/article/4799-Internationalization-in-PHP-5.3">Internationalization in PHP 5.3</a>.</p>
 Tagged: intl, PHP, php53 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=90&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/07/06/intl-in-5-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>5.3!!!</title>
		<link>http://php100.wordpress.com/2009/06/30/php5-3/</link>
		<comments>http://php100.wordpress.com/2009/06/30/php5-3/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 18:25:25 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[Engine]]></category>
		<category><![CDATA[Functions]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[closures]]></category>
		<category><![CDATA[intl]]></category>
		<category><![CDATA[namespaces]]></category>
		<category><![CDATA[php53]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=85</guid>
		<description><![CDATA[After a long string of delays, PHP 5.3 is finally out.  On the course of last 2 years, I was pretty sure a number of times that it will happen next month the latest, but there always were good reasons to postpone it. Now finally it&#8217;s officially out. I think it&#8217;s a huge step for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=85&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>After a long string of delays, <a href="http://php.net/releases/5_3_0.php">PHP 5.3 is finally out</a>.  On the course of last 2 years, I was pretty sure a number of times that it will happen next month the latest, but there always were good reasons to postpone it. Now finally it&#8217;s officially out. I think it&#8217;s a huge step for PHP. Download it and try it!</p>
<p>Some major new features in 5.3:</p>
<ol>
<li><a href="http://php.net/namespaces">Namespaces</a>! They didn&#8217;t end up exactly as I thought they would but they are a major feature PHP was missing for a long time, and I&#8217;m very curious to see how it works out in big projects.</li>
<li><a href="http://www.php.net/manual/en/functions.anonymous.php">Closures and anonymous functions</a>! PHP now has first-class functions, and you can do all kinds of <a href="http://php100.wordpress.com/2009/04/13/php-y-combinator/">crazy stuff</a> with it. Or just make your code easier to read and maintain <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><a href="http://php.net/gc_enable">Garbage collection</a>. PHP engine, being refcount-based, always has had a slight problem with reference loops. Even though usually it was not a big issue since at the end of the request everything is cleaned up, for long-running PHP applications not based on short request pattern it became a problem. Not anymore &#8211; now the engine knows to clean up such loops.</li>
<li><a href="http://php.net/lsb">Late static binding</a> &#8211; it&#8217;s somewhat exotic thing for people that never encountered it, but was very burning issue for people that did need it. Basically, when class Foo extends class Bar, and the method func() defined in Foo is called as Bar::func(), there was no way to distinguish it from Foo::func(). Now there is. This allows to implement all kinds of cool patterns like ActiveRecord.</li>
<li><a href="http://php.net/intl">Intl</a> extension in core &#8211; lots of functions to allow you to internationalize your application.</li>
<li><a href="http://php.net/phar">Phar</a> in core &#8211; now you can pack all the application in one neat file and still be able to run it!</li>
</ol>
<p>Also in 5.3:</p>
<ol>
<li>Nowdocs &#8211; same as <a href="http://www.php.net/manual/en/language.types.string.php">heredocs</a>, but doesn&#8217;t parse variables. Excellent feature for somebody that wants to include bing chunk of text into the script which can happen to have $&#8217;s etc. in it.</li>
<li>?: shortcut. That&#8217;s simple &#8211; $a?:$b is $a if $a is true, otherwise it&#8217;s $b.</li>
<li>goto. Yes, I know. But now we have it too. Deal with it. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><a href="http://php.net/mysqli.mysqlnd">mysqlnd</a> &#8211; native PHP-specific mysql driver.</li>
</ol>
<p>Last but definitely not least &#8211; tons of performance improvements, bug fixes, etc. Download it today! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 Tagged: closures, intl, namespaces, PHP, php53 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=85&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/06/30/php5-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP performance tips from Google</title>
		<link>http://php100.wordpress.com/2009/06/26/php-performance-google/</link>
		<comments>http://php100.wordpress.com/2009/06/26/php-performance-google/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 07:10:16 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[Engine]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=76</guid>
		<description><![CDATA[I saw a link on twitter referring to PHP optimization advice from Google. There are a bunch of advices there, some of them are quite sound, if not new &#8211; like use latest versions if possible, profile your code, cache whatever can be cached, etc. Some are of doubtful value &#8211; like the output buffering [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=76&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I saw a link on twitter referring to <a href="http://code.google.com/speed/articles/optimizing-php.html">PHP optimization advice from Google</a>. There are a bunch of advices there, some of them are quite sound, if not new &#8211; like use latest versions if possible, profile your code, cache whatever can be cached, etc. Some are of doubtful value &#8211; like the output buffering one, which could be useful in some situations but do nothing or be worse in others, and if you&#8217;re a beginner generally it&#8217;s better for you to leave it alone until you&#8217;ve solved the real performance problems.</p>
<p>However some of the advices make no sense at best and are potentially harmful at worst. Let&#8217;s get to it:</p>
<p>First one: <strong><em>Don&#8217;t copy variables for no reason</em></strong>. I don&#8217;t know what the author intended to describe there, but PHP engine is refcounting copy-on-write, and there&#8217;s absolutely no copying going on when assigning variables as they described it:</p>
<div style="background-color:#eeeeee;"><code>$description = strip_tags($_POST['description']);<br />
echo $description;<br />
</code></div>
<p>I don&#8217;t know where it comes from but it&#8217;s just not so, unless maybe in some prehistoric version of PHP. Which means unless you&#8217;re going back to 1997 in a time machine this advice is no good for you.</p>
<p>Next one: <strong><em>Avoid doing SQL queries within a loop</em></strong>. This actually might make sense in some situations, however the code examples they give there is missing one important detail that makes it potentially harmful for beginners (see if you can spot it):</p>
<div style="background-color:#eeeeee;"><code>$userData = [];<br />
foreach ($userList as $user) {<br />
$userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';<br />
}<br />
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);<br />
mysql_query($query);<br />
</code></div>
<p>Please repeat after me &#8211; <strong>DO NOT INSERT USER DATA INTO SQL WITHOUT SANITIZING IT</strong>!<br />
Of course, I can not know that <em>$user</em> was not sanitized. Maybe the intent was that it was. But if you give such example and target beginners, you should say so explicitly, <em>every time</em>! People tend to copy/paste examples, and then you get <a href="http://en.wikipedia.org/wiki/SQL_injection#Real-world_examples">SQL injection in a government site</a>.</p>
<p>Another thing: most of real-life PHP applications usually do not insert data in bulk, except for some very special scenarios (bulk data imports, etc.) &#8211; so actually in most cases one would be better off using <a href="http://php.net/pdo">PDO </a>and prepared statements. Or some <a href="http://framework.zend.com/manual/en/zend.db.html">higher-level frameworks</a> which will do it for you. But if you roll your own SQL &#8211; <strong>sanitize the data</strong>! This is much more important than any performance tricks.</p>
<p>Next one: <em><strong>Use single-quotes for long strings. </strong></em>PHP code is parsed and compiled, and any possible difference in speed between parsing &#8220;&#8221; and &#8221; is really negligible unless you operate with hundreds of megabyte-size strings embedded in your code. If you do so, your quotes probably aren&#8217;t where you should start optimizing. And of course, using caching (see below) eliminates this difference altogether.</p>
<p>Next one: <strong><em>Use switch/case instead of if/else</em></strong>. This makes no sense since switch does essentially the same things as if&#8217;s do. See for yourself, here is the &#8220;if&#8221; code:</p>
<div style="background-color:#eeeeee;"><code>0       2     A(0) = FETCH_R(C("_POST")) [global]<br />
1       2     A(1) = FETCH_DIM_R(A(0), C("action")) [Standard]<br />
2       2     T(2) = IS_EQUAL(A(1), C("add"))<br />
3       2     JMPZ(T(2), 7)<br />
4       3     INIT_FCALL_BY_NAME(function_table, C("addUser"))<br />
5       3     Au(3) = DO_FCALL_BY_NAME() [0 arguments]<br />
6       4     JMP(16)<br />
7       4     A(4) = FETCH_R(C("_POST")) [global]<br />
8       4     A(5) = FETCH_DIM_R(A(4), C("action")) [Standard]<br />
9       4     T(6) = IS_EQUAL(A(5), C("delete"))<br />
10      4     JMPZ(T(6), 14)<br />
11      5     INIT_FCALL_BY_NAME(function_table, C("deleteUser"))<br />
12      5     Au(7) = DO_FCALL_BY_NAME() [0 arguments]<br />
13      6     JMP(16)<br />
14      7     INIT_FCALL_BY_NAME(function_table, C("defaultAction"))<br />
15      7     Au(8) = DO_FCALL_BY_NAME() [0 arguments]<br />
16      9     RETURN(C(1))<br />
17      9     HANDLE_EXCEPTION()<br />
</code></div>
<p>Here is the &#8220;switch&#8221; code:</p>
<div style="background-color:#eeeeee;"><code>0       2     A(0) = FETCH_R(C("_POST")) [global]<br />
1       2     A(1) = FETCH_DIM_R(A(0), C("action")) [Standard]<br />
2       3     T(2) = CASE(A(1), C("add"))<br />
3       3     JMPZ(T(2), 8 )<br />
4       4     INIT_FCALL_BY_NAME(function_table, C("addUser"))<br />
5       4     Au(3) = DO_FCALL_BY_NAME() [0 arguments]<br />
6       5     BRK(0, C(1))<br />
7       6     JMP(10)<br />
8       6     T(2) = CASE(A(1), C("delete"))<br />
9       6     JMPZ(T(2), 14)<br />
10      7     INIT_FCALL_BY_NAME(function_table, C("deleteUser"))<br />
11      7     Au(4) = DO_FCALL_BY_NAME() [0 arguments]<br />
12      8     BRK(0, C(1))<br />
13      9     JMP(15)<br />
14      9     JMP(19)<br />
15     10     INIT_FCALL_BY_NAME(function_table, C("defaultAction"))<br />
16     10     Au(5) = DO_FCALL_BY_NAME() [0 arguments]<br />
17     11     BRK(0, C(1))<br />
18     12     JMP(20)<br />
19     12     JMP(15)<br />
20     12     SWITCH_FREE(A(1))<br />
21     13     RETURN(C(1))<br />
22     13     HANDLE_EXCEPTION()<br />
</code>No.     CONT    BRK     Parent<br />
0         20          20           -1</div>
<p>You can see there&#8217;s a little difference &#8211; the latter has CASE/BRK opcodes, which act more or less like IS_EQUAL and JMP, but their plumbing is a bit different, but in general, code is the same (you could even argue &#8220;switch&#8221; code is a bit less optimal, but that is really the area you shouldn&#8217;t be concerned with before you can read and understand the code in zend_vm_def.h &#8211; which is not exactly a beginner stuff.</p>
<p>Another thing that the author absolutely failed to mention and which should be one of the very first things anybody who cares about performance should do &#8211; is to use a bytecode cache. There are plenty of free ones (shameless plug: <a href="http://www.zend.com/en/products/server/downloads-all">Zend Server CE</a> includes one of them &#8211; all the performance improvements for $0 <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  and you don&#8217;t have to change a bit of code to run it.</p>
<p>Now, I understand Google is not a PHP shop like Yahoo or Facebook or many others. But this article is signed &#8220;Eric Higgins, Google Webmaster&#8221; and one would expect something much more sound from such source. And in fact there are a lot of blogs and conference talks on the topic and lots of community folks around that I am sure would be ready to help with such article &#8211; I wonder why wasn&#8217;t it done? Why apparently the best advice we can find from Google is either trivial or useless or wrong?</p>
<p>I think they can do much better, and they should if they take &#8220;making the web faster&#8221; seriously.</p>
<p>P.S. After having all this written, I also found a <a href="http://groups.google.com/group/make-the-web-faster/browse_thread/thread/ddfbe82dd80408cc">comment from Gwynne Raskind</a>, which I advise to read too.</p>
 Tagged: benchmark, critique, google, performance, PHP <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=76&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/06/26/php-performance-google/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>Y-Combinator in PHP</title>
		<link>http://php100.wordpress.com/2009/04/13/php-y-combinator/</link>
		<comments>http://php100.wordpress.com/2009/04/13/php-y-combinator/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 21:40:11 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[Engine]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[closures]]></category>
		<category><![CDATA[recursive]]></category>
		<category><![CDATA[y-combinator]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=70</guid>
		<description><![CDATA[Since PHP 5.3 now has closures, all things that other languages with closures do should also be possible. One of them is having recursive closures. I.e. something like this:
$factorial = function($n) {
   if ($n &#60;= 1)
     return 1;
   else
     return $n * call_user_func(__FUNCTION__, $n - 1);
};

which does not work. One of the ways to do it is to use Y combinator function, which allows, by application of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=70&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Since PHP 5.3 now has <a href="http://www.php.net/manual/en/functions.anonymous.php">closures</a>, all things that other languages with closures do should also be possible. One of them is having <a href="http://news.php.net/php.internals/43665">recursive closures</a>. I.e. something like this:</p>
<pre><span style="color:#000000;"><span style="color:#0000bb;">$factorial </span><span style="color:#007700;">= function(</span><span style="color:#0000bb;">$n</span><span style="color:#007700;">) {
   if (</span><span style="color:#0000bb;">$n </span><span style="color:#007700;">&lt;= </span><span style="color:#0000bb;">1</span><span style="color:#007700;">)
     return </span><span style="color:#0000bb;">1</span><span style="color:#007700;">;
   else
     return </span><span style="color:#0000bb;">$n </span><span style="color:#007700;">* </span><span style="color:#0000bb;">call_user_func</span><span style="color:#007700;">(</span><span style="color:#0000bb;">__FUNCTION__</span><span style="color:#007700;">, </span><span style="color:#0000bb;">$n </span><span style="color:#007700;">- </span><span style="color:#0000bb;">1</span><span style="color:#007700;">);
};
</span></span></pre>
<p>which does not work. One of the ways to do it is to use <a href="http://en.wikipedia.org/wiki/Y_combinator">Y combinator</a> function, which allows, by application of dark magic and friendly spirits from other dimensions, to convert non-recursive code to recursive code. In PHP, Y combinator function would look like this:</p>
<pre><span style="color:#000000;"><span style="color:#007700;">function </span><span style="color:#0000bb;">Y</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$F</span><span style="color:#007700;">) {
    </span><span style="color:#0000bb;">$func </span><span style="color:#007700;">=  function (</span><span style="color:#0000bb;">$f</span><span style="color:#007700;">) { return </span><span style="color:#0000bb;">$f</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$f</span><span style="color:#007700;">); };
    return </span><span style="color:#0000bb;">$func</span><span style="color:#007700;">(function (</span><span style="color:#0000bb;">$f</span><span style="color:#007700;">) use(</span><span style="color:#0000bb;">$F</span><span style="color:#007700;">) {
            return </span><span style="color:#0000bb;">$F</span><span style="color:#007700;">(function (</span><span style="color:#0000bb;">$x</span><span style="color:#007700;">) use(</span><span style="color:#0000bb;">$f</span><span style="color:#007700;">) {
            </span><span style="color:#0000bb;">$ff </span><span style="color:#007700;">= </span><span style="color:#0000bb;">$f</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$f</span><span style="color:#007700;">);
            return </span><span style="color:#0000bb;">$ff</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$x</span><span style="color:#007700;">);
        });
    });
}
</span></span></pre>
<p>And then the factorial function would be:</p>
<pre><span style="color:#000000;"><span style="color:#0000bb;">$factorial </span><span style="color:#007700;">= </span><span style="color:#0000bb;">Y</span><span style="color:#007700;">(function(</span><span style="color:#0000bb;">$fact</span><span style="color:#007700;">) {
    return function(</span><span style="color:#0000bb;">$n</span><span style="color:#007700;">) use(</span><span style="color:#0000bb;">$fact</span><span style="color:#007700;">) {
        return (</span><span style="color:#0000bb;">$n &lt;</span><span style="color:#007700;">= </span><span style="color:#0000bb;">1</span><span style="color:#007700;">)?</span><span style="color:#0000bb;">1</span><span style="color:#007700;">:</span><span style="color:#0000bb;">$n</span><span style="color:#007700;">*</span><span style="color:#0000bb;">$fact</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$n</span><span style="color:#007700;">-</span><span style="color:#0000bb;">1</span><span style="color:#007700;">);
    };
});
</span></span></pre>
<p>Which does work:</p>
<pre><span style="color:#000000;"><span style="color:#0000bb;">var_dump</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$factorial</span><span style="color:#007700;">(</span><span style="color:#0000bb;">6</span><span style="color:#007700;">)); ==&gt; int(720)
</span></span></pre>
<p>Of course, we could also cheat and go <a href="http://news.php.net/php.internals/43667">this way</a>:</p>
<pre><span style="color:#000000;"><span style="color:#0000bb;">$factorial </span><span style="color:#007700;">= function(</span><span style="color:#0000bb;">$n</span><span style="color:#007700;">) use (&amp;</span><span style="color:#0000bb;">$factorial</span><span style="color:#007700;">) {
      if (</span><span style="color:#0000bb;">$n </span><span style="color:#007700;">&lt;= </span><span style="color:#0000bb;">1</span><span style="color:#007700;">)
        return </span><span style="color:#0000bb;">1</span><span style="color:#007700;">;
      else
        return </span><span style="color:#0000bb;">$n </span><span style="color:#007700;">* </span><span style="color:#0000bb;">$factorial</span><span style="color:#007700;">(</span><span style="color:#0000bb;">$n </span><span style="color:#007700;">- </span><span style="color:#0000bb;">1</span><span style="color:#007700;">);
};
</span></span></pre>
<p>Doing <a href="http://ioreader.com/2007/05/03/php-closures/">Y-combinator in PHP was attempted before</a> (and <a href="http://agent101.livejournal.com/5601.html">here</a>), but now I think it works better. It could be even nicer if PHP syntax allowed chaining function invocations &#8211; ($foo($bar))($baz) &#8211; but for now it doesn&#8217;t.</p>
<p>If you wonder, using such techniques does have <a href="http://matt.might.net/articles/implementation-of-recursive-fixed-point-y-combinator-in-javascript-for-memoization/">legitimate applications</a>, though I&#8217;m not sure if doing it in PHP this way is worth the trouble.</p>
 Tagged: closures, PHP, recursive, y-combinator <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=70&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/04/13/php-y-combinator/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>Zend Server</title>
		<link>http://php100.wordpress.com/2009/04/07/zend-server/</link>
		<comments>http://php100.wordpress.com/2009/04/07/zend-server/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 21:35:24 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zendserver]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=67</guid>
		<description><![CDATA[The product that I (among many others here at Zend) was working on lately &#8211; Zend Server - was released today.
Basic version is free (as in &#8220;free beer&#8221;) and has fastest bytecode-cache that I know of, native RPM/DEB install, debugger and other goodies.  Full version of course is even better.
 Tagged: PHP, zend, zendserver  [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=67&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The product that I (among many others here at Zend) was working on lately &#8211; <a href="http://www.zend.com/en/products/server/">Zend Server </a>- was released today.</p>
<p><a href="http://www.zend.com/products/server/downloads-all">Basic version</a> is free (as in &#8220;free beer&#8221;) and has fastest bytecode-cache that I know of, native RPM/DEB install, debugger and <a href="http://www.zend.com/en/products/server/editions">other goodies</a>.  <a href="http://www.zend.com/en/products/server/downloads">Full version</a> of course is even better.</p>
 Tagged: PHP, zend, zendserver <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=67&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/04/07/zend-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>Seven things</title>
		<link>http://php100.wordpress.com/2009/01/10/seven-things/</link>
		<comments>http://php100.wordpress.com/2009/01/10/seven-things/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 08:00:23 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[Metablog]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=53</guid>
		<description><![CDATA[Unusually (for this blog) non-technical post.
Generally I don&#8217;t like mass actions, chain letters and stuff like that. That is probably because of my contrarian spirit and general stubbornness  &#8211; if many people do it, why I now have to do it? Hell no. But this thing seems to be interesting, so thanks Andi for tagging [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=53&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Unusually (for this blog) non-technical post.</p>
<p>Generally I don&#8217;t like mass actions, chain letters and stuff like that. That is probably because of my contrarian spirit and general stubbornness  &#8211; if many people do it, why I now <em>have </em>to do it? Hell no. But this thing seems to be interesting, so <a href="http://andigutmans.blogspot.com/2009/01/seven-things-about-me-tagged-by-marco.html">thanks Andi for tagging me</a>. So here go the seven things about me:</p>
<p>1. I speak Russian (my native tongue), English and Hebrew. I understand Ukrainian but probably couldn&#8217;t speak it now without making people laugh hysterically, not enough practice. I want to learn Latin (working on it) and Arabic (not working on it). I also studied German for 3 years in school, but when I switched schools I had to study English instead, so I spent summer trying to catch up with 3 years of school program I missed. I overdid it a bit (or maybe the program sucked)  so I could slack off next couple of years in English classes because I already knew all that stuff. I wish I didn&#8217;t forget the German in the meantime, but I did, so now I remember just random words and phrases.</p>
<p>2. My first programming experience was the Soviet <a href="http://www.taswegian.com/MOSCOW/b3-34.html">B3-34 electronic calculator</a>. If you think assembly language programming is hard, try to program this baby. And to think people actually programmed interactive real-time games (albeit requiring a lot of imagination) on it! (Bonus point for guessing how to do game controls without any keyboard inputs, etc.) I didn&#8217;t reach that level, but I did some simpler stuff before moving to computers with such luxury as actual multi-line screen (alphanumerical). My first paying job of course involved computers. I can&#8217;t imagine what I would do if computers weren&#8217;t invented. Probably I would be a linguist.</p>
<p>3. I have absolutely no talent for music, which I discovered the hard way after unsuccessfully trying to learn to play a guitar for a year. Same goes for most of other creative arts (painting, sculpture, design, poetry, etc.) and I severely envy all people that have such talents. I do like the music though, and while as youngster I was of course a rock-music fan, now I increasingly getting to like the classic music. I feel I need much more education in the area before I can really appreciate it though. I rarely listen to music while working, because if I like it it distracts me and if I don&#8217;t it it pisses me off.</p>
<p>4. I can&#8217;t understand sports. I.e. I get the theory, but why these people are getting so excited is completely beyond me. I can kind of figure out the &#8220;nice&#8221; sports like figure skating or gymnastics &#8211; people doing cool and beautiful and complicated stuff, etc. &#8211; but things like football or baseball I don&#8217;t get. Why anybody would spend so much time and money on <em>that</em>?</p>
<p>5. A year ago I started to learn <a href="http://en.wikipedia.org/wiki/Aikido">Aikido</a>. I think I like it. Got the blue belt (which is very very initial stage) and I hope sometime in the future I&#8217;ll be good at it.</p>
<p>6. Once I wrote a letter to leading Soviet&#8217;s newspaper for children &#8211; <a href="http://en.wikipedia.org/wiki/Pionerskaya_Pravda"><em>Pionerskaya Pravda</em></a> (Pioneer&#8217;s Truth). It was published. I was about 8 or 9 then. I never wrote letters to newspapers since then. Surprisingly, I just learned that the newspaper (unlike the founding Pioneers organization) still exists.</p>
<p>7. I enjoy discussing politics a lot, especially online, and <a href="http://xkcd.com/386/">spend way too much time on it</a> (a bit less now, but still). My political conviction is libertarian. I don&#8217;t expect to have any political party I would <em>want </em>to vote for to exist in my lifetime.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=53&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2009/01/10/seven-things/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
		<item>
		<title>ZendCon 08 php 5.3</title>
		<link>http://php100.wordpress.com/2008/09/18/zendcon-08-php-53/</link>
		<comments>http://php100.wordpress.com/2008/09/18/zendcon-08-php-53/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 18:09:57 +0000</pubDate>
		<dc:creator>Stas</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Presenting]]></category>
		<category><![CDATA[php53]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zendcon]]></category>
		<category><![CDATA[zendcon08]]></category>

		<guid isPermaLink="false">http://php100.wordpress.com/?p=51</guid>
		<description><![CDATA[I have uploaded the presentation about PHP 5.3 that we roughly followed on ZendCon PHP 5.3 panel. Enjoy  
You may want also look at Ilia Alshanetsky&#8217;s one, they are mostly the same but details may vary.
 Tagged: PHP, php53, presentation, zend, zendcon, zendcon08      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=51&subd=php100&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I have uploaded the <a title="ZendCon presentation" href="http://random-bits-of.info/php53-Zend.ppt">presentation about PHP 5.3</a> that we roughly followed on ZendCon PHP 5.3 panel. Enjoy <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>You may want also look at <a title="Ilia's presentation" href="http://ilia.ws/files/phpquebec_php53.pdf">Ilia Alshanetsky&#8217;s one</a>, they are mostly the same but details may vary.</p>
 Tagged: PHP, php53, presentation, zend, zendcon, zendcon08 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/php100.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/php100.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/php100.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/php100.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/php100.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/php100.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/php100.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/php100.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/php100.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/php100.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=php100.wordpress.com&blog=480516&post=51&subd=php100&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://php100.wordpress.com/2008/09/18/zendcon-08-php-53/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b036d052cc50683fd7d372c56f977525?s=96&#38;d=identicon&#38;r=R" medium="image">
			<media:title type="html">Stas</media:title>
		</media:content>
	</item>
	</channel>
</rss>