Category: Sci/Tech

Log structured file systems revisited (by )

I've been thinking about log structured transactional filesystems again, and I think I've come up with something potentially useful for making POSIX-style file systems as well as for the TUNGSTEN object store. Read more »

Literate programming (by )

I wish I'd been there for this conversation:

http://www.gyford.com/phil/notes/talks/e/euro_foo_camp_jo_walsh_literate_programming.php

However, I'm far too boring to be able to make it to exciting geek events like that 🙁 Maybe one day, when I've been freelancing for more so have spare money for travel and can take more time away from work...

I've studied literate programming, so I'd probably have been able to help explain it there. My own interesting idea, however, is that a programming language could have inbuilt support for being in development.

Here's what I mean. How many times have you seen:

/**
 * Returns true iff the specified user should be able to perform the action
 * by checking the access control database.
 */
boolean checkAccess (String username, Action desiredAction) {
  return true; // FIXME: implement access control database
}

Or FIXME comments saying that a bit of code ought to be rewritten to be faster, or refactored on general principles, or something.

What I envisage is that you could instead write:

/**
 * Returns true iff the specified user should be able to perform the action
 * by checking the access control database.
 */
boolean checkAccess (String username, Action desiredAction) {
  return test_harness (true, "Access control check for " + username + " doing " + desiredAction);
}

test_harness is pretty much just a function that returns its first argument, or (depending on a compile flag or something) maybe gives the developer (at run time) the option of specifying what it should return, so he can test the behaviour of code when an access control rule is refused (the second parameter being a prompt).

But when you compile the application in "release" mode, the presence of test_harness becomes a fatal error. Thus protecting you from forgetting, and releasing test harness code into the wild.

Another construct would do nothing to the semantics of the program, just prevent it from compiling (with a custom error) when not in debugging mode. This could be done with something like this in C:

#ifdef RELEASE
#error Whoa! Replace this quick hack of a cache with something that actually frees unused memory, will you?
#endif

...but it would be nicer to just write:

#fixme Whoa! Replace this quick hack of a cache with something that actually frees unused memory, will you?

Anyway. Not quite literate programming per se, but something related to it; by giving semantics to certain kinds of comments that have special meaning, we're still blurring the divide between code and comment in a useful way.

New crucibles (by )

Just before the wedding, I got two crucibles. Proper A4 salamander crucibles, made from some refactory stuff, rather than stainless steel cups as I'd been using up to then.

However, the stainless steel cups are easy to lift - I punched holes in the sides near the top and put bolts through, so the thing could be lifted using barbeque tongs (the wire loops of the tongs slip over the bolts, securing the crucible). The salamander crucibles, being made of a clay-like stuff, cannot simply be drilled and fitted with lugs; the material wouldn't take the strain when at red heat.

So I had to make tongs. I picked up two 7mm square cross section iron rods from B&Q, a metre long each, and forged them into tongs by using the torch to take parts of them up to red heat, then banging them with a hammer on top of an old steel beer keg or bending by (heatproof gloved!) hand, until they had curved bits that cupped the bottom of the crucible, and met at the top with a hinge.

Well, getting the two bits the right shape for the crucible AND meeting up at the top was pretty tricky, and then we had trouble drilling through the things (using a high speed Dremel was a mistake that got the drill bits hot enough to destroy their hardening; had to use the Black & Decker to drill the holes slowly... although I only have a drill press for the Dremel. Luckily, the hole I'd made drestroying drill bits in the dremel acted as a started hole for the big hand drill). So the tongs are a bit... imperfect.

If I could weld, I could make proper ones or do what the other guys do, which is to make highly durable, large, stainless steel crucibles (as opposed to my little cups) out of thick-walled steel tubing. Not that I've ever found any thick-walled steel tubing lying around as they all seem to.

As it happens, it turns out I need a second person to use a hooked rod to make sure the crucible doesn't fall out of the tongs when I'm pouring... Ok, I don't want to do melts without another person in case I have an accident anyway, but it's wasteful to need two people to do the job of one.

Anyway, at least the things worked, enabling me to use my nice proper crucibles. It takes a long time to heat up the 1cm-thick walled clay crucible compared to my 2mm-thick steel cup, but once it's all glowing red hot, it sure melts stuff fast. What's more, it keeps the aluminium hot once I've lifted it from the furnace and while I'm pouring, enabling me to take it a bit easier in this delicate stage!

I’m a mad scientist (by )

Watching Spiderman 2 has reawakened my long-slumbering desire to build a giant Farnsworth-Hirsch Fusor and stand in front of it cackling, with the cold blue light of fusion casting my twisted shadow into the dark be-girdered heights of my workshop.

There's not many things you can build from off-the-shelf components worth a few hundred pounds that will create a glowing sphere of fusing plasma to hang in space before your very eyes.

Except, unlike the fusion device in Spiderman 2, it has at least a glass-walled chamber to keep the air out and fusion fuels and exhausts inside, and if you stood in the room with it running without shielding, you'd be bathed in unhealthy radiation.

But for all the blatant silliness of the fusion device in the film, I was delighted by the many ways in which it did resemble a fusion device you could build from mail-order parts in a disused warehouse 🙂

CHROME and IRON data typing (by )

IRON schemas and the CHROME type system are intertwined... more accurately, I'd say the latter was a superset of the former.

Let me give a few examples of my requirements for the system. Read more »

WordPress Themes

Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales
Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales