<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
   <title>PHP and Oracle: Christopher Jones</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/opal/" />
   
   <id>tag:blogs.oracle.com,2009:/opal//31</id>
   <updated>2009-11-04T20:21:10Z</updated>
   <subtitle>Notes on the Oracle PHP Apache Linux ("OPAL") stack, with bits of Python, Perl and Ruby for good luck</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type Enterprise 4.23-en</generator>


<link rel="self" href="http://feeds.feedburner.com/ChristopherJonesOnOpal" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
   <title>Zend Server and Oracle Enterprise Linux</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/1h5zyxYLAII/zend_server_and_oracle_enterpr.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.15363</id>
   
   <published>2009-11-04T20:13:31Z</published>
   <updated>2009-11-04T20:21:10Z</updated>
   
   <summary>You can now use Oracle's free or paid Linux package channels to install Zend Server. In three links: The technical details Wim Coekaerts's blog gives the background The press release...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
   <category term="enterpriselinux" label="enterprise linux" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="installation" label="installation" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="linux" label="linux" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="oel" label="oel" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="oracle" label="oracle" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="uln" label="uln" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="unbreakablelinuxnetwork" label="unbreakable linux network" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="up2date" label="up2date" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="yum" label="yum" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="zendserver" label="zend server" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;You can now use Oracle's free or paid Linux package channels to install Zend Server. &lt;/p&gt;&lt;p&gt; In three links:&lt;/p&gt;
&lt;p&gt;

&lt;a href="http://www.oracle.com/technology/tech/php/zend-server.html"&gt;The technical details&lt;/a&gt;
&lt;p&gt;

&lt;a href="http://blogs.oracle.com/wim/2009/11/zend_and_oracle_announced_tigh.html"&gt;Wim Coekaerts's blog gives the background&lt;/a&gt;

&lt;p&gt;

&lt;a href="http://www.zend.com/en/company/news/press/zend-and-oracle-join-forces-to-deliver-enterprise-class-linux-and-php-solution"&gt;The press release&lt;/a&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/1h5zyxYLAII" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/11/zend_server_and_oracle_enterpr.html</feedburner:origLink></entry>

<entry>
   <title>And Now to ZendCon 2009!</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/URcTbWc5rrg/and_now_to_zendcon_2009.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.15104</id>
   
   <published>2009-10-19T20:38:06Z</published>
   <updated>2009-10-19T21:43:37Z</updated>
   
   <summary>Phew! The Oracle OpenWorld conference is: wrapped up. Check me out on video. Now onto ZendCon down at the other end of Silicon Valley. My ZendCon talk is on Tuesday afternoon. In what seems just the last few weeks a...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="book" label="book" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="conference" label="conference" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="packt" label="packt" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="zend" label="zend" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;Phew!  The Oracle OpenWorld conference is: &lt;a
href="http://forums.oracle.com/forums/thread.jspa?threadID=974003"&gt;wrapped
up&lt;/a&gt;.  Check me out on &lt;a href="http://bit.ly/4iO2kJ"&gt;video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now onto &lt;a href="http://www.zendcon.com/"&gt;ZendCon&lt;/a&gt; down at the
other end of Silicon Valley.  &lt;/p&gt;

&lt;p&gt; My ZendCon talk is on &lt;a
href="http://entwickler.com/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=zendconf09&amp;id=11828"&gt;Tuesday
afternoon&lt;/a&gt;. In what seems just the last few weeks a new version of
the Oracle Database (version 11.2) and &lt;a
href="http://pecl.php.net/package/oci8/1.4.0"&gt;OCI8 1.4 Alpha&lt;/a&gt; have
been released.  After imparting the secrets of my hard-won, insiders
tips on best practices, I have a section on the new changes and
interesting things you can (and maybe should) now do.  I'll also tell
you where we are heading.  &lt;/p&gt;

&lt;p&gt; Conveniently Packt have just sent me a few copies of &lt;a
href="http://www.packtpub.com/PHP-Oracle-Web-Development-XML-Ajax-Open-Source
"&gt;PHP Oracle Web Development&lt;/a&gt; by Yuli Vasiliev.  I'll have one as a
door prize at my session.  (Another copy of the book and some PHP
ElePHPants are headed to the &lt;a href="http://phpconference.es/"&gt;PHP
Barcelona&lt;/a&gt; conference at the end of the month).  Thanks &lt;img
width="35" src="http://www.packtpub.com/images/PacktLogoSmall.png"&gt;
for the books.

      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/URcTbWc5rrg" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/10/and_now_to_zendcon_2009.html</feedburner:origLink></entry>

<entry>
   <title>Raimonds Simanovskis: Developer of the Year, 2009</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/2A-76yRq_Sc/raimonds_simanovskis_developer.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.15101</id>
   
   <published>2009-10-19T20:19:49Z</published>
   <updated>2009-10-19T20:25:10Z</updated>
   
   <summary> Check out the Oracle Magazine Editors' Choice Awards 2009. Raimonds was at the Oracle OpenWorld Conference last week. He seemed to be everywhere: I bumped into him numerous times and got to see one of his talks. He was...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="ruby" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="2009" label="2009" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="award" label="award" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="developer" label="developer" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="oracle" label="oracle" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="rails" label="rails" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;&lt;br /&gt;
Check out the Oracle Magazine &lt;a href="http://www.oracle.com/technology/oramag/oracle/09-nov/o69awards.html#simanovskis"&gt;Editors' Choice Awards 2009&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Raimonds was at the Oracle OpenWorld Conference last week.  He seemed to be everywhere: I bumped into him numerous times and got to see one of his talks. He was always thinking of an interesting problem or great technical challenge to solve.&lt;/p&gt;

&lt;p&gt;Congratulations Raimonds!&lt;br /&gt;
&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/2A-76yRq_Sc" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/10/raimonds_simanovskis_developer.html</feedburner:origLink></entry>

<entry>
   <title>Oracle OpenWorld starts today!</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/bmlApTHQT_c/oracle_openworld_starts_today.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.14902</id>
   
   <published>2009-10-11T14:28:30Z</published>
   <updated>2009-10-11T14:51:43Z</updated>
   
   <summary>If you have an interest in dynamic language programming here are the Oracle sessions to attend. There are also unconference sessions happening - check out the OTN area for details on each day. Conference Sessions S311373 Agile Web Development: Ruby/Rails...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
      <category term="python" scheme="http://www.sixapart.com/ns/types#category" />
   
      <category term="ruby" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="oow09" label="#oow09" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="conference" label="conference" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="openworld" label="openworld" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="sessions" label="sessions" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;If you have an interest in dynamic language programming here are the Oracle sessions to attend.  There are also unconference sessions happening - check out the OTN area for details on each day.&lt;p&gt;

&lt;h2&gt;Conference Sessions&lt;/h2&gt;

