Tiny projects
Some things I did which did not take very long.
The desk chair post, part 3
This is the driver's seat from a 1985 Toyota Supra.
I acquired two of them in almost perfect condition apart from a layer of storage dust. They came out of my mum's Supra when it was stripped for parts in the late 1990s. The seats were saved for a project, but that project ended up using different seats. Then they did not go into my mum's SJ410 (they're too big and it got Smart Roadster seats instead), and in the meantime they were kept in warm dry storage.
These seats are as comfortable as it is possible to be, because they are seats from a 1980s sports car. They're also fully adjustable. You get the standard adjustments like back tilt, headrest height/tilt (with a very satisfying clicky mechanism on the latter), and knee height. But you also get side bolster tightness adjustment; you can make it grip your sides more or less depending on your size and comfort. And then there is the absolute party trick, which is this squeezy inflator bulb.
This inflates the back rest, and then via these three buttons...
...you can let air out of three separate pads in the back rest, individually, for perfect comfort. It's overkill and I love it.
Separately, the gas lifting ram blew out in my desk chair at the day-job office. It's one of those nice Herman Miller chairs. The day-job was happy to fix or replace it for me. But this post starts with a Toyota Supra front seat so I think you can figure out where this is going.
This is the start of a subframe to adapt a Toyota Supra front seat to a desk chair swivel base. It's made of some 50x50x2mm steel angle with some dimples for weight saving, separated by some 20x20mmx3mm steel box section. It's much less heavy-duty than the previous one I made; that was all 50x25mm box section which was strong enough to lift a car with. This subframe should weigh a good deal less and be more than strong enough.
This time around I decided to make this completely reversible, preserving the original seat rails. Partly because the seat rails are riveted and inseparable from the seat, and partly because these seats are rare - only 31 of this Supra generation remain registered in the UK, compared with, e.g., 6,130 Jaguar E-types. I don't really plan on unbolting it and selling it any time soon, but I'd like to keep that option open.
Here's the subframe with some more shit welded onto it. On each of the corners are mounting points made of random bits of steel from my box of offcuts. They're all at weird angles and of different shapes, because they have to be. They match the shapes and angles of the mounting points of the Supra seat rails. On the front are some captive bolts, and on the rear mounting points are captive nuts. This makes assembly easier.
In the middle is the base plate for a swivel chair. I didn't make it; it's an off-the-shelf generic spare part. This plops on to a standard swivel chair base. You don't have to look too hard to see that this is off-centre. Remember I have designed this subframe around the seat rails; the rails on the Supra seats are slightly offset to one side. I want the seat itself to be centred, because the centre of the seat is where the weight will be.
Here is the subframe after fully committing to the base plate position, cleaning up with a wire brush, rounding off all the corners and cleaning up all the welds. There are also two little additions. One of them is this little retaining bracket to stop the gas ram actuation lever from dropping too far. Without this, it'll drop down to nearly a 90 degree angle at rest, and that would be annoying.
I could have solved that problem with a piece of string, but you know, I didn't.
The other addition was extending the aforementioned lever. Because of the width of the subframe and Supra seat as compared to a normal desk chair, the lever wasn't long enough to use comfortably. A long M8 bolt was unfortunate enough to be in my line of sight. I bent that through 90 degrees near one of the ends, chopped the original lever off and welded the bolt on to it.
This adapter subframe still looks like a bunch of random bits of metal stuck together. With a coat of Jenolite stain black it looks like a bunch of random bits welded together, but with some black paint on it.
I work for a massive company which you have almost certainly heard of. Being a massive company, for all I know it has someone whose sole job is looking for unfinished edges on things and writing reports about it. I can't fault that, and if that person exists I'd like to make their job easier. That is why I ensured there were no unfinished edges where I could reasonably touch them, either while using the chair or while transporting it.
I used this stuff designed to protect the edges of car doors, and which I would absolutely never use on a car because I can't see how it would go on without destroying the paint (rather defeating its purpose). It goes around tight corners really well, and grips nicely especially when squished a little with pliers. It does the job here and isn't going to fall off.
The threaded extension for the gas ram actuation lever allowed me to make a little threaded replacement knob.
That is just a random piece of steel tube from the offcuts box, with an M8 nut crammed into it and welded. That would make a decent knob by itself. But that tube happened to be exactly the right size for me to bond on...
...a transfer box gear lever knob from a 1979 Range Rover because of course I did.
:)
As said, the seat was in near-perfect condition, but it needed a clean. A vacuum cleaner was not enough.
I cleaned it with solvents (narrowly-targeted), two rounds of upholstery cleaner and then alcohol wipes to make it presentable enough for indoor use in a nice office.
Anyway that's how I ended up with the best desk chair in the office, or maybe the best desk chair in any office ever.
See you soon. :)
I made a cart for my free MIG welder
I built a welding cart. It was fun and it kept me out of trouble. It probably should have been my first project when I got the welder, and it wasn't. Maybe it could be yours though!
I built a welding cart because of this:
I know, the size and the branding looks like something from that special section of the booze shelves, targeted at a certain kind of drinker, whose promise is to get you smashed quicker and somewhat cheaper than the posher stuff. What it actually is, though, is a disposable Argon/CO2 gas canister for a MIG welder.
When I converted my free MIG welder to use a gas solenoid I bought a couple of these to prove the concept. I was told and I read, from people who have attempted to use them, that these disposable canisters are bollocks and a waste of money. But I thought I'd try my luck for a bit with these bottles, because telling me things does little good; I have to learn every lesson I learn the hard and stupid way. Once in about 50 times I end up with something that challenges the conventional wisdom; the rest of them I find that conventional wisdom is formed because of other people learning things the hard way so I don't have to.
Anyway, I found out that they are in fact bollocks and a waste of money. I ran the first of mine out very quickly in the middle of one of the P5's subprojects. That quickly soured me on the idea of continuing to buy these bottles, which of course escalated to a Side Quest.
This is a bottle of mostly the same Argon/CO2 gas. It is also a lot bigger, which is why I am not holding it in my hand; it has about 20 times the capacity of the disposable bottles (despite the disposable's extremely creative "110 litre" claim). This comes from Hobbyweld. When it runs out you get it filled it up again, rather than throwing it away. You never own the bottle (as with all bottles); Hobbyweld is responsible for maintenance and replacement.
Diversion: How much cheaper is it?
These bottles, as said, have the capacity of about 20 of the disposable ones. I'm using the "Original" (small) size. As I write this, disposable bottles are £15.80 from Weldequip; I'll use that cost. Each refill of the Hobbygas bottle costs about £75, but you would have spent £316 on the disposable bottles.
You have a one-time deposit to pay on the bottle, which is also £75, which eats into the savings you might make on your first Hobbygas bottle. That means:
- After you have exhausted your first reusable bottle, you have already saved £166.
- Every time after that, each Hobbygas bottle you use will save you £241.
This is hardly nickel-and-diming! It's a massive saving!
Alternatively put, even factoring in the deposit, your initial bottle will cost less than a third of the cost of the equivalent number of disposables. With that cost paid off, your next bottle will cost you a quarter as much. It's kind of a no-brainer if you don't mind the initial deposit.
None of this factors in transportation costs, because that's quite variable from person to person. Either you will buy the disposable bottles online, in which case there might be shipping costs, or you will have to go out and buy them, which costs money each time. The latter is fine if you're within walking distance of somewhere that sells them or if you're already there buying stuff, but it adds up if you're making a special trip. Refilling a Hobbygas bottle means taking one trip; in the case of me and the £600 Fiesta that'll cost about £3 and one lunch break.
I don't like that the small bottles run out so quickly. I do like that they are extremely portable; you can just cable tie them to the back of your machine or duct tape them to the top and you'll be fine. I did not want my welder to become a static rig. And that means I needed a cart that could hold the bottle and the machine.
Welcome to the point! You can trust me that I'll get there, eventually, sometimes.
Let's start with some wheels, because like any good hot rod build, it's all about having the right wheels.
I paid nothing for four of these. My old man scavenged them from somewhere or other (I know not to ask too many questions), and he gave them to me for the project. They'll do the job; I don't care much how they look. Most likely they ended up in a pile of things my old man scavenged stuff from because one of the brakes on the two braked wheels does not work anymore. That's fine, because I don't work on any surfaces smooth enough for lack of braking power to be an issue.
Two of these wheels - the ones at the gas cylinder end of the cart - needed to be welded such that they didn't pivot. That makes maneuvering a little more awkward, but I'll deal with it.
And that's something I will miss about flux core welding, which I used for almost the entirety of this project, because I ran out of gas. I didn't even bother to try and clean the grease out of the pivot; I just blasted it with flux core wire at full power on the welder and things stuck together (also set on fire briefly). Flux core is rather less fussy about cleanliness of surfaces.
Next is the initial version of the chassis.
It is made of four pieces of one-inch angle iron, because I usually have a few metres of that kicking around. There is also some 20mm angle iron underneath towards the front, to give a little more rigidity. That was an offcut from something else I made.
The welder will sit on top of the horizontal flanges of the angle iron. The horizontal flange at the rear, where the gas bottle will be, will be cut off. The inside width (from the vertical parts) is just a tiny bit more than the width of the welder; I wanted this to be a snug fit. The length is the length of the welder, plus the diameter of the bottle, minus one inside flange width of the angle iron.
The wheels attach by four little pieces of 2 inch angle iron, about 2 inches in length, with an M12 hole drilled through it.
Those get welded on to each of the corners, on the outside. That's to give it all a little extra stability.
Aaaand the rest of this is going to be a bit like
because I took a day off work with the goal of completing it. With about eight and a half hours to complete the whole thing I was not even stopping for food, let alone taking pictures often. But that's fine; it's not a tutorial, it's just some stuff I did that I thought was cool.
I decided that the gas bottle needs to sit slightly below the chassis. That is partly to lower the centre of gravity a little, making it more stable on the quite-tall wheels; I'll tell you the other reason later. So next was building a cradle for the gas bottle.
That was made out of some 2 inch by 1 inch box section with some 3mm plate on the bottom. The box section was out of some offcuts that I bought by the kilo from eBay for welding practice. The 3mm plate is something that I always like to have in the workshop, because it is useful for a lot of things. And now you can see why I welded the castors on this end shut; because the bottle is sitting below the chassis line, they would not have been able to pivot through 360 degrees anyway, and having wheels that can pivot some of the time would have been more annoying than the small impact on maneuverability.
Next up is a handle-like thing on the rear near the gas bottle. I'll call it the "pram handle".
This is only partly to give me something to push it around by. The bottom half is made from some more 2 inch by 1 inch box section, reinforced with another offcut of angle iron across the top. This is where the bottle will be strapped to. The cradle was tight enough on the bottle that it was rather stable by itself, but I like being on the safe side. In the end, I used a ratchet strap on the bottom (a dubious-quality one that I got for free; my gearbox was strapped to its shipping pallet with it).
The rest doesn't need to be very strong, so I used some 1mm-thick galvanised angle iron that I got for free off my brother, who saved it from a skip. The bits sticking out of the side are made from the same free angle iron. They are for wrapping cables around when the welder is stowed. It's neater than wrapping everything around the bottle.
A dry run shows that everything worked out more or less as I thought it would. You'll notice that there's a capping on the top of the pram handle now.
The most important part of this was to find out whether it would fit under the workbench in the workshop.
Of course it does, and now you know the other reason I made the cradle to drop the gas bottle slightly below the chassis.
:)
And that was the fabricobbling1 part done; I completed it on my day off, and then I needed a kebab unlike I have ever needed a kebab.
The rest moved into evenings after work. I fitted the regulator, which just screws in; no surprises here.
Because I needed to make the pipework into the welder longer, this gave me the opportunity to upgrade it. The old pipe worked fine, but it had an overall diameter of about 9mm. It is hard to get hose clamps that work with tubing this small; my brother fixed my initial leaks with the "piece of copper wire" expedient:
I tried a couple of clips that nominally would work down to 9mm, and they just didn't work. Thicker-walled tubing meant a larger outside diameter, which meant that I could use proper Jubilee clips. The thicker walls also mean it should be harder to crush, which might be significant given that much more of it is exposed than before. The extra thickness made it rather tight on the cooling fan...
...but that's another way of spelling "it still misses".
A lot of tidying up of welds and a couple of coats of Jenolite satin black paint made it look less like a bunch of random bits of steel stuck together, which it is, and more like a proper welding cart, which it also is.
Finally, with everything in place, the gas feed hose neatly routed (enough), and the cables all stowed, I have a welding cart that I'm pretty proud of. If hobby welders had dreams, this little Clarke that I got for free is living them.
And so, about a week later, that's the end of the side quest. That means I can get to the job I actually wanted to do when my MIG welder's gas ran out.
See you next time. :)
How much did it all cost?
I don't actually know! And it's not easy to work it out, either.
I can't price the gas bottle and its regulator into it. I built the cart because I wanted to use a big reusable gas bottle, not the other way around.
The angle iron and 3mm steel plate is stuff I had already. It wasn't exactly free, but I didn't really go to any expenses here either. When I visit my local metal stockist I usually pick up far more than I need for whatever project I am working on, because angle iron and steel plate always comes in handy.
The box section I used had a similar story. I bought 25 kilos of random offcuts for welding practice, and it costed me £32 shipped. I've used them for all sorts of things over the last year or so; I still have lots of it left after completing this.
My castors were free. I think if you couldn't find a place to scavenge some, you could get something similar new for about £20. All of the bits made from thin galvanised angle section were free too; my brother knows to save this sort of thing if he gets the opportunity.
So like, you can read that as "basically free, but only if you are me in very specific ways", and that isn't an entirely uncharitable reading. But the fun of this sort of project is that there's not really a wrong way to make it! If I only had bits of box section and steel plate, I'd have found a way to make it with box section and steel plate. If I didn't have free thin galvanised angle iron, but did have some tube, I'd have made those parts with tube. If I didn't have really big thick bits of angle iron to bolt the wheels to, I would have made those with steel plate and gussets. Scavenge whatever you can and make it fully yours!
-
A phrase I have stolen from Sarah -n- Tuned. ↩︎
I modified my welder, didn't die
This is my MIG welder.
I wrote about it briefly when talking about the time I lost the plot.
It's a Clarke 151 EN, which was a cheap welder when it was new (about £200 in 2013). It is even cheaper for me, because I got it for free from my brother last year. He bought it and never used it much, and decided it needed a better home, so he gave it to me. As for you, you could probably pick up a similar machine for less than a hundred quid these days if you look around. If you find one it'll probably be in perfect condition, because people who use welders to the death tend to buy expensive professional machines, and people who buy hobby welders like this tend to use them very occasionally.
If you hadn't noticed from the photo above (and also if you had), I modified mine to use a Euro torch. I did this out of frustration with the availability and quality of consumables for the Clarke torch. Euro torches all use the same generic consumables, so they are easy to find, and it is easy to find high-quality ones by buying a known brand rather than CSQQXV or whatever on Amazon.
What I didn't do was fit a gas solenoid. Flux core (gasless) welding was fine for what I was doing, and it didn't take me long to get the hang of it, so I pulled out the remains of the gas feed and called it finished, and used it for about nine months with no problems.
And it still hasn't given me any problems! But one of the characteristics of flux core wire is that it loves heat. You need to run about twice the power for any given thickness of material as you would when welding with gas-shielded solid-core wire (which I like to call gasful welding, because that is fewer words and I find it funny). That was fine for what I was doing.
But the next subproject of my Rover P5 will require welding things onto a very fancy axle housing.
A millimetre or two of heat distortion on the axle housing would ruin the housing, probably permanently, and I (literally) can't afford that to happen. Thus I need to do the same thing with less heat, and so I needed to convert this welder back to gasful operation.
And even more context here, because like cats, you can never have too many contexts.
In most cheap MIG welders, shield gas flow to the nozzle is controlled by a valve in the torch, which looks like this:
The gas ordinarily fills the pipework all the way from the bottle up to this valve. When you press the trigger, the trigger directly (mechanically) opens a valve which lets the gas through. Simple.
On a Euro torch, there is no such mechanism. Instead, welding machines with Euro torches will have a solenoid in the welding machine itself controlled electrically; when you press the trigger, the solenoid is turned on and gas flows into the torch. So to have a Euro torch, you need to install a solenoid somewhere. Which is what I did!
I rather wish I had written a post like this about fitting the Euro torch itself back in June of 2024. I didn't, because I was in a rush, because I needed a working welder on a short timeline. Instead, I watched a YouTube video.
That went into lots of detail about the fitting of the torch itself, and if you are doing the conversion yourself you should watch it. But it was, to my mind, rather light on the details of installing and wiring the solenoid. That might scare some people off, because that means going into the "spicy" side of the welder with the voltages that can kill you instantly. It scared me until I actually did it.
That's why I'm documenting it here: to show you exactly what to do, to demonstrate that it is not scary, and also because I like the sound of my own text.
Here's the things you'll need:
- A gas solenoid
- Some angle iron or other random bits steel you have kicking around for making a tiny bracket, and (probably) two M4 screws
- Three 6.3mm female spade connectors
- Two 6.3mm piggyback spade connectors
- One M4 ring connector
- Cable ties
- Wire, in brown, blue, and yellow/green colours
- 6mm (ID) flexible plastic tubing
- At least two and ideally four hose clips of the same outside diameter as your plastic tubing
- A grommet
- (Probably) A 3/8 BSP male to 6mm hose tail fitting
I'll tell you more details about the "why" of these things as we go.
First, you'll want a gas solenoid, obviously. I bought mine from Weldequip. I could have got one cheaper by getting something from an Amazon or eBay non-brand, but I would rather buy electrical things of non-trivial complexity that could kill you if they go wrong from a company with a reputation to maintain. I use their picture of their solenoid below, because I didn't think to take one of mine.
For the Clarke 151, you will want an AC 220/230V 50/60hz solenoid. This is probably the case for other hobby welders, but you'd best check this yourself.
And on the subject of voltages, we're entering the spicy side of the welder here, so please observe the following safety precautions:
- Don't get killed
- Yep
Of course you know to open the welder with the mains power turned OFF at the plug to the welder, not just turned off on the orange switch on the front of the welder. Before touching anything inside the welder, I prefer to turn off the welder at the plug, then unplug the welder entirely. You might think that one of these steps is redundant; electrically speaking, you would of course be correct. But for me, unplugging the machine is an active step that is difficult to forget; this also means I have to forget two things for there to be any voltage at the machine, rather than one.
Anyway, unless your solenoid comes with a bracket, you'll need to make one.
I made mine with a little offcut of thin angle iron with a captive M6 bolt welded onto it. The bracket is attached to the solenoid with two M4 screws (using holes that existed in the solenoid for this purpose). There is already a hole in the divider for attaching something in roughly the right place for a solenoid, but it's too small for an M6, so I bored it out with a 6mm drill bit.
Whatever you do for this bracket, remember to obey the direction of gas flow! This is indicated with an arrow on the body of the solenoid. Gas solenoids only control gas flow in one direction, and they won't work if you reverse the flow. The arrow should of course point towards the front of your machine, because that is where the gas will be travelling.
Wire up the earth
Our first electrical connection will be the earth (also known as ground). Of the three prongs on your solenoid, you can tell the earth terminal in one of two ways. First, the earth prong will be marked with the earth symbol, which is this:
If no prong has this marking, your solenoid is dangerous shit that needs to be thrown in the bin; get one from Weldequip instead. But also, of the three prongs, one of them will be oriented in a different direction, and that is usually the one that will be earth. You can see that in the photo of the solenoid above; the power prongs are angled horizontally, and the earth is vertical.
You will want a yellow-green wire for this. It will need a 6.3mm spade terminal on one end and an M4 ring terminal on the other. Attach the spade terminal to your solenoid, then run the wire along the body of the welder (not the shortest possible route) down to your earth point on the bottom plate of the welder, and once you know the wire's length, cut it and crimp on the M4 ring terminal, and bolt it to the earth point. The earth point looks like this:
I like using the correct-coloured wires, and you should too. Of course, electrically it makes no difference. And of course you, right now, are smart enough to look at the thing you just wired up and know what does what. But you in future might look at the wrong-coloured wires and misread it. The person you sell or give your welder to in the future might do the same. Use the correct colours to be nice to future-you and others. :)
When attaching wires (and other things) to the body of the welder, I used these self-adhesive cable tie mounts, because I had a bunch of them left over from wiring the workshop. They're like £2 a pack from B&Q.
Wire up the power
The next two wires will piggyback off jumpers J1 and J2 on the main board on the front of the welder. I've indicated them below.
Obviously each one already has a connector going to it. So what you will need is a piggyback connector.
This is a connector which slides over a male spade terminal, and provides another male spade terminal on the other end. That'll allow you to connect two spade connectors to a single male spade terminal. Disconnect the existing connector from the J1 terminal from the board. Crimp a piggyback connector onto a wire of the correct colour (blue), push the terminal onto the connector on the board, and then push the original connector on to the piggyback terminal. Repeat this but with J2 and brown wire.
These will go back to the remaining two terminals on your solenoid. It should not matter which wire goes to which of the remaining terminals; solenoids should work the same regardless of polarity. It's up to you how you route them but it's best to follow the path of existing wiring as much as you can.
Test the solenoid
At this point your solenoid is electrically connected. It would probably be wise to test it at this point. Plug in your machine and turn it on, pull the trigger of your torch. You should be able to hear the solenoid clicking when you pull it, and clicking again when you release it.
Watch the front board around the area of your piggyback connectors; if you see sparks then unplug your machine, re-seat the connectors, and try again.
Turn off and unplug your machine after testing.
Hook up the gas feed
Now for the relatively safe bit.
I mentioned flexible plastic tubing with a 6mm internal diameter. I used PVC tubing for mine. Silicone tubing is rather more heat-resistant than PVC, but PVC is somewhat stiffer for any given wall thickness, so it better resists folding when going around tight bends. I chose PVC because of this; I don't think heat will be a problem.
This should be 6mm ID, because that is the standard diameter for the gas port on a Euro torch socket. It is also likely the same as the inlet and outlet of your solenoid. If you are using disposable gas bottles (as I am to prove the concept; I'll move on to the big refillable bottles later) then you likely have some tiny push-in fitting on your regulator. Depending on the quality of your regulator, you might be able to unscrew the outlet port of the regulator and screw in one of these...
...which is a 1/8 BSP to 6mm hose tail. If your regulator has no provision for that, you'll have to get some step-up adapter in the middle of your hose.
From your solenoid, you'll want to run your hose out the back of the welding machine so that it can meet your gas bottle. I drilled a hole just to the left of the one that exists (which could not be bored out larger because it's right next to the middle dividing plate). I put a grommet in it when routing the hose, so it doesn't cut the hose. I didn't think deburring the hole would be sufficient guarantee against that.
The downside of locating it here is that this is where the gas bottle wants to sit, so the bottle has to be strapped on at a weird angle. I didn't hear the bottle complaining about this, and anyway it's under my workbench so I never see it.
Exiting here is really tight on the cooling fan...
...but "it's tight" is another way to spell "it misses"; the only way this could foul is if some of the external part of the hose was pushed back into the machine, and the grommet should stop that from happening.
In future, when I move to the bigger refillable bottles, I might route the air hose into the cold side of the welder and out of the body of the welder as far over to the edge of the machine as I can. We'll see.
You'll see that I used cable ties for attaching the gas hose to the solenoid, which is what I used anywhere else the hose needed attaching to something else. This turned out to be inadequate for the section from the gas bottle to the solenoid. It leaked. After a failed trip to my local motor factor to obtain some proper clips for this, my brother came up with the idea of stripping some of the single-core wire I used for the wiring and twisting it around the hose. It's an expedient field repair (bodge) he learned on his intercontinental road trips.
It's crude, but it works! I only needed to do this for the section from the bottle to the solenoid. It's not necessary for the rest. That's because any time there is gas in the rest of the pipework, it will be flowing to your torch, and that is the path of least resistance vs leaking. And that's why I said in the list of ingredients that you'll "at least two" proper cable clips, because you only actually need two.
I'll soon replace all of this with proper 8mm hose clips for consistency, but this works fine for now.
Anyway, the final task is to run the hose from the output of the solenoid into the gas port of your Euro torch socket. You can do this how you like. You could make a hole in the spicy-side divider immediately after the solenoid and make most of its route on the cold side. I choose to route as much as I could along the top of the spicy side of the welder, and exit through the bottom of the wire feed box. I hope you can see what I mean by looking at the top of this photo of the spicy side....
...and then at this one near the gas port on the Euro socket.
That's it!
Anyway
So like, I had no clue what I was doing with any of this and somehow made it work. The reason I did this, as said, is because I need to weld stuff to a fancy new axle housing. When I bought my axle housing, I also bought a short section of exactly the same tubing.
I got this section for practice to work out the correct settings on my welder before doing the real thing, and that's why I spent much of a Saturday turning it into the Frankentube of Wat.
By the end of it, I was pretty sure I know what to do, and it didn't take me long to get almost-neat-looking welds with the gasful setup.
And that, of course, is the next chapter of the P5 saga entirely given away, which means you won't need to read that post! Two articles for the price of one! See you next time.
Another tiny weekend project
I like my workshop's speaker.
It is a Bose SoundLink Mini II. It's small and it makes plenty enough noise to fill the three-by-six metre metal shed. It also isn't smartshit which requires an Internet connection for imaginary reasons; it plays the music I want it to play, and that's all.
What it also was, though, was sitting on top of the toolbox. The toolbox has a hinged lid, so if I wanted to open it I would have to move the speaker first. That takes a whole five seconds, and that will not do. Instead, I decided I needed to attach it somewhere out of the way. And that is how I got sidetracked from making parts for the Rover P5, which is what I was actually meant to be doing that day!
First I chopped up some C-section galvanised steel that I got off my brother for free, folded over and welded the ends to close them (this makes it more rigid and also less pointy after filing down the joins). And then a magnetic welding torch holder made the mistake of getting into my line of sight.
That got sacrificed because I already have one of these in use. As I recall I have two because they came in a pack of two, not because I need two of them. And better than a speaker shelf is a speaker shelf that I could attach anywhere in the shed!
I welded those two things together with the free MIG welder, and tested it on the wall to see if there was any vibration from the assembly.
There wasn't, partly because the Bose speaker has a little rubber pad on the bottom which does a good job of dampening the frequencies that would allow that to happen, and partly because everything was tightly welded together.
With the concept validated, I welded on some little upstands at the front and the sides, made of whatever random little off-cuts I had, so that the speaker could not easily be knocked off the shelf.
Though this is indoors, I wanted to paint it so that it looked nice. I used a Jenolite colour called "Ultramarine Blue Gloss". Being a Jenolite Directorust paint, it's not particularly fussy about a perfect surface. I first used it on an old water tank I converted into an outdoor workbench/cupboard...
...but that's another story. In this story is the fact it's a nice colour that looks good on things in a workshop. With that painted rather imperfectly (but good enough), and my speaker given a rather overdue clean...
...I have a tiny, neat-looking shelf that I can attach anywhere in the workshop. And that's how I spent several hours to save the five seconds or so it took to move my speaker from the top of the toolbox! But it was fun; the best thing about having a workshop is using it to make more things to have in your workshop. :)
I migrated this site to Hugo
On and off over the last few weeks I have been migrating this site from a Django app written by me to a static site generator called Hugo. If you don't recognise at least one of the technical words in the previous sentence, then you won't find anything interesting to read here. But if you find anything that is broken on here, it's probably something I broke during the migration, and you might want to let me know.
Migration wasn't hard
I had to move all my old content into the new site while not breaking any links. I used Markdown for all the content in the old Django app (in case I wanted to do something like this some day), so there was not much conversion required there. I had my own special snowflake markup for handling images and YouTube videos, which required a little work to convert.
The core of the migration was 161 lines of Python code (and then another 20 lines of throwaway Python to fix my breaking all the OpenGraph images). If I had entire days to spend on it and an unlimited attention span I might have finished the exporter in a day. I didn't have that, because I have a day job and a stupid car project and a mind that says well I'm going to have to Google this thought unrelated to any particular thing I am doing, but it was much more work thinking about than doing.
The slightly harder part was learning what I needed to learn about Hugo and doing a basic theme for it, but all of that might have been only a couple of long days - if, again, I had been focused on it.
After the migration, I rather wish I had used Hugo from the start. This site was a Django app, because Django is my day job and it is what I know; I figured I would more time fiddling with Hugo (or some other static site generator) than I would writing my own Django app. But I definitely spent far more time writing tests for my Django app than I did migrating this to Hugo!
Authoring is nicer
I like writing things in my favourite text editor. It seems a more obvious way to write, because that is what I do with most of the rest of my time at a computer. Actually, that was partly the way I was writing already; I was writing posts in a text editor, then copy-pasting into the Django admin interface when I was finished. And if I needed to do non-trivial edits I was copy-pasting it into my text editor, editing it, and then pasting it back.
This is not because Django's admin interface is bad. Although it wins no beauty contests, it's rather better than most web-based interfaces, because text boxes in the Django admin behave as text boxes have in your operating system for about 30 years, rather than the fallout of React meeting some UX designer's reinvention of "type text into a computer". But to those people for whom "favourite text editor" is a valid sequence of words, writing text into a web browser is not as natural as working on files in one's favourite text editor.
As with all static site generators, Hugo's master copy is just a bunch of text files. A bunch of text files can be version controlled with Git, which is also what I do with everything else I write at a computer. That, too, is what I do with anything else I write on a computer, and so it's a better way of working for me.
It's much less maintenance
This is the real reason for the upgrade; I wanted less work for myself in the long run. As said, Django is what I know. I like it a lot! But I have little interest in maintaining a Django app when I am not being paid for it.
It's easier to secure a static site than it is to secure a Django app. My web server is just serving some files from disk; it's nothing the unattended upgrades of my OS can't handle. Being a responsible citizen requires that I kept the various non-OS dependencies of a Django app up to date. That became a chore I didn't want, and if I'm honest I ended up getting Dependabot email alert blindness.
OS version updates were a source of dread. Serving static files does not change much, if at all, between major operating system versions. Serving a Django app does. That requires, invariably, a major Python version update and a PostgreSQL update as well.
Backups are easier
My old site was backed up multiple ways. Snapshots of the entire virtual machine (what Digital Ocean calls "droplets") were made daily, which cost money. That they would restore to a usable site was a matter of faith. I also periodically pulled the database and media files (such as images) to my local machine, which in turn is backed up elsewhere.
The entirety of the source code of this site is in a Git repository. That includes the theme, and all of the site's text and images. Simply by virtue of how this is deployed, that makes at least three up-to-date copies of the site in normal circumstances: one on my computer, one on GitHub, and one on the server. I'm getting those "for free", but then my local machine gets backed up, which makes four.
I also have the statically-linked Hugo binary checked in to the repo. This gives me some faith that, so long as I am on an x86-64 Linux machine, I will always be able to rebuild the entire site from source in a few seconds and re-deploy to a new server very quickly. This means I am more likely to have backups that can be restored.
Dear God it's fast
Really really fast.
It should load just about instantly on any device and any Internet connection that is likely to be in use. The technical people out there will say "of course it does", because of course it does; it's serving small files from a solid state drive.
The old site wasn't slow. I know how to make Django sites fast, and I did. But, without adding more piles of caching on top, it will never be as fast as directly serving files from a disk.
I decided to make that even faster, by inlining all of the CSS for the site on every page. It adds less than two kilobytes per page and saves a render-blocking HTTP request. Fast internet connections won't see this difference, but slow mobile ones will. I also added some magic tricks which make every link within this site to be prefetched, so once you actually click on it it'll load even faster.
"Faster" - of the "just serving file from disk kind" - also means I need fewer computing resources to serve it, which means...
It's slightly cheaper
...I could run this on the same host as a bunch of other static sites. Previously it was running on its own virtual server, because I figured a Django app would need it. Virtual servers are so cheap these days that they may as well give them away with Happy Meals, but that's still a few quid saved. I could reduce that to near-zero if I used S3, and actual zero if I used GitHub Pages or some other free host, but I like having a server I control.
Arguably the reason the Django app was maintenance in the first place was because I like having servers, rather than some Docker container running in some platform-as-a-service that I don't entirely understand. As it was, when it was time to upgrade the operating system on my server, it was also time to upgrade the database along with it, and also the Python version. The trick here is that when I upgraded the OS on my desktop I had to do the same thing on the server, and vice-versa. That could have been made easier by using a managed database, and a Dockerised Python. If I was doing this as a job I probably would. For something I am having fun with I do not like that loss of control.
I did a bunch of other things while I was there
I have some JavaScript on this site. It's used to handle the privacy-respecting, no-script-friendly YouTube embeds, such as this one. It was originally written in Vue, version 2. That version of Vue went out of support a while ago.
I didn't really want to maintain a JavaScript build system anymore. It felt like effort, and it turned out I could replace it with not many more lines of plain JavaScript than it was in Vue code; it's so small (like 500 bytes gzipped) that I didn't even bother minifying it. I can count on plain JS working in browsers for more-or-less ever. I can't count on a JS build system still working on my machine next year, so I do not feel much like maintaining one for a personal project. This fits the plan of making less long-term work for myself.
Not installing anything from NPM means I don't have any linters anymore. I don't feel good about this, but I feel far worse about the utterly insane dependency tree of ESLint and stylelint, and only slightly less bad about some of the (non-dependency) insanities of JSLint.
I did a minor visual revamp. The home page now lists every post, which means you can find any post by using Ctrl+F, and also go to all of the categories immediately. I also added support for high-contrast rendering, for those who have that preference set in their operating system. And the whole site now uses a monospace font, because I are programmer.
I could have done these things earlier, but I didn't. I didn't consider them meaningful enough differences to be worth doing by themselves. A rewrite of the site seemed like a good time to do that.
Hugo is really good
I like Hugo. Actually I tend to like anything that comes out of the Go programming community; it tends towards generating high-quality software.
I looked into Hugo in the past, and liked it a bit. As I recall its templating system was not as good back whenever that was as it is now. It, and I may be misremembering this, had nothing that would allow one to override blocks of a base template; instead, it only allowed including other templates, which is not slightly the same thing. That made it feel nerfed compared to Django or Jinja2 templates. Now that it supports extending from and overriding blocks of other templates I like it a lot.
Hugo is wonderfully documented and every maintainer should aspire to writing documentation this comprehensive.
Hugo builds to a standalone executable, which should continue to work on any of my Linux boxes into the indefinite future; for as long as I have a libc6 x86-64 Linux system, I'll be able to use the same Hugo binary I'm using today. I checked in to my repo with LFS in case it disappears.
Anyway
It all works! Please let me know if you find something broken.
A tiny Saturday project
I found myself at a rare loose end this weekend, fuelled by waiting for things to show up for the next stage of the Rover P5. And then I was gently reminded of something I put on the project pile.
This is a sign which I am not tall enough to photograph in full on the workbench, because it is quite long. It's a reproduction sign for Middleton Towers railway station. That's a station near me which is being restored. I've helped out down there a couple of times. I show up in a video wherein I am doing that.
Last time I went there, this sign was there and we were trying to figure out how it could be mounted. Though it had some plastic pegs on the back (presumably for mounting purposes), I worked out that a metal bracket would broaden the options for mounting it. I volunteered to make one, and then I uttered the words "I'll do that next weekend", a magic spell which makes things disappear forever.
Anyway, that is why I spent my Saturday chopping up some random bits of galvanised steel I got for free off my brother, and sticking them together with a MIG welder.
Welding galvanised steel is bad for you! Really bad! But don't worry, I used the proper safety equipment and procedures. I held my breath for a while and then blew on it a bit when I was done to move the fumes away.
I used the gasless MIG for most of this, because the temperamental gasful one was not very happy. Flux core welding doesn't work well with thin stuff like this 1mm thick steel, because flux core really likes heat and thin steel does not like heat. But, it did the job and I'm kind of used to it now.
The plastic pegs later had holes drilled through them to accept R-clips; that'll be more than sufficient to hold it. With the welds cleaned up and some Jenolite Directorust gunmetal grey on it, it looks pretty alright. :)
And that's that!
Update (2025-02-09): here it is :)
The desk chair post, part 2
This was my desk chair.
I wrote about it before.
When I wrote about it before, I mentioned my concern that the much sturdier castors I fitted might end up breaking the no-metal-in-particular that cheap desk chairs swivel bases are made from. It broke a few months later.
Rather than fish another desk chair from a skip, I bought an entire swivel base assembly from Amazon for about £80. It turns out that not just the castors, but these entire assemblies are largely interchangeable between desk chairs. This thought had not occurred to me before! So, I did not have to "un-weld" the baseplate from the subframe as I had every previous time a swivel base had exploded on me. Just plop the old base plate and subframe on top of this...
...and my desk chair was fixed again. Simple!!
But, while I'm there...
Previously, I wrote:
I showed a photo of it to someone earlier today and they said "it needs arm rests". It doesn't need arm rests, but the fact someone thinks it needs arm rests means that it isn't the unquestioned best desk chair in the world.
It still did not have arm rests, so this time around I decided it was going to have arm rests. I had a pair of arm rests, salvaged from the previous donor chair.
Let's make some brackets! This time I bought (rather than salvaged) some steel for the purpose, for about £20. I still have some left over.
That turned into some smaller lengths of steel...
...which, via some dubious MIG welding and Jenolite satin black paint, turned into two slightly-wonky but almost presentable brackets for the arm rests.
Easy! (Just kidding, that took forever, because I am not all that good at this.)
As everything was dismantled (so that I could make a means to fix these brackets to the subframe), I figured I would give the subframe a cleanup and a coat of paint. It looked like this, resplendent in its original brown paint and marker pen assembly-guide scribbles from the first time I built it.
This subframe is an adapter plate between the car seat and the desk chair swivel base. It is almost always out of sight, so it didn't matter what it looked like. Still, I would never tidy it up it if I didn't do it now (the proof of this is that it has been unpainted for over a decade). This should have been just a coat of paint, but while I'm there...
...I was never very happy with those unfinished ends, either. They've never bitten me, and I've never seen them so I didn't mind them being ugly, but I always had the thought in my mind that they needed to be capped with something. This was as good a time as any to do it. So, some offcuts, some more dubious MIG welding, and some over-aggressive linishing to make the MIG welding look less dubious...
...and they look a bit better, if you don't really look at them. Which I won't! Because I'm sitting above them.
Still, the subframe that I never see now looks a lot more presentable. And when everything is bolted together...
...it has arm rests! Which was far more effort than it was actually worth, given that it never really needed arm rests. Especially when I came to use it and realised when setting the height for my arm rests I hadn't considered whether that height would allow it to fit under my desk...which meant chopping about 70mm out of the brackets the day after I assembled it all. But still, arm rests! And that, if nobody issues me some other challenge that makes me over-solve another problem that doesn't exist, should make it the unquestioned best desk chair in the world.
The desk chair post
This is my desk chair.
It is a front seat from a 1990 Vauxhall Astra GTE, bolted to a subframe made from steel box section scavenged from some industrial shelving, welded to a swivel-chair base that I found in a skip. I've had some variant of it for over a decade, but I had cause to re-engineer it recently, so I am posting about it now. It's extremely comfortable! It is more supportive than any other chair I have used, including chairs that look like car seats, and including chairs that cost upwards of a grand.
There are two of these desk chairs in existence! My brother was dismantling an Astra GTE that he purchased for an engine donor (MOT-failure GTEs were not worth much more than scrap weight back then, and that is a memory from the "painful to think about" department, next to the working two-door Range Rover I helped dismantle...). I got the seat for free on the condition that I made the other front seat into a desk chair for him as well. That other chair is still in use by a kid in the family as a gamer chair, and that makes me happy.
It has been rebuilt several times. This is because office swivel chairs are made of no material in particular, especially the cheap kind that gets thrown into a skip when it becomes too ugly to use. Usually this does not matter, because the sitting part of a swivel chair is also made of no material in particular, so the system in its entirety has plenty of flex. The Astra seat has a lot of extra weight, and there is no flex in the over-engineered subframe, so swivel chair bases tend to break.
This is what the subframe looks like.
It's not pretty, but you can't see it when you're sitting on it. If you look closely, you can see where I cut out a reinforcing section in the middle in the latest incarnation. This is in a probably-vain attempt to try and un-engineer a bit more rigidity out of the frame. I might try speed holes next.
I had a stroke of luck last time this broke a swivel-chair base. The base collapsed, and literally minutes later I saw my neighbour throwing a shitty-looking desk chair into a skip. I'll have some of that, thank you.
This time around, I decided to give the Astra seat a deep clean after reassembling the chair. I did not know how badly it needed one. This little thing is a game changer:
It's a brush attachment for a drill, which you can buy for about £15 on Amazon as part of a set. It demolishes baked-in cat fluff and everything else on a seat that a vacuum cleaner won't touch. I was impressed.
Everything mentioned so far, I acquired for free. This time around, I have got some improved castors for it, to replace the usual scratchy-sounding castors that you get on cheap desk chairs.
These have roller bearings, seem to be made of actual metal, and its wheels are made of a material not entirely unlike that of the small bouncy balls we had as kids that could be launched at the floor and which rebounded to the height of a four-storey building. They roll very nicely. They're also a lot stronger than flimsy desk chair castors. This isn't an unqualified good. See also what I wrote about the subframe earlier; they don't flex, which means they transfer forces elsewhere. That might cause the swivel base to break earlier than it would otherwise. We'll see!
You may have noticed that it does not have arm rests. You are not the first. I showed a photo of it to someone earlier today and they said "it needs arm rests". It doesn't need arm rests, but the fact someone thinks it needs arm rests means that it isn't the unquestioned best desk chair in the world. So maybe that is a project for another day...