Talk — Supporting the George Floyd Protests in Portland: Demonstrations, Legal Support, and Django Apps

A slide with a gray background and large black text reading "Supporting the George Floyd Protests in Portland: Demonstrations, Legal Support, and Django Apps". In the lower right corner, smaller black text reads "@thursdayb / @pdxgdc"

I gave a 25ish-minute talk at PyCascades 2022 covering a Django app that Jamey Sharp built and I supported for the Portland GDC. My script and slides are below. Please note that this is not an exact script; I had to cut some material from my talk during recording to get it closer to the time limit that I’ve left in this version of the script. Consider it a little bonus material! You can watch a video of the talk on YouTube or below:


A gray slide with large black text reading "Content notes: This talk will include discussions of institutionalized racism and police violence, as well as the technology that supports them."

I’m here to talk about my experiences doing bail and legal support for protestors arrested in 2020 and 2021 during the George Floyd Uprising. Since I’m White and I’m talking about supporting people arrested while asking for racial justice, I need to say that I’m only talking about the specific project I worked on. I didn’t organize or lead protests or anything like that. Please consider this a report back on the small chunk of mutual aid that I worked and nothing more. Furthermore, I did not do this work alone. This talk covers the efforts of dozens of people who I am proud to work alongside.

This talk covers technical topics, but it also includes discussions of institutionalized racism and police violence. If you’re not in a place where you can hear about these topics, please consider stepping away for the moment. You can always watch the recording later.

A gray slide with large black text at the top reading "A brief timeline". A white box takes up most of the slide below, with slightly smaller black text reading "May 25 — Derek Chauvin kills George Floyd in Minneapolis.
May 26 — Protests start in Minneapolis.
May 27 — Black and Indigenous women hold space in memory of George Floyd at Portland’s Multnomah County Justice Center.
May 28 — Around 100 protestors gather at Multnomah County Justice Center.
May 29 — More than 1,000 protestors march to the Multnomah County Justice. Police arrest 13 people. PDX GDC provides bail and legal support.
May 30 — Multiple protests take place. Police arrest 64 protestors. PDX GDC launches our GoFundMe."

On May 25th, 2020, George Floyd went to a grocery store in Minneapolis and made a purchase. Thirty-one minutes later, he was dead at the hands of a police officer.

On May 26th, hundreds of protestors took to the streets in Minneapolis, demanding accountability for Floyd’s death — and the long list of other deaths of Black people at the hands of police officers.

On May 27th, a small group of Black and Indigenous women gathered in Portland at the Multnomah County Justice Center to hold space in memory of Floyd. 

On May 28th, around 100 people gathered at the same building, with some people sitting in the doorways. Riot police violently pushed people away from the building. 

On May 29th, over 1,000 people gathered at Peninsula Park in North Portland and marched into downtown to gather again at the Justice Center. Portland police officers arrested 13 people.

The Portland General Defense Committee immediately started posting bail for protestors who were arrested. The GDC started as a legal defense organization for union organizers and workers. Members of the Industrial Workers of the World founded the GDC in 1917. The Portland branch started in 2017 and has provided jail and legal support to protestors since its start. We did the same things for folks arrested on May 29 that we did for past protests: We made a spreadsheet of people arrested and started figuring out who needed bail money, including prioritizing arrestees by relative risks at the jail. Those risks included whether the person arrested was Black or Indigenous, LGBTQ, or had health risks.

Dealing with thirteen arrests at once was a stretch for us. At that point, we were used to two or three arrests at one event and supporting maybe two people with ongoing cases at any given time. We were able to pull together bail funds from members and friends, but we knew we would need to raise money to cover legal costs and reduce the bail burden we’d already taken on. Prior to 2020, the Portland GDC had a budget of a few thousand dollars per year. I put up a GoFundMe early on May 30th. By the end of that day, police had arrested 64 people. 

Protests continued every night into January 2021. I’ve heard estimates that 70,000 people participated over those eight months. Portland still sees several protests and rallies around racial justice every month. Local police and federal law enforcement agents made over 1,000 arrests at protests in Portland. They beat, gassed, and otherwise hurt countless protestors and journalists. 

A gray slide with large black text reading "No time and no resources". A screenshot of a  screenshot with column headings listing information about arrestees and color-coding for arrest status

As you can guess, gathering and managing information on who had been arrested, who needed bail money, and where each person was in the legal process outgrew a single spreadsheet rapidly. On June 6th, 2020, I contacted on Jamey Sharp, who I knew from various tech-related things here in Portland and asked for help. I was deep in the weeds at that point and basically gave Jamey free rein to figure out how to replace this terrible spreadsheet with something that could manage information better. We were not in a position to pay Jamey and I am eternally grateful he was able to help us. The Portland GDC still has minimal resources beyond dedicated volunteers and some funds earmarked for legal expenses. While we eventually raised over a million dollars, that money is all for to bail and legal expenses and therefore not available for administrative costs like building software applications.

A gray slide with large black text in the upper left corner reading "Jamey Sharp". In the middle of the slide are a black box and a white box. The black box contains a logo including a stylized red rocket blasting off and the words "Comic Rocket" in white letters. The white box contains black text reading "comic-rocket.com".

One of the reasons I reached out to Jamey is because of his experience scraping all kinds of websites. He was unable to speak at this event, but I encourage you to check out his project Comic Rocket at comic-rocket.com, which is one of the places he got that experience. I figured Jamey would be able to automate some of our information gathering, letting volunteers focus on things technology can’t do. Jamey’s experience meant that he had the first iteration of our app up and running on June 12, with all the notes in our terrible spreadsheet imported and ready for us to work on.

As the summer of 2020 wore on, we added users and functionality and scaled up a little just about every day. The Portland GDC’s workflow constantly changed based on capacity and the growing number of arrests. This was not a situation where a developer got to make nice neat little upgrades and slowly roll them out to users. This was duct-taping steering to an airplane that was already in flight and occasionally doing barrel rolls. 

A gray slide with large black text reading "Scraping multiple systems" and two screenshots of pages from the websites of the Multnomah County Sheriff's Office and the Oregon Judicial Department.

The web app we use for the Portland GDC’s work can be thought of as two key pieces. Most people only ever see an interface to a database, listing people who were arrested with a bunch of fields about their contact information, the status of their court case, and various other details. It’s an amped-up, search-friendly spreadsheet. 

But the app also pulls in information from several sources, automatically prepopulating many of those fields and providing updates to volunteers. Those sources generally don’t have APIs, so the app scrapes them. The sources include Oregon state court records and jail records from the Multnomah County Sheriff’s Office. MCSO is responsible for processing anyone arrested on state charges and many of those arrested on federal charges in Multnomah County (which includes the majority of the city of Portland). 

The information we need to do our work comes in an absurd variety of formats, with an equally absurd set of access requirements. For instance, a lot of court information is in PDFs that are scans of printed documents, often with important handwritten notes like “Dropped” to indicate a suspended charge. 

Federal courts work differently than state courts. and have less public information that can be scraped. Federal court cases go through PACER, which is an app that charges 10 cents per page when you access a document, as well as fees for search results and non-case specific reports. 18F, the federal government’s in-house technical consultancy, has looked at upgrading the system but their report is best summarized as no one knows how PACER works, it’s unmaintainable, and we need something entirely new and built from scratch.

Important information also disappears regularly. MCSO’s arrest information will change with no warning and no record if someone at the jail updates information, including during the booking process. Records of arrests drop off the site entirely after a few weeks. There’s also no listing of citations — incidents where protestors are charged with a crime, usually a misdemeanor, but not arrested. And the information is available is often full of errors. Information collected during arrests is the worst. We’ve known for a long time that law enforcement agents will “tweak” certain information they collect to make their own stats look better. But the data we saw from protests made those changes much more obvious. Police record the races of people arrested incorrectly constantly. In particular, we’ve seen glaring errors around the race of people of color, which have allowed the Portland Police Bureau and other agencies to claim that almost all protestors arrested in Portland are White. We’ve also seen names, genders, physical descriptions, and more recorded incorrectly. 

We’ve had to figure out the meanings of certain data through trial and error because there’s not any documentation available. MCSO also uses different terms and definitions for specific charges than the Oregon court system uses, to the point that our app only grabs the statute number a person is charged under and maps it to correct charge information in our database.

