Joel Vardy

When Do Your Domains SSL Certificates Expire

Keeping track of when domains (and often forgotten about SSL certificates) expire can be a tiresome task. This post shows how I built a simple command line tool which checks the expiration date of of domains and SSL certificates. Domain Expiry I am using the Novutec WhoisParser library to get the domain expiration date parsed from the WHOIS data. I wrapped this in a library of my own to ensure it is formatted and cached as I want.

Posted: 5 October 2015

Scraping Job Listings

How I scraped the list of jobs on the the Manchester Digital vacancies page so I could filter and sort them as I wanted. I’m currently looking for a contract / freelance web development role in Manchester, I was looking at the vacancies listed on but most of the jobs were permanent, and there was no way to filter / sort the list. So naturally, I decided to write some code which would allow me to do that.

Posted: 2 October 2015

Delete Specific Memcached Keys

Using in memory storage to cache data is very common, however the ability to delete keys is not easily possible from the command line. I would always end up restarting the memcached service, but this would of course delete all keys, which is not always desirable. I built a simple command line application which can be installed globally on a system using Composer, this post will outline how to use the tool.

Posted: 24 April 2015

Motorised Timelapse Slider

I can’t remember when I first decided I wanted to shoot a timelapse on a slider, probably, I suppose when I first saw a timescape video several years ago. In March last year I bought a Konova K2 800mm slider from Amazon. Now I need to motorise it! Initially I found an article from Angus Kennedy who had managed to motorise a slider using some DC motors and high strength fishing line.

Posted: 16 January 2015

Carbon Workspace

My workspace has been updated several times since it was featured on Lifehacker, after my summer trip to Iceland I put some A2 prints up on the walls, they look great, but the surface of my desk was looking worn, it was time for an update. Filling in the cut out, giving me more leg room. Adding a vinyl covering to the surface of the desk. Switching custom built NAS for a LaCie 10TB drive.

Posted: 27 October 2014

Secure Staging

When developing websites you often have to setup one or multiple staging areas, these are often used for showing a client the progress, testing the website works on a production environment, and gaining final sign off from the client. It’s important that these staging areas are secured. Websites on a staging area are often unfinished, and may have security vulnerabilities which are yet to be patched. You do not want search engines to index a staging website, this will introduce several issues, as highlighted in the quote below.

Posted: 27 July 2014

Watching Someone Work

Today I knew no one would be home, I wasn’t waiting for any deliveries, and I wanted to put together a simple mobile app. So I decided I would take a timelapse of me working. I’ve always liked workspaces, I enjoy looking at other peoples workspace, the tools they use, and digging into their work flow. If you’re just as curious feel free to have a look at my workspace.

Posted: 26 July 2014

Remove WWW Prefix Nginx

Some people like domains to have a www. prefix, I don’t I find it an unnecessary relic of the old web. It’s also bad practice to be serving the same content over both www.domain.tld and domain.tld I’m going to show you how to write one rule which will redirect all www. prefixed domains to the plain domain. I am using nginx as my web server, I don’t think this is as easy with Apache (however this is probably possible with a default vhost and some rewrites.

Posted: 4 June 2014

SSH Tunneling

Tunneling your network traffic through an SSH connection can be useful if you want to encrypt all outbound traffic, get around a corporate firewall, or make connections from a white listed static IP address. The way I had previously done this was to run a command in the terminal to open up a SOCKS proxy, then change the Google Chrome network settings to route all requests through the tunnel. However I am going to show you how I have SSH tunnels set up on my Mac.

Posted: 15 May 2014

Re-engagement Emails

Today I’m going to show you some code which will re-engage users by sending them an email if a goal is not met. For example give them a 5% discount email if they do not complete the checkout process after an hour. There are three actions which we need to make, these are: Capture a potential target. Invalidate target if they achieve your goal (in this example the goal will be completing the checkout process.

Posted: 14 May 2014

What Do You Do On The Train

Contracting outside of my home city, and not being a driver, means I’m frequently on trains, there are three things I do on trains. Stand up and get annoyed because I don’t have a seat. Watch something on my iPad after a long day/week. However I usually try to learn/play around with something new. I’m writing this post while on the train to Manchester, this is the 7th time I’ve been on the train this week.

Posted: 14 March 2014

Summit Awesome Hackathon February 2014

Almost a year on from the last Summit Awesome hackathon, we are back in Manchester, at the TechHub, for another two day hackathon with some great, like-minded people. There have been two Summit Awesome hackathons previous to this one, after both I think everyone has been in agreement that doing an all nighter is a pretty stupid idea. But did I book into a local hotel room, of course not.

Posted: 3 February 2014

Permission Based Authentication Library

I can’t count the number of authentication libraries I have written since I started building websites, often I would simply iterate on the previous library each time I wrote one. Last year, while I was working on several CodeIgniter projects I wrote (and released) an authentication library. This served it’s purpose however it did not have any permissions, and of course, was limited to being used within CodeIgniter projects. I needed an authentication library in a current project, so decided to write a new authentication library which I’ve released as a Composer package.

Posted: 27 September 2013

Storing Files on Amazon S3

There are several reasons why you might not want to store files directly on the web server; scalability - where you have several web servers, disk IO - HDDs are a servers biggest performance bottle neck, or disk space - cloud storage is much more scalable. I’m going to show you how to store files on Amazon S3, you will needs an Amazon Web Services account, and user credentials (access key ID and a secret access key) with access to your S3 buckets, for help on how to do this look at the Amazon AWS docs.

Posted: 23 July 2013

JavaScript Image Upload

I put a lot of effort into reducing website load time, the longest a user has to wait is usually when they try to upload a file. In the case of uploading an image, it is highly likely the user is uploading a photo straight from their digital camera. In an effort to reduce the users waiting time, and the server load, I’m going to resize images in the browser before uploading them.

Posted: 4 July 2013

RESTful Routes

A Composer package which allows you to easily map routes to a block of code. This is an ideal base for small websites and RESTful APIs. Update: this is not a perfect library, you may want to consider using the Slim micro framework, which is usually what I now find myself using. Requiring the Package I’m not going to explain how to use composer, if you are not sure then read the manual.

Posted: 26 June 2013

Account Security

This subject has been covered so many times, but it amazes me how some of the basic steps to secure your users accounts and therefore your application are not taken. I’m even more amazed that large companies which know plain text password storage is bad, will still store passwords in plain text. BBC Careers I was applying for a job at the BBC, I needed to login but had forgotten my password, alarm bells were first set off when what I expected to be a “reset my password” link actually read Please email my password to me - not to worry I’m sure they were actually going to send me a reset link.

Posted: 2 May 2013