Super strong homemade weights bench

Inspired by this description of a wooden DIY weights bench, I decided to make my own. Mine was way simpler, though; I used less wood but it’s much thicker so it’s still strong. This post includes photos of each step, but I won’t go into loads of detail – hopefully the images will speak for themselves.

Home made wooden weights bench

Excuse the mess….

But firstly, with regard to motivation for making this, let me quote from the link I mentioned:

Shopping for a weight bench can be difficult. And by difficult I mean expensive. And just to be clear, whenever I use the phrase “weight bench” I mean a strong one that can be used to Bench Press. The problem you’ll run into when buying these is that the reasonably priced ones are not rated to hold much weight. You’ll see figures like “300 lbs.” But when you consider that the bench has to hold your body as well, 300 lbs. is not much. If you weigh a measly 150 lbs. when you start, and bench press 150 lbs. That’s your 300 lbs. right there. This is novice level lifting. Once you turn into a real lifter after a few years of training, you’ll probably weigh closer to 200 lbs. yourself and be benching near 300 lbs. Now that’s 500 lbs. and all those affordable weight benches are now too weak for your purposes. But when you start pricing quality benches that are rated for this type of serious lifting, you are going to have to pay hundreds of dollars for them. This is unacceptable by Homemade Strength standards.

Before I get into how I made my bench, let me say I’ve tested it with a total mass of 250kg. That’s me (75kg – yes, I’m skinny) plus a friend (100kg) plus weights (75kg) all on top of it, in the middle. So it’s strong! However, you should always do what I’ve done and test your bench thoroughly before lifting weights on it. You don’t want it breaking when you’re holding your own body weight in cast iron above you. With that in mind, here are the details:


Standard sizes are 45cm high and 30cm wide. You can adjust these to suit yourself – you may want to make it shorter (if you’re short). Some people prefer it a little narrower. The length is 110cm – it needs to comfortably fit both your head and bum. 110cm is long enough for me and I’m 6’1″.


- Screws of various sizes, electric screwdriver
- Saw – probably a circular saw…I wouldn’t fancy cutting it all the old fashioned way
- Staplegun & staples for the upholstery (tacks are an alternative)


I used about 3 metres of timber measuring 50mm X 150mm. It’s really thick, heavy stuff: not like 2×4 at all. I had it lying around the garage. You can use whatever you have lying around as long as you’re sure it can hold the weight. When it comes to using it, go gently, and make sure you’re safe. If you’re not sure, then stop.

I had some left over MDF from my kitchen which was fitted last year, and I cut out two pieces of 30cm x 110cm x 12mm. The reason I need two will become clear later!

For the legs you’ll need another two pieces of 30cm x 30cm MDF. Read all the way through to see why these are needed.

Finally, I bought 4m of cheap wadding (polyester padding material). This probably wasn’t enough, it’s very thin. So my bench isn’t particularly comfortable. That doesn’t bother me. I also bought a metre of pleather (fake plastic leather) for about £8. It’s only a metre but it’s 140cm wide so that’s plenty.

The great thing about wooden construction is that you can change it later, or add more strength to it. I have the option of adding more legs to the middle of my bench for extra support if I ever go above the 250kg. When it’s complete you need to do some serious testing on this bench to make sure it’s up to the job before use. As I mentioned already, you really don’t want 100kg (or any amount) of weights crashing down on you during bench press when your bench breaks.

I’m a lightweight and I’m lifting light weights. You probably aren’t so your bench may need to be stronger.


Start by cutting the legs. They’re about 40cm long (total height will be more when the MDF top is added). Also cut the centre beam, it should be about 100cm long. Adjust these sizes to your preferences, the design is flexible. Feel free to double up on that centre beam.

Now I use my pieces of 30cm x 30cm MDF and screw them to the legs. This holds the legs together but also, the centre beam will rest on it. In this picture there’s only 4 screws in each; I actually ended up putting 10 in each.

These need to be 50mm from the top of the legs – this is because the centre beam will rest on them. It’ll become clear in a moment.

This is how it fits together so far. Screw it together. You need some pretty long screws.

