<?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>The Changelog &#187; PHP</title>
	<atom:link href="http://thechangelog.com/tagged/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://thechangelog.com</link>
	<description>Open source moves fast. Keep up.</description>
	<lastBuildDate>Sat, 18 May 2013 07:32:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Bring your server side debug logging into the browser with Chrome Logger</title>
		<link>http://thechangelog.com/bring-your-server-side-debug-logging-into-the-browser-with-chrome-logger/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bring-your-server-side-debug-logging-into-the-browser-with-chrome-logger</link>
		<comments>http://thechangelog.com/bring-your-server-side-debug-logging-into-the-browser-with-chrome-logger/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 21:45:37 +0000</pubDate>
		<dc:creator>Jerod Santo</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://thechangelog.com/?p=4371</guid>
		<description><![CDATA[<p>If you find yourself jumping back and forth between Chrome&#8217;s Dev Tools and a terminal displaying your server side request logs, Craig Campbell&#8217;s Chrome Logger might be just the thing you need! It&#8217;s a Chrome extension which lets you see your server side logs right in the browser. There are currently libraries for: Python Ruby [...]</p><p>The post <a href="http://thechangelog.com/bring-your-server-side-debug-logging-into-the-browser-with-chrome-logger/">Bring your server side debug logging into the browser with Chrome Logger</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>If you find yourself jumping back and forth between Chrome&#8217;s <a href="https://developers.google.com/chrome-developer-tools/">Dev Tools</a> and a terminal displaying your server side request logs, <a href="http://craig.is/">Craig Campbell&#8217;s</a> <a href="http://craig.is/writing/chrome-logger/">Chrome Logger</a> might be just the thing you need!</p>

<p>It&#8217;s a <a href="https://chrome.google.com/webstore/detail/chromephp/noaneddfkdjfnfdakjjmocngnfkfehhd">Chrome extension</a> which lets you see your server side logs right in the browser. There are currently libraries for:</p>

<ul>
<li><a href="http://github.com/ccampbell/chromelogger-python">Python</a></li>
<li><a href="http://github.com/cookrn/chrome_logger">Ruby</a></li>
<li><a href="http://github.com/ccampbell/chromephp">PHP</a></li>
<li><a href="http://github.com/olahol/express-chrome-logger">Express</a></li>
</ul>

<p>Is your server side language/environment of choice not on that list? Don&#8217;t worry, Chrome Logger uses an <a href="http://craig.is/writing/chrome-logger/techspecs">open and published</a> protocol so you can easily write client libraries of your own!</p>

<p>See the project&#8217;s <a href="http://craig.is/writing/chrome-logger/">home page</a> for more info or <a href="https://github.com/ccampbell/chromelogger">check under the hood</a> if you&#8217;re curious about how it all works.</p>
<p>The post <a href="http://thechangelog.com/bring-your-server-side-debug-logging-into-the-browser-with-chrome-logger/">Bring your server side debug logging into the browser with Chrome Logger</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/bring-your-server-side-debug-logging-into-the-browser-with-chrome-logger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Requests &#8211; HTTP library for PHP</title>
		<link>http://thechangelog.com/requests-http-library-for-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=requests-http-library-for-php</link>
		<comments>http://thechangelog.com/requests-http-library-for-php/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 16:16:43 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/requests-http-library-for-php/</guid>
		<description><![CDATA[<p>Higher level libraries for dealing with HTTP are cropping up in almost every language. The latest is Requests, a PHP library from Ryan McCue. Inspired by Kenneth&#8217;s Python library of the same name, Requests aims to provide a better HTTP API than cURL: $headers = array('Accept' =&#62; 'application/json'); $options = array('auth' =&#62; array('user', 'pass')); $request [...]</p><p>The post <a href="http://thechangelog.com/requests-http-library-for-php/">Requests &#8211; HTTP library for PHP</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Higher level libraries for dealing with HTTP are cropping up in almost every language. The latest is <a href="https://github.com/rmccue/Requests">Requests</a>, a PHP library from <a href="http://ryanmccue.info/">Ryan McCue.</a> Inspired by <a href="https://twitter.com/#!/kennethreitz">Kenneth</a>&#8217;s <a href="http://docs.python-requests.org/en/latest/index.html">Python library of the same name</a>, Requests aims to provide a better HTTP API than cURL:</p>

<pre><code>$headers = array('Accept' =&gt; 'application/json');
$options = array('auth' =&gt; array('user', 'pass'));
$request = Requests::get('https://api.github.com/gists', $headers, $options);

var_dump($request-&gt;status_code);
// int(200)

var_dump($request-&gt;headers['content-type']);
// string(31) "application/json; charset=utf-8"

var_dump($request-&gt;body);
// string(26891) "[...]"
</code></pre>

<p>I&#8217;ve <a href="http://wynnnetherland.com/journal/what-makes-a-good-api-wrapper">written about my thoughts on what makes a good API wrapper</a> and libraries like these that provide a more idiomatic experience are just great.</p>

<p>Grab <a href="https://github.com/rmccue/Requests">Requests on GitHub</a>.</p>
<p>The post <a href="http://thechangelog.com/requests-http-library-for-php/">Requests &#8211; HTTP library for PHP</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/requests-http-library-for-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Imagine &#8211; Unified PHP 5.3 API for GD2, ImageMagick, GraphicsMagick</title>
		<link>http://thechangelog.com/imagine-unified-php-5-3-api-for-gd2-imagemagick-graphics/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=imagine-unified-php-5-3-api-for-gd2-imagemagick-graphics</link>
		<comments>http://thechangelog.com/imagine-unified-php-5-3-api-for-gd2-imagemagick-graphics/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 04:21:30 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[imagemagick]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/imagine-unified-php-5-3-api-for-gd2-imagemagick-graphics/</guid>
		<description><![CDATA[<p>Imagine is a nice looking image manipulation library for PHP 5.3+ that supports GD2, ImageMagick, and GraphicsMagick in a clean, chainable API from Bulat Shakirzyanov: &#60;?php $imagine = new ImagineGdImagine(); // or $imagine = new ImagineImagickImagine(); // or $imagine = new ImagineGmagickImagine(); $size = new ImagineImageBox(40, 40); $mode = ImagineImageImageInterface::THUMBNAIL_INSET; // or $mode = ImagineImageImageInterface::THUMBNAIL_OUTBOUND; [...]</p><p>The post <a href="http://thechangelog.com/imagine-unified-php-5-3-api-for-gd2-imagemagick-graphics/">Imagine &#8211; Unified PHP 5.3 API for GD2, ImageMagick, GraphicsMagick</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/avalanche123/Imagine">Imagine</a> is a nice looking image manipulation library for PHP 5.3+ that supports GD2, ImageMagick, and GraphicsMagick in a clean, chainable API from <a href="https://twitter.com/#!/avalanche123">Bulat Shakirzyanov</a>:</p>

<pre><code>&lt;?php

$imagine = new ImagineGdImagine();
// or
$imagine = new ImagineImagickImagine();
// or
$imagine = new ImagineGmagickImagine();

$size    = new ImagineImageBox(40, 40);

$mode    = ImagineImageImageInterface::THUMBNAIL_INSET;
// or
$mode    = ImagineImageImageInterface::THUMBNAIL_OUTBOUND;

$imagine-&gt;open('/path/to/large_image.jpg')
    -&gt;thumbnail($size, $mode)
    -&gt;save('/path/to/thumbnail.png')
;
</code></pre>

<p>Check out the extremely detailed <a href="http://imagine.readthedocs.org/en/latest/index.html">project docs</a> and <a href="http://imagine.readthedocs.org/en/latest/usage/introduction.html#advanced-examples">examples</a> for advanced usage.</p>
<p>The post <a href="http://thechangelog.com/imagine-unified-php-5-3-api-for-gd2-imagemagick-graphics/">Imagine &#8211; Unified PHP 5.3 API for GD2, ImageMagick, GraphicsMagick</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/imagine-unified-php-5-3-api-for-gd2-imagemagick-graphics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 0.5.4 &#8211; CouchBase, Erlang, and Mergers with J Chris Anderson</title>
		<link>http://thechangelog.com/episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris</link>
		<comments>http://thechangelog.com/episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 13:56:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[membase]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris/</guid>
		<description><![CDATA[<p>Wynn sat down with J Chris Anderson from CouchBase to talk about CouchDB, the merger with Membase, Erlang, and bringing NoSQL to PHPers. Items mentioned in the show: J Chris Anderson is a Couchbase cofounder, Mobile Architect, CouchDB committer, new dad The CouchDB music video (served up from CouchDB no less) Chris sings the official [...]</p><p>The post <a href="http://thechangelog.com/episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris/">Episode 0.5.4 &#8211; CouchBase, Erlang, and Mergers with J Chris Anderson</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Wynn sat down with <a href="http://twitter.com/jchris">J Chris Anderson</a> from <a href="http://couchbase.com">CouchBase</a> to talk about CouchDB, the merger with Membase, Erlang, and bringing NoSQL to PHPers.</p>

<audio src="http://changelogshow.com/105/23613-episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris-anderson.mp3" controls="controls" preload="none"></audio>

<p>Items mentioned in the show:</p>

<ul><li><a href="https://twitter.com/jchris">J Chris Anderson</a> is a Couchbase cofounder, Mobile Architect, CouchDB committer, new dad</li>
<li>The <a href="http://jchris.couchone.com/_utils/document.html?files/couchdb-music">CouchDB music video</a> (served up from CouchDB no less)</li>
<li>Chris sings the <em>official</em> CouchDB theme song to kick off <a href="http://thechangelog.com/post/457259567/episode-0-1-8-nosql-smackdown">Episode 0.1.8</a></li>
<li><a href="http://couchdb.apache.org/">Apache CouchDb</a> is a distributed, fault-tolerant and schema-free document-oriented database accessible via a RESTful HTTP/JSON API.</li>
<li><a href="http://damienkatz.net/">Damien Katz</a> is the creator of CouchDB.</li>
<li><a href="http://www.couchbase.com/">CouchBase</a> was formed from <a href="http://www.couchbase.com/merger/technology-vision">merging Membase and CouchOne</a></li>
<li>Chris is one of the rare CFOs with a <a href="https://github.com/jchris">GitHub account</a></li>
<li>CouchBase <a href="http://www.couchbase.com/why-nosql/nosql-database">makes the case for NoSQL</a></li>
<li><a href="http://www.couchbase.com/products-and-services/membase-server">Membase Server</a> currently uses Sqlite under the hood, but will be swapped out for Couch&#8217;s storage engine soon</li>
<li><a href="http://www.couchbase.com/products-and-services/mobile-couchbase">Mobile Couchbase</a> runs on iOS and brings Couch to your mobile device</li>
<li><a href="http://couchapp.org/page/index">CouchApps</a> are JavaScript and HTML5 applications served directly from CouchDB.</li>
<li><a href="http://www.zynga.com/">Zynga</a> makers of <a href="http://www.farmville.com/">Farmville</a> use Membase</li>
<li>The <a href="https://github.com/couchapp/couchapp">CouchApp toolkit</a> is now maintained by <a href="https://twitter.com/benoitc">Benoît Chesneau</a></li>
<li><a href="https://twitter.com/#!/apage43">Aaron Miller</a> led the charge to get Erlang on iOS, changing dynamic linking to static linking.</li>
<li><a href="http://www.mozilla.org/js/spidermonkey/">SpiderMonkey</a> was included iOS for CouchMobile and its JIT compiler made it preferable to V8 or Nitro for Couch tasks.</li>
<li><a href="http://vmx.cx/cgi-bin/blog/index.cgi/geocouch-the-future-is-now%3A2010-05-03%3Aen%2CCouchDB%2CPython%2CErlang%2Cgeo">GeoCouch</a> adds geospatial features to CouchDB</li>
<li>Chris outlines the distinctives for <a href="http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views">Couch&#8217;s incremental Map/Reduce</a></li>
<li>Jason Smith in Thailand keeps the lights on for CouchBase hosting solutions</li>
<li><a href="https://cloudant.com/">Cloudant</a> offers hosting for Couch in the cloud</li>
<li>Wynn wants to see integration for CouchBase and <a href="http://thechangelog.com/post/334287138/episode-0-0-8-marshall-culpepper-from-appcelerator-titan">Appcelerator Titanium</a></li>
<li><a href="https://twitter.com/bustardcelly">Todd Anderson</a> has a <a href="http://blog.couchbase.com/tutorial-couchdb-jquery-mobile">great tutorial on using jQuery mobile and CouchDB</a></li>
<li><a href="http://damienkatz.net/">Damien Katz</a> is Chris&#8217; programming hero</li>
<li>Chris says working with <a href="http://twitter.com/janl">Jan Lehnardt</a> is a blast</li>
<li>Be sure and check out <a href="http://guide.couchdb.org/index.html">CouchDB &#8211; The Definitive Guide</a> by Chris, Jan, and <a href="https://twitter.com/nslater">Noah</a></li>
</ul>

<a href="http://news.ycombinator.com/item?id=2388350" class="btn">Discuss this episode on Hacker News</a>
<p>The post <a href="http://thechangelog.com/episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris/">Episode 0.5.4 &#8211; CouchBase, Erlang, and Mergers with J Chris Anderson</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://changelogshow.com/105/23613-episode-0-5-4-couchbase-erlang-and-mergers-with-j-chris-anderson.mp3" length="104" type="audio/mpeg" />
		</item>
		<item>
		<title>Options-Framework: Expose an options panel for your Thematic WordPress themes</title>
		<link>http://thechangelog.com/options-framework-an-options-panel-framework-to-help-spe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=options-framework-an-options-panel-framework-to-help-spe</link>
		<comments>http://thechangelog.com/options-framework-an-options-panel-framework-to-help-spe/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 13:05:29 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[compass]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[theming]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/options-framework-an-options-panel-framework-to-help-spe/</guid>
		<description><![CDATA[<p>I don&#8217;t always use WordPress, but when I do, I prefer Thematic (and compass-wordpress). Thematic is a WordPress theme framework from Ian Stewart that provides an abstracted API, letting you focus on your site instead of the lower-level minutia of WordPress. I was excited when I stumbled across a couple of projects by Devin Price [...]</p><p>The post <a href="http://thechangelog.com/options-framework-an-options-panel-framework-to-help-spe/">Options-Framework: Expose an options panel for your Thematic WordPress themes</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>I don&#8217;t always use WordPress, but when I do, I prefer <a href="http://themeshaper.com/">Thematic</a> (and <a href="https://github.com/pengwynn/compass-wordpress">compass-wordpress</a>). Thematic is a WordPress theme framework from <a href="http://twitter.com/iandstewart">Ian Stewart</a> that provides an abstracted API, letting you focus on your site instead of the lower-level minutia of WordPress.</p>

<p>I was excited when I stumbled across a couple of projects by <a href="http://twitter.com/#!/devinsays">Devin Price</a> that let you easily expose an options panel for your theme. <a href="https://github.com/devinsays/thematic-options">Thematic Options</a> (and the non-Thematic <a href="https://github.com/devinsays/Options-Framework">Options Framework</a>) make it easy to add an options panel for your theme settings, letting your end users customize your theme in the WordPress admin panel.</p>

<p><img src="http://cl.ly/362w372H0A13253L2Q1z/thematic-options.jpeg" alt="screenshot" /></p>

<p>Options are declared in a PHP array, as in this <a href="https://github.com/devinsays/thematic-options/blob/master/admin/theme-options.php#L64">example</a>:</p>

<pre><code>// Set the Options Array
global $my_options;
$my_options = array();

$my_options[] = array( "name" =&gt; "General Settings",
                    "type" =&gt; "heading");

$my_options[] = array( "name" =&gt; "Custom Logo",
          "desc" =&gt; "Upload a logo for your theme, or specify the image address of your online logo. (<a href="http://yoursite.com/logo.png">http://yoursite.com/logo.png</a>)",
          "id" =&gt; "logo",
          "std" =&gt; "",
          "type" =&gt; "upload");

$url =  ADMIN . 'images/';
$my_options[] = array( "name" =&gt; "Main Layout",
          "desc" =&gt; "Select main content and sidebar alignment. Choose between 1, 2 or 3 column layout.",
          "id" =&gt; "layout",
          "std" =&gt; "2c-l-fixed.css",
          "type" =&gt; "images",
          "options" =&gt; array(
            '1col-fixed.css' =&gt; $url . '1col.png',
            '2c-r-fixed.css' =&gt; $url . '2cr.png',
            '2c-l-fixed.css' =&gt; $url . '2cl.png',
            '3c-fixed.css' =&gt; $url . '3cm.png',
            '3c-r-fixed.css' =&gt; $url . '3cr.png')
          );
$my_options[] = array( "name" =&gt; "Custom Favicon",
          "desc" =&gt; "Upload a 16px x 16px Png/Gif image that will represent your website's favicon.",
          "id" =&gt; "custom_favicon",
          "std" =&gt; "",
          "type" =&gt; "upload"); 

$my_options[] = array( "name" =&gt; "Tracking Code",
          "desc" =&gt; "Paste your Google Analytics (or other) tracking code here. This will be added into the footer template of your theme.",
          "id" =&gt; "google_analytics",
          "std" =&gt; "",
          "type" =&gt; "textarea");

...
</code></pre>

<p>Devin has a nice <a href="http://wptheming.com/2010/11/thematic-options-panel-v2/">blog post</a> with more info including how to use these values in your theme, along with an <a href="http://www.youtube.com/embed/TP81k4HpF3w">introductory screencast</a>.</p>

<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/TP81k4HpF3w" frameborder="0" allowfullscreen></iframe>

<p>[<a href="http://github.com/devinsays/Options-Framework">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/options-framework-an-options-panel-framework-to-help-spe/">Options-Framework: Expose an options panel for your Thematic WordPress themes</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/options-framework-an-options-panel-framework-to-help-spe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Respect, Validation for PHP developers</title>
		<link>http://thechangelog.com/validation-the-most-awesome-validation-engine-ever-creat/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=validation-the-most-awesome-validation-engine-ever-creat</link>
		<comments>http://thechangelog.com/validation-the-most-awesome-validation-engine-ever-creat/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 10:00:06 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/validation-the-most-awesome-validation-engine-ever-creat/</guid>
		<description><![CDATA[<p>Are you a PHP developer who feels like you get no respect? That&#8217;s exactly what Alexandre Gomes Gaigalas and Carlos A. Ferrari are offering with their GitHub organization. Validation is billed as &#8220;the most awesome validation engine ever created for PHP.&#8221; While that might be the epitome of hyperbole, it is indeed nifty. Validation includes [...]</p><p>The post <a href="http://thechangelog.com/validation-the-most-awesome-validation-engine-ever-creat/">Respect, Validation for PHP developers</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Are you a PHP developer who feels like you get <a href="http://www.amazon.com/No-Respect-Rodney-Dangerfield/dp/B00004STOW">no respect</a>? That&#8217;s exactly what  <a href="http://github.com/alganet">Alexandre Gomes Gaigalas</a> and <a href="http://github.com/caferrari">Carlos A. Ferrari</a> are offering with their <a href="http://github.com/respect">GitHub organization</a>.</p>

<p><a href="https://github.com/Respect/Validation">Validation</a> is billed as &#8220;the most awesome validation engine ever created for PHP.&#8221; While that might be the <a href="http://www.youtube.com/watch?v=myD8ef-i1Qo"><em>epitome of hyperbole</em></a>, it is indeed nifty. Validation includes more than 30 chainable validators supporting composite validation of nested, grouped, and related rules.</p>

<p>Let&#8217;s look at a simple example:</p>

<pre><code>use RespectValidationValidator as v;
v::numeric()-&gt;validate($someNumber); //returns true or false 
</code></pre>

<p>We did mention chaning, right?</p>

<pre><code>//From 1 to 15 non-whitespace alphanumeric characters 
$username = 'alganet';
$validUsername = v::alnum()
                  -&gt;noWhitespace()
                  -&gt;length(1,15)
                  -&gt;validate($username);
</code></pre>

<p>Validators are also reusable:</p>

<pre><code>$idValidator = v::int()-&gt;positive();
$idValidator-&gt;validate(123); //true
$idValidator-&gt;validate(456); //true
</code></pre>

<p>Be sure and check the <a href="http://github.com/Respect/Validation#readme">Readme</a> for advanced usage. Also be sure and check out Respect&#8217;s other projects including:</p>

<ul><li><a href="http://github.com/Respect/Validation"><strong>Relational</strong></a> is a chainable abstraction for relational database queries</li>
<li><a href="https://github.com/Respect/Daemon"><strong>Daemon</strong></a> is a library for managing daemon systems using PHP</li>
<li><a href="https://github.com/Respect/Stream"><strong>Stream</strong></a> is a lightweight, asynchronous, object-oriented layer for the great PHP stream API</li>
<li><a href="https://github.com/Respect/Env"><strong>Env</strong></a> is a lightweight, transparent, testable and awesome environment wrapper for PHP</li>
</ul>

<p>[<a href="http://github.com/Respect/Validation">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/validation-the-most-awesome-validation-engine-ever-creat/">Respect, Validation for PHP developers</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/validation-the-most-awesome-validation-engine-ever-creat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is it Christmas?</title>
		<link>http://thechangelog.com/is-it-christmas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=is-it-christmas</link>
		<comments>http://thechangelog.com/is-it-christmas/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 18:36:07 +0000</pubDate>
		<dc:creator>Kenneth Reitz</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/is-it-christmas/</guid>
		<description><![CDATA[<p>Did you know that the always-reassuring Is it Christmas? website has been open sourced? Eric Mill recently made the code available to the public, along with the official Android and iPhone app repos on GitHub. Make sure to submit your pull requests in time for next year! [Source on GitHub] [Is it Christmas?]</p><p>The post <a href="http://thechangelog.com/is-it-christmas/">Is it Christmas?</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Did you know that the always-reassuring <a href="http://isitchristmas.com">Is it Christmas?</a> website has been open sourced?</p>

<p><img src="http://cl.ly/1t0X3U0s411T0R3u1Y0b/Screen_shot_2010-12-30_at_1.17.47_PM.png" /></p>

<p><a href="http://twitter.com/klondike">Eric Mill</a> recently made the code available to the public, along with the official <a href="https://github.com/isit/christmas-android">Android</a> and <a href="https://github.com/isit/christmas-iphone">iPhone</a> app repos on GitHub.</p>

<p>Make sure to submit your pull requests in time for next year!</p>

<p>[<a href="https://github.com/isit/christmas">Source on GitHub</a>]
[<a href="http://isitchristmas.com">Is it Christmas?</a>]</p>
<p>The post <a href="http://thechangelog.com/is-it-christmas/">Is it Christmas?</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/is-it-christmas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GitHub Follow Friday for 20101029</title>
		<link>http://thechangelog.com/github-follow-friday/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=github-follow-friday</link>
		<comments>http://thechangelog.com/github-follow-friday/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 20:22:46 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[ff]]></category>
		<category><![CDATA[FollowFriday]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/github-follow-friday/</guid>
		<description><![CDATA[<p>Another Friday, time to spotlight some GitHub folks you should follow. tenderlove (Aaron Patterson) The author of nokogiri and mechanize, Aaron also empowers you to do fuzzy texticle searches. isaacs (Isaac Z. Schlueter) The man who helps you manage your package using npm. abraham (Abraham Williams) The author of the canonical PHP library for the [...]</p><p>The post <a href="http://thechangelog.com/github-follow-friday/">GitHub Follow Friday for 20101029</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Another Friday, time to spotlight some GitHub folks you should follow.</p>
<h4><a href="http://github.com/tenderlove">tenderlove (Aaron Patterson)</a></h4>
<p>The author of <a href="http://github.com/tenderlove/nokogiri">nokogiri</a> and <a href="http://github.com/tenderlove/mechanize">mechanize</a>, Aaron also empowers you to do fuzzy <a href="http://github.com/tenderlove/texticle">texticle</a> searches.</p>
<h4><a href="http://github.com/isaacs">isaacs (Isaac Z. Schlueter)</a></h4>
<p>The man who helps you manage your package using <a href="http://github.com/isaacs">npm</a>.</p>
<h4><a href="http://github.com/abraham">abraham (Abraham Williams)</a></h4>
<p>The author of the <a href="http://github.com/abraham/twitteroauth">canonical PHP library for the Twitter API</a> and <a href="http://github.com/abraham/omnitweet">fun Chrome extensions</a>, a cool dude who is <a href="http://abrah.am">master of his domain &#8212; name</a>.</p>
<p>The post <a href="http://thechangelog.com/github-follow-friday/">GitHub Follow Friday for 20101029</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/github-follow-friday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>modernizr-server: Modernizr on the server-side</title>
		<link>http://thechangelog.com/modernizr-server-modernizr-on-the-server-side/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=modernizr-server-modernizr-on-the-server-side</link>
		<comments>http://thechangelog.com/modernizr-server-modernizr-on-the-server-side/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 22:57:00 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[modernizr]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[server-side]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/modernizr-server-modernizr-on-the-server-side/</guid>
		<description><![CDATA[<p>James is a technologist, executive &#38; entrepreneur, working in the arena of the mobile web, all while living around the world. This year he happens to be living on an island off Belize. He also wrote modernizr-server &#8211; a way to bring Modernizr browser data to your server scripting environment. PHP is currently supported, and [...]</p><p>The post <a href="http://thechangelog.com/modernizr-server-modernizr-on-the-server-side/">modernizr-server: Modernizr on the server-side</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://twitter.com/jamespearce">James</a> is a technologist, executive &amp; entrepreneur, working in the arena of the mobile web, all while living around the world. This year he happens to be living on an island off <a href="http://lg.gd/31">Belize</a>.</p>

<p>He also wrote modernizr-server &#8211; a way to bring <a href="http://www.modernizr.com/">Modernizr</a> browser data to your server scripting environment. PHP is currently supported, and James intends to offer other server-side environments in the future, but that&#8217;s going to be based on demand!</p>

<p><a href="http://thechangelog.com/search/Modernizr">We&#8217;ve covered Modernizr</a> being used in other projects before. Modernizr is a great way to find out about your user&#8217;s browser capabilities. However, you can only access its API on the browser itself, which means you can&#8217;t easily benefit from knowing about browser capabilities in your server logic.</p>

<p>Progressive enhancement, media queries and body classes are fine for tweaking sites and their appearance. But for structural changes to sites and pages, sometimes it&#8217;s much simpler to just emit the right markup from the server in the first place.</p>

<p>The modernizr-server library is a way to bring Modernizr browser data to your server scripting environment. For example, in PHP:</p>

<pre><code>&lt;?php

    include('modernizr-server.php');

    print 'The server knows:';
    foreach($modernizr as $feature=&gt;$value) {
        print "&lt;br/&gt; $feature: "; print_r($value);
    }

?&gt;

The server knows:
canvas: 1
canvastext: 1
geolocation: 1
crosswindowmessaging: 1
websqldatabase: 1
indexeddb: 0
hashchange: 1
...
</code></pre>

<h3>How it works</h3>

<p>The first time the user accesses a page which includes the <code>modernizr-server.php</code> library, the library sends the Modernizr script to the client, with a small script added to the end. Modernizr runs as usual and populates the feature test results.</p>

<p>The small suffix script then serializes the results into a concise cookie, which is set on the client using Javascript. It then refreshes the page immediately.</p>

<p>This second time the PHP script is executed, the library takes the cookie and instantiates the server-side $modernizr object with its contents. If possible, this is placed in the PHP <code>$_SESSION</code> so that it can be quickly accessed in subsequent requests.</p>

<p>While either of the cookie or session remain active, no further execution of the Modernizr script will take place. If they both expire, the next request to a page containing <code>modernizr-server.php</code> will cause the browser to rerun the Modernizr tests again.</p>

<h3>And also &#8230;</h3>

<p>You might also want to read James&#8217; blog post on <a href="http://lg.gd/2X">Modernizr on the server-side</a>.</p>

<h3>Check out the codes</h3>

<p>[<a href="http://github.com/jamesgpearce/modernizr-server">Source on GitHub</a>] &amp; [<a href="http://github.com/jamesgpearce/modernizr-server#readme">Documentation</a>]</p>
<p>The post <a href="http://thechangelog.com/modernizr-server-modernizr-on-the-server-side/">modernizr-server: Modernizr on the server-side</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/modernizr-server-modernizr-on-the-server-side/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WatchWednesday for 20100929</title>
		<link>http://thechangelog.com/watchwednesday-20100929-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=watchwednesday-20100929-2</link>
		<comments>http://thechangelog.com/watchwednesday-20100929-2/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 17:17:00 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[heroku]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RubyGems]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[WatchWednesday]]></category>
		<category><![CDATA[ww]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/watchwednesday-20100929-2/</guid>
		<description><![CDATA[<p>It&#8217;s Wednesday again, time for us to serve up another quick list of projects to watch on GitHub. These are projects you might have missed or should could keep an eye on. Heroku::Autoscale David Dollar makes automatically scaling your Heroku dynos a snap with this gem. Simply add the gem to your Gemfile gem 'heroku-autoscale' [...]</p><p>The post <a href="http://thechangelog.com/watchwednesday-20100929-2/">WatchWednesday for 20100929</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s <a href="http://thechangelog.com/post/1167855730/watchwednesday-20100922">Wednesday again</a>, time for us to serve up another quick list of projects to watch on <a href="http://github.com">GitHub</a>. These are projects you might have missed or should could keep an eye on.</p>
<h4><a href="http://github.com/ddollar/heroku-autoscale">Heroku::Autoscale</a></h4>
<p><a href="http://github.com/ddollar">David Dollar</a> makes automatically scaling your <a href="http://heroku.com">Heroku</a> dynos a snap with this gem. Simply add the gem to your Gemfile</p>
<pre><code>gem 'heroku-autoscale'
</code></pre>
<p>and configure your Heroku credentials and the minimum and maximum numbers of dynos for your app in your rackup file</p>
<pre><code>use Heroku::Autoscale,
  :username  =&gt; ENV["HEROKU_USERNAME"],
  :password  =&gt; ENV["HEROKU_PASSWORD"],
  :app_name  =&gt; ENV["HEROKU_APP_NAME"],
  :min_dynos =&gt; 2,
  :max_dynos =&gt; 5,
  :queue_wait_low  =&gt; 100,  # milliseconds
  :queue_wait_high =&gt; 5000, # milliseconds
  :min_frequency   =&gt; 10    # seconds
</code></pre>
<p>Now your app will scale up with traffic and down as traffic wanes.</p>
<h4><a href="http://github.com/pilif/tempalias">Tempalias</a></h4>
<p>Warning! This email address will self destruct. Perfect for media site content walls, contests, or auction transactions, <a href="http://github.com/pilif/tempalias">Tempalias</a> is powered by Node.js and lets you create email addresses with a built-in expiration using <a href="http://tempalias.com/#!/about"><a href="http://tempalias.com/">http://tempalias.com/</a></a> or hosted on own your own site.</p>
<h4><a href="http://github.com/justintv/APNS">Justin.tv&#8217;s Apple Push Notification Service gem</a></h4>
<p>Send and read Apple Push Notifications from Ruby:</p>
<blockquote>
<p>Jtv-apns is a gem for accessing the Apple Push Notification Service that allows<br />
  both sending notifications and reading from apple’s feedback service. This gem<br />
  is based heavily on the work of <a href="http://github.com/jpoz/APNS">James Pozdena</a>.</p>
</blockquote>
<h4><a href="http://github.com/graulund/tweetnest">Tweetnest</a></h4>
<p><a href="http://pongsocket.com/tweetnest/">Tweetnest</a> is a PHP app to archive, browse, and search your tweets.</p>
<p><a href="http://pongsocket.com/tweetnest/"><img src="http://cl.ly/b4a2f8f537602a5b2c77/content" alt="Screenshot" /></a></p>
<h4><a href="http://github.com/tpope/vim-fugitive">fugitive.vim</a></h4>
<p>A nice Git wrapper for Vim:</p>
<blockquote>
<p>View any blob, tree, commit, or tag in the repository with <code>:Gedit</code> (and<br />
  <code>:Gsplit</code>, <code>:Gvsplit</code>, <code>:Gtabedit</code>, &#8230;).  Edit a file in the index and<br />
  write to it to stage the changes.  Use <code>:Gdiff</code> to bring up the staged<br />
  version of the file side by side with the working tree version and use<br />
  Vim&#8217;s diff handling capabilities to stage a subset of the file&#8217;s<br />
  changes.</p>
</blockquote>
<p>The post <a href="http://thechangelog.com/watchwednesday-20100929-2/">WatchWednesday for 20100929</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/watchwednesday-20100929-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slim: A PHP5 Sinatra Clone</title>
		<link>http://thechangelog.com/slim-a-php5-sinatra-clone/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=slim-a-php5-sinatra-clone</link>
		<comments>http://thechangelog.com/slim-a-php5-sinatra-clone/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 03:37:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sinatra]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/slim-a-php5-sinatra-clone/</guid>
		<description><![CDATA[<p>Frank Sinatra was the Chairman of cool. Some fourteen years after his death, the crooner is still imitated. Just like its namesake, Sinatra, the class Ruby web application DSL still inspires all sorts of projects from Sammy.js to Padrino to Denied. Slim, a PHP5 project from Josh Lockhart is the latest project to cover the [...]</p><p>The post <a href="http://thechangelog.com/slim-a-php5-sinatra-clone/">Slim: A PHP5 Sinatra Clone</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><img src="http://userserve-ak.last.fm/serve/_/39168093/Frank+Sinatra+sinatra2+png.png" alt="Screen shot" /></p>

<p>Frank Sinatra was the Chairman of cool. Some fourteen years after his death, the crooner is still <a href="http://www.michaelbuble.com/">imitated</a>.</p>

<p>Just like its namesake, <a href="http://www.sinatrarb.com/">Sinatra</a>, the class Ruby web application DSL still inspires all sorts of projects from <a href="http://thechangelog.com/post/553380723/episode-0-2-2-sammy-js-with-aaron-quint">Sammy.js</a> to <a href="http://thechangelog.com/post/708173099/episode-0-2-7-padrino-ruby-web-framework">Padrino</a> to <a href="http://thechangelog.com/post/491508025/denied-sinatra-for-python">Denied</a>.</p>

<p><a href="http://github.com/codeguy/Slim/">Slim</a>, a PHP5 project from <a href="http://github.com/codeguy">Josh Lockhart</a> is the latest project to cover the classics.</p>

<h4>Setup</h4>

<p>To get started, just require the script and call <code>init</code></p>

<pre><code>&lt;?php
require('slim/Slim.php');
Slim::init();
?&gt;
</code></pre>

<h4>Routing</h4>

<p>Slim supports the familiar Sinatra-style routes for all four HTTP verbs:</p>

<pre><code>Slim::get('/books/:id', function ($id) {
    //Do something
});

Slim::post('/books', function () {
    //Do something
});

Slim::put('/books/:id', function ($id) {
    //Do something
});

Slim::delete('/books/:id', function ($id) {
    //Do something
});
</code></pre>

<h4>Middleware and callbacks</h4>

<p>Slim also allows you to run code before and after your actions:</p>

<pre><code>Slim::before(function () {
    //Do something
});


Slim::after(function () {
    //Do something
});
</code></pre>

<h4>Templating</h4>

<p>Slim supports a variety of templates including <a href="http://www.smarty.net/">Smarty</a> and Twig.</p>

<p>[<a href="http://github.com/codeguy/Slim">Source on GitHub</a>] [<a href="http://slim.joshlockhart.com/index.html">Hompage</a>]</p>
<p>The post <a href="http://thechangelog.com/slim-a-php5-sinatra-clone/">Slim: A PHP5 Sinatra Clone</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/slim-a-php5-sinatra-clone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 0.2.4 &#8211; Facebook Open Source projects: Tornado, Hip-hop, and Three20</title>
		<link>http://thechangelog.com/episode-0-2-4-facebook-open-source-projects-tornado-hip/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=episode-0-2-4-facebook-open-source-projects-tornado-hip</link>
		<comments>http://thechangelog.com/episode-0-2-4-facebook-open-source-projects-tornado-hip/#comments</comments>
		<pubDate>Tue, 18 May 2010 18:54:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[obj-c]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/episode-0-2-4-facebook-open-source-projects-tornado-hip/</guid>
		<description><![CDATA[<p>Adam and Wynn caught up with David Recordon and other Facebook developers to talk about their wide range of open source projects including Tornado, Hip-Hop, and Three20 as well as OpenGraph and OAuth 2.0. Mentioned in the show: David Recordon Open Source developer at Facebook, co-creator of OAuth Paul Bucheit Co-founder of FriendFeed, creator of [...]</p><p>The post <a href="http://thechangelog.com/episode-0-2-4-facebook-open-source-projects-tornado-hip/">Episode 0.2.4 &#8211; Facebook Open Source projects: Tornado, Hip-hop, and Three20</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Adam and Wynn caught up with David Recordon and other Facebook developers to talk about their wide range of open source projects including Tornado, Hip-Hop, and Three20 as well as OpenGraph and OAuth 2.0.</p>

<audio src="http://www.buzzsprout.com/105/5026-episode-0-2-4-facebook-open-source-projects-tornado-hip-hop-and-three20.mp3" controls="controls" preload="none"></audio>

<p>Mentioned in the show:</p>

<ul><li><a href="http://www.facebook.com/davidrecordon">David Recordon</a> Open Source developer at Facebook, co-creator of OAuth</li>
<li><a href="http://www.facebook.com/buchheit">Paul Bucheit</a> Co-founder of FriendFeed, creator of Gmail</li>
<li><a href="http://www.facebook.com/hzhao">Haiping Zhao</a> Creator of Hip-Hop at Facebook</li>
<li><a href="http://twitter.com/scottmac">Scott MacVicar</a> Developer on Hip-hop at Facebook</li>
<li>Owen Yamauchi &#8211; Three20 developer at facebook</li>
<li><a href="http://joehewitt.com/about.php">Joe Hewitt</a> Original Three20 developer, creator of Firebug</li>
<li><a href="http://github.com/facebook/tornado">Tornado</a> &#8211; Non-blocking web server built in Python</li>
<li><a href="http://www.kernel.org/doc/man-pages/online/pages/man4/epoll.4.html">epoll</a> &#8211; the Linux magic at the heart of Tornado</li>
<li><a href="http://rubyeventmachine.com/">EventMachine</a> Ruby approach to evented, asynchronous web </li>
<li><a href="http://nodejs.org">Node.js</a> &#8211; You do listen to this show, right?</li>
<li><a href="http://github.com/facebook/hiphop-php">Hip-hop PHP</a> &#8211; Pre-compile your PHP into lightning fast C++ </li>
<li><a href="http://github.com/facebook/three20">Three20</a> &#8211; iPhone framework extracted from <a href="http://itunes.apple.com/us/app/facebook/id284882215?mt=8">Facebook&#8217;s iPhone app</a></li>
<li><a href="http://www.apple.com/iphone/preview-iphone-os/">iPhone OS 4.0</a> Next version of Apple&#8217;s mobile operating system</li>
<li><a href="http://opengraphprotocol.org/">OpenGraph</a> Enables web sites to become rich objects in social graphs</li>
<li><a href="http://oauth.net/">OAuth2</a> New simpler mobile and desktop-friendly version of everybody&#8217;s favorite authentication method</li>
<li><a href="http://www.facebook.com/f8">f8</a> Facebook&#8217;s developer conference</li>
</ul>
<p>The post <a href="http://thechangelog.com/episode-0-2-4-facebook-open-source-projects-tornado-hip/">Episode 0.2.4 &#8211; Facebook Open Source projects: Tornado, Hip-hop, and Three20</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/episode-0-2-4-facebook-open-source-projects-tornado-hip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.buzzsprout.com/105/5026-episode-0-2-4-facebook-open-source-projects-tornado-hip-hop-and-three20.mp3" length="103" type="audio/mpeg" />
		</item>
		<item>
		<title>Snapbird &#8211; Twitter search on steroids</title>
		<link>http://thechangelog.com/snapbird-twitter-search-on-steroids-beyond-10-days/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=snapbird-twitter-search-on-steroids-beyond-10-days</link>
		<comments>http://thechangelog.com/snapbird-twitter-search-on-steroids-beyond-10-days/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 16:08:11 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/snapbird-twitter-search-on-steroids-beyond-10-days/</guid>
		<description><![CDATA[<p>If you&#8217;ve ever spent time looking for a long lost tweet and have gotten frustrated by the short window that tweets are indexed by Twitter Search, then check out Snapbird from Remy Sharp of jQuery for Designers fame. Snapbird lets you search someone&#8217;s timeline, favorites, or your own direct messages without the 7 day Twitter [...]</p><p>The post <a href="http://thechangelog.com/snapbird-twitter-search-on-steroids-beyond-10-days/">Snapbird &#8211; Twitter search on steroids</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;ve ever spent time looking for a long lost tweet and have gotten frustrated by the short window that tweets are indexed by <a href="http://search.twitter.com">Twitter Search</a>, then check out <a href="http://github.com/remy/snapbird">Snapbird</a> from <a href="http://github.com/remy">Remy Sharp</a> of <a href="http://jqueryfordesigners.com/">jQuery for Designers</a> fame.</p>

<p>Snapbird lets you search someone&#8217;s timeline, favorites, or your own direct messages without the 7 day Twitter Search restriction. It even lets you <a href="http://snapbird.org/changelogshow/timeline/episode">permalink favorite queries</a>.</p>

<p>Snapbird also uses Twitterlib, <a href="http://github.com/remy/twitterlib">Remy&#8217;s JavaScript Twitter API wrapper</a>.</p>

<p>Snapbird is open source so you can either use the <a href="http://snapbird.org">hosted version</a> or <a href="http://github.com/remy/snapbird">fork the project</a> and run your own.</p>

<p>[<a href="http://github.com/remy/snapbird">Source on GitHub</a>] [<a href="http://snapbird.org">Homepage</a>]</p>
<p>The post <a href="http://thechangelog.com/snapbird-twitter-search-on-steroids-beyond-10-days/">Snapbird &#8211; Twitter search on steroids</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/snapbird-twitter-search-on-steroids-beyond-10-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Phake: M/Rake for PHP</title>
		<link>http://thechangelog.com/phake-m-rake-for-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phake-m-rake-for-php</link>
		<comments>http://thechangelog.com/phake-m-rake-for-php/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 18:58:05 +0000</pubDate>
		<dc:creator>Kenneth Reitz</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[kennethreitz]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/phake-m-rake-for-php/</guid>
		<description><![CDATA[<p>It&#8217;s always refreshing to see language communities learning from eachother. PHP now as its own clone of GNU Make and Ruby&#8217;s Rake: Phake. Automation Ahoy! Phake supports task grouping, before/after blocks, and task descriptions. Requires PHP &#62;= 5.3 (for closures). Here&#8217;s a simple task definiton: task('dependency1', function() { echo "i will run first!n"; }); task('dependency2', [...]</p><p>The post <a href="http://thechangelog.com/phake-m-rake-for-php/">Phake: M/Rake for PHP</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s always refreshing to see language communities learning from eachother. PHP now as its own clone of GNU Make and Ruby&#8217;s Rake: Phake.</p>

<p>Automation Ahoy!</p>

<p>Phake supports task grouping, before/after blocks, and task descriptions. Requires PHP &gt;= 5.3 (for closures).</p>

<p>Here&#8217;s a simple task definiton:</p>

<pre><code>task('dependency1', function() {
      echo "i will run first!n";
});

task('dependency2', function() {
  echo "i will run second!n";
});

task('task_name', 'dependency1', dependency2', function() {
      echo "i will run last!n";
});
</code></pre>

<p>And to run the task, simply:</p>

<pre><code>./phake task_name
</code></pre>

<p>[<a href="http://github.com/jaz303/phake">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/phake-m-rake-for-php/">Phake: M/Rake for PHP</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/phake-m-rake-for-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CoreyLib: PHP Universal API Wrapper</title>
		<link>http://thechangelog.com/coreylib-php-universal-api-wrapper/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=coreylib-php-universal-api-wrapper</link>
		<comments>http://thechangelog.com/coreylib-php-universal-api-wrapper/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 05:40:00 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[guest]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/coreylib-php-universal-api-wrapper/</guid>
		<description><![CDATA[<p>The PHP world is filled with API and XML Parsers that often bring page rendering to a crawl. Aaron Collegeman&#8217;s CoreyLib library is an incredibly simple universal API wrapper with caching built in. It can handle most modern APIs with full XML, JSON, authentication, parameterization, xmlNode, and Xpath support. All requests can be cached in [...]</p><p>The post <a href="http://thechangelog.com/coreylib-php-universal-api-wrapper/">CoreyLib: PHP Universal API Wrapper</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>The PHP world is filled with API and XML Parsers that often bring page rendering to a crawl.</p>

<p>Aaron Collegeman&#8217;s <a href="http://coreylib.com/">CoreyLib library</a> is an incredibly simple universal API wrapper with caching built in.</p>

<p>It can handle most modern APIs with full XML, JSON, authentication, parameterization, xmlNode, and Xpath support. All requests can be cached in MySql and parsed at a custom interval to dramatically improve page rendering speed. It&#8217;s available as a zero-config <a href="http://github.com/kennethreitz/coreylib-wordpress-plugin">WordPress plugin</a> too.</p>

<p>Here&#8217;s all the code needed to get the latest 5 tweets from twitter:</p>

<p>[<a href="http://github.com/collegeman/coreylib">Source on GitHub</a>] [<a href="http://coreylib.com/">Documentation</a>]</p>

<p><strong>Submitted by</strong>: <a href="http://kennethreitz.com/">Kenneth Reitz</a>: Passionate open source web developer. Follow him on <a href="http://github.com/kennethreitz">GitHub</a>.</p>
<p>The post <a href="http://thechangelog.com/coreylib-php-universal-api-wrapper/">CoreyLib: PHP Universal API Wrapper</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/coreylib-php-universal-api-wrapper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fiber: A simple PHP interface to CouchDB</title>
		<link>http://thechangelog.com/fiber-php-interface-to-couchdb/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fiber-php-interface-to-couchdb</link>
		<comments>http://thechangelog.com/fiber-php-interface-to-couchdb/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 04:46:07 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/fiber-php-interface-to-couchdb/</guid>
		<description><![CDATA[<p>Fiber from Luis Gomez is a simple way to add CouchDB storage to your PHP app. Given a User class that extends a Fiber Document: $user = User::find('john'); $user-&#62;email = "john@example.com"; $user-&#62;city = "San Francisco"; $user-&#62;save(); Fiber also includes some nifty chaining: $user-&#62;set( array( "email" =&#62; "peter@example.com", "city" =&#62; "Caracas" ) )-&#62;save(); Check out the [...]</p><p>The post <a href="http://thechangelog.com/fiber-php-interface-to-couchdb/">Fiber: A simple PHP interface to CouchDB</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Fiber from <a href="http://twitter.com/luisgo">Luis Gomez</a> is a simple way to add <a href="http://couchdb.apache.org/">CouchDB</a> storage to your PHP app.</p>

<p>Given a User class that extends a Fiber Document:</p>

<pre><code>$user = User::find('john');
$user-&gt;email = "john@example.com";
$user-&gt;city = "San Francisco";
$user-&gt;save();
</code></pre>

<p>Fiber also includes some nifty chaining:</p>

<pre><code>$user-&gt;set( array( "email" =&gt; "peter@example.com", "city" =&gt; "Caracas" ) )-&gt;save();
</code></pre>

<p>Check out the <a href="http://github.com/lgomez/fiber/blob/master/example/example.php">examples</a> in the source.</p>

<p>[<a href="http://github.com/lgomez/fiber">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/fiber-php-interface-to-couchdb/">Fiber: A simple PHP interface to CouchDB</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/fiber-php-interface-to-couchdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>storytlr &#8211; lifestreaming for geeks</title>
		<link>http://thechangelog.com/storytlr-php-lifestreaming-for-geeks/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=storytlr-php-lifestreaming-for-geeks</link>
		<comments>http://thechangelog.com/storytlr-php-lifestreaming-for-geeks/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 13:47:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[lifestreaming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[social-media]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/storytlr-php-lifestreaming-for-geeks/</guid>
		<description><![CDATA[<p>Open Source has its own Circle of Life. As we discussed in Episode 0.1.1, Open Source creates opportunities for entrepreneurs. Sometimes those businesses can spin off their own projects, paving the way for the next round of startups. Sometimes commercial apps just don&#8217;t survive, but let&#8217;s not confuse viable with valuable. Take the case of [...]</p><p>The post <a href="http://thechangelog.com/storytlr-php-lifestreaming-for-geeks/">storytlr &#8211; lifestreaming for geeks</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Open Source has its own <a href="http://en.wikipedia.org/wiki/Circle_of_Life">Circle of Life</a>. As we discussed in <a href="http://thechangelog.com/post/360070705/episode-0-1-1-john-nunemaker-from-mongomapper">Episode 0.1.1</a>, Open Source creates opportunities for entrepreneurs. Sometimes <a href="http://shopify.com">those businesses</a> can spin off <a href="http://liquidmarkup.org">their own projects</a>, paving the way for the next round of startups.</p>

<p>Sometimes commercial apps just don&#8217;t survive, but let&#8217;s not confuse viable with valuable. Take the case of <a href="http://storytlr.com/">Storytlr</a>, a hosted lifestreaming service which sought to let you remix your social networking interactions into your own &#8220;stories.&#8221; When the hard decision was made to pull the plug on the service at the end of last year, the founders did what many apps have done and handed the source code over to the community.</p>

<p>The official Storytlr open source project is on <a href="http://storytlr.googlecode.com/">Google Code</a> but <a href="http://github.com/jmhobbs">John Hobbs</a> has a <a href="http://github.com/jmhobbs/storytlr">fork on GitHub</a> that adds:</p>

<ul><li>A tool to rename users (dangerous if not handled properly)</li>
<li>Plugins built in for&#8230;</li>
<li>Github</li>
<li>goodreads</li>
<li>Foursquare</li>
<li>Stack Overflow</li>
<li>Twitter favorites</li>
<li>Google Buzz</li>
<li>Ability to delete items that are from other sources (not just ones from Storytlr itself)</li>
<li>tidy is replaced by htmLawed</li>
<li>Misc fixes for issues reported on the Google group</li>
<li>Misc fixes from other forks, esp. paths courtesy of Stuart Herbert</li>
</ul>

<p>For a <a href="http://stream.abrah.am/">live demo</a>, check out <a href="http://twitter.com/abraham">@abraham</a>&#8217;s Storytlr at <a href="http://stream.abrah.am/"><a href="http://stream.abrah.am/">http://stream.abrah.am/</a></a>.</p>

<p>Storytlr runs on PHP (which runs darn near everywhere) and <a href="http://github.com/jmhobbs/storytlr#readme">installation instructions</a> can be found in the <a href="http://github.com/jmhobbs/storytlr#readme">README</a>.</p>

<p>[<a href="http://storytlr.googlecode.com/">Official Google Code Project</a>] [<a href="http://github.com/jmhobbs/storytlr">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/storytlr-php-lifestreaming-for-geeks/">storytlr &#8211; lifestreaming for geeks</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/storytlr-php-lifestreaming-for-geeks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>riak &#8211; high performance document store built on JSON and REST</title>
		<link>http://thechangelog.com/riak-high-performance-document-store-built-on-json-and-r/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=riak-high-performance-document-store-built-on-json-and-r</link>
		<comments>http://thechangelog.com/riak-high-performance-document-store-built-on-json-and-r/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 19:49:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[riak]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/riak-high-performance-document-store-built-on-json-and-r/</guid>
		<description><![CDATA[<p>Riak, REE-ahk, combines the power of Erlang with the ubiquity of JSON to deliver a highly scalable document store over REST. Hold on CouchDB fans, before you pounce, you haven&#8217;t heard this one before. Master-less replication Riak is architected for master-less replication from the GET-go. All nodes participate equally in the replication so scaling horizontally [...]</p><p>The post <a href="http://thechangelog.com/riak-high-performance-document-store-built-on-json-and-r/">riak &#8211; high performance document store built on JSON and REST</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a style="float:right;margin: 0 0 10px 10px" href="http://riak.basho.com"><img src="http://riak.basho.com/images/riaklogo_clear.png" alt="riak" /></a>
<a href="http://riak.basho.com">Riak</a>, <em>REE-ahk</em>, combines the power of <a href="http://erlang.org/">Erlang</a> with the ubiquity of JSON to deliver a highly scalable document store over REST. Hold on <a href="http://couchdb.apache.org/">CouchDB</a> fans, before you pounce, you haven&#8217;t heard this one before.</p>

<h4>Master-less replication</h4>

<p>Riak is architected for master-less replication from the GET-go. All nodes participate equally in the replication so scaling horizontally means just adding new servers to join the party.</p>

<h4>Links for powerful object graphs</h4>

<p>Riak supports <em>link-walking</em> which is far more powerful than traditional relational DB joins. As <a href="http://seancribbs.com/tech/2010/02/06/why-riak-should-power-your-next-rails-app/">Sean Cribbs</a> explains:</p>

<blockquote>
  <p>Every datum stored in Riak can have one-way relationships to other data via the Link HTTP header. In the canonical example, you know the key of a band that you have stored in the “artists” bucket (Riak buckets are like database tables or S3 buckets). If that artist is linked to its albums, which are in turn linked to the tracks on the albums, you can find all of the tracks produced in a single request. As I’ll describe in the next section, this is much less painful than a JOIN in SQL because each item is operated on independently, rather than a table at a time. Here’s what that query would look like:</p>
</blockquote>

<pre><code>GET /raw/artists/TheBeatles/albums,_,_/tracks,_,1
</code></pre>

<h4>More powerful Map/Reduce</h4>

<p>Map/Reduce works a bit differently in Riak. Riak&#8217;s Map function expects a list of keys on which it should run. You can of course pass every key in your bucket, but doing Map in this way allows Map to be run on the node where the data is actually stored.</p>

<p>Riak ships with <a href="http://riak.basho.com/programming.html">libraries for Python, Ruby, Java, Erlang, and even JavaScript</a>. Want to know more? Stay tuned. Riak will be the focus of an upcoming episode of The Changelog.</p>

<p>[<a href="http://hg.basho.com/riak/wiki/Home">Source on BitBucket</a>] [<a href="http://riak.basho.com">Homepage</a>] [<a href="http://riak.basho.com/nyc-nosql/">Brian Fink&#8217;s NYC-NoSQL talk</a>]</p>
<p>The post <a href="http://thechangelog.com/riak-high-performance-document-store-built-on-json-and-r/">riak &#8211; high performance document store built on JSON and REST</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/riak-high-performance-document-store-built-on-json-and-r/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kohana &#8211; The Swift PHP Framework</title>
		<link>http://thechangelog.com/kohana-the-swift-php-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kohana-the-swift-php-framework</link>
		<comments>http://thechangelog.com/kohana-the-swift-php-framework/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 14:03:31 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/kohana-the-swift-php-framework/</guid>
		<description><![CDATA[<p>Kohana is a PHP MVC web framework that aims to be easy, lightweight, and secure. It has no dependencies on PECL or PEAR extensions and uses strict PHP 5 OOP. It uses what it calls &#8220;cascading resources&#8221; to allow developers to extend the framework without editing the core system. There is an extensive list of [...]</p><p>The post <a href="http://thechangelog.com/kohana-the-swift-php-framework/">Kohana &#8211; The Swift PHP Framework</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://github.com/kohana/kohana">Kohana</a> is a PHP MVC web framework that aims to be easy, lightweight, and secure. It has no dependencies on PECL or PEAR extensions and uses strict PHP 5 OOP. It uses what it calls &#8220;cascading resources&#8221; to allow developers to extend the framework without editing the core system.</p>

<p>There is an extensive list of [<a href="http://dev.kohanaphp.com/projects/">modules</a>], even a MongoDB ORM, <a href="http://github.com/Wouterrr/MangoDB">MangoDB</a>.</p>

<p>[<a href="http://github.com/kohana/kohana">Source on GitHub</a>] [<a href="http://kohanaphp.com/">Homepage</a>] [<a href="http://docs.kohanaphp.com/">Docs</a>]</p>
<p>The post <a href="http://thechangelog.com/kohana-the-swift-php-framework/">Kohana &#8211; The Swift PHP Framework</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/kohana-the-swift-php-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook&#8217;s HipHop leaves PHPers dancing</title>
		<link>http://thechangelog.com/facebooks-hiphop-leaves-phpers-dancing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=facebooks-hiphop-leaves-phpers-dancing</link>
		<comments>http://thechangelog.com/facebooks-hiphop-leaves-phpers-dancing/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 03:24:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/facebooks-hiphop-leaves-phpers-dancing/</guid>
		<description><![CDATA[<p>When Twitter faced early scaling issues, much was made of decisions to rewrite large portions of the Rails site in Scala. Facebook however has decided to double down on PHP, releasing HipHop, a PHP source code transfomer: HipHop programmatically transforms your PHP source code into highly optimized C++ and then uses g++ to compile it. [...]</p><p>The post <a href="http://thechangelog.com/facebooks-hiphop-leaves-phpers-dancing/">Facebook&#8217;s HipHop leaves PHPers dancing</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>When Twitter faced early scaling issues, much was made of decisions to rewrite large portions of the Rails site in Scala.</p>

<p>Facebook however has decided to double down on PHP, releasing <a href="http://github.com/facebook/hiphop-php">HipHop</a>, a PHP source code transfomer:</p>

<blockquote>
  <p>HipHop programmatically transforms your PHP source code into highly optimized C++ and then uses g++ to compile it. HipHop executes the source code in a semantically equivalent manner and sacrifices some rarely used features — such as eval() — in exchange for improved performance. HipHop includes a code transformer, a reimplementation of PHP&#8217;s runtime system, and a rewrite of many common PHP Extensions to take advantage of these performance optimizations.</p>
</blockquote>

<p>** Update **</p>

<p>We posted this blind yesterday when GitHub was unavailable. Looks like the repo isn&#8217;t public yet. Keep an eye out. <a href="http://github.com/explore">GitHub explore</a> shows five watchers&#8230;</p>

<p>[<a href="http://github.com/facebook/hiphop-php">Source on GitHub</a>] [<a href="http://developers.facebook.com/news.php?blog=1&amp;story=358">Announcement</a>]</p>
<p>The post <a href="http://thechangelog.com/facebooks-hiphop-leaves-phpers-dancing/">Facebook&#8217;s HipHop leaves PHPers dancing</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/facebooks-hiphop-leaves-phpers-dancing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpMoAdmin: MongoDB admin tool for PHP</title>
		<link>http://thechangelog.com/phpmoadmin-mongodb-admin-tool-for-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phpmoadmin-mongodb-admin-tool-for-php</link>
		<comments>http://thechangelog.com/phpmoadmin-mongodb-admin-tool-for-php/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 17:51:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/phpmoadmin-mongodb-admin-tool-for-php/</guid>
		<description><![CDATA[<p>Extra (or deducted, depending on your point of view) points for an SEO optimized repo name, phpMoAdmin aims to be mo&#8217; admin than phpMyAdmin by providing a MongoDB administration tool for PHP. phpMoAdmin is built on a stripped-down version of the Vork high-performance framework. Features include: Database List Create/drop Repair Collection Show collections Create/drop collection [...]</p><p>The post <a href="http://thechangelog.com/phpmoadmin-mongodb-admin-tool-for-php/">phpMoAdmin: MongoDB admin tool for PHP</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Extra (or deducted, depending on your point of view) points for an SEO optimized repo name, phpMoAdmin aims to be mo&#8217; admin than phpMyAdmin by providing a <a href="http://mongodb.org">MongoDB</a> administration tool for PHP. phpMoAdmin is built on a stripped-down version of the Vork high-performance framework.</p>

<h3>Features include:</h3>

<ul><li>Database

<ul><li>List</li>
<li>Create/drop</li>
<li>Repair</li>
</ul></li>
<li>Collection

<ul><li>Show collections</li>
<li>Create/drop collection</li>
<li>List indexes</li>
<li>Create/drop indexes</li>
</ul></li>
<li>Data objects

<ul><li>Show objects with 3-different viewing options (full, compact &amp; uniform)</li>
<li>Create/delete objects</li>
<li>Edit object data</li>
</ul></li>
<li>Mongo GridFS

<ul><li>GridFS objects automatically link GridFS chunks to GridFS files</li>
</ul></li>
</ul>

<p>[<a href="http://github.com/MongoDB-Rox/phpMoAdmin-MongoDB-Admin-Tool-for-PHP">Source on GitHub</a>] [<a href="http://www.phpmoadmin.com/">Homepage</a>]</p>
<p>The post <a href="http://thechangelog.com/phpmoadmin-mongodb-admin-tool-for-php/">phpMoAdmin: MongoDB admin tool for PHP</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/phpmoadmin-mongodb-admin-tool-for-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capcake: Deploy CakePHP apps using Capistrano</title>
		<link>http://thechangelog.com/capcake-deploy-cakephp-apps-using-capistrano/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=capcake-deploy-cakephp-apps-using-capistrano</link>
		<comments>http://thechangelog.com/capcake-deploy-cakephp-apps-using-capistrano/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 16:34:14 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/capcake-deploy-cakephp-apps-using-capistrano/</guid>
		<description><![CDATA[<p>Capistrano isn&#8217;t just for Rubyists you know. @jadb wants to bring all you CakePHP folks to the party too: Capcake extends Capistrano, removing the rails-ism, replacing them by more cake-ish ones [Source on GitHub]</p><p>The post <a href="http://thechangelog.com/capcake-deploy-cakephp-apps-using-capistrano/">Capcake: Deploy CakePHP apps using Capistrano</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://github.com/capistrano/capistrano">Capistrano</a> isn&#8217;t just for Rubyists you know. <a href="http://github.com/jadb">@jadb</a> wants to bring all you CakePHP folks to the party too:</p>

<blockquote>
  <p>Capcake extends Capistrano, removing the rails-ism, replacing them by more cake-ish ones</p>
</blockquote>

<p>[<a href="http://github.com/jadb/capcake">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/capcake-deploy-cakephp-apps-using-capistrano/">Capcake: Deploy CakePHP apps using Capistrano</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/capcake-deploy-cakephp-apps-using-capistrano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal 7.0 Alpha 1 released</title>
		<link>http://thechangelog.com/drupal-7-0-alpha-1-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=drupal-7-0-alpha-1-released</link>
		<comments>http://thechangelog.com/drupal-7-0-alpha-1-released/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 19:07:44 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/drupal-7-0-alpha-1-released/</guid>
		<description><![CDATA[<p>After nearly two years of development, we are proud to announce the release of the first alpha version of the Drupal 7.x family. This alpha includes a tremendous number of new features and new under-the-hood improvements for both users and developers. What&#8217;s new, what&#8217;s changed? Revamped User Interface Custom Fields Image Handling Update Manager Front-end [...]</p><p>The post <a href="http://thechangelog.com/drupal-7-0-alpha-1-released/">Drupal 7.0 Alpha 1 released</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<blockquote>
  <p>After nearly two years of development, we are proud to announce the release of the first alpha version of the Drupal 7.x family. This alpha includes a tremendous number of new features and new under-the-hood improvements for both users and developers.</p>
</blockquote>

<h4>What&#8217;s new, what&#8217;s changed?</h4>

<ul><li>Revamped User Interface</li>
<li>Custom Fields</li>
<li>Image Handling</li>
<li>Update Manager</li>
<li>Front-end &#8220;under-the-hood&#8221; improvements</li>
<li>Back-end &#8220;under-the-hood&#8221; improvements</li>
</ul>

<p>[<a href="http://github.com/mikl/drupal/tree/DRUPAL-7-0-ALPHA1">Mirror on GitHub</a>] [<a href="http://drupal.org/drupal-7.0-alpha1">Official Release</a>] [<a href="http://drupal.org/">Homepage</a>]</p>
<p>The post <a href="http://thechangelog.com/drupal-7-0-alpha-1-released/">Drupal 7.0 Alpha 1 released</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/drupal-7-0-alpha-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.9 released</title>
		<link>http://thechangelog.com/wordpress-2-9-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wordpress-2-9-released</link>
		<comments>http://thechangelog.com/wordpress-2-9-released/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 01:21:45 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/wordpress-2-9-released/</guid>
		<description><![CDATA[<p>WordPress 2.9 &#8216;Carmen&#8217; is out. Release highlights include: Global undo/”trash” feature, which means that if you accidentally delete a post or comment you can bring it back from the grave (i.e., the Trash). This also eliminates those annoying “are you sure” messages we used to have on every delete. Built-in image editor allows you to [...]</p><p>The post <a href="http://thechangelog.com/wordpress-2-9-released/">WordPress 2.9 released</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>WordPress 2.9 &#8216;Carmen&#8217; is out. Release highlights include:</p>

<blockquote>
  <ol><li><p>Global undo/”trash” feature, which means that if you accidentally delete a post or comment you can bring it back from the grave (i.e., the Trash). This also eliminates those annoying “are you sure” messages we used to have on every delete.</p></li>
  <li><p>Built-in image editor allows you to crop, edit, rotate, flip, and scale your images to show them who’s boss. This is the first wave of our many planned media-handling improvements.</p></li>
  <li><p>Batch plugin update and compatibility checking, which means you can update 10 plugins at once, versus having to do multiple clicks for each one, and we’re using the new compatibility data from the plugins directory to give you a better idea of whether your plugins are compatible with new releases of WordPress. This should take the fear and hassle out of upgrading.</p></li>
  <li><p>Easier video embeds that allow you to just paste a URL on its own line and have it magically turn it into the proper embed code, with Oembed support for YouTube, Daily Motion, Blip.tv, Flickr, Hulu, Viddler, Qik, Revision3, Scribd, Google Video, Photobucket, PollDaddy, and WordPress.tv (and more in the next release).</p></li>
  </ol></blockquote>

<p>[<a href="http://wordpress.org/download/">Download</a>] [<a href="http://wordpress.org/development/2009/12/wordpress-2-9/">Announcement</a>]</p>
<p>The post <a href="http://thechangelog.com/wordpress-2-9-released/">WordPress 2.9 released</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/wordpress-2-9-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
