# 12 Mar 2018, 03:21PM: Request: Donate To the Tiptree Award Auction:
The James Tiptree, Jr. Literary Award encourages the exploration & expansion of gender, and holds a fundraising auction at WisCon each year. I'm the auctioneer, which is a pretty fun form of community service, and serve on the Tiptree Motherboard. We're seeking donations of objects to be auctioned -- handcrafts, books, memorabilia, games, and art, especially with scifi/fantasy or feminist elements, are welcome.
I would personally love to get some donations this year of types I haven't yet seen:
- Games of all sorts -- board games, card games, indie games, video games (we could auction off a Steam code or a USB stick)
- Handmade blank books
- Art commissions, e.g., "I will draw a portrait of you"
- DVDs or CDs of feminist media, e.g., a The Middleman box set
- Your secret recipe for a dish you consider wowzers
Some items I'll auction live from the stage. Some, people will buy directly from a cashier, at the Gathering on Friday afternoon or from the Direct Sale table at the auction. Some, folks will bid on via a silent auction throughout the con. And a few, we'll auction online. I wrote last year about what an award does
, and the reflections I've seen from winners of the Tiptree Awards and Fellowships tell me those honors are doing the job -- encouraging creators and fans to expand how we imagine gender -- and by donating to the auction, you're supporting that.
The auction will be Saturday night, May 26th, and will be about 90 minutes long. If you want to come and you're local to Madison, you can buy a day pass at the door (just to attend WisCon on Saturday) for about $25. And it's totally fine to come to the auction just to enjoy the show, and not to buy anything.
Please feel free to signal-boost this, and if you're donating please fill out the form by May 15th. Thank you.
# 11 Mar 2018, 10:42AM: Recent Debugging And Confidence:
I am proud of myself for some recent debugging I've done on and with codebases and tools that I hadn't worked on before.
A few weeks ago, I was sitting next to a friend who co-maintains a web app and hadn't looked at it for a while. The styling was screwy. I asked whether some CSS or JS he depended on had upgraded, like jQuery or something. He said no, his site hosted all its dependencies. I opened up the site and checked the Network tab in Firefox Developer Tools and saw that it pulled in Bootstrap from a CDN. Ah, one of the other maintainers had added that! And updates to Bootstrap had screwed up the page's styling.
That same day, as a freshly minted co-maintainer of twine (a utility to upload packages to PyPI), I investigated a problem with our CHANGELOG. Twine's changelog, as represented on Read The Docs (example) and when I built the docs locally, only displayed version number 1.4.0 (2014-12-12) and two associated GitHub issues. This was inaccurate since the source file changelog.rst had 70+ items and ran up to version 1.9.1 (2017-05-27). I figured out that this was happening because changelog.rst is meant to be formatted so the Sphinx extension releases (which I hadn't used before) can parse it, and the current file wasn't syntactically (or semantically) adhering to releases's conventions. (Since then, with advice and help from some folks, I've released Twine 1.10.0 and started a new maintainer checklist.)
And then, a couple days later, I fixed my friends' blog. Their front page had reverted to a ten-year-old index page. I had never touched Movable Type before and hadn't used their particular managed hosting web GUI before, but I poked around (and checked for backups before changing anything) and managed to figure it out: during a May 2008 outage, someone had hand-made an index.shtml page, which was now overriding the index.html page in the server config. I figured it out and found and fixed it.
My mom says that when I was a kid, I took apart alarm clocks and spare hose attachments and so on, and put them back together just fine. She once came upon me taking something apart, and when she drew breath to admonish me, I said, "Amma, if I don't take it apart, how do I know what is inside? Don't worry, amma, I'm just looking at it, I'll put it back together when I'm done," and I did. She told me that I took apart a mechanical alarm clock, carefully spreading all the parts out on some newspaper, and put it back together, and it didn't quite work properly, so I took it apart again and then put it back together, and it worked, and I jumped for joy and said "I fixed it!" (I still feel that way when I fix something.)
At some point along the way I feel like I lost that calm confidence in my abilities, that "things are made of stuff" and what one person made another can fix. But I have it again, now, at least for some bits of software, and some purely mechanical stuff (yesterday, helping friends move, deciding to break down a big empty cardboard box, responding to "but it's so big, it won't fit on the stack" with "we have knives"). It doesn't feel courageous at the time, just sensible, but then I look back and feel like a badass.
If I had to point to the single biggest cause of this regained confidence, I'd point to the Recurse Center, where I got way more comfortable with bravery and failure in programming.
# 11 Mar 2018, 10:14AM: Not Teetotal, But Teemostly:
Here's something I'm really embarrassed to write, but want to mark, and maybe it'll help someone.
I've cut way down on drinking alcohol and am very glad I have done so.
Quick context: when I was growing up, I thought alcohol was Wrong. My parents did not drink alcohol at all and I believed what they told me in DARE and promised I would never smoke, drink, or take any other drugs.
For most of my time in college I did not drink alcohol at all, and held booze-free parties. While in college I visited Russia, where I was over the legal drinking age, and cautiously tried booze, taking notes the first time to check how my perception and judgment were affected. In my twenties I tried it more and it became a normal part of my life into my thirties.
I never perceived myself to have a problem with alcohol. Maybe once every twelve to eighteen months I'd misjudge my capacity and get to the vomiting and hungover stages, and a few times I said something really embarrassing or got hurt while drunk, but overall I thought I was fine, especially after I made a personal rule to only have a single drink per night when at a work-related event. Every once in a while I would find that the frequency had gone up from once or twice a week to nearly a drink every evening, and would cut back to zero or near zero for a while.
Then, last year, I had two bad experiences just a few months from each other, where I misjudged and drank enough to upset my stomach. What's worse, the second of those times was just after a great hiking trip and made the bus trip back home super awful, and made me completely cancel my plans (with a friend I rarely see) for the next day. I decided I absolutely needed to switch to other stress relief/conviviality choices, and went teetotal.
A month later, one afternoon, I was coworking with some colleagues in a shared coworking space, and heard a group of men I didn't know making some mocking and disturbing misogynistic jokes. I asked them to stop (I think they did; at least I stopped hearing them) but decided to get a drink with my colleagues, after work, to deal with the leftover nerves. As I did so I realized it had been a month since my last drink. It was the ninth of October.
I decided to try keep going like that, and only drink alcohol on the ninth of the month. That's what I've done since then (I make exceptions to, e.g., have a few sips of champagne to toast at my friends' wedding, but nothing like an actual serving of alcohol).
It's going well. I do not get drunk on the ninth of the month; I have a drink with a meal with a friend, then maybe a second a few hours later with Leonard. All my friends and colleagues are cool with it (I have the kinds of colleagues who put together surveys of what nonalcoholic drinks conference attendees want). It doesn't bother me to see other people drinking in moderation. It feels weird enough to be an enjoyable meta-habit (playfulness being a good way for me to trick myself into doing something that might otherwise feel tedious). I'm able to exert my best judgment while socializing. I listened the other day to the "Say Why to Drugs" episode on "Dry January" and yeah, like a lot of drinkers who experiment with taking a month off from all alcohol, I also incidentally spend a bit less money and sleep a bit better. And US politics is still super awful, and sometimes I still feel overwhelmed at my TODO list, but I hear that little "a drink would be nice" voice and then I go drink some water or do something else.
A lot of people I admire and like don't drink at all, and a lot of people I admire and like drink in moderation way more frequently than I now do. I am just talking about my own experience (and am trying to be concise and bring myself to overcome my embarrassment enough to actually hit Publish).
# 06 Feb 2018, 09:48AM: The Ambition Taboo As Dark Matter:
PyCon just rejected my talk submission,* so I'll try to finish and post this draft that I've been tapping at for ages.
My current half-baked theory is that programmers who want any public recognition from our peers, recognition that meaningfully validates our personal mastery, basically have to do that through one of a few fora that therefore accrue less-spoken emotional freight. And two of those places are code review in open source projects** and proposal review in tech conference talk submissions, and the fact that we don't talk enough about the role of ambition when talking about these processes leads to unnecessary hurt feelings.
For context: We give talks for varied reasons. To teach, to make reusable documentation, to show off things we've made or things we know, to burnish our credentials and thus advance our careers, to serve our corporate brands' goals, to provide role models for underindexed folks from our demographics, to give a human face to a project and make it more approachable, it goes on.
A conference talk is a tool in a toolbox that has a lot of other tools in it. (The Recompiler, Linux Journal and LWN pay for articles, for instance.)
And conferences are more than lecture halls, of course -- they're networking opportunities, communities of practice, parties, vacations, sprints, and so on.
But when we talk about the particular pain or joy of having a talk accepted or rejected from a conference, there's an emotional valence here that isn't just about the usefulness of a talk or the community of a conference. We're talking about acceptance as a species of public professional recognition.
I've found it pretty useful to think about public professional recognition in the context of Dr. Anna Fels's book Necessary Dreams. She points out that the childhood or adolescent desire for fame is often a precursor to a more nuanced ambition, combining the urge to master some domain or skill with the desire for the recognition of one's peers or community. This influences how I think about awards, about job titles, and about encouraging technologists in the public interest, and about the job market's role in skill assessment.
So how can a programmer pursue public mastery validation? Here's what I see:***
- contributing to open source software (mastery validation: maintainers merging commits and thanking/crediting contributor for work)
- presenting at conferences (mastery validation: program committee accepting talk)
- posting comments to gamified platforms like Reddit, Hacker News, and Stack Overflow (mastery validation: upvotes and replies)
- publishing academic research (mastery validation: journal accepting paper, peers reviewing paper positively)
- writing books (mastery validation: publisher accepting & publishing book)
- starting and architecting technically challenging projects (mastery validation: skilled technologists cofounding with or working for you, or relying on or praising your work)
So, this stuff is fraught; let's not pretend it's not. And we get rejected sometimes by conferences and talk about it, try to take the perspective that we're collecting "no's", we remind others that even successful and frequent speakers get rejected a lot and you can choose not to give up. And we give each other tips on how to get better at proposing talks. And that's all useful. But there's also another level of advice I want to give, to repeat something I said last year:
I try not to say "don't get discouraged," because to me that sounds like telling someone not to cry or telling someone to calm down. It's a way of saying "stop feeling what you're feeling." Instead, I try to acknowledge that something is discouraging but also -- if the other person's ready to hear it -- that we can come back from that: your feelings are legitimate, and here are some ways to work with them.
Some advice I hear about bouncing back from a conference talk rejection involves formalizing, creating systems to use to get better at writing proposals (my own tips mostly fall into this category) -- after all, in programming, you can learn to make better and better things without directly interacting with or getting feedback from individuals. The code compiles, the unit tests pass. And that can be soothing, because you can get the feedback quickly and it's likely to be a flavor of fair. (But that computer rarely initiates the celebration, never empathizes with you about the specific hard thing you're doing or have just done, and rarely autocredentials you to do something else that has a real impact on others.)
To formalize and abstract something makes it in some ways safer; it's safer to say "I'm working to pass the [test]" or "I'm building a [hard thing] implementation" or "I'm submitting a talk to [conference]" than to say "I am working to gain the professional respect of my profession". But that is one motivation for people to submit talks to tech conferences and to feel good or bad about the talks they give.
So part of my advice to you is: go ahead and be honest with yourself about how you feel. Rejection can be hard, working to get an unaccountable gatekeeper's acceptance**** and failing to get public professional recognition in your chosen field is a cause of anxiety, and so on. Be honest about how discouraging that can feel, and why, and what you wanted that you didn't get.
And another part of my advice is that I will ask, like the annoying programmer I am: what problem are you trying to solve? Because there are probably a lot of ways there that don't involve this particular gatekeeper.
And the most annoyingly empowering part of my advice is: Humans created and run PyCon and TED and Foo Camp and all the other shiny prestigious things; you're a human and you could do so too. Especially if you acknowledge not just your own but others' ambition, and leverage it.
* Maybe we'll do it in an open space anyhow.
** Another blog post for another time!
*** I've left some things out here.
We have some awards, e.g., ACM Distinguished Member, that you might get if you work really hard for decades in certain fields. That feels too far away for the kind of thing I'm thinking about.
I've left out the possibility of being promoted at your job, because many technologists perceive engineering job promotions as not particularly correlating with the quality of one's work as a programmer, which means a promotion doesn't send a strong signal, understood by peers outside one's organization, of validation of programming mastery. Then again, if your organization is old enough or big enough, maybe the career ladder there does constitute a useful proxy for the mental models of the peers whose judgment you care about.
I've left out various certifications, diplomas and badges because I don't know of any that meaningfully signal validation of one's mastery as a programmer industry-wide. And there's a lot of stuff to parse out that I feel undecided about, e.g., I find it hard to distinguish the status symbol aspect of admission from the signal that the final credential sends. And: A lot of people in this industry find it impressive when someone has been admitted to certain postsecondary engineering programs, regardless of whether the person graduates. And: In my opinion, the Recurse Center is an experience that has an unfortunate and unintended reputation for gatekeeping on the basis of programming skill, such that a big subset of people who apply and are rejected experience this as an authoritative organization telling them that they are not good enough as programmers (and Google Summer of Code and Outreachy have a related problem).
Of course, go ahead, write your own blog post where you talk about how wrong I am about what I list or exclude, especially because I come from a particular corner of the tech industry and I'm sure there's stuff I don't perceive.
**** Some conferences' gatekeepers are more unaccountable than others'; regardless, the feeling from the rejectee's point of view is, I bet, mostly the same. And you can start your own conference or join the program committee of an existing conference to see what it's like from the other side of the desk and wield a bit of the power yourself.
# 26 Jan 2018, 06:28PM: Preserving Threading In Google Group or Mailman Mailing List Replies with Thunderbird:
Have you ever wanted to reply to a mailing list post that wasn't in your inbox? I had that problem yesterday; here's how I fixed it.
Context: I'm the project manager for Warehouse, the software behind the new Python Package Index (PyPI) which -- thanks to funding from Mozilla and support from the Python Software Foundation -- is on its way to launching and replacing the old PyPI. I've been in the Python community for years, but -- just as when I went from "casual Wikipedian" to "Wikimedia Foundation staffer" -- I'm learning about lots of pockets of the Python community that I didn't yet know about. Specifically, Python packaging has a lot of different repositories and mailing lists. One of them is the Google Group pypa-dev, a mailing list for developers within the Python Packaging Authority.
I joined pypa-dev recently -- and, in skimming the archives, I found a months-old message I wanted to reply to while preserving threading (so that future folks and longtime subscribers would see the update in context). So I clicked on the dropdown menu in the upper right corner for that post and clicked "Show original", which got me the Message-ID header. But how could I get Thunderbird to let me write a reply with the appropriate In-Reply-To header? Preferably without having to install some extension to munge my headers?
This reply to a StackExchange answer got me most of the way there; the basic approach is the same whether you're working with a Google Group or a Mailman list. (If it's a Google Group or a Mailman 3 list, you can of course reply via the web interface, but maybe you want to cc someone or have the history in your Sent folder, or you just prefer composing in Thunderbird.)
- First, you need to get the raw text, so you can get the Message-ID.
If you're looking at a Google Group message (example), click on the dropdown menu in the upper right corner for that post and choose "Show original" (example), then click the "Show only message" button to get a raw text page like this.
If you're looking at a Mailman 2 message (example), then navigate to the monthly archive. You can get there by clicking on the "More information about the [name] list" link at the bottom of the page, which takes you to a list info page (example), and from there, the "Visit the [name] Archives." link (example). Here on the archives-by-month page, download the archive for the month that has the message (using the "[ Gzip'd Text [filesize] ]" link in the "Downloadable version" column). And now you can, for instance, gunzip 2018-January.txt.gz in your terminal to get 2018-January.txt which you can search to find the post you want to reply to.
If you're looking at a Mailman 3 message (example), look at the bottom of the left navbar for a "Download" button (hover text: "this thread in gzipped mbox format"). If you gunzip that you'll get a plain-text .mbox file which you can search to find the post you want to reply to.
- Now, no matter what mailing list software you had to wrangle, save the raw message as a temporary file with a .eml extension, e.g., /tmp/post.eml, to smooth the way for Thunderbird and your OS to think of this as a saved email message. If you're looking at a Mailman archive, this is where you select just that one message (headers and body) from the .txt or .mbox file and cut-and-paste it into a standalone .eml file.
- Open that file in Thunderbird: File menu, select Open, select Saved message, and navigate to /tmp/post.eml and open it.
- If all's gone well, the message pops open in its own window, complete with Reply and Reply All buttons! Go ahead and use those. Note that the From: and To: lines have been obfuscated or partially truncated to protect against spammers, so you'll probably need to fix those by hand, e.g., replacing at with @ and fixing any ellipses (...).
- Hit Send with the glow of thread-preservation satisfaction. Watch for your post to show up, properly threaded, in the list archives (example).
# 05 Jan 2018, 11:30PM: My Fun Cleveland Vacation:
In October I visited Cleveland, Ohio for a long weekend and had a really lovely time. I'm looking forward to visiting Cleveland again for PyCon North America 2018, or even before that. I have talked to a few people who ordinarily like going to PyCon NA but have assumed Cleveland's not a fun place to visit. Early bird tickets for PyCon are nearly gone so now's a good time for me to tell you about the great time I had, even though I have been quite lax on photo taking, sorting, processing, and posting.
I came into town on Amtrak (which arrives way early in the morning) and took a cab to my lodging. I stayed at the Cleveland Hostel and stayed in a giant room (with a loveseat and a desk!) in a walkable restaurant district for pretty cheap. All the common areas, including the bathrooms, were clean and had what I needed. I had some deadlines to hit so I spent a bunch of that first day in my room on the wifi.
My friend Mike Pirnat swung by that night and we ate at a Burmese place, I think, in the Ohio City neighborhood near the hostel. We got some ice cream, watched an in-progress glassblowing workshop, and walked around a little, then he drove me around so I could see the city by night, and taught me a bit of the geography. Mike is a far better photographer than I am and someday you will see his photos from this weekend and I will sort of noiselessly point there and move my head in some complicated fashion indicating that you should look at his superior photos, not my snapshots.
The next day was super packed -- Ernest W. Durbin III was my guide. He took me to
Johnny Mango for breakfast, then we went on a walking tour of the downtown. Oh wow. The Cleveland Arcade, the grocery store that used to be a bank (where we ate lunch in the deli and marveled at its atrium), so much beautiful architecture and interesting history! I think this is also where I noticed Cleveland has a bikeshare, quite a bit of cool public art, and of course, to my New York City ears, ridiculously low prices for food and lodging. (I believe the walking tour guide mentioned luxury condos right in the heart of the city that go for as much as $1,500 a month, then rushed to say that they do come with various concierge-type perks. I was reminded of where I was.)
Ernest drove us to an open house and tour at the Midwest Railway Preservation Society where Ernest, Mike, and I got to see a ton of old trains and ride for a bit in a vintage railcar. (For a few hundred bucks, at MRPS, you can get trained and spend an hour running a diesel locomotive. I am interested in figuring out how to do this when I return to Cleveland in the spring.) We met up with Ernest's spouse Kaitlin and went to an art exhibit I had thought sounded interesting. It turned out to be pretty small but the curator was happy to show us the art warehouse in the back where they store pieces not currently on display and pieces being restored! So that was neat.
An Internet acquaintance of mine, Catherine Kehl, met up with us, and a subset of us went to eat pastries nearby, then to eat and drink at the Fairmount since it had been recommended by strangers on MetaFilter. I enjoyed my soft pretzel and beer cheese. Catherine gave some of us an impromptu tour of a science lab she runs at Case Western Reserve University (home of the Michelson-Morley experiment!), and I realized I was wiped and called it a night instead of heading to a folk concert.
The next morning, Mike picked me up bright and early so we could head to ride a local scenic railway. We got there a little early and walked around the canalway at a local park a bit, then boarded the vintage train and got to ride around a bit. The Cuyahoga Valley Scenic Railroad runs a bunch of different trains through the national park -- if you really wanted your PyCon corporate party to be lavish and memorable you could rent a private railcar which, goals.
Then, after a tasty lunch at The Oak Barrel, we went hiking and saw a couple of waterfalls: Blue Hen and Brandywine. Gorgeous scenery and pleasant exercise -- lots of rock-hopping across streams, which I love.
Mike, his family, and I saw a bit of the sunset over Lake Erie at a lakefront park, and then he joined my friend Catherine at dinner with me at an Indian place near Case Western. And then the next morning I took the local bus to the Greyhound station and the Greyhound to Pittsburgh and saw some other friends.
A few more photos I enjoy as reminders of the trip:
Approximately all of my photos of myself or my friends came out horrible so I am not inflicting those pictures on you or on us. Thanks to my Cleveland friends and acquaintances for showing me a good time, to acquaintances who gave me tips, and to the contributors to the Wikivoyage guide to Cleveland for useful tips.
And you can buy your ticket to attend PyCon in Cleveland right now and I believe the early bird rate is still available: Corporate for $550 USD, Individual for $350 USD, and Student for $100 USD.
# 05 Jan 2018, 09:49AM: Software Freedom Conservancy Fundraiser:
I am a supporter of the Software Freedom Conservancy, a nonprofit that helps free and open source software projects. They help programmers give away their work for free. I wrote a quick neighbor-friendly introduction to what they do (video version) a few years ago, and everything in it still applies.
In case you don't want to watch/read that: Conservancy is a nonprofit umbrella (a fiscal sponsor), helping projects like Git, homebrew, Wine, Selenium, and others by taking care of legal and financial paperwork on their behalf. They're also the institutional home of Outreachy, which gives underindexed people in tech paid apprenticeship-style internships to help them start their open source software careers. And they make sure big companies actually follow the rules, legally, so everyone can benefit the same from the openness of open source.
Right now, they have a challenge match going: "All donations up to [USD] $75,000 will be matched dollar for dollar until January 15." And they're about $5,500 from reaching that goal -- we can push it over the top! Conservancy's part of the unsung infrastructure of inclusivity and fairness in open source and in the larger tech industry, and I hope those of you who can will chip in a bit.