<?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, 12 Feb 2012 20:27:01 -0600</pubDate>
    <ttl>30</ttl>
    <item>
      <title><![CDATA[Joshua Thijssen's Blog: Setting up a development environment]]></title>
      <guid>http://www.phpdeveloper.org/news/17499</guid>
      <link>http://www.phpdeveloper.org/news/17499</link>
      <description><![CDATA[<p>
In a new post to his blog <i>Joshua Thijssen</i> <a href="http://www.adayinthelifeof.nl/2012/02/04/setting-up-a-development-environment/">gives a guide</a> to how he usually sets up his development environments when working in PHP. It includes working with virtual machines, configuring DNS and setting up his tools to work with it all.
</p>
<blockquote>
Doing development on multiple projects can be a burden from time to time. One project would be running on PHP 5.3, while another still needs 5.1. Sometimes you need a MySQL server, while on other occasions, you need a NoSQL solution like couchDB or MongoDB together with all kind of gearman functionality. This article shows you how I've setup such a development platform that allows you to quickly create new projects, and still maintain flexibility when you need it.
</blockquote>
<p>
He uses <a href="https://www.virtualbox.org/">VirtualBox</a> with either a Debian or CentOS installation as a base platform. He uses Vagrant to set up and configure the machines to make setup almost automatic. He still has to go in and configure a few things like the VirtualHost and DNS settings for the site/application he's working on. 
 Next up is setting up the tools he uses, specifically <a href="http://xdebug.org">XDebug</a> and setting up his editor of choice (PHPStorm) for remote debugging.
</p>]]></description>
      <pubDate>Mon, 06 Feb 2012 09:27:41 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Codeception Blog: Introduction to Codeception]]></title>
      <guid>http://www.phpdeveloper.org/news/17447</guid>
      <link>http://www.phpdeveloper.org/news/17447</link>
      <description><![CDATA[<p>
On the Codeception blog there's <a href="http://codeception.com/01-20-2012/starting-acceptance.html">an introduction to the Codeception tool</a>, a behavior-driven framework written in PHP (in the spirit of <a href="http://behat.org/">Behat</a>).
</p>
<blockquote>
How often do you see PHP projects with no line of test written? From my experience, this situation happens quite often. We should state the unpleasant fact that tests are not so popular around the PHP world. Surely, the advanced developers with 5+ years of experience in PHP and other programming languages understand importance of testing and PHPUnit usage. But juniors and seniors are just skipping testing and, therefore, produce unstable web applications.
</blockquote>
<p>
A code example of the framework in use is included in the post - a test on a class using methods like "wantTo", "amOnPage", "fillField" and "click". The <a href="http://codeception.com/install">installation</a> is pretty simple and it gives you a quick way to start working on acceptance, functional and unit tests. In BDD fashion, the tests are written in a more "natural language" than traditional <a href="http://phpunit.de">unit tests</a> making them easier for the non-developers (like QA) to write. Their example loads a page, fills in some form fields and submits the form to check the result.
</p>]]></description>
      <pubDate>Wed, 25 Jan 2012 10:19:59 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[PHPMaster.com: The Liskov Substitution Principle]]></title>
      <guid>http://www.phpdeveloper.org/news/17442</guid>
      <link>http://www.phpdeveloper.org/news/17442</link>
      <description><![CDATA[<p>
On PHPMaster.com today there's a new post from <i>Alejandro Gervasio</i> about a part of the <a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)">SOLID</a> development methods - the <a href="http://phpmaster.com/liskov-substitution-principle/">Liskov Substitution Principle</a> - the idea that objects should be replaceable with instances of their subtypes without a change to the architecture of the application.
</p>
<blockquote>
Even when the formal definition of the LSP makes eyes roll back (including mine), at its core it boils down to avoiding brittlely-defined class hierarchies where the descendants expose a behavior radically different from the base abstractions consuming the same contract.
</blockquote>
<p>
He includes an example with a "deleted scene" from the Matrix depicting an attempted override of the PDO functionality with a subclass that, unfortunately, does not match the original's structure/method definitions. The problem was in the difference between the method signature for the "query" method. It help resolve situations like this he recommends creating a "contract" in the form of an interface your code can implement, forcing it to conform to a certain structure. Using this, he provides a rewrite of the "PdoAdapter" class to match the original signature 
</p>]]></description>
      <pubDate>Tue, 24 Jan 2012 13:40:35 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[PHPMaster.com: Rapid Application Development with CakePHP]]></title>
      <guid>http://www.phpdeveloper.org/news/17430</guid>
      <link>http://www.phpdeveloper.org/news/17430</link>
      <description><![CDATA[<p>
On PHPMaster.com today there's a a new tutorial helping you take some <a href="http://phpmaster.com/rapid-application-development-with-cakephp/">first steps with CakePHP</a>, a popular full-stack PHP framework, by <i>Vito Tardia</i>.
</p>
<blockquote>
&#65279;CakePHP is a framework that provides a solid base for PHP development. It allows users at any skill level to rapidly develop robust web applications. [...] Personally, the reason why I prefer CakePHP over other PHP frameworks is its better support for console applications. CakePHP has a powerful console tool that can be customized to build applications for both the web and the console world. In this article I'll introduce you to two of CakePHP's most useful features:
automatic code generation using the console tool <a href="http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html">Bake</a> and dynamic <a href="http://book.cakephp.org/2.0/en/controllers/scaffolding.html">scaffolding</a>.
</blockquote>
<p>
He walks you through the full (user friendly) installation and configuration, a few changes to increase security and where to go to set up your database connection. From there he shows how to use the "Bake" command to generate a "subscribers" model and automatically create the user interfaces to work with it (CRUD operations)
</p>]]></description>
      <pubDate>Mon, 23 Jan 2012 08:37:14 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Chris Hartjes' Blog: Better Remote Code Development]]></title>
      <guid>http://www.phpdeveloper.org/news/17359</guid>
      <link>http://www.phpdeveloper.org/news/17359</link>
      <description><![CDATA[<p>
<i>Chris Hartjes</i> is <a href="http://www.littlehart.net/atthekeyboard/2012/01/05/better-remote-code-development/">asking for suggestions</a> to help solve a common problem for developers (remote or otherwise) that have to develop in a non-local setup: a better method for remote code development.
</p>
<blockquote>
I've been playing around with <a href="http://www.sublimetext.com/">Sublime Text</a> (because of the awesome vim bindings) and was thinking about why do I always have to be logged into the remote server to do my work. Normally I connect using SSH, then attach to my <a href="http://tmux.sourceforge.net/">tmux</a> session and then fire up vim. This is okay but it lacks a certain elegance in it's approach. [...] What I'm chafing against is having to deal with multiple environments all the time to get my work done.
</blockquote>
<p>
His ultimate goal is to be able to update and commit code without having to be logged into the remote server - essentially to replicate the local development experience regardless of the underlying technology. Have a suggestion or a method that's currently working for you? <a href="http://www.littlehart.net/atthekeyboard/2012/01/05/better-remote-code-development/#comments">Leave him a comment</a>!
</p>]]></description>
      <pubDate>Fri, 06 Jan 2012 11:02:55 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Kevin Schroeder's Blog: Connecting to the Zend Developer Cloud with PDT]]></title>
      <guid>http://www.phpdeveloper.org/news/17345</guid>
      <link>http://www.phpdeveloper.org/news/17345</link>
      <description><![CDATA[<p>
<i>Kevin Schroeder</i> has come back around and has posted a new tutorial to his blog showing how to <a href="http://www.eschrade.com/page/connecting-to-the-zend-developer-cloud-with-pdt">connect PDT to the Zend Developer Cloud</a> (the "PHP Development Tools" extension for the Eclipse IDE).
</p>
<blockquote>
A couple of weeks ago I wrote a series of blog posts on how to connect to the Zend Developer cloud with various IDEs.  Except one that I missed... PDT. The deployment plugin is already installed in PDT 3 and so you already will have the ability to push to the DevCloud instance.
</blockquote>
<p>
The process is pretty simple thanks to that plugin - just create the project (or use an existing one), set up a new target for deployment then launch and deploy the PHP application directly. You can find out more about the "PHP Development Tools" <a href="http://www.eclipse.org/projects/project.php?id=tools.pdt">on its Eclipse project site</a>.
</p>]]></description>
      <pubDate>Wed, 04 Jan 2012 10:10:35 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Ed Finkler's Blog: The MicroPHP Manifesto]]></title>
      <guid>http://www.phpdeveloper.org/news/17341</guid>
      <link>http://www.phpdeveloper.org/news/17341</link>
      <description><![CDATA[<p>
<i>Ed Finkler</i> has put together what he calls the <a href="http://funkatron.com/posts/the-microphp-manifesto.html">MicroPHP Manifesto</a>, a call to arms for the PHP community to get "back to the basics" and focus more on things like good well-crafted code rather than extending out into "complex, verbose solutions."
</p>
<blockquote>
The approach I've been taking lately is to start with as lightweight a foundation as possible, in the form of a "microframework." [...] For additional functionality, I pull in lightweight libraries that help me accomplish only the tasks I need. Clarity and brevity are my top considerations. My other big consideration is the commitment I make when I use code I didn't write. 
</blockquote>
<p>
He goes on to talk about difficulties finding lightweight libraries to suit his needs and gives some <a href="http://cloc.sourceforge.net/">cloc<a> benchmarks for the Symfony <a href="https://github.com/symfony/HttpKernel">HttpKernel</a> and the <a href="http://slimframework.com">Slim</a> and Epiphany  microframeworks. The end of the post is the most important part - the manifesto itself...one he hopes will ring true with the development community. It includes things like:
</p>
<ul>
<li>"I am a PHP developer. I am not a Zend Framework or Symfony or CakePHP developer."
<li>"I like building small things with simple purposes."
<li>"I need to justify every piece of code I add to a project."
<li>"I want to write code that's easily understood."
</ul>
<p>
For more <a href="http://funkatron.com/posts/the-microphp-manifesto.html">read the full post</a> over on his blog.
</p>]]></description>
      <pubDate>Tue, 03 Jan 2012 10:46:40 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Nikita Popov's Blog: Don't be STUPID: GRASP SOLID!]]></title>
      <guid>http://www.phpdeveloper.org/news/17314</guid>
      <link>http://www.phpdeveloper.org/news/17314</link>
      <description><![CDATA[<p>
<i>Nikita Popov</i> talks about the <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SOLID</a> coding practices and creates his own acronym for the complete opposite - <a href="http://nikic.github.com/2011/12/27/Dont-be-STUPID-GRASP-SOLID.html">STUPID</a> (Singleon, Tight coupling, Untestable, Premature optimization, Indescriptive naming, Duplication).
</p>
<blockquote>
Ever heard of SOLID code? Probably: It is a term describing a collection of design principles for "good code" that was coined by Robert C. Martin (aka "uncle bob"), our beloved evangelist of clean code. [...] So, why not approach the problem from the other side for once? Looking at what makes up bad code.
</blockquote>
<p>
He goes through each part of his STUPID acronym and talks about how it can hurt your code and a few alternatives to help make your application more flexible and easier to maintain in the long run. He also mentions <a href="http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29">GRASP</a> (General Responsibility Assignment Software Principles), another set of good practices to follow, some similar to SOLID, that can make your app better.
</p>]]></description>
      <pubDate>Wed, 28 Dec 2011 09:26:14 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Nelm.io Blog: Composer: Part 2 - Impact]]></title>
      <guid>http://www.phpdeveloper.org/news/17283</guid>
      <link>http://www.phpdeveloper.org/news/17283</link>
      <description><![CDATA[<p>
In part two of their look at Composer/Packagist, the Nelm.io blog looks at <a href="http://nelm.io/blog/2011/12/composer-part-2-impact/">some of the impact they could have</a> if adopted heavily by the PHP community.
</p>
<blockquote>
In this second part I would like to talk about a few things Composer could do for you, and the PHP community at large, once it is broadly adopted. [...] How can [shared] interfaces be distributed in each project that uses or implements them? This is where I see Composer helping. Composer supports advanced relationships between packages, so to solve this issue you would need three parts.
</blockquote>
<p>
The three parts all revolve around a few different packages (for their specific Caching interface example) - psr/cache-interface, psr/cache and the requiring of these into a framework needing the common interface. He talks some about what this sort of structure has to offer: simpler plugin installation, promotion of good standards, promotion of code reuse and a renewed interest in using PHP.
</p>
<blockquote>
Reinventing the package management wheel is another thing that really should stop. Who am I to say this you ask? It is true, we are building a shiny new wheel as well. Yet I take comfort in the fact that we are trying to build a generic solution which will work for everybody.
</blockquote>]]></description>
      <pubDate>Tue, 20 Dec 2011 11:02:53 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Brian Smithwick's Blog: Software development and the locked box]]></title>
      <guid>http://www.phpdeveloper.org/news/17271</guid>
      <link>http://www.phpdeveloper.org/news/17271</link>
      <description><![CDATA[<p>
In <a href="http://www.chickentechnology.com/2011/12/software-development-and-locked-box.html">this recent post</a> to his blog <i>Brian Smithwick</i> talks about the "locked box" that developers can sometimes restrict themselves to - getting to comfortable in the tech they already know and not branching out.
</p>
<blockquote>
Jason Austin gave a great presentation at CodeWorks Raleigh recently about cultivating one's passion for software development through side projects -- safe spaces where we can play with new technologies and techniques. The point's well taken:  as developers, we're probably putting most of our energy towards the thing that must be solved, that keeps us employed, that pays our bills. [...] And so all of us, at one time or another, end up in a backwater of our own devising -- a locked box.
</blockquote>
<p>
He also puts an emphasis on collaboration and community as it relates to becoming a better developer. By interacting with other code and other projects' developers, you learn not only more about other ways to develop but are exposed to ideas you may not have come across on your own.
</p>
<blockquote>
I'd add that active participation in the local community is just as important though:  the opportunities for exposure to new ideas outside your sphere are greater than your feed reader will probably provide, and the depth of information that you can get in a conversation may be better than any blog post or man page.
</blockquote>]]></description>
      <pubDate>Fri, 16 Dec 2011 11:41:09 -0600</pubDate>
    </item>
  </channel>
</rss>

