This file is indexed.

/usr/share/php/tests/Horde_Feed/Horde/Feed/fixtures/lexicon/http-phplens.com-phpeverywhere-%2Fq=node-feed-1 is in php-horde-feed 2.0.1-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">]>
<rss version="0.92" xml:base="http://phplens.com/phpeverywhere">
<channel>
 <title>PHP Everywhere - By John Lim</title>
 <link>http://phplens.com/phpeverywhere</link>
 <description></description>
 <language>en</language>
<item>
 <title>Perception is 99% of reality</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/251</link>
 <description>&lt;p&gt;Jeff Atwood &lt;a href=http://www.codinghorror.com/blog/archives/001058.html&gt;writes&lt;/a&gt;:
&lt;blockquote&gt;
If you've used Windows Vista, you've probably noticed that Vista's file copy performance is noticeably worse than Windows XP. I know it's one of the first things I noticed. Here's the irony-- Vista's file copy is based on an improved algorithm and actually performs better in most cases than XP. So how come it seems so darn slow?
&lt;/blockquote&gt;
&lt;p&gt;PS: Jeff adds that Vista SP1 has switched back to XP's algorithm. Duhh!</description>
<pubDate>Fri, 07 Mar 2008 19:53:44 -0500</pubDate></item>
<item>
 <title>Octalpussy</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/250</link>
 <description>&lt;p&gt;In my previous post I asked what would be the output of of the following numbers: 
&lt;pre&gt;
echo 09," =&gt; (09) &amp;lt;br&gt;";
echo 9," =&gt; (9) &amp;lt;br&gt;";
&lt;/pre&gt;
&lt;p&gt;The answer is:
&lt;pre&gt;
0 =&gt; (09)
9 =&gt; (9)
&lt;/pre&gt;
&lt;p&gt;
That's because any number preceded by 0 is treated as an octal number, and 9 is an invalid octal number. Octal numbers are base 8, e.g.:
&lt;table border=1&gt;
&lt;tr&gt;&lt;td&gt;Octal Value&lt;td&gt;Decimal Value
&lt;tr&gt;&lt;td&gt;1&lt;td&gt;1
&lt;tr&gt;&lt;td&gt;2&lt;td&gt;2
&lt;tr&gt;&lt;td&gt;3&lt;td&gt;3
&lt;tr&gt;&lt;td&gt;4&lt;td&gt;4
&lt;tr&gt;&lt;td&gt;5&lt;td&gt;5
&lt;tr&gt;&lt;td&gt;6&lt;td&gt;6
&lt;tr&gt;&lt;td&gt;7&lt;td&gt;7
&lt;tr&gt;&lt;td&gt;10&lt;td&gt;8
&lt;tr&gt;&lt;td&gt;11&lt;td&gt;9
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;
&lt;p&gt;The silly thing is that hardly anyone uses octal nowadays,  but it continues to be part of the C, C++, Java and PHP standards. The mistake is also &lt;a href=http://mindprod.com/jgloss/octal.html&gt;very common&lt;/a&gt;. C-style languages pride themselves in their terse and minimalist syntax, but this is one scenario where a language design error was probably made. Perhaps 0c should have been used to represent octal in analogy to 0x for hexadecimal, but this suggestion is sadly 35 years too late. 0 for octal is too deeply imprinted in modern compiler DNA.
&lt;p&gt;PS: Here's the &lt;a href=http://phplens.com/lens/lensforum/msgs.php?id=17245&gt;mistaken ADOdb bug report&lt;/a&gt; that started it.</description>
<pubDate>Sun, 03 Feb 2008 11:24:06 -0500</pubDate></item>
<item>
 <title>Octopussy numbers in PHP</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/249</link>
 <description>&lt;p&gt;Someone reported a bug in ADOdb, the open source db library i maintain. I went crazy for half an hour until i realised the problem. Here's a little gotcha you can try:

&lt;pre&gt;
echo 09," =&gt; (09) &amp;lt;br&gt;";
echo 9," =&gt; (9) &amp;lt;br&gt;";
&lt;/pre&gt;

&lt;p&gt;If you expect the above code to produce the same values, you are sadly mistaken. Try it. Also see the &lt;a href=http://phplens.com/phpeverywhere/?q=node/view/250&gt;followup&lt;/a&gt;.</description>
<pubDate>Sun, 03 Feb 2008 10:59:24 -0500</pubDate></item>
<item>
 <title>Code's Worse Enemy</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/247</link>
 <description>&lt;p&gt;
Steve Yegge talks about choosing the right programming language in the face of &lt;a href=http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html&gt;Code's Worse Enemy&lt;/a&gt;:
&lt;p&gt;
&lt;blockquote&gt;
I'll give you the capsule synopsis, the one-sentence summary of the learnings I had from the Bad Thing that happened to me while writing my game in Java: if you begin with the assumption that you need to shrink your code base, you will eventually be forced to conclude that you cannot continue to use Java. Conversely, if you begin with the assumption that you must use Java, then you will eventually be forced to conclude that you will have millions of lines of code.
&lt;/blockquote&gt;
&lt;p&gt;
There's a lot of truth in what he says. You can't fault his taste: He prefers Mozilla Rhino, a Javascript/Ecmascript implementation. 
&lt;p&gt;
When we coded in ASP, we were a JScript shop. When we were looking for something that ran cross-platform, the closest thing that fit the bill was PHP. Javascript with perl-style $variables. Neither language is perfect. But good enough - or as some prefer to put it: &lt;a href=http://en.wikipedia.org/wiki/Worse_is_better&gt;worse is better&lt;/a&gt;.</description>
<pubDate>Sun, 06 Jan 2008 04:45:57 -0500</pubDate></item>
<item>
 <title>Why Should PHP ever be taught in school?</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/244</link>
 <description>&lt;p&gt;Happy New Year Folks! Let's keep on blogging.
&lt;p&gt;This posting by Ka-Ping Yee on &lt;a href=http://zestyping.livejournal.com/124503.html&gt;why PHP should never be taught&lt;/a&gt; is precisely why PHP should be taught. If something is popular but hard to understand then we need an education process. To just shake our heads and give up is simply immature (or trolling). Otherwise we might as well say that English (or any other spoken language for that matter) should not be taught, because spoken languages are illogical, imprecise and therefore ... useless :)
&lt;p&gt;Most programming languages have similar gotchas. Oracle's PL/SQL has "" being equivalent to null. Javascript believes that 0 and "" are equivalent.  C has non-zero being equivalent to boolean true. Lisp's gotcha begins with ( and ends with ) -- (just a joke). Java's gotcha begins with J2EE and the obsolete baggage that comes with it. 
&lt;p&gt;PS: The confusion is because === is the real equality operator and should be used here. In PHP, == is equality after typecasting, where 0 == "0" and "" == "0" evaluating to true are accepted conventions. They are useful constructs in many situations in a similar vein to C's convention of 0 being boolean true and non-zero being boolean false, which the critics cleverly ignore. See the &lt;a href=http://www.php.net/manual/en/types.comparisons.php&gt;PHP Manual on type comparisons&lt;/a&gt;</description>
<pubDate>Tue, 01 Jan 2008 09:04:43 -0500</pubDate></item>
<item>
 <title>Web cluster redundancy with mod_backhand revisited</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/243</link>
 <description>&lt;p&gt;In my &lt;a href=http://phplens.com/phpeverywhere/?q=node/view/241&gt;last blog entry on mod_backhand&lt;/a&gt;, I mentioned that you could implement redundancy in a web cluster by having multiple load balancers and using &lt;a href=http://en.wikipedia.org/wiki/Round_robin_DNS&gt;round robin DNS&lt;/a&gt; pointing to the load balancers. This technique is mentioned in the mod_backhand presentation notes by Theo Schlossnagle, one of the author's of mod_backhand.
&lt;p&gt;But if you think about it carefully, in my opinion, this solution doesn't really work well:
&lt;ul&gt;
&lt;li&gt;Round robin DNS systems simply return a list of IP addresses (sorted randomly) that resolve that domain name. Most DNS servers do not perform checks to detect if any of the IP addresses are down. So clients will get the IP addresses of load balancers that are down too. The DNS client normally just picks the first IP address in the list to use - and it could be the IP address of a load balancer that is down.
&lt;li&gt;Secondly, when a client resolves the domain name, this IP address is cached on the client. So a failure in one of the load balancers would still mean that all web browsers that previously connected to that load balancer successfully because of DNS caching would be unable to access the system for quite a long time (e,g. 10-15 minutes).
&lt;/ul&gt;
&lt;p&gt;I can think of several solutions, but the best one as far as I can see (if you still want to use mod_backhand of course) is to run mod_backhand on a high availability hardware solution (or if a few minutes downtime is acceptable, keep a spare box configured with mod_backhand around to swap with any balancer that goes down), and not push the hard problem of high availability and redundancy to DNS.
&lt;p&gt;Ahmad Amran Kapi from Melaka, Malaysia, points out that you can use &lt;a href=http://www.backhand.org/wackamole/&gt;Wackamole&lt;/a&gt;:
&lt;blockquote&gt;
Wackamole is an application that helps with making a cluster highly available. It manages a bunch of virtual IPs, that should be available to the outside world at all times. Wackamole ensures that a single machine within a cluster is listening on each virtual IP address that Wackamole manages. If it discovers that particular machines within the cluster are not alive, it will almost immediately ensure that other machines acquire these public IPs. At no time will more than one machine listen on any virtual IP. Wackamole also works toward achieving a balanced distribution of number IPs on the machine within the cluster it manages. 
&lt;/blockquote&gt;</description>
<pubDate>Wed, 26 Dec 2007 05:57:40 -0500</pubDate></item>
<item>
 <title>Back and Backing Backhand on top of that!</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/241</link>
 <description>&lt;p&gt;Since I got married last year, I haven't had much motivation to blog. The good news is that since the previous year, I've accumulated a list of accomplishments and experiences that i feel are worthwhile sharing.
&lt;p&gt;
Recently, my company implemented our first &lt;a href=http://backhand.org/&gt;mod_backhand&lt;/a&gt; implementation. Mod_backhand is a load-balancing and clustering solution that runs on Apache. Let's say you have 3 web servers that you need to load balance in a cluster. When a server goes down, it will auto-detect that server is down and route subsequent http requests to other servers. You can buy a load-balancing box such as Cisco Redirector, or roll your own package using Linux, Apache 1.3 and mod_backhand.
&lt;p&gt;
The mod_backhand load balancer is basically a Linux system with Apache 1.3 (httpds) with the mod_backhand patches installed. The load-balancer also supports redirects and https. Load balancing uses the Apache virtual directory mechanism, so you can configure different load balancing behaviour for different applications on a directory basis.
&lt;p&gt;
The nice thing about mod_backhand is that it autodetects servers going up and down in the cluster, with no additional configuration required. All web servers in the cluster need to broadcast that they are alive and available on the cluster at regular intervals. So if you want to add another web server to the cluster, you just need to install the backhand broadcasting service and start it on the server, and the load balancer will pick it up. CPU and load information is also broadcast to the load balancer, so the load balancer can make an intelligent guess as to which web server to pass the http request to.
&lt;p&gt;
There are some issues that you need to be aware of:
&lt;ul&gt;
&lt;li&gt;No support of https on the internal network. Communications between the web browser and load-balancer can use https but not between load-balancer and web server. So if you have confidential information and you don't trust your internal network, you need to setup another layer of encryption on top of that (e.g. SSH tunnel). That's what we did for our login system.
&lt;li&gt;The load balancer, like any other system in the network, becomes another point of failure. If you want total redundancy, one method is to have multiple mod_backhand load balancers, and round-robin DNS the load balancers.
&lt;li&gt;AFAIK, automatic failover to another server of a http request if the 1st web server goes down is not supported.
&lt;li&gt;There is Windows support (for the web servers in the cluster, not as a load-balancer) thanks to Rob Butler, but you currently need Visual C++ expertise as the binary "NT Backhand Broadcaster" doesn't work out of the box anymore with mod_backhand. There are patches in CVS but no existing binary download. As a service to the community, I have compiled my own: &lt;a href=http://phplens.com/lens/dl/ntbhb-john-21-Dec-07.zip&gt;NT Backhand Broadcaster&lt;/a&gt;.
&lt;li&gt;Keep-Alives reduce the availability of the load balancer, as web clients can lock a mod_backhand process for unreasonable amounts of time. You need to change your Keep-Alives on to a low value (eg. 1 second), and if possible, move your static HTML and images to the load balancer (which is just Apache after all).
&lt;li&gt;Your web page URLs need to be relative URLs of course. The one exception is https, which needs to use the address of the load-balancer. 
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Additional Windows Notes&lt;/b&gt;
The Windows Registry settings for Backhand Broadcaster are a bit obscure. Here is a sample config:
&lt;p&gt;
&lt;pre&gt;
HKEY_LOCAL_MACHINE\SOFTWARE\CerebraSoft]

[HKEY_LOCAL_MACHINE\SOFTWARE\CerebraSoft\Backhand_Broadcast]
"Arriba"=dword:28213950
"numCPU"=dword:00000002

[HKEY_LOCAL_MACHINE\SOFTWARE\CerebraSoft\Backhand_Broadcast\BroadcastParams]
"HostName"="Windows Server 1 BHB"
"ContactIP"="192.168.0.121"
"SendIP"="192.168.0.255"
"SendPort"=dword:0000115d
"ContactPort"=dword:00000050
"SendTTL"=dword:00000001
&lt;/pre&gt;
&lt;p&gt;The ContactIP is the IP address of my Windows server running BHB: 192.168.0.121
The SendIP is the broadcast IP for the subnet (not the IP address of the load-balancer).
&lt;p&gt;Sometimes the first time you run NT Backhand Broadcaster, it will fail to calculate Arriba (a benchmark measuring the power of your server) and just die. You need to manually enter the Arriba value yourself in the registry. Just use the above example value if you aren't sure what to do.
&lt;p&gt;The load-balancer provides a page to check out the status of all servers in the cluster, typically http://load-balancing-server/backhand/
&lt;p&gt;Lastly, if you still cannot get it working, check out the Windows Event Log (Applications), as errors and status messages are logged there.</description>
<pubDate>Fri, 21 Dec 2007 04:22:11 -0500</pubDate></item>
<item>
 <title>Bye Bye PHP4</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/240</link>
 <description>&lt;p&gt;Matt of WordPress fame gives his &lt;a href=http://photomatt.net/2007/07/13/on-php/&gt;opinion on PHP4 and the transition to PHP5&lt;/a&gt;. As he says:
&lt;p&gt;
&lt;blockquote&gt;
 None of the most requested features for WordPress would be any easier (or harder) if they were written for PHP 4 or 5 or Python. They’d just be different. The hard part usually has little to do with the underlying server-side language.
