2012-01-09

The MicroPHP Manifesto

Ed Finkler – The MicroPHP Manifesto:

“I am not a Zend Framework or Symfony or CakePHP developer

[…] I like building small things that work together to solve larger problems

[…] I need to justify every piece of code I add to a project”

(I mostly agree, but I love Rush!)

Mon, 09 Jan 2012 11:56:33 +0100
2011-07-06

New features in PHP5.4 alpha1

Gonzalo Ayuso – New features in PHP5.4 alpha1:

"Added array dereferencing support:

[…]

$a = new A();
echo $a->foo()['name'];

(Via entwickler.com.)

Update: Playing with the new PHP5.4 features by the same author.

Wed, 06 Jul 2011 10:51:29 +0200
2009-10-26

Thoughts on the Whitehouse.gov switch to Drupal

Tim O'Reilly at O'Reilly Radar – Thoughts on the Whitehouse.gov switch to Drupal:

"Yesterday, the new media team at the White House announced via the Associated Press that whitehouse.gov is now running on Drupal, the open source content management system. That Drupal implementation is in turn running on a Red Hat Linux system with Apache, MySQL and the rest of the LAMP stack. Apache Solr is the new White House search engine."

Mon, 26 Oct 2009 12:05:42 +0100
2009-09-25

Gearman

"Gearman provides a generic application framework to farm out work to other machines or processes that are better suited to do the work. It allows you to do work in parallel, to load balance processing, and to call functions between languages. It can be used in a variety of applications, from high-availability web sites to the transport of database replication events. In other words, it is the nervous system for how distributed processing communicates."

(Via Rasmus Lerdorf.)

Fri, 25 Sep 2009 09:14:32 +0200
2009-03-24

PHP OCI8 Signal Handling and --enable-sigchild

Christopher Jones – PHP OCI8 Signal Handling and --enable-sigchild:

"Only if you see defunct "zombie" Oracle server processes then start PHP/Apache with the Oracle Net option BEQUEATH_DETACH=YES in your sqlnet.ora, or, to keep the setting specific to PHP, set your environment starting Apache.

[…] You should never need to configure PHP with --enable-sigchild or set BEQUEATH_DETACH=YES if PHP is "remote" from the DB server."

Tue, 24 Mar 2009 10:34:50 +0100
2009-03-17

Why PHP won

Eric Ries – Why PHP won:

"Everything is request-oriented, short-lived, and stateless. A PHP script is like an object itself, encapsulating a bit of functionality behind an interface defined by HTTP. It's one of the most effective paradigms for software devlopment in history. The platforms that win on the web are those that mirror its fundamental structure, not those that try to morph it into a more traditional "elegant" shape.

[…] For them, PHP is an ideal language precisely because it gets out of their way, allowing them to build a simple foundation for their complex and beautiful browser-based cathedrals."

Tue, 17 Mar 2009 21:07:42 +0100
2009-02-26

State of the Computer Book Market 2008, part 4 -- The Languages

Mike Hendrickson at O'Reilly Radar – State of the Computer Book Market 2008, part 4 -- The Languages:

"If you look at the five-year trend for the languages shown below, you can see that C# has been steadily growing year after year while Java has been going in the opposite direction during the same period. PHP, ActionScript and Python are the other languages going in a positive direction. Ruby, Java, and C++ had the biggest declines in unit sales during 2008, and Ruby dropped out of the top 10 languages."

Thu, 26 Feb 2009 09:14:15 +0100
2009-01-08

Hunting PHP memory leaks

PHP still serves us great, it's very stable and usually painless to work with. But this week I've spent some quality time with PHP 5.3 (alpha4-dev) since our long-running PHP command line scripts were (still) leaking memory…

So I reported my third memory leak in PHP today, bug #47038 (the older ones were bug #46889 in PHP 5.2.8 and bug #29838 in PHP 4.3.8). But it's great that the classic recursive reference memory leak has been fixed in 5.3!

Thu, 08 Jan 2009 17:09:15 +0100
2008-12-19

Less Whining, More Coding

Elizabeth Smith at PHP Advent 2008 – Less Whining, More Coding:

"Download a PHP snapshot or release candidate, install it, and run your PHP application. If it breaks, report the bug! If more people would do this, fiascos like PHP 5.2.7 would not happen because the magic_quotes_gpc issue would have been caught and fixed."

Fri, 19 Dec 2008 15:15:27 +0100
2008-08-06

Drupal as Open Architecture

Kurt Cagle at O'Reilly News – Drupal as Open Architecture:

"One thing that's rubbed at me for a while is that Ruby on Rails is still based upon this paradigm that you have to write code in order to build a site, which means that Ruby will always be of use only to those people who can write Ruby code in the first place.

With Drupal, that's no longer a requirement, and it means that people can get Drupal sites up and running quickly without needing to understand the first thing about programming - and if they can't find a module that does what they need […] then they can find a programmer that will create just that functionality without having to rebuild the entire site. It's one of the reasons why Drupal is beginning to become the de facto environment for smaller news organizations and PR departments.

[…] As to Drupal, it has effectively become to web portals what Eclipse is to application development, and has the potential to significantly challenge Microsoft's Sharepoint or similar commercial portal applications in that space."

Wed, 06 Aug 2008 10:31:49 +0200
2008-05-06

Put the web server on a diet and increase scalability

 Gojko Adzic – Put the web server on a diet and increase scalability:

"HTTP sessions are often used to store frequently accessed user-specific information, but that is wrong. It is error-prone from the consistency perspective, but it also significantly inhibits scalability.

[…] I strongly suggest using a proper caching mechanism instead of session objects for on-demand caching and optimising access to frequently required information. This caching memory can be released at any time, does not have to persist and does not have to be synchronised across requests."

Tue, 06 May 2008 10:37:05 +0200
2008-04-25

PHP Connection Pooling Whitepaper with Benchmark Available

Christopher Jones – PHP Connection Pooling Whitepaper with Benchmark Available:

"The whitepaper [PDF] talks about the changes in the PHP OCI8 1.3 extension, explains some of the concepts behind DRCP and FAN, and gives best practices and tuning tips.

It includes a new PHP benchmark which shows up to 20,000 connections being handled by Oracle on commodity hardware using only 2G RAM." 

Fri, 25 Apr 2008 00:20:32 +0200
2008-03-25

Java is losing the battle for the modern Web

Andi Gutmans - Java is losing the battle for the modern Web. Can the JVM save the vendors?:

"Project Zero’s Chief Architect is one of the first IBMers to admit in public that Java today can be considered as a system language and is not desirable for building RESTful Web applications which is Project Zero’s goal (slide #4 of the presentation- see slide #11 to see how a simple “Hello, World” in Java compares to dynamic languages like Groovy and PHP). It has taken over 10 years for the Java stronghold to admit Java’s poor ROI on the Web and with the current recession it is likely that many Java customers are going to be making more informed investments. As a result there will be considerable rise in uptake of dynamic languages."

Tue, 25 Mar 2008 13:32:15 +0100
2008-02-20

Simultaneuos HTTP requests in PHP with cURL

Stoyan Stefanov - Simultaneuos HTTP requests in PHP with cURL:

"Using the curl_multi* family of cURL functions you can make those requests simultaneously. This way your app is as slow as the slowest request, as opposed to the sum of all requests. And that's something."

Wed, 20 Feb 2008 09:47:51 +0100
2008-01-05

