<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Think Different</title><link>http://dhirajpatra.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blogspot/tGsc" /><description>Think different about open source Web 2.0 development with Linux, Java, Apache, Mysql and PHP from a open source specialist. 

You will get all tutorials and news with all latest technologis from around the world writers for open source for who think different.
All latest topics of open source LAMP and Java for your convenience.</description><language>en</language><managingEditor>noreply@blogger.com (Dhiraj Patra)</managingEditor><lastBuildDate>Thu, 10 Nov 2011 02:21:24 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">149</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="blogspot/tgsc" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><media:copyright>it is protected by author</media:copyright><media:keywords>dhiraj,dhirajpatra,php</media:keywords><itunes:owner><itunes:email>dhiraj.patra@gmail.com</itunes:email><itunes:name>dhiraj patra</itunes:name></itunes:owner><itunes:author>dhiraj patra</itunes:author><itunes:explicit>no</itunes:explicit><itunes:keywords>dhiraj,dhirajpatra,php</itunes:keywords><itunes:subtitle>dhiraj patra</itunes:subtitle><itunes:summary>it describes my personal view</itunes:summary><item><title>Zend Framework 2.0.0beta1 Released</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/2GXjw6MWW9U/zend-framework-200beta1-released.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 10 Nov 2011 02:21:24 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-5249362188069253505</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #212431; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;The Zend Framework community is pleased to announce the immediate availability of Zend Framework 2.0.0beta1. Packages and installation instructions are available at:&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;a href="http://packages.zendframework.com/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;http://packages.zendframework.com/&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;This is the first in a series of planned beta releases. The beta release cycle will follow the "gmail" style of betas, whereby new features will be added in each new release, and BC will not be guaranteed; beta releases will happen&amp;nbsp;&lt;em&gt;no less than&lt;/em&gt;&amp;nbsp;every six weeks. The desire is for developers to adopt and work with new components as they are shipped, and provide feedback so we can polish the distribution.&lt;/div&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Once all code in the proposed&amp;nbsp;&lt;a href="http://framework.zend.com/wiki/pages/viewpage.action?pageId=43745438" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;standard distribution&lt;/a&gt;&amp;nbsp;has reached maturity and reasonable stability, we will freeze the API and prepare for Release Candidate status.&lt;/div&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Featured components and functionality of 2.0.0beta1 include:&lt;/div&gt;&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;New and refactored autoloaders:&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Zend\Loader\StandardAutoloader&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Zend\Loader\ClassMapAutoloader&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Zend\Loader\AutoloaderFactory&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;New plugin broker strategy&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Zend\Loader\Broker and Zend\Loader\PluginBroker&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Reworked Exception system&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Allow catching by specific Exception type&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Allow catching by component Exception type&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Allow catching by SPL Exception type&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Allow catching by base Exception type&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Rewritten Session component&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Refactored View component&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Split helpers into a PluginBroker&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Split variables into a Variables container&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Split script paths into a TemplateResolver&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Renamed base View class "PhpRenderer"&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Refactored helpers to utilize __invoke() when possible&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Refactored HTTP component&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;New Zend\Cloud\Infrastructure component&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;New EventManager component&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;New Dependency Injection (Zend\Di) component&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;New Code component&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Incorporates refactored versions of former Reflection and CodeGenerator components.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Introduces Scanner component.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Introduces annotation system.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;The above components provide a solid foundation for Zend Framework 2, and largely make up the framework "core". However, the cornerstone feature of beta1 is what they enable: the new MVC layer:&lt;/div&gt;&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Zend\Module, for developing modular application architectures.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Zend\Mvc, a completely reworked MVC layer built on top of HTTP, EventManager, and Di.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;We've built a&amp;nbsp;&lt;a href="http://github.com/zendframework/ZendSkeletonApplication" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;skeleton application&lt;/a&gt;&amp;nbsp;and a&amp;nbsp;&lt;a href="http://github.com/zendframework/ZendSkeletonModule" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;skeleton module&lt;/a&gt;&amp;nbsp;to help get you started, as well as a&amp;nbsp;&lt;a href="http://packages.zendframework.com/docs/latest/manual/en/zend.mvc.quick-start.html" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;quick start guide to the MVC&lt;/a&gt;; the new MVC is truly flexible, and moreover, simple and powerful.&lt;/div&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Additionally, for those who haven't clicked on the packages link above, we are debuting our new distribution mechanisms for ZF2: the ability to use&amp;nbsp;&lt;a href="http://pear2.php.net/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Pyrus&lt;/a&gt;&amp;nbsp;to install individual components and/or groups of components.&lt;/div&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Since mid-August, we've gone from a&amp;nbsp;&lt;em&gt;few dozen&lt;/em&gt;&amp;nbsp;pull requests on the&amp;nbsp;&lt;a href="http://github.com/zendframework/zf2" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;ZF2 git repository&lt;/a&gt;&amp;nbsp;to&amp;nbsp;&lt;strong&gt;&lt;em&gt;over 500&lt;/em&gt;&lt;/strong&gt;, originating from both long-time Zend Framework contributors as well as those brand-new to the project. I'd like to thank each and every one of them, but also call out several individuals who have made some outstanding and important contributions during that time frame:&lt;/div&gt;&lt;ul style="list-style-image: initial; list-style-position: outside; list-style-type: disc; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 2em; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://evan.pro/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Evan Coury&lt;/a&gt;, who prototyped and then implemented the new module system.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://akrabat.com/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Rob Allen&lt;/a&gt;, who, because he was doing a tutorial at&amp;nbsp;&lt;a href="http://conference.phpnw.org.uk/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;PHPNW&lt;/a&gt;&amp;nbsp;on ZF2, provided a lot of early feedback, ideas, and advice on the direction of the MVC.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.dasprids.de/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Ben Scholzen&lt;/a&gt;, who wrote a new router system, in spite of a massive injury from a cycling accident.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://ralphschindler.com/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Ralph Schindler&lt;/a&gt;, who has had to put up with my daily "devil's advocate" and "think of the user!" rants for the past several months, and still managed to provide comprehensive code manipulation tools, a Dependency Injection framework, and major contributions to the HTTP component.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.zimuel.it/en/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Enrico Zimuel&lt;/a&gt;, who got tossed requirements for the cloud infrastructure component, and then had to rework most of it after rewriting the HTTP client from the ground up... and who still managed three back-to-back-to-back conferences as we prepared the release.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.linkedin.com/in/abodera" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Artur Bodera&lt;/a&gt;, who often has played devil's advocate, and persisted pressing his opinions on the direction of the framework, often despite heavy opposition. We may not implement all (or many) of the features you want, but you've definitely influenced the direction of the MVC incredibly.&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://blog.astrumfutura.com/" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;Pádraic Brady&lt;/a&gt;, who&amp;nbsp;&lt;a href="http://zend-framework-community.634137.n4.nabble.com/A-Rant-From-Mr-Grumpy-on-ZF2-tp3721463p3721463.html" style="border-bottom-color: rgb(0, 81, 168); border-bottom-style: dotted; border-bottom-width: 1px; color: #0051a8; text-decoration: none;"&gt;started the runaway train rolling with a rant&lt;/a&gt;, and helped make the project much more transparent, enabling the MVC development to occur in the first place.&lt;/li&gt;
&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #212431; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;div style="margin-bottom: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Welcome to the ZF2 beta cycle!&lt;br /&gt;
&lt;br /&gt;
courtsy: zend&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-5249362188069253505?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-10T02:21:24.251-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/11/zend-framework-200beta1-released.html</feedburner:origLink></item><item><title>Build A Web 2.0 Voting Widget With Flex</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/PSZuCZCyp0Q/build-web-20-voting-widget-with-flex.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Mon, 07 Nov 2011 22:23:05 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-2953488398995436847</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;
&lt;div class="post-34774 post type-post status-publish format-standard hentry category-flex-client-side-coding post_box top" id="post-34774"&gt;&lt;div class="headline_area"&gt;&lt;h1 class="entry-title"&gt;I&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt;&lt;strong&gt;There  are few things that people like to do more than give their opinion  about a subject of interest to them – especially on the Web. This can be  very useful for engaging your site’s visitors, measuring their interest  in a topic, or just allowing them to express themselves. Web 2.0, and  the advent of Rich Internet Applications (RIAs), allow for the  installation of polling widgets on your web site, making it easier than  ever to take the pulse of your community.&lt;/strong&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/div&gt;&lt;div class="format_text entry-content"&gt;There are  several different technologies you could use to build an interactive  voting widget, but the end user needs to be considered carefully. For  instance, you could use Ajax – but this approach can introduce issues  with client-side compatibility. You could use Applets, but that’s not a  popular choice at the moment – too many web surfers disable the Java VM  in their browsers.&lt;br /&gt;
A very good option, on the other hand, is  Flash. Practically everyone has it installed – who hasn’t come across a  link to YouTube at some point and wanted to watch a video?&lt;br /&gt;
But  what if you’re not across Flash? And isn’t Flash really an animator’s  tool anyway? Well, as we’ll see, it’s easy for developers to build Flash  applications using the Flex framework – &lt;a class="sublink" href="http://ad.doubleclick.net/clk;205852843;28495059;s#sdk"&gt;freely available as open source from Adobe&lt;/a&gt;.  In this article, the first of two on this complex subject, we’ll walk  through the process of building a Flash widget for voting using the Flex  framework.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 13px; font-weight: bold;"&gt;Flex Basics&lt;/span&gt;&lt;br /&gt;
Before  we go any further, we’ll pause for a minute to talk about the Flex and  Flash applications and where they fit into the client landscape. Take a  look at the following graphic.&lt;br /&gt;
&lt;img alt="Where Flash applications fit into the client landscape" height="308" src="http://i2.sitepoint.com/graphics/where_flash_fits.thumb.png" width="400" /&gt;&lt;br /&gt;
&lt;div class="vertical" id="adz"&gt;&lt;script&gt;
&lt;/script&gt;&lt;/div&gt;This  diagram demonstrates how a Web 2.0 web page interacts with a PHP web  server. The web page uses one of several tools to communicate with the  web server. It can use Javascript and Ajax to make a request of the  server, then update the page with the new data. Or it can use a Flash  application to provide functionality to the user. This Flash application  can either take up the entire page, or it may be contained to a widget  that takes up just a portion of it. Flex has been used very successfully  in both scenarios.&lt;br /&gt;
Flex applications are made of roughly three  parts: the MXML that defines the interface, the ActionScript code that  contains the application logic, and resources such as images and audio.  To draw an analogy with web technologies, the MXML and ActionScript  would be HTML and JavaScript respectively.&lt;br /&gt;
Now you could &lt;a class="sublink" href="http://ad.doubleclick.net/clk;205852843;28495059;s#sdk"&gt;download the SDK&lt;/a&gt;  and program your application using a simple text editor, but there’s a  better option – a really good IDE called Flex Builder 3, &lt;a class="sublink" href="http://ad.doubleclick.net/clk;205852843;28495059;s#flex_builder"&gt;available free from Adobe&lt;/a&gt; as a 30-day trial.&lt;br /&gt;
The following diagram shows Flex Builder 3 and how its function fits into the life cycle of generating a Flash application SWF.&lt;br /&gt;
&lt;img alt="How Flex Builder works" height="163" src="http://i2.sitepoint.com/graphics/flex_builder.thumb.png" width="400" /&gt;&lt;br /&gt;
Flex  Builder manages the MXML, ActionScript, and resources as a project. It  uses the Flex SDK compiler to continuously compile the project as you  make changes. That temporary output SWF file is then launched in your  default browser to do the testing.&lt;br /&gt;
Hopefully this provides some  context for getting started with Flex. If you’d like a more detailed  walk-through of this subject, I recommend you try this excellent  tutorial on &lt;a class="sublink" href="http://www.sitepoint.com/article/beginners-tutorial-flex-3"&gt;Flex for beginners&lt;/a&gt;.&lt;br /&gt;
&lt;h5&gt;Getting Flex Up and Running&lt;/h5&gt;The  Flex Builder 3 installer comes with everything you need built in. It  automatically installs the Flex SDK, as well as the Eclipse-based IDE  and the AIR runtime (which is useful if you want to build a desktop  application rather than a web app.&lt;br /&gt;
Once you have Flex Builder 3 installed on your machine, launch it and you should see something like this.&lt;br /&gt;
&lt;img alt="The starting point with Flex Builder 3" height="292" src="http://i2.sitepoint.com/graphics/starting_point.thumb.png" width="400" /&gt;&lt;br /&gt;
This  is the empty Flex IDE. The next step is to create our first Flex  project. Select Flex Project from the New menu and you should see this  window.&lt;br /&gt;
&lt;img alt="Creating your first project" height="364" src="http://i2.sitepoint.com/graphics/create_first.thumb.png" width="400" /&gt;&lt;br /&gt;
You can name your project whatever you like. I chose &lt;code&gt;Voteview&lt;/code&gt;,  since for the purposes of this article I’m only going to build an  application that views the current vote totals. We’ll discover the  interactive widget in the next article.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="article-cms-pagebreak"&gt;&lt;/div&gt;After you hit Finish to build the project, you should see the result pictured below.&lt;br /&gt;
&lt;img alt="The auto-generated application" height="221" src="http://i2.sitepoint.com/graphics/autogenerate.thumb.png" width="400" /&gt;&lt;br /&gt;
Flex  Builder 3 automatically creates an MXML application with the same name  as the project. In this case, the “voteview” project has one source  file, &lt;code&gt;voteviewer.mxml&lt;/code&gt;.&lt;br /&gt;
At this point, you’re probably  thinking, “I thought we were doing Flex, so what’s this MXML?” MXML is  one of the two major technologies in a Flex application; it’s a  tag-based language used to build user interfaces. The other is  ActionScript 3, which is the programming language that we use to add  interactivity to the interface.&lt;br /&gt;
To make sure that everything’s working okay, we’ll add just a single tag to the MXML file, as shown here:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;text="hello&amp;nbsp;world"&amp;nbsp;fontsize="20"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;text="hello&amp;nbsp;world"&amp;nbsp;fontsize="20"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt;

&lt;mx:application layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;

  &lt;mx:label fontsize="20" text="Hello World"&gt;

&lt;/mx:label&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;The &lt;code&gt;&lt;mx:label&gt;&lt;/mx:label&gt;&lt;/code&gt; tag specifies that we want a control of type &lt;code&gt;Label&lt;/code&gt; with the text of &lt;code&gt;Hello World&lt;/code&gt; where the font size is 20px. This figure shows the result of launching it in Flex Builder.&lt;br /&gt;
&lt;img alt="Just checking to make sure everything works" height="322" src="http://i2.sitepoint.com/graphics/just_checking.thumb.png" width="400" /&gt;&lt;br /&gt;
If that works, you know that everything is installed correctly and you’re all set to start developing in Flex.&lt;br /&gt;
The  next step is to put an XML file on a web server that will contain the  current vote totals. This is the data that the Flex application will  fetch and display.&lt;br /&gt;
You can format your XML any way you choose, but something along these lines is simple enough:&lt;br /&gt;
&lt;div class="vertical" id="adz"&gt;&lt;script&gt;
&lt;/script&gt;&lt;/div&gt;&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;votes&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/votes&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;topic&gt;What&amp;nbsp;is&amp;nbsp;the&amp;nbsp;best&amp;nbsp;Star&amp;nbsp;Wars&amp;nbsp;movie?&lt;/topic&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;options&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/options&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;option&amp;nbsp;count="150"&amp;nbsp;name="episode&amp;nbsp;iv"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/option&amp;nbsp;count="150"&amp;nbsp;name="episode&amp;nbsp;iv"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;option&amp;nbsp;count="250"&amp;nbsp;name="episode&amp;nbsp;v"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/option&amp;nbsp;count="250"&amp;nbsp;name="episode&amp;nbsp;v"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;option&amp;nbsp;count="50"&amp;nbsp;name="episode&amp;nbsp;iii"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/option&amp;nbsp;count="50"&amp;nbsp;name="episode&amp;nbsp;iii"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt;&lt;votes&gt; &amp;nbsp;

 &amp;nbsp;&lt;topic&gt;What is the best Star Wars movie?&lt;/topic&gt; &amp;nbsp;

 &amp;nbsp;&lt;options&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;option count="150" name="Episode IV"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/option&gt;&lt;option count="250" name="Episode V"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/option&gt;&lt;option count="50" name="Episode III"&gt; &amp;nbsp;

 &amp;nbsp;&lt;/option&gt;&lt;/options&gt; &amp;nbsp;

&lt;/votes&gt;&lt;/code&gt;&lt;/pre&gt;This XML defines that there is one question with three options, where each option has a name and a count of votes.&lt;br /&gt;
Once  this XML file is up on your server somewhere (in my case, the localhost  Apache server on my Mac), we can add some more tags to the MXML and get  this party started!&lt;br /&gt;
Here’s a simple Flex application that reads the data from the XML file and then displays the question in a &lt;code&gt;Label&lt;/code&gt; control, and the current votes in a &lt;code&gt;DataGrid&lt;/code&gt; control:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="votes.send()"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http: localhost="" votes.xml"&amp;nbsp;=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:datagrid&amp;nbsp;width="100%"&amp;nbsp;dataprovider="{votes.lastresult.votes.options.option}"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:datagrid&amp;nbsp;width="100%"&amp;nbsp;dataprovider="{votes.lastresult.votes.options.option}"&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:columns&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:columns&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:datagridcolumn&amp;nbsp;datafield="name"&amp;nbsp;headertext="movie"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:datagridcolumn&amp;nbsp;datafield="name"&amp;nbsp;headertext="movie"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:datagridcolumn&amp;nbsp;datafield="count"&amp;nbsp;headertext="vote&amp;nbsp;count"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:datagridcolumn&amp;nbsp;datafield="count"&amp;nbsp;headertext="vote&amp;nbsp;count"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp;

&lt;mx:application &amp;nbsp;&lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="votes.send()"&amp;gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:httpservice id="votes" resultformat="object" url="http://localhost/votes.xml"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:label fontsize="20" text="{votes.lastResult.votes.topic}"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:datagrid dataprovider="{votes.lastResult.votes.options.option}" width="100%"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;mx:columns&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;mx:datagridcolumn datafield="name" headertext="Movie"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;mx:datagridcolumn datafield="count" headertext="Vote Count"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/mx:datagridcolumn&gt;&lt;/mx:datagridcolumn&gt;&lt;/mx:columns&gt; &amp;nbsp;

 &amp;nbsp;&lt;/mx:datagrid&gt; &amp;nbsp;

&lt;/mx:label&gt;&lt;/mx:httpservice&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;There are two key elements involved in the code above. The first is the &lt;code&gt;mx:HTTPService&lt;/code&gt; tag that defines where we will retrieve the data, and specifies an &lt;code&gt;id&lt;/code&gt; for the data source. This service is invoked by the code attached to the &lt;code&gt;creationComplete&lt;/code&gt; event on the &lt;code&gt;Application&lt;/code&gt; tag.&lt;br /&gt;
The data display is handled automatically by Flex through the magic of the Flex event model. When the &lt;code&gt;HTTService&lt;/code&gt; has successfully downloaded the XML, the &lt;code&gt;lastResult&lt;/code&gt; variable on the service notifies the &lt;code&gt;Label&lt;/code&gt; and the &lt;code&gt;DataGrid&lt;/code&gt; that it has changed. Those controls then update themselves automatically to show the new values returned by the server.&lt;br /&gt;
Here’s the result of launching this in Flex Builder.&lt;br /&gt;
&lt;img alt="A grid presentation of the data" height="391" src="http://i2.sitepoint.com/graphics/grid_presentation.thumb.png" width="400" /&gt;&lt;br /&gt;
Well, it &lt;em&gt;works&lt;/em&gt;  okay, but it’s not very sexy in appearance, is it? I’m all about the  sexy look, so I’m going to use Flex’s built-in charting service to  display the votes in a pie chart instead of a &lt;code&gt;DataGrid&lt;/code&gt;.&lt;br /&gt;
This updated code is shown below:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="votes.send()"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http: localhost="" votes.xml"&amp;nbsp;=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;="" &amp;nbsp;&amp;nbsp;="" &amp;nbsp;height="100%" &lt;="" mx:piechart&amp;nbsp;width="100%" span=""&gt;&lt;/mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showAllDataTips="true"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:series&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:series&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:pieseries&amp;nbsp;field="count"&amp;nbsp;labelfield="name"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:pieseries&amp;nbsp;field="count"&amp;nbsp;labelfield="name"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp;

&lt;mx:application &amp;nbsp;&lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="votes.send()"&amp;gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:httpservice id="votes" resultformat="object" url="http://localhost/votes.xml"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:label fontsize="20" text="{votes.lastResult.votes.topic}"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:piechart &amp;nbsp;&lt;br="" height="100%" width="100%"&gt;
 &amp;nbsp; &amp;nbsp;showAllDataTips="true" &amp;nbsp;

 &amp;nbsp; &amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}"&amp;gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;mx:series&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;mx:pieseries exploderadius="0.1" field="count" labelfield="name" namefield="name"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/mx:pieseries&gt;&lt;/mx:series&gt; &amp;nbsp;

 &amp;nbsp;&lt;/mx:piechart&gt; &amp;nbsp;

&lt;/mx:label&gt;&lt;/mx:httpservice&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;The only change here is that we replaced the &lt;code&gt;DataGrid&lt;/code&gt; with a &lt;code&gt;PieChart&lt;/code&gt; control. When we run this in Flex Builder, we’ll see the window shown here.&lt;br /&gt;
&lt;img alt="A pie chart that displays the data" height="373" src="http://i2.sitepoint.com/graphics/piechart.thumb.png" width="400" /&gt;&lt;br /&gt;
Now,  that’s certainly better. A picture is worth a thousand words, as they  say. But could it be even cooler? As it turns out, it can; the Elixir  data visualization components &lt;a class="sublink" href="http://ilog.com/"&gt;available from ILOG&lt;/a&gt; offers a set of amazing charting controls that you can use on a trial basis.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="article-cms-pagebreak"&gt;&lt;/div&gt;Once  we’ve installed the ILOG Elixir controls on the machine, we can link  them into the project by referencing the Elixir libraries. From there,  we add a reference to the Elixir PieChart3D instead of to the original &lt;code&gt;PieChart&lt;/code&gt; control.&lt;br /&gt;
This updated code is shown below:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="votes.send()"&amp;nbsp;xmlns:ilog="http://www.ilog.com/2007/ilog/flex"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http: localhost="" votes.xml"&amp;nbsp;=""&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;ilog:piechart3d&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;="" &amp;nbsp;&amp;nbsp;&lt;="" &amp;nbsp;height="100%" &lt;="" ilog:piechart3d&amp;nbsp;width="100%" span=""&gt;&lt;/ilog:piechart3d&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showAllDataTips="true"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}"&amp;nbsp;elevationAngle="30"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;ilog:series&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/ilog:series&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;ilog:pieseries3d&amp;nbsp;field="count"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/ilog:pieseries3d&amp;nbsp;field="count"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp; 

&lt;mx:application &amp;nbsp;="" &lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="votes.send()" xmlns:ilog="http://www.ilog.com/2007/ilog/flex"&amp;gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:httpservice id="votes" resultformat="object" url="http://localhost/votes.xml"&gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:label fontsize="20" text="{votes.lastResult.votes.topic}"&gt; &amp;nbsp; 

 &amp;nbsp;&lt;ilog:piechart3d &amp;nbsp;="" &lt;br="" height="100%" width="100%"&gt;
 &amp;nbsp; &amp;nbsp;showAllDataTips="true" &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}" elevationAngle="30"&amp;gt; &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;&lt;ilog:series&gt; &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;ilog:pieseries3d exploderadius="0.1" field="count" namefield="name"&gt; &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;&lt;/ilog:pieseries3d&gt;&lt;/ilog:series&gt; &amp;nbsp; 

 &amp;nbsp;&lt;/ilog:piechart3d&gt; &amp;nbsp; 

&lt;/mx:label&gt;&lt;/mx:httpservice&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;And when brought up in Flex Builder 3, it looks like this figure.&lt;br /&gt;
&lt;img alt="A cool 3D pie chart of the vote results using Elixir" height="381" src="http://i2.sitepoint.com/graphics/3D_piechart.thumb.png" width="400" /&gt;&lt;br /&gt;
Now  we’re really cooking with gas! With Elixir we can change the rotation  of the chart, the colors, the viewing angle, the lighting, and more. We  can even do all that on the fly by responding to mouseclick events and  changing the parameters on the chart using ActionScript. This  functionality allows the voter to spin the chart around and view it from  different angles.&lt;br /&gt;
This is about as far as I’m going to go with  the interface in this article series. To finish up, I’ll demonstrate how  to use a different data transport technology, AMF, instead of XML. AMF  is easier to use, particularly when you’re both reading and writing data  – more on this in the next instalment!&lt;br /&gt;
&lt;div class="vertical" id="adz"&gt;&lt;script&gt;
&lt;/script&gt;&lt;/div&gt;&lt;strong&gt;&lt;em&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: &lt;br /&gt;
AMF and XML aren’t the only ways that Flex can access data. Your  applications can read JSON, text, AMF, or go direct to binary data  through sockets. In other words, wherever your data is and whatever the  format, Flex applications can get to it.&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;h5&gt;Going to AMF&lt;/h5&gt;Let’s use the &lt;a class="sublink" href="http://amfphp.org/"&gt;free AMFPHP package&lt;/a&gt;  to build an AMF service on the web server. AMFPHP comes with a built-in  service browser, which I’ll show you in a minute, plus a directory  where you put your services. In this case, we’ll add a new service to a  new “votes” directory called &lt;code&gt;VoteService&lt;/code&gt;.&lt;br /&gt;
Here’s the PHP code for &lt;code&gt;VoteService&lt;/code&gt;:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;include_once(AMFPHP_BASE&amp;nbsp;.&amp;nbsp;"shared/util/MethodTable.php");&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;class&amp;nbsp;VoteService&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;{&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;function&amp;nbsp;getVotes()&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;array(&amp;nbsp;'topic'&amp;nbsp;=&amp;gt;&amp;nbsp;'What&amp;nbsp;is&amp;nbsp;the&amp;nbsp;best&amp;nbsp;Star&amp;nbsp;Wars&amp;nbsp;movie?',&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'votes'&amp;nbsp;=&amp;gt;&amp;nbsp;array(&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&amp;nbsp;'name'&amp;nbsp;=&amp;gt;&amp;nbsp;'Episode&amp;nbsp;IV',&amp;nbsp;'count'&amp;nbsp;=&amp;gt;&amp;nbsp;150&amp;nbsp;),&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&amp;nbsp;'name'&amp;nbsp;=&amp;gt;&amp;nbsp;'Episode&amp;nbsp;V',&amp;nbsp;'count'&amp;nbsp;=&amp;gt;&amp;nbsp;250&amp;nbsp;),&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&amp;nbsp;'name'&amp;nbsp;=&amp;gt;&amp;nbsp;'Episode&amp;nbsp;III',&amp;nbsp;'count'&amp;nbsp;=&amp;gt;&amp;nbsp;50&amp;nbsp;)&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt;
include_once(AMFPHP_BASE . "shared/util/MethodTable.php"); &amp;nbsp; 

class VoteService &amp;nbsp; 

{ &amp;nbsp; 

 &amp;nbsp;function getVotes() &amp;nbsp; 

 &amp;nbsp;{ &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;return array( 'topic' =&amp;gt; 'What is the best Star Wars movie?', &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'votes' =&amp;gt; array( &amp;nbsp; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array( 'name' =&amp;gt; 'Episode IV', 'count' =&amp;gt; 150 ), &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array( 'name' =&amp;gt; 'Episode V', 'count' =&amp;gt; 250 ), &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array( 'name' =&amp;gt; 'Episode III', 'count' =&amp;gt; 50 ) &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;) &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;); &amp;nbsp; 

 &amp;nbsp;} &amp;nbsp; 

}&lt;/code&gt;&lt;/pre&gt;For this example, we’re just going to return the same  data as we’d have gained from the XML file on the server. That way, if  the results look the same we know everything’s in order.&lt;br /&gt;
To test the service, navigate to the &lt;code&gt;amfphp/browser&lt;/code&gt; directory in your browser. You should see something like this.&lt;br /&gt;
&lt;img alt="The AMF data service viewed in the AMFPHP browser" height="300" src="http://i2.sitepoint.com/graphics/AMF_data_service.thumb.png" width="400" /&gt;&lt;br /&gt;
Next, click on the &lt;code&gt;votes/VoteService&lt;/code&gt; and hit the Call button. This causes the AMF browser to invoke the service and display the results, as shown here.&lt;br /&gt;
&lt;img alt="The AMF browser showing the vote service result" height="272" src="http://i2.sitepoint.com/graphics/AMF_browser.thumb.png" width="400" /&gt;&lt;br /&gt;
We can see that the data is returned correctly as an &lt;code&gt;ActionScript&lt;/code&gt; object that’s very easy to manipulate.&lt;br /&gt;
From here, we can change the &lt;code&gt;HTTPService&lt;/code&gt; from the original &lt;code&gt;PieChart&lt;/code&gt; application to a &lt;code&gt;RemoteObject&lt;/code&gt; service. The &lt;code&gt;RemoteObject&lt;/code&gt; class connects to the AMF endpoint and then defines a bunch of methods. You can see this in the updated source:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="voteRO.getVotes.send()"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:remoteobject&amp;nbsp;id="votero"&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;="" &amp;nbsp;&amp;nbsp;&lt;="" &lt;="" mx:remoteobject&amp;nbsp;id="votero" span=""&gt;&lt;/mx:remoteobject&amp;nbsp;id="votero"&amp;nbsp;&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;endpoint="http://localhost/amfphp/gateway.php"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;source="votes.VoteService"&amp;nbsp;destination="votes.VoteService"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;showBusyCursor="true"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:method&amp;nbsp;name="getvotes"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:method&amp;nbsp;name="getvotes"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votero.getvotes.lastresult.topic}"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votero.getvotes.lastresult.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;="" &amp;nbsp;&amp;nbsp;&lt;="" &amp;nbsp;height="100%" &lt;="" mx:piechart&amp;nbsp;width="100%" span=""&gt;&lt;/mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showAllDataTips="true"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataProvider="{voteRO.getVotes.lastResult.votes}"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;...&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp; 

&lt;mx:application &amp;nbsp;="" &lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="voteRO.getVotes.send()"&amp;gt; &amp;nbsp; 

&lt;mx:remoteobject &amp;nbsp;="" &lt;br="" id="voteRO"&gt;
 &amp;nbsp;endpoint="http://localhost/amfphp/gateway.php" &amp;nbsp; 

 &amp;nbsp;source="votes.VoteService" destination="votes.VoteService" &amp;nbsp; 

 &amp;nbsp;showBusyCursor="true"&amp;gt; &amp;nbsp; 

&lt;mx:method name="getVotes"&gt; &amp;nbsp; 

&lt;/mx:method&gt;&lt;/mx:remoteobject&gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:label fontsize="20" text="{voteRO.getVotes.lastResult.topic}"&gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:piechart &amp;nbsp;="" &lt;br="" height="100%" width="100%"&gt;
 &amp;nbsp; &amp;nbsp;showAllDataTips="true" &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;dataProvider="{voteRO.getVotes.lastResult.votes}"&amp;gt; &amp;nbsp; 

... &amp;nbsp; 

 &amp;nbsp;&lt;/mx:piechart&gt; &amp;nbsp; 