&lt;p&gt;S311373 &lt;b&gt;Agile Web Development: Ruby/Rails and Python/Django with Oracle Database 11g&lt;/b&gt;, Sun 10:30-11:30 Hilton Hotel Golden Gate 1 &lt;br /&gt;
S311371 &lt;b&gt;Best Practices for High-Performance Applications with Oracle Database 11g&lt;/b&gt;, Mon  17:30-18:30 Hilton Hotel Golden Gate 1&lt;br /&gt;
S311381 &lt;b&gt;Developing &amp; Deploying the Largest Web-sites using PHP and Oracle Database 11g&lt;/b&gt;,	Tues  16:00-17:00 Hilton Hotel Golden Gate 2 &lt;br /&gt;
S311643 &lt;b&gt;Oracle Net Services Best Practices for Database Performance and Scalability&lt;/b&gt;, Thur  10:30-11:30 Moscone South Room 305&lt;/p&gt;

&lt;p&gt;The Best Practice talk covers the impact to the database that your programs have, and what to do about it&lt;/p&gt;

&lt;p&gt;The Oracle Net talk will also help the DBA/Developer who needs to get best performance from any system.&lt;/p&gt;

&lt;h2&gt;Hands-On Lab Sessions&lt;/h2&gt;

&lt;p&gt;S312331 &lt;b&gt;Develop Painless Enterprise Web Applications using Python/Django and Oracle Database 11g&lt;/b&gt;, Sun 13:15-14:15 Hilton Hotel Continental Parlor 1/2/3 &lt;br /&gt;
S312331 &lt;b&gt;Develop Painless Enterprise Web Applications using PHP and Oracle Database 11g&lt;/b&gt;, Sun 14:30-15:30 Hilton Hotel Continental Parlor 1/2/3 &lt;br /&gt;
S312328 &lt;b&gt;Develop C/C++ Applications with Oracle DB 11g using Oracle Call Interface, Pro*C, ODBC&lt;/b&gt;, Mon  14:30-15:30 Hilton Hotel Continental Parlor 1/2/3&lt;br /&gt;
S312327 &lt;b&gt;Develop Painless Enterprise Web Applications using Ruby/Rails and Oracle DB 11g&lt;/b&gt;, Tues  14:30-15:30 Hilton Hotel Continental Parlor 1/2/3&lt;/p&gt;

