tim: protest sign: "Down With This Sort of Thing" (politics)
In what follows, I'll assume you already have a passing familiarity with the candidates and ballot measures, but http://smartvoter.org/ is your friend in general.

Like most such guides, this one will start out being relevant to everyone eligible to vote in the US, then quickly narrow itself to just California, then further narrow itself to Santa Clara County and then San José.

tl;dr: Californians, vote yes on 30, 34, 36 to fund education and abolish the death penalty and Three Strikes; no on 32 and 35 to stand up for labor unions and sex workers. San José people, vote yes on Measure D so we can have a decent minimum wage.

President: Barack Obama

You could argue that to vote for Obama is to vote for the killing of children, or that to vote for him is to vote for the protection for other children or even killing fewer children. Virtually all US presidents have called down death upon their fellow human beings. It is an immoral system.

You don't have to participate in this system, but you do have to describe it and its complexities and contradictions accurately, and you do have to understand that when you choose not to participate, it better be for reasons more interesting than the cultivation of your own moral superiority, which is so often also the cultivation of recreational bitterness.

-- Rebecca Solnit

My tone here is different from my tone about Obama in 2008. Well, I'm four years older, but aren't we all? In retrospect, maybe I was naïve for seeing Obama as an anti-war candidate, but then again, he did end the war in Iraq. What's more, I have a lot more confidence in his willingness to end the war in Afghanistan than I do in Mittens, though it's not a sure thing.

As many people have pointed out, there's nothing particularly liberal or progressive about Obama's foreign policy. That is neither why I'm voting for him, nor enough to make me not vote for him. As many people have also pointed out, there also aren't a lot of huge differences between Obama and Romney vis-a-vis foreign policy. (Not that we know much that's specific about what Mittens' foreign policy would actually be.) We can probably count on both candidates to keep expanding the military-industrial complex, and yes, kill civilians and violate civil liberties.

On the other hand, there is a huge difference between the two candidates when it comes to women's rights and LGBT rights at home, and that matters. There is no way in hell you can say that there's no difference between Obama and Romney when it comes to reproductive choice. And since whoever gets elected will likely be able to appoint multiple Supreme Court justices, their views on abortion will matter for decades.

Likewise, as a trans person, I was able to get government-issued ID that reflects the sex that I am as a direct result of Barack Obama and Hillary Clinton: in 2010, the State Department liberalized the rules for correcting sex markers on passports. I don't claim that's a huge thing, but it matters, and it wouldn't have happened under a Republican. If Obama is re-elected, maybe Social Security will fix their sex marker correction rules as well; I wouldn't hold my breath for a Romney administration to do that.

I am so, so tired of upper-middle-class white cis manarchists lecturing us all about how Obama and Romney are the same because predator drones. (I know that not everyone saying this is an upper-middle-class white cis manarchist, but I'm okay with people who have at least thought about reproductive rights still deciding they don't see a difference between the major party candidates.) The thing is, not voting, or voting third-party, won't save anyone from being killed by a predator drone. It won't prevent anyone from being tortured. All it does is display your radical cred. It's a deeply self-absorbed thing to do. What will happen if Romney wins is that women will get hurt, trans people will get hurt, queer people will get hurt. You can register that you are against that by voting for Obama.

If you're white, using concern about brown people abroad as an excuse to decline to vote for a candidate who is the better one for women, people of color, queer people, poor people, and just about any other disadvantage group in the US doesn't win you any anti-racist points. Actually, it just makes you look like a racist for holding President Obama to a higher standard than you would hold a white politician to. Did you really expect the guy to single-handedly dismantle the military-industrial complex? Do you realize how much flak he would get from Republicans for being weak on terrorism -- that a white president would never have to face -- if he had pushed harder against predator drones and torture? That's an issue not because his feelings would be hurt, but because he wouldn't have been re-elected and would have been replaced with a genuine warmonger.

I'm also guessing that the manarchists claiming that Obama and Romney are the same have never been denied health insurance because they had a pre-existing condition. I have been, and because of Obama, that will never happen to me again. This is not an abstract or theoretical concern for me.

So when I hear those privileged manarchists saying "don't vote for Obomney or Robama", I hear them saying that they don't give a fuck about women, or at least, not unless those women are so far away from them that supporting their rights won't threaten their own male privilege. I hear them saying that they don't give a fuck about poor people. And I hear them saying that they impose an unreasonably high standard of achievement for a Black president, one that is likely unachievable by anyone (much less a leader who is limited, who we've seen has already been limited, by others' willingness to destroy the entire country for the sake of stopping a Black man from leading effectively). I hear them saying that the only way in which national politics could conceivably (pun intended) affect their lives is insofar as having theoretical opinions about it affects how they feel about themselves, or how impressive others find them. Finally, I hear them saying that they actually don't care about anyone or anything outside themselves: that their priority is displaying their own supposed radicalism, reminding me that they're more radical than I am.

I am not holding my nose while voting to re-elect the President. I can criticize a group, or a person, and still support it, because my thinking isn't black-and-white. And I agree with Rebecca Solnit: "having marriage rights or discrimination protection or access to healthcare is not the lesser of two evils. If I vote for a Democrat, I do so in the hopes that fewer people will suffer, not in the belief that that option will eliminate suffering or bring us to anywhere near my goals or represent my values perfectly." I'm not voting to express myself. I'm voting to have an effect, and yes, my vote does matter even though I live in California. If you're a US voter, your vote matters no matter where you live. The popular vote matters for legitimacy as well as the electoral vote.

(If you're still voting for a third-party candidate regardless of anything I say? Please go vote for Jill Stein instead of horrible transphobic bigot Roseanne Barr.)

The rest of this is only directly relevant to you if you live in California.

US Senator: Abstain


Dianne Feinstein is a homophobic xenophobe. She's also highly likely to be re-elected, and there's no write-in option. (Any temptation I might have had to vote for her Republican opponent, Elizabeth Emken, was erased as soon as I read about her involvement with ableist movements to "help" autistic people by eliminating the.) So I'm not voting on this one.

Ballot measures and even more boring stuff, oh my )
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Today, I finished fixing issue 2284 -- I'm just doing the final test run, then I'll submit a pull request (not push directly this time!)

