…So, uh. Remember blogs?

I kind of forgot this one again for a while.

Anyway, there’s been talk lately about “self-defense” and whether, and when, one has a right to it, and it had me thinking of a purely hypothetical thought experiment. (Hypotheticals and thought experiments are, of course, always imperfect and not necessarily 100% applicable to any real-world situations that might seem similar.)

Suppose you see me walking down the street, and you throw a rock at me. (Maybe you recognize me as the guy who got you kicked out of your family home due to some small paperwork error your great-grandfather made and no one noticed until last year, so now you and your family live in a cramped apartment in a shitty building.)

From here, there are a few possible outcomes.

If I do nothing, and the rock hits me, it will probably hurt, and might leave a bruise. If it’s a big enough rock, and/or you throw it hard enough, it might even break a bone or give me a concussion. In this scenario, I clearly have not defended myself.

A second possibility is that I see the rock coming, and can dodge it, or raise my briefcase up to shield myself, and so while I may be startled or surprised, and may not even recognize you as the victim of a real estate transaction that was mostly just abstract to me, I have not been physically harmed. Clearly here, even if this is the end of the encounter, I have defended myself.

Third, perhaps I avoid the rock or perhaps it hits me, but either way I see that you threw it, and I pursue you and whack you in the head with my briefcase, maybe even hard enough to knock you down. I probably yell some choice words, too; but having struck back — and having hurt you more-or-less as badly as your rock was likely to hurt me — I leave it at that if you do. This is probably a little less clear-cut, in that I arguably attacked you back rather than (or in addition to) simply defending myself, but I think most people who didn’t know about the real estate swindle would regard the harms as proportional and my actions as more-or-less justifiable. They might say “well, he probably shouldn’t have, but I get it.”

Fourth, suppose I don’t just hit you back once, but I knock you down, then strike you repeatedly with my briefcase and kick you while you’re on the ground, until you stop resisting or trying to escape, or until I exhaust myself. (If this is the real-life me, it does not take me long to exhaust myself, but let’s suppose for the sake of the hypothetical that I have more stamina.) In this scenario I have probably hurt you much worse than your rock could have hurt me. I may have rendered you unconscious, broken several ribs, concussed you, possibly harmed your eyes or broken your teeth, etc.; it’s far from out of the question that I’d have caused potentially life-threatening injuries. It’s very possible to outright kill someone by kicking them while they’re down. This is again not necessarily entirely clear-cut, I’m sure there are some people who’d argue that my disproportionate violence is useful in order to deter future attacks (memo to those people: we live in a society, actually). But I think that most disinterested observers would agree that my actions went well beyond reasonable self-defense, and ultimately I’m the one in the wrong.

Finally, maybe after I bat the rock away with my briefcase, I press a switch on the handle, which causes the shell of it to drop away and reveal a submachine gun, like in gangster movies, and I spray the street with bullets indiscriminately, wounding and killing a dozen people, probably including you. And then, because I did recognize you after all and I know that the rickety tenement building just down the block is where you and your family moved to, I use the built-in launcher on the gun to fire a high-explosive grenade that critically damages the structure and causes the entire apartment building to collapse, killing and maiming dozens more people who weren’t even aware anything was happening.

That last one really doesn’t seem like “self-defense” anymore, now does it?

I miss my bar, Pt. II: A year of this

It’s the Ides of March (by the way, check out Dessa’s Ides project — a new single each 15th, for the first six months of the year — so far “Rome”, “Bombs Away”, and today’s drop, “Life on Land”) and the weekend was full of musings about the anniversary of the pandemic “becoming real” for most Americans. Here’s mine.

A year ago this just-past Saturday was Friday, March 13th, 2020. That was the last time I sat and drank a beer at a bar, chatting with the bartenders and fellow patrons, a weekly social activity I feel the lack of very keenly; over the summer I did occasionally go back to have a pint at the outdoor tables one of my regular spots set up, but it’s not the same. I haven’t been to my other regular joint at all, save to pick up a to-go Easter dinner last year.

A year ago Sunday, on Saturday, March 14th, 2020, was the last time I had a professional haircut. I bought some cheap electric clippers and with my partner’s assistance have been able to manage an adequate job, especially since hardly anyone sees me without a bulky headset on anymore, anyway.

