I am Peter Breuls. I write web applications in PHP, movie reviews and irregularly something on this weblog. Welcome!
Through my company Devize, I'm available as a developer or a consultant for websites or web applications.
I work as an Administrator at online community FOK! and as a Lead Developer at frontoffice supplier SIMgroep.

I'm on Medium now


I know: I barely ever blog anymore, so why bother switching to another platform? Well, I write very irregularly, and mostly elsewhere, but I've discovered Medium as an interesting blogging platform and decided to create a 'Breuls.log' there, just to try it out.

Some of the content from this blog has been migrated over; new posts (in English) will appear there. I will keep my original Dutch blog where it is.

One of the places I write is now also on Medium, by the way. It's the SIM Developers Blog, where my colleagues and I write about tech stuff that happens at SIM (one of my employers).

Is it too soon to remove the headphone jack?


I think I might have been listening to music all my life. I remember listening to the radio when I was too young to actually know what music is, I remember having my first Walkman, Discman, radio Walkman, MiniDisc Walkman, all the way up to my current iPhone. I have always listened to music on tape, CD, radio or digital files. And I have used a lot of ways of getting the music from its source to my ears, the most recent being a set of wireless earbuds that connect to my phone via bluetooth.

The choice for wireless came from a personal preference: the wires were getting in the way of my movement, as were the buds themselves. They fell out of my ears during a run. That annoyed the hell out of me. And when I'm on the go, I usually carry a backpack or some type of shoulder bag, and that didn't always work out too well with the wire from my earbuds, ripping them out of my ears with some force whenever I wasn't paying attention when moving my bag around.

So wireless I went. And I like it. As it turns out, this seems be have been an inadvertent preparation for Apple's next innovative move: eliminating the headphone jack from their next iPhone model. It surprised me that they would just cancel a feature that's been around in audio devices for as long as I can remember, and that has existed for even longer than I'm alive. But I already use the alternative: I am already using wireless earbuds. So I already know that it kind of works to remove the ancient headphone jack. But I wonder if it wouldn't be better for Apple, or any of their competitors, to wait just a little bit longer before making this move.

Because wireless isn't perfect. It never has been, for anything. There are always problems. When I was young, the tv remote didn't always work or my FM radio would lose it's signal. Do you remember using an FM radio in your childhood bedroom and noticing that the signal was interfering? And then you would walk over to the stereo set to adjust it, and it would turn back into perfect sound because your body was blocking the interference? That's over now, for me, but it might be because I no longer listen to FM radio when I'm not in a car. In later years, wireless stuff would fail me when I wanted wi-fi in my house. The house I grew up in had three floors and I was on the top, while the wi-fi access point was on the ground floor. That didn't always work.

And now, there's bluetooth for a lot of stuff. I use it to connect my mouse and keyboard to my computer, to connect some device to another, and to listen to music on my phone when I'm on the go. It works really well, for about 95% of the time. The other 5% are countless moments where the music stutters for a fraction of a second, every few minutes, or when my own body interferes with the signal coming from my phone to my earbuds. Because I have my phone in my pocket, usually my right one, and my earbuds don't agree with that.

If you have never used wireless earbuds or seen them in a picture, they're basically regular earbuds, but the only wire they have is between the left and the right ear. My earbuds are from the Powerbeats Wireless line, which means they are actually made by Apple. They have a receiver in the left ear and the wire takes care of the audio in the right ear. But when I carry my phone in my right pants pocket and I look over my left shoulder, it moves the receiver away from my phone, causing the signal to stop. It stops! Just because I move my head. That shouldn't happen. It certainly shouldn't happen if, in the very near future, this technology becomes the main way of listening to music on your phone (I know; there might be a way of listening to music using an adapter for the lightning jack, but come on, we are pretty much expected to go wireless).

When I move my phone to my left pants pocket, it doesn't happen as much (but it still does), by the way, proving that the signal needs as much support from the user as it can get. It's not ideal. Also, it's not very versatile. When I just bought the earbuds, I tried using them at work, to listen to music from my computer. Connecting them wirelessly was no trouble, but switching between my phone and my computer is a lot more effort than just taking out the jack plug and plugging it into another device. Sometimes, older technologies are just more convenient than new ones. When I use my regular Apple Earpods on my phone, I don't have to worry about there being enough battery charge for my entire journey. The wireless ones need a new charge after about six hours of use. This means you can't use them all day.

I really wonder if it's Apple's intention to force users to use technology that might need another iteration of development before it's good enough. I don't think it is. They might just want to force the issue; force companies to come up with better technology. That's not a bad thing, but I'm a little worried about end users becoming guinea pigs for the next couple of years. Maybe, just maybe, we should wait a few years before making this move.

Fantastic Four


