1 Apr 2010
Recently I’ve been working on a project where I’ve had to commute to Birmingham Business Park and work in the client’s office. Nice project, but it’s made me realise just how much I love working at home.
- I have a brilliant office. Set of double monitors on an adjustable arm (I hate using visual studio on a laptop screen), desk and chair are at the right height, everything I need is to hand. Also it’s just such a nice space.
- Great coffee. I’m a coffee snob and I detest and despise instant coffee and vending machine coffee and starbucks coffee.
- No commute. Every morning for the past few weeks I’ve been faced with the choice between roadworks and speed-cameras or the motorway. At home my office is next door to bedroom and if I get dressed it’s because I want to, not because I have to.
- I’m the boss. My hours. My clients. My projects.
- If I get bored I can just go and annoy the grumpy office cat.
My desk. There’s also a nice view from the window.
It’s obviously late ‘cos I’ve been drinking tea.
And this is the rest of my office. The pictures on the wall are some really nice technical drawings of steam engine indicators, and a rivitting machine
And I’m just doing my end-of-year accounts (my company year ends in March) and I’ve realised that I’ve now been working for myself for four years. Unbelievable. I had to go check my old speadsheets to see if I’d counted the years right. But yep, first invoice sent March 2006.
12 Mar 2010
If you google for recursion … you can google for recursion … you can google for recursion. This is the kind of thigh-slapping belly-clutching joke which has them rolling in the aisles if you tell it right.
The equivalent entry in the hacker’s dictionary is:
Recursion: n. See recursion
Or, more programmers’ humour, PHP stands for “PHP: Hypertext Preprocessor”, which is a recursive acronym. We’ve got to get our fun somewhere.
13 Aug 2009
Okay, this drove me completely nuts for far too long. Basically, the subversion repository had a file called con.jpg (and one called aon.jpg, bon.jpg, don.jpg but they weren’t an issue) and this caused massive fail when I tried to do a checkout.
Can't open "images\alphabet\con.jpg.tmp": the system cannot find the file specified
I deleted files, folders, parent folders, did a fresh checkout and still no joy. And then I cursed subversion, kicked the cat, threw coffee cups out the window, contemplated throwing the laptop out the window, gnashed my teeth … spent some time googling things, spent more time googling with different keywords.
It appears that you cannot have a file or folders in windows called “con” or “con.jpg” or “con.txt” or basically con anything. This isn’t much advertised but it goes all the way back to early DOS days where con was a reserved system word (short for console) I’d mock microsoft, but then I look over my shoulder at certain historical applications which I’ve written and which are still running andI get embarrassed for myself. Anyway, we renamed the con.jpg file in the subversion repository. Everyone else in that team was using Mac/linux so it was just me having weird & wonderful problems.
6 May 2009
I’m trying to get IE8, IE7 and IE6 playing nicely on the same machine. Really really want this for testing – and I’m having a devil of a job with it. I’ve:
- Used the Microsoft installer to upgrade the regular IE7 to IE8.
- Installed IE7 Standalone to get IE7 working
- Used the Multiple IE installer from Tredsoft to get IE6 setup.
I’m now having a problem with forms – basically it’s not possible to click into or set focus on any text field when I’m using IE7 or IE6. This makes testing web applications surprisingly difficult.
In addition, when looking at pages with IE6, I get continual dialog popup which reads “An error has occurred in this dialog. Error:84 Unspecified error.”
Other people have reported the issue of form selects not dropping down, instead triggering the popup blocker notification but I haven’t had that problem (yet)
As well as the Tredsoft installer, I’ve used the Internet Explorer Collection (This last isn’t much referenced – I think it’s because it lacks any details about who/what/why and wherefore.) Easy neat install, but exactly the same problems with forms.
1 May 2009
There is a kind of love called maintenance,
Which stores the WD40 and knows when to use it;
Which checks the insurance, and doesn’t forget
The milkman; which remembers to plant bulbs;
Which answers letters; which knows the way
The money goes, which deals with dentists
And Road Fund Tax and meeting trains,
And postcards to the lonely; which upholds
The permanently rickety elaborate
Structures of living; which is Atlas.
And maintenance is the sensible side of love,
Which knows what time and weather are doing
To my brickwork; insulates my faulty wiring;
Laughs at my dryrotten jokes; remembers
My need for gloss and grouting; which keeps
My suspect edifice upright in the air,
As Atlas did the sky.
12 Dec 2008
Best Family Portraits ever
Happy birthday of dog
9 Dec 2008
Recently I’ve had a couple of clients ask me for advice on email marketing or how best to send newsletters out to all their subscribers, and there’s also been some discussion about this on the Php London mailing list.
Looking around, and talking to other people, we have the following shortlist of recommended packages:
Some clients are unhappy with the idea of paying a subscription to send emails, and would rather pay a larger one-off fee for unlimited use, or get their own software. Not a problem if we’re sending email to a relatively small number of subscribers (think hundreds, not thousands), but if your subscriber base is any larger then we’d want to start thinking very hard about spam controls and look at a hosted solution where the company in question is whitelisted (appears on list of acceptable or trusted sources, opposite of blacklisting known spammers)
And here’s a very helpful message from Marcus Bointon of http://www.smartmessages.net/
“The big downside of managing your own mailing system is establishing and maintaining a good sending reputation – it’s really hard to do, and takes a good 6 months to a year. For hotmail you need to be consistently sending them at least 1,000 messages per day to qualify for any kind of special treatment. That special treatment comes in the form of two services: The JMRP and SNDS services (both at postmaster.msn.com). Anyone can sign up for SNDS – it gives you stats on sending from one or more IPs to hotmail/winows live accounts. You get message and recipient counts, complaint count and rate, spamtrap counts, and an overall red/yellow/ green ‘quality’ rating for each IP. This doesn’t let you improve deliverability directly, but at least you get to see what is happening. The quality rating seems a bit vague – I’ve seen it green at 3% spam rate (very high), but red at 0.1% (about normal for clean lists).”
Read full message
7 Dec 2008
var cars = new Array(
So I’ve taken to coding lists like this:
var cars = new Array(
I’ve taken to using the same style pretty much everywhere I have a comma-separated list of things – it’s particularly helpful in SQL server stored procedures.
insert into t_users (
) values (
20 Feb 2008
This is a Digg Swarm
Digg is a website which allows its users to select (digg) things that they find interesting. Other users then read and rate these nuggets, and this determines how popular an item is; building a community of users who sieve online content and disgard the junk.
The Digg Swarm shows the process visually. Stories arrive as little circles, and the diggers “swarm” around them. As stories get more popular, they increase in size and as people dig more stories they also increase in size.
It’s a great representation of some complex data relationships; it’s also a really hypnotic display. Courtesy of Stamen Design who are doing lots of wonderful stuff – not just the pretty.
I love visual explanation’s of complex data. The classic of course is this 19th century chart drawn by Charles Joseph Minard. Beginning at the Polish-Russian border, it shows the size of Napolean’s army as the width of a line that shrinks from an initial size of 600,000 in June of 1812 to fewer than 10,000 by early December. As well as the number of troops remaining, the chart also shows geography, time, temperature and the course and direction of the army’s movement.
And here’s an article from the Economist (Dec ’07) which describes a couple of pioneering charts (one from that well-known statistician Florence Nightengale). But I particularly liked this:
And Playfair was already making a leap of abstraction that few of his contemporaries could follow. Using the horizontal and vertical axes to represent time and money was such a novelty that he had to explain it painstakingly in accompanying text. “This method has struck several persons as being fallacious”, he wrote, “because geometrical measurement has not any relation to money or to time; yet here it is made to represent both.”
5 Oct 2007
Steve Sounders gave one of the few developer “how-to” talks based on his book High Performance Web Sites
Basic premise: Performance-tune the front end, not the back end.
14 Rules for doing it better
- Fewer HTTP requests
- Use a Content Delivery Network to store static files, so you can delivery content to users from the server which is closest to them
Uh – pass. I’m sure it helps Yahoo and the BBC, but not me.
- Use the Expires header
Okay, this needs to go in. Very helpful for people who’ve already got a primed cache.
- Put stylesheets on the top
Slightly bemused – where else would I put them?
Two good reasons:
- Downloading scripts blocks parallel downloading
- Scripts block the page rendering
- Avoid CSS expressions
Steve, I won’t dream of using css expressions
- Reduce DNS lookups
Okay, so if I’m downloading components from more than one server then DNS lookup for each separate server = delay!
- Avoid redirects
I tend to use redirects in code, can be very useful in avoiding that nice little message about “Do you want to resubmit your form” which tends to freak people out.
But yes, I know that missing off the ‘/’ at the end of directory names means another round trip to the server. And many other lazinesses.
- Remove duplicate scripts
DUH! But apparently this happens. And it’s not uncommon.
- Use ETags in your headers
Entity tags are an http response header that browsers & servers use to determine whether the item in the cache is EXACTLY the same as the one on the server. Think I might pass on this one, but there’s a lot I want to learn about http response headers and apache config files
- Make sure the browser can cache Ajax – use the expires header
Things for me to do
- Make more use of the expires header
- Play with yslow
All nicely explained in Best Practices for Speeding Up Your Web Site
And something I didn’t know – there’s a YSlow plugin for firefox which will analyse webpages and tell you where the bottlenecks are.