&lt;p&gt;The Hands-on-Labs are self paced tutorials with the experts on hand to assist and answer questions - directly or indirectly related to the actual content.
The C/C++ lab is the practical side the the "Best Practice" talk above. It covers concepts and tools that will help  programming in any of the dynamic languages (p.s. in the C/C++ session you choose which of  the APIs - OCI/Pro*C/ODBC - you want to learn about: you don't have to do all).

&lt;h2&gt;DEMOgrounds&lt;/h2&gt;

&lt;p&gt;The Dynamic Languages booth is W-006, which is at the front left as you enter the Moscone West exhibition hall. The general hours are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monday   	10:30 - 18:30
&lt;li&gt;Tuesday  	10:30 - 18:30 
&lt;li&gt;Wednesday  9:15 - 17:15 
&lt;/ul&gt;

&lt;p&gt;I'll do my shifts on Monday morning and all Wednesday - see you there!&lt;/p&gt;

      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/bmlApTHQT_c" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/10/oracle_openworld_starts_today.html</feedburner:origLink></entry>

<entry>
   <title>PHP OCI8 1.4.0 Alpha is now available</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/h2ss7Eq3b-s/php_oci8_140_alpha_is_now_avai.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.14796</id>
   
   <published>2009-10-07T05:27:44Z</published>
   <updated>2009-10-07T05:29:45Z</updated>
   
   <summary>I just released an Alpha version of PECL OCI8 1.4 on http://pecl.php.net/package/oci8 The code is also merged to what will eventually be the PHP 5.3.2 and PHP 6.0 releases. Documentation will appear on http://www.php.net/manual/en/ref.oci8.php in the next few days, if...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11gr2" label="11gR2" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="oci8" label="oci8" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="release" label="release" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;I just released an Alpha version of PECL OCI8 1.4 on &lt;a href="http://pecl.php.net/package/oci8"&gt;http://pecl.php.net/package/oci8&lt;/a&gt;&lt;br /&gt;
The code is also merged to what will eventually be the PHP 5.3.2 and PHP 6.0 releases.&lt;/p&gt;

&lt;p&gt;Documentation will appear on http://www.php.net/manual/en/ref.oci8.php&lt;br /&gt;
in the next few days, if all goes according to plan.&lt;/p&gt;

&lt;p&gt;From the Changelog:&lt;/p&gt;

&lt;p&gt;1. Introduce connection attribute functions:&lt;/p&gt;

&lt;p&gt;oci_set_module_name&lt;br /&gt;
oci_set_action&lt;br /&gt;
oci_set_client_info&lt;br /&gt;
oci_set_client_identifier&lt;/p&gt;

&lt;p&gt;These set values that are visible/used by the database. They&lt;br /&gt;
are useful for tracing, authentication and auditing.&lt;/p&gt;

&lt;p&gt;2. Introduce connection attribute function:&lt;/p&gt;

&lt;p&gt;oci_set_edition&lt;/p&gt;

&lt;p&gt;Oracle 11g R2 "editions" allow multiple versions of DB objects&lt;br /&gt;
to exist at one time. By setting different editions, two&lt;br /&gt;
different versions of an application can run concurrently,&lt;br /&gt;
making upgrading easier and faster.&lt;/p&gt;

&lt;p&gt;3. Set the DRIVER_NAME attribute of Oracle Database 11gR2&lt;br /&gt;
connections to aid application tracing. The value used is&lt;br /&gt;
"PHP OCI8" followed by the OCI8 version number. Note the&lt;br /&gt;
version number may get truncated in DB views such as&lt;br /&gt;
v$session_connect_info.&lt;/p&gt;

&lt;p&gt;4. Allow the oci_set_prefetch value to be 0. This is important in&lt;br /&gt;
some cases using REF CURSORS in Oracle 11gR2.&lt;/p&gt;

&lt;p&gt;5. Introduce OCI_NO_AUTO_COMMIT as an alias for the OCI_DEFAULT&lt;br /&gt;
constant (which is not the default value) used by oci_execute().&lt;/p&gt;

&lt;p&gt;6. Generate an error if an invalid resource type is used in&lt;br /&gt;
oci_bind_by_name&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/h2ss7Eq3b-s" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/10/php_oci8_140_alpha_is_now_avai.html</feedburner:origLink></entry>

<entry>
   <title>New Article "Using PHP with Oracle HTTP Server 11g"</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/I0kUvmEX6DI/new_article_using_php_with_ora.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.14400</id>
   
   <published>2009-09-14T20:13:05Z</published>
   <updated>2009-09-14T20:16:40Z</updated>
   
   <summary>Our Application Server team have put together a new article on installing PHP to use with the latest version of "Oracle HTTP Server" from our Fusion Middleware suite. The article is at: http://www.oracle.com/technology/products/ias/ohs/htdocs/php_ohs.htm....</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="applicationserver" label="application server" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="install" label="install" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="ohs" label="ohs" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;Our Application Server team have put together a new article on installing PHP to use with the latest version of "Oracle HTTP Server" from our Fusion Middleware suite.  The article is at: &lt;a href="http://www.oracle.com/technology/products/ias/ohs/htdocs/php_ohs.htm"&gt;http://www.oracle.com/technology/products/ias/ohs/htdocs/php_ohs.htm&lt;/a&gt;.&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/I0kUvmEX6DI" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/09/new_article_using_php_with_ora.html</feedburner:origLink></entry>

<entry>
   <title>Come to PHP Code|Works - you'll regret missing it</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/VKWHkV_oRv8/come_to_php_codeworks_-_youll.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.14351</id>
   
   <published>2009-09-11T18:11:06Z</published>
   <updated>2009-09-11T18:15:42Z</updated>
   
   <summary>Hey there! Kuassi Mensah and I will be presenting at the upcoming PHP Code|Works conference tour, which kicks off later this month. Code|Works is the latest generation of conference from the folk who, amongst other things, present the excellent PHP|Tek...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="conference" label="conference" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="oracle" label="oracle" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;Hey there!  Kuassi Mensah and I will be presenting at the upcoming PHP
&lt;a href="http://cw.mtacon.com/" &gt;Code|Works&lt;/a&gt; conference tour, which kicks off
later this month.
&lt;/p&gt;
&lt;p&gt;
Code|Works is the latest generation of conference from the folk who,
amongst other things, present the excellent PHP|Tek conference and
publish php|architect magazine.
&lt;/p&gt;
&lt;p&gt;

There are some hot speakers presenting and since each city stop packs
so much into the alloted two days, you will get absolutely great
value.  The pricing is extremely attractive too.
&lt;/p&gt;
&lt;p&gt;

Our Oracle talk is about best practices for using PHP with the Oracle
Database and also shows off some of the excellent new features of the
recent "Oracle Database 11g Release 2".  Full session details are on &lt;a href="http://cw.mtacon.com/schedule/talk/oracle"&gt;http://cw.mtacon.com/schedule/talk/oracle
&lt;/a&gt;. We'll be at the Dallas, Atlanta, Washington and New York venues.
&lt;/p&gt;

&lt;p&gt;

And now for the good news: Oracle readers can get a $50 discount by
using the special promo code ENQJ-Q1LV-Z05X at checkout (valid until
Sept 15)
&lt;/p&gt;
&lt;p&gt;

If you miss us at Code|Works, the next time to catch us is at Oracle's
huge &lt;a href="http://www.oracle.com/openworld/index.html" &gt;OpenWorld
conference&lt;/a&gt; in San Francisco (see &lt;a
href="http://db360.blogspot.com/2009/08/oracle-open-world-2009-java-jdbc-cc-oci.html"&gt;Kuassi's
list of sessions&lt;/a&gt;). The following week I'll also be presenting at &lt;a
href="http://zendcon.com/"&gt;ZendCon&lt;/a&gt; in San Jose, California.  A
busy time!  &lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/VKWHkV_oRv8" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/09/come_to_php_codeworks_-_youll.html</feedburner:origLink></entry>

<entry>
   <title>Upgrading PHP Web Applications with Minimum Downtime using Oracle Editioning</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/WZMZp8OOjzs/upgrading_php_web_applications.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.14154</id>
   
   <published>2009-09-02T05:31:11Z</published>
   <updated>2009-09-10T21:58:40Z</updated>
   
   <summary> Introduction The Edition-Based Redefinition (EBR) feature of Oracle Database 11gR2 is ideal for web sites that aim for no downtime when releasing application enhancements. Editioning allows certain database objects to have multiple versions all available at the same time....</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11gr2" label="11gR2" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="edition" label="edition" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="editionbasedredefinition" label="edition-based redefinition" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="oracle" label="oracle" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="upgrade" label="upgrade" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      
&lt;h2&gt;Introduction&lt;/h2&gt;

&lt;p&gt;The Edition-Based Redefinition (EBR) feature of Oracle Database 11gR2 is ideal for web sites
that aim for no downtime when releasing application enhancements.
Editioning allows certain database objects to have multiple versions
all available at the same time.  Applications can decide at runtime
which version of the objects should be used.
&lt;/p&gt;
&lt;p&gt;
In this example I show how Oracle editioning can be used to upgrade a
"live" PHP application.  The changes can be made and tested on the
production database and then enabled for all users with a one keyword
change to the application.
&lt;/p&gt;
&lt;p&gt;
The objects that can be editioned by Oracle are:
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;synonyms
 &lt;li&gt;views
 &lt;li&gt;PL/SQL object types:
 &lt;ul&gt;
    &lt;li&gt; function
    &lt;li&gt; library
    &lt;li&gt; package and package body
    &lt;li&gt; procedure
    &lt;li&gt; trigger
    &lt;li&gt; type and type body
 &lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
Tables themselves can't be editioned but there is support for moving
and viewing data across editions.  
&lt;/p&gt;
&lt;p&gt;

&lt;h2&gt;The Initial PHP Application&lt;/h2&gt;

&lt;p&gt;
To start the example, run SQL*Plus as the user SYSTEM and grant
edition access to the application user CJ:
&lt;/p&gt;
&lt;pre&gt;  sqlplus system/systempassword
  grant create any edition to cj;
  alter user cj enable editions;
&lt;/pre&gt;
&lt;p&gt;
As the user CJ create a table of employees for the application:
&lt;/p&gt;
&lt;pre&gt;  sqlplus cj/cj
  drop table myemp;
  create table myemp (name varchar2(10), hoursworked number);
  insert into myemp (name, hoursworked) values ('alison', 200);
  insert into myemp (name, hoursworked) values ('kris',   200);
  insert into myemp (name, hoursworked) values ('wenji',  200);
  commit;
&lt;/pre&gt;
&lt;p&gt;
Now create the stored function that calculates the number of days of
vacation an employee is eligible for.  This function is stored in the
database so all Oracle applications can reuse the same logic:
&lt;/p&gt;
&lt;pre&gt;  create or replace function 
            vacationdaysleft(p_name in varchar2) return number as
    vdl number;
  begin
   -- For every 40 hours worked, you get 1 day of vacation
   select floor(hoursworked / 40) into vdl 
     from myemp 
     where myemp.name = p_name;
   return vdl;
  end;
  /
&lt;/pre&gt;
&lt;p&gt;
Test the function in SQL*Plus by calling:
&lt;/p&gt;
&lt;pre&gt;  select name, vacationdaysleft(name) from myemp;
&lt;/pre&gt;
&lt;p&gt;
This returns:
&lt;/p&gt;
&lt;pre&gt;  NAME                           VACATIONDAYSLEFT(NAME)
  ------------------------------ ----------------------
  alison                                              5
  kris                                                5
  wenji                                               5
&lt;/pre&gt;
&lt;p&gt;
In PHP OCI8 1.3 the function could be used in an example file,
vacation.php:
&lt;/p&gt;
&lt;pre&gt;  &amp;lt;?php

  $c = oci_connect('cj', 'cj', 'localhost/orcl');

  $s = oci_parse($c, 'alter session set edition = ora$base');
  oci_execute($s);

  $s = oci_parse($c, "begin :vdl := vacationdaysleft(:name); end;");
  oci_bind_by_name($s, ":vdl", $vdl, 10);
  oci_bind_by_name($s, ":name", $name, 10);
  $name = 'alison';
  oci_execute($s);

  echo "$name has ".$vdl." days vacation left" . PHP_EOL;

  ?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
This makes a simple call to the stored function and returns in $vdl
the number of days vacation for person $name.
&lt;/p&gt;
&lt;p&gt;
Note the ALTER SESSION call.  I've added it because I know I'll be
using the editioning feature.  The 'ora$base' token means to use the
root or first edition of objects, i.e. the PL/SQL function
vacationdaysleft() we just created.  The ALTER statement should appear
pretty much immediately after the connection is made - you don't want
parts of the application to be using the wrong edition.
&lt;/p&gt;
&lt;p&gt;
The PHP script produces output like:
&lt;/p&gt;
&lt;pre&gt;  $ php vacation.php
  alison has 5 days vacation left
&lt;/pre&gt;
&lt;p&gt;
This is good.  We put the application into production and employees
start using it.  All is well for a while.
&lt;/p&gt;

&lt;h2&gt;Enhancing the Application&lt;/h2&gt;

&lt;p&gt;
Now assume the rate used to calculate vacation hours needs to be
changed so that now for every 30 hours worked, employees get one day
of vacation.  Also we want the calculation to include how many days
vacation they have already taken.
&lt;/p&gt;
&lt;p&gt;
First, we need a new column to store the vacation they have taken.
Adding this column won't affect the running PHP application since it
doesn't know about it (this is a good reminder never to do "select *"
in an application).  The new column is:
&lt;/p&gt;
&lt;pre&gt;  alter table myemp add daysvacationtaken number;
&lt;/pre&gt;
&lt;p&gt;
We need to populate that column manually, here with values I've
invented:
&lt;/p&gt;
&lt;pre&gt;  update myemp set daysvacationtaken = 2 where name = 'alison';
  update myemp set daysvacationtaken = 3 where name = 'kris';
  update myemp set daysvacationtaken = 0 where name = 'wenji';
  commit;
