geekchick77: (Default)
[personal profile] geekchick77

Edit: This post is up on Geek Feminism and has also been syndicated on BlogHer. It was #1 on Hacker News for several hours, was highly ranked on Reddit, and has been shared over 1000 times on Twitter.

I work at a startup, and most of the time, I enjoy it. Compared to most tech companies, and certainly most startups, we have quite a few people who are relatively clueful. There are relatively few moments of “brogrammer” culture. There is, however, one thing that has been bugging me for months, ever since it was introduced.

I took it for granted that everyone was familiar with the “That’s what she said,” joke, but a recent conversation with a consultant friend made me realize some industries don’t feature it on a daily basis. For those who haven’t heard it a million times, the idea is that when somebody says something that could remotely be turned into a sexual joke, e.g. “I’m trying to solve this problem but it’s really hard!” you say “That’s what SHE said,” in a lascivious tone.

Now, I admit to having made this joke myself, at times. Once in a while, I even find it funny. What I don’t find funny is a bot we have in our general IRC channel at work, that has some basic AI devoted to determining when to interject TWSS into the conversation.

I asked a number of times to have that bot function turned off, but got the usual combination of being ignored, being told it’s funny, and being told I should lighten up. I tried explaining once why it was objectionable, and managed to get the guys saying variations, e.g. “That’s what your DAD said,” for an evening, but that was about it.

Last Friday, the bot went a bit crazy and started throwing TWSS into the conversation with no apparent rhyme or reason. Finally, I had had enough. And then it came to me: I would write my OWN bot, that responded to TWSS with a quotation from a notable woman. If they are so keen on what she said, why don’t we get educated about what she really had to say. And so the “whatshereallysaid” bot was born. It might annoy the guys into shutting off the TWSS bot, or we might all learn about notable women. It’s a win either way, in my books!

I’d never written a bot, but how hard could it be? Python is my primary programming language these days, so I started searching for Python IRC bots. I tried a few different libraries before setting on twisted. I found a very nice example of a logging bot using twisted , and went from there.

Step 1: I copied the LogBot code into local files, and tried running it. Since the IRC channels I am normally in use SSL, I had to set up my own channel on a public IRC server for testing. It took a while to get the settings right, but finally I succeeded!

Step 2: I created a quotes file and put in a couple of my favorite quotes to test with. I created class to randomly select a quote from the file. I modified the log bot so that if you said its name, it would get a quote and post it to the channel.

Step 3: My ultimate goal was to put the bot in the work channel, so I needed it to support SSL. I found a stackoverflow thread about using a different connect function, one for SSL. Again, it took me some time to get the settings right, but eventually I got the bot to connect to the work IRC server.

Step 4: Now I needed more quotes! I found an excellent website of quotes by women and wrote a small script to scrape the quotes. I used the excellent python requests library. The script got the content of the main links page, and iterated over the links, using a regular expression to get the name and then following the link to the quotes page. Then it pulled the quotes out of the page content and stored them in a text file, one per line, with the woman’s name attached.

Step 5: I set up my own private channel and had my bot connect. I tested it to verify it was correctly noticing and responding to trigger phrases. Once I was confident of that, I tried in the general chat channel. Success!

Step 6: I cleaned up the code, removing everything unrelated to posting quotes, and adding a settings file. I made the trigger phrases configurable. I also added a virtualenv. I felt the project was now in good enough shape to post publicly, so I shared it on github.

Step 7: At this point, I was still running the bot on my own computer, which was clearly non-ideal. I wanted it to be in the channel all the time, not just when I was logged in! I found a python daemon implementation and made my bot run through that. Perfect! Now I could run it from one of the development servers at work.

Step 8: Unit tests, of course! No project is complete without them. I only have tests on the quote selector so far, but I am going to set up some mock tests on the bot logic.

Originally, I had called the project “whatshereallysaid”, but as I was working, I realized this could be much more broadly applied. Anyone could clone my github project and configure a bot to respond to whatever annoying comments they had to put up with. Inspired by “take back the night” and “hollaback”, I decided to rename the project “talkbackbot”.