This is sort of a weird bug. Rust had a notion of "kinds" that was distinct from our notion of traits, because kinds existed before traits did. If you know what kinds mean in other languages, it's more or less the same in Rust. If not: a kind is just the type of a type. Just like values have types so that the compiler can check that you're using them in ways that make sense, so do types have kinds, so that you can be prevented from using types in a nonsensical way.

Rust's kinds, though, are unusual: we had four constant kinds, const, owned, send, and copy, which can also be combined. So a given type could have none, some, or all of these kinds. The copy kind, for example, describes types whose values are allowed to be copied.

Once we introduced traits, it made sense to look at kinds as special traits that were wired into the compiler. So that's what I did to fix #2284. This had the nice effect of making the AST representation of type param bounds (a bound is the thing after the colon when you write <T: Copy> as a parameter list) much simpler: there were no longer any special cases for the built-in kinds. Now, resolve resolves references to things like Copy to placeholder traits that get defined in the core library, and the typechecker special-cases to turn these into specially represented bounds in the ty::param_bound data structure when it sees references to the placeholders.

For this bug, the net effect is that now, you can override Copy and other built-in traits/kinds with your own traits if you really want to. The one weird thing that happens now is that if you use the #[no_core] attribute to say you don't want to import the core library, you won't be able to use the Copy trait in your type parameter declarations -- but that's probably not so bad.
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Today I mostly just checked in code that had been sitting in my repo waiting for the tree to be un-frozen...

...and it is un-frozen, because we released! If you really want to for some reason, you could read the Hacker News thread or Reddit thread.