&lt;/pre&gt;
&lt;p&gt;
For more complex scenarios the editioning feature has CROSSEDITION
triggers and editioning views to help ensure the appropriate data is
available and used correctly in the old and new editions of the
application.  Remember our current and future enhanced versions of the
PL/SQL function can be accessing the same table concurrently - only
the PL/SQL code has multiple versions.
&lt;/p&gt;
&lt;p&gt;
Now we need to create the new version of the PL/SQL function.  In
SQL*Plus create a new edition and set it to be in use for this
session:
&lt;/p&gt;
&lt;pre&gt;  sqlplus cj/cj
  create edition e2;
  alter session set edition = e2;
&lt;/pre&gt;
&lt;p&gt;
Now create the updated version of the procedure.  Because the SQL*Plus
session is in edition 'e2' this won't affect the PHP application which
runs using edition 'ora$base'.  The enhanced function can be created
with:
&lt;/p&gt;
&lt;pre&gt;  create or replace function 
            vacationdaysleft(p_name in varchar2) return number as
    vdl number;
  begin
   -- For every 30 hours worked, you get 1 day of vacation
   select floor(hoursworked / 30) - daysvacationtaken into vdl 
     from myemp 
     where myemp.name = p_name;
   return vdl;
  end;
  /
&lt;/pre&gt;
&lt;p&gt;
Querying it shows the updated values:
&lt;/p&gt;
&lt;pre&gt;  select name, vacationdaysleft(name) from myemp;

  NAME                           VACATIONDAYSLEFT(NAME)
  ------------------------------ ----------------------
  alison                                              4
  kris                                                3
  wenji                                               6
&lt;/pre&gt;
&lt;p&gt;
This is all done while users continue to use the PHP application live
and get the original results.  You can check that the script still
returns the "old" value:
&lt;/p&gt;
&lt;pre&gt;  $ php vacation.php
  alison has 5 days vacation left
&lt;/pre&gt;
&lt;p&gt;
Now edit vacation.php and change the ALTER SESSION statement to the
new edition:
&lt;/p&gt;
&lt;pre&gt;  $s = oci_parse($c, 'alter session set edition = e2');
&lt;/pre&gt;
&lt;p&gt;
When run, the script output now shows the updated calcuation of
vacation time:
&lt;/p&gt;
&lt;pre&gt;  $ php vacation.php
  alison has 4 days vacation left
&lt;/pre&gt;
&lt;p&gt;
You can see that the roll out of application updates can be made
faster and have more thorough testing, increasing the availability and
reliability of web sites.
&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;
Oracle Database 11g Release 2 Editioning helps PHP web sites meet the
goals of minimal downtime with the frequent upgrade cycle needed by
modern web applications.  It allows PHP applications, their often
complex stored business logic, and large data sets to be updated ready
for going live in production without impacting the operation of
existing users.
&lt;/p&gt;
&lt;p&gt;
After setting up the edition objects, the simple process of rolling
out a new PHP script with the updated edition name allows application
upgrades to occur rapidly.
&lt;/p&gt;
&lt;p&gt;
The &lt;a href="http://www.oracle.com/pls/db112/homepage"&gt;Oracle manuals&lt;/a&gt; have more information about using and managing
editions.
&lt;/p&gt;

      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/WZMZp8OOjzs" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/09/upgrading_php_web_applications.html</feedburner:origLink></entry>

<entry>
   <title>Oracle Database 11gR2 Enhancements for PHP</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/uRJG5ISAz84/oracle_database_11gr2_enhancem.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.14150</id>
   
   <published>2009-09-02T00:26:55Z</published>
   <updated>2009-09-08T21:22:48Z</updated>
   
   <summary>Oracle Database 11g Release 2 is now available for download. It's a great feeling to see this major release available to customers. Lots of hard work has gone into it and my thanks go to all those folk at Oracle...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11gr2" label="11gR2" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="database" label="database" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="release" label="release" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;Oracle Database 11g Release 2 is now available for download.
&lt;/p&gt;&lt;p&gt;
It's a great feeling to see this major release available to customers.  Lots of hard work has gone into it and my thanks go to all those folk at Oracle who have made it possible.
&lt;/p&gt;&lt;p&gt;
Currently Linux 32 and 64 bit software is on the Oracle Database &lt;a href="http://www.oracle.com/technology/software/products/database/index.html"&gt;Software Downloads&lt;/a&gt; page.
&lt;/p&gt;&lt;p&gt;
There are many new database features.  Various &lt;a href="http://www.oracle.com/technology/products/database/oracle11g/index.html"&gt;whitepapers&lt;/a&gt; and the &lt;a href="http://www.oracle.com/technology/documentation/database.html"&gt;documentation&lt;/a&gt; discuss them in detail.
&lt;/p&gt;&lt;p&gt;
In this post, I want to mention some of the new features useful for PHP OCI8 applications.  They include enhancements that let online production applications be upgraded with minimal downtime, and also features improving existing important capabilities introduced in Oracle 11gR1 such as DRCP connection pooling and the Client Query Result Cache.
&lt;/p&gt;&lt;p&gt;
The new features in Oracle Database 11g Release 2 that I want to highlight are:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;p&gt;A new Database Resident Connection Pool (DRCP) dynamic performance view V$CPOOL_CONN_INFO.  There is a GV$ counterpart for Oracle RAC.
&lt;/p&gt;&lt;p&gt;
    DRCP is a connection pooling solution that allows web applications to use database server connection resources very efficiently.  At the upper end, it lets web applications scale to tens of thousands of connections on commodity hardware.
    &lt;/p&gt;&lt;p&gt;
    The new view displays information about each connection to the DRCP Connection Broker.  This gives more insight into client processes that are connected, making it easier to monitor and trace applications that are currently using pooled servers or are idle.  (PHP/Apache processes that are idle retain a lightweight connection to the DRCP Connection Broker.)
