Natalya is shutting down

After a few years of faithful service (Can you believe it’s been 5 years? I just renewed the domain yesterday. 5 years!) it’s natalya’s time to rest. Ongoing issues with the webhosts, and basically a reshuffle of where I want to spend my hosting budget has led to this.

As far as I know, the only live service depending on this machine is, which will probably either shutdown or be moved elsewhere, but no external disruption is planned. On the offchance you have some dependency we don’t know about- feel free to email

Posted in psych0tik News | Leave a comment

Bower is fucked

Or alternately, front end infrastructure is fucked.

I decided to port groundstation to use bower for it’s frontend assets this evening. Technically, the component in question is airship, but that’s irrelevant. I need to pull in bootstrap, jquery, backbone and a few other bits and pieces and:

  1. It’s a pain in the ass to stay up to date
  2. Having all that code vendored screws with all my metrics

So off to bower land I go!

Cool, I can create a bowerrc with the target directory, and a component.json with some dependencies and run bower install and….

bower error 1 not found

There were errors, here's a summary of them:
- 1 not found

What the fuck is this. Oh, right, I can’t pass an array of dependencies in, it has to be a hash of dependency => version pairs. Cool. Pretty obvious from the error message right?

So I fix that, and run bower install and…

There were errors, here's a summary of them:
- jquery ENOENT, lstat '/Users/richo/.bower/cache/jquery/cf68c4c4e7507c8d20fee7b5f26709d9/.git/tags.3799'

At this point I’m fucking positive they’re just dicking with me. I run the same thing with –debug

There were errors, here's a summary of them:
- jquery ENOENT, lstat '/Users/richo/.bower/cache/jquery/cf68c4c4e7507c8d20fee7b5f26709d9/.git/tags.3799'

Obviously. Then you should see my jaw put a three foot divot in the floor when I notice that all of these commands exited 0.

Through trial and error, I manage to get a bit further to see:

There were errors, here's a summary of them:
- jquery ENOENT, lstat '/Users/richo/.bower/cache/jquery/cf68c4c4e7507c8d20fee7b5f26709d9/.git/tags.22124'
- underscore Didn't get expected byte count
expect: 667648
actual: 847834

and then again my jaw meets floor when I notice that It’s installing these assets anyway.

I’ve already opened a Pull request for the most trivial of these issues but seriously.. come on guys. This isn’t cool.

Chances are significant I’m going to roll my own ghetto make(1) based setup, because at least it does what it says on the tin.

Posted in Articles | Tagged , , , | Leave a comment

Explicitly testing race conditions

This post relates to programming in general, but specifically to Python (because that’s where I’m working at the moment).

I’ve been working on groundstation lately, which leverages git as it’s storage backend, but also assumes that all operations are threadsafe and concurrent. As such, I want to write testcases for it’s internal implementation that actually excercise these race conditions to assert their sanity.

Obviously, I can litter my code with optional callbacks, but that’s pretty much awful. I never thought I’d genuinely wish python had macros or a preprocessor. Do you know of a sane way to approach this?

Posted in psych0tik News | Leave a comment

Another sleeping experiment

I’d like to discard time for a week.

This year I’ve decide to embark more on a quest to explore sleep, and the way I experience it personally. It’s something I’ve struggled with as long as I remember, and I figure that by gathering more data points I can at least start to unwind this puzzle.

A few days ago I was considering an experiment, and this post serves as a braindump to flesh out the idea, as well as hopefully a place to gather feedback and ideally hear from someone who’s tried something like this before.

The basic premise is that for a week I’d like to lose the circadian rhythm, sleep when I feel like it and until I wake up naturally, and only afterwards inspect the data.

This has some immediately obvious flaws, the first being that if I’m to lose all perception of time I’d have to black out my house and not go outside. I suspect that by not deliberately structuring my life anything specific this can be overcome.

In more detail, I plan to pull the clock off the devices I own and the interface for the software I’m likely to use in that time (my system taskbar, irssi and tmux all show my timestamps), and use my cli twitter client twat to tweet like a madman, giving my timestamped data points to look at afterwards.

There’s some planning to be done and some preliminary research to be done, but I’m hoping that at the very least it’ll be interesting, even if it serves only as a cautionary tale to others.

Posted in psych0tik News | 2 Comments

NAT Traversal, peer discovery and the stark realisation that you’re an idiot

In my last post I unveiled groundstation, a supremely pre-beta cut of a tool I’m building to automagically sync objects in several git repos with any and all nearby peers. Up until tonight, I had been testing with two laptops, connected to the same wireless network (more or less the usecase I envisage).

This evening, I had only my laptop with me: but “Not to worry,” I thought, “I’ll just light up my dev VM!”. At work we use vagrant to light up ondemand VM’s, bootstrap them with babushka and get on with it. We use some trickery in the vagrant-dns gem to make the VM addressible from the host, with vagrant taking care of NAT for us.

Which is where things got interesting. groundstation uses UDP broadcast to find it’s peers, which WILL penetrate most NAT configurations, but with the caveat that the source address will be rewritten- in this instance rewriting it to my external IP address, causing my daemon to attempt to connect to it’s “peer” and sync it’s objects- with itself.

Posted in psych0tik software | Tagged , , | Leave a comment

richo’s 12 days of haxmas: pt3

After vanishing off the radar for a few days, I can now unveil groundstation.

Born of a discussion at work about how all existing solutions to issue tracking and project management pretty much suck, and my natural flair for finding the most awkward way imaginable to do something, I started building a framework for decentralised issue management, based on gossip protocols (full points to @wolfeidau for planting that seed in my head) and utilising git’s object store as a backend.

Right now all it can do is propogate git objects over the local network via broadcast discovery, but the TODO list is pretty significant. I’m planning to implement:

  • Verification of changesets based on RSA/ECDSA cryptography (choosing those algorithms because of their ubiquity with developers)
  • Implementation of an arbiter node making the broadcast discovery an effective local means, but not the only way to “sync” your events
  • Better control over “channel” subscription to avoid the obvious DoS attacks that are trivial to exploit with the current implementation
  • Better support for event based propagation, instead of polling as currently stands

… and if there’s time maybe a frontend or something so you can actually interact with it. Who can say.

You can try it out right now if you’re ok with not syncing any git objects other than blobs (the only primitive type that I’m planning to use in my tracker).

Clone the sources down on a few local machines on the same subnet,

pip install -r requirements.txt; python stationd

and watch whatever’s in


get synced up.

Posted in Hax, psych0tik software | Tagged , , , | Leave a comment