This system is especially infuriating when you realize that it’s on the people who are arrested to correct any errors. Since errors can have consequences that include being kept in jail, they can be impossible to correct without expert legal help. People who are arrested are also expected to stay up to date on their cases, without any of the modern notification systems you might expect. If someone’s charges are suspended, that person is instructed to call the district attorney’s office at least monthly to check if their charges have been reinstated for at least the next two years. If they don’t, they’ll likely miss a court case which will result in a warrant being issued for their arrest and other terrible outcomes. COVID has also meant that policies change constantly, often without online notice. Even before the pandemic, details around court hearings routinely changed on the day of, but as things moved online, everything about legal processes got more complicated.

These websites are also delicate. Some were constructed by contractors trying to keep costs down, while others are built by companies that know that they can take advantage of people who are incarcerated without anyone important caring. 

A gray slide with large black text reading "Finding work arounds" and a screenshot of a Djgo website interface showing data related to court hearings with personal details redacted.

Django and Python were the logical choices for this project for a few reasons: First, Jamey had already built Django apps and was pretty familiar with the framework. And while I haven’t built a whole Django app by myself, I’ve gone through some workshops. Second, Django’s built-in admin interface makes managing a bunch of structured data really easy. The user interface enables anyone to edit that data without tons of training. Jamey was also already familiar with Scrapy, a Python scraping framework, so he could get that set up with a Django-based app quickly. 

One of the pieces of information we need to grab automatically are upcoming court dates. The Oregon court calendar site is particularly irksome. Jamey jumped through lots of programmatic hoops to get that scraper running: the site limits search to 550 results, without offering any “next page” button. The scraper can’t just grab all calendar entries over the next 3 months without hammering the site harder than we want to. So the solution is a little complicated: the scraper looks at the specific case numbers we care about, then groups all the cases with the same starting numbers, trimming off the last two digits. When the court calendar is queried with those truncated group numbers, there are a max of 100 active cases returned. By batching together cases, the scraper minimizes the number of queries — though Jamey has pointed out that if whoever designed the court calendar site had just limited to search results to 1,000 rows instead of 550, he could have cut the number of queries even further.

Of course, there’s still plenty of work that requires a human touch. We have to audit our data regularly, adding in pieces that MCSO missed or that come from conversations with the protestors we’re supporting. Django has made those audits relatively simple, even though they still require a lot of reading through information for the humans involved. We can use tags for indicating the specific categories that need auditing at a given time, as well as sort and filter information in a variety of ways. 

A gray slide with large black text reading "Onboarding and training users" and a screenshot of a Google Doc containing software documentation

The Portland GDC is not a large organization, even now. We’re also not an especially technical group. We recruited volunteers to work on legal support in July and August of 2020, and more volunteers have joined since then.

In preparing this talk, I asked folks who use the app regularly what technical knowledge they had before volunteering with the GDC. The range was even wider than I expected. One of our most technical volunteers (other than Jamey and myself) came in knowing some JavaScript and could use the command line. But we also had folks with very little technical experience, who might use Google Docs or email, but not much else. With some onboarding and documentation, they were all able to make use of the app, as well as suggest improvements that would make our work easier.

All onboarding, and all other work for that matter, happens remotely. Django’s user interface is reasonably simple right out of the box and while we’ve tweaked the user experience lightly, Django uses a visual language in interfaces that is very similar to what’s considered “standard” on the internet. 

I created our technical onboarding process. Another person was responsible for walking new folks through specific support situations, communication norms, and our policies, so I was able to focus just on getting people on to the app. 

I do a video call with each new user that includes a 30-minute walk through of the app. We actually don’t always need the full 30 minutes, but we set up user accounts during that session and getting folks through their first time logging in was often hard — in fact, it was the point our users struggled with the most. That’s because some of our account setup emails wind up in spam. So I built in time to search around for emails. I also limited onboarding sessions to a max of three new users because I only have enough patience to go through three people’s spam folders at a time.

During the walk through session, we go through each section of the app as well as our documentation. Our documentation is a shared Google Doc with screenshots and written descriptions — it’s not fancy, but it does contain answers to basically every question anyone has asked me about the app. 

A gray slide with large black text reading "Adding features" with a screenshot of a Django menu.

We tweaked the app as users asked questions and needed more features. Jamey wisely pushed back every so often and reminded us of our options, even deleting certain features when they were no longer needed. If Jamey hadn’t provided a technical voice of reason, we’d probably have a full-featured CRM at this point, even though that’s not what we need. 

And when I checked in with our users while getting ready to give this talk, they told me that the app was intuitive, friendly, hard to break, and empowering. Users felt empowered to work with data, even if they didn’t come in knowing tech, legal proceedings, or activism. Some features still don’t get used as much as possible. But volunteers say this is more about the time available to do work, not due to difficulties with the app. People also like that they don’t feel beholden to the app and that it’s not judgmental about unfilled fields. One person even said that using the app reminds them of using a message board because they can see the notes and work of other volunteers, which helps them stay connected through all this remote work. 

A gray slide with large black text reading "Assessing risk factors" and a screencap of the "Security in Django" web page, which is available at https://docs.djangoproject.com/en/4.0/topics/security/

We realized early on that we were sitting on a pile of valuable information. While most of what we pulled together was publicly available, it wasn’t combined in this way anywhere else. Between what we scrape and the information we add from the people we’re supporting, we created a doxxer’s paradise. Not only do we have data like physical addresses and phone numbers, but we also have notes on who needs what kinds of help. The risks of holding this information are massive. If someone with bad intentions got access, they’d be able to easily harass people both online and offline. We have an ethical obligation to mitigate every risk we can and to protect this information. The alternative is compounding the harm legal systems are already doing to folks. 

We also faced a lesser risk of losing access to the sources where we pull information from. That did happen several times — not only does MCSO remove information from their arrest records, but the Oregon court system stopped allowing access by anything with an IP address located outside of the US, which coincidentally enough included us at the time. Jamey found us work-arounds, but I’m always waiting for the next time one of these systems changes their access controls. We also faced concerted attacks on any tool we publicly use: we dealt with numerous malicious reports to GoFundMe, Twitter, our email provider, and more. 

We reduced our risks in several ways. First off: we obviously didn’t go around telling people about this app. After all, if someone is attacking your email, they’ll attack every other system they can find related to your organization. We’re facing less attention online now, so talking about the app here is a calculated risk that we’re comfortable with — but I’m not telling you who hosts the app or other important details to keep those risks to a minimum.

We also look closely at everyone who gets access to the app. Our due-diligence process for volunteers includes an in-depth internet background search and confirmation of the information we find with shared connections where possible. Jamey was also able to set up multiple types of user accounts so that we could limit each volunteer’s access to information they actually need to do their work. If, for instance, someone is writing letters of support to people who are currently incarcerated, they can only see those people in the system who they’re writing to. Those volunteers don’t get much more than an address and some biographical information. 

Technical security is, of course, an aspect of risk mitigation. Django has good security features out of the box, assuming you use them. By using Django, we could use built-in security options and also access documentation that we could adapt to explain what was going on behind the scenes to volunteers. But the most important step to managing our security concerns was our effort to avoid collecting information that we didn’t feel we could protect — and that policy would have been the same no matter what framework or language the app was written in. No technology choice is as important as defining what data you’ll collect and how it will be handled. 

A gray slide with large black text reading "Inevitably burning out" and a screen shot of a blog post about a protest on December 31, 2020 which is available at https://pdx.recompilermag.com/2020/12/31/december-31-protest-new-years-noise-making-event/

One of our biggest ongoing issues was burn out. Basically everyone burnt out over the course of 2020 and 2021 — doing legal support just made us burn out faster. We’ve had higher turnover among volunteers than I’d like, but this is hard work. Even though we don’t need to worry too much about gathering and processing data, we’re dealing with emotional situations and even the best outcomes for the people we’re working with involve lots of time dealing with an adversarial legal system.

The only way to handle the fluctuations in capacity is to document EVERYTHING. Everything that happens in an individual case gets recorded in the app. Everything about the app gets documented, too. Our documentation isn’t fancy: it’s a document that I add questions and answers to whenever an app user asked me something. I lifted some pieces out of the Django documentation and reworded them a bit to ensure our users understood how to handle a problem even if they didn’t come in with a ton of technical experience. And any time an edge case came up, I took tons of notes. 

