How I'm listening to the entire impeachment trial

…and (mostly) not going crazy.

tl;dr: It's youtube-dl and Overcast. And being a day behind is good for your health.

I got it into my head that to be a good citizen, I should follow the impeachment trial. The entire impeachment trial. Yes, even after I found out that 48 hours of argument had been allotted over just 6 days.

I knew technology was on my side. During the House public hearings, I realized that I could rewind YouTube live streams and then speed them up. This let me jump back in the coverage and catch up, scheduling breaks on my own terms. I thought I'd do this for the Senate trial as well, but I found it not good enough.

First, eight hours is in fact a long time. Second, because the presentations were monologues, rather than questioning of witnesses, there were lots of long, dramatic pauses. For someone who's used to listening to podcasts with Overcast's Smart Speed feature, it was a poor experience. Then I had a thought: why don't I make the trial a podcast and use Smart Speed? The only tradeoff would be having to wait until each marathon session concluded before sideloading it into Overcast.

It turns out I had to wait even longer. Even though C-SPAN's live feeds were getting promptly converted to archived videos, they weren't immediately available for download. As I came to learn, while that archiving process takes place, only the last 4 hours of the stream is available — and some days' proceedings went over 11 hours. Once I discovered the pattern, I could see when the archive was complete within youtube-dl itself. Running youtube-dl -F lists the available download formats for a video. If in that process, an m3u8 file is downloaded and no file size is given for the audio track, the video is still being treated as a stream. If there's no mention of an m3u8 and format 140 has a file size, YouTube has re-encoded the entire stream (however long) and it's ready to rip.

Some of these files were big — they're not podcast-optimized audio. Fortunately, Overcast's premium uploads feature allows files up to 1GB, and the largest was in the 600-700MB range. After another download cycle on my iPhone, everything was queued up for maximum civic engagement.

Zoom zoom.

Zoom zoom.

The result was exactly what I hoped for. I put my base listening speed at 1.35x, just two clicks over my speed for run-of-the-mill podcast listening. But Smart Speed really kicked things up, thanks to how the words were being delivered. In conversational podcasts, Smart Speed is usually good for about a 10% increase in speed. For my makeshift impeachment-cast, Smart Speed regularly was boosting up to around 2x, without distorting the actual words beyond my comprehension.

Blasting through in double time was far better than I could have hoped to do on YouTube, and it freed me up to walk away from my computer and multitask. I never got more than a day behind, listening to the previous day's session while the current one was ongoing. And that made for a great secret benefit: I skipped the live Twitter reaction entirely. That was not how I treated the earlier hearings, when I would hit my Screen Time limit before lunch. That let me actually digest what I was hearing on my own terms. And I was making good enough progress that if I wanted to, I could follow up with another podcast or two, which provided much deeper analysis than the necktie take machine.

Overall, my little civics project has been a huge success. I lived through the Clinton impeachment and couldn't tell you anything about the Senate trial (perhaps because I was being shielded from it as a young teenager, or perhaps because it was simply way less accessible). And it's proven once more to me that Overcast is a truly magical app, and that I would barely recognize podcasts — or any audio content — without it.

Top 10 Songs of the Teens

The 2010s were an explosive decade of music, both in terms of megastars whose careers didn't exist previously and in the proliferation of tiny micro-genres whose devoted fans are few in number. This is my second decennial top ten list, and there's a real chance that you might not be familiar with any of the songs on it. But the beauty of these past ten years is that even if our absolute favorites don't align, you will almost certainly find at least one of these songs to your liking.

10. Bad Bad Hats – It Hurts

from It Hurts (2013)

Well, ten years later I still love awkward Minnesota indie bands. Bad Bad Hats was one of the first things Discover Weekly served me when I signed up for Spotify, and I knew immediately that they got me. This song has a kazoo solo and a music video filmed on a hockey rink and is therefore extremely my shit.

9. OK Go – This Too Shall Pass

from Of the Blue Colour of the Sky (2010)

This decade, OK Go largely traded on their ability to create sequels to their famous treadmill video. But I still loved what they put out on their two albums, and This Too Shall Pass is definitely most singalong-worthy. Ten years after its release, it's a mantra we still need.

8. Partner – Ambassador to Ecstasy

from In Search of Lost Time (2017)

If someone told me "you're gonna love a stoner band" I would have strongly disagreed, but then Partner happened. Ambassador deserves a spot on this list for having the most deliciously addictive guitar lick I've heard in a long time. I kept this on repeat-one just to hear those couple bars play. Unfortunately, the band doesn't (won't?) play it or many of the other songs from their excellent debut album at their live shows.

7. Secret Someones – I Won’t Follow

from Secret Someones (2015)

This establishes a pattern: I fall for indie bands that don't make it. Secret Someones was a sort of indie super-group that formed mid-decade. Fortunately for me, their shining moment was while I lived in Ann Arbor, where lead Hannah Winkler grew up, so I got to see them twice in concert. I Won't Follow was their top single and has everything I want in indie pop: an awesome hook, solid guitar riffs, and (as a bonus) that one-beat-early hit towards the end.

6. Toby Fox – MEGALOVANIA

from Undertale (2015)

I'm pretty sure that, in 1989, nobody put the Super Mario Bros. overworld music on their top ten songs of the decade. Thirty years later, if you were making a list of top musical compositions of the 80s, it would deserve serious consideration. Megalovania, the musical climax of the excellent game Undertale, is the Mario theme of this decade. Thanks to chiptune's prevalence as a genre and its amazing online community, we get to appreciate this important yet catchy melody a hundred ways — literally, a Spotify search turns up dozens and dozens of Megalovaniae* for you to choose from, from the original game track to live jazz.

*Nobody can tell me this isn't the proper plural.

5. CVHRCHES – We Sink

from The Bones of What You Believe (2013)

If I were ranking bands, CHVRCHES would surely rank even higher; they managed to develop an immediately recognizable, never-heard-before sound that everyone seems to love. Pandora — a service which, believe it or not, existed this decade — first served me a CHVRCHES song before they even had a full-length album. When The Bones of What You Believe dropped, I binged it over and over, but of all the tracks, We Sink had me dancing in my kitchen the most.

4. Birdy – Skinny Love

from Birdy (2011)

Have you ever driven an hour to hear someone sing one note? That's what Birdy's Skinny Love made me do. I don't dare call it a cover — at the age of 14(!) she took Bon Iver's song and completely wrested away ownership of it. Anyway, back to that note. You know the one, near but not quite at the end of the song, the soul-piercing one, the one that Bon Iver didn't even dare attempt. The one that, when it was finally time for it, in the last song of the encore, three hours after driving to downtown Detroit just for those five seconds, hundreds of people in the concert hall did something I've never heard before: they all inhaled in expectation, a little gasp, as if to give Birdy a little more air — here, take mine. And then she sang it, and we exulted, and we went home happy.

3. HAIM – The Wire

from Days Are Gone (2013)

The complementary talents of the Haim sisters are incredible, as is the way they weave themselves in and out of songs both vocally and instrumentally. Extremely tight production makes their transitions almost seamless and the lyrics trip in waves over themselves, always leading back to the ultra-catchy "I know I know I know" chorus. All-around stellar pop.

2. The Regrettes – Juicebox Baby

from Feel Your Feelings Fool! (2017)

this is the perfect punk song, don’t at me

1. Lucy Dacus – Night Shift

from Historian (2018)

What can I say about this six-and-a-half-minute masterwork? Nearly two songs in one, Night Shift begins so quiet and earnest, a brutal confession simmering with resentment and lingering in poetry and spare guitar. Halfway through, there's a return to silence and the establishment of the title thesis. Then the dam breaks, the guitar kicks up to full distortion, and Lucy Dacus crescendoes to a full-throated scream. And finally, still full of anger and fuzz, there is a delightful tonic resolution — rage ending in beauty.

Zhangsan unmasked

[note: this is my first linguistics qua linguistics post here, as opposed to on Descriptively Adequate. i'll keep those old posts archived there, but i think everything new will live on ecormany.com] 

anyone who's read more than their fair share of syntax articles knows about John and Mary, the dull protagonists of every English example sentence. John kissed Mary. Mary was kissed by John. *Mary was given by John the book.

read even more and you'll figure out that several languages have their own stock characters. Italian has Gianni (who keeps making telephone calls). Japanese has Taroo and Hanako. Mandarin has Zhangsan and Lisi.

i never quite knew what to make of these names. does Zhangsan have all the same connotations of plainness as John? out of curiosity, i turned to Google Translate. i remember some old Language Log posts [1] [2] on how to fool the software into giving you odd "translations" for proper names that reflected parallel uses. for example, Austria is the Ireland of Germany, apparently. to do this, you had to be crafty or happen upon it by accident, since you had to input English text but tell Google that the source was in fact German. the possibilities for things going wrong when you ask a computer program to translate English to English with a German-to-English algorithm are rife.

anyway, back to Zhangsan. to query GT on him, i had to play some tricks too. as far as i can tell, GT doesn't take romanized input for either Chinese or Japanese, so to get his name in characters, i had to  "translate" the string 'Zhangsan' from English to Chinese.

Zhangsan.jpg

next, those two characters back into the Google Language Mangler to get our English equivalent! drumroll for… 

Joe Smith.jpg

…Joe Smith. i think he'll get along  great with John.

gradebook automation with TextExpander and Keyboard Maestro

i'm teaching my writing seminar course for the fifth time this semester. you would think that would mean that the class is running at peak efficiency. in terms of what goes on in the classroom, it is. but there's one big difference behind the scenes: the last time i taught the course (in 2011), i hadn't yet been converted to TextExpander, Hazel, or Keyboard Maestro. and now i have them all at my disposal.

the old system: a sliding rubric spreadsheet

gradebook-slider.gif

i teach a writing seminar, so the bulk of the assignments are essays. i give letter grades on these, but don't assign points to them. however, by the time the semester is done, students have written 6 or 7 short essays. i could eyeball 6 letter grades and try to come up with a fair average for everybody, but i know it wouldn't come out equal. so for equanimity and ease of computation, i convert all the letter grades to numbers on the back end. i could just apply a fixed rubric and be done, but i like to have a little bit more control over the grade distribution — again, without inadvertently creating bias towards one student or another.

to accomplish this, i set up a two-table spreadsheet in Numbers, one with students' scores, and one with a rubric. last year i waited until the entire semester was over and then ran a bunch of manual find-and-replace commands to link each grade cell to the corresponding rubric cell. the result is the only actually useful implementation of Numbers' slider cells that i've ever found. as you can see easily from the conditional formatting that i've put on the "paper average" column, tweaking individual paper grades triggers related changes in the course grades.

the automation: enter TextExpander

this semester, i decided that i didn't want to wait until all the papers had been collected and graded to be able to see the quantitative results. to do that, i needed a fast way to create a reference to the rubric cells. there's a mousey way (select the grade cell, type =, click the rubric cell, type enter), but it's slow and error-prone. instead, i decided to write a quick TextExpander script snippet that would give me a fill-in field where i could just type in the grade and have the cell reference generated automatically. it's not the prettiest thing ever — just a manual lookup in a hash — but it's fast and effective. if i accidentally mistype a grade, it returns no output, which is better than mis-clicking a rubric cell or bringing down the wrath of Numbers' formula editor in more creative ways. now i just type "gbg" (for gradebook grade) and i get this form:

gradebook snippet.gif

in testing, i can enter a full column of grades for my 18 students in 60–90 seconds. way better than waiting until May to sort it out.

more column-filling: attendance

i also keep a separate Numbers spreadsheet for attendance. i admittedly print this spreadsheet out (blasphemy, i know!) because making tickmarks with a pencil as my students enter the room is still the quickest, least intrusive way of keeping track. at the end of each week, i transfer the information back to my spreadsheet, which counts up absences and tardies and counts them against my students' allowable absences (3 per semester; tardies count as 1/3 of an absence).

again i was looking for the fastest way to transfer this information. that involves marking absences X and tardies T and then filling in the rest with checkmarks ✔. the simplest manual solution is to fill the whole column with checkmarks and then insert the X's and T's, but all the extra symbols are pretty visually distracting. then i wind up doing a lot of copy-pasting and working with Numbers' very finicky drag-to-fill operation.

it's almost certainly overkill, but i decided to build a Keyboard Maestro macro to do the filling for me. the method is simple:

  1. grab the contents of the current cell
  2. see if it matches T or X
  3. if not, fill it with ✔
  4. move down one cell
  5. repeat until it hits the bottom (current cell = ✔)

the format of the macro is below. i'm sure there's a better way (perhaps involving Applescript?), but i was happy for the practice building some more complex macros. and i'm guessing that it could be adapted to several other data-entry scenarios where the application isn't directly scriptable.

km attendance macro.gif

it's all about repetition

teaching and learning are all about repetition. for the instructor, there are always tasks that have to be iterated across students, or across class meetings. the best we used to be able to do was build muscle memory. now we can build tools.

a couple other things that i've automated so far this year that i may post on later include exporting Keynote slides to PDFs and sharing them, and batch-processing assignment files downloaded from course management software. even if i'm not coming out time ahead, it keeps the process fresh.