Jesse B. Hannah (she/her)Jesse B. Hannah(she/her)

Recent Articles

  • Black Lives Matter

    1 minute read

    All lives matter in theory. In practice, not all lives matter because of the systemic racism and injustice under which people of color have suffered since the American continent was first colonized. Anyone who says otherwise is wilfully blinding themselves to the truth.

    It’s not a zero-sum game, either. Only once Black lives matter, Brown lives matter, indigenous lives matter, and LGBTQ+ lives matter, will all lives truly matter. And when that day comes, all lives will be better as a result.

  • Negating ActiveRecord Scopes

    2 minute read

    Here’s a neat trick in Rails to use the plumbing of ActiveRecord to keep your models DRY and maintainable. Say you have a scope in an ActiveRecord model with an expires_at column, to find records that are still active:

  • Secure k3s over WireGuard with Kilo

    5 minute read

    I’ve ended up collecting a handful of SSDNodes VPSs, and have been fascinated with Kubernetes lately, starting with projects at work and progressing into my own research, so putting the two together was obvious. The only hangup I had is that the VPSes were only assigned public IP addresses and I wanted to ensure that intra-cluster communication would all be secure, preferably over WireGuard for its combination of sufficient security with high performance and low overhead. I also wanted a frictionless experience with setting up the Kubernetes cluster itself, and had already used Rancher’s k3s on a Raspberry Pi cluster at home. After some Googling and trial-and-error, I disovered Kilo and found it to be the most straightforward way to mesh my VPSs together and secure their intra-cluster traffic.

  • “Bag Man,” a Rachel Maddow Podcast

    1 minute read

    This is a story that is not well known. But it really should be…especially, maybe, now.

    It’s the story of a criminal occupant of the White House…whose crimes are discovered by his own Justice Department…

    Who then tries to hold onto power…by obstructing the investigation into his crimes, by smearing and threatening the prosecutors who are investigating him…and by trying to convince his legion of supporters across the country…that none of the allegations are true. That it’s all just a big witch-hunt.

    And if that sounds familiar…it’s because history…is here to help! I firmly believe it.

    If you caught Rachel Maddow’s scoop last night about what Spiro Agnew was up to in the years after his resignation (and how he relates to the Justice Department’s regulations about whether or not a sitting President can be indicted), but haven’t yet listened to “Bag Man,” you owe it to yourself to check it out. In fact, even if you haven’t watched any of The Rachel Maddow Show, you owe it to yourself to check “Bag Man” out anyway.

  • Mark Kelly for Senate

    1 minute read

    I’m not crying, you’re crying:

    You know, it becomes pretty obvious pretty early when you get into space that we’re all kind of in this together.

    Gabby Giffords graduated from University High School in the year I was born; 17 years later, while I was a senior at UHS, she was elected to represent the Congressional district my family lived in; five years later, in 2011, she was critically injured in a mass shooting. Since then, she and her husband have been courageous, omnipresent, and tireless in their campaign for sensible gun safety reforms. Captain Kelly has my unreserved and enthusiastic endorsement for U.S. Senator from Arizona.

  • Handling Disappearing .egg-info Directories with Docker Compose and Python

    3 minute read

    So it’s been a while, but lately I’ve been writing Python (and Erlang!) for my full-time job at Nextiva, where we have a microservice architecture mainly comprised of single-page apps, backed by Python applications accessed through an API gateway. And as you’d expect, we make heavy use of Docker and Docker Compose for local development. One thing that has come up a handful of times, however, is that an application’s Docker image builds just fine, and even runs by itself, but when mounting the application’s source code as a Docker Compose volume, the image’s Python fails to find the package.

  • Vin Scully Is a Legend, But He’s Not a Saint

    1 minute read

    Keith Olbermann writing for GQ:

    This is not to say Vin Scully is not a terrific and endlessly patient human being, nor that anyone who has treated him with reverence, nor that the succession of ballplayers and managers who have bestowed the ultimate role-reversal praise by making the pilgrimage in full uniform to him in the press box are being insincere or overdoing it. It’s just that the real Scully—the one who once made us think not of Christ but of Manson—is far more human and far more capable of the unexpected. And thus far more praiseworthy.

    I grew up watching Cubs games on WGN and going to Tucson Toros and then Sidewinders minor league ball games. Getting a full, instant statistical analysis with every pitch over the internet has been a thing for almost my entire adult life. But the most formative part of my introduction to baseball as a kid and my love for the game now was sitting by the pool with my dad on Sunday afternoons, listening to AM radio broadcasts of Los Angeles Dodgers games called by Vin Scully (and sponsored by Farmer John). Every time I read about him I come across a story that’s entirely new to me, and this tribute by Olbermann has several good ones.

  • Using ActiveSupport Concerns for CarrierWave Base Uploaders

    3 minute read

    CarrierWave is my favorite library as of late for file uploading in Rails, because its mountable uploader classes go nicely with my preference of keeping classes small and compartmentalized. Unfortunately, one thing that gets in the way of that is poor support for base uploaders, where (for example) attempting to override the storage directory for a subclassed uploader won’t work in every case, or enabling or disabling processing per uploader. My preferred solution to this problem is to fake it using ActiveSupport::Concern modules, which even allows you to stack “base uploaders” as deep as you want.

  • Ezra Klein interviews Cory Booker on The Ezra Klein Show

    1 minute read

    An interview with a fascinating man who is definitely not your run-of-the-mill politician.

    I’ve found divinity in places where people wouldn’t normally see it. I’ve found magic. … If we see no angels, it’s because we harbor none. I like to be able to see the divinity and the angelic nature of humanity. If we see that more, it becomes real, it becomes true.

    Cory Booker very much mirrors my own optimistic view of politics and government as a vehicle for good. He’ll be in the White House one day.

    Meanwhile, if you’re not listening to The Ezra Klein Show, you’re missing out; he’s become one of the news media’s best interviewers in a very short time. I’ve been following his work since his guest appearances on MSNBC in the “Countdown” era, and wasted no time subscribing to this podcast when it was piloted and then launched. A great interviewer never steals the spotlight from his guests, and Ezra does a fantastic job of letting his guests express themselves without leading them on or overwhelming them.

    His interview with Heritage Action for America CEO Michael Needham is an excellent example of this. Even though Needham is objectively wrong about Obamacare on a number of counts, Ezra is there to guide the conversation and let the listeners draw their own conclusions from it, not to get bogged down in arguments over who’s right or wrong. The result is a unique insight into the operations of the modern-day conservative political machine and the worldview that drives it.

  • Give Your Buttons a Type

    2 minute read

    I fixed a bug at work today where hitting the “Enter” key from a text input in an accordion form, in addition to submitting the form via a keydown listener, would collapse the current section of the accordion, open the next section, and open a dropdown attached to a button in that section. If a user hit Enter a second time quickly enough, instead of submitting the text they entered in the first section of the form, the empty second section would be submitted, taking the user to an entirely different page.