I did worry a lot about what would happen when Jamey and I burned out, however. We both managed to hang on until the app was basically stable and there hadn’t been any new features needed in a while. I did want to make sure that someone had enough knowledge to at least decide if a situation was an emergency and to have someone who could step up if such an emergency came to pass. Luckily, our most technical volunteers reached a point with the app where they seemed capable of handling questions and I drafted a back-up developer who would be willing to handle emergencies before I had to take a break.  

A gray slide with large black text reading "Outcomes for protestors" with a screenshot of a CNN broadcast of a press conference with George Floyd's family after a jury found Derek Chauvin guilty of Floyd's murder. Closed captioned text on the broadcast reads "...Portland stayed in the streets".

I think the work I’ve done with the Portland GDC over the past two years is some of the most important work I have done or will do. We put together legal support for hundreds of protestors out of Django, duct tape, and donations from strangers. We did our part to ensure that protestors could be in the streets for months on end and reduced the risks they faced. One of the most meaningful measures of our work, at least for me, is that Rodney Floyd, George Floyd’s brother, thanked Portland protestors specifically last April. He said the support of protestors meant so much to their family and that staying in the streets helped ensure his brother’s killers faced justice.

So here’s where everything stands as of February 2022: Mike Schmidt, the district attorney here, suspended most protest-related charges. That’s not the same thing as dropping charges entirely. Instead of dropping charges, he’s just not currently prosecuting charges. The DA has the option to reinstate suspended charges for years to come. He’s already reinstated a few. By suspending charges, rather than dropping them, the state also gets to hold on to bail money and evidence until the charges age out. And since almost $700,000 of the money the Portland GDC raised went to posting bail for hundreds of protestors, that money is not available for legal fees or bail for future protests for an indeterminate amount of time. Schmidt is considered a very progressive DA and he’s still chosen to hold protest-related charges over protestors’ heads for years to come. 

The federal district attorney, Scott Asphaug, hasn’t been so nice. Several protestors are facing federal charges, with Black and Indigenous folks facing the harshest penalties. There are at least three such cases which will be going to court in the next few weeks with each defendant facing years in jail. It’s also worth noting that Asphaug previously worked for the Portland police union to get police officers out of trouble during internal investigations and the U.S. Department of Justice does not consider that relationship a conflict of interest.

The city of Portland, as well as several federal agencies, are facing lawsuits from many of the protestors who police attacked. Residents of Portland who were not involved with protests but were teargassed or otherwise harmed are also bringing their own lawsuits. While a few cases have already been settled with payouts by the relevant government agency, many seem to be going to court.

While Portlanders are no longer protesting in the streets every night, cases related to the George Floyd Uprising won’t be over for months, perhaps even longer. The Portland GDC is still doing legal support and expects to be doing prison support for folks unjustly incarcerated over these protests for years to come. 

A gray slide with large black text reading "Donate to support protestors" with screencaps of the Portland GDC's donation links, which are hyperlinked in the text of this post.

I hope you found this talk valuable, both in terms of learning about launching a Django app with minimal resources and even less time and in terms of understanding the amount of work it takes to support protestors through arrests and court cases. The Portland GDC continues to support people arrested at protests in 2020 and 2021 and if you’re able to, please consider donating to help cover the legal costs that many protestors are still dealing with. You can donate through CashApp, Venmo, or by mail to PDX GDC, 2249 East Burnside Street, Portland, OR 97214.

A short piece of fiction about the Python programming community

A few years back, I wrote a short story set at a Python conference. You can tell I wrote it in the before-times because it involves people hanging out in a convention center in person! That story, “Backwards Compatibility,” was originally published as part of Our Python, an anthology of Python fan works published as a fundraiser for PyLadies.

I finally got around to posting the story somewhere anyone can read it. Since it’s fan fiction, of a sort, “Backwards Compatibility” is now up on Archive of Our Own. While this story is okay for all audiences, you should be aware that Archive of Our Own includes explicit material before you click around too much.

I’m currently the only person who has posted anything to the ‘Python (Programming Language)’ fandom, but you are all welcome to change that. I’m also the only person using the tags ‘Python 2’ and ‘GitHub’ so far. Yes, I am completely fascinated by Archive of Our Own’s mechanics. I’ve written about them in the past and will almost certainly write about them again in the future.

If you read “Backwards Compatibility” and enjoy it, consider donating to PyLadies.

PDX.Vote: Officially launching a news site covering Portland-area elections in 2022

I’ve launched a new project that I’m excited to share with all of you.

TL;DR

PDX.Vote rounds up news related to the 2022 elections taking place here in Portland, Oregon. It also publishes long-form articles about specific aspects of Portland’s politics. Please support this work financially.

If you’re interested in my thoughts behind this site and my plans for its future, keep reading!

Why a news site focused on elections?

I’ve always followed local politics pretty closely. One of my first paid blogging gigs was covering the 2008 presidential election, which really helped me understand that local politics impact our day-to-day lives more than most things happening in Washington, D.C. I was also an election judge in Maryland and saw first hand how hard voting was for some folks.

Since moving to Portland, I’ve made zines about our local elections, as well as writing articles, massive Twitter threads, and even a newsletter for a specific election. Folks seem to find these resources useful and I always wind up with far more research than will fit in just one article or one update. I’ve been thinking about ways to share more of what I find and the idea of a website has been in the back of my mind for a while.

I also think that a lot of the media covering local news just aren’t covering local elections in any real depth. That’s partially due to the financial constraints on a lot of news media. But there’s also a sense that nonpartisan groups like the League of Women Voters write great voters guides that provide enough information for most voters to make their decisions. Now, I read the Portland League of Women Voters’ guides cover to cover and think they’re a great resource — but those guides are put together by folks who are trying hard not to influence the outcome of the races they’re covering.

Local elections decide matters of life and death importance here in Oregon, from the oversight of police forces and the violence they enact to the budgets for supportive services for folks without stable housing. But a nonpartisan report doesn’t tell voters whose policies are likely to increase deaths or save lives. We deserve better information.

Furthermore, we deserve a wider variety of perspectives on our elections. Nonpartisan guides are generally written by volunteers, who can afford to donate their time and often have a certain amount of privilege. News media tend to employ folks with privilege, as well — as of 2018 about half of all newsroom staff are white men. The only way to change which perspectives we’re hearing about political candidates is to actively seek out people with different experiences and then pay them for their reporting.

What are my short-term plans?

I’ve already soft-launched PDX.Vote with three key types of coverage:

  • Digests of news related to the current election cycle
  • Weekly calendars rounding up important meetings, deadlines, and other dates relevant to local politics
  • Articles that go deeper into specific races, as well as important context for upcoming elections

At the moment, I’m doing all of the writing for the site. But with the official launch of PDX.Vote, I’m accepting pitches for articles. I’m also actively reaching out to people who are able to talk about political issues in ways I can’t. I’m privileged enough to be able to fund my startup costs and an initial writers budget so that I can pay for these contributions. My goal is to share election coverage from as diverse a group of contributors as possible. In terms of numbers, the first metric I’m measuring is the percentage of contributors from different racial backgrounds than my own, which I plan to report back on quarterly. It’s not a perfect metric, of course, but it’s one that I’m confident I can track as the only administrative staff for the site, as well as one that will give a top-level view of how well I’m doing at recruiting writers with different experiences. If you’re interested in writing for PDX.Vote, please contact me.

While I can cover the initial costs of setting up the site, I do need community support to publish this coverage. My first financial priority is covering the expenses of running the site, including the media insurance policy I needed to feel safe doing this work. My second financial priority is paying contributors. It would be nice to be eventually rewarded for my labor, but that’s much farther down the list.

So how can you support PDX.Vote? Currently, you can give us direct financial support. The current options are a one-time payment of $10 or a recurring monthly payment of $10. I’ll be making other options, such as printed voter guides, available later on. However, I will neither be accepting advertising on the site for the foreseeable future nor putting up a paywall in front of content. Both options make me feel uncomfortable when we’re talking about election coverage: Every resident (including non-voters) should be able to access information about the governments under which they must live, without paying for that information. And advertising tends to affect what news media publish, even without any explicit expectations. While I’m happy to discuss financial support in larger amounts, I do want the site to be primarily funded by the people I hope will most benefit from having free coverage available — people who can afford to throw $10 towards PDX.Vote, rather than people who can afford to spend thousands of dollars a year on multiple newspaper subscriptions.

Because I’m talking about elections and political power, I think it’s important to be as transparent as possible, especially about finances. I’m making the site’s financials available on a monthly basis. I’ve also included a transparency section on the ‘About’ page, including my own donations to candidates and political committees. I’ll be asking contributors about their connections to candidates and political committees and adding that information as I deem appropriate and safe. I’m also explicitly talking about my own biases and the site’s slant as a whole: I’m a leftist and you should expect PDX.Vote’s coverage to lean left as well. Furthermore, I am critical of even leftist elected officials — rather than being invested in maintaining a status quo, I want us to rethink what governance looks like and limit the harm the state can cause to each of us.

What are my long-term plans?

Well, a lot depends on how many folks find PDX.Vote a useful resource. While I’m confident I can put together regular updates through the November 2022 election, I’m not yet sure if I’ll continue the site after that time. Financial sustainability and reader interest will probably be the determining factors.

I would love to continue to build on the site’s coverage long-term if I can. I’m already working with a few contributors for one-off pieces and I want the opportunity to bring in some folks as regular contributors if I can afford to pay them for their work. I see two key areas of expansion: first, geographic coverage and, second, linguistic coverage. Currently, PDX.Vote covers Multnomah County elections, because that’s the county that covers the largest chunk of the city of Portland. It’s also the county I live in. I’m working on coverage of Washington and Clackamas Counties because they’re part of Metro, along with Multnomah County. It’s hard to cover Metro races without having at least a working knowledge of Washington and Clackamas Counties. I’d like to eventually cover all seven counties that include Portland and its suburbs, but that’s beyond what I can do without regular contributors. Bringing on folks to cover these additional counties will require finding reporters already living in each county, so that we can read coverage from folks actually impacted by county politics. And I have to admit that expanding coverage to Clark County (and Vancouver, Washington) will probably be low on the list. Clark County is important to understanding Portland politics, but it’s in Washington State and therefore plays by a different set of rules. Adding Clark County coverage to PDX.Vote will take more work than adding another Oregon county.

I also believe that expanding coverage outside of the English language is crucial. Portland residents speak a wealth of languages and deserve news in languages they understand. Translation is expensive and I don’t expect to be able to publish every article in multiple languages right away, but that’s my ultimate goal. Currently, I see Spanish, Vietnamese, and Chinuk Wawa translations as priorities. While the community of Chinuk Wawa speakers in Portland is smaller than the communities that speak several other languages, Portland sits on land that rightfully belongs to Indigenous tribes, including Chinookan tribes. Chinuk Wawa is a jargon used by many tribes. While I’m not Indigenous, I believe in the Land Back movement. Providing news in Chinuk Wawa seems like a tangible step towards respecting Indigenous sovereignty that goes deeper than a simple land acknowledgement.

I’m not sure how much I’ll be able to accomplish until I see what sort of financial support community members are prepared to provide. But I will do everything I can afford to do that will make local political information more widely available here in Portland. I’ll keep y’all updated.

Towards a new Tu B’Shvat (a new zine)

Content warnings: Discussions of death, genocide, state violence

The cover of a zine with black text and a drawing of a tree on the cover. The text reads "Towards a New Tu B'Shvat"
The cover of “Towards a New Tu B’Shvat”

I made a short zine exploring new ways to observe Tu B’Shvat, which you can read on my Twitter or grab as a PDF. There are both print and screen-friendly copies of the PDF at that link. Please note that I wrote this recently enough that I have not been able to run it past a sensitivity reader yet — all errors are my own and I fully expect to have a new version in time for Tu B’Shvat 5683.

If you’re interested in reading further on the topics I mention in the zine, here is a list of websites, articles, and videos that I recommend, broken down by topics. The sources I used to create my zine are included here, along with those covering details I couldn’t fit into just eight pages.

​What is Tu B’Shvat? History and origins

New and evolving ways to observe Tu B’shvat

  • Shvat: Moon of Interdependence” (article) — This article from Dori Midnight discusses historical connections to communities of care. It also includes practices for connecting with trees for the month of Shvat and links to a playlist of Tu B’Shvat songs.
  • Tu B’Shvat? Why Not?” (article) — Linda Gritz, from the Boston Workmen’s Circle, documented the process of creating a secular observance of Tu B’Shvat.
  • Tu B’Shevat in the Age of Ecofeminism” (article) — This article includes several ways to observe Tu B’Shevat while considering both climate change and feminism. Writer Steph Black highlights options like a Reverse Tashlich ceremony to clean up rivers.
  • Tu Bi’Shevat” (website) — Ritualwell has an entire section of their website devoted to meditations, liturgy, and other suggestions for observing Tu B’Shvat.

Resources on Indigenous land return

  • Remothering the Land” (video) — Patagonia produced this 10-minute film to discuss the concept of ‘rematriation’ (or ‘remothering’ the land) using sustainable agriculture techniques with William Smith, land steward of the Village of Huchiun, and Nazshonnii Brown-Almaweri, land team member of the Sogorea Te’ Land Trust.
  • #LandBack is Climate Justice” (article) — Restoring stolen lands to Indigenous sovereignty counteracts climate change, as documented by the Lakota People’s Law Project.
  • Braiding Sweatgrass (book) — Robin Wall Kimmerer’s collection of essays on Indigenous ecological knowledge provides a foundational guide. At the time of compiling this list, I haven’t finished reading Braiding Sweatgrass but I already find it informative enough to recommend.
  • Landback U (website) — The Landback Movement created a series of courses on land struggles in different locations to build a foundation of knowledge about Indigenous sovereignty. The organization accepts donations to continue their work.
  • Land Reparations and Indigenous Solidarity Toolkit (guide) — This guide from Resource Generation goes through methods for paying land reparations and returning land to tribes.
  • Native Land Digital (website) — You can look up the Indigenous tribes native to specific places on the Native Land Digital map.
  • The Myth of a Wilderness Without Humans” (article) — This piece is actually a chapter from Mark Dowie’s book, Conservation Refugees: The Hundred-Year Conflict Between Global Conservation and Native Peoples, which looks at the harm inflicted on Indigenous people by many conservation efforts to date and showcases the importance for following Indigenous leadership.

Resources on Jewish relationships with Indigenous sovereignty

  • How to Come Correct” (article) — This guide from the Sogorea Te’ Land Trust clarifies how non-Indigenous people can respectfully support Indigenous movements and listen to Indigenous leadership.
  • Jews on Ohlone Land (website) — Jews on Ohlone Land is an organization building Jewish community solidarity on on traditional Chochenyo and Karkin Ohlone lands. The organization directly supports the Sogorea Te’ Land Trust.
  • Tu Bishvat: Dish with One Spoon” (article) — Mazon Canada published this article on the Haudenosaunee concept of ‘the Dish with One Spoon,’ a way to discuss the interconnected relationship between humans and land. The article also links to a video where historian Richard Hill covers some aspects of Haudenosaunee culture and history that’s worth watching.
  • Being Jewish and Owning Privilege” (article) — Rabbi Dev Noily writes about balancing their experiences as a white Jew unpacking personal privilege.
  • How Tokenism Affects Jews of Color and 5 Ways Allies Can Interrupt It” (article) — The Jews of Color Initiative works for racial equality in Jewish communities, including for Indigenous Jews. This article is an important reminder to avoid tokenizing Jews of Color in our communities and includes steps we can take.

Resources for planting trees

Resources for working in nature, including agriculture

  • Cultivating Culture 2022 (conference) — This upcoming conference includes sessions on Jewish relationships to agriculture and food. Tickets start at $36.
  • Crops of African Origin of African Diffusion in the Americas” (article) — Michael W. Twitty has long influenced my thoughts on what Jewish food is. He wrote this article to highlight the use of crops native to Africa in American cuisine. Twitty’s book, The Cooking Gene, goes deeper into the creation of Southern food culture, including the impacts of slavery.
  • National River Cleanup Organizer Handbook (guide, PDF) — If you’re interested in organizing a river cleanup in your area, American Rivers provides a step-by-step guide to creating a successful event.

Portland-specific resources

Upcoming talk at PyCascades 2022

I’m giving a talk at PyCascades 2022! I’ll be covering the technology the Portland General Defense Committee used to manage bail and legal support for hundreds of protestors during the George Floyd Uprising, including our custom Django app. The Portland GDC is continuing to support protestors as court cases proceed.

