If you are attending, let me know and come and say “hi” to me on the night! I don’t know this crowd well but so far they are pretty friendly and I’m looking forward to the trip north :)
Author Archives:
Stopping CodeIgniter from Escaping SQL
One night when I was getting exasperated with it tangling up my SQL expressions, I tweeted my frustration in the hope that I was just missing something simple. A prompt reply from @damiangostomski told me that this was indeed the case … I dug around for the API docs on codeigniter – it’s an established framework and has a good reputation. I knew it would have API docs even though I hadn’t used the framework before, and I found them:
$this->db->select() accepts an optional second parameter. If you set it to FALSE, CodeIgniter will not try to protect your field or table names with backticks. This is useful if you need a compound select statement.
That quote is from this API docs page – so a big thankyou to Damian for replying to me on twitter, and to the good people at codeigniter for adding a useful option to their framework and documenting it so nicely :)
Contributing to Projects on GitHub
Register on Github
To do anything useful I first needed to sign up for an account. Github has a range of accounts but I found that with one of their free accounts I would be able to get started and contribute to the project. This gives me a project space of my own and a user to tie all my activities to.
Set up SSH Key
In order to authenticate against the github servers, you need to set up an ssh key and give them your public key so they know you are you. You’ll then need to tell git to use this key whenever it makes contact with the github servers. I do quite a bit with ssh and ssh keys myself so I was comfortable with this step. Even if you are totally new, its still pretty straightforward and they have a great howto on github itself which will help.
I had issues with git not picking up that it needed to use a non-standard ssh key, but I found the answers in this entry on the git website. In a nutshell, set up an ssh alias, set the key in there and then use the alias instead of the actual URL when giving the repo location to git. This now works like a charm for me.
Fork the Project
Now, github uses “fork” where I might choose to say “checkout” – fork in my world means something else completely. But in this case you’re just making your own copy of the project repository. This is where you will commit your changes to and it retains its link with the original repository making it easy for anyone with commit access to that to pull in your changes. Patch files are nowhere to be seen, and although I was wary at first, this is project collaboration at its most painless, I’m impressed! Forking was relatively simple and again there was great documentation on the github site. In particular I recommend that you take the time to follow the bit about adding an alias for the “upstream” repository – this made committing my changes to the main joind.in repo really easy.
The forking instructions linked above also gave a description of how to actually use git, how to get my changes applied to my local repo, and how to push them to my remote repo on github itself.
Make a Pull Request
Once I’d fixed a few things, I was ready to push the code back to the main project so that Chris could consider it for inclusion. This is done by making a pull request from the main project page – you can add a comment about the changes you are supplying to help the maintainers to manage all the incoming patches.
Go Forth and Contribute
It was easier than I expected to get set up to contribute to a project using github, so find something you want to improve and/or be involved with, and do it. I began by fixing the docs for joind.in, which was a great place to start since it allowed me to make a useful contribution without touching the code in the first instance :)
Speaking at PHPNW February
Charlie Bag from Burdastyle
Once I’d made the pattern, I cut out the bag and followed the instructions. They have good instructions, step by step with pictures. The Charlie bag is really simple so you just zig-zag round the shape and leave the handles like that, just unfinished, which is about the only way someone with my sewing abilities is going to make anything with curvy handles :)
I’m really pleased with the result:
This was pretty simple and now I’ve assembled the paper pattern, I might make a few more :)
Three Ways to Make a POST Request from PHP
I’ve been doing a lot of work with services and working with them in various ways from PHP. There are a few different ways to do this, PHP has a curl extension which is useful, and if you can add PECL extensions then pecl_http is a better bet but there are a couple of different ways of using it. This post shows all these side-by-side.
POSTing from PHP Curl
This is pretty straightforward once you get your head around the way the PHP curl extension works, combining various flags with setopt() calls. In this example I’ve got a variable $xml which holds the XML I have prepared to send – I’m going to post the contents of that to flickr’s test method.
$url = 'http://api.flickr.com/services/xmlrpc/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
First we initialised the connection, then we set some options using setopt(). These tell PHP that we are making a post request, and that we are sending some data with it, supplying the data. The CURLOPT_RETURNTRANSFER flag tells curl to give us the output as the return value of curl_exec rather than outputting it. Then we make the call and close the connection – the result is in $response.
POSTing from Pecl_Http
Pecl_Http has two interfaces – one procedural and one object-oriented; we’ll start by looking at the former. This is even simpler than in curl, here’s the same script translated for pecl_http:
$url = 'http://api.flickr.com/services/xmlrpc/';
$response = http_post_data($url, $xml);
This extension has a method to expressly post a request, and it can optionally accept data to go with it, very simple and easy.
POSTing from Pecl_Http: the OO interface
Finally let’s see what the OO verison of the extension looks like. Exactly the same call as both the above examples, but using the alternative interface, means our code looks like this:
$url = 'http://api.flickr.com/services/xmlrpc/';
$request = new HTTPRequest($url, HTTP_METH_POST);
$request->setRawPostData($xml);
$request->send();
$response = $request->getResponseBody();
This example is quite a bit longer than the previous one, and you might think this indicates that this approach is more complicated. In some senses that is true and its probably overkill for our extremely trivial example. However it is worth mentioning that the pecl_http extension is extremely flexible and powerful, and can handle some cases that the curl extension can’t. So even if it looks more complicated here, it can still be an excellent choice to implement.
In Conclusion
That was a very fast round-up of three ways you could make an arbitrary web service call from PHP – hopefully these examples are clear and will help anyone just starting to implement something along these lines.
Screen in Ubuntu Karmic
In Karmic Koala, Ubuntu 9.10, the packages are still there but they’ve changed names! So if you want to use screen with Ubuntu Karmic or later, install packages byobu and byobu-extras, and uninstall screen-profiles and screen-profiles-extras (they were broken on my system after upgrade anyway) and you should find everything works as expected. To run screen with the new features, you should run “byobu” instead – although screen commands seem to work to detach and reattach the screens that result, weirdly.
I’m mostly posting about it because I have been very frustrated and there’s no way I could have guessed, or probably ever will remember, what these packages are called. Apparently a byobu is a japanese room screen … you learn something new every day!
Dutch PHP Conference: Call for Papers Now Open
I’m pretty excited about this, I love getting involved with events and I also love DPC as an event, so together these are pretty special. DPC is organised by my employers, Ibuildings – so I actually get paid to get involved with this conference, which is pretty cool :) The submissions have already started coming in to the call for papers and the quality and variety of the talks, from people I know well and others I’ve never heard of, is staggering. I’m hoping that this trend continues right through until the CfP closes on 31st January. The task of choosing the tasks will be very difficult but we have a panel of selectors ready to step up to the challenge – and I’m already excited about how good this year’s event is going to be!
Speaking at TEK·X
PHP Best Practices (tutorial) – This is a half-day tutorial with my good friend Matthew Weier O’Phinney covering all sorts of good stuff you can do when you develop PHP. Its a general session and the aim is that everyone in the room takes away something new from our tips and tricks (and stories of what *NOT* to do!)
SVN in a Distributed World I’m giving this talk for the first time, looking at how traditional source control (subversion) compares with the newer distributed version control solutions (git, bzr). There’s been lots of buzz around git but in the PHP world we choose our tools on merit, not on cool factor, so this is a chance for me to share my experiences with both types of systems and talk a bit about which scenarios the various tools are a good fit for.
Open Source Your Career Another new talk! This one is about how much personal gain there is being an open source contributor. I’ve grown hugely, both personally and professionally, from my experience with user groups, events, and software in the open source space – so I’ll be sharing some tips on how things can work out well all round.
If you’re going to the conference, then do make sure to stop me and say “hi” – there are so many people at these events that sometimes I miss out on meeting people I’d like to have spoken to. You can’t miss me, I’m the woman with the English accent and curly hair!! I had an absolutely great time last year and I’m already looking forward to this year’s conference!
New Office
We went from this (you can’t really see how nasty the grey paint was or how much the previous wallpaper pattern was showing through)

Less surprisingly, this happened (my house is > 100 years old, brick internal walls throughout, and sometimes the plaster has got tired of hanging on!)

Now that corner looks more like this:

And my desk is back where it should be, yay!

Thanks to everyone who offered to help with hanging wallpaper in response to us struggling so much to make this happen – it was our first time hanging wallpaper but that wasn’t the hard part. This project stalled badly due to a combination of lack of time on my part and the sheer volume of prep needed on a house this age which has been neglected! Thankfully my parents came for lunch last weekend and pushed us in the right direction with a combination of instructions and practical help :)