&lt;/p&gt;&lt;p&gt;
    Existing DRCP views are unchanged from Oracle 11gR1. (Update: DBA_CPOOL_INFO now has NUM_CBROK and MAXCONN_CBROK columns, equivalent to the pool configuration option parameters of the same names)
&lt;/p&gt;
&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;The Oracle 11g Client Query Result Cache (CQRC) is supported with DRCP connections.
&lt;/p&gt;&lt;p&gt;
    The CQRC is a result cache storing the results of queries in the PHP/Apache process memory.  When queries are executed repeatedly, the results can be retrieved directly from the cache, resulting in faster query response time.  The results in the cache are automatically marked invalid when data in the database objects being accessed by the query is modified.&lt;/p&gt;
&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;Table Annotations are supported for CQRC, making it easier for existing applications to get performance benefits from result caching.  Previously queries had to be modified to include the "/*+ result_cache */" hint.  In Oracle Database 11gR2 a DBA can now create or annotate a table as being a candidate for CQRC:

  &lt;pre&gt;       ALTER TABLE sales RESULT_CACHE (MODE FORCE);  &lt;/pre&gt;
    &lt;p&gt;The application code does not need to change.&lt;/p&gt;
&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;The prefetching of rows from REF CURSORs (aka Cursor Variables) is supported in Oracle Database 11gR2, greatly increasing performance when Oracle PL/SQL stored procedures and functions are used to encapsulate business logic.
&lt;/p&gt;&lt;p&gt;
    REF CURSORS are like pointers to result sets.  Typically queries are performed in PL/SQL and a REF CURSOR is returned to PHP so the results can be processed.
&lt;/p&gt;&lt;p&gt;
    Prefetching minimizes database server round-trips by returning batches of rows to an Oracle-managed cache each time a request is made to the database.  Prefetching was previously only supported for queries.
&lt;/p&gt;&lt;p&gt;
    With Oracle Database 11gR2, the default REF CURSOR prefetch row count size is the value of oci8.default_prefetch in php.ini, i.e. 100 in PHP OCI8 1.3.  The size can be explicitly changed for a REF CURSOR.  For example, to increase the prefetch size of a REF CURSOR to 200:
&lt;/p&gt;
  &lt;pre&gt;	$stid = oci_parse($c, "call myproc(:rc)");
	$refcur = oci_new_cursor($c);
	oci_bind_by_name($stid, ':rc', $refcur, -1, OCI_B_CURSOR);
	oci_execute($stid);
	oci_set_prefetch($refcur, 200);
	oci_execute($refcur);
        oci_fetch_all($refcur, $res);
  &lt;/pre&gt;
&lt;p&gt;
    Setting the prefetch count on the "parent" resource $stid does not change the prefetch size for $refcur.
&lt;/p&gt;&lt;p&gt;
    REF CURSOR prefetching can be used when connected to previous database versions so taking advantage of the new feature can be as simple as relinking PHP with Oracle 11.2 client libraries.
&lt;/p&gt;&lt;p&gt;
    Prefetching also now works for nested cursor columns:
&lt;/p&gt;
&lt;pre&gt;       select department_name, 
              cursor(select manager_id 
                     from employees
                     where employees.employee_id = departments.department_id)
       from departments;
&lt;/pre&gt;
&lt;p&gt;
    Nested cursor prefetching requires both the Oracle client libraries linked with PHP and the database to be Oracle Database 11gR2.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Many other new Oracle Database 11gR2 features will benefit web applications.  Here are just two of those features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;p&gt;Edition-base redefinition makes it safer and easier to do web application upgrades.  This feature enables database components of an application to be upgraded and tested while the old version continues to be used.  When the changes are complete, an upgraded application using the new database objects can be made available to all users.
&lt;/p&gt;&lt;p&gt;
    I'll give an example of this in my next blog post since this is exciting stuff.&lt;/p&gt;
&lt;/li&gt;
    &lt;li&gt;&lt;p&gt;RAC One Node has been introduced.  This bundling is perfect for sites that need high availability but currently run well with a single database server.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The PHP OCI8 1.2.5 and 1.3 extensions compile and run against Oracle Database 11gR2 without modification.  PHP OCI8 1.3 is available with PHP 5.3.  It is recommended to upgrade to OCI8 1.3 for PHP 5.2 and earlier versions of PHP.  It can be installed from &lt;a href="http://pecl.php.net/package/oci8"&gt;PECL&lt;/a&gt;.&lt;/p&gt;

      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/uRJG5ISAz84" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/09/oracle_database_11gr2_enhancem.html</feedburner:origLink></entry>

<entry>
   <title><![CDATA[PyOhio - Python in Ohio, 25 &amp; 26 July 2009]]></title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/5FULkGPzquQ/pyohio_python_in_ohio_25_26_ju_1.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.13341</id>
   
   <published>2009-07-14T17:29:41Z</published>
   <updated>2009-09-08T18:38:50Z</updated>
   
   <summary>PyOhio "The Free Ohio-based Python Miniconference" is on Saturday &amp; Sunday July 25-26 at Ohio State University. On Sunday Catherine Devlin and Oracle Technology Network's Todd Trichler will have an Oracle/Python/Linux Tutorial. This will have something interesting for everyone. Even...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="python" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;&lt;a href="http://www.pyohio.org/Home"&gt;PyOhio&lt;/a&gt; "The Free Ohio-based Python Miniconference" is on Saturday &amp; Sunday July 25-26 at Ohio State University.  On Sunday &lt;a href="http://catherinedevlin.blogspot.com/"&gt;Catherine Devlin&lt;/a&gt; and Oracle Technology Network's Todd Trichler will have an Oracle/Python/Linux Tutorial.  This will have something interesting for everyone.  Even if you don't want to attend the tutorial fulltime, you can jump in for the bits important to you.&lt;/p&gt;

&lt;p&gt;Want to learn more about Python and Oracle, or ask questions about best Python practices - then attend Catherine's Python section and ask questions.  Want to know what Oracle database is about to understand its possibilities - then attend the installation part.  Want to learn more about Linux and Virtualization - Todd is great on this.&lt;/p&gt;