PyCascades is virtual again this year. If you’re interested in attending, tickets are $50 for three days of Python talks, sprints, and social events. Discounted tickets are available for students and enthusiasts (anyone whose employer won’t cover the cost of their ticket).

How to localize classic holiday stories for fun and fundraising

A book cover with the text "A Portland Christmas Carol in prose being A Ghost Story of Christmas" and a drawing of a ghost similar to the ghost emoji with black line art on a white background.
The cover of A Portland Christmas Special

I ran a fundraiser with the Portland General Defense Committee to support protestors arrested in 2020 and 2021. The fundraiser ended December 31st and raised over $300 after payment processing fees. Providing legal, financial, and other support to protestors facing legal repression is important to me; I’ve volunteered with the GDC for years because I believe that protesting is key to holding police and other state actors accountable and that carceral systems only do further harm.

But I also have a sense of humor, even if it’s a bit dark at times. So, a few months ago, I started writing a parody of Charles Dickens’ A Christmas Carol, because I thought the idea of a wealthy leader needing spiritual guidance to change his ways was both hilarious and apt in Portland in 2021. When I finished my novella-length project, I wanted to share it. Using the parody to fundraise for folks facing harm at the hands of wealthy leaders just felt right.

Below you’ll find some notes on the process of writing and sharing A Portland Christmas Carol. I figured some folks may be interested in a look behind the scenes, but also that this is an approach that could be used to raise funds in other cities.

Picking a classic tale

There are several important factors to choosing a book or other media to parody. While the inspiration to update A Christmas Carol reached out and grabbed me, I’ve worked on other projects that required a little more consideration.

  • Choosing a well-known story: Parodies work best when based on stories familiar to the audience. Given that I’m in Portland, Oregon in the 2020s, I can depend on my audience to be aware of a lot of European canon, including a little Dickens. Different audiences have different needs. Stories that have been translated into multiple languages, made into multiple movies and other media formats, and that are often taught in school are good bets. As an added benefit, you can often find a digital copy of well-known works that you can use as a starting point.
  • Avoiding trouble: I try to pick my fights carefully. When writing a parody that references current events, there’s always a chance that people involved in those current events will have a problem with even the most obvious parodies of their actions. As a result, I like to use works that have passed out of copyright as my starting point — if the original author is long dead, I don’t have to figure out if I need to fight a fair use case to prove my parody doesn’t violate the author’s copyright. That makes works already in the public domain easier to work with.
  • Understanding the underlying story: Effective parodies build on the themes of the works they reference. We know that wealth corresponds to control of local governments, so the works of an author who critiques wealth are a logical choice when critique local governments. I also like to write parodies of works I already know fairly well. I don’t have to invest as much time in learning the work itself, so I can work faster.
  • Looking at length: Very few people make a full-time living writing parodies. So choosing a shorter work or a section of a longer work as your starting point is a practical decision. If, for instance, you want to write a parody of the entire story of Crime and Punishment, you’re going to have to deal with over 700 pages of material.

A Christmas Carol hits these marks fairly well: The story is arguably Dicken’s best known work. It has been adapted many times and hasn’t ever gone out of print in its 175+ year history. Personally, I’d say that The Muppet Christmas Carol is the best version. And if the Muppets adapt a story, that story is definitely well known — their other adaptations include Muppet Treasure Island, The Muppets’ Wizard of Oz, and The Muppets: Bohemian Rhapsody. And despite Dickens’ status as a hardcore copyright enthusiast, A Christmas Carol entered the United Kingdom public domain in 1877 (later than it entered the public domain in many other countries).

I read a lot of Dickens in school and even wrote a play parodying A Christmas Carol in high school. It was terrible and there are no existing copies as far as I know, but I can tell you details about the storyline from memory.

A meme with the text "If I had a nickel for every time I've parodied "A Christmas Carol" to comment on current events, I'd have two nickels which isn't a lot but it's weird that it's happened twice" over two screen caps of Dr. Doofenshmirtz from Phineas and Ferb talking to a a sock puppet with red and gray robots in the background. Dr. Doofenshmirtz is illustrated as a white man in a lab cot and the sock puppet has dog-like features.
… I’d have two nickels

As far as I’m concerned, there’s only two drawbacks to writing a parody of A Christmas Carol. First, Dickens’ works tend to be lengthy. He was paid by installment and needed the money, which frankly shows in how he managed to draw out individual scenes. I may have cursed this stylistic choice several times during my editing process, because A Christmas Carol is a novella, not a short story. Second, I’m Jewish. I don’t feel that I’m appropriating Christian culture, because cultural appropriation definitively requires a dominant group drawing on the culture of a marginalized group. Christianity is definitely the dominant religious culture in the US and is therefore fair game. But the holiday of Christmas is important to many Portlanders, including many of my friends (and even a few of my family members). I wanted to do the holiday justice, so I did have to do some extra research into Christmas customs that a Christian might need to do. Of course, I’m not the first Jew to make media about Christmas and I’m sure I won’t the be the last.

Setting yourself up for successful parodying

Every writer’s process is different. There are several steps that can make writing a parody easier, however:

  1. Find a digital copy of the work you’re adapting and dump it into your word processor of choice. Project Gutenberg is an excellent resource for finding free copies of well-known books in the public domain. The site even has multiple versions of some books.
  2. Read the work you’re adapting. Even if you’ve read it before — even if you’ve adapted it before — reread the work and make sure you’re familiar with all the plot twists and turns.
  3. Note anything that doesn’t work for your parody. Since you’ve got the original work in a word processor file, you can make your notes as comments tied to specific sections of the work. Don’t worry about making changes yet, unless doing so works better for your process. Things I noted include:
  1. Phrases your readers might struggle with: Dickens made some great jokes about Bob Cratchit earning 15 bob a week, but I can’t assume the average Portlander today knows what currency a ‘bob’ corresponds to and or how inflation has changed the value of a ‘bob’ since 1843. A best guess at the value of Cratchit’s income in 2021 numbers is around $375 per week for 60ish hours of work, on which he supported a family of eight.
  2. Racism, ableism, and other offensive content: While the original writers of much of literary canon included prejudices in their works, I see no reason to perpetuate harm against any group of people. Editing out problematic content can take some planning, especially if a stereotype is core to a character (the way that Tiny Tim’s disability defines his portrayal). Just note problems on your preliminary read through and then come back later to make repairs.
  3. Opportunities to localize the story: If you’re updating the date or location of the story you’re parodying, you can change little details to make the setting feel more true to the rest of your parody. Keep an eye out for the names of the neighborhoods characters visit, the institutions they rely on, and even the books they read. As I read, I kept a list of details I could update, including technology (i.e. candles became electric lights) and types of businesses (since there aren’t a lot of ironmongers in Portland today).
  1. Figure out which characters and organizations you’re changing. If, for instance, you’re going to change the names of specific characters, you’ll have to decide exactly which characters you’re changing. For A Portland Christmas Carol, I made a list of the named characters and who they might correspond to in terms of Portland’s current events. I had to talk through some Portland history with friends and even look up the names of some buildings that were torn down before I moved to town.
  2. Use your word processor’s ‘find and replace’ function to update names throughout the file you’re working in. Rather than looking for every mention of ‘London’ in A Christmas Carol and changing it to ‘Portland’ by hand, I updated my whole document in a matter of seconds.

At this point in the parody process, you’ll likely have a file with a lot of comments. You’ll probably also have some sections that don’t make sense because automated ‘find and replace’ tools only change sentences — they don’t rework those sentences to ensure they make sense.

Congratulations! You’re now ready to actually write your parody! Personally, I just go through my heavily annotated document section by section. I rework each chunk to make sense, using what’s already in the file as a base. Of course, if you know you write better following a different process, do what works for you. Unfortunately, there’s not really a step-by-step process for actually writing a story, parody or not. It’s kind of a ‘draw the rest of the fucking owl’ situation. Do what works for you and power through.

Do as much self-editing as you can, especially if you’re not in a position to pay anyone to help you. Don’t worry — I’ll cover getting help on these sorts of projects below, but you want to minimize the work you’re asking people to do for free. Trust me on this one: finding friends to give feedback on the full 70+ pages of a classic novella is hard at the best of times.

Making something people want enough to pay for