&lt;/mx:label&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;Yes, that’s a lot more code than the &lt;code&gt;HTTPService&lt;/code&gt; required to achieve the same outcome (don’t forget to download the &lt;a class="sublink" href="http://sitepointstatic.com/examples/flex3/flex3-voteview.zip"&gt;code archive for this article&lt;/a&gt;).  But using AMF instead of XML will make it a lot easier to perform both  the vote collection and vote addition from the widget that we’ll create  in the next article of this series.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;There are few things that people like to do more than give  their opinion about a subject of interest to them – especially on the  Web. This can be very useful for engaging your site’s visitors,  measuring their interest in a topic, or just allowing them to express  themselves. Web 2.0, and the advent of Rich Internet Applications  (RIAs), allow for the installation of polling widgets on your web site,  making it easier than ever to take the pulse of your community.&lt;/strong&gt;&lt;br /&gt;
There  are several different technologies you could use to build an  interactive voting widget, but the end user needs to be considered  carefully. For instance, you could use Ajax – but this approach can  introduce issues with client-side compatibility. You could use Applets,  but that’s not a popular choice at the moment – too many web surfers  disable the Java VM in their browsers.&lt;br /&gt;
A very good option, on the  other hand, is Flash. Practically everyone has it installed – who hasn’t  come across a link to YouTube at some point and wanted to watch a  video?&lt;br /&gt;
But what if you’re not across Flash? And isn’t Flash really  an animator’s tool anyway? Well, as we’ll see, it’s easy for developers  to build Flash applications using the Flex framework – &lt;a class="sublink" href="http://ad.doubleclick.net/clk;205852843;28495059;s#sdk"&gt;freely available as open source from Adobe&lt;/a&gt;.  In this article, the first of two on this complex subject, we’ll walk  through the process of building a Flash widget for voting using the Flex  framework.&lt;br /&gt;
&lt;h5&gt;Flex Basics&lt;/h5&gt;Before  we go any further, we’ll pause for a minute to talk about the Flex and  Flash applications and where they fit into the client landscape. Take a  look at the following graphic.&lt;br /&gt;
&lt;img alt="Where Flash applications fit into the client landscape" height="308" src="http://i2.sitepoint.com/graphics/where_flash_fits.thumb.png" width="400" /&gt;&lt;br /&gt;
&lt;div class="vertical" id="adz"&gt;&lt;script&gt;
&lt;/script&gt;&lt;/div&gt;This  diagram demonstrates how a Web 2.0 web page interacts with a PHP web  server. The web page uses one of several tools to communicate with the  web server. It can use Javascript and Ajax to make a request of the  server, then update the page with the new data. Or it can use a Flash  application to provide functionality to the user. This Flash application  can either take up the entire page, or it may be contained to a widget  that takes up just a portion of it. Flex has been used very successfully  in both scenarios.&lt;br /&gt;
Flex applications are made of roughly three  parts: the MXML that defines the interface, the ActionScript code that  contains the application logic, and resources such as images and audio.  To draw an analogy with web technologies, the MXML and ActionScript  would be HTML and JavaScript respectively.&lt;br /&gt;
Now you could &lt;a class="sublink" href="http://ad.doubleclick.net/clk;205852843;28495059;s#sdk"&gt;download the SDK&lt;/a&gt;  and program your application using a simple text editor, but there’s a  better option – a really good IDE called Flex Builder 3, &lt;a class="sublink" href="http://ad.doubleclick.net/clk;205852843;28495059;s#flex_builder"&gt;available free from Adobe&lt;/a&gt; as a 30-day trial.&lt;br /&gt;
The following diagram shows Flex Builder 3 and how its function fits into the life cycle of generating a Flash application SWF.&lt;br /&gt;
&lt;img alt="How Flex Builder works" height="163" src="http://i2.sitepoint.com/graphics/flex_builder.thumb.png" width="400" /&gt;&lt;br /&gt;
Flex  Builder manages the MXML, ActionScript, and resources as a project. It  uses the Flex SDK compiler to continuously compile the project as you  make changes. That temporary output SWF file is then launched in your  default browser to do the testing.&lt;br /&gt;
Hopefully this provides some  context for getting started with Flex. If you’d like a more detailed  walk-through of this subject, I recommend you try this excellent  tutorial on &lt;a class="sublink" href="http://www.sitepoint.com/article/beginners-tutorial-flex-3"&gt;Flex for beginners&lt;/a&gt;.&lt;br /&gt;
&lt;h5&gt;Getting Flex Up and Running&lt;/h5&gt;The  Flex Builder 3 installer comes with everything you need built in. It  automatically installs the Flex SDK, as well as the Eclipse-based IDE  and the AIR runtime (which is useful if you want to build a desktop  application rather than a web app.&lt;br /&gt;
Once you have Flex Builder 3 installed on your machine, launch it and you should see something like this.&lt;br /&gt;
&lt;img alt="The starting point with Flex Builder 3" height="292" src="http://i2.sitepoint.com/graphics/starting_point.thumb.png" width="400" /&gt;&lt;br /&gt;
This  is the empty Flex IDE. The next step is to create our first Flex  project. Select Flex Project from the New menu and you should see this  window.&lt;br /&gt;
&lt;img alt="Creating your first project" height="364" src="http://i2.sitepoint.com/graphics/create_first.thumb.png" width="400" /&gt;&lt;br /&gt;
You can name your project whatever you like. I chose &lt;code&gt;Voteview&lt;/code&gt;,  since for the purposes of this article I’m only going to build an  application that views the current vote totals. We’ll discover the  interactive widget in the next article.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="article-cms-pagebreak"&gt;&lt;/div&gt;After you hit Finish to build the project, you should see the result pictured below.&lt;br /&gt;
&lt;img alt="The auto-generated application" height="221" src="http://i2.sitepoint.com/graphics/autogenerate.thumb.png" width="400" /&gt;&lt;br /&gt;
Flex  Builder 3 automatically creates an MXML application with the same name  as the project. In this case, the “voteview” project has one source  file, &lt;code&gt;voteviewer.mxml&lt;/code&gt;.&lt;br /&gt;
At this point, you’re probably  thinking, “I thought we were doing Flex, so what’s this MXML?” MXML is  one of the two major technologies in a Flex application; it’s a  tag-based language used to build user interfaces. The other is  ActionScript 3, which is the programming language that we use to add  interactivity to the interface.&lt;br /&gt;
To make sure that everything’s working okay, we’ll add just a single tag to the MXML file, as shown here:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;text="hello&amp;nbsp;world"&amp;nbsp;fontsize="20"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;text="hello&amp;nbsp;world"&amp;nbsp;fontsize="20"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt;

&lt;mx:application layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;

  &lt;mx:label fontsize="20" text="Hello World"&gt;

&lt;/mx:label&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;The &lt;code&gt;&lt;mx:label&gt;&lt;/mx:label&gt;&lt;/code&gt; tag specifies that we want a control of type &lt;code&gt;Label&lt;/code&gt; with the text of &lt;code&gt;Hello World&lt;/code&gt; where the font size is 20px. This figure shows the result of launching it in Flex Builder.&lt;br /&gt;
&lt;img alt="Just checking to make sure everything works" height="322" src="http://i2.sitepoint.com/graphics/just_checking.thumb.png" width="400" /&gt;&lt;br /&gt;
If that works, you know that everything is installed correctly and you’re all set to start developing in Flex.&lt;br /&gt;
The  next step is to put an XML file on a web server that will contain the  current vote totals. This is the data that the Flex application will  fetch and display.&lt;br /&gt;
You can format your XML any way you choose, but something along these lines is simple enough:&lt;br /&gt;
&lt;div class="vertical" id="adz"&gt;&lt;script&gt;
&lt;/script&gt;&lt;/div&gt;&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;votes&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/votes&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;topic&gt;What&amp;nbsp;is&amp;nbsp;the&amp;nbsp;best&amp;nbsp;Star&amp;nbsp;Wars&amp;nbsp;movie?&lt;/topic&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;options&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/options&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;option&amp;nbsp;count="150"&amp;nbsp;name="episode&amp;nbsp;iv"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/option&amp;nbsp;count="150"&amp;nbsp;name="episode&amp;nbsp;iv"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;option&amp;nbsp;count="250"&amp;nbsp;name="episode&amp;nbsp;v"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/option&amp;nbsp;count="250"&amp;nbsp;name="episode&amp;nbsp;v"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;option&amp;nbsp;count="50"&amp;nbsp;name="episode&amp;nbsp;iii"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/option&amp;nbsp;count="50"&amp;nbsp;name="episode&amp;nbsp;iii"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt;&lt;votes&gt; &amp;nbsp;

 &amp;nbsp;&lt;topic&gt;What is the best Star Wars movie?&lt;/topic&gt; &amp;nbsp;

 &amp;nbsp;&lt;options&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;option count="150" name="Episode IV"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/option&gt;&lt;option count="250" name="Episode V"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/option&gt;&lt;option count="50" name="Episode III"&gt; &amp;nbsp;

 &amp;nbsp;&lt;/option&gt;&lt;/options&gt; &amp;nbsp;

&lt;/votes&gt;&lt;/code&gt;&lt;/pre&gt;This XML defines that there is one question with three options, where each option has a name and a count of votes.&lt;br /&gt;
Once  this XML file is up on your server somewhere (in my case, the localhost  Apache server on my Mac), we can add some more tags to the MXML and get  this party started!&lt;br /&gt;
Here’s a simple Flex application that reads the data from the XML file and then displays the question in a &lt;code&gt;Label&lt;/code&gt; control, and the current votes in a &lt;code&gt;DataGrid&lt;/code&gt; control:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="votes.send()"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http: localhost="" votes.xml"&amp;nbsp;=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:datagrid&amp;nbsp;width="100%"&amp;nbsp;dataprovider="{votes.lastresult.votes.options.option}"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:datagrid&amp;nbsp;width="100%"&amp;nbsp;dataprovider="{votes.lastresult.votes.options.option}"&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:columns&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:columns&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:datagridcolumn&amp;nbsp;datafield="name"&amp;nbsp;headertext="movie"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:datagridcolumn&amp;nbsp;datafield="name"&amp;nbsp;headertext="movie"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:datagridcolumn&amp;nbsp;datafield="count"&amp;nbsp;headertext="vote&amp;nbsp;count"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:datagridcolumn&amp;nbsp;datafield="count"&amp;nbsp;headertext="vote&amp;nbsp;count"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp;

&lt;mx:application &amp;nbsp;&lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="votes.send()"&amp;gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:httpservice id="votes" resultformat="object" url="http://localhost/votes.xml"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:label fontsize="20" text="{votes.lastResult.votes.topic}"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:datagrid dataprovider="{votes.lastResult.votes.options.option}" width="100%"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;mx:columns&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;mx:datagridcolumn datafield="name" headertext="Movie"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;mx:datagridcolumn datafield="count" headertext="Vote Count"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/mx:datagridcolumn&gt;&lt;/mx:datagridcolumn&gt;&lt;/mx:columns&gt; &amp;nbsp;

 &amp;nbsp;&lt;/mx:datagrid&gt; &amp;nbsp;

&lt;/mx:label&gt;&lt;/mx:httpservice&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;There are two key elements involved in the code above. The first is the &lt;code&gt;mx:HTTPService&lt;/code&gt; tag that defines where we will retrieve the data, and specifies an &lt;code&gt;id&lt;/code&gt; for the data source. This service is invoked by the code attached to the &lt;code&gt;creationComplete&lt;/code&gt; event on the &lt;code&gt;Application&lt;/code&gt; tag.&lt;br /&gt;
The data display is handled automatically by Flex through the magic of the Flex event model. When the &lt;code&gt;HTTService&lt;/code&gt; has successfully downloaded the XML, the &lt;code&gt;lastResult&lt;/code&gt; variable on the service notifies the &lt;code&gt;Label&lt;/code&gt; and the &lt;code&gt;DataGrid&lt;/code&gt; that it has changed. Those controls then update themselves automatically to show the new values returned by the server.&lt;br /&gt;
Here’s the result of launching this in Flex Builder.&lt;br /&gt;
&lt;img alt="A grid presentation of the data" height="391" src="http://i2.sitepoint.com/graphics/grid_presentation.thumb.png" width="400" /&gt;&lt;br /&gt;
Well, it &lt;em&gt;works&lt;/em&gt;  okay, but it’s not very sexy in appearance, is it? I’m all about the  sexy look, so I’m going to use Flex’s built-in charting service to  display the votes in a pie chart instead of a &lt;code&gt;DataGrid&lt;/code&gt;.&lt;br /&gt;
This updated code is shown below:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="votes.send()"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http: localhost="" votes.xml"&amp;nbsp;=""&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;="" &amp;nbsp;&amp;nbsp;="" &amp;nbsp;height="100%" &lt;="" mx:piechart&amp;nbsp;width="100%" span=""&gt;&lt;/mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showAllDataTips="true"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:series&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:series&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;mx:pieseries&amp;nbsp;field="count"&amp;nbsp;labelfield="name"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:pieseries&amp;nbsp;field="count"&amp;nbsp;labelfield="name"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp;

&lt;mx:application &amp;nbsp;&lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="votes.send()"&amp;gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:httpservice id="votes" resultformat="object" url="http://localhost/votes.xml"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:label fontsize="20" text="{votes.lastResult.votes.topic}"&gt; &amp;nbsp;

 &amp;nbsp;&lt;mx:piechart &amp;nbsp;&lt;br="" height="100%" width="100%"&gt;
 &amp;nbsp; &amp;nbsp;showAllDataTips="true" &amp;nbsp;

 &amp;nbsp; &amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}"&amp;gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;mx:series&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;mx:pieseries exploderadius="0.1" field="count" labelfield="name" namefield="name"&gt; &amp;nbsp;

 &amp;nbsp; &amp;nbsp;&lt;/mx:pieseries&gt;&lt;/mx:series&gt; &amp;nbsp;

 &amp;nbsp;&lt;/mx:piechart&gt; &amp;nbsp;

&lt;/mx:label&gt;&lt;/mx:httpservice&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;The only change here is that we replaced the &lt;code&gt;DataGrid&lt;/code&gt; with a &lt;code&gt;PieChart&lt;/code&gt; control. When we run this in Flex Builder, we’ll see the window shown here.&lt;br /&gt;
&lt;img alt="A pie chart that displays the data" height="373" src="http://i2.sitepoint.com/graphics/piechart.thumb.png" width="400" /&gt;&lt;br /&gt;
Now,  that’s certainly better. A picture is worth a thousand words, as they  say. But could it be even cooler? As it turns out, it can; the Elixir  data visualization components &lt;a class="sublink" href="http://ilog.com/"&gt;available from ILOG&lt;/a&gt; offers a set of amazing charting controls that you can use on a trial basis.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="article-cms-pagebreak"&gt;&lt;/div&gt;Once  we’ve installed the ILOG Elixir controls on the machine, we can link  them into the project by referencing the Elixir libraries. From there,  we add a reference to the Elixir PieChart3D instead of to the original &lt;code&gt;PieChart&lt;/code&gt; control.&lt;br /&gt;
This updated code is shown below:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="votes.send()"&amp;nbsp;xmlns:ilog="http://www.ilog.com/2007/ilog/flex"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http: localhost="" votes.xml"&amp;nbsp;=""&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:httpservice&amp;nbsp;id="votes"&amp;nbsp;resultformat="object"&amp;nbsp;url="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votes.lastresult.votes.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;ilog:piechart3d&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;="" &amp;nbsp;&amp;nbsp;&lt;="" &amp;nbsp;height="100%" &lt;="" ilog:piechart3d&amp;nbsp;width="100%" span=""&gt;&lt;/ilog:piechart3d&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showAllDataTips="true"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}"&amp;nbsp;elevationAngle="30"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;ilog:series&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/ilog:series&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;ilog:pieseries3d&amp;nbsp;field="count"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/ilog:pieseries3d&amp;nbsp;field="count"&amp;nbsp;namefield="name"&amp;nbsp;exploderadius="0.1"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp; 

&lt;mx:application &amp;nbsp;="" &lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="votes.send()" xmlns:ilog="http://www.ilog.com/2007/ilog/flex"&amp;gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:httpservice id="votes" resultformat="object" url="http://localhost/votes.xml"&gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:label fontsize="20" text="{votes.lastResult.votes.topic}"&gt; &amp;nbsp; 

 &amp;nbsp;&lt;ilog:piechart3d &amp;nbsp;="" &lt;br="" height="100%" width="100%"&gt;
 &amp;nbsp; &amp;nbsp;showAllDataTips="true" &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;dataProvider="{votes.lastResult.votes.options.option}" elevationAngle="30"&amp;gt; &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;&lt;ilog:series&gt; &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;ilog:pieseries3d exploderadius="0.1" field="count" namefield="name"&gt; &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;&lt;/ilog:pieseries3d&gt;&lt;/ilog:series&gt; &amp;nbsp; 

 &amp;nbsp;&lt;/ilog:piechart3d&gt; &amp;nbsp; 

&lt;/mx:label&gt;&lt;/mx:httpservice&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;And when brought up in Flex Builder 3, it looks like this figure.&lt;br /&gt;
&lt;img alt="A cool 3D pie chart of the vote results using Elixir" height="381" src="http://i2.sitepoint.com/graphics/3D_piechart.thumb.png" width="400" /&gt;&lt;br /&gt;
Now  we’re really cooking with gas! With Elixir we can change the rotation  of the chart, the colors, the viewing angle, the lighting, and more. We  can even do all that on the fly by responding to mouseclick events and  changing the parameters on the chart using ActionScript. This  functionality allows the voter to spin the chart around and view it from  different angles.&lt;br /&gt;
This is about as far as I’m going to go with  the interface in this article series. To finish up, I’ll demonstrate how  to use a different data transport technology, AMF, instead of XML. AMF  is easier to use, particularly when you’re both reading and writing data  – more on this in the next instalment!&lt;br /&gt;
&lt;div class="vertical" id="adz"&gt;&lt;script&gt;
&lt;/script&gt;&lt;/div&gt;&lt;strong&gt;&lt;em&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: &lt;br /&gt;
AMF and XML aren’t the only ways that Flex can access data. Your  applications can read JSON, text, AMF, or go direct to binary data  through sockets. In other words, wherever your data is and whatever the  format, Flex applications can get to it.&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;h5&gt;Going to AMF&lt;/h5&gt;Let’s use the &lt;a class="sublink" href="http://amfphp.org/"&gt;free AMFPHP package&lt;/a&gt;  to build an AMF service on the web server. AMFPHP comes with a built-in  service browser, which I’ll show you in a minute, plus a directory  where you put your services. In this case, we’ll add a new service to a  new “votes” directory called &lt;code&gt;VoteService&lt;/code&gt;.&lt;br /&gt;
Here’s the PHP code for &lt;code&gt;VoteService&lt;/code&gt;:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;include_once(AMFPHP_BASE&amp;nbsp;.&amp;nbsp;"shared/util/MethodTable.php");&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;class&amp;nbsp;VoteService&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;{&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;function&amp;nbsp;getVotes()&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;array(&amp;nbsp;'topic'&amp;nbsp;=&amp;gt;&amp;nbsp;'What&amp;nbsp;is&amp;nbsp;the&amp;nbsp;best&amp;nbsp;Star&amp;nbsp;Wars&amp;nbsp;movie?',&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'votes'&amp;nbsp;=&amp;gt;&amp;nbsp;array(&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&amp;nbsp;'name'&amp;nbsp;=&amp;gt;&amp;nbsp;'Episode&amp;nbsp;IV',&amp;nbsp;'count'&amp;nbsp;=&amp;gt;&amp;nbsp;150&amp;nbsp;),&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&amp;nbsp;'name'&amp;nbsp;=&amp;gt;&amp;nbsp;'Episode&amp;nbsp;V',&amp;nbsp;'count'&amp;nbsp;=&amp;gt;&amp;nbsp;250&amp;nbsp;),&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&amp;nbsp;'name'&amp;nbsp;=&amp;gt;&amp;nbsp;'Episode&amp;nbsp;III',&amp;nbsp;'count'&amp;nbsp;=&amp;gt;&amp;nbsp;50&amp;nbsp;)&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt;
include_once(AMFPHP_BASE . "shared/util/MethodTable.php"); &amp;nbsp; 

class VoteService &amp;nbsp; 

{ &amp;nbsp; 

 &amp;nbsp;function getVotes() &amp;nbsp; 

 &amp;nbsp;{ &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;return array( 'topic' =&amp;gt; 'What is the best Star Wars movie?', &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'votes' =&amp;gt; array( &amp;nbsp; &amp;nbsp;

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array( 'name' =&amp;gt; 'Episode IV', 'count' =&amp;gt; 150 ), &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array( 'name' =&amp;gt; 'Episode V', 'count' =&amp;gt; 250 ), &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array( 'name' =&amp;gt; 'Episode III', 'count' =&amp;gt; 50 ) &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;) &amp;nbsp; 

 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;); &amp;nbsp; 

 &amp;nbsp;} &amp;nbsp; 

}&lt;/code&gt;&lt;/pre&gt;For this example, we’re just going to return the same  data as we’d have gained from the XML file on the server. That way, if  the results look the same we know everything’s in order.&lt;br /&gt;
To test the service, navigate to the &lt;code&gt;amfphp/browser&lt;/code&gt; directory in your browser. You should see something like this.&lt;br /&gt;
&lt;img alt="The AMF data service viewed in the AMFPHP browser" height="300" src="http://i2.sitepoint.com/graphics/AMF_data_service.thumb.png" width="400" /&gt;&lt;br /&gt;
Next, click on the &lt;code&gt;votes/VoteService&lt;/code&gt; and hit the Call button. This causes the AMF browser to invoke the service and display the results, as shown here.&lt;br /&gt;
&lt;img alt="The AMF browser showing the vote service result" height="272" src="http://i2.sitepoint.com/graphics/AMF_browser.thumb.png" width="400" /&gt;&lt;br /&gt;
We can see that the data is returned correctly as an &lt;code&gt;ActionScript&lt;/code&gt; object that’s very easy to manipulate.&lt;br /&gt;
From here, we can change the &lt;code&gt;HTTPService&lt;/code&gt; from the original &lt;code&gt;PieChart&lt;/code&gt; application to a &lt;code&gt;RemoteObject&lt;/code&gt; service. The &lt;code&gt;RemoteObject&lt;/code&gt; class connects to the AMF endpoint and then defines a bunch of methods. You can see this in the updated source:&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;view plain&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;print&lt;/a&gt;&lt;a href="http://www.sitepoint.com/voting-widget-flex-3-part-1/#"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:application&amp;nbsp;xmlns:mx="http: &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br="" 2006="" mxml"&amp;nbsp;layout="vertical" www.adobe.com=""&gt;&amp;nbsp;&amp;nbsp;&lt;/mx:application&amp;nbsp;xmlns:mx="http:&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;creationComplete="voteRO.getVotes.send()"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:remoteobject&amp;nbsp;id="votero"&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;="" &amp;nbsp;&amp;nbsp;&lt;="" &lt;="" mx:remoteobject&amp;nbsp;id="votero" span=""&gt;&lt;/mx:remoteobject&amp;nbsp;id="votero"&amp;nbsp;&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;endpoint="http://localhost/amfphp/gateway.php"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;source="votes.VoteService"&amp;nbsp;destination="votes.VoteService"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;showBusyCursor="true"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;mx:method&amp;nbsp;name="getvotes"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:method&amp;nbsp;name="getvotes"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votero.getvotes.lastresult.topic}"&amp;nbsp;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/mx:label&amp;nbsp;fontsize="20"&amp;nbsp;text="{votero.getvotes.lastresult.topic}"&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;="" &amp;nbsp;&amp;nbsp;&lt;="" &amp;nbsp;height="100%" &lt;="" mx:piechart&amp;nbsp;width="100%" span=""&gt;&lt;/mx:piechart&amp;nbsp;width="100%"&amp;nbsp;height="100%"&amp;nbsp;&amp;nbsp;&amp;nbsp;&gt;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showAllDataTips="true"&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataProvider="{voteRO.getVotes.lastResult.votes}"&amp;gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;...&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;pre style="display: none;"&gt;&lt;code&gt; &amp;nbsp; 

&lt;mx:application &amp;nbsp;="" &lt;br="" layout="vertical" xmlns:mx="http://www.adobe.com/2006/mxml"&gt;
 &amp;nbsp;creationComplete="voteRO.getVotes.send()"&amp;gt; &amp;nbsp; 

&lt;mx:remoteobject &amp;nbsp;="" &lt;br="" id="voteRO"&gt;
 &amp;nbsp;endpoint="http://localhost/amfphp/gateway.php" &amp;nbsp; 

 &amp;nbsp;source="votes.VoteService" destination="votes.VoteService" &amp;nbsp; 

 &amp;nbsp;showBusyCursor="true"&amp;gt; &amp;nbsp; 

&lt;mx:method name="getVotes"&gt; &amp;nbsp; 

&lt;/mx:method&gt;&lt;/mx:remoteobject&gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:label fontsize="20" text="{voteRO.getVotes.lastResult.topic}"&gt; &amp;nbsp; 

 &amp;nbsp;&lt;mx:piechart &amp;nbsp;="" &lt;br="" height="100%" width="100%"&gt;
 &amp;nbsp; &amp;nbsp;showAllDataTips="true" &amp;nbsp; 

 &amp;nbsp; &amp;nbsp;dataProvider="{voteRO.getVotes.lastResult.votes}"&amp;gt; &amp;nbsp; 

... &amp;nbsp; 

 &amp;nbsp;&lt;/mx:piechart&gt; &amp;nbsp; 

&lt;/mx:label&gt;&lt;/mx:application&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="padding-bottom: 50px; text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #f2f2f2; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;Written By:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #f2f2f2; font-size: 19px;"&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;a href="http://www.sitepoint.com/author/jack-herrington/" style="font-weight: bold;" title="Jack Herrington"&gt;Jack Herrington&lt;/a&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #f2f2f2; font-size: xx-small;"&gt;Jack  Herrington is an engineer, author, and presenter who lives and works in  the San Francisco Bay Area. He lives with his wife, daughter and two  adopted dogs. When he's not writing software, books, or articles you can  find him cycling, running, or in the pool training for triathlons. You  can keep up with Jack's work and his writing at  http://jackherrington.com.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-2953488398995436847?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T22:23:05.096-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><media:content url="http://feedproxy.google.com/~r/blogspot/tGsc/~5/eOiLcu0botU/flex3-voteview.zip" fileSize="2271556" type="application/zip" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> IThere are few things that people like to do more than give their opinion about a subject of interest to them – especially on the Web. This can be very useful for engaging your site’s visitors, measuring their interest in a topic, or just allowing them t</itunes:subtitle><itunes:author>dhiraj patra</itunes:author><itunes:summary> IThere are few things that people like to do more than give their opinion about a subject of interest to them – especially on the Web. This can be very useful for engaging your site’s visitors, measuring their interest in a topic, or just allowing them to express themselves. Web 2.0, and the advent of Rich Internet Applications (RIAs), allow for the installation of polling widgets on your web site, making it easier than ever to take the pulse of your community.There are several different technologies you could use to build an interactive voting widget, but the end user needs to be considered carefully. For instance, you could use Ajax – but this approach can introduce issues with client-side compatibility. You could use Applets, but that’s not a popular choice at the moment – too many web surfers disable the Java VM in their browsers. A very good option, on the other hand, is Flash. Practically everyone has it installed – who hasn’t come across a link to YouTube at some point and wanted to watch a video? But what if you’re not across Flash? And isn’t Flash really an animator’s tool anyway? Well, as we’ll see, it’s easy for developers to build Flash applications using the Flex framework – freely available as open source from Adobe. In this article, the first of two on this complex subject, we’ll walk through the process of building a Flash widget for voting using the Flex framework. Flex Basics Before we go any further, we’ll pause for a minute to talk about the Flex and Flash applications and where they fit into the client landscape. Take a look at the following graphic. This diagram demonstrates how a Web 2.0 web page interacts with a PHP web server. The web page uses one of several tools to communicate with the web server. It can use Javascript and Ajax to make a request of the server, then update the page with the new data. Or it can use a Flash application to provide functionality to the user. This Flash application can either take up the entire page, or it may be contained to a widget that takes up just a portion of it. Flex has been used very successfully in both scenarios. Flex applications are made of roughly three parts: the MXML that defines the interface, the ActionScript code that contains the application logic, and resources such as images and audio. To draw an analogy with web technologies, the MXML and ActionScript would be HTML and JavaScript respectively. Now you could download the SDK and program your application using a simple text editor, but there’s a better option – a really good IDE called Flex Builder 3, available free from Adobe as a 30-day trial. The following diagram shows Flex Builder 3 and how its function fits into the life cycle of generating a Flash application SWF. Flex Builder manages the MXML, ActionScript, and resources as a project. It uses the Flex SDK compiler to continuously compile the project as you make changes. That temporary output SWF file is then launched in your default browser to do the testing. Hopefully this provides some context for getting started with Flex. If you’d like a more detailed walk-through of this subject, I recommend you try this excellent tutorial on Flex for beginners. Getting Flex Up and RunningThe Flex Builder 3 installer comes with everything you need built in. It automatically installs the Flex SDK, as well as the Eclipse-based IDE and the AIR runtime (which is useful if you want to build a desktop application rather than a web app. Once you have Flex Builder 3 installed on your machine, launch it and you should see something like this. This is the empty Flex IDE. The next step is to create our first Flex project. Select Flex Project from the New menu and you should see this window. You can name your project whatever you like. I chose Voteview, since for the purposes of this article I’m only going to build an application that views the current vote totals. We’ll discover the interactive widget in the next article. After you hit Finish to build the project,</itunes:summary><itunes:keywords>dhiraj,dhirajpatra,php</itunes:keywords><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/11/build-web-20-voting-widget-with-flex.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/blogspot/tGsc/~5/eOiLcu0botU/flex3-voteview.zip" length="2271556" type="application/zip" /><feedburner:origEnclosureLink>http://sitepointstatic.com/examples/flex3/flex3-voteview.zip</feedburner:origEnclosureLink></item><item><title>How To Optimize Websites</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/AAags49ZlKc/how-to-optimize-websites.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Sun, 16 Oct 2011 22:13:14 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-3758495311178117394</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;
Google found that moving from a 10-result page loading in 0.4 seconds  to a 30-result page loading in 0.9 seconds decreased traffic and ad  revenues by 20% (Linden 2006). When the home page of Google Maps was  reduced from 100KB to 70-80KB, traffic went up 10% in the first week,  and an additional 25% in the following three weeks (Farber 2006).&lt;br /&gt;
Tests at Amazon revealed similar results: every 100 ms increase in  load time of Amazon.com decreased sales by 1%. (Kohavi and Longbotham  2007).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It’s quite clear. &lt;strong&gt;Everyone hates slow websites&lt;/strong&gt;. The  question is, how can you make your WordPress website faster? Keep  reading and I’ll show you how you can take proactive steps towards  speeding up your site.&lt;br /&gt;
&lt;span id="more-1384"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;What Determines Website Page Speed?&lt;/h3&gt;The &lt;a href="http://developer.yahoo.com/yslow/"&gt;Yahoo! YSlow&lt;/a&gt; and &lt;a href="http://code.google.com/speed/page-speed/download.html"&gt;Google Page Speed&lt;/a&gt;  Mozilla Firefox plugins evaluate your site against the widely accepted  rules of website performance. The problem is, they don’t tell you what  to do with the information they provide.&lt;br /&gt;
So, I’ll break down the top performance recommendations and show you you can apply them to your website.&lt;br /&gt;
Let’s do it.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#http" id="#http-r"&gt;Minimize the number of &lt;abbr title="HyperText Transfer Protocol"&gt;HTTP&lt;/abbr&gt; requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#images" id="#images-r"&gt;Optimize and correctly display images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#minify" id="#minify-r"&gt;Minify &lt;abbr title="HyperText Markup Language"&gt;HTML&lt;/abbr&gt;, &lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt;, and Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#cdn" id="#cdn-r"&gt;Use a Content Delivery Network&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#gzip" id="#gzip-r"&gt;Gzip and compress components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#link" id="#link-r"&gt;Choose &lt;code&gt;&lt;link&gt;&lt;/link&gt;&lt;/code&gt; over &lt;code&gt;@import&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#css" id="#css-r"&gt;Put stylesheets at the top&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#js" id="#js-r"&gt;Put scripts at the bottom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#cache" id="#cache-r"&gt;Utilize browser caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diythemes.com/thesis/improve-website-pagespeed/#sprites" id="#sprites-r"&gt;Use &lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt; Sprites&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;h3 id="http"&gt;1. Minimize the number of &lt;abbr title="HyperText Transfer Protocol"&gt;HTTP&lt;/abbr&gt; requests&lt;/h3&gt;&lt;strong&gt;Translation:&lt;/strong&gt; &lt;em&gt;Limit the number of files required to display your website&lt;/em&gt;&lt;br /&gt;
When someone visits your website, the corresponding files must be  sent to that person’s browser. This includes CSS files, Javascript  library references, and images.&lt;br /&gt;
As expected, every file you use to enhance your design detracts from  its performance. Similary, WordPress plugins are notorious for injecting  extraneous CSS code in the head of your site without giving you the  option to manually add the required styles to your stylesheet.&lt;br /&gt;
The key takeaway is this: eliminate everything that’s unnecessary. If  you’re using a plugin because you like, take a look at how it impacts  your code. The extra page-load time may not be worth it.&lt;br /&gt;
&lt;h3 id="images"&gt;2. Optimize and correctly display images&lt;/h3&gt;&lt;strong&gt;Translation:&lt;/strong&gt; &lt;em&gt;Make images as small as possible and don’t require the browser to resize them&lt;/em&gt;&lt;br /&gt;
Depending on the format, many images contain a &lt;em&gt;ton&lt;/em&gt; of  extraneous metadata that can drastically increase the size of the file.  Many designers fail to compress their images before uploading them to  the web, and the overall impact of this can be dramatic with  image-intensive designs.&lt;br /&gt;
Another cardinal sin of inexperienced webmasters is to upload and  serve an image far larger than what is required for the design.  WordPress is an unfortunate enabler of this, as many novice website  owners upload large images directly off of their digital cameras and  utilize WordPress’s image resizing functionality to display a smaller  version.&lt;br /&gt;
With free applications like &lt;a href="http://www.picnik.com/"&gt;Picnik&lt;/a&gt; and &lt;a href="http://tools.dynamicdrive.com/imageoptimizer/"&gt;Image Optimizer&lt;/a&gt; at our disposal, there is simply no excuse not to resize and optimize! Visitors (and your server) will thank you.&lt;br /&gt;
&lt;h3 id="minify"&gt;3. Minify &lt;abbr title="HyperText Markup Language"&gt;HTML&lt;/abbr&gt;, &lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt;, and Javascript&lt;/h3&gt;&lt;strong&gt;Translation: &lt;/strong&gt;&lt;em&gt;Remove all white space from code when possible before serving it to visitors&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;/em&gt;The spaces, tabs, and orderly structure used in code is to make it more &lt;em&gt;human&lt;/em&gt;-readable.  Servers and browsers don’t care about what the code looks like as long  as it’s valid and executes without error. If you want your files to  download faster, you can remove this whitespace before serving your  code.&lt;br /&gt;
Since it would be impractical to remove white space from files that  are constantly edited (unlike Javascript libraries like jQuery, which  are almost always served minified), we’ll want to leverage a plugin like  &lt;a href="http://wordpress.org/extend/plugins/wp-minify/"&gt;WP-Minify&lt;/a&gt; (good) or &lt;a href="http://wordpress.org/extend/plugins/w3-total-cache/"&gt;W3 Total Cache&lt;/a&gt; (best) to handle this at runtime without affecting the files we need to edit.&lt;br /&gt;
Whitespace is great for web design but in our code? Not so much.&lt;br /&gt;
&lt;h3 id="cdn"&gt;4. Use a Content Delivery Network (CDN)&lt;/h3&gt;&lt;strong&gt;Translation:&lt;/strong&gt; &lt;em&gt;Use a &lt;abbr title="Content Delivery Network"&gt;CDN&lt;/abbr&gt; to lighten the load on your server and turbocharge its performance&lt;/em&gt;&lt;br /&gt;
A &lt;abbr title="Content Delivery Network"&gt;CDN&lt;/abbr&gt; is a  high-performance network of servers across the globe that replicate the  static assets of your website and serve them to visitors from the  closest &lt;abbr title="Point Of Presence"&gt;POP&lt;/abbr&gt;.&lt;br /&gt;
&lt;em&gt;What?&lt;/em&gt;&lt;br /&gt;
I know, I know. The good news is that we don’t have to understand the mechanics &lt;em&gt;behind&lt;/em&gt;  Content Delivery Networks in order to understand their power: you have a  team of servers distributing your static assets to visitors across the  globe. I’ve written a post on &lt;a href="http://williejackson.com/making-wordpress-faster-integrate-a-cdn/"&gt;making WordPress faster by integrating a CDN&lt;/a&gt; if you’re interested in further reading on the topic.&lt;br /&gt;
CDNs are among the most effective ways to absolutely turbocharge the  speed of our sites. We can’t neglect the other areas of optimization in  the process, so this should be treated as the crowning jewel atop your  beautifully optimized website.&lt;br /&gt;
&lt;h3 id="gzip"&gt;5. Gzip and compress components&lt;/h3&gt;&lt;strong&gt;Translation:&lt;/strong&gt; &lt;em&gt;Compress files at the server level before sending them to browsers&lt;/em&gt;&lt;br /&gt;
If you were instructed to hurl a piece of paper across the room as  far as it can go, would you lightly crumple it or squeeze it with all  your might? That’s right, you’d get your Hulk Smash on.&lt;br /&gt;
The sample principle applies here: we want to allow our webserver to  compress our files before sending them to visitors. We can drop a few  lines of code in our &lt;code&gt;.htaccess&lt;/code&gt; file to accomplish this:&lt;br /&gt;
&lt;pre&gt;#Begin gzip and deflate
&lt;ifmodule mod_deflate.c=""&gt;
    AddOutputFilterByType DEFLATE text/html text/css application/x-javascript text/plain text/xml image/x-icon