Josh Tranks Fantastic Four isn't the worst superhero movie ever made. Let's be clear about that. Joel Schumacher's Batman & Robin still is the worst superhero ever made. Fantastic Four is not. But that's also, partly, because it's not a superhero movie at all.

I know that the film is an attempt at rebooting the failed franchise that delivered us two mediocre-to-bad movies in the noughties. They were simple, clear, fan-serving superhero movies. They told a story about some scientists going into space, getting into an accident and coming out of it on the other end with super powers. It's a very simple, very basic concept. It's not a bad concept. It is, however, an old one, and it has gotten stale. It was already boring a decade ago.

So it's a good thing that this version of Fantastic Four doesn't try to be the same type of movie. In fact, I would go so far as to say that Trank c.s. have tried not to make it about superheroes, but about scientists tinkering with stuff they're not supposed to tinker with. Because most of the movie is spent looking at Reed Richards story. From him zapping little toy cars into another dimension to him going into the dimension himself, and exploring what's on the other end. It's a primal human desire: to explore, to find the boundaries and cross them, and keep trying where others have failed. I'm not going to include a lot of spoilers in this, but I will mention some story elements you might want to check out for yourself before you read on.

The movie starts with Reed, a kid in school, proclaiming that he's working on a teleporting device. He's being ridiculed, but it doesn't really bother him. He just goes on, and meets a classmate, Ben, when he's trying to get a machine part for his device at Ben's father's junk yard. It starts a friendship between the two, in which Ben helps Reed further his science, until Reed is discovered by a scientist, who employs other young promising scientists to try and nurture their scientific drive, who has been working on the same concept. One thing leads to another and after some more explaining, and even a montage, Reed, Ben and two others find themselves in a very dangerous situation on another planet. Cue super powers.

But it's not really the point of the movie to get the main characters their powers. The point is to get them to achieve their goal, in sending stuff to another place and retrieving it. The point is that they get stupid, possibly because they're drunk, and visit the other end of their teleporting gateway themselves. Things go wrong on the other side, because they're young, lack the wisdom to have enough caution, and travel to an unknown place unsupervised. There's a lesson here; it's okay to explore, to find new worlds, to create new technology, but know that you're getting into some seriously dangerous stuff. Know that unexpected things may happen.

And what I think about Fantastic Four is that it, initially, tries to build something around this message. Maybe tries to find out what the message should be. I think the assignment to create a new movie about this classic superhero group has led Josh Trank, Simon Kinberg and Jeremy Slater, who are credited as having written the screenplay together, to try and find a new and more interesting way to approach this. It's more human, thematically richer, less about super powers and being a hero in front of a cheering crowd. In fact, there is no cheering crowd here, and I'm not talking about the audience: there are some heroics, there's some world saving, but in the end, that's not the point of the movie.

In fact, the part of the movie that is about the group working together, using their powers, fighting the bad guy, is by far the most uninteresting part of Fantastic Four. It's where a potentially compelling story, a cautionary tale about tinkering with science, completely falls apart because it suddenly remembers it was supposed to be about a bunch of Marvel characters.

Okay, it's not that the movie was a piece of brilliance up until that point. It was mediocre. It looked at some interesting things in terms of characters, their backgrounds and their motivations, but it was too involved with getting to the superhero part to notice there was a nice little story in there. And that's why a very decent cast didn't really have anything interesting to do, because they were dragged along to what in other iterations of this story would have been the inciting incident in the first act. Fantastic Four should have been a longer movie: it should have taken more time to try and strengthen the story about Reed and the people he meets on the way to his achievement. It could have gone deeper in terms of character. It shouldn't have bothered with a big battle at the end, instead focusing on the human element. Because this movie shows that it knows about the human element; it's acknowledged, examined ever so slightly until, again, someone remembered there was supposed to be some super heroics somewhere.

So, in the end, what is being sold to the audience as a superhero movie really isn't. It's a movie that tries to be something else but acts like it's not allowed to. It's a thing with enough interesting elements to create something brilliant out of, but it just didn't work out. I liked that it tried to be something else, and I'm sad it didn't work out. Fantastic Four is not a horrible mess, but it is a failure, because it's neither what it's supposed to be, nor what it could be. But it's still interesting enough to have a look and see for yourself the stuff that's in there, that could have become that interesting, new take on a team of Marvel characters.

Knock, knock? Not there!

Tech / Maccomment

Thanks to a tip coming from one of my favorite podcasts, I've started to give the Mac/iPhone application Knock a try. I'd like to tell you why it's awesome, but also why it's not there yet. So it's not awesome, yet, but it's promising.

What Knock does is really simple: it lets you unlock your Mac by knocking on your iPhone. That's it. And it's brilliant. When you're at the password screen for your Mac, instead of typing your password, you just knock on your phone and the Mac unlocks itself. No password hassle needed.