Once you have a solid draft that other people have read (and hopefully enjoyed), you need to think about how to present your parody to potential supporters or buyers. With A Portland Christmas Carol, I was torn between offering an ebook and printing physical copies. I’ve done both in the past and I came to the conclusion that I just didn’t have the energy for all the details of both printing a book and distributing copies this year with everything else I’m up to — especially since I would still want to offer a digital version alongside dead tree format.

Laying out an ebook is different from designing files for a print run. In some ways, ebooks are a little more forgiving, though they have their own quirks. I use Adobe InDesign for laying out my projects, mostly because I’ve been using InDesign for almost 20 years and I can write an Adobe subscription off on my taxes. I don’t recommend using InDesign unless you already have the software and you’re comfortable using it. Instead, use what you’re already comfortable with. I’ve seen plenty of readable ebooks laid out in Microsoft Word, Google Presentation, and all sorts of other tools. Your options include:

  • Word processing and slide design tools that allow you to add images and export to PDF (like Google Docs)
  • Design platforms that offer templates for ebooks (like Canva)
  • Open source publishing tools (like Scribus)
  • Bribing designer friends who already have the software and skills to layout ebooks

Getting a friend or two to help with design can lighten your workload tremendously. I consider myself more of a writer than anything else, so when I need to make some visually appealing, I try to at least get feedback from a design-minded friend.

For this project, I was lucky enough to have a friend volunteer to illustrate the story. The incomparable Mel Rainsberger listened to me yammering about this parody I was working on and next thing I knew, Mel sent me a folder full of illustrations to add to A Portland Christmas Carol. I did send Mel a copy of the story to review, along with some reference pictures, but I mostly just stayed out of her way. Because this project was intended as a fundraiser from the start, I hadn’t entirely expected to be able to find an illustrator — I don’t like asking people to work for free, so if I don’t have a budget, I’ll do without. But Mel’s illustrations definitely made this project much more appealing.

A drawing of a set of double doors in black on a white background. An arched sign over the doors reads “Wheeler & Adams.” The first name is clear, but the second is faded.
An illustration from A Portland Christmas Carol

I dropped the illustrations into my working file, added image descriptions, and then exported the whole thing as a PDF. I got a few more folks to look over things for typos and the like. After a couple of reviews, I declared the editing process complete. I’ve since noticed two small errors, but with a project like this, you do have to declare the design process done and move on. Christmas is a firm deadline, after all: convincing everyone to stay in the holiday spirit a little longer so you can finish tweaking files is not an option.

With a finished design file in hand, I exported ebook files as both PDF and EPUB. InDesign can do both formats, as can most software. Because a lot of folks like to read ebooks on tablets or ereaders, having the choice between PDF and EPUB ensures that most people will be able to read a book on their device of choice. I tested my files on different devices I had access to to make sure they worked and everything showed up correctly — I always recommend testing your ebooks on as many different devices as you can manage, because weird errors do pop up.

I also tested my ebook files on screen readers. Testing files with screen readers doesn’t have to be much more complicated than using different devices. There are several free options you can download to try out. On larger projects, I also try to get someone who relies on a screen reader to test the file because a more experienced user will notice different issues than someone using a screen reader just for testing.

Making your parody available for purchase

I know a lot of creatives who will offer a project for purchase and pledge all the proceeds to a particular cause. I’m not the biggest fan of using this approach: First, any money raised this way runs through my bank account, which means I have to hold back enough to pay taxes on those funds. Second, I don’t like even a hint of financial impropriety which means extra transparency work on my end. In a perfect world, I wouldn’t ever handle any funds beyond my own money. Third, people making donations should get any tax deductions available, not the person who is collecting the donations. That last point isn’t an issue for fundraising for a 501(c)4 like the Portland GDC, but it’s what first made me uncomfortable with collecting donations and then handing them off.

When I can partner directly with an organization, that means that I want to use their platforms for sales and fulfillment of anything I sell on their behalf. But I also want to keep the workload to a minimum for everyone involved. If an organization mostly takes contributions via online platforms like CashApp or PayPal, offering a perk like an ebook through those platforms could mean emailing each donor a reward by hand. Sounds exhausting to me. Setting up a new platform (with the group’s permission!) and handing over all passwords as soon as possible is the best option I’ve come up with so far.

For A Portland Christmas Carol, I used Gumroad. I already use Gumroad for my own product sales and know how to set up a new product quickly. Other reasons I currently recommend Gumroad include:

  1. Gumroad is one of the few reliable sales platforms not owned by big conglomerates like PayPal. In fact, the company is extremely small.
  2. The platform is fairly intuitive to new users. I’ve introduced a few folks to it and they’ve been able to do everything they needed to without a lot of hand-holding. It’s not as fully-featured as some sales platforms, but honestly, that’s kind of a perk.
  3. You can set a base price for a product, then invite buyers to pay more if they can. When raising funds, that ‘pay what you want’ option can dramatically increase the amount you bring in.
  4. Gumroad doesn’t charge users a monthly fee. I’m not the biggest fan of their tiered fee structure (which is relatively new) but significantly cheaper options tend to require hand-coding your own pages or going through long verification processes.
  5. You can get decent analytics from Gumroad if that’s useful to you. I’m torn on the value of analytics for campaigns like this — I’ll spend most of the time A Portland Christmas Carol is available refreshing that analytics page and debating if there’s anything else I can do to get numbers to increase.

Yes, Gumroad has its own problems, but there’s no ethical consumption under capitalism. I’ll almost certainly find another sales platform I like better and switch at some point, but for now, I feel that Gumroad does less harm than the other options I could use.

One last note on platforms: while I did the heavy lifting on this project, I made sure to get buy-in from the organization I fundraised for on everything, including setting up a new sales platform. It is always inappropriate to set up a platform that accepts money for a specific organization without that organization’s approval.

Telling everyone about your amazing parody

You might be hoping that all the work is done once your parody is available for purchase and download. Unfortunately, if you don’t tell anyone about your parody, all of that work will be for nothing. Marketing its launch is a necessary part of the project.

Exactly how to market a launch depends a lot on what you’re offering, what organization you’re partnered with, and when you’re launching. I’m not going to go through every marketing tactic I’ve used for A Portland Christmas Carol, but I will cover a couple of key points.

Schedule your offering well: Perhaps the biggest problem I faced with A Portland Christmas Carol was that the story is directly tied to December 25. Offering a parody like this any other time of the year just isn’t going to make sense. But potential donors are also offline more around major holidays. I would have preferred to launch earlier in December. But the process of actually preparing files, getting approval, and setting up everything took time. So I launched when everything was ready. Sometimes scheduling just works out that way. But if you can choose a work to parody that allows a little more calendrical freedom, consider doing so.

Make use of the organization’s platforms: When you’re fundraising in partnership with an organization, familiarize yourself with their websites, newsletters, social media accounts, and other methods of reaching out to supporters. In a perfect world, you’ll be offering something that will appeal to at least some of those supporters and inspire them to send donations beyond what they might normally give. Write up templates and messaging that the people handling each of those platforms can copy, paste, and post.

Reach out to your own network (and even beyond): I ask people to share my projects and try to make the process as easy as possible. I provide review copies, social media templates, and images — along with anything else I can think of that will make the sharing process easier — all in a Dropbox folder I can easily control. In a perfect world, all this happens at least a few days before the official launch, but we rarely work in a perfect world. Most of my requests to share A Portland Christmas Carol went out on Launch Day, but I’ll probably be sending out messages asking for help sharing right up through the last day of the sale.

In conclusion

This write up is longer than I initially planned. But I wanted to cover as much of the necessary work involved in offering a parody as a way to fundraise as I could. I hope these notes will come in handy when you’re thinking of creative ways to support causes.

Thank you for reading this far. And if you read this before January 1, 2022 and you haven’t already, please consider getting yourself a copy of A Portland Christmas Carol.

​Formally ending The Portland Prospectus

Some of you may remember that in the before times, I ran an email list covering sponsorship opportunities around tech conferences and other events related to tech here in Portland. I haven’t updated it since 2019, given the large number of cancellations and postponements in the last two years.

Both running and sponsoring events look dramatically different today than they did in 2017, when I started the newsletter. Personally, I don’t feel comfortable attending big events in person and I don’t see that changing any time soon. My work has also moved away from the tech industry, so I’m not really tracking tech events very closely at this point.

As a result, I’ve decided to formally shut down the mailing list. After this post goes live, I’ll delete the mailing list, including subscriber emails. If someone wants to start something similar in the future, you have my blessing. And if you want my templates and notes, let me know — we can work out an equitable arrangement.

