Skip to content


Jumpstarting PDO

Lukas is making another attempt at jumpstarting PDO development.  I welcome this effort, and will do what I can to help fill in details and make suggestions.  Unfortunately, I'm just way too busy with work to be able to commit to more than that.

I also wanted to share some of my thoughts on why PDO has been in a holding pattern for a while, so that more people are aware of it and can work to avoid repeating the same mistakes.

The first thing to note is that the guts of PDO were hard to develop.  The PHP script facing API sounds simple enough, but the underlying libraries for each different databases work in different ways, and it was and is a challenge to build PDO in such a way that it can work in the most efficient way.

The second thing, which is really a follow-on from the first, is that the database libraries are complex and nuanced.  Some are relatively simple (especially SQLite and MySQL) and others are complex in divergent ways (ODBC and Oracle).  Making a great PDO necessitates having experts in each of those APIs and databases around as contributors, both for the core implementation and for unit tests.

Thirdly, there are a lot of databases out there. That requires a lot of resources for the PDO developers to do a good job; not just different database products, but also different versions of those products, need to be tested against.  This is also very time consuming.

This boils down to a lot of effort.

Personally, I enjoy working hard.  Tricky problems are the most satisfying kind to solve!  However, working hard when there is no payoff is the least enjoyable kind of work.

For a successful PDO, there needs to be "payoff" for the contributors to keep them happy and working at it.  In a commercial context, where someone sponsors development, the payoff is typically in the form of a paycheck to help cover the bills.  In a FOSS context, the payoff may be satisfaction from working on hobby coding, may be vanity in wanting recognition and appreciation from peers or end-users or may be seen as effort to help build out a resume for future career opportunities.  There may be other motivating factors too.

I've talked in the past about FOSS being "Itch Driven Development".  So long as the contributors feel the need to scratch their respective itches, they'll keep on doing it.  They'll stop if the itch goes away, or if the scratching leads to bleeding.

Bleeding is stuff that detracts from or otherwise lessens the payoff.  In a commercial context this could manifest as something that wastes time (and time is money).  In a FOSS context, this may also be the result of vocal and/or abusive or otherwise negative sentiments from peers or others in the community.

Bleeding is bad for the whole group because it can take a long time for those that were bleeding to want to try their hands at scratching again.  Whatever form the renewed PDO development takes, it would do well to try to avoid bleeding.  One way to do this is to follow the advice of Bill and Ted and "Be Excellent To Each Other".

At the end of the day, PDO (and PHP) is largely a volunteer effort, which means that it is something that will be worked on in the spare time of the contributors.  Because it is hard work, the payoff needs to be enough for them to individually opt to work on it after a hard day at work instead of choosing alternatives, like family, beer or Xbox.

If you're willing and able to help improve PDO by contributing development effort and/or unit tests, please make yourselves known on the PDO mailing list. We need a critical mass to reduce the effort that any one person needs to make, and once we have momentum on our side, I think that PDO can be improved rather rapidly.

CouchShare now on BitBucket

A few of my friends and associates may have heard me talk about the media server I've been running in my basement; I used to automatically transfer content from my tivo to a hard-disk in my basement so that I had more space for recordings on the tivo.  Since most of the recordings that I want to keep are now available via Hulu, I haven't had much call to use it in the last 6 months.

So, what is CouchShare?  It's a UPnP server that can share content from folder to an XBox 360 on your network.

It's written in PHP (and requires a tiny PHP extension to enable multicast support) and is written using the eventing framework that is part of the Alexandria codebase.

I wrote the code back in 2007 and it has served me well for a couple of years; it felt like it was about time I got off my backside and shared it with the world.

It is by no-means a polished bit of code; I think it's probably the sloppiest code I've written in quite some time, and it may well need a couple of tweaks to make an easier application out of it.

So, have at it: I've put the code up on bitbucket and I welcome code and documentation contributions!

Whirlwhind review of php|tek 09