In theory, this is absolutely perfect. You can protect your Mac with a really strong password that you'd (almost) never have to type yourself. In practice, however, it doesn't work as well as it should, which is why it "almost works", therefore it's "almost awesome" or "actually not awesome at all".

The application works as two apps: a free OSX background app that sits in your menu bar (yet another icon up there? yup) and an iOS app that costs a couple of euros. You install the OSX app first, to check if your Mac is recent enough to support Bluetooth Low Energy, which is the technology that's used by the apps to communicate. The OSX app tells you if your Mac is supported. If it is, you can go ahead and buy/install the iOS app on your phone. You run both, they tell you about how to do the setup, you follow it and you lock your Mac.

Then, you knock on your phone twice. If everything's going as it should, your Mac should now unlock. Yay! But there are cases in which this doesn't work.

You have to be logged in
The first case is mentioned in the FAQ on the Knock website: your Mac needs to already have been running before locking. So a fresh boot, leading to the login screen, won't work. But to be fair: that's also not an 'unlock', that's a 'login'. So there's that.

Hello? Someone there?
The second case is a variety of situations in which you're actually better off just going ahead and typing your password, making the app obsolete. I've experienced quite a lot of times, when I wanted to unlock my Mac, that the Mac and the iPhone hadn't found each other yet. There's a green ring around the avatar in the login screen that circles around until there's a connection. When the connection has been made, the ring turns completely green and I can knock. But it can take a couple of seconds before the connection is made. Seconds I could have shortened myself by just typing my password. And that action is almost second nature for me, so why bother waiting for my phone to connect?

Nobody home
Sometimes, there's no connection at all. I just wait and wait, and give up. Turns out, and this is not so much surprising as experience-lessening, the Knock iOS app has to be up and running. When I close it, there will never be a connection between Mac-Knock and iPhone-Knock. It's perhaps understandable; iOS doesn't like stuff happening in the background, but to be honest, having to make sure the app keeps running kind of defeats the purpose of the application. This stuff needs to "just work" for it to be really powerful.

Additionally, sometimes when the iOS app is running, my Mac still can't connect to it. That just feels buggy.

Just keep knocking
The final annoyance might just be a bug, so let's hope it is so it can be fixed quickly. Sometimes, just knocking twice won't work. The unlock screen shows that the knocks are registered, but there's no unlockin' happenin'. So I knock again, twice. And again, now harder. And then I knock thrice, or four times, before Knock registers the knocks as valid and unlocks me. It's annoying; again; that time could have been spent just typing the password.

So, in summary, Knock is a brilliant app, in theory. I hope it's possible to fix some of these issues, because those are the only things keeping me from absolutely loving the app.

A new PHP User Group for Rotterdam

Web, Dev & Technology / Rotterdam / Tech / PHPcomment

For a while I have been wondering about the existence of a local PHP user group for the city where I live; Rotterdam. A user group is a local community of PHP developers who, through formal and informal regular meetings, share knowledge with each other, organize social events and provide a nice way to expand your network. It seemed that there wasn't one for Rotterdam, which led me to the idea to start one myself.

During the last Dutch PHP Conference, where a keynote speaker brough up the subject of user groups, I again wondered about a local group, now having decided that there probably isn't one, currently. So I proposed to start one to Ron van der Molen, who suggested we set one up together. And so we did. After some brainstorming, we decided to call it 010php, as a reference to both the Rotterdam area code and the "bits & bytes" association one has with ones and zeroes.

In july, we held a 'bootstrap'-meeting; a get-together for those who are interested in a user group and who would like to contribute. For the location, we picked Dudok, which is a thematically ideal place to start a community based in Rotterdam. The meeting didn't have a strict agenda: the goal was to get things going by going around the group and talking about ideas. We quickly agreed on a starting format: a monthly meeting with talks and some drinks, and at a later stage perhaps the additions of workshops in separate events. There were over twenty developers from around Rotterdam attending, which was more than we expected. That was a nice start!

The second monthly meeting for 010php took place on the 8th of august. We rented a space in De Machinist, near the iconic Euromast and the city center, where we could have some drinks and retreat into a screening room, where we did the first talks for the user group.

The first talk was A Crazy Little Thing Called Scrum by Ron, who is a Scrum Master and PHP developer. He explained a couple of very clear aspects of scrum and extreme programming, which seemed to spark the interest of quite some attendees. The talk was very informative and served as a good starting point for those wanting to get into agile programming.

The second half of our program was the talk Stop searching in the dark, start finding in the light by Roberto Gardenier. He has a lot of experience with the implementation of Apache's Solr family of products and gave a well balanced talk about these subjects, which again served nicely as a first step for those unfamiliar with the subject.

For our third meeting, on september 12, we're again using the facilities of De Machinist. With the user group still in the early stages, we're only doing one talk, but we're already planning new talks for the fourth monthly meeting. 