&lt;p&gt;Wish I was going. Send me a postcard!&lt;br /&gt;
&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/5FULkGPzquQ" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/07/pyohio_python_in_ohio_25_26_ju_1.html</feedburner:origLink></entry>

<entry>
   <title><![CDATA[New Look for the Underground PHP &amp; Oracle Manual]]></title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/YJivoKvVG48/new_look_for_the_underground_p.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.13320</id>
   
   <published>2009-07-13T19:15:17Z</published>
   <updated>2009-07-14T17:26:29Z</updated>
   
   <summary>Thanks to the Oracle Technology Network design team our very popular, free Underground PHP &amp; Oracle Manual has had a makeover and gained a snazzy new front cover. Farewell to the photo of the underground car park door that used...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="book" label="book" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;Thanks to the Oracle Technology Network design team our very popular, free Underground PHP &amp; Oracle Manual has had a makeover and gained a snazzy new front cover.  Farewell to the photo of the underground car park door that used to greet me each night on the way out of the office.  The new look is:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.oracle.com/technology/tech/php/php-cover.gif"  width="100"&gt;&lt;/p&gt;

&lt;p&gt;The book also now has its own dedicated landing page &lt;a href="http://www.oracle.com/technology/tech/php/underground-php-oracle-manual.html"&gt;http://www.oracle.com/technology/tech/php/underground-php-oracle-manual.html &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The book content is unchanged since the December 2008 release and all the information is still relevant.  If you have an older release than this, you'll find there was a wealth of new information worthwhile having on hand.&lt;/p&gt;

&lt;p&gt;And don't ignore all the other PHP-Oracle books out there in the bookstores. All of those books go much more into building applications than the Underground guide does. Each has a different approach and will suit a different audience.&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/YJivoKvVG48" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/07/new_look_for_the_underground_p.html</feedburner:origLink></entry>

<entry>
   <title>Inserting and Updating Oracle XMLType columns in PHP</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/_eedXYYqISU/inserting_and_updating_oracle_1.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.13295</id>
   
   <published>2009-07-10T23:56:42Z</published>
   <updated>2009-07-11T00:18:16Z</updated>
   
   <summary>Today a reader mailed me about manipulating XMLType columns when the data is longer than the 4K limit that character-type handling imposes. My free book (see sidebar) has examples of how to do this using CLOB handling in PHP. I...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="clob" label="clob" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="lob" label="lob" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="sql" label="sql" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="xml" label="xml" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;Today a reader mailed me about manipulating XMLType columns when the data is longer than the 4K limit that character-type handling imposes.  My free book (see sidebar) has examples of how to do this using CLOB handling in PHP.  I noticed that my xmlinsert.php example in the book does a SELECT and UPDATE, but never actually does an INSERT.  The INSERT code is conceptually no different from UPDATE but, for completeness, here is an expanded example explicitly showing it:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?php&lt;br&gt;&lt;br&gt;/*&lt;br&gt;Table&amp;nbsp;definition&amp;nbsp;is:&lt;br&gt;create&amp;nbsp;table&amp;nbsp;xwarehouses&amp;nbsp;(warehouse_id&amp;nbsp;number,&amp;nbsp;warehouse_spec&amp;nbsp;xmltype);&lt;br&gt;*/&lt;br&gt;&lt;br&gt;$c&amp;nbsp;=&amp;nbsp;oci_connect('hr',&amp;nbsp;'hrpwd',&amp;nbsp;'localhost/XE');&lt;br&gt;&lt;br&gt;$id&amp;nbsp;=&amp;nbsp;1;&lt;br&gt;&lt;br&gt;//&amp;nbsp;Delete&amp;nbsp;any&amp;nbsp;current&amp;nbsp;entry&lt;br&gt;$s&amp;nbsp;=&amp;nbsp;oci_parse($c,&amp;nbsp;"delete&amp;nbsp;from&amp;nbsp;xwarehouses&amp;nbsp;where&amp;nbsp;warehouse_id&amp;nbsp;=&amp;nbsp;:id");&lt;br&gt;oci_bind_by_name($s,&amp;nbsp;':id',&amp;nbsp;$id);&lt;br&gt;oci_execute($s);&lt;br&gt;&lt;br&gt;//&amp;nbsp;XML&amp;nbsp;data&amp;nbsp;to&amp;nbsp;be&amp;nbsp;inserted&lt;br&gt;$xml&amp;nbsp;=&amp;lt;&amp;lt;&amp;lt;EOF&lt;br&gt;&amp;lt;?xml&amp;nbsp;version="1.0"?&amp;gt;&lt;br&gt;&amp;lt;Warehouse&amp;gt;&lt;br&gt;&amp;lt;WarehouseId&amp;gt;1&amp;lt;/WarehouseId&amp;gt;&lt;br&gt;&amp;lt;WarehouseName&amp;gt;Southlake,&amp;nbsp;Texas&amp;lt;/WarehouseName&amp;gt;&lt;br&gt;&amp;lt;Building&amp;gt;Owned&amp;lt;/Building&amp;gt;&lt;br&gt;&amp;lt;Area&amp;gt;25000&amp;lt;/Area&amp;gt;&lt;br&gt;&amp;lt;Docks&amp;gt;2&amp;lt;/Docks&amp;gt;&lt;br&gt;&amp;lt;DockType&amp;gt;Rear&amp;nbsp;load&amp;lt;/DockType&amp;gt;&lt;br&gt;&amp;lt;WaterAccess&amp;gt;true&amp;lt;/WaterAccess&amp;gt;&lt;br&gt;&amp;lt;RailAccess&amp;gt;N&amp;lt;/RailAccess&amp;gt;&lt;br&gt;&amp;lt;Parking&amp;gt;Street&amp;lt;/Parking&amp;gt;&lt;br&gt;&amp;lt;VClearance&amp;gt;10&amp;lt;/VClearance&amp;gt;&lt;br&gt;&amp;lt;/Warehouse&amp;gt;&lt;br&gt;EOF;&lt;br&gt;&lt;br&gt;//&amp;nbsp;Insert&amp;nbsp;new&amp;nbsp;XML&amp;nbsp;data&amp;nbsp;using&amp;nbsp;a&amp;nbsp;temporary&amp;nbsp;CLOB&lt;br&gt;$s&amp;nbsp;=&amp;nbsp;oci_parse($c,&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"insert&amp;nbsp;into&amp;nbsp;xwarehouses&amp;nbsp;(warehouse_id,&amp;nbsp;warehouse_spec)&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values&amp;nbsp;(:id,&amp;nbsp;XMLType(:clob))");&lt;br&gt;oci_bind_by_name($s,&amp;nbsp;':id',&amp;nbsp;$id);&lt;br&gt;$lob&amp;nbsp;=&amp;nbsp;oci_new_descriptor($c,&amp;nbsp;OCI_D_LOB);&lt;br&gt;oci_bind_by_name($s,&amp;nbsp;':clob',&amp;nbsp;$lob,&amp;nbsp;-1,&amp;nbsp;OCI_B_CLOB);&lt;br&gt;$lob-&amp;gt;writeTemporary($xml);&lt;br&gt;oci_execute($s);&lt;br&gt;$lob-&amp;gt;close();&lt;br&gt;&lt;br&gt;//&amp;nbsp;Query&amp;nbsp;the&amp;nbsp;row&amp;nbsp;back&lt;br&gt;$s&amp;nbsp;=&amp;nbsp;oci_parse($c,&amp;nbsp;'select&amp;nbsp;xmltype.getclobval(warehouse_spec)&lt;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&amp;nbsp;xwarehouses&amp;nbsp;where&amp;nbsp;warehouse_id&amp;nbsp;=&amp;nbsp;:id');&lt;br&gt;$r&amp;nbsp;=&amp;nbsp;oci_bind_by_name($s,&amp;nbsp;':id',&amp;nbsp;$id);&lt;br&gt;oci_execute($s);&lt;br&gt;$row&amp;nbsp;=&amp;nbsp;oci_fetch_array($s,&amp;nbsp;OCI_NUM);&lt;br&gt;&lt;br&gt;//&amp;nbsp;Manipulate&amp;nbsp;the&amp;nbsp;data&amp;nbsp;using&amp;nbsp;SimpleXML&lt;br&gt;$sx&amp;nbsp;=&amp;nbsp;simplexml_load_string((binary)$row[0]-&amp;gt;load());&lt;br&gt;$row[0]-&amp;gt;free();&lt;br&gt;$sx-&amp;gt;Docks&amp;nbsp;-=&amp;nbsp;1;&amp;nbsp;&amp;nbsp;//&amp;nbsp;change&amp;nbsp;the&amp;nbsp;data&lt;br&gt;&lt;br&gt;//&amp;nbsp;Update&amp;nbsp;changes&amp;nbsp;using&amp;nbsp;a&amp;nbsp;temporary&amp;nbsp;CLOB&lt;br&gt;$s&amp;nbsp;=&amp;nbsp;oci_parse($c,&amp;nbsp;'update&amp;nbsp;xwarehouses&lt;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&amp;nbsp;warehouse_spec&amp;nbsp;=&amp;nbsp;XMLType(:clob)&lt;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;where&amp;nbsp;warehouse_id&amp;nbsp;=&amp;nbsp;:id');&lt;br&gt;oci_bind_by_name($s,&amp;nbsp;':id',&amp;nbsp;$id);&lt;br&gt;$lob&amp;nbsp;=&amp;nbsp;oci_new_descriptor($c,&amp;nbsp;OCI_D_LOB);&lt;br&gt;oci_bind_by_name($s,&amp;nbsp;':clob',&amp;nbsp;$lob,&amp;nbsp;-1,&amp;nbsp;OCI_B_CLOB);&lt;br&gt;$lob-&amp;gt;writeTemporary($sx-&amp;gt;asXml());&lt;br&gt;oci_execute($s);&lt;br&gt;$lob-&amp;gt;close();&lt;br&gt;&lt;br&gt;//&amp;nbsp;Query&amp;nbsp;the&amp;nbsp;changed&amp;nbsp;row&amp;nbsp;back&amp;nbsp;and&amp;nbsp;print&amp;nbsp;it&lt;br&gt;$s&amp;nbsp;=&amp;nbsp;oci_parse($c,&amp;nbsp;'select&amp;nbsp;xmltype.getclobval(warehouse_spec)&lt;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&amp;nbsp;xwarehouses&amp;nbsp;where&amp;nbsp;warehouse_id&amp;nbsp;=&amp;nbsp;:id');&lt;br&gt;$r&amp;nbsp;=&amp;nbsp;oci_bind_by_name($s,&amp;nbsp;':id',&amp;nbsp;$id);&lt;br&gt;oci_execute($s);&lt;br&gt;$row&amp;nbsp;=&amp;nbsp;oci_fetch_array($s,&amp;nbsp;OCI_NUM);&lt;br&gt;print&amp;nbsp;htmlentities($row[0]-&amp;gt;load());&lt;br&gt;$row[0]-&amp;gt;free();&lt;br&gt;&lt;br&gt;?&amp;gt;&lt;br&gt;&lt;/pre&gt;

      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/_eedXYYqISU" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/07/inserting_and_updating_oracle_1.html</feedburner:origLink></entry>