Daylight Saving Time also just kicked in over the weekend, so I’m in that awkward period of adjusting to the missing hour. (My Senator is trying to do something about that, at least.) I’ll spend the rest of my life, I guess, adjusting to this missing year, and I know I’m one of the luckiest ones — I’m only missing the year, not my health, not any loved ones. I have friends who did get COVID, and who are still unsure whether or how badly or how permanently they’ll have any of the long-term symptoms that seem commonly associated with the disease, but all of them survived it. Over half a million in the US (well over, as the official tallies are known to be drastic undercounts) did not, mainly because of the actions of the federal and state governments over the course of 2020.

How, as a society, do we recover from something like this? “Carefully,” as the dad-joke goes, I suppose, but we won’t even fully understand all the harms we’ve suffered for years, if ever. Trauma can settle, like varicella zoster in the nerves of the spine, where we don’t really notice it, and produce unexpected effects long after the event.

I’m not going anywhere with this, I don’t have a conclusion, other than “things didn’t have to be this way,” but that’s true of everything. It just seemed worthwhile to mark the anniversary of my Last Normal Day.

[Update: I failed to link to Emily Hauser’s vital pieces, from October and from February, which get at this issue far better than I can. They say the worst thing a movie can do is remind you of a better movie you could be watching instead, and Emily’s a better writer than I am, but I didn’t link to her until the end of the post, so you had to read my thing anyway. So there!]

I miss my bar

Well, lots of us do, what with the ongoing Panasonic. But also, I recently encountered a very clever website called I Miss My Bar, which is a very simple idea, cleanly executed: several toggleable and volume-adjustable channels of distinct sorts of bar-sounds ambience (conversations, the clink of glasses, street noises outside, rain on the windows) plus an embedded Spotify playlist of the sort of music a bar might be playing. You toggle the different sounds on or off, and adjust their relative volumes, to get a mix that approximates the background noise of your own favorite local spot, and it’s really surprisingly soothing.

It got me thinking, somehow, about Bernband and about Shamus Young’s Pixel City, and about the good old days of fanciful WinAmp audio visualizers like MilkDrop. I have an HDMI cable running from my desktop to the office TV, which I usually use to watch games on WNBA League Pass, but I can also put a browser window pointed to I Miss My Bar over on the TV and have its ambient audio piped through the attached Sonos; but then the screen itself is just showing the static web page.

It would be nice to have a more appropriate, and more dynamic, visual on the TV to go with those sounds.

More on that later, maybe.

Shtory update; also, audio

Sometimes things take longer, but also sometimes I get distracted.

Well, I said “by the end of the month,” but technically I didn’t say which month.

Anyway I’m continuing to work on Shtory. I’ve had my usual struggle to balance “drilling down into tiny details instead of looking at the whole picture” with “drawing high-level block diagrams and blithely assuming the implementation will be trivial” and also with “just plunging ahead writing code without much plan, in the hopes that it will somehow come together.”

I’ve realized I need to add join and quit commands, and that I need to try to get all this PlantUML/Graphviz business working, and sort out the VSCode plugin situation, so that I can write myself out some sequence diagrams for how things are supposed to communicate over the sockets.

Also, because who can just keep their attention on one project at a time, I’ve gotten interested in DIY audio electronics — specifically guitar amps, which I dabbled in about a million years ago, and associated stuff. I used to hang out on the Solid State Guitar hobbyist forums, and I got an email recently that the guy who runs them had launched a Kickstarter for a 9V-battery amp kit of his own design, based, like my previous efforts, on the venerable and ubiquitous LM386 amplifier IC. The “Honey” amp kit has beaten its funding goal, so I’m looking forward to receiving my kit once those get shipped out; and in the meantime it’s stirred up a bunch of ideas from the dusty corners of my brain.

The first one is that I should repair the old Ruby circuit I housed in that Balvenie packing tube, and the second one is that I should actually do something with the components I still have lying around — including a pretty nice 10″ Jensen speaker, a big transformer, and an LM3886 chip —that I once meant to build a ~40-watt amp from.

The third one is that I could build a cabinet to house that speaker — quarter sheet of 1/2″ plywood with a nice hardwood veneer, splined miter corner joints with internal corner braces, 14″x14″ face plus 2″ high instrument panel, 8″ deep, yes I’ve already sketched out the cut list — but wire the speaker to a jack, and use the combo cab as a modular platform for trying out different amplifier circuits with different power supplies, features, etc. Even the little ~1/2-watt Ruby can drive a proper full-size speaker, so as long as all the amp circuits are designed for an 8Ω speaker (and don’t put out more than 50W) that should pose no problem. I’d also like to try building another Ruby or similar design, but add in some extras like an effects loop or two, the recommended bass-boost circuitry (perhaps with a bypass switch), a headphone jack, etc. Ideally I could design the cabinet so that swapping in my original Ruby board, the Honey, such a modified Ruby, or even the big LM3886-based design if I ever get around to making that work, would be quick and easy.

“But Scott,” you might ask, “are you actually any good at playing guitar?”

Ha! You’re funny. No, of course I’m not.

Shtory: update

Work on Shtory continues, but has been a bit slow. The first three weeks of January were a pretty wild year, what with the fascist coup attempt which nearly resulted in members of Congress being lynched, and in the end just barely managing to keep some semblance of a representative democracy intact long enough that now we have a chance to actually improve things. So it was a little hard to concentrate for a while there.

That said, I still expect to have Shtory up to nearly-MVP-level functionality this week, and “ready enough” to put up on github by the end of the month.

The tentative feature list for the V1 milestone is:

  • local operation only — no following remote users
  • shtory list command and lisht alias (also the default behavior of shtory with no arguments): list users with current stories, marking users with unread stories with a *
  • shtory post command and posht alias: read stdin until EOF, then post to current user’s story
  • shtory read command: read all unread posts from followed users
  • shtory read <user> command variant: read all current (read and unread) posts from specified user, whether or not current user follows them, if they have not blocked the current user
  • shtory follow <user> command: follow specified user, if user exists and has not blocked current user
  • shtory unfollow <user> command: unfollow specified user, if current user follows them
  • shtory block <user> command: block specified user from following current user or seeing their stories
  • shtory unblock <user>: remove specified user from block list, allowing them to see stories from and follow current user if they choose to

End of an era

This doesn’t fix the underlying conditions, but it does shift the possibility space.

And not a minute too soon. In many ways — often aesthetic, but also his unabashed corruption and criminality, willingness to openly embrace the extreme right in ways even Reagan wouldn’t — Trump was anomalous, but in just as many he was an inevitable outcome of what we are accustomed in the United States to calling “conservatism”. (In the GW Bush era, we used to call it “movement conservatism”, trying to draw a distinction that might always have been more spurious than we wanted it to be, between it and a more “traditional” notion of “conservatism”; but “movement conservatism” won decisively, and there is no other kind of “conservatism” anymore.)

The transfer of power doesn’t instantly fix any of the horrors Trump inflicted, but it does prevent him and his array of accomplices and sycophants — the Millers, Bannons, Barrs, Pompeos, Kushners, et al. — from continuing to worsen them, and it gets a lot of open white nationalists and would-be genocidaires out of positions of power. It doesn’t fix the underlying conditions, too many and complicatedly interrelated to get into here, but it does shift the possibility space: it’s not a given that Biden will do everything right (indeed, it’s a given that he won’t do everything right) but it’s a more realistic possibility that he can be pushed to do most things better.

Fascism isn’t dead, and the next four years will, I fear, see a lot of homegrown right-wing terrorism; there’s going to be a lot of work to do in and out of politics to try to make real progress on repairing the harms of the past and building a better future. A lot of that work will be done pushing against the Biden administration, not necessarily in cooperation with it, but it’s still a plain fact that this government will not be so resolutely opposed to progress as the previous one was, and will be more responsive to pressure toward doing the right things.

We can’t be sure of a better future, but there’s a little more reason to hope — if enough people work hard enough at it — for one than there has been for the past several years. That’s not nothing.

On minimum wage

No one asked for my take, but here it is anyway.

Democrats in Congress are looking to pass a $15/hr federal minimum wage as part of their first big bill when the Biden administration takes office, so naturally Online is full of Discourse about the minimum wage.

No one asked for my contribution, but, in keeping with the finest traditions of the internet, here it is anyway.

First of all, $15/hr is more than twice the current federal minimum wage, which has remained unchanged at $7.25/hr since 2009 — the longest stretch without an increase since the federal minimum hourly wage was first passed in 1938.

The previous record-holder was 9 years, from the 1981-01-01 increase to $3.35, to the 1990-04-01 increase to $3.80. In 2020 dollars, those are the equivalent of $10.03 and $7.68 respectively. (I’m using the Bureau of Labor Statistics’ CPI Inflation Calculator for all relative value figures in this post.) $3.35 in 1990 was worth the equivalent of only $2.26 back in 1981, or $6.77 in 2020; in other words, over that nine year span, someone working full-time — that is, 40 hours a week, with two weeks off a year (that should also be reconsidered, we should consider a 20- or 30-hour week the “full time” standard and organize our society accordingly, but that’s a whole other argument) — at minimum wage went from making the 2020 equivalent of about $20,000 a year to about $13,500 on 1990-03-31. Then the next day, our hypothetical worker got an oh-so-generous raise, of about $1800/yr in 2020 dollars.

The careful reader will have noticed that one thing that happened in between those two minimum wage increases was the entirety of the 1980s, and all of the economic, societal, and moral damage that the Reagan era did to the United States. Indeed, if you look at the 2020 equivalent minimum wage over time, there are two very distinct eras: from $1.00 ($9.72) in 1956 — I’ll use the “nominal (2020 equivalent)” convention from here on, to save typing — to breaking $10 at $2.00 ($10.61) in 1963, a high of $1.60 ($12.19) in 1968, through to the 1981 increase to $3.35 ($10.03); then a sharp drop in the neoliberal ’90s, and hovering in about the $7.50–$8.50 (in 2020 dollars) range ever since.

If our worker starts a full-time minimum wage job on January 1st, 1979, and works 2,000 hours a year without fail for 42 years, bringing them up to today, their pay has declined from $5,800 ($22,120) a year to $14,500 in current dollars. Over approximately the same period, median rent in the US has gone from $308 ($1031) in 1980, to $600 ($1226) in 1990, to $1064 ($1287) in 2009 when the minimum wage was last increased, to $1588 ($1669) in 2018.

YearAnnual PayAnnual RentRent as % of Pay
1980$20,760$12,37259.6%
1990$15,360$14,71295.8%
2000$15,900$15,57697.9%
2010$17,440$15,54089.1%
2018$15,240$20,028131.4%
Annual pay at minimum wage vs. median annual rent, per the sources linked in this post

Obviously it’s been some four decades since it was even remotely possible to live on a single full-time minimum wage job without other ways of generating income or reducing costs. Indeed, even an increase to $15/hr — $30,000 at full time — would only return minimum-wage workers to approximately the 1980 norm of spending “just” two-thirds of their pay on rent.

A quick note here that opponents of raising the minimum wage like to insist that it’s “not meant to be a living wage,” that it’s supposed to be for “starter jobs” for teens who still live with their parents, etc. But this is an absolutely ahistorical claim in the first place — at the time the original Fair Labor Standards Act was passed in 1938, it was understood to establish a wage standard that would support a “minimum standard of living necessary for health, efficiency and general well-being, without substantially curtailing employment” — and wouldn’t be morally acceptable even if it were true, because the plan fact is that millions of people who are not dependent teens supported by their parents do, in fact, work minimum-wage jobs. This is all the time I’ll spend on that garbage argument.

So ultimately my position is that passing the biggest minimum wage increase we can as soon as we can is great, and if that means the increase is only to $15/hr in order to get a bill passed in Biden’s first hundred days, well, that’s fine. It’s a lot better than not passing an increase or taking longer to pass one, and it’ll help a lot of people, but it’s also not enough. (I believe I read, though I don’t currently have a source to link, that the bill would also close the loophole that allows employers to pay disabled people less than minimum wage, which is very good if true; I don’t know whether it would eliminate or even change the tipped minimum wage, which is also something that really needs to be done, because that’s a major vehicle for wage theft.)