Here’s my two pieces of 30cm x 110cm MDF.

Then put the first piece of MDF on top, and screw it into the legs and beam. It’ll help hold the whole thing together. It’s way sturdier than it looks here. It’s really heavyweight and there’s no movement or wobble in the legs whatsoever.

Now, at this point, you may wish to do your testing and add additional legs to the middle if needs be! If you want to avoid doing testing and be conservative about, then just add more legs.

Here’s our bits so far: partially completed bench, leather, wadding, and the top piece of MDF.

Next up we’re doing the padding. Lay down your leather (upside down!) followed by the wadding, followed by the other piece of MDF:

Try and keep it as neat as possible, it’s awkward because it’ll try to move about. Allow the wadding to stick out of the edges so that it’ll wrap round the edges nicely. Staple one side first, then wrap the other size around carefully but tightly. Don’t rip it!

You should end up with something like this. I’ve trimmed off the excess because as you can see from the picture above, my piece of leather was way too big.

OK, now dump your bench on top, upside down:

And put a few small screws through the first layer of MDF to hold the second on. Don’t make the screws too long, you don’t want them coming through into your back!


As a final note, I need to reiterate, test it first. Test it by piling all of your weights on top of it, and then stand on it, and have a friend stand on it too, and if you hear any creaks (or it breaks…) then go back to square one!! I’m a lightweight and I’m lifting light weights so you may well need to add more legs to the middle your bench.

Good luck!!

“Unknown User” error when creating SharePoint 2013 MVC Apps

Do you get this error?

Unknown User

Unable to determine your identity. Please try again by launching the app installed on your site.

Well, it’s quite possibly nothing to do with users, identities, or anything else related to security. This is the default text in the Views/Shared/error.cshtml file in the web project that’s generated for you when you create a new SharePoint MVC project.

So, this error is shown whenever there’s any unhandled exception in your app….and that could be anything, really. So you’ve got to start debugging it. That’s easy if you’re debugging locally: simply turn on break on exceptions by going to Debug -> Exception and checking the Common Language Runtime Exceptions in the Thrown column:

Now, if you’re developing an Autohosted app for SharePoint 2013, then it’ll be running in Azure. And if you’re unfortunate enough that you’re seeing the “Unknown Error” page in Azure but not locally, then you need to disable that error page and make sure you’re able to see the full exception detail.

To do that, browse to your Views/Shared/Error.cshtml file and remove it from your project. If you’re not using source control, then you’ll probably want to back it up somewhere else to restore it later – this is only for debugging.

Once you’ve got rid of it, you need to switch on exceptions from remote machines. Open your project’s main Web.config (in your web project root) and find the <system.web> tag. Add in the tag <customErrors mode=”Off”/>. It should look something like this:

Now when you run your project and reproduce the error, you’ll see a stack trace which should put you on the right track.


Building Raised Beds for Growing Veg – Sourcing Materials

Raised beds are expensive to buy! If you have the time, and the necessary tools then it’s relatively easy to make your own. Here is the result of some of my research for my latest raised-bed project.

Part 1: Materials

There are lots of materials you can make beds out of. Here are some of the ideas I found:

Scaffolding planks/plain wood
Cost per metre: £1 – £3 

This is the most common option. If you can get old scaffolding planks they’re usually cheap. Alternatively, plain untreated wood from the builders merchants will do the same job. Note that untreated wood will rot away after a few seasons – I’ve heard conflicting reports of it lasting anywhere from 1 to 5 years before needing to be replaced. This is the trade-off you choose to avoid preservatives potentially leaching into your soil.

You can buy pressure treated wood which will last a lot longer; again, it contains preservatives which may potentially leach into your soil. I found it very difficult to find reliable information about the likelihood of this but I don’t mind replacing my beds after a few years.

Railway sleepers
Cost per metre: £8 – £20 

If you can purchase railway sleepers which are non-treated, those will be perfect for your raised beds. They are thick, heavyweight items that will likely last for a long time.

