Cogito, Ergo Sumana

picture of Sumana's head

Sumana Harihareswara's journal

: 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:***

  1. contributing to open source software (mastery validation: maintainers merging commits and thanking/crediting contributor for work)
  2. presenting at conferences (mastery validation: program committee accepting talk)
  3. posting comments to gamified platforms like Reddit, Hacker News, and Stack Overflow (mastery validation: upvotes and replies)
  4. publishing academic research (mastery validation: journal accepting paper, peers reviewing paper positively)
  5. writing books (mastery validation: publisher accepting & publishing book)
  6. 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.

(0) : 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.)

  1. 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.

  2. 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.
  3. Open that file in Thunderbird: File menu, select Open, select Saved message, and navigate to /tmp/post.eml and open it.
  4. 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 (...).
  5. Hit Send with the glow of thread-preservation satisfaction. Watch for your post to show up, properly threaded, in the list archives (example).

: 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.

Cleveland Hostel room 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.

Cleveland skyline at nightMy 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.

Cleveland Arcade skylight and upper floors

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.)

Reddy Kilowatt at Midwest Railway Preservation SocietyErnest 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.

Steps-near-blue-henThe 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.

Brandywine Falls closeup

Cleveland and Lake ErieMike, 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:

Heils Block Ohio City

Interior of the Cleveland Arcade

Ohio pride flag

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.

Filed under:

: Software Freedom Conservancy Fundraiser:

Become a Conservancy Supporter!

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.

: 2017 Sumana In Review: Four years ago, during my first batch at the Recurse Center, every day I'd write in a little notebook on the subway on my way home, jotting down a few bullet points about what I had learned that day. I found it helped in a variety of ways, and the keenest was that on bad days, reviewing my notes reminded me that I was in fact progressing and learning things.

On any given day in 2017 I often did not feel very happy with my progress and achievements and how I was using my time. I fell ill a lot and I was heartsick at the national political scene and current events. It is genuinely surprising to me to look back and take stock of how it all added up.


I went hiking in Staten Island and in the Hudson Valley. I got back on my bike and had some long rides, including on a canal towpath in New Jersey and over the Queensboro bridge. (And had my first accident -- a car in my neighborhood rear-ending me at a traffic light -- and thankfully escaped without damage or injury.) I learned how to bake bread. I got to meet Ellen Ullman OMG. And I tried to travel less than I had in previous years, but I still had some fine times in other places -- notably, I had a great time in Cleveland, I witnessed the total solar eclipse in Nashville, and I visited Charlotte, North Carolina (where, among other things, I visited the NASCAR Hall of Fame).

Community service:

I did some of the same kinds of volunteering and activism that I'd done in previous years. For instance, I continued to co-organize MergeSort, participated in a fundraising telethon for The Recompiler telethon, signal-boosted a friend's research project to get more participants, and helped revitalize a book review community focusing on writers of color. Also, I served again as the auctioneer for the James Tiptree, Jr. Literary Award fundraising auction at WisCon, which is a particularly fun form of community service. The Tiptree Award encourages the exploration & expansion of gender. I wrote this 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. This year I also deepened my commitment to the Tiptree Award by accepting the organization's invitation to join the Tiptree Motherboard; I am pleased to have helped the award through a donation matching campaign.

But the big change in my community service this year was that I tried to prioritize in-person political work. I called, emailed, and wrote postcards to various government officials. I participated in my local Democratic Club, including going door-to-door petitioning to get my local city councilmember onto the ballot for reelection.

And I found that I could usefully bring my technologist perspective to bear on the city and state levels, especially regarding transparency in government software. I spoke to my local councilmember about my concern regarding public access defibrillator data (the topic that led me to file my first-ever Freedom of Information Law requests, for government health department records) and this inspired him to sponsor a bill on that topic. (Which is now filed as end-of-session partly because of the limbo in potentially getting PAD data from NYC's open data portal -- I need to send an email or two.) I was invited to speak to a joint committee of the New York State Assembly on the software side of our forensics labs, and got particularly interested in this aspect of due process in our criminal justice system, publicizing the issue in my MetaFilter posts "'maybe we should throw an exception here??'" and "California v. Johnson". I testified before the Committee on Technology of the New York City Council on amendments to our open data law (I didn't prep my public comment, so this text is reconstructed from memory; video), and then spoke before the same committee on an algorithmic accountability measure (and publicized the bill, especially keeping the Recurse Center community apprised as best I could). And I did research and outreach to help ensure that a state legislature hearing on protecting the integrity of our elections included a few researchers and activists it wouldn't have otherwise.

In 2018 I want to continue on this path. I think I'm, if not making a difference, making headway towards a future where I can make a difference.


This was by far Changeset Consulting's busiest year.

I had a mix of big projects and smaller engagements. First, some of the latter: I advised PokitDok on developer engagement, with help from Heidi Waterhouse. For Open Tech Strategies, I wrote an installation audit for StreetCRM. And, working with CourageIT, I came in as a part-time project manager on a government health IT open source project so the lead developer could focus more on architecture, code, and product management.

Some larger and longer projects:

Following a sprint with OpenNews in December 2016 to help write a guide to newsrooms who want to open source their code, I worked with Frances Hocutt to create a language-agnostic, general-purpose linter tool to accompany that guide. "The Open Project Linter is an automated checklist that new (or experienced but forgetful) open source maintainers can use to make sure that they're using good practices in their documentation, code, and project resources."

I spent much of the first half of 2017 contracting with Kandra Labs to grow the Zulip community, helping plan and run the PyCon sprint and co-staffing our PyCon and OSCON booths, running English tutoring sessions alongside Google Summer of Code application prep, and mentoring an Outreachy intern, along with the usual bug triage, documentation updates, and so on. We wrapped up my work as Zulip's now such a thriving community that my help isn't as needed!

From late 2016 into 2017, I've continued to improve infrastructure and documentation for a Provider Screening Module that US states will be able to use to administer Medicaid better (the project which spurred this post about learning to get around in Java).

And just in the last few months I started working on two exciting projects with organizations close to my heart. I'm thrilled to be improving HTTPS Everywhere's project workflow for developers & maintainers over the next few months, working with Kate Chapman via Cascadia Technical Mentorship (mailing list announcement). And, thanks to funding by Mozilla's open source grants program and via the Python Software Foundation, the Python Package Index -- basic Python community infrastructure -- is getting a long-awaited overhaul. I'm the lead project manager on that effort, and Laura Hampton is assisting me. (Python milestone: my first time commenting on a PEP!)

Along the way, I've gotten a little or a lot better at a lot of things: git, bash, LaTeX, Python (including packaging), Sphinx, Read the Docs, Pandoc, regular expressions, CSS, the Java ecosystem (especially Gradle, Javadocs, Drools), the Go ecosystem, Travis CI, GitHub Pages, Postgres, sed, npm Linux system administration accessibility standards, IRC bots, and invoicing.

Talks And Other Conferences:

This year, in retrospect, instead of doing technical talks and expository lectures of the type I'm already good at, I played with form.

At LibrePlanet 2017 I gave the closing keynote address, "Lessons, Myths, and Lenses: What I Wish I'd Known in 1998" (schedule, video, in-progress transcript). I tried something aleatoric and it worked pretty well.

At Penguicon 2017 I was one of several Guests of Honor, and spoke in several sessions including "Things I Wish I'd Known About Open Source in 1998" (which was different from the LibrePlanet version, as intended) and "What If Free and Open Source Software Were More Like Fandom?" (further links).

Then, at PyGotham, Jason Owen and I co-wrote and co-starred in a play about management and code review: "Code Review, Forwards and Back" (video on YouTube, video on PyVideo, commentary).

I also attended Maintainerati and led a session, attended !!Con, worked a booth for Zulip at OSCON, attended PyCon and helped run Zulip's sprint there, and co-sponsored a post-PyGotham dinner.

Other Interesting Things I Wrote:

I did not write this year for magazines; my writing went into this blog, MetaFilter, Dreamwidth, microblogging, and client projects, mostly. I also wrote an entry for a local business competition (I didn't make it very far but I'm glad I did it, especially the finance bits) and started two book proposals I would like to return to in 2018.

I've mentioned already some of the posts I'm happy about. Some others:

"On Noticing That Your Project Is Draining Your Soul" (every once in a while someone emails me and mentions that this has helped them, which means a lot)

"How to Teach & Include Volunteers who Write Poor Patches" (12 things you can do)

"Inclusive-Or: Hospitality in Bug Tracking", a response to Jillian C. York and Lindsey Kuper.

I turned part of "Some posts from the last year on inclusion" into "Distinguishing character assassination from accountability", a post about pile-on culture and callout culture where I pulled out quotes from 11 writers on how we take/charge each other with responsibility/power within communities.

I loved Jon Bois's 17776 and discussed it with other fans on MetaFilter, and then, to try to understand its amazingness better, wrote "Boisebration", collecting links to fiction and nonfiction by Bois about class, feminism, aging, sports, politics, wonder, education, & art (and 17776 precursors/callbacks).

I found out about Robert E. Kelly, like so many did, when his kids crashed his BBC interview, then collected some links in a MetaFilter post about his writing on Korea, US foreign policy, international relations, and academia.

I wrote up a bit about "1967's most annoying question for women in Catholic ministry" on MetaFilter to signal-boost another Recurser's cool project.

I enjoyed the learning and the plot twist in "The programmer experience: redundancy edition", in which I discovered a useful resource for Form 990 filings and learned to use the Arrow library for Python date-time manipulation. And was grateful to Pro Publica.

And I made a few jokes on social media I particularly liked:

yesterday, was trying to explain virtual environments/containers/VMs to a friend and said "they range from Inception-style fake computers to putting a blanket on the floor and pretending it's lava"


today a friend and I explained leftpad & Left Shark to someone and I began sketching out a hypothetical HuffPo piece connecting them
We habitually crowdsource infrastructure from, expect unsupportedly high levels of performance from unsuspecting participants -> popcorn.gif

Public notice I received:

I got some public attention in 2017 -- even beyond the Guest of Honor and keynote speaker honors and my amazing clients -- that I would like to list, as long as I'm taking an inventory of 2017.

I rode the first revenue ride of the new Q train extension in Manhattan and really loved the art at the new 72nd Street MTA stop. A journalist interviewed me about that on video and my experience got into the New York Times story about the opening.

Presenters at the code4lib conference said their project was specifically motivated by my code4lib 2014 keynote "User Experience is a Social Justice Issue" (written version, video). I was honored and humbled.

And -- this is out of place but I need to record it -- as someone who knew Aaron Swartz, I consented to be interviewed by artists working on a play about him, and so someone briefly portrayed me (as in, pretended to be me and repeated my words aloud) in that play, Building a Real Boy.

Finally, Hari Kondabolu looked at the English Wikipedia page about him, much of which I contributed, and was amazed at how thorough it was. So that was awesome and I was proud.


I got on Mastodon as part of my effort to improve how I use social media. I started using a new task tracker. I got back on my bike, and got somewhat into a habit of using it for some exercise and intra-city travel. A new friend got me into taking more frequent photos and noticing the world I'm in. Two new friends caused me to look for more opportunities to see musicians I love perform live.


I consumed a fair bit of media this year; didn't get into new music but enjoyed music podcasts "I Only Listen To The Mountain Goats" and "Our Debut Album". I did some book and reading reviews and will catch up to other 2017 reading sometime vaguely soon.

Leonard's film roundups & TV spotlights are a good way to see or remember most of what I saw in the last few years. TV highlights for me for 2017 are The Good Place, Jane the Virgin, The Great British Baking Show (which led me to write a tiny Asimov fanfic), Steven Universe, and Better Call Saul; I also saw Comrade Detective and Yuri!!! On Ice. Films I'm really glad I saw: The Big Sick, Schindler's List, Get Out (I fanned in MetaFilter Fanfare), In Transit, A Man For All Seasons, Hidden Figures, and Lemonade -- and a rewatch of Antitrust.


I made a few new friends this year, most notably Jason Owen and Mike Pirnat. My friends Emily and Kris got married and I got to hold up part of the chuppah for them. I took care of some friends at hard times, like accompanying them to doctor's visits. I got to see some friends I rarely see, like Mel Chua and Zed Lopez and Zack Weinberg, and kept up some old friendships by phone. My marriage is better than ever.

This year I shall iterate forward, as we all do.

: Some Things I Recommend Frequently: Some of these I ought to write up for Cool Tools someday! These are some recommendations I make somewhat often because, in my circles, I run into people who don't yet know about them. A non-comprehensive list.

Radio comedy: The sketch comedy show John Finnemore's Souvenir Programme.

Clothing: Shock Absorber's Ultimate Run Bra which has a clip at the top of the racerback and adjustable vertical straps.

Political and systems analysis essayists: siderea, Alexandra Erin, Alexandra Petri.

Music: Regina Spektor, the Mountain Goats, and Vienna Teng.

Books: Greg Milner, Perfecting Sound Forever: The History of Recorded Music. Emily Nagoski, Come as You Are: The Surprising New Science that Will Transform Your Sex Life. Chip Heath and Dan Heath, Switch: How to Change Things When Change Is Hard. Andy Oram and Greg Wilson, Making Software: What Works and Why We Believe It. Ellen Ullman, The Bug. Maureen McHugh, China Mountain Zhang.

Status play: this old improv wiki page.

Software: The goal-tracking service Beeminder, the distraction-avoidance browser add-on LeechBlock, the journaling community and open source project Dreamwidth, the doctor-finding and -booking service ZocDoc, Nelson Elhage and Anders Kaseorg's "Understanding Git" slide presentation, the regular expression sandbox/testing site RegExr, the email and calendar provider Fastmail, the library e-reader app SimplyE, the Monterey Bay Aquarium's sustainability checker Seafood Watch, and the Python debugging/prototyping tools python -i and bpython.

New York City ID: IDNYC, a New York City ID card that works for many purposes and gets you museum discounts, and that's available regardless of immigration status of the applicant, and the License Express DMV office in midtown Manhattan for state ID renewals. [Incidentally, if you are a US citizen in New York State, consider an Enhanced Driver's License which will also let you cross the land border into Canada.]

: What We Confirm: Unlike this nominee for a US District Court judgeship, apparently, I can at least give a one-sentence definition of the Daubert standard because of the hobby I accidentally picked up this year. Which is telling enough. But that clip and its implications also poked at some old memories for me.

As a child and as an adolescent, I generally wanted to act not just well, but defensibly well. The specific scenario that I envisioned was that I would have to answer for myself someday at a confirmation hearing before the U.S. Senate (although that was not a particularly fun way to live). Flashbulbs and microphones and wood panelling superimposed themselves on my bedroom wall.

As it turns out, I will probably never actually have that particular challenge. I took the Law School Admissions Test because my family suggested I do it to keep my options open, and got a 165, which was pretty good, but decided not to go to law school unless there was a specific thing I wanted to do that would be a lot easier if I had a law degree. Instead, I worked at a bookstore for a while, and then did customer service at for a bit. And while there I followed the news about Hurricane Katrina, and wrote:

What we are now learning about the devastation in the Gulf combines with a growing desire, borne of my working life, to become a manager, a good one.
I reflected a few years later:

I looked at Katrina and said, "For God's sake, we have to do better than that. And I could do better!" I wanted, and still want, to reduce the net amount of mismanagement in the world. We owe ourselves competence.*

By then I was on my way in this new career. And as a non-lawyer who is only ever considered poised and diplomatic by comparison with other programmers, I find it unlikely anyone will ever nominate me for the kind of high-up government gig that would require confirmation hearings.** But I know some more things now about stewardship. I feel a special disgust and horror when I see someone else abuse a power or neglect a responsibility that I share. And the more I know, the more I can do, the more awful the sinking feeling in my chest when I see someone with less capability than me given an important task. I'm looking back at some notes from about a year ago, just after the election:

I am predicting a future where I will ask myself innumerable times "who's minding the store?!", and seek clues as to whether a particular folly is due more to the Scylla of incompetence or the Charybdis of intentional wickedness.
[Laurie] Penny wrote that the President-Elect "has really messed with my life plan. This is far and away not the worst thing he has done, but it makes it a bit more personal." Yup. Dark humor is not usually my speed but I have found myself gasp-laughing a lot in the last couple of weeks and foresee using a lot of it in my near-future stand-up comedy. Like: of all the negative feelings I have about the election, one is the simple irritation I might feel if I were waiting at a restaurant to share dinner with a friend and they texted me, 20 minutes after they were supposed to arrive, and told me they were flaking out. It is the "but we had plans" resentment.

To that I can add another petty response I've felt a lot this year -- like Hermione Granger, bitterly asking the clearly rhetorical question, did no one else do the required reading?

Ben Franklin, in his Autobiography, recounts discovering one General Loudoun's astonishing indecision. Loudoun's procrastination slows down the entire economy of the Colonies and keeps mail boats from carrying urgent information back to England. Franklin says:

On the whole I then wondered much how such a man came to be entrusted with so important a business as the conduct of a great army, but having since seen more of the great world, and its means of obtaining and motives for giving places, my wonder is diminished.

Leonard and I sometimes now use "my wonder is diminished" with each other as shorthand for this kind of disillusionment. But I suppose I retain some capacity to be shocked-but-not-surprised, and sometimes I need to spend a little time grieving before I breathe a big sigh and put my shoulder back to the wheel -- or figure out that this means I oughta switch wheels.

* A little while after that, I read John Rogers's coining? of the term "competence porn", and have since then appreciated the "Damn, Fandom Is Good At What You Do" fanwork fest especially for this Harry Potter alternate-universe fic about property law.

** If it actually ever does happen and someone dredges up this blog post during the proceedings, I hope I have the sense of humor to laugh about it.

(2) : Blockchain and Bitcoin, Dar Williams, And So On: Sipping my soda water at the saloon across the street before the Untitled Kondabolu Brothers Project show Wednesday night, I struck up a conversation with a guy who works in an art gallery, and with his friend who works in publishing.

We talked about the Kondabolus, about current events in India, about their artistic endeavors, about the business of business books and the current interest in Bitcoin and the blockchain. And the guy said he kept hearing about those things and did not understand what they were. I gave him a simplified explanation (grateful to Scott Rosenberg's explanation which I'd enjoyed previously), and decided to record it here.

I explained that the blockchain and Bitcoin are different, and that he can expect that the blockchain is gonna stay around even if Bitcoin isn't what it's used for, like magnetic tape stayed around even though Betamax didn't take off and VHS did.

I asked him to think of a ledger, where we write down financial accounts -- money going in, money going out. Now think of one that's got two columns, one for you and one for me. With that ledger, you can track the money you exchange with me, because on the left is you and on the right is me. So it's not just about $300 in or $20 out, now, individual pluses and minuses. Now, every row matches up and you know where everything came from or went. Yup, he could conceive of that, a shared accounting record like that.

Now, I said, imagine a lot of people could do that together, so the ledger had records for the money moving around among all of us. And imagine that we could trust that record because it wasn't written in pencil, it was written in ink, so we could trust its provenance -- new stuff will only be added at the end, and the old stuff won't be changed.

That's the blockchain, I said. And that's why it would actually be useful as a shared notebook where lots of different people have to look at a record together and add notes for the future, for stuff like electronic medical records and real estate records. When did the patient get that diagnosis? Oh, it was between this surgery and that surgery.

So that's the blockchain, I explained. That's a basic technology. When people talk about a distributed, append-only ledger, that's blockchain -- "distributed" because lots of people can do it together even if they don't know each other, and "append-only" because you can only add to the end, not change stuff that's in the earlier records.

And Bitcoin is an implementation of that technology to do money, to agree about who has what money.

I asked him: Think of a Monopoly game. The box comes with, I don't know, a thousand bucks of Monopoly money. OK, so everyone in the game can trade it around. But what if you want to get a lot more people in the game and people want to do stuff and we need more money in the system, more of these tokens that people can exchange? How do you get more money into the system, add new tokens at a reasonable rate, and have everyone trust it -- trust its provenance?