The thing is, the government has data on various costs of living around the country. If someone asked me what the minimum wage should be, I’d say: it should be automatically set every January 1st to the higher of 1) whatever it currently is, or 2)

let r1r10 be the median rent in the most recent year for which data is available, in the 10 largest cities in the country
then let r be the mean of r1r10 (r1 + r2 + … + r10) ÷ 10
then let y be r × 12 to give the mean annual rent
then let s be y × 3 to give an annual income high enough to pay that rent and still have a decent standard of living
then let w be s ÷ (40 × 50) for full-time employment, giving an hourly wage over a year of 40-hour weeks with two weeks off.

If we assume the median rent figures above are close enough to current to substitute for r, instead of hunting down the individual components of that mean and calculating it, then we have r = $1669, y = $20,028, s = $60,084, and w = $30.04/hr is our new minimum wage.

So $15/hr is a big improvement, but it’s literally only halfway there, and unless the law is changed to incorporate a formula (maybe like mine, though mine is very off-the-cuff) for automatically adjusting it on a regular basis (maybe every year, maybe every two or five years; I think more than five years without an adjustment is clearly too long), even raising it to the $30/hr it should currently be would only be good enough temporarily.

New project: Shtory

Nothing’s funnier than a joke about something people have long since stopped talking about. Introducing shtory: stories, for the Unix shell. You’re welcome, and I’m sorry.

First Snapchat introduced its “stories” feature as a broadcast alternative to its original model of sending self-destructing snaps directly to individual users; then Facebook was rebuffed in trying to buy Snapchat and Mark Zuckerberg directed Instagram to reproduce an identical “stories” feature in Instagram, prompting all kinds of jokes about what software would have “stories” next.

from Know Your Meme, a photoshopped image of Microsoft Excel with "stories" — a row of usernames and icons between the toolbars and the spreadsheet proper, just like in Snapchat and Instagram.
Excel, perhaps

Then in 2020, Twitter announced its — also identical — feature, this time called “Fleets” (see, like “tweets”, but they’re “fleeting”), and there was a whole new round of jokes.

In particular, Jef Poskanzer tweeted:

Tweet from Jef Poskanzer (@jefposk), November 18, 2020, reading “/bin/sh has stories now too.”, with an attached image of a shell prompt under a row of ASCII-art faces

And I thought, “heh. that’s pretty funny.”

And then I thought, “you know, I bet I could actually write a program to do that.”

And then I thought, “that’s a terrible idea.”

So, obviously I’m doing it. Introducing my new project: shtory — Snapchat/Instagram/Twitter-style stories, for the Unix shell. You’re welcome, and I’m sorry.

Everyone knows nothing’s funnier than a joke about something people have long since stopped talking about, so in keeping with that principle I hope to have an alpha of shtory ready to put up on github by about the end of the month. Ultimately the concept here isn’t very dissimilar to the traditional Unix utility finger, which displays the .plan and .project files, if any, that a user has in their home directory; but individual poshts in a shtory will, like their social media inspirations, only live for 24 hours before being automatically deleted, and I plan on implementing more granular privacy controls of the type we’re used to in modern social media, like follow lists, blocking, locked accounts, mutual-only posts, etc.

Happy New Year

Well, it’s 2021. 2020 was pretty bad! it’s gonna take a lot of work to make 2021 good, but maybe we’ll all manage it together.

One positive change I’m making is that I’ve quit Twitter. I don’t currently plan to delete my account — it’s useful to have posts here automatically linked over there, and there are a lot of people there I’d hate to lose touch with, so if the account stays accessible they can at least find out why I’m not tweeting anymore — but a couple of weeks ago Twitter notified me that it was my tenth anniversary on the site and asked if I wouldn’t like to make a commemorative tweet with a special “10” graphic they’d prepared, and I thought, well, ten years is definitely too long to be here.

I have more thoughts about the ways in which “social media” as it currently exists, and Twitter in particular (I quit Facebook about ten years ago, so I don’t have any first-hand knowledge of its current state), is bad for us as individual people and as a society, and why, and what might be better; and maybe at some point I’ll organize those into a post here. I want to work on, and write about, more software projects first, though, so look for more on that soon.

Anyway although time is largely fake, there’s something nice about choosing to mark the new year a few weeks after the solstice — it’s about when we start to actually notice that the days are getting longer. It’s been a few months of it getting darker and colder, and it will stay cold, and even get a little colder yet, for another couple, but we can see it’s starting to get a little lighter, and we know it’ll get warm again, we just have to get through the hard depths of winter.

A metaphor, if you like. Happy new year, wear a mask, don’t go to restaurants or weddings or bars or generally spend time indoors with or near people you don’t live with, get the COVID vaccine as soon as you can, don’t vote for Republicans, tip servers and delivery people extra, do what you can to help other people.

COVID, “Stimulus”, “Relief”, “Survival”, and word choice

People (or more precisely, pundits, politicians, and reporters) keep talking about the CARES act and the current deliberations in Congress as being about “a stimulus” or “stimulus checks”, etc., though some in the left wing of the Democratic party (including Reps. Ayanna Pressley and Alexandria Ocasio-Cortez) have started insisting on calling them “survival checks”, but I see hardly anyone using the term “relief”, and I wonder why that is.

On the one hand, the last time the government spent a lot of money all at once (or in a relatively short time) to try to help as many people as possible, as quickly as possible, was the ARRA under Obama, in response to the Great Recession, and that was constantly discussed as an “economic stimulus” bill, so in that way it makes some sense that the word “stimulus” would be sticky. On the other hand, “stimulus” and “relief” have different objects. You “stimulate” an economy; you give “relief” to a person. And of course you help a person “survive”.

I wonder if some politicians consider “survival” a more “marketable” word, a way to sidestep debates about moral hazard and so forth, because it implies an emergent, temporary crisis. If someone is in the path of an oncoming car, or is about to drown or fall off a roof or has been stung by a bee and needs their Epi-Pen, why, of course anyone would help them survive. If the economy — and it’s an article of faith in modern American politics, an axiom not to be questioned, that The Economy is an independent and unruly force that must be appeased at all costs — needs stimulus, why, we can pick and choose which economists we listen to about what form that stimulus should take, and decide we like the plan where it’s all tax credits and business loans.

To offer relief implies caring about people, and not just whether they’re barely existing, but whether they’re doing well. One needs relief from hardship, from suffering, from deprivation, from worry and stress. That’s an ongoing, maybe indefinite problem, and a problem of human empathy, not the abstract, imaginary machine-god of The Economy simply demanding that the numbers go up.

Right now people don’t need “stimulus”. People don’t have jobs, their bills and rents and mortages are coming due or overdue, and it’s not safe to be around other people. We’ve known since March what the right thing was to do, all along, and the government (which is to say, mainly Republicans, who control most of the veto points; maybe Democrats wouldn’t have done a good job either, but we know that many of them have at least argued for doing better, and we know the Republicans actually didn’t do the right things) has refused to. We should have had ongoing, monthly, non-means-tested, no-strings-attached relief checks to every person in the country, forgiveness of all federal student loan debt, cancellation of rents and mortgages (in the latter case, if necessary, by extending the mortgage terms by the number of months cancelled) and prohibition of eviction and foreclosure, massive federal investment into developing good practices for remote learning, even more massive investment — and worldwide collaboration — into coordinated research efforts for treatments and vaccines, federalizing production of masks and PPE if necessary, not scuppering the plan the USPS already had to deliver masks to everyone, and mobilizing the National Guard to distribute supplies, food, and medicine all over the country, to make sure everyone could safely and comfortably stay home until it was safe.

We didn’t do the right things, and a crisis became an ongoing, enormous catastrophe, and hundreds of thousands of people are needlessly dead—over 320,000 officially, but that’s well understood to be an undercount. If you look at general excess-death figures, and consider how many people died of COVID without getting diagnosed, and how many died of other causes because the health care system was overloaded, or because they didn’t seek enough care soon enough because they were afraid of COVID or because they’d lost their jobs and health coverage due to COVID, it’s hard not to conclude that the true number is probably already over 400,000. People don’t need “stimulus”, and they don’t need bare “survival”, they need relief.