However, real reclaimed railway sleepers almost always come coated in Creosote, which is a horrible preservative that is applied to the wood. You will recognise it as a dark, tarry substance. Due to its carcinogenic properties, it is not recommended to be used anywhere where it is likely to come into frequent contact with skin – and this probably includes raised beds! Additionally, I can’t imagine it will help your soil quality, or contribute toward the ‘organicness’ of your produce.

Recycled plastic
Cost per metre: £10+ 

This is my favourite option, if we weren’t concerned with price! Recycled plastic will last for a very long time, never rotting. It won’t release any undesirable chemicals into your soil, either. And they look good: some types can look very much like some kind of beautiful hardwood. However, they were out of my price range

Just google “recycled plastic raised beds” to find some of the many companies that make these.

Rubber – tyres
Cost per metre: £free, but labour required! 

Recycling old car tyres looks like probably the cheapest way to make very long lasting beds. Best of all, any tyre place will give you as many old tyres as you want. They normally have to pay to dispose of them so they’ll be happy to hand them over!

This option involves a lot of labour, though. You’ll need to cut the tyres up into square sections which you’ll bolt together into “rubber planks”, which you can form a raised bed from.

Another option is to simply lay them out and fill them with soil!

Although they’ll last a long time, and won’t cost you anything, the downside is that they will not look particularly attractive. Just google for ‘raised bed tyre’ to get information and photos.

Disabling the Remote Desktop beep on Windows 8

If you regularly remote desktop into another machine, you’ll know all about the system beep. I hate this beep! I was relieved to be able to switch it off in Windows 7 by disabling the Beep driver in the list of Non-Plug and Play Drivers under Device Manager. But that list of drivers has been removed in Windows 8, so that technique will not work.

Disabling the remote desktop beep in windows 8

I totally don’t recommend you mess with your registry because that would be very irresponsible indeed. So, start by opening Registry Editor…

  • To open Registry Editor, hit Win key and type regedit
  • Browse to HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Services > Beep. There’s the little bugger!
  • I checked the values on this MSDN page. Set them as follows:
    - ErrorControl = 0 (Ignore it if it fails to start)
    - Start = 4 (Don’t start/disable the service)
Disabling the Beep service on Windows 8

I don’t know how to stop the service immediately, so you need to restart at this point. And the beep’s gone!

Editing a Google Spreadsheet using PHP and CURL

I wanted to edit a Google spreadsheet, and in particular, change the title of a worksheet – although the same concepts would apply to any kind of spreadsheet edit. I am using PHP and since there’s no client API for this, I am building up the HTTP requests using CURL.

This was a nightmare to figure out. The documentation is a bit sparse to say the least, when it comes to making the raw requests using PHP. In saying that, it is important you read it all first and don’t just take my word for things.

Scroll down for the full-blown version including debugging and explanatory comments.

If you’re here via Google, I will not stand in the way of your copying and pasting the code any further:

$accessToken = "your access token";
$editUrl = "$accessToken";
$entry = "<?xml version='1.0' encoding='UTF-8'?><entry>... snip ... </entry>"; //This is the entry element for the worksheet, containing any required changes.
$fh = fopen('php://temp','rw+');
fwrite( $fh, $entry);