I fixed the three related bugs having to do with constants and discriminator exprs; fixed another bug where the fix was to change resolve so that structs can't capture type parameters; and fixed this bug where the code in trans that normalizes types was interacting with the type substitution code badly. And that's all I feel like saying right now. Oh, and I did a code review (and totally forgot to ask for reviews before checking in any of my own code. Hopefully publicly shaming myself will encourage me to do it next time.
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Friends,

I'm in need of both some advice, and some help. I'm currently living in downtown San Jose in an apartment that I'm paying $1600/month for. I like my apartment a lot, but the rent is (too damn) high, and I'm in a situation where I have so much medical debt (thanks to being a second-class citizen!) that I have to pay off to the tune of around $2000/month that I have very little money left for any expenses after all that is paid. It's not a sustainable situation, since I keep going over budget.

I'm looking to move to someplace cheaper. I work in downtown Mountain View, and originally, I wanted to move close enough to work to be able to walk. However, I don't think that'll happen within my price range. I could do a little better, price-wise, by moving to Sunnyvale. That's still possible.

Here's my question, though: I'm asking myself, what if I moved to an apartment in the low end of the price ranges that are available, even if it meant I continued to have a 20-30 minute (each way) driving commute, *and* I was in a suburban neighborhood? I moved to downtown San Jose because I thought that living in a car-centric neighborhood (in someplace like Santa Clara, the outer reaches of San Jose, or Campbell) would be despair-inducing. But the truth is that I don't *do* a lot downtown. I spend most of my time at/near work. The main thing I take advantage of downtown is the San Jose library which is great, but I could still go occasionally. And, I'm driving a lot; public transit is nearby me, but not useful enough. So, why not go the whole hog? This would be temporary (6-12 months) and the advantage is that I could pay off my debt faster and not worry quite as much about not running out of money every 2 weeks.

But maybe I'm fooling myself! After all, I hated living in Seaside and Salinas. On the other hand, that was in large part because I had a job I hated, and it was hard to get anywhere fun from there. Here, I can get to San Francisco/East Bay on weekends and even on weekdays with the car. So would it be worth it for me to move to a cheap apartment someplace like Campbell (which does seem to have cheap apartments) if it meant saving $500-$600 a month on rent? I feel like it wouldn't really change my daily routine much; I'd still (likely) be driving to work most days. Oh, and I'd be saving another $110/month on parking.

I could save even more money if I lived in a room in a house, but that's hard to do with two cats and two bunnies. I'd consider it if I knew of a space in a house with cool people, though!

So the advice I'm asking for is: would moving to someplace more suburban and less transit-accessible, but cheaper, be a practical solution to my money problems? Or am I fooling myself and would I hate it every minute? And the help is: if you know of either an apartment or shared housing situation being available, please let me know! Here's what I'm looking for:

absolutely necessary: allows cats and bunnies; 30 minutes or less each way non-rush-hour car commute to downtown Mountain View (turns out this is a pretty big area: between Burlingame and Los Gatos north/south; between Woodside and east San Jose west/east)
strongly preferred: no carpeting; near Caltrain; allows subletting (as I may end up being away for a while for work; that's not for sure, hence why I'm probably going to go ahead and move)

I'm looking to move starting around Nov. 15, but can wait for the right place (I haven't given notice yet). My price range is $1100-$1400 for apartments, under $1200 (depending on circumstances and location) for a room in a house. Also, if you have suggestions for where to look for housing (obviously I'm looking on Craig's List, but it's full of spam as usual), I'd appreciate it. I know I know lots of people who live in this area!
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Today:

* Got my massive pull request for issue 2633 (removing last-use analysis) ready to submit. Yes, I said "pull request", even though normally I'd be committing this directly. This week we decided to switch to a code-review model, even for core Rust contributors. So all of us will have to file a pull request and request a code review for any non-trivial change (we're being trusted as to deciding what's "trivial"). I think that's a good thing -- should foster more of us understanding more of the code in the compiler.

* Worked on issue 3521 and related. I had a minor "aha!" of realizing that there was already a convenient place in resolve to attach the check I needed to attach (that constants don't refer to names that aren't constant, such as local vars or arguments): in upvarify. A bit of resolve hacking later, I got the test case that tests that a constant declaration referring to a local variable is rejected working. Still working on getting discriminant exprs in enums to be treated the same way.
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Today, I did bug triage, for the first time in five weeks (I'd been skipping it due the release.) That meant... a lot of bugs. Since we now have a handy list of priorities for 0.5, I made an 0.6 milestone and moved most things to it that didn't seem to fit the priorities (except for ICEs, those are always important).

After that, I hadn't had enough, so I went through some of the *very* old bugs in the database again; most of them are still quite valid. (Though most are enhancements rather than bugs.)

Then, I went through all the FIXMEs in the code and made sure the issue numbers were still valid. In some cases I could just delete the comment because we decided to give up on the issue. In other cases, the issue had been closed and I tried to fix the code to take advantage of whatever feature was now working -- sometimes I ran into another issue, and gave up in the interest of getting through everything today. In still other cases, I was actually able to fix something :-)

After a lot of that, I briefly looked at the reference manual, but only had time to edit two sections.

Tomorrow, maybe we're releasing? Not that I know.
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
I spent all of today editing the rest of the borrowed pointer tutorial, and then the overall Rust tutorial, which is pretty big. It took a surprising amount of time for me to get my comments transferred from the page to the screen.

Now that I've read all the tutorials, I'm pretty impressed with the quality of our Rust documentation! I had lots of edits since I'm a huge pedant about grammar and style, but those were almost all minor issues. Of course, it's easy to think that documentation is good when it's about something you already understand, but I also feel like I learned something about the corners of Rust that weren't so known to me. I know that the quality of documentation has a huge effect on whether people who aren't in the in-group can start contributing to a project, so I'm glad I've been able to spend a tiny amount of time on it, though there's still a lot that should be expanded on to lower the barrier to entry.

I'm hoping that we're going to release 0.4 tomorrow, but even if we don't, after spending almost two days just on docs, I should probably get back to coding :-)
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Today, I worked a little bit more on issue 2428. In a patch I haven't pushed yet since the tree is frozen-except-for-release-blockers, you can now use named constants in discriminator expressions. What doesn't work yet is getting a proper error message when you try to refer to some non-constant named thing in a discriminator.

But in our weekly meeting, we agreed to spend some time working on docs before we release Rust 0.4 later this week. So, I copy-edited the FFI, tasks, and macro tutorials, as well as the beginning of the borrowed pointer tutorial. (No links for these, as the copy of the docs on the web site is quite out-of-date.) This experience was quite instructive for me, since tasks and macros are two features of Rust that I basically haven't used at all :-) I love editing other people's writing, but the one thing about it I find frustrating is transferring notes from the paper to the screen, as I can never seem to edit effectively on the computer. Maybe that's where one of those tablet devices would help.

Edit: If anyone is interested in reading and commenting on docs, you could read the sub-tutorials on macros, the foreign function interface, tasks, or borrowed pointers. You don't need to know anything about Rust, but there's also the overall tutorial in case anything is confusing. These aren't the up-to-date versions that I just edited, but they're close, and I'd love to hear about anything that's unclear or confusing!
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Today: Made what seemed like a multitude of snapshots, but is really just two, to get a series of commits from Erick Tryzelaar, one of our awesome volunteer contributors, integrated before the release happens. The compiler now uses trait-based serialization everywhere!

In the meantime, I looked through my bug list that had been long-neglected while working on release blockers. I realized that #2428, #3521, and #3668 were all connected. In Rust, you can write a variant of an enum type (i.e. algebraic datatype constructor) with an explicit discriminator expression if you want to. An example from the tutorial is:

enum color {
  red = 0xff0000,
  green = 0x00ff00,
  blue = 0x0000ff
}

This is saying to the compiler that at runtime, the red variant's representation must be the hex numeral 0xff0000, and so on. This feature is sometimes necessary for interacting with foreign code or interacting directly with hardware.

The expression on the right-hand side of the '=' has to be constant: it has to be in a conservative subset of expressions whose meaning can be known at compile-time, without running the program. Explicit numerals, as above, are okay. So are references to compile-time constants:

const red_val: int = 0xff0000;

enum color {
  red = red_val,
...

Or at least it's supposed to be okay, but it didn't work, because the discriminator expression wasn't getting resolved at all. So you couldn't refer to named constants in it; plus, if you tried to refer to non-constant names (such as local variables) in a discriminator expression, the compiler would crash instead of printing a nice error message.

Anyway, those three bugs were different people noticing the same underlying issue, in different ways. I'm working on it.

tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
I haven't been writing daily research posts in a while, partly because we've been working on getting the Rust 0.4 release ready for quite a while (and it's still not going to be done until early next week at the earliest), and that has involved quite a lot of mind-numbingly routine tasks. The kind of mind-numbing work that's occasionally interspersed with finding some bug that makes you wonder whether the space-time continuum around your desk is flawed. In other words, the usual for working on compilers. My lack of writing is also because of this stuff going on at work, as well as my having spent lots and lots of time working on some loosely related pieces of writing, and thus not having a lot of energy left for writing about work.

I'd like to start writing regularly again, but I also don't want to leave any kind of impression that I'm committing to doing it every day again.

We've got one open bug left for the release. I'm working on that one, or actually, doing nothing at all on it right now while I wait for a snapshot to build. In the meantime, I looked at a typechecking bug that user BigEndian on IRC just reported. The bug is a good reminder that we're still at a point in developing the Rust compiler where some fairly obvious bugs can get found by users who are just experimenting, not trying to test the compiler. In this case, referring to variables such as the self variable, or function arguments, inside of a constant item nested inside a function, causes an internal compiler error in the typechecker. There is a separate pass from the typechecker that checks constants for constant-ness: it would reject this code, since a constant can't refer to non-constant things. But for reasons unknown and undocumented, that pass happens after typechecking. In the meantime, the typechecker assumes that constants are sensible, resulting in an assertion failure when they aren't.

I'm actually not sure what to do here. Typechecking nested constants properly would require some refactoring in the typechecker, and it seems like too much effort to go to in order to typecheck programs we know will fail in the next phase anyway! OTOH, there's probably a good reason why constant checking is after typechecking.
tim: "System Status: Degraded" (degraded)
Edited to add, 2014-09-23: There's no point in protecting a harasser anymore; X is Al Billings. As of this writing, he is still employed by Mozilla as a Security Program Manager on the Security Assurance Team.
Back in July, a person claiming to be a Mozilla community member made threatening comments on my colleague Christie Koehler's blog. The comments were also directed at me, referring to "you two" -- Christie and me being two of the people who have been most outspoken about Mozilla's problems with equality. The anonymous commenter wrote "we don't want you around", and told us that if we didn't like Mozilla's policies about discrimination and harassment, we should go somewhere else. It's unclear which "we" the commenter intended to speak for.

These comments were absolutely a threat. Saying "we don't want you around" strongly suggests intent to create a working environment that will be hostile for us, and indeed, on its own, it is a comment that contributes to a hostile working environment. The nebulous "we", as well, is the kind of comment that provokes fear over just how many colleagues of ours "don't want us around".

And these threats were in retaliation for Christie's and my public speech about our grievances as LGBT employees of Mozilla. The message is clear: if you speak out about how you're being treated, you will be threatened and harassed.

On the Internet, few actions are truly anonymous. Christie's blog software records commenters' IP addresses. Also, every time you send an email, the headers include the IP address of the computer you used to send it (unless you go to some effort to obscure your identity). Mozilla has some well-trafficked internal mailing lists, and I save a lot of the email I receive in them. These facts together meant that I was able to confirm with a high degree of certainty that the comment really was written by a Mozilla community member: a Mozilla employee who works in the Mountain View office, where I also work. I'll refer to this person as "X". Christie contacted Mozilla's HR department, who contacted X, who admitted that they did indeed write these comments, giving us total certainty about the commenter's identity.

The article from a former Kixeye employee using the handle Qu33riousity, in which he calls out the company for its environment of homophobia and racism, has been making the rounds. Some people find stories like that one shocking. To me, it's just a much more extreme example of what happens when companies tolerate casual homophobia, sexism, racism, and other forms of oppression. When there are no consequences for abusive behavior, that behavior escalates to an arbitrarily great extent: an absence of consequences for small violations gives people permission to disrespect others in bigger ways. And that's one reason why it's so harmful to tell a person who is experiencing oppression to "just get over it" and "not be so sensitive".

After X made their comments, and during the long interactions with HR that Christie shared with me, in which she tried to convey to Mozilla administrators that X's behavior was abusive, not just part of a "conflict" between two employees, I experienced stress in a couple of ways. My IBS (a stress-induced illness) got worse. I had trouble sleeping. It got harder for me to focus on work. It's hard to concentrate on what you're doing when you've been told your co-workers don't want you around.

What should a company do when an employee has engaged in public retaliation against other employees for speaking up in favor of civil rights? I think that since the original hostile comments were public, the person who has made those comments should make a public apology, with their name attached. A public apology shows that they take seriously the harm they have done to the community. And X did harm the community: for one thing, they harmed me and Christie, who are part of the community. For another thing, they increased the level of hostility in the community towards LGBT participants. X is a person who has previously claimed to be an LGBT ally, but their actions make clear that they are okay with LGBT people as long as those people merely participate in a social order controlled by heterosexual men, and don't question heterosexual male dominance. Excluding LGBT contributors hurts the community because it arbitrarily excludes people who have something to bring to the project based on criteria having nothing to do with merit.

Instead, Mozilla HR treated X's actions as an individual slight against other individuals, completely ignoring the way in which X hurt the community. The message I take from this is that I'm not part of the community. X, as well, denied having harmed the community and even threatened to report Christie to HR for harassment after a brief email exchange in which she requested that X make their apology public. By encouraging Christie to resolve the matter directly with X, then Mozilla HR put Christie in a situation where she would be the target of more abuse.

Though X refused to make a public apology, and HR declined to ask them to do so, I still have the option of naming them in public. I'm choosing not to, since I fear that I would experience further retaliation for doing so. Several of the comments on Christie's blog post from earlier expressed disbelief that someone who was really in the Mozilla community would do such a thing. If I were to name X, they (and others) would have to deal with the cognitive dissonance of knowing that yes, it really could be one of us. My past experience tells me that people often deal with this kind of cognitive dissonance by blaming victims. Perhaps some people would decide X's comments weren't so bad after all, that there was a justification for them, that Christie's and my actions somehow justify abuse. I don't feel like there is a right answer for me in this situation: naming X would expose me to further abuse, while by declining to name them, I know that I may be accused of making it all up. Because there is no right thing for me to do in this situation, I'm choosing not to name X not because I think it's right for them to have privacy while we pay the costs of the actions, but rather, out of fear for my personal safety and my livelihood.

X's actions were one point along the same continuum that includes what Qu33riousity describes at Kixeye. They also lie along the same continuum that Skud describes in "On being harassed":

Have you ever had to show your male colleagues a webpage that calls you a fat dyke slut? I don’t recommend it.

Christie's and my experiences, and Qu33riousity's experiences, and Skud's experiences, are all different. I don't mean to equate them. But the common element involves environments that enable harassment: that make people feel like it's okay to harass a colleague because they're queer, female, or a person of color. The common element is environments in which people who are queer, female, and/or people of color are routinely considered less than other people, where they're treated unequally.

I just want a working environment in which I, and all of my colleagues, can be safe, and free to collaborate productively together. And many people at Mozilla feel that they have that already. I don't feel that I do. I just want to be treated the same way as everyone else; I want to be able to expect what many of my colleagues expect, which is that they won't be treated unfairly because of their sexual orientation. I also want to feel confident that if I speak out about how I'm being treated, my concerns will be taken seriously and that I'll be respected. I want to know that I won't be shamed for "playing the victim" or be treated with contempt if I say that it hurts when people attack me. I'm just asking for what most people who are not in a gender and sexual minority can already expect.

A public apology from X would help ameliorate the harm to the community that they chose to do with their anonymous comments. I'm sad that creating a safe and productive environment for everyone isn't important enough to Mozilla for that to happen. X told Christie that, in effect, they refused to make a public apology because it would make them look bad. This is the definition of abuse: being asked to put your abuser's needs ahead of your own. We were effectively told that our safety was not as important as X's reputation. And no one in a position of authority stepped in to counter that message.

I'm also copying what Christie wrote below, since I think it's that important.


Back in July, someone claiming to be a “Mozilla member” made threatening comments here on my blog, directed towards myself and my colleague Tim Chevalier. I reported the comments immediately to Mozilla HR. It look nearly three months, but I can now report a resolution.

The person who left the comments is a Mozilla employee. They have been contacted by Mozilla HR and directed not to make these kind of comments to Mozilla employees or community members in the future, or else face disciplinary action. They have also issued an apology to me personally. Unfortunately, the person has declined to provide a public apology and isn’t being compelled to do so.

I find the lack of a public apology disappointing and a detriment to the Mozilla community. Those who violate community conduct standards should face the consequences of their actions and they should have to face them publicly.

Why? Many reasons. Without having to face consequences, abusive behavior is likely to continue, and likely to escalate. When those who violate conduct standards are held publicly accountable for their actions, it gives those who might have been a target of such behavior in the past a chance to finally speak up. And, it demonstrates that the Mozilla community takes its employees’ and contributors’ conduct toward one another seriously and doesn’t tolerate abuse. A public apology gives those who transgress an opportunity to make amends with the community.

In the case of the person who left the threats on my blog, their desire not to look bad is being placed above our (mine, Tim’s and others from marginalized groups) need to feel safe, and thus represents a refusal to acknowledge their deleterious effect on our entire community.

The commenter’s actions harmed not just the two of us who were the direct targets, but the Mozilla community as a whole by setting the example that if a queer person feels they are being discriminated against at Mozilla and speaks out about it, they will be penalized with a public threat. Why was the original comment a threat? Because saying “we don’t want you two around” implies that they would do their best, either directly or indirectly, to make sure Tim and I were not able to continue to be around. Furthermore, their use of “we” created anxiety that there was not just one, but many people at Mozilla who wanted to force out people who speak out against discrimination.

More generally, the commenter’s actions set a precedent that if somebody is in a vulnerable minority group, they must choose between being silent and accepting what they experience as discriminatory treatment or risk being humiliated and threatened if they speak out against it. Being in a situation where the only choices are to accept abuse without criticizing it or be retaliated against for speaking up, is unfair. A community where people in minority groups are treated unfairly is one that many such people will either leave, or not join in the first place, because they don’t feel welcome. And driving away people in minority groups hurts the community. It deprives the community of all that minority group members can contribute, and means Mozilla won’t have the best employees and contributors it can possibly have.

In the lack of acknowledgment that the commenter’s actions harmed the community, I hear unwillingness to say that Mozilla values its contributors who are queer. If harming us does not harm the community, then the only logical conclusion is that we’re not an important part of the community. It’s hurtful to see that the facts apparently point to this conclusion.

While it’s true that I could reveal the identity of the anonymous commenter, I don’t feel comfortable doing so publicly, here on my blog because I fear a lack of support from the Mozilla community. On the one hand, many of you expressed your outrage and disapproval of the commenter’s behavior, but on the other hand, some of you also expressed doubt that the commenter could even be part of the Mozilla community. Also, I have not seen a lot of outspoken support for those who speak up on these issues, and have certainly experienced a lack of institutional support on behalf of Mozilla leadership.

What I will do is encourage those of you who have been the target of threatening behavior, even if it seems insignificant, to document and report it.

tim: Comic Book Guy from "The Simpsons" (comic book guy)
"I recently consulted with my friend Jessica, a brilliant astrologer-psychic, and one of the things she told me was that my job was preventing me from expressing my gender." -- Dean $pade, first sentence of "Undermining Gender Regulation" in _Nobody Passes_ (Mattilda Bernstein Sycamore ed.)

What a douchebag.
tim: "System Status: Degraded" (degraded)
A couple of weeks ago I looked myself up on my county's voter lookup site to make sure I was still registered to vote. There was no reason I wouldn't be, or so I thought, since I moved to my current address not too long before the primary election in May, and I voted in the primary election. Nothing changed in the meantime. But the voter lookup page said it couldn't find me as a registered voter. Since it's keyed on house number, birthdate, and zip code, I thought maybe the system couldn't handle apartment buildings (though that would be exceedingly odd) and put off doing something about it for a while.

Today, I called the Santa Clara County register of voters and once I figured out how to get through to a person, the person confirmed that I was in the database as an "inactive" voter. He couldn't explain why that happened, but was able to "reactivate" me on the phone.

If I hadn't thought to take the action to check whether I was registered or not, I probably would have showed up to vote on Election Day and found I wasn't able to vote. I still don't know why I was made inactive in the records. Again, my address hasn't changed since the last time I updated my voter registration information. I'm wondering if the issues I had with the DMV challenging my gender had anything to do with it. Like I explained, those issues were resolved in my favor (or really, in favor of accurate information on ID). But maybe when the DMV flagged my record as being suspect because "two different people" (my old name and my new name) had had licenses with my Social Security number, they also alerted the registrar of voters to disenfranchise me? I'm not sure what would have happened.

In any case, whether you're trans or in any other minority group, or not, it's worth making sure you're registered to vote, if you're someone eligible to vote in the US.
tim: Mike Slackernerny thinking "Scientific progress never smelled better" (science)
When asking people -- especially geeks -- to use less ableist language, "intelligent" tends to be a sticking point. It's one thing to accept that r----- and even i---- are words that stigmatize people with intellectual disabilities when used as insults, much as calling an ugly sweater "gay" stigmatizes queer people. But geek culture is centered around the valorization of intelligence. It seems even harder to stop using "intelligent" as a compliment than it is to use "stupid" as an insult (and let me be clear that I'm still working on doing both in my vocabulary).

Here are some words that you could use to describe a person, instead of "intelligent":
  • curious
  • hardworking
  • well-read
  • knowledgeable
  • thoughtful
  • open-minded
  • creative
  • attentive to detail
  • analytical
  • careful
  • collaborative
  • empathetic
  • articulate
  • good at listening
Of course, these words don't all mean the same thing, but any or all of them might be intended when you call someone "intelligent". This should be a sign that "intelligent" is a vague word. So why not use a more precise one?

One thing these words have in common is that unlike "intelligent", they don't suggest an innate quality that a person is born with that can never be added to or subtracted from. A person who is not well-read (for example, a baby) can become well-read, given enough time. A person who isn't curious at one time in their life might be more curious at another time. Ableism might seem like an issue that only affects some people. Personally, I don't think it is (when we deny one person dignity and respect, we deny it to everyone). But even if you do, you might still agree that all of us can develop our potential more easily if we think of skills as something that can be acquired through work and practice, both individually and as part of a group, as opposed to something you're born with.

Popular culture seems to like the "innate intelligence" idea, as evinced by movies such as "Good Will Hunting". In that movie, a guy who's had no social interaction with a mathematical community bursts into a university and dazzles everyone with his innate brilliance at math, which he presumably was born with (for the most part) and put the finishing touches on by studying alone. The media seem to be full of stories about a bright young person being discovered, a passive process that -- for the bright young person -- seems to involve nothing except sitting there glowing.

I don't mean to say that there is no innate component to intelligence. Since the study of human intelligence has so often been used to prop up existing social power structures by claiming a connection between level of power and intelligence level, it's hard to say how much of intelligence is innate. In a way, it doesn't matter, since the only thing you have control over as a person is how much effort you put in to gain knowledge, practice your listening skills, train yourself to pay attention to detail, nurture your curiosity, and so on.

I've actually seen it suggested that if we stopped associating "intelligence" with virtue and stopped using "stupid" as an insult, then people with talent would have no incentive to develop that talent. Apparently, nobody would self-actualize if the reward for being really great at playing piano, doing biochemistry, or developing philosophical arguments wasn't feeling like you were better than other people? This is an untestable hypothesis, but anyway, I don't believe it. We're talking about whether or not to use the language of "intelligence" and "stupidity" as tools to induce shame and guilt. I don't believe that anyone has ever been shamed and guilted into being a brilliant achiever. I do think that plenty of people have been shamed and guilted into not trying to improve their skills. I see an analogy here with weight-shaming: just as you can't hate yourself healthy, you can't shame yourself smart.

If you still think that dispensing with "intelligent" as a compliment would make it harder to communicate, I can't argue with you beyond what I've already said. But I think it would make it easier.

ETA: This reply from James Sheldon is interesting.
tim: "System Status: Degraded" (degraded)
It's usually a good thing when people talk about ways to increase women's participation in programming communities. I used to be active in the Haskell community, so normally, that the subject came up during the annual "Future of Haskell" discussion at this year's Haskell Symposium would be something for me to cheer about.

Sometimes, men talk about the gender disparity in tech communities as if there's some big mystery. I have to conclude that these guys haven't talked to women who currently work in computer science academia and the tech industry, or who did and then left. As someone who was perceived as a girl or woman doing computer science for 12 years, my solution to the lack of women in tech is:

Stop telling women that they aren't welcome and don't belong.



During the "Future of Haskell" discussion, Doaitse Swierstra (a professor of computer science at the University of Utrecht), suggested that a good way to increase the number of Haskell programmers would be to recruit one woman for every man in the room and that this would be a good thing because it would "make the meetings more attractive".

In other words: he followed a call for more participation by women with exactly the kind of comment that tells women that a space is unsafe for them.

Suggesting that more women would be welcomed at a conference because they would make it "more attractive" is saying that women are valued for how they look, not for what they do. If you've ever heard the words "objectification" or "hypersexualization" and not known what they meant, well, look no further than this comment for an example. And because many women see spaces where they are targets for the male gaze as spaces where they will be targets for more than just men's gazes, it's a comment that carries the underlying message that the computer science conference under discussion is not, in fact, a place where a self-protecting woman ought to be. It's not that Prof. Swierstra said any of this outright, of course. He didn't have to. English-speaking academicians are part of that subset of the world in which everyone comes pre-installed with the cultural programming that means a few words about the "attractiveness" that more women participants would bring to the Haskell Symposium evoke a whole world of stereotypes -- ones that limit women's choices, careers, and lives.

Swierstra's remarks were also potentially alienating to any non-heterosexual men who were present, as they reflected an assumption that he was speaking to an audience of people who found women, and only women, "attractive". Finally, there is a tacit understanding when one talks about "attractive" women that one is talking about women who have cissexual bodies, are thin, aren't disabled, and are in a particular, narrow age range. So apparently, if you're a woman and not all of those descriptors apply to you, maybe you shouldn't think about learning Haskell, as your presence wouldn't make the Haskell Symposium more attractive (to heterosexual men).

So while Prof. Swierstra may have meant no harm -- may indeed have meant to do good by encouraging efforts to increase women's participation in the Haskell community -- what matters is not his intent, but the effect of his words. (Everyone who's ever written code knows that the compiler doesn't care about your intent; extend that to your interactions with other people, and you might find yourself behaving more fairly.) Any women who were in the room for the meeting (and when I have attended it in the past, there have always been at least a few) got the message that if they weren't there to be pretty, why were they there? And any women who watched the video of the discussion (relevant part begins around 32 minutes in) got the message that the Haskell community is a community that tolerates sexism.

When I watched the video, what I heard after Prof. Swierstra's comment about attractiveness was laughter. No one called him out; the discussion moved on. I might be wrong here, but the laughter didn't sound like the nervous laughter of people who have recognized that they've just heard something terrible, but don't know quite what to do about it, either (though I'm sure that was the reaction of some attendees). It sounded like the laughter of people who were amused by something funny.

It would have taken just one person to stand up at that moment and say, "That was sexist and it's not acceptable here." (That person would probably have to be a senior faculty member or researcher, someone of equal rank to Prof. Swierstra; challenging a male, senior researcher is not something a female grad student (or even maybe a male grad student) should be expected to do.) But nobody did. And that's what really disappoints me. Structural sexism persists not because of the few people who do and say blatantly bad things, but because of the majority who tolerate them. People say things like the things Prof. Swierstra said because they are socially rewarded for it: they can get a few laughs. Also, they can display their membership in a high-status group (heterosexual men). Take the reward away, and the comments and actions that exclude go away too.

I expected more from the people who attend the Haskell Symposium. I expected more because for years, I attended ICFP and the Haskell Symposium, and even in the days when I didn't identify as male and didn't usually challenge others' perception of me as a woman, I felt like I was in a community where I belonged when I was there. For the most part, I didn't feel like my perceived gender was called attention to, and I felt like I would be judged based on what I could contribute to a conversation rather than on whether a man would find my appearance pleasing. If my first Haskell Symposium as a twenty-year-old had been in 2012 instead of 2000, I wouldn't have come away with the same impression. And I don't know if I would have gone back.

I'm no longer in the community of people who attend ICFP, and I no longer work on Haskell projects. My academic career ended a year ago when I was told that I couldn't be a grad student if I didn't want to interact with another student I'd witnessed joking about raping a fellow student. I have a job that doesn't involve Haskell, and lack the privilege of having spare time and energy left to do programming projects when I'm done with paying work. There have been days when I've had regrets. Today is not one of them. If I'd continued doing functional programming research, I could have been an agent for change; sexism no longer affects me directly now that folks have to have it spelled out for them that I'm not a cis man. Still, I don't feel like a community that makes somebody feel like it's acceptable to say that women would add "attractiveness" to a professional meeting is a community that I belong in.

If you are a man in this community, please don't feel like you have no power. You actually have a lot of power: you can let people who make these comments know that sexism isn't okay. The Geek Feminism Wiki's "Resources for allies" page is one resource that can help; the wiki also has a page of good sexism comebacks. Some comebacks that might have helped in this situation are: "I don't think that sounds as funny as you want it to sound"; "Who let you think it would be okay to say something like that?"; "Excuse me? / "I'm sorry, I don't quite understand what you're trying to say. Could you state it more plainly?"; "It sounds like you are implying <sexist thing>. I'm sure you don't really think that. <change subject>"; "That was sexist"; and (if used by the moderator) "We're done" and "That was sexist, and that is not acceptable here." Of course, there are others. The most important thing you can do to be an ally is to listen to women, and people who are perceived as women, in your community. Don't lecture people about how to respond to difficulties you haven't faced; simply learn from their own self-reporting of their experiences. Of course, don't demand that others educate you without establishing trust, either.

Countering sexism requires courage and (in Samuel Delany's words) moral stamina. It is work that largely needs to be done by men, since men who tacitly believe that women aren't quite human are hardly going to listen to women's opinions on the subject. For men to do this work, of course, they have to believe that women belong in their communities, that women are more than just attractive bodies, and that their communities will benefit from the inclusion of women -- benefit in ways that are not about aesthetics. Whether from within or without, I hope that the Haskell community will include more men who have this courage and who believe these principles -- whether or not the presence of those men makes the community more attractive.


Addendum: If you're coming here from Reddit, please take the time to read four background pieces that are part of my earlier series of essays "A Problem With Equality": "Power and privilege", "Systems and individuals", "What oppression is", and "Emotional invalidation". Most criticisms of the piece you're reading have already been answered in one of these essays.
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
This post is cross-posted to the Geek Feminism Blog.
"Most women fight wars on two fronts, one for whatever the putative topic is and one simply for the right to speak, to have ideas, to be acknowledged to be in possession of facts and truths, to have value, to be a human being. " -- Rebecca Solnit, "Men who explain things"

A Problem with Equality

In March 2012, Gerv Markham, who works for the Mozilla Corporation dealing with issues of community and governance, ignited a controversy about what kinds of content Mozilla tolerates on its Web properties. That debate opened the broader question of whether the Mozilla Corporation should have a code of conduct for its employees, as well as whether the Mozilla project as a whole should have a single code of conduct for its employees and volunteers. An internal -- but world-readable -- discussion on Mozilla's online discussion group, mozilla.governance, ensued, examining the nature and desirability of community standards for inclusion.

That was about as neutral and objective as I'm going to be in this essay. In what follows, I analyze the controversies of March and April, while sharing a hefty quantity of my own feelings and opinions about them. These opinions are my own and solely my own. While I'm an employee of the Mozilla Corporation, in what follows, I am speaking only for myself. I'm not writing from the perspective of someone who has formal education in political and social analysis; the only authority I claim to have is on my own lived experiences. Thus, I don't have citations at hand for every idea; moreover, much of what I am saying here has been said before, by people who make it their calling to interrogate sexism, homophobia, racism, and other social structures of domination. I'm writing for an audience of people who think critically, reflect openly, and draw their own conclusions.

Disclaimers: please read them.

About 30 more paragraphs )

tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (working)
Today, I banged my head against issue 2936 basically all day long, and am not that much the wiser for it. At least I finally understand that a couple of the functions called in the vtable checking code are basically just wrappers for unification. I'm not sure why I didn't just try to understand the code in the first place instead of jumping in and hacking on it, but there you go. After getting hopelessly confused about all the substitutions that are flying around the code and what they do, I decided to start with a clean branch and just insert print statements to confirm my hypothesis about what each of the types and each of the lists of type substitutions means.

Today: not my finest hour.

ETA: well, having said that apparently guaranteed that I would fix the bug within an hour. Here's the commit. It turned out that my previous approach was just totally wrong and I was barking up the tree by trying to fix the code without understanding it. Some judicious use of print statements exposed the real problem, which wasn't in vtable at all, but rather in ty. Totally easy fix. Programming: from the agony of defeat to the thrill of victory in 55 minutes or less... and that's why I haven't given up on it yet.
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Edited to add, May 2019: This post is now, thankfully, obsolete. In January 2019, Governor Jerry Brown signed SB 179, which allows people applying for a new or amended driver's license or ID card to self-certify their own gender category of male, female, or nonbinary. There is no formal requirement for a doctor's letter anymore. Keeping this post up for historical reasons.


Y'alls, this is kind of big news. Photographic evidence first:

Read more... )

If you're confused, that's understandable. A long time ago, I lived in California and had a driver's license with my old name, and the sex I was coercively assigned at birth. Then I moved to Oregon, and legally changed my name to the name I use now. I got a driver's license in Oregon, which made my California driver's license invalid. Two years ago, I corrected my passport to have the correct gender marker, which I did immediately after the State Department reformed their guidelines for changing gender markers on passports. Previously, you had to submit evidence of having had surgery (the question of what kind of surgery was a bit fuzzy) in order to change your gender marker. Starting in mid-2010, all you needed was a letter from a doctor saying you were undergoing appropriate treatment for gender transition. There was no longer any requirement for surgery, hormones, or counseling.

When I moved back to California last year, I got a new driver's license. I presented my passport, myself, and my old Oregon driver's license as ID. Even though my Oregon driver's license said "F", presumably the correct gender marker on my passport -- as well as my appearance, which was close to what it is in the userpic attached to this post -- prevailed. I did say I'd had a CA driver's license before, but the DMV worker was unable to find any record of it. So, I had a CA driver's license with my correct gender on it.

California law says that to change the gender on your driver's license, you're supposed to submit a DL-329 form. I didn't want to do that, for reasons I'll get to. I figured that having been out of state would be sufficient to bootstrap a clean record instead.

And that worked, for about a year. A few months ago, I got a letter from the DMV saying that during a review of records, it had been discovered that there were two people with the same Social Security number who'd had a driver's license -- of course, those two people were my old name (listed as F) and my correct name (listed as M). In a phone call, I explained to the worker at the Records Security Division who'd written the letter that I did not intend to submit a DL-329 form, but that I would be happy to send her a copy of my legal name change decree, which I did. I also included a photocopy of my passport.

I didn't receive a response to this letter for several weeks, so I called back the person I had spoken to before. She said that I would still have to submit a DL-329 form, and that my license would be invalidated if I didn't. I asked what I was supposed to do for a driver's license if I didn't submit the form. She said they would reissue my license with an 'F' gender marker. I asked how I was expected to go to the DMV and prove I was an 'F' given that I had no current driver's license with that marker, no passport, and no other ID that has a gender marker. She said I should show my birth certificate. (Actually, for all she knew, I might already have corrected my birth certificate; I have everything I need in order to do so.) I asked when my license was going to be invalidated. She said "as soon as I send the letter saying so", but didn't say when she was going to send the letter.

Today, I got the letter shown above in the mail. Because I was able to (effectively) change my gender marker by submitting only a legal name change and copy of a corrected passport, I expect that the DMV will allow any other trans person to do the same -- otherwise, it would be unfair.

If you're familiar with the rules, you might be asking, "Tim, aren't the requirements for correcting a passport very similar to what's stated on the DL-329 form?" Yes, except for one thing: the DL-329 has separate sets of boxes for a doctor to check for "Demeanor" and "Gender identification". In both cases, the only options are "male" and "female". (There's a third set of boxes where the physician gets to choose whether your gender identification is "complete" or "transitional".) Here are some of the things that are insulting about this form:

  • The assumption that your demeanor can be different from your gender identification.
  • The assumption that your gendered "demeanor" is relevant to your ability to operate a motor vehicle safely.
  • The assumption that everyone has a demeanor that is either male or female, not both, and that everyone has a gender identification that is either male or female, or not both.
  • The assumption that a medical doctor is automatically qualified to assess whether someone's "demeanor" is male or female.
  • The assumption that a department of motor vehicles should be in the business of assessing someone's "demeanor".

I see a trans-affirming primary care doctor who would have been willing and able to fill out this form correctly for me. That's not the point. What does it mean to have a "male" or "female" demeanor? Can you define that precisely? I don't think the DMV can. If I wear barrettes in my hair, does that make my demeanor "female"? If I take them out, does that change it to "male"? (Not a hypothetical question.)

Fortunately for trans Californians, you don't have to fill out this insulting form anymore; if you're required to, contact me and we'll make sure that the department is aware that you're aware that someone else was allowed a correction without filling it out, so why shouldn't you be granted the same right?

Caveats: I am not a lawyer. If you try this and your records get irreparably screwed up, it's not my fault. It's possible that the fact that I had a gap in between the period of validity of my old 'F' license, and my new 'M' license, affected things (although I don't think that should matter). With that said, I think that those who feel they are in a position to do so should start challenging the system -- this is the crack that we can pry open to break the whole oppressive system apart.

If you know anybody at a trans rights group that deals with California, you might want to let them know about this. (I've learned from experience that these groups only seem to talk to certain kinds of people, of which I am not one.) And please redistribute this post far and wide.

On Facebook, a friend noted: "a keystone of the enforcement of administrative law is not making exceptions. you know why i love exceptions? because they let you poke holes in bad policies and insulting procedures."
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (working)
Today I worked on Ionmonkey generators again, trying to address the latest round of feedback on my patches. While I didn't get to everything today, satisfyingly, I did find and fix the bug I'd introduced (unknowingly until now) that was causing two test cases to fail "inexplicably".

In the parser, there's a getToken method (on a token stream) and a matchToken method; the first one effectfully pops a token off the stream and returns it, while matchToken returns a boolean denoting whether the right token was found. It turns out matchToken has a side effect: it increments the lookahead in the parser, so that the next time you call getToken, it uses a different code path to inspect the token that got pushed back onto the stream in the last call to matchToken.

The problem is there's also another overloaded instance of getToken that takes a flag argument: in the code that was behaving badly, it was a flag saying "ignore keywords and treat them as identifiers". And the path that executes if you previously called matchToken was ignoring this flag. This broke two test cases that tested that you're allowed to have a function whose name is a keyword. (The call to getToken with the flag was already there, but I introduced the call to matchToken, to check whether there was a '*' after the function keyword; the change I'm implementing is allowing generators to be written with a distinguished syntax, namely declaring them with function* instead of function.)

I don't know whether this is a bug in existing code or whether I just wasn't aware of the protocol. In any case, once I saw what was going on, it wasn't too hard to fix (though the code now looks more awkward to me).

Now I just need to get to the other twelve reviewer comments ;-) It felt really good to finally have all the test cases pass, though.
tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (working)
It's late, so one (or two) brief notes: match check is gone! Huzzah! I will perhaps write a longer post later on about what I learned about non-exhaustive matches, but for now, I'll just say they're a bad idea.

Of course, without any deliberate action, I managed to change the LLVM revision in one of my commits. In trying to revert that change without reverting the whole patch (which would have been tedious, since I would have had to re-commit everything else), I discovered git checkout --patch, which was exactly what I needed (I just had to git checkout --patch the last good revision before my unfortunate change; then say "yes" to the patch undoing my LLVM change, and "no" to the patches undoing all my other changes). How did I not know about this all my life? Anyway, now I'm in love.

Profile

tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Tim Chevalier

November 2021

S M T W T F S
 123456
78 910111213
14151617181920
21222324252627
282930    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags