WordPress Contact Form 7 Without Captcha

When this blog moved to wordpress, we added a contact form into the footer, which was available on every page. This seems awesome until you see the sheer volume of spam I got from it in the first day or two. I hate captchas, not least because I usually fail them at least once myself, so I was in search of alternatives and found two: akismet and the honeypot plugin. Continue reading

Google OAuth 403 Response

I had an issue this week on a system which has been working fine for a while, but stopped fetching some data from google’s user account API. I was getting a 403 response from the API, which seemed odd. Luckily I was logging OAuth::getLastResponse() to my error logs (this is PHP code, and you need to call OAuth::enableDebug() before you make the request to get this output) so I could see that I was getting the following back from Google:



  
    GData
    sslRequired
    SSL is required to perform this operation.
  

Closer inspection shows that for one of the google endpoints, I had a prefix of http:// rather than https://. Those single-character bug fixes that take hours to find are my favourite!

Speaking at DayCamp for Developers

I am delighted to announce that I’m speaking at the upcoming DayCamp for Developers in early March. The idea behind the daycamps is to bring important but non-technical skills to developers everywhere – so the sessions are virtual and so are the speakers! This time around the topic is Business, so we have a series of speakers to give you advice from a practical, developer-centric point of view – on everything you need to know!

My own talk is “Time and Money”; both are pretty important concepts to have a handle on when you are in business, either as a freelancer or when starting or helping to start a bigger business. Even as an employee, these are really important concepts to understand; most of what I learned about business I learned working with business people in the jobs I had beforehand.

Time is important because we need to figure out how much we have and how to share it around. Money is important because we all like to get paid. I’ll be sharing my own tactics for keeping both of them under control so I hope you’ll join us!

Mercurial “Not At A Branch Head” Error

Although I write and speak a lot about various kinds of source control (git and subversion are the most popular still as far as I can see), my own development projects are on BitBucket under mercurial (bitbucket also offer git hosting these days, and their tools are great). Recently I was working on an upgrade for BiteStats (note shiny new theme, with thanks to @miss_jwo) and I kept getting this error from hg tag

not at a branch head
Continue reading

Using lrnja.net Custom URL Shortener with Bit.ly

I’m a big bit.ly fan and recently I registered a shorter URL to use for short links – and I went for lrnja.net. I sat down to configure my new domain with bit.ly, and it was very straightforward (I’d almost say “designer-proof”! /me ducks).

  • First: register your domain
  • Log in to your registrar’s control panel and add an A record*
  • That’s it! In about 24 hours, you’ll be able to shorten with your domain

* or a CNAME if you want to use a subdomain of an existing domain.

Bit.ly has excellent instructions here: lrnja.net/bitlydomain

The Tree Command

Today I’m working on a little tutorial (about writing RESTful services, for this site) and I used the tree command to illustrate the file and directory layout of the project. I love this little command and use it frequently, but it isn’t very well known so here’s a quick example. Continue reading

Tracking Your Domain with Bit.ly

As a blogger and lover of graphs, I am not sure how I hadn’t already seen bit.ly’s tracking domain feature. With this, you can register a domain and see reports on all of the URLs that are shortened with bit.ly which point through to that domain.

Continue reading

Inner vs Outer Joins on a Many-To-Many Relationship

Someone will probably tell me that this is an elementary-level topic, but I got some good questions regarding joins from my most recent ZCE class students, so I thought I’d put down the examples that I used to explain this to them. Being able to join with confidence is a key skill, because it means that you can refactor and normalise your data, without worrying about how hard something will be to retrieve.
Continue reading

Simple Regular Expressions by Example

Whenever I ask a group of developers if they are familiar with regular expressions, I seem to get at least half the responses along the lines of “I’ve used them, but I don’t like them”. Call me a geek if you like, but I quite like regex; I think often it seems unfriendly because it’s used inappropriately or just thrown into code with “here be dragons” type comments rather than documentation about what should match, and what shouldn’t!

As with most things, it’s pretty easy when you know how, so here’s my one-step-at-a-time approach to regex (stolen from my ZCE preparation tutorial slides). Let’s begin at the very beginning: regular expressions have delimiters, usually a slash character, and these contain a pattern that describes a string.

pattern notes
/b[aeiou]t/ Matches “bat”, “bet”, “bit”, “bot” and “but”
Also matches “cricket bat”, “bitter lemon”

Continue reading