I finished all this rather late on Friday night, so there was nobody around. I waited with anticipation to see what the response would be. To my surprise, many coworkers complimented me on creating the bot, including some I would never have guessed would appreciate it. Some people even retweeted my announcement that the bot was available on github.

It has been fascinating to watch the ongoing reactions. There have been complaints that we have too many bots in the channel now. There have been complaints about it spamming the channel. There were several “Make them shut up!” responses. These are not reactions I have seen the other bots elicit, certainly not with such intensity. One person even complained about the name being too long, though to his credit he realized right after he said that that several other people in the channel also have very long handles.

To me, all of this seems like typical geek behaviour: something is making them uncomfortable, and so they attack it on “rational” grounds. Most likely, they aren’t even aware of the gut reaction fueling their logic. Interestingly, the intensity of emotion seemed to carry over into subsequent discussions, including one about women in the Python community. For the most part, I have not responded to the comments. I did shorten the bot’s name to “twsrs”, and I pointed out that it’s trivially easy to have the bot not say anything: don’t say TWSS.

In any case, I feel that I have succeeded in constructively disrupting an aspect of my work culture that made me uncomfortable. This is the first personal project I’ve ever thought of, coded, and made public, and I am pretty excited about it! It makes me so happy every time the other bot says “that’s what she said,” and my bot responds with something like:

Our struggle today is not to have a female Einstein get appointed as an assistant professor. It is for a woman schlemiel to get as quickly promoted as a male schlemiel. ~ Bella Abzug

One of the most hilarious responses was a guy saying he was going to say TWSS a lot more, so he could get more quotes! I decided to add another trigger phrase just for him, since the last thing I want to do is encourage *more* TWSS!

Interesting approach

Date: 2012-03-28 12:57 pm (UTC)
From: [identity profile]
I've never really understood the TWSS joke, probably because I'm missing some cultural context. I really, really hope I'm not this kind of asshole about other things without realising.

Small tip: since you're already using Twisted, you may find it useful to daemonise it with twistd ( and configure it similarly.

For example, to start twisted.web:
$ twistd -n web --path=. --port=8000

So your twsrs bot could have something like
$ twistd -n twsrs --trigger="BINGO!" --ssl=on --port=6667 --channel=#foo

PS: Posting on your blog was a little hard (anonymous disabled, openid login still required many clicks to add an email address)

Date: 2012-03-28 03:00 pm (UTC)
phi: (Default)
From: [personal profile] phi
My husband pointed me at this. Brilliant! I love the idea, and would have totally used this at my last job (where TWSS jokes were the most benign aspect of the hostile work environment).

way to go

Date: 2012-03-28 03:01 pm (UTC)
From: [identity profile]
It excites me to see other folks using python irc bots to mess with people, since I have a long history in this area myself. Take a look over at and you'll see some of the things I've done over the years. In fact, if you watch this 5 minute Ignite talk I gave (about how I replaced myself with an IRC bot), you may be inspired further:

Keep up the good work!

Re: way to go

Date: 2012-03-29 08:16 am (UTC)
From: [identity profile]
How about a Spockbot? It could intersperse Mr. with Dr., perhaps to hilarious effect.

Or, you could put feminist trollbot in a room with Santorumbot and let the "personalities" bounce off each other. :P

Re: way to go

Date: 2012-03-29 02:24 pm (UTC)
From: [identity profile]
I heartily recommend increasing the troll quotient of your bot. Fight the power. :-)

Awesome reaction!

Date: 2012-03-28 03:03 pm (UTC)
topfunky: (Default)
From: [personal profile] topfunky
That's a fantastic response! I like how it even exposed the biases in their objections to it.

Nice solution

Date: 2012-03-28 04:32 pm (UTC)
From: [identity profile]
Nice way to apply a typical "hacker" (in the MIT sense) solution to a problem. If you don't like the answer, change the question! As a bonus you also got a chance to play around with something new, and that's always the best kind of solution.

