Dr Ew (contains spoilers)

These evil people are clearly suspicious. They have hacked a young woman’s head so she can actually understand the internet. #drwho #ew
@PennyRed

The current Doctor Who series has exactly zero women writers. Perhaps this is why it’s kicked off with a show that fails the Bechdel Test – at least between adults. The child and the nanny do have a brief conversation.
The show has two strong female characters and two strong male characters as well as two additional supporting male roles. The major male players are of course, The Doctor and a character that one might not expect to have a gender: The Great Intelligence. The other male roles are two subordinates at an evil company that hacks people. The strong female roles are Clara, the Doctor’s new sidekick; and the woman in charge of the evil company.
As Laurie Penny notes, the evil company adds computer knowledge to Clara’s head. Previously, she was entirely inept at getting online, ringing a helpline for aid logging in to wifi. She seems to be a middle class woman in her 20’s in modern-day London, who has access to a netbook and a reason to want to get online. The idea that she would be unable to manage something as simple as loggin in to wifi actually seems profoundly unlikely.
Her job is working as a nanny, a reprise of the job of her previous incarnation. The Doctor keeps trying to ask how somebody as obviously clever as herself got stuck as a nanny – an often female-specific job. Things are not getting off to a great start.
The other strong woman character never speaks to Clara. She mostly speaks to her two male assistants, to the Great Intelligence and to the Doctor. At the end, after the Doctor saves the day, she is reset to her state before the Great Intelligence started shaping her personality and actions, or ‘whispering in her ear’ as she puts it. UNIT finds her sitting on the floor, speaking in the voice of a little girl, asking where her mummy and daddy have gone. Her talents and even her entire self is thus not her own, but belonged to the male Great Intelligence.
Clara did get to save the day in her debut, but only by offing herself in the process. She manages to live through this episode – sort of. She dies twice, but the Doctor brings her back both times. As she’s dead, she’s especially helpless as a captive and thus is not able to play an active part in her own rescue. However, she’s not useless. She discovers the location of the bad guys through a clever insight into social engineering – that the weak point in computer security is usually the people. However, this insight is not entirely her own. All of her computer knowledge and therefore all of her hacking skills, remember, have come from the bad guys. Again, this mirrors her first episode where she also has superior hacking skills than the Doctor, but only because the Daleks have tampered with her mind and body.
The power of women in the episode is, therefore, largely not really their own, but given to them by the machinations of a male intelligence. Meanwhile, the Doctor’s abilities come from his own great intelligence and from his magical powers – he uses the sonic screwdriver to ‘hack.’ This device functions more or less as a magic wand in recent years. In this episode, he also has a magical flying motorcycle. (The linked article at the top mentions JK Rowling as a sci-fi author. I would normally strongly contest this claim, but her influence on Doctor Who is very clear, thus pulling the show further and further away form sci-fi and towards fantasy.) The source of the Great Intelligence’s power is not yet revealed in it’s current arc – it’s a nemesis from the old days, so a backstory does exist, but without benefit of that knowledge, one does assume it is intelligent and powerful in it’s own right.
The episode does not contain any great moral questions of good and evil and does not intentionally engage gender roles in 21st century Britain. Instead, it gives us the doctor acting silly, doing magic and centres mostly on London geography. The tallest new building in the capital, which is also a a ticketed tourist attraction, is the main point of action, but there’s also South Bank and a joke about the blue police box at Earl’s Court.
For those of us who miss Davies, there are not LGBT characters, but there are some POC and there are women working in tech jobs at the evil company, although these are not speaking parts. These women, like their male colleagues, also have gotten all their job training via evil mind control, so this doesn’t really imply anything about their abilities, but it’s better than nothing, I guess.

So you changed your facebook icon?

The US Supreme Court just heard arguments for two cases involving marriage equality. Up to 57% of Americans now think marriage equality is a good idea and a bunch of people, mostly straight allies, have changed their facebook icons into red equals signs to show this.

The equals sign is the logo of HRC, a gay (and not bi and really not trans) advocacy organisation. They’re run by and for A-gays and give awards to vulture capital firms for not discriminating against gay people while giving bonuses or while making people homeless, jobless and hungry. Not that they’re legally required to avoid this discrimination. In 34 states, it’s still legal to fire people for being gay or to throw them out of their homes. There is no federal hate crimes law. Gay people are not in the Civil Rights Act or the pathetically weak ‘ENDA’ which the HRC has been failing to get through congress for my entire adult life. That bill would prevent discrimination in employment only and only for gay people, as the HRC has specifically lobbied to prevent trans inclusion. Because trans people are icky and they’re sure it’s much more likely to pass if it excludes us. Really. any day now it will pass. … Not that they’re spending much capital on it, political or monetary. A-gays aren’t worried about getting fired.

