About Steve

Steve is way into…

  • His wife, and his dog Rufus
  • Shallow, rocky creeks of the Appalachians; hollows; towns built on the side of mountains; abandoned roads, bridges, railways, and stairways.
  • Building web sites, apps, and frameworks with TypeScript, Node, React, GraphQL, and some PHP
  • Indiepop, dreampop, yacht rock, disco beats, 60’s pop, classic hip hop, Stereolab, Broadcast, ABBA, Deerhoof, Zombies, Innocence Mission…
  • Playing piano, guitar, bass, and drums if anyone will let him
  • Transcribing song chords
  • Nudging songwriters to embrace a wider view of harmony
  • Building little apps to share chords and keyboard snippets
  • Moose’s album Live a Little Love a Lot (all time)
  • Jorge Elbrecht’s album Here Lies (last decade)

github | threads | instagram

Quick Thoughts on “AI Music”

The tech is fascinating but the trajectory of it being used to screw artists is already clear. Hopefully artists will lawyer up and get their works out of training data.

Large artist unions should be mandated access to freely and deeply test public models for the purposes of detecting IP in the training data. If you’re making money providing a model, be prepared to show your papers on its training; trust needs to be earned.

Commercial models should be taxed, with revenue supporting ongoing development of tools for smaller artists to protect themselves from being ripped off.

If this effort goes well for artists, I generally expect sound quality of music generation to improve but “humanness” of the public models to sink. Bad news for companies wanting nearly free anodyne music for commercial use, but arguably better for art.

Where do the real prices of services like Udio land after investors stop footing the bills? Do these VC subsidized toys ignite the creative spirit of everyday non-artists to get into the game of actual music creation? What are we missing out on by having a world where very few people make music?

Restarting a node service on macOS boot

This was a pain to get right, so here’s what I landed on:

  1. Open System Settings > Energy Saver
  2. Turn on Start up automatically after a power failure
  3. Under Privacy & Security > Full Disk Access, add the executable /usr/sbin/cron
  4. Log in as root: sudo su
  5. Install pm2 globally: npm i -g pm2
  6. Don’t get trapped in vim: export EDITOR=nano
  7. Copy the PATH to clipboard: eval 'echo PATH="$PATH"' | pbcopy
  8. Edit crontab: crontab -e
  9. Paste in the PATH
  10. Create cron entries using the full path for file/directory references (you don’t need it for executables)

Example root cron:

PATH=/Users/steve/.bun/bin:/usr/local/bin:...

@reboot pm2 start /full/path/to/script.js

This creates a PM2 service for the root user. You can only see/remove its entries when logged in as root:

sudo su

# list services
pm2 list

# remove 1st entry
pm2 del 0

Keys and Scales

The early stages of learning music tends to leave musicians with the impression that being “in a key” means using notes in the key’s signature scale; the “diatonic” notes and chords built from them. Nope! Lots of chords using chromatic notes sound totally natural when in a key because…

A key is not its scale.

A key is more like a mental state set up by a particular chord being perceived as “home”. This provides a context where some melodies and harmonies sound more natural than others.

How do we get into this state? We think it’s from having the chord first in a piece or a loop, or by giving its chord tones emphasis by some melody. For example, here are the critical notes (root and 3rd) of a G major chord with the G note doubled on top, and we give G a little jump from D to help it be heard as the tonal center:

Once established in our head, there becomes a variety of familiar harmonies we’re use to hearing, but it isn’t really about the G major scale.

An example 4 bar loop in G major

We have: G – C/E | Eb – C | Bø7/FE | Am – Cm D7

The Eb chord in bar 2 (with Eb and Bb instead of E and B) sounds a bit intriguing, but not at all wrong:

And if you stop the song and play a scale over this chord, you’ll find it’s not the G major scale that sounds best!

It turns out the current chord has a ton of influence over which scale(s) sound best at the moment. Or as I like to think about it, some chords bend the scale to support the chord.

And this little part below from bar 3 doesn’t even sound like G major when you take it out of context:

This is plain old key of A minor material, even using the A harmonic minor scale with F instead of F#, and G# instead of G! In the context of our G major song, this is what’s called “tonicizing the two” because we’re momentarily using the dominant chord of ii (E), treating Am like a temporary tonic. But we’re still in G major.

So what can we play? And with what scales?

I put together a broad overview of chords commonly used in G major (and all the other keys). Any resource like this should be treated as a starting point, and I’m definitely not implying that music using more or rarer chords will be better in some way.

Regarding scales, to avoid perpetuating another misconception, we shouldn’t think of there being one “right” scale to pair with any chord. Context, genre, taste all come into play, and as with harmony, trust your ears. Usually the scale will have several notes in common with the key signature.

Of course there are some ways to predict scales that are commonly used… in another post.

Writing melodies over modal interchange

If you look at the common chords of A major you’ll find six maj7 chords fit the modes commonly used:

Amaj7, Dmaj7 from A Ionian (the diatonic ones); Gmaj7 borrowed from A Mixolydian; Cmaj7, Fmaj7 borrowed from A Aeolian; and Bbmaj7 borrowed from A Phrygian. Here’s a loop of them with an A pedal tone on top:

As you might expect, you can’t just play any A major melody over any scale. Here are a couple strategies:

Avoid the Changes

Here you keep the melody diatonic (here using only A Ionian), but craft the melody (and/or the chords) so the melody is always in the current mode.

Here’s an example that uses all seven notes of A major:

Play to the changes

Here you intentionally target notes that are newly brought to the scale by a mode change. E.g. switching from A Mixolydian to A Aeolian, you’d want to land on C or F.

Here’s an example over the same chords, but playing to the changes to squeeze in more chromatic notes:

And an example from pop music, in the chorus of “Something About You” (E major) the melody moves from the 3 scale degree to the b3 over the borrowed bVI chord:

Why I’ll vote for Kamala Harris

Harris seems to me a focused and competent adult with integrity, who can work with people to get things done while taking the awesome responsibility of the Presidency seriously. I expect she, like me, recognizes that a leader’s public behavior, character, and decency to other humans matter. There are plenty of public figures setting a bad example of how to live without the leader of the free world doing it, too. I expect she knows it’s morally wrong and particularly repugnant for a political leader in this era to bully and slander because it puts people in real danger. I expect she will never say things that lead to people and organizations getting death threats.

I expect she knows it’s also just not smart strategically to have a long enemies list if you want to have a positive effect on the world. I expect she will not inflame tensions or bring out the worst in crowds by suggesting that if not re-elected, certain doom will befall the country. I expect she feels some shame when lying. She has certainly lied, but I would gladly invite a comparison with her opponent.

I expect she won’t waste hours a day on social media or cable television getting a distorted and false view of the world. I expect she’ll recognize what she doesn’t know, and will learn from expert advisors rather than just people who praise her. Any decent economic advisor would warn her that blanket tariffs would be massively inflationary and risk starting a trade war that would endanger our own exports. (We should ask why the executive branch’s control of tariffs are so powerful.)

I expect she’ll recognize that the rule of law–state laws, attorneys general, and courts–decide how elections and recounts are run and adjudicated. I expect she won’t pretend as if recounts, investigations, or court cases didn’t happen or bring up lies already debunked by law enforcement.

This is not a particularly high bar. Arguably every major party candidate in recent history–save one–easily cleared it. I suppose if a candidate were exceptionally capable you could argue letting a few of these things slide, but in my opinion…

Donald Trump does not seem exceptionally capable.

His tax cuts raised the debt by trillions while achieving none of the promised outcomes. The economy he is credited for was a steady continuation of the 2012-2017 post-recession period as you can see on any graph of the major economic indicators like GDP and unemployment; there was no Trump bump. To be generous I could say he didn’t break anything (but the debt). Analyses of his tariff proposals look disastrous for the economy. There’s no credible theory of how he would reverse the worldwide phenomenon of inflation without a time machine, and to “bring back his economy” you’d need to fire lots of people because unemployment is lower now.

Subjectively, during his presidency he seemed driven by daily distractions and grievances he came across on social media and cable news, and he lacked the focus to ignore what didn’t matter and ignore the haters–he created more every day. His obsession with being perceived as having the greatest everything of all time led to national embarrassments like Sharpiegate and “alternative facts“. Although his team’s efforts to fast track COVID vaccine development and rollout should be applauded, he routinely undermined his own government’s efforts by downplaying his own family’s vaccinations and giving spotlight to fringe figures and unproven therapies [1]. There were weeks when one could argue his public behavior was a greater help to the outbreak.