2008 Prediction 4: PHP Problems

Tim Bray - 2008 Prediction 4: PHP Problems:

"A big project I’m peripherally involved with needed to include an outward-facing Wiki, and I suggested that MediaWiki was damn good stuff. They put in quite a bit of work and failed to get MW to integrate with the rest of the system. Yes, it’s a good wiki, but it shouldn’t have been that hard to make it play nice with others, and I got the impression that the PHP-ness of it was a big part of the problem."

I'm not sure where PHP gets in our way when we're trying to write good software... 

Sat, 05 Jan 2008 22:34:05 +0100
2007-12-01

Create impressive charts with Open Flash Chart

Dmitri Popov at Linux.com - Create impressive charts with Open Flash Chart:

"Creating a high-quality chart for the Web can be a challenging task, but open source software like Open Flash Chart (OFC) makes it a cinch. As you might guess from its name, the core engine of OFC is written in Adobe Flash. Although this means that users need a Flash browser plugin to view charts created with OFC, this approach has a significant advantage: it allows you to produce professional-quality graphs with minimum effort, because the core engine does all the heavy lifting, and all you need to do is to specify configuration options for your chart and feed data into it."

Sat, 01 Dec 2007 01:59:19 +0100
2007-11-23

Remember: be nice to byte code caches

Lukas Kahwe Smith - Remember: be nice to byte code caches:

"<arnaud_> does autoload have a performance impact when using apc ?
<Rasmus_> it is slow both with and without apc
<Rasmus_> but yes, moreso with apc because anything that is autoloaded is pushed down into the executor
<Rasmus_> so nothing can be cached
<Rasmus_> the script itself is cached of course, but no functions or classes"
Fri, 23 Nov 2007 00:37:21 +0100
2007-11-20

Behind the Site

Zend.com - Behind the Site:

"Zend Platform can intercept calls to files that are larger than a given, configurable size, offloading those calls directly to Apache to boost performance."

Tue, 20 Nov 2007 13:59:38 +0100
2007-10-14

LAMP and the Spread Toolkit

Jason R. Briggs at ONLamp.com - LAMP and the Spread Toolkit:

"I don't believe it makes a lot of sense to receive messages in a PHP app (which is not to say in certain circumstances it might not be necessary, just that I'd prefer otherwise). So, from a design perspective in a multi-language environment, while I might send messages from a PHP application, I would potentially look at using Python daemons to handle writing the responses to those messages into a database; perhaps using Ajax polling for live notification to clients, or--the lightest-weight approach--including notifications in a standard page response.

[...] That said, the PHP extension for Spread is, admittedly, not production-ready. There are some stability issues; in particular, if the Spread daemon restarts after the PHP extension has made a connection, a reconnection can cause a persistent crash (not Apache httpd, just the extension itself). Therefore, I would invest in some serious development time with a C-and-PHP guru before relying on the extension for a mission-critical system."

Sun, 14 Oct 2007 21:50:19 +0200
2007-10-08

APC or Memcached

Peter Zaitsev - APC or Memcached:

 "APC Cache (Eaccelerator and other similar caches) is Fast but it is not distributed so you’re wasting cache and reducing possible hit rate by caching things locally if you have many web servers. MemcacheD is relatively slow but distributed and so you do not waste memory by caching same item in a few places, it is also faster to warmup as you need only one access to bring item into the cache, not access for each of web servers."

Mon, 08 Oct 2007 15:10:29 +0200
2007-09-24

CLIPS

"CLIPS is a tool for building expert systems. This PHP extension [PHLIPS] provides PHP with a basic interface to a CLIPS environment. Its purpose is to allow deployment of expert systems in PHP."

Unfortunately the PHP extension doesn't seem to be developed anymore... 

Mon, 24 Sep 2007 13:03:42 +0200
2007-09-23

7 reasons I switched back to PHP after 2 years on Rails

Derek Sivers - 7 reasons I switched back to PHP after 2 years on Rails:

"Ruby is prettier. Rails has nice shortcuts. But no big shortcuts I can’t code-up myself in a day if needed.

Looked at from a real practical point of view, I could do anything in PHP, and there were many business reasons to do so."

Sun, 23 Sep 2007 23:48:25 +0200
2007-09-10

Update to libxml2 in PHP - progress hath been acquired

Greg Beaver - Update to libxml2 in PHP - progress hath been acquired:

"I am abandoning the creation of a relax NG schema in favor of the battle-tested xsd. The error messages for xsd validation are far clearer than the rng ones."

W3C Schema/Relax NG/DTD seem to be totally useless in PHP, help?:

"Now that I am working on the PHP 5+ implementation of Pyrus, the first thing I thought I might do is create a Relax NG schema that the PHP libxml can handle. After an entire day of fighting with the thing, I've managed to discover more than 10 simple and valid Relax NG schema that simply don't work with the version of libxml distributed with PHP 5.2.3. In addition, with helpful error messages like "Expecting name, got nothing here," even with the use of libxml_use_internal_errors() I find the error reporting to be excruciatingly useless."

Mon, 10 Sep 2007 09:58:37 +0200

Do you develop a website? It is infinitely better to synchronize live and development sites using the PEAR Installer

Greg Beaver - Do you develop a website? It is infinitely better to synchronize live and development sites using the PEAR Installer:

"This is the missing piece of the 4 most common synchronization methods: it's really hard to fix mistakes made. You will still make mistakes when using the PEAR Installer, the difference is that reverting them is a 1-liner and requires no sweat or fear that one will break something else in the process: each release of a package is a known quantity, and it will work the same way as it did last time."

Mon, 10 Sep 2007 09:49:20 +0200
2007-07-06

Go PHP5

GoPHP5.org: "The PHP developer community has decided that it is indeed now time to move forward, together. Therefore, the listed software projects have all agreed that effective February 5th, 2008, any new feature releases will have a minimum version requirement of at least PHP 5.2.0."
Fri, 06 Jul 2007 11:38:40 +0200
2007-06-12

ezcWorkflow

Sebastian Bergmann - Slides from eZ Conference:

"ezcWorkflow

  • Reusable workflow engine component
  • Part of the ez Components - Version 1.0 will be part of the ez Components 2007.1 release
  • Developed as part of my Diploma Thesis"

See also the Tutorial.

Tue, 12 Jun 2007 16:47:41 +0200
2007-04-12

Savant

"Savant is a powerful but lightweight object-oriented template system for PHP. Unlike other template systems, Savant by default does not compile your templates into PHP; instead, it uses PHP itself as its template language so you don't need to learn a new markup system."
Thu, 12 Apr 2007 22:30:05 +0200
2007-02-06

Zend Studio

"Zend Studio 5.5 is the only Integrated Development Environment (IDE) available for professional developers that encompasses all the development components necessary for the full PHP application lifecycle."

 See also: Peter Manis at Linux.com - Increase PHP programming productivity with Zend Studio.

Tue, 06 Feb 2007 16:38:25 +0100
2007-01-17

PHP vs. Ruby on Rails. An evolutionary story of a Web Developer and his tools.

Nathaniel S. H. Brown - PHP vs. Ruby on Rails. An evolutionary story of a Web Developer and his tools:

"What I find in ever increasing potency is that Ruby and Ruby on Rails needs documentation like PHP. Actually, every language ever created needs documentation like PHP. It is, at least it should be, the gold standard of documentation for anyone learning a language, and could likely be construed as the single most instrumental reason why PHP has had such a significant adoption rate within the world of development."

