Nov 17

Finishing experiment

All the major work is done now, everything’s glued up (though the last of the oak boxes is still curing really) and the prep finishing is either done or in train…

The poplar boxes have all had a coat of sanding sealer here (again, just blonde shellac cut down from a 2# cut to a half-pound cut), and the outer box of one has been test-finished with red milk paint (more on that in a moment). The oak boxes have all been given a coat of the oak tea (with surfactant) and they got another early this morning. The poplar drawer front on the oak-and-poplar box got a coat of sanding sealer.
The oak-and-poplar pencil box, the sapele boxes and the ash boxes all got another coat of danish oil and after the excess was wiped off and it had had a while to set up, they all got a coat of shellac (blond 2# shellac for the ash boxes; garnet #2 shellac for the sapele and the oak&poplar boxes). Tonight they’ll get a quick light sanding from worn 240grit paper and we’ll see if they need another coat or if I’ll go straight to poly (I wouldn’t for furniture, but these are quickly-made trinkets…).

Milk paint is neat stuff, at least in how it’s made up – you buy the powder (this is Causeway Sunset by The Crafty Bird in case anyone’s interested, I’ve had it a while and wanted to use it on something but never had the chance till now), and then you make it up on the fly as you need it, just mixing it with an equal amount of water (or in this case, a little less water to powder for a thicker mix). Make it up in a paper cup, apply from that cup, discard that cup. No half-full small tins of latex with the painted-on lids and the dribbles clogging up the shed for years before you finally give in and throw them out.

The downside is that the colours aren’t as bright as you get with latex-based paints, but some people prefer pastels and earthy shades. And even if you don’t, they can still be kindof striking:

Haven’t messed with colour enhance filters here, I promise. There’s white balancing and that’s all (and the white wall and the parchment paper give a decent white sample for the filter to latch onto) so the colour’s pretty true – it really is that jarring when wet. It dries to a chalky light pink, but when you put a topcoat on it, it darkens up again. We’ll see how well it copes, it got a spray of poly this morning and I think it’ll need another tonight.

And the branding is done as well 😀
There’s still felt to glue on, but that’s the very last step, done over the finish. Not sure if this’ll make it for Friday morning, but it might for Friday afternoon…

Nov 17

Smells like respiratory irritants…

I seriously need a better sanding arrangement. Roll on black friday.

Not to mention, the goggles could be more comfortable.

But at least the boxes have seen progress…

About a third were done with shaping-level sanding, about another third just had to have drawer pulls fitted, and the remaining third were still being assembled or needed serious shaping (meaning another belt sander session).

Some sorting, some test fitting, and some glueing up later and then I left everything overnight to cure. The following day I found that one of the oak boxes had had a side slip during glue-up, so it needs more shaping on the belt sander, and two of the other boxes are in the same boat; the dremel came out to do some tweaking whereupon I discovered that my sanding mandrel was missing, presumed lost 🙁 Need to go pay five times the fair price for one now on the way home from work today. Gah.

But the rest of the glueups went well, several of the boxes were hand-sanded up to 240 grit and then I started on the finishing for some of them with danish oil for the ash and sapele boxes:

Gotta love the way that colour comes out…

The oak and poplar pencilbox got the danish oil as well; this one would be too hard to ebonise the oak part for so we’ll just go with the oil I think.

The small sapele box got finished while waiting on its drawer. Too little time to wait and do it all at once.

The ash is nice, but it really can’t hold up to the sapele. After the danish oil, I’ll be giving this a few coats of shellac and then some poly over the top for toughness and some paste wax and buffing for shine. The sapele and the oak&poplar will get something similar (but the ash and sapele get blond shellac while the oak&polar gets garnet or button shellac).

The other poplar boxes will just get a sanding sealer coat (aka blond shellac mixed down from a 2-pound cut to a 1/2-pound cut), then a light sanding with fine paper and then milk paint over that and then poly varnish and a wax buffing.

The oak boxes (including this oak and poplar one) will see the oak ebonised as before, with one small change – that foam in the oak shavings tea is washing-up liquid acting as a surfactant to spread the tea deeper into the wood grain (and I’ll do the same for the iron solution). Nice tip from custard on the UK woodworking forum, that.

That oak and poplar box might turn out interesting – the “drawer pull” is a flush extension of the box, and it’ll get the sanding sealer + milk paint treatment of the other poplar boxes; the contrast between the black of the ebonised oak and the colour of the milk paint might be interesting.

And that’s where I left it. After work today, there’s some shaping sanding to do on the belt sander, some finer hand sanding and then we’re into nothing but finishing because these have to be ready by Friday morning…

And then on Friday, it’s off to the timber yard to get some more oak and walnut (and maybe something else if they have anything interesting to hand). And after that, black friday sales and after talking to the guys using them, I think I won’t be getting one of the Record BDS150 sanders:

Which looked okay but which apparently have a disk that’s unusably small (and a faff to change the paper on), and a table that’s just a bit dodgy to use and set up. Instead, it looks more like getting one of the Triton oscillating belt/bobbin sanders:

It’s a clone of the original Rigid:

But the clones are smaller in footprint (several other makers from Grizzly to Rutlands to Clarke all make the same thing in different colours). You lose the mitre slot, but on the plus side, the clones would actually fit through the door of the shed, which is a positive. I’ll have to build a quick 2×4 storage stand to put the bandsaw on and the sander under though, there’s no room otherwise.

But on the other hand, it’s about 26dBA quieter than the belt-sander-and-holdfasts approach I’m stuck with now, and it actually *has* dust extraction. Which is kindof a good thing if you like, you know, breathing…

Nov 17


…is deciding to make a batch of bandsaw boxes for your son’s school’s xmas bazaar thingy, while in a shed that’s too small, with a bandsaw that’s not really up to the task, and a sanding arrangement that… well, more on that in a moment.

I mean, I don’t even keep anything other than 4/4 material on hand, thicknessing anything else down to the normal 3/4 width you see in furniture is just too much work by hand (though I do need to get some 8/4 stuff soon for a piece’s legs). So it’s lamination city…

Something is missing….

Ah, there they are. Literally every clamp I have (bar the 5′ cast iron ones that are slowly rusting away outside, accusingly. I’ll get to them this xmas and sort them out, honest).

I even ran out of space to put clamped pieces. Yikes. And then overnight curing, and in the meantime it was off to the sister’s for a not-a-toddler-any-more’s birthday party, and I took along the oak test piece to give away as well, after having given it another coat of poly, a light sanding, a coat of renaissance wax and a buff, and a felt base:

It didn’t turn out too bad in the end, so I’ll make three more for the batch of boxes.

Sunday morning started with planning the boxes, starting with trimming cuts (on the 3/8ths blade) and then on to the curved cuts on the 1/8ths blade:

Errands interrupted for a while (but let me restock on 240grit sandpaper and danish oil) and then it was two straight hours on the bandsaw. My spine felt like I’d cut it into funny shapes by the end. But…

15 on the bench with all the cuts done (though some need some heavy shaping sanding and one needs shaping by hand). Excuse the blue tape, it’s just keeping all the pieces for each box together because it’s a pain to mix them up…

The oak ones are a pain to tape together 😀

Mind you, they were a lot more of a faff to glue together…

And I ran out of clamps before I ran out of work 🙁

Tomorrow will see more sanding, some shaping, more gluing, hand sanding and then on to finishing. The oak gets ebonised, the ash gets blonde shellac, the poplar will get milk paint, and I have no idea what the sapele will get. Danish oil maybe. And then probably a spray coat of poly over everything just for hard-wearing-ness.

About that sanding…

This will do its absolute damnedest to remove your fingers and/or burn your bench. It’s a pain to use. But it’s the only thing I have that will do the job… for now. The Black Friday Sales approach and soon, there will be an addition to the stable…

Because I’m sick of a piece embedding itself into the wall of the shed and having to go search for it after a quick count of my fingers.

On the hand tool front, I finally got to test my new scratch stock…

It’s very comfortable to use and I’ll definitely be using it to put a few details into an upcoming project.

But for the immediate future… it’s all power tools and sand and dust and unpleasantness.


Nov 17



No paint, no stains, no inks or dyes.

I used Richard Maguire’s ebonising method – take handful or two of oak shavings off the floor, boil for ten minutes in a saucepan, paint the resulting tea on the piece, sand down the raised grain, repeat 2-3 times. Then take steel wool, soak in vinegar for a week in a jar with a hole in the lid. Now paint the piece with that solution. The tannic acid in the oak, boosted by the tannic acid in the tea, reacts with the iron in the steel wool solution, and turns jet black.

It’s not a bad result, even on a quickly-done test piece that only got two doses of the tea and not much prep work.


Nov 17

Open box

The ash bandsaw box is still being finished and this one hasn’t even started the finishing process (I’m going to try ebonising the outside using Richard Maguire’s method and painting the inside with milk paint), but I thought it looked reasonable for a second try:

Finish, fill with jelly beans, give as gift. Sorted.

Nov 17

Guides and tests

Well, made a dog’s breakfast of the bandsaw boxes I was playing at. Couldn’t make the turn needed and the blade came out the side of the blank. Oh well. Now I have two paperweights (and one successful box, out of four blanks). I’ve ordered a one-eighth inch blade off Tuffsaws, that should get here next week and I can try again. I’ll prep new blanks tomorrow for that.

Bit of a waste, those 🙁

Meanwhile the older replacement y-lever for the #5½ arrived and I replaced the existing y-lever with it and it’s been a lot nicer to work with since. And no surprise. This is what the more modern y-lever looks like, two pressed steel parts riveted together:

Unfortunately, the rivet on mine isn’t as tight as it should be and even glue didn’t stop the inevitable end result (and if you’re thinking this would interfere with setting the plane you’d be right):

Meanwhile, back on the main project…

The bridle joints involved are a bit of an oddity; nobody really cuts them often enough to get good at them, at least not off the saw, so these are Richard McGuire’s basic jigs for helping to cut them (and the test sticks in the backgrounds, just a spare bit of poplar that I’m using up).

Four cuts, four jigs and the japanese saw reappears.

Okay, doesn’t look too awful…

Ah. Right. Hm. Odd. No gaps but also torqued right the way over. So check the guides again and yup, the shoulder of the cut was just not tidy enough so out with the chisel and a bit of tweaking and another test joint gets cut…

Ah. Bother. Okay, one guide still needs a wee bit of tweaking and we cut another test joint…


Right. That’ll do I think.

Next step, a 12 degree guide and then on to cut the actual leg&apron joints.


Nov 17

Flattening and boxes

So, started off flattening the apron. This went pretty well after I switched over to the #5 and sharpened it up a bit. The narrower blade means less pushing effort and that seemed to help a lot. And then it was time to thickness down from an inch to 3/4 of an inch.

This is not my favourite activity. And honestly, if they made an induction motor benchtop thicknesser I’d have bought one already, but unfortunately they’re all universal motor things — and lunchbox thicknessers, even if you fit them with helical blades and all the fancy doo-dads, are just too damn noisy to run in a housing estate. You’ll wind up triggering a torch-and-pitchfork party of your very own if you do that round here once too often. So until I have a larger shed and room for a larger, possibly older, floorstanding planer/thicknesser, I have to do this part by hand. At least Sid makes the task easier with his ridiculous level of camber…

Anyway, the board was a manageable size, so push hard and on we go. And switching over to the #5 for the last mm or so to arrive in a controlled manner and…

Flat and at thickness. I gauged out for the two aprons and set it aside and ripped down the middle a little later on with the bandsaw (using the new tuffsaws blade – makes a rather surprising difference, those things, much cleaner cut and less drift).

Then on to mucking about…

So the glue-up was messy and there are steps all over, but apparently that’s to be expected. Next step, sand the badgers off everything with my handy dandy disk sander. Which I don’t have one of. Bugger. Well…

Sod it, I started this thing on a bandsaw, might as well keep up the machine operator vibe…

Didn’t want to keep all of your fingers, did you?

Hm. Not terrible for a first try. Slap some shellac on it…

And some felt for the inside lining and call it done:

Well, not absolutely awful. Okay, so it is if you look close – there’s no room in there, the edges aren’t parallel, the drawer’s a bit gappy, and so on. But it was fun to try it and I have some ideas for a nicer one. Need more practice though, I keep getting lost in the sequence of cuts on these things. Well, in that vein…

This one might be interesting, I used the new tuffsaws fine-tooth blade. Much smoother cut, but I don’t think the bandsaw will ever be a precision tool. Hell of a lot friendlier to the nose when you plug it into the dust collection though…

Nov 17

fork()ing and fstat()ing in JRuby using FFI on linux

Sometimes, $DAYJOB can get kindof technical. For reasons I won’t go into here because NDA, the following axioms are true for this puzzle:

  • we have to work in JRuby
  • we are in a plugin within a larger framework providing a service
  • we have to restart the entire service
  • we don’t have a programmatic way to do so
  • we don’t want to rely on external artifacts and cron

Now, this isn’t the initial framing set of axioms you understand; this is what we’re facing into after a few weeks of trying everything else first.

So; obvious solution, system('/etc/init.d/ourService restart').
Except that JRuby doesn’t do system(). Or fork(), exec(), daemon(), or indeed any kind of process duplication I could find. Oh-kay, so we can write to a file, have a cronjob watch for the file and restart the service and delete the file if it finds it. Except that for Reasons (again, NDA), that’s not possible because we can’t rely on having access to cron on all platforms.

Okay. Can we cheat?

Well, yes… allegedly. We can use the Foreign Function Interface to bind to libc and access the functions behind JRuby’s back.

require 'ffi'

module Exec
   extend FFI::Library

   attach_function :my_exec, :execl, [:string, :string, :varargs], :int
   attach_function :fork, [], :int

vim1 = '/usr/bin/vim'
vim2 = 'vim'
if Exec.fork == 0
   Exec.my_exec vim1, vim2, :pointer, nil


Of course, I’m intending to kill the thing that fires this off, so a little more care is needed. For a start, it’s not vim I’m playing with. So…

module LibC
   extend FFI::Library

   ffi_lib FFI::Library::LIBC

   # Timespec struct datatype
      class Timespec < FFI::Struct
      layout :tv_sec, :time_t,
      :tv_nsec, :long

   # stat struct datatype
   # (see /usr/include/sys/stat.h and /usr/include/bits/stat.h)
   class Stat < FFI::Struct
      layout :st_dev, :dev_t,
             :st_ino, :ino_t,
             :st_nlink, :nlink_t,
             :st_mode, :mode_t,
             :st_uid, :uid_t,
             :st_gid, :gid_t,
             :__pad0, :int,
             :st_rdev, :dev_t,
             :st_size, :off_t,
             :st_blksize, :long,
             :st_blocks, :long,
             :st_atimespec, LibC::Timespec,
             :st_mtimespec, LibC::Timespec,
             :st_ctimespec, LibC::Timespec,
             :__unused0, :long,
             :__unused1, :long,
             :__unused2, :long,
             :__unused3, :long,
             :__unused4, :long

   # Filetype mask
   S_IFMT = 0o170000

   # File types.
   S_IFIFO = 0o010000
   S_IFCHR = 0o020000
   S_IFDIR = 0o040000
   S_IFBLK = 0o060000
   S_IFREG = 0o100000
   S_IFLNK = 0o120000
   S_IFSOCK = 0o140000

   attach_function :getpid, [], :pid_t
   attach_function :setsid, [], :pid_t
   attach_function :fork, [], :int
   attach_function :execl, [:string, :string, :string, :varargs], :int
   attach_function :chdir, [:string], :int
   attach_function :close, [:int], :int
   attach_function :fstat, :__fxstat, [:int, :int, :pointer], :int

So that’s bound a bunch of libc functions for use in JRuby. But why __fxstat() instead of fstat()? Interesting detail; the stat() function family aren’t in libc, at least not on most modern linux platforms. They’re in a small static library (libc_unshared.a in centOS). There’s usually a linker directive that makes that transparent but here we’re acting behind the scenes so we don’t get that niceity so we directly access the underlying xstat() functions instead.

I need to close some network ports (or the restart goes badly because the child process inherits the ports’ file descriptors and someone didn’t set them to close on exec()). A small helper function is useful here:

# Helper function to check if a file descriptor is a socket or not
def socket?(fd)
   # data structure to hold the stat_t data
   stat = LibC::Stat.new

   # JRuby's IO object types can't seem get a grip on fd's inherited from
   # another process correctly in a forked child process so we have
   # to FFI out to libc.
   rc = LibC.fstat(0, fd, stat.pointer)
   if rc == -1
      errno = FFI::LastError.error
      # Now we do some bit twiddling. In Octal, no less.
      filetype = stat[:st_mode] & LibC::S_IFMT

      if filetype == LibC::S_IFSOCK
rescue => e

And now the actual restart function itself:

def restart
   pid = LibC.getpid
   rc = LibC.chdir('/')
   if rc == -1
      errno = FFI::LastError.error
      return errno

   # close any open network sockets so the restart doesn't hang
   fds = Dir.entries("/proc/#{pid}/fd")
   fds.each do |fd|
      # skip . and .. which we pick up because of the /proc approach to
      # getting the list of file descriptors
      next if fd.to_i.zero?

      # skip any non-network socket file descriptors as they're not going to
      # cause us any issues and leaving them lets us log a little longer.
      next unless socket?(fd.to_i)

      # JRuby's IO objects can't get a handle on these fd's for some reason,
      # possibly because we're in a child process. So we use libc's close()
      rc = LibC.close(fd.to_i)
      next if rc.zero?
      errno = FFI::LastError.error
      return errno

   # We're now ready to fork and restart the service
   rc = LibC.fork
   if rc == -1
      # If fork() failed we're probably in a world of hurt
      errno = FFI::LastError.error
      return errno
   elsif rc.zero?
      # We are now the daemon. We can't hang about (thanks to 
      # JRuby's un-thread-safe nature) so we immediately swap out our 
      # process image with that of the service restart script. 
      # This marks the end of execution of this thread and there is no return.
      LibC.execl '/etc/init.d/ourService', 'ourService', 'restart', :pointer, nil
rescue => e
# Handle errors here (removed for clarity)

An interesting problem to solve, this one. And by “interesting” I mean “similar to learning how to pull teeth while only able to access the mouth via the nose”. But in case it’s of use to someone…

Nov 17

Progress and mucking about

So I figured I’d start by playing with the new toy and taking some test cuts.

The blade runs sort-of true. Well, I wasn’t expecting laser levels of perfection here, but the guides really are letting things down. The lower thrust bearing can’t be backed off readily to adjust it so it’s not poking the blade out of true, which is disappointing. And I really can’t run this thing without dust extraction or the whole lower case clogs up and the bearing itself locks up. Well, I knew machinery would counter its speed by increasing the amount of faffing about needed to support it. This is why you usually mount this stuff permanently where you have room to manoeuvre around it. But again, 8’x6′ shed, no room to think, let alone manoeuvre, so we need to make do.

It can’t cut very tight corners, a 2cm radius seems about the most it’s comfortable with. But that could still work. I was playing about making a bandsaw box. They’re not too terrible to do.

Gluing up for these boxes is a bit of a faff mind you.

Well, quite a lot of a faff depending on how badly you design the sodding things. Oh well.

And the three blades I ordered from tuffsaws arrived.

One for very rough work or even small resawing work (but really, you’re talking about resawing stuff that’s at most 70-80mm wide so I’m guessing that’s going to be underused). One slightly more sturdy blade than the one that came with the bandsaw to use for general-purpose stuff, and a very fine-toothed narrow blade to do curving work.

Tuffsaws do have a one-eighth inch blade as well, might try that if the quarter-inch one doesn’t do the job.

Then I carried on with the new project, laying out the rough rips for legs and aprons:

Finally getting to use my new panel gauge in anger. Works quite well for rough layout, but I need to sharpen that pin, it’s not the finest gauge line in the world.

Then I used the new toy to make the rough cuts.

Definitely not up to finished work levels of cleanness, but it cut through inch-thick oak like it was foam, so it saves a bit of work (though the faffing about setting up and cleaning down after using the bandsaw is just a pain in the fundament so handsaws definitely aren’t out of a job yet). I’ll flatten these tomorrow and thickness them, then rip out the individual legs and aprons (there’s two in each board).

Nov 17


Of course, whatever about new toys, the new project continues. Some rough flattening of two of the boards, some mild cleanup of one edge on each board and then some bookmatched edge planing to set up for a rubbed glue joint.

You know it’s after Samhain when the hide glue needs to be put into hot water for a few minutes to get it to flow again. And there may have been a small amount of squeeze-out…

There’s quite a bit of excess material here; there’s an inch or two to come off on all sides. Well, better than than to not have enough. Flattening is going to be a pain in the fundament though. And that #5½ is acting up on me – I need to resharpen the blade and the Y-lever is one of the more modern two-piece pressed steel things instead of the older cast iron pieces:

The problem with my #5½ is that the two pieces have separated and the glue repair has not held. So adjustments are hairy at best. I may need to drop back to using the #5 for the moment. Workshop Heaven do make steel and brass replacements, but I was lucky and ebay had an original Record cast part going for a pound or two less so I ordered that. I can replace the part either late this week or early next week and use the #5 till then.

Stochastic Geometry is Stephen Fry proof thanks to caching by WP Super Cache