Since I’ll be deleting the content that went out to the Portland Prospectus mailing list, I’m also sharing the PDFs of the different iterations of the Portland Prospectus here as a sort of archive.

My election coverage, to date

I’m already working on some coverage of the 2022 primary and general elections. In the meanwhile, though, I wanted to collect the resources I’ve made over the past several years into one place.

Prior to moving to Portland, I also wrote about elections (including a stint blogging professionally about the 2008 election). I don’t really recommend my political writing prior to about ten years ago; I have learned a lot since then and developed personal politics that I feel a lot better about.

Evergreen Resources

Election-Specific Resources

PyCon 2022 talk proposals (and 75 talk ideas you can use)

PyCon 2022’s call for speakers has a little more than a month left on it, so it’s probably a good time to note that one of my past proposals is one of the examples for how to pitch a tutorial (particularly if it’s not a technical tutorial). You can see my proposal here — it’s the second on the page. If you want to see the tutorial that resulted from this proposal, I’ve posted the script and video of the tutorial on my site.

As someone who regularly submits talks to technical conferences that aren’t really focused on technology, I found the feedback from this proposal especially helpful for future talks. Here’s one highlight that has convinced me to double-down on writing lengthier proposals in order to get my idea across:

Audience:

We especially liked the ‘audience’ section. The description of whom the tutorial was aimed at was excellent.

Most of our favorite proposals include clear learning goals (showing us what the audience will learn, and giving them motivation to attend). This one provides additional details, unique to the format of the tutorial itself:

“Attendees will have at least one writing sample they can share and will be better equipped to write and test their own materials, as well as evaluate others’ writing. They’ll also know about opportunities to share their writing with other pythonistas.”

I hope these materials serve as an inspiration for Python speakers, especially anyone considering putting in a talk that focuses less on the programming language itself and more on the context in which we use it.