I’m further convinced by the large pool of former Trump administration folks not endorsing him up to and including his former VP. All these people cannot just be chalked up to Trump Derangement Syndrome; they worked directly in his orbit.

He would be the oldest President in history, we know nothing official about his health, and if he passes in office it will lead to a man taking office who is at least on board with Trump’s demonization of immigrants and past behavior, and has promised to follow Trump into the darkness of testing the limits of post-election lies and the rule of law.

No thanks.

[1] For their part, scientists and politicians surely damaged their own reputations by various means in the COVID era, but I believe there were at the very least many thousands of deaths that could be attributed to the politicization of vaccines, and that will sadly continue.

Hungary and the Republican party

A PSA if you’ve watched leaders of the new Republican party hold up Hungary as a great country. Last I checked Hungary has…

  • National health insurance
  • 20 days paid vacation
  • 15 days paid sick leave
  • 24 weeks paid maternity leave
  • Tons of extra benefits for parents
  • Yearly minimum wage increases
  • Very few gun deaths due to strict gun control

Sounds nice, but the Republican party prevents us from enjoying those, so why might they promote Hungary as a model? Ah I see… The oppression of same-sex couples, limitations on the freedom of speech, a loud and corrupt leader who says nice things about Donald Trump…

If you want the good policies of Hungary that improve quality of life, elect people to Congress who will actually vote for those policies.

Stereolab “Baby Lulu” Chords

Intro

i           subV  i          subV  V/bVI   iv
Gm (maj11)  Ab7   Gm (maj7)  Ab7    Bb7   Cm9 (#11)

Gm  Ab13#11  Gm  Ab13#11  Bb13  Cm9

Verse

i          V/bVI     bVI     subV
Gm  Gm7  Bb13(11)/F  Ebmaj7  Ab7

i   Db: I      v    IV    Bb: I  bVII
Gm    Dbmaj7  Abm7  Gbmaj7    Bb  Ab

Bridge (Really starts on Fm9)

          f: i    IV    i
Gm  Bb13/F  Fm9   Bb7  Fm9

I
C Cmaj7 (C lydian melody: 1 2 3 #4 5 6 5)

bV
Gb7 (C altered melody: b7 1 b9 #9 3 #4 3)

I         bV
E6 Emaj7  Bb7

I        IV    Db:  I      v       IV
      g: subV i                Bb: bVI    I  bVII
Ebmaj7   Ab7  Gm  Dbmaj7  Abm7    Gbmaj7  Bb  Ab  -> verse

Outro

                    bVI bVII I
Bb  Ab  Bb  Ab  Bb  Gb   Ab  Bb

President Trump’s actions after the 2020 election were reckless and immoral.

It deserves much repeating this year that–as admitted on Congressional record by the Republican leader of the Senate–the 2024 GOP presidential candidate was “practically and morally responsible” for provoking an attack on the U.S. Capitol and our representatives. And worse, while he remained in office, sworn to protect the United States, he didn’t lift a finger to stop the attack for hours, and by accounts from his own staff was pleased and hoping his mob of fans could help him overturn an election that had already been legally contested, investigated, recounted, and certified in every state. The will of the people had been counted and recounted and he didn’t like it.

The Capitol attack and dereliction of duty of the President as it unfolded was a national embarrassment watched by millions live, and he’s not only unrepentant but continues to lie and even lionizes and promises to pardon the criminal attackers. The only punishment has been of his post-election team, as they lose enormous defamation cases and their freedoms, with courts being one of the few places where baseless, fantastical lies aren’t permitted as part of the game of politics.

No conservative should be expected to vote for a Democrat, but consider writing in a conservative who will stand by election outcomes and protect the U.S. when it’s attacked. These are low bars and we should demand Presidential candidates step over them.

(McConnell’s speech from the Senate floor, emphasis mine)

January 6th was a disgrace. American citizens attacked their own government. They used terrorism to try to stop a specific piece of domestic business they did not like. Fellow Americans beat and bloodied our own police. They stormed the Senate floor. They tried to hunt down the Speaker of the House. They built a gallows and chanted about murdering the Vice President. They did this because they’d been fed wild falsehoods by the most powerful man on earth because he was angry he lost an election. Former President Trump’s actions preceding the riot were a disgraceful dereliction of duty. The House accused the former President of quote “Incitement”. That is a specific term from the criminal law. Let me just put that aside for a moment and reiterate something I said weeks ago. There’s no question, none, that President Trump is practically and morally responsible for provoking the events of the day. No question about it.

The people who stormed this building believed they were acting on the wishes and instructions of their President and having that belief was a foreseeable consequence of the growing crescendo of false statements, conspiracy theories, and reckless hyperbole, which the defeated President kept shouting into the largest megaphone on planet Earth. The issue is not only the President’s intemperate language on January 6th. It is not just his endorsement of remarks in which an associate urged, quote, “trial by combat”. It was also the entire manufactured atmosphere of looming catastrophe. The increasingly wild myths about a reverse landslide election that was somehow being stolen. Some secret coup by our now President.

Now I defended the President’s right to bring any complaints to our legal system. The legal system spoke, the electoral college spoke. As I stood up and said, clearly at that time, the election was settled. It was over, but that just really opened a new chapter of even wilder and more unfounded claims. The leader of the free world cannot spend weeks thundering that shadowy forces are stealing our country and then feign surprise when people believe him and do reckless things. I and sadly many politicians sometimes make overheated comments or use metaphors that unhinged listeners might take literally, but that was different. That’s different from what we saw. This was an intensifying crescendo of conspiracy theories orchestrated by an outgoing president who seemed determined to either overturn the voters’ decision or else torch our institutions on the way out. The unconscionable behavior did not end when the violence actually began.

Whatever our ex-President claims he thought might happen that day, whatever right reaction he’s says he meant to produce by that afternoon, we know he was watching the same live television as the rest of us. A mob was assaulting the Capitol in his name, these criminals who are carrying his banners, hanging his flags and screaming their loyalty to him. It was obvious that only President Trump could end this. He was the only one who could. Former aides publicly begged him to do so. Loyal allies frantically called the administration. The President did not act swiftly. He did not do his job. He didn’t take steps so federal law could be faithfully executed and order restored. No, instead, according to public reports, he watched television happily as the chaos unfolded. He kept pressing his scheme to overturn the election. Now, even after it was clear to any reasonable observer that Vice President Pence was in serious danger–even as the mob carrying Trump banners was beating cops and breaching perimeters–their President sent a further tweet, attacking his own Vice President.

Now predictably and foreseeably under the circumstances, members of the mob seemed to interpret this as a further inspiration to lawlessness and violence not surprisingly. Later, even when the President did halfheartedly began calling for peace, he didn’t call right away for the riot to end. He did not tell the mob to depart until even later. And even then with police officers bleeding and broken glass covering Capitol floors, he kept repeating election lies and praising the criminals. In recent weeks, our ex-President’s associates have tried to use the 74 million Americans who voted to reelect him as a kind of human shield against criticism. Anyone who decries his awful behavior is accused of insulting millions of voters. That’s an absurd deflection. 74 million Americans did not invade the Capitol, hundreds of rioters did. 74 million Americans did not engineer the campaign of disinformation and rage that provoked it. One person did, just one.

Make America a better place to raise kids

Except for the upper class, parents in the U.S. have it very, very hard. Today’s generation sees the lack of mandated parental leave and work benefits compared to every other wealthy nation, and they know the underlying costs don’t justify the enormous rent increases squeezing them of every penny. We are radicalizing a generation to see capitalism as a tool for the wealthy to hoard wealth and for previous generations who enjoyed decades of housing appreciation to pull the ladder up behind them.

Demand that Congress guarantee some parental, sick, and vacation benefits to all workers.

Demand that corporate landlords provide transparency of their costs if they impose large rent increases.

Demand that your city legalize the construction of higher density housing.

Start paying attention to what works in other countries.

You can split a 6″ cake only 112 times.

https://www.wolframalpha.com/input?i2d=true&i=Planck+length+*+Power%5B2%2C113%5D

Here WolframAlpha helpfully calculates that if you double the Planck length 113 times you’ll get just over 6″. Hence, if you start slicing a 6″ cake in half, around cut 112 you’ll end up with slices just above the Planck length and which cannot be sliced further.

So you won’t actually need infinite icing to cover it, but yeah it’ll be a lot.