$handle = curl_init ($editUrl);
if ($handle) {
	$curlOptArr = array(
		CURLOPT_PUT => TRUE, //It's a PUT request.
		CURLOPT_INFILESIZE => strlen($entry), //Size of the uploaded content
		CURLOPT_INFILE => $fh, //Uploaded content
		CURLOPT_SSL_VERIFYPEER => FALSE, //Req'd if the google SSL certificate isn't installed
		CURLOPT_HTTPHEADER => Array("content-type: application/atom+xml")); //Include a content-type header!
	curl_setopt_array($handle, $curlOptArr);
	$ret = curl_exec($handle);

OK, so let’s break that down, and include the full example that I used to debug the whole thing and work out exactly what CURL was doing.

Firstly, since CURL accepts a file to upload, and we’ve only got an in-memory string, we need to use PHP’s ‘temp’ file access to emulate a file handle:

$fh = fopen('php://temp','rw+');
fwrite( $fh, $entry);

Create another file handle to accept debug logging:

$debugOutput = fopen('php://temp', 'rw+');

Then set up the CURL options with all of the debugging shenanigans:

$curlOptArr = array(
	CURLOPT_INFILESIZE => strlen($entry),
	CURLOPT_VERBOSE => TRUE, //Ensure lots of debug output
	CURLOPT_STDERR => $debugOutput, //Writes loads of stuff to the debug file
	CURLOPT_HTTPHEADER => Array("content-type: application/atom+xml")

Now create the CURL object, submit the request and output all the lovely debug info.

$handle = curl_init ($editUrl);
curl_setopt_array($handle, $curlOptArr);
$ret = curl_exec($handle);
$errRet = curl_error($handle);
print("Result: $ret<br>");
print("Error: $errRet<br>");

$verboseLog = stream_get_contents($debugOutput);
echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>";

Don’t forget to close the handles.


DIY Quandries

If you’re not into DIY then there’s no need to continue reading. This post is mainly for people googling for particular problems so that I can share a bit of hard-found knowledge!

Over the past year or so I’ve been renovating a house. It’s pretty much done but there’s lots of DIY issues that are new to me. Googling them didn’t get me anywhere, all you often find is a ton of scare stories.

Of course, the best advice is to go to a professional. If you want to try this at home, don’t blame me when you flood the place. With that in mind, here are a list of the DIY puzzles I’ve come across recently. 

Shower running hot and cold

This is commonly caused by a broken shower thermostat, which would be obvious because the other hot taps in the house run fine. If they also ran hot and cold, it would be a boiler issue, and that’s what’s happened in my case. I recently switched from gas cylinders to a bulk storage tank and apparently the plumber didn’t re-calibrate the boiler (or whatever it is they need to do). The boiler is cutting itself out as a safety precaution.

Pressure for the central heating loop dropping frequently

I had a leak in the system. I went round all the radiators, checked the pipes coming out of the floor for any leaking water, found one that was damp, and tightened it. Then open the inlet tap to re-pressurise the system and bleed all the radiators.

Lots of black smoke coming out of the car exhaust and juddery power

This was caused by a split in the intercooler pipe. It’s a very common fault and causes a lot of black smoke, poor performance and juddery power at about 2000RPM. The cost to have it replaced professionally is about £100, in my case, I bought a £25 replacement from ebay and fitted it myself in an hour. Another common cause on my car (Ford Mondeo) is a blocked-up EGR valve but that wasn’t the case here. My fuel consumption went from 35MPG to 50!

I got a good description of the problem and how to fix it from this forum thread.

Mould/damp on a particular wall

I assumed there was damp coming through from outside but this wasn’t the case. I had a lot of condensation which was causing it. I ventilated the place properly, kept it properly heated (the room was usually cold beforehand), treated the area with anti-fungal spray, repainted and that seems to have permanently sorted it! The main thing to remember is ventilation. I moved furniture away from the area so air could get to it.


Fun is Justification Enough

Today I watched a TED talk by a Korean author called Young-ha Kim and he was discussing the artist inside all of us. He mentioned concepts like a father playing with his children’s toys and finishing the Lego castle long after the child had become bored. Most of us have suppressed our artistic interests in favour of all the serious stuff in our lives… if it doesn’t make money then it isn’t worthwhile.

He also talked about the concept of the “artistic devil” – the notion that when you have an idea, you’ll pause and think about it for long enough that doubts start to creep in. The artistic devil is the voice inside our heads that provides the hundreds of reasons not to do something: there’s more important things to do, it’s a lame idea, people will laugh at you, EastEnders is on.

Although he was talking about art and specifically creative writing, there are so many parallels with software development that it’s unreal. It struck me straight away and held true throughout the talk.

We can earn a good living in this industry but we have so many opportunities to be creative. Indeed, developers are often very creative and get involved in open source and other types of community projects. But it’s hard to take those first steps…putting yourself in the public spotlight and subjecting yourself to scrutiny is difficult, as though it’s going to be a massive weakness to be “wrong”. There’ll always be people around to criticise. I am always coming up with project ideas but almost every time I’ll sit on it and think about it and come up with so many reasons to not go through with it. But if it’s a bit crap, who cares? The point is to do it because it’s fun.

I was writing a stack overflow question today. It’s actually the first one I’ve composed. I typed it out, thought about it, created a jsfiddle, thought about it some more, reworded it, and couldn’t help but think that I shouldn’t need to ask for help.

But actually, even engaging with a community like stack overflow can be a creative endeavour. Thinking carefully about how to form a question takes skill and the process can be fun. And of course, if I am stuck with a problem, someone else will be.

As Young-ha Kim points out, we’re all born artists. It’s obvious when you see your kids drawing on the walls with their crayons or building a sandcastle that will inevitably be washed away. There doesn’t need to be a point.

I’m going to start work on a little project of my own. It’s got nothing to do with work, it’s not going to make me rich, it might be bad art. It’s taken me a long time to realize that as long as I enjoy sitting writing the code, that’s the only justification I need. Anything else is a bonus.

Enabling remote SSH on Raspbian (Raspberry Pi)

I’m off to visit some family this weekend and I’d like to be able to use my Raspberry Pi while I’m away, so this will involve setting up SSH and making it visible remotely (outside my home network). I’d like to access it from my Android phone.

Enable SSH on Raspbian

Firstly install the SSH service by running this command:

sudo apt-get install ssh

Then start the service:

sudo /etc/init.d/ssh start

And now we want to make it start every time the Pi boots:

sudo update-rc.d ssh defaults

Next up, try a reboot and confirm everything works. Reboot by running sudo reboot.

Connecting to the Pi over SSH

To connect, you’ll need to know the IP address of your Pi. You can get that by typing sudo ifconfig. There will be a line starting “inet addr: …”, and the IP address is next to that.

I have connected to the Pi from my windows machine using PuTTY. Download here. Once you’ve got PuTTY installed, put it in a sensible location on your hard drive and open it. Fill in your Pi’s IP address, and in the Saved Sessions section, type “Raspberry Pi”. Click Save.

 You should be able to click Open and log in.

For convenience, I created a shortcut on my desktop that would open the session directly. Right click your desktop, and click Create Shortcut. Browse to putty.exe and create it. Then right click on the shortcut and go to Properties. Change the Target to this:

"C:\path\to\putty.exe" -load "Raspberry Pi"

 SSH from your Android phone

I installed a great app called ConnectBot. I tried a couple and this was the best. It’s open source and doesn’t have any ads. When you open it, just type in the address in the format “pi@:“. It’ll prompt you for your password.

Allow access from the internet

OK, I don’t recommend this. Everything up to now is in your own home network and is pretty much a walled garden, safe from bad people. Once you allow access from the internet, you’re potentially opening yourself up to hackers and I don’t have the knowledge to give proper security advice.

That said, I do know the first step is to change your password. Use the command passwd.

Next you need to open port 22 on your router, and set it to forward to your Raspberry Pi. This means that requests from the internet on that port will automatically go to the right place. On my Sky router the set up looks like this:

Next you will want to set the IP address of your Pi to be static, so that it doesn’t change when you reboot. In your router interface, check the list of attached devices and note your Pi’s MAC address:

Then add an entry to the list of reserved IP addresses:

Now you should be able to SSH into your Pi from your laptop (using PuTTY) or phone (using ConnectBot) and instead of entering the 192.168.0.x address, you can use your public broadband IP address.

Finally, if you don’t have a public static IP address (in other words, your ISP keeps changing your IP address) then how do you know what it is? You need to set up a DNS service on your Pi that will regularly check what the network public IP address is, and keep a domain name up to date. Then you can connect using a domain name instead of an IP and it’ll automatically resolve to the correct IP. There are lots of ways to do this – click here for some ideas.

Raspberry Pi media PC with XBMC

What to do with a £30 computer? I’ll get to writing some code for this thing after Christmas. For now, it’ll make a nice media PC. Here are all the details of what I went through to get this up and running.

You will need

  • Raspberry Pi
  • Power supply – a micro USB adapter (my samsung phone charger worked fine). Needs to be 5v and at least 700mA.
  • SD memory card. Make it 2GB or more. I bought this one.
  • USB keyboard (not strictly needed but it’ll be handy now and again)
  • Ethernet connection

Operating System

You could use Raspbian, OpenELEC or Raspbmc. They’re all Linux based and any one would do. Raspbian is the standard OS for the Pi, OpenELEC and Raspbmc will make running XBMC (XBox Media Center) easy. I went for Raspbmc. They’re all super easy to install. For Raspbmc, go here for the download. It just involves sticking the SD card into your laptop and running an installer to get the OS on to the card. Stick the card into your Pi, connect everything up, and voila.

It all seemed to work perfectly for me but keyboard input stopped working after about a minute, every time, and needed a reboot. This would be followed a few minutes later with the power going off. Now, if something goes wrong, and it will, you’ll need to start a trial and error process to narrow down what’s wrong. The Raspberry Pi forums are a great source of help and helped me realise that my power supply was dodgy. This quote sums it up:

This is often due to either (or both) a bad power supply (power supplied much below advertised one), power cable (someone compared a lot of them to wet rope, not ideal for conducting electricity), keyboard (some have power requirements much higher than the 100mA the Pi can supply, this is never listed in their specs, and can vary by production batch for off-brands), or mouse (ditto).

I switched it with my wife’s phone charger which worked perfectly (mine was from ebay – may have something to do with it). Trial and error is the key.

Next problem: audio didn’t work via the HDMI cable into my TV. Cue a change to the Raspberry Pi’s configuration file. This is a text file in the root of your SD card called config.txt containing a list of key-value pairs for configuring various options. I fixed my audio problem with a clue from this forum thread – adding these options to the config.txt:


Check this page for an explanation of those config options. I probably only needed the hdmi_drive option but I’m too lazy to test them individually.

Spot the Pi. Maybe a case is in order…

Now to remote control. You can use a lot of “one-for-all” type remotes, I wanted to use my phone. The official XBMC Remote doesn’t work with the latest XBMC (!) as the HTTP API has been deprecated and removed. Luckily, there are lots of better options available on the Android (and iOS) app stores. I used Yatse. Yatse is VERY slick – it detects the XBMC instance on your home network quickly and is easy to use.

Next up, BBC iPlayer and ITV player. There are lots of others available. The iPlayer app is actually better than the official one on my Blu-ray player as it gives live streaming too. To get it from your computer to the Pi, you need to create a shared folder that the Pi can see. I shared C:\xbmc with a new user called xbmc. You could just be lazy and share it with the ‘Everyone’ group. Copy the zip files in there. Next, in XBMC, go to System -> Settings -> Add-ons -> Install from zip file. Select your share from the list (you will need to create it there first and tell it to look at the C:\xbmc folder you created) and select the correct zip file. Then go back to the home screen and select Videos -> Add-ons. There they are!

Pi Store ideas

That’s XBMC up and running. It’s nice to have it up and running, but I imagine I’ll want to start tinkering with the Pi again. I’ll leave you with some ideas for development. Maybe some day these type of apps will end up on the brand new Pi Store!

Web server/downloader:

  • For an electricity worth about £4 a year the Pi is almost cost-free to run 24/7. It could be downloading all your stuff. It would be sweet to have a web interface where you could queue URLs or torrents or whatever and the Pi will download them whenever your connection isn’t busy.


  • It’d be nice to use smart phones as input devices for a game server running on a Pi and the TV. Like a multiplayer skiing game where the phone accelerometer allows you to steer.

Ideas for media pc/backup:

  • Use the Pi for backup. There’s an 8GB memory card which will be more than enough to back up documents at least. For a hardcore backup option, connect a USB hard drive to it.
  • Have a task running on the laptop which copies photos from My Pictures across to the Pi’s pictures folder.
  • App for our Android devices to automatically back up everything to the Pi on a regular basis while on the home WiFi network. Photos will then be browsable.
  • App for the Pi to backup everything on it to cloud storage.

Home automation:

  • Thermostat control. Wire in a tempertature sensor, use a relay for switching. Add a web server and a web app to allow remote access. I’m obsessive about the temperature in my house, so I would be able to chart it all.