Remember SETI@home? I asked. He did. I reminded him of how it had worked -- back before there was a "cloud" you could buy time on (the cloud is just other people's computers, after all, as the saying goes), the researchers said, please install this software on your computer. And then when your computer's not busy, at night, we'll give your computer a chunk of work, some data that a space telescope collected, and then your computer can use its spare time to crunch those numbers and check, hey, are there any weird patterns in that data? Do we think there are there aliens here?

And so if you've heard of Bitcoin "mining", it's kinda like that. What the people behind Bitcoin decided on is: the way you make more tokens is by having your computer solve the kind of really hard math problems that we basically need computers to do. It's just in the nature of this kind of math problem that it takes a computer a long time, crunching data, to solve the problem, but once it comes up with a solution, it's easy to check whether that solution is right. And so if your computer crunches out the next solution, then that makes a new token, and by default, you own it, because you, your computer did the work of solving that problem. He got that.

But that means people who want to make Bitcoin are like, okay, I'll get a huge row of computers to do it! And that uses a bunch of electricity which is awful for climate change! Yeah, he'd heard about that.

And so that's another reason, in late 2017, why personal computer security is more important than ever. There's the Trump Administration and its invasion of people's privacy, and surveillance, and so on. But also, when someone tries to trick you with spam or a virus these days, it's not just because they want to get your bank account password or your other private personal information. That hacker is now trying to install malware on your computer so they can use it like an evil SETI@home, evil crowdsourcing, so they can make your computer crunch those numbers to make new tokens (Bitcoins) for them. Your computer crunches the numbers but when you "mine" the Bitcoins they go to the hacker's account.

Also: So once you have this distributed trusted ledger, you don't really need people's names. So that means it's really useful for people who want to do sketchy things, and so from the beginning, the kinds of people who are interested in Bitcoin and other "cryptocurrencies" ("cryptography" meaning the study of how you make things secret + "currency") and want to use it include many of the kinds of people who give libertarians a bad name. He had heard of "the Dark Web" and made the connection here.

Around this point I started explaining what is and is not fiat currency, but it was time to line up to get a good seat at the show, so I left him and his friend to catch up and I crossed the street. As I stood in line, a (drunk?) woman who'd overheard me at the bar came up to me and tried to start a chat -- she said she works from home and feels isolated from what is going on in the world more generally. I sympathized with her; I work from home, a lot, too, and isolation can be hard. Her friend apologized for her, gently drew her away and started walking her to the subway stop; I lost sight of them.

I got a front-row seat at the show and had a lovely time. I'm currently reading Operating Instructions by Anne Lamott, and it strikes me that Ashok Kondabolu's relentlessly contrarian and cheerful self-revelatory style is a bit like Lamott's, especially vivid when they discuss addiction or antisocial reflexes. During audience Q&A, I mentioned that I am the single person who's contributed the most to the English Wikipedia page about Hari Kondabolu and asked whether there were any major inaccuracies, on any of the Wikipedias, about either Hari or Ashok. Looks like there aren't! Hari Kondabolu looked through that article live on stage and said with wide eyes, this is everything I've ever done. I was incredibly proud.

Last night I went to a Dar Williams show. I snagged a front-row seat but the seat next to me remained empty, and I eventually realized it wasn't visible to the people standing at the back. So I went to look for people who might want it; next time I do this, I need to start my sentence with "there's a spare seat up front" and not start by asking if someone's there alone. I was not hitting on you, two women I came up to!

A guy overheard me and was glad to come up front; he's a teacher with a bad back. We talked about where we'd lived, and about what coworking spaces do that coffeeshops don't, and what Meetup does that Facebook doesn't. He asked what I do (I explained a project manager's job as coordinative communication), and what kind of software I specialize in -- I briefly described the several different worlds of software development, like embedded stuff and games and websites and developer tools and so on, and said I mostly specialize in stuff for websites and in developer tools.

And within that, I said, I have a further specialty, which is not about those worlds, but about the approach to making software. There's a more open, collaborative approach, and a more closed one, and I specialize in the collaborative one. "Is that anything like open source?" Aha! But he didn't know what that meant, and asked questions, so I talked about open source a while. I talked about the four freedoms and about licensing. He asked whether more software is proprietary or open source, and so I talked about how the default for making software is simply to leave it under US copyright and how therefore, because of inertia if nothing else, most software people write is probably proprietary. And I told him about how most of the time when you interact with websites you're interacting with JavaScript that is unfree. And I was in the middle of explaining the difference between source code and binary when Anaïs Mitchell came on, and then I explained some more things during intermission, and then Dar Williams came on.

I don't know when I have cried more than at that show last night. I started listening to Dar Williams because Seth Schoen introduced me to her music, nearly twenty years ago, probably just a few months after he introduced me to free and open source software. So many of us sang along to "The Babysitter's Here" and "As Cool As I Am" (she paused her own guitar and voice to gesture to us and we all sang "I am the others" together; I feel like I never realized how anthemic that song is before) and "The Christians And The Pagans" and "When I Was A Boy" and "Iowa" (which always makes me think of this great West Wing fanfic) and "Road Buddy", and I hear a lot more in "After All" than I did before. She read aloud from her book. She does this show in Brooklyn the last week of every year, and I'm going to try to go now that I know that. 2018, 2019, 2020 -- something to look forward to in every year. I could use that.

When you're in love, sometimes you feel like every love song applies to you. When I'm trying to change, to improve myself, I find fresh news in trite old platitudes, even in inspirational quotes people share on social media, as shocking and embarrassing as some part of me thinks that is, and in songs I've known for years. I'm in a bit of my life where I'm listening to Vienna Teng and Dar Williams and the Mountain Goats to give me different lenses for my melancholy, some thoughtful and loving answers to the "what's the point? all is vanity" that pops up. This year I saw the Mountain Goats and Dar Williams and Regina Spektor live and yeah, I'm one of those people crying and singing along at the show, I'm one of the people these shows are for. Sign me up. I'll go in the cold, I'll go alone, I'll pay ridiculous service surcharges for tickets. I'm very hesitant to say I need things, but gosh it turns out that without this particular vitamin I will start developing emotional scurvy.

It turns out that when I started listening to Dar Williams she was not that much younger than I am now.

Keep going.

: Bill 1696 and Learning Old Systems: A very amended version of Councilmember Vacca's algorithmic transparency bill has now passed the City Council and is headed for the Mayor's desk to sign.*

This follows the October 16th hearing (which was moved to a larger hearing room at City Hall due to huge attendance) -- the video recording is available now and is a little over two hours long, as are PDFs for Hearing Testimony (pre-written) and the hearing transcript. One attendee live-tweeted practically the whole hearing (sometimes the threading broke a bit) and another shared rough notes as a GitHub gist. Several people spoke for a few minutes each from, e.g., the New York Civil Liberties Union, The Brennan Center for Justice, Legal Aid Society, BetaNYC, Brooklyn Defender Services, Princeton's Center for Information Technology Policy, and various other institutions, and some spoke just as individuals. I testified for a few minutes, starting at about 1:53 in the video, and got quoted in Civicist.

The amended bill, approved by the Council's Technology Committee and then by the City Council earlier this month, is a compromise. It creates a task force, and they'll have 18 months to write up a report with recommendations, and that report will be made public. The bill specifically says that "Nothing herein shall require compliance with the task force's recommendations". Who appoints the members of the task force? "Such task force and the chair thereof shall be appointed by the mayor or a designee thereof" with no particular mandate that, say, the Council has a voice in who's placed on the task force. The bill says nothing about whether the task force will perform any of its hearings in public.

So those of us who want to keep momentum going on this issue will have to note who's been appointed, submit testimony when the opportunity arises, and find a way to sustainably pay attention to it.

The Mayor could allow the bill to lapse into law without signing it, could sign it into law, or could veto it (and then probably have the Council override his veto with a two-thirds majority). What I hear is that it'll almost certainly be the first or the second of those three. Legistar says there'll be a hearing tomorrow, Monday the 18th, but what I've heard is that this will be kind of a formality in which 20+ bills are being "heard" but no substantive discussion is expected.

So I tried to find out when on Monday this hearing will be. I looked around the Mayor's chunk of and found nothing. My Council contact told me that the daily Sked in the daily First Read in City & State and Gotham Gazette's Week Ahead sections would tell me these kinds of schedule details -- once Monday rolled around.** Ahhh. New York City is a very old system, like sewing or software packaging,*** and way before there existed a municipal website, there was a rich ecosystem that depended on knowing this information, and so niche publications emerged. Right.

And today, while writing this, I found the City Record Online (every day the City Record puts out notices of city hearings, court notices, etc. and you can look at recent daily editions as PDFs or search electronically), and figured out: 4:30 pm, in the Blue Room at City Hall, as announced on December 13th.

So I'll probably be there, even though it probably isn't substantively important, as I learn this system, as I learn how to pay attention. Maybe I'll see you there too.

* Legistar, the application that NYC uses to track bills as they move through the City Council, has email and RSS notification, but the email alerts have not been functioning for me, and the RSS option is pretty uninformative and (I think) slow to update. Councilmatic is an open source alternative that had to use screen scraping to get bill and event data (the comments in the bills scraper elucidate some stuff I'd been unsure about). I'm glad to hear that, thanks to NYC open data advocates, there's now a proper Legistar API available for civic developers like us.

** Indeed, the First Read now includes a sked for Monday that mentions a Mayoral hearing and bill signing -- but doesn't specify or link to the list of bills.

*** I'm improving various skills and learning multiple systems right now. In rough order of how old our systems/skills are, as humans, here are some of them:

  1. Time management (regular)
  2. Sewing
  3. New York City governance
  4. Bicycling
  5. Sewing (electric)
  6. Time management (with mass media)
  7. Bicycling (in car-heavy urban environments)
  8. Time management (with email)
  9. Python packaging
  10. Time management (in attention-casino electronic environment)

: Boisebration!: I deeply enjoy the work of writer and artist Jon Bois, so I compiled a big MetaFilter list of fiction and nonfiction he's created about class, feminism, aging, sports, politics, wonder, education, and art (not including his better-known series, Pretty Good and Chart Party). The post also collects several 17776 influences, references, precursors, and callbacks, so heads-up in case you loved 17776.

Filed under:

: A Theme in Newitz, Sugar, Wells, & Leckie: I'm starting Annalee Newitz's Autonomous (enjoying so far; the science-sex-and-slaves narrative makes me also want to reread Nicola Griffith's Slow River). I'm fuzzily thinking about thematic echoes in Rebecca Sugar's Steven Universe, Martha Wells's All Systems Red, and Ann Leckie's Imperial Radch trilogy (Ancillary Justice and its sequels). I'm noodling around thinking about how all of them tell stories of networked identity and body violation. What is it actually like to have unaccountable masters who can alter your mind? How similar is that to being misinformed and betrayed, in normal human ways, by people and organizations who have power over you? These are all stories that ... take cyberpunk for granted, you know? Of course we are all always plugged in, or could be, and freedom depends on being able to unplug, and to freely choose fusion, conversation, association, intimacy.

Filed under:

: The Programmer Experience: Redundancy Edition: Sunday morning, one thought led to another, and I realized I'd like to read a US nonprofit's Form 990 (annual report on assets, revenue, etc.). I started looking for 990s, and stumbled upon a big set of machine-readable 990s from 2011 through sometime in 2016. Is the one I seek in there? How recently was the dataset updated?

So I broke out bpython, the json module, and wget and started figuring it out.

Some things I learned/realized/remembered along the way:

  • json.load() does pretty much exactly what I hoped it would even though I had forgotten the exact wording -- yay.
  • Gar -- why can't datetime Just Do The Right Thing regarding turning very datestamp-looking strings into datetime objects? Aha, Arrow is my answer (Arrow : datetime :: requests : urllib2).
  • Hey, if I've started up a virtualenv (being careful to create one whose Python is my installation of Python 3), how come I can't invoke bpython? Ohhhh, I have to pip install bpython inside the venv (or -- just to be safe -- I used pip3 install bpython which worked).
  • I am fine with iteratively searching through a huge dataset in an incredibly unoptimized and cut-and-paste way at first, and if I get irritated by waiting then I can fix things up with refactoring and optimization and so on.
  • According to the index of available filings, the most recent update reflected in those filings is from January 11, 2017.
  • I'm one step closer to reflexively doing this kind of stuff in a Jupyter notebook and publishing it but I'm not there yet, despite encouragement from Julia Evans and how much easier the infrastructure's gotten. Next time, I think.
  • I remembered that Bradley Kuhn would like for far more people to pay attention to 990 filings, and has co-maintained a repository of FLOSS foundations' filings for some time. I started searching around in case there was a more recent version of the repo* -- and found, via an actually relevant textual ad served by a search engine, ProPublica's Nonprofit Explorer.

    Use this database to view summaries of 3 million tax returns from tax-exempt organizations and see financial details such as their executive compensation and revenue and expenses. You can browse IRS data released since 2013 and access over 9.6 million tax filing documents going back as far as 2001.

    For example, attractively presented data, and full 990s, for the Organization for Transformative Works.

So, uh, turns out I didn't need to actually get all "make a new GitLab repo! how does Arrow work? gotta refactor this!" and so on, but ah well. Now I will have a fresh new project to use for testing as I delve into Python packaging and test Warehouse, the new Python Package Index.

* Update: Mike Linksvayer, on, edifies: "The archived gitorious floss-foundations filings repo is now actively maintained by Martin Michlmayr at".

Filed under:

: Video of Our PyGotham Play: You can now watch the 22-minute video of the play I discussed last month. "Code Review, Forwards and Back", co-written by and co-starring Jason Owen and me, directed by Jonathan Galvez.

Thanks to:

  • Kenneth Durril for running sound
  • David Beazley for running lights (on a few hours' notice and with no rehearsal)
  • A. Jesse Jiryu Davis for a cameo as a junior engineer, and for introducing the play
  • Jonathan Galvez for directing (if you're in NYC and looking to hire a director for a thing like this, ask me for his email address)
  • Michael Rehse for a ton of useful advice
  • Laura Hampton for serving as a dramaturg during late rehearsals
  • The PyGotham organizers for accepting the talk and advising us on logistics and tone
  • Our audience, especially attendees who told us they'd liked it

We were happy to hear people say things like I'm new to the industry, and this helped me learn things to watch out for or I used to be that reviewer and I'm trying not to be anymore or My name is Randall and I never hear my name in fiction and it was nice to hear you say my name or I don't code at all but this is a marvelous management parable. Indeed, code review is just a particularly visible moment where you can see the effects of an organization's culture and processes. Too execution-focused (the right hand doesn't know what the left hand is doing)? Too alignment-focused (we're taking so much time deliberating and gaining consensus that we can't make forward progress on the mission)? Too lax, or too superficial, in enforcing rules? Our play can't dive into every scenario but it's a start. And -- the most frequent comment we got from happy attendees -- it was a change of pace (no slides!).

We're revising the play and submitting this a few other places; once it's run its course, we'll be posting the text of the script online.

(1) : Happy Halloween: Today in the US we have the 1st of the crowded season of holidays taking us into the spring: Halloween, Thanksgiving, ["the holidays"], New Year's, Valentine's Day.

Fear/horror, gratitude, tradition/family, hope, romantic love.

Halloween and Valentine's Day bookend this season; they are candy holidays of gesture, with eros and thanatos a hairswidth apart.

My best wishes to you all today; may your inner demons find a safe way to frolic.

Filed under:

(2) : Cleveland Visit: I'm visiting Cleveland, Ohio this coming weekend, in case you live there or have suggestions for things I ought to do.

(One proximate cause of this is that, through the Python community, I've met multiple nice people who are organizing or championing PyCon North America in Cleveland in 2018 and 2019, and who will show me around a bit. Another is the United Airlines rep who, while trying to reroute us on our solar eclipse trip, said, "The only place in the United States I can get you tonight is Cleveland" which sounds more like a Call to Adventure than most bad travel news does.)

I'm particularly interested in hiking, walking tours, live folk and rock music, history (especially political, social, and science and engineering history), pair programming, and trains. I'll be there Friday October 20th through Sunday October 22nd. I'm also open to giving a talk or two while in Cleveland. Feel free to leave comments on this post -- the spam filter is rather aggressive but I'll fish things out regularly!

: Hello City Limits, I See Your Sign, Left Your Dystopia Way Behind: A joking-around conversation from a recent conference, from memory and condensed.

A: "I saw the eclipse in Nashville."
B: "Oh I'm from Nashville!"
A: "Oh cool! Did you see it there too!"
B: "No, I didn't, I don't live there anymore."
A: "So you're from Nashville. Do you play an instrument? Are you a musician?"
B: "No, I'm not."
A: "Is that why you had to leave? Is there some age by which the Machine sends you a notification that you have to choose an Instrument and perform at the Audition?"
C: "I'm imagining that scene from A Wrinkle in Time, the street of identical houses, everyone in a row on the sidewalk, with their guitars."
A:"Playing 'Wonderwall', all at the same time. And you show up at the Audition, like, 'I'm Divergent, I'm not gonna choose an Instrument, I'm leaving!'"
B: "This is actually a little too real."

(You may also enjoy Randomized Dystopia, a.k.a. Assorted Abrogations.)

Filed under:

: Code Review, Forwards And Back: This Friday, at PyGotham, Jason Owen and I are co-presenting "Code Review, Forwards and Back". This is not a standard technical conference talk. It's a 25-minute play, basically a one-act.

The setting: an office conference room. The characters: a developer, who's written a chunk of new Python code, and a team lead, who's about to review it. You'll see the code. It's not great.

What happens if the reviewer waves it through, or lets conflict aversion get the best of them? What if the reviewer says it should be "better" but doesn't articulate how? What if the review is abrasive, or nitpicky, or laid-back? What if the reviewer rewrites the code right there and then? And if we fast-forward to the same team years later, how has this code reviewing style affected the quality and evolution of the codebase, and the team's culture, skill and sustainability?

See a fast-paced montage of ways things can go. Recognize patterns from your past and present. Learn scripts for phrasing criticism constructively. And laugh.

Or, to put it another way, it's Run Lola Run but about code review.

I was getting advice about this from a friend who's both an actor-playwright and a senior developer, and I may as well tell you what I told him, about why I want to do this. I have artistic and educational reasons.

Artistically: it's frustrating to me that there's such a limited range in how we persuade and teach each other in sessions at technical conferences. Most commonly I see conferences with lots of lectures, panel discussions, and live tool demonstrations. Those aren't very interactive, and so I welcome conferences who bring some variety into the mix on the axis of interactivity, such as hands-on workshops and trainings, and birds-of-a-feather discussion sessions. But also, we could be learning a lot more about spectacle from the giant field of endeavor that is all about entertaining people who are watching you perform on a stage.* We encapsulate wisdom as, e.g., songs and cartoons whose entertainment value helps us value and retain their lessons; Jason and I are interested in seeing how theater can do things a lecture can't do, can be like a demo of behavior, while talking about tech.

And educationally: especially when it comes to the emotionally fraught art of code review, the medium of theater seems like a promising way to encourage empathy in the viewer. Code review is a moment of great vulnerability, an opportunity for courage and healthy conflict. We only know ways to be if we can imagine them. Jason and I hope this play illustrates a few ways we can be.

So we're preparing that. I hope it goes all right.

* No actual stage in the conference room where we'll be performing. But, you know. Figurative stage.

: A Misheard Moxy Früvous Lyric, Corrected: Sometime around 1999 or 2001, I first heard "King of Spain" by Moxy Früvous. The UC Berkeley a cappella group DeCadence performed it during one of their lunchtime concerts near Sather Gate. (Four out of five weekdays one of the a cappella groups would do a noon concert -- DeCadence, Artists in Resonance, the Men's Octet, the California Golden Overtones -- and I caught as many of them as I could.) And then Steve Shipman introduced me to more of their songs and albums -- it was Bargainville, which ends with that haunting a cappella "Gulf War Song", that I was listening to on September 10, 2001.

In 2014 it came to light that band member Jian Ghomeshi had a fairly sordid history, and for a while I couldn't listen. Now I seem to have the ability to listen again; that change I don't have as much insight into as I'd like.

Just now Leonard and I were singing bits of "King of Spain" to each other; he sang:

Lord, it looked good on me

I said "What?!" Because back around 2000 and through all the years to the present, I heard those lyrics as:

Lord of the good ennui

So for the entire time I've been with Leonard, he and I have interpreted that song slightly differently. He heard the narrator figuratively wearing royalty like clothing, like a fashion statement, which connects to the silk he mentions in the next line, and which logically connects to the garment swap later in the song. Through my mondegreen, I heard an emphasis on the narrator's malaise and boredom (a reason for the prince-and-pauper swap) and a connection to the literal meaning of an additional French loanword, laissez-faire, that he uses later.

A quick web search tells me that Leonard's version is the consensus, that to join intersubjective reality I would let go of "Lord of the good ennui". I shall bury it here, with due ceremony. Goodbye, old mondegreen friend! You were a lot of fun.

: Supporting Int 1696-2017 for Source Code Transparency in New York City: The principle at stake in California v. Johnson: due process requires that we be able to examine the evidence used to convict someone. Kern County got a $200,000+ grant and started using closed-source software to perform a new kind of DNA testing for criminal forensics. You are not allowed to audit the software to check for bugs, but the company founder will fly in and testify in court to say he attests to the validity of the results it finds. Uh, no, we need to check, and the ACLU and EFF have just filed amici curiae* briefs before California's Court of Appeal for the Fifth District, saying so.

Man at lectern in front of screen displaying 'Winning Raffle Numbers: 12345 12345 12345 12345', photo (used by permission) by Mike Pirnat at the PyCon PyLadies auction in 2017As I've written and even testified, we need more auditability, transparency, and security in software governments use in laboratories and field tests. Heck, we need it in software governments use to make decisions more generally -- lotteries for visas, school assignments, parole and prison sentencing, and so on.

So I was delighted to learn of bill Int 1696-2017, currently before New York City's City Council. Summary:

This bill would require agencies that use algorithms or other automated processing methods that target services, impose penalties, or police persons to publish the source code used for such processing. It would also require agencies to accept user-submitted data sets that can be processed by the agencies' algorithms and provide the outputs to the user.

I applaud James Vacca, chair of the council's Committee on Technology, for introducing and sponsoring this bill, and for citing/shouting out to danah boyd, Kate Crawford, and Cathy O'Neil as people whose work has shaped this legislation. The New York Times says: "As a committee chairman, he plans to convene hearings before he leaves office in December." I'm looking forward to attending those hearings.

If you live in New York City, you can contact your councilmember and suggest they cosponsor this bill. If you live elsewhere, consider telling your local elected officials that they oughta introduce legislation like this. When writing or calling, if you're a programmer or other technology expert, say so -- our voice matters.

I have more links in the algorithmictransparency tag on Pinboard.

* Many years ago, Seth Schoen made me an illustration that we still have somewhere. Reconstructed from memory:

[one smiling stick figure, male, near a courthouse] Sum amicus curiae.
[one smiling stick figure, female, near a courthouse] Sum amica curiae.
[many smiling stick figures of various genders, near a courthouse] Sumus amici curiae.
[one stick figure, male, holding a finger to his mouth as though shushing you, near a courthouse] Tacit! Sum inimicus curiae!

Edited Tuesday Sept. 19th to add: The Committee on Technology is holding a public hearing to discuss Int 1696-2017 on Monday, October 16th.

: On Noticing That Your Project Is Draining Your Soul: I was talking with a fellow consultant about what to do if you have a gig getting you down. Especially when you realize that the client isn't being helpful, and there's a bunch of learning curves that are exhausting you, and you still have several weeks to go.

In my master's in tech management coursework, I learned the lens that thriving is a function of a person times their environment. I think those of us who are used to trying harder, overcoming obstacles, etc. can be -- kind of out of self-protective instinct -- bad at noticing "this environment is so crappy it makes it systematically hard for me to achieve and thrive". Especially with short-term projects. At first, things like "I feel tired" or "ugh, new thing, I don't want to learn this and be bad at it (at first)" and "I'm worried that person doesn't like me" or "they missed the email/meeting/call and now it's harder to execute the plan" are identical to problems that we are reasonably sure we can overcome. Maybe we notice patterns about what's not working but think: I can take initiative to solve this, myself, or with my few allies.

Several papercraft pieces I made out of gold-colored wrapping paper, some alike and some differentThe data points accumulate and we chat with other people and, in the process, learn more data points and shape our data points into narratives and thus discover: this is a bad environment, structurally. But by the time we really figure out the effect a short-term project is having on us, it's supposedly the home stretch.

I'm looking back at gigs that I found draining, where, eventually, I had this realization, although I have never quite framed it this way before now. On some level I realized that I could not succeed by my own standard in these projects/workplaces, because there was so much arrayed against me (e.g., turf war, a generally low level of skill in modern engineering practices, lack of mission coherence, low urgency among stakeholders) that I could not do the things that it is kind of a basic expression of my professional self/competence to do.*

So I had to change what it was I aimed to achieve. For example, I've had a gig where I was running my head into the wall constantly trying to bring better practices to a project. I finally talked with an old hand at the organization and learned the institutional reasons this was practically impossible, why I would not be able to overcome the tectonic forces at play and get the deeper conflicts to resolve any faster. So we changed what I was trying to do. Running a daily standup meeting, by itself, is a thing I can do to bring value. I changed my expectations, and made mental notes about the pain points and the patterns, because I could not fix them right away, but I can use those experiences to give better advice to other people later.

An editor recently told me that, in growing as an editor, he'd needed to cultivate his sense of boredom. He needed to listen to that voice inside him that said this is boring me -- and isn't that funny? Parents and teachers tell us not to complain about being bored -- "only boring people are bored", or -- attributed to Sydney Wood -- An educated man is one who can entertain a new idea, another person, or himself. But pain is a signal, boredom is a signal, aversion and exhaustion are signals. Thriving is a function of a person times their environment.

Also, the other day I read "Living Fiction, Storybook Lives" (which has spoilers for Nicola Griffith's excellent novel Slow River).

How come I spent many years living a rather squalid existence... yet managed to find my way out, to the quite staid and respectable life I have now, when others in the same situation never escaped? In the course of writing the book, I found that the answer to my question was that the question itself was not valid: people are never in the same situation.

It takes substantial introspection and comparison to figure out: what kind of situation am I in, both externally and internally? Is it one where I will be able to move the needle? It gets easier over time, I think, and easier if I take vacations so I can have a fresh perspective when I come back, share my stories with others and listen to their stories, and practice mindfulness meditation so I am better at noticing things (including my own reactions). Maybe "wisdom" is what feels like the ability to X-ray a messy blobby thing and see the structures inside, see the joints that can bend and the bones that can't. In some ways, my own motivation and mindfulness are like that for me -- I need to recognize the full truth of the situation I'm in, internally and externally, to see what needs changing, to see how I might act.

The thing that gets me down most, on exhausting projects, is the meta-fear that nothing will improve, that I am stuck. When I realize that, I try to attend to that feeling of stuckness. Sometimes the answer is in the problem.

* As Alexandra Erin discusses, regarding her political commentary via Twitter threads: "I do the work I do on here because I feel called to it. For the non-religious, I mean: I have a knack for it and I find meaning in it."

Filed under:

: In Black: Grabbing a book to read, thought I was grabbing Johnny Cash's autobiography, was actually grabbing Jonathan Zittrain's The Future Of The Internet And How To Stop It.

I'd like to code a rainbow every day
And tell y'all it's 200 OK
But cyberspace is crying out: the commons we shall lack
Till we steal it back
Filed under:

: From Conversation: A few recent thoughts.

  • The power of "instead": One of the transdisciplinary lessons from Agile is that it's harder for most people to specify "this is what I need" than to look at a suggested solution and talk through "here's why this doesn't work for me." Another way to see this: generating initial idea-seeds is a useful gift, even if we don't implement any of them, if discussing them leads to us figuring out what we really want. "Instead" is a goldmine.

  • Margaret Killjoy's fiction: I was talking with friends about Margaret Killjoy's fiction the other night and realized I should gush about it someplace where more people will see.

    In late 2016 and early 2017, the two books that remedied the political doom in my head were Cory Doctorow's Walkaway (you can read the accompanying novella Party Disclipine for free) and Rebecca Solnit's Hope in the Dark (I have not finished this yet but have found a lot of solace in it). Now I've found a third: Margaret Killjoy's novella The Lamb Will Slaughter the Lion. It's so perceptive "about the lure of authority" and about all the microreactions we have when we meet new acquaintances and decide how much to trust them, and thrilling (although if a bit of horror gore squicks you out, you might want to sit this one out). Like Killjoy's "Men of the Ashen Morrow" and "Everything that Isn't Winter" it's also a closely observed story about violence, loyalty, vulnerability, sacrifice, and the ways we try to influence each other when we don't have traditional capitalist/bureaucratic hierarchies to bring to bear.

    In "Everything that Isn't Winter", our point-of-view character is a resident and guard of an egalitarian commune, itchy and melancholy about their own too-well-developed capacity for and comfort with violence. I found it refreshing to see the competence demonstrations, loyalty, sacrifice, tradecraft, and suspense I'd usually see in military SF deployed in a story about the defense of an egalitarian commune in the woods.

    The Lamb Will Slaughter the Lion (available as an ebook for NYPL patrons to borrow via the SimplyE app for Android and iOS) particularly spoke to me in its attention to the subtleties of power and influence, especially in nonhierarchical organizations -- it brings the fantastic lens to "The Tyranny of Structurelessness". What does it feel like and what happens, within each of us and among us, when our inability to persuade others to take urgent collective action collides with the heartfelt desire to avoid dominating others?

    Killjoy's fiction, like Walkaway and Party Discipline, shows us not just arguments people might say or think in the service of a freer life, but the forms those lives might take, the feelings and relationships that would emerge. Narrative gives us people to love and to imagine ourselves in community with. Recently I read lazenby's essay on the body as compared to art or love:

    Art, as Ruskin wants it to be seen, is a co-equal portal of creation through which it is possible to glimpse a world that is something other than the vigorous hybrid of cleverness and sadism....

    In rather the same way that art does not rely on the logic of power or the power of logic, its example allows us to see still other ways of thinking....

    I attended a Regina Spektor concert a few weeks ago that felt numinous. Live music, like great narrative, is one of those magic things for me. If you have been feeling airless and sewn to the ground, I hope you find a chunk of magic somewhere that helps you.

  • Wedding bells: My friends got married! Awwwww.

: Choice, Habit, and Sunlight: Years ago, when advising me on how to change a habit, Mel Chua told me about the stages of behavior-rewiring. And the first step is noticing. Mindfulness. Not just about the reflex, but about whatever stimulated that response. Making it a conscious choice instead of something that happens automatically.

I am getting slightly better at noticing the cues and guiding myself into better habits. I start noticing that I'm about to do a particular thing as a response to boredom/fear/other stimulus, and so I let myself do that, as a conscious choice, but I tell myself that not next time but the time after that, I'm going to make a different choice, and then the time after that I'll do the unconstructive thing. And then each day I decide that the next day I'll choose to do that thing slightly fewer times. And over time the habit fades.

And sometimes this is fairly fraught. No more denying whatever pain, fear I'm avoiding. I need to let myself feel the panic masked in boredom, the anger or loneliness that feels anxious.

And that is hard. It's hard to rip denial away and face these. Maybe to grieve whatever loss I haven't admitted yet.

But you are what you practice. And what do I want to get good at -- or even better at, if I've been practicing for a long time? Do I want to get better at lying to myself? Probably not. And hurting my future self, procrastinating, feels like a lie -- it's the self-deluded lie that problems will go away if I avoid thinking about them.

At least for me, the metaphor feels like: I got jabbed by something sharp and jagged, and the wound didn't heal right, and I need to uncover that wound and feel fresh air on the bare skin again and rinse it out and look after it as it heals again.

Best wishes to us all.

Filed under:

: Learning To Get Around In Java: One of Changeset Consulting's clients is working on modernizing a legacy web application; we're improving both its structural underpinnings and its user interface and outgoing APIs. It is like we are Chief O'Brien in the first season of Star Trek: Deep Space Nine, surveying and retrofitting Terok Nor. But that's not a fair comparison; O'Brien has to not only grapple with alien engineering approaches, but with the resentful and deliberate trashing the Cardassians inflicted on the station before handing it over. I haven't seen Stargate Atlantis but perhaps that's a better analogy; with every component of this long-asleep lost city that we resuscitate, a new console or room shimmers to life. Which is pretty rewarding!

The original authors wrote this application in Java. I've never worked on a Java application before, so the last few weeks have been quite an education in the Java ecosystem, in its tools and frameworks and libraries. We're improving the installation and deployment process, so now I'm more familiar with Ant, Gradle, Maven, OpenJDK, JDBC, Hibernate, and WildFly. I've gotten some API documentation in place, so now I know more about Spring and Javadoc.

As I was explaining to a friend this weekend, the overwhelming thing isn't Java as a language. It is a programming language and you can program in it, fine. The overwhelmption is the seemingly endless chain of plugins, platforms, and frameworks, and the mental work to understand what competes with, supersedes, integrates with, or depends on what.

Imagine you come to visit New York City for the first time, and wish to visit a specific address. First you need to work out where it is. But you do not have a map; there is no unified map of the whole place. Surely you can figure this out. Watch out: if someone doesn't tell you what borough an address is in, it's probably in Manhattan, but then again maybe not. There are multiple streets with the same name, and "31st Street and Broadway" in Queens is quite far from "31st Street and Broadway" in Manhattan. The avenue numbers go up westwards in Manhattan, eastwards in Brooklyn, and northwards in Queens. And so on.

You ask around, you see sketches of maps other people have made on their journeys, and eventually you feel pretty confident that you know the rough distance and direction to your destination. Now, how do you get there from your hotel room?

You probably don't want to walk all the way; for one thing, it's illegal and dangerous to walk on the freeways. This is why we have the subway (express and local), and buses (express and local, both privately and publicly run), and government-regulated taxis (street-hailable cabs and private car services), and bike rental, and commuter rail, a funicular/tram, car rental, ferries, and so on. Also there are illegal rideshare/taxi services that lots of people use. You try to learn some nouns and figure out what sort of thing each is, and what's a subset of what.

A MetroCard works on some of these modes and not others, and some transfers from one ride to another cost you nothing, and you can't use an unlimited-ride card twice at the same station or on the same bus within 18 minutes.* You can bring a bike on some MTA-run services but not all, not all the time. There are whole neighborhoods with no subway service, and whole neighborhoods with approximately no street parking. At rush hour the trains get super full. Service changes at night, on the weekend, and on holidays. Cars and buses get stuck behind accidents and parades. People and signs in Manhattan refer to "uptown" and "downtown" as though they are cardinal directions; they often correlate to "north" and "south" but not always. Metro North trains terminate at Grand Central, but Long Island Railroad trains terminate at New York Penn Station, which is named after Pennsylvania because it's where you can catch a train to Pennsylvania,** and there's a Newark Penn Station too but over a crackling loudspeaker those two station names sound very similar so watch out. And so on.

You're lucky; you find a set of cryptic directions, from your hotel to the destination address, based on a five-year-old transit schedule. It suggests you take a bus that does not exist anymore. Sometimes you see descriptions of travel that you think could be feasible as a leg of your journey, and you read what other people have done. They talk about "Penn Station" and "the train" without disambiguating, refer to the subway as "the MTA" even though the MTA also runs other transit, talk about "the 7" without distinguishing local from express, and use "blocks" as a measure of distance even though some blocks are ten times as long as others.

Aaaaagh. And yet: you will make it. You will figure it out. New Yorkers will help you along the way.

The decades-old Java ecosystem feels overwhelming but this application overhaul is like any other task. Things are made of stuff. Human programmers made this thing and human programmers can understand and manipulate it. I'm a human programmer. I made Javadoc do what I wanted it to do, and now the product is better and our users will have more information. And every triumph earns me a skill I can deploy for other customers and groups I care about.

* Just long enough for you to enjoy a little break from the podcast you're making with President Nixon!
** Also see St. Petersburg's Finland Station.

Filed under:

(2) : Transparency And Accountability In Government Forensic Science: Sumana Harihareswara next to public hearing noticeIn February, I learned that the New York State Assembly was planning a public hearing on government oversight of forensic science laboratories, and then was invited to offer ten minutes of testimony and then answer legislators' questions. This was a hearing held jointly by the Assembly Standing Committees on Codes, on Judiciary, and on Oversight, Analysis and Investigation and it was my first time speaking in this sort of capacity. I spoke on the importance of auditability and transparency in software used in devices the government uses in laboratories and field tests, and open source as an approach to improve these. And I testified to the efficiency, cost savings, security, and quality gains available by using open source software and by reusing and sharing open source software with other state governments. Here's a PDF of my testimony as written, and video and audio recordings are available as is a transcript that includes answers to the legislators' questions. It is a thrilling feeling to see my own words in a government hearing transcript, in that typeface and with those line numbers!

As I was researching my testimony, I got a lot of help from friends who introduced me to people who work in forensics or in this corner of the law. And I found an article by lawyer Rebecca Wexler on the danger of closed-source, unauditable code used in forensic science in the criminal justice system, and got the committee to also invite her to testify. Her testimony's also available in the recordings and transcript I link to above. And today she has a New York Times piece, "How Computers Are Harming Criminal Justice", which includes specific prescriptions:

Defense advocacy is a keystone of due process, not a business competition. And defense attorneys are officers of the court, not would-be thieves. In civil cases, trade secrets are often disclosed to opposing parties subject to a protective order. The same solution should work for those defending life or liberty.

The Supreme Court is currently considering hearing a case, Wisconsin v. Loomis, that raises similar issues. If it hears the case, the court will have the opportunity to rule on whether it violates due process to sentence someone based on a risk-assessment instrument whose workings are protected as a trade secret. If the court declines the case or rules that this is constitutional, legislatures should step in and pass laws limiting trade-secret safeguards in criminal proceedings to a protective order and nothing more.

I'll add here something I said during the questions-and-answers with the legislators:

And talking about the need for source code review here, I'm going to speak here as a programmer and a manager. Every piece of software that's ever been written that's longer than just a couple of lines long, that actually does anything substantive, has bugs. It has defects. And if you want to write code that doesn't have defects or if you want to at least have an understanding of what the defects are so that you can manage them, so that you can oversight them (the same way that we have a system of democracy, right, of course there's going to be problems, but we have mechanisms of oversight) -- If in a system that's going to have defects, if we don't have any oversight, if we have no transparency into what those instructions are doing and to what the recipe is, not only are we guaranteed to have bugs; we're guaranteed to have bugs that are harder to track down. And given what we've heard earlier about the fact that it's very likely that in some of these cases there will be discriminatory impacts, I think it's even more important; this isn't just going to be random.

I'll give you an example. HP, the computer manufacturer, they made a web camera, a camera built into a computer or a laptop that was supposed to automatically detect when there was a face. It didn't see black people's faces because they hadn't been tested on people with darker skin tones. Now at least that was somewhat easy to detect once it actually got out into the marketplace and HP had to absorb some laughter. But nobody's life was at stake, right?

When you're doing forensic work, of course in a state the size of New York State, edge cases, things that'll only happen under this combination of combination of conditions are going to happen every Tuesday, aren't they? And the way that the new generation of probabilistic DNA genotyping and other more complex bits of software work, it's not just: Okay, now much of fluid X is in sample Y? It's running a zillion different simulations based on different ideas of how the world could be. Maybe you've heard like the butterfly effect? If one little thing is off, you know, we might get a hurricane.

about Sumana Harihareswara

Archives by year, archives by category

RSS feed
Dreamwidth feed microblog
Mastodon feed
Twitter feed
Spam As Folk Art

Changeset Consulting
weblog powered by NewsBruiser
Bloggers' Rights at EFFSupport Bloggers' Rights

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.