And if you need ideas for topics that would make great talks in 2022, here are a list of ideas pulled from various Twitter threads I’ve posted over the years and updated as needed (2021, 2020, 2019, 2018). These talk ideas are, of course, not vetted by PyCon staff and are just talks I want to watch.

  1. Most of us have spent almost two years thinking about COVID vaccines almost constantly. Some places have done well at distribution, some are struggling. If you’re building or using Python tools to help with the vaccination effort, tell the rest of us. If there’s still work to be done, tell us about it so we can help.
  2. If you have any scripts or tools that make living a socially-distanced life easier, I think a lot of people are still looking for ways to make remote everything easier.
  3. A talk about writing Python with minimal internet access or writing programs for users with minimal internet access may seem like a counterintuitive idea. But many folks have precarious internet access, and the continuing pandemic leaves those folks with fewer opportunities to go elsewhere for better access.
  4. I’m not sure what the highest number of types of pythons you can reference in one talk, but I’ve seen some herpetology tools written in Python and there’s a giant prehistoric snake with the taxonomic name _Montypythonoides riversleighensis_. There’s a lot of material there.
  5. Was there some nuance about Python you struggled with this year? Write up an explanation — I promise that if you struggled with a Python concept, some other Pythonista has too!
  6. Are you working on one of the many elections happening in 2022? Empower your fellow Python programmers to take their skills and get involved in the political process.
  7. We need to talk about prisontech and how much technology works goes into maintaining white supremacy if we want to have even a chance of reducing structural racism.
  8. Las PyCon Charlas será un track de charlas en español abierto a toda la comunidad que tendrá lugar en la PyCon US. Si hablas español, ¿por qué no envías una propuesta de charla?
  9. With the current wave of unionization at a variety of tech companies, it’s time to talk about organizing in tech communities. Some folks may be starting out with collective action, so both introductory talks and more advanced materials are good.
  10. This is more a general topic for programmers, rather than just Pythonistas, but how about a talk on dealing with old computer hardware. Programs like Portland’s Free Geek do phenomenal work getting technology in the hands of those who need it, like students going to school remotely.
  11. As responsible consumers of data, why do we not talk more about how we dispose of data? Storage space may not be an issue, but privacy definitely is!
  12. Programmers need more education on how to mitigate climate change factors. Honestly, all I know off the top of my head is that Bitcoin produces more carbon emissions than the entire country of Argentina.
  13. What do you do if you discover that your employer provides, say, a connected thermostat to a client you don’t like, for instance, ICE? Holding employers to ethical standards is a skill set every programmer needs.
  14. There are Python newsletters, podcasts, blogs, books, and other media. Maybe it’s time to start talking about the Python media ecosystem. What would this talk look like? a guided tour through what’s out there? a discussion on how the different bits interact? There are so many options!
  15. Based on unfortunate mistakes that were made, possibly at my desk, I’d love to hear more from experienced folks on how to interact with other people’s projects in ways that won’t overwhelm a server or break other stuff. i.e. how to use an API run by a nonprofit with an all volunteer tech team.
  16. Fundraising for open source projects has changed dramatically in the last two years. PyCon, for instance, is usually the PSF’s main fundraiser. If you’ve successfully raised money for an open source project in the last year, we’d all appreciate you sharing with the rest of us.
  17. I have a dream of PyCon hosting its own fashion show some day. We deserve it. And Nina Zakharenko’s earrings deserve to be on the runway.
  18. What’s the absolute weirdest hardware you’ve gotten Python to run on? Currently, I think the Furby is a standout but I bet y’all can surprise me.
  19. If you struggled to learn any concept related to Python, consider giving a talk about that concept — I can guarantee that if you struggled with something, other folks in the Python community struggled too!
  20. I’ve seen dozens of tarot and astrology apps at this point. Getting a developer’s perspective of building systems that (I assume) need to work in an element of chance or intuition world make for an amazing talk.
  21. I’m getting kind of tired of talks on automation scripts for businesses. How about some household automation scripts? Did you write a script for generating a shopping list or managing chores?
  22. Have you tweaked Python IDEs & other programming tools to make programming in Python accessible? In the past, talks covered tools for programmers with low vision and teaching Python in ASL, but there must be other accessibility hacks worth sharing.
  23. I have seen some truly amazing Python-driven sensors for temperature, moisture, and other environmental factors. I have to believe someone has put them all together into an amazing gardening system. If you are that person, you should tell the rest of us how to do the same!
  24. I’ve heard more than once that Python is used on every continent, but what exactly are Antarctic Python users up to? That’s a talk I’d listen to, for sure!
  25. I think every conference organizer has seen several versions of “How to make your first contribution to open source”, so it’s time for talks about how to make your second, or third, or hundredth contribution to open source. Tell us what comes next.
  26. There are plenty of talks out there about programming with security in mind, but it’s a struggle to find anything about programming with privacy in mind. We have a responsibility to keep users’ information private, so we need tools and techniques to ensure that privacy.
  27. Finding data sets to train machine learning projects on can have unintended consequences. Any ML enthusiasts out there who can explain what to look for when choosing data sets?
  28. If we’re honest, we could all probably use a talk on how to create bug reports that will actually result in fixes.
  29. We clearly need a Python game arcade during the conference. I will happily bring a bunch of quarters if someone brings the games.
  30. Python has been deployed to help during several recent emergencies. What’s it like to use Python in those scenarios? Is there anything you’d do differently or wish you had in your toolbox?
  31. The National Oceanic and Atmospheric Administration has this lovely open data discovery portal. Let’s talk about the weather (especially the growing number of extreme weather events).
  32. There’s one poster that I would love to see: a guide to what Python programmers are expected to know at different experience levels, at least in terms of what hiring managers are looking for.
  33. Building a Python app can be a matter of hours — but scaling that same app could take the rest of your life. If you’ve gone through the process, please let the rest of us learn from your experience.
  34. IoT / connected devices have enabled a lot of people to customize their homes to better suit their needs, like by using lights to create visual warnings for folks who can’t afford fully accessible alarms. Talk us through what that sort of project entails.
  35. Given Python’s educational usage, we may need to spend more time on Python’s user experience. I’m not sure if this topic would be best as a talk or as an open space.
  36. Several open source communities have experienced controversies over limiting the use of their work based on ethical concerns. It seems worth discussing what ethical concerns Python contributors have, as well as what Pythonic ethics might look like.
  37. Using Python to change your online browsing experience (i.e., filtering out abusive content on reddit) could make for a great talk.
  38. I would love to know how to effectively assess libraries and frameworks when choosing how to build a project. How do you vet tools so you avoid components that won’t be supported a year from now?
  39. Can someone demo some hiring exercises that don’t require whiteboarding? Ideally those exercises can actually show an applicant’s Python skills without asking for an unreasonable amount of work, but I don’t want to be, you know, too optimistic.
  40. We have about a decade left to make meaningful progress on climate change. Are there any projects out there that require Pythonic assistance? Talk us through the onboarding process and then maybe set up a sprint on that project.
  41. I continue to maintain that not enough programmers are terrified by the words “intercalary periods.” Time zones aren’t anywhere near the only difficulties in implementing time into code worthy of a talk.
  42. How we got to Python 3: I don’t think I’m the only one who likes a good code archaeology talk, so an overview of how Python has evolved over the past 20 odd years could be awesome.
  43. Python for writers (fiction and otherwise) could be an awesome talk. I could see coming at this topic from a couple of different ways, like dissecting some of the scripts writers have shared on GitHub.
  44. How to improve search in your projects, especially when you’ve scrapped a giant pile of websites, PDFs, or other data and that pile is just sitting there, silently judging you for not already working with it.
  45. I’m sure someone out there is going to be running 2.7 for years to come, so talks about maintaining and using legacy code are great. If you’ve got any particularly well-aged code still in production, tell us about what it takes to keep that code working. (I have literally written a short story about the consequences of running 2.7 for far too long, so I’m obviously thinking about this topic a lot.)
  46. Could someone with experience in anonymizing data sit us all down and talk about how to anonymize data and what potential issues we need to look out for?
  47. Okay, I’m pretty sure that most conferences don’t want talks about gambling, but I did read an interesting paper about predictive modeling for horse racing and there’s definitely a talk in there. Maybe stay away from talking about betting and focus on the math and horses.
  48. How to triage and understand Python code bases someone else wrote. Honestly, I could probably use some advice about understanding the code Past Me wrote, too.
  49. How to do due diligence on an open source project before using it: There are definitely security factors we need to think about, but we also need to talk more about project sustainability and deciding if it’s worth supporting projects with questionable approaches to inclusion.
  50. While a lot of us use GitHub, there are other version control apps out there (including other git-based options). When does it make sense to use other options for Python projects and is it important to reduce reliance on a single app?
  51. Python in a hurry: what tools and techniques can help get something / anything into production? But you’ll also want to cover the tradeoffs and technical debt accrued along the way.
  52. There are some serious pros and cons to doing genetic testing through 23andme and similar tools, so maybe it’s time to talk about how to do our own analysis of our genetic history (including using some of the Python tools that already exist in this area).
  53. I know NASA uses Python and I just want to say that I am here for *any* talk about using Python to launch stuff into space. (Non-NASA space talks are also super cool.)
  54. What’s the life cycle of a Python library? What should we know before we decide to create new libraries? (Bonus points if your slide deck illustrates concepts using the life cycle of a python!)
  55. Benchmarking the different hosting options for Python-based projects would make a great poster session topic (and I would probably ask for a copy of that poster for my office).
  56. A lot of programmers learn multiple languages, so where should a Python programmer start with other languages? I know a lot of folks say JavaScript, but I bet there’s a lot more to the discussion.
  57. Software testing on a shoestring budget would be great. There have been a lot of “Python for activism!” talks lately, but one of the results have been some projects thrown over the wall without any testing, because testing seems hard and expensive.
  58. Another technology archeology idea: what old hardware can you get running with a more modernish interface? And let’s go old-school: if you have access to, say, a Jacquard loom, what can you do with it with a modern programming language?
  59. Building local mapping systems, especially in ways where data can be shared. As a for instance, being able to map warming shelters (especially the informal ones, like churches) as they open and close in real time would be so useful during freezing temperatures.
  60. Anyone with a generative art project should write it up, in my opinion. First, because all conferences need more art. Second, because there is some AMAZING art coming out of human / tech combos right now.
  61. Augmented reality is a thing right now. There are amazing museum installations (more art!), accessibility upgrades, etc. out there that we’re not seeing a lot of in talks yet. (I’ve seen several “I made an app for other techbros!” talks, so anything else really would be nice.)
  62. One take on the standard “make your API actually useable” talk I’d love to watch: how to prep your API to work with platforms like IFTTT or Zapier. What does it entail behind the scenes and how many different ways do users find to break things?
  63. Building Python tools for non-programmers would be a useful talk. I’ve seen a couple of great PyQt walkthroughs, for instance, that could really be followed up with another talk on how people actually use GUIs after they’re built, necessary upgrades, unexpected edge cases etc.
  64. Oooh, someone could totally do a talk on code review best practices, especially around what parts can be automated and what bits a human needs to do. If you’ve got some ideas for adding empathy to code reviews (especially for the bits that are automated), that would be great!
  65. There’s some really interesting technology built around religious needs (often with Python). For instance, some Orthodox Jewish business owners take down their websites for the length of the Sabbath. Kosher technology is fascinating and talk-worthy.
  66. I’m so here for data spelunking talks, especially from data journalists. Had to go to absurd lengths with a FOIA request, munge together data sets from old scans, or otherwise work with dubious data? What’s your workflow?
  67. Would someone please give a talk with “How to Teach Your Daughter to Code” as the first slide and “Exactly the way you’d teach your other children to code” as the second? You could follow it up with an actual talk or submit it as a lightning talk.
  68. I’m not sure what the oldest Python code still in use is, but if anyone’s running software using, say, Python 2.0, what does it take to keep that kind of well-aged software up? Even better if you didn’t write the code initially and had to read the previous programmer’s mind.
  69. There are tons of talks on building tools to track and improve health, but very few on tracking and improving mental health. I don’t believe for a minute that none of y’all are tracking mental health data on yourselves, so put in a talk if you’re comfortable talking about it.
  70. If anyone is hardening systems using Python to prepare for natural disasters (or man-made disasters, as the case may be), that’s definitely a thing you should put in a talk on.
  71. I’m always in favor of community-specific trainings about how to work with the community’s code of conduct. Ally and bystander training around PyCon’s Code of Conduct would be particularly nice.
  72. Python has impacted how a bunch of other programming languages have evolved. A talk on those impacts in other languages, along with an exploration of anything those languages have improved upon would be super interesting.
  73. There are entire series of books dedicated to using what you know about one programming language to learn another. What about a talk that uses the same approach to introduce a couple of Python frameworks? What do they have in common? How do they work differently?
  74. How about an intro to building linters? Maybe some best practices, tips on making linters more accessible, that sort of thing?
  75. An annotated discussion of all the Monty Python jokes in the Python language, especially for everyone who did not grow up with the antics of said comedians.

So you have 75 ideas to get you started and roughly a month to write your proposal. What are you waiting for?

A Hanukkah zine update, in time for Hanukkah

A couple of years ago, I made a collection of zines for Hanukkah as a way to talk about what the holiday commemorates and how it fits into the American winter holiday season. Those zines are available on Gumroad (embedded below the post) as printable files for whatever price you’re able to pay.

Miranda Sullivan, New Voices’ columnist covering Jewish zines, wrote a kind review of my zines: Start Preparing Early for An Anti-Nationalist Hanukkah: A Zine Review. Here’s a snippet from Miranda’s review:

For the most part, Bram presents a collection that prompts the reader to create their own modern commentary rather than presenting a monolithic view of the holiday. After reading these zines, to me it’s clear that Hanukkah is being used by today’s American politicians to punch a hole in their “I’m not discriminatory I have (fill in the blank) friends!” card. It also made me think about the close relationship between Zionist settler-colonialism and the United States’ military industrial complex.

Miranda Sullivan

Having this review in New Voices means a lot to me, because one of the first pieces I ever wrote about my Jewish experiences was for New Voices. The publication is written by college students and way back in the day, when I was still in college, I wrote an article about Jewish life at the University of Tulsa.

That article doesn’t appear on the New Voices website these days (which is for the best; I have both progressed as a writer and in my ability to think critically about religion and education). If you really want to see how much my writing has improved, I suppose you can look at this copy on the Wayback Machine.

Honestly, though, you’d be better off checking out Miranda’s other columns on Jewish zines, especially the review of The Jewish American Princess Zine, which dives deep into the racial politics of the Jewish American Princess stereotype.