It's been a simultaneously long and fast week for me. I flew into Chicago last Sunday, ready for the PHP core developers meeting that we had planned for the Monday and Tuesday. My journey went like a charm; perfect timing had me parked at the airport, immediately on the shuttle bus to the terminal, straight through security and to my gate just in time to start boarding. The only minor hiccough was in finding the shuttle from Chicago to the hotel; it was extremely poorly sign-posted.

Anyway, I got to the hotel and ran into the British contingent of the conference, and we eventually found our way to a Mexican restaurant not far from the hotel, and then to the bar across several lanes of traffic from the hotel, where a fair quantity of alcohol was consumed by all.

The next day we headed downtown to the Microsoft offices for day 1 of the core developer meeting, where a number of internals issues around PHP 6 were discussed. This was a very productive session, and we earned the drinks that followed at the Map Room, although I opted out of the bulk of those and headed back to the hotel (yes, I'm getting old)

Tuesday was day 2 of the core developer meeting, and thankfully was held in the conference hotel; the journey downtown took the better part of an hour and I was glad to skip it. The agenda for this day was to look primarily at what we could clean up in the code for PHP 6 and whether we might need to introduce a PHP 5.4 to aid in that transition.

We also touched on PDO 2; the short of it is that it might be about time to see if the vendors are willing to play with us again, and where the original plan was to have all the major vendors on board, we may well be looking at cutting out the less flexible vendors from the baseline PHP distribution. I'll do what I can to help facilitate a PDO 2, but don't anticipate having much free time in the coming months.

After a low-key dinner in the hotel sports bar (thanks Chris!) I retired to my room to catch up on a bit of work and put some finishing touches on my presentation deck. I returned to the bar a bit later to see who was around, and was surprised that most folks had turned in early; another sign that we're collectively getting older.

Wednesday was the start of the conference proper, and Andrei's keynote reminded us of the humble beginnings of the world-wide-web and took us through the various incarnations of PHP-past as a lead-in to PHP 6. As is usual with Andrei's sessions, I was left feeling a little jealous of the beautiful photography and humor he manages to find to complement what would otherwise be a somewhat dry technical presentation.

Later in the afternoon, it was my turn to present my new talk, which is partly best practices (really what I consider to be the baseline practices for any serious commercial development shop) and partly a re-hash of an internal presentation I gave to my team at Message Systems when I became Director of Engineering. I was pleased (perhaps even a little surprised) to find that I had a very full room for the talk, and happy that I seemed to keep everyone well engaged through to the end. I've had some good feedback and welcome constructive criticism so that I can improve it for the next time I use it; you may comment (anonymously if you wish) via the page for that session.

I sat in on Maggie Nelson's talk on ORMs, which was an interesting comparison of PHP ORMs. Personally, I think that ORM is one of those niceties that is, unfortunately, a bit too far divorced from the ugly reality of making things work well under load in the real world. There are some articles out there on the impedance mismatch that leads to most of the problems, and some interesting work from my colleagues at OmniTI in the form of a Relucant ORM for Perl that avoids the major pitfalls.

After dinner, an open bar and a series of lightning talks put pretty much everyone in high spirits (that and consuming spirits...) that carried over into the wee hours of the following morning.

The next morning was largely playing catchup for me; both with some work and with various folks around the conference; new acquaintances and old friends. I was interviewed by Keith Casey about what went on in the PHP Developers meeting, and I think this is my first appearance on YouTube (and don't I look a little caffeine deprived?)

I caught Lorna Mitchell's session on Linux-Fu for PHP Developers which made me think that the growing number of self-taught Linux users, and the common develop-PHP-apps-on-windows-deploy-on-unix scenario does warrant some attention on what might be considered fairly basic unix know-how from PHP conference organizers. It was a good session and well presented.

After lunch, I had the (somewhat dubious!) pleasure of experiencing Eli White's gratuitous use of Knight Rider clips to highlight that you can make just about any programmer better if you give him the right tools.

The final session I attended was Chris Cornutt's session comparing a number of the popular PHP frameworks, which I found to be quite a useful comparison of their strengths. There was some drama towards the end when rival framework proponents in the audience had a somewhat heated discussion between themselves.

And shortly after that, I set out on my journey home, which was sadly rather more traumatic that the outbound journey, starting with a hot and sticky Chicago airport, a slightly delayed flight, which also had faulty air conditioning and the coup-de-grace in the form of a dead battery and faulty alternator in my car (actually Juliette's car; I let her use my car while I was away).

After a couple of assists from the airport transportation folks and local police(!), I got the car running and re-enacted my own version of the movie Speed, except that I had to keep the engine revving above 2000rpm or my electrics would fade out and the engine stall. This had me riding both the accelerator and brake pedals at the lights around the airport before I could get out onto the highway; something I think would have been easier to deal with if the car had been a manual transmission.

As ever, it was great to catch up with the usual suspects, and also to finally meet some of the younger blood in the PHP community face to face. I don't know if it's just that the majority of my fellow speakers are becoming increasingly senior in their respective jobs, or if there has been something of a shift in the industry, or if it's just me being focused into more of a managerial role in recent times (or some combination of these), but it seemed to me that there was more of a focus or awareness on practical engineering at this conference than I recall in past conferences.

I think this is a good thing because the typical PHP developer does not usually have a rigorous background in computer science or other "equivalent" scientific or engineering discipline. A few of us had a lunchtime discussion about how even the schools that are teaching computer programming tend to be skimping on applied software skills (the meat and potatoes of getting the work done, rather than just the raw programming theory), and how programming as a profession could benefit from having something akin to an apprenticeship scheme. It will be interesting to see where this train of thought leads.

Anyway, in summary: php|tek 2009, two thumbs up.

Thanks to Microsoft for hosting part of the developers meeting, Marco, Elizabeth and Arbi for the rest, Keith for the unconference, everyone whose photos I've linked in from flickr, and everyone else that attended for making the event what it was. I'm looking forward to the next time that I can attend :-)

Seven Things

I'm usually no big fan of chain letters (it's the "or-else" part that I object to), but this current 7-things-tag going around is pretty benign, and I think it's a great way to get some insight into the people you're reading. Thanks to Elizabeth Smith for tagging me.

Anyway, here's some facts about me that you may not know:

  1. I have 6 siblings: 1.5 brothers and 2 sisters.
  2. I used to live in Spain and crossed the border to Gibraltar twice daily getting to and from school.
  3. I taught myself 6502 machine code on the C64 when I was 10. 'C' had to wait until I finally got my own Amiga at the age of 17; by that time it was already obsolete, but I'd dreamed of it for so long. The biggest barrier for learning 'C' for me was the sheer quantity of bad Intuition code examples floating around on Fish Disks and Aminet.
  4. I studied Electronic Systems Engineering at The University of York, where I discovered my first Unix system (IRIX) and had to retake my first year exam as a result of spending too much time in the "Spod Pit" (a room filled with Indigo workstations). In retrospect, that "inappropriate" use of time was instrumental in shaping my career.
  5. I once rolled into a 9 a.m. computer lab assessment with my partner wearing tuxedos after partying all night at a graduation ball. The lab supervisor said "let's assess you first, as you look like you've got places to go". (We aced that assessment; preparation was key).
  6. I've moved home on average about once every 2.5 years of my life, making my time in the USA one of the longer periods in one spot.
  7. I've been told that I have a distinctive look, which is probably largely due to my long hair. In the late 80's, early 90's, I used to have a flat top. Then I discovered Guns'n'Roses and Metallica and haven't worn my hair short since.

As for chaining, in no particularly significant order:

and the rules:

  • Link your original tagger(s), and list these rules on your blog.
  • Share seven facts about yourself in the post - some random, some weird.
  • Tag seven people at the end of your post by leaving their names and the links to their blogs.
  • Let them know they've been tagged by leaving a comment on their blogs and/or Twitter.