<entry>
   <title>Yes, PHP 5.3 is here.  What does that mean?</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/5xUc9R6AAow/yes_php_53_is_here_what_does_t.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.13154</id>
   
   <published>2009-07-01T19:06:50Z</published>
   <updated>2009-07-01T22:47:57Z</updated>
   
   <summary>Yesterday PHP 5.3 was released. It can be downloaded from the PHP site. This release has been the product of combined efforts from all areas of the community. While core PHP language developers may have the public profile of soccer...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="release" label="release" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;Yesterday &lt;a href="http://www.php.net/archive/2009.php#id2009-06-30-1"&gt;PHP 5.3 was released&lt;/a&gt;.  It can be &lt;a href="http://php.net/downloads.php#v5.3.0"&gt;downloaded&lt;/a&gt; from the PHP site. This release has been the product of combined efforts from all areas of the community.  While core PHP language developers may have the public profile of soccer goal-scorers, the project requires every position work together including release management, documentation and QA, packaging and building.  And off the field other work such as mentoring students and the migration from the CVS source code control system is just as important in driving the PHP project forward.  My thanks to all of you.&lt;/p&gt;

&lt;p&gt;What is in PHP 5.3 for Oracle users?  My regular blog readers will know that it includes the OCI8 1.3 code by default (PHP 5.2 users can get this version from &lt;a href="http://pecl.php.net/package/oci8"&gt;http://pecl.php.net/package/oci8&lt;/a&gt; Windows DLLs are at &lt;a href="http://downloads.php.net/pierre/"&gt;http://downloads.php.net/pierre/&lt;/a&gt;).  They also know where to find the &lt;a href="http://pecl.php.net/package-changelog.php?package=oci8"&gt;list of changes&lt;/a&gt; in the 1.3 branch. (The main features are connection pooling and increased availability).&lt;/p&gt;

&lt;p&gt;And what is coming downstream for PHP?  PHP 6 (with Unicode support) has a new breath of air due to the release manager now being able to devote more time.  Whenever bugs are fixed in PHP, the PHP 6 branch is kept in sync.  So, while there is a lot to do on key pieces, work is not starting from scratch.&lt;/p&gt;

&lt;p&gt;There is some discussion about a PHP 5.4 release, and also whether PHP 5.4 should appear &lt;em&gt;after&lt;/em&gt; PHP 6 so it can have further compatibility features to aid migration from 5.x to 6.x.  (There are already a couple of forward compatibility features in PHP 5.2, such as the binary string prefix syntax).&lt;/p&gt;

&lt;p&gt;There are two conflicting goals: having new features available soon (meaning in a 5.4 release) and keeping developers focused on PHP 6 so it has some cool features that users want and so its development does not languish.  How these two desires will balance out remains to be seen.  As always it will be contributor driven.  So, if you are a PHP user, get involved.&lt;br /&gt;
&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/5xUc9R6AAow" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/07/yes_php_53_is_here_what_does_t.html</feedburner:origLink></entry>

<entry>
   <title>PHP 5.3 is days away; development merge restrictions are in place</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/_sqxMGWwuWI/php_53_is_days_away_developmen.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.13052</id>
   
   <published>2009-06-25T21:35:41Z</published>
   <updated>2009-06-25T21:46:57Z</updated>
   
   <summary>PHP 5.3 is currently due to go production on Tuesday 30th June 2009. The release managers are working hard to get all the final pieces in place. In the PHP core development community there has been a tiny bit of...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="release" label="release" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="releasemanagement" label="release management" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;PHP 5.3 is currently &lt;a href="http://pooteeweet.org/blog/1503"&gt;due to go production&lt;/a&gt; on Tuesday 30th June 2009.  The release managers are working hard to get all the final pieces in place.&lt;/p&gt;

&lt;p&gt;In the PHP core development community there has been a tiny bit of good-natured grumbling about a clamp down on code merges. The experienced developers actually recognize the need for this restriction.&lt;/p&gt;

&lt;p&gt;Restricting what can be merged prior to release is important.  Why?  Because any code change has the potential for unforeseen destabilization or could introduce a whole new set of problems.  Also any change distracts the RMs (and others) from review and testing of more critical areas.  The voice of experience speaks.&lt;/p&gt;

&lt;p&gt;Think about the worst case: merging a brand new feature.  If this happens just before the production release, then there is no time for the feature to be evaluated, documented, tested . . . .  New features typically aren't allowed to be added after the Alpha release of a project (PHP is actually a little lax about Alpha/Beta terminology here).  As the production release date approaches, bugs must be increasingly more critical in order for fixes to be merged.&lt;/p&gt;

&lt;p&gt;On the other hand, merge restrictions introduce one big problem: somehow the team needs to revisit changes merged by eager developers to the other PHP branches (PHP 5.2, PHP 6).  Someone has to come back and merge them into a future 5.3 patchset.  This is one of the reasons programs need good source code control reporting and tooling.&lt;/p&gt;

&lt;p&gt;What can you do for PHP 5.3 today?  Test it.  Snapshots of PHP are at &lt;a href="http://snaps.php.net/ "&gt;http://snaps.php.net/ &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Start by reviewing the UPGRADING guide.  And give a yell if you come across a feature change that isn't documented or if something breaks.  The PHP bug database is at &lt;a href="http://bugs.php.net/"&gt;http://bugs.php.net/&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/_sqxMGWwuWI" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/06/php_53_is_days_away_developmen.html</feedburner:origLink></entry>

<entry>
   <title>Keeping Web Applications Lean and Mean at Dutch PHP Conference</title>
   <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ChristopherJonesOnOpal/~3/1uMiHryb1lw/keeping_web_applications_lean_1.html" />
   <id>tag:blogs.oracle.com,2009:/opal//31.12805</id>
   
   <published>2009-06-08T18:59:18Z</published>
   <updated>2009-09-15T19:46:49Z</updated>
   
   <summary>I'm really looking forward to the Dutch PHP conference this week. Robert Brouwer from Oracle Netherlands is talking on Friday at 11:45 about Keeping Web Applications Lean and Mean. The need for monitoring is something that comes up all the...</summary>
   <author>
      <name>christopher.jones</name>
      
   </author>
   
      <category term="php" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="dpc" label="#dpc" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="conference" label="conference" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="holland" label="holland" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="installfest" label="installfest" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="netherlands" label="netherlands" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="phpconference" label="php conference" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/opal/">
      &lt;p&gt;I'm really looking forward to the &lt;a href="http://www.phpconference.nl/"&gt;Dutch PHP conference&lt;/a&gt; this week. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Robert Brouwer from Oracle Netherlands is talking on Friday at 11:45 about &lt;a href="http://www.phpconference.nl/schedule/talks#DPC0924"&gt;Keeping Web Applications Lean and Mean&lt;/a&gt;.  &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The need for monitoring is something that comes up &lt;em&gt;all&lt;/em&gt; the time in discussions about burgeoning sites. In last week's SF PHP meetup (&lt;a href="http://blogs.oracle.com/opal/2009/06/there_are_php_jobs_out_there.html"&gt;see my previous post&lt;/a&gt;) SonicLiving mentioned its importance several times, and Steve said a chunk of his time each day was taken up reviewing logs.&lt;/p&gt;

&lt;p&gt;There are all sorts of web metrics that can be gathered. Robert has a lot of experience in this area and his talk will show you what might and might be useful for your site. At the end of the session, Robert will spend a few minutes discussing the product he builds for web monitoring: &lt;a href="http://www.oracle.com/technology/products/oem/prod_focus/realuserexperienceinsight.html"&gt;Real User Experience Insight&lt;/a&gt;. The front end of this is written in PHP (Robert's been a PHP user since the days of PHP 3) making the presentation even more interesting for PHP developers. RUEI is developed in the Netherlands, so there is a local success story too!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On Saturday at 10:30, I'll be giving a tutorial-style InstallFest session&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm going to do a full live demonstration of installing and using Oracle Database with PHP. I'll show Oracle's free database and some of the free applications, and show how to write efficient Oracle PHP applications that work with any Oracle Database "edition" (as we call the database feature packages)&lt;/p&gt;

&lt;p&gt;There will be a special guest appearance by &lt;strong&gt;PHP ElePHPants&lt;/strong&gt; looking for a new home&lt;/p&gt;

&lt;p&gt;    * Learn how easy it is to install Oracle Database&lt;br /&gt;
    * Learn how to use Oracle's free database management and development tools&lt;br /&gt;
    * Learn best architecture and coding practices for developing fast PHP database applications&lt;br /&gt;
    * Learn what limits application scalability and how to overcome these limits&lt;br /&gt;
    * See the benefits of connection pooling and hear tips on connection management&lt;br /&gt;
    * See best and worst practice code examples in action&lt;/p&gt;

&lt;p&gt;After lunch if there is demand (let us know during the first session) we'll be available to show Oracle Enterprise Linux and Oracle VM installation (&lt;strong&gt;start your own cloud!&lt;/strong&gt;) and, if you want to bring your own hardware, we can assist with installing any or all of Oracle Enterprise Linux, Oracle Database, and PHP.&lt;/p&gt;

&lt;p&gt;Finally, here is one picture I took during my very brief stay a few years ago. You can see why I want to return.&lt;br /&gt;
&lt;br&gt;&lt;br /&gt;
&lt;span class="mt-enclosure mt-enclosure-image" style="display: inline;"&gt;&lt;a href="http://blogs.oracle.com/opal/pics/holland.jpg"&gt;&lt;img alt="holland.jpg" src="http://blogs.oracle.com/opal/assets_c/2009/09/holland-thumb-500x339-1086.jpg" width="500" height="339" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
      
   &lt;img src="http://feeds.feedburner.com/~r/ChristopherJonesOnOpal/~4/1uMiHryb1lw" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blogs.oracle.com/opal/2009/06/keeping_web_applications_lean_1.html</feedburner:origLink></entry>

</feed>