The HRC wants you to know that gay people are just like you: rich, white and privileged. And normative. Why shouldn’t two men be able to have a wedding reception at their country club? So the legal talent and the money for the marriage cases are coming from freshly outed Republicans. Other funding is coming from straight people who saw Brokeback Mountain and cried. No, really. The single biggest block of people who have been pushing for marriage equality is straight women who liked Brokeback Mountain.

And so marriage equality has become a social barometer. Just like voting for Obama proves you’re not a racist, backing gay marriage and changing your facebook icon means you’re not homophobic. Because gay people are just like you! So if you feel uncomfortable around queeny men or especially around butch lesbians or around people you read as trans, no need to worry about being homophobic if you support gay marriage. No need to worry about having appropriate sex-ed for LGBT kids. No need to worry about the homeless LGBT youth who might want to build a shelter in your neighbourhood and drive down property values. It’s totally ok to think Grindr is icky and condemn it entirely with no first hand knowledge, because you support gay marriage!

And yes, it’s gay marriage. After all, the HRC just told trans people just this last week, to take down their flag, since “gay marriage isn’t a trans issue.”

Did I mention I got the first same sex divorce in the State of California? I can’t say I’m especially proud of this fact. I will say that having a legal structure for divorce made the split a lot easier than it would have been otherwise. I might get married again some day. Aside from everything else, it has implications with immigration law. And if I don’t have to appear in court and change my birth certificate, so much the better. So yes, I support marriage equality, which is also a transgender issue. And so is the staggeringly high rate of unemployment and under-empolyment among trans people in San Francisco, which is probably one of the most trans-friendly cities in the US.

I’m glad that allies are supporting this largely symbolic drive towards equality. But now let’s talk about why lgbt people, tend to be poor. Let’s talk about suicide rates. Let’s talk about bullying. Let’s talk about something that’s not just for the happily ever after, not just for the lucky. This alone doesn’t make everything all right and it doesn’t make you all right either. I know most of the people copying the symbol of a tarns-hostile organisation don’t even know the source of the icon. And that’s why this really is just not enough.

An Open Letter

Background information below.

Dear Madam or Sir,

I am writing to ask what trans-run or trans-lead organisations or campaigners you are collaborating with for your campaign to drive mobile billboards around the Daily Mail?

I am also writing to ask you to reconsider this campaign. While I broadly agree with your goals, this campaign is expensive and I think the money could be better spent elsewhere. Due to the effects of economic discrimination, most trans people in the UK are far from rich. Many struggle to meet normal expenses or those transition -related expenses that are not met by the NHS. Obviously, harassment from the Daily Mail makes the daily lives of many trans people that much harder and contributes to the economic discrimination they deal with, and it’s a good use of funds to fight this. However, because these funds are limited, it’s important to be judicious as to how they are spent. Existing community organisations like Trans Media Watch are already running campaigns around newspapers and other British media. They also have relationships with media organisations and MPs. Donating money to them would certainly go further than a short-lived publicity stunt involving mobile billboards.

Indeed, I wonder who the intended audience of the billboard campaign is. Surely the Daily Mail is already aware that they’re full of hate. After Leveson, Parliament is certainly also aware. I would think even the general public is broadly aware of this at the moment. Therefore, it seems this would most succeed in drawing attention to your own organisation rather than the problem at hand. And while I’m sure you’re a very worthy cause and have admirable values, again, I don’t think you should be asking trans people to pay for your advertising campaigns. Would you consider dropping the billboard idea and raising money for a pre-existing trans organisation instead, like TMW, GIRES, Press for Change or one of the many other advocacy or front-line groups that are dedicated to helping trans people or improving our lot politically?

I fear that most of your money will not come from tans people at all, but from those with a strong and commendable interest in being allies, who want to Do Something and feel good about themselves in the process. Again, this is not the most judicious way of directing those well-meant donations. Our allies can feel just as good about themselves if they give to an established, long-running, sustainable campaign that succeeds at meeting it’s goals as they would feel giving to this publicity stunt. Perhaps they might even feel better, as the organisation the decided to support keeps making progress, vs having only a fleeting feeling of do-gooding which dissipates quickly as the Daily Mail continues to be awful after your short billboard stunt ends.

Thank you for your time,
Dr. Charles Céleste Hutchins

