Main menu

Post navigation

I was reminded recently that tech companies are still asking the question “How can we get more women to work for us?“. I’ve told this story occasionally over a beer or two, but have never written it down before, mainly because I don’t think it reflects very well on IBM. Although I think IBM is a great company in general, this story is about something I think they did (and still do) badly.

Ten years ago we had tampon machines in the loos at IBM. Nine times out of ten they didn’t work or were empty, even if they did work can you imagine what it was like in a ‘cashless’ site to have to scrabble around to find two 20p pieces? Or worse – borrowing the right change from a male colleague and then having to explain why you wanted it. Blush. Them, not me.

Sometime around 2003 I expressed my irritation with this situatition to the Lab Manager. Blush. Him, not me. That’s about as far as it went. I thought then (and still think) that tampons should be available in just the same way as loo paper is. The Lab Manager’s answer was that this was impossible because tampons are classed as a ‘non essential item’ under UK tax law. It is true that tampons are taxed at a VAT rate of 5%, however - loo paper and soap seem to be taxed at the full 20% rate. IBM, in common with most large companies supply loo paper and soap, so what is the problem with tampons?

Some years later, there was a new Lab Manager and a big focus on trying to hire more female engineers. I met him and suggested that if they wanted to make life comfortable for their female employees they should provide free tampons. There was no blushing this time. Yay! Progress! He told me that a female client visiting site had also complained about the broken machines, so they took the issue very seriously.

Unfortunately, IBM’s solution to people complaining about the machines was to just remove all the machines. Not quite the solution I had in mind. In fairness they do now sell tampons in the canteen, but, well…

I’m just popping upstairs to grab a sandwich and a tampon.

…you know. Blush.

So perhaps, when a representative of a big tech company asks –

“How can we get more women to work for us?”

one answer is –

“To what extent are you prepared to make your work place comfortable for women to work in? Even if this involves spending money.“

Or you could even ask if the provide tampons in the loos in their UK offices. You know what answer I think you will get to that one? Yeah. Blush.

SketchUp is a funny sort of thing; it used to belong to Google but never really seem to fit with Google-anything-else. Someone once told me that it looked like a product that was conceived when the Google executives got rich and wanted something to help design their new homes. In April 2012 SketchUp was acquired by Trimble, I really hope it’s going to have a great future, I’m using the free version at the moment but it’s so useful that I probably will end up paying for it.

Over the Christmas holiday this year I built a table – using a piece of slate that we bought about 30 years ago intending to ‘do something with it’, some oak and a bit of custom made stainless steel. I used SketchUp to help me plan out the project.

This is a screen shot of the initial design:

Coffee table design

The angles between the stainless steel rods and thus the placement of the legs were dictated by the dimensions of the slate. The table looks like this upside down

Upside down view

In this view I have pulled one of the legs away slightly to show the construction of the top of the legs – this is also shown in more detail in the inset. The most useful part of SketchUp was that it helped me to work out the exact saw cuts that I needed to make – then move pieces around to that I could see what the result looked like.

Other useful things were being able to send images to Alan at Designs in Stainless who made up the stainless steel part and being able to deconstruct the wooden part of the design into a cutting layout so that I knew how much oak to order. By the way, the oak came from Alresford Interiors who make the kind of fitted kitchens that I’m going to have in my dream home.

I’ll continue using SketchUp for this kind of project – I’m sure that it probably wasn’t what it was intended for but I don’t think I could plan this sort of construction without it. Here is a shot of the finished table:

Speaking in a purely personal capacity, I hope that I never will be (indeed, never have been) accepted as a conference speaker because I am female. I also hope never to attend a conference where speakers have been selected for any other reason that they are the best qualified individuals to talk on their subject material.

As a director of PHP London and one of the organisers of the PHP UK Conference I would wish to reassure our speakers, particularly our female speakers, and attendees that talks were selected primarily on the merit of their submission. In fact, when I graded the talks I looked only at the title, abstract and their reasons for wanting to speak – I had no idea if I was selecting women or men.

Anyone who wishes to address the lack of diversity in our industry would be better to lend their support groups already working in this area, for example WAAA. Or, failing that, supporting initiatives that are directed at changing the way that computing is taught in schools.

Read what Trisha Gee has to say on diversity. In her last paragraph she speaks of role models and I can’t improve on her words. Although I’m female my role models are mostly male and as it happens, Andrew Betts is one of them.

The development of parallel run-tests.php is moving along. Unfortunately paid work is going to get in the way a bit for the next few weeks so things will move a little slowly.

I’m still thinking about the REDIRECTTEST implementation. I don’t think it’s that hard, the other thing that needs to be thought through is exactly how to avoid clashes between, for example, msql and mysqli tests. I think that the latter is best addressed by having a configuration file of test directories that have to be run in sequence. In a parallel run, one processor would be set to work through these while other tests were scheduled randomly to the remaining processors. Anyway – it needs some thought and the parallel execution code is the part I’m least familiar with.

The other thing that really needs to be done is some more extensive performance work. I have done a couple of runs on a dual core Mac, just to get some data points.

The tests in the timing benchmark (phpruntests/QA/QATimedBucket.tgz) are taken from the PHP development stream and are all tests under:

I executed these tests three times. Run 1 uses the current PHP development stream version of run-tests.php. Run 2 uses the parallel version of run-tests.php run in sequential mode and Run 3 uses the parallel version run over two processors.

Here are the times:

Run 1 298 seconds
Run 2 293 seconds
Run 3 207 seconds

There are some minor differences in the test results between running the standard and new versions of run-tests, in summary these are:

These differences are mainly accounted for by the new version of run-tests.php being much stricter in what it allows in a test case. For example, any empty section will cause a ‘BORK’, and section it doesn’t recognise will also cause a ‘BORK’. The next job on my list is to go through the tests and either fix tests (or my code) so that the old and new versions give exactly the same results.

After that I’d like to find an 8 way machine and get some better data points. Any offers?

The first step in implementing the REDIRECTTEST section in parallel runtests code is to get some redirected tests running on my Mac. I’ve used PDO and MySQL, principally because I already had MySQL installed so it seemed the easiest place to start.

In 2009 Stefan Priebsch, a GSOC student and I wrote a version of run-tests.php that runs PHPTs in parallel. This helped reduce run times on multi-core machine by a decent amount. In September 2009, IBM wanted me to work on OSGi – a fun job but completely impossible to combine with PHP development – Stefan was busy with thePHP.cc and the GSOC student took the money and ran. So development stopped – which was a pity because all we really had left to do was implement –REDIRECTTEST–

A couple of weeks ago I decided that I’d look to see if the code still ran. It does, but there are a few fixes needed which I am working on now, after that I’ll implement the missing sections.

Having not worked on PHP for a while I found that the most painful thing was recreating the development environment that I had in 2009. Here is a brief list of what I had to do in terms of set up on a Mac, it assumes that everything necessary to compile C (eq gcc, make, autoconf…) and an svn client is already installed.

Get PHP from here http://www.php.net/downloads.php. ( I used the PHP 5.4.0 tar file)

Before trying to run anything there is a configuration file that needs to be set up, ‘phpdefinitions.txt’, which can be found in the phpruntests directory. Open it up and modify it as indicated to add the paths to various PHP executables.

You may wonder why we don’t just set the environmental variables, TEST_PHP_EXECUTABLE, TEST_PHP_CGI_EXECUTABLE. The answer is that because the unit tests test parts of the code that check which PHP executable to use we will ignore any pre-existing settings. When running unit tests, we specify which version of PHP to use using the -p flag.

The php versions are read from phpdefinitions.txt in tests/rtTestBootstrap.php and stored in global variable called RT_PHP_PATH and RT_PHP_CGI_PATH.

The phpdefinitions.txt file is also used as a phing properties file. The PHP executables in this case are used in the QA target.

Unit tests can be run using

phing test

A more extensive set of tests can be run by using this command:

phing qa

Running this will run the unit tests, generate test coverage, doxygen documentation and compare the output from a set of tests run using the new code with the same set run using the old code. It all takes a while to run – 15 minutes on my Mac.

To make life slightly easier for myself I downloaded Eclipse PDT, added Subclipse to it and added PHPUnit as an external tool. This last bit means that I can highlight unit tests and run them from Eclipse.

Next steps – work through my code and see if I can remember how it works.

It’s been a long time since I’ve been to a PHP conference. I stopped actively contributing to PHP in mid 2009 when my IBM job changed. Of course, I had hoped to continue in my spare time but I found learning about OSGi took up all my IBM time and all my spare time. In November last year I finally had time to get re-engaged with PHP and volunteered to do what I could to help organise the PHP UK conference. I will doing a much longer write up of the conference for the Web and PHP magazine, so this is just a short post on a couple of personal highlights.

The first thing I want to say is that it’s been a huge pleasure to be part of the conference team. PHP was the first developer community I got involved in and it was a delight to see how much had changed in two years and how much, the warmth and friendliness, was still the same.

That leads on to my second point. Rasmus Lerdorf gave the first conference keynote and the message I took away from that is that PHP still needs more contributors – in particular we need people to fix bugs. If you are bored – and especially if you work on Windows – please try this:

http://bugs.php.net/random

and see if you can help us fix a bug?

The best talks always teach me something and leave me with a picture. June Henrikson (Redpill Linpro) gave a talk about creativity in which she explained something I knew already but was reluctant to believe because I didn’t have have a good mental picture for it. I can’t even begin to count the number of times that I’ve sat in front of a screen trying to solve a problem, knowing that it was taking too long and that I was tired, but just fixated on staying at the keyboard until I cracked the problem. Deep down I always knew that the best answer with that sort of problem is to take a break – here is why:

Dual CPU model of the brain

Imagine your brain as having two CPUs, one side (CPU1) does the analytical problem solving part and it’s operating while you are concentrating on trying to fix a bug, solve a technical problem etc. While that side is using the memory bus the other side of your brain (CPU2) has no access to memory. When you stop using CPU1, for example – go for a walk, get a cup of tea, you give CPU2 a chance to start working on your problem – which it does as a background process. Eventually – given enough time, CPU2 will deliver a solution, it will feel as though it has just popped into your head. In summary – if you have a difficult problem to solve - force yourself to take regular breaks.

It’s probably slightly bad form to list my own talk was a highlight – but it was for me. I was a little nervous about doing it the way I did – I owe a huge apology to the people who thought I was serious to start with. In fact I meant almost precisely the opposite of almost everything that I said. I was calling out bad development management practices which I have seen, and even been part of, in large organisations. There was one final twist that (if you don’t know IBM that well) most people probably missed. IBM’s newly appointed president and CEO is a “Lady Cat”. I am ridiculously proud of this fact – also that she holds a degree in Computer Science so is an example of someone that started as an engineer and is a hugely successful manager.

I would love to extend the “Misguided manager” talk – but I need a few more examples. Mail me if you have one and I’ll try to work it in.

There were many outstanding talks at the conference, Hugh Williams gave some fascinating insights into Ebay, Stefan Marek talked about the journey towards CI at Plusnet, Ian Barber talked about why fraud detection is so complex, Patrick Allaert gave a great talk on how to implement complex data types efficiently. All of the talks were recorded and will be made available within the next couple of weeks. I am looking forward to watching the ones I missed – in particular Davey Shafik’s “PHP 5.4: The new bits” which I somehow managed to miss on both days.