If you're from around Rotterdam, or if you're interested even if you're from somewhere else, please have a look at our calendar and consider joining us at one of our meetups. We're a small community wanting to grow, and welcome everyone to attend or to come and speak about a subject.

Tools of the trade, revisited

about:breuls / Techcomment

Looking back at old posts on this blog, I found my list of tools that I used on a daily basis, back in 2008 when summer in this country lasted longer than a day. Since I'm still doing some of the same work as I did then, let's see how much of it has kept its place in my toolbox.

  • I'm still working on a MacBook Pro, although of course a more recent model. In 2008 I wrote that I had the Mac as an 'extra' machine next to an Ubuntu desktop. That's no longer the case and hasn't been in a long time. The desktop is gone, and I've completely adopted OSX as my main platform. In the meanwhile I have started using an iPhone and an iPad, partly because I like how stuff fits together.
  • I'm no longer using Zend Studio. After being bummed about the 300 euro price tag for an upgrade, I switched to Netbeans for a while. That was about four years ago. Recently, I have started using PHPStorm, which is awesome and will probably have completely replaced Netbeans in my workflow within a month from now. Still using Textmate, by the way, for the quick-and-easy edits.
  • Still using Transmit for (s)FTP. No changes there, although I have added some hooks to the Git repository for this site so that when I push edits from my editor, the software is deployed to production. So FTP is out when it comes to updating my website.
  • iTerm has stuck as well. No CVS anymore, of course, and Subversion is almost completely out of the picture in favor of Git. But I don't think that last step will take long.
  • Query Browser is out, Navicat Lite is in. Works fine. 'Nuff said.
  • Zend Core has been succeeded by Zend Server.
  • XDebug is still firmly placed in my toolbox, now also including the actual debugging, of which I didn't even realize how powerful it was, five years ago.
  • As I've switched to Google Chrome as my browser, I no longer use the FireFox/Firebug combo. However, what Firebug adds to FireFox is something that Chrome has by default, and I couldn't imagine working without it.
  • YSlow: out. I'm way less involved in frontend work, so this has become less of a focus point.
  • CSSEdit: out. I'm just using Netbeans or PHPStorm now.
  • OPML Editor: out, unfortunately. It just runs sluggishly, doesn't work (or look) all that well. Pity, because I'd still love an app like that to be part of my workflow. For notes, I now usually use Evernote. Hell, I'm writing this blog post in it.
  • VMWare Fusion: out. I have a Virtualbox install with Ubuntu (and Windows), but I'm only rarely using it. I have enough tools in OSX to replace what I did in 2008.

So that's the status of those older tools. What I have added:

  • Git. It's awesome. Any developer who doesn't see the added value of switching from a regular VCS to a DVCS isn't being serious about their work. And Git has a plethora of unbelievably useful features. In addition to Git, I use SourceTree from the fine folks at Atlassian for graphical support of my version controlling.
  • Kaleidoscope. This is the visual diff tool I have been looking for since I lost Kompare when I stopped using Linux as my OS. In version 2 it gained merge capabilitites, which prompted me to buy a license immediately. It's a delight to use this, as it plugs in nicely with version control, my editors and even the OSX clipboard. Big recommendation here.
  • I used Versions as my SVN client for a while, but with the drop of SVN for version control, that has slowly gone. Pretty nice Subversion client, though.
  • iA Writer. Next to writing PHP code, I also often write for FOK!, where I'm an Administrator and Editor. I write reviews about movies and tv shows, and iA Writer is a nice, clean writing interface that just lets me write without distraction. I can really focus on the text and worry about markup and layout later.
  • TicToc: a simple time tracker that helps me keep a tab on what I need to bill clients. When I leave my computer and forget the timer, it notifies me when I return that I might have forgotten the timer and offers to reset it, which is nice.

And all kinds of smaller stuff. On the personal front, I'm still using VLC for video, although I'm mostly streaming video to a receiver (my PlayStation) to watch video, using the Twonky app. RealPlayer has been replaced by the flash widget on the BBC Radio 1 web site and Twitterific has been replaced with Twitter for Mac. Still using iTunes, but I've also become a Spotify Premium subscriber.

So not much has changed, software-wise. Just refined. I'm not expecting a lot of changes in the next five years.

Flipped another switch

about:breuls / Breuls.log / Web development / PHPcomment

If you've been visiting this blog for the past half decade, then, firstly, wow. I haven't written anything new since 2009. I feel like I should give you an award! But if you did visit, and returned now, then you might notice a change of layout on this site. I thought I'd celebrate it by, well, blogging about it.