I’m not linking to the fund raising campaign that I’m writing to because I would rather not send users to their site. Briefly, this group has decided to raise £5000 to ‘encircl[e] [the Daily Mail’s] headquarters with mobile billboards plastered with the stories of the people whose lives [they have] ruined.’ This is all related to the untimely and tragic death of Lucy Meadows. She was monstered by the press in general, and specifically her home town paper, but outrage has largely fallen on a Rush-Limbuagh-esque columnist named Richard Littlejohn who wrote some rather nasty things about Lucy a few months ago.
There was a candle-lit vigil in front of the Daily Mail headquarters on Monday in reaction to this. Accounts I’ve read say that a large number of cis people showed up to stand in solidarity. Indeed, at the last protest I went to that was in regards to how the media treats trans people, cis people also outnumbered trans people.
I see this absolutely as a positive thing. I’m very happy that we have allies standing with us and that outrages against us are drawing general outrage. However, as with any instance where one is acting as an ally, it’s important to remember that allies are necessarily present in a supporting capacity. This means listening to those with whom one is allied and letting them take the lead and decide the direction of things.
I strongly suspect the the US-based for-profit company running this fund-raising campaign has slightly overstepped the normal boundaries of being an ally and tried to move more into a leadership role. Indeed, as they are for-profit, what is their revenue model? It’s obvious that they, like every petition site, are harvesting our personal information to sell it. How much of the money their raising for this silly stunt are they keeping? How much is going to overhead? How much is allocated for graphic design? Who is doing the graphic design? Who is going to be included and excluded from this billboards? Who decides? Is this even a trans-specific campaign? What is their ultimate goal? To target DM advertisers? Subscribers? To get the paper to entirely re-think their content?
This is all a reminder to pause and think before donating on something, including rage-donations. These can be really powerful and positive, like in the case of Feminist Frequency. But in that case it was very easy to see where to donate. Because Meadows cannot tell us what she wants, we need to be wary of those purporting to speak for her or for the community in general. The most important thing in giving money is not that feeling you get upon having done so, but whether it actually goes to the goal you are trying to support. Are you helping the person targeted? Are you making lasting change? Alas, we can’t help Meadows and I don’t see how this could make lasting change.

Some cis people don’t like the word ‘cis’

Before you ask, here’s a article in the New Statesman today where a cis woman complained that she was being asked to be aware of privilege when approaching feminism (horrors, I know) and complained specifically about the word ‘cis.’ Others have done a better job than I responding to that article. But I want to put my oar in.
This reminds me about some previous and ongoing conflicts in feminism and society. One has to do with LGB issues. A lot of straight people didn’t like the word ‘straight’ at all. Nobody asked them if they wanted the name. Gay people just foisted it off on them and then told them to check their privilege when they complained. ‘We’re not monolithic!’ they said. ‘We all have differing and subtle approaches to our sexuality and deserve to be taken as individuals!’ Which is funny, because a lot of gay people feel the same way about themselves!
No group is monolithic. There are as many ways to be gay as there are gay people and as many ways to be straight as there are straight people. The word ‘straight’ actually was meant as a value judgement, wherein heterosexuals were being called uptight and boring. Speaking as a straight person, I think that’s a bit unfair, but then given that straight people then were insisting that they be called ‘normal,’ I’m not overly excited about a minor slight in return.
Trans people are also not monolithic. There are a lot of ways to be trans – despite medical gatekeeping insisting on a standard narrative, we still have a huge amount of variation. And, indeed, there are as many ways to be cis as there are cis people.
Maybe you’re a cis person who doesn’t like the word ‘cis.’ You weren’t consulted on this. You’re not a carbon copy of your gender ideal. How dare people imply that there should be category for non-trans people! You should just be called ‘normal.’
I would like to urge you to examine your privilege. Which is another way of telling you to get over yourself. There’s billions of cis women and cis men on the planet. Nobody is alleging that you’re all carbon copies of each other. You say you’re more complex than just that. Well, so is everybody.
Another monolithic grouping is ‘white’ as in ‘white people.’ Past arguments and current about privilege in feminism often revolve around race. White feminists didn’t want to have to deal with their dual status as both members of a victim class and members of an oppressor class. Some meant well. Some were all for their own liberation, but still wanted people of other races to know their place. Many found it jarring to think about themselves as privileged.
And indeed, cis women who are fairly gender non-conforming don’t tend to think of themselves as having privilege. And in many ways, they certainly don’t. Yet, they still aren’t compelled to tell their life stories to psychiatrists in order to access appropriate medical treatment, but even aside from that something else came up in the news today.
A primary school teacher named Lucy Meadows killed herself. She had transitioned over winter break. The UK is a small country, so this was national news. The media was swarming around her home and her work. Richard Littlejohn (the UK’s equivalent of Rush Limbaugh) wrote a column attacking her. She was just trying to live her life and the media decided, during a vulnerable time, to turn her life into a spectacle and showcase her as a freak.
So no, gender-nonconforming cis people don’t live lives of amazing luxury, but they don’t need to worry about being attacked in the Daily Mail, misgendered even in death. Effeminate, straight cis men don’t need to worry about facing jail time for having relationships, but this has happened twice recently to young trans men in the UK.
But hey, nobody forces cis people to hang out in the feminist haunts of tumblr or other corners of the internet. If they don’t like the word ‘cis,’ they don’t have to engage it. Nor pay attention. Nor let it define their lives at all. And trust me, that’s a privilege trans people don’t get.
The purpose of talking about privilege is not a contest to give an award to the least privileged person on earth. It’s to be respectful in dialogue and to prevent furthering of injustice – something that can easily happen by accident. And really – I’m not overly impressed with somebody taking to a newspaper column to complain about being made aware of their privilege. Especially not given the role of newspapers in Lucy Meadows death.
If you’re feeling despondent over this and are in danger, please contact your doctor or GP (Americans can google to find free clinics in their area). There is also help over the phone. In the UK, LGBT people can call the LGBT switchboard (before 11:00 pm) 0300 330 0630, call the samaritans: 08457 90 90 90 or ring 999. In the US, LGBT people can call 1-866-488-7386 or anyone can ring 1-800-suicide. In an emergency you can got to a hospital emergency room or call 911. You are not alone and there is help available.

Fun with Cellular Automata

The SuperCollider code is stolen from redFrick’s blog post about cellular automata. All I have added is the SynthDef, one line at the top to set sound variables and one line in the drawing function to make new synths based on what blocks are coloured in.
Ergo, I haven’t really got anything to add, but this is still kind of fun and Star-Trek-ish

(

SynthDef(sinegrain2, {arg pan = 0, freq, amp, grainDur; var grain, env;

 env = EnvGen.kr(Env.sine(grainDur * 2, amp), doneAction:2); // have some overlap
 grain= SinOsc.ar(freq, 0, env);


Out.ar(0,Pan2.ar(grain, pan))}).add;

)


//game of life /redFrik
(
// add sound-related variables
var grainDur = 1/20, lowfreq = 200, hifreq = 800, lowamp =0.005, hiamp = 0.085, rows = 50, cols = 50;


      var envir, copy, neighbours, preset, rule, wrap;
        var w, u, width= 200, height= 200, cellWidth, cellHeight;
        w= Window("ca - 2 pen", Rect(128, 64, width, height), false);
        u= UserView(w, Rect(0, 0, width, height));
        u.background= Color.white;
        cellWidth= width/cols;
        cellHeight= height/rows;
        wrap= true;                     //if borderless envir
        /*-- select rule here --*/
        //rule= #[[], [3]];
        //rule= #[[5, 6, 7, 8], [3, 5, 6, 7, 8]];
        //rule= #[[], [2]];                                             //rule "/2" seeds
        //rule= #[[], [2, 3, 4]];
        //rule= #[[1, 2, 3, 4, 5], [3]];
        //rule= #[[1, 2, 5], [3, 6]];
        //rule= #[[1, 3, 5, 7], [1, 3, 5, 7]];
        //rule= #[[1, 3, 5, 8], [3, 5, 7]];
        rule= #[[2, 3], [3]];                                           //rule "23/3" conway's life
        //rule= #[[2, 3], [3, 6]];                                      //rule "23/36" highlife
        //rule= #[[2, 3, 5, 6, 7, 8], [3, 6, 7, 8]];
        //rule= #[[2, 3, 5, 6, 7, 8], [3, 7, 8]];
        //rule= #[[2, 3, 8], [3, 5, 7]];
        //rule= #[[2, 4, 5], [3]];
        //rule= #[[2, 4, 5], [3, 6, 8]];
        //rule= #[[3, 4], [3, 4]];
        //rule= #[[3, 4, 6, 7, 8], [3, 6, 7, 8]];               //rule "34578/3678" day&night
        //rule= #[[4, 5, 6, 7], [3, 5, 6, 7, 8]];
        //rule= #[[4, 5, 6], [3, 5, 6, 7, 8]];
        //rule= #[[4, 5, 6, 7, 8], [3]];
        //rule= #[[5], [3, 4, 6]];
        neighbours= #[[-1, -1], [0, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [0, 1], [1, 1]];
        envir= Array2D(rows, cols);
        copy= Array2D(rows, cols);
        cols.do{|x| rows.do{|y| envir.put(x, y, 0)}};
        /*-- select preset here --*/
        //preset= #[[0, 0], [1, 0], [0, 1], [1, 1]]+(cols/2); //block
        //preset= #[[0, 0], [1, 0], [2, 0]]+(cols/2); //blinker
        //preset= #[[0, 0], [1, 0], [2, 0], [1, 1], [2, 1], [3, 1]]+(cols/2); //toad
        //preset= #[[1, 0], [0, 1], [0, 2], [1, 2], [2, 2]]+(cols/2); //glider
        //preset= #[[0, 0], [1, 0], [2, 0], [3, 0], [0, 1], [4, 1], [0, 2], [1, 3], [4, 3]]+(cols/2); //lwss
        //preset= #[[1, 0], [5, 0], [6, 0], [7, 0], [0, 1], [1, 1], [6, 2]]+(cols/2); //diehard
        //preset= #[[0, 0], [1, 0], [4, 0], [5, 0], [6, 0], [3, 1], [1, 2]]+(cols/2); //acorn
        preset= #[[12, 0], [13, 0], [11, 1], [15, 1], [10, 2], [16, 2], [24, 2], [0, 3], [1, 3], [10, 3], [14, 3], [16, 3], [17, 3], [22, 3], [24, 3], [0, 4], [1, 4], [10, 4], [16, 4], [20, 4], [21, 4], [11, 5], [15, 5], [20, 5], [21, 5], [34, 5], [35, 5], [12, 6], [13, 6], [20, 6], [21, 6], [34, 6], [35, 6], [22, 7], [24, 7], [24, 8]]+(cols/4); //gosper glider gun
        //preset= #[[0, 0], [2, 0], [2, 1], [4, 2], [4, 3], [6, 3], [4, 4], [6, 4], [7, 4], [6, 5]]+(cols/2); //infinite1
        //preset= #[[0, 0], [2, 0], [4, 0], [1, 1], [2, 1], [4, 1], [3, 2], [4, 2], [0, 3], [0, 4], [1, 4], [2, 4], [4, 4]]+(cols/2); //infinite2
        //preset= #[[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [17, 0], [18, 0], [19, 0], [26, 0], [27, 0], [28, 0], [29, 0], [30, 0], [31, 0], [32, 0], [34, 0], [35, 0], [36, 0], [37, 0], [38, 0]]+(cols/4); //infinite3
        //preset= Array.fill(cols*rows, {[cols.rand, rows.rand]});
        preset.do{|point| envir.put(point[0], point[1], 1)};
        i= 0;
        u.drawFunc= {
                i= i+1;
                Pen.fillColor= Color.black;
                cols.do{|x|
                        rows.do{|y|
                                if(envir.at(x, y)==1, {
                                        Pen.addRect(Rect(x*cellWidth, height-(y*cellHeight), cellWidth, cellHeight));
    // the new line
    Synth.new(sinegrain2,[freq, x.linexp(0, cols, lowfreq, hifreq), amp, y.linexp(0, rows, lowamp, hiamp), pan, 0, grainDur, grainDur])
                                });
                        };
                };
                Pen.fill;
                cols.do{|x|
                        rows.do{|y|
                                var sum= 0;
                                neighbours.do{|point|
                                        var nX= x+point[0];
                                        var nY= y+point[1];
                                        if(wrap, {
                                                sum= sum+envir.at(nX%cols, nY%rows); //no borders
                                        }, {
                                                if((nX>=0)&&(nY>=0)&&(nX<cols)&&(nY<rows), {sum= sum+envir.at(nX, nY)}); //borders
                                        });
                                };
                                if(rule[1].includes(sum), {     //borne
                                        copy.put(x, y, 1);
                                }, {
                                        if(rule[0].includes(sum), {     //lives on
                                                copy.put(x, y, envir.at(x, y));
                                        }, {    //dies
                                                copy.put(x, y, 0);
                                        });
                                });
                        };
                };
                envir= copy.deepCopy;
        };
        Routine({while{w.isClosed.not} {u.refresh; i.postln; (1/20).wait}}).play(AppClock);
        w.front;
)


Microagressions: ‘Brazilian Transsexuals’

This has been a bad week for trans people (especially trans women) in the UK media. Here is a fairly neutral summary of the latest thing in a long week of things.
A friend asked me on facebook, why people were upset about Moore’s original phrasing: “The cliché is that female anger is always turned inwards rather than outwards into despair. We are angry with ourselves for not being happier, not being loved properly and not having the ideal body shape – that of a Brazilian transsexual.” The tl;dr answer to this question is that no minority group wants to be used as a metaphor for otherness.
The long answer is somewhat more complex. I don’t want to pick on the writer, just to discuss the issues raised, so let’s first note this is not a big deal – by itself. This is a microaggression. I’m sure everyone has been in situations where they were given little, frequent reminders that they didn’t belong or were disapproved of. Alas, this is routine in some interpersonal relationships. It gets you down, but it’s such small things that you can’t ever bring it up. Over time, so many small things turns into kind of a big thing. For people who are members of a minority group, they get this more often than just from dysfunctional family. Some people have to deal with microaggressions whenever they engage the public sphere. As you can imagine, it gets them down. This is why it’s a good deed to say something if you see a microaggression against somebody else. They might not want to say anything because it’s a single small event (in a long stream of events) that might lead to an awkward conversation, that they would need to have every single time they decided to engage.
My friend wanted to know if the problem was the phrasing. Indeed, using the word ‘transsexual’ as a noun is a bit like saying ‘the gays.’ It’s best avoided. Also, using the word ‘transsexual’ as a synonym for trans women erases trans men. Again, not cool. But the problem here is not just the phrasing but also, more importantly, the idea. She has a stereotype of a particular body shape in mind. Alas, she is referencing porn. I googled the phrase, ‘Brazilian Transsexuals,’ and all but two of the first page of results link to porn. One links to a question about porn on a general discussion forum. And one links to the news story that triggered this post.
I would strongly suspect that the reason this phrase is so linked to porn has to do with a lot of factors. Obviously, it’s now a self-perpetuating meme, but how it got there probably involves racialised stereotypes about South American women, sexualised stereotypes of trans women, and, indeed, a pornified view of women in general. Porn is not IMO intrinsically bad, but seeing a group of real, diverse humans as synonymous with porn actors is bad. Nobody wants to be seen that way.
This particular stereotype is also troubling because of the actual, real-life situation of trans women in Brazil. Last year, more than a third of trans people murdered in hate crimes were Brazilian trans women. A trans woman is murdered there more often than once every three days. They face horrific levels of violence. Many trans women flee for their lives to other countries. Even though they face a reduced chance of being killed, they still face discrimination based on being women, based on being trans, based on being an immigrant, based on being a refugee and possibly undocumented, sometimes based on language. (Yes, some get into sex work in order to survive.) Their situation is so dire, that some commenters have compared Moore’s statement to saying that (please pardon the next phrase, it’s fairly offensive) women desire to look as thin as refugees of a Nazi concentration camp.
Alas, this phrase has wider implications than just Brazilian women. There’s also the problem of gender-based othering. In Moore’s formulation, women are disappointed they don’t look like ‘Brazilian transsexuals.’ Of course, one group of women that look like Brazilian trans women are Brazilian trans women. However, in Moore’s formulation, Brazilian trans women are other – they are not women. Thus, by extension, trans women are not women. This is the central tenent of transphobia.
This was not said deliberately. Like many microaggressions, it was a thoughtless expression of unexamined biases. By itself, it’s a very small thing, but it’s part of a much bigger context where this idea is repeated over and over again in tiny ways.
If you’re a writer, or especially a journalist who might be called upon to write on a variety of topics, this may all seem alarming, as it is definitely possible to cause unintentional offence, and, indeed, nearly everyone does from time to time. However, fear not! If you do get something wrong, do NOT follow Moore’s example! Apologise and say that you did not mean to offend.
Of course, it would be better to avoid this kind of slip up in the first place. The rule of thumb is mentioned at the top of this post – don’t use any group of people as a metaphor for otherness. If you’re not sure about a turn of phrase, try substituting other minority groups and see if it sounds bad. Or ask a friend.
Sometimes we do need to reference otherness. The original quote could have said ‘femmebots’ and gotten the point across without causing any offence. They’re more widely known than the stereotype she did invoke and, even more importantly, they’re not real. They are fictional constructs, designed to represent exactly what she means. How perfectly convenient it would have been to use them.

Recording Audio and Video from SuperCollider on Ubuntu Studio

Recently, I needed to record my screen and audio while SuperCollidering on Ubuntu Studio. (This will work on other operating systems also also with some tweaks.) This is the code I included:

s.waitForBoot({

("ffmpeg -f jack -ac 2 -i ffmpeg -f x11grab -r 30 -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0" +
    "/home/celesteh/Documents/" ++ Date.getDate.bootSeconds ++ ".mkv"
        ).runInTerminal;

....

})

As far as I am able to determine, that allows you to record stereo audio from jack and the screen content of your primary screen. Obviously the syntax is slightly dense.

I was unable to figure out how to tell it to automatically get the jack output I wanted, so in order to run this, I first started JACK Control, used that to start jack, and then evaluated my SC code, which included the above line. That opened a terminal window.

Then I went back to JACK Control and clicked the Connect button to open a window with a list of connections. I took the supercollider output connections and dragged them to the ffmpeg input connections, which enabled the sound. This step is very important, as otherwise the recording will be silent. The dragging is illustrated in the accompanying image by the thick, red line.

Then AFTER making the audio connection, I started making sound with SuperCollider, which was then recorded. When I finished, I went to the terminal window opened by supercollider and typed control-c to stop the recording. Then, I quit the SC server and JACK.

After a few moments, the ffmpeg process finished quitting. I could then watch the video and hear sound via VLC (on my system, VLC does not play audio if jack is running, so check that if your film is silent). I used OpenShot to cut off the beginning part, which included a recording of me doing the jack connections.

The recommended way of recording desktop output on ubuntu studio is recordmydesktop, but there are many advantages to doing it with ffmpeg instead. There is a bug in recordmydesktop which means it won’t accept jack input, so you have to record the video and audio separately and splice them together. (If you chose to do this, note you need to quit jack before recordmydesktop will generate your output file). Also, I found that recordmydesktop took up a lot of processing power and the recording was too glitchy to actually use. The command line for it is a LOT easier, though, so pick your preference.

You need not include the command to start ffmpeg in your SuperCollider code. Instead of using the runInTerminal message, you can just run it in a terminal. As above, make sure you start JACK before you start this code and don’t forget to make the connections between it and ffmpeg. I prefer to put it in the code because then I don’t forget to run it, but this is a matter entirely for personal preference.

Cross-platform

Almost all of the programs linked above are cross-platform, so this is very likely to work on mac or windows with only a few changes. Mac users have two ways to proceed. One is to use jack with QuickTime. You can use jack to route audio on your system so the SuperCollider output goes to the quicktime input. Or, if you’re in windows or just want to use ffmpeg, you will need to change the command line so that it gets the screen geometry in a different way and so that it captures from a different device. Check the man pages for ffmpeg and for avconv, which comes with it. Users on the channel on freenode can also help. Leave a comment if you’ve figured it out.

Compiling superCollider on Ubuntu studio 12.0.4

For various annoying reasons, I’ve just reformatted my hard drive and freshly installed the latest Ubuntu Studio LTS. As soon as I’d restored my home directory, I set to work compiling SuperCollider.
The README_Linux.txt file covers most of what you need to know, but here’s what I had to type to get going:

sudo apt-get install git cmake libsndfile1-dev libfftw3-dev  build-essential  libqt4-dev libqtwebkit-dev libasound2-dev libavahi-client-dev libicu-dev libreadline6-dev libxt-dev pkg-config subversion libcwiid1 libjack-jackd2-dev emacs

cd ~/Documents

git clone --recursive https://github.com/supercollider/supercollider.git

cd supercollider

mkdir build

cd build

cmake .. -DSUPERNOVA=OFF

make

You have to disable supernova because it requires a newer version of gcc. If all that works, then you can install it:

sudo make install

I had something go wrong with my installed SC libs, but that’s a side issue.

Granular Performance Thingee

I’ve been working on a thing where I draw shapes and they turn into granular synthesis clouds. I have some ideas for what I want it to do, but one thing I’d really like to do is be able to record video of me playing it, via recording my desktop – with audio. Indeed, I need to sort this out very shortly, as I’d like to submit a proposal for the SuperCollider Symposium. (If anybody has advice on how to record this on Ubuntu, please do leave a comment.)

As it was, all I’ve got is a screen shot of post-drawing and an audio file of what it sounded like whilst playing.

Although this has quite a few bugs, some people have expressed some interest the system, so I’m making source code available. It’s written in SuperCollider. This is nowhere near a release version and the code is ugly, so be forewarned. but it mostly works. It relies on the Conductor quark by Ron Kuivila. There are two files. Put Cloud.sc in your Extensions folder. The open up test.scd in the lovely new SC 3.6 IDE. Or it will probably work in earlier versions. Select the whole file and evaluate it.
One of the windows that opens is a controller with a play and stop button. One is a large black window. And one is a bunch of blank buttons. I have no idea what they don’t have labels. Draw in the black window using click and drag (or a stylus if you’re lucky). Press play in the controller window. When the cursor gets to the cloud, you can hopefully hear it playing. There are some sliders in that window to change the speed of the cursor. You can do this while it is playing. You can also draw new shapes while it playing. The blank buttons have sound parameters attached to them. So if you press one, the next cloud you draw will have that button’s parameters. (The buttons are supposed to say things like ‘Short Sine Grains’ or ‘Long Saw Grains’.) If you want to modify a cloud, you can right click on it to get a popup window that changes some of the sound settings.
You can’t save your work, but the server window has a record button on it. If you press that and then play your drawing and then hit the ‘stop recording’ button in the server window, you’ll be able to record the audio in real time..
I had the idea that I could draw on this with my stylus while on stage in real time, but when I plugged my computer into the projector, it changed my screen parameters and my stylus calibration failed. I’m sure there is a work around, which, ideally, I’d like to find by next week.

Using Perl to Deal With Google Forms

This post is meant to be useful for people who have not previously used perl, as well as a reminder for more experienced folks.
Let’s suppose you were, say, trying to run an event and had asked people to submit proposals for workshops. Let’s say further you had not installed software to manage this, but had instead created a Google Form.
(Why would you do this? Unlike your ISP, they’re ‘free’ (in exchange for your data/ soul). They’re robust. They’re easy.)
At the end of your call, you have a spreadsheet full of entries. Yay! Ok, now what? That’s hard to read. Let’s output them as individual HTML files.
Ok, the next thing you’re going to want is a unique ID for each submission. The timestamp might work, but let’s say you decided to go through and add a column on the end called Unique ID and then hand typed sequential numbers through the whole spread sheet. (Please leave you better ways of handling this in the comments!)
The next step is to download your speadsheet in CSV format. This is a comma separated format that databases and spreadsheets use for information exchange. Let’s say you’ve saved your file as workshop.csv and your perl script is going to be saved to the save directory.

CPAN

You’re going to need to get some modules from CPAN. If, like me, you wandered away form perl for the last several years, this is a new but fantastic development. Google for more information. At the top of the file, when you see lines that look like “use Foo::Bar” or “require Baz::Bat”, Foo::Bar and Baz::Bat are the names of cpan modules you will need to install.
First of all, make sure you have CPAN installed.
Next, install a module that will make installing the next modules easier. Type: ‘sudo cpan App::cpanminus’ (without the quotes). Omit the ‘sudo’ is you don’t have root or administrative privileges on your computer (or you don’t know what those are) or if you’re on windows.
Then install the cpan modules that you’ll need:
sudo cpan Text::CSV::Encoded
sudo cpan HTML::Entities
sudo cpan URI::Find::Schemeless

Reading the csv file

The whole script is included below, but this is some of the part you’re going to need to change.
Let’s say this is what your spreadsheet headers look like:

Timestamp Your name Contact email Link to your website Experience level required to participate in workshop Proposed workshop duration Outline of the workshop aims and content Biography Required Resources. Unique ID

Ok, so how the script is going to work is that we’re going to go submission by submission, reading the database and outputting an HTML file. Each of those table columns has a different piece of data for each submission. Let’s save them in variables. We can start by declaring them, and then by using them.

my ($time, $name, $email, $website, $experience, $duration, $outline, $biography
    $resources, $id);

In Perl, variable names for regular variables (scalar variables) start with $. In that line, we’ve named all the variables we’re going to use to read database data.
Ok, we’re reading the csv file in a loop. The loop takes a submission from a file and puts it into an array. The array indexes start with 0. We’re going to read from the array into our variables. That will look like this:

$time = $fileds[0];
$name = $fields[1];
$email = fields [2];
$website = $fields[3];
...

If we carry on, we’ll get all of the database fields.

Formatting Our Data

But we don’t just want to read them in, we want them to format correctly for HTML. There are some subroutines declared at the top of the file. Those subroutines do a few things: One prepares special characters (like accents) to be encoded properly into HTML and they look for things that look like URLS and convert them into links. Another breaks up paragraphs properly. The third one helps out the other two.
Which one we use depends on how we’re going to present the data. For example, we might use the name as a header, not as a paragraph, so we would just use the encoding/link finding one for that. But the biography is likely to be a paragraph or two, so for that one, we want to break up the paragraphs properly. The encoding/link finding subroutine is called ‘prepare_str’ and the paragraph finding one is called ‘htmlify’. You will only ever need to use one of these for any variable.
Let’s change our above example so that in addition to reading from the csv file, we also prepare the data correctly for output:

$name = prepare_str($fields[1]);
...
$biography = htmlify($fields[7]);
...

Which of those routines you pick has to do with whether the data coming in is broken into paragraphs.

Outputting your HTML file

open FILE, ">$id.html" or next;

I’ve decided to just name the files after the unique id. Since this is different for every entry, I don’t need to worry about accidentally trying to create two files with the same name. (If I tried to use the submitter’s name to create the files, I’d need to first check if a file with that name already existed, in case the same person had made multiple submissions).
In perl, you can put your variables right inside a string and it will substitute appropriately. If the submission has the id 666, then the script will translate from “$id.html” to “666.html”.
Perl has a nifty feature that lets you output multiple lines of of text to a file from right in the program. You don’t need to worry about watching out for special characters like quotes, and you can put your variables directly into the string. However, this does mean that if you want to output a $ or a @ you’ll need to type in $ and @ for them.

     print FILE <<END;

That starts the longer text section. It continues until it gets to a line that looks like:

END

Let’s say we just want to print out a header, the person’s name and their biography. We’ll use their name as a section heading. That would look like:

     print FILE <<END;
<html>
<body>
<h1>$name</h1>
$biography
</body>
</html>
END

You could stick in that section anything else you might want to stick in your html file, including style sheet stuff, extra text, extra links, whatever you want.

The Whole Script

#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV::Encoded;
use HTML::Entities;
require URI::Find::Schemeless;

my ($file, $csv, @fields, $io, $row, $output);
my ($id, $name, $email, $website, $experience, $duration, $outline, $bio, $tech);

$file = 'workshop.csv';

sub makelink
{
my $str;
($str) = @_;
chomp($str);
if ($str !~ /^http/i) {
$str = "<a href="http://$str">$str</a>";
} else {
$str = "<a href="$str">$str</a>";
}
return $str;
}

sub htmlify
{
my $str;
($str) = @_;
chomp($str);
$str = prepare_str($str);

$str = "<p>$str</p>";
$str =~ s/n/</p>n<p>/g;
return $str;
}

sub prepare_str
{
my ($str, $finder);
($str) = @_;
chomp($str);

$str = encode_entities($str);

$finder = URI::Find::Schemeless->new(&makelink);
$finder->find($str);

return $str;
}

$csv = Text::CSV::Encoded->new({encoding => undef, binary =>1, eol => $/ });

open $io, "