Bots are always an iffy proposition, they walk a very fine line between entertaining and annoying, and a lot of times it's hard to come to a consensus which one a particular bot or feature of a bot falls under.

contents: 100% grade A win

Date: 2012-03-28 07:46 pm (UTC)
From: [identity profile]
That is the most awesome thing ever and you are my new hero.

"I pointed out that it’s trivially easy to have the bot not say anything"... oh, to have seen the geeks squirm when you said this.

Is there any way you can post examples of this bot in action?


Date: 2012-03-28 09:35 pm (UTC)
From: [identity profile]
I bet you're a blast at parties.

Re: super

Date: 2012-03-30 02:21 pm (UTC)
From: [identity profile]
Yes. I bet she is. Infact she's awesome.

This clever and intelligent way of fighting sexism even made Lwns quote of the week page this week.

In contrast, comments like yours, are *precisely* why our community still has a lot of work ahead of us to make it welcoming to women.

Date: 2012-03-28 10:19 pm (UTC)
frater_treinta: (Default)
From: [personal profile] frater_treinta
Sorry if it's there and I missed it, but did you post the download link?


Date: 2012-03-29 01:45 am (UTC)
viktor_haag: (Default)
From: [personal profile] viktor_haag
You. Are. Freaking. Awesome.

I am immediately sharing this on my G+ thread. And telling lots of people that I know. Maybe'll I'll tweet it. If only ten percent of the world showed this kind of creativity and initiative, we'd be so much better off, our current position would be left behind in the dust.

Thank you so much for directly and cleverly addressing a problem that's both unbelievably widespread, and so badly in need of addressing.

I feel I should say more, but I have no idea what to say next. So I'll leave it there.

Date: 2012-03-29 05:35 am (UTC)
From: [identity profile]
Hah! This is the best Thing in Tech I've read all week. Fighting bad snark with better snark, I love it!

PS: You made the Linux Weekly News. :)

Take Back the Night

Date: 2012-03-29 08:53 am (UTC)
From: [personal profile] drgonzo
I'm so impressed by this story. I'm grateful you did all of this, and think it's wonderful that you're fighting back against the apathy in such a positive and creative way. Well-done.


Date: 2012-03-29 12:06 pm (UTC)
From: [identity profile]
i love this. i did something similar by having my work irc bot respond to all "twss" with 'HR!' which started annoying people really fast. this is far more constructive! if twss hadn't died out (thank goodness) at my workplace i'd definitely be forking and running my own talkbackbot.

i'm also a fan of the well-applied "that's what he said;" it turn the discomfort around for many (male) geeks.

thanks for your work and for sharing.

Re: nice.

Date: 2012-03-29 07:33 pm (UTC)
From: [identity profile]
It's funny, most instances of TWSS that we've used at work tend to be fairly self deprecating as in:

Guy1: We can't use the normal button on this page, it isn't big enough.
Guy2: That's what she said!

Usually followed by one of the other guys adding in an equally snarky "Zing!" comment.

Even then, it was fairly rare that that particular "joke" was used. We're on the whole a pretty non-PC group though, so TWSS is actually fairly tame compared to a lot of the things we joke about. We often joke that if HR ever got ahold of our chat logs we'd all be fired on the spot, and in a couple cases probably interviewed by the police (not that we've actually done anything wrong, or meant any of the comments in anything but a joking fashion). We're a bit like southpark in that we're fairly equal opportunity in the jokes we make, nothing is sacred, particularly if it's sacred.


Date: 2012-03-29 04:58 pm (UTC)
From: [personal profile] glyf
Thank you so much for using Twisted for this. I'm pretty sure I speak for the whole development team when I say we're quite pleased to have been a part, however small, of this victory for civility on the Internet :-).


Date: 2012-03-29 06:18 pm (UTC)
From: [identity profile]
Nicely done, and I can't imagine a more perfectly commensurate response.