This blog sort of died somewhere between 2009 and today. It was running on Wordpress (after I migrated from Radio UserLand, which is even more ancient but still gets me excited about blogging and technology every time I think about it), because I didn't feel like adapting the home-brewed software I use on my Dutch blog to facilitate two blogs, and apart from the fact that I didn't write on it anymore, I fell behind in keeping the installation up to date. Wordpress has had some leaks over the years, and this site has fallen victim to some of those, causing the blog to be a big bad motherf*cker of a spam infestation. Not good.

But I always felt like I should whip up something new, migrate the content and restart the blog to have a place where I could write down some notes, every now and then. So I've done what I was always too lazy to do: adapted the Breuls.log software to run on multiple domains and run multiple sites from one CMS. It wasn't all that hard, after I rewrote the blog CMS last year to work in a well respected framework instead of using decade-old spaghetticode scripts. It took me litte over one saturday morning to export the entire blog from Wordpress (it exports in RSS, which is nice), write a script to import it into my own database and point the blog.breuls.org-domain to the new location. The blog you're looking at is now simply part of my other blog, and serves as an English language branch of it. And I can manage the entire thing from the same CMS. Me likes.

So here we are, brand new. Now to find something to write about...

Namespaces in PHP

Tech / PHPcomment

Within PHP, the current Big Thing, in a way, is namespaces. However: it's brand new and not every PHP developer knows how, if at all, to use then. Good thing there's tutorials about that. Sitepoint has one in three parts: 1, 2, 3.

Drizzle instead of MySQL?

Tech / Web development / MySQLcomment

Zend Developer Zone: "Drizzle is a new, lightweight fork of MySQL specifically designed for cloud applications. Although Drizzle is still under development, it's attracting a lot of attention from developers around the world. This article introduces you to Drizzle and shows you how to use the Drizzle PHP extension to perform queries, retrieve result sets and handle errors in your Drizzle+PHP application."

There's been a lot of buzz about Drizzle lately. Need to check that out some time.

Suicidal mailserver

Linux / Techcomment

DoveCot - kill message

I reset the time on our mailserver, because NTP wasn't working (or at all running, I guess). Immediately my mail client started complaining about the connection. The above error message was the cause. It's both funny and explanatory. I like it.

Using Lighttpd for exceptional performance

Linux / Tech / Web development / Internetcomment

To increase performance at the site I work for, we started separating static webfiles from dynamic pages using a separate hostname and web server for static files a while ago. For this, we placed almost all of the images, style sheets and Javascript files on a separate server and installed Cherokee for light and fast web serving on that server. And it worked. Loading of images became easier, and we could apply some of the server-related suggestions from Yahoo!'s Exceptional Performance.

However, Cherokee didn't always try its hardest to serve us well: sometimes it decided to pull the server's load to a performance-decreasing number, configuration of much needed features was "not yet implemented" or buggy and the software is overall not done yet. Also, the developers have, weirdly, decided to use exclamation marks as separators within the configuration, which is just plain annoying.

So we started looking towards other solutions. And we decided to go back to our other option before we chose Cherokee: Lighttpd. With Lighty, as it's pronounced, we can apply these performance rules:

» Add an Expires or a Cache-Control Header
» Gzip Components
» Configure ETags

I'd like to show you which configuration options we used. The following applies to a default Lighttpd (version 1.4.19) as shipped with Ubuntu 8.10. If you're using a different OS or if you've downloaded Lighttpd yourself, I assume you understand enough of it to translate the following to your own situation.

Add an Expires or a Cache-Control Header
For this, we need mod_expire. With that module, we can instruct Lighttpd to include both the "Expires" and the "Cache-Control" headers in the response. To enable the module, we uncomment this line:

# "mod_expire",

This line is mentioned in a list of modules at the top of lighttpd.conf. If it's not, you should look for the list somewhere else in the file and uncomment the line or simply add it, but without the hash sign.

Next, look up a line that says 'expire.url'. It should be there and commented by default. Uncomment it and configure it to do what you want it to do. For us, Lighttpd is entirely dedicated to serving static files, which all need to be cached by the client for a long time. Let say, for documentation's sake, we choose two weeks as the caching time. This would then be our configuration:

expire.url = ("/" => "access plus 14 days")

This leads to these two headers when a URL from the Lighttpd-server is requested:

Expires: Thu, 25 Dec 2008 13:30:31 GMT
Cache-Control: max-age=1209600

And that's it! Enable the 'expire' module, configure the expire time, and you're done.

Gzip Components
To apply gzip encoding of the repsonse body, we use mod_compress, which is enabled and confgured by default. However, not everything we want to compress is actually being compressed, so we change this:

compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css")

into this:

compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css" ,"image/jpeg","image/jpg", "image/gif","image/png")

Over time, we might add other mime-types we forgot to include, but the above covers most of the requests.

When requesting an image with any regular browser, it will be sent to us, gzip-encoded. If you're using FireFox with the Live HTTP Headers extension, you can find these in the response headers:

Vary: Accept-Encoding
Content-Encoding: gzip

This confirms that it's working.

Configure ETags
This is the easy one. In our default installation, a request to the server gave us this as one of the response headers:

ETag: "2832627283"
Last-Modified: Wed, 10 Dec 2008 13:16:32 GMT
Content-Length: 1395

Because we currently use one server for the static serving, this is all we want. So we're done.

And that concludes the confguration of Lighttpd as the optimal static-files-webserver.

MySQL Conference

Tech / MySQLcomment

Ivan Zoratti: "The content can satisfy the appetite of a technical audience and of more business-oriented IT managers at the same time. We will have sessions on performance, on scalability solutions and on Proxy, with hands-on the servers, difference parameters and tools. IT managers will probably find interesting a renewed set of HA solutions and some renewed views on the infrastructures used to power the Web."

I'll be attending the London conference, after having been there last year, and I'm looking forward to it. Am I again going to be one of the few Dutch folks in the crowd?

My Programmer Personality Type is: DLSC


And this is why:

You're a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.

You like coding at a Low level.
You're from the old school of programming and believe that you should have an intimate relationship with the computer. You don't mind juggling registers around and spending hours getting a 5% performance increase in an algorithm.

You work best in a Solo situation.
The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible.

You are a Conservative programmer.
The less code you write, the less chance there is of it containing a bug. You write short and to the point code that gets the job done efficiently.

I'm a web developer, so the way I interpret the 'Low level' part is that I want to know what my PHP code does (through profiling and such), what actions my browser takes when I do something with javascript, and that I (for instance) use a packet sniffer when I really want to know what HTTP-requests are doing (very handy for ajax debugging).

I actually don't think of myself as conservative. I like to try new stuff, be a bit adventurous, find new techniques to provide solutions, but in doing that I'll always keep in mind that the end product needs to be well-performing, well-maintainable and, indeed, consisting of concise code.

Want to see what your type is? Have a look here. Thanks to @marcnext for the link.

Google does dynamic

Web development / Blogging / Internetcomment

It's one of those facts that you learn once and then always remember: if you want your URL's to be properly indexed: don't stuff them with querystring-data. Make them nice, like they're static URL's. That's what I always knew. Like riding a bike, you never forget it. But Google says this isn't exactly true;

We've come across many webmasters who, like our friend, believed that static or static-looking URLs were an advantage for indexing and ranking their sites. This is based on the presumption that search engines have issues with crawling and analyzing URLs that include session IDs or source trackers. However, as a matter of fact, we at Google have made some progress in both areas. While static URLs might have a slight advantage in terms of clickthrough rates because users can easily read the urls, the decision to use database-driven websites does not imply a significant disadvantage in terms of indexing and ranking. Providing search engines with dynamic URLs should be favored over hiding parameters to make them look static.
Google Webmaster Central Blog

Not only does Googlebot read dynamic URL's just fine (and now I think of it: why wouldn't one of the largest tech companies make any progress in this area over all these years?), they actually favor it if a dynamic URL is the 'original' of your URL scheme. Googlebot will figure out the parameters and do the indexing the right way.

Of course, static-looking URL's are still nicer for a user to look at, and sometimes a URL that doesn't have querystring-parameters can still be dynamic, but for Google's sake: don't rewrite it just for them. Good to know!

Farewell to PHP4

Tech / PHPcomment

When I started out PHP'ing, I bought a little PHP book called 'PHP pocket reference'. It was one of those small O'Reilly books and it was written by Rasmus Lerdorf himself. I still have it, although of course I don't use it anymore.

The book focused on PHP3, although PHP4 was already released. So, basically, I learned PHP with version 3. I started out writing scripts with a .php3 extension, something I still don't understand; why was the version number included in the extension?

Anyway, not long after I started PHP'ing, my environments switched to PHP4 and I became a PHP4-developer. And I still am. One of my employers still uses PHP4 and although today is PHP4's death date, there is no indication that there's an urge to speed up the upgrade process (which thankfully is in place and being worked on).

The problem with PHP4 and PHP5 is that the upgrade process actually is a big step. For the software, because not everything 'just works' when you upgrade to 5, but also for the developers. Some of my co-workers still consider the features that were introduced or improved in 5 'new', although they've now been included with PHP for years. And that's understandable; when working heavily on projects in PHP4, and without having the opportunity to check out what's ahead and trying to use newer features, you'll never get a taste of it. Of course, developers should take those opportunities themselves, checking out new features and developments in their own time, but not everyone does that.

So today is the end of PHP4. Not really of course, because lots of developers will probably still spend months working on PHP4 code. It will work just fine and do just what you want forever, it just won't have any updates anymore, But if you consider the fact that some servers (even those of my employer) still run a 4.3.X-version of PHP, that hardly matters.

I'm glad I switched the projects at my other employer to PHP5 at the start of 2008; not only are we up to date, but the new features (or simply the small improvements in existing features) make working with PHP a lot nicer. And we're ready for the future; PHP6 is upon us, and I hope it will be adopted (and adoptable) a lot faster than its predecessor.

PHP4, you've served us well. You paved the way for PHP5. Thanks! Now get out, and stay out.

Tools of the trade

Linux / Tech / Web development / Blogging / Mac / MySQL / PHPcomment

It's always fun to compare tools. Who works with what and especially, why? Following the example of Flickr and some others, let me list my tools, see if you match:


  • Main machine: MacBook Pro. I have an Ubuntu PC, but that's just 'extra'. I do everything on my Mac, from working to living.

  • Editors: Zend Studio 6 for all the main development tasks, completed by TextMate (and the handy 'mate' cli-command) and vim for serveral minor things.

  • Transmit: used for access to (s)FTP code locations, and to manually check whether (s)FTP import applications do what they should

  • iTerm with usually about six tabs. I traverse folders, grep through them, use CVS/SVN commands and access MySQL from the commandline. And of course I connect to development and production servers using ssh, but that goes without saying.

  • MySQL Query Browser: I can usually do what I want by just using the commandline client, but every now and then I need a little more visual help.

  • Zend Core: used as an all-in-one package for Apache and PHP. I also use MAMP to run a good old PHP4 environment because at one of my employers we're still in the midst of upgrading to PHP5 (I know, shut up).

  • Xdebug: I use it for profiling and I love the way it adapts var_dump() to a more usable way of displaying variables

  • FireFox and FireBug: very important indeed. I can't image having to work without FireBug. I still remember trying to think really hard about my HTML/CSS and placing alerts in my JS as a way of doing some poor-mans-debugging. FireBug is a godsend.

  • YSlow: a man needs performance, and YSlow helps me determine what to do. Very nice!

  • CSSedit: editors for CSS don't do a lot more than text editors, but they help a little and a little is enough.

  • OPML Editor: I keep my notes, todo's and more in outlines. The best outline editor used to be the one from Radio UserLand, until Dave Winer took the tool and released it apart from the weblog editor.

  • VMWare Fusion: although I love working on my Mac, I'm still missing what I already mentioned before: the combination of Krusader and Kompare (and to a lesser degree, Cervisia) for development work. For that, I am trying out using an Ubuntu virtual machine which uses the three beforementioned apps and sshfs to mount the (development) servers I'm working on. Works like a charm!

Living and working:
I take my Mac everywhere. I work on it at work, even though it is a private machine. At home, I use VLC to watch video's and DVD's, NetNewsWire for the daily read, Celtx for screenwriting, Mail.app for.. well duh, RealPlayer to listen to BBC Radio 1 or iTunes for my music collection, Twitterific for Twitter and Unison to eh, browse newsgroups.

Well, that's most of it. What about you?

Geeeeee-mail. There, six characters extra


The Next Web: "I feel sorry for you to type in mail.google.com as it’s six characters longer. That seems like a minor effort, but let’s assume you check your email ten times a day. Then, all of a sudden, it’s 60 characters extra. Now consider the number of Germans using Gmail, probably millions, and multiply it with 60. All this extra typing work for the copyright needs of one man."

Oh, come on. Don't you ever re-enter URL's in your browser? That's right, your browser recognizes what you're typing and comes up with suggestions. And if even that is too much, the've added this newfangled feature that, I think, will become a big, big hit. They're called bookmarks.

A day at the RAI: Dutch PHP Conference 2008

Tech / Web development / Internet / PHPcomment

I like conferences. They bring a combination of information, context, some discussion and all kinds of impressions to you in audible form. In a form that doesn't require you to browse through blogs or magazine articles. Also, you can reflect on the subjects with others during the break times. Or just reflect on it by yourself. In some way, it differs from just reading about the topics on weblogs or online manuals, it's got a different vibe. One I like.

So last weekend I went to the Dutch PHP Conference. I went last year, and I liked it, so attending this year's edition seems logical. But after a day of listening to some interesting talks I'm wondering: who is the indented audience for this conference? Am I even in it?

Let me explain by walking through the day. After @ijansch's opening, we were welcomed into the history of PHP by Zeev Suraski, one of the founders of Zend and with that, one of the people who made PHP what it is today. It's nice to hear the story from someone first-hand, as opposed to reading it in the PHP Manual.

He gave his view on PHP today: it's mostly done, and our focus as a community has been, and still is, shifting to frameworks. In a way that's like saying "we've been building the car for a few years, now it has become time to do some driving". And he's right. PHP is never truly done, of course, but it is fairly done, and now it's up to the frameworks to mature and become the highly useful, production-ready toolkits we all need (yes, need, even though some of us might not know it yet). In my view: some parts of frameworks wille eventually become more attached to the core of PHP, as often-used parts will grow into the extensions area.

