Skip to content


Soliciting questions for PHP and panel at MIX

As I mentioned previously, I'll be at MIX this year on a panel discussing ASP and PHP interoperability, along with Jesse Liberty, Bill Staples, Joe Stagner and Brian Goldfarb.

I've been told that MIX has sold out and that there is a lot of interest in our slot, so I'm sure we'll have plenty to talk about, but I'm looking for questions to break the ice and get things rolling.

If you have any questions, comments or other insights on PHP running on Windows, or on getting PHP apps working together with apps, please comment on this blog post, and I'll try to work them into the panel, and to feed back the results of the discussion here on my blog.

If for some reason your comment doesn't go through, or if you prefer email, you can also mail them to me at

I'll be at MIX'07

I've been invited to participate in a panel at Microsoft's MIX conference this year. The panel is entitled "Can't ASP.NET and PHP just get along?" and is to be a "spirited but friendly" discussion on PHP and interop.

For those folks clicking through from the MIX site, you might be wondering who I am and why I'm on the panel... I've been partly responsible for development of the PHP core and primarily responsible for a lot of the Windows specific portions of PHP. I work for OmniTI, a world respected internet technologies consultancy.

I'm looking forward to MIX, partly because I've heard that it's a lot of fun, and partly because it will a great opportunity to meet with a different crowd--the conferences that I usually attend have attendees that are largely LAMP focused, so the Windows platform focus will be an interesting change. I'm hoping to gain some insight into what people perceive as short-comings in PHP on Windows, and feeding those back into PHP.

If you see me there, stop me and say hi!

Evildesk 0.9.0 released

I uploaded release 0.9.0 of EvilDesk tonight. I realized that I hadn't made a release in over a year, so I tidied up a few bits and pieces and uploaded it. Feel free to review the changelog if you're curious.

Highlights include an improved dock style toolbar, a launcher plugin (type the name of a program or document to find it and run it, instead of poking around the start menu), simpler configuration of the toolbar positioning, translations for German and French, less bugs and support for 64-bit Windows.


Mounting ISO files and disk images on Windows

The folks over at OSR Online have a handy, no-nonsense and free (as in beer) driver and configuration utility that allows you to mount disk, floppy and ISO images under Windows.

You have to register to get at their downloads, and in return you get a very occasional email as well as a periodic printed "magazine" containing low level windows kernel coding information.

You can find the download at OsrVirtualCdAndDisk; it works like a charm for me.

YME: mandatory upgrade!?

I was treated to this, ridiculously wide, "dialog" just now:


again, no option to cancel, and no brains to realize that I don't have the required privileges, and no option to avoid the 8MB download that won't buy me anything.

I'm just glad that I don't have to quit everything just because some app decides that I have to. On the flip side, it interrupted my listening pleasure, so I'm tetchy.

Maybe this update has fixes for these things... but I'll apply that "mandatory" upgrade when I want to do it.

YME: still in the dark ages

I'm getting more and more irritated with windows apps that assume that they can do stuff that requires administrative privileges, like automatically install updates.

I don't run as an administrator because I don't want internet facing apps to mangle my system if/when they get hacked. For the past week I've been telling yahoo music engine that I don't want to upgrade now. It should be smart enough to realize that I don't have administrative rights and not prompt me.

Just now, I started to play a track and it gave me no option: it started to download the 8MB update with no way to cancel the operation, then attempted to install it, which failed.

While I'm not especially irritated by "do you want to upgrade now?" dialogs, I am very irritated by something that forces me to waste bandwidth on a download that I can't run. I don't even know where it downloaded the update to, so I might even have to download it again as the administrator. Ah, there it is: it was downloaded to %TEMP% with a temporary filename and a .tmp file extension.

This sucks; yahoo, fix your stuff.

Just the facts, ma'am

It looks like this PHP vs ASP.NET article really struck a nerve with Joe Stagner.

Joe's response is perhaps a little pro-Microsoft (you can't really blame him for that--he does work there :-) but the essence of his response rings true; there's nowhere near enough factual data in the OTN article to make a balanced decision one way or the other.

To be fair to Sean (the author of the OTN article), it does say "Opinion" across the top of the page and the byline is "One developer's view of the pros and cons of the two most popular means of building web applications", but it's easy to forget those once you're into the article.

I don't want to get caught up in a comparison myself so I will say that a good systems architect will take into account a wide range of factors before arriving at a decision about what is the right combination of tools for the job, and that Joe's response reminds us that projects for really big customers tend to have different non-technical criteria to what I'm going to call the "typical" PHP customer. By non-technical criteria I mean things like business or political concerns--things like corporate mandates for technology choice, considerations based on the skill-set of a possibly very large existing IT staff and so on.

In plain english, it may cost next to nothing to employ PHP developers to build an application, but it may cost a small fortune to "re-tool" the support infrastructure to be able to effectively deploy that application in an exclusively Microsoft/Windows environment. In this situation PHP is not the better solution, even if it would have gotten the job done in less time and with fewer lines of code.

The point of this blog entry is to encourage people to think a bit harder before they sit down to write. You should try to qualify your observations by talking about the environment and other circumstances that apply to situation and then back it up with some factual data. This will turn anecdotal stories into a useful technical resource.

Solaris libumem port on SourceForge

