<?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/"
	>

<channel>
	<title>experimentalworks &#187; PHP</title>
	<atom:link href="http://blog.experimentalworks.net/category/programming/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.experimentalworks.net</link>
	<description></description>
	<lastBuildDate>Wed, 14 Jul 2010 15:35:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Advanced Git Slides</title>
		<link>http://blog.experimentalworks.net/2010/06/advanced-git-slides/</link>
		<comments>http://blog.experimentalworks.net/2010/06/advanced-git-slides/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 12:43:24 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=442</guid>
		<description><![CDATA[Here are the slide from my Advanced Git talk:

Advanc [...]]]></description>
			<content:encoded><![CDATA[<p>Here are the slide from my Advanced Git talk:</p>
<div style="width:425px" id="__ss_4509679"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/segv/advanced-git" title="Advanced Git">Advanced Git</a></strong><object id="__sse4509679" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=advancedgit-100615155156-phpapp01&#038;rel=0&#038;stripped_title=advanced-git" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4509679" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=advancedgit-100615155156-phpapp01&#038;rel=0&#038;stripped_title=advanced-git" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/segv">segv</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2010/06/advanced-git-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php-trunk macport</title>
		<link>http://blog.experimentalworks.net/2010/05/php-trunk-macport/</link>
		<comments>http://blog.experimentalworks.net/2010/05/php-trunk-macport/#comments</comments>
		<pubDate>Mon, 24 May 2010 15:48:39 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[dtrace]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=435</guid>
		<description><![CDATA[macports is a widely used ports system for Mac OS. It's [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.macports.org/ ">macports</a> is a widely used ports system for Mac OS. It&#8217;s repository contains hundreds of application that can be compiled and installed. The repository contains php 5.3. So if you want to run PHP from subversion you still have to compile it yourself and install it yourself outside your managed ports environment. I created a rather simple Portfile to build it from PHP&#8217;s <a href="http://svn.php.net/repository/php/php-src/trunk/">trunk</a>. </p>
<p>To use the php-trunk portsfile. Just extract the tarball into a directory and&#8230;<br />
<code><br />
 $ tar xzvf php-trunk-port.tar.gz<br />
 $ cd php-trunk-port<br />
<del datetime="2010-05-24T18:23:38+00:00"> $ echo "file://`pwd`" > /opt/local/etc/macports/sources.conf</del><br />
 $ echo "file://`pwd`" >> /opt/local/etc/macports/sources.conf<br />
 $ port install php-trunk<br />
</code></p>
<p>And the best thing about the port: It compiles PHP with dtrace support :).</p>
<p>Please note the Portfile is very simple and is not tested with the additional modules provided by macports. So use it at your own risk and enhance it.</p>
<p><a href="http://patches.experimentalworks.net/php-trunk-port.tar.gz">DOWNLOAD</a></p>
<p>UPDATE: as philip noted, it should be >> instead of >.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2010/05/php-trunk-macport/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP 5.3.99-dev and DTrace Part I</title>
		<link>http://blog.experimentalworks.net/2010/04/php-5-3-99-dev-and-dtrace-part-i/</link>
		<comments>http://blog.experimentalworks.net/2010/04/php-5-3-99-dev-and-dtrace-part-i/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 17:10:13 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dtrace]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=432</guid>
		<description><![CDATA[For those not following the PHP development. We backpor [...]]]></description>
			<content:encoded><![CDATA[<p>For those not following the PHP development. We backported the DTraces probes from the abandoned PHP 6.0 branch, back to the new trunk PHP 5.3.99-dev. It is called 5.3.99 because the PHP dev community has not decided yet on a version number (5.4 or 6.0).</p>
<p>To compile PHP with DTrace, on Solaris or Mac OS do:</p>
<pre>
  $ svn co http://svn.php.net/repository/php/php-src/trunk php
  $ cd php
  $ ./buildconf --force
  $ ./configure --enable-dtrace
  $ make
</pre>
<p>To check if your PHP has DTraces probes enabled, you can check the phpinfo() using</p>
<pre>
 $ php -i | grep DTrace
</pre>
<p>or use DTrace directly></p>
<pre>
 $ sudo dtrace -ln 'php*:::' -c 'php -m'

88836    php4614               php               dtrace_compile_file compile-file-entry
88837    php4614               php               dtrace_compile_file compile-file-return
88838    php4614               php                        zend_error error
88839    php4614               php  ZEND_CATCH_SPEC_CONST_CV_HANDLER exception-caught
88840    php4614               php     zend_throw_exception_internal exception-thrown
88841    php4614               php           dtrace_execute_internal execute-entry
88842    php4614               php                    dtrace_execute execute-entry
88843    php4614               php           dtrace_execute_internal execute-return
88844    php4614               php                    dtrace_execute execute-return
88845    php4614               php                    dtrace_execute function-entry
88846    php4614               php                    dtrace_execute function-return
88847    php4614               php              php_request_shutdown request-shutdown
88848    php4614               php               php_request_startup request-startup
</pre>
<p>Have fun with DTrace in PHP.</p>
<p>A few examples will follow in the next days.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2010/04/php-5-3-99-dev-and-dtrace-part-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Talks</title>
		<link>http://blog.experimentalworks.net/2010/02/talks/</link>
		<comments>http://blog.experimentalworks.net/2010/02/talks/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 21:53:29 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=401</guid>
		<description><![CDATA[I really enjoy giving talks. This is particularly becau [...]]]></description>
			<content:encoded><![CDATA[<p>I really enjoy giving talks. This is particularly because I like to teach people something and because I&#8217;m really enthusiastic about the technical things I talk about. Once of these things are obviously decentralized version control system, in particular <a href="http://git-scm.org">Git</a> and <a href="http://mercurial.selenic.com">Mercurial</a>. Finally after two years of submitting talks to various conferences, people and conferences in the <a href="http://php.net">PHP</a> community start to pick up this topic. Seems that 2010 is the year of <a href="http://en.wikipedia.org/wiki/Distributed_revision_control">DVCS</a>, and I&#8217;m really looking forward to give a talk about the<a href="http://phpconference.nl/schedule/talks#advancedgit"> advanced features of Git</a> at</p>
<ul>
<li><a href="http://phpconference.nl">Dutch PHP Conference 2010</a></li>
<li><a href="http://phpconference.de">Interntational PHP Conference</a></li>
</ul>
<p>The talk will give a very brief overview how Git works, and will then give a more detailed insight in how Git handles commits, files, etc so that people get a very good understanding about the concepts that are needed to fully understand tools like git <a href="http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html">rebase</a>, git <a href="http://ftp.sunet.se/pub/Linux/kernel.org/software/scm/git/docs/git-reflog.html">reflog</a> and git <a href="http://ftp.sunet.se/pub/Linux/kernel.org/software/scm/git/docs/git-svn.html">svn</a>. The aim is to provide them will all necessary information and a few examples to get lost commits back, rebase their branches and design more complex git workflows in the future without needing to search the web or ask a guru.</p>
<p>A second talk will be more focused on beginners and developers coming from <a href="http://subversion.tigris.org/">subversion</a>. This talk will be part of a series of talks the german <a href="http://telekom.de">telekom</a> is organizing. I&#8217;ll also give an extended version of this as an in-house workshop at a Munich based company.</p>
<p>So for me it seems that after five years, DVCS is mature enough to get into companies and that we can expect a bright variety of companies to adopt new tools and workflows. Let&#8217;s see what&#8217;s coming&#8230;</p>
<p><strong>For sure I still offer Git and Mercurial trainings, so feel free to contact me (dsp ~at~ php ~dot~ net)</strong></p>
<p><em>probably shameless self promotion</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2010/02/talks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Writing a simple PHP sourcecode buildscript in Scala</title>
		<link>http://blog.experimentalworks.net/2010/01/writing-a-simple-php-source-buildscript-in-scala/</link>
		<comments>http://blog.experimentalworks.net/2010/01/writing-a-simple-php-source-buildscript-in-scala/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 22:48:22 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=356</guid>
		<description><![CDATA[Scala is a fascinating language. Running on the Java VM [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.scala-lang.org">Scala</a> is a fascinating language. Running on the <a href="http://java.com">Java VM</a>, Scala offers a powerful mixture from both the imperative Java world and functional programming including modern techniques like <a href="http://www.scala-lang.org/node/242">Actors</a>. Personally I prefer to not just learn programming languages, but also try them out while reading through the book.</p>
<p>As I wanted to have nice a build system for my <a href="http://php.net">PHP</a> <a href="http://svn.php.net">subversion</a> checkout, I used this need as a project to start coding Scala. So what do I exactly need? I want to build multiple versions of PHP from the same branch without checking out the code twice. I also want to configure these builds somewhere without always typing in the parameter list or so. For further versions I want to be able to configure these in a file that can easily be distributed to other machines.</p>
<p>I set down and wrote a parser for a configuration file that can configured build targets which is then build by<br />
the program. The configuration file I used is specialized for this purpose, which is why I didn&#8217;t used something like ant or so. The result is called <strong><a href='http://blog.experimentalworks.net/wp-content/uploads/2010/01/bauaffe-3.0.0a1.jar'>bauaffe-3.0.0a1.jar</a></strong>.</p>
<p>I&#8217;ll just show a few things done in the project, but mainly focus on what the nice script can do. Further blog posts will be about the actual implementation.</p>
<p>The configuration looks like this</p>
<pre>
$ cat ~/.buildmaker
begin default configuration
    define source "/Users/dsp/dev/c/php-src"
    define build "/Users/dsp/dev/c/php-src/build"
    define defaults as
        with "iconv=/opt/local"
    build trunk as
        "php60" using defaults
        "php60-debug" using defaults
            enable "debug"
    build branch "PHP_5_3" as
        "php53" using defaults
            environment PHP_AUTOCONF="autoconf213"
        "php53-debug" using defaults
            enable "debug"
            environment PHP_AUTOCONF="autoconf213"
</pre>
<p>.<br />
Proper indention is not necessary (as e.g in python).</p>
<hr />
You might want to think that parsing the configuration file can be difficult. Well, if you use C you would use YACC, if you use PHP, I don&#8217;t know what you would have done, but Scala is made to create this kind of Domain Specific Languages (for my the config is a DSL). You can easily transform a EBNF directly to scala code using the JavaTokenParsers provided by the Scala Library. As an example this it the statement that parses the first line:<br />
<code><br />
    def begin : Parser[Configuration] =<br />
        "begin" ~ ("default" | stringLiteral) ~ "configuration" ~ rep(define | build) ^^ {<br />
        case "begin"~name~"configuration"~confs => new Configuration(name, confs)<br />
    }<br />
</code><br />
which is directly taken from the BNF:<br />
<code><br />
      config ::= "begin" ( "default" | string ) "configuration" ( define | build )*<br />
</code></p>
<p>Did I mention that the actual parser is 170 lines of code with usual indention and formatting?</p>
<hr />
<p><strong>Configuration</strong><br />
The configuration file is searched in <i>~/.buildmaker</i>, or if <i>~/.builmaker</i> doesn&#8217;t exists, <i>buildmaker.conf</i> in the current directory. How do you configure the tool? First of all you can specify a configuration. It is usually called &#8220;default&#8221;. It is not yet supported to name it differently, although the parser is able to parse it. In further versions multiple configurations per file are allowed.</p>
<p><strong>Variables</strong><br />
Variables are set using the <i>define</i> syntax. At the moment you can set the <i>build</i> and <i>source</i> variable as well the <em>defaults</em> variable, which is usually a block of statements that can be used in the branch configurations. </p>
<p><strong>Branches</strong><br />
A branch is configured using the <em>build</em> syntax. You first have to specify which branch to build. Every branch can then configured to have build target with a given set of options. Branch options are:</p>
<ul>
<li>with <em>string</em>: Builds the target with the given extension</li>
<li>enable <em>string</em>: Builds the target with the given extension</li>
<li>environment <em>string=string</em>: Builds the target with environment variable</li>
</ul>
<p>. You can specify <i>using defaults</i> which will cause the runner to use the options specified in the <i>defaults</i> define.</p>
<p><em>At the moment the parser will not do a good job in notifying you what you are allowed to do and what not, although pure parse error will be emitted. You can also not set any other variable than the described once.</em></p>
<p><strong>Building</strong><br />
Calling</p>
<pre>
$ java -jar bauaffe-3.0.0a1.jar list
TARGET                         LAST BUILD
php60                          None
php60-debug                    None
php53                          Sat Jan 09 16:55:12 CET 2010
php53-debug                    Sat Jan 09 16:59:37 CET 2010
</pre>
<p>gives you a list of parsed targets and their last build date. You can build a target using</p>
<pre>
$ java -jar bauaffe-3.0.0a1.jar <targetname>
</targetname></pre>
<p>or build all using</p>
<pre>
$ java -jar bauaffe-3.0.0a1.jar all
</pre>
<p>Please notice that the current version requires that you now what you are doing. You might miss some error messages or find them not useful. I&#8217;ll change this before the first release, if I&#8217;ll do a final version of it. I hope you like the little tool.</p>
<p><a href='http://blog.experimentalworks.net/wp-content/uploads/2010/01/bauaffe-3.0.0a1.jar'>Download It!</a></p>
<p><em>Scala (pronounced /ˈskɑːlə, ˈskeɪlə/) is a multi-paradigm programming language designed to integrate features of object-oriented programming and functional programming.[1] The name Scala stands for &#8220;scalable language&#8221;, signifying that it is designed to grow with the demands of its users.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2010/01/writing-a-simple-php-source-buildscript-in-scala/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 BBQ Release Party Munich</title>
		<link>http://blog.experimentalworks.net/2009/07/php-5-3-bbq-release-party-munich/</link>
		<comments>http://blog.experimentalworks.net/2009/07/php-5-3-bbq-release-party-munich/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 10:03:06 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=275</guid>
		<description><![CDATA[We like to invite you to the PHP 5.3 release party whic [...]]]></description>
			<content:encoded><![CDATA[<p>We like to invite you to the PHP 5.3 release party which is an event to<br />
celebrate the 5.3 release, happening Friday, the 17th of July in Munich.<br />
The release party offers a chance to come together with other php<br />
enthusiasts and enjoy that php is alive and kicking. And of course people<br />
in favour of a decent barbecue, together with some beer and other drinks<br />
are invited. </p>
<p>The happening will take place at Waldwirtschaft (<a href="http://www.waldwirtschaft.de">http://www.waldwirtschaft.de</a>)<br />
beer garden, at any weather. We will meet at 19:00 o&#8217;clock &#8211; open end. </p>
<p>Catering will be provided and as a special delicacy you may enjoy a <del datetime="2009-07-08T10:00:05+00:00">suckling pig!</del>&#8230;hopefully vegetarian food. If you like to join the event please register at PHPUG-Munich Wiki (<a href="http://phpugmunich.org/dokuwiki/php_release_party">http://phpugmunich.org/dokuwiki/php_release_party</a>) and follow it for updates. Alternatively you may register at Facebook<br />
(<a href="http://www.facebook.com/event.php?eid=115203467104">http://www.facebook.com/event.php?eid=115203467104</a>) as well and follow<br />
this for updates. </p>
<p>For any questions please visit IRC channel: #phprp on irc.uni-erlangen.de. </p>
<p>The PHP 5.3. BBQ release party is sponsored by:<br />
 &#8211; Microsoft<br />
 &#8211; Mayflower GmbH<br />
 &#8211; Swoodoo AG<br />
 &#8211; Zend Technologies GmbH</p>
<p>Supporters for the PHP 5.3 BBQ release party are:<br />
 &#8211; Sun Microsystems<br />
-  PHPUG.de </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2009/07/php-5-3-bbq-release-party-munich/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Calling Conventions &#8211; when you need to know C to understand PHP</title>
		<link>http://blog.experimentalworks.net/2009/07/calling-conventions-when-you-need-to-know-c-to-understand-php/</link>
		<comments>http://blog.experimentalworks.net/2009/07/calling-conventions-when-you-need-to-know-c-to-understand-php/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 16:26:59 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[gcc]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=260</guid>
		<description><![CDATA[I think most of the people using PHP wonder from time t [...]]]></description>
			<content:encoded><![CDATA[<p>I think most of the people using PHP wonder from time to time about particular behavior of the language. That&#8217;s pretty much the same case with every language. Pythoneers have their <em>wtf</em> moments, Ruby programmers have their wtf moments and C programmers tend to live in a whole wtf universe. But lately I stumbled over a nice one. It looked like a bug in PHP, but turns out to be an interesting, curious, part of the C-language. Imagine the following PHP code sample and note that $a and $b are not defined (yeah I know, it&#8217;s bad coding style..blabla..):<br />
<code><br />
&lt;?php<br />
var_dump($a + $b);<br />
?&gt;<br />
</code><br />
What is the expected result with error_reporting set to E_ALL?<br />
<code><br />
PHP Notice: Undefined variable: b in /var/foo/bla on line 1<br />
PHP Notice: Undefined variable: a in /var/foo/bla on line 1<br />
</code>.<br />
Are you sure? I&#8217;m not. On x86 hardware b is fetched before a is fetched and therefore the executor detects that b is not set first. But wait. Let&#8217;s test this on a SPARC machine:<br />
<code><br />
PHP Notice: Undefined variable: a in /var/foo/bla on line 1<br />
PHP Notice: Undefined variable: b in /var/foo/bla on line 1<br />
</code>.<br />
What? It evaluates it in the reversed oder? What is happening? So I spend a few minutes with my lovely debugger and it turns out that this is what happens in the engine (I use pseudo code here):</p>
<pre>
result ZEND_ADD_OPCODE()
{
   return add_function(get_op1(), get_op2());
}
</pre>
<p>Voila, that&#8217;s the problem. On SPARC get_op1() is executed before get_op2(), while it&#8217;s the other way round on x86. As get_opX() detects if a variable exists, the error messages appear in reversed oder. I did a little bit research (thank you <a href="http://developers.sun.com/sunstudio/">SunCC Team</a> for your answer!) and it turned out, that <a href="http://en.wikipedia.org/wiki/C99">C99</a> doesn&#8217;t define the way function calls in parameter lists are executed. Therefore, every system and compiler is free to use it&#8217;s own ordering mechanism. My current plan: Write a compiler that does this by random(). The fix is trivial:</p>
<pre>
result ZEND_ADD_OPCODE()
{
  op2 = get_op2();
  return add_function(get_op1(), op2);
}
</pre>
<p>. It&#8217;s a lovely curiosity.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2009/07/calling-conventions-when-you-need-to-know-c-to-understand-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP BBQ Tour in Karlsruhe</title>
		<link>http://blog.experimentalworks.net/2009/06/php-bbq-tour-in-karlsruhe/</link>
		<comments>http://blog.experimentalworks.net/2009/06/php-bbq-tour-in-karlsruhe/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 11:42:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/2009/06/php-bbq-tour-in-karlsruhe/</guid>
		<description><![CDATA[The PHP BBQ Tour organized by Ulf Wendel and various PH [...]]]></description>
			<content:encoded><![CDATA[<p>The PHP BBQ Tour organized by Ulf Wendel and various PHP Usergroups in Germany will stop in Karlsruhe. For those of you living near Karlsruhe, it&#8217;s definatly worth to join us. There will be food, drinks and I&#8217;m sure it&#8217;ll be a great evening. Information can be found <a href="http://forge.mysql.com/wiki/PHP_BBQ_Tour">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2009/06/php-bbq-tour-in-karlsruhe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ext/scream functionality without ext/scream</title>
		<link>http://blog.experimentalworks.net/2009/05/extscream-functionality-without-extscream/</link>
		<comments>http://blog.experimentalworks.net/2009/05/extscream-functionality-without-extscream/#comments</comments>
		<pubDate>Wed, 20 May 2009 13:09:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=225</guid>
		<description><![CDATA[There were some rumors recently about Gopals ext/scream [...]]]></description>
			<content:encoded><![CDATA[<p>There were some rumors recently about Gopals <a href="http://pecl.php.net/package/scream">ext/scream</a>. This extension disables the @ operators and therefore makes all errors visible. If you want to use the extension you have to build the extension and restart your PHP modules so that the extension is loaded.</p>
<p>But there is a more elegant to get the same behavior. Using <a href="http://opensolaris.org/os/community/dtrace/">DTrace</a> and recent <a href="http://opensolaris.org">OpenSolaris 2009.06</a> we are able to use the php:::error probe to get all error messages. Unlike the <a href="http://opensolaris.org/os/project/webstack/">PHP</a> extension we do not need to restart our PHP. We are also able to just temporarily look into the errors of all running PHP processes. Here is the DTrace script:<br />
<code><br />
#!/usr/sbin/dtrace -s</p>
<p>php*:::error {<br />
  printf("Error \"%s\" in file %s line %d\n", copyinstr(arg0), copyinstr(arg1), arg2);<br />
}<br />
</code></p>
<p>This will display all errors that occur. There is also a php:::exception-thrown probe which can provide nearly the same data for exceptions instead of errors.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2009/05/extscream-functionality-without-extscream/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Testfest in Munich</title>
		<link>http://blog.experimentalworks.net/2009/04/php-testfest-in-munich-2/</link>
		<comments>http://blog.experimentalworks.net/2009/04/php-testfest-in-munich-2/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 11:18:07 +0000</pubDate>
		<dc:creator>dsp</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.experimentalworks.net/?p=222</guid>
		<description><![CDATA[We will have another great PHP Testfest this year in Mu [...]]]></description>
			<content:encoded><![CDATA[<p>We will have another great PHP Testfest this year in Munich on Thursday and Friday 16th/17th April. This time we will also have a nice evening event with some talks around testing PHP and PHP&#8217;s internals. So it&#8217;s not just a great place to get in contact with other people from the community but also to learn something.</p>
<p>No knowledge about C or PHP&#8217;s internals is needed. We will provide you with everything you need.<br />
Check the <a href="http://wiki.php.net/qa/testfest#germany">wiki</a> page for more information about the event. It&#8217;s definatly worth joining us.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.experimentalworks.net/2009/04/php-testfest-in-munich-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