Wed, 17 Jan 2007 14:08:48 +0100
2007-01-05

Central Authentication Service (CAS)

"CAS provides enterprise single sign on service:

  • An open and well-documented protocol
  • An open-source Java server component
  • A library of clients for Java, .Net, PHP, Perl, Apache, uPortal, and others"
Fri, 05 Jan 2007 21:29:16 +0100
2006-12-21

Template Engines

Brian Lozier back in 2003 - Template Engines:

"I'm basically advocating a "template engine" that uses PHP code as it's native scripting language. I know, this has been done before. When I read about it, I thought simply, "what's the point?" After examining my co-worker's argument and implementing a template system that uses straight PHP code, but still achieves the ultimate goal of separation of business logic from presentation logic (and in 40 lines of code!), I have realized the advantages and honestly, can probably never go back."

Thu, 21 Dec 2006 14:47:37 +0100
2006-12-05

eZ Components Workflow Engine

Sebastian Bergmann - eZ Components Workflow Engine:

" The Workflow components that I developed as part of my Diploma thesis ("Design and Implementation of an Activity-Based Workflow Engine") and that will be part of the eZ Components, an enterprise ready general purpose PHP components library by eZ Systems, provide this layer in the form of an abstract virtual machine for Graph-Oriented Programming (GOP) with PHP.

[...] You can find the sourcecode for the three components that I developed as part of my thesis here: Workflow, WorkflowDatabaseTiein, and WorkflowEventLogTiein."

Tue, 05 Dec 2006 12:28:50 +0100
2006-12-04

PHP 5.2 upload progress meter

Dragan Dinić - PHP 5.2 upload progress meter:

"Yesterday I’ve spent considerable amount of time in order to find out more about the most interesting new PHP 5.2 feature - hook for upload progress meter."

Mon, 04 Dec 2006 10:49:50 +0100
2006-11-23

Scalable PHP with APC, memcached and LVS

Mike Morgan - Scalable PHP with APC, memcached and LVS (Part 2):

"In our journey with addons.mozilla.org (AMO) we made some interesting group decisions a year ago that we regretted later:

  • Smarty
  • PEAR::DB

PEAR::DB was unnecessarily large, and Smarty is just not worth it — it confuses the issue and redoes things PHP is already good at using arbitrarily complicated syntax. Any quick run through with something like the Zend Profiler or APD will tell you how much of a dog these things can be. If you haven’t already, I highly recommend profiling your app to see where you’re losing performance — I bet it’s mostly in includes."

Thu, 23 Nov 2006 23:06:55 +0100
2006-11-11

Comparing Frameworks

Tim Bray - Comparing Frameworks:

"Maybe it’s just because I’m a grizzled 25-year veteran, but my feeling is that in the real world in the long term, maintainability is a really really big deal, the biggest of all.

Out there in the wild woolly “Web 2.0” world, maybe getting it built quick is all that matters, because after you’ve knocked ’em dead and been acquired, you can use the money from the Yahoo! buy-out to rebuild everything right the second time. In the enterprise though, I kind of suspect that smart developers and smart managers know that for real apps, the big development cost starts to happen after they’re delivered."

Sat, 11 Nov 2006 23:48:58 +0100
2006-09-01

Language Wars

Joel Spolsky - Language Wars:

"These debates are enormously fun and a total and utter waste of time, because the bottom line is that there are three and a half platforms (C#, Java, PHP, and a half Python) that are all equally likely to make you successful.

[...] I for one am scared of Ruby because (1) it displays a stunning antipathy towards Unicode and (2) it's known to be slow, so if you become The Next MySpace, you'll be buying 5 times as many boxes as the .NET guy down the hall. Those things might eventually be get fixed but for now, you can risk Ruby on your two-person dormroom startup or your senior project, not for enterprisy stuff where Someone is Going to Get Fired."

Fri, 01 Sep 2006 10:34:57 +0200
2006-08-29

NOT Getting Started with PHP 5 SOAP

Not having played with PHP 5's native SOAP extension yet, I did expect it to work smoothly with the most simple application I could think of - querying Google via its SOAP Search API. Well...

I first compiled the latest PHP 5.1.6 with --enable-soap and downloaded the Google SOAP Search API developer's kit which contains their WSDL file, GoogleSearch.wsdl.

Running this example PHP code...

<?php $client = new SoapClient('GoogleSearch.wsdl'); try { $result = $client->doGoogleSearch( '[Secret Google key]', 'Tim Strehle', 0, 3 ); foreach ($result->resultElements as $resultElement) { print $resultElement->URL; } } catch (SOAPFault $f) { echo $f->faultstring . "\n"; } ?>

... produced a lovely error message:

tim@vm:/tmp>php test.php No Deserializer found to deserialize a ':filter' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.

Here's the actual SOAP request PHP was sending:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:GoogleSearch" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:doGoogleSearch> <key xsi:type="xsd:string">[Secret Google key]</key> <q xsi:type="xsd:string">Tim Strehle</q> <start xsi:type="xsd:int">0</start> <maxResults xsi:type="xsd:int">3</maxResults> <filter xsi:nil="true"/> <restrict xsi:nil="true"/> <safeSearch xsi:nil="true"/> <lr xsi:nil="true"/> <ie xsi:nil="true"/> <oe xsi:nil="true"/> </ns1:doGoogleSearch> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

The error message did come from Google:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring>No Deserializer found to deserialize a ':filter' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.</faultstring> <faultactor>/search/beta2</faultactor> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Obviously Google doesn't like the xsi:nil stuff created by PHP. Modifying those empty tags manually in an XML file...

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:GoogleSearch" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:doGoogleSearch> <key xsi:type="xsd:string">[Secret Google key]</key> <q xsi:type="xsd:string">Tim Strehle</q> <start xsi:type="xsd:int">0</start> <maxResults xsi:type="xsd:int">3</maxResults> <filter xsi:type="xsd:boolean">false</filter> <restrict xsi:type="xsd:string"></restrict> <safeSearch xsi:type="xsd:boolean">false</safeSearch> <lr xsi:type="xsd:string"></lr> <ie xsi:type="xsd:string"></ie> <oe xsi:type="xsd:string"></oe> </ns1:doGoogleSearch> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

... and sending the SOAP request using curl finally produced correct results:

tim@vm:/tmp>cat test.curl header = "SOAPAction: urn:GoogleSearchAction" header = "Content-Type: text/xml" data = "@/tmp/test.xml" url = "http://api.google.com/search/beta2" tim@vm:/tmp>curl -K test.curl | xmllint --format - <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:doGoogleSearchResponse xmlns:ns1="urn:GoogleSearch" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="ns1:GoogleSearchResult"> <directoryCategories xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Array" ns2:arrayType="ns1:DirectoryCategory[0]"> </directoryCategories> <documentFiltering xsi:type="xsd:boolean">false</documentFiltering> <endIndex xsi:type="xsd:int">3</endIndex> <estimateIsExact xsi:type="xsd:boolean">false</estimateIsExact> <estimatedTotalResultsCount xsi:type="xsd:int">184000</estimatedTotalResultsCount> <resultElements xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:Array" ns3:arrayType="ns1:ResultElement[3]"> <item xsi:type="ns1:ResultElement"> <URL xsi:type="xsd:string">http://tim.digicol.de/</URL> <cachedSize xsi:type="xsd:string">4k</cachedSize> <directoryCategory xsi:type="ns1:DirectoryCategory"> <fullViewableName xsi:type="xsd:string"/> <specialEncoding xsi:type="xsd:string"/> </directoryCategory> <directoryTitle xsi:type="xsd:string"/> <hostName xsi:type="xsd:string"/> <relatedInformationPresent xsi:type="xsd:boolean">true</relatedInformationPresent> <snippet xsi:type="xsd:string">&lt;b&gt;Tim&lt;/b&gt; at his desk &lt;b&gt;Tim Strehle&lt;/b&gt; @ Digital Collections &lt;b&gt;...&lt;/b&gt; &lt;b&gt;Tim&amp;#39;s&lt;/b&gt; Weblog &amp;middot; Ceterum censeo...&lt;br&gt; www.liederdatenbank.de, my personal project for building a database &lt;b&gt;...&lt;/b&gt;</snippet> <summary xsi:type="xsd:string"/> <title xsi:type="xsd:string">&lt;b&gt;Tim Strehle&lt;/b&gt; @ Digital Collections</title> </item> <item xsi:type="ns1:ResultElement"> <URL xsi:type="xsd:string">http://tim.digicol.de/weblog/</URL> <cachedSize xsi:type="xsd:string">33k</cachedSize> <directoryCategory xsi:type="ns1:DirectoryCategory"> <fullViewableName xsi:type="xsd:string"/> <specialEncoding xsi:type="xsd:string"/> </directoryCategory> <directoryTitle xsi:type="xsd:string"/> <hostName xsi:type="xsd:string"/> <relatedInformationPresent xsi:type="xsd:boolean">true</relatedInformationPresent> <snippet xsi:type="xsd:string">My linkblog: What I (&lt;b&gt;Tim Strehle&lt;/b&gt;) read on the web, on PHP. XML. Information Science&lt;br&gt; and Information Architecture... 2006-08-23 &lt;b&gt;...&lt;/b&gt;</snippet> <summary xsi:type="xsd:string"/> <title xsi:type="xsd:string">&lt;b&gt;Tim&amp;#39;s&lt;/b&gt; Weblog » Latest posts</title> </item> <item xsi:type="ns1:ResultElement"> <URL xsi:type="xsd:string">http://freshmeat.net/~tistre/</URL> <cachedSize xsi:type="xsd:string">12k</cachedSize> <directoryCategory xsi:type="ns1:DirectoryCategory"> <fullViewableName xsi:type="xsd:string"/> <specialEncoding xsi:type="xsd:string"/> </directoryCategory> <directoryTitle xsi:type="xsd:string"/> <hostName xsi:type="xsd:string"/> <relatedInformationPresent xsi:type="xsd:boolean">true</relatedInformationPresent> <snippet xsi:type="xsd:string">User info page for &lt;b&gt;Tim Strehle&lt;/b&gt;. Name: &lt;b&gt;Tim Strehle&lt;/b&gt;. User ID: #96744. Email: &lt;b&gt;tim&lt;/b&gt;&lt;br&gt; __at__ &lt;b&gt;strehle&lt;/b&gt; __dot__ &lt;b&gt;...&lt;/b&gt; &lt;b&gt;Tim Strehle&lt;/b&gt; didn&amp;#39;t post any article comments yet. &lt;b&gt;...&lt;/b&gt;</snippet> <summary xsi:type="xsd:string"/> <title xsi:type="xsd:string">freshmeat.net: User information</title> </item> </resultElements> <searchComments xsi:type="xsd:string"/> <searchQuery xsi:type="xsd:string">Tim Strehle</searchQuery> <searchTime xsi:type="xsd:double">0.020699</searchTime> <searchTips xsi:type="xsd:string"/> <startIndex xsi:type="xsd:int">1</startIndex> </return> </ns1:doGoogleSearchResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

I don't know enough SOAP so I cannot say whether this is Google's or PHP's fault, but it's definitely not the "just works" experience I'd expect from both of them. If SOAP's complexity itself is to blame, I may have been right to lean towards REST (or POX over HTTP) without ever having used much SOAP...

Update: "Optional fields cause problems", says Dare Obasanjo - ETech 2005 Trip Report: Building a New Web Service at Google... It turns out that filling in all optional parameters in the SOAP call makes the PHP script work:

<?php $client = new SoapClient('GoogleSearch.wsdl'); try { $result = $client->doGoogleSearch( '[Secret Google key]', 'Tim Strehle', 0, 3, false, '', false, '', '', '' ); ... ?>
Tue, 29 Aug 2006 00:24:28 +0200
2006-08-23

Make the download of large files with PHP (and lighty) very easy

Björn Schotte - Make the download of large files with PHP (and lighty) very easy:

"Some days ago I stumbled upon an old entry of Jan in lighty's life, called "X-Sendfile". There he explains how to speed up the delivery of (large) files with lighttpd instead of PHP (YES, lighttpd is very fast - for one customer we created an ImageServer with pure lighty that replaced a 4-server-cluster with Apache and now has 1 server with lighttpd (which is boring around at low load). The box makes 180 Mio. requests per month)."

Wed, 23 Aug 2006 23:23:31 +0200
2006-08-22

WP-APP: Atom Publisher Protocol for WordPress

Elias Torres - WP-APP: Atom Publisher Protocol for WordPress:

"Simply drop app.php into your root wordpress install directory and have some Atom/APP fun.

If you don’t have wordpress installed, I’ve setup a demo server for you to try it out. First, register to get your own account, since you won’t be able to post/put/delete entries without a valid username and password. The rest is all curl geekiness for those who care."

Tue, 22 Aug 2006 23:35:46 +0200
2006-08-09

Practical Testing PHP Applications with Selenium

Sebastian Schürmann - Practical Testing PHP Applications with Selenium:

"All in all Selenium provides a simple way to execute Acceptance Tests on Web Applications and as soon as you have a remarkable test suite, covering the basic steps of your Application you will find out that it eases developer life and daily usage lowers the number of sideffects (bugs) that pop up because of changes to the codebase. Its a real timesaver, if you know how to use it, so get some practice."

Wed, 09 Aug 2006 12:10:26 +0200

Scripters UTF-8 Survival Guide (slides)

Harry Fuecks has nice slides at SitePoint: Scripters UTF-8 Survival Guide (PDF).

Wed, 09 Aug 2006 10:06:37 +0200
2006-07-30

Rasmus Lerdorf on scaling web apps with PHP

Niall Kennedy - Rasmus Lerdorf on scaling web apps with PHP:

"Rasmus Lerdorf led OSCON attendees through a series of optimizations for modern web applications using PHP at O'Reilly's Open Source conference today. Most programmers use default installations and configurations for their web applications and never really dig deep within their stack or their own code to optimize page load and latency. The full slides from Rasmus's talk are available online and I recorded audio of the entire session from the front row."

Sun, 30 Jul 2006 22:03:15 +0200
2006-07-27

A geo-located photo album in five easy pieces

Kevin Quiggle and Mike Whitton at Linux.com - A geo-located photo album in five easy pieces:

"Open standards, and openness in general, enables people to combine a variety of technologies in new and interesting ways. For example, using a camera with Exif support, a GPS receiver, the Google Maps API, and Perl, PHP and JavaScript, Mike Whitton created a Web-based photo album in which the photographs are automatically placed on a map at the exact location they were taken. Let's take a look at how this is done."

Thu, 27 Jul 2006 17:37:20 +0200
2006-07-17

A Week in the Valley: Ning

Nathan Torkington - A Week in the Valley: Ning:

"It's just like Rails in the sense that it makes it easy to build a web app. Rails puts "hello world" one commandline away. Ning puts a full real big app one click away. Rails is a framework built around conventions. Ning is a set of libraries, and Ning apps are built using those libraries. There's actually less of a learning curve for programmers in Ning than there is in Rails.

[...] Their storage engine is interesting. Every object has ID, app, user, tag, and type as metadata, and holds arbitrary key-value pairs. That's all the storage engine does, so it's very web loose-coupled. If your appointment data points to my address data, I can delete my address data and your appointment's left pointing to nothing."

Mon, 17 Jul 2006 21:28:44 +0200
2006-06-13

Free PHP and Oracle Manual is Available

Christopher Jones - Free PHP and Oracle Manual is Available:

"The free Underground PHP and Oracle Manual [PDF] is hot off the press."

Tue, 13 Jun 2006 10:57:29 +0200
2006-06-09

Design Tips for Building Tag Clouds

Jim Bumgardner at ONLamp.com - Design Tips for Building Tag Clouds:

"Tag clouds are only one, specific kind of weighted list. There are many kinds of mappings from visual features to underlying data that have not yet been exploited. How about trying some weighted lists that don't look like common tag clouds? For example, you could map font size to time, showing more recent tags in large sizes. Or, in a historical database, you could map font to decade or century, using progressively older- fashioned fonts for older data."

Fri, 09 Jun 2006 09:52:49 +0200
2006-05-30

PHPTMAPI

"PHPTMAPI implements a PHP API for manipulating topic maps, based on the TMAPI project."

Tue, 30 May 2006 14:28:06 +0200
2006-05-22

Ongoing Continuations

Ongoing Continuations compares passing state in hidden form fields or server-side sessions with continuations:

"What David’s afraid of, and with good reason, is the obvious alternative: storing all of the data as global session state, with each page (or a cookie) referencing a single session ID from which the rest of the information can be retrieved on the server side. The problem with this, as Gilad points out, is that in the world of back buttons and tabbed browser, there is no single session state: the same user in the same session might be simultaneously exploring two booking options, and the server can easily get confused between them. Encoding the information in hidden fields on the page means that the server’s idea of the current state always matches the user’s."

Mon, 22 May 2006 12:03:44 +0200
2006-05-14

Topincs

"Topincs is a Topic Map authoring tool, that allows groups to create Topic Maps in Firefox. Even though it is run in an ordinary browser window it feels like an application installed on your computer. [...] It consists of a client, for editing maps and a server, for storing them. [...] The Server requires Apache 2, PHP 4 and MySQL."

Sun, 14 May 2006 22:19:28 +0200
2006-04-24

How to configure a low-cost load-balanced LAMP cluster

Keith Winston at Linux.com - How to configure a low-cost load-balanced LAMP cluster:

"The ubiquitous Linux, Apache, MySQL, and PHP/Perl/Python (LAMP) combination powers many interactive Web sites and projects. It's not at all unusual for demand to exceed the capacity of a single LAMP-powered server over time. You can take load off by moving your database to a second server, but when demand exceeds a two-server solution, it's time to think cluster."

Mon, 24 Apr 2006 22:12:45 +0200

Giving the user control over accesskeys

Roger Johansson - Giving the user control over accesskeys:

"The normal way for a website to define a shortcut key is to use the accesskey attribute on an element that may have such an attribute, specifying a character that becomes the shortcut key in combination with one or more other keys as implemented by the browser (typically Alt in Windows and Ctrl in Mac OS X).

That doesn’t leave the user with any way to change the accesskeys defined by a website. Well, now there are at least two ways that web developers can offer that possibility."

Mon, 24 Apr 2006 17:49:55 +0200
2006-04-10

Digg PHP's Scalability and Performance

Brian Fioca - Digg PHP's Scalability and Performance:

"It turns out that it really is fast and cheap to develop applications in PHP. Most scaling and performance challenges are almost always related to the data layer, and are common across all language platforms. Even as a self-proclaimed PHP evangelist, I was very startled to find out that all of the theories I was subscribing to were true."

Mon, 10 Apr 2006 22:13:09 +0200

Cool ADOdb Applications

John Lim - Cool ADOdb Applications:

"Many cool people are using this database wrapper library for PHP to ensure that their programs are database independent. Here is a list of software applications using ADODB."

Mon, 10 Apr 2006 21:03:40 +0200
2006-03-29

Roll Your Own Search Engine with Zend_Search_Lucene

John Herren at Zend Developer Zone - Roll Your Own Search Engine with Zend_Search_Lucene:

"Zend_Search_Lucene is a php port of the Apache Lucene project, a full-text search engine framework. [...] In this tutorial, I'll show you how to use Zend_Search_Lucene to index and search some RSS feeds."

Wed, 29 Mar 2006 00:19:47 +0200
2006-03-14

Tonic: A RESTful Web App Development Framework

"Tonic is an open source less is more, RESTful Web application development and Web site management PHP script designed to do things "the right way", where resources are king and the framework gets out of the way and leaves the developer to get on with it."

Tue, 14 Mar 2006 00:20:59 +0100
2006-03-09

Chorizo!

"Chorizo! makes it easy for you to find possible security issues upfront. With the easy to use scanner interface, you are able to insure the security and quality standards of your Web-Applications."

Thu, 09 Mar 2006 17:07:23 +0100
2006-03-05

Zend Framework

"Zend Framework is a high quality and open source framework for developing Web Applications and Web Services."

Sun, 05 Mar 2006 00:08:16 +0100
2006-03-04

US-ASCII transliterations of Unicode text

Harry Fuecks at SitePoint - US-ASCII transliterations of Unicode text:

"[I] ported Text::Unidecode to PHP. [...] What I’ve done is easy, compared to the amazing job Sean M. Burke has done with Text::Unidecode. You really need to read the docs to understand what it does and it’s limitations but, in short, it keeps a “database” of unicode characters and corresponding sensible US-ASCII equivalents. For example, a simple transformation would be “Zürich” to “Zuerich”, “ue” being a common replacement for “ü” in Germanic languages."

Sat, 04 Mar 2006 22:00:10 +0100
2006-03-02

PHP and Scrum: the dreamteam in agile web development

Björn Schotte - PHP and Scrum: the dreamteam in agile web development:

"You may have heard about Agile Programming, eXtreme Programming and the like. I want to introduce to you Scrum, which is "an agile, lightweight process that can be used to manage and control software and product development using iterative, incremental practices."."

Thu, 02 Mar 2006 21:48:06 +0100
2006-02-28

The no-framework PHP MVC framework

Rasmus Lerdorf - The no-framework PHP MVC framework:

"So you want to build the next fancy Web 2.0 site? You'll need some gear. Most likely in the form of a big complex MVC framework with plenty of layers that abstracts away your database, your HTML, your Javascript and in the end your application itself. If it is a really good framework it will provide a dozen things you'll never need. I am obviously not a fan of such frameworks. I like stuff I can understand in an instant. Both because it lets me be productive right away and because 6 months from now when I come back to fix something, again I will only need an instant to figure out what is going on. So, here is my current approach to building rich web applications."

Tue, 28 Feb 2006 12:10:56 +0100
2006-02-26

Why I Like PHP revisited

John Lim - Why I Like PHP revisited:

"In a sense, all the interesting techie stuff in PHP is happening at the C level, in the PHP extensions: in pdo, gd, oci8, mysqli, etc. Everything else, PEAR, Smarty, Drupal, Sympony, ADOdb, PHPLib etc, is just fluff :)"

Sun, 26 Feb 2006 20:56:13 +0100
2006-02-25

Lucene Web Service API

Joe Gregorio cites: "The core of Lucene Web Service API is primarily based on the Atom Publishing Protocol, with a few extensions. We've added the ability to get and set properties of any index or the service itself. For searching, we've based our implementation on the OpenSearch 1.1 protocol."

Sat, 25 Feb 2006 16:43:58 +0100
2006-02-21

A pro-PHP Rant

Harry Fuecks at SitePoint - A pro-PHP Rant:

"Meanwhile, in these days of long tail enthusiasm, other than PHP, you don’t get to hear much about when stuff sucks. Put specifically, don’t bring me your FastCGI unless you’re providing free SMS to go with it, so I can alert myself when it goes down."

Tue, 21 Feb 2006 18:49:27 +0100

Content Negotiation: why it is useful, and how to make it work

On the W3C QA Weblog - Content Negotiation: why it is useful, and how to make it work:

"A negotiation algorithm trusting a cookie showing that the user has chosen a language different than the one negotiated based on its Accept-Language: header information, and defaulting to Accept-based negotiation in the absence of such a cookie, may be the best of both worlds: negotiated resources, and the guarantee of a consistent user experience regardless of potentially misconfigured browsers."

Tue, 21 Feb 2006 11:09:56 +0100
2006-02-20

Easier form validation with PHP

Simon Willison - Easier form validation with PHP:

"FormML (for want of a better name) is never passed to the browser; instead it is processed by my PHP FormProcessor class before being displayed. This class strips out all of the FormML tags, and also applies logic to the rest of the form based on the information from the tags. Because the whole thing is XHTML, this can be relatively easily achieved using PHP's built in XML parser. The XML is modified on the fly to create the XHTML that is sent to the browser."

Mon, 20 Feb 2006 21:48:32 +0100

On Java

François Nonnenmacher - On Java:

"In the past height years, while running my company web platform, I've eliminated two major things: Microsoft and Java, the two over which I've lost sleep. The big winner is LAMP with P as in PHP, Python and Perl. The new kid on the block is Ruby on Rails, though I'm watching its hosting aspects like milk on the fire, for some of them remind me too much of Java in terms of bad code, memory leaks and resources consumption."

Mon, 20 Feb 2006 12:43:28 +0100
2006-02-18

On PHP

Tim Bray - On PHP:

"I should really buckle down and try writing a PHP app because, at the moment, I have an attitude problem. [...] All the PHP code I’ve seen in that experience has been messy, unmaintainable crap. Spaghetti SQL wrapped in spaghetti PHP wrapped in spaghetti HTML, replicated in slightly-varying form in dozens of places. [...] I’m sure that it’s possible to write clean, comprehensible, maintainable, PHP; only apparently it’s real easy not to."

Sat, 18 Feb 2006 21:35:36 +0100
2006-02-16

Lussumo Vanilla

"With Vanilla we wanted to break the mold created and followed by just about every other forum on the web. We sat down and thought about what we liked, and more importantly, what we didn't like about web forums. We wanted emphasis on the discussions rather than the statistics. [...] Vanilla is a PHP / MySQL solution that is 100% open-source."

Thu, 16 Feb 2006 23:36:48 +0100
2006-02-08

Using SVN for Web Development

Maarten Manders at SitePoint - Using SVN for Web Development:

"As our web applications grew and more and more developers started working on them, it became obvious that we needed some kind revision control system to manage our code. As CVS is quite dated and Subversion (SVN) introduced some handy features (atomic transactions, Apache piggybacking, more convenient branching/tagging, tons of other improvements), we chose to go with SVN. The big question was: how to use it correctly? After coming up with some more or less weird ideas I think we finally found a decent solution to put a web application into source control."

Wed, 08 Feb 2006 11:18:07 +0100
2006-01-28

Blueprint PHP application?

Harry Fuecks at SitePoint - Blueprint PHP application?:

"Given that so many applications have been written in PHP, some extremely successful in terms of popularity, are there any applications you’d be happy to point people at for inspiration? Apps which, despite your personal tastes, you think make a good blueprint for doing PHP?"

Sat, 28 Jan 2006 00:44:21 +0100
2006-01-24

PHP Security: Dumb Users or Dumb APIs?

Harry Fuecks at SitePoint - PHP Security: Dumb Users or Dumb APIs?:

"There’s another round of “Is PHP Secure?” debate happening right now. Chris drew attention to it, pointing to a post by Andrew van der Stock (who’s a contributor to OWASP): PHP Insecurity: Failure of Leadership.

So the usual denials have been made (see replies to Chris’s entry)—”Damn newbies”, “Holes in PHP-based app != PHP insecure”, etc., all of which I agree with. But…

[...] What if Andrew does have a point? What if we’re living in denial?"

Tue, 24 Jan 2006 21:36:23 +0100
2006-01-20

There's so much more than Rails

Ian Bicking - There's so much more than Rails:

"Ruby doesn't have Acquisition, but it also plays loose with classes and interfaces in a way that makes code hard to understand locally. Of course nothing is inevitable, but there's risk. And the first generation of programmers is usually enthusiastic; any failure is a personal failure, so you can gloss over those things. It's the second generation that's going to be less enthused, that's going to stare in bafflement at these classes that mysteriously spawn methods, and trying to figure out what's going when there's an exception in dynamically generated code.

[...] Rails doesn't do any of the stuff that PHP does well, it merely provides a landing spot for disaffected PHP programmers. The beauty of PHP is that they are constantly sloughing off disaffected programmers, and yet their numbers still grow. (If PHP is wrong, do we want to be right?)"

Fri, 20 Jan 2006 00:28:26 +0100

IBM's vice president of emerging technology on PHP

Red Herring.com interviews Rod Smith, IBMs vice president of emerging technology:

"Q: Which technology is your group currently looking at developing in the next few months?

A: Right now, we are looking at PHP [a programming language like Java and XML] in particular—we like it as a technology and community. [...]

Q: Can you give an example?

A: IBM was asked to come in on one of the relief recovery programs and build a web site very quickly. They did it in two weeks with PHP."

Fri, 20 Jan 2006 00:25:27 +0100

DBFW

DBFW has "support for record history: You may create two additional columns in your tables (a start-of-validity one and a end-of-validity one), tell the framework of them and then it will handle all modifications as storicized modifications (i.e. the records will not be really deleted, just marked as expired)."

Fri, 20 Jan 2006 00:20:23 +0100
2006-01-19

Power PHP Testing

Chris Shiflett's Power PHP Testing lists the various you can write automated tests for PHP software.

Thu, 19 Jan 2006 23:06:22 +0100

Persisting PHP5 Objects in Oracle

Barry McKay at OTN - Persisting PHP5 Objects in Oracle:

"Storing objects in your database is not just a gimmick; rather, it is the final piece in the "developing entirely within the object-oriented paradigm" puzzle. It allows you to analyze, design, develop, and test using all the techniques that are so popular in traditional, large-scale, object-oriented programming—using approaches such as business objects, UML, and design by contract—seamlessly. This is a radical idea, but the Web development world is catching up to it."

Thu, 19 Jan 2006 22:51:01 +0100

MVC and web apps: oil and water

Harry Fuecks at SitePoint - MVC and web apps: oil and water:

"CRUD is defined in the context of databases where what you’re dealing with is sets of information—you need to make a distinction between inserting into the set and updating an existing member of the set.

Meanwhile HTTP was designed for access to resources, the “primary key” being determined by it’s URL (vs. having to worry about the insert id). If you think “documents”, it’s clear there’s no need to make a distinction between creating and updating—creating a document results in the first version. Updating means overwriting an existing document with a new version. But in both cases the client is POSTing the same thing and does not need to be aware of whether the document already existed or not.

[...] Perhaps our websites have been driven too far by the database? The point here is, given the mismatch between HTTP and CRUD, we’ve put CRUD first which in turns makes actions first class in our frameworks. We aim to support N different types of action (verbs) when really we should have been dealing with only three—GET, POST and DELETE (the latter being perhaps re-routed to a specific “resource class” method according to some framework / form conventions)."

Thu, 19 Jan 2006 13:57:09 +0100

PHP Calendar Fun

Tim Bray - PHP Calendar Fun:

"PHP iCalendar is a good example of the PHP conundrum. It’s ugly, it’s gross, it’s inefficient, but today I have my calendar robustly online and yesterday I didn’t."

Thu, 19 Jan 2006 13:51:37 +0100

Alfresco Announces PHP Development Interface

"Alfresco Software Inc., the first provider of an open source enterprise content management solution, today announced that has integrated the open source programming language, PHP, into its development environment. This enables PHP developers to create new content-centric applications and dynamic web pages that access Alfresco."

Thu, 19 Jan 2006 13:38:44 +0100

Getting Things Done with PHP

"gtd-php is an open source, web-based implementation of the Getting Things Done (GTD) personal organization system."

Thu, 19 Jan 2006 13:27:43 +0100
2006-01-18

PHP-OpenDocument Library

PHP-OpenDocument Library: "I wrote a small PHP library for manipulating OpenDocument files and have released it under Apache 2.0 License.

Its current features are:
* Create plain-text Text (.odt) documents.
* Create simple Spreadsheet (.ods) document."

Wed, 18 Jan 2006 09:25:45 +0100

The sysadmin view on “Why PHP”

Harry Fuecks - The sysadmin view on “Why PHP”:

"When was the last time you saw a PHP runtime error take down an entire application or web server? [...] With PHP it’s very hard for a script to take down the runtime environment—the web server—I’d argue that you’d have to be deliberately trying to do so, perhaps filling up disk space or otherwise.

[...] It may now be reasonable to claim that Apache + mod_php has served more HTTP requests for dynamic pages than any other comparable environment. Despite warts and all, this is tested sortware simply by weight of numbers. That translates into a platform which costs little to keep running and less chance of a wakeup call at 2am.

Anyway—ran into an excellent blog recently: FastCGI, SCGI, and Apache: Background and Future discussing the options given new demand for FastCGI with frameworks like Rails, seen from the eyes of a sysadmin. To a great extent it also explains why we’ve ended up with PHP."

Wed, 18 Jan 2006 09:15:12 +0100
2006-01-16

Mdoc

"Mdoc is a new auto-documentation tool to create manuals like PHP manual at php.net web site, so in a style common to the PHP community and is very efficient to share your code as APIs."

Mon, 16 Jan 2006 15:58:57 +0100
2006-01-13

Oracle Open Source Projects - The Interviews

Sean Hull - Oracle Open Source Projects - The Interviews:

"This story is really about tinkerers, folks that like to play with technologies, and offer up their creations to everyone. Some end up with serious projects on their hands, and a large following. When Oracle ported to Linux, it was a moment for the tinkerers to get busy.

We've managed to contact the authors of six Oracle Open Source projects, and ask them a few questions about their projects, and how they got started."

[Disclaimer: I'm one of the software authors interviewed.]

Fri, 13 Jan 2006 09:28:06 +0100
2006-01-12

Is Ruby brainwashing us?

John Lim - Is Ruby brainwashing us?:

"Well, my personal preference in terms of language is a simple clean C-like syntax. I want something that I can teach programmers in 2 days. I don't want an unfamiliar syntax that requires relearning a lot. I don't want programmers to agonize for hours on the right way to code something new. That's why I don't particularly like Ruby's syntax (though i admit i am a novice at Ruby)."

Thu, 12 Jan 2006 17:26:24 +0100
2005-12-07

Handling UTF-8 with PHP

Harry Fuecks in the WACT Wiki - Handling UTF-8 with PHP:

“This page is intended as a reference for functionality PHP provides which can either help with handling UTF-8 or should be regarded as a risk when used in conjunction with UTF-8 encoded strings.”

Wed, 07 Dec 2005 10:52:00 +0100
2005-11-29

The Truth about Sessions

Chris Shiflett - The Truth about Sessions:

“This article introduces some techniques that can reliably provide statefulness as well as defend against session-based attacks such as impersonation (session hijacking).”

Tue, 29 Nov 2005 13:49:00 +0100
2005-11-23

Minutes PHP Developers Meeting

Derick Rethans’ minutes of the PHP Developers Meeting in Paris November 11th and 12th, 2005, planning for PHP 6 - some interesting excerpts:

1.1 Unicode on/off modes: “[…] We also discussed whether we should even allow Unicode mode to be turned off as current micro benchmarks show that the Unicode implementations of some of the string functions are up to 300% slower, and whole applications up to 25% slower. Disallowing Unicode mode to be turned off is expected to slow down the adoption of PHP 6 too as many ISPs would be reluctant to install a version that immediately slows down the applications of their users.”

2.1 register_globals: “[…] We are going to remove the functionality.”

2.2 magic_quotes: “[…] We remove the magic_quotes feature from PHP.”

3.5 Fileinfo extension in the distribution: “[…] The mime_magic extension doesn’t work very well, and there is an extension in PECL (Fileinfo). We suggest to include this extension into the core, and enable it by default as MIME-type detection is something that most web applications need.”

4.5 Cleanup for {} vs. []: “[…] 1. We will undeprecate [] for accessing characters in strings. 2. {} will be deprecated in PHP 5.1.0 with an E_STRICT and removed in PHP 6. 3. For both strings and arrays, the [] operator will support substr()/array_slice() functionality.”

6.1 Add an opcode cache to the distribution (APC): “[…] 1. We include APC in the core distributions 2. APC will not be turned on by default.”

6.6 E_STRICT on by default: “[…] As we want to expose the language level warnings a bit more, and because of having all error levels in E_ALL, except E_STRICT is confusing we will be adding E_STRICT to E_ALL. As the current default is E_ALL & ~E_NOTICE we will effectively turn on E_STRICT by default.”

Wed, 23 Nov 2005 11:46:00 +0100

Open Source Invades the Enterprise

Matt Rand at Forbes.com - Open Source Invades the Enterprise:

“Pfizer recently embarked on a $25,000 pilot program, where it set up an open-source LAMP architecture next to BEA’s Weblogic J2EE software. It used each software framework to build an application that pulled data from an Oracle database. What surprised Pfizer’s Martin Brodbeck, the director of architecture for the company’s Global Pharmaceutical Group, was that the LAMP software cut development time dramatically over J2EE.”

Wed, 23 Nov 2005 10:27:00 +0100
2005-11-22

Decoupling Application Logic, Persistence, and Flow: The Model Technique

Michael Nash at developer.com - Decoupling Application Logic, Persistence, and Flow: The Model Technique:

“The next step beyond separation of persistence and business logic can be the separation of the application control flow. Business logic classes in this case are written in such a way that they are unaware of how they were called, or what business logic element will be called next. They still require certain inputs, of course, and produce results in some fashion (again, often using the bean pattern to allow result properties to be accessed), but they are a single link in a chain. Some external mechanism is used to control application flow, either another class, or a driver class that reads the sequencing and navigation information from configuration.

[…] Long-time users of Unix-style operating systems will be familiar with the pattern described here, as it is a lot like the Unix command philosophy: Keep each command simple, make it do one thing and do it well, and provide a powerful means to assemble multiple commands into complex applications. In the Unix world, this is achieved by shell scripts and the pipeline technique. The same ideas can be applied to Java applications, with similar powerful results.

Many developers, of course, will recognize this technique as the beginnings of a full workflow pattern, where application logic steps can be combined in sequences or “flows” as required, and where the decisions at each step as to what the next step should be (or what the choices for next steps are, if there are several), are in fact left up to the workflow engine, driven by a sophisticated configuration file. This configuration file can even in many cases be created graphically, allowing a developer to literally draw the sequence of operations of the application required, drawing more and more from a pool of re-usable business logic components, and inventing each individual wheel only once, instead of repeatedly.”

Tue, 22 Nov 2005 16:57:00 +0100
2005-11-08

The Good, the Bad and the Ugly

Richard Davey - The Good, the Bad and the Ugly:

“The ease of developing with PHP has lead to the creation of this script gold mine, and while it can be a wonder to explore there are many factors you should take into consideration before going on a downloading frenzy.

Will the script you are about to install bring your server to a halt? Does it open up glaring security issues? Is there a mess of complex and poorly written code behind the sleek HTML exterior? In this article we get our pick axes ready, delve deep and bring back examples that serve one purpose: to show you what to look out for in other peoples code. By looking at good, bad and just downright ugly snippets of code you can gain a far better understanding of the overall quality of a PHP script.”

Tue, 08 Nov 2005 23:59:00 +0100
2005-11-05

Maybe it’s Not Just Ruby on Rails

chromatic - Maybe it’s Not Just Ruby on Rails:

“In my mind, the issue isn’t “Ruby on Rails is more flexible and capable than standard J2EE or .NET for any project under a (very high) threshold of complexity". The real point is that the simplicity, flexibility, and abstraction possibilities offered by dynamic languages and well-designed libraries – as well as a talent for exploiting radical simplicity, extracting commonalities from actual working code, and knowing when too much flexibility makes you less agile – offer a huge advantage over languages and libraries and frameworks and platforms that assume you need a lot of hand-holding to solve a really hard problem.

Yes, Ruby on Rails does what it does very well. It’s not the only thing that does, though. I wonder perhaps if some of the buzz and glow is that it’s new and shiny (in comparison), so that people haven’t already formed their own opinions about it.”

Sat, 05 Nov 2005 23:55:00 +0100
2005-11-04

Wikipedia Notes

Tim Bray - Wikipedia Notes:

“As of today, there are 124 servers, fairly heterogeneous, although these days they’ve pretty well standardized on dual-Opteron boxes. The MediaWiki software is PHP-based, mostly running on Fedora; I wonder if this is the world’s largest-scale PHP deployment, or would Yahoo top that? They get a pretty good hit rate on their Squid caches; basically, the whole system scales about linearly with the number of servers they deploy.

[…] Having said that, speaking both as a user and contributor, I find that Wikipedia’s performance is mostly pretty terrible; usable, but irritatingly slow. So there’s certainly room for improvement.”

Fri, 04 Nov 2005 10:36:00 +0100
2005-11-03

Hardware Layouts for LAMP Installations

John Allspaw (Flickr) has nice presentation slides titled Hardware Layouts for LAMP Installations [Powerpoint], talking about hardware requirements, MySQL load balancing and caching for large-scale LAMP installations.

Thu, 03 Nov 2005 13:55:00 +0100
2005-11-02

Oracle 10g XE and PHP

Harry Fuecks at SitePoint - Oracle 10g XE and PHP:

“In case you missed it, yesterday Oracle announced a free (as in beer) version of their database - Oracle 10g Express Edition (XE) - basically a ‘lite’ version - some industry analysis here. Significance of this move aside, more interesting is having a play. Managed to get the equivalent of a ‘Hello World’ from PHP to Oracle up in under 1.5 hours today (ran into a specific glitch that required a re-install otherwise would have been less time). Here’s how…”

Wed, 02 Nov 2005 11:07:00 +0100
2005-10-26

Guru - Multiplexing

Wez Furlong - Guru - Multiplexing:

"People often assume that you need to fork or spawn threads whenever you need to do several things at the same time - and when they realize that PHP doesn't support threading they move on to something less nice, like perl.

The good news is that in the majority of cases you don't need to fork or thread at all, and that you will often get much better performance for not forking/threading in the first place.

[…] You can use stream_select() to wait on (almost!) any kind of stream - you can wait for keyboard input from the terminal by including STDIN in your read array for example, and you can also wait for data from pipes created by the proc_open() function."

Wed, 26 Oct 2005 12:06:00 +0200
2005-09-23

The Next Generation of Genealogy Sitebuilding

The Next Generation of Genealogy Sitebuilding ("TNG") is a powerful way to manage and display your genealogy data on the Internet, all without generating a single page of HTML. Instead, your information is stored in MySQL database tables and dynamically displayed in attractive fashion with PHP.”

Fri, 23 Sep 2005 11:45:00 +0200
2005-09-19

An activity based Workflow Engine for PHP

Tony Marston - An activity based Workflow Engine for PHP:

“This document will describe the activity based workflow system which I have constructed as an extension to my Development Infrastructure for PHP. […]

In order to implement a workflow system it is first necessary to find a suitable means of designing and modeling a workflow process. For this I take advantage of the work done by Carl Adam Petri who was the first to formulate a general theory for discrete parallel systems which gave birth to what are now known as Petri Nets.”

Mon, 19 Sep 2005 11:28:00 +0200
2005-09-15

PHP OCI8 Driver Updated!

Andi Gutmans - PHP OCI8 Driver Updated!:

“Antony just sent an email that he finished commiting the updates to the PHP OCI8 driver and giving a short overview of the bug fixes and improvements.

The OCI8 extension has had a lot of bugs in the past few years, and it became clear that if this extension was to become supportable, it would need a serious face lift and architectural improvement.”

Thu, 15 Sep 2005 11:49:00 +0200
2005-09-14

Docvert

This web service software takes multiple word processor files (typically .doc) and converts them to Oasis OpenDocument v1.0 format, and then optionally runs them through an XML pipeline. The result is returned in a .zip file.

Docvert builds upon OpenOffice.org because it has the best chance of dealing with the vagaries of the MS Word format.”

Wed, 14 Sep 2005 14:04:00 +0200