&lt;/ifmodule&gt;&lt;/pre&gt;This code might look a bit intimidating, but it’s actually pretty simple. We’re just checking to see if the Apache &lt;code&gt;mod_deflate&lt;/code&gt; module exists and if so, electing to serve HTML, CSS, Javascript, plain text, and favicon files using gzip compression.&lt;br /&gt;
Note that this requires the Apache webserver and the &lt;code&gt;mod_deflate&lt;/code&gt; module. To enable gzip compression with NGINX, ensure that the following lines exist inside of the appropriate directive:&lt;br /&gt;
&lt;pre&gt;server {
        gzip on;
        gzip_types text/html text/css application/x-javascript text/plain text/xml image/x-icon;
    }&lt;/pre&gt;Easy!&lt;br /&gt;
&lt;h3&gt;6. Choose &lt;code&gt;&lt;link&gt;&lt;/link&gt;&lt;/code&gt; over&lt;code&gt; @import&lt;/code&gt;&lt;/h3&gt;&lt;strong&gt;Translation:&lt;/strong&gt; &lt;em&gt;Beware the suck of IE!&lt;/em&gt;&lt;br /&gt;
When including your stylesheets, always link to the files instead of using the &lt;code&gt;@import&lt;/code&gt;  reference. IE handles them differently by loading them as if the  reference was at the bottom of the document. [sarcasm] Nice work,  Microsoft! [/sarcasm]&lt;br /&gt;
&lt;h3 id="css"&gt;7. Put stylesheets at the top&lt;/h3&gt;&lt;strong&gt;Translation&lt;/strong&gt;: &lt;em&gt;All interface-related stylesheet references should be included in the &lt;code&gt;&lt;/code&gt; of your document&lt;/em&gt;&lt;br /&gt;
We never, ever, ever want to display unstyled content to visitors—not  even for a split second. Files responsible for the appearance of our  site should be loaded first so they can be applied to the &lt;abbr title="HyperText Markup Language"&gt;HTML&lt;/abbr&gt; as it loads. Makes sense, right?&lt;br /&gt;
Nothing more to it.&lt;br /&gt;
&lt;h3 id="js"&gt;8. Put scripts at the bottom&lt;/h3&gt;&lt;strong&gt;Translation:&lt;/strong&gt; &lt;em&gt;All functionality-related files can be loaded after our content is loaded&lt;/em&gt;&lt;br /&gt;
As we think through how to deliver our content to visitors as fast as  possible and the subsequent steps that users will take, we will use the  following priorities:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Get content to visitors as fast as possible&lt;/li&gt;
&lt;li&gt;Don’t allow unstyled content to appear in the browser (put &lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt; in the &lt;code&gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Load the files required for interaction (tabbed widgets, certain external &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt; calls, etc.) last&lt;/li&gt;
&lt;/ol&gt;The thinking behind this is simple: users aren’t going to interact with the content before they can see it!&lt;br /&gt;
&lt;h3 id="cache"&gt;9. Utilize browser caching&lt;/h3&gt;&lt;strong&gt;Urban Translation:&lt;/strong&gt; &lt;em&gt;Where the cache at?&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;Standard Translation:&lt;/strong&gt; &lt;em&gt;Don’t require browsers to pull down another copy of static files every time&lt;/em&gt;&lt;br /&gt;
With browser caching, we’re explicitly instructing browsers to hang  onto particular files for a specified period of time. When the file is  needed again, the browser is to pull from its local cache instead of  requesting it from the server again.&lt;br /&gt;
Running a website without caching in place makes as much sense as  driving to the store for a glass of water every time you’re thirsty. Not  only is in impractical and short-sighted, it takes more work!&lt;br /&gt;
The &lt;code&gt;ExpiresByType&lt;/code&gt; directive is used to tell browsers  which files to cache and how long to hang onto them. The example below  would tell our visitors’ browsers to hang onto HTML, CSS, Javascript,  and images, and favicon for an hour (3600 seconds):&lt;br /&gt;
&lt;pre&gt;&lt;ifmodule mod_expires.c=""&gt;
    ExpiresActive On
    ExpiresByType text/html M3600
    ExpiresByType text/css M3600
    ExpiresByType application/x-javascript M3600
    ExpiresByType image/bmp M3600
    ExpiresByType image/gif M3600
    ExpiresByType image/x-icon M3600
    ExpiresByType image/jpeg M3600
&lt;/ifmodule&gt;&lt;/pre&gt;Again, the code above is for your &lt;code&gt;.htaccess&lt;/code&gt; file on an Apache server. The corresponding settings in NGINX would look something like this:&lt;br /&gt;
&lt;pre&gt;location ~* \.(jpg|png|gif|jpeg|css|js)$ {
        expires 1h;
}&lt;/pre&gt;Boom.&lt;br /&gt;
&lt;h3 id="sprites"&gt;10. Use &lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt; Sprites&lt;/h3&gt;&lt;strong&gt;Translation:&lt;/strong&gt; &lt;em&gt;Serve one highly optimized image for your design to minimize the performance impact&lt;/em&gt;&lt;br /&gt;
A &lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt; sprite is an an image comprised of &lt;em&gt;other&lt;/em&gt; images used by your design as something of a map containing the coordinates of all the images. Some clever &lt;abbr title="Cascading StyleSheets"&gt;CSS&lt;/abbr&gt; is used to show the proper section of the sprite when your design is loaded.&lt;br /&gt;
There are fantastic &lt;a href="http://www.alistapart.com/articles/sprites"&gt;articles&lt;/a&gt; on the topic available across the web that dive into the mechanics of &lt;abbr title="Cascading Style Sheet"&gt;CSS&lt;/abbr&gt; sprites and wonderful resources for creating them. &lt;a href="http://spriteme.org/"&gt;SpriteMe&lt;/a&gt; is a utility that generates the sprite and code required to make it work. If you inspect the code for the nav menu on &lt;a href="http://www.pearsonified.com/"&gt;Pearsonified.com&lt;/a&gt;, you’ll see a great example of how to implement a &lt;abbr title="Cascading Style Sheet"&gt;CSS&lt;/abbr&gt; sprite.&lt;br /&gt;
&lt;h3&gt;Whew! Still reading?&lt;/h3&gt;If so, great! You’re well on your way to a much faster website. If  you implement even a handful of the techniques outlined in this post,  you will see an immediate and dramatic improvement in your site’s  performance. It’s not important that we know how everything works from  database calls to HTTP requests—I surely don’t—it’s important that we’re  familiar enough with the concepts to work towards them on our sites.&lt;br /&gt;
&lt;h3&gt;Work smarter, not harder&lt;/h3&gt;You could spend a few months learning the ins and outs of web server  architecture, how different browsers implement caching, and how to tie  it all together…or you could simply install and configure the &lt;a href="http://wordpress.org/extend/plugins/w3-total-cache/"&gt;W3 Total Cache&lt;/a&gt; plugin by &lt;a href="http://twitter.com/w3edge"&gt;Frederick Townes&lt;/a&gt; (CTO of Mashable).&lt;br /&gt;
I can give no higher recommendation for a performance-related plugin  than this one. The features could easily fill another post, but I’ll  give you the important part: W3TC helps you thoroughly address 80% of  the recommendations outlined in this post. There are other solid options  for caching plugins, but W3TC stands head and shoulders above the rest.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;sources&amp;nbsp;curtsy:&amp;nbsp;diythemes.com&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-3758495311178117394?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-16T22:13:14.671-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/10/how-to-optimize-websites.html</feedburner:origLink></item><item><title>Differences between PHP4 and PHP5</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/oV2iXHqA7kA/differences-between-php4-and-php5.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 13 Oct 2011 21:47:23 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-7697923481701424776</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="background-color: #f8fafb; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;"&gt;Here's a quick overview of what has changed between PH4 and PHP5. PHP5 for the most part is backwards compatible with PHP4, but there are a couple key changes that might break your PHP4 script in a PHP5 environment. If you aren't already, I stronly suggest you start developing for PHP5. Many hosts these days offer a PHP5 environment, or a dual PHP4/PHP5 setup so you should be fine on that end. Using all of these new features is worth even a moderate amount of trouble you might go through finding a new host!&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Note: Some of the features listed below are only in PHP5.2 and above.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: navy;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Object Model&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;The new OOP features in PHP5 is probably the one thing that everyone knows for sure about. Out of all the new features, these are the ones that are talked about most!&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Passed by Reference&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;This is an important change. In PHP4, everything was passed by value, including objects. This has changed in PHP5 -- all objects are now passed by reference.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 20px; margin-left: 20px; margin-right: 20px; margin-top: 5px;"&gt;&lt;div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; margin-bottom: 2px;"&gt;PHP Code:&lt;/div&gt;&lt;div class="alt2" dir="ltr" style="background-attachment: initial; background-clip: initial; background-color: #e7e7e7; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(197, 209, 216); border-bottom-style: inset; border-bottom-width: 1px; border-color: initial; border-left-style: inset; border-left-width: 1px; border-right-style: inset; border-right-width: 1px; border-top-style: inset; border-top-width: 1px; color: black; height: 130px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: left; width: 640px;"&gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;$joe&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Person&lt;/span&gt;&lt;span style="color: #007700;"&gt;();&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$joe&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;sex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'male'&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$betty&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$joe&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$betty&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;sex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'female'&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;
&lt;br /&gt;
echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$joe&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;sex&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;Will&amp;nbsp;be&amp;nbsp;'female'&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;The above code fragment was common in PHP4. If you needed to duplicate an object, you simply copied it by assigning it to another variable. But in PHP5 you must use the new&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.cloning.php" style="color: #274d85;" target="_blank"&gt;clone&lt;/a&gt;&amp;nbsp;keyword.&lt;br /&gt;
&lt;br /&gt;
Note that this also means you can stop using the reference operator (&amp;amp;). It was common practice to pass your objects around using the &amp;amp; operator to get around the annoying pass-by-value functionality in PHP4.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Class Constants and Static Methods/Properties&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
You can now create&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.constants.php" style="color: #274d85;" target="_blank"&gt;class constants&lt;/a&gt;&amp;nbsp;that act much the same was as define()'ed constants, but are contained within a class definition and accessed with the :: operator.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://php.net/manual/en/language.oop5.static.php" style="color: #274d85;" target="_blank"&gt;Static methods and properties&lt;/a&gt;&amp;nbsp;are also available. When you declare a class member as static, then it makes that member accessible (through the :: operator) without an instance. (Note this means within methods, the $this variable is not available)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: royalblue;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;Visibility&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
Class methods and properties now have&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.visibility.php" style="color: #274d85;" target="_blank"&gt;visibility&lt;/a&gt;. PHP has 3 levels of visibility:&lt;ol style="list-style-type: decimal;"&gt;&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;&lt;b&gt;Public&lt;/b&gt;&amp;nbsp;is the most visible, making methods accessible to everyone and properties readable and writable by everyone.&lt;/li&gt;
&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;&lt;b&gt;Protected&lt;/b&gt;&amp;nbsp;makes members accessible to the class itself and any subclasses as well as any parent classes.&lt;/li&gt;
&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;&lt;b&gt;Private&lt;/b&gt;&amp;nbsp;makes members only available to the class itself.&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Unified Constructors and Destructors&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;PHP5 introduces a new&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.decon.php" style="color: #274d85;" target="_blank"&gt;unified constructor/destructor&lt;/a&gt;&amp;nbsp;names. In PHP4, a constructor was simply a method that had the same name as the class itself. This caused some headaches since if you changed the name of the class, you would have to go through and change every occurrence of that name.&lt;br /&gt;
&lt;br /&gt;
In PHP5, all constructors are named __construct(). That is, the word&amp;nbsp;&lt;i&gt;construct&lt;/i&gt;&amp;nbsp;prefixed by two underscores. Other then this name change, a constructor works the same way.&lt;br /&gt;
&lt;br /&gt;
Also, the newly added __destruct() (destruct prefixed by two underscores) allows you to write code that will be executed when the object is destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Abstract Classes&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;PHP5 lets you declare a class as&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.abstract.php" style="color: #274d85;" target="_blank"&gt;&lt;i&gt;abstract&lt;/i&gt;&lt;/a&gt;. An abstract class cannot itself be instantiated, it is purely used to define a model where other classes extend. You&amp;nbsp;&lt;i&gt;must&lt;/i&gt;&amp;nbsp;declare a class abstract if it contains any abstract methods. Any methods marked as abstract must be defined within any classes that extend the class. Note that you can also include full method definitions within an abstract class along with any abstract methods.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Interfaces&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;PHP5 introduces&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.interfaces.php" style="color: #274d85;" target="_blank"&gt;interfaces&lt;/a&gt;&amp;nbsp;to help you design common APIs. An interface defines the methods a class must implement. Note that all the methods defined in an interface must be public. An interface is not designed as a blueprint for classes, but just a way to standardize a common API.&lt;br /&gt;
&lt;br /&gt;
The one big advantage to using interfaces is that a class can implement any number of them. You can still only&amp;nbsp;&lt;i&gt;extend&lt;/i&gt;&amp;nbsp;on parent class, but you can&amp;nbsp;&lt;i&gt;implement&lt;/i&gt;&amp;nbsp;an unlimited number of interfaces.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Magic Methods&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
There are a number of "&lt;a href="http://php.net/manual/en/language.oop5.magic.php" style="color: #274d85;" target="_blank"&gt;magic methods&lt;/a&gt;" that add an assortment to functionality to your classes. Note that PHP reserves the naming of methods prefixed with a double-underscore. Never name any of your methods with this naming scheme!&lt;br /&gt;
&lt;br /&gt;
Some magic methods to take note of are __call, __get, __set and __toString. These are the ones I find most useful.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Finality&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
You can now use the&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.final.php" style="color: #274d85;" target="_blank"&gt;&lt;i&gt;final&lt;/i&gt;&lt;/a&gt;&amp;nbsp;keyword to indicate that a method cannot be overridden by a child. You can also declare an entire class as&amp;nbsp;&lt;i&gt;final&lt;/i&gt;&amp;nbsp;which prevents it from having any children at all.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;The __autoload Function&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;Using a specially named function,&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.autoload.php" style="color: #274d85;" target="_blank"&gt;__autoload&lt;/a&gt;&amp;nbsp;(there's that double-underscore again!), you can automatically load object files when PHP encounters a class that hasn't been defined yet. Instead of large chunks of include's at the top of your scripts, you can define a simple autoload function to include them automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 20px; margin-left: 20px; margin-right: 20px; margin-top: 5px;"&gt;&lt;div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; margin-bottom: 2px;"&gt;PHP Code:&lt;/div&gt;&lt;div class="alt2" dir="ltr" style="background-attachment: initial; background-clip: initial; background-color: #e7e7e7; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(197, 209, 216); border-bottom-style: inset; border-bottom-width: 1px; border-color: initial; border-left-style: inset; border-left-width: 1px; border-right-style: inset; border-right-width: 1px; border-top-style: inset; border-top-width: 1px; color: black; height: 66px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: left; width: 640px;"&gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;span style="color: #007700;"&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;__autoload&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$class_name&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"./includes/classes/&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$class_name&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;.inc.php"&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;
}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;Note you can change the autoload function or even add multiple autoload functions using&amp;nbsp;&lt;a href="http://php.net/manual/en/function.spl-autoload-register.php" style="color: #274d85;" target="_blank"&gt;spl_autoload_register&lt;/a&gt;&amp;nbsp;and related functions.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: navy;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Standard PHP Library&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;PHP now includes a bunch of functionality to solve common problems in the so-named&amp;nbsp;&lt;a href="http://php.net/manual/en/ref.spl.php" style="color: #274d85;" target="_blank"&gt;SPL&lt;/a&gt;. There's a lot of cool stuff in there, check it out!&lt;br /&gt;
&lt;br /&gt;
For example, we can finally create classes that can be accessed like arrays by implementing the ArrayAccess interface. If we implement the&amp;nbsp;&lt;a href="http://php.net/manual/en/language.oop5.iterations.php" style="color: #274d85;" target="_blank"&gt;Iterator&lt;/a&gt;&amp;nbsp;interface, we can even let our classes work in situations like the foreach construct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: navy;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Miscellaneous Features&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Type Hinting&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
PHP5 introduces limited type hinting. This means you can enforce what kind of variables are passed to functions or class methods. The drawback is that (at this time), it will only work for classes or arrays -- so no other scalar types like integers or strings.&lt;br /&gt;
&lt;br /&gt;
To add a type hint to a parameter, you specify the name of the class before the $. Beware that when you specify a class name, the type will be satisfied with all of its subclasses as well.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 20px; margin-left: 20px; margin-right: 20px; margin-top: 5px;"&gt;&lt;div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; margin-bottom: 2px;"&gt;PHP Code:&lt;/div&gt;&lt;div class="alt2" dir="ltr" style="background-attachment: initial; background-clip: initial; background-color: #e7e7e7; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(197, 209, 216); border-bottom-style: inset; border-bottom-width: 1px; border-color: initial; border-left-style: inset; border-left-width: 1px; border-right-style: inset; border-right-width: 1px; border-top-style: inset; border-top-width: 1px; color: black; height: 66px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: left; width: 640px;"&gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;span style="color: #007700;"&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;echo_user&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;User&amp;nbsp;$user&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$user&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;getUsername&lt;/span&gt;&lt;span style="color: #007700;"&gt;();&lt;br /&gt;
}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;If the passed parameter is not User (or a subclass of User), then PHP will throw a fatal error.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Exceptions&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;PHP finally introduces&amp;nbsp;&lt;a href="http://php.net/manual/en/language.exceptions.php" style="color: #274d85;" target="_blank"&gt;exceptions&lt;/a&gt;! An exception is basically an error. By using an exception however, you gain more control the simple trigger_error notices we were stuck with before.&lt;br /&gt;
&lt;br /&gt;
An exception is just an object. When an error occurs, you&amp;nbsp;&lt;i&gt;throw&lt;/i&gt;&amp;nbsp;an exception. When an exception is thrown, the rest of the PHP code following will not be executed. When you are about to perform something "risky", surround your code with a&amp;nbsp;&lt;i&gt;try&lt;/i&gt;block. If an exception is thrown, then your following&amp;nbsp;&lt;i&gt;catch&lt;/i&gt;&amp;nbsp;block is there to intercept the error and handle it accordingly. If there is no catch block, a fatal error occurs.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 20px; margin-left: 20px; margin-right: 20px; margin-top: 5px;"&gt;&lt;div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; margin-bottom: 2px;"&gt;PHP Code:&lt;/div&gt;&lt;div class="alt2" dir="ltr" style="background-attachment: initial; background-clip: initial; background-color: #e7e7e7; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(197, 209, 216); border-bottom-style: inset; border-bottom-width: 1px; border-color: initial; border-left-style: inset; border-left-width: 1px; border-right-style: inset; border-right-width: 1px; border-top-style: inset; border-top-width: 1px; color: black; height: 130px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: left; width: 640px;"&gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;span style="color: #007700;"&gt;try&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$cache&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;write&lt;/span&gt;&lt;span style="color: #007700;"&gt;();&lt;br /&gt;
}&amp;nbsp;catch&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;AccessDeniedException&amp;nbsp;$e&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;die(&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'Could&amp;nbsp;not&amp;nbsp;write&amp;nbsp;the&amp;nbsp;cache,&amp;nbsp;access&amp;nbsp;denied.'&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;br /&gt;
}&amp;nbsp;catch&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Exception&amp;nbsp;$e&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;die(&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'An&amp;nbsp;unknown&amp;nbsp;error&amp;nbsp;occurred:&amp;nbsp;'&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$e&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;getMessage&lt;/span&gt;&lt;span style="color: #007700;"&gt;());&lt;br /&gt;
}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: small;"&gt;E_STRICT Error Level&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
There is a new error level defined as E_STRICT (value 2048). It is&amp;nbsp;&lt;i&gt;not&lt;/i&gt;&amp;nbsp;included in E_ALL, if you wish to use this new level you must specify it explicitly. E_STRICT will notify you when you use depreciated code. I suggest you enable this level so you can always stay on top of things.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: royalblue;"&gt;Foreach Construct and By-Reference Value&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
The foreach construct now lets you define the 'value' as a reference instead of a copy. Though I would suggest&amp;nbsp;&lt;i&gt;against&lt;/i&gt;&amp;nbsp;using this feature, as it can cause some problems if you aren't careful:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 20px; margin-left: 20px; margin-right: 20px; margin-top: 5px;"&gt;&lt;div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; margin-bottom: 2px;"&gt;PHP Code:&lt;/div&gt;&lt;div class="alt2" dir="ltr" style="background-attachment: initial; background-clip: initial; background-color: #e7e7e7; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(197, 209, 216); border-bottom-style: inset; border-bottom-width: 1px; border-color: initial; border-left-style: inset; border-left-width: 1px; border-right-style: inset; border-right-width: 1px; border-top-style: inset; border-top-width: 1px; color: black; height: 178px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: left; width: 640px;"&gt;&lt;code style="white-space: nowrap;"&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;span style="color: #007700;"&gt;foreach(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$array&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;as&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$k&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;gt;&amp;nbsp;&amp;amp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$v&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;Nice&amp;nbsp;and&amp;nbsp;easy,&amp;nbsp;no&amp;nbsp;working&amp;nbsp;with&amp;nbsp;$array[$k]&amp;nbsp;anymore&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$v&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;htmlentities&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$v&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;But&amp;nbsp;be&amp;nbsp;careful,&amp;nbsp;this&amp;nbsp;will&amp;nbsp;have&amp;nbsp;an&amp;nbsp;unexpected&amp;nbsp;result&amp;nbsp;because&lt;br /&gt;
//&amp;nbsp;$v&amp;nbsp;will&amp;nbsp;still&amp;nbsp;be&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;the&amp;nbsp;last&amp;nbsp;element&amp;nbsp;of&amp;nbsp;the&amp;nbsp;$array&amp;nbsp;array&lt;/span&gt;&lt;span style="color: #007700;"&gt;foreach(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$another_array&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;as&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$k&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$v&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;{&lt;br /&gt;
&lt;br /&gt;
}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="color: royalblue;"&gt;&lt;b&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;br /&gt;
New Functions&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
PHP5 introduces a slew of new functions. You can get a list of them from the&amp;nbsp;&lt;a href="http://php.net/manual/en/migration5.functions.php" style="color: #274d85;" target="_blank"&gt;PHP Manual&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: royalblue;"&gt;New Extensions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
PHP5 also introduces new default extensions.&lt;ul&gt;&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;&lt;a href="http://php.net/manual/en/ref.simplexml.php" style="color: #274d85;" target="_blank"&gt;SimpleXML&lt;/a&gt;&amp;nbsp;for easy processing of XML data&lt;/li&gt;
&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;&lt;a href="http://php.net/manual/en/ref.dom.php" style="color: #274d85;" target="_blank"&gt;DOM&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://php.net/manual/en/ref.xsl.php" style="color: #274d85;" target="_blank"&gt;XSL&lt;/a&gt;&amp;nbsp;extensions are available for a much improved XML-consuming experience. A breath of fresh air after using DOMXML for PHP4!&lt;/li&gt;
&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;&lt;a href="http://php.net/manual/en/ref.pdo.php" style="color: #274d85;" target="_blank"&gt;PDO&lt;/a&gt;&amp;nbsp;for working with databases. An excellent OO interface for interacting with your database.&lt;/li&gt;
&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;&lt;a href="http://php.net/manual/en/ref.hash.php" style="color: #274d85;" target="_blank"&gt;Hash&lt;/a&gt;&amp;nbsp;gives you access to a ton of hash functions if you need more then the usual md5 or sha1.&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="color: navy;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Compatibility Issues&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;The PHP manual has a list of changes that will affect&amp;nbsp;&lt;a href="http://php.net/manual/en/migration5.incompatible.php" style="color: #274d85;" target="_blank"&gt;backwards compatibility&lt;/a&gt;. You should definately read through that page, but here is are three issues I have found particularly tiresome:&lt;ul&gt;&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;array_merge() will now give you warnings if any of the parameters are not arrays. In PHP4, you could get away with merging non-arrays with arrays (and the items would just be added if they were say, a string). Of course it was bad practice to do this to being with, but it can cause headaches if you don't know about it.&lt;/li&gt;
&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;As discussed above, objects are now passed by references. If you want to copy a object, make sure to use the&amp;nbsp;&lt;i&gt;clone&lt;/i&gt;keyword.&lt;/li&gt;
&lt;li style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"&gt;get_*() now return names as they were defined. If a class was called MyTestClass, then get_class() will return that -- case sensitive! In PHP4, they were always returned in lowercase.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-7697923481701424776?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-13T21:47:23.628-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/10/differences-between-php4-and-php5.html</feedburner:origLink></item><item><title>Usability of RIA with Flex</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/ZPjES8SnzpY/usability-of-ria-with-flex.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 08 Sep 2011 23:13:02 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-7409758170129750224</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h4 class="western"&gt;User Interface Design Principles&lt;/h4&gt;&lt;a href="" name="TCISNTU"&gt;&lt;/a&gt;&lt;strong&gt;1. The Client Is Not The User&lt;/strong&gt;&lt;br /&gt;
The client may &lt;i&gt;think&lt;/i&gt; she knows what the user wants, but she cannot. This is because the client is not the user.&lt;br /&gt;
This brings me to the second principle:&lt;br /&gt;
&lt;a href="" name="DGTCWSTTUW"&gt;&lt;/a&gt;&lt;strong&gt;2. Don't Give The Client What She Thinks The User Wants&lt;/strong&gt;&lt;br /&gt;
If the client does not know what the user wants and you give her what she is asking for, you are doing her a disservice. You will ultimately be delivering an application that does not meet user's needs. Your client may initially be happy that you have given her exactly what she asked for but will she remain happy when the product is rejected by users?&lt;br /&gt;
I have seen too many designers and developers who are aware of these two principles but proceed to reach the wrong conclusion from it. Namely, that they know the user better. Which brings us to our next principle, which is, simply:  &lt;br /&gt;
&lt;a href="" name="YDNKWYUW"&gt;&lt;/a&gt;&lt;strong&gt;3. You Do Not Know What Your User Wants&lt;/strong&gt;&lt;br /&gt;
You may be a user interface designer or developer with many years of experience but you do not know what users want. Which users? Those specific users who will be using the current application that you are building. Why? Because every application is unique. You may have built similar applications but, unless you have built exactly this application before, you do not know what the users of this application want.  &lt;br /&gt;
So, who &lt;em&gt;does&lt;/em&gt; know what your users want?  &lt;br /&gt;
&lt;a href="" name="OUKWUW"&gt;&lt;/a&gt;&lt;strong&gt;4. Only Users Know What Users Want&lt;/strong&gt;&lt;br /&gt;
It's a basic concept but one that is alien to much of our industry. Only users of your application will know what works and what doesn't. It's surreal that, given this, most of us in our industry go out of our ways to delay asking them what they think of our applications. This brings me to the most imporant principle of all:&lt;br /&gt;
&lt;a href="" name="TETOTTA"&gt;&lt;/a&gt;&lt;strong&gt;5. Test Early, Test Often, Then Test Again&lt;/strong&gt;&lt;br /&gt;
Usability testing is not rocket science. In fact, it's quite a simple recipe:  &lt;br /&gt;
Ingredients:  &lt;br /&gt;
&lt;ol type="i"&gt;&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;Two rooms   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;One or more representative users   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;A computer running your  application   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;A usability tester   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;A video camera (no tape)   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;A TV screen   &lt;/li&gt;
&lt;/ol&gt;Take two rooms and place a computer running your application in one of them. In that room, place a representative user and a usability tester who will ask the user to perform various tasks in your application. Place a camera in the room to relay your user's actions to your design/development team who should be watching from the second room. (Ideally, having the rooms next to each other means that you don't have to run too much cable between the two but you can just as easily use wireless technologies or even broadcast the feed over the Internet to a development team across the globe.)&lt;br /&gt;
Leave to simmer then repeat.&lt;br /&gt;
Notice that you do not even need to record the test. If you do, chances are those tapes will become paperweights like most artifacts that are created during development. Remember: Agile is good.  &lt;br /&gt;
Doing usability testing does not involve a large upfront financial investment. You can put together the above setup for around $1,000 these days. What it does involve, however, is buy-in to a User-Centered Product Development (UCPD) approach from the highest levels at both your and your client's organization.  &lt;br /&gt;
Following a UCPD approach involves capturing measureable Usability Requirements alongside your Functional Requirements. You will have to set aside time to carry out usability testing at every iteration in your development process. You cannot do this without a budget. And you won't have a budget unless you have buy-in at the highest levels. &lt;br /&gt;
The above principles are perhaps the most important ones as they will determine your development process and your development process will largely decide whether your project succeeds (is accepted by your users) or fails (is rejected by your users.)  &lt;br /&gt;
Alongside these process-related principles are design principles. These do not, in any way, replace testing. They are intended to give you a good starting point when designing your user interface, before you go to your users and say, "What do you think?"  &lt;br /&gt;
&lt;a href="" name="TOL"&gt;&lt;/a&gt;&lt;strong&gt;6. Talk One Language&lt;/strong&gt;&lt;br /&gt;
There should only ever be a single term or phrase used to refer to any given item in the application. An item here may refer to a concept, a business function or task or even a widget or individual interface element. You will find that the use of a metaphor for the project, as advocated by eXtreme Programming (XP), will ease this task tremendously.&lt;br /&gt;
&lt;a href="" name="RUE"&gt;&lt;/a&gt;&lt;strong&gt;7. Respect User Effort&lt;/strong&gt;&lt;br /&gt;
Try to limit the user's physical toil while using the application. &lt;a href="http://www.rsi.org.uk/index.asp"&gt;Repetitive Strain Injuries (RSI)&lt;/a&gt; are a fact of life today and we, as application designers, have to accept responsibility for the ergonomics of our applications. &lt;br /&gt;
&lt;a href="" name="MDD"&gt;&lt;/a&gt;&lt;strong&gt;8. Make difficult decisions&lt;/strong&gt;&lt;br /&gt;
It is your job as the user interface designer to layer the user interface and make important decisions about its organization. Don't leave these decisions to the user just because it makes your life easier. If your application has a huge preferences section, treat this as a Design Smell and review the design to see if you have left decisions that you can make to the user.&lt;br /&gt;
&lt;a href="" name="LTUW"&gt;&lt;/a&gt;&lt;strong&gt;9. Let The User Work&lt;/strong&gt;&lt;br /&gt;
Users must be able to perform their most frequent, most important tasks without any resistance. For an SMS Messaging application, for example, this would include reading, replying to and forwarding messages and quickly checking the various mailboxes.  &lt;br /&gt;
&lt;a href="" name="PDS"&gt;&lt;/a&gt;&lt;strong&gt;10. Prevent, Don't Scold&lt;/strong&gt;&lt;br /&gt;
Whenever possible the UI should prevent the user from making a mistake instead of alerting the user to the mistake after the fact. This must be achieved without the UI getting in the way of the user.&lt;br /&gt;
&lt;a href="" name="GSF"&gt;&lt;/a&gt;&lt;strong&gt;11. Give Sufficient Feedback&lt;/strong&gt;&lt;br /&gt;
The UI should give the user sufficient feedback for user actions. (This ties in nicely with Steve Krugs "Don't Make Me Think" philosophy: The user should never have to think "did that work?") Related to &lt;em&gt;Don't Lose The User&lt;/em&gt;.  &lt;br /&gt;
&lt;a href="" name="SDT"&gt;&lt;/a&gt;&lt;strong&gt;12. Show, Don't Tell&lt;/strong&gt;&lt;br /&gt;
Although this may seem to contradict the Give Sufficient Feedback principle, it is actually meant to compliment it. Whenever possible, meaningful visual cues (when appropriate to the audience) should be chosen instead of lengthy textual descriptions. This can also pertain to actually teaching a user to do something in an application by showing them.&lt;br /&gt;
&lt;a href="" name="DLTU"&gt;&lt;/a&gt;&lt;strong&gt;13. Don't Lose The User&lt;/strong&gt;&lt;br /&gt;
The UI should protect the user's sense of spatial positioning. The user should never feel "lost" within the application.&lt;br /&gt;
&lt;a href="" name="DSWYCD"&gt;&lt;/a&gt;&lt;strong&gt;14. Don't Sell What You Can't Deliver&lt;/strong&gt;&lt;br /&gt;
Users must not be given Graphical User Interface (GUI) expectations that cannot be met (or can only be partially met) within a Web User Interface (WUI). Whenever OS or GUI expectations are set, they must be fully met. That said, the application must try and meet OS expectations as much as possible, especially for ergonomic features such as keyboard shortcuts and navigation but also for expected auxiliary helpers such as tooltips.&lt;br /&gt;
Don't Sell What You Can't Deliver is the main principle behind why Adobe chose to create a new component style called Halo in Flash and Flex instead of trying unsuccessfully to emulate either the Windows XP or Mac OS X look and feel.&lt;br /&gt;
&lt;a href="" name="DKTW"&gt;&lt;/a&gt;&lt;strong&gt;15. Don't Keep Them Waiting&lt;/strong&gt;&lt;br /&gt;
The application must perform fast enough to be considered usable within the given engineering limits for the application.&lt;br /&gt;
&lt;a href="" name="IUPG"&gt;&lt;/a&gt;&lt;strong&gt;16. Innocent Until Proven Guilty&lt;/strong&gt;&lt;br /&gt;
The user should be warned about a validation error on a control only if they have had a chance to interact with that control. (In other words, you should not perform validation on controls that are in their initial state and initially display a form full of validation errors.) Similarly, resetting a form should remove all validation errors.&lt;br /&gt;
&lt;a href="" name="UATA"&gt;&lt;/a&gt;&lt;strong&gt;17. Usability Approach to Accessibility&lt;/strong&gt;&lt;br /&gt;
There is a trend I am noticing in our field that I find very worrisome and it concerns accessibility. Many people appear to be on a quest for the Magic Button of Accesibility (MBA). This is how an MBA works in an ideal world:  &lt;br /&gt;
You gather usability requirements for your application for a given target audience. This target audience involves people with good eyesight, hearing, and motor control. Based on the usability requirements for this specific audience, you expand resources in designing a good user experience for this specific audience. You then spend further resources in developing your application, going back to users within this specific audience to get their feedback and to alter your design accordingly. Finally, right before you deliver your application, you press the Magic Button of Accessibility.  &lt;br /&gt;
The Magic Button Accessibility magically makes the experience of your application as good for various other audiences. These include people who have various levels of sight, hearing, and motor control. Isn't it amazing that the MBA can transform a carefully crafted experience for a single audience into equally pleasurable experiences for many other audiences.  &lt;br /&gt;
Unfortunately, the Magic Button of Accessibility doesn't exist because it &lt;i&gt;cannot&lt;/i&gt; exist.  &lt;br /&gt;
The MBA is an extreme example of the check-the-checkbox mentality to accessibility that is pravalent in our field today. I call this &lt;i&gt;Checkbox Accessibility&lt;/i&gt;: For the most part, we do not really care what sort of experience users with accessibility requirements will have with our applications as long as we can check a checkbox on some form that says that our application is compliant with a set of rules.  &lt;br /&gt;
If we can run our applications through a program that checks for this, all the better. After all, software is cheap compared to devoting extra time to design and develop an equally good experience for various other audiences. Checkbox Accessiblity is head-and-shoulders better than no accessibility but it does not guarantee a good experience for users with accessibility requirements.&lt;br /&gt;
The other approach to accessibiltiy is to see it as usability with different audiences. In other words, you cannot make your application truly accessible for users with disabilities without &lt;i&gt;designing&lt;/i&gt; for those users. I call this the &lt;i&gt;Usability Approach to Accessibility&lt;/i&gt;.  &lt;br /&gt;
Having a usability approach to accessibility means that you have to gather usability requirements for disabled users just like you do for users without disabilities. You have to usability test with disabled users. And you have to realize that "disabled users" doesn't refer to a single audience but to multiple audiences, including those with accessibility requirements in sight, hearing and motor function.  &lt;br /&gt;
Of course, just like usability with an audience of non-disabled users, usability for disabled users costs time and money and will require buy-in at the highest levels of your organization. If you are serious about accessibility, however, anything less is just not good enough.&lt;br /&gt;
These are general points of advice that can apply to any application. Based on these overall guidelines, the following are examples of high-level design decisions that were taken and applied in Opal. Keep in mind that Opal was developed in Flash MX but the issues are the same regardless of whether you are building an application in MTASC/SWFMill/FlashDevelop, Flash 8, Flash 9, Flex 1.5 or Flex 2. Each of those tools and technologies provides different features, components, programming models and development workflows but the end result, regardless of which technologies are used, is always evaluated by your users.  &lt;br /&gt;
&lt;h2 class="western"&gt;Principles applied: examples&lt;/h2&gt;&lt;img align="RIGHT" alt="The SMS Character Count gives users sufficient feedback and the message textbox allows users to see a whole SMS message without scrolling." border="0" height="179" name="graphics1" src="http://aralbalkan.com/images/sms_character_count.gif" width="182" /&gt;&lt;strong&gt;Respect User Effort: eliminating scrolling &lt;/strong&gt; &lt;br /&gt;
The message preview textbox displays a full SMS message without scrolling. It meant that sacrifices had to be made with some of the other form elements on the Message Tabs. Reading an SMS message is both an important and frequently-performed task and so the other sacrifices were justified (also see Make difficult decisions.)&lt;br /&gt;
&lt;strong&gt;Give Sufficient Feedback: SMS character count&lt;/strong&gt;&lt;br /&gt;
A custom SMS character count widget shows users exactly how many characters they have left before they need to send a message as two or more SMS messages. This is an especially important piece of information for users as they are charged for each SMS message sent.&lt;br /&gt;
&lt;strong&gt;Prevent Don't Scold: Form validations&lt;/strong&gt;&lt;br /&gt;
All forms implement client-side validation. Submit buttons (such as "Send Message" or "Add Contact") gray out until the form passes client-side validation. This does not remove the need for server-side validation and all form submissions are validated server-side for correctness and security before being processed. Client-side validation exists solely to improve the user experience and does not provide any security whatsoever.  &lt;br /&gt;
&lt;div align="CENTER"&gt;&lt;img align="BOTTOM" alt="The Send Business Card screen doesn't let users hit the send button before they have filled in all required fields." border="0" height="216" name="graphics2" src="http://aralbalkan.com/images/send_business_card.gif" width="355" /&gt;&lt;/div&gt;&lt;strong&gt;Let The User Work: Mailbox Tabs and Message Action Tabs&lt;/strong&gt;&lt;br /&gt;
&lt;img align="LEFT" alt="The Mailbox Tabs allow users to quickly switch mailboxes." border="0" height="89" hspace="10" name="graphics3" src="http://aralbalkan.com/images/mailbox_tabs.gif" width="341" /&gt;A composite tab-based interface exposes the critical, frequent tasks to users. Mailbox Tabs give users single-click access to their mailboxes. They also expose context-sensitive message actions for each mailbox. Users can immediately see the actions that they can perform on a message in a given mailbox tab.  &lt;br /&gt;
Implementing a context-sensitive menu that hides possible actions until it is triggered would have ranked at the opposite end of the usability spectrum and been ignored by most new users.  &lt;br /&gt;
&lt;strong&gt;Show, Don't Tell: Menu Bar and Tool Bar as teaching methods for migrating Outlook users. &lt;/strong&gt; &lt;br /&gt;
&lt;img align="LEFT" alt="Menu Bar and Tool Bar allow Outlook users to migrate easily to Opal." border="0" height="122" hspace="10" name="graphics4" src="http://aralbalkan.com/images/menu.gif" width="196" /&gt;A menu bar and tool bar remind users of the ones in Outlook without creating operating system specific expectations.  &lt;br /&gt;
The menu and tool bars implement Show, Don't Tell.  &lt;br /&gt;
When an Outlook user first changes to a given mailbox using the menu or tool bar, the Mailbox tab animates to the chosen mail box, thereby showing the user that they could also have clicked on the tab (although the tab control is a well-known GUI component in its own right.) The same goes for when the user selects a Message Action (eg. Reply).  &lt;br /&gt;
&lt;strong&gt;Don't Lose The User and Don't Sell What You Can't Deliver: Screen-based RIAs vs. Multiple-Window-based RIAs. &lt;/strong&gt; &lt;br /&gt;
&lt;img align="LEFT" alt="Opal uses a screen-based approach instead of a full window-based one so as not to confuse users with unfulfilled operating system expectations." border="0" height="171" hspace="10" name="graphics5" src="http://aralbalkan.com/images/screen-based.gif" width="283" /&gt;It is very important to note the differences between Graphical User Interfaces (as used by desktop applications such as Outlook) and Web User Interfaces (as used by Rich Internet Applications such as Opal). It is equally important to manage client's expectations as to the limitations of Web User Interfaces, even those termed "Rich" and developed using Flash.  &lt;br /&gt;
The greatest difference between a WUI and a GUI is usually the most overlooked: WUI applications run from within a GUI application which, in turn, runs inside a window-based operating system. Past usability studies have shown that especially beginning users have problems with the concept of multiple windows, preferring usually to keep a single window up at a time. Even in multitasking operating systems like Windows XP or OS X, novice users sometimes prefer to start up a single application, shut it down and start another application and so on. The perceived complexity of the system is heightened when the user is confronted with an interface (an RIA such as Opal) within a GUI application (the web browser) that itself contains windows.  &lt;br /&gt;
Firstly, we rob our novice user of the comforts of his single window existence. Secondly, the new windowing system works in a different way and contains its own rules and limits. It is thus important to implement a screen-based interface in RIAs so that you &lt;em&gt;Don't Lose The User&lt;/em&gt; and &lt;em&gt;Don't Sell What You Can't Deliver.&lt;/em&gt;&lt;br /&gt;
Even if an RIA developer takes pains to develop a Multi-Window Interface that mimics a certain dominant OS, the interface is still being presented to the user in the &lt;em&gt;document&lt;/em&gt; area of a GUI application (the web browser). This is contrary to OS expectations wherein users expect not to see windows within documents. Perhaps this is one area where application browsers such as Central will have an impact on user expectations. It remains, however, that the only way a multi-window interface can provide a high-level of usability in an RIA is if the application can run in its own OS window and not as a document within a web browser and thus access the windowing abilities of whatever OS it happens to be running on. As this is currently not a possibility with Flash, we decided to go with a screen-based system in the application.  &lt;br /&gt;
Although modal pop-ups are sparingly used due to issues of screen real-estate and Outlook migration expectations, users are visually shown that these dialog boxes are modal screens via the graying out of lower screens. Although this removes the OS expectations surrounding non-modal multiple-window interfaces, the graphic similarity of the dialog screens to windows still leads certain users in testing to attempt to move windows around.  &lt;br /&gt;
&lt;strong&gt;Don't Keep Them Waiting: The name of the game is performance. &lt;/strong&gt; &lt;br /&gt;
If there was one issue we kept running into during development, it was performance. Flash is not the fastest kid on the block and it is possible to run into issues when client's expectations are not managed as to the limitations of RIAs. Although RIAs can recreate a lot of the desktop application experience from within a web application, there are limits.  &lt;br /&gt;
Flash 9 and ActionScript 3 have made great strides in performance and it is important to keep in mind that this project was being published for the Flash 6 player.  &lt;br /&gt;
&lt;img align="RIGHT" alt="A detail from the custom Grid component." border="0" height="81" hspace="10" name="graphics6" src="http://aralbalkan.com/images/grid_detail.gif" width="284" /&gt;One issue, for example, was that the speed of the setSize() method on the Macromedia DRK Data Grid was resulting in unacceptable redraw times when the application was resized. This resulted in a very risky two-weeks in which I wrote a completely new Data Grid component that implemented the DRK Data Grid interface and could be plug-and-play replaced into application. The resulting Data Grid offered a 10x performance boost and brought redraw rates back within acceptable limits.  &lt;br /&gt;
I hope that this article has challenged how you think about usability and accessibility and that you will find it to be a useful resource in designing and developing web applications. As always, I value your feedback so please feel free to leave a comment and share your thoughts.  &lt;br /&gt;
&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h1 class="western"&gt;Usability for Rich Internet Applications&lt;/h1&gt;&lt;div dir="LTR" id="comment_invite_top"&gt;After struggling for years to design Internet applications around the limitations of HTML, I have been very excited by the recent release of a range of Internet applications with increased richness and interactivity.&lt;/div&gt;&lt;div style="margin-left: 0.39in; margin-right: 0.39in;"&gt;The key challenge in designing part-page updates is making sure people see them.&lt;/div&gt;Rich Internet applications (RIAs) can provide opportunities to design much better user experiences. They can be faster, more engaging and much more usable. However, this improvement is not without its downside—RIAs are much more difficult to design than the previous generation of page-based applications. The richer interaction requires a better understanding of users and of human-computer interaction (HCI). Although there is a lot of HCI material and research available, it can be difficult to determine how it applies to this new environment.&lt;br /&gt;
In this article, I provide some practical tips for designing usable RIAs, based on fundamental principles of HCI.&lt;br /&gt;
&lt;h2 class="western"&gt;What’s an RIA?&lt;/h2&gt;According to the Wikipedia, &lt;a href="http://en.wikipedia.org/wiki/Rich_Internet_Application"&gt;RIAs&lt;/a&gt; are “a cross between Web applications and traditional desktop applications, transferring some of the processing to the client end.”&lt;br /&gt;
The key difference between RIAs and other Internet applications is the amount of interaction in the interface. In a traditional page-based Internet application, interaction is limited to a small set of standard controls such as checkboxes, radio buttons, form fields and buttons. This severely limits our ability to create usable and engaging applications, and most Internet applications have been clumsier and more difficult to use than their desktop counterparts. An RIA can use a wider (and hopefully better) range of controls to improve users’ interaction with the interface, allowing efficient interactions, better error management, feedback and overall user experience.&lt;br /&gt;
Some of my favorite sites with RIA-style interfaces include:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://maps.google.com/"&gt;Google  Maps&lt;/a&gt;   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://basecamphq.com/"&gt;Basecamp&lt;/a&gt;   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://backpackit.com/"&gt;Backpack&lt;/a&gt;   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;a href="http://odeo.com/"&gt;Odeo&lt;/a&gt;   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gap.com/"&gt;Gap&lt;/a&gt;   &lt;/li&gt;
&lt;/ul&gt;Many are built with Flash or using Ajax techniques.&lt;br /&gt;
The key features of these applications include:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;The user interacts directly with  page elements (inline editing, drag-and-drop, panning a map)   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;Part of a page is updated (instead  of reloading)   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;More detailed information is  available on the same page (instead of on a new page)   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Feedback, confirmation and error messages are provided within  the page   &lt;/li&gt;
&lt;/ul&gt;These rich features are also those that provide the most challenge for designers who wish to ensure applications are highly usable.&lt;br /&gt;
&lt;h2 class="western"&gt;Challenge #1: Deciding How Much Richness to Add&lt;/h2&gt;When designing RIAs, it is tempting to design many new features that add a lot of richness. Don’t give in to this temptation! Regular folks who have been using the Internet for a number of years are comfortable with the existing page-based model and limited interactivity, as clumsy as it may appear to designers and developers. It takes time for people to adapt to new approaches. It will be some time before conventions emerge and users are comfortable with the new generation of applications. Go slowly, adding richness where it significantly improves usability, and relying on traditional models where these better suit your user group.&lt;br /&gt;
Good user research (and a focus on users throughout the design process) and regular usability testing will help you determine how much richness is appropriate at a point in time.&lt;br /&gt;
&lt;h2 class="western"&gt;Challenge #2: Interactive Page Elements&lt;/h2&gt;One way to add richness to your application is to allow users to directly interact with page elements: editing text inline, dragging and dropping graphic elements, panning a map.&lt;br /&gt;
A primary challenge is to communicate what can be done with page elements and how to use new controls. People must be able to identify that a control exists and easily determine how to use it.&lt;br /&gt;
In &lt;cite&gt;The Design of Everyday Things&lt;/cite&gt;, Don Norman popularized the idea of &lt;a href="http://jnd.org/dn.mss/affordance_conv.html"&gt;perceived affordance&lt;/a&gt; (the perceived and actual properties of a thing that determine just how the thing could possibly be used). For example, the original 3D button has great perceived affordance. By highlighting the top and shadowing the bottom, people perceive it as popping out of the screen and easily understand that it can be pushed by clicking.&lt;br /&gt;
One way is to use controls that mimic things people are familiar with from the physical world, such as the slider on &lt;a href="http://www.fidelitylabs.com/pf/mortgageadvisor/index.shtml"&gt;Fidelity Labs Mortgage Search&lt;/a&gt;.&lt;br /&gt;
&lt;img align="BOTTOM" alt="a slider" border="1" height="86" name="graphics7" src="http://www.digital-web.com/images/articles/usability_for_ria_slider.jpg" width="198" /&gt;&lt;br /&gt;
Another is to change the appearance of the element or show the controls when the mouse hovers over it, showing what can be done without cluttering the interface. Backpack uses this to indicate elements that can be edited or deleted.&lt;br /&gt;
&lt;img align="BOTTOM" alt="hover effects in backpack" border="1" height="147" name="graphics8" src="http://www.digital-web.com/images/articles/usability_for_ria_backpack_hover.jpg" width="394" /&gt;&lt;br /&gt;
In addition to ensuring your controls have good perceived affordance, you should:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;Remember how valuable a  demonstration can be. In the initial stages of a new interface, use  a small in-page tutorial video to show the interaction.   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Ensure controls and interaction models are used consistently  throughout the interface and are similar to other sites that your  users visit. This helps people easily learn what to do and build on  previous experiences.   &lt;/li&gt;
&lt;/ul&gt;&lt;h2 class="western"&gt;Challenge #3: Refreshing Part of the Page&lt;/h2&gt;There is significant advantage in updating part of the page instead of refreshing it or opening a new page. It allows us to create faster applications, improve feedback to the user and manage errors better. Error management and feedback are critical to improving usability, but it’s particularly difficult to do with the page-based model. Users have become accustomed to taking an action (such as clicking a link), waiting for the action to complete, and checking the result of the action.&lt;br /&gt;
The key challenge in designing part-page updates is making sure people see them. We can use what we know about visual attention and visual processing to ensure people will see that part of the page has been updated:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;Visual attention is attracted by  movement and high color contrast (that’s why bright, animated  banner ads are so distracting—our eyes are constantly pulled  toward them). We can use this to our advantage and draw the eye to  the updated part of the page.   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0in;"&gt;When we take an action such as  clicking a button, our eyes remain fixed on that point for a short  time, then release to look somewhere else. By making sure the change  occurs quickly and as close as possible to where they are looking,  we can ensure the eye is drawn to the appropriate place.   &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Visual attention can only be focused on one thing at a time.  Make one update at a time, and don’t use high-contrast, moving  images elsewhere on the page. 37 Signals were one of the first to do  this, popularizing the &lt;a href="http://www.37signals.com/svn/archives/000558.php"&gt;yellow  fade technique&lt;/a&gt;. Odeo provides effective feedback by using color,  movement and placing it right where the user is looking:   &lt;/li&gt;
&lt;/ul&gt;&lt;img align="BOTTOM" alt="button in odeo" border="1" height="119" name="graphics9" src="http://www.digital-web.com/images/articles/usability_for_ria_odeo_feedback.jpg" width="253" /&gt;&lt;br /&gt;
&lt;h2 class="western"&gt;Challenge #4: Breaking the Page Model&lt;/h2&gt;As we interact with the world, we develop a mental model of how things work. Most users have developed a mental model of the Web based on pages—every click takes you to a new page. Clicking on the back button takes you to the previous page. This is a strong mental model, and is reasonably accurate for the majority of content-rich sites. Users will continue to apply their page-based mental model to RIAs unless they can clearly identify that the RIA uses a different model.&lt;br /&gt;
The first part of this challenge is to think very hard about where to use individual pages and where to use in-page richness. Think about the entire interaction of your application and break it up appropriately. Don’t try to put everything into one “page” just because you can.&lt;br /&gt;
One factor is the likely use of the back button. Consider when people may need to go “back”—this will give you clues about where to use pages. Don’t disable the back button, reducing users’ control of their situation.&lt;br /&gt;
Another challenge is how to visually express the difference between pages and in-page changes. You may need to design different visual navigation models so people can identify when they are getting a new page. It is likely that some new navigation methods will emerge over time.&lt;br /&gt;
&lt;a href="http://www.google.com/reader/"&gt;Google Reader&lt;/a&gt; manages pages very poorly. The buttons in its traditional top navigation bar (Home, Your Subscriptions, etc.) imply navigation to individual pages, but actually change the content in the body of the page. When I first used Google Reader, I frequently tried to use the back button to return to the home page but was thrown right out to the last page I visited before reaching Google Reader. This was so frustrating, I stopped using it.&lt;br /&gt;
&lt;img align="BOTTOM" alt="google reader" border="1" height="352" name="graphics10" src="http://www.digital-web.com/images/articles/usability_for_ria_reader.jpg" width="643" /&gt;&lt;br /&gt;
In contrast, Yahoo! News manages pages and in-page updates well. It has traditional top tabbed navigation to individual pages and in-page panels that change based on the news source:&lt;br /&gt;
&lt;img align="BOTTOM" alt="yahoo's top navigation" border="1" height="99" name="graphics11" src="http://www.digital-web.com/images/articles/usability_for_ria_yahoo_topnav.jpg" width="465" /&gt;&lt;br /&gt;
&lt;img align="BOTTOM" alt="yahoo's inpage navigation" border="1" height="214" name="graphics12" src="http://www.digital-web.com/images/articles/usability_for_ria_yahoo_inpage.jpg" width="570" /&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h2 class="western"&gt;Review Usability Best Practices&lt;/h2&gt;Don’t forget the usability basics.&lt;a href="http://www.useit.com/papers/heuristic/heuristic_list.html"&gt; Jakob Nielsen’s Ten Usability Heuristics&lt;/a&gt; are as relevant now as they were in 1999. I stress this because I looked at the Flex showcase recently, and it looks like many of the applications are not built with these best practices in mind.  &lt;br /&gt;
&lt;h3 class="western"&gt;1. Visibility of system status (Feedback)&lt;/h3&gt;The system should always keep users informed about what is going on, through appropriate feedback within reasonable time.&lt;br /&gt;
&lt;img align="BOTTOM" alt="feedback_button" border="0" height="101" name="graphics13" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/feedback_button.png" width="315" /&gt;&lt;br /&gt;
&lt;strong&gt;1.0 BaseCamp by 37signals&lt;/strong&gt;&lt;br /&gt;
The upload button is enabled, until clicked. Then it is replaced with a progress indicator until the file has finished uploading&lt;br /&gt;
&lt;img align="BOTTOM" alt="feedback_progress" border="0" height="96" name="graphics14" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/feedback_progress.png" width="321" /&gt;&lt;br /&gt;
&lt;strong&gt;1.1 Picnik &lt;/strong&gt;&lt;br /&gt;
Progress message and indicator shows while the application loads&lt;br /&gt;
&lt;img align="BOTTOM" alt="feedback_message" border="0" height="104" name="graphics15" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/feedback_message.png" width="320" /&gt;&lt;br /&gt;
&lt;strong&gt;1.2 Tick &lt;/strong&gt;&lt;br /&gt;
A feedback message is displayed when an action is performed&lt;br /&gt;
&lt;img align="BOTTOM" alt="feedback_inline" border="0" height="89" name="graphics16" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/feedback_inline.png" width="326" /&gt;&lt;br /&gt;
&lt;strong&gt;1.3 Windows Live Account&lt;/strong&gt;&lt;br /&gt;
Password strength is shown as the password is entered&lt;br /&gt;
&lt;h3 class="western"&gt;2. Match between system and the real world (METAPHOR)&lt;/h3&gt;The system should speak the users’ language, with words, phrases and concepts familiar to the user, rather than system-oriented terms. Follow real-world conventions, making information appear in a natural and logical order.&lt;br /&gt;
&lt;img align="BOTTOM" alt="metaphor_library" border="0" height="246" name="graphics17" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/metaphor_library.png" width="209" /&gt;&lt;br /&gt;
&lt;strong&gt;2.0 iTunes&lt;/strong&gt;&lt;br /&gt;
Organized as a library that contains your media library: music, movies, shows, audibooks. Beneath the Library is the Store where you can buy more media to put in your Library.&lt;br /&gt;
&lt;img align="BOTTOM" alt="metaphor_mindmap" border="0" height="234" name="graphics18" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/metaphor_mindmap.png" width="390" /&gt;&lt;br /&gt;
&lt;strong&gt;2.1 Mindomo&lt;/strong&gt;&lt;br /&gt;
The branches and hierarchy of a mind map can be easily reorganized visually in a non-linear manner. An outline would never work, but this matches the paradigm exactly.&lt;br /&gt;
&lt;h3 class="western" style="page-break-before: always;"&gt;3. User control and freedom (NAVIGATION)&lt;/h3&gt;Users often choose system functions by mistake and will need a clearly marked “emergency exit” to leave the unwanted state without having to go through an extended dialogue. Supports undo and redo and a clear way to navigate.&lt;br /&gt;
&lt;img align="BOTTOM" alt="navigation_search" border="0" height="216" name="graphics19" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/navigation_search.png" width="316" /&gt;&lt;br /&gt;
&lt;strong&gt;3.0 CollabFinder&lt;/strong&gt;&lt;br /&gt;
Search is easy to open, enter info, execute or cancel.&lt;br /&gt;
&lt;img align="BOTTOM" alt="navigation_selected" border="0" height="181" name="graphics20" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/navigation_selected.png" width="329" /&gt;&lt;br /&gt;
&lt;strong&gt;3.1 Wufoo&lt;/strong&gt;&lt;br /&gt;
Clearly marks where the person is and where they can go by showing the selection in each menu&lt;br /&gt;
&lt;img align="BOTTOM" alt="navigation_cell_editor" border="0" height="89" name="graphics21" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/navigation_cell_editor.png" width="296" /&gt;&lt;br /&gt;
&lt;strong&gt;3.2 Pages (Apple’s Word Processing Product)&lt;/strong&gt;&lt;br /&gt;
Cell editing shows row and column ids, and the cells used in the equation. The equation can be saved or canceled.&lt;br /&gt;
&lt;img align="BOTTOM" alt="navigation_undo_redo" border="0" height="141" name="graphics22" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/navigation_undo_redo.png" width="329" /&gt;&lt;br /&gt;
&lt;strong&gt;3.3 Balsamiq &lt;/strong&gt;&lt;br /&gt;
Undo and Redo buttons are available in the toolbar, and can also be accessed with the standard keyboard shortcuts&lt;br /&gt;
&lt;h3 class="western"&gt;4. Consistency and standards (CONSISTENCY)&lt;/h3&gt;Users should not have to wonder whether different words, situations, or actions mean the same thing. Follow platform conventions.&lt;br /&gt;
&lt;img align="BOTTOM" alt="consistency_naming" border="0" height="177" name="graphics23" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/consistency_naming.png" width="191" /&gt;&lt;br /&gt;
&lt;strong&gt;4.0 Gmail&lt;/strong&gt;&lt;br /&gt;
When Gmail was designed, they based the organizational folders on the same ones used in client email applications: Inbox, Drafts, Sent Mail.&lt;br /&gt;
&lt;img align="BOTTOM" alt="consistency_toolbars" border="0" height="233" name="graphics24" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/consistency_toolbars.png" width="419" /&gt;&lt;br /&gt;
&lt;strong&gt;4.1 Microsoft Office&lt;/strong&gt;&lt;br /&gt;
Word, Excel, and PowerPoint all use the same style toolbar with the same primary menu options: Home, Insert, Page Layout… Consistency results in efficiency and perceived intuitiveness.&lt;br /&gt;
&lt;h3 class="western" style="page-break-before: always;"&gt;5. Error prevention (PREVENTION)&lt;/h3&gt;Even better than good error messages is a careful design, which prevents a problem from occurring in the first place.  &lt;br /&gt;
&lt;img align="BOTTOM" alt="prevention_disable" border="0" height="97" name="graphics25" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/prevention_disable.png" width="326" /&gt;&lt;br /&gt;
&lt;strong&gt;5.0 Yammer&lt;/strong&gt;&lt;br /&gt;
Disables the update button after it is clicked, so the person cannot update the post twice by accident&lt;br /&gt;
&lt;img align="BOTTOM" alt="prevention_buttons" border="0" height="114" name="graphics26" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/prevention_buttons.png" width="321" /&gt;&lt;br /&gt;
&lt;strong&gt;5.1 Example from “Web form Design:Filling in the Blanks” by Luke W.&lt;/strong&gt;&lt;br /&gt;
Make the primary action prominent with a larger click area. Cancel and secondary actions are just shown as links&lt;br /&gt;
&lt;img align="BOTTOM" alt="prevention_auto_suggest" border="0" height="150" name="graphics27" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/prevention_auto_suggest.png" width="322" /&gt;&lt;br /&gt;
&lt;strong&gt;5.2 Google Auto Recommend&lt;/strong&gt;&lt;br /&gt;
The auto recommend feature cuts down on mis-spellings&lt;br /&gt;
&lt;img align="BOTTOM" alt="prevention_focus" border="0" height="50" name="graphics28" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/prevention_focus.png" width="328" /&gt;&lt;br /&gt;
&lt;strong&gt;5.2 Wikpedia&lt;/strong&gt;&lt;br /&gt;
Auto focus on input prevents a common source of frustration, typing only to realize nothing is displayed because the field did not have focus&lt;br /&gt;
&lt;h3 class="western" style="page-break-before: always;"&gt;6. Recognition rather than recall (MEMORY)&lt;/h3&gt;Minimize the user’s memory load. Make objects, actions, and options visible. The user should not have to remember information from one part of the dialogue to another. Instructions for use of the system should be visible or easily retrievable whenever appropriate.  &lt;br /&gt;
&lt;img align="BOTTOM" alt="memory_type_ahead" border="0" height="254" name="graphics29" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/memory_type_ahead.png" width="325" /&gt;&lt;br /&gt;
&lt;strong&gt;6.0 Quanta IDE&lt;/strong&gt;&lt;br /&gt;
Type ahead for coding in a development environment&lt;br /&gt;
&lt;img align="BOTTOM" alt="memory_font" border="0" height="243" name="graphics30" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/memory_font.png" width="276" /&gt;&lt;br /&gt;
&lt;strong&gt;6.1 Keynote&lt;/strong&gt;&lt;br /&gt;
Previews the fonts you can pick from, instead of just the font name&lt;br /&gt;
&lt;h3 class="western"&gt;7. Flexibility and efficiency of use (EFFICIENCY)&lt;/h3&gt;Accelerators — unseen by the novice user — may often speed up the interaction for the expert user such that the system can cater to both inexperienced and experienced users. Allow users to tailor frequent actions.&lt;br /&gt;
&lt;img align="BOTTOM" alt="efficiency_shortcuts" border="0" height="228" name="graphics31" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/efficiency_shortcuts.png" width="198" /&gt;&lt;br /&gt;
&lt;strong&gt;7.0 OmniFocus&lt;/strong&gt;&lt;br /&gt;
List of keyboard shortcuts and accelerators&lt;br /&gt;
&lt;img align="BOTTOM" alt="efficiency_preview" border="0" height="236" name="graphics32" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/efficiency_preview.png" width="391" /&gt;&lt;br /&gt;
&lt;strong&gt;7.1 Numbers- Apple’s Spreadsheet product&lt;/strong&gt;&lt;br /&gt;
Previews common function results on the left when a column is selected, more efficient that clicking on an action in the toolbar&lt;br /&gt;
&lt;h3 class="western" style="page-break-before: always;"&gt;8. Aesthetic and minimalist design (DESIGN)&lt;/h3&gt;Dialogues should not contain information, which is irrelevant or rarely needed. Every extra unit of information in a dialogue competes with the relevant units of information and diminishes their relative visibility. Visual layout should respect the principles of contrast, repetition, alignment, and proximity.&lt;br /&gt;
&lt;img align="BOTTOM" alt="design_c_r_a_p" border="0" height="255" name="graphics33" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/design_c_r_a_p.png" width="317" /&gt;&lt;br /&gt;
&lt;strong&gt;8.0 Kontain&lt;/strong&gt;&lt;br /&gt;
Kontain’ search menu exemplifies the four principles of visual design:&lt;br /&gt;
Contrast: bold text is used for the two labels in the search&lt;br /&gt;
Repetition: the orange, blue, and green text match the media types&lt;br /&gt;
Alignment : strong left alignment of text, right aligned drop down&lt;br /&gt;
Proximity: a light rule is used to separate tags from the other options&lt;br /&gt;
&lt;img align="BOTTOM" alt="design_alignment" border="0" height="227" name="graphics34" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/design_alignment.png" width="328" /&gt;&lt;br /&gt;
&lt;strong&gt;8.1 Harvest&lt;/strong&gt;&lt;br /&gt;
Sufficient padding and spacing keep this timesheet from being a visual nightmare. Header and footer rows, as well as the summary column use subtly different colors to indicate they are distinct from the content&lt;br /&gt;
&lt;h3 class="western"&gt;9. Help users recognize, diagnose, and recover from errors (RECOVERY)&lt;/h3&gt;Error messages should be expressed in plain language (no codes), precisely indicate the problem, and constructively suggest a solution.  &lt;br /&gt;
&lt;img align="BOTTOM" alt="error_message" border="0" height="173" name="graphics35" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/error_message.png" width="291" /&gt;&lt;br /&gt;
&lt;strong&gt;9.0 Digg &lt;/strong&gt;&lt;br /&gt;
Provides immediate feedback with specific instructions&lt;br /&gt;
&lt;img align="BOTTOM" alt="error_page" border="0" height="190" name="graphics36" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/error_page.png" width="350" /&gt;&lt;br /&gt;
&lt;strong&gt;9.1 Humorous ‘ Page Not Found’ Error&lt;/strong&gt;&lt;br /&gt;
Uses a funny image and copy, but provides viable alternatives (article listings and blog link) and a course of action (report it)&lt;br /&gt;
&lt;h3 class="western"&gt;10. Help and documentation (Help)&lt;/h3&gt;Even though it is better if the system can be used without documentation, it may be necessary to provide help and documentation. Any such information should be easy to search, focused on the user’s task, list concrete steps to be carried out, and not be too large.&lt;br /&gt;
&lt;img align="BOTTOM" alt="help_contextual" border="0" height="200" name="graphics37" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/help_contextual.png" width="337" /&gt;&lt;br /&gt;
&lt;strong&gt;10.0 Picnik&lt;/strong&gt;&lt;br /&gt;
Contextual help (this is an example of help in the ‘Collages’ module) tips in Picnik are clear and easy to navigate&lt;br /&gt;
&lt;img align="BOTTOM" alt="help_video" border="0" height="176" name="graphics38" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/help_video.png" width="313" /&gt;&lt;br /&gt;
&lt;strong&gt;10.1 GoodBarry&lt;/strong&gt;&lt;br /&gt;
Embedded videos can be used to showcase features as well as get people started using the product&lt;br /&gt;
&lt;img align="BOTTOM" alt="help_tip" border="0" height="139" name="graphics39" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/help_tip.png" width="203" /&gt;&lt;br /&gt;
&lt;strong&gt;10.2 Zenoss&lt;/strong&gt;&lt;br /&gt;
Help tips are displayed on hover, answering the most likely questions about a field or instructions&lt;br /&gt;
&lt;img align="BOTTOM" alt="help_button" border="0" height="82" name="graphics40" src="http://designingwebinterfaces.com/blog/wp-content/uploads/2009/05/help_button.png" width="273" /&gt;&lt;br /&gt;
&lt;strong&gt;10.3 BaseCamp by 37signals&lt;/strong&gt;&lt;br /&gt;
Help opens a new browser window/tab with a full set of help resources: search, FAQ, video tutorials, customer forums&lt;br /&gt;
&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-7409758170129750224?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T23:13:02.796-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/09/usability-of-ria-with-flex.html</feedburner:origLink></item><item><title>Interview with Dries Buytaert, Creator of Drupal By David Peterson | April 28, 2010 | Web Tech</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/q3BNHZPMPFE/interview-with-dries-buytaert-creator.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 01 Sep 2011 21:50:41 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-509219513956479514</guid><description>&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 22px; background-color: rgb(255, 255, 255); "&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;Drupalcon San Francisco — last week, David Peterson (&lt;a href="http://twitter.com/davidseth" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: rgb(0, 113, 216); "&gt;@davidseth&lt;/a&gt;) caught up with &lt;a href="http://buytaert.net/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: rgb(0, 113, 216); "&gt;Dries Buytaert&lt;/a&gt;(&lt;a href="http://twitter.com/dries" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: rgb(0, 113, 216); "&gt;@Dries&lt;/a&gt;), the creator of Drupal, to discuss where Drupal is heading, what challenges are ahead and what keeps him going.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;Dries Buytaert: What do you want to talk about?&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;David Peterson: I wanted to talk about where you see the big shifts happening — touching on Tim O’Reilly’s &lt;a href="http://sf2010.drupal.org/conference/sessions/open-source-cloud-era" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: rgb(0, 113, 216); "&gt;keynote address&lt;/a&gt; where he talked about the future of devices and cloud data. Also, I was in the &lt;a href="http://sf2010.drupal.org/conference/sessions/social-analytics-120-warner-bros-records-artist-sites" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: rgb(0, 113, 216); "&gt;Warner Brothers Drupalcon session&lt;/a&gt; and they said the biggest problem they were facing is not music piracy. It’s actually the fragmented way that people access content. The website is no longer the focal point; it’s actually the Nintendo Wii’s, the Xbox, PlayStations and mobile phones. So with that in mind, where do you see things going and how will Drupal facilitate that?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: Right.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: So let’s start with a very basic question. When do you think a stable beta version of Drupal 7 might land?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;img class="alignright" src="http://davidseth.smugmug.com/Computers/sitepoint/IMG8436/849459530_CQ6py-S.jpg" alt="" width="400" height="267" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 1.467em; float: right; " /&gt;DB: So, Drupal 7 has about a 100 critical bugs left as of this morning. So we’ll do a release when that number is zero. But, I don’t really know when that number will be zero. It’s really up to everybody in the community to help fix it.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;If we do some analysis on the current big fix rate, looking at our history of successful bug fixing, it looks like it could be anywhere between early June (best case) and the end September (worst case).&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: What about a beta release? Drupal 7 is in alpha right now, will there be a certain point that you were looking to release a stable beta?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: We’ve released the third alpha. There’ll be a beta when we feel the upgrade path works.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: Like the upgrade from CCK to the new Fields API?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: The upgrade path from Drupal 6 to Drupal 7.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: So essentially a core 6 to core 7 upgrade?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: Well, yes. CCK is no longer a part of Drupal 7 so a migration path has to include taking what was CCK and upgrading it to Fields. That’s what we are thinking right now. It’s still some thing which we need to discuss a little bit more because the CCK people actually think it might be better to keep the CCK update as a contributed module, for a little while, for technical reasons.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;But the bigger picture of a Drupal 7 release, the big goal is to get the upgrade path to work in a way that everybody agrees with and then we’ll switch to beta releases.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;img class="alignleft" src="http://davidseth.smugmug.com/Computers/sitepoint/IMG8403/849474476_3mRWA-S.jpg" alt="" width="200" height="300" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 1.467em; margin-bottom: 1.467em; margin-left: 0px; float: left; " /&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: In your keynote you mentioned distributions as being a really important aspect of Drupal and a real point of differentiation. Why do you feel it’s such a driving part of what makes Drupal unique and how will that help the uptake of Drupal in the wider community?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: To answer the first question, which I think was why is it important, when I talk to people, usability is still the number one issue. And not just usability but, “Can Drupal do this?”,  “Can Drupal do that?”, “How do I do this?”.  There’s a lot of barriers to get people started, that starts with installation, module selection and usability. There’s all of these things and I think distributions are a great way to solve that. These are packaged solutions instead of a framework with a big box of building blocks.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: And a scary learning curve (laughs).&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: So I think it helps with the learning curve which I think will help with Drupal’s growth. If we can remove some of those barriers with new distributions then I think Drupal will succeed in growing a lot more.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: Kind of along a similar vein, what do you think are Drupal’s biggest challenges in terms of the future? In your keynote, you mentioned WordPress is now moving towards a more open model along with Joomla and other systems. What challenges does Drupal face within a more homogeneous group?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: The big threat, sort of an ugly word, but is of course that if Joomla and WordPress are coming from the bottom up, if you will, then that could replace part of our install base. So that’s a threat. And I think distributions could help protect ourselves against that because it means distributions could do many of the things that WordPress does. Just to be clear, I’m not super competitive with WordPress or Joomla. I don’t want to come across as fearing those projects.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: Yeah. I suppose maybe “threat” was not the right word. It’s more like ‘how do you keep Drupal relevant in a world that’s homogenising?’&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: My long term concern is staying relevant. How do we keep the level of agility and innovation and stuff that we have today that allow us to be leading edge and to be all the things that make us so successful.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: So what are you doing to address that? Currently, I guess it’s a great community, lots of contributions and things like that. But I mean one of the things you addressed in the keynote again is you want more people to give back. How are you going to maintain that Drupal will always be at the forefront? How do you do that?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: It’s very much a cultural thing. I don’t think there’s technical solutions to these problems. Just a desire that people have to be innovators and for the project to be state of the art compared to other projects, but also to maintain the way that we work.  I’m not saying that we should adjust the way we work. We have to keep the project  healthy, but keep our core values, our base principles that we have had for many, many years.  But I think the ingredients are all there.  I think everything works pretty well the way things have been working and so trying to stick with those I think is key.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;As it grows it’s always easy to apply rules.  Its one of those things that sometimes adding rules is much, much easier than removing rules, so once you’ve added a rule or a new process it’s very hard to get rid of it.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP:  Things are developing at a fast pace now. Facebook has just announced the &lt;a href="http://www.sitepoint.com/blogs/2010/04/27/facebooks-new-open-graph-api/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: rgb(0, 113, 216); "&gt;Open Graph protocol&lt;/a&gt;, essentially it’s a protocol that enables integration of web pages into a graph, a social graph.  And I know in the Boston Drupalcon you talked about that and you’ve been talking Linked Data and the Semantic Web multiple times since. In Monday’s keynote you again talked about Tim Berners-Lee’s &lt;a href="http://dig.csail.mit.edu/breadcrumbs/node/215" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: rgb(0, 113, 216); "&gt;Giant Global Graph&lt;/a&gt;. Previously it’s always been a bit more academic and a bit more techie, but I guess with Facebook’s rubber stamp this morning its finally getting real and exciting.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB:  Yeah, I haven’t seen it yet but it sounds exciting.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;img class="alignright" src="http://davidseth.smugmug.com/Computers/sitepoint/IMG8406/849459062_EUw2m-S.jpg" alt="" width="200" height="300" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 1.467em; float: right; " /&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP:  I have just just barely read it myself (laughing).&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;In Tim O’Reilly’s keynote he talked about the future of the web in which the browser becomes less important but portable devices and inter-operating with the cloud becomes the dominant medium.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;How is Drupal going to lead in the era where the web browser and the web interface is actually on the decline and the rise of the cloud and devices?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB:  Right. I think it’s putting more focus on import and export, web service APIs and those kinds of things instead of just HTML. In Drupal 7 there are some significant improvements. We are starting to make the HTML renderer basically abstract away from the system a little bit so that we make it easier to generate other formats like JSON, XML or whatever. So I think evolving that sort of to the next level where there is much more web service integration and things like RDF and RDFa will help.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP:  So in some ways I guess kind of treating a Drupal page more as a data layer rather than a traditional static HTML page. Something that could act like a possible layer in a transaction.  Something like that?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB:  For example it’s sort of related — like in Drupal 6, we basically generated snippets of HTML and that’s how a page was generated. In Drupal 7 we still do the same thing but before we start generating all of those snippets we first build a big data object of the entire page. A big nested structure which is sort of like a page object.  And that actually makes it very cool because you capture the structure of the page and can perform operations on the page.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;Also, by capturing the annotations around a function we could automatically generate a web service API for that function. If we can do that for the functions as well as for data types then I think Drupal becomes super hackable in a good way (laughs). We can start using it as a mash-up platform, start doing all of these things.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: That sounds Great.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;Microsoft’s announcement at Drupalcon of a native SQL Server driver for  PHP was really cool. Are there any other tricks up Drupal’s sleeve? Are there any other things in the works or strategic partnering with these previously less then Open Source friendly groups?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: I know there’s a lot of companies looking at Drupal right now trying to figure out how they can leverage Drupal. Ultimately that’s what they want to do.  I know Dreamweaver recently got a Drupal plugin I think from Adobe. It’s another small example of how big companies are starting to take notice of Drupal, starting to build software for it.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: What other areas of technology interest you? What excites you? What keeps your brain ticking to the next step?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: A lot of different things. A Drupal specific one for example, I think the next thing that we need to look at for the enterprise is staging. I spoke to a lot of enterprise customers and staging and configuration management is a problem that we need to solve. It’s a difficult problem but at the  same time that’s sort of what makes me excited about it. It’s not like a small problem. It’s actually a big problem which could require some significant engineering potentially so that keeps me excited.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;I think cloud computing and software as a service are exciting me. Not only from a technical point of view but also from a business model point of view. I think cloud computing and software as a service actually bring new monetization opportunities to open source which is something that we didn’t really have before. I mean, some people did it before but we’re starting to better understand the possibilities of cloud computing and open source and how we can leverage it to monetize open source project. Which I think is healthy. Because we can still give everything back, but at the same time organisations will be able to make money off of open source which I think is very important for a project to be successful.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;I think a good example of this is distributions in Drupal. It’s really cool. It would be really great to have many of them. And I think we’ve solved many, but not all, of the technical problems. And I think there’s going to be revisions of the technology that we’ve built in distributions. But I think the big challenge is still the business model around distribution. We need to figure out how people can make money by building distributions, because building a distribution is time consuming and it takes a lot of effort and I think that cloud computing and software as a service provides that opportunity to distributions.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: Yeah.  So kind of on that same vein but maybe extrapolating out another few years… do you have a picture of the next big thing in store, Drupal 9, or a fairly long term 3 or 4 year goal with Drupal or just with your own developments or things in general.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: Umm… I don’t think… I do, but I’m not sure it’s a picture I can describe.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP: Okay (laughs) probably a good thing.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB: Yeah, I don’t know, it’s not like those four features or something.  It’s like, for example I believe people’s expectations from web applications are rapidly changing.  People expect them to be very easy to use.  Very intuitive to use.  There’s a lot of very specific applications being developed which are exactly that so I strongly believe that we should make Drupal easy to use&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;So if I think ahead I see something which is easy to use that’s as good as I can describe it.  I also see mobile being much more prominent so I also see something which can be easily accessed from mobile websites or devices.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP:  We were just talking about the good hackability of Drupal and your interest in the cloud and how those things can combined. What you are describing looks to allow for that mobile, more ease of use and multi-device capability that is already upon us.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;Lastly, what keeps you motivated.  I mean you’re traveling a lot and you’re a fellow father of young ones, what keeps you moving and dreaming.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB:  That’s a really good question.  You know for me as long as I can learn I’m having fun.  Actually, it’s really having fun.  I’m having a lot of fun and the fun comes from being able to learn — from being surrounded by people I can learn from. Just working with the people that I work with, you know all of the people in the community. Working on the projects that I work on, it keeps me really excited. So excitement and fun are it.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP:  Great, well thank you very much for your time.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;DB:  You’re welcome.&lt;/p&gt;&lt;p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1.467em; margin-left: 0px; "&gt;&lt;em style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;DP:  It’s been an absolute pleasure talking to you.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="padding-top: 0px; padding-right: 0px; padding-bottom: 50px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-align: center; "&gt;&lt;div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 30px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; float: left; "&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-509219513956479514?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-01T21:50:41.806-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/09/interview-with-dries-buytaert-creator.html</feedburner:origLink></item><item><title>Difference between Drupal and Joomla</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/FZhRIpyTmxw/difference-between-drupal-and-joomla.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 01 Sep 2011 21:48:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-6612187814407925463</guid><description>&lt;span class="Apple-style-span" style="font-family: georgia, arial, helvetica, sans-serif; line-height: 24px; background-color: rgb(255, 255, 255); "&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Anyone trying to evaluate &lt;a href="http://www.cmswire.com/news/topic/open+source" style="color: rgb(0, 102, 255); text-decoration: none; background-color: rgb(214, 236, 255); "&gt;open source content management systems&lt;/a&gt; is aware that there aren't a lot of recent, useful comparative reviews. What's surprising is that this issue is true even for such popular solutions as Drupal and Joomla.&lt;/p&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Stating in January that, "most comparisons of Drupal (&lt;a href="http://www.cmswire.com/cms/web-cms/drupal-as-the-dominant-web-platform-no-way-004020.php" style="color: rgb(0, 102, 255); text-decoration: none; "&gt;news&lt;/a&gt;, &lt;a href="http://www.drupal.org/" style="color: rgb(0, 102, 255); text-decoration: none; "&gt;site&lt;/a&gt;) and Joomla (&lt;a href="http://www.cmswire.com/cms/events/cms-expo-joomla-enterprise-imminent-004511.php" style="color: rgb(0, 102, 255); text-decoration: none; "&gt;news&lt;/a&gt;,&lt;a href="http://www.joomla.org/" style="color: rgb(0, 102, 255); text-decoration: none; "&gt;site&lt;/a&gt;) conclude that you should select the one that best suits your needs. However, they give too little guidance about how to do that," Webology eBusiness Solutions set out to quantify the pros and cons of each by releasing a survey.&lt;/p&gt;&lt;a name="more" style="color: rgb(0, 102, 255); text-decoration: none; "&gt;&lt;/a&gt;&lt;h2 style="font-family: 'Trebuchet MS', Trebuchet, Futura, Arial, sans-serif; font-size: 1.45em; color: rgb(51, 51, 51); margin-top: 1.35em; margin-bottom: -6px; "&gt;The Survey&lt;/h2&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;The survey divided questions into five categories:&lt;/p&gt;&lt;ol style="margin-top: 0px; "&gt;&lt;li style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 6px; margin-bottom: 0px; "&gt;Developers&lt;/li&gt;&lt;li style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 6px; margin-bottom: 0px; "&gt;Documentation&lt;/li&gt;&lt;li style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 6px; margin-bottom: 0px; "&gt;Performance/Functional Aspects&lt;/li&gt;&lt;li style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 6px; margin-bottom: 0px; "&gt;Appearance&lt;/li&gt;&lt;li style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 6px; margin-bottom: 0px; "&gt;Ease of Use/Learning&lt;/li&gt;&lt;/ol&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Users were classified by their response to "CMS most experienced with," with those answering "Not Applicable/Don't Know" to this question being removed from the analysis.&lt;/p&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;In general, the respondents were slanted a bit more toward Joomla users than Drupal users. Their roles when working with their respective CMS's break down to the &lt;em style="font-family: georgia, arial, helvetica, sans-serif; "&gt;&lt;strong style="font-family: georgia, arial, helvetica, sans-serif; "&gt;largest group being Project Managers&lt;/strong&gt;&lt;/em&gt;, and other large groups including Programmers and Designers. The &lt;em style="font-family: georgia, arial, helvetica, sans-serif; "&gt;&lt;strong style="font-family: georgia, arial, helvetica, sans-serif; "&gt;Drupal users were, somewhat unsurprisingly, more experienced&lt;/strong&gt;&lt;/em&gt;, with a median of 7 years experience in web development, while Joomla users claimed 5.&lt;/p&gt;&lt;div class="ams-block" style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 8px; margin-right: 2px; margin-bottom: 0px; margin-left: 15px; width: 300px; float: right; "&gt;&lt;div class="ams-block-300x250" style="font-family: georgia, arial, helvetica, sans-serif; float: left; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(204, 204, 204); border-right-color: rgb(204, 204, 204); border-bottom-color: rgb(204, 204, 204); border-left-color: rgb(204, 204, 204); border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; width: 300px; "&gt;&lt;div id="google_ads_div_Inline-300x250--01_ad_container" style="font-family: georgia, arial, helvetica, sans-serif; "&gt;&lt;ins style="width: 300px; height: 250px; display: inline-table; position: relative; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "&gt;&lt;ins style="width: 300px; height: 250px; display: block; position: relative; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "&gt;&lt;iframe id="google_ads_iframe_Inline-300x250--01" name="google_ads_iframe_Inline-300x250--01" width="300" height="250" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; position: absolute; top: 0px; left: 0px; "&gt;&lt;/iframe&gt;&lt;/ins&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="spacer" style="font-family: georgia, arial, helvetica, sans-serif; clear: both; font-size: 1px; "&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 style="font-family: 'Trebuchet MS', Trebuchet, Futura, Arial, sans-serif; font-size: 1.45em; color: rgb(51, 51, 51); margin-top: 1.35em; margin-bottom: -6px; "&gt;The Results&lt;/h2&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;In general, there were a lot of responses that fit expectations.&lt;/p&gt;&lt;h3 style="font-family: 'Trebuchet MS', Trebuchet, Futura, Arial, sans-serif; font-size: 1.2em; margin-top: 1em; margin-right: 0px; margin-bottom: -8px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "&gt;Drupal Users Love Drupal, Joomla Users Love Joomla&lt;/h3&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Drupal users list the highest client satisfaction with Drupal, and Joomla users list the highest satisfaction of their clients with Joomla. Drupal developers feel that Drupal is easier for developers to learn, and Joomla users feel that Joomla is easier to learn. After all, if you already chose Drupal or Joomla, there was probably a reason you chose it at the time.&lt;/p&gt;&lt;h3 style="font-family: 'Trebuchet MS', Trebuchet, Futura, Arial, sans-serif; font-size: 1.2em; margin-top: 1em; margin-right: 0px; margin-bottom: -8px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "&gt;Drupal Better for Extensibility and Large Sites&lt;/h3&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Once you get down to slightly less biased issues, it gets more interesting.&lt;/p&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Drupal users rate their CMS higher than Joomla users rated theirs in areas such as documentation (especially core and module documentation) and bugs (core and modules). Drupal users apparently feel that their add-ons integrate better with the core, and their framework makes it easier to extend their CMS's capabilities.&lt;/p&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Drupal users also rated Drupal higher than Joomla users rated Joomla for their support of multimedia, social networking, SSL, forums, event calenders, blogging, document management, SSL, internationalization, user management and permission features (a huge gap of 40%), ease of external integration, the ease of developing large, complex web sites, and the quality of add-ons for enhancing functionality.&lt;/p&gt;&lt;h3 style="font-family: 'Trebuchet MS', Trebuchet, Futura, Arial, sans-serif; font-size: 1.2em; margin-top: 1em; margin-right: 0px; margin-bottom: -8px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "&gt;Joomla Easier for the Non-Geeks&lt;/h3&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;However, Drupal didn't win in every aspect. Joomla users rated Joomla higher than Drupal users rated Drupal when it came to the ability for non-technical people to learn the CMS interface (another large gap), maintenance and upgrading, the ability to create a new and functioning site quickly, the ability to teach clients to use their CMS effectively, and their willingness to put time and money into improving poorly performing extensions.&lt;/p&gt;&lt;h2 style="font-family: 'Trebuchet MS', Trebuchet, Futura, Arial, sans-serif; font-size: 1.45em; color: rgb(51, 51, 51); margin-top: 1.35em; margin-bottom: -6px; "&gt;Which Web CMS is Better?&lt;/h2&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;Sorry, there's still no cut and dried answer, and for that matter, we at CMSWire don't even believe in the question.&lt;/p&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;If this survey proves anything, it's that the choice of Web CMS depends on what you're trying to do —  which is what we've been saying all along. At least now folks have a more quantifiable set of opinions to look at.&lt;/p&gt;&lt;p style="font-family: georgia, arial, helvetica, sans-serif; margin-top: 11px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; "&gt;For the complete list of questions and responses, along with all of the numbers, see the&lt;a href="http://www.webologysolutions.com/ebusiness-blog.html" style="color: rgb(0, 102, 255); text-decoration: none; "&gt;Webology eBusiness Solutions blog&lt;/a&gt;. And if you want more CMS data (and a little controversy), see our coverage of Water &amp;amp; Stone's &lt;a href="http://www.cmswire.com/cms/web-cms/survey-most-popular-open-source-cms-002944.php" style="color: rgb(0, 102, 255); text-decoration: none; "&gt;most popular open source CMS survey&lt;/a&gt;.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-6612187814407925463?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-01T21:48:45.734-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/09/difference-between-drupal-and-joomla.html</feedburner:origLink></item><item><title>Benefits of PHP Programming in Custom Web Development</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/drvQbQ76Cfw/benefits-of-php-programming-in-custom.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 23 Aug 2011 03:20:39 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-3252819358160462039</guid><description>&lt;span class="Apple-style-span" style="color: rgb(71, 71, 71); font-family: Arial, Verdana; font-size: 14px; line-height: 20px; background-color: rgb(255, 255, 255); "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;The original full form of PHP is Personal Home Page but in programming sense it stands for Hyper Text Preprocessor. HTML is client side language means Browser translate the HTML code into the “byte code” that is easy to follow for a computer. The “byte code” then translated into the out put as we see on the screen for instance in to the Text or Image.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Server side language in web development&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP is server side language means PHP has an interpreter that interprets PHP code into the HTML code for a browser means every time it writes the HTML for your PC’s browser from the server where it resides. That means it can generate HTML for so many browsers at a time. Rest of process is same for the HTML as we have discussed earlier, means HTML get translated in to the byte code and byte code in to the computer screen Text or Image. With server-side scripting languages, you don’t need anything adding to your browser or computer, as the interpreter inside the machine that hosts the particular Website does most of the work.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Dynamic language in web development&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;HTML is static language therefore it creates static pages whilst PHP is dynamic language. Here dynamic means? Suppose you run a forum and you have a page written for today. You have to edit the whole site for its update if it is written in HTML, for a page for tomorrow you will again edit the site and so on for the next days. If your site is written in a PHP you need not go to edit it every time you write a post. This process is automated for a server side language.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;What dose PHP do here? It sends the data of your written page for forum to the server. On server it saves in “pre-defined” variables (things that store a value), and using something called a “while loop” that continually loops all the posts saved in the Web page – and that’s it! PHP stores the posts in a MySQL database (something that holds data, if you like, like member accounts, etc) and uses that as long-term memory.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Fast and better in web development&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP is compiled by PHP engine on runtime this makes its execution rapid so it is running fast. Its codes are highly optimized means it never put any strain over the server as well as nothing left for the machine of the browser where it runs means computers of the users. PHP is effective with a rational database like MySQL so it is fast with database use too.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Other benefits in web development&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;The code of PHP is simple and easy to understandIt is most suited to the needs of small business as it cost less compare to other languages and give better performance.PHP is highly adaptable to the most of the databases connectivity.PHP has cross platform compatibility means it can run on all OS like windows, Linux, Mac etc.PHP is cross browser compatible means it can run on any browser.PHP differentiate the presentation layer and data layers very well.It can be used in command line scripting.&lt;/p&gt;&lt;ins style="display: inline-table; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; height: 60px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; position: relative; visibility: visible; width: 468px; "&gt;&lt;ins id="aswift_2_anchor" style="display: block; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; height: 60px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; position: relative; visibility: visible; width: 468px; "&gt;&lt;iframe allowtransparency="true" frameborder="0" height="60" hspace="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" width="468" id="aswift_2" name="aswift_2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; left: 0px; position: absolute; top: 0px; "&gt;&lt;/iframe&gt;&lt;/ins&gt;&lt;/ins&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP Tools useful in web developmentHere I did try to give you links of some of useful PHP tools during web development.Debugging Tools&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Webgrind (code.google.com)Xdebug (xdebug.org)Gubed PHP Debugger (gubed.mccabe.nu)DBG (php-debugger.com/dbg/)PHP_Debug (php-debug.com)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Testing and Optimization Tools&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHPUnit (phpunit.de)SimpleTest (simpletest.org)Selenium (selenium-rc.openqa.org)PHP_CodeSniffer (matrix.squiz.net/developer/tools/php_cs)dBug (dbug.ospinto.com)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Documentation Tools&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;phpDocumentor (phpdoc.org)PHP DOX (phpdox.net)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Security Tools&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;SecurimageScavengerPHP-IDSPixy: PHP Security Scanner&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Image Manipulation and Graphs&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP/SWF ChartspChart – a chart-drawing PHP libraryWideImageMagickWand For PHP&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP Code Beautifier&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP_BeautifierPHPCodeBeautifierGeSHi – Generic Syntax Highlighter&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Version-Control Systems&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Phingxinc&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Useful Extensions, Utilities and Classes&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;SimplePieHTML PurifierhtmlSQLPHPMathPublisherphpMyAdminPHPExcel&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP Online Tools and Resources&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Minify!PHP Object GeneratorgotAPI/PHPkodersPECL&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;In-Browser Tools (Firefox Add-Ons)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;FirePHPphpLangEditorPHP LookupPHP Manual Search&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;Frameworks for PHP&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;DwooCodeIgniterYII Framework&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PHP IDEs and Editors&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;PhpEDphpDesignerZend Studio&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-style: inherit; font-size: 14px; font-family: inherit; vertical-align: baseline; "&gt;curtsy: kinjal&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-3252819358160462039?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T03:20:39.855-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/08/benefits-of-php-programming-in-custom.html</feedburner:origLink></item><item><title>Tips for Learning Simple Php</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/oqniwQppgL8/tips-for-learning-simple-php.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 23 Aug 2011 03:19:20 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-234212252849776724</guid><description>&lt;span class="Apple-style-span" style="color: rgb(41, 41, 41); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; background-color: rgb(158, 158, 158); "&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;When you are trying to learn a new programming language like PHP, it can get a bit intimidating, especially if you have never had experience with other programming languages before. But trust me, the toughest hurdle is really the starting point. Once you have gotten over that, it is really just a matter of keeping your focus and practicing. Be patient and learn the steps one at a time and you will get there. Here are some tips to help you learn simple PHP:&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Learn the basics.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;To learn a new language, specifically a programming language, you will need to have basic computer skills. Before you can learn PHP, you need to have a basic background on HTML. This is necessary to make PHP easier to grasp. Plus, you can alternate between the two later on using the same document.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;PHP is a language that uses scripting and often used with HTML to supplement functions that HTML lacks. With PHP, you can collect and process data, make comparisons and calculations things that you can not do with HTML. Using this skill, you can create other functions to produce data that is more specialized.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Get the tools.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;To create PHP pages, you will need a text editor. A plain text editor is a program that lets you edit files in plain text. These are the ones that come with extensions such as. php, .cgi, .html, etc. These types of text editors will not save formatting on the file, only the plain text. If you have been using a text editing program for your HTML file, that will do. you will probably use either Notepad (for Windows) or Text Edit (for Mac).&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Get an FTP.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;A File Transfer Protocol or FTP is used to exchange files from your computer to a remote server. This is the one we use to connect on a LAN or to an Internet site.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Get busy.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Once you have the right tools, you will have to practice creating files using PHP. There are some very important stuff that you will need to learn, including basic mathematics and IF statements and using variables. you will have to go through these first before you can hope to build a reliable PHP file.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Once you know your way around these skills, you can then start learning about loops. Loops are just your basic true or false statements that will perform repetitive actions again and again until certain conditions are met. After mastering the loops, you can then learn how to write your very own functions. Once you have learned how to manipulate the codes to create your desired result, there is virtually no limit to what you can do.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Online resources for learning simple PHP&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;You can not possibly learn simple PHP from a single short article like this, so it is best to expand your knowledge and turn to other resources like books and online sites. Some sites to check out:&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;PHP.About.com&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;There are several articles on this site that discuss the most basic information you need to know to learn simple PHP. This is a great source for web based tutorial that features clear step by step instructions on using PHP, HTML, XML and MySQL databases.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;PHP Buddy.com&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;This site contains Quick Start tutorials on PHP and scripts that will make it easy for you to learn the program easily. This includes a brief introduction and learning basic PHP syntax. There are also valuable tutorials on using cookies, data inscription and working with functions and sessions using PHP.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;PHP Freaks.com&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;This is a site for people who want to learn both PHP and MySQL. The site has 90 tutorials on PHP, more than 400 PHP code examples and nearly 3,000 articles that discuss various information, tips and tricks to make learning simple PHP quick and easy.&lt;/p&gt;&lt;p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-style: normal; font-size: 16px; text-align: justify; "&gt;Article Source: &lt;a href="http://www.articlesbase.com/programming-articles/tips-for-learning-simple-php-159206.html" title="Tips for Learning Simple Php" style="text-decoration: underline; color: rgb(77, 102, 79); "&gt;http://www.articlesbase.com/programming-articles/tips-for-learning-simple-php-159206.html&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-234212252849776724?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T03:19:20.010-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/08/tips-for-learning-simple-php.html</feedburner:origLink></item><item><title>Flash Builder for PHP 4.5.1 Gets iOS Support</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/B-ILvMfY9hA/flash-builder-for-php-451-gets-ios.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 23 Aug 2011 03:18:05 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-3797563545761776359</guid><description>&lt;span class="Apple-style-span" style="font-family: serif; background-color: rgb(255, 255, 255); font-size: medium; "&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;IBM i shops that use the latest release of &lt;a target="new" href="http://www.zend.com/" style="text-decoration: none; "&gt;Zend Technology&lt;/a&gt; Flash Builder for PHP can now compile their Flash user interfaces into native iOS applications that will run on &lt;a target="new" href="http://www.apple.com/" style="text-decoration: none; "&gt;Apple&lt;/a&gt; devices. Flash Builder for PHP version 4.5.1, which was released late last month, enables developers to target all major client devices--including Windows, Mac, and Linux PCs; Web browsers; and iOS, Android, and Blackberry Playbook mobile devices--with a single development effort.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;Zend launched the first release of Flash Builder for PHP (version 4.5) in May. The offering combines &lt;a target="new" href="http://www.adobe.com/" style="text-decoration: none; "&gt;Adobe&lt;/a&gt;'s Flash Builder development tool with a full copy of the Zend Studio IDE, enabling programmers to write slick Flash-based interfaces from the IDE they use to write back-end PHP apps for IBM i, Windows, Linux, and every other server supported by PHP.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;The &lt;a target="new" href="http://www.eclipse.org/" style="text-decoration: none; "&gt;Eclipse&lt;/a&gt;-based software makes it relatively easy for PHP developers to use Flash to power their GUIs. Adobe and Zend have built a layer of integration into the software that allows developers to work on Flash and PHP projects from the comfort of a single IDE.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;But why would somebody want to use Flash to begin with? There are pros and cons. On the plus side, Flash (formerly called Flex) provides a rich library of objects that make it quite easy to build so-called rich Internet applications (RIAs) using drag-and-drop motions. Also, the Flash Player (a layer that is normally required to run a Flash interface) is ubiquitous. It's installed as a Web browser plug-in on more than 99 percent of the world's PCs.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;But there are downsides. For starters, some think Flash websites are annoying (these people were probably happiest in front of screen scraped 5250 apps, or 1990-era bulletin boards that resemble DOS.) But the biggest knock against Flash has been that it doesn't run on iOS, the Apple mobile device operating system that is taking over the world.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;This is why the version 4.5.1 update is important. According to Zend's IBM alliance director Michael Scarpato, the new release of Flash Builder gets around this roadblock by using the Adobe Integrated Runtime (AIR), a cross-platform runtime that can run Flash applications on any supported device. Since iOS supports AIR, Flash Builder (and Flash Builder for PHP) developers can now target iOS devices with their i OS apps.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;"AIR is the technology to run Flash," Scarpato says. "That technology has been extended to run anywhere. So it can run on iOS, Android, and Blackberry Playbook. It can run on desktop OSes like Linux and Mac and Windows. And it can also run in the browser."&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;Flash Builder for PHP 4.5.1 supports iOS by compiling the application and making it available to users through iTunes App store, Scarpato says. "You get that down, and all the components needed from AIR are bundled or compiled in the application, enabling it to run natively, so you don't need Flash and you don't need the browser at all," he says.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;"This gives people the ability to create a common code base of Adobe flash code, along with Zend's PHP code running on the IBM i in Zend Server, and basically build the application once--build it in a way that it will run anywhere--and get to all of these different devices at the same time," he says.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;While users will appreciate the modern look of a Flash interface, developers who use Flash Builder for PHP will appreciate the integration work that Zend has done to hook the PHP and Flash environments, according to Kent Mitchell, senior director of product management for Zend.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;"Probably the single biggest feature that developers love is integrated debugging," Mitchell says. "When you're trying to figure out why code doesn't work--and some of the code is in Flex and Flash, and some is in PHP--if you have separate debuggers and they're not integrated, it's really a giant pain in the butt. So with this integrated debugging, you can literally start debugging on the mobile device, follow that request from the mobile device into the PHP, figure out where PHP is doing something wrong, then fix it, and then basically watch the flow all the way back out and make sure everything's working the way you expected it to."&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;The joint Flash offering with Adobe comes on the heels of last year's release of Zend Studio 8, which introduced JavaScript into the IDE for the first time. JavaScript, of course, is another technology that developers can use to create compelling Web 2.0-style applications. And the fact that Zend Studio supports several different JavaScript libraries, including jQuery, Dojo, ExtJs, and Prototype, gives customers choices.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;The choice, then, to use Flash Builder would mainly be made if an organization had a substantial investment in Flash technology and had a lot of people with Flash skills in house. The capability to target nearly every device with a single development effort (something that is not yet possible writing just JavaScript) is another advantage of going the Flash Builder for PHP route.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;It's worth noting here that Flash Builder can be used without PHP. In fact, the standalone Flash Builder product can create very compelling interfaces from RPG business logic. Check out Shannon O'Donnell's recent &lt;i&gt;Four Hundred Guru&lt;/i&gt; story, &lt;a target="new" href="http://www.itjungle.com/fhg/fhg081011-story01.html" style="text-decoration: none; "&gt;"Adobe Flash Builder for the iSeries Programmer, Part 1"&lt;/a&gt;, for more info on using Flash Builder.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;There was a problem with the first release of Flash Builder for PHP that had a big impact on users who had installed Adobe's Creative Suite on their PCs. The problem, which caused the rest of the Creative Suite to stop working, has been addressed by Adobe in this &lt;a target="new" href="http://kb2.adobe.com/cps/908/cpsid_90822.html" style="text-decoration: none; "&gt;knowledge base article&lt;/a&gt;.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;Zend and Adobe are selling two versions of Flash Builder for PHP, including the standard edition and the premium edition. The premium edition, which costs $799, gives users access to advanced features, such as improved support for large apps, memory and performance profilers, a network monitor, and a command-line build, that aren't available in the standard edition, which costs $399.&lt;/p&gt;&lt;p class="fb" style="font-family: 'Times New Roman', Times, serif; font-size: 10pt; text-align: left; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;IBM i customers should go through Zend to get access to the Flash Builder for PHP. Most IBM i customers are eligible for discounts from the listed price.&lt;/p&gt;&lt;/span&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-family: serif; background-color: rgb(255, 255, 255); "&gt;curtsy:  &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif; background-color: rgb(255, 255, 255); "&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: serif; background-color: rgb(255, 255, 255); "&gt;Alex Woodie&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-3797563545761776359?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T03:18:05.453-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/08/flash-builder-for-php-451-gets-ios.html</feedburner:origLink></item><item><title>PHP Frameworks</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/-F_1yndeDnw/php-frameworks.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 23 Aug 2011 03:16:48 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-2671057529977184941</guid><description>&lt;span class="Apple-style-span" style="color: rgb(145, 145, 145); font-family: 'Liberation sans', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 21px; background-color: rgb(255, 255, 255); "&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;Before you can actually implement PHP frameworks on your web designing project it is important to fully understand the way they function and how they can work to enhance your project. PHP is actually the most popular and common script language used by web designers worldwide, and there is a definite reason for its popularity.&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;First of all it is simple to use and flexible, as many times coding and scripting can get tiresome and boring. PHP will help you to apply applications rapidly, saving time and generating more stable applications. It will also cut down the codes that recur frequently and are used by web developers. This is why web designers and developer favor this method, which is also very suitable for beginners.&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;&lt;a href="http://framework.zend.com/" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; color: rgb(119, 215, 236); text-decoration: underline; font-weight: bold; "&gt;&lt;img class="aligncenter size-full wp-image-8994" src="http://www.dreamtemplate.com/blog/wp-content/uploads/2011/08/pic1-a51.jpg" alt="" width="498" height="276" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;You can build very stable applications and provide a precise data base of coding and interaction. This will save time on writing down repetitive codes and allow you the time for creative issues. There are various reasons for using PHP frameworks, the main one being that it speeds up issues related to web development.&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;If you can use the recurring codes for different project without having to insert them manually each time, this will save a lot of time and effort. You can use pre-constructed modules that will allow you to take care of all coding tasks that are recurring. Web designers can then concentrate in developing the various applications and avoid having to create a new foundation for each project.&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;&lt;a href="http://www.symfony-project.org/" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; color: rgb(119, 215, 236); text-decoration: underline; font-weight: bold; "&gt;&lt;img class="aligncenter size-full wp-image-8995" src="http://www.dreamtemplate.com/blog/wp-content/uploads/2011/08/pic2-a51.jpg" alt="" width="498" height="280" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;The beauty of PHP lies in the simplicity of the system; this is why many prefer to use scripting language. However, the simplicity can also cause problems, although for beginners it is easy to implement, as you could be writing wrong codes and not realize you are doing so.&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;The problem is that when using PHP your applications will still work although you may have created a big security problem in the coding that you would not be aware of. This will mean that your website is not secure, as PHP will forgive a lot of misuse in coding, but unfortunately put you at a risk.&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;With PHP you can use many different frameworks as it offers an extensive choice of available tools to work with. PHP also allows you to create your own framework if you wish to add more creative ideas. However, many web designers use the available frameworks offered by PHP as they are extremely popular and are enhanced by support teams and forums.&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;&lt;a href="http://www.noloh.com/#/home/" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; color: rgb(119, 215, 236); text-decoration: underline; font-weight: bold; "&gt;&lt;img class="aligncenter size-full wp-image-8996" src="http://www.dreamtemplate.com/blog/wp-content/uploads/2011/08/pic3-a51.jpg" alt="" width="497" height="308" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 8px; padding-left: 0px; outline-style: none; outline-width: initial; outline-color: initial; line-height: 1.8em; "&gt;You can use the forums to exchange views and ideas when using the same type of framework, which can be of create help when you are just starting. Before you use a determined framework you should examine it properly and decide if you can use it for the type of project you have in mind. To determine whether it is the right one to use, ask yourself if it will save you time and work, and if it will provide the stability you need.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-2671057529977184941?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T03:16:48.901-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/08/php-frameworks.html</feedburner:origLink></item><item><title>The expenditure of PHP web development decrease for PHP developers</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/f7l97vImV2w/expenditure-of-php-web-development.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 23 Aug 2011 03:15:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-6810050760234647612</guid><description>&lt;span class="Apple-style-span" style="font-family: Georgia, 'Lucida bright', 'Times new roman', Georgia, 'lucida bright', serif; font-size: 15px; line-height: 22px; background-color: rgb(255, 255, 255); "&gt;Personal home page: PHP is often a mostly used, general-purpose scripting language that is basically planned for web development to create dynamic sites and application. PHP great for server-side web site development, and this usually exercise on a web server. Hypertext Preprocessor doubles to create client-side GUI applications and command-line scripting.
&lt;br /&gt;Recent time this scripting language popularity is increasing each day for business web development. There are particular reasons for this popularity. First reason is this :, it’s available cost-free, along with the PHP owner provides complete source code for users to set up, customization, and extend for manage a webpage. That way, the expenditure of PHP web development decrease for PHP developers and it also advantage will receive Merchant.
&lt;br /&gt;To make a website using PHP certainly a simple and easy and not other development tool like ASP.Net and Java. The functions, methods and syntax for this scripting language simple and easy, and developer and programmer are aware of it easily. It is actually full supported with HTML. These way developers and programmers are increased, and then we can hire PHP web developers in low payment for your business.
&lt;br /&gt;PHP contains free and free libraries along with the intent being core build. PHP also embedded free open source database like PostgreSQL, MySQL and SQL ite, LDAP servers, as well as others. This scripting language also supports relational database management system. It decreases the web development cost.
&lt;br /&gt;PHP is generally used in combination with Linux the gw990, and it is an also open source and free as replacements. The development of the business website using PHP and Linux it is going to decrease the cost. PHP is usually deployed of many web servers, many os and platforms, and can be employed all sorts of relational database management systems.
&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 22px;"&gt;curtsy&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Lucida bright', 'Times new roman', Georgia, 'lucida bright', serif; font-size: 15px; line-height: 22px; background-color: rgb(255, 255, 255); "&gt;: &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(153, 153, 153); font-family: Georgia, 'Lucida bright', 'Times new roman', Georgia, 'lucida bright', serif; font-size: 15px; line-height: 22px; background-color: rgb(255, 255, 255); "&gt;maryr.johnston&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-6810050760234647612?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T03:15:45.389-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/08/expenditure-of-php-web-development.html</feedburner:origLink></item><item><title>PHP.Net: 5.3.7 Upgrade Warning</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/8T0RerCQ9VY/phpnet-537-upgrade-warning.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 23 Aug 2011 03:14:34 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-2447907108286197459</guid><description>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 25px; background-color: rgb(255, 255, 255); "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(67, 67, 67); line-height: 20px; text-align: left; "&gt;In a quick note from the PHP.net site, they have a warning for those running PHP 5.3.7 (the most recent release) – there’s a bug that’s serious enough (with &lt;a href="http://php.net/crypt" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(0, 51, 102); text-decoration: none; "&gt;crypt&lt;/a&gt;) to where upgrades should probably wait until 5.3.8.&lt;/p&gt;&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(67, 67, 67); line-height: 20px; text-align: left; "&gt;Due to unfortunate issues with 5.3.7 (see &lt;a href="https://bugs.php.net/bug.php?id=55439" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(0, 51, 102); text-decoration: none; "&gt;bug#55439&lt;/a&gt;) users should wait with upgrading until 5.3.8 will be released (expected in few days).&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(67, 67, 67); line-height: 20px; text-align: left; "&gt;&lt;a href="https://bugs.php.net/bug.php?id=55439" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(0, 51, 102); text-decoration: none; "&gt;The issue&lt;/a&gt; causes the crypt() function to only return the (MD5-only) salt it was given instead of the correctly hashed string. If you need to replace this immediately, you can pull the latest from &lt;a href="http://snaps.php.net/" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(0, 51, 102); text-decoration: none; "&gt;the snaps site&lt;/a&gt; (or &lt;a href="http://windows.php.net/snapshots/" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(0, 51, 102); text-decoration: none; "&gt;binaries for Windows&lt;/a&gt;). Keep an eye out for PHP 5.3.8 in the near future.&lt;/p&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-2447907108286197459?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T03:14:34.787-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/08/phpnet-537-upgrade-warning.html</feedburner:origLink></item><item><title>If PHP Were British</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/5Q4bERYgWNk/if-php-were-british.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 23 Aug 2011 03:13:33 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-606269781574141106</guid><description>&lt;span class="Apple-style-span" style="color: rgb(68, 68, 68); font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 21px; background-color: rgb(255, 255, 255); "&gt;&lt;div id="article" style="font-size: 13px; text-align: left; "&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;When &lt;a href="http://toys.lerdorf.com/" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;Rasmus Lerdorf&lt;/a&gt; first put &lt;a href="http://www.php.net/" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;PHP&lt;/a&gt; together, he - quite sensibly, despite his heritage - chose not to write it in Greenlandic or Danish. Good job too - that would have been rather unpleasant to work with. He opted instead, being in Canada at the time, for the local tongue. No, not French - that bastard dialect of the Queen's English commonly referred to as "US English"&lt;sup style="font-size: 13px; text-align: left; "&gt;&lt;a href="http://www.addedbytes.com/blog/if-php-were-british/#note1" id="notelink1" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;PHP developers in Britain have been grumpy about this ever since. What was he thinking? And more importantly, how do we undo this travesty? How do we developers ensure the traditions of the British Empire continue to be upheld, even in the digital age?&lt;/p&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;A Slap in the Face&lt;/h3&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$variable_name&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;The first, but maybe the most important, of many changes that will allow PHP to achieve a more elegant feel is to remove that symbol so beloved by the US and replace it with something altogether more refined. More solid. More ... sterling.&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£variable_name&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;Getting Started&lt;/h3&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;&lt;!--?php&lt;/span--&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;echo&lt;/span&gt; &lt;span class="sh_string" style="font-size: 13px; text-align: left; color: rgb(255, 160, 160); font-style: normal; "&gt;'Hello World!'&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;?&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;How many of today's British programmers have been put off at the outset by the brazen informality of this simple yet obscenely Americanised program, colloquially referred to as "Hello World"? A more Imperial, formal introduction might encourage a greater proportion of young British talent to remain with the language and thus give the broader community a more urbane air.&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;&lt;!--?php&lt;/span--&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;announce&lt;/span&gt; &lt;span class="sh_string" style="font-size: 13px; text-align: left; color: rgb(255, 160, 160); font-style: normal; "&gt;'Good morrow, fellow subjects of the Crown.'&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;?&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;Abbreviations&lt;/h3&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;Few things are more abhorrent to the British than unnecessary abbreviations. "Text speak" is unheard of on the streets of London, as the natural ingrained British grammarian simply refuses to stoop to sending messages of the "c u soon traffic kthxbye" variety, instead proferring something altogether more elegant: "Dear Sir/Madam. I will arrive as soon as time allows, which I expect to be within the hour. I assure you the horses shall not be spared. Yours respectfully." (slower to type, yes, but we do not like to be rushed).&lt;/p&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;PHP, on the other hand, is full to bursting with abbreviations and acronyms which are entirely unnecessary:&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;str_replace&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;is_int&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;var_dump&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;preg_match&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;json_encode&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;mysql_connect&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;The following changes should improve things:&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;string_replace&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;is_integer&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;variable_dump&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;perl_regular_expression_match&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;javascript_object_notation_encode&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;my_structured_query_language_connect&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;&lt;em style="font-size: 13px; text-align: left; "&gt;Edit: I have corrected the expansion of "preg_match" - thanks to those who pointed it out.&lt;/em&gt;&lt;/p&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;Eloquence&lt;/h3&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;if&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$condition&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;)&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt; &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;else&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;Shakespeare would be ashamed to see his native tongue twisted into this monstrosity. Brevity is to be applauded in the right context - in some dark corner, where it shall be seldom seen - but not here. The if ... else block is the most used conditional code in all of PHP, so it must be made as inoffensive as possible. There are many options for its replacement, but this may be the strongest:&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;perchance&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£condition&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;)&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt; &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;otherwise&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;The same naturally applies to the Americanised switch ... case construct, which one can only describe as clunky and unpleasant:&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;switch&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$variable&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;)&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;case&lt;/span&gt; &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$option1&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;:&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;//Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;break&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;case&lt;/span&gt; &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$option2&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;:&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;//Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;break&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;default&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;:&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;//Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;break&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;Words such as "switch", "break" and "default" are hard on the reader and lack context. The Right Honorable &lt;a href="http://www.reddit.com/r/proper/comments/jp1yf/for_the_consideration_of_my_most_respectable/c2dz9zc" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;biggerthancheeses&lt;/a&gt; was kind enough to contribute a more gentrified suggestion (and has some interesting ideas, particularly around replacement of "include()" with something like "i_might_be_partial_to()", demonstrating a natural talent for the Imperialisation of programming languages):&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;what_about&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£variable&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;)&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;perhaps&lt;/span&gt; &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£possibility&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;:&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;//Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;splendid&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;perhaps&lt;/span&gt; &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£other_possibility&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;:&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;//Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;splendid&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;on_the_off_chance&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;:&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;//Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;        &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;splendid&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;Spelling&lt;/h3&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;imagecolorallocate&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;serialize&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;newt_centered_window&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;connection_status&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;Words fail me at this point. How is any self-respecting gentleman expected to make head or tail of these "words". It beggars belief that anyone could allow such distortions of words to be entered into a programming language. They, along with the cornucopia of similar errors, should be reverted to their proper forms immediately:&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;imagecolourallocate&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;serialise&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;newt_centred_window&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_function" style="font-size: 13px; text-align: left; color: rgb(255, 255, 255); font-weight: bold; font-style: normal; "&gt;connexion_status&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;()&lt;/span&gt;&lt;sup style="font-size: 13px; text-align: left; "&gt;&lt;a href="http://www.addedbytes.com/blog/if-php-were-british/#note2" id="notelink2" class="sh_url" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(255, 160, 160); margin-bottom: 0px; text-decoration: none; font-style: normal; "&gt;&lt;span class="sh_number" style="font-size: 13px; text-align: left; color: rgb(66, 202, 217); font-style: normal; "&gt;2&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;Manners&lt;/h3&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;try&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt; &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;catch&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;Exception &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$e&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;)&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Handle exception&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;die&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;&lt;span class="sh_string" style="font-size: 13px; text-align: left; color: rgb(255, 160, 160); font-style: normal; "&gt;'Message'&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;The try ... catch block is an excellent example of PHP's lack of manners. Far too direct to be allowed in the new PHP. Additionally, the word "die" is so very depressing. This new block, although more verbose, is vastly more polite and upbeat:&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;would_you_mind&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Code here&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt; &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;actually_i_do_mind&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;Exception &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£e&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;)&lt;/span&gt; &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_comment" style="font-size: 13px; text-align: left; color: rgb(128, 160, 255); font-style: normal; "&gt;// Politely move on&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;cheerio&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;(&lt;/span&gt;&lt;span class="sh_string" style="font-size: 13px; text-align: left; color: rgb(255, 160, 160); font-style: normal; "&gt;'Message'&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;Class&lt;/h3&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;Perhaps nothing is as important and ingrained in the British psyche as the notion of class and, while there are few opportunities for change within this part of PHP, the changes that there are to be made here are important.&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;class&lt;/span&gt; Republic &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    public &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$a&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    private &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$b&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    protected &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$c&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;$example&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;=&lt;/span&gt; &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;new&lt;/span&gt; Republic&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;To begin with, the current system has no place for class hierarchy and this is unacceptable. So we shall begin by giving classes specific levels - upper, middle, working - and no class can access the methods of one of a higher level without the explicit permission of the higher order class (of course, though it might then have access, it would not be a true member of the higher order and could not itself grant higher order access to other lower order classes). "Public" and "Private", in the British class system, are often synonymous (see, for example, school system nomenclature), so these must be adjusted, as should the "Protected" property visibility. The word "new", while passable, has a much more appropriate replacement in matters of class.&lt;/p&gt;&lt;div class="snippet-container" style="font-size: 13px; text-align: left; "&gt;&lt;div class="sh_darkblue snippet-wrap" style="font-size: 13px; text-align: left; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 20px; margin-bottom: 0px; margin-left: 20px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div class="snippet-menu" style="font-size: 0.9em; text-align: left; z-index: 1; margin-top: 0px; margin-right: 15px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;pre style="font-size: 1em; text-align: right; font-family: monospace, monospace; background-color: transparent; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;a class="snippet-text sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;plain&lt;/a&gt;&lt;a class="snippet-window sh_url" href="http://www.addedbytes.com/#" style="font-size: 12px; text-align: left; border-bottom-width: initial; border-bottom-style: none; border-bottom-color: initial; color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: underline; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; "&gt;pop-up&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="php sh_php snippet-formatted sh_sourceCode" style="font-size: 1em; text-align: left; font-family: monospace, monospace; background-color: rgb(58, 64, 78); color: rgb(204, 204, 204); font-style: normal; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; line-height: 1.8em; overflow-x: auto; overflow-y: auto; margin-top: 5px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; border-top-left-radius: 15px 15px; border-top-right-radius: 15px 15px; border-bottom-right-radius: 15px 15px; border-bottom-left-radius: 15px 15px; "&gt;&lt;ol class="snippet-num" style="font-size: 13px; text-align: left; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 3em; "&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;upper_class&lt;/span&gt; Empire &lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;{&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    state &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£a&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    private &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£b&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;    hereditary &lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£c&lt;/span&gt;&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_cbracket" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;}&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; text-align: left; padding-left: 1.5em; list-style-type: decimal-leading-zero; list-style-position: outside; list-style-image: none; "&gt;&lt;span class="sh_variable" style="font-size: 13px; text-align: left; color: rgb(38, 224, 231); font-style: normal; "&gt;£example&lt;/span&gt; &lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;=&lt;/span&gt; &lt;span class="sh_keyword" style="font-size: 13px; text-align: left; color: rgb(255, 255, 96); font-style: normal; "&gt;nouveau&lt;/span&gt; Empire&lt;span class="sh_symbol" style="font-size: 13px; text-align: left; color: rgb(216, 233, 27); font-weight: bold; font-style: normal; "&gt;;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;The Sun Never Sets ...&lt;/h3&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;It is hoped that these few simple changes will improve the reputation and status of PHP among other languages. No longer will it be the poor American cousin - instead it can take its rightful place as the - British - King of the scripting languages.&lt;/p&gt;&lt;h3 style="font-size: 1.7em; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 1em; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; letter-spacing: 0px; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; clear: left; font-family: Georgia, Times, serif; "&gt;Thanks&lt;/h3&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;Many thanks to &lt;a href="https://twitter.com/#!/markwallman" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;Mark&lt;/a&gt; and &lt;a href="https://twitter.com/#!/bluevurt" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;Pat&lt;/a&gt;, colleagues at &lt;a href="http://www.gsba.co.uk/" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;GSBA&lt;/a&gt;, who started this resurrection of the British Empire in the pub on Friday.&lt;/p&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;&lt;a href="http://www.addedbytes.com/blog/if-php-were-british/#notelink1" id="note1" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;1&lt;/a&gt;. Ok, the neighbouring local tongue.&lt;/p&gt;&lt;p style="font-size: 13px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; "&gt;&lt;a href="http://www.addedbytes.com/blog/if-php-were-british/#notelink2" id="note2" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;2&lt;/a&gt;. Yes, &lt;a href="http://en.wikipedia.org/wiki/American_and_British_English_spelling_differences#-xion.2C_-ction" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; "&gt;connexion&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="translatebox" style="font-size: 13px; text-align: left; margin-top: 50px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; "&gt;&lt;div class="addthis_toolbox addthis_default_style addthis_32x32_style" style="font-size: 13px; text-align: center; width: 430px; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; "&gt;&lt;a class="addthis_button_google at300b" href="http://www.addthis.com/bookmark.php?v=250&amp;amp;winname=addthis&amp;amp;pub=ra-4db5226a16bf710d&amp;amp;source=tbx32-250&amp;amp;lng=en-US&amp;amp;s=google&amp;amp;url=http%3A%2F%2Fwww.addedbytes.com%2Fblog%2Fif-php-were-british%2F&amp;amp;title=If%20PHP%20Were%20British%20-%20Added%20Bytes%20by%20Dave%20Child&amp;amp;ate=AT-ra-4db5226a16bf710d/-/-/4e537ccfd8595510/4&amp;amp;frommenu=1&amp;amp;uid=4e537ccf39c6c664&amp;amp;ct=1&amp;amp;tt=0" target="_blank" title="Send to Google" style="font-size: 13px; text-align: left; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(92, 128, 209); color: rgb(92, 128, 209); margin-bottom: 0px; text-decoration: none; cursor: pointer; border-bottom: inherit; float: left; padding-top: 0px; padding-right: 2px; padding-bottom: 0px; padding-left: 2px; "&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-606269781574141106?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T03:13:33.934-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/08/if-php-were-british.html</feedburner:origLink></item><item><title>The future of PHP</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/6wi6jv_R1VY/future-of-php.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Sat, 25 Jun 2011 22:32:33 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-1589584941965091405</guid><description>&lt;p&gt;PHP is already popular, used in millions of domains (according to Netcraft), supported   by most ISPs and used by household-name Web companies like Yahoo! The upcoming versions   of PHP aim  to add to this success by introducing new features that make PHP more usable   in some cases and more secure  in others. Are you ready for PHP V6? If you were   upgrading tomorrow, would your scripts execute just fine or would you have work to do?   This article focuses on the changes  for PHP V6 — some of them back-ported to   versions PHP V5.x — that could require some tweaks to your current scripts. &lt;/p&gt;             &lt;p&gt;If you're not using PHP yet and have been thinking about it, take a look at its latest   features. These features, from Unicode  to core support for XML, make it even easier    for you to  write feature-filled PHP applications. &lt;/p&gt;             &lt;p&gt;&lt;a name="N10060"&gt;&lt;span class="atitle"&gt;New PHP V6 features&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;              &lt;p&gt;PHP V6 is currently available as a developer snapshot, so you can download and try out   many of the features and  changes listed in this article. For  features that   have been implemented in the  current snapshot, see &lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#resources"&gt;Resources&lt;/a&gt;. &lt;/p&gt;             &lt;p&gt;&lt;a name="N1006E"&gt;&lt;span class="smalltitle"&gt;Improved Unicode support&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;Much improved for PHP V6 is support for Unicode strings in many of the core functions.   This new feature has  a big impact because it will allow PHP to support a broader set of   characters for international support. So, if you're a developer or architect using a   different language, such  as the Java™ programming language, because it has   better internationalization (i18n)  support than PHP, it'll be time to take another look at PHP when the support improves. &lt;/p&gt;              &lt;p&gt;Because you can download and use a developer's version of PHP V6 today, you will see   some functions already supporting Unicode  strings. For a list of functions that have   been tested and verified  to handle Unicode, see &lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#resources"&gt;Resources&lt;/a&gt;. &lt;/p&gt;             &lt;div class="ibm-container ibm-alt-header dw-container-sidebar"&gt;&lt;h2&gt;What is Unicode?&lt;/h2&gt;&lt;div class="ibm-container-body"&gt;                  Unicode is an industry-standard set of characters, character encoding, and encoding methodologies primarily aimed at enabling  i18n and localization (i10n). The Unicode Transformation Format (UTF)  specifies a way to encode characters for Unicode. For more information about Unicode and UTF, see &lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#resources"&gt;Resources&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;             &lt;p&gt;&lt;a name="N1008E"&gt;&lt;span class="smalltitle"&gt;Namespaces&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;                 &lt;i&gt;Namespaces&lt;/i&gt; are a way of avoiding name collisions between functions and classes   without using prefixes in naming  conventions that make the names of your methods and   classes unreadable.  So by using namespaces, you can have class names that someone else   might use,  but now you don't have to worry about running into any problems. Listing 1   provides an example of a namespace  in PHP. &lt;/p&gt;             &lt;p&gt;You won't have to update or change anything in your code because any PHP code you write   that doesn't include namespaces will run just fine. Because the namespaces feature   appears to be back-ported to V5.3 of PHP, when it becomes available, you can start to   introduce namespaces into  your own PHP applications. &lt;/p&gt;            &lt;br /&gt;&lt;a name="list1"&gt;&lt;b&gt;Listing 1. Example of a namespace&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;                  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;            &lt;p&gt;&lt;a name="N100A8"&gt;&lt;span class="atitle"&gt;Web 2.0 features&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;Depending on how you use PHP and what your scripts look like now, the language and   syntax differences  in PHP V6 may or may not affect you as much as the next features,   which are those that directly  allow you to introduce Web 2.0 features into your PHP application. &lt;/p&gt;             &lt;p&gt;&lt;a name="N100B2"&gt;&lt;span class="smalltitle"&gt;SOAP&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;SOAP is one of the protocols that Web services "speak" and is supported in quite a few   other languages, such as the  Java programming  language and Microsoft® .NET. Although there   are other ways to consume and expose Web  services, such as Representational State   Transfer (REST), SOAP  remains a common way of allowing different platforms to have   interoperability. In addition  to SOAP modules in the PHP Extension and Application   Repository (PEAR)  library, a SOAP extension to PHP was introduced in V5. This extension   wasn't enabled by default, so  you have to enable the extension or hope your ISP did. In   addition, PEAR packages  are available that allow you to build SOAP clients and servers, such as the SOAP package. &lt;/p&gt;             &lt;p&gt;Unless you change the default, the SOAP extension will be enabled for you in V6. These   extensions provide an  easy way to implement SOAP clients and SOAP servers, allowing you   to build PHP applications that consume and provide Web services. &lt;/p&gt;             &lt;p&gt;If SOAP extensions are on by default, that means you won't have to configure them in   PHP. If you develop PHP  applications and publish them to an ISP, you may need to check   with your ISP to verify that  SOAP extensions will be enabled for you when they upgrade. &lt;/p&gt;             &lt;p&gt;&lt;a name="N100C4"&gt;&lt;span class="smalltitle"&gt;XML&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;As of PHP V5.1, XMLReader and XMLWriter have been part of the core of PHP, which makes   it easier for  you to work with XML in your PHP applications. Like the SOAP extensions,   this can be good news if you  use SOAP or XML because PHP V6 will be a better fit for   you than V4 out of the box. &lt;/p&gt;             &lt;p&gt;The XMLWriter and XMLReader are stream-based object-oriented classes that allow you to   read and write  XML without having to worry about the XML details. &lt;/p&gt;             &lt;div class="ibm-alternate-rule"&gt;&lt;hr /&gt;&lt;/div&gt;&lt;p class="ibm-ind-link ibm-back-to-top"&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#ibm-pcon" class="ibm-anchor-up-link"&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="N100D0"&gt;&lt;span class="atitle"&gt;Things removed&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;              &lt;p&gt;In addition to having new features, PHP V6 will not have some other functions and   features that have been in previous  versions. Most of these things, such as &lt;code&gt;register_globals&lt;/code&gt; and  &lt;code&gt;safe_mode&lt;/code&gt;, are   widely considered "broken" in current PHP, as they may expose security risks. In an   effort to clean up PHP,  the functions and features listed in the next section will be   removed, or deprecated,  from PHP. Opponents of this removal will most likely cite   issues with existing scripts breaking  after ISPs or enterprises upgrade to PHP V6, but   proponents of this cleanup  effort will be happy that the PHP team is sewing up some   holes and providing a cleaner,  safer implementation. &lt;/p&gt;             &lt;p&gt;Features that will be removed from the PHP version include:&lt;/p&gt;             &lt;ul&gt;&lt;li&gt;                     &lt;code&gt;magic_quotes&lt;/code&gt;                 &lt;/li&gt;&lt;li&gt;                     &lt;code&gt;register_globals&lt;/code&gt;                 &lt;/li&gt;&lt;li&gt;                     &lt;code&gt;register_long_arrays&lt;/code&gt;                 &lt;/li&gt;&lt;li&gt;                     &lt;code&gt;safe_mode&lt;/code&gt;                 &lt;/li&gt;&lt;/ul&gt;             &lt;p&gt;&lt;a name="N10104"&gt;&lt;span class="smalltitle"&gt;                 &lt;code&gt;magic_quotes&lt;/code&gt;             &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;              &lt;p&gt;Citing portability, performance, and inconvenience, the PHP documentation discourages   the use of  &lt;code&gt;magic_quotes&lt;/code&gt;. It's so discouraged that it's being   removed from PHP V6 altogether, so before upgrading to PHP V6, make sure that all your   code avoids using  &lt;code&gt;magic_quotes&lt;/code&gt;. If you're using   &lt;code&gt;magic_quotes&lt;/code&gt;  to escape strings for database calls, use your   database  implementation's parameterized queries, if they're supported. If not, use your   database implementation's  escape function, such as &lt;code&gt;mysql_escape_string&lt;/code&gt; for MySQL or  &lt;code&gt;pg_escape_string&lt;/code&gt; for  PostgreSQL. Listing 2 shows an example of &lt;code&gt;magic_quotes&lt;/code&gt; use. &lt;/p&gt;            &lt;br /&gt;&lt;a name="list2"&gt;&lt;b&gt;Listing 2. Using &lt;code&gt;magic_quotes&lt;/code&gt; (discouraged)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;                  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;            &lt;p&gt;After preparing your PHP code for the new versions of PHP, your code should look like that in Listing 3.&lt;/p&gt;            &lt;br /&gt;&lt;a name="list3"&gt;&lt;b&gt;Listing 3. Using parameterized queries (recommended)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;                 prepare("INSERT INTO USERS (USERNAME) VALUES ?"); $statement-&amp;gt;execute(array($_GET['username'])); ?&amp;gt; &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;            &lt;p&gt;Now that support for &lt;code&gt;magic_quotes&lt;/code&gt; will be completely   removed, the &lt;code&gt;get_magic_quotes_gpc()&lt;/code&gt;  function will no longer   be available. This may affect some  of the older PHP scripts, so before updating, make   sure you fix any locations in which  this functions exists. &lt;/p&gt;             &lt;p&gt;&lt;a name="N1014F"&gt;&lt;span class="smalltitle"&gt;                 &lt;code&gt;register_globals&lt;/code&gt;             &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;The &lt;code&gt;register_globals&lt;/code&gt; configuration key was already defaulted   to off in PHP V4.2, which was controversial at the time. When &lt;code&gt;register_globals&lt;/code&gt; is turned on,  it was easy to use variables that   could be injected with values from HTML forms.  These variables don't really require   initialization in your scripts, so  it's easy to write scripts with gaping security   holes. The &lt;code&gt;register_globals&lt;/code&gt; documentation  (see &lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#resources"&gt;Resources&lt;/a&gt;) provides much more  information about &lt;code&gt;register_globals&lt;/code&gt;. See  Listing 4 for an example of using &lt;code&gt;register_globals&lt;/code&gt;. &lt;/p&gt;            &lt;br /&gt;&lt;a name="list4"&gt;&lt;b&gt;Listing 4. Using &lt;code&gt;register_globals&lt;/code&gt; (discouraged)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;                  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;            &lt;p&gt;If your PHP code uses global variables, you should update it. If you don't update your   code to get prepared for newer versions  of PHP, consider updating it for security   reasons. When you're finished,  your code should look like Listing 5. &lt;/p&gt;            &lt;br /&gt;&lt;a name="list5"&gt;&lt;b&gt;Listing 5. Being specific instead (recommended)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;                  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;            &lt;p&gt;&lt;a name="N1018F"&gt;&lt;span class="smalltitle"&gt;register_long_arrays&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;The &lt;code&gt;register_long_arrays&lt;/code&gt; setting, when turned on, registers   the &lt;code&gt;$HTTP_*_VARS&lt;/code&gt;  predefined variables. If you're using the   longer variables, update now to  use the shorter variables. This setting was introduced   in PHP V5 — presumably for backward-compatibility — and the PHP folks   recommend turning it off for performance reasons. Listing 6 shows an example of &lt;code&gt;register_long-arrays&lt;/code&gt; use. &lt;/p&gt;            &lt;br /&gt;&lt;a name="list6"&gt;&lt;b&gt;Listing 6. Using deprecated registered arrays (discouraged) &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;                  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;             &lt;p&gt;If your PHP code looks like that shown in Listing 6, update it to look like that in   Listing 7. Shut off the  &lt;code&gt;register_long_arrays&lt;/code&gt; setting if   it's on and  test your scripts again. &lt;/p&gt;            &lt;br /&gt;&lt;a name="list7"&gt;&lt;b&gt;Listing 7. Using &lt;code&gt;$_GET&lt;/code&gt; (recommended)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;                  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;            &lt;p&gt;&lt;a name="N101C7"&gt;&lt;span class="smalltitle"&gt;                 &lt;code&gt;safe_mode&lt;/code&gt;             &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;The &lt;code&gt;safe_mode&lt;/code&gt; configuration key, when turned on, ensures   that the owner of a  file being operated on matches the owner of the script that is   executing. It was originally  a way to attempt to handle security when operating in a   shared server environment,  like many ISPs would have. (For a link to a list of the   functions affected by  this &lt;code&gt;safe_mode&lt;/code&gt; change, see &lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#resources"&gt;Resources&lt;/a&gt;.) Your PHP  code will be unaffected by this change, but   it's good to be  aware of it in case you're setting up PHP in the future or counting on   &lt;code&gt;safe_mode&lt;/code&gt; in your  scripts. &lt;/p&gt;             &lt;p&gt;&lt;a name="N101E4"&gt;&lt;span class="smalltitle"&gt;PHP tags&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;              &lt;p&gt;Microsoft Active Server Pages (ASP)-style tags — the shorter version of the PHP   tags — are no longer  supported. To make sure this is not an issue for your   scripts, verify that you aren't  using the &lt;code&gt;&amp;lt;%&lt;/code&gt; or &lt;code&gt;%&amp;gt;&lt;/code&gt; tags in your  PHP files. Replace them with &lt;code&gt; and  &lt;code&gt;?&amp;gt;&lt;/code&gt;. &lt;/code&gt;&lt;/p&gt;             &lt;p&gt;&lt;a name="N10202"&gt;&lt;span class="smalltitle"&gt;FreeType 1 and GD 1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;              &lt;p&gt;The PHP team is removing support for both FreeType 1 and GD 1, citing the age and lack   of ongoing developments of  both libraries as the reason. Newer versions of both of   these libraries are available that provide better  functionality. For more information   about FreeType and  GD, see &lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#resources"&gt;Resources&lt;/a&gt;. &lt;/p&gt;             &lt;p&gt;&lt;a name="N10210"&gt;&lt;span class="smalltitle"&gt;                 &lt;code&gt;ereg&lt;/code&gt;             &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;The &lt;code&gt;ereg&lt;/code&gt; extension, which supports Portable Operating System   Interface (POSIX) regular expressions, is being removed from core PHP support. If you   are using any of the POSIX  regex functions, this change will affect you unless you   include the &lt;code&gt;ereg&lt;/code&gt; functionality. If you're using POSIX regex   today, consider taking the  time to update your regex functions to use the   Perl-Compatible Regular Expression  (PCRE) functions because they give you more features   and perform better. Table  1 provides a list of the POSIX regex functions that will not be available after   &lt;code&gt;ereg&lt;/code&gt; is removed. Their PCRE replacements are also shown. &lt;/p&gt;            &lt;br /&gt;&lt;a name="table1"&gt;&lt;b&gt;Table 1. &lt;code&gt;ereg()&lt;/code&gt; functions and their PCRE equivalents&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;            &lt;table class="ibm-data-table" summary="Listing of functions that will not be available without ereg" width="" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th scope="col"&gt;ereg() function&lt;/th&gt;&lt;th scope="col"&gt;Similar preg() function&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;                         &lt;code&gt;ereg()&lt;/code&gt;, &lt;code&gt;eregi()&lt;/code&gt;                     &lt;/td&gt;&lt;td&gt;                         &lt;code&gt;preg_match()&lt;/code&gt;                     &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;                         &lt;code&gt;ereg_replace()&lt;/code&gt;, &lt;code&gt;ereg_replacei()&lt;/code&gt;                     &lt;/td&gt;&lt;td&gt;                         &lt;code&gt;preg_replace()&lt;/code&gt;                     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;             &lt;div class="ibm-alternate-rule"&gt;&lt;hr /&gt;&lt;/div&gt;&lt;p class="ibm-ind-link ibm-back-to-top"&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-future/#ibm-pcon" class="ibm-anchor-up-link"&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="N10272"&gt;&lt;span class="atitle"&gt;PHP V5.3&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;             &lt;p&gt;Some of the features mentioned here have also been ported to PHP V5.3, which   is scheduled to be  released during the first quarter of 2008. You may want to upgrade   to V5.3 and start using these features now, so that when you move to V6 of PHP, it'll be   less of a jump. The following  list of features have been   back-ported to V5.3: &lt;/p&gt;             &lt;ul&gt;&lt;li&gt;Namespaces&lt;/li&gt;&lt;li&gt;XMLReader and XMLWriter in core by default&lt;/li&gt;&lt;/ul&gt;             &lt;div class="ibm-alternate-rule"&gt;&lt;hr /&gt;&lt;/div&gt; &lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;a name="author"&gt;&lt;span class="atitle"&gt;About the author&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="ibm-container ibm-portrait-module ibm-alternate-two"&gt;&lt;div class="ibm-container-body"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;a name="author1"&gt;&lt;/a&gt;Nathan  Good lives in the Twin Cities area of Minnesota. Professionally, he  does   software development, software architecture,  and systems  administration. When he's not writing software, he enjoys building PCs   and servers, reading about and working with new technologies, and trying  to get his friends  to make the move to open source software. He's  written and co-written many books and  articles, including &lt;i&gt;Professional Red Hat Enterprise Linux 3, Regular Expression Recipes: A Problem-Solution Approach,&lt;/i&gt; and &lt;i&gt; Foundations of PEAR: Rapid PHP Development.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-1589584941965091405?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-25T22:32:33.272-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/06/future-of-php.html</feedburner:origLink></item><item><title>Facebook looks to speed up PHP</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/xSwEzyxufPU/facebook-looks-to-speed-up-php.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Wed, 15 Jun 2011 02:30:21 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-2275980536757257015</guid><description>&lt;h2&gt;The internally-developed HipHop for PHP source code transformer is being offered via open source&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Technologists at Facebook on Tuesday are releasing a source code transformer intended to boost the performance of &lt;a href="http://www.infoworld.com/d/developer-world/php-frameworks-square-238"&gt;PHP&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In  development for the past two years, the technology, called HipHop for  PHP, has been used to reduce the CPU usage on Facebook Web servers by an  average of about 50 percent, said Haiping Zhao, senior server engineer  at Facebook.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[ InfoWorld reported on &lt;a href="http://www.infoworld.com/d/developer-world/php-6-boost-internationalization-unicode-993?source=fssr"&gt;PHP 6 highlights, including internationalization, that were detailed at a technical conference&lt;/a&gt; late last year. ] &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;"The  project has had a tremendous impact on Facebook. We feel the Web at  large can benefit from HipHop, so we are releasing it as open source  this evening in hope that it brings a new focus toward scaling large,  complex Web sites with PHP," Zhao said in a statement on the &lt;a href="http://developers.facebook.com/news.php?blog=1&amp;amp;story=358" target="_blank"&gt;Facebook Developers page&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The technology is not complete and users need to be comfortable with HipHop before trying it out, said Zhao.&lt;/p&gt; &lt;p&gt;HipHop,  he said, technically is not a compiler. It features a code transformer,  a reimplementation of PHP's runtime system and a rewrite of some common  PHP extensions to boost performance optimizations.&lt;/p&gt; &lt;p&gt;"HipHop  programmatically transforms your PHP source code into highly optimized  C++ and then uses g++ to compile it," Zhao said. "HipHop executes the  source code in a semantically equivalent manner and sacrifices some  rarely used features -- such as eval() -- in exchange for improved  performance."&lt;/p&gt; &lt;p&gt;PHP, Zhao said, offers benefits in terms of  programmer productivity, as do other scripting languages such as Perl,  Python and Ruby. But scripting languages are known to be less efficient  in terms of CPU and memory usage, he said.&lt;/p&gt; &lt;p&gt;"Because of this, it's been challenging to scale Facebook to over 400 billion PHP-based page views every month," Zhao said.&lt;/p&gt; &lt;p&gt;HipHop allows developers to keep the best aspects of PHP while taking advantage of performance of C++,  said Zhao.&lt;/p&gt; &lt;p&gt;"In  total, we have written over 300,000 lines of code and more than 5,000  unit tests. All of this will be released this evening on GitHub under  the open source PHP license," Zhao said.&lt;/p&gt; &lt;p&gt;The CEO of PHP tools maker Zend Technologies questioned how much of HipHop was Facebook-specific.&lt;/p&gt;&lt;p&gt;"It  will be interesting to learn what HipHop concepts apply to the broad  PHP community and what are specific to Facebook," said Andi Gutmans, of  Zend. "We have always adapted to changes within the PHP runtime, whether  these changes were made by us or by the community and will be glad to  continue doing so. We believe it is important to continue to fold in new  ideas and innovations into the community-based runtime."&lt;/p&gt; &lt;p&gt;&lt;em&gt;This story, "&lt;a href="http://www.infoworld.com/d/developer-world/facebook-looks-speed-php-807?source=footer"&gt;Facebook looks to speed up PHP&lt;/a&gt;," was originally published at &lt;a href="http://www.infoworld.com/?source=footer"&gt;InfoWorld.com&lt;/a&gt;. Follow the latest developments in &lt;a href="http://www.infoworld.com/d/developer-world?source=footer"&gt;software development&lt;/a&gt; at InfoWorld.com.&lt;/em&gt;&lt;/p&gt;                     Paul Krill is an editor at large at  InfoWorld, focusing on coverage of application development (desktop and  mobile) and core Web technologies such as HTML5, Java, and Flash.&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-2275980536757257015?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-15T02:30:21.014-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/06/facebook-looks-to-speed-up-php.html</feedburner:origLink></item><item><title>Adobe, Zend combine Flash and PHP development</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/94K5EzXk6SM/adobe-zend-combine-flash-and-php.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Wed, 15 Jun 2011 02:29:33 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-6719026483519045522</guid><description>&lt;h2&gt;Flash Builder 4.5 for PHP helps developers build apps for Web, desktop, and mobile systems, including Apple's iOS devices. But you can use Eclipse with plug-in available along with Flex sdk to compile in Eclipse itself.&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Zend Technologies and Adobe Systems today announced Flash Builder 4.5  for PHP, which enables developers to use PHP and Flash development  skills to build rich Internet applications for mobile, Web, and desktop  platforms.&lt;/p&gt; &lt;p&gt;The product provides an IDE combining Adobe's Flash  Builder 4.5, for ActionScript-based Flash client development, and Zend  Studio 8, for server-side PHP capabilities. Accentuating the use for  mobile deployments, the two vendors said applications can be delivered  to Google Android, Research in Motion BlackBerry Tablet OS, and Apple  iOS systems. For iOS, the IDE exports the applications into native code,  rather than run in an the AIR (Adobe Integrated Runtime) software,  which Apple prohibits on iOS. Android apps are also exported to a native  package.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[ Adobe is &lt;a href="http://www.infoworld.com/d/mobile-technology/flash-player-102-readied-android-tablets-302?source=fssr"&gt;backing Android tablets&lt;/a&gt; with Flash Player 10.2. | Keep up on key mobile developments and with InfoWorld's &lt;a href="http://www.infoworld.com/d/mobilize/blogs?source=fssr"&gt;Mobile Edge blog&lt;/a&gt; and &lt;a href="http://www.infoworld.com/newsletters/subscribe?showlist=infoworld_mobile_rpt&amp;amp;source=ifwelg_fssr"&gt;Mobilize newsletter&lt;/a&gt;. | Follow &lt;a href="http://www.twitter.com/pjkrill" target="_blank"&gt;Paul Krill on Twitter&lt;/a&gt;. ]&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Flash  Builder 4.5 for PHP, said Zend CEO Andi Gutmans, "makes it very easy  for PHP developers to also build mobile apps, and it makes very easy for  mobile developers to build server-side apps. We're coming at this from  both angles." Applications themselves can be built on Windows or Mac  clients.&lt;/p&gt; &lt;p&gt;"Developers will now be able to use one tool, one  framework, and one common code base and build apps that run on Android,  BlackBerry, and iOS," said Dave Gruber, Adobe group product manager.  Flash Builder 4.5 for PHP is due by May 11, with the premium edition,  featuring network tracking and memory and performance profilers, priced  at $799. A standard edition lacking these features will cost $399. Adobe  and Zend are making the announcement concurrently with &lt;a href="http://www.infoworld.com/d/application-development/adobe-adds-mobile-html5-capabilties-creative-suite-55-410"&gt;Adobe's rollout of its Adobe Creative Suite 5.5 product line&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;em&gt;This article, "&lt;a href="http://www.infoworld.com/d/application-development/adobe-zend-combine-flash-and-php-development-418?source=footer"&gt;Adobe, Zend combine Flash and PHP development&lt;/a&gt;," was originally published at &lt;a href="http://www.infoworld.com/?source=footer"&gt;InfoWorld.com&lt;/a&gt;. Follow the &lt;a href="http://www.infoworld.com/news"&gt;latest developments in business technology news&lt;/a&gt; and get a digest of the key stories each day in the &lt;a href="http://www.infoworld.com/newsletters/subscribe?showlist=infoworld_daily&amp;amp;source=ifwelg_footer"&gt;InfoWorld Daily newsletter&lt;/a&gt;. For the latest developments in business technology news, follow &lt;a href="http://twitter.com/infoworld" target="_blank"&gt;InfoWorld.com on Twitter&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;                     Paul Krill is an editor at large at  InfoWorld, focusing on coverage of application development (desktop and  mobile) and core Web technologies such as HTML5, Java, and Flash.&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-6719026483519045522?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-15T02:29:33.080-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/06/adobe-zend-combine-flash-and-php.html</feedburner:origLink></item><item><title>Cloud computing underwhelms PHP developers</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/mLR51349LNU/cloud-computing-underwhelms-php.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Wed, 15 Jun 2011 02:27:16 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-4922634782207458706</guid><description>&lt;h2&gt;Developers still see it as the future, but they think it is currently overhyped and vendor-driven&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;While technology vendors continue to pound home the message of cloud  computing, PHP developers Tuesday viewed the concept as overhyped and  were not in agreement on its benefits.&lt;/p&gt; &lt;p&gt;Developers at the ZendCon  2010 PHP conference in Santa, Clara, Calif., heard Zend Technologies CEO  Andi Gutmans tout the company's cloud computing plans, which involve  developing Zend PHP Cloud Platform. During his presentation, however,  developers appeared mostly underwhelmed when Gutmans asked if cloud  computing was game-changing or just hype. Afterward, developers gave  cloud computing mixed reviews.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[ Oracle &lt;a href="http://www.infoworld.com/d/cloud-computing/oracle-lays-out-its-cloud-vision-958?source=fssr"&gt;discussed its cloud plans&lt;/a&gt; on Monday . | Stay on top of the latest app dev news with the &lt;a href="http://www.infoworld.com/newsletters/subscribe?showlist=infoworld_developer&amp;amp;source=ifwelg_fssr"&gt;Developer World newsletter&lt;/a&gt;. ]&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;"I  guess I have a feeling that 10, 15 years from now, maybe we'll all be  using this stuff, but right now, it's entirely pushed by vendors," said  Phillip Winn, back-end developer for games builder Tapulous.&lt;/p&gt; &lt;p&gt;"I don't see value in it," Winn said. "I don't have a strong opinion. I don't care. It doesn't affect me."&lt;/p&gt; &lt;p&gt;Winn  recalled a former employer who thought cloud computing could be used to  cut costs and reduce staff levels. "Economically, it ended up not  making any sense for them," said Winn.&lt;/p&gt; &lt;p&gt;Cloud computing, said  attendee Chuck Hudson, founder of Aduci, a consulting firm, has been the  subject of some hype. "But there's definitely some opportunity there to  leverage cloud computing," with developers able to rapidly develop  systems and for enterprises to save on infrastructure and maintenance  costs, Hudson said.&lt;/p&gt; &lt;p&gt;Rather than view &lt;a href="http://www.infoworld.com/d/cloud-computing/unisys-official-says-cloud-computing-can-save-money-eliminating-us-jobs-635"&gt;cloud computing as a potential job-killer&lt;/a&gt;,  Hudson sees it as a chance for IT persons to expand horizons. "I think  it's more an opportunity for people in their current roles to learn the  new technology and apply it. So I think it's just retooling your  toolset."&lt;/p&gt; &lt;p&gt;Cloud computing, said Joseph Munowenyu, computer  programmer at Valley City State University, in North Dakota, is "where  everything is headed." At consulting firm Atos Origin, the company does  not yet use cloud computing, said Atos developer Chris Campbell. "It's  something we've been looking at." But he also saw "an element of hype"  to the concept.&lt;/p&gt; &lt;p&gt;After his presentation, Gutmans acknowledged  people could be "a bit tired of hearing about [cloud computing] because  there's so much talk about it." But customers are nonetheless interested  in leveraging its benefits, Gutmans said. Zend Cloud Platform will  feature portable and native cloud services, application platform  monitoring, cluster management, application deployment, configuration  management, and IDE integration.&lt;/p&gt; &lt;p&gt;Within the same building complex  as ZendCon, attendees at the Cloud Computing Conference &amp;amp; Expo  conference Tuesday were more upbeat about cloud computing, as would be  expected.&lt;/p&gt; &lt;p&gt;"We're definitely interested in cloud computing and  right now, I'm on a research project where we're actually using the  Amazon Web Services [cloud] environment to do all of our research work,"  said Jim Cannaliato, vice president of technology at SAIC.&lt;/p&gt; &lt;p&gt;Another  attendee noted his company's growing use of cloud computing. "We've got  some bits and pieces, so we're not fully cloud-enabled, but that's the  direction we're heading," said Sadri Behbahany, senior director of IT at  Wacom, which makes tablet input devices.&lt;/p&gt; &lt;p&gt;&lt;em&gt;This article, "&lt;a href="http://www.infoworld.com/d/cloud-computing/cloud-computing-underwhelms-php-developers-082?source=footer"&gt;Cloud computing underwhelms PHP developers&lt;/a&gt;," was originally published at &lt;a href="http://www.infoworld.com/?source=footer"&gt;InfoWorld.com&lt;/a&gt;. Follow the &lt;a href="http://www.infoworld.com/news"&gt;latest developments in business technology news&lt;/a&gt; and get a digest of the key stories each day in the &lt;a href="http://www.infoworld.com/newsletters/subscribe?showlist=infoworld_daily&amp;amp;source=ifwelg_footer"&gt;InfoWorld Daily newsletter&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.infoworld.com/category/domains/cloud-computing" target="blank"&gt;Read more about cloud computing&lt;/a&gt; in InfoWorld's Cloud Computing Channel. &lt;/p&gt;                     Paul Krill is an editor at large at  InfoWorld, focusing on coverage of application development (desktop and  mobile) and core Web technologies such as HTML5, Java, and Flash.&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-4922634782207458706?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-15T02:27:16.369-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/06/cloud-computing-underwhelms-php.html</feedburner:origLink></item><item><title>Google releases video chat source code</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/s7JDCII_NH8/google-releases-video-chat-source-code.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Wed, 15 Jun 2011 02:22:50 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-7782075962439755836</guid><description>&lt;h2&gt;Google has released the code for WebRTC, a voice and video codec for the Web&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Google has released the source code for a technology that it hopes  developers will use to embed real-time video and voice chat  functionality in their Web applications.&lt;/p&gt; &lt;p&gt;Google acquired the technology, called WebRTC (Web Real Time Communication), &lt;a href="http://www.computerworld.com/s/article/9176906/Google_to_acquire_voice_and_video_codec_company" target="_blank"&gt;when it purchased VoIP&lt;/a&gt;  (Voice over IP) software developer Global IP Solutions in 2010, for  approximately $68.2 million. The company said it would open source the  technology early last month.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[ Track the latest trends in open source with InfoWorld's &lt;a href="http://www.infoworld.com/d/open-source/blogs?source=fssr"&gt;Open Sources blog&lt;/a&gt; and &lt;a href="http://www.infoworld.com/newsletters/subscribe?showlist=infoworld_open_source&amp;amp;source=ifwelg_fssr"&gt;Technology: Open Source newsletter&lt;/a&gt;. ]&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;WebRTC  is a set of voice and video signal processing technologies, which can  be accessed by developers through HTML tags and JavaScript APIs  (application programming interfaces).&lt;/p&gt; &lt;p&gt;Today, Internet audio and  video chat services from companies such as Skype are chiefly  proprietary, accessible through plug-ins and client downloads. Last  month, Microsoft &lt;a href="http://www.cio.com/article/681843/Microsoft_Agrees_to_Buy_Skype_for_8.5_Billion" target="_blank"&gt;agreed to purchase&lt;/a&gt; Skype for $8.5 billion.&lt;/p&gt; &lt;p&gt;Google  wants third-party developers to use the voice and video engines to  create chat applications that can be run directly from within a browser.  Global IP Solutions has built WebRTC-based mobile clients for Android,  Windows Mobile and the iPhone. Ericsson Labs &lt;a href="http://www.youtube.com/watch?v=cx4rZH7fLpM&amp;amp;feature=player_embedded" target="_blank"&gt;built a videoconference prototype&lt;/a&gt; with the technology as well.&lt;/p&gt; &lt;p&gt;The  move to open source WebRTC echoes a similar move Google made when it  acquired video compression provider On2 Technologies in 2010. Google  subsequently &lt;a href="http://blogs.computerworld.com/15921/google_open_sourcing_vp8_video_may_change_internet_video_forever" target="_blank"&gt;released&lt;/a&gt; On2's VP8 video codec as open source to provide a royalty-free alternative to the widely used H.264 standard.&lt;/p&gt; &lt;p&gt;Google  is working with other browser developers, such as Mozilla and Opera, in  hopes they will support the technology in their browsers. The company  is also participating in W3C (World Wide Web Consortium) and IETF  (Internet Engineering Task Force) projects for creating real-time  communication Web standards. WebRTC is based on the W3C's Web  Applications 1.0 API.&lt;/p&gt; &lt;p&gt;The source code is available under a royalty-free BSD (Berkeley Software Distribution)-style license.&lt;/p&gt; &lt;p&gt;Google did not immediately respond to requests for comment.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Joab Jackson covers enterprise software and general technology breaking news for &lt;/em&gt;The IDG News Service&lt;em&gt;. Follow Joab on Twitter at &lt;a href="http://twitter.com/Joab_Jackson" target="_blank"&gt;@Joab_Jackson&lt;/a&gt;. Joab's email address is &lt;a href="mailto:Joab_Jackson@idg.com"&gt;Joab_Jackson@idg.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-7782075962439755836?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-15T02:22:50.195-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/06/google-releases-video-chat-source-code.html</feedburner:origLink></item><item><title>Building Semantic Web CRUD operations using PHP</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/8oVutuwtcLc/building-semantic-web-crud-operations.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Wed, 25 May 2011 03:54:24 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-1899271240755424554</guid><description>&lt;p&gt;When developing a Web application, it's standard practice to create a  database structure on which server-side code is placed for the logic  and UI layers. To connect to the database, the server-side code needs to  do some basic creating, updating, deleting, and — most importantly —  reading of records. As databases behind Web applications are typically  relational databases, these CRUD operations are done using the  well-known language, SQL. However, as Web development is increasingly  occurring through object-oriented programming (OOP), the model is  changing. &lt;/p&gt;  &lt;p&gt;The Resource Description Framework (RDF) is a perfect way to describe  objects while maintaining the meaning of that data. Simple Protocol and  RDF Query Language (SPARQL — pronounced "sparkle") is the language  typically used to query against that data, as it syntactically matches  the structure of RDF itself. Both RDF and SPARQL are technologies within  what has been dubbed the &lt;i&gt;Semantic Web stack.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;To fully embrace the Semantic Web idea, you can apply traditional  Web-development techniques to RDF data using SPARQL. This article shows  how to use a simplified Model-View-Controller (MVC) design pattern, the  PHP server-side scripting language, and SPARQL for connecting to RDF —  as opposed to using SQL on a relational database system. &lt;/p&gt;  &lt;p&gt;&lt;a name="N100C2"&gt;&lt;span class="atitle"&gt;SQL and SPARQL CRUD operations&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="ibm-container ibm-alt-header dw-container-sidebar"&gt;&lt;a name="sidebar2"&gt;&lt;/a&gt;&lt;h2&gt;Prerequisites&lt;/h2&gt;&lt;div class="ibm-container-body"&gt;  This article assumes a basic understanding of SQL, PHP, and Web  application development. An understanding of Semantic Web is also  beneficial. To run the &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, and &lt;code&gt;delete&lt;/code&gt; commands on Semantic Web-based data, you need a Semantic Web data store that supports the SPARQL/Update specification.&lt;/div&gt;&lt;/div&gt;      &lt;p&gt;It's worth taking a look at the similarities and differences  between CRUD operations when developed in SQL and SPARQL. Listing 1  shows the SQL code for a &lt;code&gt;read&lt;/code&gt; operation. &lt;/p&gt; &lt;br /&gt;&lt;a name="list1"&gt;&lt;b&gt;Listing 1. SQL for the &lt;code&gt;read&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="30%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;SELECT realname, dob, location FROM UserTable  WHERE realname = "John Smith"; &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;Compare that SQL-based code with the SPARQL-based code shown in      Listing 2. These are two &lt;code&gt;read&lt;/code&gt; operations because they're the easiest to understand, implement, and explain. This is true for both SQL  and SPARQL.&lt;/p&gt; &lt;br /&gt;&lt;a name="list2"&gt;&lt;b&gt;Listing 2. SPARQL for the &lt;code&gt;read&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;     PREFIX foaf: &lt;http: com="" foaf="" 1=""&gt;  PREFIX rdf: &lt;http: org="" 1999="" 02=""&gt; SELECT ?uri ?name ?dob ?location FROM &lt;http: org="" graph=""&gt; WHERE { ?uri rdf:type foaf:Person ; foaf:name "John Smith" ; foaf:birthday ?dob ; foaf:location ?location . } ; &lt;/http:&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;     &lt;p&gt;Your first thought when comparing the two listings is likely to  be that the SPARQL version clearly has many more lines than the SQL  version. That is true, but don't be tricked into thinking that the SQL  is necessarily simpler and cleaner. SPARQL, depending on the engine that  you run it against, can be completely distributed through something  known as the &lt;i&gt;linked data effect.&lt;/i&gt; In addition, it allows you to  have dynamic schemas because of its interlinked object-oriented  perspective, in contrast to SQL's strictly relational perspective. If  you were to split relational database tables into as many islands of  data, you would actually have many more lines of SQL in comparison to  SPARQL — not to mention that the SQL would be full of those nasty &lt;code&gt;JOIN&lt;/code&gt; descriptors. &lt;/p&gt;  &lt;p&gt; The first two lines of the SPARQL are the &lt;code&gt;PREFIX&lt;/code&gt;  declarations. According to Semantic Web theory, everything — whether an  object or a data graph source (also an object) — has a Uniform Resource  Identifier (URI). The &lt;code&gt;PREFIX&lt;/code&gt; lines are simply applying a  temporary label to some URIs — in this case, the Friend of a Friend and  RDF schemas. The benefit here is that you can use the &lt;code&gt;PREFIX&lt;/code&gt; declarations later in the query instead of having to use the full URIs. &lt;/p&gt;  &lt;p&gt;The next line of the SPARQL code describes the query request. It's  essentially the same as the SQL statement, except for the additional  request for the URI. Take note of the use of question marks (&lt;code&gt;?&lt;/code&gt;) to indicate that the term is a variable. &lt;/p&gt;  &lt;p&gt;The &lt;code&gt;FROM&lt;/code&gt; statement describes where to grab data. It's  the same in SQL and SPARQL, except that in SPARQL, the data source name  is a URI, rather than a string denoting a physical location on your  computer or network. &lt;/p&gt;  &lt;p&gt;The &lt;code&gt;WHERE&lt;/code&gt; statements are quite different from each other  because with SPARQL, you must specify which schemas to use to fetch  data. Once again, if you tried to do this using traditional methods, you  would need a lot more than plain SQL: You'd need to use the PHP, the  Java™ programming language, or some other server-side language to do  checking between data sources. It is reasonably clear what the lines of  SPARQL do, which includes ensuring that the data being retrieved is only  of the type &lt;code&gt;Person&lt;/code&gt;. SPARQL fetches a name and a location while doing some pattern matching to find the right John Smith. &lt;/p&gt;  &lt;p&gt;&lt;a name="N10143"&gt;&lt;span class="smalltitle"&gt;Create&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;CRUD operations in SPARQL are typically a bit more shrouded in mystery than the &lt;code&gt;read&lt;/code&gt; operation. However, they can be done. To begin, the &lt;code&gt;create&lt;/code&gt; operation inserts a new record or object into the table or graph. &lt;/p&gt; &lt;br /&gt;&lt;a name="list3"&gt;&lt;b&gt;Listing 3. SQL for the &lt;code&gt;create&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;     INSERT  INTO UserTable (realname, dob, location)  VALUES ("John Smith", "1985-01-01", "Bristol, UK");  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;     &lt;p&gt;Now, compare the SQL-based code in Listing 3 with the SPARQL-based code in Listing 4 for the same &lt;code&gt;create&lt;/code&gt; operation.&lt;/p&gt; &lt;br /&gt;&lt;a name="list4"&gt;&lt;b&gt;Listing 4. SPARQL for the &lt;code&gt;create&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;     PREFIX foaf: &lt;http: com="" foaf="" 1=""&gt;  PREFIX rdf: &lt;http: org="" 1999="" 02=""&gt; INSERT  INTO GRAPH &lt;http: com="" graph=""&gt;  (?realname, ?dob, ?location)  { &lt;http: org="" graph="" me=""&gt; rdf:Type  foaf:Person ;   foaf:name "John Smith" ;   foaf:birthday  &amp;lt;1985-01-01T00:00:00&amp;gt; ;  foaf:location "Bristol, UK"  } &lt;/http:&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;     &lt;p&gt;Once again, notice that the &lt;code&gt;PREFIX&lt;/code&gt; lines work exactly as they do in the &lt;code&gt;read&lt;/code&gt; operation with SPARQL. The &lt;code&gt;INSERT INTO&lt;/code&gt;  works similarly to SQL, but again, this is URI-based rather than  string-, table-, and name-based, which allows the operation to be done  across HTTP. You must also specify the schema again. Here, it's slightly  easier to understand than in the &lt;code&gt;read&lt;/code&gt; operation, as you  can have practically any kind of property so long as it is compatible  with the schema. This is a benefit and a beauty of the distributed  dynamically extensible objects formalism RDF provides. &lt;/p&gt;  &lt;p&gt;&lt;a name="N1018A"&gt;&lt;span class="smalltitle"&gt;Delete&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;If you create, at some point, you are probably going to want to  delete. For instance, users may want to delete their account on your  site (obviously unfortunate that they want to leave, but they may have  valid reasons). Listing 5 provides the SQL code for a typical &lt;code&gt;delete&lt;/code&gt; operation. &lt;/p&gt; &lt;br /&gt;&lt;a name="list5"&gt;&lt;b&gt;Listing 5. SQL for the &lt;code&gt;delete&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;     DELETE FROM UserTable  WHERE realname = "John Smith" &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;Now, compare the SQL-based code in Listing 5 with the SPARQL-based code in Listing 6. &lt;/p&gt; &lt;br /&gt;&lt;a name="list6"&gt;&lt;b&gt;Listing 6. SPARQL for the &lt;code&gt;delete&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;     DELETE  FROM GRAPH &lt;http: com="" graph=""&gt; {&lt;http: org="" graph="" me=""&gt; ?predicate ?object } &lt;/http:&gt;&lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;The fundamental difference between the SQL and the SPARQL code is  that the SQL deletes a row in a table, whereas the SPARQL deletes "all  triples" relating to the "John Smith" object denoted by  http://www.example.org/graph/johnsmith#me. This difference is the result  the graph-based nature of the RDF model. &lt;/p&gt;  &lt;p&gt;&lt;a name="N101B9"&gt;&lt;span class="smalltitle"&gt;Update&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Many Web applications allow users to update their information. The &lt;code&gt;UPDATE&lt;/code&gt; operation is what makes that possible. Listings 7 and 8 demonstrate how to code this in SQL and SPARQL. &lt;/p&gt; &lt;br /&gt;&lt;a name="list7"&gt;&lt;b&gt;Listing 7. SQL for the &lt;code&gt;update&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      UPDATE UserTable SET location = "Weston-super-Mare, UK" WHERE realname = "Joanne Smith" &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;Now compare the SQL-based code in Listing 7 with the SPARQL-based code in Listing      8 for the &lt;code&gt;update&lt;/code&gt; operation.&lt;/p&gt; &lt;br /&gt;&lt;a name="list8"&gt;&lt;b&gt;Listing 8. SPARQL for the &lt;code&gt;update&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;     PREFIX foaf: &lt;http: com="" foaf="" 1=""&gt; MODIFY &lt;http: org="" graph=""&gt;  DELETE {?uri foaf:location ?location}  INSERT {?uri foaf:location "Weston-super-Mare, UK"} WHERE { ?uri foaf:name "Joanne Smith" } &lt;/http:&gt;&lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;&lt;code&gt;UPDATE&lt;/code&gt; with SPARQL may seem incredibly silly, but it's  completely valid when you understand that you aren't updating a  relational table row — you're updating one very specific relationship  within a graph. The easiest way to do this without attaining multiple  locations is to delete and insert. The &lt;code&gt;MODIFY&lt;/code&gt; keyword is used to establish the connection to the right graph. &lt;/p&gt;  &lt;p class="ibm-ind-link ibm-back-to-top"&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-crud/index.html#ibm-pcon" class="ibm-anchor-up-link"&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="N101F5"&gt;&lt;span class="atitle"&gt;Connecting to SQL and SPARQL database systems&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To execute the above SQL and SPARQL statements, you must connect to  the system somehow. Different systems, obviously, have different  connection methods. One common method is to connect to a generic  database using Open Database Connectivity (ODBC) drivers, which are  often included in current versions of Mac OS X and Linux® systems, and  are installable on other operating systems such as Windows®. ODBC  essentially provides a simple generic API to connect to an SQL database  of your choice. Interestingly, ODBC also works with some Semantic Web  data stores such as OpenLink Virtuoso. However, most other Semantic Web  data stores require some custom connection procedure or a custom-made  generic connection system such as RDF2Go (at the time of writing, RDF2Go  is only for Java technology) that work with a variety of systems such  as Seseme and Jena. An alternative to consider if your data is going to  be exposed over HTTP is a SPARQL connection method over HTTP, which  makes your data "Linked Data"-ready and can be completely distributed.  Because the range of connection methods for SQL and SPARQL vary, it  isn't feasible to cover these in any detail here. &lt;/p&gt;  &lt;p class="ibm-ind-link ibm-back-to-top"&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-crud/index.html#ibm-pcon" class="ibm-anchor-up-link"&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="N10202"&gt;&lt;span class="atitle"&gt;SQL and SPARQL through PHP&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After selecting a connection method, the traditional next step is to  establish common operations in PHP. For a customized system, this is  usually done using SQL strings with PHP variables injected and passed to  it through function parameters. The function will then connect to the  database and execute this transaction. The proposal here is to do  exactly the same for a SPARQL-RDF connection as would be done for an  SQL-RDBMS connection. &lt;/p&gt;      &lt;p&gt;So, take a gander at another code comparison — this time using the PHP language — starting with &lt;code&gt;read&lt;/code&gt;, then going on to &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, and &lt;code&gt;update&lt;/code&gt;, as with the code comparisons above. Use a hypothetical query execution function called &lt;code&gt;query_execute&lt;/code&gt;, which takes in a string representation of the SQL/SPARQL statement. &lt;/p&gt;  &lt;p&gt;&lt;a name="N10226"&gt;&lt;span class="smalltitle"&gt;Read&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;First up is the simple &lt;code&gt;read&lt;/code&gt; operation. Variables can be injected into the query using string concatenation in PHP. &lt;/p&gt; &lt;br /&gt;&lt;a name="list9"&gt;&lt;b&gt;Listing 9. SQL for the &lt;code&gt;read&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;     function readUserInfo($realname) {     $sqlstatement = "SELECT realname, dob, location FROM UserTable WHERE     realname = \"" + realname + "\";";     &lt;i&gt;return query_execute($sqlstatement);&lt;/i&gt;     } &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;     &lt;p&gt;Now, compare the SQL-based PHP code in Listing 9 with the SPARQL-based PHP code in Listing 10 for the humble &lt;code&gt;read&lt;/code&gt; operation. &lt;/p&gt; &lt;br /&gt;&lt;a name="list10"&gt;&lt;b&gt;Listing 10. SPARQL for the &lt;code&gt;read&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      function readUserInfo($realname) {     $sqlstatement = "PREFIX foaf:     &lt;http: com="" foaf="" 1=""&gt; PREFIX rdf: &lt;http: org="" 1999="" 02=""&gt; SELECT ?uri ?name ?dob ?location  FROM &lt;http: org="" graph=""&gt; WHERE  { ?uri rdf:type foaf:Person ;  foaf:name \"" + $realname + "\" ;  foaf:birthday ?dob ; foaf:location ?location . } ;";     &lt;i&gt;return query_execute($sparqlstatement);&lt;/i&gt; } &lt;/http:&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;As you can see, the above function has been developed in such a way  that the function name and parameters are identical, which means that  you could start using the SPARQL version straightaway. Plus, if you're  using an ODBC system, you won't need to worry about return types  changing. &lt;/p&gt;  &lt;p&gt;&lt;a name="N1025F"&gt;&lt;span class="smalltitle"&gt;Create&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;As above, so below. The following PHP methods inject variables  into a string to run a dynamic query. Listing 11 shows how to do that  with a &lt;code&gt;create&lt;/code&gt; operation. &lt;/p&gt; &lt;br /&gt;&lt;a name="list11"&gt;&lt;b&gt;Listing 11. SQL for the &lt;code&gt;create&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      function createUserInfo($realname, $dob,     $location) {     $sqlstatement = "INSERT INTO UserTable (realname, dob,     location) VALUES (\"" + $realname + "\", \"" + $dob + "\", \"" +     $location + "\");"; &lt;i&gt;return query_execute($sqlstatement);&lt;/i&gt; } &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;     &lt;p&gt;Now compare the SQL-based PHP code in Listing 11 with the SPARQL-based PHP code in Listing 12 for the &lt;code&gt;create&lt;/code&gt; operation &lt;/p&gt; &lt;br /&gt;&lt;a name="list12"&gt;&lt;b&gt;Listing 12. SPARQL for the &lt;code&gt;create&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      function createUserInfo($uri, $realname,     $dob, $location) {     $sparqlstatement = "PREFIX foaf:     &lt;http: com="" foaf="" 1=""&gt; PREFIX rdf: &lt;http: org="" 1999="" 02=""&gt; INSERT INTO GRAPH &lt;http: com="" graph=""&gt;     (?realname, ?dob, ?location)      {      " + $uri + " rdf:Type     foaf:Person ;     foaf:name \"" + $realname + "\" ;     foaf:birthday         &amp;lt;" + $dob + "&amp;gt;&amp;gt; ;         foaf:location \"" + $location + "\}" return query_execute($sparqlstatement);     } &lt;/http:&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;For simplicity, the SPARQL version of this function includes a URI  parameter, although it is simple enough to do some additional string  concatenation to make the function declaration identical to the SQL. &lt;/p&gt;  &lt;p&gt;&lt;a name="N10295"&gt;&lt;span class="smalltitle"&gt;Delete&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;Use injection through concatenation in PHP to perform the &lt;code&gt;delete&lt;/code&gt;  operation. Please note, as mentioned in the previous section, that  different variables pass into the SQL and the SPARQL versions. Listing  13 shows the SQL code for the &lt;code&gt;delete&lt;/code&gt; operation.&lt;/p&gt; &lt;br /&gt;&lt;a name="list13"&gt;&lt;b&gt;Listing 13. SQL for the &lt;code&gt;delete&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      function deleteUserInfo($realname) {     $sqlstatement = "DELETE FROM UserTable WHERE realname = \"" + John Smith + "\"";         &lt;i&gt;return query_execute($sqlstatement);&lt;/i&gt;  } &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;     &lt;p&gt;Now, compare the SQL-based PHP code in Listing 13 with the SPARQL-based PHP code in Listing 14 for the &lt;code&gt;delete&lt;/code&gt; operation. &lt;/p&gt; &lt;br /&gt;&lt;a name="list14"&gt;&lt;b&gt;Listing 14. SPARQL for the &lt;code&gt;delete&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      function deleteUserInfo($uri) {     $sparqlstatement = "DELETE FROM GRAPH     &lt;http: com="" graph=""&gt; {&amp;lt;" + $uri +     "&amp;gt; ?predicate ?object }";      return query_execute($sparqlstatement);  } &lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;Once again, for simplicity, the SPARQL version of the function takes in a URI, rather than the real name. You could use the &lt;code&gt;DELETE SPARQL&lt;/code&gt; statement with a &lt;code&gt;WHERE&lt;/code&gt;  clause to find the data by name rather than URI, which would enable you  to have an identical function header to the SQL version. &lt;/p&gt;  &lt;p&gt;&lt;a name="N102D7"&gt;&lt;span class="smalltitle"&gt;Update&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;Updating a record is fairly simple in both SQL and SPARQL through  PHP. Just be aware of the different structures that relational  databases and RDF provide. Listing 15 shows the SQL code for the &lt;code&gt;update&lt;/code&gt; operation. &lt;/p&gt; &lt;br /&gt;&lt;a name="list15"&gt;&lt;b&gt;Listing 15. SQL for the &lt;code&gt;update&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      function updateUserInfo($realname, $location)     {         $sqlstatement = "UPDATE UserTable SET location = \"" + $location + "\" WHERE realname = \"" + $realname+ "\";";             &lt;i&gt;return query_execute($sqlstatement);&lt;/i&gt;      } &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;     &lt;p&gt;Now compare the SQL-based PHP code in Listing 15 with the SPARQL-based PHP code in Listing 16 for the &lt;code&gt;update&lt;/code&gt; operation. &lt;/p&gt; &lt;br /&gt;&lt;a name="list16"&gt;&lt;b&gt;Listing 16. SPARQL for the &lt;code&gt;update&lt;/code&gt; operation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;      function updateUserInfo($realname,     $location) {      $sparqlstatement = " PREFIX foaf: &lt;http: com="" foaf="" 1=""&gt; MODIFY &lt;http: org="" graph=""&gt; DELETE {?uri foaf:location ?location}  INSERT {?uri foaf:location \"" + $location + "\"} WHERE {      ?uri foaf:name \"" + $realname + "\"     }         ";         return query_execute($sparqlstatement);     } &lt;/http:&gt;&lt;/http:&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt; &lt;p&gt;The function declarations in the SQL and SPARQL versions are identical. As a result, swapping from SQL to SPARQL is simple.&lt;/p&gt;  &lt;p&gt;Although it's quite easy to move from a data source with an SQL  endpoint to a data source with a SPARQL endpoint, there are two  important areas you need to be aware of: levels of abstraction and the  similarities and differences between SQL and SPARQL. You want to avoid  that trapped feeling that comes from thinking that one language is  practically identical to another. So it's best to understand a  language's limitations while at the same time exploiting the language's  features — in particular, the various syntax sugar and graphical  representations provided by different languages. &lt;/p&gt;  &lt;p class="ibm-ind-link ibm-back-to-top"&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-crud/index.html#ibm-pcon" class="ibm-anchor-up-link"&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="N10312"&gt;&lt;span class="atitle"&gt;Levels of abstraction&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The example code in this article is strongly coupled to the database  structure. In theory, there is only a certain level of loose coupling  that SQL and RDBMS can cope with before table structure reorganization  must occur. However, this is not the case with SPARQL and RDF. With  SPARQL, your coupling with data can be very abstract because of the  distributed but interlinked nature of the RDF. The reusability of the  examples in this article could potentially be improved by increasing  their abstractness. However, for our purposes, simple closely coupled  functions are used to exemplify the similarities and differences between  SPARQL and SQL. &lt;/p&gt;  &lt;p&gt;As you can see from the example code, there are many similarities  between SQL and SPARQL. The differences come in when understanding the  Web-based, graphical, and object-oriented nature of RDF and how that  filters into the SPARQL language. As a simplified rule of thumb, you can  imagine the triple structure in RDF and SPARQL as basically  representing, in order, the unique primary key of a row (the subject),  the attribute/column name (the predicate or relationship) and the cell  data that is based on the row and column (the object). In addition,  SPARQL can take full advantage of HTTP communication, and, therefore,  data can be (but doesn't have to be) distributed over intranets,  extranets, and the wider Internet. &lt;/p&gt;  &lt;p class="ibm-ind-link ibm-back-to-top"&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-crud/index.html#ibm-pcon" class="ibm-anchor-up-link"&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="N1031E"&gt;&lt;span class="atitle"&gt;Why move from SQL to SPARQL?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There are many reasons why you would want to move from SQL to SPARQL.  The details extend beyond the scope of this article, but you could be  motivated by the following points: &lt;/p&gt;  &lt;ul&gt;&lt;li&gt;You want a more distributed data solution.&lt;/li&gt;&lt;li&gt;You want to expose your data on the Web for people to use and link to.&lt;/li&gt;&lt;li&gt;You may find Node-Arc-Node relationships (triple) easier to understand than relational database models.&lt;/li&gt;&lt;li&gt;You may want to understand your data in a pure object-oriented  fashion to work with an OOP paradigm (PHP V5 and later supports OOP). &lt;/li&gt;&lt;li&gt;You want to build generic agents that can connect to data sources on the Web. &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Of course, there are also reasons why you may &lt;i&gt;not&lt;/i&gt; want to move  away from SQL, and they are probably perfectly valid reasons. SPARQL is  an additional method of querying, not necessarily an immediate  replacement of SQL. The same goes for relational data and Semantic  Web-based data. These are not replacements. Instead, it's best to think  in terms of merging newer and older techniques to produce a hybrid  system that can handle and be handled by older legacy systems and the  current and future systems.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;curtsy: Daniel Lewis&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-1899271240755424554?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-25T03:54:24.827-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2011/05/building-semantic-web-crud-operations.html</feedburner:origLink></item><item><title>Is This Web 3.0?</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/TMzD-Zvg4XQ/is-this-web-30.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Fri, 31 Dec 2010 01:43:18 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-4000407327152623982</guid><description>Not everyone agrees on exactly what Web 2.0 entails. As with all great buzzwords and concepts, people are already predicting what Web 3.0 will be. Will rich internet applications dominate it? &lt;p&gt;&lt;/p&gt;&lt;p&gt;RIAs are still in their infancy, but when done right they're incredibly powerful tools. When Google launched Google Maps a few years ago, it opened people's eyes to the fact that web browsers can do much more than merely display pictures and text.&lt;/p&gt;&lt;p&gt;Currently, there are four mainstream mechanisms being used to develop RIAs.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;AJAX/JavaScript:&lt;/b&gt; AJAX is a web development technique for using JavaScript with XML to create a rich internet application by dynamically and asynchronously exchanging data in the background without having to refresh the page. Google Maps and Gmail demonstrated what could be done with simple existing technologies like JavaScript and XMLHttpRequest. Google, Microsoft and Yahoo! all now promote their own AJAX toolkits to assist in building AJAX-rich media functionality.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Flash/Flex:&lt;/b&gt; The first horse in the RIA race was Flash. Adobe/Macromedia with its Flash/Flex infrastructure is still the leader in online video. Combining the programming capabilities of Flex makes an incredibly powerful toolset for creating internet applications. Flash has strong penetration and when used effectively can enhance your website. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Silverlight/.NET:&lt;/b&gt; Microsoft is barreling ahead with Silverlight, a browser plug-in to deliver interactive web applications that should be taken seriously. The company launched Silverlight earlier this year and is promoting it heavily to its large partner development network. Silverlight is delivered to a browser via XAML, which is a text-based markup language. This makes it easier for search engines to scan Silverlight vs. Flash.&lt;/p&gt;&lt;p&gt;&lt;b&gt;OpenLaszlo:&lt;/b&gt; Finally, even though you don't see it much, there's an open-source platform for RIAs called OpenLaszlo. Initially developed as a proprietary system by Laszlo Systems, it was made open source in 2004. Not wanting to be left out of the RIA race, IBM--consistent with its embracing of Linux and other open source--has helped propel OpenLaszlo. The company worked with Laszlo Systems to use the open source Eclipse development platform with OpenLaszlo. &lt;span class="arttext"&gt;Applications for OpenLaszlo can be run in Flash or in DHTML.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;One current issue with Flash is that while search engines can index it, they don't index it as well as with text because Flash is a binary compiled file. That's why most websites aren't entirely created in Flash. Accessibility and keyboard navigation can be issues with these rich applications as well. If you don't have a mouse or can't use one, then you'll have problems with these technologies. Also, while the plug-ins have sizable browser penetration, they're problematic for some users.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;What It Means for You&lt;br /&gt;&lt;/span&gt;What does all of this mean for business owners in the Web 2.0 era? For the tech entrepreneur it means new opportunities. Many traditional client server applications are being pressured to move their applications to the web. Entrepreneurs can potentially displace client server apps with new innovative web applications. For other entrepreneurs, you have to evaluate your business and what specific benefits you can get from adding rich features to your website. &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Ever Evolving&lt;br /&gt;&lt;/span&gt;There will be other emerging technologies in the RIA area. The combination of these rich features will help trends like social networking continue to evolve. We'll likely see many websites with more drag-and-drop-type features in the next few years. The online/offline office also will continue to develop as predominant internet companies compete with Microsoft Office for the next generation office applications. Web applications will continue to become more robust and feature rich than ever before.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:arial;"&gt;courtsy: Frank Bell&lt;/P&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-4000407327152623982?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-31T01:43:18.445-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2010/12/is-this-web-30.html</feedburner:origLink></item><item><title>NASA updated to MySql</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/xtje4JcqlQg/nasa-updated-to-mysql.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 25 Nov 2010 21:21:02 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-6897564771037387922</guid><description>&lt;p&gt;The NASA Acquisition Internet Service (NAIS) (&lt;a href="http://nais.nasa.gov/"&gt;http://nais.nasa.gov/&lt;/a&gt;)  is responsible for providing the general public with information  regarding contract opportunities with the revered space organization. A  network of servers interconnecting 12 of NASA's field installations,  NAIS is the only means for obtaining acquisition information for  contracts ranging between $25,000 and $500,000.  Saving NASA and its  partners roughly $4 million annually, the NAIS model has been so  successful that it has been adopted by the U.S. FedBizOpps program (&lt;a href="http://www.eps.gov/"&gt;http://www.eps.gov/&lt;/a&gt;)  as a means for providing access to contracting opportunities for the  entire U.S. Government. Furthermore, NAIS supports several thousand  users, and receives on average 300,000 hits each month.  &lt;/p&gt;&lt;p&gt;Given NAIS' mission-critical purpose at NASA, quite a few heads  turned when they announced the successful conversion of the NASA  Acquisition Internet Service database backend from Oracle to MySQL.  Restructuring of Oracle licensing agreements would have left NAIS facing  a serious budgeting dilemma. As a result, the NAIS team began searching  out a more cost-effective database solution. The obvious choice? Open  Source. And within the Open Source arena, the NAIS team settled upon  what they considered to be the most robust database product available:  MySQL.   &lt;/p&gt;&lt;p&gt;Asked what aspects of MySQL were most appealing, NAIS director Jim Bradford responded with three, paraphrased here:  &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Cost: Because the total cost of MySQL is limited to the cost of  technical support, given that MySQL is available for free download and  use in most cases.  &lt;/li&gt;&lt;li&gt;Support: Due to the large developer community which can be  found on the Internet. Although NASA has used direct support from the  MySQL developers infrequently, he stated that "they were very helpful  and responsive when needed". Furthermore, NAIS developer John Sudderth  stated in an article discussing the switch that the cost for official  support was about 1 percent of the technical support expenditure for  Oracle (&lt;a href="http://www.gcn.com/vol19_no33/enterprise/3275-1.html"&gt;http://www.gcn.com/vol19_no33/enterprise/3275-1.html&lt;/a&gt;). &lt;/li&gt;&lt;li&gt;Compatibility: MySQL can easily interface with most SQL-compliant applications through ODBC.  &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Perhaps a fourth advantage to making the switch to MySQL could be  attributed to performance. "We noticed an increase in [speed of]  performance since the change and have not experienced any problems with  the product.", says NAIS Computer Systems Analyst and project leader  Dwight Clark stated in an article for Federal Computer Week  (&lt;a href="http://www.fcw.com/fcw/articles/2000/1204/pol-nasa-12-04-00.asp"&gt;http://www.fcw.com/fcw/articles/2000/1204/pol-nasa-12-04-00.asp&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;courtsy: W.J. Gilmore  &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-6897564771037387922?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-25T21:21:02.735-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2010/11/nasa-updated-to-mysql.html</feedburner:origLink></item><item><title>MySQL and "LAMP" Save istockphoto.com $900K</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/PjeC-BzWmPQ/mysql-and-lamp-save-istockphotocom-900k.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 25 Nov 2010 21:18:51 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-3970853905226016818</guid><description>&lt;p&gt;Istockphoto.com is the biggest royalty-free stock photo community in  the world, and its sister company, istockpro.com, is home to a host of  illustrious professional photographers.  Every week, approximately 5,000  photographers upload more than 2,500 photos (2.5 GB) to MySQL® -- the  world's most popular open source database -- and approximately  1,250(1.25 GB) are accepted and posted to istock Web sites.  More than  200,000 customers, including corporations, advertising and public  relations agencies, and individuals access these photo databases and  download 20-30 GB daily for a variety of uses.   The MySQL database  tracks every photo submitted and manages the permissions and billing,  all for the fraction of the cost of traditional database systems.&lt;/p&gt;  &lt;p&gt;"We operate a classic LAMP system," says Patrick Lor, executive vice  president. "MySQL enables us to grow our business at a rate of 15 to 30  percent a month.&lt;/p&gt;  &lt;p&gt; A traditional database would have required at least a million  dollars in funding for design, hardware, and all of the other costs  associated with such solutions.  We still wouldn't have gained the  flexibility and stability that MySQL provides. With the LAMP approach,  we've built a business based on sweat and ideas, and are growing it  exponentially. And, it only cost about $100,000 to implement.&lt;/p&gt;  &lt;p&gt;According to Lor, istockphoto.com has a unique billing system that  saves the company substantial costs associated with invoicing.  In this  model, users pay a $10 fee and then download photos against that sum.   With each download, the user is issued a receipt.  When the $10 runs  out, users simply make another deposit.  The MySQL database monitors the  entire process.&lt;/p&gt;  &lt;p&gt;Istockpro.com, the other istock site, operates somewhat differently.   Professional photographers submit their photos, which are then posted  to the Web site. Users then pay by credit card.  MySQL tracks  permissions and transactions, and provides some minimal accounting  features to the photographers.  Again, email receipts are issued,  avoiding many of the costs typically associated with invoicing.&lt;/p&gt;  &lt;p&gt;Prior to moving to an open source solution, istock Web sites relied  on Cold Fusion.  Lor states that, in addition to costs associated with  this product, they were working with a version that they thought needed  more work before it could help achieve their goals.&lt;/p&gt;  &lt;p&gt;We realized that MySQL and other open source products opened more  options for us,  says Lor.  The talent pool was more varied and the  costs were certainly lower.  More importantly, open source provides  stability that is critical to our operations.  Traffic is king in this  business, and if we can't reliably support our photographers and our  customers, we're out of business.&lt;/p&gt;  &lt;p&gt;Lor says that his company also jumped on what it saw as a trend  toward using open source solutions for the enterprise, with unexpected  results. The increasing legitimacy of open source solutions enables  istock to approach much larger partners, such as Adobe Systems, Inc.,  than would otherwise be possible.&lt;/p&gt;  &lt;p&gt;After all, we're using the same database that Google and Yahoo! rely  on, Lor says.  That means that our choice of database is an asset,  and not a liability when we go after partners and new business.  It  helps us grow.&lt;/p&gt;  &lt;p&gt;MySQL helps istock grow in other ways, as well.   According to Lor,  the 250,000-strong customer database records comprise active users who  frequently ask for new features.  MySQL helps accommodate these  requests, enabling Lor and his team to make changes on the fly, in  most cases within an hour or two.&lt;/p&gt;  &lt;p&gt;Additionally, the istockphoto site is particularly active, with  photographers - and their photographs - changing on a daily basis.   MySQL tracks and manages these updates seamlessly.&lt;/p&gt;  &lt;p&gt;When you're growing as rapidly as istock, scalability becomes  mission-critical.  Over the last year, the istockphoto configuration has  grown from three to 10 Intel processors running Apache and Unix.  This  database comprises 250 GB of data, with 115 tables and 7.7 million  records.&lt;/p&gt;  &lt;p&gt;The istockpro database comprises 500 GB and runs on six Intel processors.  It supports 41 tables and 2.7 million records.&lt;/p&gt;  &lt;p&gt;MySQL is such an integral part of our business, that it literally  allows us to exist, says Lor.  The fact that we can grow as quickly as  we do is also attributable in large part to MySQL and the open source  community.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;courtsy: mysql&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-3970853905226016818?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-25T21:18:51.588-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2010/11/mysql-and-lamp-save-istockphotocom-900k.html</feedburner:origLink></item><item><title>Face Book Open Source Technologies</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/-q21-MIiN74/face-book-open-source-technologies.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Thu, 28 Oct 2010 00:11:49 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-4222677746722229065</guid><description>&lt;div class="body washbody documentation"&gt;&lt;div class="content"&gt;&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;Facebook has been developed from the ground up using open source  software. Developers building with Platform scale their own applications  using many of the same infrastructure technologies that power Facebook.&lt;/p&gt;    &lt;hr /&gt;  &lt;h2&gt;Platform&lt;/h2&gt;  &lt;p&gt;Our Platform engineering team has released and maintains open source SDKs for &lt;strong&gt;&lt;a href="http://github.com/facebook/facebook-android-sdk"&gt;Android&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://github.com/facebook/csharp-sdk"&gt;C#&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://github.com/facebook/facebook-iphone-sdk"&gt;iPhone&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://github.com/facebook/connect-js"&gt;JavaScript&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://github.com/facebook/php-sdk"&gt;PHP&lt;/a&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;a href="http://github.com/facebook/python-sdk"&gt;Python&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;hr /&gt;  &lt;h2&gt;Developer tools&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/facebook/codemod"&gt;codemod&lt;/a&gt;&lt;/strong&gt;  assists with large-scale codebase refactors that can be partially  automated but still require human oversight and occasional intervention.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://wiki.developers.facebook.com/index.php/FBJS/Animation"&gt;Facebook Animation&lt;/a&gt;&lt;/strong&gt; is a JavaScript library for creating customizable animations using DOM and CSS manipulation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://mirror.facebook.net/facebook/flvtool++"&gt;flvtool++&lt;/a&gt;&lt;/strong&gt; is a tool for hinting and manipulating the metadata of FLV files. It was originally created for &lt;a href="http://www.facebook.com/video/"&gt;Facebook Video&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932"&gt;Online Schema Change for MySQL&lt;/a&gt;&lt;/strong&gt; lets you alter large database tables without taking your cluster offline.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/facebook/phpembed"&gt;PHPEmbed&lt;/a&gt;&lt;/strong&gt;  makes embedding PHP truly simple for all of our developers (and indeed  the world) we developed this PHPEmbed library which is just a more  accessible and simplified API built on top of the PHP SAPI.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.phpsh.org/"&gt;phpsh&lt;/a&gt;&lt;/strong&gt; provides  an interactive shell for PHP that features readline history, tab  completion, and quick access to documentation. It is ironically written  mostly in Python.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/facebook/three20"&gt;Three20&lt;/a&gt;&lt;/strong&gt; is an Objective-C library for iPhone developers which provides many UI elements and data helpers behind our iPhone application.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/facebook/xhp"&gt;XHP&lt;/a&gt;&lt;/strong&gt; is a PHP extension which augments the syntax of the language such that XML document fragments become valid expressions.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://pecl.php.net/package/xhprof"&gt;XHProf&lt;/a&gt;&lt;/strong&gt; is a function-level hierarchical profiler for PHP with a simple HTML-based navigational interface.&lt;/p&gt;  &lt;hr /&gt;  &lt;h2&gt;Infrastructure&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://cassandra.apache.org/"&gt;Apache Cassandra&lt;/a&gt;&lt;/strong&gt;  is a distributed storage system for managing structured data that is  designed to scale to a very large size across many commodity servers,  with no single point of failure.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://hadoop.apache.org/hive/"&gt;Apache Hive&lt;/a&gt;&lt;/strong&gt;  is data warehouse infrastructure built on top of Hadoop that provides  tools to enable easy data summarization, adhoc querying and analysis of  large datasets.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/facebook/flashcache/"&gt;FlashCache&lt;/a&gt;&lt;/strong&gt;  is a general purpose writeback block cache for Linux. It was developed  as a loadable Linux kernel module, using the Device Mapper and sits  below the filesystem.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://wiki.github.com/facebook/hiphop-php/"&gt;HipHop for PHP&lt;/a&gt;&lt;/strong&gt;  transforms PHP source code into highly optimized C++. HipHop offers  large performance gains and was developed over the past two years.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/facebook/scribe"&gt;Scribe&lt;/a&gt;&lt;/strong&gt; is a scalable service for aggregating log data streamed in real time from a large number of servers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://incubator.apache.org/thrift/"&gt;Thrift&lt;/a&gt;&lt;/strong&gt; provides a framework for scalable cross-language services development in C++, Java, Python, PHP, and Ruby.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.tornadoweb.org/"&gt;Tornado&lt;/a&gt;&lt;/strong&gt; is a  relatively simple, non-blocking web server framework written in Python.  It is designed to handle thousands of simultaneous connections, making  it ideal for real-time Web services.&lt;/p&gt;  &lt;hr /&gt;  &lt;h2&gt;Engineers contribute to&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://hadoop.apache.org/"&gt;Apache Hadoop&lt;/a&gt;&lt;/strong&gt; provides reliable, scalable, distributed computing infrastructure which we use for data analysis.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cfengine.org/"&gt;Cfengine&lt;/a&gt;&lt;/strong&gt; is a  rule-based configuration system that is used to automate the config and  maintenance of servers. Facebook uses Cfengine to maintain host configs  and to automate many janitorial operations on our production tiers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://memcached.org/"&gt;memcached&lt;/a&gt;&lt;/strong&gt; is a  distributed memory object caching system. Memcached was not originally  developed at Facebook, but we have become the largest user of the  technology.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;&lt;/strong&gt; is the backbone of our database infrastructure. You can find our patches &lt;a href="https://launchpad.net/mysqlatfacebook"&gt;on Launchpad&lt;/a&gt; and learn more about how we use it on the &lt;a href="http://www.facebook.com/MySQLatFacebook"&gt;MySQL@Facebook page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt;&lt;/strong&gt; is an  incredibly popular scripting language which makes up the majority of our  code-base. Its simple syntax lets us move fast and iterate on products.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://varnish-cache.org/"&gt;Varnish&lt;/a&gt;&lt;/strong&gt;  serves billions of requests every day to Facebook users around the  world. Whenever you load photos and profile pictures of your friends,  there's a very good chance that Varnish is involved.&lt;/p&gt;  &lt;hr /&gt;  &lt;h2&gt;Mirror&lt;/h2&gt;  &lt;p&gt;We host &lt;a href="http://mirror.facebook.net/"&gt;a public mirror&lt;/a&gt; for projects such as Apache, Centos, CPAN, Fedora, GNU, Mozilla, MySQL, and much more...&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-4222677746722229065?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T00:11:49.398-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dhirajpatra.blogspot.com/2010/10/face-book-open-source-technologies.html</feedburner:origLink></item><item><title>PHP for Android Project Launched</title><link>http://feedproxy.google.com/~r/blogspot/tGsc/~3/z0gpHGcKPSU/php-for-android-project-launched.html</link><author>dhiraj.patra@gmail.com (dhiraj patra)</author><pubDate>Tue, 07 Sep 2010 22:08:18 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-8993867651193907565.post-8574864336838489460</guid><description>&lt;a href="http://www.irontec.com/"&gt;irontec&lt;/a&gt; have just launched an open source project to bring &lt;acronym title="PHP (Personal Home Pages) Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; to Android platform. &lt;acronym title="PHP (Personal Home Pages) Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; for Android project (PFA) aims to make &lt;acronym title="PHP (Personal Home Pages) Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; development in Android not only possible but also feasable providing tools and documentation. The project already have an APK which provides &lt;acronym title="PHP (Personal Home Pages) Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; support to Android Scripting Environment (ASE). To get started you can follow the screencast below :  &lt;p&gt;&lt;object width="400" height="693"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13177370&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=336633&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=13177370&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=336633&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="693"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;  &lt;p&gt;APK and source code both available at &lt;a href="http://phpforandroid.net/"&gt;http://phpforandroid.net&lt;/a&gt;. Minimum requirement to get &lt;acronym title="PHP (Personal Home Pages) Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; for Android running is Android 1.5 phone or emulator. There is even an unofficial ASE build with &lt;acronym title="PHP (Personal Home Pages) Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; 5.3 support included. Now &lt;a href="http://twitter.com/rasmus"&gt;Rasmus&lt;/a&gt; can get an Android phone and start scripting on mobile.&lt;ins style="border: medium none ; margin: 0pt; padding: 0pt; display: inline-table; height: 15px; position: relative; visibility: visible; width: 468px;"&gt;&lt;ins id="google_ads_frame2_anchor" style="border: medium none ; margin: 0pt; padding: 0pt; display: block; height: 15px; position: relative; visibility: visible; width: 468px;"&gt;&lt;/ins&gt;&lt;/ins&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Open Source Open Mind&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8993867651193907565-8574864336838489460?l=dhirajpatra.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-07T22:08:18.388-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><media:content url="http://feedproxy.google.com/~r/blogspot/tGsc/~5/yleup1cfbpI/moogaloop.swf" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>irontec have just launched an open source project to bring PHP to Android platform. PHP for Android project (PFA) aims to make PHP development in Android not only possible but also feasable providing tools and documentation. The project already have an AP</itunes:subtitle><itunes:author>dhiraj patra</itunes:author><itunes:summary>irontec have just launched an open source project to bring PHP to Android platform. PHP for Android project (PFA) aims to make PHP development in Android not only possible but also feasable providing tools and documentation. The project already have an APK which provides PHP support to Android Scripting Environment (ASE). To get started you can follow the screencast below : APK and source code both available at http://phpforandroid.net. Minimum requirement to get PHP for Android running is Android 1.5 phone or emulator. There is even an unofficial ASE build with PHP 5.3 support included. Now Rasmus can get an Android phone and start scripting on mobile.Open Source Open Mind</itunes:summary><itunes:keywords>dhiraj,dhirajpatra,php</itunes:keywords><feedburner:origLink>http://dhirajpatra.blogspot.com/2010/09/php-for-android-project-launched.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/blogspot/tGsc/~5/yleup1cfbpI/moogaloop.swf" length="-1" type="application/x-shockwave-flash" /><feedburner:origEnclosureLink>http://vimeo.com/moogaloop.swf?clip_id=13177370&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=336633&amp;amp;fullscreen=1</feedburner:origEnclosureLink></item><copyright>it is protected by author</copyright><media:credit role="author">dhiraj patra</media:credit><media:rating>nonadult</media:rating><media:description type="plain">dhiraj patra</media:description></channel></rss>