&lt;/blockquote&gt;
&lt;p&gt;
Very true. Most of our code continues to run fine on both PHP 4 and 5, with hardly any checking of PHP_VERSION. Migrating from PHP4 to PHP5 has been relatively painless (each time we port an application, we spend at most half a day fixing warnings that didn't appear in PHP4).
&lt;p&gt;
Matt asks why the takeup of PHP5 been so low, and is quite disparaging to the PHP internals devs. I don't see it in such black and white terms. PHP5 never had a feature that was must-have or to-die-for. In fact, if you look at PHP's recent changes, most of them are performance improvements, or fixing past mistakes (adding proper date support for example in 5.2.1), or feature tweaks (iterators, etc). Given that most PHP4 developers have found workarounds to things fixed in PHP5, migrating to PHP5 is probably a low priority. 
&lt;p&gt;
Also some fixes in PHP5 can cause serious problems. For example, In PHP 5.2.0, time-zone calculations started to support epochs, which are time-changing events. Now my timezone was +7.30 GMT until 1980, when we got a new Prime Minister who decreed that the country would combine its 2 time-zones to 1, so Malaysia standardised on +8.00 GMT. A timestamp such as "12.10am Nov 12, 1979 MYT" in PHP 5.1 would be displayed as "11.40pm Nov 11, 1979 MYT" in PHP 5.2.
&lt;p&gt;
On a more optimistic note, as long as the market share of PHP remains strong, I think the take-up rate of PHP6 will probably be higher than PHP5 in the non-English world, simply because managing multi-lingual and sites that don't use ASCII for their native script is much easier in Unicode. Now that's a compelling reason!</description>
<pubDate>Mon, 23 Jul 2007 08:22:52 -0400</pubDate></item>
<item>
 <title>A big Pfutt to Windows Vista</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/239</link>
 <description>&lt;p&gt;Peter Gutmans, a noted security expert talks about &lt;a href=http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.html&gt;Windows Vista Content Protection&lt;/a&gt;. Quite disturbing and saddening. I'm about to buy a notebook for my mum, and all the one's I'm looking at have Vista preinstalled. Pfutt.
&lt;blockquote&gt;
&lt;p&gt;Beyond the obvious playback-quality implications of deliberately degraded output, this measure can have serious repercussions in applications where high-quality reproduction of content is vital. Vista's content-protection means that video images of premium content can be subtly altered, and there's no safe way around this — Vista will silently modify displayed content under certain (almost impossible-to-predict in advance) situations discernable only to Vista's built-in content-protection subsystem.
&lt;/blockquote&gt;</description>
<pubDate>Thu, 22 Feb 2007 00:18:43 -0500</pubDate></item>
<item>
 <title>Stefan Esser ruminates on PHP Security</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/238</link>
 <description>&lt;p&gt;Stefan Esser, one of the foremost PHP security gurus in the world is &lt;a href=http://www.securityfocus.com/columnists/432&gt;interviewed in Security Focus&lt;/a&gt;. He's also well known for disagreeing with the PHP Group (that oversees PHP Core development) about the way PHP security issues are treated. Disturbing in more ways than one.</description>
<pubDate>Wed, 07 Feb 2007 21:31:09 -0500</pubDate></item>
<item>
 <title>The Shape of Future Processors?</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/237</link>
 <description>&lt;p&gt;I read this article on CPU trends &lt;a href=http://www.hpcwire.com/hpc/1209133.html&gt;Converging Design Features in CPUs and GPUs&lt;/a&gt;. Matthew Papakipos writes:
&lt;blockquote&gt;
&lt;p&gt;Where are both CPU and GPU designs converging?
&lt;li&gt;
    &lt;li&gt;  Both processors will be massively multi-core –- think hundreds of cores -- within a five-year period.

    &lt;li&gt;  Both processors will have complex memory hierarchies, with programmer managed core-local memories and core-local hardware-managed cache. (My own belief is that hardware-managed cache will decrease substantially in importance.)

    &lt;li&gt;  Memories will be strongly non-uniform with significant latency and throughput differences between local and non-local memory.

    &lt;li&gt; Accelerators that can offer substantial speedups for specific tasks, either integrated on-chip or available via a HyperTransport-type interconnect, will be ubiquitous.
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm more interested in modern CPUs trends and their relation to PHP, and not GPUs. Here are some of my thoughts: 
&lt;p&gt;Well PHP running in pre-fork mode on Apache or FastCGI on IIS/Apache should have no problems handling massively multi-core architectures, assuming the cores are uniform in design.
&lt;p&gt;As to complex memory hierarchies, we already have to handle the different latencies in &lt;i&gt;harddisk -&gt; harddisk cache -&gt; cpu data/instruction caches&lt;/i&gt;. We always had the option of caching data on a hard disk or RAM disk, and some PHP Accelerators already give you the option of caching data in shared memory -- I just see it as more of the same for PHP developers. Things get more interesting for PHP compiler and opcode cache designers as they will have more options for caching PHP opcodes and data. 
&lt;p&gt;What is interesting is the possibility of hardware acceleration of PHP. To me, it's not likely that any CPU vendor will come up with a hardware accelerator for PHP, but a CPU accelerator for .NET or java opcodes is a strong possibility. Thus in the long run, .NET or java compilers for PHP (and Python and Perl) could become mainstream.
&lt;p&gt;</description>
<pubDate>Mon, 22 Jan 2007 01:50:25 -0500</pubDate></item>
<item>
 <title>My experience moving to PHP5</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/235</link>
 <description>&lt;p&gt;
In August of this year, we decided to move from PHP4 to PHP5 for all our future PHP development. The transition was relatively painless, as the core libraries we use (&lt;a href=http://adodb.sourceforge.net/&gt;ADOdb&lt;/a&gt;, &lt;a href=http://phplens.com/&gt;PHPLens&lt;/a&gt;, some &lt;a href=http://pear.php.net/&gt;PEAR&lt;/a&gt; modules) are already PHP5 compliant and have been for some time.  What's nice about PHP5 is that it caught some errors that have been lingering in our code: PHP5 no longer allows a function to be defined twice, and some basic variable referencing errors that we missed previously. 
&lt;p&gt;
We have ported our key web applications over to run on PHP5, but for some key customers with extremely large PHP4 code bases, we felt it was safer to keep them running on PHP4 for the time being as the cost of migration would be high; and we weren't sure whether it was worth it as the customers seem to be happy with PHP4's current performance.
&lt;p&gt;
Other things that we have changed is that we have transitioned to using XMLHttpRequest for all our Ajax calls. Formerly we were using the excellent &lt;a href=http://www.ashleyit.com/rs&gt;JSRS library&lt;/a&gt;, but I can already see most programmers we hire in the future will be more familiar with XMLHttpRequest than JSRS. The nice thing about using XMLHttpRequest is that all XMLHttpRequests can be debugged using the excellent &lt;a href=http://addons.mozilla.org/firefox/1843/&gt;Firebug&lt;/a&gt;, a Firefox/Mozilla extension that is extremely useful for Javascript debugging.
&lt;p&gt;
I admit we are still retrograde when it comes to exploiting PHP5's new functionality. Last month, we had to do a presentation so we moved our PHP5 web application to a notebook. Later I found out that notebook only had PHP4 installed. The web application worked flawlessly.
&lt;p&gt;
&lt;img src=http://phplens.com/phpeverywhere/icons/bet9mil.gif&gt;</description>
<pubDate>Sun, 03 Dec 2006 00:50:47 -0500</pubDate></item>
<item>
 <title>In praise of Zend Core</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/234</link>
 <description>&lt;p&gt;
Hi I'm back. Been busy. I will try to relate some of my experiences in the last few months in later blogs.
&lt;p&gt;
I'd like to point out that one of the greatest services to the PHP community that Zend is providing is the free &lt;a href=http://www.zend.com/products/zend_core/zend_core_for_oracle&gt;Zend Core for Oracle&lt;/a&gt; and &lt;a href=http://www.zend.com/products/zend_core/zend_core_for_ibm&gt;Zend Core for DB2&lt;/a&gt;. The latest versions install PHP 5.1.6. The little known secret is that these 2 installers are perfect for MySQL as the mysql and mysqli extensions are included in the release. 
&lt;p&gt;
Zend Core is the installer I would recommend to setup PHP in a Windows IIS environment because it has support for FastCGI with IIS. FastCGI is the only scalable and safe way of running PHP on IIS, because not all PHP extensions are thread-safe and there are global locks in multi-threaded mode that hurt PHP performance if don't use FastCGI.
&lt;p&gt;
The only minuses is that Zend Core currently doesn't include the postgresql extension, and you have to compile in extensions which are not included in the release. 
&lt;p&gt;
&lt;img src=http://phplens.com/phpeverywhere/icons/jayne.gif&gt;</description>
<pubDate>Tue, 28 Nov 2006 12:53:17 -0500</pubDate></item>
<item>
 <title>New Improved Yummy ADOdb Session Handler</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/233</link>
 <description>&lt;p&gt;&lt;a href=http://adodb.sourceforge.net/&gt;ADOdb&lt;/a&gt;, the database library i maintain, has had support for storing session data in a database for a long time. However there was one limitation that always continued to bug me: the fact that all the PHP servers using database-backed sessions needed to synchronize their times to ensure that the session timers worked properly. 
&lt;p&gt;Well in the latest version of ADOdb (4.91), released a few days ago, we have the new Session2 implementation. This time, we always use the database server clock to keep track of times. We no longer rely on the PHP app servers to set the session timers, so even if the clocks of these app servers are out of synch, sessions are not affected. This change required us to change the database table format used, but that is a small price to pay for the added flexibility. You can read more in the &lt;a href=http://phplens.com/lens/adodb/docs-session.htm&gt;ADOdb session docs&lt;/a&gt;.
&lt;p&gt;
Usage is really simple:
&lt;pre&gt;
include_once("adodb/session/adodb-session2.php");
ADOdb_Session::config($driver='mysql', $host, $user, $password, $database,$options=false);
session_start();
&lt;/pre&gt;
&lt;p&gt;
&lt;img src=http://phplens.com/phpeverywhere/icons/57.gif&gt;</description>
<pubDate>Fri, 04 Aug 2006 00:00:11 -0400</pubDate></item>
<item>
 <title>Partitioned Iteration in Enterprise Frameworks</title>
 <link>http://phplens.com/phpeverywhere/?q=node/view/232</link>
 <description>&lt;p&gt;Just heard that Bill Gates is retiring from Microsoft. I guess he's achieved every possible goal he had, and it's downhill from here ;-)
&lt;p&gt;
I always enjoy reading Roger Sessions work on designing scalable software infrastructure. He's a Java framework expert who has become a .NET advocate. Roger has written a very interesting white paper on &lt;a href=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/sessfin00.asp&gt;A Better Path to Enterprise Architectures&lt;/a&gt;. It's a rehash of the &lt;a href=http://en.wikipedia.org/wiki/KISS_Principle&gt;KISS principle&lt;/a&gt; and small is beautiful, taken from a software designer's perspective. 
&lt;p&gt;
If that sounds pretty dull to you, read the fighter pilot analogy Roger brings up, where he talks about Mig-15 and F-86 dogfights. Stirring stuff.</description>
<pubDate>Fri, 16 Jun 2006 07:25:20 -0400</pubDate></item>
</channel>
</rss>