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

<channel>
	<title>echolibre blog &#187; performance</title>
	<atom:link href="http://blog.echolibre.com/category/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.echolibre.com</link>
	<description></description>
	<pubDate>Tue, 25 May 2010 13:52:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>HipHop for PHP, Facebook unveils it&#8217;s magic</title>
		<link>http://blog.echolibre.com/2010/02/hiphop-for-php-facebook-unveils-its-magic/</link>
		<comments>http://blog.echolibre.com/2010/02/hiphop-for-php-facebook-unveils-its-magic/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 18:38:26 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
		<category><![CDATA[APC]]></category>

		<category><![CDATA[Facebook]]></category>

		<category><![CDATA[HipHopPHP]]></category>

		<category><![CDATA[LLVM]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[RoadsendPHP]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[echolibre]]></category>

		<category><![CDATA[industry]]></category>

		<category><![CDATA[innovation]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[phc]]></category>

		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.echolibre.com/?p=791</guid>
		<description><![CDATA[Facebook Releases HipHop for PHP]]></description>
			<content:encoded><![CDATA[<p>After many days of speculations all around the web about Facebook&#8217;s rewrite of PHP, today Haiping Zhao from the Facebook team has announced &#8220;HipHop for PHP&#8221;. The basic idea of HipHop for PHP is that it turns the code you write in PHP into C++ which then can be turned into machine code.</p>
<p>Even though there are others idea that have tried accomplishing the same goal as HipHop for PHP, I believe it is quite safe to assume that Facebook has a large enough user-base to produce code that is solid enough to run and can run well.</p>
<p>The announcement has been made on the <a title="Facebook HipHop For PHP" href="http://developers.facebook.com/news.php?blog=1&amp;story=358">Facebook blog earlier today</a>, and tonight there is going to be the video tech talk that everybody can watch:</p>
<blockquote><p>This evening we&#8217;re hosting a small group of developers to dive deeper into HipHop for PHP and will be streaming this tech talk live. Check back <a title="Facebook HipHop For PHP" href="http://developers.facebook.com/news.php?blog=1&amp;story=358">here</a> around 7:30pm Pacific time if you&#8217;d like to watch.</p></blockquote>
<p>A few questions come to mind even though we haven&#8217;t seen the code just yet. My main concern though is the one of buffer overflows and the security implications of turning PHP code into C++. As they say on the blog, it took nearly 18 months before having a relatively stable version and 3 developers. This is a very short lapse of time to develop a solution used by so many.</p>
<p>Another interest of mine related to this release is how does it compete with the likes of <a title="phc php compiler" href="http://phpcompiler.org">phc</a> or <a title="Roadsend PHP (raven)" href="http://code.roadsend.com/rphp">roadsend php</a>. If it does at all.</p>
<p>However I have noticed on their blog that Facebook has also developed HPHPi which seems to let you use HipHop but without having to actually compile your code before running it (The concept seems a bit like <a title="PHP APC stat" href="http://ie.php.net/manual/en/apc.configuration.php#ini.apc.stat">APC&#8217;s stat</a> on and off switch from the few lines of description), which seems like a quite interesting idea for the development stages.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echolibre.com/2010/02/hiphop-for-php-facebook-unveils-its-magic/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Memcache and Python, getting started</title>
		<link>http://blog.echolibre.com/2009/11/memcache-and-python-getting-started/</link>
		<comments>http://blog.echolibre.com/2009/11/memcache-and-python-getting-started/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 15:57:36 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[industry]]></category>

		<category><![CDATA[memcache]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[documentation]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.echolibre.com/?p=614</guid>
		<description><![CDATA[
If you have ever used Python and Memcached, you probably have been looking for a library to connect to your Memcached server. And I&#8217;m sure you stumbled on the Tummy.com library which has basically no official online documentation.

Code is the best documentation:
That&#8217;s right&#8230; download the tar.gz file, go to the folder where you downloaded it, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-657" title="python-logo" src="http://blog.echolibre.com/wp-content/uploads/2009/11/python-logo.png" alt="python-logo" width="149" height="148" align="right" /></p>
<p style="text-align: justify;">If you have ever used Python and Memcached, you probably have been looking for a library to connect to your Memcached server. And I&#8217;m sure you stumbled on the <a title="Tummy memcache python library" href="http://www.tummy.com/Community/software/python-memcached/">Tummy.com</a> library which has basically no official online documentation.</p>
<p><span id="more-614"></span></p>
<h2>Code is the best documentation:</h2>
<p style="text-align: justify;">That&#8217;s right&#8230; download the tar.gz file, go to the folder where you downloaded it, extract the content of the archive file, open your favorite editor and read the comments of the memcache.py file. It&#8217;s rough, it&#8217;s ugly, it takes time and it&#8217;s boring, but, it&#8217;s a proven way of doing it. Many nerds and geeks will tell you it&#8217;s the BEST WAY IN THE WORLD!</p>
<p style="text-align: justify;">Sorry, I strongly disagree with that. When you install the library with the likes of apt-get (apt-get install python-memcache) or any other dependency management tool, you are lost because you have no direct code to look at (Unless you are an uber geek and decide to go look at the location of your installed files, grep for memcache and read the .py from there. Of course this is also very inconvenient and very unproductive).</p>
<h2>Don&#8217;t use it at all:</h2>
<p style="text-align: justify;">Google for anything else? Realize that everything seems to be pointing back to that Tummy link&#8230; ohh there are a few other libraries alright, you could use the one from Twisted  or maybe cmemcache which is an interesting one but yet another one that doesn&#8217;t seem to have any documentation.</p>
<h2>Keep digging and get lucky:</h2>
<p style="text-align: justify;">You can keep digging in order to find documentation for that solution you absolutely need and then get lucky and find a link. In the case of Python memcached, if you are lucky enough you find a link on some mysql page&#8230; why? Not quite sure but it&#8217;s there.</p>
<p>You use it and decide to write an article about it, just like I am doing:</p>
<p style="text-align: justify;">Here we go, Python Memcache basic usage, how to install python-memcache (on Ubuntu), how to connect to your memcache server(s), how to add a new key to the cache, how to retrieve data from memcache and how to delete (lazy delete) from memcache.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="system" style="font-family:monospace;">apt-get install python-memcache</pre></td></tr></table></div>

<p>Once everything went ok, you need to test your connection and your memcache server so simply run the python interface:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> memcache
<span style="color: #66cc66;">&gt;&gt;&gt;</span> s = memcache.<span style="color: black;">Client</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;127.0.0.1:11211&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Of course if your memcache server is on another host and another port, you need to adjust the line above.</p>
<p>So now let&#8217;s test adding data to the server:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> memcache
<span style="color: #66cc66;">&gt;&gt;&gt;</span> s = memcache.<span style="color: black;">Client</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;127.0.0.1:11211&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> s.<span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span>, <span style="color: #483d8b;">&quot;david&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span></pre></td></tr></table></div>

<p>Now you have a name set in your memcache server and if you instantiate a new connection, you should be able to retrieve this &#8220;name&#8221; key.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> memcache
<span style="color: #66cc66;">&gt;&gt;&gt;</span> s = memcache.<span style="color: black;">Client</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;127.0.0.1:11211&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> name = s.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span></pre></td></tr></table></div>

<p>You should get &#8220;david&#8221; back from that. Here&#8217;s an example on how you could actually use that in a file:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> memcache
<span style="color: #483d8b;">&quot;&quot;&quot;
Example class
&nbsp;
This is simply an example class used for the memcache demonstration
&nbsp;
package: echolibre.examples
&quot;&quot;&quot;</span>
<span style="color: #ff7700;font-weight:bold;">class</span> Example<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;Example of memcache tester&quot;&quot;&quot;</span>
    hostname = <span style="color: #483d8b;">&quot;&quot;</span>
    server   = <span style="color: #483d8b;">&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, hostname=<span style="color: #483d8b;">&quot;127.0.0.1&quot;</span>, port=<span style="color: #483d8b;">&quot;11211&quot;</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">hostname</span> = <span style="color: #483d8b;">&quot;%s:%s&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>hostname, port<span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">server</span>   = memcache.<span style="color: black;">Client</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">self</span>.<span style="color: black;">hostname</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, key, value, expiry=<span style="color: #ff4500;">900</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;
        This method is used to set a new value
        in the memcache server.
        &quot;&quot;&quot;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">server</span>.<span style="color: #008000;">set</span><span style="color: black;">&#40;</span>key, value, expiry<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> get<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, key<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;
        This method is used to retrieve a value
        from the memcache server
        &quot;&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">server</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span>key<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> delete<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, key<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;
        This method is used to delete a value from the
        memcached server. Lazy delete
        &quot;&quot;&quot;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">server</span>.<span style="color: black;">delete</span><span style="color: black;">&#40;</span>key<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    sample = Example<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;127.0.0.1&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
    sample.<span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span>, <span style="color: #483d8b;">&quot;david&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
    retrieved = sample.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> retrieved</pre></td></tr></table></div>

<p>So simply enough you can invoke &#8220;python example.py&#8221; or do something like</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">from</span> example <span style="color: #ff7700;font-weight:bold;">import</span> Example
<span style="color: #66cc66;">&gt;&gt;&gt;</span> e = Example<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;127.0.0.1&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> e.<span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span>, <span style="color: #483d8b;">&quot;david&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">print</span> e.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> e.<span style="color: black;">delete</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p style="text-align: justify;">You are now ready to use memcache from your python code/classes/scripts so I hope you enjoyed this and that it&#8217;ll be useful. I&#8217;ll be posting a second article about the multi delete, multi set, and extended methods that you can&#8217;t find anywhere. In the meantime, they are mine! Mouhahahaha! (evil)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echolibre.com/2009/11/memcache-and-python-getting-started/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Conferences, conferences, conferences</title>
		<link>http://blog.echolibre.com/2009/07/conferences-conferences-conferences/</link>
		<comments>http://blog.echolibre.com/2009/07/conferences-conferences-conferences/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 10:57:30 +0000</pubDate>
		<dc:creator>Helgi</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[echolibre]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[caching]]></category>

		<category><![CDATA[confrence]]></category>

		<category><![CDATA[dpc]]></category>

		<category><![CDATA[oscon]]></category>

		<category><![CDATA[phptek]]></category>

		<category><![CDATA[zendcon]]></category>

		<guid isPermaLink="false">http://blog.echolibre.com/?p=486</guid>
		<description><![CDATA[The last couple of months have been extremely busy for me, to a point where I have not been blogging or participating in open source project nor the local user group to the level I&#8217;d like, but it has been the good kind of busy, where you feel exhausted but very satisfied with one self.
What [...]]]></description>
			<content:encoded><![CDATA[<p>The last couple of months have been extremely busy for me, to a point where I have not been blogging or participating in open source project nor the local user group to the level I&#8217;d like, but it has been the good kind of busy, where you feel exhausted but very satisfied with one self.</p>
<p>What has been keeping me busy? I have presented at 3 conferences (<a href="http://tek.mtacon.com">PHP Tek</a>, <a href="http://www.phpconference.nl">DPC </a>and <a href="http://en.oreilly.com/oscon2009">OSCON</a>), took a week vacation in Iceland with Chris Shiflett and Andrei Z, moved to a new house, work on a very fun but stressful project among other interesting things that have happened.<br />
A rough calculation told me that since mid May, around the time of <a href="http://tek.mtacon.com">PHP Tek</a>, I have been away from my home a total of 38 days, almost 50%, not bad at all!</p>
<p>To touch base quickly on each of the conferences I spoke at:<span id="more-486"></span></p>
<p><a href="http://tek.mtacon.com">PHP Tek</a></p>
<p>Located in Chicago, as it has for the previous years, it was a great conference as always. A very good community presence at the conference, which makes it very enjoyable to attend, both to see quality talks given by some of the best PHP speakers in the world and meet old friends and make some new, the best MTA conference so far.</p>
<p>I gave a whole day tutorial on caching and performance with Scott MacVicar and then gave a talk on frontend caching. Both went over fantastically, a lot of user interaction, my talk was full and the tutorial great fun with loads of people in it.</p>
<p>No doubt the best PHP conference in the states at the moment, a must go to for anyone living close (or even afar)</p>
<p>Tutorial slides</p>
<ol>
<li><a href="http://www.slideshare.net/helgith/caching-for-cash-part-1">http://www.slideshare.net/helgith/caching-for-cash-part-1</a></li>
<li><a href="http://www.slideshare.net/smacvicar/caching-for-cash-benchmarking-and-profiling">http://www.slideshare.net/smacvicar/caching-for-cash-benchmarking-and-profiling</a></li>
<li><a href="http://www.slideshare.net/smacvicar/caching-for-cash-caching">http://www.slideshare.net/smacvicar/caching-for-cash-caching</a></li>
<li><a href="http://www.slideshare.net/helgith/caching-for-cash-part-4">http://www.slideshare.net/helgith/caching-for-cash-part-4</a></li>
</ol>
<p>Talk slides:<br />
<a href="http://www.slideshare.net/helgith/coping-with-cyber-monday">http://www.slideshare.net/helgith/coping-with-cyber-monday</a></p>
<p><a href="http://www.phpconference.nl">Dutch PHP Conference (DPC)</a></p>
<p>As before DPC was held by <a href="http://www.ibuildings.com">Ibuildings</a> in the RAI in the beautiful city of Amsterdam.  DPC seems growing every year I see it and was not suffering from any recession problems this year like many events have, if anything they made things even grander than before.</p>
<p>DPC is to Europe what PHP Tek is to the States, a world class conference with high quality speakers and talks, without losing sight of the community. It&#8217;s one of those conferences where I expect I will go every year for unforeseen time and try to drag along as many friends as possible, great fun!</p>
<p>I gave my Caching for Cash tutorial with Scott MacVicar, where we sold out and the room was so full that people had to stand around or sit on desks way back in the room, we even brought in couple of extra seats.</p>
<p>The tutorial went over very well, our best performance so far! (pun intended)</p>
<p>The slides can be seen at</p>
<ol>
<li><a href="http://www.slideshare.net/helgith/cashing-for-cash-part-1-dpc-2009">http://www.slideshare.net/helgith/cashing-for-cash-part-1-dpc-2009</a></li>
<li><a href="http://www.slideshare.net/smacvicar/caching-for-cash-benchmarking-and-profiling">http://www.slideshare.net/smacvicar/caching-for-cash-benchmarking-and-profiling</a></li>
<li><a href="http://www.slideshare.net/smacvicar/caching-for-cash-caching">http://www.slideshare.net/smacvicar/caching-for-cash-caching</a></li>
<li><a href="http://www.slideshare.net/helgith/caching-for-cash-part-4-dpc-2009">http://www.slideshare.net/helgith/caching-for-cash-part-4-dpc-2009</a></li>
</ol>
<p><a href="http://en.oreilly.com/oscon2009">OSCON</a></p>
<p>This was the first time I go to <a href="http://en.oreilly.com/oscon2009">OSCON</a> so all I have to compare it against are the stories I hear from other people, but there was a problem with basing my expectations on those stories and that was due to the fact <a href="http://en.oreilly.com/oscon2009">OSCON</a> moved from Portland to San Jose, a move a lot of people were not happy with.</p>
<p>I had high hopes but going in I must admit I didn&#8217;t really feel the &#8220;awesomeness&#8221; that a lot of people had been talking about, while a good conference with amazing speakers and good expo, it seemed like a shadow of it&#8217;s former self. It was the first year they had a decline in attandence, 500 less or so, no doubt due to location change.</p>
<p>This being one of the biggest tech conferences in the world, there were very good talks in there, ranging from design to programming to hardwares, it is not to be shuned even tho it changed location and has a higher than average entrance fee. You will always get value for you money and meet great people.</p>
<p>As for what I saw at the conference, I poked my head into random talks about various topics but the one that sits best in my mind is the one Jon Tan gave on &#8220;Grokkin Design&#8221;, great material but due to the fact that OSCON only has 45 minute talks (which I do not understand) he could only touch lightly on the subject.</p>
<p>I gave my &#8220;Website releases made easy with the PEAR installer&#8221;, it went over nicely but suffered from the whole 45 minutes talk problem, where I originally designed this talk to be at least an hour.<br />
Furhter info on my talk can be found at <a href="http://en.oreilly.com/oscon2009/public/schedule/detail/8126">http://en.oreilly.com/oscon2009/public/schedule/detail/8126</a> and the slide can be gotten from here <a href="http://www.slideshare.net/helgith/website-releases-made-easy-with-the-pear-installer-oscon-2009">http://www.slideshare.net/helgith/website-releases-made-easy-with-the-pear-installer-oscon-2009</a></p>
<p>I would like to thank Chris, Sean and Jon for allowing me to crash with them and Andrei for being a fantastic host and taking us all over the place for great food and drinks, it really added that extra spark to a good trip <img src='http://blog.echolibre.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Upcoming:</strong></p>
<p>I will also be presenting soon at ZendCon (<a href="http://www.zendcon.com">http://www.zendcon.com</a>) where I will talk about frontend caching and Epicenter in Dublin (<a href="http://www.epicenter.ie">http://www.epicenter.ie</a>) where I will talk about frontend caching  and how to deploy your websites with the PEAR installer.</p>
<p>And hopefully couple of other conferences around the world.</p>
<p>See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echolibre.com/2009/07/conferences-conferences-conferences/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Surviving the Dragon&#8217;s Den: Vertical Scaling</title>
		<link>http://blog.echolibre.com/2009/04/surviving-the-dragons-den-vertical-scaling/</link>
		<comments>http://blog.echolibre.com/2009/04/surviving-the-dragons-den-vertical-scaling/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 13:39:02 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
		<category><![CDATA[APC]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[echolibre]]></category>

		<category><![CDATA[industry]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[Helgi]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.echolibre.com/?p=378</guid>
		<description><![CDATA[According to wikipedia, the Dragon&#8217;s Den is:
a venture-capitalist television programme that originated in Japan where the format is owned by Sony. The format, which now airs internationally, consists of entrepreneurs pitching their ideas in order to secure investment finance from business experts — the &#8220;Dragons&#8221;.
As some may already know, in 2009 the television show began [...]]]></description>
			<content:encoded><![CDATA[<p>According to <a title="Dragon's Den Wikipedia" href="http://short.ie/wikipedia-dragons-den" target="_blank">wikipedia, the Dragon&#8217;s Den</a> is:</p>
<blockquote><p>a venture-capitalist television programme that originated in Japan where the format is owned by Sony. The format, which now airs internationally, consists of entrepreneurs pitching their ideas in order to secure investment finance from business experts — the &#8220;Dragons&#8221;.</p></blockquote>
<p>As some may already know, in 2009 the television show began in <a title="Dragon's Den on RTÉ ONE" href="http://rte.ie/dragonsden" target="_blank">Ireland on RTÉ ONE</a>. This post covers the technical considerations encountered when a web site / application appears on national television.<span id="more-378"></span></p>
<h2>Some background</h2>
<p>[<a title="Skip to tech tips" href="#tech">Just want the tech tips without the intro?</a>]</p>
<p>One of our clients, <a title="Rent Collectors" href="http://www.rentcollectors.ie" target="_blank">Rent Collectors.ie</a> , appeared on the Dragon&#8217;s Den (<a title="Dragon's Den on Twitter" href="http://search.twitter.com/search?q=%23ddire">#ddire</a>) on 2 April 2009. This site is hosted on a single virtual private server (VPS) so it has limited memory, CPU and disk space. It runs a version of <a title="Ubuntu Linux Distribution" href="http://ubuntu.com" target="_blank">Ubuntu</a>, <a title="The PHP Project" href="http://php.net" target="_blank">PHP 5.2.3</a>, <a title="Apache HTTP Server" href="http://apache.org" target="_blank">Apache 2.2.4</a> and a <a title="MySQL Open Source Database server" href="http://mysql.com" target="_blank">MySQL 5.0.45</a> (The famous LAMP stack). Those are the stable versions with the operating system version we are running and in order to keep consistency with dependency management, we stuck to it but you should always use the latest stable versions.</p>
<p>RentCollectors is a rather simple service with a good few database interactions and a complex but well designed backend for multiple agents from anywhere in the country to work with. Prior to that day, extreme performances weren&#8217;t a concern. Developing with caching in mind, making the site scalable if it has to be scaled, making sure it could hold high loads was more like a theory we applied to the architecture when developing it.</p>
<p>So what happened? Well a few days before the television show, the client warned us that that website would be under high pressure as it was going to be on national television later that week. I decided to make sure that the server, considering it&#8217;s hardware capabilities, would hold the load of being publicised on TV.</p>
<p>I started by benchmarking the website with Apache Benchmark to find out how much it could take. Turned out to be handling about 35 pages per second. That made my <a title="How to build your own Bat Phone" href="http://www.millionaireplayboy.com/toys/batphone.php">bat phone ring</a>. 35 requests per second is all but acceptable for a website - that is going to be on national television. So knowing that we hadn&#8217;t turned on different levels of caching I realized that in a rather short amount of time - meaning that no rewrite was needed, I managed to bump the server to up to 185 requests per seconds without hogging the server (and still being able to access the website from other computers from other networks). 185 requests per second is not extreme, far from it, but for a single vps server, being to handle the load was the most important things. We could have simply plugged in a few other webservers and scale horizontally/out but I was convinced that we could hold the load with that single server. It was a challenge and a test.</p>
<h2>Vertically Scaling a single VPS</h2>
<p><a name="tech"></a>So instead of scaling out, we decided to scale vertically/up. That basically involves adding CPU or RAM (memory) to a single system. What we did is we created more daemon processes to Apache and added more reserved(spare) child threads. This gave us the buffer we needed as the load was going up.</p>
<p>Interesting, but then we decided to change the MySQL settings to be able to cache more database results. That way, the MySQL query cache wouldn&#8217;t have to do all the work when the exact same queries would be executed. Before you go on your server and increase the query cache on your MySQL servers, please make sure that you know what you are doing. Having the query cache enabled and running is good when the tables do no change too often. This is good for webpages that generate content pages, navigations, footers, etc. If a table gets modified, the cache gets flushed. One way or the other, before you start using the MySQL query cache, I suggest you read <a title="MySQL Query Cache Documentation" href="http://short.ie/mysql-query-cache" target="_blank">the mysql documentation about it</a> and in more general terms you should also read <a title="MySQL Performance Blog High Performance MySQL" href="http://www.mysqlperformanceblog.com" target="_blank">the MySQL Performance Blog</a>, you will most likely learn new things about MySQL and performance.</p>
<p>So after optimizing the MySQL settings we realized that each public page were highly unlikely to be modified during the television show. So we took a  different direction and as well as caching at the MySQL level, we thought that if we could rule out the MySQL server completely, it could be even better.</p>
<p>So we setup <a title="Advanced PHP Cache" href="http://php.net/apc" target="_blank">APC</a> and used our EcholibreApc class. We first used APC to cache the bytecode and then we set the apc.stat setting to &#8220;0&#8243;. <a title="APC Stat" href="http://short.ie/php-apc-stat" target="_blank">apc.stat</a> is set to &#8220;1&#8243; by default and this means that each time a cached script is requested, it verifies if the cache has changed then returns the cached version. By making apc.stat set to &#8220;0&#8243; we skip that step meaning that it doesn&#8217;t try to see if the cached entry has been modified. Beware! It&#8217;s much faster but requires you to restart your webserver if you make a change to a PHP file and you want it to take effect. APC runs by default with the &#8220;apc.shm_size&#8221; set to &#8220;30&#8243;. This means that APC will be using 30 megs of your shared memory. Just remember that memory is cheap and it&#8217;s easy to add, in our case we made the shared memory size bigger in order to make sure that we could store all what we needed. So after all this, we only had the database working every 30 minutes. Which was reducing the response time and server load/memory usage considerably.</p>
<p>Here&#8217;s the very simple EcholibreApc class &#8212; APC utility &#8212; in case you are interested or want to use it:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Echolibre Apc Class
 *
 * A very very simplistic class that acts as a layer to the
 * advanced PHP Cache.
 *
 * One of the reasons of this is that APC doesn't store arrays
 * that are more than &quot;1&quot; level deep. This class wraps around
 * json_encode and json_decode. If you want to know why we use
 * json* instead of serialize well you should run your own micro-
 * benchmarks. You could be surprised ;-)
 *
 * @author  David Coallier
 * @see     http://php.net/apc
 * @version 0.1.2
 * @license New BSD
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> EcholibreApc
<span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Fetch a variable
     *
     * This static method will fetch a value
     * from the apc cache and either return
     * false if the variable doesn't exist in the
     * cache or a json_decoded array/object.
     *
     * @param  string $name   The name of the variable to fetch from the cache
     * @return mixed  Either bool false or a json_decoded object.
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #990000;">static</span> <span style="color: #000000; font-weight: bold;">function</span> fetch<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$var</span> <span style="color: #339933;">=</span> apc_fetch<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span> <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> json_decode<span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Store a variable
     *
     * This static method will store a json_encoded string
     * in the apc cache for the amount of time supplied by
     * the third argument.
     *
     * @param string $name  The name of the variable to store
     * @param mixed  $value The mixed variable to store in the cache
     * @param string $time  The time length to store the variable in cache.
     * @return void
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #990000;">static</span> <span style="color: #000000; font-weight: bold;">function</span> store<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3600</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        apc_store<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> json_encode<span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$time</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Delete a variable
     *
     * This static method will delete a variable
     * from the apc cache.
     *
     * @param string $name  The name of the variable to delete from the cache.
     * @return void
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #990000;">static</span> <span style="color: #000000; font-weight: bold;">function</span> delete<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        apc_delete<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>So after doing the Apache tweaks, MySQL tweaks and the APC/PHP tweaks, we simply made sure the sessions were not read and wrote to disk by making sessions saved to /dev/shm (shared memory) and that was it for backend changes.</p>
<h2>Final Precautions</h2>
<p>We looked at what else could be done in order to improve the user experience. Helgi Þormar Þorbjörnsson and his expertise on frontend caching came in very handy as we decided to cache more data on the user&#8217;s browser, GZIP encode the content being sent to the browser, reduce the footprint of the javascripts and CSS stylesheets. So after compacting the multiple javascript files we had and running a few stress tests, we ended up with a website and a server that was in very good conditions and most likely ready to be on television.</p>
<p>The decisive night arrived, the Dragon&#8217;s Den was on television, our turn came, we started seeing connections to port 80 (netstat &#8211;nat | grep :80 | wc -l) going up, and from a few servers around the world I was still able to access the site as if no-one was online. about 15-20 minutes later, the connection count was gone back to the usual and no sign of downtime whatsoever. We had made it, without a single glitch. Dragon&#8217;s Den is on at 22h00 and after this test, it was time to sleep. A very peaceful night, much more peacefully than the number of connections rising on the webserver <img src='http://blog.echolibre.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echolibre.com/2009/04/surviving-the-dragons-den-vertical-scaling/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Practical JSON Format Standard</title>
		<link>http://blog.echolibre.com/2009/04/practical-json-format-standard/</link>
		<comments>http://blog.echolibre.com/2009/04/practical-json-format-standard/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 16:00:33 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
		<category><![CDATA[API]]></category>

		<category><![CDATA[OSS Bar Camp]]></category>

		<category><![CDATA[PHP London]]></category>

		<category><![CDATA[PJSF]]></category>

		<category><![CDATA[echolibre]]></category>

		<category><![CDATA[industry]]></category>

		<category><![CDATA[innovation]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[security]]></category>

		<category><![CDATA[web3.0]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[json]]></category>

		<category><![CDATA[semantics web]]></category>

		<category><![CDATA[standards]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.echolibre.com/?p=339</guid>
		<description><![CDATA[Watch out! The semantic web is on the way, a thought that many (and not just the marketeers) may find daunting . Why? Because system and web app developers that want to take advantage of the semantic web will need to learn a lot of new standards and change the way they work.
I have been [...]]]></description>
			<content:encoded><![CDATA[<p>Watch out! The <em>semantic web</em> is on the way, a thought that many (and not just the marketeers) may find daunting . Why? Because system and web app developers that want to take advantage of the semantic web will need to learn a lot of new standards and change the way they work.</p>
<p>I have been studying and working with web standards (XHTML, RDF, ATOM, RSS) for well over 4 years now, something I am glad of,  because recently something struck me. Conventions are arising, for example DOAP, SKOS and others, that are built on top of the Resource Description Framework otherwise known as <a title="Resource Description Language" href="http://en.wikipedia.org/wiki/RDF" target="_blank">RDF</a>, if they aren&#8217;t, they are usually built on something very similar or related.<span id="more-339"></span></p>
<p>In this blog post I am going to be using the <a title="Friend of a Friend" href="http://www.foaf-project.org/" target="_blank">FOAF</a> standard as an example and base for my proposal. First of all, the Friend Of A Friend standard (FOAF) is a project aimed at creating machine readable pages that describe people. It covers all basis of human interactions and behaviours. From basic profile information - name, mailbox, title, homepage, img, depiction, surname, given name, family name, firstname - to more detailed information as such as web blog, based near, geekcode, publications, etc.  As you can see on their <a title="FOAF specifications 2007" href="http://xmlns.com/foaf/spec/20071002.html" target="_blank">standard description page</a>, it also covers the following personal aspects: Online Account / IM, Projects / Groups and Documents and Images.</p>
<p>For instance, if a web application was to describe me using FOAF it could look something like this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;foaf:Person</span> <span style="color: #000066;">rdf:about</span>=<span style="color: #ff0000;">&quot;#davidc&quot;</span> <span style="color: #000066;">xmlns:foaf</span>=<span style="color: #ff0000;">&quot;http://xmlns.com/foaf/0.1/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;foaf:name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>David Coallier<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/foaf:name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;foaf:homepage</span> <span style="color: #000066;">rdf:resource</span>=<span style="color: #ff0000;">&quot;http://echolibre.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;foaf:img</span> <span style="color: #000066;">rdf:resource</span>=<span style="color: #ff0000;">&quot;/images/david.jpg&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/foaf:Person<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<h2>The Problem</h2>
<p>Whilst such a standard is clearly easy for a computer to read and does seem a logical fit, it&#8217;s not the easiest for a developer to read. These days, web users are looking for performance, simplicity, ease of use, and so are the developers creating web applications. Considering that XML is heavy to parse using current technologies (Javascript mostly), it makes very little sense for developers to make web applications that are going to be slower due to parsing complex XML nodes. However, <a title="Javascript Object Notation" href="http://json.org" target="_blank">JSON</a> (JavaScript Object Notation) is a lightweight data-interchange format made to carry data over networks with a very small footprint. It has seen massive adoption across the web and is used in widget apps, web apps and various other systems.</p>
<p>As I was talking at <a href="http://blog.echolibre.com/2009/03/slides-from-oss-barcamp/">OSS Bar Camp</a>, something struck me. Developers need a standard. Fact. We need standards for the same reason the industrial revolution had need of machine part standards: to reduce the amount of different solutions to learn in order to achieve the same goal by having everyone do what they do in a standard way. Some may see standards as a way to prevent innovation, I see them as a way to innovate. See &#8220;<a title="W3c Web standards slides/talk" href="http://www.w3.org/2006/Talks/07-ausweb-IH/Slides.pdf" target="_blank">why are web standards important</a>&#8221; by the W3C, a good read.</p>
<p>So, developers need standards. Great, now what currently exists? Development standards (IDE, Documentation, tools, design patterns, unit testing, etc.), Output standards (XHTML, CSS, etc), XML based standards (Namespaces, Schemas, XPath, XQuery, XSLT, DOM, XML Base, RDF(s), etc.), usual web architectural principles, and many more. One thing that is missing though is the standards that allow developers to easily and rapidly work with each other&#8217;s web application.</p>
<p><strong>If &#8220;Web 2.0&#8243; was characterised by the democratisation of content, we feel strongly that the next stage of web evolution, &#8220;Web 3.0&#8243; for want of a better word, will be characterised by the democratisation of data and applications.</strong></p>
<h2>The Solution</h2>
<p>A standard would make that democratisation a little easier. I&#8217;ve decided that I am going to be working on this over the next few months with the help of a few others as such as <a title="Ed Finkler CERIAS Purdue" href="http://www.cerias.purdue.edu/about/people/directory.php?class=staff;id=8" target="_blank">Ed Finkler from the CERIAS</a> (Also the creator of Spaz and all round awesome guy).</p>
<p>So, today I&#8217;m putting forward the need for PJFS - The Practical JSON Format Standard. It will strive to make heavy XML based standards more developer friendly and lighter by creating new, fresh and adapted Practical JSON Formatted Standardized outputs.</p>
<p>For instance, the FOAF example I drew above, is a great example of the need for PJFS. Consider the following from a developers perspective:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="json" style="font-family:monospace;">{
    &quot;Person&quot;: {
        &quot;name&quot;:&quot;David Coallier&quot;,
        &quot;homepage&quot;:&quot;http:\/\/echolibre.com&quot;,
        &quot;img&quot;:&quot;http:\/\/echolibre.com\/images\/david.jpg&quot;
    }
}</pre></td></tr></table></div>

<p>It&#8217;s easy to read but also easy to parse. It&#8217;s fast and reliable. I am well aware of the implications of this post and I do not underestimate the complexity of existing standards. I think each one of them, as complex as they can be, are needed and are something we should all aim to use. However, computers are not completely independent ( just yet!) and the middlemen (developers and users) should not be forgotten.</p>
<p>The implications of JSON formatting standards mean that it&#8217;s adoption will make things easier for developers by reducing the amount of work they have to do, and remove the learning curve on new object structures for every web service the want to use.</p>
<p>The first task I will start working on is a PJFS for micro-blogging web services. The likes of identi.ca have already started in the general direction by &#8220;copying&#8221; the behaviours of the Twitter API, however many other micro-blogging platforms are still very independent and a unified standard could help the tools developers creating more flexible tools that would cover more networks.</p>
<p>So, remember where you heard about PJFS first <img src='http://blog.echolibre.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> It&#8217;s there to create standard object names, properties, variables, class members names to JSON elements so that developers can expect something identically formed when requesting JSON information from a webservice.</p>
<p>If you&#8217;d like to be involved leave a comment or catch me on twitter - <a title="David Coallier on Twitter" href="http://twitter.com/davidcoallier">@davidcoallier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echolibre.com/2009/04/practical-json-format-standard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Slides from OSS BarCamp</title>
		<link>http://blog.echolibre.com/2009/03/slides-from-oss-barcamp/</link>
		<comments>http://blog.echolibre.com/2009/03/slides-from-oss-barcamp/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 15:08:33 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
		<category><![CDATA[API]]></category>

		<category><![CDATA[OSS Bar Camp]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[echolibre]]></category>

		<category><![CDATA[innovation]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[web3.0]]></category>

		<category><![CDATA[architecture]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[scaling]]></category>

		<category><![CDATA[semantics]]></category>

		<category><![CDATA[web1.0]]></category>

		<category><![CDATA[web2.0]]></category>

		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://blog.echolibre.com/?p=315</guid>
		<description><![CDATA[
This past weekend we went along to Dublin&#8217;s OSS BarCamp. There were some really great talks, Stuart Langridge&#8217;s Javascript presentation was a highlight. Jaime Hemmett&#8217;s talk on using Git for version control was useful and informative. Paul Biggar&#8217;s talk on PHC, the Open Source PHP Compiler, was thought provoking and certainly caused a few grumbles [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-332" title="david_coallier-oss_barcamp" src="http://blog.echolibre.com/wp-content/uploads/2009/03/david_coallier-oss_barcamp.jpg" alt="david_coallier-oss_barcamp" width="625" height="267" /></p>
<p>This past weekend we went along to Dublin&#8217;s OSS BarCamp. There were some really great talks, <a title="Stuart Langridge's Blog" href="http://www.kryogenix.org/days/">Stuart Langridge&#8217;s</a> Javascript presentation was a highlight. <a title="Jaime Hemmett's blog" href="http://jaime.hemmett.org/blog/" target="_blank">Jaime Hemmett&#8217;s</a> talk on using Git for version control was useful and informative. <a title="Paul Biggar" href="https://www.cs.tcd.ie/~pbiggar/">Paul Biggar</a>&#8217;s talk on <a title="PCH - PHP Compiler" href="http://code.google.com/p/phc/">PHC</a>, the Open Source PHP Compiler, was thought provoking and certainly caused a few grumbles from PHP guys like myself in the audience ;). JD and myself managed to catch up with him after and talk through some of his ideas over a drink.<span id="more-315"></span></p>
<p>I also got to give a talk on how APIs will be the cornerstone of the next stage in the evolution of the web - web 3.0 if you will.</p>
<p>This was my first time talking about a subject that didn&#8217;t directly involve PHP.  I&#8217;m planning on doing a similar talk at <a title="BarCamp Belfast" href="http://barcampbelfast.com/">BarCamp Belfast</a> at the end of the month, so if you were present and have suggestions on how my presentation could be improved feel free to leave a comment below.</p>
<p>Andrea Trasatti (@<a title="Andrea Trasatti's Twitter Profile" href="http://twitter.com/andreatrasatti">andreatrasatti</a>) made the valid point that a small company and startup are not the same thing. Also I&#8217;ll have to add a list of successful startups towards the end of the presentation to support my central argument that APIs can extend a customer base and service subscriber network.</p>
<p>So, my slides from the presentation are below, please do let me know what you think. As a company, we were delighted to be able to sponsor the event, and it was great to be able to connect to speakers and attendees alike over a few drinks after the event.<br />
<object width="425" height="355" data="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web3-0-090331051900-phpapp01&amp;stripped_title=get-ready-for-web30-open-up-your-app-1226485" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web3-0-090331051900-phpapp01&amp;stripped_title=get-ready-for-web30-open-up-your-app-1226485" /><param name="allowfullscreen" value="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echolibre.com/2009/03/slides-from-oss-barcamp/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