I've had an incredibly busy year so far, having spent the better part of half of it on-site with a customer/partner across the atlantic, and it's only March. In addition to working with them on a large scale deployment proof-of-concept project (I'll blog more about that when I'm sure it's ok to blog about it), we've been hard at work on our Ecelerity 2.1 release, which is just about out-the-door (just some final QA to go).

One of the internals features in our new release is the adoption of the Solaris slab memory allocator, libumem. We already had our own slab allocator, but there are some interesting innovations in libumem that reduce lock contention and cache invalidations that make it attractive for a very high performance multi-threaded application like Ecelerity.

Since Solaris is OpenSourced under the CDDL, we were able to incorporate the allocator into Ecelerity and port it to Linux and Windows and not be forced to open-up our entire source-code. The CDDL requires that we publish the code that we modified, so we set up a project on SourceForge. The code isn't out-of-the-box usable just yet, as it lacks its own configure script and makefile, but it won't take much effort to create those.

Thanks Sun for opening up such good quality code under a commercial software friendly license!

EvilDesk 0.8 Released

I've been enjoying my vacation time, spending a good bit of it hacking on EvilDesk. This is something of an eyecandy release, with some visually appealing refinements. I'm always wary of eyecandy for eyecandy's sake, so I've tried really hard to balance resource consumption with visual goodness. To that end, the eyecandy features can all be turned off, and can also be tuned to reduce (or increase, if you like) their memory consumption. So, what features are new?

  • Added the ability to customize the appearance of slits and the task switcher. Each slit can have a custom background tile, as can the task switcher. You can also change the font, style and colour.

  • Added a window thumbnail cache. This is used by the alt-tab task switcher and also by Overview.

  • alt-tab uses the thumbnail cache to show previews of the applications as you're alt-tabbing.

  • The new Overview plugin is inspired by OSX exposé; pressing Win-F9 (configurable) will show a zoomed-out overview of all the open windows on each monitor attached to the system. You can then click on a window thumbnail to switch to that window. Unlike exposé, Overview performs no animation.

I also made it possible to set all the settings from the .evdm, which should make things significantly easier to configure.

Check out the full change log for more details.

You can Download EvilDesk here.

Happy New Year!

WinXP Desktop Shell Replacement, 2nd Release

[Update: Newer releases are available]

As a follow-on from the last release, I've uploaded the latest iteration of my EvilDesk shell replacement for Windows XP.

The changelog goes something like this:

  • much more robust installer, which should address most of the problems that were reported with the last release.

  • improved window state tracking. Console windows now respect the desktop state.
  • improved multi-mon behaviour.
  • improved window title display for really long window titles when alt-tab'ing.
  • new putty context menu plugin (read the docs for details)
  • experimental tweaks for changing the target slit and gravity for plugins (so you don't have to have everything on the right hand side of the screen). Registry editor required; no GUI. See docs for details.
  • fleshed out the Tweakage menu, making it more useful. The shell will use RunAs for the system level items, for those of us running without admin privileges.

Some random notes/comments:

  • During my debugging, I found that WinLogon doesn't like spaces in paths, so I've changed the default installation destination to \\EvilDesk on your system drive. Sorry about that, but it is a Windows bug.
  • You MUST have admin privileges to install the package; the installer will not modify your shell, so this is safe. Most people will be running with full admin rights anyway. (if you're one of those people, you should be reading The Non-Admin Blog)
  • Sadly, you can't use RunAs to invoke the control panel without invoking explorer.exe for the admin user. I'm open to suggestions. For now, control panel is launched using your privileges via explorer.exe.
  • On a related note, people running XP Home might not be able to launch the control panel. Tough luck, you should be running XP Pro anyway.
  • Gaim still has weird interactions (probably other gtk+ apps will do too). If you rapidly switch desktops, the gaim window sometimes gets mashed up, as though its layout engine has gotten confused. Not sure if thats my bug or GTK's bug. The workaround is to close the chat window when that happens.
  • Thunderbird/firefox: again, rapid desktop switching sometimes confuses them, causing them to not restore from minimized state properly. I have added code to spot this situation and make it less inconvenient. Again, not sure if (how?) it's my bug, or a bug in the toolkit used by those apps.
  • MSDN help browser: seems to do something funky with its top-level window (could be GDI+ related) that has some weird interactions when using the Win-W popup menu in evildesk.

If you want to download and install it, you should first read the following disclaimer:


The software is provided as-is in binary form only with no warranty. I am not liable for any bad mojo, be it mental, physical or meta-physical, that arises from its use. By downloading it, you assert that you will not decompile or reverse engineer the software in any way, and that you will not re-distribute it to any third party in any form without my express consent. All rights reserved; All liabilities disclaimed.


  • Download evildesk.msi
  • As the Administrator, install it, by double clicking on it. Note that this act will not change the shell of the administrator.
  • As the user(s) that plan to use the shell, login and run the "Set Shell" shortcut from the Start Menu:
    Start | Programs | Evil, as in Dr. | Shell | Set Shell
  • You should now reboot. Yes, rebooting sucks, but if you don't reboot, the Win-E will cause explorer.exe to load the taskbar. This is an issue with explorer.exe and affects all replacement shells. Sorry.
  • When next you login, you'll be running my shell.