27
May 14

Django’s Master/Slave terminology row

For those who’ve missed the original thread (oh, how much you’ve missed, not), it’s here.

For those wondering how you should think about this, it goes like this:

Can you stop using those terms please, they’re not nice.
What, seriously?
Yeah, seriously.
Oh. Okay, well we have these other terms that have been around for decades and are actually slightly better at describing the kind of systems we’re building these days. Cool?
Cool, thanks.
No worries.

For those wondering how it actually went and don’t want to waste your life reading the nonsense in the original thread:

Can you stop using those terms please, they’re not nice.
OH GOD THE WORLD IS ENDING YOU’RE SO STUPID THEY’RE JUST WORDS YOU’RE DELUSIONAL THIS IS RACIST THIS IS PC GONE MAD

Hmmm. Here’s a hint folks, there are hard things in distributed database design. Handling (and even detecting) split-brain scenarios to ensure data consistency even in the presence of partition failure. Dealing with latency issues and the performance penalties they cause. The whole CAP balance problem in fact and the the entire related debate around SQL/noSQL. And a wealth of other problems both big and small, related both to design and implementation. An entire industry of people spend their professional lives working on those hard problems and there still aren’t enough people to handle all the problems.

Whether to call a specific replication design “master/slave” or “active/passive” is just not on the list of hard problems. Honestly, it’s not. Someone has a genuine problem with the “master/slave” terminology, and many others have had the same problem with the same terminology for years? Quit whining, be a better person, use another terminology and get back to work.


22
May 14

You call this a choice?

For the European elections tomorrow I’d like a pro-choice, pro-secular, pro-digital-rights candidate, preferably with STEM qualifications, and as an optional extra, not anti-private-firearms-ownership (because I like Olympic target shooting). I’m even flexible on the last two because you can’t have everything.

Instead, I get to choose from a field of two people from an Anti-Vaccination, Anti-Fluoridation, Pro-Homeopathy party (one of whom just quits whatever party she’s in every so often); one guy whose party was kneecapping people and bombing cars and pubs for the majority of my lifetime; and one lady whose party is in government busily stomping over all of its stated principles and won’t sign the pro-secular statement despite agreeing with it because Voters.

And politicians have the cheek to ask why people suffer from voter apathy.

And that’s just the European election candidates, the local elections make them seem eminently qualified and filled with wisdom by comparison. The mouthbreathing knuckledragging gombeens they dug up for the locals make me think we’d be better off overall if we just euthanised the lot of them. Seriously, this is the kind of inbred moron we get to vote for in those elections.


03
Apr 14

gdb’ing through a function pointer into a template

Take this (badly mangled to save the names of the guilty) chunk of “code” and run it through the Intel C++ compiler with any -g option you want:


class C {
private:
int (functionA*)(args);

C(){
functionA = functionB;
}

functionC(args) {
rc = (this->*functionA)(args);
}

template <D,E> int functionB(args) const {
/* some code */
}
};

Now try debugging functionB when it’s called via functionC using gdb. In particular, try looking at the args fed to function B.

Now weep for your soul. And TotalView won’t help you now either buddy. You’re down to objdump -t library.a | c++filt | grep functionC and setting some stupid-looking C++ mangled name out of the mess you get back as the breakpoint in gdb.

There has to be a better way…


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