The worst thing you can do is find some random, underqualified person who represents the demographic you want to include, and put them on the stage. Although gender is often the issue we hear most about, the same applies to anyone who isn’t a young, white male; it’s just that gender is easier to see and talk about than either age, ethnicity, sexual orientation, or anything else, and also since I’m a young, white female, it’s the only aspect I can comment on.Women are in such a minority that they are, almost by definition, representative (see http://xkcd.com/385). Anyone who sees your randomly-selected woman speak will simply go away thinking that women aren’t really good at speaking. Continue reading
Author Archives:
Gearman Priorities And Persistent Storage
I use Gearman entirely as a point to introduce asynchronous-ness in my application. There is a complicated and image-heavy PDF to generate and this happens on an automated schedule. To do this, I use the GearmanClient::doBackground method. This inserts a priority 1 job into my queue.
Using the doHighBackground()
and the doLowBackground()
methods insert jobs into the queue and checking out my persistent storage I see that the priorities work like this:
priority | method | 0 | doHighBackground() |
1 | doBackground() |
2 | doLowBackground() |
---|
Gearman works out which task is the next highest priority and will hand it to the next available worker – which means that I can set my automated reporting lower priority than the reports requested by real live people wanting them now, and everyone is happy!
The Strpos Trap
The problem arises because if we simply check that there’s a positive return value from the function, we’ll miss the case where the string appears at the start of the other string since the character offset will be zero:
$tagline = "PHP Made Easy";
if(strpos(strtolower($tagline), 'php')) {
echo 'php tagline: ' . $tagline;
}
This code won’t find the “if” to be true, since strpos returns zero and PHP will type juggle that to be false (debates about dynamically typed languages can be saved for another day)
Correct Use of ===
This is a great example of where the === operator really helps, as it can tell the difference between false and zero:
$tagline = "PHP Made Easy";
if(false !== strpos(strtolower($tagline), 'php')) {
echo 'php tagline: ' . $tagline;
}
This time, we’ll correctly get into the “if” even if the string appears at the start of the other string.
Not a particularly complex example but I think one that is simple enough to serve as a reminder as to what that extra = is for!
Apache on Ubuntu/Debian
When I first started using Ubuntu, I was coming from a distro journey that started with FreeBSD and took in Mandrake and Gentoo along the way; I hadn’t worked with any Debian-based systems before and was new to the way that Apache is configured on those platforms.
PHP North West 2011
This is a regional PHP conference based in Manchester, UK, and I’ve been involved with it since it began (I’m surprised to find this is our fourth edition, it still feels like a shiny new adventure!). This year the dates are 8th and 9th of October and with an added tutorial day on the Friday, it is bigger (and of course better) than ever. In case you missed the announcements, here are the main things you need to know:
PHP|Tek and a Hackathon
Marking up Tables in LaTeX
I find the default formatting for table output in LaTeX can look a bit … squashed, so I always precede my tables with this:
\renewcommand{\arraystretch}{1.5}
To define a table, you use the tabular
keyword and define your columns using l, r or c depending whether you want each one right, left or centre justified:
\begin{tabular}{l | l}
PHP OAuth Provider: Authenticate User
This phase is probably the most familiar to us as developers, as it’s simply a login form. The consumer will send the user to us at the URL we provided in the request token, and the user will have the request token key as a parameter. The access control on this page will look the same as on the rest of the website; if the user has a session already then the page is displayed, otherwise they must be logged in to see it.
Combining PDF Files With Pdftk
For years I’ve used PDF Shuffler for this sort of thing but I wondered if there was an easy way of doing this from the command line this time, since I literally wanted to glue together a bunch of files one after another. Predictably, there is and it’s called pdftk – the PDF Toolkit. Continue reading
PHP OAuth Provider: Request Tokens
The consumer requests a request token (see my earlier post about consuming OAuth), and as a provider, we need to handle that request. In my example, I chose to pass the variables as GET parameters, but you could adapt this to handle POST variables or information contained in HTTP headers.
OAuth Provider Code
We have the same block of code called on every request where we’re negotiating OAuth, and it looks like this:
$this->provider = new OAuthProvider();
// set names of functions to be called by the extension
$this->provider->consumerHandler(array($this,'lookupConsumer'));
$this->provider->timestampNonceHandler(
array($this,'timestampNonceChecker'));
$this->provider->tokenHandler(array($this,'tokenHandler'));
// no access token needed for this URL only
$this->provider->setRequestTokenPath('/v2/oauth/request_token');
// now check the request validity
$this->provider->checkOAuthRequest();