Complaints about "too many bots" can't be directed to you -- after all, your bot will be utterly silent unless the irritating TWSS bot is *already* making noise.

One classless joke = one classy quote, no more & no less. The tone of a conversation is dragged down one notch, and auto-boosted up one notch automatically.

Anyway, moving on -- thanks for setting a good example.

Here from Hacker News... left the tab open until I had time to figure out how to comment, since it seemed worth it.


I love it!

Date: 2012-03-30 05:10 pm (UTC)
valancy: "Dear Buddha, please bring me a pony and a plastic rocket" (Default)
From: [personal profile] valancy
I like the 'fight fire with fire' approach. I'm in IT, I first found the twss joke distasteful but I've used it myself just like you. I'm starting to wonder if I can work 'that's what he said' used in a similar vein into my repertoire as well, but since I work with all guys, it's unlikely to take off. Still, great job both with creating this and writing up the process! Oh, and social change too, of course. :)

TWSS is news to me

Date: 2012-04-16 11:47 am (UTC)
From: [identity profile]
I've been moving in geek circles for a long time now (20yrs), but I'd not come across this 'TWSS' meme before (or at least never noticed/understood), so you're right it's by no means universal.

Anyway, neat cultural as well as techincal hack.

Excellent bot

Date: 2012-05-21 04:16 pm (UTC)
From: (Anonymous)
Love your use of the bot to make people this - this is the hacking I love to see around me each day.

If people can be made more aware of what affects and effect their language and actions have on others, then that is always a great thing.

Cheers for the informative post!

I love me some geek feminism!

Date: 2012-07-04 04:05 am (UTC)
From: (Anonymous)
What a wonderful story. I've posted it as a success story in my feminist Facebook group.

Alexis, friend of Arcadia

Very Inspiring Blogger Award

Date: 2013-02-04 07:07 am (UTC)
From: [identity profile]
Hi Jessamyn:

I just wanted to nominate you for this Award meme thing. It is the Very Inspiring Blogger Award. I place it here because this, along with a few other posts, are just really inspiring to read and I think you should definitely make more of these when you find the time. The details can be found here if you are interested:

Take care.


Date: 2013-05-17 08:44 pm (UTC)
From: (Anonymous)
I never found TWSS said lasciviously to work as a joke. It kind of crosses into creepy. It took me forever to even realize it *could* be some kind of sexual thing, because it always struck me more as pointing out the unintentional entendre. Like, you know, a sign that says "MUFF $12, TAILPIPE $19!". (actual sign along highway 19 in clearwater circa 1994 or so.) Or someone doing a video about how to clean your (mouse) balls, who never uses the word "mouse". Then insists there's no way what they said could be entendre. At which point, the laughter is almost lethal.

There's two ways i've found it to be reasonably funny.

1) Used sparingly and spoke just loudly enough so that maybe one other person can hear you. preferably in a situation where laughing would not be appropriate. Because as everyone knows, if you are in a situation where you are absolutely positively Not Supposed To Laugh, and the room is full of Very Serious People saying Very Serious Things, then double entendre is guaranteed to happen about every fourth sentence, and not laughing starts to approach impossible.

2) Beavis and Butthead it, using it so relentlessly and nonsensically that it is funny because it makes no sense whatsoever. Like sitting in an office saying "You said 'What'". "It's a nice day outside" "TWSS" "What?" "TWSS" "are you going crazy?" "TWSS" and so on. It almost becomes a form of in person trolling. this one clearly works better outside of work.

Personally I prefer 1), because after about 20 minutes in A Very Serious Meeting, I'm desperate for some illicit laughter to keep from going comatose. When the 65-year old CEO starts saying things like "We'll have to use both hands on this one", or "We're going to ride this baby hard", well, TWSS is pretty much guaranteed to start chain laughter.
Page generated Apr. 19th, 2019 12:36 am
Powered by Dreamwidth Studios