After Zeev, Marco Tabini, publisher of php|architect (which I'm subscribed to), explained how important mayo is to the PHP world. No, wait, that wasn't it. He wasn't very PHP-specific, but his keynote was quite interesting nevertheless.

Lunch came and went, and the breakout sessions started. I attended the ones presented by Gaylord Aulke, Lorna Jane Mitchell and Ivo Jansch.

Gaylord talked about how you would go about creating, maintaining and using an infrastructure when you're working in a team. He explained about development locations, version control management, test- and staging servers and deploying your work to a live server. This very much connected with Lorna's talk, which focused on deployment in general, and on doing that with subversion in particular.

Both talks were interesting, but only small bits of it were giving me new information or a perspective I didn't think of before. Both gave me the impression that the intended audience would not include people already working in teams, with version control already very much in place and several live projects to maintain. Those people would already have invented (and/or implemented) the proverbial wheel for their own situation. Which is the case for me: at both of my jobs, an infrastructure is in place and working nicely. Nevertheless, both talks were interesting, and some viewpoints offered, along with a nice feeling of confirmation, some food for though and/or Googling.

After the break, the choice was to be made between Stefan Priebsch's session on the upcoming PHP releases, a session by Matthew Weier O'Phinney about best practices within Zend Framework (this description is not as accurate as it should be, but we'll get to that) and Ivo Jansch's presentation about Enterprise PHP.

Because information about PHP 5.3 and 6 can be found on the mailing list, wiki pages, blogs and the slides Stefan posted before the conference, that one was an easy choice: no need to attend. The session on Best practices within Zend Framework would only make sense if you were actively using ZF, I thought, so that would not be very practical at this very moment (I was wrong, as you can see by reading the actual description on the site, it's not 'within' Zend Framework, but 'inspired by' it, if I understand correctly). So I entered the room in which I would be very cautious about product placement (kidding).

Ivo's session had 'Enterprise PHP Development' as its title. Because I work in a couple of teams/environments where the label 'enterprise' might, in some way, be a suitable one, I thought I'd attend this session. It's always nice to get some tips, attention points and such. But, the session was basically about the same as Gaylord's and Lorna's. Not that he covered the same topics, but again I felt like I knew a lot of it already. He covered ten main points you need to be thoughtful of when working on your projects, of which some were very obvious, and others inspired some thinking while in itself not being new (to me, at least).

After all this, my colleagues and me were interviewed for a Bachelor ICT video, in which we expressed our concerns about the lack of depth in the sessions. Terry Chay had already started his keynote by that time, so after missing the beginning, we hurried in and stood in the back, while listening to a very interesting and nice keynote. Chay is a wise man, I said to myself.

Looking back at the day in its entirety, I think I expected more. I already called my feeling about the sessions a 'lack of depth'. This of course isn't necessarily a bad thing. A PHP Conference, especially one in a community that's still growing and has a lot of people still learning how to be the best, should be aiming for a wide audience and not exclude beginners. However, if some f the sessions would last longer, maybe the contents could become more hands-on and give you more the feeling you're walking away with lots of information to research in the days or weeks after the conference.

I'll probably attend next year's edition, but can I silently hope for some more advanced content?

Links for this week

Tech / Web development / Mac / PHPcomment

» MacGDBp - a PHP debugger using XDebug
» Dutch PHP Conference 2008 - The Video - I was interviewed. Did I make the cut?
» DPC'08 review by Rick Buitenman
» It's About Time You Learned Javascript (for real) - I think I'm gonna read that book
» The Top Ten Subversion Tips for CVS Users
» The Subversion Book
» Running multiple FireFoxes on your Mac
» PHP Performance Series: Maximizing Your MySQL Database
» Which is the fastest browser?

Stuff I need to read

Tech / Web development / Reading / Internet / MySQLcomment

I've got lots of content in my RSS aggregator that I "want to read, but not right now". And I keep skipping over it, making sure I don't accidentally mark those items as read, and that is starting to annoy me. So I'll just do what every sensible guy does: make a note of those items and move on.

Adding to that, I thought I'd just share them with you, so here is my to-read list:
» Q&A and Recording of the Memcached Webinar
» How would you compress your MySQL Backup
» Please Give Us Your Email Password
» Give Your Site a Boost With Memcache
» MySQL Proxy: debug plugin
» MySQL Cacti templates 1.0.0 released (screenshots)
» Tools to use for MySQL Performance Review
» Designing For Evil
» Videos in the Flickr API

There. Now I can clean out some items in my aggregator. I'm gonna do this more often, by the way.