Category: Sci/Tech

ARGON node diagram (by )

Since I'm always rethinking parts of it faster than I can write them up, ARGON lurks to a great extent inside my own head, with the Web site lagging behind a little. This just helps to make it all the more confusing for interested folks, so I've bitten the bullet and produced a shoddy diagram showing how all the services can fit together on a single running node.

http://www.argon.org.uk/argon-node.png.

Here, we see how the HYDROGEN hardware abstraction layer is used by various components to support WOLFRAM, for in-cluster management of shared state; MERCURY, for inter-cluster and in-cluster communication and FLUORINE for interoperability with other network protocols. These act as interfaces to the entity handler user code - your application - invoking your entities to handle incoming network requests, and providing an API for your code to make outgoing network requests.

I've shown how real-time user tasks will be executed by the HELIUM scheduler in response to timers or incoming signals, and how they interact with local hardware to perform their work.

And I've shown how the NEON user interface subsystem uses the human interface hardware APIs provided by HYDROGEN to proxy between the user and the CARBON directory (for browsing) and MERCURY to then interact with entities to request that they provide code for a user interface front end, which is then executed locally by CHROME in order to provide a responsive user experience for accessing remote resources.

Hopefully, this will make my rantings make a lot more sense to people...

Arc welding (by )

As a treat, I've bought myself a manual metal arc welder!

Manual metal arc welding, however, is quite tricky to learn. Basically, the stages are:

  1. Being able to make the thing go at all. You need to create an arc, then maintain it, which needs a fair amount of practice and dexterity.
  2. Being able to then move the arc at the desired rate, in the desired direction, to leave a weld behind.
  3. Being able to do this well enough to produce a strong weld, rather than a rough blobby one that's only attached here and there
  4. Being able to do this well enough to produce a neat weld, which is the same as the previous hurdle, but now keeping the weld the same thickness all along, and nice and smooth
  5. All of the above again, but under trying circumstances such as when the objects being welded aren't nice and conveniently placed in front of you

I've just managed 1 today, and am part way through 2!

My medium-term goal is to make new crucible tongs - the previous ones are OK, but a little hair-raising to use since they don't grip the crucible perfectly. They were made by bending single lengths of steel, which constrained them a little. With welding mastered, I should be able to make crucible tongs that fit around the crucible much more snugly, so requiring less wiggling to get them in the clearance between crucible and furnace wall, and then a tighter grip of the crucible itself rather than just squeezing it at a few points...

Arc welding is fun!

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!

WordPress Themes

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