<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>PHPDeveloper.org</title>
    <link>http://www.phpdeveloper.org</link>
    <description>Up-to-the Minute PHP News, views and community</description>
    <language>en-us</language>
    <pubDate>Sun, 26 May 2013 00:21:13 -0500</pubDate>
    <ttl>30</ttl>
    <item>
      <title><![CDATA[PHPMaster.com: Crop and Resize Images with ImageMagick]]></title>
      <guid>http://www.phpdeveloper.org/news/19537</guid>
      <link>http://www.phpdeveloper.org/news/19537</link>
      <description><![CDATA[<p>
PHPMaster.com has a new tutorial posted showing you how to <a href="http://phpmaster.com/crop-and-resize-images-with-imagemagick/">crop and resize images</a> with the help of the ImageMagick functionality that can be added to PHP (via <a href="http://pecl.php.net/package/imagick">this extension</a>).
</p>
<blockquote>
If your website allows users to upload photos, image cropping/resizing functionality certainly comes in handy. But users might not have access to image manipulation tools like Photoshop, so by providing a cropping/resizing feature you can allow users to upload photos from any device (e.g. tablets or phones) without them having to worry about the the final size. Furthermore, you can create different versions of the same image and also allow users to crop specific portions of uploaded picture. In this article I'll show you how to create an image cropping tool with the help of the ImageMagick PHP extension. 
</blockquote>
<p>
The post shows the use of the "cropimage" function to trim down an image from its original size and "thumbnailImage" to shrink down the image to make a thumbnail. Also included is the code (both the PHP and the HTML form) to handle file uploads and automatically create a thumbnail image. It outputs the image to the browser and asks the user to select the portion they want thumbnailed (with <a href="http://odyniec.net/projects/imgareaselect/">this jQuery plugin</a> helping). 
</p>
Link: http://phpmaster.com/crop-and-resize-images-with-imagemagick]]></description>
      <pubDate>Thu, 02 May 2013 12:14:51 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[Systems Architect: Distributed application in PHP with Apache Zookeeper]]></title>
      <guid>http://www.phpdeveloper.org/news/19404</guid>
      <link>http://www.phpdeveloper.org/news/19404</link>
      <description><![CDATA[<p>
On his Systems Architect site <i>Lukasz Kujawa</i> has posted <a href="http://systemsarchitect.net/distributed-application-in-php-with-apache-zookeeper/">an introduction to Apache Zookeeper</a> and how to use it in your PHP applications. Zookeeper is "a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services."
</p>
<blockquote>
<a href="http://zookeeper.apache.org/">Apache ZooKeeper</a> is the coolest technology I recently came across. I found it when I was doing a research about <a href="http://wiki.apache.org/solr/SolrCloud">Solr Cloud features</a>.  [...] Running multiple application as one logical program is nothing new. In fact creating such a software was one of my first jobs many years ago. This type of architecture is confusing and very tricky to work with. Apache ZooKeeper tries to provide a generic set of tools to manage such a software.
</blockquote>
<p>
He shows you how to get the PHP extension for Zookepper (along with needed libraries) compiled and installed in your server setup. He includes a sample class that shows you how to connect to the Zookepper server and add a "watcher" your PHP script will respond to when changes happen. The post also has a "Watcher" class example, showing how to use Zookeeper as part of a distributed application. There's some links at the bottom of the post that can also help you get more details on Zookeeper and the PHP interface.
</p>
Link: http://systemsarchitect.net/distributed-application-in-php-with-apache-zookeeper/]]></description>
      <pubDate>Wed, 03 Apr 2013 10:24:29 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[System Architect: Integrate PHP application with Solr search engine]]></title>
      <guid>http://www.phpdeveloper.org/news/19303</guid>
      <link>http://www.phpdeveloper.org/news/19303</link>
      <description><![CDATA[<p>
On the "System Architect" site there's a recent post showing you how to <a href="http://systemsarchitect.net/integrate-php-application-with-solr-search-engine/">integrate PHP and Solr</a>, the searching tool from the Apache project.
</p>
<blockquote>
So why do you need a search engine, is database not enough? If you create a small website it might not matter. With medium or big size applications it's often wiser to go for a search engine. Saying that, even a small websites can benefit from Solr if you desire a high level of relevance in search results.
</blockquote>
<p>
Their example involves an ecommerce website and a search for a term (iPhones) and how difficult it could be to match against the possible multiple variations on the models. Solr makes this kind of searching easier. He shows you how to get a Solr instance all set up and configured as well as the PHP PECL extension from <a href="https://github.com/lukaszkujawa/php-pecl-solr.git">here</a>. A sample PHP script is also included showing connecting to Solr, inserting a new document and searching for a simple query of "hello". 
</p>]]></description>
      <pubDate>Tue, 12 Mar 2013 12:01:43 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[Lukas Smith: On predictable PHP release cycles]]></title>
      <guid>http://www.phpdeveloper.org/news/19256</guid>
      <link>http://www.phpdeveloper.org/news/19256</link>
      <description><![CDATA[<p>
<i>Lukas Smith</i> has a new post today about what he sees as an important part of PHP (or really most open source projects) - a <a href="http://pooteeweet.org/blog/0/2194#m2194">predictable release cycle</a>. It centers around the recent proposal to introduce the <a href="https://wiki.php.net/rfc/optimizerplus">Zend Optimizer+</a> into the core and how it seems to be causing a delay with 5.5 (maybe up to 2 months).
</p>
<blockquote>
What troubles me though is that its being proposed very late in the game for PHP 5.5, therefore causing a likely delay of 5.5 of at least about 2 months in the best case scenario if it were included. The other option of including it in 5.6 does not seem to be as popular at this point. This saddens me quite a bit since I believe that <a href="https://wiki.php.net/rfc/releaseprocess">predictable release cycles</a> would carry several advantages
</blockquote>
<p>
He points out some things that come along with having predicability around the software releases like developers knowing when/if their changes will make it into the next release. It also makes it easier for end users to plan their releases of their own software, knowing when they'll be getting a feature. In this particular case, though, he doesn't quite understand the delay as the Zend Optimizer+ isn't a change to core, it's an addition:
</p>
<blockquote>
What is even stranger for this case is that we are just talking about an extension here. Its not a language feature, there is no engine level integration. So even if its not added to core, people can easily get Optimizer+ via PECL. So in this case we are not talking about people having to wait another 10-11 months. Don't get me wrong I think getting an opcode cache into core is awesome, but the reality is that shared host users will probably still not have access to it [...] and the rest can still get it, albeit with a bit more effort. 
</blockquote>]]></description>
      <pubDate>Fri, 01 Mar 2013 09:37:52 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Ulrich Kautz: C-based Web Frameworks for PHP]]></title>
      <guid>http://www.phpdeveloper.org/news/19246</guid>
      <link>http://www.phpdeveloper.org/news/19246</link>
      <description><![CDATA[<p>
In <a href="http://foaa.de/blog/2013/02/21/c-based-frameworks-for-php/">this recent post</a> to his site <i>Ulrich Kautz</i> takes a look at an interesting development in the PHP framework world - C-based frameworks installable as PHP extensions. He covers some of the good and bad things about this approach.
</p>
<blockquote>
At the End of 2012 I had my first contact with a C-based PHP frameworks, namely <a href="http://www.yafdev.com/">YAF</a>. Coincidently, some day afterwards <a href="https://twitter.com/bitfalls">Bruno</a> from <a href="http://phpmaster.com/">phpmaster.com</a> pointed me towards <a href="http://phalconphp.com/">Phalcon</a> - a more modern interpretation of the same idea. So I was hooked.
</blockquote>
<p>
In his "good idea" category he notes that it's faster because it's already loaded in on the request (no long list of includes) and the memory footprint is less than a PHP equivalent. The "bad" side of things mentions some pretty major hurdles though, including the small communities vs larger ones on PHP-based frameworks and the issues that could come with debugging/upgrading. 
</p>]]></description>
      <pubDate>Wed, 27 Feb 2013 11:09:46 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[PHPMaster.com: Avoid the Original MySQL Extension, Part 2]]></title>
      <guid>http://www.phpdeveloper.org/news/19235</guid>
      <link>http://www.phpdeveloper.org/news/19235</link>
      <description><![CDATA[<p>
PHPMaster.com has posted the <a href="http://phpmaster.com/avoid-the-original-mysql-extension-2/">second part</a> of their "avoid the original MySQL extension" tutorial series (part one is <a href="http://phpmaster.com/avoid-the-original-mysql-extension-1/">here</a>). In this new part, they share more about another alternative - the PDO extension.
</p>
<blockquote>
The PDO extension supports twelve drivers, enabling it to connect to a variety of relational databases without the developer having to learn a number of different APIs. It does this by abstracting the database interaction calls behind a common interface, enabling the developer to utilize a consistent interface for different databases. This of course gives it a major advantage over both the MySQL and MySQLi extensions who are limited to only one database.
</blockquote>
<p>
Included in the post are examples of some of the basics - connecting, executing queries, getting the results - as well as more compelx things like binding parameters and transaction support. There's also a bit about changing the default behavior of the PDO object through config options. He finishes off the article talking some about some of the issues that could come from using an abstraction layer like this and the need to still write good, compatible SQL depending on the database.
</p>]]></description>
      <pubDate>Mon, 25 Feb 2013 13:40:09 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[PHPMaster.com: Avoid the Original MySQL Extension, Part 1]]></title>
      <guid>http://www.phpdeveloper.org/news/19188</guid>
      <link>http://www.phpdeveloper.org/news/19188</link>
      <description><![CDATA[<p>
On PHPMaster.com today there's a new post, the first in a series, about <a href="http://phpmaster.com/avoid-the-original-mysql-extension-1/">avoiding the original MySQL extension</a> in favor of what <a href="http://php.net/mysqli">mysqli</a> has to offer. The cover some of the basics of the extension and include code showing its use.
</p>
<blockquote>
Experienced developers eschew the original MySQL extension because of its abandoned status in PHP. Nascent web developers, however, may be completely oblivious to its dormant past and dying future. [...] It is therefore the intention of this two-part article to raise awareness among developers who still use the MySQL extension, inform them of its problems, and to help them switch over to an alternative extension.
</blockquote>
<p>
They start with a brief look at the "what's wrong" with the MySQL extension (including its upcoming deprecation). The article then gets into the basics of MySQLi and how to do things like make a connection and run a few queries. There's also a bit about prepared statements and the built-in ability to do "multi-queries" (complete with rollbacks).
</p>]]></description>
      <pubDate>Fri, 15 Feb 2013 11:13:29 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Gonzalo Ayuso: Scaling Silex applications]]></title>
      <guid>http://www.phpdeveloper.org/news/19168</guid>
      <link>http://www.phpdeveloper.org/news/19168</link>
      <description><![CDATA[<p>
<i>Gonzalo Ayuso</i> has posted yet another <a href="http://gonzalo123.com/2013/02/11/scaling-silex-applications/">helpful Silex hint</a> for those using this microframework and wanting to scale up their applications past the prototype stage - an extension to allow route definition in a YAML configuration.
</p>
<blockquote>
My idea is to store this information within a Service Container (we will use Symfony's DIC). For example here we can [define] our routes.yml. [...] We need to implement one Extension for the alias "routes". We only will implement the needed functions for YAML files in this example.
</blockquote>
<p>
He includes the code for the extension ("SilexRouteExtension") that can be used to parse the "routes.yml" file to inject the custom routing into your application. This includes the pattern to match, the controller to route it to and the target method. You can also set some requirements like the request method (in this case "GET").
</p>]]></description>
      <pubDate>Tue, 12 Feb 2013 09:54:54 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Zumba Engineering Blog: Mongounit Project Open Sourced]]></title>
      <guid>http://www.phpdeveloper.org/news/19162</guid>
      <link>http://www.phpdeveloper.org/news/19162</link>
      <description><![CDATA[<p>
On the Zumba Engineering blog, <i>Chris Saylor</i> has a post announcing the <a href="http://engineering.zumba.com/2013/02/10/mongounit-open-sourced/">open sourcing of mongounit</a>, a PHPUnit extension useful for doing database testing directly on MongoDB databases - <a href="https://github.com/zumba/mongounit">Mongounit</a>.
</p>
<blockquote>
One of our more recent projects has given the team exposure to MongoDB. As such, we needed an easy way to test the models that utilize mongo in a similar fashion to how we test models that talk to mysql. Using this framework, it's easy to implement mongo test cases to easily create fixture data in collections, or simply clear collections between test cases.
</blockquote>
<p>
You can find the latest release of this tool <a href="https://github.com/zumba/mongounit">on github</a> and see an example <a href="https://github.com/zumba/mongounit/blob/master/Samples/PizzaTest.php">testcase here</a>. 
</p>]]></description>
      <pubDate>Mon, 11 Feb 2013 09:12:21 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[PHPClasses.org: Lately in PHP, Episode 31 - The Urge to Kill Older PHP Versions]]></title>
      <guid>http://www.phpdeveloper.org/news/19033</guid>
      <link>http://www.phpdeveloper.org/news/19033</link>
      <description><![CDATA[<p>
PHPClasses.org has <a href="http://www.phpclasses.org/blog/post/198-The-Urge-to-Kill-Older-PHP-Versions--Lately-in-PHP-podcast-episode-31.html">released their latest episode</a> of their "Lately in PHP" podcast series. This episode (#31) talks some about some of the changes happening in versions in PHP in the upcoming months.
</p>
<blockquote>
As PHP 5.5 is getting ready to be released in the next months, the end of line for PHP 5.3 is being planned, while the original MySQL extension is being deprecated in PHP 5.5 to be killed in a later version.
</blockquote>
<p>
You can listen to this latest episode either through the <a href="http://www.phpclasses.org/blog/post/198-The-Urge-to-Kill-Older-PHP-Versions--Lately-in-PHP-podcast-episode-31.html">in-page player</a>, by <a href="http://www.phpclasses.org/blog/post/198/file/158/name/Lately-In-PHP-31.mp3">downloading the mp3</a> or you can <a href="http://youtu.be/0DNpcozTbUk">watch the video</a> of the recorded Google Hangout of the taping.
</p>]]></description>
      <pubDate>Mon, 14 Jan 2013 10:58:16 -0600</pubDate>
    </item>
  </channel>
</rss>
