Rob's Blog rss feed old livejournal twitter

2019 2018 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2002

December 31, 2020

Daily reminder to defund the police, the GOP is lying and undermining Democracy, and of course we need to change the law to guillotine the billionaires. (Repeat until the Boomers die and stop worshipping late stage capitalism as a religion.)

Happy new year everyone who survived 2020.

December 30, 2020

Shell lifetime rules continue to be non-obvious:

$ echo "$(x() { echo potato; }; x)"
$ x
bash: x: command not found

But I think that's because $() is a form of () and thus a subshell?

$ echo $BASHPID$(echo ' '$BASHPID)
32622 32637

Great, you can have an EXPORTED LOCAL variable:

$ funky() { local xxx=123; export xxx; env | grep xxx=; }; funky
$ echo $xxx

You can have local variables with the same name as variables from the parent context, and although you revert to them when you return from the function with the local, prefix list syntax will NOT show duplicates:

$ xxx=abc
$ func() { local xxx=123; echo 1=$xxx; echo 2=${!xx@};}; func;
$ echo 3=$xxx

Seriously, how do they make that work? Active dup killing? Marking the lower-level ones "occluded" and unmarking them? That's just obnoxious. (And I'm also going to need it so "set" can show the function list, aren't I?)

Four contexts: parse context, runtime callstack, list of active function names, and list of known (but not necessarily directly accessible) functions.

The reason the last two aren't just the same function list with an "active" flag is the lifetime and reference counting:

$ for i in a b; do i() { echo i1 $i;}; i; i() { echo i2 $i;}; i; done
i1 a
i2 a
i1 b
i2 b

Same name, different function, need to know which one we're referring to because it can be re-exported (re-asserted? re-defined?) in loops and function calls without being re-parsed...

December 29, 2020

The tennessee bomber's girlfriend reported his bomb-making activities to the police last year. The police had the woman "transported by ambulance for a psychiatric evaluation" and ignored her report. Defund the police already. (And why does CNN headline its article about that with pictures of the outgoing and incoming presidents? What do two septuagenarians have to do with local police in Tennessee being demonstrably sexist and incompetent, and of course racist because the 100% would have arrested a black guy...)

Boomers in the Pentagon are literally planning to militarily put down a rebellion by "Generation Z". (This is why everyone else is waiting for them to die of old age, Boomers and plutocrats are happy to have their mechanical wheelchairs do their fighting for them. Nothing will get better until the Boomers are gone.)

Twitter continues to periodically email that it found yet ANOTHER year-old tweet with "guillotine the billionaires" in it and LOCKED MY ACCOUNT *dramatic chord* again. (According to the last twitter archive I downloaded before they changed the format to remove the .csv file, I had 133 tweets containing the word "guillotine". None of the tweets they've managed to object to yet are in that file, because all the tweets they've found so far are newer than twitter breaking the archive format. They're really not good at this.)

Someone should introduce twitter to the concept of "punching down". I mean, clearly they _know_, but it would be nice if someone at twitter had the vocabulary to properly brag about protecting billionaires from internet commenters making them feel sad.

The problem isn't when conservatives suffer the consequences of their own actions, the problem is when everyone suffers the consequences of their actions, and the deluded senile old fogies deny any link between cause and effect, lie to everyone else, and pretend piety while ignoring what their magic book actually says.

Capitalism is trying hard to eliminate general purpose computing and replace it with a captive audience (and replace the internet's "route around damage" design with central points of failure). But then capitalism has always been terrible for creativity, here's random example du jour. The vast majority of people who benefit from capitalism have rich parents; they can afford to "take risks" because they can't lose.

Hospitals in the UK are melting down, because they're running out of doctors and nurses. Here in Austin for some reason HEB's had trouble restocking... everything for the past week. The news isn't saying "wheels coming off" but there's some ominous creaking.

The nazi propaganda technique of "the big lie" boils down to repeating a lie often enough that the people who bring up the truth can be dismissed as repetitive and boring. That's why the rest of us need to repeat the truth long past when we're sick of it.

Defunding the police extends to ICE, the TSA, and racist park rangers.

December 28, 2020

This is the best tweet of 2020. Bravo. (I'm not entirely sure why he's sort of dressed as the 5th Doctor, I'm assuming it's a time travel reference.)

You can draw a reasonably straight line from this to this, although when I waved those at Fade and Fuzzy on the household slack channel they immediately focused on this, which sadly probably isn't street legal in the USA.

I tried to look up self-driving news for Austin and found some sort of Ford internal newsletter (fomoco!) stating that their "self-driving in Austin in 2021" declaration from 2019 is still going, and although they've made no obvious progress since then (we bought two buildings, drove some cars around town, and spoke to local politicians! Woo!) they made a puff piece about themselves anyway and have at least not cancelled the program yet. So... yay? (It's a pandemic, your schedule slipping a bit is expected. The video they link to is hilariously context-free, and for some reason unlisted on youtube? ...why?)

Oh dear. I'm responsible for at least three of these. (Bash is a moving target...)

Function context specifically means function, not any other nested call context:

$ echo "$(local ll=42; echo $ll)"
bash: local: can only be used in a function

Which is kind of annoying. I want to use generic infrastructure for this.

Ok, function lifetime rules: right now sh_function 'scratch' instances store the parsed function blocks, which get cleared/freed when an executable chunk goes out of scope. (So they live for the lifetime of loops, but when you exit the loop it goes away.) This means that command line and shell script parsing work the same way, with the same lifetime rules. Stuff you type at the $ prompt gets freed as soon as it's no longer needed, so why shouldn't stuff read from shell script input?

Declaring a function kind of needs to instantiate a new sh_function instance (to store the sh_pipeline list with parsed command pipelines), but it doesn't put a name into the function namespace (if you call this name as a command, it's a shell function instead of searching the $PATH) until the function statement is _executed_. If you have a function in another function, the outer function declaration is executed but the inner one doesn't get executed until you _call_ the function...

The parsing needs to create discrete function instances, with separate sh_pipeline lists with their own allocation lifetime. If they're not assigned to a function name yet, they live within the enclosing function, but when assigned to a function name they can live beyond the original function's lifetime.

$ chicken() { potato() { hello() { echo one; }; echo two; }; echo three; }
$ chicken
$ hello
bash: hello: command not found
$ potato
$ hello
$ unset -f potato
$ hello
$ potato
bash: potato: command not found
$ chicken
$ potato

Sigh: they need to be reference counted. And I need to treat function bodies a bit like HERE documents, where there's an array of them and the zeroth entry is just the standard plumbing. In an sh_pipeline the first sh_arg entry is the command line, and the later ones are HERE documents, with one line per entry in arg->v[]. Now I need an array of sh_pipeline entries, one per function, nesting arbitrarily deep.

The question is, how do I associate the function() declaration in question with the relevant pipeline[] entry? For HERE documents I just count along as I go, with the consumer iterating through the same way the parser did and the count matching. (Either way, this is the third HERE document...) I guess functions can do that too? That's a lot to rewrite...

Having pl2str spit this back _out_ for marshalling into nommu subshell context is going to suck. I haven't even implemented support for HERE documents in that yet, now I need pl2str to accept an _array_ of pipelines so it can handle nested function declarations...

December 27, 2020

Sigh. Japan's going back into lockdown on January 3, if I'm flying back I might have to do it before then. (Jeff thinks I shouldn't, he can't make it back there before then so I'd be alone in the Hello Office. Mike and Arakawa and so on all have their own offices on the far side of Shibuya so don't get to Asakusa much.)

I can't say I'm surprised. Half my worry about returning was that the USA's covid response was still a gigantic shitshow. And once a vaccine existed, Japan was likely to start requiring vaccination as a condition of return. But Japan apparently has the new UK strain which has driven their R value above one despite near-universal masking. (Yeah with some dicknosing when I was there, but it's actually an interesting social signal, you can immediately tell "this guy is an asshole" at a _glance_. Saves time. I reminded Fade to order me some of the "it goes over your nose" masks, but will they get here in time if I'm leaving? Am I leaving, or am I stuck here again through... what, August? No idea. Of course 2021 is as full of uncertainty as 2020, it's gonna be like this until enough Boomers die for the survivors to dismantle capitalism and start addressing climate change.)

Twitter has now emailed me 7 times since tuesday finding more of basically the same tweet, each time sending the same form letter saying my account has been freshly locked (implying that locking it on tuesday didn't count?) and ignoring the fact I haven't been able to post to it since October 2019 because I'm not giving them my phone number. (Not to mention ignoring the validity of the political position, but it's a private platform and they can require all posts to be in sanskrit if they want to.) I'm pretty sure Twitter is trying to do the "good people on both sides" thing by declaring complaints about plutocracy equally offensive to the racist kids-in-cages nazi brigades they ignored forever. If twitter has to take out one, they're 100% going to take out the other because there can't POSSIBLY be a right side to this, can there? Not according to twitter there can't.

Is it any wonder why I argue for changing the law so offensive accumulations of capital become a capital offense (guilloting the billionaires with full due process of law as a proper symbolic repudiation and statement of what we as a society will no longer allow, just like kings centuries ago) when lawyers are literally saying the GOP just "came close to destroying democracy in America. Another term would have done it." The problem isn't a political party: the crazy 27% ready to go full fascist at the drop of the hat have always been there. (Given the amount of child abuse in this country, it's not really surprising some people grow up wanting to hurt and dominate.)

The part that's new is Reagan's tax cuts empowering greedy plutocrats happy to push children into meat grinders for money, plus the senile Boomers enabling them. Plutocracy in this country committed genocide against the native americans and kidnapped millions of people into slavery for financial gain _before_ causing a civil war where poor southerners were convinced to do "Pickett's Charge" in defense of the plantation owners. Fox News was literally founded by Richard Nixon's speechwriter with the aim of making sure another Watergate couldn't happen because any level of malfeasance could be neutralized by the GOP's version of Pravda.

Lobbying merely to TAX billionaires is not a proportionate response to this problem, but if taxing billionaires out of existence is all we get, "out of existence" is the important part. Covid is killing more people each day than 9/11 did and has already killed more US citizens than World War II did, and "long covid" aside doctors strongly suspect it has a years-later recurrence like shingles with chicken pox or post-polio syndrome so getting it even at a young age could be really bad, and the only reason the USA is NOT handling it like Australia (let alone New Zealand or Taiwan) is because the plutocrats in charge of the USA don't want that, they're profiting from the pandemic. Meanwhile covid pushes "kids in cages" and puerto rico recovery and the west coast wildfires out of the news...

Of course plutocracy brought on by late stage capitalism is not limited to any one country. Here it is in canada.

Defunding the police: wage theft is three times as big as property theft, and most military spending is wasted too (defense contractors pocketing checks and delivering garbage, it's a make-work program like Keynes' bottles of cash buried in old coal mines, just an excuse to make basic income look like a job to prop up the idea of capitalism long after it stopped making sense). To plutocrats and their GOP servants constant lying is automatic as breathing. They have entire think tanks and PR firms to smear their critics. Boomers gonna boom and Boomer Media continues to suck. Christianity is killing people, as usual. Of course Biden's going to pardon nixon again, but may do so passively. (Just ignore everything for 4 years.)

December 26, 2020

I've been trying to get glibc's ldd script to work, and I'm up to the point where it's making a function call, and ok I need to implement shell functions. And it turns out it's harder than it looks, because I've been conflating "parse stack" with "call stack". When you use "source" that increases the PARSE stack depth, but is not a function call. Bash's parse stack is actually kind of sad, because you can't have function definitions or if/else/fi blocks straddle across "source". (I was treating them as C #includes, but no. They gratuitously reset the parsing context. Kinda needlessly if you ask me but I'm sure there's some shell limitation from 1973 encysted within posix somewhere demanding this be how it be done forevermore...)

The function stack includes local variables, which the call stack does NOT participate in:

$ bash -c 'local abc=123; echo $abc'
bash: line 0: local: can only be used in a function
$ echo local abc=123 > test2
$ bash -c 'source test2'
test2: line 1: local: can only be used in a function
$ bash -c 'chicken() { source test2;echo $abc;}; chicken'

(I don't believe I've ever actually seen "the funky chicken" danced, but when asked for a function name while sleep deprived it's sort of my default with shell functions for some reason. They're inherently kinda funky...)

Meanwhile, function declarations are statements that assign a function to a function name, which appears to be a global namespace that persists past function lifetimes but parsing a function is not the same as ASSIGNING a function:

$ cat

chicken() { banana() { echo abc; }; banana; }
$ bash line 4: banana: command not found

And the namespace lifetime rules are tricksy:

$ potato() {
>   banana() { echo one; }; banana;
>   banana() { echo two; }; banana;
> }; potato; potato

But it's not NOT assigning a function either:

$ cat

chicken() {
  $1 () { echo blort; }

chicken potato
$ bash line 4: `$1': not a valid identifier line 8: potato: command not found

Oh, and function bodies are "compound commands", which isn't just { } but also:

$ echo $$ $BASHPID; chicken() (echo now $$ $BASHPID); chicken
5112 5112
now 5112 5528

Yes, it's spawning a subshell (even thought $$ always gives the top level shell's pid, not the current subshell process). The man page says you can do it for [[ ]] and ((math)) too: I don't know why.

And having toysh pretend to be bash is because things like $BASHPID say "bash" in the name. They could have had $PID be the non-broken $$ replacement, but no.

December 25, 2020

Christmas day. AFK.

December 24, 2020

Twitter emailed me again today:

Hi @landley,
Your account, @landley has been locked for violating the Twitter Rules.
Specifically for:
Violating our rules against abuse and harassment.
You may not engage in the targeted harassment of someone, or incite other people to do so. This includes wishing or hoping that someone experiences physical harm.
I look forward to the end of late stage capitalism. Guillotine the billionaires.
Please note that repeated violations may lead to a permanent suspension of your account. Proceed to Twitter now to fix the issue with your account.
Go to Twitter

I still haven't been able to post to twitter for over a year because after the first 12 hour suspension (for another "guillotine the billionaires" tweet getting retweeted and going mildly viral) they wouldn't let me back in without providing a phone number. So everything they're responding to is at least a year old.

The day before yesterday twitter sent me an identical form letter pointing at two different year-old tweets (out of the literally hundreds of repeats of that sentiment I tweeted (going back to 2012). So as far as they're concerned A) I haven't posted in a year, B) my account's been "locked" for days, but C) they're gonna lock it AGAIN for expressions of a common repeated sentiment.

My guess is the sentiment is starting to gain traction elsewhere and somebody's getting nervous. There's a twitter hashtag, and one on etsy and on instagram, and...

Merry christmas, twitter. You're still bad at being twitter.

December 23, 2020

Twitter emailed me yesterday to say the twitter account I haven't been able to use in over a year just got locked for violating their rules against "abuse and harassment", citing two old tweets: 1) "Late stage capitalism's endgame is making 100% of the 99% want to guillotine all billionaires.", and 2) "Remember: anything short of 'guillotine all billionaires' is _already_ a compromise." Oddly enough, the first page of tweets still has plenty of unredacted instances of the same sentiment their random system _hasn't_ triggered on yet. Or do they consider "guillotine all billionaires" to be a stronger statement than "guillotine the billionaires"? Either way I'm arguing for a federal death penalty for a specific category of financial malfeasance, which seems like a valid political position to me?

Billionaire is a volutary condition. Anybody can give away enough money to get down to $999 million with the stroke of a pen. Mackenzie Scott is in the process of doing that right now. She didn't singlemindedly work for decades to _become_ a billionaire by systematically refusing her employees a rightful share of the fruits of their labors, she got a large lump sum in a divorce settlement from her husband who'd done that, and immediately set about giving away the extra that will never make any difference to her personal quality of life. The only reason she's not doing it faster is she's trying to maximize the impact of her one-time gift, but if you're in a hurry you can just hand a few billion each to native american tribes who can certainly use it and empty the vault in a week. There are charities that forgive medical debt: 1/3 of all gofundme campaigns are for medical expenses, and funding ALL of those in 2018 would have cost 650 million. Student loans are a multi-trillion dollar plutocrat profit center (which is a new thing, Boomers got free college). How about university endowments to teach the humanities with full scholarships for students majoring in them? I'm sure the southern poverty law center could use all the money in the world. How about the kiva loan people (trying to avoid the "white savior" problem by giving locals access to funding for their own initiatives). House the homeless. Solar panels and batteries on every building in town-of-your-choice. People stuck in refugee camps need a LOT of money to build proper towns with hot and cold running internet access (and busloads of immigration lawyers to get there). There's never a shortage of good causes, especially since billionaires have been CAUSING most of these problems and explicitly choosing to enrich themselves rather than address them (except as a retirement hobby spending the rest of their lives buying praise and still having billions at the end of it, dance for me paeons that I might shower you with less money than I made in compound interest today).

Twitter seems worried about drive-by vigilante guillotinings, but I'm advocating for a change to federal law to make hoarding a billion dollars a capital offense punishable by guillotine with full due process. It's capital, it's offensive, put them together what do you get? Becoming a billionaire is voluntary, remaining a billionaire is voluntary, and the hoarding and distortion of power inherent in being a billionaire regularly kills people en masse. I'm condemning voluntary behavior, not identity. Billionaires should not exist. The GOP is so focused on preventing taxation, and turning any attempt to tax billionaires into a minefield punishing normal people, that I suggest we route around them and focus our lobbying efforts on a much more straightforward way to change the law to make billionaires not exist.

The GOP-controlled federal government is currently executing brown people (ignoring actual white terrorists) using a federal death penalty: not just random (yet consistently racist) cop killings but actual death sentences carried out as capital punishment on people who are imprisoned and judicially sentenced. Meanwhile the sacklers killed hundreds of thousands of people, and in response they were fined 2% of their profits from doing so. This seems backwards, and Twitter (which is owned by a billionaire) would like to punish this observation and the resulting political position... a year after I stopped posting there. (Golf claps, everyone! Golf claps!)

Of course the approved way of ending bad behavior during late stage capitalism is to cost it money, but when they take over the printing presses that gets tricky. Billionaires collectively got 15% richer this year by profiting from the pandemic. More people died than the population of St. Louis and they made out like bandits. Elizabeth Warren's 2% annual wealth tax ain't gonna do much against 15% annual growth mid-pandemic, hence the need for guillotines.

The police forces kept in place by the politicians the billionaires fund are straight up murdering people _without_ due process of law. And when mass protests calling for their defunding gain traction, the state GOP loons voting to secede are attempting to nationalize municipal police. (Into _which_ nation is unclear.) In this case, because my local city of Austin voted to reduce the police budget by 5% next year ($20 million out of $430 million, and renaming some of the spending they're still doing on the same things as "not police"), which apparently cannot be allowed to stand by doddering old white men. Meanwhile, the Trump administration wants to station federal enforcers in the city, because without goons fascists have nothing.

Here's a thread on the racist history of gun nuttery. The second amendment was a response by slaveowners to the executive branch's authority over state militias in article II of the constitution: they were worried the president could commandeer their state militias and disband them, thus ending slavery without first having to fight a war pitting federal troops against those state militias. The second amendment was slaveholders going "oh no yah can't take mah propurty", which was conclusively proven wrong in 1865 and yet we're still stuck with the fallout from the 3/5 compromise (senate, electoral college, etc).

Meanwhile Good Cop just allowed copyright infringement to become a felony. (Nancy Pelosi turns 81 on March 26.) Boomers have also doubled the bankruptcy-immune indentured servitude of student debt over the past decade. Yes to conservatives lying is like breathing, Bad Cop is Bad and must be opposed, but Nancy and Chuck are too old. The GOP wants land to vote because half the US population lives in less than 5% of the counties. And on the way out, the Resident is trying to pardon MBS for killing Kashoggi, because of course he is.

December 22, 2020

Here's Linus Torvalds saying (last year) that C is still the best language for interacting with hardware. (C++ is not C, that's a marketing lie from the C++ people trying to steal C's thunder. Here's a 2017 video on Why C is so influential.)

Blah, I keep lying down for what I THINK will be a nap as the sun goes down and sleeping through the night, which means I don't get to go out to the table and program. At a guess, I'm REALLY stressed in a way I'm not letting myself know about. (And also still kinda sick from whatever lurgy I picked up flying back here. Yeah I had my mask on the whole time but drank the water in vancouver and denver. Basic anti-covid precautions are not a clean room against all bacteria.)

The guys seem to have meant the "or else" as some sort of preemptive incentive to comply? As in they've emailed me twice about installing skype on my laptop since I accepted the "else" and told them I was sorry it hadn't worked out? I haven't replied to either. My initial agreement to be interviewed assumed it was something they could do in a few days (yeah, my bad), and months later when they moved the goalposts again I took them up on THEIR offer to walk away.

I admit if they hadn't included an or-else clause in a volunteer context I wouldn't just have been willing to chase the moving goalposts a bit further, I'd have felt obligated to. If I promised them something or owe them something (such as content for them to attach advertising to and make money on) I should make good on it. But the "or else" coming from their end absolved me of that: canceling the interview was their idea. And I didn't leave them in the lurch, they had a week and a half to find a replacement, replying promptly made their "or else" easier for them to implement.

Even when I DO have actual time and effort invested in a project, my response to "you know that volunteer work you've happily been doing for some time? We will only let you continue to do it under these conditions..." has always been to stop volunteering there. I walked away from BusyBox when "you MUST move to GPLv3" turned into "even after that mess you MUST praise me for work you were unaware I'd ever done and can prove is no longer being used in the project". I haven't been back to Penguicon since 2008 so Mr. Penguicon could take retroactive credit for having created it, or whatever was going on there. I hardly ever post on linux-kernel anymore now that it's a maze of bureaucratic procedures in triplicate. I stopped volunteering for habitat for humanity in something like 2002 when they objected to the flip-flops I'd always worn as not good enough to be onsite anymore (left quietly without fuss, never came back).

There's a theme here. My todo list runneth over and whatever I was volunteering for can recruit a replacement for me from a population of 7 billion. They have every right to decide not-me, and when they do my obligation to them is to get out of their way and let them get to their proposed stable not-me situation as cleanly and expeditiously as possible, giving us all closure. Busybox and Penguicon were both fine last I checked, and the other two examples hardly noticed I was there in the first place.

Maybe it's not healthy behavior. There's probably some of that "no means no" scar tissue in there, and I know I have an allergic reaction to codependent enabling. I'm not a great negotiator because I smile and nod until it's time to leave, then don't look back. It's not a negotiating position, it's an end to negotiation. I made a choice from the options you presented and moved on. Accepting a counter-offer after the fact (even "we didn't really mean what we said") would be poisoned fruit. It would mean I'm the kind of person who flounces dramatically to get my way, which I'm not comfortable with. So I have to recuse myself from the situation. I'm sorry, but I can't in good conscience...

December 21, 2020

Canada got national healthcare because of a political movement in 1933 to eradicate capitalism. There were of course the usual naysayers (who would totally have claimed to be right if they hadn't lost and been proven wrong, but that's history being written by the winners again). Specifically, the reason the socialists won is they had no interest in compromise, so the result wasn't "means tested" to death. Universal means universal, as soon as you introduce private schools and toll roads and exclude rich people from using the "for the poors" infrastructure, the program doesn't _work_ anymore. It's "divide and conquer" and the "both sides" centrists falling for it.

Today, Late Stage Capitalism is completely artificial. The problem is the need for endless "growth" always pushes things past the point of sustainability, flooding the market, squeezing blood from a stone, and so on. Things that work well can't simply keep working well, and what we do have is unequally distributed because billionaires are hoarding it. Speaking of which, here's a nice primer on why to guillotine the billionaires.

As disgusted as I am with Boomercrats and Boomer Media, the Boomerpublicans are actively evil (yes all of them).

Oh look, bank thieves bypassed multi-factor authentication by sending SMS messages. SMS is NOT SECURITY.

San Diego isn't allowed to turn off its surveilance cameras presumably because then the NSA wouldn't get the feed. (Send somebody around with a printed location list, a cherry picker, and lineman's pliers. You could INSTALL them that way...)

December 20, 2020

Nope, the twit tv people are not interviewing me on the 30th. Despite thursday's connectivity test again concluding successfully, they emailed me on friday to say they won't accept the results of their own tests because a policy they suddenly remembered 2 months in does not allow use of phones or tablets.

The topic I'd wanted to talk about was my work to help phone technology kick desktop (microcomputer) technology the rest of the way up into the same big iron server space the minicomputer and mainframe previously vanished into (now rebranded "the cloud"). Even raspberry pi and chromebook are rebadged phone tech the way "blade servers" were rebadged laptop tech. Apple and Microsoft are both manufacturing their own Arm processors now (some at Samsung's expanding 5 nm fab here in Austin) leaving Intel behind. If that conversation can only be done from a wired laptop, I'm not really interested in having it? Yes I'm GenX, but I refuse to give a linux talk ironically.

I'm also not very interested in chasing moving goalposts. I already rescheduled because they forgot I existed when one of their people left. The test on the 8th and the one on the 17th were both done with my phone connected to wifi, and we talked about that on each call. Now they've changed their mind, requiring me to plug a laptop (not phone) into a landline (not wifi) with an external microphone (mine broke in February, haven't bothered to replace it, and mail-order is completely fscked right now) and to install Microsoft's closed source binary on the laptop. I haven't even installed the Signal client on my laptop because it's too much of a pain (dependency stack) and that's got full source on github. I haven't installed the Line client either (which runs in a browser sandbox rather than as its own process) because the browser plugin can see and edit EVERY PAGE that browser visits (not just connections to line's site), which I'm not comfortable with. But I regularly use both for work, and neither is produced by Microsoft (home of the halloween documents, the 1995 "cpu tax" and 1998 "bundle a ham sandwich" antitrust trials, ballmer calling Linux a cancer, the attacks on Java, attacks on openoffice, outright theft of stacker... you don't consistently cheat for 30 years and then suddenly become trustworthy).

The guys said if I don't do this "we might have to cancel the interview", and I immediately replied "Ok. Sorry it didn't work out." They let me off the hook for something that's no fun anymore. It's not that I couldn't have jumped through the hoops (or borrowed Fuzzy's windows machine) to talk about Linux on a podcast I've never listened to... but why?

Still banging on toysh: I got set -x trace support fixed up enough to figure out that the the pl2str() function (converting parsed function structures back into a string representation) has span calculation issues. Works ok if you point it at a normal command line, but given an if/else stack or actual pipe | line it searches for the end and then doesn't use it. Oops. That would affect the nommu subshell support, and THIS is why reusing infrastructure is helpful. (And properly regression testing everything, but I have to finish implementing it all first. Can't regression test if you can't get that far. I'm designing in nommu support as I go but making it all _work_ on mmu first.)

The other thing E5ten (Ethan Sommer) pointed me at on the 18th (I think it was him? Freenode irc isn't properly archived the way the mailing list is) is that he tried to run ldd (from glibc) with toysh, and it didn't work. I knew that glibc's ldd is implemented as an environment variable in the dynamic loader but thought the ldd command they had was an ELF wrapper. Nope, it's a ~200 line shell script full of case statements in loops. (Because Ulrich DrPepper hated static linking, right.) I added case statement support fairly recently, with its unmatched parentheses and magic ;;& section terminators, and apparenlty haven't quite got all the parsing corner cases right yet. Yay reproducible test case. Oddly enough sh -c 'set -x; source /usr/bin/ldd sh' doesn't work with the Defective Annoying SHell either, but it DOES work with bash, so...

December 19, 2020

The oil trading market "has earned a reputation for persistent malfeasance that's dogged the industry for decades". So why does the finance industry keep funding them?

The GOP totally want to go full fascist takeover with tanks in the streets, they just haven't QUITE got the numbers this time around. Failing that, they want to destroy the economy, kill as many US citizens as possible, and hand over as much data to russia as possible, and steal billions while impoverishing the rest. Meanwhile, Nancy Pelosi and Chuck Schumer are a waste of oxygen. Biden can't see anything newer than about 1989, and he totally wants to pardon Nixon again (let alone McConnel). Put the squad in charge already. Boomers will never voluntarily get out of the way. (And of course the guy behind Qanon is linked to child pornography. It's the GOP: every accusation a confession.)

Elon Musk is a bigger asshole than most people realize. How the Sacklers remain free is a mystery. And of course billionaires everywhere are first in line for the vaccine.

You could call blaming algorithms you created for their decisions "blame outsourcing", but I see it as more blame laundering (like money laundering).

It's interesting that The Onion declared Eric Clapton over in 1997 (several years after he redid his most famous song as a 1/4 speed lullabye and started writing songs about heaven) and now 23 years later he's gone full-on right wing loon. (When I say "ossified into a loon" that might partly be inspired by that Onion headline.)

The Boomercrats all continue to suck in many many ways (a situation they intentionally engineered), and of course Boomer Media provides them cover. When the Boomers die, capitalism goes with them It already fails to serve most people and instead results in endless market-cornering from billionaires in need of guillotining. The Boomers are the reason megachurches are mega.

There's a theory that the next generation will be shaped by covid, specifically watching the Boomers faceplant and not trusting adults to ever do anything right. Meanwhile, Australian Boomers pass laws to silence sexual assault victims. Don't forget to defund the police.

December 18, 2020

Battery prices have fallen 88% over the past decade, and 13% from last year alone, on course to hit $100/kwh in 2024. (Then $58 in 2030 and $44 in 2035.) This is why GE cut its gas turbine business (although they've been talking it up again recently because they're looking to sell the corpse): you don't need backup generation if you have sufficient battery storage for your renewables output. Especially if you can wrap your heads around the idea that curtailment isn't a bad thing, but loss aversion is a known psychological bug in humans. Sun hitting the ground not generating electricity isn't considered a problem, sun hitting solar panels generating electricity you can't currently use and thus waste: PROBLEM!!1!one!

But the amount of sunlight that hits the earth is enormous, and the amount that hits just golf courses would meet all our current power needs, so it's TRIVIAL to install more solar than we actually need. And the amount of solar panels you need in winter is higher than the amount you need in summer, the amount you need on rainy days is higher than the amount you need on clear days, so if you install enough panels to cover the bad days you will have EXTRA on good days, and this is FINE. You're not WASTING the sunlight that was already hitting the earth. Sure, if we can have demand loads that synthesize liquid fuel or smelt aluminum or desalinate water with that extra electricity and sit idle when there isn't extra power for them to suck up, we can make use of the overflow. (At the cost of building expensive machinery that sits idle much of the time.) But NOT using the overflow is fine too, especially initially. Don't use curtailment as an excuse to stop installing solar, then complain you need something else on cloudy days when you COULD have more solar do it. Half the value of massive excesses of batteries would be addressing this PSYCHOLOGICAL problem.

Got a test from E5ten: ./sh -c 'case wow in w?W) echo ok;;& wow) echo no; esac' segfaults. And also toybox find sub -exec sh -c 'echo "$1"' -- {} ';' should not be eating the -- but should pass it on to the command? Except it is, the behavior difference is a toysh thing, not a find thing...

Sigh. Both host and toybox pkill commands aren't finding qemu-system-i386 because the short name truncates to qemu-system-i38 and I want to fix that. It's in ps.c, and glancing through that I saw that the -GgPstUu options are the same between ps and pkill so I put them in the same order at the end of the optstring, reoganized that part of their global blocks to match so it didn't matter which one you used to access them, and factored out the comma_args() calls into a parse_GgPstUu() function and with the comments I added to explain it the diffstat was 21 lines removed, 19 added. And this is uncomfortably into "more magic" territory, so I probably do NOT want to check it in.

Back in college I read not just the magic/more magic switch story, but another page with an EXPLANATION from the guy who had installed it of what electrically was going on. (Possibly using the open switch as a signal terminator because its radio characteristics between the empty contacts cancelled something out? It was a while ago.) Sadly the explanation seems to have fallen off the web long ago. These days I mirror stuff for that reason. And no, isn't enough: site goes down, new owner of domain puts up robots.txt file, erases the history from the previous owner. A couple scummy companies have done this with critics, and of course SCO pulled this with its own history during their IBM lawsuit.

The IP law theory on which I mirror stuff is it's basically no different from the google cache: I found it publicly on the web and provide a link back to the original. I have occasionally been contacted by people saying it's their thing and I do _not_ have permission to mirror it as is, at which point I delete both the mirrored version and the link. Oddly, this has never made them happy because every time they wanted me to change either what I was mirroring or the link. (Some dude who wrote... a history of solaris I think? was quite pissed I deleted his magnum opus rather than update it. I'm aware the biggest obstacle to this sort of thing is, as Neil Gaiman said, obscurity, not piracy. (He gave a long talk about this back in 2008, which unfortunately was on, just like my vanished talks at Chicago Confluence, and have thus fallen off the net. Let's see if I can dig it up... Ha! Just barely! says it redirects to a capture they don't have but if you do the wildcard search under there they have exactly one capture. Still a lovely talk. There used to be a bunch of stuff like this, Courtney Love Does the Math, Janis Ian's "the internet debacle", all the Prime Palaver articles about the Baen Free Library where he interviewed people like Mercedes Lackey about why they put books in the free library...)

Anyway, back to ps/pgrep the OTHER reason I'm reluctant to do a patch like that is I haven't got "make test_ps" regression test infrastructure, so I'd have to manually test each command line option again, and I dowanna. I need to get the tests running under mkroot so I can not just have more tests that run as root, but tests that run in a known container environment with known drivers and known processes running as known users.

And I still feel I should disentangle those 5 commands and move some of it to lib and put the rest in separate files, and this is moving in the opposite direction. (What comma_args() does is collate 3 pieces of data that are not otherwise in an obvious relationship. Possibly I could sequence all 3 and have some sort of for loop do it? Hmmm...)

December 17, 2020

Sigh. One of the burners on the stove is "high or off" now, which is apparently a thing that happens with this brand of stove, and I looked at induction cooktops but even though the original patent on the concept expired, there are new patents which tie up the concept until 2032, and that's why a new conventional electric stove is $650 but an induction stove is $2000. Because intellectual property law, and cornering the market on something that people already knew how to do 30 years ago.

Gee, when three billionaires control 70% of a country's newspaper circulation, you get brexit. Who'da thunk? Here's a study showing that "trickle down" never did, for 50 years now.

White male racism is the main source of terrorism. The unibomber, the oklahoma city bombing, pretty much every "active shooter" since before Columbine... Blaming brown people is just more white male deflection. "Oh yeah? What about HIM!?!?? Starving children in india! He started it!"

In case anyone still had a lingering impression that "classified" ever meant anything but "hiding our incompetence", this thread about decontaminating a cold war plutonium processing site should disabuse that notion. (The half-life of plutonium is 24,000 years. And of COURSE they built this 15 miles from a major city. You know how everybody says Denver's unusually high radiation is just nature? This plutonium facility had a major fire in 1957 that was kept top secret. The EPA raided the place because aircraft spotted heat plumes from their incinerator. It's barrels stacked everywhere and everything is contaminated to the point it pegs the meters and it's 15 miles from Denver. Denver is more radioactive than chernobyl and we all just smile and nod. Because this was classified.)

You know how the qanon loons are doing that "I'm not molesting children, YOU are molesting children" pearl clutching? Our entire approach to human trafficing is like that. The right wing loons know who to blame before anything even happens, and rich landowners (EXCELLENT thread, that) fund think tanks and organizations to protect them and deflect blame so they can commit the peacetime version of war crimes 24/7.

Apparently the New York Times has always sucked, going back 150 years. Meanwhile, websites get Russia's state poisoners to explain on a recorded phone call precisely how they poisoned a russian activist and hid their tracks.

The climate is unhappy. Twitter remains bad at being twitter.

December 16, 2020

Back in Austin. Slept a lot, but got an extra day because international dateline. (Basically all 36 hours of travel was still "tuesday".)

We had some good news on renewable energy this year.

The 5.10 kernel was apparently borked, but the diff is just to the md directory where RAID stuff lives. I'm not using raid in mkroot so don't have to care.

An article on "the greying of gnome" to match the perrenial greying of linux articles. Lots of argument in the comments about why development fell off so abruptly in 2012. Maybe because Gnome 3 was crap? (A lot of unwanted version transitions pushed by the devs without obvious end-user benefit shed users. Python 3 had that problem, and perl 6 eventually gave up and declared itself a new language.)

I've gotten to the point I'm saving japanese spam to try to translate at least the hiragana bits out of it. "いただきありがとうございます" is "itadaki arigato gozaimas", and since "mas" is sort of "ing" then itadakimas (the thing you say before eating) is the verb form of itadaki (we who are about to itadaki salute you), which google translate is DEEPLY unhelpful for, as usual... (I need a proper dictionary, but the ones I've seen give kanji and HOW DO YOU LOOK UP KANJI IN A _BOOK_? The answer is apparently "stroke order" which is still above my pay grade. I want "just hiragana everything" but that's apparently ambiguous because japanese writing distinguishes homonyms via kanji. In english we just go "eh, the word run has 645 different definitions and you can glork the meaning from context". I'm aware that this is not, technically speaking, fair.)

December 15, 2020

I tried to mail out a Turtle board right before catching my train to the airport, and the post office says that there are no deliveries to the USA right now due to the pandemic. (They'll deliver to canada though.) Great. How very reassuring...

Onna plane: Narita -> Vancouver -> Denver -> Austin because Jeff booked it so of course I am on air canada (which means the flight announcements are in THREE languages because french needs subsidies and legal enforcement to continue to exist in Quebec). Jeff booked it via expedia, which now requires you to log in to see your itinerary when you follow a link to your itinerary. Which is inconvenient when you weren't the one who booked the trip and don't have that login, but I guess expedia doesn't consider that a valid use case.

Remember how American was terrible on the flight here, filling every single seat and basically ignoring covid? Air Canada left the middle seats empty, but decided that the seat six inches from the lavatory should have someone sitting in it, with a constant stream of people standing next to it and a waft of chemical scent twice a minute as the door opens. Guess which seat I'm in? I can place my palm flat on the lavatory door from my seat. Six people have gone in and out since I started this paragraph. You can sing "Air Canada" to "Blame Canada".

Got very little sleep last night, but modafinil is good for jetlag.

Another reason oil companies aren't pivoting to renewables is it's not going to BECOME as big a market as fossil fuels were. If you can charge $1/gallon for all the gas you can mine and refine, then everyone spends 1/6 of their annual budget on you and you're 1/6 of the global economy. But if a replacement comes along that replaces you for 1% the cost, people don't suddenly start using 100 times as much energy. Instead most people drive the same number of miles, keep the lights on the same amount of time, keep the thermostat at the same level, and pocket the difference. Your $2 trillion industry is replaced by one earning $20 billion, which is still a healthy industry but not "4 of the top 5 companies in the Fortune 500 all do this in parallel".

That was the problem with the dot-com boom, everybody wanted to be "the next microsoft" but a mature industry is commoditized, NOT dominated by a single monopoly payer who's cornered the market and can extract monopoly rents. Ice used to be delivered regularly like milk and newspapers (see the opening scene of Frozen where people saw ice out of lakes in winter to store in insulated icehouses until summer). When people replaced their "iceboxes" with electric "refrigerators", they A) didn't need regular ice deliveries to keep food cold, B) could make their own ice cubes for beverages. They didn't replace their weekly ice bill with a refrigerator bill, they bought a refrigerator and then STOPPED PAYING FOR ICE (the electricity to run it was a tiny rounding error). The entire ice harvesting and delivery industry WENT AWAY, and yeah refrigerators are a thing but it's a sideline for companies that also make washing machines and air conditioners and garbage disposals in sinks. "Refrigerator magnate" is a pun, not a common modern plutocrat minted by the dozens.

Three hour layover in Vancouver, on the way to another layover in Denver.

An article explaining that Boomercrats are afraid. Gee, what a surprise. (It's actually quite a good article.)

Guillotine the billionaires.

IP law is used to block the right to repair. People are lobbying to change the law, but we should eliminate it.

"If this is treason, what they call loyalty is a crime" is an excellent quote.

December 14, 2020

The 5.10 kernel is out, and NONE of the patches I forwarded to Rich made it in, because Rich blew off every poke and reminder. I need to set up a git tree and submit them upstream myself, but don't want to because kernel clique.

Dear Bash:

ls nothing 2>(wc)
ls: cannot access 'nothing': No such file or directory
ls: cannot access '2/dev/fd/63': No such file or directory
    0       0       0

I am disappointed. And since I'm already treating >(wc) as a redirection rather than a variable expansion, I think I just wanna make it work properly in toysh.

The other thing set does is print out the current variables when it has no arguments, and it escapes strings that have spaces in them. It looks like "set" and @Q use almost the same dump logic, just...

$ echo ${xxx@Q}
$ set | grep xxx=

Not quite consistently. The logic of when to do it and when not to do it:

$ xxx=\'
$ set | grep xxx=
$ xxx=\\
$ set | grep xxx=

If the rule is just "contains character in need of escaping", fine. There are some kind of impressive inefficiencies in there though:

$ xxx=\'\'\'\'\'
$ echo ${xxx@Q}

But I guess I should reproduce the '' and '' at each end for the sake of compatibility? But the FUN part is:

$ xxx=\\a
$ echo $xxx
$ echo ${xxx@Q}
$ xxx=$'\a'
$ echo ${xxx@Q}
$ xxx=\\a
$ echo ${xxx@Q}
$ xxx=\\a$'\a'
$ echo ${xxx@Q}
$ set | grep '^xxx='

Great, bash is producing MULTIPLE ESCAPE CONTEXTS.

$ echo ${xxx@Q}

Can I maybe just always produce the $'blahblah' output when there's a <= space character? That can represent every output type, and doesn't require weird gearshifts. It doesn't match bash's output exactly, but isn't crazy behavior that apparently evolved randomly via bug report sans any sort of design...

December 13, 2020

We need more political cartoons about the covid numbers. Many of the people who need this information appear disinclined to read.

I've been wibbling about whether or not I should get on my plane back to Austin ever since Jeff booked it weeks ago. On the one hand, being by myself in a city where I see coworkers maybe once per week (everybody's working from home) is bad for my mental health. Ordinarily when I'm doing the ronin thing in a tiny apartment in a strange city far away from my normal support networks, I'm going into an office to see multiple coworkers 5 days/week. Here I keep being surprised by the sun going down (admittedly around 4pm) and force myself to go out either to the empty windowless office or to a Starbucks or the nice tea shop that lost lady indirectly introduced me to (neither of which involves me speaking to anybody I'm not ordering drinks from, and that through a language barrier).

On the other hand, Austin is handling the pandemic worse than most countries in Africa. There are places without running water that have lower Covid numbers as a percentage of the population. That's just EMBARASSING. (Even before Texas' attourney general, who was inidicted YEARS AGO but is somehow still in office, filed suit against other states because he didn't like how they voted.)

If I beg off today, we get full credit for rescheduling the ticket (48 hours notice basically no fee), but... reschedule it to when? Will things be better in a month? In three? The Resident only ordered enough vaccine for like 15% of the population, even that doesn't deploy in volume until the new year, and it's two doses a month apart and then ANOTHER month for it take full effect, so we're looking at March for healthcare workers to be immunized. And we don't know if it's sterilizing immunity (can you still catch a mild case and be contagious).

Fuzzy's all by herself at the house too, although she has friends she sees sometimes, and cats. If I go to Austin I'm guaranteed to see at least ONE person on a regular basis. She had coronavirus when I had it after Jury duty back in March, so even if immunity is "non-sterilizing" and I pick something up on my 3 flights through 4 airports I'm unlikely to get her sick. Fade's staying in Minnesota until summer.

December 12, 2020

I'm implementing set, which does not use standard option parsing, and I ignored the way "set +" is a NOP, but... what was bash _trying_ to accomplish?

$ set -oo posix potato
+ set -oo posix potato
bash: set: potato: invalid option name
$ set -o -x fruit
verbose        	off
vi             	off
xtrace         	on
$ echo $1
+ echo fruit

I don't understand the logic here: -o increments a counter of future arguments to parse as longopts instead of making them new positional parameters (which is just FUN from an object lifetime rules perspective but I think I've got that part sorted now), and...

$ set -o -x fruit -o walrus
verbose        	off
vi             	off
xtrace         	on
$ echo $*
+ echo fruit -o walrus
fruit -o walrus

An argument starting with - or + means the longopt counter does NOT apply to it... But the counter still TICKS DOWN? Except it DOESN'T tick down because it's still nonzero at the end triggering the longopt dump...

$ set -o +x -C -o potato
verbose        	off
vi             	off
xtrace         	on
bash: set: potato: invalid option name
$ true

Right, so bash's logic:

A) immediately dumps (and zeroes counter) when a pending -o is not satisfied by the NEXT argument.

B) disables -option parsing as soon as it has a parameter argument.

(Also, set -x makes tab completion AMAZINGLY chatty on debian...)

December 11, 2020

Remember how banning plastic straws does nothing to reduce plastic waste and is yet another attack on people with disablities? (The real culprit there is fishing nets which is part of a political fight and again solvable by guillotining billionaires.) Similarly, California's restrictions on lawn watering and toilet flushing ignore the fact that 80% of california's water goes to agriculture. In the parable of the 12 cookies the rich man takes all but one cookie from the plate and then tells the poor white man that the poor black man wants to "steal" the one remaining cookie. (Meanwhile the women roll their eyes at the mens being stupid, and are told to shut up because graaaaaah dicks are being measured, and the trophy does not get to compete in the race but must be passively awarded to the dickman who earns ownership of her through the dickman's actions in outcompeting the other mens and ONLY the other mens, graah. Yeah, science is working on fixing that problem.)

Well we've got a brand new instance of deflection-while-making-it-worse: Mastercard is making sex trafficing and conditions for sex workers worse by attacking pornhub and ignoring facebook. (Not that this is a winnable fight even conceptually. You know how 1920's prohibition of alcohol COULDN'T work because yeast is everywhere on every surface and bathtub gin was so trivial to make? How's outlawing money-for-sex going? How many centuries has it been since Victorian prudishness wasn't extreme ENOUGH and the Puritans fled overseas to burn witches and have the Shakers forbid sex entirely and die out? Don't try to STOP it, make it non-abusive. The Boomers' war on drugs didn't work, and the Boomers' octagenarian pearl-clutching about sex still being a thing now they're done with it is just SAD.)

I recently had another "how will we pay for" conversation and... no. NONE of those conversations are ever valid. Back before Boomer ballast was dragging us down the country paid for World War II from a standing start coming out of the great depression, and built NASA from nothing into a moon shot in under 10 years because we decided to (both were pre-Boomer of course: in 1969 Neil Armstrong was 34, the oldest Boomer was 23, and the average Boomer was 14; they all just watched it happen on TV but took credit for it anyway).

But the REAL reason that conversation is stupid is because the current US economy is ENTIRELY FICTICIOUS. Money is literally just numbers in computers now, the Federal Reserve injected $29 trillion of freshly-created money into the US economy after the mortgage crisis of 2008 and couldn't get inflation UP to our 2% target. (Which would have been a good thing because inflation erodes debt, it's bad for creditors but good for debtors. Inflation being TOO LOW is a problem.)

I've previously explained (with links to sources) how 80% of the population used to work on farms and now less than 2% does, and yet we don't have any more free time even though the work that 78% of the population is doing now CLEARLY isn't necessary to survival because we got along fine without it for most of recorded history. (This is not true of all countries, Russia can't feed itself nor can the UK, but the US exports a massive food surplus and our trade problems look like piles of unsold soybeans so big we haven't got storage space for them and they rot uneaten.) David Graeber's BS Jobs book explains why everybody's so busy with make-work these days, but there's more to it than that. Kings, Roman Emperors, and Egyptian Pharoahs weren't in charge because they had more money than other people, their money came FROM their power. Governments create money, when the confederacy fell confederate dollars became worthless. Governments that issue their own currency cannot run out of money, they can only cause inflation, and Japan spent 20 years trying to cause inflation and failing. Similarly, here's a long thread about how the current economy is set up to help landed white people, and about nine minutes in this video explains how billionaires have money BECAUSE they are socially important people banks cater to, and not the other way around.

As that last video link explains, banks give billionaires loans at 1% which they use to buy stuff they can then use as collateral for more loans at 1%. With inflation ABOVE 1%, the price of the asset goes up faster than the loan payments so they can borrow more on the same asset FOREVER and make a PROFIT doing so. That's why New York City real estate prices refuse to come down, and london real estate prices have squeezed out the service workers who make actually living in london tenable. No matter how bad the economy gets, asset prices going down is bad for billionaires profiting from ELOCs, and banks will inject money into the system to prevent that happening. (When governments do it they call it "quantitative easing" and "preserving asset prices" but they just mean rich people's Equity Lines Of Credit must never get margin calls because that would threaten billionaires.) The Squad has pending bills to fix some of this, but McConnell is of course blocking them all and biden won't spend political capital in either direction. (Because if there's one thing the Trump administration taught us, it's that hoarding political capital, moving slowly, never making waves, and taking your allies for granted while caring intensely what the other side thinks is the only way to get anything done. The last GOP president to completely steamroller the opposition and "welcome their hatred" was FDR.)

GOP lawmaker suffers ironic death. (I mean actively asking for it type.) I wonder how much of the "don't care about the pandemic" is because it's the Boomer Doomer which is the only way this long drawn-out national nightmare is ever going to end: when the Boomers die, not one second sooner.

The GOP is the third "not democrats" political party this country's had. The Federalists ceased to exist, the Whigs ceased to exist, and now the GOP needs to cease to exist. Yes, a political party can die. The Boomers are worshipping a dementia patient and when he dies they'll do what they did with Elvis sightings for the rest of their lives. (Elvis sightings lasted from his death in 1977 into the mid-90's and most Boomers haven't got that long.) And of course the subset of Boomers not worshipping Frontotemporal Dementia the way they worshipped Altzheimers back in the 1980's are instead behind the NEW oldest president in history who turns 80 in just under 2 years.

England's supply chains are collapsing. The current backlog for dry goods imports is delivery in late march. This isn't even brexit yet, it seems to be fallout from their antiquated ports trying to deal with an even SLIGHT amount of extra strain, plus of course half the container shipping fleet being scrapped due to china's construction-based coronavirus economic stimulus tripling the price of iron (by buying it all up while the mines and refiners are shut down) resulting in most of the cruise ships and container ships whose hulls weren't designed for slow steaming being scrapped to sell the metal. (In theory slow steaming is good because it uses less fuel. In practice global warming causes ever-stronger storms, ala "hurricanes past the letter Z", which dump cargoes so being out on the ocean longer may have other limiting factors.) TL;DR: the UK may not enjoy 2021 all that much.

Fun footnote to that last bit, of COURSE libertarians are buying one of the scrapped cruise liners to do Sealand II. Given how horrific cruise liners get even when experienced capitalist assholes are running them (and all those links are from BEFORE the pandemic), adding the je ne sais quois of libertarianism to the mix just about guarantees a full lord of the flies situation in a single digit number of months (if they ever even launch). (Sealand was an old oil platform. It couldn't easily sink. It couldn't flee and be chased. It didn't need fuel or engine maintenance or stabilizers. Storms didn't bother it much because it's bolted down. Steering it wasn't a big source of arguments, nor was blundering into someone else's jurisdiction.)

Disinformation is an industry now, the main purveyor of which is facebook (surpassing Faux News). That's why Centrists are trivially gamed. I pointed this out ten years ago because there were scholarly articles on it. Boomer Media sucking and pushing back against progress/progressives is a symptom of this, but boomercrats don't want to fix anything, they just want artificial peace and quiet that lasts until they die, at which point the world HAS ended as far as they're concerned so it doesn't matter.

Here's a thread on white people welfare, how the federal government systematically and racistly subsidizes white people, with yet another example of how white racists ignore the law when called on it. Nazis recruit, just like any cult does. You start with an IQ test and months later are blathering about thetans and other cult terminology. Twitter remains bad at being twitter. but at least it's not faceboot (which is now like working for a cigarette company was 25 years ago. It's a resume stain.

Intellectual property law needs to die with the Boomers. It's going to end in tears, because the thing about making every copyright strike a felony isn't just the jail time: you lose the right to vote, permanently. It's a GOP attempt at voter suppression of creators. You post anything online that gets any sort of reach, you may lose the ability to vote.

I hope the Florida Covid scientist who was raided and had her computers stolen gets millions in settlement money.

December 10, 2020

Why would Oratroll move to Austin? Can the corpse of their business model fester into obscurity somewhere else? (Good grief this is 15 years old now. I've been saying "dying business models explode into a cloud of intellectual property litigation" for quite a while now too. Oracle turned into a lawsuit factory for the same reason Russia turned into a troll farm: they can't feed themselves doing their old job anymore.)

I'm attempting to meet with Arakawa-san at the new office, which he's never been to. (He telecommutes, and the university where he teaches has an office for him closer to his house than we are. He went to our old office in Akihabara several times, but the new one in Asakusa is smaller and often empty thanks to Covid restrictions and travel.) We attempted to "meet at the dotour", which is a bit like trying to meet at a Starbucks or McDonalds: there's rather a lot of them and our initial attempt did not wind up with us at the same one. The other issue, which is a me thing, is Arakawa is pure japanese (not Halfu like Mike) and while it's not true that all japanese people look alike, with everybody wearing a mask, my glasses fogging up from MY mask, and me not having seem his face in a year... there have been a number of false positives while I wait.

December 9, 2020

Another aspect of yesterday's observations about embedded C programming being like designing wind-up watches is that WHEN we lose the right to repair, there could easily be legal liability attaching to anybody who dares to do hardware without authorization from one of the big monopolies. An internet version of "street legal" where you can't have electric golf carts scale up to replace gas guzzling fossil fuel cars because the layers of regulation required to set wheel on road (or packet on internet) are intentionally insurmountable forming what warren buffet called "a moat around the business' profits". This could be why The Innovators Dilemma (published 1997) mentioned the possibility of that happening but where it wound up happening is china and india, and 25 years later the USA is still 98% gas guzzlers (with one billionaire using his dot-com boom profit from paypal's IPO to spend 17 years working up to selling 368 thousand cars in 2019, which is around 2% of the 17.1 million cars sold in the USA that year and even more of a rounding error internationally.) So yeah, we can TOTALLY do the same thing to the computer industry if we try, starting with ditching C.

Speaking of car ownership, people are still trying to understand changes in the industry and getting so close while still missing completely. The new business model is "transportation as a service" (instead of waiting at the bus stop, your phone summons a driverless taxi with the touch of a button), not "let me borrow someone else's car and manually drive it, sorry about the burger wrappers and is this your purse?" where you still need a license and insurance that attaches to _you_ not to a self-driving fleet vehicle you summon with a phone app. Of course it won't happen here in the US first, we won't get regulatory approval until we're importing proven solutions from the other countries that did it first. Because mature for-profit companies are defending their turf, and that includes regulatory capture.

Can we just rephrase these headlines to say "white guy asks another white guy to invalidate black women's votes"? Of course the headlines are broken because Boomer Media is staffed by and aimed at Boomers. (Yeah yeah, #notallmen.) And the Senate is the least democratic part of the US government. (Well, least inherently democratic, anyway.)

The Boomercrats (who really suck at messaging) are still freaking out about "defund the police" because it's popular and effective (and, once explained, kind of obvious). They hate that it works, and would like the progressives to stop causing change and moving the overton window back left. (In late stage capitalism, things without sufficient funding have no right to exist. People, trees, air... This means attacking something's BUDGET is effective, because capitalism.)

Russia finally caught up to where Saudi Arabia's been for 10 years now, and is publicly trying to diversify away from oil. (something Saudi itself has completely faceplanted on because Saudi's current ruler Mwahaha Bin-Saladfork murdered or imprisoned all the domain experts in his family so he could dunning-kruger at it, and nobody seems to expect Putin to do much better, but at least a high ranking official who is not Putin has now publicly acknowledged the problem and not yet been poisoned.) Meanwhile unsold oil products continue to pile up because it's being pumped and refined faster than it's selling, and Opec+ just increased output by half a million barrels per day. (Not that it matters that much: MBS, the butcher of Saudi Arabia who murdered and arrested his way to the top, has kind of destroyed OPEC.)

Remember how the governor of Florida sent jack-booted thugs to arrest one of his critics, point guns at her children, and steal her computers? Yeah, about that, and also...

December 8, 2020

Hands up everybody who DIDN'T predict that Red Hat buying CentOS would be the end of CentOS. And apparently I'm not the only one with a 7 year time horizon...

I didn't reply to "I see that I need to up my C-foo quite a bit still" with "not a lot of call for swiss watchmakers these days" because A) responding to a compliment with anything perceived as self-denigrating is a no-no (the correct response is "thank you"), B) I'm not sure it would be perceived as "you don't need to be on my level to play, I'm doing deep-in-the-weeds specialized stuff most people don't bother with" style encouragement?

A lot of people are trying to eliminate dependence on C. I think this is stupid and self-destructive (attempting to paint "hardware abstraction layers" thick enough that hardware no longer exists as a thing to be dealt with), and I think the REAL problem is they're confusing C with C++. But I'm not exactly unbiased here? The most likely result of pivoting off C and making hardware a black box is ending right to repair, resulting in lock-in, the generation who understood how it works dying, and eventually the standard "monopoly thing collapses because it's been routed around and rendered irrelevant by commodity thing" but only after at least 50 years of pain. And/or winding up like Egypt where none of the plumbing works properly because they didn't keep track of where the pipes were buried, so sewer and water lines leak into each other (not safe to drink the water) and they're afraid to dig to install anything new. I.E. the entire Microsoft ecosystem. (Maybe it's better now, dunno. I heard about that back in college from somebody who'd been there. They've had at least two regime changes since...)

I opened the toysh can of worms again, and am once again hip deep in shell plumbing. I want toysh to work properly from initramfs, and something was getting confused by stdin/stdout/stderr not being present (no, my 4 year old patch to fix that never got applied by the kernel clique, why do you ask), so I made an init shim that opened stdin/stdout/stderr and would then exec init2, which sort of worked but the init script is throwing errors, and the logical thing to do is "set -x" which I haven't implemented. So I sat down to implement it.

First question was should I teach lib/args.c to parse "set +x", and while I _did_ do that (and give it an argument so you could call it from somewhere else than main, since the +x args switch _off_ the bits the -x args set so you'd have to set optflags to a starting value first), the answer turns out to be "no" because no "set" argument except -o ever has an argument variable (no -x=walrus or similar) and "-o history" MUST have the space (in fact you can "-oCB history" and that's "-C -B -o history") so most of the lib/args.c plumbing is irrelevant and changing it to know about this new stuff that only this uses... not a good fit. Any argument starting with - or + is all flags (and you error if you don't recognize one) and any other argument sets a positional parameter. Oh, and -o increments a counter, and dumps -o state if the counter isn't zero at the end, tests are "set -oo history potato" and "set -oo history".

I thought that "set x=y" would set an environment variable, but it turns out any non-prefixed argument that -o doesn't consume sets a positional parameter. Yes, set without arguments dumps the variable list but set x=y does not alter the variable list! </jazzhands>

So set writes new positional parameters, and the two word summary of why THAT'S a can of worms is "lifetime rules". After staring a bit I redid some of the global state to be in a linked list, because TT.arg and TT.shift and TT.lineno are part of function context and need to nest, and "source" is also essentially a function call (it resets arg and lineno). And THAT gives me a structure to add another "delete" to, so I can have objects with function lifetime. (The function's caller usually frees its arguments, but the arguments to "set" get freed when set returns so it has to copy them. Or remove them from the "delete" list they're on, which is a TODO item I'll probably have to also do here because otherwise calling "set" in a loop within a function accumulates arbitrary amounts of memory allocation. Lasting until a command returns is a natural cap on allocation size. Lasting until a function returns is not.

I thought I had to get a volatile *arg and update arg->c = 0 before setting arg->v and then arg->c to the new length, to avoid the new one being shorter and $* from trap context potentially segfaulting. BUT thinking about it some more trap context should just set a "we saw a trap" and return so the function loop can call the trap function instead of the next command. (With the current action interrupted, unblocking read and wait and such.) Trying to do anything fancy from SIGNAL context might mean dealing with a potentially small fixed-size stack.

December 7, 2020

The GOP helped cover up Russia microwaving american diplomats until they were permanently disabled and forced into early retirement. And now that it's coming out, the Boomercrats are ignoring Russia attacking the USA and focusing on disability litigation. (Because the only IMPORTANT thing is money, obviously.)

Every other country has some variant of medicare for all, and the USA itself used to have free college (these days those universities seem to have gone through a leveraged buyout and loaded up with debt), if we come out of the pandemic without fixing anything the Boomercrats are officially useless. (Except as a potted plant to keep a republican out of office, which again Boomer votes are the backbone of. Grandpa falling for all the nigerian spam emails has also fallen for all the Russian scam facebook posts. People whose mental immune system broke down getting exploited by parasites.)

Google's firing of that AI researcher has invoked the full streisand effect on the paper that struck such a nerve with Google management, which means we now know what Google's afraid of people paying attention to: AI-wannabe algorithms aren't just biased against minorities, they consume a bunch of still-carbon-based electricity (on the order of bitcoin) all in the name of profit (also like bitcoin). They did NOT want her to say that in a peer reviewed scientific journal. And of course Google's management tried to blame her for her own firing, claiming she quit and trying to give examples of her being "uppity". The 1600 engineers who signed the petition disagree at length. It's a bit like the flimsy excuses Florida's Governor used for sending police to steal the computers of one of his biggest critics. "Look what you made me do."

The GOP's definition of an election being "stolen" is that people other than white men voted. That's it. Their voter suppression tactics failed to stop the actual (easily measurable) will of the people, and the will of the people has been demographically swinging against them for decades. Note their argument has never been that losing the popular vote by multiple millions should matter, it's that they failed to game the electoral college so now they're trying to get judges to emit legal "opinions" with no basis in fact or or law (because the word is opinion), game state legislatures, and hijack the tally in DC on January 6th. The popular vote doesn't enter into it, "stolen" to them means siding with the popular vote. They're even on record calling voter registration to be theft. Other countries don't even HAVE voter registration: a functioning country already knows who its citizens are because they tax them and have pension plans for them and provide healthcare for them and so on. The voters are literally the same people we give birth certificates and driver's licenses and FDIC insured bank accounts and high school diplomas and postal mailing addresses to. Any attempt to filter out a SUBSET of them and say "only these ones can vote" is nothing BUT voter suppression. I mean hey, taxation without representation, where did that come up before?

In 2017, the 99th percentile annual earnings in the USA was $300k/year, meaning if you earn less than that "we are the 99%" applies to you too. If you've never earned that much in a year, it's never even temporarily NOT applied to you. If you consider yourself a "temporarily embarassed billionaire" because you haven't won the lottery yet, what you ARE is either an abuse victim with stockholm syndrome or a white supremacist lying (possibly to yourself) about your motives.

Charles Stross wrote an excellent two part explanation of why/how the Boomers have rejected science and the enlightenment in favor of fascism. (Rejecting "facts" which can be tested in favor of "truths" dictated by an authority.)

India just had a "general strike" participated in by 250 million people. (Meanwhile the economist has decided to compete with Douche Bank for the cringiest late-stage-capitalism take of 2020.)

Guillotine the billionaires, du jour: healthcare edition. Keep in mind how few billionaires there actually are. Less than 3000 people on a planet with 7.5 billion people means 0.0000004% of the population has distorted everyone else's lifestyle to the point of mass deaths. More people are dying every day from the pandemic than 9/11, and we're being told to just accept it. At this point NOT guillotining the billionaries is like not fighting the nazis during World War II. Just ignoring the gas chambers and letting their influence spread, because DOING something about it gets our hands dirty.

Remember, the british empire was basically "nazis 100 years earlier only they won and got to write the history books". (Before that white males committing genocide were more church sponsored than a state thing, which the church still does occasionally but not usually on a crusades/inquisition/conquistadores level, although the evangelicals would like to go back.) The USA enslaving black people and committing genocide against native americans (both for centuries and more "muted" than "fixed" today) followed in europe's footsteps. (Always ask, "are we the baddies". If so, stop doing it.)

December 6, 2020

Graduate school is working well for Fade.

There has got to be at least one class handout that's a printout of a steak-ummm twitter thread. (Find an unmet need and meet it shouldn't be such a perplexing market stratgy, but when the unmet need is "humanities education" and it's being met by a frozen meat product's social media account... Heck, "feed your head" could be their new tagline.)

Last month the Floss Weekly podcast emailied me to see if I wanted to talk about "busybox and toybox" with Doc Searls, and I said sure and out of their suggested days picked January 9th (on the theory I fly on the 15th and lose access to the quiet Hello Office). With the 9th coming up I poked them to go "hey, haven't heard from you" and it turns out the lady they delegated me to for setting it up has "moved on" and this fell through the cracks and I need to pick a new date. Let's see how December 30th goes...

Remember my recent writeup about how I'm trying to defeat Ken Thompson's trusting trust attack? Cory Doctorow just wrote his own piece about that topic.

I met an adorable japanese woman last night, who approached me as I was buying vitamin sodas from that one vending machine a dozen blocks downriver, because she'd given her taxi the wrong address and her no-pockets clubbing dress meant she didn't have her phone or wallet with her, and hadn't brought cash for two taxi rides. (She'd apparently been wandering lost for a while, it was coming up on 3am on a friday night.) I let her look up her hotel on my phone, and then walked with her the ten or so blocks there while we navigated by google maps. Her english was better than my japanese, but sadly not by much. She sells clothes. She asked what I do, and seemed impressed I'm a computer programmer. She asked my name, but I never did get hers. I'm pretty sure she was clinging to me because she was cold (not remotely dressed for the weather, and face glitter has no insulation value). Probably still a bit drunk too, although I'm not good at spotting that in people I don't know. (*shrug* What's your normal? It would have been nice if I could have figured out why she kept crying and apologizing, I suspect a cultural thing to do with asking for help.)

I left her at her hotel and went back to the apartment (a 15 minute walk by that point, it was pretty cold). I'd have given her a business card, but never refilled my wallet after the last Linux conference (which was 2019, but when packing why bring cards written in english with a US phone number to Japan?), and couldn't figure out a way to communicate "contact info" across the language barrier, and it seemed impolite to pry. Oh well. That's pretty much how I spent my 20s. (Between my parents and high school, deeply hardwired into my psyche is the conviction that the greatest gift I can give a pretty girl I don't know well is my absence. It's a step beyond "no means no" into needing explicit permission to intrude upon her awareness, which must originate unprovoked from the woman in question. It's why lesbians make bone-deep sense to me and gay men always seem like masochists or shoe fetishists or something: whatever floats your boat, good luck with that, but I do _not_ understand how anybody's in to that.)

I really need to get better at Japanese, but haven't got anybody to practice it with, and have an obvious chicken and egg problem acquiring practice partners. (And of course I found one beat-up card in a corner of the wallet when I got home, as you do.)

That was last night, and the place she had me drop her off was still pulled up in google maps when I woke up, and it's got a tea shop attached, so I walked back around sunset (which is like 4:30 at the moment) and tried programming there for a bit instead of starbucks. Very different experience: they give you a tiny tea pot and a tiny beaker of tea leaves to put in it, plus a jar of flower petals to put in when you refill it, and dried fruit to put in (the cup, not the pot) the third time.

*shrug* Don't know anybody here either, and same language barrier, but it's a quiet place to program and less corporate than starbucks. (I'm not sure who runs it, possibly some sort of theater club? It's a hostel, they have tents in the common area, $18/night. Possibly the lady's lack of money was more than just pockets? I had a 5000 yen note in my pocket I considered giving her for emergency fallback taxi next time, but again language barrier and it seemed rude if not insulting? Eh, moot point now...)

December 5, 2020

Generation X's endless ironic detachment was our way of cowering from the Boomers. If Mom and Dad found out we actually LIKED anything that they didn't, they would either berate us for it (and for being "slackers" and so on, which we embraced as an identity) or else take it from us and make it theirs (there's a Steven Universe episode about Sadie's mom doing that to her; bog standad Boomer behavior, everything is always and forever only ever about them). We mocked ourselves before they could, and refused to acknowledge actually liking anything, as the result of a culture-wide abusive relationship. "This is why we can't have nice things: because a Boomer got to them all first and peed on them to claim ownership."

Wait, Youtube is now saying "this video is only available to music premium members"? What fresh hell is youtube pulling now? Ah, they've apparently been doing it since last year. (I own this CD, back in Austin, I just haven't had a CD player hooked up to anything in forever and am still in Tokyo. Oh well, youtube broke. Moving on.)

The reason Google remains a company I can still work with isn't that its management isn't evil and stupid, it's that its employees protest and (so far) corect it. A lot. It's touch and go so far, but so's the country at the moment.

It would have been so nice if Elizabeth Warren were becoming president. Her section 230 clarifications, for example: the "safe harbor" provision is for information users post, NOT for information the PLATFORM posts (such as ads they got paid for or content they solicited). Maybe Biden can sign an executive order Warren crafts, but none of it is his idea. He's just the White Guy Driving because he'll never hand over the wheel no matter how lost he gets. Taking credit without actualy knowing where to go or how to get there. We'll see if he's the "muttering about backseat drivers pointing out he's going the wrong way" type when people (like Warren and AOC and Stacey Abrams and Ilhan Omar and that whiteboard lady) who DO know where to go and how to get there pipe up.

Ronald Reagan's loosening of antitrust regulation in the 1980's is why guillotining the billionaires is pretty much inevitable now. Pushing for incremental "reform" is a waste of time, we need abolition: Defund the police, guillotine the billionaires, and even intellectual property law is such a mess we probably have to cut the gordian knot (the prerequisite for which is, of course, basic income so creators can afford to create). This agenda is SUPPOSED to creep out grey haired old fogeys, anything they're comfortable with would not be a real change.

Defunding the police is actually quite popular, just not among Boomercrats. The police are now funding themselves by theft. The cult of Trump is a logical extension of evangelical christianity, and of course these plotlines intersect. A good trick is to replace every mention of "The Economy" with Rich People's Yacht Money.

Evangelicals are using attacks on transgender people to undermine abortion by claiming that teenagers aren't competent to start puberty blockers and therefore aren't competent to have abortions. It's the same "kid's body belongs to the parents" argument they've been making all along, but by attacking a soft target they get support from the liberal 1/3 of the Boomers. (As evidenced by Boomer Media wholeheartedly supporting it.)

Neil Gaiman, who supported the Comic Book Legal Defense Fund for years, had an excellent post "Why defend freedom of Icky Speech", explaining that Anti-whatevers always find a corner case people won't enthusiastically defend to erode the underlying principle, and use it as a precedent to attack deeper. It's what "first they came for" looks like in a legal context.

Oh look, SCIENCE about how blaming cows for global warming doesn't work. Here's a link about unexamined racism, and how entire racist organizations' job is propaganda. (Nazis recruit. That's why they need punching, not "debate". You don't get to yell "seig heil" in a crowded theatre, either.)

Sigh, this means well, but individual ownership of cars is the modern version of home milk delivery. We're moving to transportation as a service, an electric car that isn't self-driving and app-summonable is a transitional technology, like cellphones that can't tweet or watch youtube.

December 4, 2020

Jeff sent me a link to an explanation of the Fast Fourier Transform, walking people through the derivation of it. He's enough of a math guy to think a bunch of mathematical notation and mathematical terminology is likely to help me understand things. That's not my language. Math is nice but my version of "understanding" is trace the plumbing and see where the water goes.

What I don't understand (and have asked him 6 times without an answer) is why test data with a 9mhz sine wave in a 64 sample buffer is producing a signal as big as the 9mhz one at 55hz. (Is it because 64-9 = 55? It's reflecting off the SAMPLE BUFFER SIZE? What, can we only use the bottom half of the output? It's not a harmonic, 55 is 5*11, those are primes and neither of them is a 3.)

Looking for good news (after seeing Biden nominate Bernie Sanders' biggest critic to a position of power), I'm trying to parse what Biden's plans actually say. There was talk of spending money to purchase electric vehicles? But there's so much crap to filter out. Both "verbosity of this writeup" and right click -> inspect element -> delete node on the constant begathon pop-ups still on his website AFTER the election.

The "climate plan" does NOT make fun of the name of AOC's Green New Deal like Nancy Pelosi did (because it would have cost him votes), and he seems to be pledging to spend $170 billion/year on climate stuff. (The climate is turning bridges into musical instruments and it's not news. I'm not sure that's the right order of magnutide of a response? But oh well, at least it's pointed in the right direction.) As far as I can tell, there's no other actual data in that entire plan.

Let's try again with the "clean energy" plan. The first three paragraphs go "crisis/trump/covid" and then #4 is "Biden Build Back Better", alliteratively promising to turn back the clock (or possibly rebuild Joe Biden, personally, since he's 80 and could use some spackle), because of course it does. Then he promises to create Bullshit Jobs, then the plan ping-pongs between "jobs" and "coronavirus" for a while, until we finally get to a number: $2 trillion. Except where the climate plan above said $1.7 trillion over 10 years (trying to make $170 billion/year look big compared to the defense budget by giving an over-ten-years figure is like saying over the course of 66 years minimum wage adds up to a million dollars in salary). This plan says $2 trillion with NO time horizon. The climate thing said "net zero by 2050" (which is a when even the OIL companies expect it to happen anyway if we do nothing, because solar and batteries get cheaper every year), so if we assume that's the time horizon this is pledging to spend $67 billion/year. Assuming he can get it through congress, and that this is SEPERATE spending from the above climate plan's $170 billion/year... or is it just "half of that climate spending we've already promised to do will be on upgrading our energy infrastructure to emit CO2 more slowly"?

Hey Joe: why not redirect half the defense budget to protecting us from climate change? In the past 30 years terrorists have knocked down 3 buildings (2 trade center towers and the Oklahoma City bombing), but in that time hurricane Andrew tore a path across florida and Katrina flooded New Orleans and Harvey had Houston under water and another one nearly flooded the New York City subway system which is not where we expected a hurricane to be. Which is the bigger threat to the USA, brown people existing on the other side of the planet or the entire west coast being on fire for months at a time while something called "derecho" flattens Cedar Rapids and it barely makes news because "heh, weather, crazy innit"?

Continuing through some more content-free material in the same clean energy plan we have environmental justice, union jobs... because nothing says "energy plan" like a paragraph about "the Protecting the Right to Organize (PRO) Act" while "applying and strictly enforcing Davis-Bacon prevailing wage guidelines"... I believe this is the longest paragraph in this entire document. And now there's a paragraph about hiring "women and people of color"...

Ok, skip to the next section (still in the "clean energy" plan) and the "Build a modern infrastructure" part starts with "Biden will create millions of good, union jobs"... nope, he's still on about BS jobs, skip to paragraph 3... "Biden will rely on American union labor..." ok, let's just skip down to the bullet points: "Ensuring clean, safe drinking water is a right in all communities"... "Expanding broadband, or wireless broadband via 5G, to every American"... I mean great but this is the ENERGY PLAN? You're supposed to fill legislation with unrelated riders, not CAMPAIGN PLATFORMS.

Ok, next section (still in the SAME ENERGY PLAN)... He wants to create 1 million bullshit jobs in the auto industry, with no mention of self-driving or switching from individual ownership to app-summoned fleet vehicles. Instead he's promising to switch some of the 3 million vehicles in the federal fleet to electric (yay I guess?) and wants to build 500,000 charging stations for individual owners of electric cars. And yay subsidizing battery development but there are no numbers attached. Ten years to make the busses electric, I expect it'll happen on its own faster than that? Fuel economy standards mean WHAT exactly for electric cars?

Next section: CREATE MILLIONS OF JOBS oh please stop, just give us basic income already. Giving one person a job printing out forms, a second person filling out the forms in red pen, and a third person shredding the forms unread technically does create three jobs, but you're wasting people's LIVES. (And hoping the 3 people never meet and compare notes.) And now he's talking about tax incentives. "Leverage existing infrastructure and assets"... as OPPOSED TO what exactly? What would NOT doing that look like? Ok, skip some more "create 1 million jobs" until we get to...

"Launching a major, multi-year national effort to modernize our nation's schools and early learning facilities." Dude this is your ENERGY POLICY, this section has the occasional energy word sprinkled in, and the inevitable "Biden's investments will catalyze thousands of good, union jobs" but it's NOT ABOUT ENERGY. (And if you don't address the religious loons holding the texas state textbook procurement process hostage and thus affecting national textbook standards, and the ratio of administrative staff to teachers in the salary budget, NOTHING ELSE YOU DO HERE is going to matter.) Spurring "the construction of 1.5 million homes"... but if this is single family residences in the suburbs you're just making it worse, the real problem is urban NIMBY zoning preventing density increases and the resulting improved efficiency of infrastructure.

Right, next section (still the energy policy plan): investment in clean energy innovation with $400 billion procurement of batteries and electric vehicles attached to those batteries is great, but isn't this just counting that 3 million vehicle federal fleet twice? (Which may ALSO still be part of the climate plan's budget, and thus counting the same spending how many times over?)

Ok, creating a DARPA for energy could be good, what's that gonna do... Oh goddess he wants miniature nuclear reactors everywhere, PLEASE DO NOT DO THAT. (Random white incel terrorist du jour who wants to shoot up a strip mall because women have better things to do than admire his pee-pee should NOT be able to get his hands on nuclear waste.) And Biden wants to make hydrogen to attack the ozone layer (it's as bad as CFCs and leaks out of everything because the molecule is so tiny). How is "Strengthen land-grant universities, Historically Black Colleges and Universities (HBCUs), and other minority serving institutions (MSIs)" part of your ENERGY POLICY?

Next up the farm part (still of his energy policy)... is about jobs. Dude, just put Sarah Taber in charge of this, I don't believe you have any clue what would help here and "Pursuing smarter pro-worker and pro-family-farmer trade policies" ain't it (and again, ENERGY POLICY). And when you say "investing in diverse farmers" you don't mean giving land back to native americans, do you? Of course you don't. Oh well, it's nice you want to belatedly push back against the racism that's driven brown people off their land so white people could steal it all, but I'm not sure how it's part of your energy policy. (You gonna break up Monsanto and stop the patented seeds that are only sold as sterile hybrids? Fix John Deere's attacks on right to repair in tractors? No of course you aren't.) Yay protections for farm workers but that is a CAN OF WORMS and again, ask Sarah Taber to explain it to you. Oh hey, a mention of tribal communities halfway through a long list of buzzwords, occuring once in passing in a list of minorities near the end of the section. And again "funds for replacing and remediating lead service lines and lead paint in households, child care centers, and schools in order to ensure all communities have access to safe drinking water and wastewater infrastructure" is great but EN-ER-GY-POL-I-CY and it's 95% likely Flint's still going to have undrinkable water 4 years from now please please prove me wrong on that one. I'm all for holding polluters accountable but that would have been in your CLIMATE plan, and if you're not going to guillotine a single billionaire who profited from this stuff, your version of accountable is fines which as John Rogers often says, "A fine is a price." A company that makes $100 billion off a behavior is happy to pay $0.02 billion to the federal government as the cost of doing business. (He's also fond of saying it's never over until white men are punished for it, and he's RIGHT.)

Sigh. I went into this looking for good news (even numbered day's blog entry). I am fully willing to believe Biden's pacemaker is (mostly) in the right place, but I'm not convinced he has any IDEA what success looks like. If we just stopped subsidizing the suburbs, and ended fossil fuel subsidies, that would probably accomplish more than all the plans on his website COMBINED. Not even spending new money, just STOPPING support for the status quo (and not endlessly bailing out banks and billionaires every time they stub their toe).

But that's not his plan, is it? That would have been Elizabeth Warren.

December 3, 2020

This is the most concise explanation of "modern monetary theory" I've seen so far.

On Tuesday, Nestle argued before the supreme court that they should be allowed to continue to profit from child slavery. We already knew this was one of the most evil companies on earth (despite intense competition), and is currently trying to corner the market on drinking water (while somehow managing to make the flint water crisis worse) but the child slavery angle is new. (Oh hey, the swindled podcast has a youtube channel too.)

The way Boomercrats are clutching their pearls about the phrase "defund the police" means it's WORKING. Protests work. This is what successfully moving the overton window looks like. (Here's a thread about how abolishing ICE and defunding the police turn out to be the same thing, and a short video on the topic.) Capitalists always think the answer to every problem is more capitalism, just like gun nuts think the answer is more guns. Of course, the opposite is true, but you have to give up the Boomer worldview to accept that, which they can't.

Intellectual property law is being used by corporations to stop criticism. This is what fair use is for, but going through the twitter or youtube appeals process to restore the deleted media is basically impossible for civilians without spare thousands of dollars to spend on lawyers, and by the time it gets resolved all the eyeballs have gone past already. I admit there are positive uses for IP law and it's tempting to try to split that hair, but "ideas are property" is pure capitalism. (The 14th amendment decided that prison labor was a positive use for slavery, and capitalists drove a truck through that one pretty quickly. Don't try to use the Ring against Sauron, it never ends well. The tools of plutocracy will never dismantle the McMansion.)

Why does christianity still get to lecture people about morality? (P.S.Thoughts and prayers. And the easy way to pass a rich man through the eye of a needle involves a blender.)

Every accusation a confession, the voter fraud in Georgia is coming from inside the GOP.

December 2, 2020

I just tried to send email to a co-worker with the .zip file for the windows 10 driver for the new USB hardware (which we got from a vendor), and gmail's smtp refused the email with a pop-up saying "this attachment may pose a security hazard". What the...? GOOGLE, IT IS NONE OF YOUR BUSINESS WHAT IS _IN_ THE EMAIL I SEND FROM MY ACCOUNT, YOUR SPAM FILTER ON THE INCOMING STUFF IS OUT OF CONTROL AND NOW YOU'RE VETOING OUTGOING... That's it, I need to stop using gmail. It's not a "service" if it won't do what I fscking tell it to do.

Fuzzy (back in Austin) cannot afford her own car and is very interested in app summonable self-driving cars becoming available in Austin, because she could use them. Thus she's been following (and rooting for) the death of the oil industry, and when I sent her this link about exxon doing a $20 billion writedown for coronavirus (while continuing to pay out its dividend) it resulted in the following conversation on the household Slack (lightly edited for coherence):

Fuzzy: What would the strategic consequences be if Exxon stopped protecting the dividend?

Rob: The dividend is kind of Exxon's reason for existing. Did you ever read that "origin of the world's dumbest idea" article about fiduciary responsibility to shareholders? If they lower the dividend, they go directly against that. (Which is a thing that should happen, but they're not the people to do it.) It's against their core beliefs.

Fuzzy: What I mean is, is pissing off the shareholders by reducing the dividend going to slow their death down or speed it up? Pretend it’s on the table.

Rob: It would help the company but hurt the executives. They would be sacrificing their careers for the good of the company, which nobody running an oil company in 2020 would ever do. They'll probably go down with a ship and try to squeeze a golden parachute out of it.

Rob: You asked about exxon's dividend: They're looking at selling bits of the company to keep paying it. This article speculates about borrowing money to keep paying it.

Rob: The dynamic is still 1) executives want to keep their jobs more than they want the company to be healthy, 2) the oil industry hasn't got a long-term future anyway so the "health" of the company as an oil company isn't really something they can fix. And pivoting to renewables would be risky and go directly against (1) above.

Rob: It would make as much sense for Exxon to pivot to being a construction company or a shipping company as to pivot to renewables anyway. It's not what they do, completely different tech/expertise/suppliers... It's kind of like a company that makes high end pens and ink pivoting to making hard drives and network cards because "paperless office".

Fuzzy: "Luckily for Exxon, the company can still borrow at attractive rates." When I saw that line, I thought, from who? Who is stupid enough to give this futureless albatross money? The article says Bank of America has good feelings about oil. But it doesn’t say they’re giving Exxon money, just that they think other people should.

Rob: It's kicking the can down the road. If you loan them more money now, the other loans you have to them are still worth 100% on paper, and maybe you can sell them to another bank. But if you stop loaning them money, and they go bankrupt, all your other loans to them are suddenly worthless and you have to take a loss. There's a saying that when you owe the bank a million dollars the bank owns you, and when you owe the bank a billion dollars you own the bank. It reaches a point where they have to support your latest hair brain scheme to hide the bodies for a few more years. (Welcome to the world of international finance.) And then you have the periodic government bailout, like the mortgage crisis in 2008, and the dot com bust 2001, and the savings and loan crisis in 1991, and...

Fuzzy: So, when does the can run out of road? How long can they kick for?

Rob: Right now the story they're spinning is that oil demand returns to normal once the pandemic is over and then they have whatever future growth is left. By discounting solar wind and batteries as a thing, and ignoring global warming, they can plausibly talk about selling SOME oil for the rest of the lives of the 50-year-olds making lending decisions. In reality, if demand drops 20%, prices go through the floor because every producer tries to sell more to make up for lost revenue. This price crash has happened twice over the past decade, once in 2014, and again harder this year.

Fuzzy: It’s just getting harder and harder to pretend alternative energy isn’t a thing.

Rob: The fuel companies have been switching over to "natural" gas, but there's nowhere to go FROM gas. Oh they very much KNOW renewables are a thing, and they're jumping on it. Half of them have PR pages on it ala BP and Shell and so on. The problem is they're pivoting from a multi-trillion dollar niche where they're one of the top players to an emerging technology worth only a few billion per year (sell each solar panel ONCE and then what?) where they're 20 years behind their competition. And the investments they make in renewables won't pay off for 10 years, but throwing money at their existing oil infrastructure can have returns in 3 months if the stars align and the price of oil doesn't collapse again...

Rob: As with cutting the dividend, what's healthy and what feels good now are diametrically opposed. Then add in stuff like "electric vehicles replacing gas/diesel doesn't look like a 1-1 swap where you put a charger in every gas station, it looks like self-driving vehicle fleets where the new thing replaces the old using 1/10 as many vehicles that simply aren't parked 95% of the time"... They're entirely likely to invest in the wrong stuff. And they know it just enough to be nervous about making decisions. So they would very much like all change to stop and to continue to be king on top of their hill milking the existing cash cows forever. (Which was the strategy they pursued up until the pandemic hit: holding on to the status quo by their fingernails.)

Rob: Oil prices going negative knocked the "hold on by all means" regulatory/government capture strategy flat: they couldn't afford to buy/steal this election mid-pandemic, and the attempt wouldn't have been a surprise anymore. And they're JUST self-aware enough to realize that investing in rebuilding the old status quo is a waste of money. Pen poised over the checkbooks, making a sort of "eeeeeeeee" noise but not signing anything...

Rob: Right now the backbone of the oil industry is supply restrictions. The limiting factor isn't how much they can produce but how much people want to buy. But everybody and their dog want to pump more because prices are still way down from their highs, so they're making less money from the same amount of oil, and their budgets don't balance. It's really hard to invest your way out of that problem.

Fuzzy: They’re digging the hole deeper.

Rob: Yup. It's a prisoner's dilemma thing, with elements of "pandemic quarrantine lasting so long people give up" only in an economic space with no end in sight.

Rob: Heh. This article does the "subscribe to read rest of article" thing but has a video version of it at the top that isn't paywalled. For once, the video is worth existing. :)

Rob: Here's a link to just the video.

Fuzzy: I swear, the OPEC+ meeting delay article is one from several months ago with a new date stamped on.

Rob: They have a problem that's not resolving, so they go round in circles on it. Meetings about meetings.

Rob: The thing to realize watching that video is that the "price per gallon" (or natural gas equivalent) has gone way down, AND volume has gone down. They're selling less gas, AND selling it more cheaply, and that means the producers are getting WAY less money. And that's the OPEC+ problem in a nutshell, "we need to reduce unit volume to increase per-unit price" is not a clear win, but going the other way is a disaster, and each individual producer has all the incentive in the world to cheat while wanting everyone ELSE to comply. And if you saw the oil price graph in the WSJ video: oil price went from 100 to 50 in 2014, and 50 is what they fell FROM at the start of the year and haven't made it back UP to. (Today WTI is 45, brent is 47.50.)

Fuzzy: I have to remember that while 45 and 47.50 is too high, it’s still a huge improvement - well, decline. But for me, an improvement.

Rob: The OPEC+ production cuts got it back up to 45, but at significantly reduced volume from what was selling before, so it's not just a 12% reduction in revenue for producers.

Fuzzy: Someone watching the shale explosion in the US had to have considered the possibility of a future oversupply problem, right?

Rob: Oh sure. Except a lot of people thought that the world's economy gradually growing could use more and more oil forever. "If you build it, they will come". 20 years ago everybody was talking about "peak oil" (which happened in 2005 before fracking and deep water drilling, and is part of the reason gas went from $1/gallon to $3), but that was peak production. They didn't realize until 2014 that peak consumption could be a thing.

Guess what happened right BEFORE 2014? Wind power became cheaper than coal. Even though wind and solar were a tiny amount of production back then, when they became cheaper they put a cap on demand for the other stuff. People stopped investing in bigger refineries and pipelines and building new supertankers, and started spending that money installing wind farms instead. And THAT meant it was suddenly possible to pump more oil up out of the ground than you had a place to put. (It wasn't easy or a regular thing yet, but it suddenly became POSSIBLE...) Oil companies have been slowly digesting that fact ever since, but it takes a long time to sink in. Exxon has basically decided to go down with the ship. The other 5 of the top 6 have done varying levels of investment in the new thing.

Fuzzy: The most interesting part of the video for me was that it explained why cheap fossils didn’t hurt the renewables market.

Rob: It's sort of a "change of lifestyle after your first heart attack" sort of thing. They're not HAPPY about it, and they're not doing ENOUGH of it, and they're slow to form new habits...

Fuzzy: Possibly out of fear, I had let that worry me. But we’re not yet out of the stage where renewables are made with renewables. We need fossils, still, and making those cheap makes the transition faster!

Rob: Eh, renewables are made with "energy". You don't need oil or coal to smelt glass, it's just cheap to do that. Metals have been smelted in electric arc furnaces for 30 years now. Plastics come from oil, but they also come from corn...

Fuzzy: Well, yeah, though. The factory that makes panels is fueled by a natural gas power plant.

Rob: Because it's cheap.

Fuzzy: Yes!

Rob: It's a power plant. The natural gas itself does not wind up in the finished product. The limiting factor is if they want to run it at night, and run it from solar, they need batteries. Solar by itself produces full power 6-8 hours per day, and any power at all maybe 12 hours/day. A robotic assembly line costs 3x as much if you can only run it 8 hours per day instead of 24/7. That's why the current gold rush is lithium mines. And they've just started serious exploration to find new lithium deposits.

Rob: Ok, technically there are two gold rushes at the moment.

Rob: Note: Japan is the world's largest importer of natural gas and the 4th largest importer of oil. Guess why Jeff did an energy company here?

December 1, 2020

My internet brick respawned! I have broadband in the apartment again! Still leaning towards getting on the plane back to Austin half a month from now (especially since I'm likely to go through the month's bandwidth before the end of the month again if I don't), but I'm not happy with that decision and waiting to see how bad the thanksgiving superspreader surge gets in a week or two.

I totally expect GenX to get lumped in with the Boomers. Heck, it's already started. But "white men suck" doesn't stop being true just because I am one (#notallwhitemaleprogrammersintheir40s) and lets face it, we've probably earned it. I own a (heavily mortgaged) house, half of people under 30 live with their parents which means their parents can afford a place to live and they can't which cannot POSSIBLY be a matter of individual merit when it applies to HALF OF EVERYBODY. That means the SYSTEM is broken, and the "haves" are always responsible for the plight of the "have nots". The haves invent stories to claim they aren't, those stories are 100% lies.

It turns out the reason the GOP's hispanic vote was so high is the Boomercrats actively attacked prominent democratic hispanic politicians. The Boomercrats continue to behave like charlie brown with the football. Members of the last administration need to be charged with murder. And we need to be sharpening the guillotines. It's not like the other side isn't. Not that they've got a coherent strategy, or coherent anything. It's emu war: flood the zone with crap. Local michigan access TV covered republicans testifying before the Michigan state senate today, and people livetweeted it. (And yes, there is video, and footnotes.)

Dear Silicon Valley: stop it with the algorithms already. You're sorting PEOPLE here.

November 30, 2020

I've been meaning to put together a proper post-Boomer todo list for when the GOP finally collapses and takes capitalism with them, but I have so many scattered notes (including multiple previous lists) and so many people have good suggestions. And most of the stuff I previously posted on this before was on my old twitter (which I haven't been able to post to for a year). My blog has hung up on "unfinished entry so ones after it aren't posted" for a couple weeks now, I should bite the bullet and say this one won't have everything.

Obviously we need to start with energy and transportation (that blog entry has the three Tony Seba links that collectively tell a good story, but hardly mentions battery technology or microinverters). Solar panels, windmills, and batteries are getting exponentially cheaper ever year, we can not just replace all fossil fuels but have a massive energy SURPLUS letting us desalinate water and make storeable fuel and suck carbon out of the air and so on. I also did a long twitter thread on this. The fossil fuel industry is 1/6 the global economy and the original context of the resource curse (when the wealth of the ruling class doesn't come from the citizens they can just hire foreign servants and luxuries and literally exterminate the local population; even a general strike does nothing because they don't NEED you). Selling fossil fuel is the main revenue stream of Russia, without which they can't even feed themselves (which is a big reason why the soviet union collapsed in the first place) let alone make serious international trouble. The 2016 GOP asshollery was in large part regulatory capture by the fossil fuel industry (when you're 1/6 of the economy you don't replace department heads, you replacethe government), hence the CEO of Exxon being the first Secretary of State and literally the first act of the new administration being unblocking the keystone pipeline, and the reason they acted when they did (as that article explains, the three largest oil+gas producers Russia/Saudi Arabia/Exxon acting in concert) was because financiers were already considering fossil fuel infrastructure as "stranded assets". If they didn't build it RIGHT THEN it wouldn't be in use long enough to pay off the construction loans, which would accelerate the switch to alternative energy sources (wind power became the cheaper than natural gas in 2015, and was passed by solar in 2016). That's why the resource curse fossil fuel economies paniced and took control of everything they could; it didn't have to be sustainable, if you make $1.6 trillion per year every extra month you can hold on is worth another hundred million dollars. People couldn't understand what their endgame was because they didn't HAVE one: it was a doomed holding action, but each extra DAY they could hang on was worth multiple millions of dollars to them.

Transportation is another 1/6 of the global economy. Google's self-driving is a mature technology (unlike its competitors playing catch-up years later) which can make cars an app-summonable service where google maps adds a "Go" button next to "Directions" that summons a vehicle to take you there, turning when pressed into a countdown of the number of seconds until your vehicle arrives, for a flat rate monthly subscription (within your metro area) which Waymo's CEO once estimated should cost $1000/year I.E. $84/month. For that you not only replace commuting time with computing time, but eliminate car loan payments, insurance, repairs, oil changes, license, registration, speeding tickets, and the need for a parking space at either end. If the cars are electric then during the 1 million mile expected lifetime the only regular service is changing the tires and cleaning out the inside of the vehicle, and if robot arms swap out battery packs at the depot between rides so spare batteries can charge from solar panels while not in the car, they can make a HEALTHY profit on that. This also lets us tear down unnecessary highways, which has significant positive effects undoing racist engineering projects that intentionally created slums.

Food is a human right and we have no shortage of it (thanks to Norman Borlaug quadrupling the world's food production). Our current agriculture industry needs a complete rebuild because it's racist, plutocratic, and inefficient, but even before doing that we have a significant food surplus. Sarah Taber's done dozens of excellent threads on this going back years but I can't find a good index of them so here are a few from my old twitter feed but honestly just the tip of the iceberg... (Sigh, that didn't even make it out of 2018, but I'm tired of cutting and pasting.) People like her know exactly what to do here. Our current US agricultural system is SPECTACULARLY inefficient due to racist plutocracy and distorting subsidies, fixing that would have tons of positive effects.

Next up is housing: 40% of all homes are owned by Boomers (even though 69 million Boomers among 331 million americans are now only about 20.8% of the US population) and all those houses are about to change hands as those Boomers die. The real estate market is screwed up by NIMBY zoning and ELOCs, and both the 2008 mortgage crisis and 1991 savings and loan crisis were about land price bubbles (and the 1997 asian economic crisis was largely about foreign real estate investment, much of it in Hawaii and New York City). We need to let Billionaires go bust, which the banks can't stand, but this is why FDIC insures personal accounts up to 250k. Bump that up to a million for retirement accounts and have the payout be in postal banking accounts (something most other countries ALREADY DO, I use a "postbank" ATM at Family Mart here in Tokyo) and we can let the big banks go bye-bye. And yes, AOC already knows about this one.

Gun control: I've got links about this going back forever and assembled a few into a twitter thread, and there's been plenty of links since, and all that was before the rise of the for-profit Active Shooter Drill industry. The second amendment was about state militias, it didn't give individuals the right to own a gun. That was invented by the NRA and wasn't supported by the supreme court until 2008. It can go away again. The first tweet in the above twitter thread links to an excellent 3 part series the Daily Show did on Australia getting rid of its guns. (A handgun isn't going to stop a tank, airplane, cruise missile, or drone strike. And it takes away the police's stupid excuses to buy surplus military equipment left over from our endless wars and out of control military budget. Oh, cap the US military budget at twice the amount of the biggest military budget any other country spends, Eisenhower's warning about the military-industrial complex in his farewell address -- starting at 6:56 or 8:54 depending on how much context you want -- was right.)

Universal Basic Income: again, I've done a zillion twitter threads on this and multiple posts on this blog, people have done talks and books but the fundamental observation is that a shortage of work for people to do is only a PROBLEM when your culture is broken. Capitalism is not the solution ot this problem, it has BECOME the problem. (I've pointed out for years how capitalism is a mechanism for regulating scarcity and in the absence of scarcity, captitalism creates it.) To implement UBI, use the postal banking above. Give every american an account (so nobody is "unbanked") and deposit a monthly stipend into that. You can still have other bank accounts if you want, but your postal bank account is where your monthly stipend goes, and never closes. (No ATM fees, free electronic transfers to pay bills, and if it did somehow wind up overdrawn (which sounds impossible since electronic transactions get declined if the account hasn't got the money: no fees for bouncing a check both because it's not a for-profit enterprise nickel and diming you with endless fees and because we don't do CHECKS anymore, the 21st century is all electronic transactions or cash withdrawls at an ATM) then the UBI would bring it above zero again next deposit anyway. (Oh, and bring back the Sacajawea dollar coin, eliminating the dollar bill, zap the penny and instead have a $5 coin with lincoln on it, eliminating the $5 paper bill, and then add a $500 paper bill with a woman on it. Yes I know the DEA loves that large amounts of cash is heavy and bulky, doesn't stop cargo containers full of it from being shipped around (and stolen), and ending the war on some drugs is later in this list. Suck it up and do a $500 bill already, trying to eliminate cash just attacks poor people who aren't equipped to receive money because they're not a business with a card scanner.)

I personally want to completely eliminate intellectual property law, but just making it expire like it used to would probably accomplish most of it. In Charles Dickens' day patents lasted 7 years and copyrights 20, and yes he outlived many of his own copyrights but he coped long before patreon, and plenty of creators today whose copyrights will outlive them by decades do far worse. That original expiration schedule would mean this year Santana's "Smooth" and Britney Spears' "Oops I did it again" would enter the public domain, as would the movies Castaway and Erin Brockovich. This year we'd get The Sims (1.0) in the public domain, along with Majora's Mask, Diablo II, Chrono Cross, Pokemon Gold and Silver, Escape from Monkey Island, Final Fantasy IX, Tomb Raider Chronicles, American McGee's Alice... All the software written for the Commodore 64 would be in the public domain already, and most of the ROM images that MAME emulates would be legal. Lots of artists support this but their complaints or statements of support eventually tend to fall off the net leading to broken links unless you know where to look. And those old disputes tend to have lots of follow-up you can't understand without knowing the history... TL;DR modern IP law is extremely lucrative for corporations, but only works out at all for MAYBE 10% of creatives, and really only creates a few lottery winners. It predates digital distribution and internet collaboration and completely faceplants for modern forms of creativity (that THAT was before reaction videos). The whole twisted edifice should just go, replaced by basic income, with the fingerprinting mechanisms redirected to provide attribution rather than ownership.

Antitrust breakups of Faceboot and Amazon are a given. (Google's Alphabet is in some ways the company showing its belly with clear dotted lines, long ago I wrote about how antitrust breakups are usually actually highly profitable for shareholders. I have no idea what's up with's stylesheet either, the breakage is clearly ad-related so blame capitalism, as usual.)

It should be possible to revive domestic manufacturing, there are books on how other countries did it, and these two talks by Mark Blyth make a good case that the global economy regularly switches between capital running the show seeking global returns (everyone specializing with supply chains straddling the globe), and labor running the show and being domestically self-sufficient (with integrated economies that make everything themselves). And that every time the pendulum is about to swing back from capital to labor the capitalists throw a tantrum which causes a worldwide depression and ends in a big war; they have to be guillotined, shot, or bombed to force them to let go. But in terms of being able to make stuff again: CAD and 3D printing are interesting (and yes there's versions that work in metal) and rare earths actually aren't (California was the world's largest supplier until around 1998) they're just REALLY toxic to mine and refine, and we'd rather have china poison its groundwater and citizens than deal with toxins over here.

We need to raise top tax rates back to 1960 levels (AFTER guillotining current billionaires). The top tax rate was 92 percent until the Revenue Act of 1964 lowered it to 70 percent, and then Ronald Reagan lowered it to 28% (causing the current endless deficit and national debt: the graph of government debt and billionaires' assets mirror each other precisely). The tax rate went up over 90% during World War II to neuter the Gilded Age billionaires that had caused the great depression, and stayed up there because the economy worked AMAZINGLY well with billionaires neutered. (Much of the post-war boom was the lack of plutocrats cornering the market.) They dropped it to 70% because of of the Laffer Curve, the theory that since you get no revenue at either 0% tax or 100% tax (because nobody has incentive to make any money), there should be some peak rate where you get the most revenue, and the finding in that last link is you get the most revenue somewhere around a 73% tax rate. Unfortunately, the OTHER purpose the 90% tax rate served was preventing the rise of plutocratic oligarchs: you got to keep the first million dollars per year you made (adjusted for inflation), and beyond that the government took 90% of it. So instead of trying to keep money that would mostly just go to taxes, companies invested in training and research and development and upgrading their equipment and so on. Deductible expenses that let them earn more money next year. Taxes make rich people (and corporations) invest, cutting taxes lets them pocket all profits, and instead of investing they strip-mine it for short-term gains they can transfer to their own bank accounts, tax-free.

(Fortune magazine published a LOVELY article about how CEOs used to live like normal people back in 1955, which was republished in 2012 but has since gone beyond a stupid paywall and although you can fetch it out of it won't DISPLAY because of broken javascript, you basically have to right click->save as and then open it with a text editor and jump to line 313 to start reading the article. And nobody can host a fixed version of this 65 year old article because Intellectual Property Law.)

I advocate for guillotining billionaires because they've spent the past 50 years insisting that raising taxes is unrealistic. So I take them at their word: there's only about 650 billioniares in need of guillotining to reset the system. Let's do the simple thing and change the law so hoarding a billion dollars is a capital offence. It is literally impossible to earn a billion dollars through your own efforts, you MUST siphon off money from other people to do it, and this kills people. And as Dolly Parton and MacKenzie Scott and that Zappos CEO show, STAYING a billionaire is also a choice.

In addition to basic income, fixing the food supply, and fixing housing costs, the other thing we need is medicare for all. If you don't already know why, you haven't been paying attention. This is not the same thing as a public option. Voluntarily buying into healthcare is like voluntarily buying into mask wearing during a pandemic: no healthy person expects to get sick. Uninsured people showing up in emergency rooms being unable to pay should not be allowed to destabilize hospital finances. Members of the leopards-eating-faces party who never thought it would happen to them still get covered because EVERYBODY gets covered, period. Never means-test a program you want to keep, it's just a way of sabotaging programs you haven't got the political capital to kill outright. If public school was means tested the richest 1% wouldn't be _able_ to send their kids there and would create parallel infrastructure and then work to sabotage the "useless" public schools that do nothing for them but which they pay into... The reason public school still exists is we DID NOT DO THIS OBVIOUSLY STUPID THING. The WAY people destroy public services is by adding means testing layers and then spending the service's entire budget on scrutinizing people and forcing them to prove a thousand times over that they are worthy, and spending less and less on the actual benefits until they're gone. Stop falling for that trap. Universal Basic Income is universal, Medicare For All applies to all. It won't WORK otherwise. Yes, rich people get both. Rich people get social security payments too (which again is why social security STILL EXISTS). They pay the UBI back in taxes and a national health service (whatever you call it) helps everybody live longer.

The next thing we need is instant runoff voting. This is a step beyond eliminating the electoral college, this would replace our two party system (which is an artifact of "first past the post" voting). Eliminate voting registration (if they can tax you or send you a jury summons, they know who you are well enough for you to vote; you have a bank account, driver's license, cell phone, and social security number, they know who you are). Land does not vote, people do, which means the senate serves no purpose. Fix gerrymandering and voter suppression ("early voting" is normal voting, make every election last at least two weeks) and it turns out the south _isn't_ republican (just under the thumb of plutocrats who've constantly reshaped Jim Crow like an antibiotic resistant infection), which means the GOP evaporates.

We need to end the wars on drugs and sex. Didn't work with alcohol, changing WHAT drug you're doing it to doesn't improve matters. Criminalizing drug addicts just fills for-profit prisons (END THAT, fix the prison slavery loophole and let felons vote, yes from prison) and funnels money to organized crime. Sex workers are people and criminalizing what THEY do leads to sex trafficing (filling unmet demand) and means when they are abused (or "claimed" by pimps and loan sharks who control them and take most of their earnings) there's nobody they can legally turn to for help. It means they can't be regulated and tested for STDs (which exist because we don't test-and-trace to eliminate them the way we do with foodborne illnesses, due to puritanical denial of the idea that anybody's parents EVER had sex ever in history). Criminilization CAUSES most of the problems associated with both drugs and sex work.

Which brings us to defunding the police. One link for that because that interview absolutely nails it.

We need to fix education too. STEM STEM UBER ALLES gives you nazi scientists, the humanities exist for a reason and we need to teach them again. The tug-of-war in texas and california where religious loons in Texas try to buy only textbooks with no mention of evolution (because if christianity was wrong about where we came from how can they be right about where we're going to?) and California tries to push back but focuses on the parts necessary to fuel Silicon Valley (STEM STEM UBER ALLES), and the end result is you can graduate high school without ever hearing about the Trail of Tears, which is just SAD. The wheels are coming off our government because nobody's been taught history or civics or philosophy in a while now.

This is why people are so easily gamed by things like stupid metrics. Just as california agriculture blames showers and toilets for water shortages (when only ten percent of california's water is used by cities), plutocrats always hire think tanks to point the finger at somebody else for the problems they create, and they often find naieve idiots happy to don a hair shirt. I've complained before about the PETA assholes trying to blame cows for global warming when all the carbon cows eat was sucked out of the air by plants over the past year, and methane has a half life of 7 years in the atmosphere, so that CAN'T be the reason Miami is more screwed in 2030 than it was in 1980. Fossil carbon permanently increases the amount of carbon dioxide in the atmosphere, cows DO NOT DO THAT. More recently, people were freaking out that running a leafblower for 30 minutes creates more of certain types of emissions than driving a pickup truck 3800 miles. Ignoring for the moment that electric leaf blowers exist, there's no way burning a half-gallon of gasoline is going to put more carbon in the atmosphere than burning over 100 gallons of gasoline: no matter HOW you burn it, a leaf blower CANNOT emit more carbon. Any OTHER carbon emmisions are going to break down INTO carbon dioxide, the only question is how long that takes. Carbon Monoxide has a half life of 4 hours in an oxygen atmosphere, and the emissions that article was panicing about have a half life of 10 days in the atmosphere (see section

Ahem. The waves of disinformation sweeping the country need to stop. Ending Facebook and Faux News is only the start, but each has multiple guillotinable billionares behind them.

As I said, this is not a complete list. But it's a start. None of this can be seriously attempted until the Boomers die, but they get a little closer to death every day, and that's a form of progress. We should be ready when they're gone, to not just build dikes around all our cities as the water rises and the hurricanes and wildfires come, but to do positive things as well. There's a better world possible, cleansed of Boomer.

November 29, 2020

The CEO of Zappos recently died in a house fire, and people are eulogizing him as a great guy, which got me curious: was there an actual human billionaire? So I checked and nope: he kept $840 million and gave away the rest. The Dolly Parton rule still applies: good people CHOOSE not to be billionaires, and billionaires are never good people.

Sarah Taber points out the obvious reason that SNAP (what used to be called "food stamps" until it turned into a debit card) is so much more effective than food banks: we have an existing, optimized, high-volume food distribution network in this country. It's called grocery stores. Building a "separate but equal" food distribution network in parallel alongside the first one is stupid. (The internet used the phone network, trucks deliver along the same highways cars drive on, electricity and water go to homes and businesses through the same wires and pipes...) This is related to something John Maynard Keynes pointed out a hundred years ago.

It's reached the point where any time republicans are against something, whatever it is is probably worth doing. (Democrats being against it could mean anything, but republicans bothering to speak out against something immediately makes that thing worth a closer look. And of course anything they want to do should be stopped.)

Here's another book on how failure to prosecute white collar criminals leads to serial offenders and the rise of as of yet unguillotined billionaires. (A different book from the previous one. And here's a third book, all written by women I notice. Experts in parsing the behavior of abusive twats with power over them. Also, here's an excellent summary of what restorative justice actually MEANS.)

Facebook continues to suck as hard as ever.

November 28, 2020

For some reason stopped resolving a while back. (Well, it's an IP address that can't connect.) Hmmm... when I go there with web browser https fails saying it's "" but when I point it at that apt-get loops saying "ign" (ignored) on everything and retries endlessly. (The http version because devuan built apt without https support, and instead verifies signatures of the packages downloaded in plaintext, which is creepy in at least 3 ways.) The website instructions now say "", try that in /etc/apt/sources.list? And that worked. (Is it because I'm in japan? I've upgraded from here before and it worked...)

The j-core build has bus generation infrastructure to automatically glue together large chunks of circuitry. Most of it's automatic, but over the years it grew a chunk called "phase2" which is designed as an if/else staircase of individiual board types. Jeff recently had to build a bitstream for the new VPN board prototypes (which use the same FPGA as the turtle boards, but wire the various I/O devices to different pins so they need a different bitstream with different routing), and tasked me with fixing a problem he had to work around so we don't need to do it again next time.

The infrastructure that does the bus generation (soc_gen) is a giant pile of the cloture dialect of lithp running under something called Leinengen, which somehow sucks in a java library to parse VHDL. This infrastructure does some important and complicated things, and does it well, but the choice of implementation language seriously restricts the pool of people willing to touch it, and its original author isn't available to make the necessary changes by project deadline. (Plus the first time you run "make soc_gen" it, it downloads over a dozen packages into the source repo which can break if those upstream servers change and makes the build harder to run in a container. I thought it did this download per-install of leingen, but it turns out it does it per-checkout of the j2 build.)

This is why the build grew a "phase2" which postprocesses the generated files with csh calling awk scripts, bringing the total number of languages in play to 4 (not counting the bash scripts and makefiles gluing them together, or the fact it reads VHDL source to generate more VHDL glue code connecting it together; that would be 7 languages). I can't blame phase2's author for not wanting to edit the lisp/java combo, but we can't have an if/else staircase of board types outside the boards/targets directory. So either I need to teach the cloture code to do whatever this postprocessor does in a target-independent way (preferred solution), or at least MOVE it into the right directory so the board-specific stuff lives with the rest of the board-specific stuff.

My problem right NOW is I don't really undestand csh (it's not a normal shell), nor do I have much depth in awk (it's on the todo list, I need to write one for toybox so learning more here isn't a bad use of time). I also don't know nearly enough VHDL, and have no idea what the resulting code it generates is trying to accomplish at a circuitry level. Finally, phase2's author was a hardware engineer, not a programmer, and oh boy does it show.

All this is a long way of saying that today I learned the first line of a shell script can have a space between the #! and the /path. (binfmt_script.c in the kernel, which is under fs/ for some reason, reads a 256 byte buffer and parses it with a skip for both spaces and tabs before the filename.)

November 27, 2020

People picking and choosing their religion again. (Only the bits I agree with come from magic sky daddy, the rest was just made up. Why do they get tax breaks again?)

Talk of "unity" is talk of surrender (and it's abusive). They will be back and they will do it again if we let them. It's never over until white men go to jail for it, and you don't convince nazis of anything, you punch them. You never calmly debate people's right to exist. (Oh hey, remember that Nazi-friendly twitter replacement funded by the Mercers? It faceplanted harder faster than I expected.)

The Boomers running the American Medical Association and American Psychiatric Association have been derelict in their duty. Only caring about keeping the job rather than doing the job, they can't lower themselves to point out real problems. It's the medical version of Boomercrats' "don't rock the boat until we die".

We still need to defund the police. When this article points out that one cops' riot gear could have bought PPE for 31 nurses and says "the US has made its priorities clear", no, the BOOMERS have made their priorities clear. Senile lead-poisoned geezers terrified of their inevitable death are lashing out at brown people, it's a problem around the world, as Boomers cling to their tenure.

November 26, 2020

My internet brick stopped working. (It's a softbank 5G->wifi converter built around a USB battery.) Apparently after 74 gigabytes of data in a month, it throttles down to the same tiny trickle my phone gets from the "free international 2G roaming" my t-mobile plan comes with. It's enough for slack and email, but even audio podcasts only play for a few seconds then stop to buffer for about as long. And you have to pause a youtube video and come back 5 minutes later to get a minute at the lowest quality. And did you know you can only download season 1 Lucifer episodes from Netflix twice/year? It says it's a licensing thing. That's "download to have on phone", not stream. I now have broadband at the office or out at Starbucks, but not in the apartment, so I've downloaded enough to mostly fill up the phone's memory (WHY do current phones not support SD cards?) and deleted some stuff to free up space, then wanted to play japanese dialog of something familiar again...

This is another vote in favor of getting on my flight back to the states ~3 weeks from now. But I have no idea what the pandemic's gonna do between now and then, and am feeling guilt about not being a good quarrantiner. (Heck, I'm GOING TO STARBUCKS here. Not something I'd do in the states, and probably shouldn't do for 2 weeks before returning to the states. I need a social network in Japan that doesn't just STOP when my coworkers have to travel.)

Here are slightly updated instructions for how to populate a devuan root filesystem in a foreign architecture to chroot into with qemu. This is derived from the armhf install instructions but it genericizes to other architectures. (Sadly, debootstrap wants to run as root, and devuan doesn't https its repos. Between the two of them it's a bit dodgy, but...)

1) become root, install and run qemu-debootstrap (we could do fakeroot instead, but let's not go there):

sudo /bin/bash
apt-get install debootstrap qemu-user-static
qemu-debootstrap --no-check-gpg --arch=armhf beowulf $PWD/armhf \

2) tweak a couple config files to tell the new chroot not to launch daemons and where to fetch more packages from.

echo exit 101 > armhf/usr/sbin/policy-rc.d
echo deb beowulf main > \
echo deb-src beowulf main >> \

3) Chroot into it and install more packages (git and native toolchain).

chroot armhf
apt-get update
apt-get install build-essential git-core

Alas, the list of supported debian architectures is much greater than the devuan list, which has x86, arm, and one powerpc. I want to get sh2eb working on musl in devuan, which is FOUR deltas from the glibc-based debian sh4 port. (The sh4->sh2 bit is mostly just compiler flags, but it's also musl, sysvinit, nommu, and Jeff got the endianness wrong.)

November 25, 2020

There's a whole book about how failure to prosecute rich white men leads to the same criminals doing the same crimes over and over again. I don't know why this is news to the Boomercrats but they still don't get it. But then Good Cop's job is not to understand. Upton Sinclair wrote about that almost a century ago. (I typed "when Biden was young" and then checked, and to be fair the quote's from about 8 years before he was born.)

Meanwhile The Squad is great, twitter remains bad at being twitter, white people are the worst, corn-based ethanol continues to suck (it's a farm subsidy, not a fuel), and "Financial literacy" is a scam (another way of blaming the poor for their poverty, in a system where the 1% depend on the 99% serving them).

The GOP's whole "election was stolen" rhetoric boils down to "we rigged it and their margin of victory was so huge it overcame the myriad ways we'd tipped the scales in our favor, so they MUST have cheated too and we must be allowed to cheat EVEN MORE after the fact." Every accusation a confession: they deregistered voters, gerrymandered, removed voting infrastructre (both in-person machines and mail sorting equipment), planted fake ballot boxes, tried to scare people away from in-person voting, organized mobs to interfere with the actual counting... All to try to leverage the electoral college to overcome what they KNEW would be a multi-million popular vote deficit (just like in 2000 and 2016). The GOAL was never to win the vote, the goal was always to cheat enough to render the actual vote irrelevant.

I can't decide if Sherwin Williams showing its entire ass is more a case of the self-destructive incompetence of Boomers, or the self-destructive incompetence of late stage capitalism. (I mean OBVIOUSLY it's both, but which is it _more_ of? This is of course a company that gorged on the Trump Tax Giveaway, so here's hoping they go out of business entirely. The college student in question says he now buys his materials at Lowes.)

November 24, 2020

Remember when Intel lost so much market share to Opteron they started supporting x86-64 in 2004 but tried desperately to pretend they weren't? It's hard to feel bad about ARM eating their lunch, and companies like apple making their own arm chips. Especially since Intel bought a major ARM variant 20 years ago and then went "ew ew ew ew ew!" at it until they sold it to Marvell (which used it to power Carol Danvers).

I'm not getting much done alone in japan: time is not the same as energy or focus. Not interacting with anybody in this hemisphere doesn't give me much incentive to stay on a day schedule, but when I try I feel BAD for not speaking the language. Being able to pick a word out of every second sentence of recorded media is not the same as carrying on a conversation. Multiple consecutive weeks of this is giving me some of my old depression symptoms back (from my 20's). It's not bad yet, but it's making me lean towards flying back to Austin on the 15th, pandemic or no. (Yes it's bad, but depression is also bad. I'm still 90% sure I had it in March, and I'd stay masked and distant in Texas.)

I've recently done the forked development thing to the point forward progress has stopped on each fork. I sit down, go "which of the 5 things I'm working on do I dink at today", wind up switching between 3 of them as I'm reminded of something I was in the middle of and spend half an hour peering at it to figure out where I left off, and hours later haven't reached a good stopping point to check anything in, and then the next day I do it all over again. I'm familiar with this pattern and it's inefficient, basically swap-thrashing from lack of focus.

Years ago there was an excellent computer history book (possibly "A Few Good Men from Univac"), that had a great bit about "one point to the wedge". It made an analogy about how splitting logs by hammering a wooden wedge into them only works if the end of the wedge didn't itself split, at which point all the hammering in the world won't drive it much further into the wood because it's catching and holding instead of cutting. The more it splits, the less forward progress. His analogy was about how development projects that don't know where the "tip of tree" is wind up with a zillion forks they can't integrate, and that such fragmentation increases rather than decreases, and you don't just spend more time integrating but figuring out what bugs were fixed where, digging up or recreating inadvertantly dropped features, finding and fixing regressions... Having 5 versions where each does PART of what you need to accomplish is exhausting to juggle.

Over on the j-core side this is a big part of the reason I've pushed to merge the J1 tree into the J2 build, because we want to implement various new features (hardware threading, instruction batches, butterfly increments, dual multiply engines) but what base would we build those on top of? We've already got the J32 mmu stuff to merge (which can in theory be broken down into discrete features like instruction cancellation support, so interrupts that come in partway through a multi-clock instruction can cleanly restart the instruction, which you need when memory access can generate a fault), but our "tip of tree" that we're using in the VPN project doesn't include that, and doesn't include the changes to run on ice40, and the more work we do the more technical debt we accumulate because this integration work has to happen at SOME point and the sooner we do it the less of it there is to do...

In toybox/toysh I want to do command editing and $((math)) and function support, and I've got parts of each in three different files. And command editing is TTY raw mode stuff that sucked in my TODO item about microcom having set the serial device into the wrong TTY mode, which turned into a rewrite of the set_terminal() plumbing in lib/ and now I've got multiple dirty trees. Plus I've got a bug from a recent toysh cleanup that screws up running shell scripts and it's probably a one line typo somewhere but I haven't tracked it down yet, and then I need to get back to rebuilding the vmlinux image on the work boards. (Rich tends to put together a root filesystem by hand and not make it reproducible as an actual build. I want everything there to be intentional and have a "git annotate" that shows where each line of each script came from and WHY that binary is there and when it showed up and who did it.) But I can't make overlay scripts to add stuff to a mkroot build if current builds don't boot because they can't run the init script...

I should really fix that.

November 23, 2020

Good Cop is back at it, and Faceboot managed to get worse. The fight isn't over just because we knocked down one senile bully. The entire GOP supported him (even _after_ he lost the election by 6 million votes), and the Boomercrats aren't allies, merely the enemy of my enemy like Stalin was in WWII. We went on to fight the cold war specifically against his side, and these days anyone who thinks a single billionaire going unguillotined is a good idea is on the wrong side.

The reason guillotines have better optics than a firing squad is guillotines were historically a specific reaction against royalty. Guns are things individual racists brandish in mexican restaurants. It's very difficult for a random racist to chase a black high school student several blocks with a guillotine. Guillotines are for use against rich white people, who have first been imprisoned and charged by some secular authority and been through whatever locally passes for due process of the law.

Biden is thinking of pardoning Nixon again, which means the chain of escalation will continue. If you let shoplifters keep everything they're not caught taking, and the ONLY punishment for getting caught is to put it back and try again tomorrow, what happens? Why is white collar crime different?

"Algorithms" are a way of laundring racism because whatever human-derived data you train a neural net from bakes in the biases of the humans who generated the training data set. Obviously if your training data is a bunch of old books from before slavery was illegal and before women got the vote you're going to get racism and sexism out the other end. This is true of any time period: society's biases at the time get entrenched because they're part of the training data. And any training data you use is going to trail real-world attitudes by several years, meaning it's inherently regressive, UNDOING any recent progress. A police algorithm won't think black lives matter if the police didn't 10 years ago, and using the algorithm's concurrence to justify new biased actions is circular reasoning. (And of course the problem with peer review is the reviewers have the same biases.)

Now think of the training data of "natural intelligences" raised in the 1950's with Jim Crow and women unable to open a bank account without a man's permission. In theory they can learn to overcome this, in practice those obsolete biases are baked in and it's hard to teach an old dog new tricks.

November 22, 2020

Between the buggy state of microcom (zero length tabs when used on an actual serial port) and starting down the rathole of doing command line editing and history for toysh, I'm replacing set_terminal() in lib/tty.c with different plumbing, and swapping all its users. And THAT led me to looking at the setlinebuf() stuff (which impacted watch.c as mentioned yesterday).

I was adding a TOYFLAG_LINEBUF I could add to "grep" and whatever else turns out to be a performance bottleneck in the android build, so it's not the default behavior for everything ELSE. (I may also if (!isatty(1)) setlinebuf(stdout) or something, still pondering.)

And THAT got me thinking about how almost every OLDTOY() has the same TOYFLAGS as the corresponding NEWTOY, so I'm thinking maybe I should remove it like I did the redundant OPTSTR entry?

I grepped them all checking because it was possible a command could be installed in /bin and its alias/derivative in /usr/bin, but I didn't find any.

The "almost every" part has the following exceptions:

  • nbd-client is an alias for nbd_client (because nbd-client_main() is not a valid function name), and nbd_client has 0 in toyflags so it doesn't get a symlink installed

  • The -sh -toysh and -bash aliases (shell login nonsense, blame posix) all have 0 in toyflags so they don't have a symlink installed

  • test is /usr/bin but [ has neither flag (to avoid symlink install) BUT both have NOFORK and NOHELP. (Ok, test has MAYFORK, but the difference is NOFORK suppresses symlink creation just like 0 flags does, and MAYFORK doesn't.)

  • true has MAYFORK but : doesn't (which is probably a bug, : should be NOFORK)

Anyway, what all THAT sounds like is I should have some explicit way of suppressing symlink creation. But how? Removing the field from OLDTOY() takes it away as a control knob for this. Those three "-sh" variants are doing in-band signalling in the name, but it kinda sounds like the main.c plumbing that's accepting "toybox" as a prefix should also just skip a single leading - in the name?

Hmmm, how should I represent this? Implementing is easy, figuring out what to implement is always the hard part, and working out the data format is generally the real work.

November 21, 2020

Youtube just emailed everyone new terms of service to say it can now insert ads randomly into ANY video, even the demonetized ones. (Just because the submitter hasn't selected ads, or is too small to qualify for revenue sharing, no longer means Youtube won't SHOW ads on the video. Youtube will just keep all the revenue, and won't let the creator control what kinds of ads get shown.) How desperate IS youtube, anyway? MORE ADS! MUST! SHOW! MOOOOOOOOREEEEEE! I mean, do they owe the mob money or something? Countdown to youtube no longer showing any video content, just endless ads. New marketing slogan: "Youtube! Now with more ads!"

Oh hey, the "disney is evil" thing made it as far as The Guardian and Slashdot already. There are some really good analysis threads on it too, and lawyers explaining it, and weapons-grade sarcasm and explanation of legal precedents and... After the GOP the next protest targets are things like corporations and civil asset forfeiture.

By themselves, the Boomercrats will fix exactly nothing, and prosecute nothing. An excellent quote that wandered by recently is "The rule of law is meaningless without consequences", and the Boomercrats will provide zero consequences. (After all they've never had to face any, why should anyone else? Instead they'll rush to normalize and forget/downplay how dangerous the situation was, so it can be even worse next time. Watergate led to Iran-Contra led to Dubyah/Cheney...)

Boomers are like pennies: still around for historical reasons, protected entirely by entrenched interests, and worth less and less each year. (Personally I think the same bill that eliminates the penny should bring back the Sacajawea dollar coin, put Lincoln on a new $5 coin, eliminate the "bill" versions of both of those, and give us a generally circulating $500 bill. None of which can arrive before the Boomers depart.

There are SO many post-Boomer todo lists which can't start until the Booming stops. I should properly write up the post-Boomer todo list at some point. It's not just solar panels and self-driving cars, we need to remove dams and put indigenous people back in charge of land management. (They sustained a population of over 100 million people in north america for tens of thousands of years without turning everything into a giant poisoned desert, and that was WITHOUT the benefit of antibiotics, air conditioning, or cell phones. Pretty sure there's a happy medium achievable, but not if we don't learn form them how not to die out over the next 100 years.)

The real burning fuse the Boomers are holding everyone back from addressing isn't late stage capitalism. That's just "decide to stop doing it and guillotine less than 1000 people" who'd rather die than walk away. The real deadline is climate change, which is rapidly advancing while Boomers run down their clocks. Tornadoes are no longer newsworthy, nor are any wildfires that aren't big enough to be visible from space. And of course the fossil groundwater we're pumping is running out. A few years ago Saudi Arabia ran out of water. Not "is running out", they pumped their fossil ground water DRY (exporting wheat!), and now oases mentioned in the bible are gone and won't be back for 10,000 years. The Boomers will happily do what the custodians of Mecca did and pump the aquifers dry under america's breadbasket because "it's always been there so it will always be there, it's a force of nature and we CAN'T break it, just like there will always be wooly mammoths to hunt and passenger pigeons to eat". Just like we can't run out of healthcare workers (or hospital capacity), can't lose the right to repair, gerrymandering and such can't really derail democracy, etc. Boomers still haven't noticed that their drive for "Stem Stem Uber Alles Let's All Be Nazi Scientists" gutted humanities education funding so nobody's had "how society is supposed to function and what can go wrong with it" explained to them in a generation, and what do you know that skillset turns out to be IMPORTANT.

Boom Boom silver spoon Boom lead poisoning senility drool Boom drool drool Trump Boom. (Yes yes, #notallboomers, I know. Not all men and not all white people either. But more than enough.)

November 20, 2020

Still poking at $(( )). Haven't quite got traction on it, but... why isn't $@ an array?

$ echo $((@[2]))
bash: @[2]: syntax error: operand expected (error token is "@[2]")

Long ago in my second job out of college (working at Quest Multimedia) I implemented an algebraic parser in Java. It took a string and (using two stacks, one for operators and one for operands) evaluated a mathematical expression to come up with a (floating point) result. Alas this was 1998 so I'm a touch vague on how it worked, but googling a bit the technique I used smells a bit like the "shunting yard algorithm"? (It was cobbled together out of stuff I remembered from a college class, a couple questions asked of a UT professor, a photocopied textbook page, and the C operator precedence table out of Herber Schildt's annotated Ansi C spec from 1989.)

The idea is to go through the string grabbing the next token, which is either an operator, a constant, or a variable name. Constants you throw on the constant stack, operators either evaluate immediately (popping one or two constants as necessary) or push onto the operator stack, and the "either" is comparing precedence.

The part I'm trying to remember is how to get it into a single if/else staircase without having each operator exist TWICE (once in the array that indicates precedence and once in the case statement). I mean it's easy to have an array with 37 little function pointers to tiny functions handling each operation, but ew? (I mean, I COULD do it with computed goto. I don't WANT to use computed goto, because ALSO EW, but this is pretty much exactly what it was designed for? I'm not sure it's worse than a bunch of:

static void long double op_plus(long double x, long double y) { return x+y; };
static void long double op_minus(long double x, long double y) { return x-y; };
static void long double op_ times(long_double x, long_double ) { reuurn x*y; };

November 19, 2020

It's not Boomers' fault they demand to be overpoliced, they all suffered massive lead poisoning from prenatal development through their 30s.

70 years ago leaded gasoline gave the surface of the ocean 20 times as much lead as deeper ocean water, and breathing car exhaust up close raised people's blood lead levels to 600 times what their ancestors had experienced, with children absorbing 5 times as much as adults. Back then cans of food were soldered closed with lead, house paint was full of lead, water pipes were made of lead... but 80% of the Boomers' lead exposure came from breathing the lead car exhaust put into the air. In 1975 the average american had a blood lead level of 15 ug/dL, today it's 0.858, which is still more than we find in egyptian mummies.

This caused widespread brain damage amoung young Boomers, which as they got older led to a huge rise in violent crime due to the learning difficulties and poor emotional regulation typical of pediatric lead posioning. (It's also where Boomers' distaste for cities seems to come from, concentrations of traffic and car exhaust further increased lead exposure as opposed to the cleaner air out in the boondocks, but it was just a matter of degree: nobody was safe from it.) Boomers soaked in lead from infancy through adulthood never learned to maintain the systems the WWII "greatest" generation handed off to them. Difficulties with emotional regulation caused by the same lead exposure led to a huge rise in violent crime and huge demand for police to restrain violent Boomers. (Not that the adults running the vietnam war were doing much better, how Henry Kissinger is not a convicted war criminal I'll never understand. But they were all breathing and drinking this crap too.)

Ever since leaded gasoline was gradually outlawed in the 1980's, crime rates have gone down over 50%, but instead of responding by reducing police staffing the first Boomer president Bill Clinton went the other way and "doubled the number of cops on the street" in 1996 to make the aging Boomers feel less anxious as younger generations who weren't developmentally disabled by chronic lead poisoning started to overshadow them (and got stonewalled by entrenched Boomers pushing back to defend their turf).

This is why the vast majority of the US police force is unnecessary. Between the end of airborne lead, damaged Boomers getting too old to pull off most blue-collar crime, and the massive increase in police and prison funding even Bill Clinton now regrets, the result is a USA overpoliced by an order of MAGNITUDE. Those surplus police try to justify their existence by looking for trouble, and wind up inventing crimes to keep themselves occupied.

Defunding the police acknowledges that between the 50% post-Boomer crime drop and backing out Clinton's crime bill doubling police funding, 3/4 of our current police force is obviously unnecessary. If you end the "war on some drugs" (prohibition 2.0), stop being amazingly racist, properly fund mental health care, and address poverty so fewer people are starving homeless and desperate to pay their family's medical bills... Is ANY of it needed? You can still call in the FBI and national guard when there's a terrorist attack (although it's usually white male boomers doing that), but even a vestigial local police force at 1/10th the current size would be of questionable utility. Firefighters and paramedics are more useful, with far fewer "don't taze me bro" moments.

But even decades of massive lead poisoning on developing brains doesn't explain the current GOP strategy. You've got to add in old age dementia to cover that mess, plus complete lack of human empathy and pathological narcissism. And the kind of runaway fraud snowball where a con artist has to steal ever more more money to conceal/cover previous losses, which is where Bernie Madoff and Enron and the London Whale came from.

November 18, 2020

I can get the japanese dubbed/subtitled versions of Netflix stuff here in Tokyo, so I'm rewatching "Lucifer", which I've seen multiple times and watched many people's reaction videos to on youtube, but I'm also rewatching each episode in english first so I have the best chance of picking words out of the translated japanese dialog. And I am once again struck by how carefully constructed the first few episodes are. It's a difficult premise to sell, and this is a swiss watch/faberge egg of plot and dialog introducing and selling each aspect. Especially Lucifer (and Mazikeen) being who they are, with massive potential for evil and abuse of power but zero interest in either, both rigidly honorable (Lucifer being textbook lawful neutral, Maze having epic duty and pride) and too bored/jaded for it to occur to them. (And then Chloe's introduction is just as skillfully handled. The hardest part is the "they fight crime!" hackneyed premise, which they shoe-horn in with laser targeted precision. Lucifer just quit a metaphysical penal institution, working with a detective is a surprisingly natural fit they way they present it, and Chloe has to have enough competence to be at least a domain-specific match for Lucifer and STRONG chemistry or it just wouldn't work.)

I'm also impressed that (in In Nomine terms) they pulled off making Lucifer a Lilim instead of a Balseraph and it _works_). And it's Los Angeles, of COURSE he's in therapy. This show is an equal mix of outlandish mythological aspects and "write what you know" comfort zone for the show producers.

Watching the japanese version highlights the fact that, other than an inspired themesong "sting" (which is extracted from a larger song that just doesn't _WORK_, it's on youtube) and quoting as heavily from external songs as Due South did, the incidental music behind scenes (like Lucifer in the back of Chloe's car for the first time) is straight out of The Sims. All the cast is good, but Tom Ellis' acting pulls off some herculean lifts.

The trail of breadcrumbs to keep it going is also well done. In episode 2 Chloe approaches Lucifer at his club with unanswered questions (she's a detective) and he follows her back to work out of curiosity/boredom (his seduction attempts bounce and nobody's ever negged him or played "hard to get" before), and while there "Wait, somebody who believes he deserves punishment is getting punished, and there's MORE to it?" comes as a REVELATION to Lucifer.

November 17, 2020

Each day in the USA Covid is killing 200 times as many people as die in car crashes. The wheels are coming off people's lives, and the people running the safety nets are burning out.

Sigh, I need more time/energy to read books.

When I read about how corrupt the police in Vallejo are I thought it was a city in Mexico, but nope: California, San Francisco Bay area. (Defund the police and abolish (defund) ICE.)

Dolly Parton is an excellent example of why guillotining the billionaires is a moral imperative. She's NOT a billionaire... because she regularly gives money away. (On things like Covid Vaccines.) She easily COULD be a billionaire, and chooses not to be, because she's a good person. She's not alone, but being both rich and a good person makes news during Late Stage Capitalism. Debt forgiveness was a regular thing throughout history until the Boomers (and the Victorians before them). Billionaires are who that debt is owed TO: poor people are always the source of rich people's money. Being a billionaire is a CHOICE, and it's not one good people make.

Every time something bad happens in the USA, my first question is "which billionaire is behind this fuckery"? The countryside used to be radical until it got occupied by plutocrats. In the case of the new extra-nazi Facebook replacement, it's funded by The Mercers. Billionaires perform stochastic murder (and stochastic terrorism), and Late Stage Capitalism forces people to do evil the same way any other form of fascism does: you're either a collaborator or a target, 99% of the population doesn't get to "opt out", and thinking you CAN is the most extreme form of privilege. (Whether individual white men do it, or corporations.)

Meanwhile, Boomers scream denial by arguing with math. Over in the UK the 2018-2019 flu season killed 4000 people but the UK already has 50k Covid dead, which means over 10x more people people have ALREADY died from covid than from the flu, and that's _with_ masks and repeated lockdowns mostly preventing hospitals from being overwhelmed to "bodies in the streets" level. Because the 10% who need hospitalization and at least IV fluids WILL ALL DIE when there are no nurses/beds for them and they just get sent home to wait for the end. Delusions about "herd immunity" are just more inability to do math: at 250k infections per day in the USA, a country of ~350 million people, it would take around 4 years (1400 days) to infect everybody. Except we can't sustain 250k infections/day for even 6 more months and still have a functioning hospital system: we'll burn out all our doctors and nurses long before then. Even with a functioning healthcare system 11 million infections have already resulted in 250k million dead (for comparison, the 400k US soldiers died in World War II), meaning 300 million infections would leave 6 million dead if the healthcare system DID scale to that level (which it can't). That's about 5 times what the Vietnam war killed if you include soldiers on both sides AND vietnamese civilians. Even the Korean War (ala the tv show MASH) only killed 5 million people (again including not just soldiers on both sides but civilians). And that's before we count "long covid" disability among the survivors; it's our "new Polio" already putting a lot of people in wheelchairs.

Yup, Biden's going to pardon Nixon again (egged on by Boomer Media). They're not even trying to do most of the right things, and happily doing wrong things. That's what you get for putting an 80 year old in office, a complete breakdown of the rule of law, because you're ignoring felonies as long as rich and powerful people are doing them. It's profoundly hypocritical but that's Good Cop's job. They're Bad Cop's loyal coworkers after all, pursuing the exact same goals through different means. They're strategically incompetent (which is hard to distinguish from actual incompetence, and often leverages it).

Still patiently waiting for the Boomercrats to die. (Despite the US pulling out of vietnam, the Boomers have completely forgotten that protests work.) If the Boomers don't die soon, they're going to destroy democracy. Not just because of the rise of fascism, but because nobody under 40 believes we live in a democracy instead of a gerontocracy. It's amazing how every one of the Boomers' family values organizations turns out to be a molesting scam. (That Q nonsense is yet more "every accusation a confession". What do you mean OUR side is constantly committing these crimes? That couldn't possibly be the case, it must be THEM! Log in thine own eye, dude... Speaking of which, why is christianity still a thing? Between catholic pedophile rape, every televangelist ever, and evangelicals being a "tsunami of racism". Religions justify their continued existence by insisting that even though they got every single factual statement they've ever made about science or history wrong, but should still be listened to for "moral guidance"? Except they're just as wrong on that front too, and now they're giving political campaign speeches from the pulpit, so why are they tax-free?)

I hope that the Boomers take intellectual property law with them. It has no place for modern collaborative creativity. Under Late Stage Capitalism only certain forms of expression are allowed to exist, as ever-increasing monopolies corner the market on communication and artistic expression. (See also song mashups, reaction videos, anime music videos, reactions to mashups, reactions to reactions. Speaking of IP Law, Disney's treatment of Alan Dean Foster should 100% attract antitrust scrutiny resulting in a breakup.)

We need all the investigations. A full-time team of them, doing this sort of thing. (Admittedly @GoodLawProject is british, I'd like to find a US version, but it's not the ACLU as long as they support nazis.) But in theory, this is what the Biden administration should do (and won't because old and out of touch, but it's what an @AOC administration definitely WOULD do because she knows how to fight). Chase every lead and prosecute every offense. The GOP had 8 gazillion hours of "benghazi" hearings, the democrats doing one second less and spending a dime less on it is fidiciary irresponsibility. (Every member of the current GOP collaborated with this administration's crimes, PROSECUTE THEM ALL. And track down horrible things of dubious legality and figure out how to prosecute those too. That's what all the civil suits and civil rights lawsuits were about. And once the Boomercrats die, go after the plutocrats behind the throne.)

"Every Accusation a Confession" has layers. The Boomers let us know how vulnerable they were to manipulation. Gen X grew up with ads and the default assuption that everything said in a commercial is a lie, even if you can't immediately figure out how (and anyone younger seems to filter it out completely). Not that Republicans denouncing democracy as "mob rule" is hard to figure out. (Um, yes? Democracy IS mob rule? In a good way? That's sort of the point?)

November 16, 2020

Rich has fairly definitively lost the chrt issue (and the #ifdef _MUSL_ issue), that's a total of three implementations that have done variants of #ifdef _MUSL_, call the syscall directly, #endif in explicit rejection of what Rich tried to impose.

Yes! Youtube-dl is back on github. It is a good day. It already had its own site and I used that to download my "learn japanese" playlist so I can run it in the background while doing other things, but it's good the RIAA got smacked down. (And oddly, github set aside $1M to defend their decision in court? I did not expect that. Huh.) A lot of creators still make their living at least partially via IP law, but it's mostly a way for billionaires to screw over creative types, and these days even the big names are finding other ways to fund their careers. We need universal basic income, and for things like patreon/kickstarter/twitter to mature from private for-profit services to public utilities like tap water, paved roads, and the fire department. In a functioning society, the majority of Google's services would be performed by the Library of Congress. Collectively, that would bring us about 3/4 of the way to Gene Roddenberry's Star Trek future, so we can't say we're SURPRISED that the guy who predicted flip phones and video chat got more parts right.

This is a good (if basic) talk on the maintenance of open source software (which was introduced with an xkcd strip). Several of the points it makes are straight out of Clay Shirky's institutions vs collaboration talk, but it takes them in some new directions.

The way to get glibc to stop crapping stack dumps all over stderr is to call mallopt(M_CHECK_ACTION, 1); (Gotta #include <malloc.h> for that.) I'm wondering if I should have toybox's CONFIG_DEBUG do that?

A reminder that impostor syndrome is actually a good sign, it's the OPPOSITE of dunning-kruger. You are at least dimly aware how much there is to know, and have standards for doing a good job. The better you are, the more impostor syndrome you're likely to have.

I'm pondering the imporance of being able ot select the right level of abstraction. While responding to an email talking about people "who don’t realize C/C++ and VHDL/Verilog are not the same" I wrote:

C++'s marketing strategy has been to intentionally confuse itself with C since 1986. "C++ contains the whole of C and therefore is just as good a language, the same way this tray of jello shots contains an entire glass of water and is thus just as good a beverage." Back when cfront converted c++ to c they presumably believed it, but anyone who's debugged shared library version skew caused by "extern c { int thingy(class potato &spud); }" with multiple compiler versions can spot some obvious flaws in a language that introduces layers of abstraction while still having pointers. "Why can't I memset(x, 0, sizeof(x)) a class instance? Invisibly initialized RTAI data and virtual function pointers? What are those? Oh I still have to know how it's implemented in order to be able to use it? And you're adding ever-more implementation complexity behind 'abstractions' that leak implementation details. Sure, that should scale." By the time templates went in claiming C++ was just a "better C" was already dishonest, let alone modifying gdb to do name demangling so it could distinguish overloaded virtual class members called from global instance constructors... There are plenty of languages like python with opaque abstractions that DON'T leak implementation details, when you want "what the hardware is actually doing" to be somebody else's problem.

As far as I can tell the VHDL/verilog bit is more of a "C vs assembly" thing where hardware people who aren't programmers just want to hand-craft a netlist wiring components into a circuit without letting the tools do any work. Not so much considering them the same as sticking to their comfort zone. We have somewhat more ambitious goals and lean on the tools heavily to accomplish them.

Those two paragraphs are in tension because the "leaky" abstractions the C++ people added (demading you understood how everything is implemented in order to use the tools) and the leaky abstraction of VHDL (where you have to know how the optimizer's going to match various hardware components to wind up using an sram instead of a pile of transistors)... are uncomfortably similar. The main difference is that VHDL isn't a moving target constantly adding new layers of leaking abstraction. Describing a circuit in a way that the optimizer can recognize efficient implementations given the hardware you have is uncomfortably black magic for me, but then I don't really know VHDL yet.

The abstractions of VHDL seem to provide net benefit and act as a force multipler for a small team to produce and maintain larger and more complex circuits than they could with verilog. And VHDL is not a large language where you have to select a "sane subset" but no two developers or projects ever choose quite the same subset so it grows over time until nothing is actually excluded or safe to ignore (a problem C++ shares with perl). In VHDL you can be expected to learn and use every corner of the language without being overwhelmed.

Finding the RIGHT level abstraction to tackle a problem at is an important consideration. And a hard problem. But the language having a lot of abstractions it EXPECTS you to use which don't actually help your project is "infrastructure in search of a user" again. (It's not really code re-use when you pull in an 8 megabyte library with 4 package dependencies you have to install at runtime just use a self-contained 3 line function out of the library. Which brings us back to the first pargraph of today's entry where Rich tries to force everybody to use threads because HE likes them, and everybody went "nah" and wired up the syscall directly.)

November 15, 2020

The woman I mentioned two days ago collecting stories about how capitalism is wasteful and inefficent has posted results.

Sarah Taber has another excellent thread about how George Washington's campaign of genocide against the seneca indians led directly to Jim Crow sharecroppers and on to today's racist and endlessly subsidized "farm vote". (With the usual tangent about the book "Prairie Fires" explaining how the Little House on the Prairie books were set during a racist land scam tricking poor whites into stealing land from indians to hand over to rich developers, and our entire "small farmer" mythology was never commercially viable, just a sales pitch for the scam, the gradual drawn-out collapse of which led to decades of riots and marches on washington back in the guilded age, when labor organizers were regularly murdered, and of course the plutocrats' factory farms led to the dust bowl.) Is it any wonder the plutocrats want Stem Stem Uber Alles without any history courses? Plutocrats LOVE nazi scientists, they're so fungible.

Oh hey, the surviving Cock brother is starting to have second thoughts. Usually these clowns die screaming the name of the cult leader even after the senior members cash out. (The brothers got indoctrinated from infancy by daddy so despite being nominally senior, they're more "Don Jr. and Eric" territory instead, mindlessly parroting the ancestral grift. Growing up in a cult vs joining it vs running it.) It's up to the rest of us to constantly push back against the tiny numbers of marks (vocal perpetual losers who out/dox themselves regularly), and the Vichy collaborators who knowingly enable them and benefit from their actions).

As Boomer Media continues to wonder why the confederacy hasn't won yet, here's a long article about Boomers at the Times grappling with their increasing irrelevance (with sections on the "structural problems that were limiting the promotion of Black employees" and the drive to hire "more Evangelical Christians"). The article makes an interesting point that millennials are willing to leave and work somewhere else, but Boomers expect to have a career at the same company and "were willing to play the internal Game of Thrones required to ascend the masthead because they never wanted to work anywhere else". (Once again, the Zuckerberg Principle concentrates the suck as less sucky people are driven away by the increasing level of suck among those remaining. It's like Gresham's Law, "bad money drives out good", only about people and cultures. THIS is why you punch nazis.) When the screaming got loud enough the Times hired some younger people, but the Boomers in charge expected to enculturate the new arrivals rather than learn from them, quote "we started hiring from other places, and it was almost like we thought, Okay, now they’re just going to become just like us".

Will Joe Biden do basic income? Of course not. Nor will any of the Boomercrats restore funding for the humanities. The question is how loud can "his side" scream at him to override his octegenarian proclivities? You don't JUST do so in the run up to the election, you do it ALL THE TIME.

A long thread from just before the election analyzing the Resident's likely drug use (attempting to compensate for his advancing dementia). He seems like yesterday's news, but the (hopefully) last Boomer president is doing a last minute push to pull off as much dickery as possible.

November 14, 2020

It's really easy to get stuck in a rut living alone in a strange city. I like tokyo, but don't know anybody here, so it's really easy to just stay in the quiet apartment until dinnertime.

Which of course means I'm poking at toybox again because it's sort of a ground state for me, serving a similar role as crochet did for my great grandmother. And at the moment that means poking at toysh, which REALLY needs command history, and function support, and $((math)), and...

It's quite possible that I'm the only person, INCLUDING the bash maintainer, to care about:

$ PS1='hey $LINENO:' bash -noprofile -norc
hey 0:true
hey 1:

But yes, it increments $LINENO _after_ reading the line but before executing it. Should I add a test for that? (Do I care if bash changes its behavior to STOP doing that? _I_ don't, but does some script out there care?)

Blah, my cleanup got out of hand, what have I changed: lib/args.c and scripts/mkflags.c (for 0 prefix) which also hits toys/*/env.c because it had a leading 0 as a flag and that's a prefix now, lib/lib.h and lib/xwrap.c (for xgetline), and toys/*/sh.c... Ok, I can check some of that in by itself, albeit with nobody USING it yet (wince) but it gets the diff down to a dull roar.

I went out to starbucks, to be anti-social in a large group of people, because pandemic, although everybody in tokyo has apparently already had it according to serum tests? Mask on anyway... Starbucks wifi appears incapable of handing out a IP address on busy days, which is ridiculous because 192.168 has 65 thousand addresses it can hand out and I don't care HOW lenient your timeout policy is, that should be plenty. (They're handing out 256 addresses, aren't they? Did nobody bother to change the off-the-shelf router defaults?)

I met with Mike yesterday (another $DAYJOB executive, sort of Jeff's japanese counterpart except sales instead of engineering, lives an hour and a half away by train but came to the office to pick up two updated prototype boards Jeff and I had prepared for him) and mentioned the "wasting being in tokyo if I stay in the apartment or office alone every day, and hanging out with my laptop at a starbucks is only a minor step up". Mike suggested I teach programming classes, either via meetup or he knows people at universities? (I pointed out I only have a bachelors degree and the multiple times I went back for graduate school the opportunity cost of lost work was too big to stay, and he said computer science programs in japan value experience and industry achievement?) Either would get me interacting with native japanese speakers, even if the course was taught in english. I'm all for it, if it can happen...

November 13, 2020

Friday the 13th in 2020. Should be fine.

A comic strip explaining why unions do not allow police to join.

Does anyone NOT immediately see that Musk's hatred of LIDAR is because Tesla initially didn't include it on their cars (for cost reasons) and then insisted that existing deployed cars would be made self-driving through a pure "software upgrade", and if he ever backed down from that his installed base would sue him? It's basically sunk cost fallacy snowballing. Everybody gets that, right?

Why did I want Android to beat out iOS, let me count the ways. Not that Google isn't problematic, but generally less so than others because so far their employees regularly protest and get them to change course on stuff. The fundamental problem is Late Stage Capitalism was poisoned by Milton Friedman's Toxic September 13, 1970 assertion that the only purpose of a company is to make money for investors and that it owes nothing to employees or customers or any higher purpose and can get sued (by those investors) if it tries. That idiocy (and fallout like "corporate personhood") was not the case before the Boomers, it's a fallacy the Boomers have uniquely perpetrated upon the world, and can go away when they do. This is why most people under the age of 35 now seem to consider capitalism itself a bad idea. Here's a girl collecting stories of how capitalism is wasteful and inefficient, forcing the destruction of goods to corner the market. (Something I ranted about at length years ago.)

Quick Rule of thumb: if an octagenarian said it, start with the default assumption it's wrong. The young always win out over the old in the long run, it's only ever a matter of time. (And yes, re: that last link, the police force quoting hitler three times in its training materials is the same one that shot Breonna Taylor in her bedroom. Not that this is the only problem Kentucky's police force has, but then ACAB is a century old slogan for a reason. Yes, it's problematic. Show me something a century old that isn't. This is why that police force's budget needs to be zeroed out.)

Facebook delenda est. And here's a master list of what Trump did.

Interesting analysis, 70% of the economy voted democrat. The GOP only matters when "owned acreage" or billionaires vote. When people vote or economic production votes, the democrats get it. The GOP voters are the crazy 27% (mostly victims of racist scams and stockholm syndrome) led by slumlord ranchers cornering the market on stuff to bleed everyone else dry. This is why guillotines were invented.

It's not just the GOP (and the Boomercrats) that need to go. Obviously britain's tories (and tory police) are destroying the UK (brexit is going so "well" that truck drivers are now being arrested for smuggling migrants OUT of the UK), but did you know that Deutsche Bank was the nazis' bank and got broken up under the Marshall Plan after World War II and forbidden from reintegrating? Yeah, that lasted 10 years because capitalists suck at restraining plutocrats. Now Deutsche Bank, which was trump's main financial enabler, wants a tax on disabled people and on the self-employed and small businesses to prop up the deflating real estate bubble they've invested so much money into. (Louis Rossman's consistent pronunciation of them as Douche Bank is apropos.)

The Boomercrats need an enema. They will never listen. Endless defeat doesn't phase Good Cop, they can only be replaced.

Remember Sierra Online? Did King's Quest and Leisure Suit Larry and such back in the 90's? Turns out they were killed not by market forces but by a financier looting and destroying them (just like Sears and Toys R Us and...). Here's the story of venture capitalist Walter Forbes and his massive scam involving accounting fraud. (For more on the VC's argument that if Sierra's management hadn't taken his deal they'd be sued by their shareholders, see once again the classic "The Origin Of The World's Dumbest Idea". And yes, this is the specific mechanism by which the Boomers corrupted capitalism into a purely evil self-limiting calamity.)

November 12, 2020

It's interesting how much of american culture is just going "huh, capitalism is a complete waste of time, isn't it?" I mean there's pop songs about waiting for it to be over.

Fixed the x86-64 segfault. It was the same segfault my old netbook had trying to run Android NDK binaries, the 64 bit space's version of "running i686 code on an i486". Of course gcc, when told to create an x86-64 cross compiler, snuck in optimizations for the current machine because it didn't believe I REALLY meant cross-compile. Obviously I meant to create a native compiler if I did it on the same architecture, right? (The x86_64-unknown-linux vs x86_64-walrus-linux trick is no longer ENOUGH to make GCC stop trying to help out in the kitchen adding jalapenos, cilantro, and chocolate sauce when I'm brewing a cup of tea.)

Sigh. I have zero patience for linux-kernel anymore. I shouldn't take it out on random strangers trying to bikeshed help, but it's just exhausting to contemplate.

I've screwed up the tty settings in toybox microcom (noticeable as "tabs are zero spaces wide, which they AREN'T in minicom or busybox microcom"), which means the set_terminal() logic I have in lib/ is wrong. It's setting first four struct termios fields to the values they have in my terminal, on the theory A) this is known values, B) if the terminal gets into a weird state will clearing/setting certain flags and leaving others alone actually fix anything?

Unfortunately, the tty layer is CONCEPTUALLY broken (because the switch from obsolete physical typewriter hardware on the far end of serial ports to software emulating them predates shared libraries so they stuck it all in the kernel, badly). I dug down into the kernel tty source to figure out what OPOST does, and it's mostly a question of fiddling with CR and LF. When you output \n that technically only moves the cursor down one line, so the tty layer adds a \r (jump to the left edge of the screen, without moving down a line) when it encounters one. There's also code to figure out if we're at the right edge of the screen, and output a newline/linefeed pair if so. (This is the thing that was getting broken by QEMU last year.)

But the REAL problem is that this wonky translation stuff where \n gets a \r glued onto it, and spacing off the end of a line gets both, has to be done ONCE on each console, and when you have a machine that actually IS on the far end of a serial port (or ssh, or screen), is the remote tty doing it, or is the local one doing it? (In the case of a serial console on turtle, there are THREE ttys in play: the pty going to the xterm, the /dev/ttyACM0 serial device, and /dev/console on the remote board. ONE of the three needs to do this stuff.)

Looks like the correct fix is not to have microcom call the same tty setup function as for a local tty. Nothing is being displayed, we're just using the /dev/serial to communicate with a remote board, we want that one not to process the I/O at all. (Which is basically "raw mode", but sort of not raw ENOUGH in this case? Or is it TOO raw, forgetting where the tab stops are? Either way, let the serial device configure itself and leave it there...)

November 11, 2020

Oh hey, American Airlines (still quietly reintroducing the 737-max without telling passengers) just found a new way of discriminating against people in wheelchairs. They seem extra-scummy, I hope that airline does not survive the pandemic.

The in-passing description of the Four Seasons Total Landscaping thing as "objectively hilarious" (which explaining yet another republican scandal from people who know nothing but punching down and yet are AMAZINGLY BAD AT IT) is excellent wordsmithing. That is EXACTLY what it is, yes.

Meanwhile, 6% of the population of a texas prison has now died of covid, which is another thing that should be mentioned in new neuremberg trials. Given how racist the police are and the school-to-prison pipeline for civil forfeiture and minor drug offences and so on, this is outright murder of people who should never have been locked up in the first place.

The Resident is trying to destroy the ACA in the middle of a rapidly escalating pandemic on his way out, and yes they're trying very hard to stage a coup. Despite all the hypocrasy, fraud, and outright treason, the Boomercrats are still on course to pardon Nixon again, but as John Rogers says, "Nothing ever stops until rich white men go to jail.. The Boomers are too old to learn. The GOP keeps doing this because there are never consequences, it's the same guys cheating while pretending to be victims, who either win or they slink away just long enough to circle around to try it again. This is why you punch nazis rather than trying to reason with them. And that includes facebook.

Meanwhile, Mitch McConnel is confirming more republican judges today. Yes, after Biden won the election. The Boomercrats do endless outreach to white people who will never support them because they don't WANT to be the party of brown people, and are just SURE the republicans will suddenly start supporting them if they're just NICE enough to them.

The main problem is still the Boomercrats aren't progressive, at all. The "populist uprising" is rage at the plutocracy's stagnant wages with zero job security, strangling healthcare, "war on some drugs", school-to-prison pipeline and so on. They WANT somebody to burn it all down, and when Boomercrats defend it they vent the other way. (Mark Blyth gave multiple talks about this.)

TPM is running a "brittle grip" series about Boomers increasingly worried that dying may cost them power.

November 10, 2020

It's amazing how much I can get done in a quiet, catless room. It's actually a bit of a problem, even without modafinil I look up and 5 hours have passed without me expecting them to.

Ok, last night I tested Jens Axboe's TIF_NOTIFY_SIGNAL patch until it compiled (I was up waaaaay too late doing it, I dunno what timezone that mailing list is in but it was something like 2am here). Earlier yesterday I collected a bunch of other patches and I'm trying to check them into a git repo with "git am" but the one from peter anvin won't apply? It applies fine with aptch -p1 (no fuzz or anything), but git am says it contained nothing but garbage on line 6. (How can it contain nothing but garbage on LINE 6?)

Another unsolicited email from the linux foundation, and my immediate response (what do they want money for THIS time) turns out to understimate the situation: they're selling tickets to an "Open Source Strategy Forum" where most of the speakers are BANKS.

The Linux Foundation and the Fintech Open Source Foundation bring you Open Source Strategy Forum - the ONLY conference dedicated to driving collaboration and innovation in financial services through open source software and standards. Join us THIS WEEK, Nov 12 -13, for a jam-packed agenda of 50+ sessions, featuring speakers from JP Morgan, Google, Citi, Microsoft, Deutsche Bank, IBM, the Consumer Financial Protection Bureau and many more, all leading the way to thought provoking insights and conversations about how to best leverage open source software to solve financial industry challenges.

Open Source + Financial Services + Best Practices = Open Source Strategy Forum.

Remember when Linux was driven by hobbyists? The Linux Foundation does not, and is UTTERLY HORRIFIED at the thought. Oh goddess, they have a keynote speaker from the Alliance for Innovative Regulation, the Managing Director of Goldman Sachs, and whatever the heck "Open Source Wonk, Azure Office of the CTO, Microsoft" is. (Does Microsoft's CTO have an Azure Office? What?)

Look: Billionaires are rich because banks decide they can be rich. It works like this: Banks loan them money to buy mansions and yachts and hotels and such, and then let the billionaires mortgage their new assets at 1% interest (which is lower than inflation), and use that money to buy the NEXT asset, and borrow again, rinse repeat. (It's called an ELOC, I.E. an Equity Line Of Credit) Then a few years later when inflation's gone up 2%/year and they've only had to pay 1%/year, the price of each asset has gone up enough they can borrow even more money against it in a never-ending spiral. And that 1%/year they pay is a tax deductible "expense", meaning they never pay taxes on anything (since loans aren't income). And then you can add in stuff like the art market where they create assets out of thin air (bid up the price of $5 worth of paint and canvas anonymously buying from YOURSELF at auction, get a friendly appraiser to give a professional opinion that oh yeah it's worth millions, stick it in a vault and ELOC it at 1% interest like everything else)...

Cash was always a social construct (like employment contracts and land ownership), but modern finance is COMPLETELY fictional. It's a shell game, promises from nobody to nobody that endlessly multiplies the same dollars by loaning them out and then calling the loans "assets". (After all, you know the bank loaned out the money you deposited into your checking account, yet you still have it. The money exists twice. Repeat a thousand times and you have modern finance.)

The Mary Poppins "run on the bank" can't happen anymore (since 1978) because each bank can electronically borrow an unlimited amount at the touch of a button from the Federal Reserve's overnight window, and the Fed has unlimited money because they're the institution authorized by congress to CREATE money. Money borrowed from the Fed didn't previously exist, and money deposited back into the Fed is deleted from the system. They don't even print it: the Bureau of Engraving and Printing makes bills, and the US Mint makes coins, but cash is purchased from both with electronic money and nobody panics if the bank runs out of twenties until tomorrow and the ATM can only produce hundreds or tens. The real action's all in electronic funds transfers now, and a bank's reserve currency balance can't go to zero when its computers can borrow money from the Fed as needed, automatically in seconds.

My earlier example of "the money in your account is loaned out" (as in that famous scene from It's a Wonderful Life) is also obsolete: they don't even bother to do that anymore. A modern bank doesn't care about its account balances adding up unless money has to leave to go to a different bank. Transferring money from one account to another account within the same bank costs them nothing, so borrowing money can increases the amount in your account without DECREASING any other account at the bank. (Ok, double entry bookkeeping to track it means they have an account somewhere with a large negative balance in it, but it doesn't mean anything. And sure they could borrow more from the federal reserve to cover that at a tiny interest rate, but why pay even that much when they don't have to? If you swipe your Wells Fargo credit card to move money you don't have into the grocery store's business acccount at Wells Fargo, Wells fargo has lost zero dollars and GAINED a promise from you to pay them more money in future.)

This is why basic income is easy to do these days: dollars in banks and gold in World of Warcraft work literally the same way. Adding money to people's bank accounts is like adding minutes to your phone plan. Calling long distance used to be more expensive per minute the farther the call went, then it was flat rate minutes, then calling anywhere in the USA became free, then we got VOIP calls for free worldwide. Old fogies who can't comprehend the march of progress had to die before any of that could happen for reasons succinctly described by Douglas Adams, but happen it did.

For example, if you want to break the real estate market and pop things like the London price bubble: In 2010 there were 255 cities with a population over 100,000 people. Telling every american citizen "you can stay at a capsule hotel in any of those cities, with storage locker shower and simple laundry service, plus all the fortified ramen you can eat, whenever you need it for as long as you want, live there or save money visiting I don't care" is entirely feasible. The startup costs would be less than the one-time pandemic stimulus package this year, and keeping it going once it was in place would probably cost less than the $47 billion/year we spend on Housing and Urban Development _now_. (There's lots of things like "entire capsule can be hosed out and blow dried between guests" that were prototyped but not widely deployed when capsule hotels became a luxury thing tourists came to see rather than cheap ways to stack salarymen who'd missed their trains.) Then raise property taxes with a homestead exemption on the kind of ownership you want to see.

The idea horrifies Boomers. But given the number of people living out of their car these days (which Boomer Media somehow manages to make sound expensive because they can't conceive of anything else), there would be a significant market for something like that. (Heck, if you did it right it's probably preferable to most college dorms.)

But it's not what we're doing now or have been doing for the past 100 years, so the Boomers have to die before anything like that could be seriously considered.

November 9, 2020

They keep emailing me. Since no human being is going to read my reply to Amazon recruiter du jour, I've copied it here for posterity. (Name redacted on the off chance it's a real person, which seems unlikely.)

On 11/6/20 3:20 PM, XXXX wrote:
> Hi Rob,

Hi XXXX. It's been 46 days since I heard from you, I'm guessing cron job?

> I hope this message finds you and your loved ones well. I am sure that you get
> inundated with messages from recruiters, like myself, but your background is
> very impressive and I wanted to give it a shot!

I don't want to spend my life making Jeff Bezos richer. I'd happily work for his ex-wife in her quest to give to good causes "until the vault is empty".

> I noticed you had interviewed previously with Amazon, and I was curious if
> anything in your current situation has changed?

Do you mean am I still lobbying to change US law so hoarding a billion dollars for more than 30 days is a capital offense punishable by guillotine?

They insist returning the top tax rate to 91% isn't realistic, so let's lobby for something easy to implement. There's only about 650 billionaires in the USA, we just have to sharpen the left edge of the Overton Window...

> I am seeking embedded engineers
> to come make history with us! I support our ELB, EC2, EC2 Nitro and Serverless
> teams.

I'm seeing:

Which are the top 3 hits from googling "amazon workers" just now, and if you'll check with the previous holder of your pen name you'll see I sent a similar reply on September 25th.

&bt; If you are open, please reply with your resume (if you have one) and a time that
> may work for us to connect.

Look, I'll give Bezos points for opposing Trump and keeping the Washington Post vaguely independent. But leaving a hedge fund and borrowing a quarter million from mommy and daddy to try to corner the retail market so you can put the companies whose products you distribute out of business with copycat clones does not make him a good guy:

And yes, that includes going to war with Amazon's original book business:

(Which was only his first product because solid rectanglar dry goods were easy to store and ship, according to old interviews.)

Ok, he's not the Sacklers, but praising Bezos for not being a full-on Bond villain is like saying Wal-mart selling cheap insulin makes them good guys. Ask Vlasic about that. (Sure, Trump EVENTUALLY went too far for Christy Walton so she funded the Lincoln Project, but 2019 was a bit late to make that decision and John-boy, Jim-bob, and Marry-Ellen are all still to the right of Nixon.)

Yeah it's not _just_ Bezos: Elon Musk isn't a good guy either, despite buying up all the solar and battery companies to take credit for other people's technology (he BOUGHT Tesla from Eberhard & Tappening) and "helping in the kitchen" with self-driving cars so every fatality his half-baked crap is responsible for sets the cause transportation-as-a-service cause back another 6 months. It doesn't make any of their continued existence a net positive. Sure William H. Gates III is taking the money he earned after the CEO of IBM was willing to grant a contract to the company started by "Mary's Boy" (since Gates' mother was on the board of directors of the Red Cross with him) and is being all philanthropic, like Carnegie and Alfred Nobel before him. Fight off antitrust, then laundering the blood money with the biggest PR campaign.

NOBODY becomes a billionaire without taking more money than necessary from millions of people and not even sharing it with your employees who do the work to make you rich.

I have no desire to spend my time many any of them richer, ever.

> I look forward to your reply and building a professional relationship.

No you don't.

> Best,
> *XXXX*
> *Recruiter *| *Amazon* *Web Services*

45 more days until...

Hang on, is this just a pen name or a full on Amazon Mechanical Turk thing? Seems unlikely Amazon's managed its own Microsoft Tay, although I suppose Skynet's gotta come from somewhere. (Did you know you can sing "Loyal Wingman combat drone" to Camptown Races?)

When Google acquired Boston Dynamics its employees FLIPPED OUT. Amazon is carefully constructed so its employees cannot object to anything Bezos wants to do, ever.

THAT is why I wrote and maintain toybox for _free_ for Android, but won't touch Amazon. (And why my current job pays 1/4 what my previous job did, but I made the switch voluntarily and am still happy with my decision.)

> */Work hard. Have fun. Make history. /*

Already doing it, thanks. Are you?


November 8, 2020

Oh good. We got saved. (I asked Fade to make another donation to that navajo relief gofundme that got all those irish donations, back in the spring, both because THEY SAVED OUR ASSES and because second wave and all.) There is SO much work to do. Maybe now the work can start.

Of course Joe Biden is already insisting that the allies fought their way into Germany to pull Hitler out of his bunker and shake his hand and say it was a good game and we can all go home now. Biden clearly wants to pardon Nixon and "return to normal" so the GOP can do it all again worse in 4 years.

Biden ain't got 8 years in him, he turns 80 halfway through his first term. The Boomers elected Ronald Reagan as the oldest president ever, and he got Altzheimers from the stress of the office. Then the Boomers elected Voldemort to be the oldest president ever and he's halfway to vegetable at this point. Now the Boomers have elected Biden to be the oldest president in history, and we expect him to do better? Even younguns like Clinton and Obama had their hair turn grey in office. I expect Biden to basically _melt_. The best thing he can do is hand off to Kamala quickly. But let's not focus on that: even numbered day. Good news. Let's see...

A few months back Chinese engineers prototyped a fully electric jet engine. I still expect we'll need fuel cells to power it (it's hard for any sealed battery system to compete with "half your reaction mass is atmospheric oxygen you didn't have to carry with you"), but that's not a big lift for long haul traffic. (Batteries for ground travel, fuel cells for sea and air travel. Or again, make methane and call it "natural" gas if you still buy into the fossil fuel marketing campaign from Bob Hope's prewar radio show.)

November 7, 2020

American Airlines has taken advantage of the distraction to rename the 737-Max the "737-8" and quietly put them back into service without even the software changes Europe made. Late Stage Capitalism is also combining intellectual property with surveilance capitalism and trying to spin it as a good thing that your phone listening in your pocket can now fine you for singing.

Today over ten states are at 100% hospital capacity due to Covid. When more people show up, they physically can't be treated. There's no people working there with a spare moment, and no places in the building that aren't already full of sick people. Everybody without a life-threatening condition has already been sent home. It doesn't matter if you show up bleeding, someone else would have to die so they could treat you.

But the octogenarian Boomercrats are the real problem. THEY are why the GOP's fall into fascism has gone largely unopposed. The reason arizona went blue was because native americans quietly stood up and did things, not because anything the DNCC did. The Boomercrats dismantled Howard Dean's 50 state strategy that broke Dubyah's hold on the house and senate. They dismantled Obama's Grassroots Army. The Boomercrats not only fought against AOC during her election, and mocked her agenda, they blacklisted vendors willing to work with challengers like her, something The Squad immediately fought back against. AOC only won by beating a Boomercrat incumbent who outspent her 10 to 1, and the octagenerians were HORRIFIED, and have staunchly opposed everything progressives have tried ever since. At BEST they're Neville Chamberlain, at worst they're Vichy France.

Young progressives like "The Squad" aligning themselves with the DNCC was exactly like the Lincoln Project doing so, or the USA allying with Joseph Stalin during World War II. War makes strange bedfellows. But the problem is Boomers. They've poisoned the GOP beyond redemption, and the DNCC needs just as much scouring until every last Boomer is gone. (This is also why Beto O'Rourke annoyed me, he was a glory hound, rather than focusing where he could do some good he grabbed the spotlight and went full-on White Guy and made it all about him. As this interview with Stacey Abrams says, "white people are going to white".)

80 year old Nancy whines about the need to be less progressive, but the wins were all progressive. Boomercrats keep centering clowns like Jim Clyburn who are also 80 years old, but any success was in spite of them, not because of. They don't even question over 5 million people being denied the right to vote by felony disenfranchisement laws (something other democracies don't have). The school to prison pipeline in republican states means high school students can start life with a felony assault conviction for fighting in class (putting them in the 47% "violent felon" category that most people dismiss as unsalvageable, for life). The Boomercrats want a "return to normal" that INCLUDES all those things, frozen in time just like they are.

Sure, the GOP is utterly horrible. The logic of the $1200 coronavirus payment was obviously "$7.25 federal minimum wage, times 40 hours, times 4 weeks per month = $1160". If they'd paid that per month everybody would be living on minimum wage, but it was approved in march providing a check for april, and then the democrats passed another one in may and the republicans blocked it. So people have been given no help in may, june, july, august, september, october, or so far into november, all because the GOP wouldn't act on the bill passed back on May 15.

But the Boomercrats not only don't remember how to fight, and don't WANT to fight. They passed ONE stimulus bill in April, which was ignored, and then went "oh well, our job is done and our hands our tied, nothing more we could ever possibly do". They half-assed impeachment exactly ONCE instead of impeaching him for each new issue (you gonna run the Gish Gallop, we can impeach you for every single impeachable offense and run constant Nixon Hearings on you, and each time recite the full list of crimes from the top; Boomercrats can't even get "peperidge farm remembers" right and that was ABOUT being an ominous geezer with a long memory). They took no strength from the protests, they fumbled or dismantled every grassroots thing. All they have is top-down Boomer blindness. The Boomers' time has long since passed, and the rest of us will continue to struggle until the Boomers move on. Right now Boomers own the DNC and everyone else only reluctantly votes for them to block an even more Boomer controlled GOP, because "stop Booming" is never on the menu. Boomer Media ensures it.

The Zuckerberg principle doesn't just apply to Facebook, but to the rest of the GOP too. Back around 2010 the GOP wasn't looney enough so the Tea Party took it over, and now the Tea Party isn't looney enough so the Q-tip party is taking it over. Sure, moving the overton window by shouting "clean cup move down" so the billionaires could harvest organs for profit was profitable, but now the billionaires are trying to stretch it further to avoid being guillotined (since the 2010 round moved "taxing them" out of the public debate), and the ra/fasc/sexists are trying to stretching it to avoid being #metoo-ed.

Speaking of, here's the nutshell explanation of White Male Privilege: Johnny Depp (the man who managed to invent whiteface as a form of racism) just got fired from playing Grindelwald in J.K. Rowling's "When authors run out of ideas they write prequels: the movie, part 4" after he lost his libel suit against the Sun, which reported he beat his ex-wife Amber Heard and had drug/alcohol problems. The White Male Privilege part is this bit:

However, the judge did not find in his [Depp's] favour, ruling that while Depp, "proved the necessary elements of his cause of action in libel", News Group Newspapers showed that what they published was "substantially true".

Depp's legal team have said they will appeal... the decision, calling it "as perverse as it is bewildering" and "flawed".

After the Sun proved in court that it's true he DID beat his wife just like they said, Depp finds his inability to successfully sue them out for libel ANYWAY "as peverse as it is bewildering". That's the explanation: he honestly doesn't get why the other side being RIGHT should stop him from winning. That part of his brain is missing, the idea of anything anywhere not being for and about him can't fit in his head, and never will.

27% of the populace is unsalvageably broken (variously known as the crazification factor and the Alan Keys Constant). Stop trying to RECRUIT them and start working AGAINST them. Build a society in which they may never stop WANTING to kidnap a dungeon full of sex slaves, but are 100% certain that if they try they live in a society where having a hot poker inserted into each relevant orifice shortly thereafter would be something that if they're VERY lucky they might be able to plea bargain DOWN to.

Maybe we can't achieve all this any time soon, but we need to get our GOALS right (what A.R. Moxon calls a compass statement). Kennedy didn't "maybe someday, baby steps" his way to the moon, and FDR didn't compromise with the "nattering nabobs of negativism". You never start haggling at the absolute minimum you'd possibly ever be willing to accept, and the fascists aren't the only ones who can sharpen their edge of the overton window.

November 6, 2020

Jeff's scheduled to fly back to Canada on Saturday (gotta shut down SEI, and Air Canada's reducing its flight schedule from Japan to once per MONTH, plus he's only allowed to stay 14 days without solving a chicken and egg paperwork problem he probably has to solve from canada), so we're rushing to get as much done before then as we can.

I miss my twitter account. If I still had it, I'd reply to this with a picture of Tilda Swinton as the 13th Dave. (Nevermind, sombody beat me to it. Twitter's gotten darn hard to navigate...)

ARGH! The toybox-x86_64 binary I uploaded with this release segfaults on Jeff's laptop. (It's the darn "686 code running on an 486" problem in the 64 bit space again, like I had with the Android NDK until I switched laptops. I need to add another command line argument to the x86-64 target in to tell gcc to not.)

P.S. Intel INSISTS you say i686 instead of 686 because you can't trademark a number so they HAD to add letters to x86 and ia32 and so on, and they BEG you not to call it a 386. Which it is. It's not that "i386" is "more correct", it's that Intel want you to say "bud lite(tm)".

November 5, 2020

It's not resolved yet.

If white men voted like white women, or like black men, democrats would sweep the field. The only reason the republican party is still a thing is because white men. I am disgusted by my nominal demographic, and doing a "not like the other boys" thing. (Warning: tiergruben)

I'm trying not to get my hopes up. If the dorito couldn't kill, Biden won't be able ot kill ICE even if he wants to. (Which is a big if. I don't want to have to wait for the Boomers to die before we can fix things. The Boomers are holding onto power by their teeth, and we're all waiting for those teeth to fall out, but it's taking too long.)

I envy New Zealand.

The NYPD is a turducken of evil.

November 4, 2020

Too stressed to eat most of today. (While I could stand to lose weight, vitamin D probably isn't the only important one for coronavirus reinfection.)

I dug up the old Vinny's Computing Software License Agreement I saved from Fidonet back in college. It's more or less the reason I started paying close attention to what software licenses actually said, and I can't find it on the modern net when I want to quote bits of it at people, so here it is from my old files.

I need a shared editor with branching undo. You can't pair program through google docs (you sort of could through writely back in the day, but google docs is a Word clone, not a text editor), and screen -x gives you two views of the same terminal, not two cursors in the same document.

Unfortunately, it looks like I'm going to have to write it, which would easily be another application of the editing plumbing I planned to do for vi (and share with toysh command history editing, which has to be multiline already because wrapping and line continuations and such).

How are HERE documents supposed to show up in command history? Busybox hush treated each line as a separate command history entry regardless of context, so individual lines of HERE documents polluted the scrollback. Bash has them all collated into one thing with embedded newlines.

Making ethernet and usb work off the same clock is #*%(&#%& fiddly. Jeff says the hardware Voltage Controlled Ocillator on the spartan 6 can go from 600 mhz to 1.2 ghz, until he looks it up and the spec sheet says 400 mhz to 1080 mhz, with inputs from 19 to 300 mhz, for the Spartan 6 we're using. Fine. (Fix the comment.)

A Voltage Controlled Oscillator works by vibrating at a controllable speed within a range, and then you hook one of its outputs up to a divisor (if all else fails, a counter that triggers ever X clock cycles, but dividing by 2 is especially cheap since it just needs one transistor, to toggle every time it sees a rising edge so its output is half the input rate). Then feed that divided clock pulse into a "phase comparator" with a reference clock of the same speed you've theoretically divided down to. When the reference clock edge comes before the divided output's clock edge, the phase comparator tells the VCO to slow down, when it's the other way it tells it to speed up, and thus he phase comparitor tunes the VCO to run at an exact (synchronized!) multiple of the reference clock.

Right now we have 2 crotchety pieces of hardware that need to run at a specific speed: the USB phy (60 mhz) and the Ethernet PHY (125 mhz). Everything else (processor, memory, sdcard, spi flash, etc) can run at a range of speeds, but those 2 talk to the outside world. The serial port also talks to the outside world, but serial ports resynchronize themselves to the other side's leading clock edge every byte so can be a couple percent off the correct speed and still work fine. So for serial we just need to know what rate our clock is at and set a divisor to get within plus or minus 2% of where we want to be, but the other two send much larger bursts and must be VERY accurate (tiny fraction of a percent, at the level the crystal already varies by temperature).

So we need one clock rate that can produce both 125 and 60 mhz, and have 2 reference clocks we can use as inputs: the 25 mhz crystal on the Turtle board, and the 60 mhz output from the USB PHY chip pin. That USB clock is itself generated from that 24 mhz crystal on the USB hat we had to solder an extra resistor to, presumably they're multipling it up to 960 mhz with their own VCO (I.E. reference clock divisor = 40) and then dividing 960 by 16 to get 60. (Remember: divide by 2 is cheap, and divide by 16 is just 4 divides by 2.) Each VCO has multiple output pins, each with its own independently controllable divisor, so you can get lots of slower clocks but they must all be evenly divisible by an integer from the VCO clock speed.

The Turtle's 25 mhz crystal made it easy to drive ethernet, which needs 125 mhz (5*5*5), and usb needs 60 mhz (5*3*2*2), and the common frequency you can divide both from is 5*5*5*3*2*2=1500. (This is prime factorization from middle school.) Unfortunately, 1500 is faster than the VCO can run and no speed SLOWER than that can divide down to both evenly using integers.

BUT! It turns out the input to the ethernet phy isn't 125 mhz, it takes a 50mhz clock! That's just 5*5*2! Which means we need 5*5*3*2*2 = 300 mhz, or a multiple thereof. (Our VCO can't go that slow, but it CAN do 600 mhz, so we used that and added an extra divide by 2.)

Next problem: any circuitry that isn't run from a common output of the same VCO needs a clock domain crossing, which basically means implementing a serial port inside your circuitry and reading the oversampled data to find start/end bit edges of the other side's signal and figure out where bits go. (Correcting divergent clocks between two machines is where serial ports shine.) But we'd like to avoid that because it's a lot of work and results in a large circuit.

The problem is, the 60 mhz clock we're running the USB circuitry for (output from the VDSO) isn't the 60 mhz INPUT clock that says when it's safe to read the output of the PHY or provide data into the PHY. The two clocks have jitter relative to each other, plus or minus a few percent as random thermal noise makes 'em jiggle and the phase comparator yanks it back. The problem is, if the CPU clock jitters BEFORE the USB clock, we'll read the signal before it's ready and may get the wrong data.

So phase shift: the VCO circuit has a configuration knob on its outputs to rotate the signal before or after the reference clock edge, and if we twist it 90 degrees our edges occur midway between the edges of the USB clock input signal. Which means if our edge jitters forward or backwards a little it should never be BEFORE the "it's safe to read now" edge, or too close to the end of the period where the signal starts setting up for the next period. (Jeff says halfway between is ideal because we read _and_ write, and write means the other side is snapshotting the signal we sent at the edge, so we want as much space as possible from EACH end of the clock period.)

So we did this, and it works! We now have a bitstream that can't boot without the VPN hat, because that's where it's getting its clock from. :)

November 3, 2020

Today is the day. Voter supporession is in full swing and Boomer Media is blowing it on all cylinders, while late stage capitalism continues to suck, as does silicon valley. But given the day starts in Japan 11 hours earlier than it does in Austin we go to sleep about when voting starts.

I don't understand how a party can fail so hard and still exist, until I ponder that Good Cop is basically the Washington Generals of political parties. They exist to get dunked on.

Here's a more extensive takedown of the misogyny at the BBC, which of course has been slowly taken over by the Tories ever since Rupert Murdoch installed David Cameron in 2010 to nerf Sky News' competition.

November 2, 2020

Sigh, really bash?

$ function example {
> echo hello;
> }

I keep bumping into corner cases I was previously unaware of. I suppose that explains why the "function" keyword exists, though...

I wonder what it takes to build infrastructure to convert curtailed solar electricity into methane on a useful scale? We've got buckets of infrastructure to store/transport/use it already, and we could easily convert airplanes and container ships to run on the stuff. Sure it's not as efficient as battery storage, but we're talking FREE leftover electricity converted into a form you can store for years if necessary, and it's carbon neutral the exact same way biomass is. (Burning it releases the carbon you just pulled out of the air to create it. That carbon was in the air last month, the stuff you dig up out of the ground was last in the air upwards of 2 billion years ago.) Yes methane is a potent greenhouse gase but it's only got a 7 year half-life in an oxygen atmosphere (it slowly breaks down into CO2 and water on its own, burning it just does this SUDDENLY).

The "methane from air" reaction also takes water, but we've got tech that pulls water out of the air from the same surplus electricity. This tech may also be the easiest way to get good water supplies to Tuba City in Arizona's Navajo reservation, otherwise the shortest path to the sea A) crosses the mexican border and is thus political, B) goes past cities full of old white people that would steal the water as soon as the pipeline got built, C) desalination produces salty brine that has unavoidable environmental impacts, see "political" above. Going west to california is farther (across death valley), still has B and C, plus high mountains to cross.

William Gibson said the future is here, just not evenly distributed. When you start deploying stuff like solar panels in the 1960's space program, the volume goes up and the cost goes down. Early prototypes cost more than a house, fifty years later it's cheaper to buy a new one than fix minor flaws. We should start driving these cost curves ASAPBD. (As Soon As Boomers Die.)

November 1, 2020

Jeff and I have got a lot of stuff done over the past couple weeks, but it hasn't resulted in deliverables yet. Much progress, little destination.

Somebody wrote a blog post hoping that Microsoft Github would stand up against the RIAA over the youtube-dl takedown, because "Copyright law is now used to suppress instead of promote creative works. The DMCA, in particular, favors the large rightsholders over smaller developers and creators." Except... that was the point. That was ALWAYS the point. The reason the DMCA was created was to protect dying business models from competition, and increase the market-cornering monopolization potential of late-stage capitalism. That was its direct, explicit, intentional purpose. It never had any other. And expecting MICROSOFT to push back against that is like expecting Habitat for Humanity to become NIMBY slumlords using zoning and gentrification to pyramid scheme a Real Estate Investment Trust. It's not what they're FOR. (Microsoft harvesting open source is like Disney harvesting the public domain for movie plots.)

A facebook recruiter emailed me. I replied with a few links I had lying around and asked how they slept at night:

On 11/1/20 9:31 PM, XXXX wrote:
> Hi Rob,
> I hope this message finds you well! My name is XXXX and I’m a recruiter
> working with the Infrastructure Engineering team at Facebook.

> Your background
> with linux and python really stuck out to me as a great fit for our _Production
> Engineering_

> positions, so I wanted to open the line of communication and make sure you were
> aware of the opportunity.😊

> I completely understand if it’s not the right time for you personally to talk
> about new opportunities at Facebook, given the uncertainty around the current
> situation.

> So feel free to select a time for a quick chat, or let me know what's
> best for you.>

I've followed Facebook since they started, back before even Zynga:

I do not and have never had a facebook account. How do you sleep at night working for them?

> I have also included the job description for the opportunity down below for your
> review.
> I hope to hear from you soon!

This seems unlikely.


October 31, 2020

I'm missing halloween. My quarrantime period is over, but I don't KNOW anybody in Japan, and heading to Shibuya to "see the crowds" seems contraindicated. (I had lunch in a sezariya that would have qualified as a superspreader event back in texas. Hundred people without masks tightly packed into a big room with windows that don't open. I'm reasonably confident I had the virus back in march, and am not vitamin D deficient, but I was not happy about that and once again tried to eat with my mask on, which never works. (Pull it up from your mouth as you take a bite, the bottom edge sort of seems like it'll stay between your upper lip and nose just long enough to fall down into the food right as the spoon goes in. Every time.)

I'm trying to find solar panel manufacturing capacity by country, and google keeps pulling up solar panel installed capacity. I want to know how much countries can INCREASE capacity each year via domestic manufacturing.

So far I've found 2017 figures, which had china making 71 gigawatts of new panels per year and the USA making 2 gigawatts. (Everybody else in that graph _combined_ was less than half of china's capacity, this is why Obama was subsidizing companies like Soylindra that couldn't compete with chinese imports without sufficient subsidies to improve and build up capacity.)

So now the question is if Biden subsidizes solar panel manufacturing, how fast can we build more capacity so we can build panels so we can install them so they can produce power? What is this, third derivative of the line that needs to go up? Location, speed, velocity, acceleration, jerk, snap, crackle, and pop. (Yes really on those last three, according to wikipedia[citation needed].)

October 30, 2020

Pondering motivated reasoning. Of course china's largest natural gas supplier would announce it expects natural gas demand to double (when china's actual _government_ has pledged to become carbon neutral), and of course Opec hopes oil demand and investment increase rather than decrease. If you set about to prove yourself right rather than find the truth whatever it may be, you often come to different conclusions. The truth is often inconvenient. (That first article also makes the classic mistake of "we interviewed the football team's kicker who said they expect to do a lot of kicking, why would the coach recenter the team's strategy around kicking, let's speculate..." *facepalm* Going "why will the country primarily concerned about self-sufficiency double imports from russia and myanmar"... sigh.)

Oh, and the main reason the oil industry hasn't tanked more (other than putting a cheerful face on bad news) is china's buying spree back in march, taking advantage of the fire sale where oil prices literally went negative, is just getting delivered now. All that floating storage takes a long time to unload, and it only gets booked as revenue when it goes through customs and the money comes out the other side. So the oil industry is still booking revenue today from sales 6 months ago, which makes their balance sheets look less cratered. (Meanwhile they not only can't afford money for exploration, they can't keep up the legal defense of increasingly unnecessary pipelines. Russia's kind of screwed by all the natural gas that turns out to be under the mediterranean, why should Germany buy from Putin when they can buy from Egypt or Israel? Neither of which has ever posed an existential threat to europe.)

But the main story is still China got embarassed by the 2008 beijing olympics' air quality and pivoted away from coal in its next five year plan, then ended expansion of its strategic petroleum reserve in the five year plan after that (greatly reducing its oil imports and causing the 2014 oil price crash, causing a wave of oil bankruptcies the current crash still hasn't matched, largely because the financiers are allowing companies to borrow more money for longer this time around, so they go out owing twice as much money, presumably in hopes the government just bails the banks out again with the freshly printed dollars they won't use for Basic Income).

China's upcoming 5 year plan is widely expected to do to gas what the previous two did for liquid and solid fossil fuels. Which didn't suddenly end either industry, but did mark the peak followed by a long downslope. From there on, suppliers play musical chairs chasing an ever-shrinking market in terminal decline. This is why GE got out of the gas turbine manufacturing business: the financiers stopped paying to install the things because they don't expect them to be in service long enough to pay off that loan. Touting the advantages of gas as a "transitional technology" ignores the question "transition to what"? Gas is just a rebound relationship, the transition is TO solar, wind, and batteries.

The fossil companies are consolidating, which is the same "dinosaurs mating" as the mainframe computer industry went through in the "IBM and the 7 dwarves" era: fortune 500 companies don't die, they get acquired. A series of mergers and acquisitions can reduce 30 companies to 3 without any of them ever going out of business per se: sure they were sold for 1% of what they used to be worth and then dismantled and their office furniture auctioned off, but it wasn't a crass bankruptcy. That is beneath such lofty institutions.

And "your oil is worth nothing but we want your gas" brings us back to motivated reasoning: the fossil fuel companies very much want there to still BE a fossil fuel with a few more years of profits in it. They've got to focus their efforts somewhere, and moving into solar and batteries and wind is hard because they don't have existing expertise in any of that, which the competitors already in those areas already do. (Disruptive Technology 101, from the 1997 book I reviewed 20 years ago. By the time the old king of the hill realizes it's time to move, it's too late.)

Meanwhile, the hopefully-last Boomer president is trying to kill as many people as possible on the way out, now with nuclear waste/fallout. (Biden isn't a Boomer, he was born 3 years before WWII ended. He's not quite greatest generation either, he's whatever the Joneses are on the other end.)

October 29, 2020

There's an eight stage pattern of domestic abuse escalating to homicide, and I'm wondering how it relates to the republican party and Trump? (There was a lovely thread last month on how the narcissistic variety of sociopath can't just leave a relationship but must DESTROY it, and has an "Annihilatory Rage" stage. Unfortunately I can't seem to find it anymore. Blonde lady? Linked from either @jonrog1 or @cstross feeds most likely? Or maybe from @kbspangler. Yup, still trawling individual feeds since I lost my twitter account. Same way I use tumblr: this is what an interesting person had to say or forward today.)

I first saw a button about declaring billionaires a game species in middle school, but I didn't really get on board with the concept until the whole Occupy Wall Street stuff. Sure Gates was an asshole but Warren Buffett seemed all right? Now he seems cold and distant and uncaring, stepping over the bodies to enter his office. If you think Occupy Wall Street was a waste of time, it informed a LOT of people of the existence of an issue and that there was another side to the argument with some good objections and real data. Protests aren't always about the immediate win, they can be about building support and spreading information in the larger community. (George Floyd protests -> voter registration drives, for example. They don't promise jam tomorrow, they DELIVER it.)

Querying your existing team about bias is itself a form of bias.

Being informed about, visiting on, and reporting on city councils is important. We need more of this to take up the slack from Boomer Media going off the rails. That thread documented potentially suspending Denver's fair elections fund, and awarding a $25 million contract for the capitol building's security to a company whose "guards were involved in the beating of Raverro Stinnett in a Union Station bathroom". (Police wannabes didn't beat a guy, they were "involved in the beating of" the guy.) Perhaps there's some way of reliably crowdfunding this sort of thing. Patreon for journalists, band together... (In THEORY this is what taxes are for, to fight OFF the tragedy of the commons. Alas "regulatory capture" by special interests is NOT punishable by death for some reason. Athens used to exile people back when it (re)invented democracy...)

Misogyny looks like "look how being held responsible for murdering her has ruined his life!" The man-centered narrative attempts to make victims of perpetrators because that's who the camera follows, so they must somehow be sympathetic like Hannibal and Dexter and Batman (all well-off white guys, even though batman makes more sense as a black man).

Every accusation a confession was a bit more thorough than I expected this week. AOC called out the septuagenarians in her party for preemptively caving (because the Boomercrats always do). Meanwhile, guillotines remain popular, as does snark. Elon Musk remains terrible. The GOP has turned into a death cult because all the Boomers have left to do is die, and they want to take as many people with them as possible.

October 28, 2020

Ok, putting together a demo for a $DAYJOB project and the handoff from coworker is an image using 4 busybox binaries: hush, route, stty, and udhcpc. Which says those are the 4 commands I need to focus on promoting in toybox next time around (before product ships).

Eric Molitor did a bunch of cleanup on route, so I should really revisit that for cleanup and promotion, but I have existing todo items on that command which also need addressing so it's not a quick thing.

The most prominent thing missing from toysh is command line history, but I just bumped into the fact that busybox hush adds every line of HERE documents to the history, which points out that doing that right isn't quite as simple as I thought...

And busybox udhcpc won't "ifconfig eth0 up" the interface, it just fails if it's down, and loops endlessly retrying. (Silently when daemonized.) And I don't think it runs without its script either, we just installed a script for it in this initramfs. (There's screamingly OBVIOUS default behavior, it just won't do it for some reason. It has a default inittab when there's no /etc/inittab, but not a default "apply address and netmask to interface and write /etc/resolv.conf" when there's no script.)

October 27, 2020

Instead of USB work we started the day creating investor presentation "collateral". (Business model slides, budgets, schedules...) It's still not my area, but somebody has to do it.

Got back to the hotel earlier than usual (Jeff was off presenting) and started poking at Linux From Scratch 10.0. The package list is... not clean. There's still a sysvinit version, but they've added ninja to the base OS now, and in order to get utf8 support in man pages they switched to a version (man-db) that needs a database package (libgdbm) and something called libpipeline. (It's the man command. It's from 1974. You should not need multiple packages to implement it. Sigh, I need to review and promote toybox's man command. And toybox still needs sysvinit. And route. And...)

I'm grinding through doing the first install of each LFS package by hand, not even scripting it, on the theory I need a reference run. I should snapshot the /tools directory (which is now chapter 7, not chapter 5 like it used to be) because that's what mkroot needs to replace. (It's what's cross compiled from the host system before you chroot.)

Meanwhile, all this reading up on USB is in service of trying to get a CDC-ECM (Centers for Disease Control - Electronic Counter Measures) device working, which is the original generic hardware-agnostic USB ethernet protocol from 20 years ago. Conventional 10baseT wired ethernet across cat-5 cable shovels 1.1 megabytes/second down said wire. (Yes I measured it: that's not theoretical anything that's actual speed on a dedicated 1 hop link. Good to know.) Since USB 1.1 has 1.5 megabytes/second capacity, they're a good match. (Almost certainly designed with that in mind: 12 megabits, minus overhead, 10baseT.) 100baseT goes 11 megabytes/second (again measured) and USB 2.0 has 60 megabytes/second of theoretical capacity (and about 4 times 100baseT's actual capacity).

To take _full_ advantage of gigabit ethernet you'd want a faster protocol, but when gigabit ethernet arrived the actual benchmarks were indeed only around 40 megabytes/second, not just due to USB 2.0 but also PCI bus bandwidth limitations and so on. (Nothing in the system was going much faster than that yet.) In theory gigabit ethernet can now do the full 110 megabytes/second, but again: you don't need it most of the time. Netflix advises 25 megabits/second for its 4k HD streaming service, so a single 100baseT connection could theoretically handle 4 of them simultaneously, and a usb CDC-ECM connection being 4x that speed could handle something like 16.

The main real-world uses for gigabit ethernet are connecting together floors of buildings, backing up terrabyte data stores, network mounted hard drives shared by multiple users... It's not what individual endpoints need, it's what bundles of endpoints need, or hundreds of hours of accumulated output going through batch transactions. And then 10gigE gets used to connect buildings, or special purpose uses like filming in HD slow motion at hundreds of frames per second with multiple cameras. For normal use, a dedicated 100baseT connection (let alone 4x that) is fine, and the dregs of Moore's Law seem unlikely to change that any time soon.

Unfortunately, despite CDC-ECM being a generic 20 year old USB 1.1 standard that works the same for every device, Windows never shipped a driver for it in the base OS. MacOS has one, Linux has one, Android has one, but Windows does not. Instead you have to pay a third party vendor around $30,000 to add a new Vendor ID to their deriver, which is then signed by microsoft (which presumably gets most of that money) and loaded into the Microsoft repository of drivers that will be automatically downloaded and installed when you hotplug an unrecognized device and click "search for drivers on the internet".

The Linux CDC-ECM "gadget" driver (a software implementation of this USB device's packet protocol) says you can provide an .inf file telling windows to use an existing CDC-ECM driver to talk to it... except in Windows 10 the .inf file must be signed by microsoft, because the convicted monopolist that avoided any actual antitrust penalties because a republican administration took over right after the trial refuses to allow device vendors to avoid paying them tens of thousands of dollars to support each new device, even though it speaks the exact same standardized protocol and would "just work" if they used the existing driver.

For extra fun, the link from the vendor's website to the actual windows driver project page or manual went down in 2018, and says it was a link to google drive in a way that was not properly cached because javascript or something. Searching for the PDF, google finds scam sites trying to virus you. (Remember, this is all because microsoft won't support a standard protocol, and third party drivers have to be signed by microsoft to the tune of tens of thousands of dollars.)

Anyway, the problem with our implementation turned out to be that you need to define TWO interfaces, the first has no data endpoints and the second has both data endpoints. Apparently ifconfig down and ifconfig up toggle between the two interfaces? This does not appear to be mentioned in the actual spec that I've found, we had to look at an existing implementation to see what descriptors it was sending and then puzzle out why. And the first example implementation we looked at didn't have it and apparently could never really work. Also, did you know MacOS rewrote its USB layer after Steve Jobs died, and the new one has zero useful error logging? So when it fails because of bad descriptors, the interface is just always down and never goes up despite the link status and link speed messages.

Anyway, 4 of the five operating systems we're testing against now get to the point where they send regular "do you have a packet for me" probes, which is where we declare victory for the day. (Mac, windows 10, devuan, and android are happy. Jeff's gpd pocket 2 running elementary linux sends a bad transaction (second zero length data packet in the same transaction) which confuses our state machine. (Probably a host controller driver bug in Linux, but we need to improve an error path at OUR end to cope with that before timeout/reset happens.)

But that's not a system we're demoing connecting to, and what we need to do NEXT is create a data interface with the rest of the system so packet data has somewhere to come from and go to.

October 26, 2020

Reading the USB 2.0 spec. They agree a byte is 8 bits in the definitions (despite Jeff insisting that the 8 bit groups the plumbing we're dealing with is using for I/O are completely arbitrary), and say a word is 2 bytes and a dword is 4.

The USB 1.1 speeds were "low speed" (1.5 megabit/second) and "full speed" (12 megabit/second), and usb 2.0 added "high speed" which is 480 megabits/second I.E 60 megabytes/second. Yes, full speed is slower than high speed, you can tell Microsoft was on the committee.

Aside: USB 3 exists because backing up entire terabyte drives is inconvenient otherwise. 1 million megabytes at 60 megabytes/second is 16667 seconds, which is 278 minutes, which is 4.6 hours, which means USB 2 can theoretically do something like 5 terrabytes/day. In reality due to the stupid "Every packet must be surrounded by a ping and an ack from the host! No streaming!" nonsense (you can tell Microsoft was on the committee) you only get maybe 3/4 of that speed, but it's still plenty for most real-world uses. (I googled "what is the usb ludicrous speed frame size" and it pulled up a page on USB 4. Not now, skynet. Anyway, usb 1.1 uses 64 byte packets, usb 2.0 uses 512 bytes, and 3.x is presumably "bigger".)

USB is a little endian protocol: big endian seems dead everywhere, but I can't convince jeff of that so J-core is still big endian until I learn enough VHDL to make a config option.

The "host" is the PC driving stuff. USB is basically token ring: none of the devices can say anything until the host pings them, then they get to send one packet in response. (In the packet captures, there's been a little over 20 bits of downtime between packets going in different directions, which Jeff says is to let the transmitter shut down and the line stop "ringing" before the other side sends on the same way. Haven't reached that part in the spec yet, but in addition to one throat-clearing packet on each side of the data the device can send, there's a ~3 byte gap between each packet when you change direction. You can tell Microsoft was on the committee.)

A device can't notify the host of anything until the host pings it, so the only way a USB device can wake up the host (keyboard press, ethernet wakeup packet, etc) is if the host is powered up and sending it a constant stream of pings, so a USB device that ISN'T constantly consuming power might as well be physically unplugged for all the good it does. You can tell Microsoft was on the commitee.

The terminology is host-centric, so the "Downstream" means either in the direction away from the PC or the instance of something farthest from the PC. They refuse to commit to what "device" means. Anything can be a device, from a ram chip to a logical function to a fax machine. Bravo. Golf claps all around.

An "endpoint" is an I/O address where the device can send or receive data, it's a 4 bit address (0-15) plus a direction bit. Endpoint 0 is the default address you use to probe an unknown device. (In all the implementations I've seen endpoint 0 remains the "control" endpoint after probing, but the spec hasn't committed to this yet. In theory the control endpoint could move for some reason after endpoint 0 sends the descriptors? I don't know why it would, and it would go back every reset, but they won't SAY it doesn't. You can tell Microsoft was on the committee.)

The USB protocol has microframes (125 microseconds), frames (1 per millisecond), packets, and transactions. Packets have a Packet ID (PID). Each transaction has three phases: token, data, and handshake. (I.E. metadata, data, and ACK/NAK.) If it's to endpoint 0 (and/or the control endpoint) it's basically the same but the terminology is different, then it's a Control Transfer with Setup, Data, and Status "stages" instead of phases. (You can tell Microsoft was on the committee.)

Huh, this PDF isn't a bad summary.

October 25, 2020

Today, Fade bought milk that's expected to last longer than this presidential term. I'm rooting for the milk.

You can sing "Boomers are greedy" to Ave Maria.

Long lines for bread in the soviet union meant their government couldn't provide for people's needs exactly the same way long lines for voting do today.

The rich have always murdered the poor when we get "uppity". (Everybody who isn't in the 1% is "the poors". 99% of the 1% are the direct servants of the 1% so they never have to interact with "the poors" outside of photo-ops.)

The british aristocracy still hasn't learned that "let them eat cake" was a bad look. (Yes I know it wasn't actually Marie Antoinette who said it but probably Which wikipedia[citation needed] Marie-Therese the wife of an earlier King Louis.)

Capitalism renamed "medical history" as pre-existing conditions to excuse letting sick people die for money. The pandemic is exposing capitalism as a giant fraud.

Here's video of the NYPD confiscating PPE being handed out at polling places, and more stuff is coming out about the Breonna Taylor grand jury. Honestly, why do we have police again?

Oh wow. only 28% of voters oppose ending the oil industry (and 27% of the population is John Rogers' "crazification factor"). Oil money poisons everything, which is the "resource curse". (Finance does it too these days, but oil's had longer to fester. Any plutocracy whose source of wealth is NOT the labor of the citizenry doesn't need those citizens, and would just as happily murder them all if they could get away with it. They can import food and luxuries and bodyguards and sex workers. This is why guillotining billionaires is civic hygiene.)

Tesla continues to set back the cause of self-driving cars by deploying terrible implementations that kill people and discredit the idea it's something companies like Google can competently do. (with bonus police failure). Deploying level 2 "partial driving automation" is STUPID because it means the human isn't engaged (and thus won't pay attention) but the system can't cope on its own. Don't DO that. Tesla's entire APPROACH to self-driving is fundamentally flawed even without Musk's sour grapes about Lidar.)

Further details about the foxconn plant in wisconsin that wasn't real.

The "culture war" is a Boomer extinction burst, which they will continue to make worse as long as they are physically able.

Just do basic income already. I'm tired of evil bastards steering. (Every accusation a confession, du jour.)

October 24, 2020

Took the day off to work on a toybox release. (Yes it's saturday, but while I'm here in Japan that counts as taking a day off.)

In the process, I've had to contact Clay Shirky to tell him his website was down for a SECOND time. (I linked to one of his articles from the FAQ, which I'm reviewing. Last time is why he followed me on twitter.)

I posted another patch to linux-kernel. I don't expect it to amount to anything, but... they're wrong. And it's that whole "reviewing the docs makes me want to fix the code" thing, explaining how launching mkroot instances with the qemu launch scripts works makes me want to re-enable the kernel init messages (which makes it a lot clearer what you're doing, with that chroot and ./qemu-*.sh look almost identical), but the reason I added "quiet" is the kernel was the message that link was complaining about...

I'm being lazy and uploading the binaries created by mkroot, which have route and sh in them so aren't quite defconfig. I should really fix that next release, but I need to down tools and focus on $DAYJOB for the next couple months so I'm not starting the 3 month countdown to the next release before January.

Darn it, the kernel patch isn't sufficient, kernel boot messages are mostly level 7 (the "random initiallized!!!" message is like 3 levels higher than normal chatter for no obvious reason). Plus that one isn't the only command line stomper, eth0 going up does it too.

What I need to do is shift the log level way DOWN in the init script (so we see the boot messages but not later spam), which means /init writing to /proc/sys/kernel/printk which is not one control knob but FOUR, and I vaguely recall looking up what the 4 were a couple years ago (by reading the source) but don't seem to have blogged it? (The "printk" control plumbing is in kernel/sysctl.c which writes the data into the console_loglevel array, and I had to track down where that was consumed.) I wonder if I tweeted it instead? Yes, I did. So maybe I just need to write something like a 3 into the first field? What are the log levels again... 0-7 = emerg, alert, crit, err, warning, notice, info, debug. And I can set it to 1 (alert) through /proc. Ok, do that right before launching oneit so gratuitous async messages about the network interface don't hide the command prompt and make you think the boot hung if you're not looking closely.

Ok, 0.8.4 is up. With mkroot binaries which include a kernel, which is unmodified vanilla 5.9 built according to the included kernel configs.

October 23, 2020

Alright, one scaramucci left. We can do this.

I'm now rooting _for_ the death of movie theatres because it's no coincidence the RIAA sent the youtube-dl project's github a DMCA takedown two days after the twitch takedown bloodbath. Current IP laws prevent all sorts of expression, from remixes and mashups to reaction videos. It's speech that is NOT ALLOWED because it's contaminated with corporate ownership that vetoes it, and it gets EVERYWHERE. Why is the video linked from this article no longer available? Seems like the poster child for fair use, but you need more time and money to hire lawyers to enforce your rights than anyone has. (And you have to track and defend your old content from constant erosion by predatory corporations.)

I'm hoping this is an extinction burst on the part of the RIAA and MPAA: I don't intend to ever give money to anything feeding either organization again. Except I subscribe to four streaming services (netflix, hulu, crunchyroll, and prime) which presumably do give them money. That's the main downside of giving THOSE services money, as far as I'm concerned. Dude: I could pirate all your content, I give you money because I WANT to support your creation of original content. (Yes, even prime as long as it keeps doing things like Good Omens and American Gods.) Heck, crunchyroll is a terrible interface for content that mostly shows up on all THREE of the others a couple years later. (Work out your turf war with funimation though, not paying for two there.)

And I no longer consider supporting anything Disney to be my problem since they went and became their own network (Disney++, now with templates and operator overloading) which I don't and will not subscribe to. (And yes, endgame was less annoying than crisis on secret infinity wars but fridging gamora and black widow the same way seemed a TOUCH gendered? And no, I didn't watch getting a rise out of skywalker, and am not interest in baby yoda shark.)

October 22, 2020

As far as I can tell, the inspriation for BB-8 in the new Star Wars is figure 9-1 of the USB 2.0 state diagram.

How annoyed am I allowed to be that gcc has been spewing "may be used uninitialized" errors for years, but can't reliably spot actually unconditionally uninitialized variables either? I should spend the weekend to learn how to setup valgrind...

October 21, 2020

If you're wondering why I stayed to vote in person, the 5th circuit just ruled that Texas mail-in ballots for democrats may be discarded en masse. (But they'll keep the ones for republicans just fine.)

In the age of Late Stage Capitalism, when you hear about yet another new business model like the recently deceased Quibi ask what kind of scam it's based on. (Because it always is.)

Russia is now sending death threats to individual voters, the GOP is still all in on voter suppression, and yes they're still attacking the post office, still crit-failing the pandemic, all in the name of racism and sexism. (Not just in the USA.) With, of course, the enthusiastic support of Facebook.

Of course the NAACP condemns Amy barrett, who seems to believe abortion should be punishable by death, but the Boomercrats love her, because capitalism or something. The DNC is going to put The Handmaid's Tale on the supreme court so they when the democrats block The Squad from accomplishing anything they still have somebody to blame. Nancy Pelosi is 80 years old.

Yeah yeah, lesser of two evils. Yes, anyone who votes for the GOP this time is literally a nazi and they will never stop escalating until they are stopped. But the Boomers' day is done and they need to get off the stage. The world they managed is insane. Why were no-knock warrants ever a thing? Why did the Boomers allow that to happen in the first place? The Boomers' answer to everything is more police (and inventing crimes), but everybody else's solution is a police involved defunding, starting with reallocation of duties to people who lie less. The Boomers are flailing around lost because their worldview's failure to match reality is being rubbed in their face, but they're long past the point where old dogs can learn new tricks. Rich White People who have always had the world at their beck and call don't know what to do when the "call the manager" buttons stop working. Boomer Media especially failed us. The Boomers were terrible to GenX all along, we were just outnumbered, gaslit, and didn't have the tools to organize until recently.

The downside of worshiping strength is the instant you have a moment of weakness your followers turn on you.

The "excess death" rate of 25-44 year olds is up 26% over previous years, thanks to covid. It's not JUST killing old people. And this doesn't count "long covid" where people who don't die have chronic damage, including neurological issues.

We don't understand economies of scale, lots of amazing things we can do are smaller than things we don't even notice.

The "streisand effect" is when conservatives shriek about something, letting you know it's struck a nerve. This is why reading banned books is so popular.

Twitter remains bad at being twitter.

New Pope continues to be... not a bad person? Confusing...

October 20, 2020

At the age of 92, Tom Lehrer just put all his song lyrics in the public domain, and is working on clearances for his music. The smithsonian just did something similar with its image catalog. I look forward to the end of intellectual property law once enough Boomers die.

Mozilla is trying to keep its head above water with indignant thrashing to rally the libertarians. (You can't let us die because something something FREEDOM.)

The Open Hardware Summit appears to be a trash fire.

In toysh I finished the "source" command and fixed the ${x-a} bug that was preventing the mkroot boot. I... think I'm done? Gotta write up release notes and finish the faq updates, but I've implemented the toysh bits that were blocking mkroot.

Did a few more nommu fixes, since I plan to use that at $DAYJOB soon.

October 19, 2020

It's not that rich white people are stupid, it's that they've embraced the dunning-kruger effect as a lifestyle, and turned large parts of the culture into a scam, to the point they now literally use "you listen to scientists" as an attack against someone's character. When things go wrong they're sure yelling at it will fix it. Of course this is how conservatives have always worked, going back to aristocracy and plantations, and before that to british aristocracy. To quote Clay Shirky:

The situation suddenly came clear: I was getting paid to save management from the distasteful act of listening to their own employees... In the 19th century [skilled craftsmen] became blue-collar workers. And the executive suite no longer interacted with them much, except during contract negotiations.... Talking to the people who understood the technology became demeaning, something to be avoided. Information was to move from management to workers, not vice-versa... By the time the web came around and understanding the technology mattered again, many media executives hadn’t just lost the habit of talking with their own technically adept employees, they’d actively suppressed it.

Add in Milton Friedman's September 13, 1970 invention of a CEO's fiduciary responsibility being solely to investors (completely ignoring customers and employees, which were successful companies' main focus before then), and the resultant relentless short-term decision making that demanded, and this is how we wound up with late stage capitalism as a self-defeating purely destructive force.

Now the rats deserting the sinking ship are desperately trying to rewrite their own histories, when the reality demands neuremberg trials. We've got a backlog of issues to deal with when the Boomers finally die. The residue of the GOP is concentrated toxic sludge forcing enemies together to repudiate them and the regulatory agencies are getting back to business despite them. Of course evangelicals are going down with the ship.

It's easy to fix if you start by yeeting the electoral college, we only need a couple more states. But also, basic income works. The point of basic income isn't to have everyone be unemployed couch potatoes, it's that left to their own devices people find new things to do. Capitalism is TERRIBLE at efficiently employing people, a recent example of David Graeber's BS Jobs was how Scott walker lured Foxconn to Wisconsin resulting in an utter debacle where they hired a hundred people who people who sat in the building with nothing to do, in an attempt to qualify for a tax subsidy. (Meanwhile, Wisconsin spent $400 million claiming eminent domain and bulldozing dozens of homes preparing for work Foxconn had no plans to do, a mushroom cloud of late stage capitalism uprooting innocent people's lives who did nothing wrong and didn't even want to be involved.)

October 18, 2020

New Zealand had a good day. (But then women are consistently better at keeping people alive.)

Oh hey, toybox is in the OIN patent pool now: Android 10 got added to the Open Invention Network's "linux base system" definition, which means toybox release 0.8.2 is entry 2976 in table 10. (Not that I was planning on including anything patented anyway, but yay patent pool.)

If you "echo hello \' > blah; source blah" it prints just "hello" with no trailing \ because the line continuation gets squelched at the end of a sourced file, and "source <(echo 'echo hello\')" behaves the same way, but adding -n to the first echo does NOT behave the same way! The \ is only squelched if the line ended with a newline, it's literally ESCAPING THE NEWLINE. Wheee...

Sigh, throw it on the todo heap. Trying to get a release out...

October 17, 2020

There's an excellent, detailed article about the Resident's dementia in psychology today.

Oh wow, I just saw the dumbest take yet, that meeting demand is "overcapacity". The titanic had the correct number of liveboats because on AVERAGE demand for lifeboats is very low, therefore 12 hour lines to vote every day (but only in black neighborhoods) makes sense? The GOP is the successor to a party called the Whigs, which collapsed, and before that there were the federalists which likewise ended. The GOP ceasing to exist would be a proud american tradition for "the party that is not the democrats".

Would someone please explain to me how stealing the presidency isn't as bad as what the Rosenbergs did? Why were Roger Stone and Paul Manafort given a slap on the wrist instead of executed for treason? Ever since Nixon, the GOP has been escalating their attacks on democracy because there were never any consequences for their actions. They either way, they got away with it. (Current Russian propaganda is aimed at the gullible, a variant of the old KGB "we found a briefcase on a park bench full of incriminating evidence which totally isn't a mix of stolen mail and forgeries!" trick, this time involving a hard drive whose serial number says it was manufactured after the fact.)

Facebook is part of the GOP, every bit as much as Fox News. They intentionally throttled traffic to progressive news sites making right wing news all the top stories they show in people's feeds. (Twitter may be incompetent, but is at least much LESS actively malicious.)

Boomer Media is for boomers, by boomers, about boomers. (And sure, not all boomers, and I'm seeing "karens and boomers" paired a lot, but... boomers can be female?) But it's amazing how easy many problems are to fix if you're just not a Boomer. For example, half the point of basic income is that attaching conditions to aid is just a way of prenting people from getting aid, and serves no other purpose. Either you spend the money checking the conditions instead of providing aid ("overhead"), or you deny access to people who should get aid. Instead just give everybody aid, then tax people who make far more than that amount enough to get it back. (And the point of progressive taxation is earning more never causes you to wind up with less. Billionaires obfuscate that on all cylinders, but it's just not how it works. If you earn 100k taxed at 30% you get to keep $70k. If you earn MORE than 100k, you STILL get to keep that first 70k, and only the EXTRA is taxed at a higher rate. This is why the top tax rate was over 90% until 1964, during a period when the US economy was the strongest it's ever been. It wasn't to maximize revenue, it was to keep plutocrats from dominating american life, and it worked great. But as with everything the Boomers inherited they didn't understand how it worked, clearcut it for short-term gain and let themselves be swindled out of the rest, and now huddle in the ruins blaming brown people. Boomermerica is now an object of scorn and derision in the rest of the world.

As for the Boomers' own ideas, when people actually try a Privileged White Guy theory it always fails spectacularly, but that's not the point. The rich men in charge know it won't work, a model based on the rich stealing from the poor can't work without somebody to bleed dry. No matter how much the GOP hates the rest of us, what they hate most is that they NEED us. Plantations don't make money without slaves. Without the 99%, there's nothing for the 1% to steal.

America is the land of selective enforcement because racism and sexism can't succeed on their own. They're handicaps, part of your talent pool artifically suppressed. During World Wars I and II we employed women because we NEEDED them, and we kicked the ass of countries that didn't.

The GOP's current supreme court candidate is extra-bad, and the democrats won't stop her because Good Cop serves the plutocracy, and the plutocracy still needs guillotining. Good Cop's job is strategic incompetence preventing misdeeds from being punished and keeping open the door to eternal fraud.

NPR just did a thing on the history of the electoral college (spoiler: it's about protecting large wealthy landowners from democracy).

The salvation army manages to stand out as extra-bigoted even when known problematic companies go "that's too much racism". (The point of a dog whistle is everyone else CAN'T hear it.)

Good news: Greece sentenced the head of its nazi party to 13 years in prison. (And unlike Hitler's 9 months in prison where he wrote Mein Kampf, this guy's 62 so is unlikely to rebuild and become head of government 8 years later. If he serves all 13 years he'd be 75.)

Fascists murder people. Their opponents do not. Important distinction. They dislike the concept of democracy because they ARE honestly unpopular, the only way they can "win" is by preventing people from voting.

GOP officially partnering with conspiracy nuts.

AOC is a really good speaker.

Defund the police.

October 16, 2020

Why doesn't youtube have time range support? It has start anchors, which I use for example to pull out individual topics from my 2013 toybox talk in the toybox about page, but there's no END to the range. And you can't glue together multiple ranges to edit out the interesting bits of a longer video (such as when Stephen Fry is talking in this video). And youtube doesn't reliably use the anchor, both due to autoplaying the video from the start and then jumping forward once more javascript has loaded (which takes a second or so even here in japan with fiber connections everywhere), and due to showing commercials breaking sometimes discarding it entirely. That's why John Cleese's excellent explanation of Dunning-kruger (starting at 19 and 1/2 seconds when I can only jump forward in full second increments) isn't useful to show people because the video starts by confusing ignorance with stupidity (not the same thing at all), and of course the title has the word "stupid" in it. But in order to trim together the interesting bits of the video, you need to download it, use a local video editor, and then upload the new one which gets taken down by a copyright stike. Oh well, I'm sure a new service will arise to replace youtube someday...

Excellent progress on the USB stuff today. We've stopped messing with CDC-EEM (which is subtly broken in multiple ways, such as not being able to specify a MAC address for the device), and gone back to the earlier CDC-ECM (which can run at USB 2.0 speeds just fine, our CDC-ACM could do 30-40 megabytes/second (faster in one direction than the other, probably on the Linux driver side), and the 100baseT ethernet connection at the other end of the device is 11 megabytes/second. The pearl-cluching about "collating" seems mostly BS because it sends 1 complete ethernet frame per USB transaction, however many USB packets that needs. We could do jumbo frames but told it standard 1514 byte size because everything can handle that and it only uses 3 512 byte srams.

The Linux usb stack is setting the device filter thingy (the settings for promiscuous mode and such) a dozen times, probably systemd going crazy and calling the ioctl repeatedly. The mac doesn't do that.

October 15, 2020

In Japan! Exhausted. Navigating the covid/customs process at the airport is something like 3x as long and exhausting as just customs was, despite customs itself now being like 1/10th of the total. The "you tested negative for covid" paper is a literal pink slip that tries SO hard to look official.

Ooh, Sarah Taber expanded her twitter thread into a full published article.

There's an interesting tension in chinese energy policy: what they really care about is energy self-sufficiency, which points them towards coal, but "the 2008 olympic air quality made us an international laughingstock" aside, climate change is already trashing their food supply and threatening to bust the three gorges dam (which would be a "tiny but detectable change in the earth's orbit" level disaster displacing more people than the USA _has_). Much of the solar and wind they've installed so far is distant from the cities and doesn't have enough batteries, frustrating the china state grid managers trying to keep the lights on.

Their main other option is nuclear, which means we'll probably have a new entry in the chernobyl/fukushima/three mile island/kyshtym list soon with a chinese name. (The old refrain "nuclear is safe now, this time for sure" remains unconvincing. We still have oil spills regularly, that pennsylvania coal mine has been continuously on fire since 1962, gas explosions happen regularly, and just plain electricity starts fires all the time. But the cleanup time of those isn't measured in millennia. If the Great Fire of London in 1666 had been nuclear the city would still be uninhabitable today. Same for everything from the Boston Molasses Spill to the eruption at Pompeii: stuff happens, don't deploy anything that poisons the land for 25,000 years if you lose control of it.

October 14, 2020

Onna plane. I did not get a toybox release out before my flight. What I did get was something like an hour and a half of sleep last night.

American Airlines has not heard of this "leaving any seats anywhere empty" thing that Delta and Southwest kept emailing me assuring they were doing, and have also decided against beverage service for a mere 1 hour flight to dallas. Took pictures of two White Guys Dicknosing, because of course they were. (I'm pretty sure I had coronavirus back in March, what with having jury duty 2 days before the panic buying started, and then feeling sick for weeks afterwards where I couldn't sleep because my chest hurt too much. But I don't want to get a second strain and test positive. What do they DO with people who test positive at the airport in Haneda? They have reams of writing about testing, but nothing about positive results. Heck, these tests have false positives, what do they DO about it? Crickets chirp...)

Meanwhile Japan Airlines has 90% of the plane empty, but they've arranged it so we somehow still don't get rows to ourselves where we can lie down. (I could probably ask to move to one of the empty rows now we've taken off, but this is literally why modafinil was invented. It's probably some coronavirus thing anyway. Japan Air is SUCH a better experience than the AA flight I don't want to complain, and the breakfast they just served was lovely.)

Continuing down the sha3sum rabbit hole, I think I'm achieving Tagon's Outcome: the hole is going clear through. Starting with CC0 source (license at the end of the README) I've cleaned it up into 109 coherent-ish lines, and while there's still more cleanup to do I think gluing it onto a copy of toys/examples/hello.c and trying to make it work as a toybox command is the next logical step.

One problem is "what's the host sha3sum" to get the expected command line arguments? There's apparently some red hat package I don't have access to (but they wrote systemd so I don't have to care what they think), and Debian uses a package implemented in perl (sigh) that has bad options. I'm not doing -b -t -U and -p for reading files in binary mode, dos "text" mode, Universal Newlines Mode, and "portable" mode which is already deprecated. All of that crap is fiddling with newline/linefeed in a way that should not happen in 2020: your input is a FILE, it has BYTES, use them as-is.

The USEFUL (new) option it has is -a indicating the "algorithm" I.E. the number of bits of output the hash should contain. There isn't an "sha3-224sum" style command like sha2 (and if there was should it be dash or underscore or...?), nor is there "this is how many bits of output it produces, honestly, just cope" like sha1. You use -a to specify in the perl one, which supports -a values of 224, 256, 384, 512, and two insanely large six digit ones I'm ignoring.) There's also -s for silent (misnamed because perl), -c for check (like sha1sum) and -w to warn about bad check files (why would it ever NOT do that...?)

Meanwhile, FIPS 202 (the standard this came from, I don't have a copy and can't google from the plane) apparently also has something called "shake" in addition to sha3, which as far as I can tell is just xoring one past the last byte of the last block with 0x1f instead of 0x06. Why this would be significant, I couldn't tell you. It supports shake 128 and shake 256, for some reason. I dunno, add a -S maybe?

Long flight. In toysh I got ${x/search/replace} implemented, and fixed a bug where 'flase && if true; then echo one; fi || echo two' was segfaulting because the && was advancing past the if and trying to run the "then" as a command, which the parser didn't set it up to do. (It's metadata, not data.) The &&/|| plumbing has code to advance past blocks but it was running it on the "false" not on the block _after_ the &&, and when it triggers we're already at the end of a statement. (Either type 0 which is "commands" or type 3 which is the fi/done/esac of a block.)

You know, now that I've got exec redirects implemented, the mkroot init script should probably mount devtmpfs first thing and then "exec > /dev/console 2>&1" so we can see error messages. I poked the kernel guys about this YEARS AGO (and for some reason updated it earlier this year) but the first post tickled an obvious bug in Debian, and when I posted a version with a workaround unfortunately Greg KH replied, which is shorthand for "it didn't happen". (Yes the Linux USB stack bug is probably still there, I don't care. I reported it, they saw it, moving on. The Linux USB stack being trivially vulnerable because they never test their error paths or throw a packet sniffer on it is not my problem.)

The NEXT thing wrong with mkroot's init script is it's trying to source files (when /etc/rc exists, anyway) and I haven't implemented the "." command yet. Not hard, I should do that next...

The toysh code is over 3500 lines now. I am sad. It can probably be cleaned up later get the size down, but lemme try to get it feature complete first...

October 13, 2020

I voted today. Fuzzy and I took a lyft to be at the Holiday Inn near ACC Highliand a little before the polls opened at 7 am, and there was already a line wrapping two corners to the end of a hall (with a chained fire door). While we waited the line wrapped BACK around the other side of the hallway (which the hotel person who unchained the door when we complained insisted was 6 feet wide, she brought a tape measure) and up around another hall.

The voting person passing out sample ballots counted down the line and gave up at 100 people. By his count there were a little over 30 people in front of us (although the line had been moving for a bit by then). Altogether it took about an hour and 10 minutes to get through the line and vote, which is why we showed up first thing in the morning.

Apparently 97% of travis county is registered to vote this year. Go us.

Then I went to bed (I'd been up all night on the computer, as usual) and now I'm packing for my flight in the morning, which leaves at 8:30am with a transfer through Dallas where I need to present to Japan Airlines the two papers I spend so much effort securing. (I assume the relevant person will have a glowing yellow question mark over their head.)

October 12, 2020

Covid testing scheduled for this afternoon, then tomorrow it's early voting, then wednesday morning I get on a plane to tokyo. I need to pack and cut a toybox release before then.

It's exhausting to get bug reports that boil down to "gcc developed a new fault, work around it". No. That's a spurious error: ARRAY_LEN(toy_list) is less than 300 even in allyesconfig, it CAN'T overflow a 32 bit integer with a range of plus or minus 2 billion, no not even times sizeof(the structure). I'm not changing types to work around a bug that showed up in gcc 10, either stop using the broken version or submit the bug report to the insane FSF posse so they can fix it.

I'm actually tempted to go through and remove all the "int x=x;" self-assignments that shut up the "x is never used uninitialized" warnings that gcc can't reliably produce either. I don't believe llvm produces them, and at this point "don't use a broken compiler"... (There's one in toys/ right now that I've left there out of sheer disgust: "ss is never used uninitialized" because it does if (slice) ss = thingy; then later we test if (slice) fiddle_with(ss); and when slice isn't null ss HAS BEEN ASSIGNED TO. But the gcc plumbing can't follow states that involve two variables, it can only trace ONE variable. I haven't bothered to go "ss = ss" in the declaration yet because... honestly gcc, SHUT UP ABOUT THIS. It has separate "is used uninitialized" and "may be used uninitialized" error messages, and can reliably produce one but NOT reliably produce the other, but you can only switch them off TOGETHER. (Maybe this isn't so anymore, but it was when I traced through the gcc source to try to figure out how to shut this up years ago, at which point I washed my hands of it. These days my threshold for looking at gnu/dammit source is much higher: dowanna, not gonna, can't make me.)

Sigh. My drive to get a release out before my flight on wednesday kinda hit a snag when I went down a rathole of researching sha3. Lost an evening to it, but I have a public domain sha3 implementation cleaned up and working, and I think I can turn that into a toybox command without too much trouble. Except "sha256sum" and friends aren't sha3, they're sha2. Sigh...

October 11, 2020

Capitalism is a thing we do, and is a thing we can stop doing. The republicans still have nothing but cheating, but are forever finding new ways. It's double standards all the way. And Boomer media is imploding.

This is what defunding the police looks like, and this is why we need to do it. The rich make the poor seem scary to keep the middle class in line. The fix is as old as Robin Hood: take from the rich and give to the poor. The rich have made taxes an infeasible way to do this, hence guillotines. There's still less than a thousand total billionaires in the united states, approached that way it's a very tractable problem. And morally, where did the wealth come from in the first place? The billionaires didn't create it, they merely collected it, generally having received at least 6 figures of seed money and contacts from rich white parents (or convincing other rich people to give them a large pile of money to play with). And there tends to be cascading effect where paypal->facebook->uber->palantir were all funded by the same people with the profits from their previous one.

The math of guillotining the billionaires is that killing 50 people could double the worldly posessions of 165 million people. No really, it's that stark. If it wasn't a fait accompli but happened NOW, where a group of people suddenly stole half of everything 165 million people owned (leaving millions destitute, sick, homeless, starving...), and those 50 peole got caught: would that warrant the death penalty? The opioid epidemic kills people. The flint water crisis kills people. They're very good at obfuscating the connection between their actions and the results, but it's obvious if you look. We should change the law so these actions have state-enforced consequences.

October 10, 2020

So I taught dirtree_read() that a null pointer for the directory name should recurse starting in the current directory but not include a gratuitous "./" at the start of the resulting dirtree_path() names. And it was working, except... I have no idea how? I changed some code around and it started failing, because dirtree_flagread() calls dirtree_handle_callback(dirtree_add_node()) and that's doing a dirtree_recurse() with AT_FDCWD as the dirfd, which does fdopendir(AT_FDCWD) which apparently DOES NOT SUPPORT IT. It's failing errno Bad File Descriptor.

AT_FDCWD is a special value (-100) which the kernel guys implemented for the openat() family, indicating that the directory it should operate on is the current one. Apparenlty the kernel guys never bothered to teach the existing fdopendir() system call to understand that.

Sigh, did I accidentally test sh -c 'blah' instead of ./sh -c 'blah' again? No, it was working in the test suite. But I have no idea HOW...

Dear bash:

$ ./sh -c 'echo toys/*///'
toys/net/ toys/posix/ toys/pending/ toys/example/ toys/lsb/ toys/other/ toys/android/
$ bash -c 'echo toys/*///'
toys/android/ toys/example/ toys/lsb/ toys/net/ toys/other/ toys/pending/ toys/posix/

I am not alphabetizing the filesystem search results for wildcard matches. It's just not happening, thanks. Love, me.

October 9, 2020

Sarah Taber just had another excellent thread.

Late stage capitalism continues to metastisize. Support for capitalism is collapsing: 89% of people with federal student debt are not repaying their loans right now which means capitalism is failing the vast majority of the population.

Conservatives continue to find new ways to lie and suppress information and just be generally disgusting, with the help of religion. They're not even trying to hide it anymore. (The new supreme court member is part of a cult called "People of Praise".) But the consequences are catching up, and I really hope they take down capitalism (and maybe religion) with them.

We're all waiting for the septua- and octogenarians to die at which point we burn down everything they ever touched, starting with defunding the police.

October 8, 2020

Happy Dave Barry's Son's Birthday, the day on which all history happens each year, according to Dave Barry Slept Here.

Spent half the night on the phone with Jeff working on USB stuff, and we found out the USB3300 phy chip is... downshifting from 60mhz to 30mhz reference clock output? The board's PDF does not say it's capable of doing this (the clock is supposed to be constant and says when the phy is ready for next data or command whatsis), and it does it a second or so after enumerating (at which point the thing's a brick because the signals are at the wrong speed so nothing can understand it and vice versa).

Spent the rest of the night implementing the case mapping stuff for toysh variable slices, which is complicated because it supports utf8/unicode.

I need a "wide char to utf8 encoding" function, which is something I'd avoided until now: the data comes in as utf8, I preserve its encoding, but now that I'm mapping cases I need to convert a unicode point to utf8 that I haven't already got a utf8 encoding for.

I made a "convert utf8 string to integer" function because I don't trust libc to do it when the locale hasn't reliably been set (or isn't installed), and I think I need to implement my own going the other way for the same reason. There's printf("%lc") taking wint_t argument, but ignoring the locale thing what IS wint_t? That's NOT a wchar_t. "%ls" takes a wchar_t *, but that's a string not a single char. Who wrote this crap?

Sigh, let's see... Off the top of my head...

int wctoutf8(char *s, unsigned wc)
  int len = (wc>0x7ff)+(wc>0xffff), mask = 12+len+!!len;

  if (wc<128) {
    *s = wc;
    return 1;
  } else {
    do {
      s[1+len] = 0x80+(wc&0x3f);
      wc >>= 7;
    } while (len--);
    *s = wc|mask;

  return 2+len;

First stab at a horrible little function that doesn't even null terminate the result and does no error checking (no "windows is historically stupid" exclusion range, no capping the input value at not EVEN the max 4 bytes can represent) unlike the conversion function the OTHER way where we have to accept arbitrary input data. This one is dealing with unicode values we produced (albeit who knows what libc is returning for towupper() and towlower() so really...) But eh, close enough.

Ha, Jeff root caused the 60 vs 30 mhz clock downshift: it's because the 24 khz input crystal was miswired and thus failing after a second or so, because we implemented the circuit on page 42 of the USB3300 data sheet which has one resistor but their "example circuit" on page 5 of the USB3300 hardawre design checklist has TWO resistors. The two-resistor circuit works, the one-resistor circuit from the data sheet fries the crystal. It doesn't seem to have damaged Jeff's test board (he didn't run it long enough), but it would overload (overheat?) and stop keeping correct time, so the USB device would suddenly stop sending/receiving intelligible packets, and Linux would trigger a USB error recovery path that never got tested and didn't work.

October 7, 2020

2020's eternal question: "is sexism or racism the stronger motivation here".

The GOP has literally come out against democracy, by name, in so many words. (And still full nazi.)

The demographers who split the baby boom in half (with Boomers born before 1955 and Joneses as in keeping-up-with-the-jones born after 1955, followed by GenX) have a point: the younger boomers are getting screwed over by older boomers. That article says when the Boomers were born they were 40% of the population of the USA, but I know that by the 2010 census the population had grown enough to push them down to 24% (both because of immigration and because millennials outnumber boomers), which means they used to be way MORE dominant and have lost influence. This year people born in 1955 turn 65, which means all the non-Jones Boomers are now senior citizens. That's another loss of influence, from people used to EVERYTHING being about them. Add in the fact that even the well-off retiring Boomers can no longer sell their McMansions in darkest suburbia and the split between the elder haves and younger have-nots is widening.

I.E. The Boomers are even bad for other Boomers. The generation before the boomers have been holding this country together all along. Enough Boomers are hypocritical monsters full of racism and capitalism to make success mathematically impossible for everyone else.

Oh hey, people are figuring out that pardoning Nixon was a mistake, and Obama should have gone after the George W. Administration. I still 100% expect Biden to try it because it was considered a good idea back when he turned 35, but maybe he can be shouted down or distracted or have his pen hidden or something.

Wow, 87% of chicago wants to defund the Chicago PD. Of course Boomer Media isn't covering that. Why would they?

October 6, 2020

Made an appointment for Covid testing on monday.

I forgot that years ago Linus Torvalds quoted me on this whole license enforcement mess, but in that continuing lwn thread people are dredging it up to say that the guy Linus put in his spam filter was right? What is his argument exactly, "we want your project to destroy itself because it makes other projects look good in comparison?" Or maybe "you be the bad guy and we'll sing praises at your funeral"? There is a distinct "belling the cat" vibe about this, and they don't seem to understand it's made the LICENSE toxic, spreading to all projects under that license. (And yes it's continued since that page last updated.)

Android just updated itself because security, and all the fonts changed. I guess this is a more secure font? I can't tell a 0 from O in this font. Much secure. Very wow.

Heh, "One does not remove complexity by dividing it up" is a good quote.

You know, in college I delayed declaring a computer science major because I didn't want to take the fun out of my hobby, and I've always considered myself somewhat weird for doing a bunch of open source side projects. But people EXPECTING that in this industry are kinda creepy.

This is a fascinating thread about how PSE&G's intentional engineering negligence caused the $17 billion "Camp" fire in California in 2018, which links to an earlier thread about how their negligence caused the 2010 San Bruno gas explosion.

Speaking of capitalist negligence trying to kill people, the limiting factor on mining "rare earth" metals isn't availability of ore, it's that relocating and refining them produces toxic side effects. Lead and mercury and such locked in ancient rocks deep underground aren't a problem, bring them to the surface and they get rained on and leach into the soil and groundwater and airborne particulates. Refining is all about reacting natural chemicals into forms that do not occur in nature, and the stuff you DON'T want to keep tends to get turned into poisons that persist and spread and break containment. Even fertilizer (chemical or excrement) and dish soap can be a problem in large enough quantities (hence the annual dead zone in the gulf of mexico the size of connecticut where all the fish die because the oxygen's gone). That's why the US government closed down the California rare earth mining operation and outsourced it to china, which is happy to poison its land and people for money. But this is often a problem even for "simple" things like gold and coal and aluminum.

So when Elon Musk says he's about to do bulk lithium mining and refining in nevada and texas? I look forward to the resulting superfund sites 15 years from now. This is how Russia wound up unable to feed itself. Oh well, possibly a NET positive if it ends the fossil fuel industry fast enough.

October 5, 2020

Politics continues. The billionaires still need to be guillotined, and their sycophants are still at it. The idea of a corporate death penalty keeps cropping up, but being a billionaire should have an actual death penalty. (It is a voluntary state you can exit with the stroke of a pen.) Twitter is not covering itself with glory at the moment. Neither are the police, but what else is new? And of course Good Cop does nothing. The GOP criminals are getting more blatant here in Texas, just like everywhere else. White privilege is ignoring bullying while it's happening and then hiding the evidence.

This scholarly argument that the fossil fuel industry is propping up white supremacy smells a lot like faces-in-clouds overanalysis, but links to some interesting articles (collected in the "related reading" at the end).

Wow, Russia's environment is more borked than I'd realized. I knew they'd spread radiation, chemicals like dioxin from manufacturing, and heavy metals from mining/refining through much of their once-prime farmland and fresh water (before you even GET to things like soil exhaustion and drainage), which is why the soviet union stopped being able to feed itself and collapsed when oil prices declined in the late 80's to the point Russia couldn't afford to import enough food. (Even back then, they had nothing else.) But PURPOSELY spreading giant hogweed, industrially, starting right after World War II? (Imagine poison ivy that can kill you, seeds aggressively, and grows taller than humans.) They did that to THEMSELVES, and now Putin's ignoring it because it doesn't affect him personally. Wow. Puts kudzu, gypsy moths, and tumbleweeds into perspective, doesn't it?

I've been hearing a lot of warnings about the state of China from sites with obvious biases against china. (They were so sure that big dam was going to collapse and flood millions of people...) I was waiting confirmation from other channels, and it's starting to come in: the flooding has done Bad Things to the food supply, which stacks on TOP of covid and the mass pig slaugher earlier this year to cause a "nothing to see here, move along" famine.

The Pope and Warren Buffett are both blaming capitalism for rising inequality. Buffett has been advocating taxing the rich for decades, and has refused to let more than 1% of his fortune be inherited. (It's called a "fortune" becuase you got lucky.) New Pope continues to surprise me by being a decent human being (if with questionable friends, but he IS a catholic priest). Palpatine very much was not. John Paul faked it better, but didn't withstand close scrutiny.

But then I've always seen religion as a bit like the original Victorian use of the Prince Albert piercing: If you think you need to be controlled and/or restrained via DRASTIC life-altering measures in order to behave normally in civil society, that's a "you" problem and quite possibly some weird fetish thing. What you're guarding so frantically against isn't a problem for normal people if it DOES happen. Wanting to kill the guy who cut you off in traffic but NOT doing it is normal, and does not require divine intervention to avoid murder on a daily basis for the rest of us. That's not even being an adult, most people work out "not hitting other kids, even when the teacher isn't looking" somewhere in middle school.

The old testament's "an eye for an eye, right here [smash bottle] let's do this" required drastic revision in the new testament (turn the other cheek is NOT the same philosophy) which raises the question why the unerring word of god needed a complete rewrite? Killing all the firstborn of egypt is no longer a recommended negotiating tactic these days? (The book said God "hardened Pharoah's heart", and then punished his people for the resulting decisions? What, God wanted an _excuse_?)

So today the people with the child rape problem and the magdelene laundries (how is requiring priests and nuns to be celibate for life LESS dysfunctional than the Prince Albert?) see their modern role as arbiters of morality, because science has proven all the FACTUAL claims they've rorschached out of the old book wrong so a retreat to philosophy is all they have left. Genesis does not accurately describe the creation of the universe, the earth, or humanity. If they don't know where we came from, why would they know where we're going to? Their response is frantic denial of evolution, thus screwing up the school system and turning textbook selection into a heated battle. Not helping.

None of these observations are new, of course.

October 4, 2020

Remember when somebody booted Linux in a hard drive, via jtag and serial port? Good times, good times...

Lots of USB stuff at $DAYJOB. To get something working fast, jeff grabbed the existing Joris CDC-ACM implementation and glued it to an existing phy (with a test bench). I dunno why the Centers for Disease Control teamed up with the Association for Computing Machinery to produce a USB serial port standard, but THIS implementation of it has a bug that's causing the Linux kernel's error handling to lose its marbles. (I should report that upstream, but it's an effect not a cause. When the error happens every Linux system we've plugged it into either panics or livelocks kernel threads into cpu-eating loops that don't even notice when the device is unplugged. MacOS merely times the device out and powers it off. Either way, it doesn't work yet...)

But CDC-ACM is serial and we want ethernet. There are actually FOUR different "generic USB" ethernet implementation standards: Microsoft's proprietary RNDIS (which has been reverse engineered), and three actual standards: CDC-ECM, CDC-EEM, and CDC-NCM. The ECM one is the oldest (from USB 1.1), and is the simplest, but people say it doesn't scale well to faster speeds because it puts each ethernet packet in its own USB transaction. EEM is newer, still pretty simple, and exists to add packet collating (although the Linux driver doesn't collate them, this driver is as half-assed as it's possible to be and still work; yes the only thing EEM did that ECM didn't was collate packets, and Linux didn't implement it). And then NCM is the newest but way more complicated with support for zerocopy DMA stuff we're not doing. So we've decided to go with cdc-eem for the moment, although... maybe ecm deserves a second look?

Checked the ${x#y} plumbing into toysh, now I'm looking at the other variable slicing options. There's x%y which is pulling off a suffix instead of a prefix, and given that my glob function searches forward I just have to iterate backwards through various starting points calling wildcard_match() repeatedly. There's ${x^} and ${x,} to map case (which with unicode can EXPAND THE STRING because the unicode consortium is insane). All four of those basically use the same slashcopy plumbing (the "copy escaped string until }" setup and freeing afterwards), so I'd like to collate them if I can. Then there's $(x/pat/sub} which I think is the one the init script is actually barfing on, and there's ${x@QEPAa} which isn't hard but each letter is basically its own mode and I can punt on it for now because I don't think I'm using it...

And that's it. (Except for supporting array variables, a can of worms I have not opened yet because in my entire history of bash programming I've never used them. Doesn't mean I won't, but it's not a feature _I_ miss.)

October 3, 2020

Sigh. I haven't got the patience I really should to navigate the open source community. Oh well.

No political linkdump today, the Resident's in hospital with covid, I'm sticking around an extra week to vote. People are on it and the kids are all right. I need to do other things before heading out to Japan.

I got my letter from the embassy! (The mail still works.) I _could_ leave this week, but early voting starts tuesday the 13th. Which means I should get the covid test Monday the 12th, and schedule the flight on the 14th.

Filling out toysh slice implementations: the difference between ${x#a} and ${x##a} is short vs long matches, and the test I came up for that is 'x=banana; echo ${x#b*n} ${x##b*n}' which SHOULD print "ana a" but when I tried it in my shell, it produced "nana" with no space. Because the "short" match is eating the ENTIRE string, and the "long" match is ending early! (Jazzhands.)

Ok, fixed that and checked it in with tests, and now I'm trying to fix the path match logic and... darn it, I hate when bugs NEST. [/me wastes an hour having switched from piping the output to "less" to piping the output to "head" without having remembered I'd done so, and root causing what's going on with strace and such. The pipe closed! Why did the pipe close? Oh.]

October 2, 2020

Oh goddess, please no. Yet more GPL enforcement. Seriously, Bradley, just don't. (Listen to Jeremy Allison, it's a BAD IDEA. I don't WANT to devote more cycles to 0BSD right now, I have other things to do...)

Elliott clarified (in email) that cmake is really a replacement for autoconf, not make. Ninja tries to be a replacement for make, and meson tries to ALSO be a replacement for autoconf? I'm not sure "clarified" is the right word, but I happily acknowledge I am not up to speed with what's going on here, and I've long said that configure/make/install all need replacing so I can't blame people for trying but I'm not yet convinced by the result.

I've downloaded Linux From Scratch 10.0 and at some point should reconstruct an automated sysv build there, and then try to get it to work under mkroot; if that needs cmake or ninja I'll have to care, until then "make" is in posix. But I doubt I'll get to that before January, since I'm scheduled to fly back to Tokyo on the 14th and disappear into the j-core mines through at least the end of the year. Gotta get a toybox release out before then...

I got the wildcard stuff debugged enough it's handling single character matches (not a high bar, needs so much more testing), which means the basic plumbing's in shape. I have a LOT of dangling threads here: job control's a stub, haven't finished all the variable expansion types, wildcards haven't implemented those +(parenthetical|types) yet... but I've got enough filled in that the hard design work is (probably) done and the rest is filling stuff out.

There's a temptation to chase the test suite: the next thing that fails in "make test_sh" is because I haven't implemented function support yet. It's mostly there in the parser and I've got a TT.functions linked list in the GLOBALS block with the same structure I'm using to parse code into right now, but at the moment I parse code and run it immediately, then free it once it leaves scope (it can curently stick around because of loops, if statement bodies, parentheses and curly brackets...).

BUT: I need to cut a release. And what's been holding up the release is that the mkroot init script uses ${a/b/c} constructs I hadn't implemented yet but added error checking for. And what was holding THAT up is it was using wildcard plumbing I didn't want to stub out and speculatively implement down a wrong path I'd have to rip out again once I had proper infrastructure.

So what I SHOULD do is finish the missing variable expansion cases, MAYBE finish the wildcard stuff, but not start function support until after I've cut a release.

Except this release is "now go to tokyo and do something ELSE for who knows how long", so the temptation to do as much as possible before then is very strong. But I should review all the route.c work Eric Molitor did back in May and June, that command's a lot closer to promoteable now....

October 1, 2020

A new month and the monsters are still here, which isn't news. But I haven't the stomach for politics today. Too stressed to even _vent_ about it.

Instead, I'm arguing with Netflix, which is surprisingly broken. The Japanese consulate emailed to say they've mailed out my permission form in the envelope I provided them, so I'm on track to fly back to Japan on the 14th. In the meantime, I want to listen to Japanese dubs of things I've already watched, to try to learn more of the language. (If I already know what they're saying, and they're saying it in japanese...) Last time I was in tokyo Netflix had japanese everything, and I downloaded "Groundhog's Day", a movie I've always been able to watch over and over. But that dropped out of the Netflix catalog because everything does (RIP Person of Interest), and of course that took out my downloaded copy with japanese audio because Capitalism Something Capitalism DRM Capitalism. (I'm pretty sure I've got a DVD of it somewhere, but that's unlikely to have a Japanese track, and if I did mail-order a Japanese DVD we get into "region locked players" because Capitalism Guillotine Capitalism Late Stage Capitalism.)

Unfortunately, even though I KNOW FOR A FACT that Netflix has Japanese audio for most of its programming, it won't reliably show it to me in the audio track menu. I especially know netflix original programming dubs all of it in dozens of different languages because the translators are credited at the end of each episode if you let the credits play. (Guys, you credit the japanese translators 34 seconds from the end of Hilda episode 5, between the italian and korean translators. The translation exists, and was produced by the same "BTI studios" that produced all the other ones. You yourself SAY THAT at the end of every episode, you commissioned the CREATION of this content and BRAG about having it in the credits. The only reason you can't SHOW it to me is because you suck at making user interfaces.)

A week or two back I argued with the Netflix help desk about this issue, and they switched my profile's PRIMARY language to Japanese, meaning all the navigation buttons were in kanji. I can just about pick out stuff in hiragana but know basically none of the individual word hieroglyphics yet, so found it really hard to navigate. But WHILE it was like that, I managed to pull up Japanese versions of the Netflix original programs Lucifer, Hilda, and She-Ra. (Great!) And it remembered them in the "subtitles and audio" menu options when I switched the display back to English... until I watched an episode of Lucifer in English with Fade a couple days ago, which apparently flushed the cache. Then the translation options went back to "English" and "English with descriptive Audio", plus Russian, Spanish, French, and Italian. For a total of 6 slots in a GUI that DOES NOT SCROLL, so can't show me more even when it clearly HAS more.

So I went to the Netflix web page, and found out that UNDER primary language (I.E. the "make everything kanji" option), I can tell it what OTHER languages I'm interested in! So I checked the "japanese" checkbox (which again is labeled in kanji, but I was pretty sure which one meant "japanese" by now, and typed it into google translate to be sure, no of COURSE Netflix used pictures instead of unicode to label them so you can't cut and paste, but I went the other way and got the same three symbols), and then I logged out of the phone app and logged back in again, and... it swaped in Mandarin and Cantonese (or sometimes Mandarin and German) in the random list of 6 languages it can show the Netflix original programming in. No, I did not select CHINESE, I went back and re-confirmed that in the web interface: end table with two drawers, symbol that looks like the kanji for "tree" plus ornaments, much more complicated two column symbol. Japanese. Nihongo. (Or Yamato if you're old school.)

So I did another help chat with a netflix probably-actual-human, and the script they were reading from insisted it was a rights issue. That netflix original programming didn't license to ITSELF the right to play Japanese audio in Austin, but for some reason is happy to show me a changing random assortment of Russian and Mandarin and German BECAUSE REASONS. And they claimed this even though I WAS LISTENING TO THESE PROGRAMS IN JAPANESE LAST WEEK. (No, I was not using a VPN. No, I don't want to switch my buttons and pulldowns back to Kanji, but if that's the ONLY WAY... Honestly, if there was a "just use the two phonetic alphabets, not the thousands of pictures you have to memorize" option I'd give it a try. I really SUCK at learning foreign languages but I can pick out about half of hiragana by now. I've got a little phone game to try to help me learn it...)

The real reason Netflix won't show me Japanese anymore is because their interface is terrible and has exactly one screen of options without the ability to scroll, and it's selecting the WRONG DEFAULTS to populate it with. That is not a rights issue, that's lazy programming. And it's not noticing my update from the web page because it has the wrong metadata cached, which logging out and back in didn't clear, but using Android's settings menu to delete the app's saved data will also delete my downloaded videos which I dowanna do. (I'm at 48 of my 50 gigs for the month before T-mobile starts throttling me and EVERY video service starts working like Crunchyroll. It resets on tuesday. Yes, crunchycrunch's problem is obviously bog standard bufferbloat but try explaining that to them. Please, would somebody do that? Stop-drop-and-roll won't listen to me. And it's not worth fighting with if I go back to Japan in a couple weeks where I can't use it at all because they DON'T HAVE THE JAPANESE RIGHTS, yet none of the anime services IN japan have english subtitles. Anyway: netflix.)

I can't watch netflix on the laptop browser because whatever crazy video DRM plugin they're using isn't installed and I'm not chasing that rathole. (I _think_ it's available on Linux? Long long ago they used to use a mutant version of Microsoft Silverlight, which we had the "moonlight" plugin for. Blah, back up: it works on android and chromebooks therefore there IS a version for Linux, it's just not part of the base chromium install because capitalism late stage boomer boomer capitalism.)

So yeah, Netflix is blaming a rights issue (for content IT CREATED) when the problem is their app user interface sucks and their software inappropriately caches metadata. Claiming they comissioned new shows and didn't get the rights to them to SAVE FACE from admitting their UI sucks and painfully obviously didn't implement SCROLLING makes them look REALLY STUPID. Corporate stupid.

Ha! Prime video's translation menu scrolls! And of course they have The Tick Season 2 in Japanese, and will let me access it! Problem: I only watched the first season, in english, just once. Not familiar enough: I really want things I've watched _more_ than once in english. But it's at least a competently written app! (Which is odd given how much I hate the REST of prime's UI, but at least the things I disagree with there seem to have been done by choice....)

Booyah: Good Omens. In Japanese. Sorted.

September 30, 2020

French oil company Total SE has joined the group (Shell, BP, etc) in acknowledging oil demand peaking as energy production switches over to solar, wind, and batteries. The government of Nigeria agrees, as does the UAE, although they both pray the decline is a few years out. Russia has gone full Karen and demanded to see the manager.

Oil prices have stayed low, with a ceasefire in Libya and record production in egypt. The glut is so bad they're selling jet fuel as regular diesel. (The top shell vodka isn't selling, make Mad Dog out of it.) What's kept prices as high as they were was china buying a bunch of bargain price oil, but that's winding down.

Around the world, oil companies are diversifying away from oil, everywhere except the united states. But the united states has always been an "except". For example, I was never taught that the 1970's oil embargo was in response to the USA supporting israel when a colation of arab states attacked it in 1973, or that this was yet another cold war proxy conflict between the US and Russia (which owned Egypt at the time, still owns Syria, and recently purchased the Republican party hence the "red states").

September 29, 2020

Rented car, drove to Houston, poked consulate, drove back, let fuzzy drive around behind the mostly empty HEB rear parking lot a bit (she was basically frozen with terror the entire time and I don't think ever touched the gas pedal, just let it idle forward), then dropped the car off at the rental place. That took 8 hours and I'm exhausted.

I listened to the Martian audiobook on the drive, and wanted to watch the movie again but but it's not on any of the streaming services anymore. Swung past I Pancreas Video on the way to drop off the car but it turns out they died. I haz a sad. (We also tried the red box kiosk in front of HEB, but they only have it in 4k which the praystation can't play.) I refuse to give Jeff Bezos money for a movie I saw in theatres way back when, and which used to be on netflix.

There's a debate tonight. A 77 year old geezer arguing with a 74 year old vegetable about the future, while according to twitter the 72 year old moderator does nothing. I can't bear to watch. The Boomers are not dying fast enough, and Good Cop is useless. (I would happily vote for a potted plant to keep republicans out of office, and as far as I can tell that's what I am doing.)

September 28, 2020

Got up early to rent car, found I need to get insurance separately. If you have a "major credit card", renting a car gets magic liability insurance from the credit card people. If you're using a debit card with a visa or mastercard logo (I have one of each), you DON'T get the magic insurance. (It's like "bonus miles".) And the car insurance places no longer SELL daily car insurance policies, which is a thing they USED TO DO. (I admit it's been a while since I've rented a car, but not THAT long?)

So I walked home and called car insurance places (none of which opened until 9am, so I can't make the consulate window before it closes today). The best they can do is give me a one month policy and let me cancel it, and pro-rate it to the days used. (They don't have a product for this either, everyone ASSUMES you have a credit card. I cut up my cards shortly after college, after maxing them out, paying them off, and maxing them out AGAIN. Have not had because do not want, paying 21% interest and an annual fee to spend money 4 months faster than I earn it is silly and exploitative: capitalism has payday loans for the bottom 1/3 of society and credit cards for the next 50%. I opted out of that a bit earlier tha most the same way I opted out of having a television hooked up to any source of programming that wasn't "on demand"; channel flipping looking for something good eats HOURS and you're not even WATCHING anything.)

Of course to get insurance I had to get the VIN of the vehicle I'd be driving (the insurance guy called the rental place directly and they read him a plausible one for the vehicle I might rent tomorrow), and the policy is full of "this is garaged at your address for 10 months of the year" with MY address instead of the rental place's address, and I called and tried to get it all changed and can't. (Issuing the policy today only works if the system thinks I'm single, and if the vehicle is garaged at my billing address, and...) So the chances of it ever actually paying out if something DOES happen are slim to none. But that's capitalism for you: they just want to squeeze money out of you, the nominal benefits you're paying for are never actually delivered. Jam Tomorrow is all you get, never Jam Today.

So that was my day. I can't go to the window tomorrow either. I wound up taking a 3 hour nap just from confused schedule, and am still exhausted, and need to try to sleep tonight AGAIN despite basically jetlag, to do it all tomorrow...

(It's frustrating, I left off debugging the wildcard stuff and of course Peejee won't let me work from home...)

September 27, 2020

Can't go to the table and program tonight, instead I need to go to bed 8 hours earlier than usual so I can be at the car rental place when it opens at 7am so I can drive to Houston where the Japanese Consulate is, so I can drop off the same documentation I already photographed with my phone and emailed them a week ago, which I'm ALSO required to submit in person, in Houston, on paper, for reasons no one has been able to clearly explain. Due to Coronavirus, their form-accepting-person window is only open from 9:30 am to 12:30 pm, and it's almost a 3 hour drive each way, so I have to head out first thing in the morning to get there in time.

I didn't replace the car that died a while back in part because I expected to be in Japan this year, partly because I thought self-driving car fleet subscriptions would get here faster than this (Waymo, I has a disappoint), and in part because we really didn't drive it that much. Paying over $100/month for car insurance (let alone the rest of the car bills) is kinda silly when we're two blocks from a grocery store and I work from home. But visiting Houston without a car is really tricky: flying or taking a greyhound is fairly likely covid exposure, and I'm trying to get permission to take a coronavirus test to show I HAVEN'T (currently) got it. (I'm reasonably sure I already had it after jury duty back in March, which was a very unpleasant couple of weeks where there was no position I could sleep in that didn't make my chest hurt a LOT, and I STILL have some joint problems from that. Fuzzy had similar symptoms at the same time, it was not fun, and if it was covid we still both got off lightly. Presumably because neither of us is vitamin D deficient, unlike 40% of the population. And yes, that explains ALL the "hits minorities and obese people harder", correcting for vitamin D deficiency, neither is an extra risk factor... but there are multiple strains going around which means you can get at least a mild case of it AGAIN, and be contagious whether or not it hits you personally hard.)

So, car rental. Last time I had to visit an embassy in Houston in person for insane bureaucratic reasons, it was to visit Moscow for Parallels in 2010. They had little brochures about how to recognize when a cop was demanding a bribe, and what the appropriate amount was (for which you were supposed to carry cash). I comparison, Japan is still a bastion of order and reason. (Possibly part of the reason I like the place so much is how low that particular bar was set for me by previous experience.)

September 26, 2020

Making a dirtree callback function to do directory traversal with wildcard search is funky. As always the CODE is easy, it's getting the data representation right that's the hard part. (It's a bit like how in plumbing the pipes and soldering aren't the problem, it's the WATER flowing right and not leaking that's the problem.)

For directory segments with no wildcards I just want to open them and drop directly down rather than bothering with directory traversal and comparison. For directory segments WITH wildcards, I need the open/compare loop on the children at this level. For input I have a pattern string and an array of offsets indicating where the active wildcards are (this is after quote removal, so just because it's a wildcard character doesn't mean it behaves like one).

There's always the fiddly part that when I want global data attached to the entire tree rather than just a node, the easy way is to stick it in TT globals, because even if I stash it in the top node I have to loop to find it which is schlemeil the painter's algorithm as the tree gets deeper. This is a design problem with dirtree, but I dunno how to fix it.

I've decided to re-parse the pattern data each time into directory segments, to give me "level 2", "level 3", and so on as I descend, rather than maintain data in a halfway state between "global to the tree" and "node-specific". Saving parsed data to be used by later nodes and then unraveled as you move back up the tree is asking for trouble, and at this point premature optimization. (Opening files via path does that sort of parsing already in the kernel, should not be a big deal. I'm not even allocating copies, just measuring string segments.)

September 25, 2020

Told Jeff I can't leave for Tokyo until the 14th because I have to be here for the first day of early voting. (I'm aware there's a vote abroad thing, and that's mail-in voting, and I need to do it in person. Yes mail in has a paper trail, but so do the new voting machines here in Austin. The electronic machines literally print a ballot filled out with your selections, which you read and carry over to the ballot box. It's lovely and there was never any reason NOT to do that. You still sign paper documents at a house closing, even though we've had computers in each bank branch since the 1970's. If it's important, you sign the damn contract, in blood if necessary.)

Remember when medieval kings would go septic until the king was surrounded by sycophants and the only one who could ever tell him the truth was the court jester? The Onion continues to do the job of telling the literal unvarnished truth which sites like the New York Times have abdicated. Yes, I have to vote for Good Cop this time around, not happy with it but it's important.

Hollywood is currently grappling with the fact that police procedurals are no longer a plausible premise. (Oddly enough, Lucifer's one of the more plausible here: the cop co-protagonist started season 1 in trouble for narcing on bad cops, a bad cop was the Big Bad of season 1, her ex-husband is an only semi-reformed a bad cop who later partnered with a demon to murder someone they couldn't get any other way, and THAT guy was a prison warden who had the protagonist's cop father murdered in backstory for not being corrupt, their department head in season 1 was a political animal accepting bribes to advance her career, the replacement department head was the big bad of season 3...)

Meanwhile, some camels do make it through the eye of the needle. Well played. But he's the exception that proves the rule, as they say. (And there are no salvageable republicans.)

September 24, 2020

Shell wildcard evaluation has the option to be case insensitive, and of course I'm implementing a unicode-aware version of that. For things like [a-z] range matches I'm just parsing the utf8 encoding to an int and then dealing with the order the numbers occur in. (Sure maps to unicode points but I don't _care_. If you ask if a character is between a combining character and the right-to-left mark, the question is "above this integer, below that integer".)

But for some insane reason case insensitivity cares about the locale setting, specifically the towupper() function cares about the invisible global state set by an earlier call to setlocale(), and there's even a towupper_l() version that lets you explicitly provide the locale. Since bionic's locale support can best be described as "stingy", I wanted to see what bionic's towupper() implementation was doing, and...

typedef UChar32 (*FnT)(UChar32);
static auto u_toupper = reinterpret_cast(__find_icu_symbol("u_toupper"));
return u_toupper ? u_toupper(wc) : toupper(wc);

My brain is now singing "what the actual fuck?" to the "unbelievable sights" part of A Whole New World at this unholy lovechild of template instantiation and dlopen(). How does the Intensive Care Unit work into this? I _actively_ don't want to have to know...

Anyway, I'm just gonna test against glibc and musl, provide test cases, and then assume Elliott can make Bionic work. Rewriting a libc in C++ was a BAD IDEA, and I did not make my ghostbusters roll on this attempt to dig through the result.

September 23, 2020

The thing to realize about the GOP is this is an extinction burst. Very few people younger than the Boomers supports their worldview, they make no attempt to sustain anything, and Miami's uninhabitle soon no matter what they do. They're not trying to win the election because they CAN'T, they're merely trying to retain power. Fascism is about power and nothing else. They've been working this way for a long time, and only ever pretended otherwise. They seem happy to go on to open murder. Meanwhile the dishrag democrats who can prove malfeasance wring their hands and give speeches and then vote to pass budgets refueling the GOP's gas tank, and refuse to use the power they have. (Why is Diane Feinstein still in office? She's EIGHTY SEVEN.)

The LMPD is illegitimate and should be defunded. Here's a list of some of the things the police did wrong in the Breonna Taylor case. Then again police in the USA have been obviously broken since the 1800s. In civilized places like Scotland police use of a _taser_ automatically requires independent legal review. The police aren't what keeps people safe. That's why you don't "reduce" police budgets, you eliminate them.

Oh hey, Faceboot promised to take its ball and go home from Europe. Fingers crossed. They think that's a threat? They are the problem. Remember Facebook's business partner Cambridge Analytica? They're in the news again. This is the company that gave us Zuckerberg AND Peter Thiel (founder of Palantir surveilance). Guillotine the billionaires, tax the millionaires.

Boomer Media is terrible and the New York Times is very Boomer. This is not a new observation. Here's a good thread about how Boomers destroyed the print comic book industry, once again by making it about themselves. And here's a good article about how terrible the Boomers were at parenting and oh look, here's another great (unrelated) thread about the same topic.

Wells Fargo is racist.

September 22, 2020

The "fr" in "agile" is silent, just like the s in IoT stands for "security".

Sigh, my phone got the "upgrade to Android 11" prompt and I was dumb enough to do it. Max volume on my wired headphones is so much quieter than it was under 10 that I can't understand what people are saying in podcasts over even minor road noise. All the "disable the volume limiter" advice on Google (which I didn't NEED to do under 10) point you at UI controls that aren't in Android 11, and all the "volume increaser apps" and such (probably viruses, but they're in the pray store so MAYBE safe?) do nothing in 11. (Guys, I'm plugging STUDIO headphones into my phone. They take like 3x the voltage of cheaper headphones. Your previous version could deal with this JUST FINE. You "improved" it into uselessness.) And it looks the only way to roll back to Android 10 is a factory reset deleting all my data. Great. (The same headphones still work fine plugged into my laptop. What changed was the upgrade to Android 11: it broke my headphones.)

It's possible Android and/or T-mobile is trying to force me into using bluetooth headphones because DRM, but mine broke recently: the joint on the OTHER side gave out, and duct taping both sides turns out to mean they're not adjustable and don't fit right. So they're just as bad about road noise, although at least I can make the volume in those 3x as loud as the wired ones, but that's "hearing damage" levels to actually hear what people are saying. So android is happy to let me damage my hearing with bluetooth (under 11), as long as the DRM prevents me from copying the sound except by sticking a microphone into the speaker which I could still do if I needed to for some reason? (I can play a video in a dark+quiet room and film the screen with my phone, what is the POINT of this nonsense?)

Anyway, didn't get any programming done yesterday either (another phone call, shorter but derailing). And I didn't even bother to go to the table this morning. It's possible I'm too stressed to function. (There's a LITTLE good news today, but it's got quite the backlog to overcome. And in this context "little" means "5 percent".)

Got email from another amazon recruiter. Said no again.

September 21, 2020

Person of Interest moves from Netflix to Pirate Bay tomorrow, but I doubt I'm watching the last two seasons between now and then. Oh well. (The premise of the series was from back before the Boomers went too senile for "publicly revealing the evil for all the world to see" to have any impact at all. The Boomers stopped evaluating new information a decade ago, and the GOP not only knows this, they brag about it.)

I miss don't be evil.

Covid-19 has now killed more americans than the Civil war, World War II and the 1918 pandemic.

Late stage capitalism is beyond parody at this point. You can't make up an exaggerated version of it that it's not already doing. We know what to do once the Boomers are gone, starting with defunding the police (as in zero). But we can't do it UNTIL the Boomers are gone, because they've barricaded themselves into the control room and are holding everyone else hostage. We know how horrible the boomer political party is, and that they ignore the law. The GOP, and everyone who votes for it, is unsalvageable. The question is what the rest of us let them get away with. Obviously the election is rigged, and they're preparing for crystalnacht right after, ignoring all checks and balances once they've got the supreme court locked in, and the plutocrat-serving democrats will do nothing, because the plutocrats have decided that fascism is the only way to keep late stage capitalism going, because nobody younger than Boomers believes in it anymore.

But people have been on the streets protesting before the election. The Boomers have another decade to live, which is too long for the country to survive, the question is when the Boomers lose power. (They've already lost control.) The question is, at what point does everyone else take power away from the Boomers and put them in senior care facilities with padding on every surface. The country is literally already on fire.

At least the onion is nailing it.

September 20, 2020

I got nothing done on toybox today because Jeff called and stayed on the phone (voip through an app) for 4 hours while I built bitstream versions for him to test. He's back in Japan, so on the same schedule as me, which was always the intent but has been less productive than I'd hoped.

It takes _very_ little to derail my productivity these days. :(

September 19, 2020

The way Germany fell to authoritarianism in the 1930s was that World War I veteran Paul von Hindenberg was elected President in 1925 at the age of 78. In 1932 at the age of 85 he responded to the Great Depression by appointing a radical populist to be chancellor, to help him 'restore the monarchy'. The doddering octogenarian meant "put Ludwig III's son Prince Rupprecht on the throne", and the populist holding rallies channeling resentment from the unemployed masses meant "sure I'd love to be king".

The populist's guys set fire to their parlaiment building a month later, which convinced Hindenburg to pass an emergency powers degree making federal edicts immune to challenge by local governments or in court, and then when the parliament met in a hotel (I.E. an insecure location) three weeks later the populist's guys surrounded it and 'convinced' them to pass an "Enabling Act" giving the chancellor's executive orders the force of law so he didn't need the parliament anymore. Hindenberg appointed Hitler chancellor on January 30, the Reichstag fire was February 27, and the Enabling act passed March 23. That's how fast Hindenberg's senility simultaneously centralized power and handed it over to a racist murderer.

Other than the easily manipulated doddering octogenarian, the main ally of the Nazis in passing the Enabling Act was catholic priest Ludwig Kaas, leader of the Centrist party, who wanted to make sure that Catholicism was protected under the Nazis. The day after handing Hitler absolute power, he went to the Vatican to negotiate a non-aggression pact between the vatican and nazi germany. Trump's evangelical support is 100% in line with history, those guys are always happy committing mass murder of people they don't like, especially women and foreigners, and they remain problematic to this day. So of COURSE evangelicals are 100% behind the GOP agenda, racism is their jam.

Today in the USA, the 78 year old senate leader has vowed to replace the 87 year old supreme court justice during the 74 year old president's term rather than allowing the 77 year old presidental candidate a chance at it, a move condemned by the 80 year old speaker of the house. We already have concentration camps performing forced hysterectomies. I'm finding it a bit hard to concentrate on work during all this.

So yeah, Ruth Bader Ginsberg died, a couple weeks after David Graeber. Lot of that going around. She was absolutely amazing but she turned 80 in 2013 at the START of Obama's second term. Staying on the supreme court after that was a choice she voluntarily made. She gambled on election outcomes and lost. The crisis where a wannabe fascist gets to replace her with a partisan loon tilting the court 6-3 in their favor is the direct result of her choice to die in the saddle. (The GOP is rushing to confirm a replacement before the election. People are playing McConnel's speeches about NOT doing that, but his only rule has EVER been "it's right when I do it and wrong when you do it".)

The problem is Boomers still trying to drive until they die, and putting people in power older than themselves because they still don't collectively see themselves as adults. I.E. "The problem is Boomers."

September 18, 2020

My laptop battery was dead when I took it out of my bag. The Dell bios sometimes wakes up for stupid reasons, and closing the lid to suspend the laptop is edge triggered, not level triggered so the lid already BEING closed won't suspend the laptop again. Lost all the pending thunderbird email replies and my open terminal windows with 8 gazillion shell edge case tests I hadn't written down yet. Sigh.

Alas while vi does the "create .swp file with a stream of changes since last save", and it complains that the file exists so another terminal is editing this file, it won't give you the option to KILL that other session (even though it tells you its PID!) and take over the editing from where it was. It records the info to do so, but won't DO it. And if you wind up with 3 or 4 stacked, the recovery info is useless because which one was current? (probably the first, but it's too fiddly to delete the right file to be worth bothering). Luckily, I save semi-compulsively because of years of machines crashing out from under me halfway through something.

Heh, calling blockchain a solution in search of a problem turns out to have been optimistic.

C++ is doing to C what GPLv3 did to GPLv2. It's sad, but probably inevitable at this point. I mentioned the "contaminating the kernel with Rust" post from lwn to Elliott and he said that guy reports to him, and the ensuing conversation is convincing me (probably by accident) that Google's probably going to completely rewrite all the android low-level stuff in Rust over the next decade or two, which makes me nervous. (The devil you don't know always has greener grass until you try to make it load-bearing, and adding MORE dependencies and context crossings without making a flag day switch to a new one... I do not want to get that on me.)

That probably means they're going to stop using toybox at some point, but oh well. (I explained the trusting trust stuff again, but that's not the security problems he's facing day to day, so not on his radar. *shrug* It's not my call, I only ever had carrot, not stick...) Android distribution is nice while it lasts, and "another 10 years" is way longer than anybody can predict in this industry even WITH the S-curve of Moore's Law bending down as all S-curves inevitably do. But these are not design decisions I would have made.

September 17, 2020

The stories coming out of the fires are... intense. And as usual, the smoke is even more widespread than the fires, it's already reached the east coast. Elsewhere, "my town was recently destroyed by an inland category 4 hurricane" is just an in-passing remark in a long thread about a cat bringing a chipmunk into the house. And yes, that happened, it's called a "derecho" and was not an isolated incident. Just like hurricane sally is hitting the same people that Hurricane Laura hit 3 weeks ago (which was itself a week after Marco,/a>), and there are so many more queued up already they're literally running out of hurricane names for the year. A hurricane is currently forming in the mediterranean, aimed at Greece.

So of course the right-wing loons are (basically alone in) denying global warming at the top of their lungs, while Boomer Media chants "both sides". The pandemic the GOP intentionally spread and is still spreading has killed more americans than the USA has active duty marines, and Boomer Media still chants both sides.

An insightful comment that the whole "Qanon child predator" thing is a projection and denial response to the #metoo mushroom cloud where suburban white women go "no it's not suburban men who are the threat to our kids, it's THEM! It has to be THOSE PEOPLE, not US!" and hallucinate brown predators to blame their lives on. Of course reality disagrees (good thread). It would be hilarious if it wasn't scary: the minority in power treating everyone else as their personal whipping boy. Nazis never stay focused on foreigners but keep inventing enemies closer to home, "first they came for..." eventually winds up with purges within the party itself, every time.

This is why the conservatives have become immune to embarassment or scandal, because no number of gotcha moments that show incompetence or malfeasance (or simply being wrong) matter to their senile Boomer base. The septuagenarians won't even remember the gotchas in a week, they'll cognitive dissonance away what little they don't forget and continue the prejudice they've built up over the course of their lives from back when their brains still worked. You can't teach an old dog new tricks, and you can't teach a Boomer ANYTHING anymore. The Boomers will continue to repeat the same reflexive behaviors by rote until they die, and nothing can get better until power is taken from them, by death if nothing else. They neither notice nore care that their party is morphing into literal nazis as the people who aren't crazy enough for each new threshold of awful leave. (The ones shaken out at this point are the scum of the earth, but not the concentrated weapons-grade evil distilled down into the residue clinging to plutocratic power.) It's the same "perceiving acknowledgement of the truth as a threat" dynamic as alcoholism. John Rogers called it "the death of an identity, an extinction burst".

It SHOULD be hilarious that GOP wingnuts confused the Bureau of Land Management with Black Lives Matter and decided that since BLM is sending people to the fires antifa must be responsible! Wrong BLM, idiots. Sadly, while they ARE clearly clowns, it's the clown from "it" killing a bunch of people and thus not funny at all. They're reinvented blood libel, because abusers are unimaginative and always converge on the same tired tropes.

Interesting. The problems with congress (as opposed to the senate) can be traced to Republican president Herbert Hoover in 1929, right as he was causing the Great Depression.

September 16, 2020

Yay, patreon finally acknowledged that they screwed up on the tax thing. Instead of deducting the tax from the amount creators got (which is annoying but fair), they RAISED the price they charged each contributor without asking, which made them both greedy and unclear on the concept of consent. Unfortunately they don't acknowledge that they understood why they were wrong, just that people were pissed and they're going to let the anger die down before... putting the exact thing back again, I expect? Sigh. Late stage capitalism.

Building nextpnr I hit the problem where cmake didn't know what to do with a .c file, which is apparently a common issue that requires portability fixes, so I submitted a pull request. And if you look at nextpnr/CMakeFiles/CMakeError.log you get:

Run Build Command:"/usr/bin/make" "cmTC_f263f/fast"
/usr/bin/make -f CMakeFiles/cmTC_f263f.dir/build.make CMakeFiles/cmTC_f263f.dir/build

Well of COURSE cmake is a wrapper around traditional make. And then ninja calls cmake and meson calls ninja, and that's the new qemu build. Why would we REMOVE any dependencies from the stack? (Yes of course I'm singing that dependency chain to "potato/potato". "Cmake's a wrapper, around make from posix, ninja calls cmake, and meson calls ninja. Posix, cmake, ninja, meson, let's call the whole thing off.")

What I was doing before that was ripping the lib/password.c plumbing a new one, but what I was TRYING to do was implement:

$ echo ${X=banana} ${X%n*a} ${X%%n*a}
banana bana ba

Which involves reopening the can of worms that is wildcard support, and I'm poking at that. I have recently stacked "using nl_langinfo() in main.c to see if setlocale() needs to fall back to a hardwired utf8 one" (fallout from the commas thing where I had to open the localeconv() can of worms and actually read what it DOES, locale -m implies that the string to check is "UTF-8" all caps). And looking at the kernel's Documentation/admin-guide/device-mapper to work out how util-linux's blkid is working without the suid bit. I haven't got time for either of those just now.

Tangent: calling blockchain a solution in search of a problem turns out to have been optimistic.

September 15, 2020

Thoughts and prayers.

Remember when the Resident was warning that Hillary would steal the election in 2016 and it turned out to be projection? The Resident warning of armed insurrection just about guarantees his guys are planning to do just that. (Every accusation a confession, and he's on record as wanting to kill his political opponents.)

Obviously he's not going to win the popular vote, but the GOP has not actually won the popular vote for president in over 30 years. It's common knowledge they didn't win it in 2016 or 2000, but since 2004 was the first year of electronic voting machines we didn't know how to prove fraud at the time, and by the time we retooled our analysis to explain how it had been rigged and indict some of the guilty parties, Boomer Media had "moved on" and never issued any corrections. Add in the clinton and obama presidencies, and the last presidential election the GOP actually won was George H. W. Bush in 1988, 32 years ago. Russian interference helps them game the system, but doesn't make them actually popular outside their cult.

Fast forward to the present where ICE is performing forced hysterectomies on detained women, which is a thing we charged the nazis with at Neuremberg, although the USA wasn't leading that charge since they learned it from us a hundred years ago. (During the great depression german nazis came to the USA to study our racism. And now the GOP is learning from the nazis. Bullies recycle the same three ideas forever. A conservative is someone who found a lungful of air they liked as a small child and has refused to change it ever since.)

If the GOP wasn't 100% hypocritical then "pro life" would mean "anti-forced-hysterectomy", but of course not. They're hypocrites It's all about racism, white women who want hysterectomies can't get them because of the same racism.

Good Cop remains useless. Admittedly, useless is a step up at this point.

We still need to guillotine the billionaires. You can't subsidize your way out of a parasitic relationship, you have to pull off the ticks and crush them.

September 14, 2020

Found a place that can do the covid testing I need to reenter japan. Jeff is having people in Japan call the embassy to see if I can avoid having to rent a car to drive to houston (and stay overnight) to submit the documents in person.

I finally got the case/esac parsing update checked in, and what I WANT to do next is implement ${x/y/z} because that's what's killing the mkroot init script, which is a showstopper for cutting a toybox release. However, the remaining slice commands I haven't implemented have one thing in common: they all use the wildcard plumbing to match patterns. Next up in my notes is ${a#b} and ${a##b} and the difference between them shortest vs longest wildcard match.

Following the oil industry is tricksy at the moment. Many moving parts, although there are sites collating a bunch of links. My interest in this area started with the exponential rise of solar/wind/batteries, but we seem to be reaching the endgame for oil, so I'm trying to understand that.

Oil futures are inching down because the oil companies are trying to flush out the backlog of oil from earlier this year, but despite all their efforts and cuts inventories aren't consistently going down. Demand isn't recovering, both because seasonal decline and a coronavirus second wave (which is already here), and the producers are drowning in debt and cancelling investments, and revealing fraud (although the fossil fuel industry is really all fraud at this point, stranded assets all the way down and even the idea that plastic is recyclable was basically a lie by the oil companies to sell more plastic, but this shouldn't be news when Exxon knew about climate change 40 years ago).

That contango thing is back where people buy oil and pay to store it in hopes the price goes up in future, which means inventories are rising again, growing the backlog consumers have to burn through before producers could raise prices. (And that money drains out of the oil industry, it's taken from consumers without going to producers or refiners. Bidding up the rent for oil tankers and storage tanks doesn't encourage building more of either if there's no future in it.)

This list of the ten largest oil companies from 2 years ago includes 2 russian companies (lukoil and rosneft), 2 chinese companies (national petroleum and sinopec), three european (total is french, bp is british, and royal dutch shell), and three US companies (pillips 66, chevron, exxonmobil). This list has 7 companies, 6 from the above list plus Eni (a spanish company). The definition of "largest" is squishy because a lot of these companies do other mining and manufacturing, refining, chemicals and plastics, and so on. Neither list includes Saudi Arabia's Aramco, which admittedly only went public last year. The Fortune 500 global list for 2020 has Sinopec, CNP, royal dutch, aramco, and bp in the top ten: China and Europe, nobody else.

ExxonMobil is #3 on the domestic Fortune 500 list but it's not in the global top 10, and was recently removed from the Dow Jones Industrial Average. No other oil companies are in this year's top 10 domestically. The regulatory capture of coal and oil taking over the US government (CEO of exxon became secretary of state, all the "bring back coal" speeches, the #2 fossil fuel producer Russia hacking the electronic voting machines) does not appear to have done much to extend the oil industry's runway. It bought them a couple years, but took 4 years to do it.

Meanwhile, Saudi Arabia seems surprisingly screwed. MBS, the butcher who murdered his way to the throne of Saudi Arabia, lost a lot of political capital fighting his price war with Russia and forcing through an IPO of his country's oil company that saddled his country's budget with a $75 billion annual dividend obligation that's already forcing budget cuts in services and cancelled project investments. Instead of funding his country's the diversification away from oil, the IPO drained the budget to pay for it. MBS hasn't been on the throne long enough to be known for much else yet, except the murder of Khashoggi and kidnapping the prime minister of lebanon.

What's gutting oil is the advance of renewables. We're closer to an electric airplane due to significant efficiency increases, although airplanes and container ships are places hydrogen fuel may actually make sense. (Concentrating energy like that is lossy, but sometimes worth it.)

Renewables are killing fossils in solid/liquid/gas order. Financially the coal industry is toast, coal demand peaked in 2007 and coal company stocks crashed in 2015, and while the decline continues the actual amount of coal burned hasn't gone down yet because china, but their coal industry isn't financially viable, it's basically their "ghost city" problem in another context.

If oil demand peaked last year, 13 years after coal demand peaked (outside of china's completely artificial market), that implies gas demand peaking somewhere around 2032. But there's just too much noise to pull out a clean signal here. Oil and gas are tied together, but on its way out coal was doing "coal gas" too, until alternatives became too cheap to bother. Here's a report saying that the coal and natural gas electrical power generation industry has contracted 2.8% per year over the past 5 years, and then is expected to contract 5% in 2020 alone, but the bundling makes it harder to compare them AGAINST each other...

In any case, it takes a trillion dollar industry quite a while to die.

September 13, 2020

The GOP are monsters, and their plutocratic policies are killing people indescriminately as well as making their usual victims' lives somehow even worse. Now the GOP has openly vowed to eliminate social security (disability and retirement both) by the end of 2023. Blaming your political opponents for the problems YOU caused is an old trick and of course Good Cop does it too, but conservatives don't develop the part of the brain that models empathy, which is why they believe the law shouldn't apply to them and don't even bother to learn it. They don't think other people are really people, they literally can't put themselves in anyone else's shoes, all that's important is they command and everyone else obeys without question. This seems to be nurture, not nature. Even sociopaths can figure out how to MODEL this stuff and PRETEND to care to function in society, but conservatives have decided they don't NEED to. A lot of "don't have" isn't a lack of capability, it's "haven't developed". Academic research suggests that tribalism puts humans into "us vs them" categories and the real question is where you draw the line: sociopaths have just one person in "us", conservatives have a tiny circle of god's chosen annointed ones, and healthy people can have at least bursts of sympathy for theoretical starving children in africa. The conservative "us is people, THEM is not people" is how you wind up with outright nazi behavior against migrants. It's a natural extension of slumlords and human trafficing coming together to cause things like the triangle shirtwaist fire and homestead massacre during the Gilded Age (I.E. the previous plutocracy with the railroad robber barons).

This is why too much STEM and not enough humanities is a PROBLEM, sympathy for others is something that can be taught but we don't bother anymore because the Boomers decided to train more television repair technicians back in the 90's and forget all this girly touchy feely stuff like history and literature and philosophy. (I have an english minor and I study history as a hobby, computer science by itself makes you very good at solving the WRONG PROBLEM.)

Here's a thread analyzing one specific Russian twitter troll. Twitter has its problems, but never trust facebook for anything.

Brexit continues apace. Police are still systematically attacking journalists.

September 12, 2020

Remember how Google buying Motorola was a conflict of interest and they sold it again quickly (after stripping off the patent portfolio to fight back against Oratroll's lawsuits), because while they owned it they were competing directly against their own Android customers? Nvidia buying ARM strikes me as the same kind of conflict, this time entered into intentionally, on an even LARGER scale.

Hmmm, studies showing Covid causing persistent memory loss is worrying. (I don't know if that's what I had in March. I've noticed struggling more than usual with memory since, but that could just be sleep deprivation from being on a night schedule when everyone else isn't, and stress from the trumpocalypse and boomerdamarung. My sense of smell's usually shot about 8 months out of the year due to Cedar pollen anyway.) And we have no idea the long term effects of any of this. I'm generally pretty good about recovering from stuff in the longer term (to the point even largeish scars eventually go away), but that's slowing down as I get older...

Oh well, I've been pretty good about keeping external records, such as this 2006 writeup where I explained what I was trying to do when I first aproached the tcc project about maybe trying to pitch in on development. My compulsive documentation is as much notetaking as anything else, I KNOW I won't remember all the details a year or two from now, I first figured that out about myself in my teens so it's not exactly new. (Speaking of history, something that wasn't explained in this article is I started the busybox GPL enforcement lawsuits in 2006 because the project already had a "hall of shame" page. I _inherited_ a festering legal mess and undertook cleanup work there like I did everywhere else, contacting Pamela Jones of Groklaw who recommended Eben Moglen's new Software Freedom Law Center project for pro-bono legal representation on the existing backlog of reports. I ran the experiment, proved that it did NOT add code to the project, and then couldn't get them to STOP afterwards...)

September 11, 2020

A reminder that the september 11 attacks were a rounding error compared to the damage the GOP is currently doing to the country with the pandemic, let alone the wildfires and hurricanes, all while medical debt bankrupts people and ICE is still putting kids in cages. (Yes the plutocracy is just as bad across the pond.) And yet ICE and Homeland Security and the TSA were all created in response to 9/11. Logically uprooting the GOP and installing basic income in response to 2020 is a far more justifiable response, which the Boomers insist will have to happen over their dead bodies but they're on a timer already. (If "Boomer" is defined as "born in 1955 or earlier" then the youngest of them turn 65 this year, and objecting to anyone else having basic income while collecting social security is the "we didn't have penicillin while I was growing up, you need to die from that infected hangnail out of FAIRNESS" argument.)

The GOP wingnuts are confusing the Bureau of Land Management with Black Lives Matter, and have decided that antifa is setting all the fires. That's a new level of incompetence even for THEM.

The GOP kills people. We're going to need new neuremberg trials. Boomer Media remains useless although some individual journalists seem to be getting tired of it. The Boomers know what they did, and they expect the rest of us to remove them from society, which... If you can't vote younger than 18 or be a senator younger than 30, why can you vote in your 80's and be a senator in your 70's? Mandatory retirement was a thing for a _reason_.

For some reason, paypal has decided it doesn't like the word "tardigrade" and will block any transaction including it. Of course paypal is the source of much of the money funding the alt-right, which is probably why the new company Thiel's on the board of directors from does so much damage.

Ooh, actual good news. (Of course the district attourneys oppose it: as the tv show Law and Order taught us the only thing separating them from the cops is a "donk donk" noise. And they're only in a position to commit endless racist microaggressions rather than direct violence like "beat cops" do. On the bright side, when stripped of "qualified immunity" police are becoming uninsurable.

Surveilance capitalism is a problem: obviously never allow random crap to attach to your wifi but what if it's your landlord doing it? Tenants rights about surveilance from landlords are gonna be another reason to guillotine the billionaires. (Not that there'sa ny shortage of reasons.) Most amateur security people are so terrible at it that even when they MEAN well, the only winning move is not to play. Add in the conservatives' "the rules apply to you and not me because I'm a special magic person and you aren't real" mindset...

September 10, 2020

I emailed Elliott about maybe adding the errno to the strerr() output, perhaps something like:

ls: blat: 2=No such file or directory

But didn't cc: the list because the bikeshedding would form a mushroom cloud.

At the moment, Android uses english error messages for everything, which turns out to be intentional because bug reports for the same issue with outputs in different languages aren't collated properly by the available human or machine learning systems. And I don't think any solution I do would change Android's policy at this point, because toybox isn't the only package consuming the libc internationalization database they intentionally emptied. (The GUI uses a different one, this is the low level posix one consumed by command line tools.)

I suspect I'm going to remove the commas because the guy who complained will never be satisfied, which means I'm winding up on Android's side of this issue. Sigh.

September 9, 2020

Just one link today: a prominent youtuber talks (and interviews other youtubers) about being stalked, and how the police are utterly useless (as in not even enforcing restraining orders until he kills you).

This is why defunding the police is such a low bar. I just had another bike stolen off the front porch and didn't even bother to call them, because when our house was robbed in 2012, when my car window was smashed back at the condo, when multiple bikes were stolen over the years, they have never once actually found or done anything useful. The police don't do their JOBS. (Over the past 10 years, half of all homicides reported to the police in the US didn't result in an arrest, the police are so useless people aren't even bothering to report most crimes to them anymore.)

Ok, three links. But watch the first one, it's really good. The other two are just bibliographic references backing up a statement of fact.

September 8, 2020

Well of course bash special cased it:

$ case i in esac) echo hello;; esac
bash: syntax error near unexpected token `)'
$ case i in if) echo hello;; esac
$ case if in if) echo hello;; esac

If the first pattern in a case pattern is "esac", it's detected when other keywords aren't. And they're synthesizing a "true" when );; has no statement in between:

$ false; case i in i) echo $?; esac
$ false; case i in i);; esac; echo $?

So many implementation details, which the userbase won't stand still for me to grind through. No, meanwhile the commas mess continues, and there's a cleanup on aisle logger.c... (In theory this shell work winds up with mkroot working again so I can cut a release and THEN start working on root tests that run in qemu, so I can actually have a tests/logger.test rather than asking the list. But I can't do that cleanup and THEN deal with this.)

And gmail's spam filter went feral again. I'm reverting hundreds of messages from linux-kernel and so on which should not have gone to spam, but when it misidentifies one it "learns" quickly and needs serious smiting to back off.

Speaking of which, gmail's web interface has a design flaw that as you get to the bottom of each page of messages, the "I just did a thing! Prase me!" pop-up window covers the selection checkbox of the bottom message (or many if you haven't scrolled all the way down) so you have to dismiss it to select that message, and since it autofills the bottom with new messages every time you say "not spam" and it removes some, you wind up repeatedly having two or three at the bottom that are not spam over and over, so you click all but the bottom one, dismiss the dialog, select "not spam", rinse repeat. And the dialog is a precise mouse navigation when the rest are just "click click click" in sequence. Terrible UI, that. What I WANT is to click "not spam" and have it show me a FULL PAGE of new misidentified messages, not half of it taken up by ones I've already looked at. What gmail has DONE is implement a reverse form of Schlemeil the Painter's Algorithm where I get less and less space between updates each time (and more and more interaction with their UI design flaw) until I can FINALLY move to a new page. (Advance by a specifiable granularity instead of a full page? Why would anyone want to do THAT?)

September 7, 2020

The weather is destroying entire cities. The AVERAGE high in Phoenix last month was over 110 degrees. Flooding isn't the only effect of global warming that's going to force the permanent evactuation of cities, and it's not just a southern thing. And yet it's not enough of a crisis to head the list because the people setting the agenda steal elections so don't have to represent the people to stay in power. The rich and powerful can usually ignore the externalities they impose on others.

White supremacy was always a business model. Billionaires use scapegoats to keep everyone else in poverty because the way to be a big fish in a small pond is to drain the pond, and this is why so much of rural america is gerrymandered and voter-suppressed and chases out everyone who finishes high school. Sarah Taber just did a great thread explaining this. Most actual white supremacists are like fox news viewers or any other cult members: they swallowed the propaganda they were fed and now chant it back, but they're not WHY it happened, they just drank the kool-aid. Cult members are victims of the cult leader, and people who realize this have always stood up to them.

White people in general aren't exactly covering ourselves with glory these days. White supremacists are still disguising themselves as protesters to undermine peaceful protests, and the police still consider white supremacists allies and brown people (or anyone who sympathizes with them) enemies. That's why the police are still rioting: David Graeber said the purpose of police is to protect the rich from the poor (not a unique observation), and increasing inequality means over 90% of the population is now "poor" in that equation. The police are still rioting, and defunding the police has demonstrable benefits.

Boomer Media has abdicated all responsibility, but older Gen Z members like AOC are good at calling them on it. ("Follow the journalist, not the outlet" is excellent advice.) Thus you get things like an explanation of america's fascism has been set to music, of course originating on the social network the GOP wants to ban. The old mantra that took down Nixon remains true: follow the money. But unlike Nixon, we can't afford to pardon the criminals this time, we need Neuremberg trials for the GOP. Investigate and prosecute even the petty crimes to wipe the slate clean.

It's interesting to realize how much good the "greatest generation" who fought World War II actually did, and how much the Boomers squandered from that local peak when they took over. Back when the USA was founded only 6% of the population qualified to vote, so our chest beating about democracy rings a bit hollow. We were the 57th country to achieve universal suffrage, and our life expectancy has been lower than Costa Rica's since Ronald Reagan.

Public utilities work. Private for-profit anything is not sustainable. Capitalism corners markets and creates bullshit jobs (often at the same time, inserting unnecessary middlemen who charge through the nose for permission, verificiation, validation, certification, navigation of an intentionally obfuscated and complicated process to do something otherwise simple and straightforward...)

Even when capitalists take over a real product, they drive it beyond its limits in pursuit of endless growth until it becomes a scam. For example, 4k is digital movie theatre resolution so having a 4k TV at home guarantees you can't physically perceive the difference, they just want an excuse to tell people who bought HDTVs to throw them out and buy new ones.

This is why we need to guillotine the billionaires. Half measures won't cut it.

September 6, 2020

I don't WANT to care about locales, but the downside of "wait for somebody to complain" is that when somebody does complain the excuse to not do it goes away. Elliott complained about top using kilobytes to show machines with gigabytes of memory, which is what debian does but I humored him and added commas which was immediately bikeshedded and oh goddess I've already ranted about this at length, and there was even a section on it in my 2013 toybox talk.

Of course I'm out at the UT table again today. I can't work at home and the various fast food booths I'd hang out at off-hours are all pandemiced for the forseeable future, although there's very interesting news on that front. (Clinical trial shows Vitamin D is an effective treatment for Covid-19. 40% of the population is Vitamin D deficient, but 80% of the black population is and 70% of the hispanic population, and that by itself would explain the racial disparity in outcomes. In the USA we supplement bread flower with B vitamins, put iodine in salt, and add vitamin D to milk. But if you can't afford milk, live in a food desert where getting refrigerated food home is a challenge, or are lactose intolerant...)

I fixed the "echo {a..Z}" segfault where the code was relying on parse_word() to produce balanced quotes and finished \escapes but the {bracket} logic was producing an unbalanced \ that took out the NUL terminator and then the parsing looked past it. I fixed it by having it add a \ before ispunct() which isn't what bash is doing but... wait for somebody to complain? Other than that, bracket ranges should be done now and I'm back to case/esac parsing, which is fiddly:

$ bash -c $'case i\nin\na) echo one;;\ni)echo two;;\nesac'

The line continuation logic doesn't know about any of that, and the assumptions the code reentry path is making about the previous statement having finished doesn't quite match the "this type of statement must come next" need, which is easiest to deal with by adding a pipeline segment of the appropriate type as soon as you know what comes next must be that type. The problem is, that's an EMPTY pipeline segment until the next word comes in, which is a new case. And what's logically the same segment splits in the middle to straddle lines. Hmmm...

September 5, 2020

The average wage just went up 10% without anyone getting a raise. That's how many low income workers lost their jobs. That's why everyone has time to protest now.

If you don't understand how bad the Republican Party has become, you're willfully ignorant. It's gone beyond "not paying attention" into active denial. They're directly opposing the concept of democracy after years of obviously but less directly opposing it. GOP and police murdering their political opponents is now policy. They've not only embraced Russia (our old cold war enemy), they've embraced the Bin Laden family. It's not just one man, it's the whole party. And it's nothing new, Richard Nixon was horrific. Conservatives everywhere are the same, insisting that the rules do not apply to them... so why would any rights or protections? Guillotine the billionaires. They've prevented us from fix it any other way and will keep making it worse as long as they can.

White racists are the real terrorist threat. NYC created a "black lives matter" mural on the road. The NYPD (a wretched hive of scum and villainy at the best of times) parked dozens of cars on it to hide it. Police are sucking all the money out of municipal budgets to do all this, but so many Boomers aren't dead yet that. support for defunding the police is only up to 40%.

The police atrocity list continues to grow (here's more detail on that entry). The Los Angeles Sherrifs are literally shooting at passing cars now (thread). They're literally prosecuting "pre-crimes" now. No longer a science fiction premise, they're actually doing it and conservatives everywhere are ecstatic while ignoring all the actual crime where rich people break the law and steal money.

Silicon Valley attempting to solve the world's problems is never a good thing, and yes white savior complex is a known issue. (Dunning Kruger applies to experts in one area thinking their expertise transfers to wildly different disciplines. Confidently ignorant because they KNOW they're smart, therefore they're unprepared to be unprepared.)

Late stage caitalism continues to suck. Boomer Media continues to insist "Good people on both sides" and refuse to acknowledge factual statements, and generally faceplant. Boomers are hypocrites, and Boomers are the ones who broke everything.

Hmmm. A strong argument that volunteering for large for-profit corporations is contraindicated. On the one hand, open source development is what basic income would produce. (That last link points out we subsidize the creation of food, but not its distribution, because capitalist racism). On the other hand, at the moment your fanfic gets the serial numbers scraped off and turned into a cash cow for Disney. Dunno what to do about that.

It's easy to forget how curated an environment Faceboot is, but that's true of all the right-wing echo chambers. It was always a cult, that's the point.

Gun nuttery is internally inconsistent and was always nothing but bullying.

September 4, 2020

Good news, everyone! Exxon was removed from the DOW.

I need to do another deep dive into the oil industry soonish, which has not recovered from the crater back in April that was big enough to trash adjacent industries like ethanol and led to a wave of bankruptices and turned all the oil industry infrastructure into stranded assets. The headline of this bloomberg article is "Oil companies wonder if it's worth looking for oil anymore."

I've been watching lots of youtube videos where people explore abandoned buildings. When I was growing up the idea of tons of abandoned buildings was just strange, there was construction everywhere. Now? Not so much. Capitalism's demand for endless growth turns out to be an S-curve just like everything else, and with the planet's population plateauing (if not shrinking until we figure out how to properly subsidize child rearing, another thing Basic Income would fix), we need to figure out how to do more with less. (This doesn't mean individuals get poorer, stock buybacks were always about a company remaining the same sizewhile the share price endlessly increased and split. Sustainability is a thing the Boomers never understood, but natives everywhere did before european invaders displaced them. Heck, the europeans who stayed home understood it, the "loot pillage and burn" mentality only applied overseas, pre-Boomer.)

September 3, 2020

Darn it. David Graeber died. He'd been sick for a little while but not THAT sick. (It's sounding a bit like he died of Covid?)

Here's a profoundly good article he wrote 5 years ago, and a review of his excellent book Debt, the first 5000 years.

And of course the latest example of Bullshit Jobs is the $2.7 billion active shooter drill industry which does nothing to keep kids safe while causing mental health problems. That would be an example of his "duct tapers" category of BS jobs, paying to (poorly) treat the symptoms of a problem we could actually FIX but collectively choose not to.

Graeber was a strong proponent of Basic Income, which is something we can afford now. Heck, inflation is not currently a thing, and all you ever had to do to tame it was tax the rich white (or, more realistically, guillotine them).

From a certain perspective Graeber won, in that capitalism will not outlive the Boomers, but... what will? Capitalism was always rotten: tax havens are a modern extension of colonialism, but now the money being extracted is from the bottom 99% of rich countries, hidden offshore for the 1%. The Boomers are the ones who wet their nest, bringing our horrible external policies home to use against our own people. The failure modes of the Boomers were obvious to the generation before the Boomers, the Boomers were uniquely incapable at maintaining anything.

The police are spectacularly bad at their jobs, and from a "you had one job" perspective police do not stop crime. Here's a recent story where "the police being utterly useless" is part of the setup. Seattle police are immitating the GOP vehicle rally in an empty parking lot, and the LAPD is incredibly petty focusing on useless harassment. The mayor of portland has gone into hiding rather than allow the police funding to be reduced. 9 Boston police officers were just convicted of fraud. Police in minnesota are seizing and selling cars from people who didn't do anything wrong, and it turns out "get out of jail free" cards do exist, you just have to give the police union money. Of course police ignore any law they want to. People are trying to figure out what to charge the cops of murdered Breonna Taylor with but defunding the entire department is still the only real solution. (Terry Pratchett explained what GOOD policing was like years ago, but let's face it: it's just another of the Discworld's fantasy elements.)

Oh look, another good example of why society gets worse until we guillotine the billionaires. (Back before the Boomers broke it we used to do sherman antitrust to break up megacorporations and enforce level playing fields instead of guillotines, but that ship has sailed. They won. Don't pursue half-measures to fix it, hard reset time.) We already knew 5 years ago that the 1%/GOP/Police had turned into a giant perpetual shakedown operation and that american society was becoming fundamentally invalid. But we have to wait for the Boomers to die before fixing it because they're too old to perceive gradual change. Capitalism's demand for "growth" at the expense of sustainability eventually kills successful business models, squeezing blood from a stone until it shatters.

White people ignore things brown people know how to do, then "reinvent" them, the way men repeat what women say and get credit for the idea.

The filibuster was created by mistake.

We know that Georgia's government is outright stolen, it's not hidden.

September 2, 2020

I poked the bash maintainer and he said quote removal isn't quote removal (It's removing quotes, but that's not _quote_removal_), and pointed me at a bunch of historical bug reports which I really should read at some point but right now I, as they say, "can't even".

Doing my periodic mbox file cleanup to address thunderbird scalability issues (it gets slower and slower the longer the mbox files it's appending to are), I noticed that the Qualcomm Hexagon guys finally got serious about pushing hexagon QEMU support upstream. (I mean I noticed that they started doing it in back in November, but that that's the most recent patch series.) There's even a musl fork with hexagon support, which means in THEORY I can add support to musl-cross-make and mkroot. Except what I SHOULD do is email Rich and Taylor Simpson (my old boss at Qualcomm for the 6 month contract I did there in 2010, who is the one who's submitting the patches upstream) and see if Taylor has a budget to throw a few consulting hours at Rich to properly integrate support.

(I did several old blog entries when I worked for Qualcomm in 2010, here's a summary writeup I did a couple years later, and here's Taylor Simpson giving a talk about it 6 months after I left, here's my most recent fruitful interaction with them... It's quite possible I'd still be working on THAT if they hadn't had a "budget hiccup" and been unable to renew my contract without a multi-month gap at the end of the 6 months. Oh well. Fascinating technology, although Jeff says that barrel processors are actually an old idea. It's a bit like being amazed about GARBAGE COLLECTION when Java came out and all the old Lithp heads going "do tell" and the Pascal P-code guys just sighing and turning away...

It's always frustrating when I google for something and the result is _me_. I don't want it to be me. If I knew this, I wouldn't be looking for it. (In this case "nommu python". The first hit is which I forgot was even a thing, I think we let the domain expire. The 6th hit is my resume. The 7th hit is random discussion of one of the files on the old site (a file I wrote 10 years ago).

September 1, 2020

Here's a quite readable deep dive into how utterly screwed british shipping is.

Oh wow, Bayer (bee killer and home of roundup cancer spray) merged with Monsanto (the people trying to corner the market on food with gene patents and slimy lawsuits) and the result was a dysfunctional lawsuit target. Couldn't have happened to nicer bastards.

I just saw the best one tweet takedown of late stage capitalism I've seen in a while. (That guy's been ruminating on this for a while.) Basic Income is still a good idea, and it's something we can afford now (especially if we guillotine the billionaires). What we can't afford is endless spending on police, who are paid to be monsters. Understanding the difference between police and military remains vitally important. (The military know they're not police. The current police don't understand the difference.)

But unfortunately we have to wait out the Boomers. They are literally why we can't have nice things. Boomer media continues to suck, and advice Boomers give is wrong. Police overreaction has gone to plaid, and the police are arresting medics trying to treat the victims. Of course everywhere the GOP or the police DON'T start violence (that's a good thread by the way), the peaceful protests are actually peaceful and thus not newsworthy to Boomer Media.

The GOP is still finding subtle ways to kill people, as they get closer to fascist takeover (here's a fascism checklist you can plug all the GOP's actions into, remember safety in numbers goes both ways) and stop bothering to hide their nazi connections they're also exerimenting with straightforward open murder (which in other countries we call sectarian violence), explicitly using terrorist tactics. Meanwhile the republican base is doing the Luke Skywalker Whine ("That's not true, that's impossible!") about our entire criminal justice system being profoundly racist. Some of them now _recognize_ it, and don't want it to be true.

But the cops are rotten. Here is an excellent thread summarizing why Portland's police, specifically, need to be completely defunded and disbanded. The police turn out to be as bad at running the sex offender registry as they are at everything else. Here's a list of lies police regularly tell, without consequences.

August 31, 2020

I look forward to the end of capitalism. Capitalism is a disaster that crashes regularly, and the real question is when we stop bailing it out.

Capitalism is credited for all sorts of stuff it simply didn't do. What does Norman Borlaug's green revolution have to do with capitalism (he moved to Mexico to do the work), and we subsidize the heck out of the food and energy industries. What does Moore's Law or the internet have to do with capitalism? (You couldn't even commercially connect to the internet until 1993 when the thing was a quarter century old.) The interstate highway system wasn't created by capitalism. FDR's new Deal bringing electricity and telephones and plumbing to every corner of the country wasn't capitalism. Modern medicine emerged from the US Civil War, Penicillin was developed as part of the war effort for World War II, and national health services have always had better results than private ones. The US public school system making everyone literate and numerate and facilitating so much technological advance is the OPPOSITE of capitalism, as was the boost it got after Sputnik in 1957 (just in time for the Boomers to think that level of spending was normal, and then cut it for those who came after them).

The USA won World War II by SUSPENDING capitalism. We went on a "wartime production footing" instead. Our economy boomed afterwards because the period we spent NOT being capitalist repaired, refreshed and energized everything (after capitalism gave us the Great Depression) despite a large chunk of our work force dying or coming home maimed and/or with lifelong psychological problems, and spending 4 years rationing consumer goods and devoting all available production capacity to making useless junk we couldn't consume in peacetime (factories converted, thousands of tons of raw materials scattered across europe or sunk to the ocean floor)... And yet this non-capitalist mode mobilized half the workforce (Rosie the Riveter on the factory floor, the WACs and WAVEs managing it all) that capitalism was too biased to even access. The war gave us the computer, radar, two way radio, the transistor, nuclear power... When it came to its own nominal metrics for success (production of goods and technological advancement) capitalism SUCKED.

We obviously didn't land on the moon because of capitalism or we wouldn't have raced the Russians there. The only reason our government program (NASA) beat the russian's government program (despite Russia putting the first satellite in orbit, Sputnik, and the first man in orbit, Yuri Gregarin) was Kennedy moved the goalposts by announcing an ambitious (I.E. looney) moon landing when Russia was busy pursuing an orbiting space station, and by the time Russia retooled to pursue a moon landing instead they were behind and rushed to catch up in the new context, and their N1 rocket exploded and destroyed its launch pad. (It's a bit like AMD hiring the Alpha design team from the corpse of DEC in 1996 and leapfrogging Intel with the Athlon and Opteron, and Intel rushing to catch up and producing the Itanium and Pentium 4 in the early 2000s. A leader suddenly having to play catch up often stumbles under the pressure.)

My grandfather (the one who worked for the NSA, which I didn't know about him until mom died and he got suicidally depressed about outliving TWO of his kids, given uncle Bo died in vietnam) was assigned to the apollo program to work with the USA's captured Nazi scientists from the V2 program, and he once said that Werner Von Braun was a stickler for safety protocols, arguing that in a complex system you MULTIPLY the probability of failure for every component (if you bundle together 1000 components that each work 99.99% of the time, the result has a 10% chance at least one of them will fail). The Nazi scientists from the V2 program that the Russians captured when they took east Germany didn't include the QA and testing guys who were so paranoid about safety, and in the face of deadline pressure the Russians had an Unfortunate Incident that derailed their program. But there's no question the Russians could have gotten to the moon under their own power by 1975 or so if "being first" hadn't been the entire goal to the point the USA itself stopped going back after 1972. The russians switched back to their space station program in 1971 and then ran Mir for 15 years. The US responded with its own space station which was a disaster (only occupied for 24 weeks total, crashed back to earth in 1979).

The US waged a massive PR campaign against the Soviet Union during the cold war, and via McCarthyist purges and such we convinced OURSELVES that we were a captialist nation and assigned all sorts of virtues to capitalism that it had never earned. The Boomers were raised on this crap in the 1950's and got heavily brainwashed, but none of it was true. And now, 70 years later, we're being forced to realize this. Capitalism creates plutocrats, now as in the Gilded Age of the Railroad Robber Barons. We yanked ourselves OUT of it after the great depression, and then plunged right back in because we were so scared that communism would win. If the people afraid of communism thought it really didn't work, why would they have spent so much effort opposing it, and warning of its rapid worldwide spread? If even Russia (the one place Marx said communism would never work, still a theocracy of illiterate medieval peasants ruled by a king until 1917 because the european renaisance never made it there) could sort of make a go of it, how powerful would it be in a first world nation? Except step 1 was, as in France, to guillotine the billionaires. And the plutocrats were TERRIFIED...

August 30, 2020

Huh, it looks like Mozilla is toast. As much as I like chrome (entirely due to "pkill -f renderer"), I'm a bit uncomfortable with a monoculture. Then again, Mozilla's problems are self-inflicted and run deep, in fact the creation of mozilla was damage control in the first place, and the project's direction and sustainability were always problematic. A foundation that can suck down half a billion dollars annually and burn through it has NO BUSINESS being anywhere NEAR open source. A half billion dollars is an ENDOWMENT, at 5% interest that's 25 million per year, enough to support a couple hundred programmers working from home in perpetuity and still grow the principal faster than inflation. And yet somehow they spent it as fast as it came in, and ran out. Why?

Speaking of working from home, it turns out to be a net positive for productivity.

I'm getting so many emails trying to put advertising on my website. (Up to and including wanting to run articles in this blog. I boggle.)

Yesterday I didn't have any caffeine when I woke up, thinking I'd have some in the evening as I was heading out on my walk to UT. So I was tired and listless all day, and instead of heading out I fell asleep and slept through until morning. I didn't have any caffeine today either, and spent most of the day sleeping. It's not exactly a proper detox, but strongly implies I should do one of those at some point. (I usually go cold turkey for at least 2 weeks every year or so, to reset my tolerances.)

That said, I took two cans of milk tea (loire river assam and sunlee thai) and half a bottle of HEB's store brand splenda stuff I added milk to myself along with me on my walk to UT tonight. (And a bottle of normal uncaffeinated water, which I drank most of on the way.) I left behind all the V8 cherry and blueberry flavored energy cylinders though. LESS caffeine is probably a good thing. (I would still be taking the blood pressure medication, but they stopped prescribing it until I got back up to minneapolis for a kidney test. It was less powerful of a diuretic than all the caffeine I've been drinking since, but my logic is if they won't give me blood pressure meds than clearly I'm cured. No, this country does not have a functioning health care system, why do you ask? The proper fix is probably to lose 80 pounds...)

Toybox: I am gonna have to audit soooooo much memory leak stuff. (Well, run it and see what's leaking. I should learn to use valgrind.) My general approach to this is basically a manual garbage collection thing where I'm adding allocations to "delete" linked lists, and then traversing those in cleanup functions later. The question is the lifetime of those; if I have a for loop traversing a million times, I don't want allocations to stay until it exits. But then the way for loop lists work is python-like "expand the list up front and it survives until we finish", which... works on modern systems with buckets of memory? Right now the garbage collection mostly works at block level, so when you exit out of a statement (fi/done/esac) its resources get cleared. And a lot of the rest is at statement level: run a command and its arguments are freed when it returns. So the lifetime isn't so bad, but making sure I don't MISS anything is the hard part. (I can check filehandles via "ls -l /proc/self/fd", modulo the cloexec stuff where it should really be /proc/$$/fd. But checking memory allocations needs tooling.)

This is still a "burn this bridge when we come to it" thing, though. Not there yet...

Sigh. I think it's a given at this point that toysh isn't staying in the 3500 line budget I set for myself. Maybe I could hit it with fewer comments and blank lines, but that's cheating. I'm closing in on 3200 lines and just now adding {a..c} support and haven't even tackled functions and aliases yet, only scratched the surface of job control, have half of wildcard plumbing left to implement... There's a couple hundred lines of debug scaffolding to remove at the end, but my best bet for hitting 3500 is to finish it and then try to do more cleanups to get it DOWN to 3500 later.

Oh goddess, the QEMU build grew something called "meson", yet another new build system which is built on top of ninja _and_ python. So Android uses Soong, QEMU uses Meson, and both of them are built on TOP of Ninja (which was created because the Chrome browser build is a clusterfsck that doesn't scale; I blame C++) which requires python 3 and on at least some occasions hands off to cmake with a make wrapper.

I've ranted about "lateral progress" before. I miss the Linux Luddites podcast, whose motto was "not all change is progress". Scotty said "a good engineer is always a wee bit conservative, at least on paper". You don't reinvent the hammer annually, that's not how physics works.

Sigh. Oh well...

August 29, 2020

The headline "Ex-Boston Police Union President Charged With Raping 4 More Children" is pretty much what I expect from the police at this point.

You cannot reform this. You can only abolish it. The british police force was established in 1829 on the concept of "policing by consent" and have never regularly carried guns but the exact same right-wing brexit yahoos in the UK dismantling the NHS are agitating for arming the police. In late stage capitalism (which is now entirely fraudulent all the way down), the police are billing protestors. The lawyer for the Kenosha shooter is part of the GOP's new cult. The GOP has now ended the election interference briefings from the Office of the Director of National Intelligence. Right-wing militias are threatening librarians. As people have pointed out, more people died of coronavirus during the Republican National Convention than were killed by 9/11. They're still trying to destroy the post office. How many examples do you need that the GOP are racist lying nazi hypocrites who ignore the law, and the whole party needs to end. (And their allies, such as Facebook, which instead of banning nazis has done a mass purge of anti-nazis.)

We know how to fix all these problems but refuse to do so until the Boomers die. It is entirely possible this country will not survive the Boomers, and their good people on both sides Boomer media outlets. Good Cop is still a cop. Good Cop accepts bribes. Good Cop is the main supporter of being a cop.

August 28, 2020

Ooh, Shinzo Abe resigned so Japan's racist exclusion policy could end. (Abe's achilles heel is his supporters are nationalists, so he had a hard time pushing back against racism. His political opponents took advantage of his mishandling of coronavirus to create a racism-fueled crisis (keeping all foreigners out of the country until the business community howled and Japan's reputation as a place international companies can do business eroded) that Abe couldn't fix, and exacerbated it until he resigned. (They didn't have to convince the immigration bureau to do that, they just had to stop PREVENTING them. Border patrol is a full-time job keeping "those people" out of the country, as with ICE it's a magnet for racists at the best of times. You need to constantly push back against overreach, and his opponents in the tug-of-war let go of the rope so Abe's nationalists sprawled in the mud.)

In theory, this means Jeff and I can go back to Japan soon. (I can't blame Japan for having a racist Boomer problem when my country is putting kids in cages, school to prison pipeline, kidnap vans...) But early voting in texas starts October 13th and I'd like to stay here until then because absentee voting and mail-in voting are the same thing so that's been completely sabotaged. Hmmm... (I flew back from tokyo to hold my nose and Vote For Her in 2016, can I delay my trip back for a month to hold my nose and vote for the Geezer and Good Cop now? It's still a vote against not for, but that's the 2 party system for you.)

The Linux Foundation sent out a "5 sessions you can't miss at $RANDOM_FUNDRAISING_EVENT" and... Sure I can. In fact, since you phrased it that way, missing them now qualifies as an _accomplishment_. Go me. (No idea what the sessions actually _are_, I've configured thunderbird not to load external HTML tracking data from emails, and all the actual content is in the empty rectangles it would pull from their advertising tracker. That makes it even EASIER to miss these sessions.)

Yesterday I accidentally kicked the cat's water bowl and spilled some of the water on the floor, but thought "it'll evaporate". Walked through it multiple times going "Aah! Oh, right. It'll evaporate." Somebody knocked on the door wanting to speak to me and I started to answer the door and then ran to the kitchen to grab my mask. Doing a running pivot through the puddle of cat water, on a tile floor.

On the bright side, I didn't break anything. But after a minute or so of lying on the kitchen floor yelling "AAAAAAHHHHH!" repeatedly, Fuzzy told the person at the door it wasn't a good time, and got me some ibuprofen. The bruise on my right knee is kind of impressive, and I landed with a lot of weight on my left wrist (the one that's been bothering me since the mysterious illness after Jury duty that we can't prove was Covid-19, merely that AFTER I flew back from Japan which was already in full-blown covid panic, I was in a room with over 50 jury candidates for 3 hours before being selected for actual jury duty, and then a little over a week later I had a couple weeks of fatigue and terrible muscle aches to the point there was no comfortable position I could sleep in because lying down meant it hurt to breathe, and I was perpetually out of breath after until I started walking to UT every night to try to get some stamina back.)

Anyway, the weird soft-of-arthritis symptoms I had in my left wrist and left knee after that (the knee cleared up after a couple weeks of walking, the wrist comes and goes, typing was sort of trying to turn it into an RSI for a bit there)... That wrist is the one I landed on. It's unhappy with me. The knee I landed on is the OTHER one, and it's also unhappy with me.

Walked to UT anyway (very slowly), and trying to work on toybox. The function expand_one_arg() is returning NULL for error (ala ${abc?error message}) but you can also get NULL from the variable simply being unset and unquoted, such as expanding $i without quotes. In a redirection expanding to null results in an error (you'd think "echo hello > $i potato" would write to a file named potato, but it dies with "ambiguous redirect" instead), but when assigning x=$i it becomes an empty string "" ala:

$ x=$i env | grep ^x=

But what I'm trying to do right NOW is case expansions, which have two contexts: the "for $X in $Y) ..." stuff. And both of them expand to "" rather than erroring on NULL, but they do NOT use the SEMI_IFS logic because I tested that specific case in the email I sent Chet: IFS=z;echo "$*" expands with z, not space. So I need ANOTHER flag for this.

Yes, I broke down and emailed the bash maintainer again.

I'm aware that today's entry has technical content spliced at the end of lots of other stuff. If I still had twitter to vent the politics at I could do an even/odd alternating for technical/nontechnical, but twitter decided to be part of the problem. *shrug* It's 2020. "And we will be restoring normality as soon as we're sure what is normal anyway."

August 27, 2020

So many youtube videos abruptly stop partyway through I'm losing interest in the platform. (Any time a midroll ad comes on, I close the video and switch to something else.) It's seriously incentivising me to pay more attention to crunchycrunch and netflix and prime video and hulu and audible and such. It had replaced me "what happened today, better check twitter" for a while, but... not anymore. My phone hasn't exactly got a shortage of content, and none of the others are as broken as youtube's become. No, I'm not adding Disney+ or paying money to BBC iplayer or anything else paywalled. Your explicit announcement of annoying me into paying you money gets a "death first" response. I will not pay danegeld. (I feel I should install tiktok on general principles, but don't want a chinese app on my phone? The Resident's hatred of it could be reverse psychology to get people to install spyware. Not on HIS part, he's a dementia patient trivially manipulable by anyone physically nearby, but on the part of whoever gave him the idea.)

The sad part is most of the ads are for things like youtube premium (literally "pay us to stop this ad, this one here right now, this ad serves literally no other purpose, nobody else is giving us money to show it to you or anything"), and Google stuff like chromebooks. I'm pretty sure that Jerry Lewis lookalike who doesn't know about Mt. Everest is also advertising a google service, but I always either skip right at the 5 second mark or turn down the volume and look away before I get far enough for it to tell me any details. (You don't have to look back EXACTLY when the ads end, you can rewind the video back to the start.) The point is, Youtube's vastly increased the amount of ads but obviously hasn't sold the extra space and has to run filler.

There are no self-made billionaires and we should guillotine the lot of them. (By which I mean change the law so that hoarding a billion dollars is capital offense.) But fixing the racism gets us halfway to guillotining the billionaires, so focusing on fixing the racism first makes sense. It's been the main defense of plutocracy in the USA ("he's stealing your cookie") for over 300 years.

When the Minneapolis police chief says "It's my city, I will not tolerate that"... he doesn't own the city. The people living in the city are not his property, and yes that statement includes the black people. And the mayor who refuses to defund the police needs to be recalled. The police have become armed gangs, they should not be publicly funded.

Police in wisconsin are rioting, and the GOP kidnap squads are there now. The Resident announced his intention to cause riots back at the start of his candidacy, before the dementia reduced him to a husk. (Even then he was barely literate, so his "mein kampf" is old fox news interview tapes.)

The GOP's new policy is that people without symptoms shouldn't be tested, and the CDC passed that while Fauchi was under anesthesia.

Boomer Journalism continues to equivocate with "good people on both sides" while the right-wing loons target journalists at the very top.

The GOP is killing people intentionally. Not just the people ICE puts in cages, not just the people the police gun down in the streets: every school shooting is something the GOP defends, the pandemic is something the GOP allowed to run rampant because they thought it struck harder in blue states. The GOP is a death cult, powered by Boomers furious that everyone ELSE isn't about to die of old age like they are. (The unfairness of anyone ELSE suriviving! Can't be allowed.)

August 26, 2020

Got an updated bitstream toolchain build script posted, which involved shoveling out one regression introduced by standard bit-rot (a package's download URL moved) and another that's sheer developer hubris (explained in the linked message, the rot13 is inexcusable). I need to add two more packages to get a proper bitstream rather than just a simulatable netlist thingy.

Over on toysh, I need to expand case's argument with NO_SPLIT but not quite NO_PATH: it needs to COLLECT the wildcard metadata (it's resolving quotes as it goes so needs to note which wildcards were active when the cursor went past). So the existing plumbing should collect the wildcard info, but return it instead of processing it (since it's used to match a supplied pattern rather than search the filesystem). So I need to introduce a deferred wildcard processing mechanism. Hmmm...

$ x() { case "$@" in "a b") echo hello; esac;}; x a b
$ IFS=z; x() { case "$@" in "a b") echo hello; esac;}; x a b
$ IFS=z; x() { case "$*" in "a b") echo hello; esac;}; x a b
$ IFS=z; x() { case "$*" in "azb") echo hello; esac;}; x a b

Darn it, I need more granularity than SEMI_IFS. (And the bash man page is wrong when it says it doesn't perform quote removal. Those are quotes, they got removed. azb != "azb" unless you remove the quotes.)

August 25, 2020

One of the big reasons you can get reinfected with Covid-2019 is there are at least two different strains going around. (The consensus seems to be that during reinfection you can be contagious, but are unlikely to be symptomatic again unless you're a long-hauler who never really recovered from the first one.)

Religion seems negatively correlated with being a good person. Example: Jerry Fallwell was a monster, and it turns out he and/or his son were blackmailed into supporting the resident, but cults gonna cult (good thread).

The police are still the ones rioting. They are motivated entirely by racism, and you can tell which side the police are on because that's who they're willing to turn their backs to. The police need to be 100% defunded, and sued for side effects like dumping toxic chemicals into groundwater. (The military can probably still be reformed, but needs work and we spend way too much on it.)

The GOP doing what's called a "gish gallop", commit new crimes to distract us from their old crimes in a perpetual stun-lock. While the post office remains under attack, the octogenarian democrats are convinced that the racists who committed genocide to get the land and enslaved millions of people for hundreds of years could not possibly steal an election, by force if necessary by force if necessary or by taking voting rights away from protestors because such things are unthinkable to the octogenarian democrats. Not only will Nancy Pelosi never impeach, but her side isn't even bothering to use their supoena power or authority to imprison people.

Meanwhile, AOC attributes her effectiveness in congress to the skills she built tending bar, and the protesters continue to fight despite the hand-wringing and pearl clutching of Good Cop.

Boomers are the problem, they stole all the money. Here's a graph from the Washington Post showing that In 2019 Boomers had just under 60% of national wealth, GenX had 15%, and millennials have something like 3%. (Presumably the remaining 20% is owned by octogenarians like Nancy Pelosi.) It also shows that when Boomers were 30 they had more money than gen x does at 50, and that 30 year old millennials have basically nothing. (Of course Boomer media remains useless the same way even the "good" billionaires remain unhelpful.)

August 24, 2020

The students have returned to UT, which like the swallows returning to capistrano means that Covid-19 distancing is kinda dubious now. The tables outside the geology building are still generally free late at night, in part because no matter how many times I email facilities they won't reset the timer to turn the lights on at 8pm instead of midnight so nobody gets into the habit of hanging out here except me, who learned about it BEFORE the lights bugged out. (For a few years they would adjust forward for daylight savings time, but not back. When they hit midnight they got stuck.) But if I get here at 9pm there's a lot of foot traffic 20 feet away for the next few hours, close enough I feel I should wear my mask, which gets really damp really fast. Oh well, the USA continues to crit-fail handling the pandemic...

I'm making good progress on toysh case/esac handling, although it's one of those "many hours of pondering to produce few lines of code" things. Which is kind of toybox in a nutshell. (Ken Thompson's quote "One of my most productive days was throwing away 1000 lines of code" continues to be true.)

August 23, 2020

Mathematical models show that free markets breed oligarchs unless you weed your garden with taxes or guillotines. We knew it's a fundamental structural flaw in capitalism itself, but now there's math.

Finland just spent 2 years once again proving that basic income doesn't significantly reduce the amount people want to work. This is not a surprise to anyone who actually creates anything. Here's an excellent thread on how even high-end human intellectual labor is being automated away, which is only a crisis because of the assumptions of capitalism. ("We can live in luxury without having to work much" is only a problem because capitalism, a system designed to regulate scarcity, bluescreens in the absence of scarcity and works to CREATE scarcity in order to have something to regulate. It burns rubber until it gets traction, wasting any resource that's "too cheap to meter" until it isn't anymore. Late stage capitalism cannot usefully outlive the Boomers: when they die, capitalism needs to go with them.)

Here's an interesting theory that the Resident is trying to hard to stop mail-in voting because the paper trail could be used to prove that the _2016_ vote was fraudulent. (How much more proof do we need? The Senate will never convict, Nancy Pelosi will never make a second attempt, and the Boomers just want peace and quiet until they die.)

The GOP has officially become a one person cult of personality with no other function or agenda, as in they literally put it in writing for their national convention. (Gozer voice: There is not platform, only Fool.) They are self-defeating and trivially easily played by plutocrats, the way Facebook's CEO convinced the Resident to attack Tiktok. Biden is pledging to be useless but the GOP is a death cult captured by evangelical christians trying to bring about the rapture (and of COURSE Boomer Media managed to Both Sides it because Boomer Media). Russia is also a death cult using bog standard abuser tactics, and abusers repeat the same tricks. (If they weren't predictable and unimaginative, they wouldn't be abusers.)

Russia's economy being nothing but fossil fuel exports means solar and batteries are an existential threat to Russia's business model. Solar is killing fossil fuels in solid/liquid/gas order, but the switch over to gas was not done in the name of safety. All three are dangerous, but gas is the least easily contained.

Late stage capitalism sucks. Boomer Media is still failing to recognize the cops are the ones rioting. The GOP is still attacking the post office. You can still sing cloud rot to the tune of love shack. Do not ever have an "amazon echo" or similar in your house (and switch off "ok google" and "siri", which are mobile equivalents). Global warming has reached the "tornadoes in ireland" stage, which is a new experience for them. Oh look, profound structural racism.

August 22, 2020

Fade heads back to Minnesota tomorrow. Not sure when I can head back to Japan, they're having a bout of politics. At this point I hope I can stay until October 13th to do early voting, since absentee voting and mail-in ballots are the same thing and that's totally borked right now.

(I THINK the travel thing is because Shinzo Abe's political opponents are trying to get him to resign by exacerbating a crisis he's personally ill-equipped to fix. Border patrols everywhere attract racist loons because who else wants to spend their lives keeping "Those People" out of the country as a full time job, but the people they REPORT to are supposed to keep them on a short leash so they don't run rampant destroying everything. Except Abe's political base is "nationalism and nostalgia" courting Japan's Boomer vote, and he's relied on his political opposition pushing back to temper the destructive effects of that. But after his mishandling of coronavirus weakened him politically, his opponents have basically let go of the rope in the tug of war until he steps down. So even though Abe's probably not directly personally causing the current bout of racist exclusion, it's aimed at him and the question is literally "when will Abe step down so Japan can allow immigrants back in". Of course I live in a glass house full of ICE so I don't get to throw stones here: Japan isn't separating kids from their families and putting them in cages like we are, they still have the relative moral high ground by a HUGE margin here. I'm just trying to figure out when the localized political weirdness clears so I can get back to work.)

Elliott suggested I try to get more sleep because it's affecting my toybox work, but I'm having to become a USB low level protocol domain expert for $DAYJOB, which may involve moving back to japan or may involve moving to singapore depending on how long japan's immigration ministry can sustain the racism. The new hardware arrived the day before yesterday but I haven't got a bitstream build that wires up a connection to it yet, and the old ghdl toolchain I had working back in november has bit-rotted and I need to figure out how to build the new package versions.

Toybox is not my day job. I would LOVE for it to be my day job, but the only people who want to pay me to work on it are on my patreon, which I'm grateful for but what I make from that in a year doesn't pay my mortgage for a month, let alone the rest of the household budget.

August 21, 2020

It's sad, the GOP is preying upon the Boomers' senility just like so many other con artists are preying upon aging celebrities, and if the rich and famous can't protect themselves from "elder abuse", what chance does the average Boomer have against Russian Intelligence? In a way this even includes the Resident, who while evil is also a late-stage dementia patient who first started showing signs of progressive neurological degeneration back before the election, and now it's gotten so bad they've stopped bothering to give him daily briefings, because he's cratering. And "elder abuse" definitely includes Rudy Guliani.

Of course enslaving people to suck money out of them is a thing capitalism does whenever it can, by taking advantage of momentary weakness to achieve permanent control. It all circles back to plutocracy and late stage capitalism. The party of Good Cop is a loyal servant of that plutocracy, and also needs to be burned down after we use it to defeat the party of Bad Cop, which Russia has weaponized from a series of loosely connected cults into an outright terrorist organization. Russia murders its critics, and the GOP is still working up to that but it's clear they WANT to. Choosing Good Cop over that isn't a big lift, but not a long term solution either. The GOP is so out of touch the things they warn us against are often things we want, but the Democrats are themselves as out off touch as you can be and remain on the same planet as reality.

The Boomers think we'll forgive and forget so they can die in peace, and I expect Biden will pardon everyone he can (if that wasn't the plan, they'd be filing more impeachements already, and following up on the Mueller report), but that doesn't mean the protests stop. We need the opposite of what the Boomers want. Guillotines are a measured, situationally appropriate response to the complete failure of late stage capitalism. We've been told enough times that taxes aren't gonna happen, so think bigger already.

The Post Office is still under attack, the claims it's been paused are lies, but I'm sure Biden and Pelosi believe them. The cops are still rioting, not even bothering to arrest people just beating them, nor are they even pretending to be impartial. And of course the Boomer media is still out to lunch. The Resident has promised to send his kidnap squads to polling stations on election day. Early voting sounds like the thing to do. The GOP hasn't really changed, it's just gotten less subtle. They've been Bad Cop since the Southern Strategy was officially adopted in the 1960's.

August 20, 2020

Oh goddess, Wikipedia[citation needed] says that switch_root is basically chroot. That's very much not true: switch_root does an rm -rf on the old directory, which is why switch_root checks to make sure that directory is initramfs and won't work on anything else. The point is to switch from initramfs to a persistent root filesystem while freeing the memory used by initramfs, where freeing means deleting the files on the way out.

And chroot doesn't change the "apparent" root filesystem it changes the "active" root filesystem. It would be really nice if you could bind mount a directory onto / and unmount the old mount point with the bind mount staying live, but last I checked Linux didn't have the resource tracking granularity to get that right. Possibly umount -l would work though? Haven't checked recently...

This would address the main problem with chroot: with system calls you can easily escape a chroot() because chroot() doesn't chdir(), and "cd .." just checks that the current directory equals the chroot dir (or top of the actual mount tree), so mkdir("sub"); chroot("sub"); chdir("../../../../../.."); chroot(".") and you're out. (Basically each process has two filesystem reference points: "." is what chdir() changes and getcwd() returns, and "/" is what chroot changes. If "/" is UNDER "." then chdir("..") never hits it, and you bubble "." up to top of tree.

But the --bind mount trick creates a new mount point that has a subdirectory as the top of the mount, if you cd .. from the top of that mount point you go to whatever directory it was mounted in, and if it's mounted on "/" (I.E. mounted over initramfs, which you can't unmount for the same reason you can't kill pid 1: the kernel uses that entry as a known pointer to start/end traversal of doubly linked lists and either can't find the list at all or loops endlessly looking for it) and you stop (loop) there.

Having chroot() trace the ->parent links from the "." dentry until it hits the new "/" node, and if it doesn't then set "." equal to "/", would also fix it. But I've been told that's crazy talk. And the kernel guys refuse to address this while you can mknod the relevant /dev node and mount a fresh instance of it, escaping the chroot that way. (Which won't work to get initramfs or a credentialed network mount back, but try telling the kernel guys that. This is not a perfectly complete 100% fix of every problem, therefore why bother?)

This is like 15 to 20 year old noodling, from back when Linus had time to explain things to newbies personally. LONG before containers showed up and they started to actually try to SECURE all this stuff. It's also why contianers use pivot_root() instead of chroot(), since that basically does two simultaneous mount --move atomically. And has special case magic behavior if the first argument is actually the top of tree in the global namespace where it traverses the process list and moves the "/" and "." links of each process that points to the old one you're pivoting off of, so you can actually umount the old filesystem despite kernel threads otherwise having their "/" point to it...

August 19, 2020

The reason white people are losing control of the united states is only 43 percent of white people are under 38, but 59 percent of non-white people are. White people aren't being replaced, it's a cadre of geezers running down the clock. I really, really hope this election is the last gasp of the Boomers. And no, I'm not just referring to the GOP here, when even the washington post notices you're being REALLY BLATANT about your Boomer-only-bias. (That first link was in the excellent article at the second link.)

The octagenerian nominee who picked a 60 year old cop as his VP only let AOC speak after sustained outrage that Bill Clinton (who is the same age as The Resident, but wasn't senile when he ran for president 30 years ago) got to speak but she didn't in their first lineup. In response to the outrage they gave her "60 prerecorded seconds" with nobody else from "the squad" getting mentioned. Good Cop is trying really hard to suppress turnout in the youth vote. They have 68 year old Republican John Kasich speaking live and 73 year old Republican Christine Whitman (who I've mentioned in this blog as the "Governor Witless" who destroyed the Computer Science program out from under me while I was at Rutgers). Republican Colin Powell spoke longer than AOC, Republican Cindy McCain spoke longer...

Meanwhile, GOP strategery outside the white house is to take credit for the democratic victory and then demand concessions (destroy the social safety net until billionaires get slavery back), and judging by the convention speakers Good Cop Biden is enthusiastically on board. He'll shower them with rewards if they stay plausibly JUST this side of outright fascism through the Boomers' remaining moments of lucidity.

We really, really, really need to get rid of "first past the post" voting and move to an "instant runoff" variant. If you don't get to specify second and third choices, then voting FOR anyone but "the big two" is a guaranteed waste of your vote, you're forced to vote AGAINST by picking a "safe" candidate that will block the other side's monster if your vote is to matter at all. It's a deeply flawed system and we KNOW this and know how to fix it, but both Good Cop and Bad Cop want to keep it because it guarantees they're not sharing power with anyone ELSE because there isn't real choice.

AOC only got a chance by beating the democratic nominee in the primary. If she'd run third party she could only have hurt whichever candidate was LESS far away from her positions (as clowns like Ralph Nader do, probably disingenously). But without first past the post voting the "primary" wouldn't be such a big deal, the RNC or DNC would be just one more endorsement you pick up, which means people could vote for who they ACTUALLY want, which means you'd get a lot more AOCs, which is why Nancy Pelosi will never never never allow it. Luckily, Nancy Pelosi is very old and will die someday.

Meanwhile, GOP loons are still dismantling the post office while swearing they aren't every time someone asks, and now they've hired a PR firm to lie for them. It might help to hit them in the pocketbook but guillotines remain far more reliable: the racism is in service to plutocracy, follow the money was true of Nixon and it's true now. The racists are still dangerous clowns busy delegating blame while Boomer Media continues to treat "here's ANOTHER way we know Putin hacked the 2016 election" as breaking news, and then trying to make sure nobody looks at it again. Outright Nazis are on the rise in Greece, but our endless manufactured crises keep us from focusing on such problems.

August 18, 2020

I have been reminded of the README markdown conversion. That tab didn't survive my laptop's last reboot (back when it turned itself on in my backpack and ran down the battery), and I'm not entirely certain where I left the directory with the files I'd tracked down...

I ran on a bit long in a github comment, because I went down a couple ratholes. The first is about Android not using "git describe" for toybox --version, and the second is about commands commonly having an identifier line before usage: in their --help text.

First line of --help identifying the package and giving a version seems to be the common case, anyway, but I don't understand this "no date/hash" policy, so need guidance. (If it was up to me I'd just have android use the normal "git describe" plumbing for the version, since they already tag their releases and building a tagged version would just emit the tag name verbatim as the version. Plus whatever they do is going to have a unique git hash anyway because their history has extra commits in it and each git hash includes the previous git hash in its calculation, since long before anybody thought "chaining hashed blocks" deserved a unique name. Torvalds published 3 years before Nakamoto. But I assume Android has their reasons. For one thing, if you tag a release _after_ you build it, the commit you built wasn't tagged when you ran "git describe" so it's gonna show oldtag-count-hash unless you override...)

IF we make the ID line before usage standard (still an if), sticking a version there seems to be what people expect, but that wasn't part of this request, just consistent with... basically the entire debian command line, it turns out? Ah: "dmesg --help" does not start with a package/version line. Nor does insmod --help, man, xxd, git... ok, maybe about 10% of the commands don't. And hg (mercurial) has a one line what-is-it before usage: but doesn't have a version in that. And parted --help says "mail bugs to thingy@gnu" at the end but has "usage:" as its first line...

I tried to check what my current debian system has, ala:

$ for i in $(apt list --installed | sed 's@/.*@@'); do dpkg-query -L $i; done 2>/dev/null | egrep '^/(bin|sbin|usr/bin|usr/sbin)/' | while read i; do echo -n "$i "; $i --help 2>&1 | head -n 1; done

Which ran until some horrible bluetooth gui tool ignored the --help and popped up a window, at which point the command line was frozen when I dismissed it (ignoring ctrl-c and ctrl-z), so I closed the tab. (This is why I carefully did NOT run it as root.)

August 17, 2020

The weather has now invented fire tornadoes. (Ok, Australia had them first. The US gets everything well after the rest of the world these days.)

I'm 90% certain the Dementia Patient In Chief didn't remember who Snowden IS and gave a generic answer. The Resident has gone full kool-aid on his followers, as in drink this poison and die with me. Of course given that his support base is the Boomers it's not a big ask. The police continue to demonstrate why we need to defund them, but Boomer media continues to ignore the ongoing protests. As the Boomers got older, things that were previously satire are conservatives' literal positions today, Poe's Law is a moving target.

If the problem was just a 73 year old whose father died of altzheimers and can't himself stand upright or hold a coherent conversation for 30 seconds, his brain disease would take care of it in a couple more years, but the problem is not any one man, it's the party enabling him, the equivocators, and the religion that party has merged with. Remove the tax exemption from all churches. If they want to file for 501(c)3 tax exempt status like Habitat for Humanity or 501(c)6 like the Tobacco Institute, fine. But claiming the patronage of an invisible friend shouldn't automatically grant that when they've become political lobbies.

Interesting point that if the vote was already reliably rigged, they wouldn't still be exerting so much effort to rig it in new ways. (The GOP is still dismantling the post office at full speed. They'll lie about it, and then go right back to doing it. Last Friday the GOP's new postmaster general fired 2 dozen senior postal officials. The first day of early voting in Austin is Tuesday, October 13.)

A recent tweet from John Rogers (creator of Leverage) reminded me of the old Amazon vs Ben and Jerry's business model explanation. (If we had proper antitrust regulation breaking up individual billionaires with guillotines, the Ben and Jerry's model would win out. The amazon approach is about locking out competition, not creating value, and to do it you leverage inherited wealth. The founder of amazon used to work at a hedge fund, his parents invested a quarter million dollars into his new company, and the company never made a profit until _after_ the dot-com crash but his investors kept pouring money in. (A bit like Uber, which loses billions annually and always has but convinced investors to pony up endless money because they're transparently cornering the market using a classic monopolization tactic that sherman antitrust law was created to address: sell at a loss until your competitors go out of business, then raise prices once you're a monopoly. This lets big money take over any niche simply by having deeper pockets and being able to lose money for longer than anyone else. People are letting them get away with it because they hate the existing taxi industry it's destroying, but it's also a scam preying upon the drivers.)

Racism is incredibly expensive. Being nice to people would be exponentially cheaper but what it doesn't do is concentrate power in the hands of a small elite. You need a "them" everyone despises in order for the blessed few to dominate the vast masses. This hides the fact that concetrating wealth is lossy: someone who steals a billion dollars in unpaid wages to become a billionaire has destroyed far more than a billion dollars of wealth. When a petty thief smashes a car window to steal spare change out of the cup holder, they've caused hundreds of dollars of damage to get $5 for themselves. This is the standard colonizer mindset: descending on a foreign territory like locusts to loot and pillage and burn, taking home a tiny amount and leaving behind devastation. But this is what billionaires do: millions of people's lives diminished so one person can live in luxury. Calling themselves "job creators" is the same as any abuser who demands praise for allowing their victim to live, how benevolent of them not to have killed you yet today. Giving back 1% of the blood money a billionaire stole, whether as philanthropy or employment, is not praiseworthy.

August 16, 2020

Still under the weather. I asked a question on the mailing list and got referred to AT&T streams. Not immediately helpful, but yay community engagement.

I rebuilt the "make root" targets and they don't boot at all now because I added error checking but didn't implement ${a/b/c} support yet, so the script dies with "sh: i: /,*/}" which isn't a very good error message to be honest. (It's what I told it to produce, but it should probably be "sh: bad ${i/,*/}"...) Anyway, the easy fix is to finish adding support for that, but I hadn't yet because it uses wildcards and I'm halfway through doing those, but went down the "I can add case support, that should be easy" rabbit hole and the "a) blah;;" parsing of intentionally unmatched parentheses is not easy.

Well, I can sort of punt. The parser will essentially put ) at the start of a new line, but "case x in\na b c\n) blah;;" is understandable. Bash doesn't currently accept it, but "toysh accepts input bash doesn't" isn't a deal breaker, it's "toysh does not accept input bash does" that's unacceptable. Similarly "abc|" gets broken into a new line/block by the pipe, but that's also ok? I can interate through the resulting chunks trying each wildcard... No I can't, +(abc|def) applies here too. Hmmm. Ah, wait, +() quotes it so | within that won't get broken the same way "abc|def" won't split. That means I have to _handle_ | in two places, but that's probably acceptable. (It's mostly just a for loop.)

The tagging is funky either way, when I break "if true; then echo; fi" into blocks the "if" is type 1, "true" is type 0, "then" is type 2, "echo" is type 0, and "fi" is type 3. This lets code traverse disabled blocks without caring about their contents ala "[ false ] && if..." and also has distinct start, gearshift, and end sections. (Gearshift is kind of "end test" although in for loops it's usually "end list"...)

But "case" has multiple gearshifts. The the initial "case x in" is sort of type 1 (which can have a newline between the x and the in because of course it can), and then each pattern|pattern|pattern) chunk is a "test" followed by a conditionally-run "body" section if the test matched, which ends in ;; (or ;& or a couple other variants). What I can do is make each "pattern" be type 2, and then the runnable section afterwards be type 0. The block skipping code in run_function() is only looking at types 0 and 1 anyway (where it jumps to pl->end->next for disabled blocks, so the contents don't matter), and we only execute enabled if (!pl->type) blocks. What I'd need to do is teach the gearshift (pl->type == 2) blocks about "case" so they know to jump to pl->end->next when we hit the next one (or fall through as appropriate), but they need new "test this pattern" plumbing for this anyway...

I also KINDA have a hack for the "$(case $x in; abc) echo hello;;)" which is if I see ) eventually followed by ;; I can back up and glue that ) onto the previous $( statement with one extra parentheses level. Which is HORRIBLE and probably won't work, and when do I ask for more input if I've hit end of line? It doesn't entirely solve it but it may let me limp along a bit further before ripping out and redoing the $() parsing plumbing to actually recursively traverse its contents which means storing the data in a different format and then having other functions that consume that data do something else... Blah, it's kinda horrendous. How/when do you FREE the nested function structures hanging off of a normal word? Whole new set of lifetime rules. Maybe I can have it parse but not KEEP the results? Grrr...

August 15, 2020

Seattle voted to cut the police budget by 1% ($4 million out of the $400 million they spend on police), and in response their police chief flounced. (The DISRESPECT. They can't POSSIBLY continue to earn overtime teargassing civilians with 1% less money.) And presumably the city council hopes the protests will stop now that they've scratched the surface and can now wash their hands of the situation. (The first evidence that the protests work is not a reason to stop protesting. No, it doesn't make you ungrateful, royalty always demands performative gratitude for table scraps. Returning 1% of what was stolen from you is not a "gift", and they didn't do it out of the kindness of their hearts but because they're feeling the pressure. Keep it up.)

Thanks to climate change, hurricane force winds in the midwest are a thing now. (Heat is energy, add energy to the system, storms get more violent.)

There have always been plenty of women in tech, the problem is it's hard to become a senior member when incel douchebros harass the younguns out of the industry.

Oh goddess, please stop silicon valley. You've invented the RV. This is not new, and individual untrained 20-somethings do it better. (Hashtag Van Life. No seriously, there's a hashtag, which is big enough to have its own subgenres.)

Countdown to Kessler cascade courtesy of capitalism. (In 2014, there were only 2000 commercial satellites in orbit...)

August 14, 2020

Microsoft Linkedin keeps telling me to congratulate people for not updating their profile for X years. (It thinks it's a work anniversary, but offers no evidence.)

Under the weather. Not getting a lot of programming done today. Poking at getty cleanup since that's reasonably low brain.

August 13, 2020

Good news everyone! Austin city council just reduced the police budget by 1/3. Sounds about right: our police force is way less bad than a lot of the others, but we can still divert money to mental health, food banks and subsidized school lunches, housing for the homeless, drug and alcohol counseling, and so on. In fact a chunk of that "cut" is just shifting civilian services out of the police reporting hierarchy into its own entirely civilian department. (Good. Don't militarize the police and don't have police serve school lunches.)

As Fade said (in household slack), "A lot of the 'explain Defund The Police in a way that makes sense to your parents' stuff has been pointing out that the police are doing a bunch of things that are not best served by paranoid men with guns, so 'shift the money to people who are not paranoid & gun-wielding' is a very good first step." Couldn't have said it better.

The Resident has come out and said (explicitly, (in a recorded interview, repeating it 3 times) that he's blocking money for the post office because of mail-in voting, and that's what's holding up the second coronavirus stimulus bill the House passed months ago. There's no subterfuge here. They're explicitly stating the many ways they want to sabotage the election, the Boomers are fine with this (don't rock the boat, both sides both sides), and the democrats are insisting that's why you must go out and vote? Because your vote will not be counted?

In June 2019, fourteen months ago now, John Rogers predicted The Biden/Harris ticket because "Boomers crave return to normalcy/cling to legitimacy of the vision of America they were raised in". The Boomers are still driving, which is why this entire crisis is entirely driven by Boomers, and will not end (or even be fully acknowledged) until the senile old coots stop. The stacked set of crises would not exist if they didn't, and will stop existing only when they do.

I fully expect a Biden/Harris ticket will pardon Richard Nixon again. That's what Good Cop does: protect Bad Cop. Try to convince you that Bad Cop is only hitting you because he loves you, you must give him another chance, it's important to keep the family together. That's why Nancy Pelosi will never impeach again. She got pushed into a half-assed impeachment exactly once, so it could fail and its failure could act as a get out of jail free card. She'll never do it again ("but we already impeached him") because Good Cop and Bad Cop work for the same plutocracy.

Still, we have to stop Bad Cop this time around because we know where they lead. But that's just the start of what needs to happen. Biden should face protests too, as long as a billionaire remains unguillotined.

And the push to brand Kamala Harris a cop apparently comes from Russia being as good at predicting the obvious as everyone else, and going hard against her early this election cycle. She's not as bad as advertised (it's mostly Gavin Newsom setting policies she was then responsible for enforcing), which isn't an endorsement but...? At least she's several hundred years younger than Biden, Russia focused on her like they focused on Hillary because she'd be especially bad for Russia, and some people are honestly excited for her. Her selection does ring hugely out of tune with the anti-police protests, though. Biden remains a deaf old man running down a todo checklist from 1987.

I held my nose and voted for Hillary when it was only POTENTIAL bad things coming rather than the current Trumpocalypse. And if Biden's return to normal involves a Ctrl-Z on every layoff, new hire, law, and executive order since the end of 2016: that's a good start. Broken clock's right twice a day: start with an executive order cancelling every executive order 45 signed, sign a new law cancelling every bit of legislation he signed, impeach every single judge appointed during 45's tenure... If normal is "before ICE and Homeland Security were created in 2001", and he can be convinced to break up both back how they were before? I can see a path forward here. Half-assed is better than none.

The COVID-19 death tolls in the USA are way higher than being reported. Here in texas the CDC has been told 7100 people died of Covid-19 but we've had ~12,500 more deaths than average, leaving over 5000 extra deaths unaccounted for. If you never test them and just bury them, it can't have been coronavirus. Many of the undercounted are poor minorities who could never afford treatment let alone testing, so of course the GOP is ecstatic about it.

The GOP literally wants to execute its opponents, who they insist aren't really people. They just have to wait for another "tea party takeover" cycle of even more extreme loons before they think they can get away with it. This is why guillotining the billionaires is not as extreme a position as it seems, and not just because doing so would pay for universal basic income. The world under billionaire stewardship is a much worse place Our current set of problems have been provably caused by billionaires, and the french had a solution to that problem over 200 years ago. We're just waiting for old age to take out the Boomers first, which is the one thing the Boomers are helping us do. (The Boomers being in charge not being good for ANYBODY includes themselves. Real people are getting hurt, but senile control freak grandpa will die before giving up control, so we're waiting for them to do both those things in order. Without them, the GOP's support base is tiny. If the Boomers get their way, most of them are going to starve to death over the next decade. As with everything conservatives say, the old saw about people turning conservative as they get older isn't true, poor people just die younger so the old are self-selected to be "comfortably well-off" with better medical care, nutrition, working hours, working conditions...)

The GOP's strategy to announce victory in place of the election is to completely hide the real result and just announce their own numbers. For example, a standard dictator move is to hide the results from individual precincts so the national total can't be questioned, and they're trying that in Atlanta. They're literally dismantling the post office (as in removing sorting machinery and letting mail sit undelivered) and refusing to sign any bill that gives the post office a dime, no matter what else it does, regardless of who else gets hurt. All to prevent the only remaining channel to vote with recountable paper ballots where there is physical evidence to destroy to hide lying about the numbers, rather than just editing an electronic database with no backup. They're literally publicly talking about an executive order to stop counting ballots, while senile Boomers congratulate themselves on hurting brown people.

Almost 200 years ago Robert Ingersoll predicted that the USA would end when the churches hijacked the government and now it's happened. The GOP is a cult that thinks it's a religion. One election can't fix that. These days they do nothing but hack the system for their own benefit and tell obvious lies. The GOP is diseased and needs to end.

Capitaism is itself a religion whose adherents value profit to the exclusion of all else but a competitve market drives profit margins to zero. Profits come from protection rackets (pay me to stop hitting you) and cornering the market (creating artificial scarcity). Neither are the supposed benefits capitalism brings (which are due to advances in science and technology, not capitalism).

Capitalism is also diseased, and needs to end with the Boomers. I'd really like to see the 1929 stock market crash (that triggered the Great Depression of the 1930's) on this graph. Here's a The separate graph with just that (albeit inverted).

August 12, 2020

Maybe toybox needs a str_is(a, b) and str_isnt(a, b) to separately handle the "a && strcmp(a, b)" and "a && !strcmp(a, b)" cases. (I want to call the second str_aint() but that's the kind of sleep-deprived name I edit out again later.) The problem is in the first NULL a does not match b, and in the second NULL a matches b, and if "what does null a mean" changes you can't just ! the return result and call it good, you need two functions.

Jeff got a new binary from the minisniff guys, and they told him they used wxwidgets version 3.1.1 (of the modified "unofficial" codelite releases). So he needed a wxwidgets "unofficial" 3.1.1 for buster, and the 3.1.3 directory we'd been looking at (3.1.4 is in development so that's the newest release, but the directory includes older versions) only had 32 bit 3.1.1 binaries and we need 64 bit binaries.

So I looked in the earlier 3.1.1 directory which did indeed have a 64 bit version of the library we need... built for "stretch", which is debian 9.x and we need "buster" ala debian 10.x. (The debian wiki has a name to version translation table, with release dates.) I'd hoped the 3.1.2 directory between them might have what we needed, but no: that also only had 32-bit versions of 3.1.1 and only built 64 bit versions of the newer release. (Versions plural because there's "unofficial" and "unofficial3" versions of both... the first links against gtk2 and the second links against gtk3, we need gtk2 here.)

So we tried the "stretch" (debian 9) version of the 64 bit, gtk2, 3.11 library package and got a NEW error:

dev@dev-vm:~/work/bugblat/install/miniSniffer$ LD_LIBRARY_PATH=/home/dev/work/bugblat/2/usr/lib/x86_64-linux-gnu:/home/dev/work/bugblat/3/usr/lib/x86_64-linux-gnu ./minisniffer
Fatal Error: Mismatch between the program and library build versions detected. The library used 3.1.1 (wchar_t,compiler with C++ ABI 1002,wx containers,compatible with 3.0), and your program used 3.1.1 (wchar_t,compiler with C++ ABI 1011,wx containers,compatible with 3.0).

Remember how I said combining C++ and shared libraries was fundamentally broken in multiple ways? The C++ ABI changes periodically because it's profoundly misdesigned and sort of writhes in pain as the standards commitee thrashes ineffectively to fix one thing while breaking another so they have to do it again a couple years later. It's like when you push down a fold of carpet that pops up somewhere else in the room because it doesn't fit. This is a perrenial surprise to C++ developers, and then they get stockholm syndrome about it.

So a program built by a compiler using the newer ABI can't use shared libraries built by a compiler using the older ABI, and it changed between Debian 9 (released in 2017) and Debian 10 (released in 2019). Because of course it did, this is C++.

In 2004 I did a contract at Dell supporting a project stuck on an ancient version of Red Hat Enterprise, which they'd already paid Red Hat an uncomfortable amount of money to support another year. The problem was a much earlier iteration of this same issue: all the functions exported in their shared library were declared "extern C {" but then they passed pointers to class instances as arguments. The C++ developers didn't understand how NOT to leak the full horror of symbol versioning, so they'd deployed an application with shared libraries that their customers built their own extensions which linked against those libraries. And now the only build environment they could update their app with had been end of lifed by the upstream vendor, and if they updated the shared libraries their customers had to rebuild all their own extensions which Dell had promised they would never have to do.

This was an unfixable problem that was still going on when I left at the end of 6 months, although the consensus was "pay another ungodly amount of money to Red Hat Enterprise for another one year service contract for RHEL 2, and THEN make customers upgrade their shared libraries" because clearly this is a one time thing that will never happen again. Clearly this was fallout from gcc 2.95 (I.E. the EGCS reunification where gcc development stalled and forked, and then the FSF handed over the name to the new development group on condition they set up a "steering committee" that could be politically hijacked)... and Dell management was confident that it would never happen again, and they faced a one-time problem rather than a chronic issue with C++.

Meanwhile, I can link against a 15 year old C shared library no problem, as long as it has the right symbol names and I disable the gnu/gnu/gnu/all/hail/stallman symbol versioning nonsense. (Linux switched from a.out to ELF in 1995, and switched from 32 bit to 64 bit in 2005, but has not actually changed HOW SYMBOL NAMES WORK even once since its creation in 1991.)

August 11, 2020

Google Fiber went down for a couple hours today, promptly at 1pm which is not "backhoe cut the line" but "somebody scheduled something that didn't work". Power cycling the router didn't fix it, and of course the website where you enter your address said "no problems reported in your area" without EVER PINGING THE ROUTER. (Guys, is you can't talk to the router then SERVICE IS DOWN. If your website can't do that automatically then you really realy SUCK AT THIS.)

I called the phone number, which gave me a recorded message about high call volumes, kept me on hold for 5 minutes, and then gave me some message I didn't really listen to (it was robot voice, not human) and hung up on me. And when I called back, I got a BUSY SIGNAL. Then when I called again, "your call cannot be completed as dialed". (No, my phone was not associated with the router, this was t-mobile. I'm guessing their call center is VOIP based and ALSO had something scheduled at 1pm, although it was half an hour later by this point.) The status website was still up, and still giving me a green checkmark half an hour after the service went down.

So I tried the interactive chat thing (which linked to a third party domain that had nothing to do with google and sounded like a scam, does Google really need to outsource this), which also had a wait queue, but eventually got (what I assume was) a human named Brian, who I once again gave the street address to and HE could confirm the service was down. And the website changed to notice! He said that was coincidence, although it really seems like I manually had to manually tell a human that my router was no longer pingable from Google's server because their website would not ping THEIR router. I am using a Google-supplied router that was throbbing red this entire time and their system couldn't figure out there was a problem. BRAVO!

So anyway, they were now aware of it, and we had phone tethers, and Fade said it was back up a couple hours later when I went to bed. I was awake for all this because my sleep schedule is terrible, it advances forward an hour per day if I left it, which means I'm now going to bed at 3pm and getting up after our ex-24-hour HEB closes; I am sad about coronavirus hours at HEB and suspect they're using it as a permanent excuse to just not be 24 hours anymore, since we're never going back to Boomer Normal. We are in Boomerdamarung and I strongly suspect there's a revolution between us and a new normal where solar+batteries provide electricity that literally is "too cheap to meter", raise property taxes on investment AND RENTAL properties at least 4x what "home I own and live in" gets charged (ala Austin's homestead exemption, bleed the slumlords dry, cheap condominiums are a thing it just means apartment you own rather than rent), acknowledge that Norman Borlaug's "green revolution" quadrupluing the world food supply combined with fertility rates declining below replacement rate in any country that educates women but does NOT provide basic income so You Must Have A Career And A Baby Will Permenantly Derail That... well, white people going extinct isn't the worst thing that could happen at this point, but the near term point is "food is not currently in short supply". A program to feed everyone Government Cheese and Ramen as a basic human right not to starve would be maybe the size of "the department of education".

So the home fiber connection going down was before I went to sleep. Now it's Late Night At UT (5 mile round trip according to my step counter, 12000 steps per day is pretty much all the exercise I'm getting), and now my cell phone internet tether is being stroppy. Some sites (like gmail) work fine and others are insanely slow or time out. I suspect the sprint/tmobile merger has brought a sudden end to tmobile's net neutrality from when they were owned by Germans and acted as if subject to EU law, and now places like github that haven't paid their "let us not block you" tax to the carrier are on their own. My phone can watch youtube videos at full speed normal resolution, but trying to get to MOST websites through the USB tether is sucking ice cream through a straw. That is not a signal issue, the one hop the signal deals with is doing video on the phone itself just fine. That seems like a late stage capitalism issue.

If you wonder why my working style involves downloading all my email to the local machine and NOT involving crap like github in the productive flow... I have multiple emails from Elliott where he closed a github issue with a comment and I can't load the link to the github thread to see the context for this new comment. I was trying to load the getty page off of to see if maybe getty.c should link to that as its standard and I can't load it. But comes up instantly.

You can sing "cloud rot" to the tune of Love Shack. I don't want to depend on third party services, long-term all websites eventually go away in my experience. This is why I mirror stuff I care about, because even has a suicidal streak. (I assume that's a relevant link, loads instantly and times out. Wheee.)

Darn it, HEB decided to consolidate its "V8 Energy" from 2 shelves to 1 shelf, meaning it clearanced one of the caffeine cylinder flavors I like (the cherry, which is also Fuzzy's favorite, sold out before I got there) and is out of stock on the other because they filled the blueberry/pomegranite slot with overflow mango/peach. (Flavors that are theoretically good juices don't necessarily hide the bitter caffeine taste; strawberry/banana was particularly disappointing in that regard.) It's not hard to get more but I'd much rather give my money to a well-run local business that treats its employees well than the richest billionaire in the world who treats employees terribly and is who's doing everything he can it can to prevent unionization until his company can replace them with robots. (I don't just want Amazon broken up, I want Jeff Bezos personally broken up. Guillotine the billionaires. Remaining a billionaire is a choice, you can always stop being one as his own ex-wife is demonstrating. She's aiming for maximum impact so it's taking a while, but her stated goal is to give "until the vault is empty" and she's giving multiple billions per year to good causes with no strings attached. I.E. here is large pile of money to do what you think is best without micromanagement. I have no qualms with her.)

August 10, 2020

The strangest "google for a thing I did and hit a WEIRD page mentioning me" today was because malware people used my old aboriginal linux arm toolchains and thus build paths of my old work directories leaked into their binaries somehow, and then those paths were used as an example virus signature in a patent application a chinese guy made in california (as with most modern patents, about doing obvious things that shouldn't be patentable).

Spent most of today catching up on email and editing almost a month of accumulated back blog entries I hadn't posted yet. Reading USB stuff, but not programming.

August 9, 2020

Time magazine interviewed Portland medical personnel on how they're being targeted by police at protests, the video is 7 minutes 18 seconds. This is our generation's vietnam. The superhero origin story of an army of activists.

There was also a very informative thread about how the USA has no self-made billionaires, just a lot of spin doctors sprinkling "public relations" over billionaires' backstories. (Due to the way twitter collapses threads and makes you hunt for tiny expand links easily lost in the noise, it may be easier to start from the end and scroll up.)

August 8, 2020

Ooh, the Lumper potato is back. As with the Gros Michel banana: limited availability, but it's good to know it's not extinct. (Modulo the whole bit about potatoes not really breeding true via seed, but it's nowhere near as bad as it is with apples, so...)

Today I wound up almost linking a guy on github to papers on the dunning-kruger effect, at which point I backed off and stopped replying. I believe the start of the reply I deleted did accurately summarize his current position:

So you're escalating from saying the self-selected set of users interacting with the android command line (not the GUI) regularly won't know how to google for a project page (and that Google going away so the internet is no longer searchable is an important consideration), but now you add that they won't know where the non-AOSP OS image they're using came from, and you believe this to be a common enough problem you're suggesting we add a required manual setup step in the build process and impose it as an external constraint upon fortune 500 corporations to identify the vendor in toybox specifically (not in the larger OS image).

But... I wasn't HELPING. I am not the best open source maintainer because I'm not polite enough. I'm aware that sometimes I just shouldn't engage. But the difference between educating someone (or at least trying to) about the Layers Of Wrong in their position (and the iceberg of backstory/context/politics) so that they can learn and do better, vs getting into an argument with someone who Needs To Be Right and Must Have The Last Word... sometimes what I need to do is LET THEM. They'll be happier if they can go and be wrong somewhere else. And I'm not always good at spotting the cutoff, it's a heck of a grey area.

(The best summary of the differences between the american Hitchhiker's Guide movie and the BBC miniseries is comparing that last link with its equivalent. British comedy needs british delivery, or you get into "american red dwarf" territory. Tangent, can of worms.)

I dunno how much of the "helpful vs non-helpful" cutoff is somebody just feels backed into a corner by repeated "no, because..." and thinks I'm trying to insult them or challenge their self-worth or something. This implies I handled the situation wrong, but as I said, "I'm not the best at this". Sitting in front of a computer teaching it to do tricks was the alternative I chose to embarassing interactions with other human beings (most of whom I didn't like) level grinding social skills. My parents moved from Kwajalein to New Jersey when I was 10, which involved a bit of culsture shock on my part. My plans to go away to college out of state got derailed by their divorce (and me leaving high school early to go to community college because I couldn't stand to stay another year), and I went to the state college at in-state rates living with my mother and didn't move out on my own until I was 23. Add in about 15 years of depression in there and I didn't do a wide range of socializing, and yes have somewhat of a deficit here. It took me until about 30 to establish basic social competence interacting with people I _know_. "You want to engage in science/technical/academic mode? Great, here's an infodump! Ah, no you didn't really want that, you really wanted someone to navigate your emotional state, on our first encounter when I don't know you, and the infodump's gotten us into a bad place."

Speaking of Dunning-Kruger, it's NOT about being stupid, it's about being ignorant. Ignorance is not stupidity. Everybody starts ignorant and it's something you need to humbly work through. (The humility part helps, without it you get colonialism and white savior complex.) This is the most frustrating part about the best summary of dunning kruger I've seen: you have to skip the first 19 seconds of him talking about "stupid" and the title of the video using the word "stupid". But Dunning-Kruger was never about stupid. It's a call for humility, and a reminder that the ignorant newbie revolutionizing the field is like lottery winners: yes it happens but it's not the common case. Beginner's Mind is lovely, and it's also a thing you can cultivate. (See also the importance of play in creativity.)

I have advanced far enough in human emotional interaction to now know how BAD I am at it. To be aware I utterly suck at it, by my standards. Not the "you didn't react properly, what's wrong with you" of days long ago (when I blamed "everyone around me is broken" on being in New Jersey, still not sure I was wrong there), and not the hopeless incomprehension of the vast majority of humanity of my 20's, or the domain-specific "I know how to play a role: I am Consultant, I am Teaching a Class, I am Organizing a Convention..." of my 30's. Now I've reached a sort of resigned "I'm sure there was a way to salvage this interaction, but I'm clearly not up to it, I wonder if there's somebody I should delegate this sort of thing to" where I want to... post warning signs? I KNOW I'm doing it wrong, as I'm doing it, but my choices are generally Not Doing It (which generally means nobody does it so it doesn't get done) and trying to see it through best I can.

Until it's time to disengage, usually too late, because I'm Not Helping. Oh well, back to programming. That part, I understand.

August 7, 2020

The covered outdoor patio next to the UT geology building is getting popular: I'm the third person here today. (From midnight until about 2:30 am, anyway.) We're all spaced out (at least 20 feet apart) and I have my long extension cord so I don't have to be at a table near the outlet, but I've kept my mask on 3 hours longer than I expected to have to. (Tolerable, just annoying. Other people being here kind of defeats the purpose of coming here in the middle of the night during a pandemic. Well, the middle of the night part is really just "outdoors in texas", it's 90 degrees and too bright to easily see a laptop screen otherwise. Still way more hot and humid at 2am than is comfortable to breathe through a piece of cloth, but I coped.)

2020 in a nutshell. Just stating facts is a political act. New York City is finally taking on the NRA, and their indictment is a laundry list of abuses. People are finally saying dementia, but it's a weekly thing when it should be daily. The keystone cops continue to vandalize private property without even caring that they're being filmed. As long as the racists (and sexists) support them, they don't care. Facebook fired employees who gathered evidence showing preferential treatment of right wing posters. Students who post photos of their crowded school hallways are being suspended for doing so. When you haven't got any shred of defense, shoot the messenger.

I'm not a fan of the democrats, I just think the republican party needs to end. But Good Cop also has the problem that Boomers only want to hear from other Boomers, and Boomers worship billionaires. In the religion of capitalism, billionaires are saints, their money gives everything they do moral weight. One big problem with capitalism (there are many) is companies can be bought and turned to evil at any time, the way a private equity firm bought motel 6 and reported its customers to ICE, and then bought to be even MORE racist.

The hypocritical septuagenarian Boomers are driving the country into a ditch and doubling down after every failure. They take the streisand effect in the teeth on a regular basis, and their response is the Gish Gallop and Firehose of Falsehood, where they do so MUCH bad stuff nobody can focus on any specific instance of it. (The classic "lose money on each sale but make it up on volume", Enron executives pocketed a lot of money before winding up in jail with all their employees out of work and multiple pension funds that held their stock bankrupt.) The only fix is to throw out the bad actors. Get rid of the people causing the problems. Boomer senility has gone full on nihlist as they attempt to normalize mass death because to a Boomer, it's not fair for anyone else to continue living if THEY are about to die. It has always, and ever, been entirely and exclusively about them. Boomers see themselves not just as the center of the universe, but the only reason for it to ever have existed.

Ah, that's probably numberwang for the "united" kingdom. The big objection to Scotland having a second referendum to leave the UK and rejoin the EU after brexit (which takes effect January 1st so the Tories are marching around declaring victory before the novacaine's worn off) was that Spain is fighting secession in its own Catalan section, and didn't want to set a precedent that THEY could join the EU if they broke away from Spain. But now Spain's dropped its objection to Scotland rejoining the EU (since the UK is the one doing the leaving and Scotland just wants BACK in), so there's nothing to stop Scotland from leaving, or northern ireland rejoining ireland. The real question is what happens to Wales, they probably haven't got a defensible enough border. The border between Scotland and England is less than 100 miles long, the Romans built multiple walls across it so border checks to prevent smuggling aren't a big deal and have historical precedent. Ireland is already an entirely separate island from Britain, and brexit already puts custom checks between Northern Ireland and Britain (to avoid customs checks across the land border between northern ireland and ireland). The border between England and Wales is considerably longer than the scottish border, and encloses less territory (8k square miles of Wales vs 31k of Scotland), but if scotland and northern ireland both leave and rejoin the EU (new country and Irish unification respectively) and that turns out well for them, Wales is bound to at least look into its options...

August 6, 2020

The shower of interrupts continues, definitely a "be careful what you wish for" situation and yeah, I asked for it. It's not a bad thing, and I meant to go through the old github bug reports before 1.0 anyway, but it's one more time sink with $DAYJOB and pandemic and family and so on that's starving toysh development of time slices.

Jeff is getting a bit annoyed that he's paying me but Google isn't, given how much the toysh stuff has been eating my brain, and he's been yanking me a bit more towards prioritizing $DAYJOB stuff. I was trying to clear my plate before new hardware arrived (the USB and GPS turtle hats are fabbed and in Canada), and as of yesterday I have cleared my toysh plate for the moment. I have three open fronts of toysh development: 1) job control (ala the find_plus_minus() stuff), 2) variable expansion ala ${x//}, and 3) wildcards ala +(*|?). But all of them have the basic design checked in and PROBABLY just need fleshing out, and I've checked in what I've written for each and don't have pending code in my tree for them. So I can sit down to a clean file and do new code without having to reverse engineer what the outstanding changes I have mean...

And then the hardware hasn't arrived, and nobody knows when it will, because the GOP's ongoing sabotage of the post office has backed up mailing small packages from canada to the USA for potentially WEEKS. (He even had trouble mailing from canada to japan, because for historical and infrastructure reasons most international mail passes through the US postal service, although international mail is slowly weaning itself off dependency on the USA because we're idiots.)

Which means I'm picking at some toysh loose threads, while trying not to get too deeply enmeshed just now. It's hard to find anything guaranteed to stay small, of course.

Ha! Sometimes you come up with a situation that's gonna be a pain to code plumbing for, and then when you test it bash doesn't handle it either. :)

$ echo $((case a in a) echo hello;; esac))
bash: syntax error near unexpected token `)'

Ah, nope. Darn it. Wrong one:

$ echo $(case a in a) echo hello;; esac)

They do handle it. But in my code $() is a form of quoting that doesn't care about the statements inside it, that's parsed LATER. It cares about nested QUOTES but not about statements. Agh, layering violation. Does it...

$ echo $(if true)
bash: command substitution: line 2: syntax error near unexpected token `)'
bash: command substitution: line 2: `if true)'
$ echo $(true &&)
bash: command substitution: line 3: syntax error near unexpected token `)'
bash: command substitution: line 3: `true &&)'

Yes it does. Well that's unpleasant. Hmmm... Ok, that part's just error handling, I can punt on that (it handles well-formed input properly and gives a different error message on malformed input). But the case ) thing is disturbing at a design level, I have to parse it to implement the functionality for properly formed code. Um...

I'm tackling toysh case/esac plumbing, which I personally never really use but it's the first failing test when I run "VERBOSE=fail make test_sh" and it's gotta be done sometime. Doing it properly requires mucking about with the line continuation code, because:

$ case a
> in
> a) echo hello;;
> esac

Is precariously balanced: case must have one word after it (which gets expanded, and is thus usually a variable name), then it MUST be followed by "in" (although it can be on the next line), and then you need a line with a ")" in it (which _can_ start with "(" but it's ignored if so), and then eveything from the ) to ;; (which can traverse multiple lines) is code to run if the word after "case" matches the pattern before ")", and by pattern yes this gets expanded and can have all the wildcard crap in it including the a|b|c stuff you otherwise only find in ?(extglob) patterns.

The way I'm writing that plumbing is it always handles | when it sees them, but since the parser treats | as pipes under normal circumstances the only way to NOT have that happen is to quote them somehow... which means they're not wildcards because they're quoted. (Including backslash escapes forcing them to be a literal, that's sort of a single character quote.) But $(subshell) was already treated as type of quoting context keeping the contents together as a single literal string, and when I added more types ala +() that act the same way, they inherited that behavior, meaning | inside them gets passed along verbatim, and then the glob handling sees it in a potentially active context, and...

But here, I need to teach the continuation parsing that the "a) thing;;" lines inside case start in a $() style context with one parentheses already, except they _can_ start with another ( which gets ignored. Hmmm... The actual $() parsing context knows that an unexpected ) ends parsing because I point it at the first character inside the $() and then when the ) overflows it's hit the end. So this is KIND of another use for that...

Lots of potential for code sharing here if I can make the bits line up. I'm up to 3081 lines, already bigger than where I WANTED the shell to be, and like 400 lines from the size I'm comfortable with the shell being.

There's a repeated pattern that seems like it should be a function, but I tried converting it and I'm not sure the result is easier to reason about? The new function would be:

// String a does not match string b. a can be null, which will never match b.
int strnot(char *a, char *b)
  return a && strcmp(a, b);

And would convert chunks like this bit from mount.c:

-  if (dir && strcmp(dir, mm->dir)) continue;
-  if (dev && strcmp(dev, mm->device) && (dir || strcmp(dev, mm->dir)))
+  if (strnot(dir, mm->dir)) continue;
+  if (strnot(dev, mm->device) && (dir || strcmp(dev, mm->dir)))

If a string exists (first argument isn't null) and does not match the second string, return true. The rough edge I keep hitting is "I can't just strcmp() things that might be NULL pointers", so I want to throw it in lib, but... does NULL mean it matches, or that it doesn't match? The most common pattern is that one, but a function to replace it is surprisingly hard for me to reason about, I look at the replaced version and have to stop and work through what it means. It's not intuitive. Which means I'm putting in the wrong abstraction. Hmmm...

(The confusing part is that if the first string is null the result is true, which... yes that's what all the users its' replacing are doing, but seems weird for a function to do? String does not exist means false, string exists and matches other string means false. Hmmm... Shelve it and back to it later, I suppose, but it keeps coming up.)

August 5, 2020

Cops are snatching people out of their houses in Oregon today. The police remain otherwise useless. And as the Boomers slide into senility we're losing existing capabilities. People are fighting back against Good Cop, although the proper fix is instant runoff voting and eliminating the electoral college, both of which reduce the power of gerrymandering.

Google Play's music service has joined the Google Graveyard and if you don't move your playlists over to Youtube by the end of October you lose your purchases. Meanwhile, the rest of Youtube is trying hard to drive everyone away with midroll ads. Sigh. I miss Don't Be Evil.

August 4, 2020

The downside of having a successful project that people actually use is the interrupts. I'm not complaining, "such problems we should have", but it's almost as effective as Peejee in preventing me from working on toysh. You get bug reports and patches for real world issues from users, and you have to review and commit them quickly because real people out in the world are blocked on that patch being merged. I cheated very slightly by ignoring Mark Salyzyn's xargs -p over the weekend, but spent my productive time monday rewriting it because the patch he submitted (which worked) wasn't how I wanted to do it. (I did a smaller version that supported SIGUSR1 and SIGUSR2, I didn't HAVE to but this entire project is me being picky.)

And then today, I wanted to dig into the shell wildcard stuff again and wound up rewriting a different submission instead. Yeah the original one already mostly worked, see "being picky" above.

And of course the result of an earlier long thread of which I was not a fan but got outvoted suddenly wants my attention...

August 3, 2020

Did you know that during the Iran-Contra scandal, Ronald's Reagan's "I don't remember" defense (repeated 124 times in his testimony) combined with how "inattentive and inept" he was behind the scenes led his staff to consider invoking the 25th amendment to remove him from office for being incapacitated. He went on to die of Altzheimers. The GOP base absolutely LOVED him.

The current Dementia Patient In Chief got around that by leaving most cabinet positions unfilled and having only a skeleton staff selected for loyalty over any other consideration, preventing a majority vote for 25th amendment incapacity among his cabinet no matter how extreme his dementia gets.

Remember how a single billionaire family (the Sacklers) created and profited from the opioid epidemic? As in the entire thing was them, specifically? They just got away with it via legal maneuvering to discharge the legal liability in a "bankruptcy" that let them keep their money. And they're not even the only problem in this industry, not remotely. This is why "guillotines" are a far more realistic lobbying goal than "taxes" to deal with billionaires. No part of modern capitalism is salvageable, and aiming for half-measures is not good negotiation. (This was a big problem Obama had, preemptive unilateral compromise. His opening position wasn't what he WANTED, it's what he thought the other side was willing to accept. And then he'd let himself get talked down from there. He haggled with HIMSELF, giving away half the territory before even speaking to the other side. But of course, he was Good Cop.)

Some of the GOP/ICE kidnap squads that backed out of Portland have redeployed to Albequerque, leading to the usual massive protests which the Boomer media has completely ignored because it's not what senile old farts want to hear in their dotage. Their horizons have narrowed to the point no new information can get in until somebody dies.

The interesting part to realize is how few of the GOP shock troops there are. The USA has 317 cities (defined as population over 100k), and they're stretched operating in TWO of them at once. They had to scrape together ICE, blackwater, and for-profit prison guards to get enough klanpower for even that much militant racism. (Yeah they're trying to be anonymous but it turns out doxing people is easy these days when you crowdsource it.) Police abolition is popular, and the calls for UBI and calls for reparations are synonymous because the only reason we DON'T have this already is racists refuse to support anything that would help "those people", although they often try to hide their racism behind "means testing" (which is just a quick way of destroying programs, making them spend all their resources on scrutinizing people and forcing them to justify themselves instead of providing services).

Is anyone really surprised the non-pornhub clowns who bought tumblr are technically incompetent?

August 2, 2020

Feeling guilty I haven't updated Patreon, but didn't click the thingy to stop it charging people this month. I did post a sort of status update to the mailing list about the current wildcard work, and there was the writeup about trusting trust and larger strategic goals last week. What I'd really like to do is write up monthly summaries of what I'm doing and post them to patreon, but this month's would be "stared at shell implementation logic a lot".

I currently don't understand what bash's escape logic is doing for "echo +([)]", which doesn't match "+()" and doesn't match "[]" either. If it parses as "+([)""]" then that's 1 or more [ followed by literal ], but if it parses as "+(""[)]" because the +() wasn't completed due to the literal [] eating the closing parentheses, then it's +() because literal "+(" followed by a range containing only ")".

But it's not matching _either_ of these, and I don't know why. And I'm TRYING not to bother Chet anymore. (I also tried touch "+([)]" and echo +([)]* but the * was still there in the output because it didn't match itself literally either.)

I _think_ my recent description of how to implement wildcards is wrong because ] matches the most recent open bracket, regardless of parenthetical nesting, so I don't need a stack of parenthetical starting contexts I just need the ONE stack of possibly active wildcards (really a vector I append to, only a stack when I pop context because wildcards within [brackets] stop mattering when the close bracket is found. That said, when I use it I have to sanity check that the parentheses are balaced (the line continuation parsing requires them to be, but X="("; Y=")"; echo +${X}a|b$Y is a thing, BUT +(|) acts as quoting the same way $(|) does: the contents of the parenthetical operator are stored as a quoted string and handed off to the operator for processing later, and in this case that means echo +(a|b) isn't a pipe, but echo +${X}a|b$Y _IS_ a pipe because it's not within a quoting context so the parser splits out | into its own word so that example woult NOT work as a +(a|b) wildcard operator because word splitting.

However, $(X="("; echo +${X}abc) is still an example of unbalanced parenthes because the closing ) matches the initial $( and peels off at a higher level, andn then echo +${X}abc becomes echo +(abc with no closing parentheses and thus the +( are literals.

I.E. while collecting a deck of wildcards (annotations of which characters in the output string currently function as wildcards) I THINK I don't need a second ant stack to store temporary parsing information? Which means I frog the code I wrote to do it the other way...

The reason this is going so slowly is I want to do it RIGHT. Just slapping together something that sort of works and is 3 times the size... Why bother? Busybox exists, and has a large userbase pointing out the rough edges in need of sanding.

The USB scanner Jeff ordered arrived, but their Linux software is LAYERS of broken. The first problem is it's using a really weird wxWidgets-gtk2 glue library that does not exist in any distro. According to ldd: => not found => not found => not found

I downloaded the wxWidgets source and the build does not know how to add the string "unofficial" to the name. I eventually tracked it down to the codelite IDE which seems to ship its own modified version of these libraries and thus changed the name of the library, which means we can download their binaries and try to guess which version has the failing symbol names... except none of them seem to have the exact failing symbol names?

This brings us to the SECOND problem, which is that they combined C++ name mangling with shared libraries. NEVER DO THIS. It means you get link failures like (this is literally a cut and paste of one of them):

OSError: /home/dev/work/bugblat/install/miniSniffer/ undefined symbol: _ZN7TdataIO19treeRootVecToLinVecESt10shared_ptrISt6vectorIS0_I5TbaseESaIS3_EEES0_IS1_I7TlinRowSaIS7_EEE

Yes, that's a dynamic library with a symbol resulting from name mangling due to function overloading, a class hierarchy, and I think template instantiation. (Don't get me started on the "who instantiates the template code, is it in the library or in the caller" which is ANOTHER version skew where your build can create a program and a shared library which individually work but not in combination.) I'm not entirely convinced building the same source twice in a row on the same machine would give you exactly the same symbol name, and butterfly effects mean two build setups ain't gonna do it. Google is not finding that string anywhere.

So we've emailed the bugblat developers to see if they can give us a statically linked version of this software, but given that they built for Linux using an IDE that hides the difference between Linux and Windows builds, and installs its own shared libraries but these devs didn't know to package up the IDE's libraries nor mention it as an installation dependency... (Which means they didn't do a test install on a fresh Linux system, they presumably tested Windows and got a Linux version to compile and called it good...) I'm not entirely convinced they know what static linking IS.

The software is one of those "open source except for our magic IP library containing the tricky bits which is only ever going to be a binary because why else would anyone buy our hardware? If it doesn't have closed source software driving it obviously the hardware is worthless..." So while we can rebuild bits of it from source, they're not the interesting bits, and the interesting bits have this forest of C++ symbol name dynamic resolution failures, all different.

August 1, 2020

Two odd numbered days back to back. It's not like there's any shortage of relevant news (and red cape waving distractions from the troll party), the even days are so I can talk about other things.

I suppose I could try to focus on some good aspects of politics, such as how the Sears Catalog fought racism a hundred years ago, before an Ein Rand devotee became CEO and destroyed it in a leveraged buyout and looting, for example Sears owned all its own buildings until he had it selling them all to him and then charged them rent until he got all that money back _and_ now owned the land...

Sigh, the Twilight of the Boomers has enough evil it leaks into all topics unless you explicitly choose NOT to talk about it, and set aside Boomer-free days. I really need to look up where the Austin protests are and start going to them.

The GOP (or what's left of it) is literally trying to destroy the post office, which would have a huge impact on everyone's lives. Voting by mail was always a thing, it's not new the GOP simply hates _voting_. They replaced paper trails with hugely biased electronic voting machines, and are now attempting to eliminate all remaining ways to vote that leave a paper trail.

The initial push for electronic voting was the result of the 2000 "hanging chads" election in Florida, which the GOP ran and the GOP intentionally screwed up to elect their guy, and then used the chaos they'd created as excuse to replace the equipment they'd used with more easily hackable equipment that had no paper trail so recounts would be impossible. The CEO of the Diebold ATM company was a big GOP donor who literally promised his new voting machines would cause the GOP to win Ohio then went to jail bribing officials and falsifing documents. Diebold makes ATMs which HAVE A PAPER TRAIL (it prints a paper receipt for each transaction), but it insisted that its voting machines could not possible have a paper trail because it was too hard. None of this was believable, but they just repeat their mantra "both sides lie" and use being in power to push through obvious lies which then become the status quo, and Democrats can always be counted on to defend the status quo and pardon Nixon if they ever get back into power. "No punishment, no reparations, keep everything you stole, just don't do it again today." Instead when it comes time to rewrite the "all eggs in one basket" voting databases the Diebold CEO set up before he went to jail, outsource it to Russian hackers this time. As long as you steal it a DIFFERENT way, the democrats don't mind. Their job is to close barn doors after horses escape and then insist there's nothing they could have done.

George W. Bush lost the popular vote in his first term (and hacked the recount), and the current guy lost the popular vote by multiple millions. The GOP isn't even managing to look like they actually WON, they using all their tricks to squeeze out technicalities. They do this at the state level too, the south isn't inherently more conservative it's just where plantation owners lived (due to the climate spreading malaria and thus requiring malaria resistant field workers from africa) and those rich plantation owners used their money to buy control of local government and use racism as a tool to divide and conquer the poor. If we properly outlaw gerrymandering and let everybody vote (including removing the modern poll tax variants like "voter ID requirements", inability to vote with unpaid jaywalking fines and traffic tickets that compound to $5000 within a month because you can't afford to pay them, and school-to-prison pipeline felony convictions at age 16 that preent you from voting for the rest of your life... without that, the GOP would never win another election ANYWHERE. And they know it.

When the democrats encourage you to get out and vote by entering your information into a computer the GOP provided which tallies them into a single database with no audit trail of any kind... The democrats are Good Cop. Nancy Pelosi is a doddering octogenarian. We need more than half the population on the streets PROTESTING so it's clear (to the military) that the GOP numerically cannot have won the election, the number of people protesting is itself a majority vote. (Gandhi called a "general strike" where the majority of the country simply stopped working until the british stopped trying to run things. A similar "going limp" contributed to the collapse of the Soviet Union.)

So today the GOP is defunding the post office to attack voting paper trails (regardless of the splash damage to the wider economy), but they're flipping out when we want to defund the police. Except we know what happens when you defund the police, because we can measure places that have done it. Results are immediate and obvious, and _positive_.

The protesters are peaceful, it's the police who start violence. The police are the ones being protested against (for good reason), and it hurts their fee-fees. So they attack and badmouth the protesters. The level of background racism among the boomers let widespread police lynching go unremarked, but not anymore. And those with more (money, power, etc) having their ill-gotten gains seized and being dragged down to everyone else's level is THE nightmare of plutocrats and autocrats everywhere. The 1% lives in fear of the 99%, it is their defining characteristic.

Often what the Boomers object to is people creating new spaces and rendering the old ones irrelevant, and then the newly irrelevant shriek at the sheer disrespect of Kids These Days, and privately form hate groups.

Capitalism had bread lines in the 1930's, and now they're back. As the Boomers drown their increasing hysteria diverts money from food/medicine/housing to police violence to suppress unrest and hide from scrutiny. Which leaves comedians doing good factual summaries and passing it off as comedy. (Hence "The Onion merely documents", which is what I used to say on twitter when linking to an onion article that couldn't figure out how exaggerate something and was basically an honest news report. At the moment they're finding tiny slivers of hyperbole which is a tribute to the Onion writing staff if you ask me.

The Boomers keep declaring war on nouns (drugs), concepts (poverty), and emotional states (terror). Of course they're treating the pandemic as a war, which was immediately lost.

I think China's waiting to invade taiwan until after our election. Either Russia and the GOP manage to subvert another one (at which point the USA is done as an international power and they can do what they like) or they can strike in the lame duck period between the election and January's swearing in ceremony while we're paralyzed with the GOP going into full rebellion trying to replay the Civil War, and then have Biden who will pardon everybody (and pardon Nixon again, just for good measure) because the Boomers just want a return to a "normal" when they still had functioning hip joints and any of their original teeth.

July 31, 2020

The real question at this point is whether the Boomers end in blood or die of old age. Clearly it doesn't end with most Boomers still alive. There are plenty of younger enablers but without senile Boomers they tend not to have a business model. The rest of us know what to do next, the Boomers just have to get out of the way.

The fundamental problem (beyond Boomer senility) is heads didn't roll after watergate (in which GOP president Richard Nixon's transgressions overshadowed GOP vice president Spiro Agnew's massive unrelated bribery scandals), and heads didn't roll after GOP president Ronald Reagan's Iran-Contra scandals. The GOP has been corrupt for decades, and every time the democrats got back in power they pardoned the guilty and let them keep their ill-gotten gains, and rebuilt the economy so they could do it again and again.

The democrats are Good Cop. Good Cop is still a cop. Right now we need to unite against Bad Cop which has gone full fascist (to the point even the plutocrats have lost control of them), but don't for a second think they're the answer to anything. Good Cop is the puppet on the plutocrats' other hand. That's why proper goals can't be half measures, but things like "defund the police" (not "reform them by giving them even more money"), "prison abolition" (not "reduce proviate for-profit prison populations by 10%"), and "guillotine the billionaires" (not "more taxes to evade").

P.S. The guy who shot the protester in austin was a US Army seargant who had previously tweeted that texas protestors should be met with violence. (He claimed he drove through the protestors by accident, and then shot a protestor because he was afraid, after saying on twitter that violence against protestors would be good.) Can't blame APD for this one. And the bad stuff you can blame them for mostly seems to be 2 months old at this point? Looks like somebody in the management chain put their foot down. Plus everybody's got body cameras that MUST STAY ON or it's taken as a sign of guilt, and they release the footage publicly even when it makes them look bad. (Who watches the watchers? EVERYBODY.) Austin isn't perfect, but it's always been a lot more liberal than its surroundings.

P.P.S. AOC should be awarded both ears and the tail but right wing loons are immune to embarassment (the KKK hoods block it out). Facebook is as responsible as Fox News for the current social crisis.

July 30, 2020

Bug report from elliott which I of course unnecessarily meddled with.

I'm reading up on how USB works under the covers, because the high speed USB turtle hats should be ready soon (he had 3, but he comissioned several more so we can all have some).

Jeff hasn't explicitly said that the USB 2.0 was published April 27, 2000 so the patents should now have expired, but our general pattern of implementing functionality tends to work that way. We start things about when the even trolliest troll has to make a serious cost/benefit analysis about suing us over them.

USB is full of historical nonsense: USB 1.x had "low speed" (for keyboards and mice) and "full speed" (for data transfer), and then USB 2.0 added 480 megabit per second "high speed" mode, which is way faster than "full speed". High speed mode is a synchronous encoding with a "microframe" every 125 microseconds, which is 8000 packets/second.

The reason so much is done in hardware is we have to respond to handshake packets in 1.7 microseconds (1700 nanoseconds) or our device gets kicked off the bus. If we had a j1 running at 20mhz off a watch battery, that would be 50 nanoseconds per clock cycle, which is 340 clocks total to finish responding. Flushing all 16 registers to the stack and loading them back in again from elsewhere, plus a jump, would eat ~40 clocks going in and another 40 coming back out, using up 1/3 of your clock budget before you actually did any work. Handling a Linux system call like "getpid" is something like an 8000 clock round trip (and that's without contention and latency from the OS doing anything else), so obviously you can't do this entirely in software under a conventional operating system.

All we have to do is send an ACK/NAK/NRDY packet, but we have to send it PROMPTLY. So generally they have the hardware do it, but that means the hardware is reading packets and understanding what they _mean_, which is a lot of state to track in a very complicated state machine. (Which is the problem Jeff had with his first attempt, it was getting handshake packets slightly wrong in a novel way that caused MacOS X to unplug the device and Linux to kernel panic, and since we can't see what's wrong we can't fix it. It's too much data for a scope to store, so he's ordered a USB packet analyzer from the internet.)

What I really want to do is get J1 threading and in-CPU dma implemented, and then either port lufa or write something similar so we can do USB support mostly in software rather than an elaborate VHDL state machine. The usual alternative to having an elaborate VHDL state machine responding to packets is having a dedicated CPU that does NOTHING ELSE but repond to the USB packets, which is why it can guarantee responding in the 1700 nanosecond window. (Lufa is such a dedicated stack for an 8-bit atmel processor. I need a superh one for new hardware, and may wind up having to write something new, but we'll see.)

But I don't want to waste a dedicated CPU, I think a j-core can handle this itself while running other code. And not relying on a fancy hard realtime OS, but having the hardware call code in response to interrupts directly with extremely lightweight context switching.

The tl;dr on CPU threading is "use the thread number as extra high bits accessing the registers out of SRAM" which lets us switch from one to the other avoiding most of the store/reload dance (although in reality it's still gonna take 3-5 clock cycles to swap). The tl;dr on in-CPU DMA is "when DMA READY goes high, instead of feeding the next instruction out of RAM into the instruction decoder, feed it a fake instruction saying copy from DMASRC++ to DMADEST++", and in reality you'd only do that on even numbered clock cycles (or every third cycle, or every fourth... power of 2 is trivial, small 2 or 3 bit counter is cheap) so as not to starve the CPU. But doing this reuses the existing data busses and everything, no new routing, no new multiplexers, AND while it lowers the CPU throughput it DOESN'T introduce latency spikes. (It's basically throwing in a lot of wait states for the running program, but they're evenly spread out.)

But the main advantage is NEITHER requires significant extra circuitry, our ICE40 register file already lives in a 512 byte SRAM we use something like 22 4-byte registers out of (the 16 numbered ones, SR, GBR, VBR, PR, and a couple of TEMP registers internal to instruction implementations), and if you round that up to a power of 2 that's 32 registers using 128 bytes, so 4 threads fit in the existing SRAM.

In reality, there's some registers like the multiplier high/low stored outside the register file, and every time you load a new value into PR (I.E. jump) there's a wait state because this decision is being made in stage 2 of a 5 stage harvard pipeline (same reason branch delay slots exist, you've already fetched the NEXT instruction from ram, might as well use it). So the ACTUAL thead switching overhead is going to be at least 3 clock cycles, might be as many as 5 depending on what we can and can't parallelize in our implementation. But as thread switches go, that's still pretty cheap. If every 125 microseconds (125000 nanoseconds, 6250 clocks at 20 mhz) we get an interrupt to deal with whatever came in this microframe, and we spend 300 clocks dealing with it, that's 5% overhead.

I'm not JUST trying to solve the immediate problem of "new customer project needs high speed USB interface", I'm also trying to solve the "ICE-40 J1 would be way cooler with USB serial interface", which needs a USB stack, and we haven't got space for a large VHDL state machine but if we can do a mostly software implementation...

July 29, 2020

The Resident is so incapacitiated by dementia that the governor of Oregon negotiated with the vice president to remove ICE from Portland.

That's probably why GOP kidnap vans are abducting protestors in NYC now, some of their highly limited klanpower got freed up. (They're not yet disappearing them, but they continually escalate because they're perpetually losing. They're going to keep doubling down on their busted flush until the Boomers die.)

The Resident's dementia has become completely incapacitating. An alcoholic who gets pulled over doesn't spend days bragging about passing a sobriety test. Spending days bragging about passing the dementia equivalent is itself a symptom. But the Boomer Media (especially the racist Grey Lady) continue to see every lucid moment in the sea of senility as a "new tone" and "return to normal" and so on. (The disappointing part is how the old Boomer news media fall for such stupid gambits.)

Acting president Barr is getting grilled by congress, but Nancy Pelosi will never allow another impeachment despite the fact the democrats should have been having them as often as the GOP has tried to repeal Obamacare. One for each new impeachable offsense.

Late stage capitalism is the real problem behind Police being able to steal anything from anyone at any time and get away with it, up to and including evicting you from your house and selling it because they don't like you. (They do bad things to brown people first, then expand their reach. We wouldn't have police tanks and armed drones in US cities if we hadn't been endlessly at war in Iraq and Afghanistan for multiple decades.) But the reason you can tell it's late stage capitalism's fault is that "Is this constitutional" gets resolved with a class action lawsuit settlement for cash. Because of course, the solution to "can the police just steal from me at will" is to give the complainers a small amount of their money back, without even promising not to do it again.

This is yet another reason we need to abolish the police entirely. Here's a great thread about how police unions aren't actually unions.

July 28, 2020

A couple years back HEB had "Awake!" brand caffeinated chocolate bars at each checkout counter. They were like $2.50 each so I didn't get them often (except when they went on sale for $1 each and I'd buy 20 at a time to stick in the snack drawer), but even at full price it was a nice option to have. Then one of the times I was out of town for a month, they'd switched them all to Awake! caramel bars, which I never bought because I suspected they worked like caramello, which is leaky liquid caramel that gets all over your fingers so you can't type without getting the keyboard sticky.

HEB just clearanced them all at 75 cents each, and I got one thinking "maybe it's toffee, I'll buy them all at this price if it's toffee"... and now my fingers are sticky. (And I can't put the wrapper back in the backpack pocket the bar came from, because of long strings of candy bar drool.)

July 27, 2020

The reason to guillotine the billionaires is that they are murdering the rest of us. The reporter behind the Panama Papers story was murdered for reporting billionaire tax evasion. Brexit was also about billionaire tax evasion. And the US republican party is about tax cuts for billionaires, increasing inequality, and increasing racism to pacify/distract the 99%.

Protests continue around the country. The military and police are two unrelated jobs, often mutually exclusive. What police really do these days is revenue collection, which is why they keep inventing crimes. The protestors aren't the ones rioting, the police are rioting.

And now Austin is on the front lines, although... I'm not sure about this one? The local police have reacted badly all along (when the protests are AGAINST YOU, maybe you should recuse yourself from the situation and just not confront the protestors). But the guy who just got shot (by a driver he approached, not anybody openly working crowd control) was one of those "open carry" types who thinks being white means he can brandish an assault rifle at all times; bringing one to a peaceful protest defeats the purpose of HAVING a peaceful protest, yes ESPECIALLY when the people protested against turn violent. A peaceful protest only works by remaining peaceful, war is a different approach with different goals.

But then martyrs don't need to be perfect. That's why creating martyrs is a bad move, politically. The guy who died did not fire first, seemed to be acting to protect others (the driver tried to drive through the protesters, albeit didn't hit any), and left a quadraplegic widow without a caretaker. Regardless of nuance, those things remain true.

Austin's protests are just one of thousands of cities protesting. The focus hasn't shifted, the GOP/confederate racists are trying to add fronts simultaneously but they're already stretched thin. The ICE level racists are a tiny minority at capacity trying to flex on portland and seattle. Early on the racists sent saboteurs into the minneapolis protests but got spotted immediately, it turns out planting people to incite riots (a classic nazi technique embraced by the modern GOP) doesn't work so well in the days of ubiquitous cell phone cameras. Then they tried to intimindate by concentrating their klanpower to make expamples out of especially liberal cities. But they're clearly acting out of weakness. So I _think_ this was a local hiccup? We'll see...

The New York Boomer Times is still at it. These "both sides" clowns think pardoning Nixon was the best move ever. Both sides are not equal. Yes, Good Cop/Bad Cop are both puppets of the plutocracy but right now? The priority is on ending Bad Cop, followed by neuremberg trials. The Squad may not be popular in their party, but they exist and give us something to expand upon. If the democrats want to actually start performing the role they've pretended to play and finally let go of the carrots they've dangled out of reach for generations, we can work with this. Of course they won't until the Boomers die, but that's not far off. Vote against in the primary, for in the general, force them to be what they PRETEND to be, and above all guillotine the billionaires.

July 26, 2020

The toysh binary ("make sh" on x86-64, dynamically linked) is 65k so far, which is uncomfortably large. That's twice as big as "make sed". (Admittedly /bin/bash on devuan is 1099k so I'm doing better than that, but still. For a toybox command, this is serious chonk. The busybox 1.24.1 I was using in the old standlone mkroot, builds a version with just hush in 76k, which implies I have 11k left, but then mine is supposed to do a bit more than theirs. I dunno what busybox ash would come to because I haven't got a standalone build of just that command set up, and doing so under current busybox seems far too much like work.)

$ IFS=x
$ xx() { abc="${@}";}; xx one two three; echo "$abc"
$ echo "$abc"
one two three
$ xx() { abc="${*}";}; xx one two three; echo "$abc"
$ xx() { echo "${!@}";}; onextwo=123; xx one two

The first is IFS_SPLIT, second isn't. The third IS. Great. Ok, which nosplits use IFS and which force space? The x= assignment uses space...

Triage of all current variable expansions (in my standard indented bullet point format):

  recurses once for ${!@}: $@ with NO_PATH|NO_SPLIT, uses IFS=x for both
  expand_arg(0) when not redirecting
  expand_one_arg(NO_PATH) when redirect not HERE (WHY NO_PATH???)
    - this is where ambiguous redirect error message goes?
    - should be yes path but no split
  expand_one_arg(NO_PATH|NO_SPLIT) for <<< (uses IFS=x for $* not $@)
  expand_one_arg(5 different flags) for << <<-
    - Here document body expanding $* uses IFS=x, not for $@
  expand_one_arg(NO_PATH|NO_SPLIT) for variable assignment, neither IFS
  expand_arg(0) in for list (and expand_arg("\"$@\"", 0) for empty list)
  expand_one_arg("\"$@\"", SEMI_IFS) neither IFS

July 25, 2020

If you want to understand how "modern monetary theory" (I.E. the way it turns out a stable modern economy can just print money and inflation doesn't happen) works, watch this video where Richard Garriot explains how Ultima Online's economy was broken by players hoarding stuff, so they fixed it by constantly injecting new resources into what had been designed as a closed economy recycling the same resources. For "players hoarding" substitute "billionaires" and for "injecting resources" substitute "printing money" and oh look, a scale model of what they're proposing to do to get around rules-lawyering munchkin assholes making life suck for everybody else.

Late stage capitalism boils down to insecure white males holding and creating bullshit jobs, combining impostor syndrome with dunning kruger to screw up what productivity everybody else manages in spite of them. They openly destroy good infrastructure, without even trying to hide it anymore. They suck up resources not meant for them and ignore real needs (I.E. impose externalities), corner the market on things like drinking water and literally work people to death. (Remember, slavery was all about money, capitalists only gave it up because they were physically forced, they still do it through the prison loophole which is why private prisons are big business, and they would love to fully reinstate it.)

Take capitalism out of the equation and infrastructure naturally arises that functions way better. Capitalism (and entitled old white men) are just getting in the WAY. The most generous possible interpretation is they're clueless idiots focusing on the wrong things, but in reality they're the source of most problems (such as climate change) and literally _are_ the rest of the problems (racist violence, spiraling rent and evictions leading to homelessness).

And in reality, there hasn't been any connection between the amount the government takes in and the amount it spends since we went off the gold standard most of a century ago. The point of taxes is to keep inflation down, and you do that by taxing the corporations and billionaires who have most of the money, not by taxing poor people who can't afford to get into a bidding war for their daily necessities. When the economy expands, you need to put more money into it. When the economy contracts, adding money to it usually makes it expand again. (Even in the midst of a pandemic, the stock market is at record highs because the federal reserve is printing money to loan to corporations at 1% interest, lower than the rate of inflation. "Buy corporate debt" means "loan money to corporations", it is literally that thing.)

The current politicians will never do this, of course, because they cannot conceive of an alternative to capitalism. This spring's $2200 billion stimulus bill spent $290 billion on sending $1200 checks to individuals, another $260 billion on the $600 unemployment benefit, and $180 billion went to hospitals (IN A PANDEMIC). The remaining $1470 billion went to corporations (including $280 billion of TAX CUTS). I.E 1/3 of the total went to people, and 2/3 went to propping up capitalism. Stop arguing about what we can "afford", guillotine the billionaires already.

(Yeah, the trumpocalypse continues, they're still assholes, and speaking of money we need to defund the police. The better funded side is not always the more effective side, "sufficient" money usually just takes money off the table. )

The average 911 call response time is 10 minutes, the fastest in the country is San Francisco with just under 6 minutes. The main job of the police (other than traffic tickets) is to show up after a crime is over and gather evidence to find out who did it. A tank is not an ideal tool of forensic investigation. This is why calling what the USA did in Vietnam a "police action" was stupid: police operate on the consent of the policed. In an environment where 99% of the population is civilians, job #1 is to find the guilty party in a crowd of innocent people.

The military operates on entirely different principles, it takes action against groups where every member is presumed hostile and fired upon en masse. The military does the OPPOSITE of what police do, they kill people they've never met. But Nixon's GOP clowns never understood that, so they didn't just flub vietnam, they also militarized the police back home. Now in the USA police are acting like military, and turning the entire populace against them (just like in Vietnam). They make videos bragging "here's our new tank, step out of line and we'll use it on you!" In doing so, they lose the consent of the policed.

Vietnam showed the limitations of the military when the "enemy" doesn't give you the courtesy of standing in rows all wearing the same color shirt to easily identify them. If you fire into a crowd of 1000 neutral people and 1 "enemy", you vastly increase the number of opponents who want your military eliminated. Using torture devices (teargas, rubber bullets, sonic cannons) instead of things designed to kill quickly still count as firing into a crowd.

July 24, 2020

I posted at least the start of a proper writeup on how countering Ken Thompson's trusting trust attack provides a framework motivating toybox and mkroot's current development goals. Probably that should be in the toybox FAQ somewhere?

Humans are weird. Update your system for security patches? Not a priority. Update for new emoji support? Early and often. (Eh, bribes work.)

Ok, where did I leave off? Environment variable assignment wants wildcards to glue together results. Redirects want the "ambiguous redirect" error message for multiple returns. HERE documents don't do path (wildcard) expansion. Those are the only three case I currently have dealing with this...

Ok, how about if expand_one_arg() takes a str *err argument that says what error message to emit if the expansion results in multiple arguments, and if it's NULL it glues them together and returns the one argument?

AHA! No, the assignment does NOT want the glue together behavior, the assignment wants the no wildcard expansion behavior, and then printing an unquoted variable will do an expansion because wildcards happen after variables.

$ X=todo*.txt; echo "$X"; echo $X
todo2.txt todo.txt

Which is actually what my current code is doing via (NO_PATH|NO_SPLIT), the command line test I did last time was wrong.

Hmmm. In theory the reason "abc < todo*txt" is ambiguous is the order is undefined. It should take the first split word as the redirect filename and make the rest arguments to the command, BUT the filesystem can return multiple files in any order, and can do so different times on different calls (because the directory may be a funky hash table style tree under the covers). Which implies that other split types WITH a defined order would not be an error:

xx() { cat < "$@"; }; xx todo.txt todo2.txt
bash: "$@": ambiguous redirect

And it fails the same way. Sigh. Common code path I guess, even though the argument order is clearly defined and the first one is the argument that binds to the redirect.

July 23, 2020

The New York Times is by and for Boomers, exclusively. Boomer Senility is in full-throated "get your government hands off my medicare" stage, currently saying "don't use this troubled USPS thing the GOP is destroying, just use regular mail". no really. Boomers think that anything that's been there their entire life is a force of nature which cannot break and does not need to be maintained. Boomers remain infantilized, never having to know how anything works, just shout louder if it's not happening fast enough. And that was BEFORE they went collectively senile and started projecting their deficiencies on everyone else.

The frustrating part is we've lost capabilities we used to have, many of which skipped over Boomers entirely. This "test and trace" thing the USA utterly can't manage for Covid-19 is how we defeated smallpox half a century ago, but it wasn't the Boomers who did it. Do the math: the World health Organization was founded in 1959 with the goal of eradicating smallpox, and the last known smallpox case was in 1977. The Baby Boom started in 1946 (9 months after World War II ended) and peaked in 1955. That means when smallpox eradication started the oldest possible Boomer was 13 years old and the average boomer was 4, and the last Smallpox case happened when the oldest Boomer was 30 and the average Boomer was 22. It wasn't the Boomers who did it, it was their parents the "Greatest Generation" who switched from fighting nazis to fighting smallpox after the war, possibly with the help of a few Boomer interns towards the end there.

Boomers didn't land on the moon, either. During Kennedy's 1961 speech saying we would, the oldest Boomer was 15 and the average Boomer was 6. The 1969 landing, oldest Boomer was 23 and average 14 (Neil Armstrong was 38). The last moon landing was 1972, when the oldest Boomer was 26 and average 17. The Boomers getting old enough to hand the project over to is when it STOPPED HAPPENING.

Boomers are useless, they personally took credit for things their parents did, and assumed everything "we know how to do" would continue to always be possible without them personally ever having to learn how to do it or put in any effort continuing it. They're wastrels who ran down the vast family fortune they inherited and are now beating the impoverished servants whose lives they've ruined. And they keep electing the last few dregs of people born slightly before 1946 to run things for them (hence the plague of octogenarians, the oldest boomer is currently 74), because they still don't see themselves as adults.

The GOP deployed ICE to Portland, because last year they let ICE deport anyone, anywhere, without a hearing. Yes, including US citizens. ICE has already BEEN secret police grabbing US citizens off the streets for a year now, we just didn't notice because started out on brown people. Racism gave them clearly unconstitutional power which is now being turned against everyone else, and the local police are inviting ICE in. These clowns literally teargassed the mayor of Portland (have a video), and now they're preparing to attack Seattle.

Abusers use you flinching from them as an an excuse to hit you. They will always have a justification for anything they do in any circumstances. while the other side is never justified no matter what and no level of escalation is ever enough to overcome their fear.

Rich white men wield racism because it's profitable. It's not just dried up old Boomers, the tech douchebros of silicon valley invented the gamergate rabid puppy nazi frog brigades. There's a reason I've never had a Faceboot account, and I hope they implode.

The GOP/Boomers/techbros ignore any law they find inconvenient and of course ignore their own stated principles. The arrests of protesters are another form of voter suppression. But then that's what the school to prison pipeline has always been about, if you're a felon before age 18 you never get to vote. But they hate to be called on it, it hurts their fee-fees, even when their justifications are ridiculously thin.

Lots of american police-adjacent institutions like homeowners associations were invented to enforce racism. Police have always thought the rules don't apply to them, but they've gone a bit far this time. Philadelphia's top prosecutor is prepared to arrest federal agents. In peacetime the Boomers would have another 14 years of nursing home retirement (half of all WWII veterans' children were born before 1955, plus average US lifespan 79 years = 2034) but they are NOT going quietly. Then again some demographers consider those born after 1955 to not really be boomers and instead stick a decade between Boomers and GenX of people too young to remember korea or participate in vietnam, and whose formative experiences were watergate, the oil embargo, and AIDS. If we only have to wait out the OLDER boomers and can reason with the younger ones, this is much more survivable.

Patton Oswalt thinks that GenX will be just as problematic when we get to be the Boomers' age, but GenX never defined a generation the way the Boomers defined "the sixties" (and "the seventies", and "the eighties"). I HOPE the rest of us are less likely to still be trying to drive long past the point of competence. We aren't addicted to being in charge because we've never BEEN in charge, we always reported to some Boomer who kept all the money for themselves and would never leave. No other recent generation has grabbed the levers of power and refused to let go for 50 years. GenX doesn't get that long to enjoy a lack of Boomers and we have to spend the rest of our lives cleaning up all their messes (from income inequality to global warming), but at least at some point they stop making it worse because they're all dead.

July 22, 2020

There aren't ten wildcard characters there are eleven, because | in the parenthetical blocks is a special character (when not "quoted" or \escaped). In fact the @(block) only makes sense when you have | because it says match exactly one of the | separated patterns: ?() is 0 or 1, *() is 0 or more, +() is 1 or more, @() is EXACTLY one, and !() is inverted (match anything that does NOT match any of these patterns), which... I need to come up with greedy vs non-greedy tests for the inverted case don't I? To see which one it's doing?

All of which means I get to write my own glob plumbing, which I _last_ did (fresh out of college) for OS/2 Feature Install in 1996. (I remember that ***** consecutively was a pathological case with basically O(N^x) search behavior, and that I later figured out "oh, I can just drop all consecutive * after the first because it can't change the match", but probably didn't because it was unlikely to ever come up. I was young. And IBM was working me 90 hours a week and paying me for 40 because we were "exempt", which is a fancy way of saying software developers have not yet unionized. (Which is great in the "non-competes don't apply to silicon valley, you can go to work across the street the next day" sense, but sucks in most other senses. Basic income and medicare for all beat unions any day: no funky regulatory capture Jimmy Hoffa style bureaucracy becoming the enemy of its original nominal goal, but you're free to walk away from a bad job because you always have the option to NOT do it. And people clutching pearls about the shrinking labor force from THAT should stop and think about what declining birth rates and college getting priced out of anyone's reach is likely to do to skilled labor. But that's for odd days, this is an even numbered day. :)

I still need to remove the extra asterisks: they're an active wildcard, not a literal. But I don't need to do the funky speculative match and unwind thing for consecutive asterisks after the first. (How WOULD Popeye pronounce asterisk? Randy Milholland would know...)

The speculate and unwind thing is because x="banana" being globbed with p="b*a" eats the b at x[0] satisfying p[0] and advancing to p[1]='*', which means advancing to p[2]='a' which matches the a at x[1] and thus continues to p[3] = 0 looking for end of string, does NOT see end of string at x[2] and backs up to p[1], and starts looking at x[1+1] which coincidentally is where it was next but the important thing is it expanded the * range by 1 (we could have advanced further with a larger pattern partially matched, but the asterisk stack pop should resume from there)... and that "failed to match, backing up" means we have a STACK of trial locations, one for each * we've hit so far (with corresponding size of the range it's tried to match so far, starting from zero and incrementing by one each time), which is how *?* can do a LOT of checking. Each time we fail we back up one asterisk in the stack and advance it until it hits EOF, at which point we back up to the previous asterisk, and if we run out of asterisks we didn't match this string at all.

There's optimizations like if you know the length of the string and number of literals left in the patter you can tell if there's enough space left you COULD match however many literals you have, but Linux VFS limits filenames to 255 bytes long, so the common case fits in L1 cache. Yeah case statements can work on arbitrary environment variables, but just grinding the search out should be enough for almost all cases? Wait for somebody to complain...)

Hmmm, can it do a redirect in a NO_SPLIT context? Yes it can. And when it DOES try to split...

$ cat < todo*txt
bash: todo*txt: ambiguous redirect

Custom error message. Of course. Hmmm, what should I do about that...

THIS case isn't a "glue results together with space", this is "multiple results is an error". Which probably goes through the expand_one_arg() function, which catches split attempts and returns an error. Even when it passed _IN_ the NO_SPLIT flag. And I _want_ this to be an error, not an attempt to open "todo.txt todo2.txt"...

Ok, every use of NO_SPLIT is a call into expand_one_arg(), which already has to handle error because ${x?y} and such, so multiple wildcard expansion is just another such error. Having it report the error properly is an interesting question though...

Except X=todo*txt _does_ want the "glue together with space" behavior, there are cases that want one behavior and cases that want the other and my current flags aren't granular enough. Don't perform IFS splitting vs glue together legitimate multiple results returned from wildcard expansion: expand_one_arg() can't currently distinguish the two, possibly it needs to be more than one function, or some calls need to inline what it does and handle the "multiple results" case differently? Hmmm... What else CAN return multiple results? Bracket expansion, IFS splitting, wildcards. Probably something horrible with arrays but I'm still going "la la la" with my fingers in my ears about that, but "$@" definitely can and I special cased gluing that back together for NO_SPLIT (dropping it down to $*).

You know, I'm pretty sure ${x@Q} does NOT then check the result for wildcard expansion. I hope it doesn't...

$ touch "'abc'"
$ X='*'
$ echo ${X@Q}

Of course it does. The output just LOOKS quoted, it only really IS quoted when you feed it back in again. Note to self: remember to always double quote ${x@Q} expansions...

July 21, 2020

This thread is a good self-contained explanation of why police budgets need need to be zeroed out. Don't just abolish ICE, abolish police departments. Nancy Pelosi and Chuck Schumer remain utterly useless. which should come as a surprise to nobody. (Voting for Good Cop is still voting for a cop. They can actively cause problems or claim to be powerless to stop them.)

There are no "test cases", fascists continually escalate, constantly pushing to see what they can get away with. This is WHY you punch nazis. They've deployed ICE in cities against the populace we need to find who is doing it and prosecute each and every individual. As with neuremberg, "I was just following orders" is not a defense. And most of what they're doing isn't even following orders. The current prison system serves a purely racist purpose. Bastards continuously lie. Meanwhile antifa continues to do the thing.

There are other quite interesting things I'd love to write more about, but haven't got the energy.

July 20, 2020

I've circled back to wildcard logic, and luckily I left myself a trail of breadcrumbs from last time I was poking at this, because I went "this wildcard detection/recording logic has no business being in the main loop of expand_arg_nobrace(), just have wildcard_add() scan for wildcards since a $VARIABLE can expand to active wildcard characters so you have to do it later anyway"... except the REASON I did it early is my logic removes "quoting" and \backslash escapes before calling arg_add() with the results of IFS splitting, and that indicates which wildcards are live and which are kept as literals. So I need liveness metadata, which is what that was collecting.

Modulo the processing at the start of the loop isn't enough, it needs to process both the input string AND the results of various $(expansions) to collect the full list of live wildcards. And each call to wildcard_add() wrapping the old calls to arg_add() has to flush the wildcard parsing stack which could involve incomplete [brackets] or +(regexes), ala:

$ touch a; A=abc; IFS=b; echo [$A]
[a c]
$ touch a; A=abc; IFS=; echo [$A]

July 19, 2020

Portland is under siege and the administration has announced plans to take it national. The inciting incident is a federal building got graffitid, and their fee-fees got hurt. The predictable result of the jackboots is that the size of the protest immediately doubled. The republicans are not a legitimate government ( link link link link link link link... Does he really need to money launder AS president?) It's violent plutocracy which has been based on lies for decades (Heck, they've even managed to violate the geneva convention.)

The boomers need to stop This whole mess is the death throes their worldview. The Boomers' Good Cop candidate is insisting that Warren will shape his domestic policy... Ok, so why did he run against her then? Is he honestly trying to hepeat Warren's entire campaign?

Meanwhile, the useless police arrest emergency workers in the midst of saving lives, another reason to zero out their budgets.

Meanwhile, China has gone full concentration camp, has rolled the long-threatened tanks into Hong Kong, and I strongly suspect they're readying to invade Taiwan. (Because right now they're not even in our top ten political crises, and know it. When will they ever have a better opportunity?)

July 18, 2020

Now that I've got the basic ${x#y} parsing infrastructure into toysh, I'm going through the tests and hitting things like "it doesn't understand the 'case' statement" which is because "abc) echo hello;;" needs wildcard logic for abc.

I have about the first half of wildcard plumbing implemented, then it gets... fiddly. Hmmm...

July 17, 2020

So, Boomerdamarung. The Year of Hindsight. The Trumpocalypse. This is about how I expected the Boomers to go: violent aggressive senility, trying hard to take the planet with them. We have to dispose of the boomers and the billionaires they worship before we can even start addressing things like climate change. Cops continue to explain why all their budgets need to be zeroed out. And the "prison" exception to the 14th amendment banning slavery continues to stretch. Meanwhile, the billionaires taking all the money has led to the entirely rational decision that nobody else can afford to have kids. Turns out your money isn't useful if there's nobody to buy anything FROM. We need to guillotine the billionaires. Change the law. Our current government is completely fictitious. Not just held in place via voter suppression and used as an excuse for massive embezzlement, but what it does do is fraud. David Graeber said there's only ever one revolutionary agenda: cancel the debt, redistribute the land.

July 16, 2020

Jeff and I gave a j-core talk to the British Computer Society today. It was followed by two other interesting FPGA talks: one on the new fully open bitstream compiler based on ghdl and yosys, and one on reverse engineering FPGA boards, because used boards with big FPGAs are much cheaper than buying new ones. In theory all three talks should be up on youtube sometime next week.

We were sent questions afterwards, some of which we responded to and some of which...

There are things Jeff does not want me to say on behalf of the project. Apparently mentioning that Japan had a lost decade gets Paul Krugman a meeting with Japan's prime minister, but if we say that SuperH lost its position as the bestselling chip in the world not because of the technology but due to the 1997 asian economic crisis (because after Hitachi handed it over to Renesas they never even did another die size shrink, but kept selling the same ~200 mhz chip with zero further manufacturing investment until chips made on a 10 year old fab process eventually stopped selling)... no, we can't say that, we'd be blacklisted. Even in a talk to british people, people would dial in and get offended and make it their life's work to stonewall us out of every possible future business opportunity ever, or something?

This is why hasn't particularly been updated since 2017, and why I'm mostly silent on the mailing list: there's nothing I'm allowed to SAY without washing it through a committee and having it handed over to marketing people who make powerpoint. I'm used to that from big Fortune 500 companies, but from a startup? I will happily take a "that's not right, this is" correction, but "you're not wrong but we can't say it"? Working through the thicket of NDAs and the "must do a coordinated announcement with our customers" was one thing, but a marketing department and nebulous cultural politics that come and go depending upon context, I am not prepared for.

But there are also things I have trouble saying to my satisfaction, even without external judgement. I write and throw away a LOT of material trying t come up with non-confrontational ways to say things my audience doesn't want to hear, especially when baited by people who want to make their opposition look unappealing, as a professional tactic. (I think that ship has sailed within the confines of my blog, but I'm using it to vent stress since twitter's no longer available.)

Anyway, here's the email I composed but didn't send back to the BCS talk organizer. (Jeff replied independently, I'm assuming that covers it for the talk guys.)

On 7/16/20 2:12 PM, Sevan Janiyan wrote:
> Hi guys,

> Below are the questions/comments for your session, could you make your
> slides available or share them with me to host them if that's ok?
> Will you be taking advantage of the FOSSi/Google announcement to
> manufcture asics for open source designs over the next year or so? (
> ) - Andy Bennett

We've been talking to them for a couple weeks now. We hang out on the #j-core and #vhdl channels on their slack.

> would the xilinix parts be able to use symbiflow? - Drew Fustini

That's a Jeff question.

> for Linux on nommu, is there a way to support shared libraries in
> userspace? - Drew Fustini
> I believe ARM has FDPIC ABI for that? - Drew Fustini

ARM is a latecomer to FDPIC, superh support for fdpic started in 2008 and the first architecture that did it was frv I think?

There are two nommu executable variants: binflt is nommu a.out and fdpic is nommu elf. It's not that binflt doesn't have shared library support, it's that shared libraries in a.out were always horrific (it's not relocatable so you have to reserve a unique address range for each library your system will ever use, at build time). Linux switching from a.out to ELF circa 1995 was primarily driven by better shared library support.

So doing shared libraries in a.out is possible but most people don't bother, and doing shared libraries in fdpic is roughly equivalent to doing it in non-fdpic elf. (In theory it should just work.)

P.S. In THEORY you can make fdpic work on systems with mmu just as easily as nommu systems, but in practice the linux fdpic loader plumbing has gratutitous #ifdef MMU checks in it to break it on mmu systems, which is sad. As I said, some security guys were looking into using it on mmu a few years back, but apparently those patches never made it upstream.

> I enjoyed the presentation at ELC in San Diego a few years ago, is the
> turtle board still planned? - Drew Fustini

Yes, we did an updated version of it late last year (among other things using LX45 instead of LX25) which we're trying to get up on crowd supply now. We just didn't want to talk much about something that's not available yet.

> Do you expect people will choose J-Core over RISC-V because it's more
> tightly integrated? - Andy Bennet.

I don't, no. Jeff might?

Personally I have as much interest in what Risc-V is doing as in what Windows is doing. I find them profoundly technically uninteresting, and have no desire to work on that platform.

I'm seldom interested in any technology whose adherents feel threatened by the existence of competitors. I'm not trying to convert people to a religion, I'm doing engineering work that solves real problems in a way I hope other people find useful. Why did the developers of Linux expect people to choose it over BSD? Why did the gnome developers expect people to choose it over KDE? More people had never used EITHER. When you have 1% and they have 2% you focus on the 97% neither of you have rather than trying to block "the competition", unless you're pathologically insecure.

When the GNU project started, BSD already existed. When busybox started, gnu already existed. I maintain toybox, which I started after leaving busybox. Android ships toybox in its base OS image, which means there were something like 1.3 billion fresh deployments of toybox last year. And yet busybox continues to exist, and the dozens of gnu packages I made busybox functionally replace in a self-hosting build system back before handing it off also continue to exist.

Risc-V spends a lot of time marketing itself as "inevitable" the same way itanium, hillary clinton, and linux on the desktop did. That's not a statement of merit, that says you have no choice and will be forced to use it. If your best argument is inevitability, you've got a REALLY weak hand. (Look how many copies Windows shipped, how many users AOL had, clearly that's superior technology.)

I tend to avoid any technology whose adherents demand everyone else justify NOT using their thing. The way Python 3 was handled did not encourage me to leave Python 2. Yes when C++ guys boggle at my continued use of C, I _can_ go into a long technical explanation of why, but is that what they're really asking?

Then again I've had the "how dare you write new open source code competing with other open source code" argument aimed slightly more directly at me than most ( and might be biased.

> Which requirements do you expect to split the market between J-Core and
> RISC-V? - Andy Bennett

I don't? Again, Jeff might. But me, I find the question baffling.

The linux arch/ directory has alpha, arc, arm, armv64, c6xx, csky, h8300, hexagon, ia64, m68k, microblaze, mips, nds32, nios2, openrisc, parisc, powerpc, riscv, s390, sh, sparc, unicore32, x86, and xtensa. (That's after removing blackfin, cris, frv, m32r, metag, mn10300, score, and tile as unmaintained.)

The first commit to the j-core internal repository was in 2011. The first open source release of j-core VHDL was in 2015. The linux arch/sh directory was added to 2.3.16 in 1999, and git log arch/sh/configs/j2_defconfig says it was added in 2016. All of which was before arch/riscv was added in 2017. Yes they spend way more on marketing than we do, but again so does windows.

I wonder why you're ignoring the continuing existence of arm when discussing "the market". Because obviously nobody's going to resume work on now that more patents have expired? Or that if a serious open competitor did emerge as a market threat to arm's dominance (which hasn't happened yet), Arm wouldn't do an open version? Heck, I wouldn't put it past Google to buy them and do that given (and Apple, which is switching its macs to arm, wouldn't exactly object; they love being open-adjacent. Clang/LLVM was an apple project (hiring the grad student and giving him a dev team), they recruited the freebsd developers to create darwin... Beyond that powerpc is open hardware these days, openrisc always was...

The Risc-V guys are motivated to put forth a marketing story about how inevitable they are and everybody else should just give up now, but Intel couldn't pull off making Itanium inevitable. "It's only us, you can't NOT talk about us, we are always so important that any conversation in this space can only happen relative to us"... meh.

I mentioned some of the things we found attractive about the superh technology in the talk. I'm not intersted in "but red hat enterprise has so much more money employing full-time engineers, and they paid the linux foundation to insert RPM into the LSB as the official package management format of Linux, so why does debian even still exist, let alone anything _else_". I sat through the ELC year when everything was Meego, the year when everything was Tizen... are they still saying everything is Yocto or is there a new one yet?

P.S. Jeff doesn't like me to talk about this, because if you respond to riscv with indifference that directly contradicts its developers' carefully constructed marketing aura of inevitability, some of them perceive it as an attack. It's not. Good luck to 'em. And to nds32 and csky which have been added to the linux arch/ directory since riscv was. I remember when java wanted to become "the software platform" the same way riscv wants to become "the processor". And now it's this javascript assembly "webapps" thing that wants to be "the platform". And lo, we shall succeed so mightily as to become the monoculture forevermore, alelujiah, amen. Where have I heard that before...

Remember when I mentioned the fdpic-on-mmu work doesn't seem to have made it upstream into vanilla linux? Personally I suspect it's because linux-kernel development has aged into a tight exclusive clique:

Which of course didn't stop the fuchsia guys from getting a lot of blowback for exploring alternatives to it, of course. How dare they write new code when there was a "winner"...

I then made a second attempt to answer that last question more tactfully::

> Which requirements do you expect to split the market between J-Core and
> RISC-V? - Andy Bennett

Why would the market narrow to that?

The linux arch/ directory has alpha, arc, arm, armv64, c6xx, csky, h8300, hexagon, ia64, m68k, microblaze, mips, nds32, nios2, openrisc, parisc, powerpc, riscv, s390, sh, sparc, unicore32, x86, and xtensa. That's after removing blackfin, cris, frv, m32r, metag, mn10300, score, and tile as unmaintained, for values of "unmaintained" that probably have more to do with:

than it does with blackfin's market share. (Or alpha, ia64, and parisc staying in.)

Sure j-core is open (and arch/sh/configs/j2_defconfig was added to Linux a year before the arch/riscv directory), but powerpc is also open and openrisc always was. At the height of "all the world's a vax" it wasn't true, at the height of "all the world's a 386" it wasn't either, and we're just now entering "all the world's an arm" where it won't be.

Speaking of ARM, why are you sure nobody's going to resume work on now that more patents have expired? Or that if a serious open competitor did emerge as a market threat to arm's dominance (which from their perspective hasn't remotely happened yet) that Arm itself would never consider pulling a netscape with an open base they could sell proprietary extensions to? Heck, I wouldn't put it past Google to buy them and open it given (Remember when they bought Motorola's phone business?) Meanwhile Apple, which is switching its macs to arm right now, wouldn't exactly object: they love being open-adjacent ever since they hired FreeBSD devs to create Darwin. Clang/LLVM was an apple project (hiring the grad student and giving him a dev team because they objected to gcc going GPLv3). They _want_ to be the 20% proprietary cap on an 80% open market.

I find "inevitability" arguments tiring. I remember when the Java developers expected all software to be Java. I remember when itanium was The Future. I sat through something like 17 consecutive "year of the linux desktop". Proclaiming "inevitability" as a marketing strategy is as old as Sun-Tzu: convince your opponent that everything _not_ you will be swept away and everyone must jump on board this self-fulfilling prophecy now or be left behind. But personally I've always seen it as a sign of weakness: if that's your big pitch it means you're not leading with actual technical arguments in favor of their thing. Making a populist/intimidation argument that this technology is better funded and may have tied up distribution channels the way Windows was/did does not endear it to me either: I wasn't a Windows developer. I've never had a facebook account. I never had an AOL account. I remember the ELC year when everything was Meego, and the year when everything was Tizen. I believe everything is still currently Yocto unless somebody wrote the Linux Foundation a bigger check.

This isn't meant as an attack on Risc-V, good luck to 'em. And to nds32 and csky which have been added to the linux arch/ directory since riscv was. Maybe the people saying javascript webapps will render "the processor" irrelevant are right, and that will become the one and only type of software everywhere (somehow abstracting away the os kernel, which will be written in webassembly too... hey, Transmeta almost made that sort of thing work once upon a time)... but I doubt it. And I'm not really interested. It's not a new argument to go "And lo, we shall succeed so mightily as to become the new monoculture, perpetual and unassailable, alelujiah, amen, the future is already written", I've heard it before and it's BORING.

I expect ARM to be the dominant "big" processor over the next decade because the sheer momentum of a billion units per year would take a while to wind down, and because there's not a lot of headroom to get under a $5 raspberry pi zero with something cheaper. (You can get a cortex-m0 for 30 cents on alibaba in quantity 10; you can argue of "thumb2" and "aarch64" are the same architecture, but it's the same argument about whether the riscv "compressed" instruction set is the same architecture as the 32 bit riscv instruction set, isn't it? J-core is always 16 bits...)

Beyond the next decade, I really can't predict the future that far ahead? I expect to be surprised a lot.

I can tell you why the rise of x86 and arm happened: The switch to x86 was partly about design wins giving them distribution channels/volume, but the big driver was price/performance ratio (best bang for the buck). The switch to arm was initially driven by power consumption to performance ratio (best bang for the watt). Then arm sacrificed power efficiency to move into x86 performance turf, and x86 realized that power efficiency was a thing and did atom, and the two became less distinguishable and it became an ecosystem thing... I've given multiple talks about this already, for example.

I'm not sure "lack of per-chip license fees" is a strong argument for "displacing standardized high-volume chip runs" when a 45 nanometer mask costs a million dollars to make, and that is NOT a cutting edge fab. Cutting edge is 5 nanometer:

Cost of chip manufacturing has always been primarily a question of unit volume, you amortize the start-up costs over the largest possible production run because the fab is paying off BILLIONS in construction costs. At 5 nanometer, HUNDREDS of billions, with interest. "Everybody can make small runs of their own chip" helps the economics of this how exactly? With OLD fabs that have already paid everything off and are struggling to keep their doors open, sure. But by the time Moore's Law is stone dead enough a 5 nanometer fab is offering cheap academic shuttles, we are SO far into the future for all I know quantum computing and warp drives might have become real by then.

So if Risc-V wants to convince Apple to switch processors _again_, and to migrate Android and ChromeOS, and to take over The Cloud, and to come up with a raspberry pi replacement, and switch the business world off x86 windows machines, and replace arduino, and it's already a given that all this will definitely happen on a predictable schedule... I leave them to it? Clearly they don't need me if it's a done deal.

I think j-core is worth doing. I talked about some technical reasons I like j-core in the talk and could go into more. I could tell you about the relative merits of j2/j1/j0 vs cortex-m or atmel avr (the arduino CPU), new features we want to add, projects we're building around it, the work to extend the J2 SOC implementing patent-free HDMI support in the Turtle bitstream and switching from mmc to sd-1.0 as the patents expired (12.5 megabytes per second is SO much nicer than ~200 kilobytes per second to your main storage device, native compiling in 200k I/O bandwidth was painful even as a proof of concept)... and at the other end teaching j1 to do DMA and hardware threading while still fitting in an ice-40...

I do not find the Risc-V "there can be only one" thesis compelling. When the FSF stated writing the GNU command line tools, BSD already existed. When I maintained busybox, the gnu tools already existed. When I left busybox to create toybox I handed busybox off to the best maintainer I could find and continued to submit fixes and new commands to it for another 5 years (including a major redesign allowing busybox commands to live in a single file instead of spread out across 5 files, als These days toybox is part of the Android base image, meaning 1.3 billion new installations of it shipped last year. And yet busybox still exists, and is successful. The gnu tools still exist, and are successful. BSD still exists, and is the basis of MacOS and iOS.

J-core does not exist in a vacuum: our context includes cortex-m, and avr, and blackfin, and so on. We know what we want to do, and we know what THEY can do, and in that context we can confidently say we're good at our job. Risc-V wants to do absolutely everything, which means it has no idea what it wants to do. It's a solution in search of a problem, and every time anyone else does anything the question "why didn't you use Risc-V" comes up, and I'm very tired of it.

Every time Jeff has talked to the Risc-V developers and pointed out something J-core chose to do differently, the Risc-V developers add an extension to their architecture, making the chip bigger. Then they make the extension optional, so they can SAY it isn't bigger, instead the platform is fragmented and incompatible. But if you ignore that it lets them say their chip is small (because there's a version that is) and that their chip can win any microbenchmark you care to name (because there's a version that can). I am not interested in arguing with that.

You seem to be asking why we're ignoring Risc-V's marketing of itself as "inevitable", in the same way Itanium was (, the same way Java Applications and Linux on the Desktop were inevitable, the same way GPLv3 was inevitable, the same way was "going to have a profound impact on computers everywhere"...

You're asking the question of someone who doesn't have a facebook account, never had an AOL account, and was never a windows programmer. I don't find "inevitable" to be a very interesting argument, one way or the other.

As you can tell, my second attempt... didn't really help.

Anyway, there were a few more questions:

> Has j-core been implemented in any other soc toolsets, eg Migen
> (Symbiflow) or SpinalHDL? - David Price

Jeff question.

> getting people started, have you looked at apio? - David Price

Jeff question.

> I'd love to see debian packages for the tools. Their AVR (and in the
> past, msp430) toolchains have been excellent and easy to install - Andy Bennett

I'd love to see more stuff packaged up. Which tools are you referring to?

I'm building the fdpic toolchain (cross and native) with musl-cross-make, and this week we've been discussing updates to the ghdlsynth build script I posted to the j-core list back in november on the #vhdl channel of mithro's sky130 slack. (If I check the build script into github, it might be possible to have a github trigger actually compile it and host binaries?)

You can run our fdpic binaries using qemu-sh4 but we need to do some work on qemu to add a turtle board emulator and proper j2 -cpu type. (It's sh2 with the sh3 bit shift instructions backported, plus cmpxchg.)

What I want to do is a proper getting started walkthrough as a youtube video series, but that implies people have boards. A couple years ago we tried to get people started using a cheap $50 board from India (the Numato Mimas v2) but other than bootling linux to a shell prompt there wasn't anything you could DO on that board. Turtle has a bunch of GPIO and I/O devices you can play with, and plenty of free space in the FPGA to wire up more hardware. The Mimas... didn't, and turned into quite the dead end for wannabe fpga enthusiasts.

So our next big todo item is getting the turtle boards up on crowd supply, and then maybe we'd make a docker image with all the tools preinstalled to get people started easily?

> Great stuff! Got me inspired, thank you! - Yuri Cauwerts

Glad you liked it. :)

> When will the MMU systems be available for mere mortals? - Valery Ushakov

Jeff question.

I still have the window open. I should make a third attempt at answering the risc-v questions politely and non-confrontationally. (I'm not a Risc-V expert. I wasn't a Windows expert either. People insisting I have to be a Windows expert in order to justify NOT using Windows pretty much guarantee I'm never going to care about their thing, but I don't want to spend all my time talking about THEIR THING instead of about my thing which I do have some knowledge of. Many people I want nothing to do with have a black belt in making everything always be all about them.)

July 14, 2020

Reading Google's approved license list and it's kind of fascinating. There's no actual link to 0BSD (which could use the spdx page which links to my own page on it so two links for one there, although the one paragraph description on Wikipedia[citation needed] is pretty concise), but the more interesting part is right after the license list they have one of those "Public Domain: threat or meanace" sections lawyers tend to do that doesn't QUITE explain what the problem is.

The problem is capitalism wants things to be owned. Even "airspace" has to belong to somebody. You can't just fly over land. Yes birds have been doing it for millions of years but YOU can't, that's somebody's air and their inability to fly doesn't mean they don't own it.

Releasing copyrighted material into the public domain is like releasing land into the public domain. There are public parks, but you can't just buy property and declare it public land: there's insane legal hoops you have to go through to NOT own it anymore, and then they'll say no because who pays the property tax? (It's a field with trees in it. Yes, but those trees get charged a fixed amount every year and must pay because CAPITALISM.)

Before the Baby Boom it was easy to abandon land, and it used to be easy to abandon copyrights into the public domain, but as Boomer Senility has boiled off all nuance, distilling extreme fundamentalist versions of old ideas, Late Stage Capitalism has reached the idea of anything anywhere NOT BEING OWNED as just... inconceivable. Radio frequences are not just owned but auctioned off for billions of dollars. (Isn't that basically a color of light? Yes it is! Don't the sun and stars and thermal noise shine in basically all frequencies? Absolutely! Now pay up.) We'll be assigning property rights in low earth orbit soon (that's MY orbit your satellite's in, pay me rent)...

So these days, if you want public domain equivalent code, you can't actually give up ownership because Boomer Senility won't let you. You have to post a "trespassers welcome" sign saying that everyone, everywhere, is welcome onto YOUR land that you definitely own because you can't NOT own it, and when you die it'll be inherited by some distant relative you've never even met who will try their hardest to squeeze every dime out of it so the permission statement had better be unassailably legally valid and nailed down hard. And half your sign needs to be "no lifeguard on duty, swim at your own risk" disclaimer crap or the lawyers insist you're Doing It Wrong.

When the last Boomer dies the rest of us can admit that capitalism goes on the Dead Philosophy pile with haruspicy, monarchy, the spanish inquisition, and pyramid building. It's a thing we did for a while, then stopped because it made no sense. And intellectual property is a facet of capitalism: even ideas can't NOT be owned. (Most artists want attribution and sponsorship, ownership isn't really either. You only really worry about piracy once you've conquered obscurity, until then it doesn't matter as long as they got your name right.) This is how society always changes, the kids believe something else and the geezers die still screaming defiance that Vinyl was Better than CDs while the rest of us aren't sure when we last used a physical CD drive.

July 13, 2020

All that oil china bought back when prices went to zero is coming into port and they can't store it fast enough. This is unlikely to increase future demand any time soon. 31 US oil companies have gone bankrupt so far this year.

The USA does not have any "self made men" anymore. William H Gates III ("Trey" to his friends) got the IBM PC contract for MS-DOS (despite his company being too small to qualify as a vendor according to IBM's rules) because his mother Mary was on the board of directors of the Red Cross with IBM's CEO and he made an exception for "Mary's boy". Jeff Bezos' parents gave him a quarter million dollars to bail out Amazon in 1995. Tax the plutocracy white and guillotine the billionaires.

Police continue to suck, in part because police unions are guilds, not unions. They're also charging protestors with gratuitous felonies and we pretty much burn down the whole system at that point. We're all just waiting for the Boomers to die. The fixes are easy they just involve guillotining the billionaires and redirecting the amount the government spends each year on maintaining inequality (from fossil fuel subsidies and racist farm subsidies to police protecting plutocrats' assets) to basic income instead. The Boomer media got tired of the protests, but the protests are still happening. The Boomers refuse to stop driving, but every crash is an excuse not to fix their car.

July 12, 2020

Got the next lump of toysh code checked in, after almost exactly a one month gap since the last commit to sh.c. This stuff is hard.

Now I'm debugging it and adding more tests, because "implemented a design that made sense in my head" and "it compiled and didn't introduce obvious nothing-works-anymore regressions" is not remotely the same as "done". In fact the new design implements ${x::} but not ${x//} regex stuff, or the case folding, or...

And one of the tests segfaults, with glibc's useless "here's a stack dump of an executable with no symbols, to scroll off the actually useful information, in a way you can't easily disable". Thanks, glibc: you remain the opposite of helpful. And not in a "you're a cat, you're allowed" way but in a "dishwashing liquid in the dishwasher, suds all over the kitchen" sort of way.

As much as I'm frustrated by musl, at least it's not a self-defeating self-aggrandizing front for fundamentalist prostletyzing that profoundly sucks at their nominal purpose while pulling effort AWAY from all the organizations trying to do it right. The FSF and PETA are the same class of organization: Does Not Do What It Says On The Tin, Instead Actively Harms its Stated Cause. In brief: avoid.

I may be a little stressed right now. I _know_ I'm irritable. Trying not to show it in my blog on even numbered days, though.

Heh, more evidence that the Graphics Interchange Format continues not to be the Giraffe Interchange Format.

July 11, 2020

Seattle Police Department vows that if their budget is cut they'll fire their black officers first. It may be hyperbole to say the cops are such assholes that nature itself is rising against them, but it may also be true.

The protests and Seattle's autonomous zone are having an impact, but it all needs to go. The whole system is rotten, guillotine the billionaires. No, seriously. Make that the law: if you hoard a billion dollars for a full year, it's a capital offense. That's plenty of time to give it away. Don't wimp out at the last minute, have the courage of your convictions. The end of the Boomers is the end of capitalism. Similarly, abolish the police is meant literally. (The Daily Show had a lovely interview on that which is where I learned that "reform" always increases police budgets, which is why deflection trying to switch from "defund" to "reform" never works.) Other movements like prison abolition also mean it literally.

But how could society possibly work without kings, without priests, without slaves, without ritual human sacrifice? (You can't just NOT cut people's hearts out and throw them into a bog, the sun would stop rising!) In reality a society cleansed of Boomer ideas could easily work better than it does now, and we know this because it USED to. The top tax rate was 90% until LBJ lowered it and still 70% in 1980. Before the Boomers corporations WEREN'T people, and before 1970 corporate executives had a responsibility to the employees and customers, NOT just "shareholder value" to the exclusion of all else.

The USA didn't even have an immigration policy until 1889, before that people just showed up. (Sure we persecuted some classes of people, african, native american, chinese, war with mexico... but that was pure racism refusing to acknowledge their humanity under any circumstances, not quotas of people allowed to come in and assimilate as citizens to avoid diluting the purity of WASP blood, that was a new idea the KKK had when they rejoined after the civil war and got back into congress to pass new laws. And yes, this was 50 years AFTER the irish potato famine with millions of people suddenly "showing up" in the USA, and eventually assimilating just fine. As with most suburbs being named after what was paved over to install them ("oak grove", "deerfield", etc) the Statue of Liberty's 1886 dedication marked the end of the poem on its plaque being true. "Yeah, we used to be like that. It made the country huge and powerful. Then parasite plutocrats took over during the Guilded Age, found racism an EXCELLENT tool the 1% could use to divide and conquer the 99%, and we stopped. Here's a gravestone for those ideals, a great big statue for the tomb."

The USA was founded by breaking away from from plutocrats (dumped their tea in the harbor), fought a civil war against plutocrats who insisted upon literally owning people, and stamped down the guilded age plutocrats (whose excessive parasitism caused the Great Depression) with FDR's new Deal and World War II solidarity. Then Reagan brought it all back (tearing out the taxes and regulation we'd put in place to prevent inherited generational wealth from accumulating) and we've got to guillotine the billionaires to get it back under control.

So when people say "Abolish ICE", they mean it. 19 years ago in response to the World Trade Center bombing the George W. Bush administration smashed border patrol and the customs bureau together into a single organization tasked with both letting people in and keeping them out. It was INSANELY STUPID at the time, but so was everything those "duct tape and plastic sheeting" clowns ever did. They were there to embezzle billions via haliburton and blackwater and such, actually running the government was only interesting to them when they could steal stuff or cripple things like the IRS and EPA that cost billionaires money.

ICE literally creates the problem it claims to address. We had an undefended border with canada through Y2K, the only reason the border with mexico was different was racism (and the legacy of our own banana republic meddling with Mexico's neighbors spilling back our way). But even then, the stupid "build a wall" rhetoric is because there still wasn't one in 2016, because we'd never NEEDED one. Before ICE, people walking in from mexico was normal: they pick our crops. Without them, US agriculture doesn't FUNCTION.

The FBI handling domestic investigations and the CIA handling foreign ones were explicitly separated for the same reason: smashing them together into Homeland Security meant domestic surveilance did to US citizens what the CIA was doing to Fidel Castro, and when Snowden told everybody how bad it had gotten 10 years later we all went "gee, what a surprise, TEAR IT ALL DOWN NOW" but the Boomers can't see anything wrong in endless escalation because they're too old to EVER FEEL SAFE ABOUT ANYTHING EVER. Death is coming for them, and they want BARBED WIRE AND GUARD TOWERS WITH SNIPERS to stop old age from rendering them irrelevant. And those kids these days with their rhytmic music, that's bad too. Everybody needs to get off their lawn so they can yell at cloud computing in peace. They are quaking in their boots in fear, but it's because they're senile old fogies about to die, not because the world is different.

We got into this mess because Boomers like Bill Clinton replaced all the other social services we used to have with police. (The same way the federal defense budget ballooned to be bigger than the next 8 countries combined: it's NEVER enough for Boomers to feel safe, nothing ever could be.) John Oliver's excellent coverage of this gives a shout-out to Bill Clinton's massive expansion of the police in the 90's, and works his way up to outright mockery of 77 year old Joe Biden; the Democrats are Good Cop in the plutocrats' two party Good Cop/Bad Cop system. Nancy Pelosi is 80. Chuck Schumer is 69. Mandatory retirment at 65 was commonplace until Ronald Reagan outlawed it in 1986. You can't vote younger than 18 or drink younger than 21, and can't be president younger than 35 (which is why AOC couldn't run this time), but we have an 80 year old speaker of the house and Biden would turn 80 in his first term and that's just fine, and the Supreme Court hinges on Ruth Bader Ginsberg (who turned 80 during Obama's FIRST TERM) not dying. This is 15 years after what used to be mandatory retirement.

Getting back to specifically abolishing the police (and private for-profit prisons), replacing the carceral state with JUST basic income and medicare for all (including mental health and drug treatment) would remove most need for subsistence crime. Educationally addressing racism and misogyny would remove the two largest sources of violence. Also, the FBI says they CATCH $300 billion of white collar crime annually, and the real amounts are generally estimated much higher. When you add in stuff like wage theft that aren't even prosecuted as crimes, the annual $50 billion cost of shoplifting is a rounding error. The big thefts have always been by those in power (and only called thefts when they lose power). Mall cops do not keep anyone safe, they're there to make the property owners FEEL safe.

The Boomers are too old to learn or change, but society constantly does. The society the Boomers lived in is broken and rotting. Tear it all down when they're gone. The Boomers' unquestioned assumptions deserve rejection, the world never had to work that way, didn't used to, and all their crap can just stop when they do.

July 10, 2020

Still wrestling with toysh, almost got the new ${variable/slice/code} working. It's compiling, now I'm trying to fix up enough regressions that checking it in doesn't break basic variable resolution.

There's chunks of job control in this commit because that's what I was working on when I forked off on this tangent, but that's ok. If you type jobs it displays state that never gets populated, wheee. It's still progress, working on it...

July 9, 2020

Police are still lying racists. Military morale is understandably low right now, but so far most of them do NOT seem to be following the white house's orders to commit war crimes.

The supreme court's tax return ruling was carefully crafted to release zero information while SEEMING like it did, to avoid triggering more protests. Meanwhile protests continue, as does the obvious racism and hypocrisy and blame shifting.

Another article about how means testing is just a way of preventing programs from doing their job. If you can't stop a program from being created, adding means testing lets you have it without having it, because nobody ever qualifies.

July 8, 2020

The Alpine devs are taking a look at toybox, which is nice in theory. I got a set of bugfixes to stuff in pending, and explained what pending is for. (There's a README. Possibly the README needs to be more expicit? Not sure how to make it more prominent. The build warns in red about using stuff out of pending...)

One of the proposed fixes is to add an extra header #include that's... already in the next header it #includes, and has been since 2016? The patch "fixes" a bug I not only can't reproduce, but can't figure out how anyone else could experience on the kernel versions they claim to be using?

Alas, it's hard to link to the web archive because whatever strange form of HTML email this dev is using gets completely scrubbed by the archive software, and when I pointed that out they responded by... emailing me privately and not cc-ing the list anymore.

July 6, 2020

What does bash WANT here? Grrr...

$ cat << ABC  DEF
> thing
> ABC\ \ DEF
> ^C
$ cat << ABC DEF
> ^C

Ah, eventually figured it out: if you don't quote the EOF then word splitting happens and it's basically parsing as cat DEF <*lt; << ABC because the redirect operator eats the next argument but that's JUST the ABC. (Whitespace expansion doesn't trigger $IFS word splitting in this case and I tried to test it from the command line, and got confused.

At least I didn't bother Chet with this one. (I've basically reached the end of "ask questions about how this works" and am trying to get code running which I can then debug and correct. Almost there.)

July 5, 2020

In honor of July 4, Oregon police were giving nazi salutes. Meanwhile the GOP is finding still more ways to do voter suppression.

Meanwhile, the democrats are Good Cop. Remember, Good Cop and Bad Cop are just two cops who flipped a coin at the start of the shift to see which role each would play today: the carrot or the stick. You never GET the carrot, it dangles out of your reach endlessly. The stick makes regular contact. This is why the Democrats are incompetent and the Republicans are evil, both are sponsored by plutocrats. Hillary's speeches to Goldman Sachs were not out of character.

Right now it is important to break the stick. NEXT it's important to break the carrot. But most important is to guillotine the billionaires, who are the source of both carrot and stick and can replace them easily if left in power. Billionaires hoarding money is what prevents universal basic income. A parasite class that has collected more than half of all wealth into the hands of less than 1% of the population is why the rest of us DON'T have twice as much right now, or else work half as much for what we have now. They are evil, and they try to explain away simple math with lies. Kings and clergy claimed to be necessary too, turns out they were also lying.

July 4, 2020

Mithro pointed me at the sky130 open fab project which looks interesting on the j-core side of things. I've passed it on...

Oh goddess I broke down and logged into linkedin to respond to a connection request from someone I actually knew, and it's gone duolingo levels of clingy in email. (A while back I tried duolingo's japanese thing because Fuzzy was learning french with it, but A) I didn't really like it, B) CREEPY OWL IS CLINGLY AND ENDLESSLY PESTERING, STOPPIT. After multiple months the pestering tailed off, and I opened the app again and did ONE round of things and it's been emailing me daily updates on my "progress" ever since which I CAN'T SHUT OFF. Yeah I can mail filter 'em to the trash folder but it's the principle of the thing.)

Sigh. Linkedin was abusive BEFORE microsoft bought them. I only ever made an account to see if there was a way to get it to STOP EMAILING ME. (There was not.) Remind me to never log in there again, it wakes the beast...

July 3, 2020

The Boomers have gone to full pearl-clutching prudism attempting to outlaw sex entirely. They've been idolizing altzheimer's for years (since Ronald Reagan dodged Iran Contra because he "couldn't remember" anything about it), because dementia makes white men extra-confident when they can't remember ever having been wrong about anything.

After we defund the police (and replace them with actual mental health and homeless services and so on) we need to impeach a whole bunch of judges too, and bits of the military and there are other fixes necessary on our way to sweep away the remains of the GOP. There is so much we can do if we just stop being racist. As the old saying goes, "this is why we can't have nice things". As in the literal reason we can't have an NHS and significant vacation time like canada and australia and every european country is because racism: if we have nice things then "those people" would get nice things, and we'd rather be homeless than let brown people have nice houses too.

I want basic income. I'm aware that means the entire viewership of Faux News would also get basic income. The idea that 4chan trolls and the incels swatting every gamer girl who dares show her face on twitch having basic income and being able to spend MORE time doing horrible things is distressing to me. But helping everybody means helping people you hate. Deal with it. Hurting yourself to hurt "them" is stupid. Setting your house on fire so it spreads to your neighbors is childish. Means-testing is self defeating, any attempt at filtering so only the "right" people get benefits destroys the benefits program, every time.

The argument isn't really about whether we CAN do these things that every other country has already done, or the new things (like universal basic income) the advance of technology makes possible. Of course this country can literally feed itself a dozen times over, 90% of modern "farm" culture is about getting tax breaks and subsidies on investment property until the condo developers are ready to pave it over (which is why they vote republican: it's rich landowners pulling a scam, the reason they use undocumented immigrants as labor is so they can defraud them too. I'm reading a thread about sweet potato laundering. It's like money laundering, except for sweet potatoes. Really! If any group consistently votes republican, their entire business model is a scam, you just haven't figured out HOW yet).

We deny ourselves things like a USA NHS because racists can't stand the idea of black people benefitting. UBI is easy for real countries to do and it's a necessity for handling the end of capitalism, which would also let us end intellectual property law. Capitalism is past its sell-by date, and it's killing people. It's hard to understand the scope of the problem, but the coming rent default crisis may get some attention.

Meanwhile, the main reason "All Cops Are Bastards" is those who aren't get fired. The "behind the bastards" podcast did a 6 part series on the history of policing in the USA.

I am shocked, shocked to find out that the founder of Cards Against Humanity is having a me too moment.

July 2, 2020

Wow, this tweet sums up my attitude to the linux kernel development community amazingly well. ( My community is terrible.)

I REALLY want a better way to follow Dr. Taber's writing than twitter threads, because she writes amazing stuff which is easy to miss and hard to catch up on if you turn your back for a few days. By the time you're trying to trace tangents back ot the source you start wondering "if I saved a link to the start of the thread, how would I ever find this branch again?"

I occasionally get cc'd on projects switching license to 0BSD, which is cool. I should do a proper "Why 0BSD" talk and/or writeup. I've done lots of pieces of it in various places, but haven't done a single coherent writeup I'm aware of. (Alas, it's kind of a big thing to do it right.)

I suppose it was only a matter of time. Human gene editing on living adults was part of the star trek future. I believe it was also part of the cataclysmic backstory (the collapse of capitalism involved war and a bit of a dark age in that continuity), and had since been somewhere between outlawed and heavily regulated (not just Kahn, but Julian Bashir on DS9 having illegal genetic modifications his parents went to prison for). Still, yay treating heart disease...?

July 1, 2020

Oh hey, twitter went through my history and deleted some _other_ tweets that said "guillotine the billionaires". There's multiple "this tweet is no longer available" holes on the first page. Took 'em long enough, since that's what they cancelled my login for in the first place. Of course they haven't got them all yet. (I noticed because an Amazon recruiter emailed me and wondered if I'd changed my mind about working for them.)

Patreon has been emailing me about sales tax for weeks, and today I sat down to try to do whatever it wants but apparently I have to rewrite every single patreon goal? Because it's assigned tax or no tax to each one via keyword heuristics, but if I go through and edit those to manually set them it has a wizard that insists I add other new information to each goal. My patreon goals have names like "do the thing", it's a glorified tip jar offering people the ability to exprss support for my open source work. The main information from the selections was was whether I should spend time on toolchains, system builder, or toybox.

Anyway, I pressed the "don't charge anybody this month" button again so I don't have to worry about it.

June 30, 2020

I started a cleanup fork of the new j-core build repo.

We never use $TEST_DIRS2, I'm removing it because it's easy enough to add back when there's a user. (Infrastructure in search of a user bit-rots.)

We set $RELEASE using hg instead of git: it should be using "git describe --tags" but we've never tagged anything in the git repo so it can't find a base tag to say what we're X commits ahead of. (Should we tag what we released?)

"make clean" has some things I can figure out how to fix (components/cpu/cache needs an extra ../ in front of several paths), and some I don't understand:

make[1]: Entering directory '/home/landley/jcore/clean2/components/ddr2'
Makefile:14: ../icache/ No such file or directory
make[1]: *** No rule to make target '../icache/'.  Stop.

There's no icache directory anywhere in what we released? Hmmm...

June 29, 2020

It's official, the Golden State Killer was a cop. And when not serial killers, the police have always been surprisingly useless. The protests against them continue, as does the police brutality.

The GOP endlessly betrays the military, here's a thread and the latest.

It turns out the reason Japan never had that much problem with coronavirus is masks work.

Remember the thread about how the british were basically nazis a century earlier who just got away with their genocide to the point they could write the history books? (Instead of a thousand year reich on land stolen by infantry plus concentration camps, the sun never set on the British Empire built on land stolen by the navy plus selling drugs and killing anyone who objected, with extra prudishness and capitalism.) Anyway, here's a thread of horrible things the british did to Africa.

So many issues dropped on the floor are still true, but then we knew that, and there's plenty of new ones, and here's some weapons-grade stupid, and the usual white male assholes who think the rules don't apply to them. The GOP continues to demonstrate that the cruelty is the point, not a side effect of their policies but the explicit objective. But then we already already know this stuff.

Captain Awkward had a really good essay.

June 28, 2020

The Dell bios in my latop got confused somewhow, probably by the extension cord I bought so I could sit 3 tables away from the outlet late at night at UT, and social distance even when somebody else is there; not a whole lot of other opportunities to get out of the house and work away from the cats, and the round trip walk is something like 13,000 steps according to the Android "let us track your every move for your own good" app.

The symptom of the Dell BIOS glitch is that Linux would suspend, it would stay suspended for one dim/brighten cycle of the LED, and then it would turn itself back on. Initially it only did this when plugged in (possibly the extension cord put it undervolt slightly, although it was happily charging? But the bios power monitoring stuff set some sort of flag Linux didn't know how to clear, so that it would resume any time it was plugged in.

But I could work around that by unplugging it before suspending it... until today, when it powered itself on in my backpack during the walk (and was VERY hot when I took it out, although still running fine with half the battery left). And rather than getting work done, I spent hours closing windows so I can power it off properly before walking home.

Luckily gmail has decided to allow me to send and receive email through my phone tether again (no idea why, I clicked "send" on an email window I'd finished without thinking and it went through, and it can download emails too). Whatever weirdness in the gmail servers was vetoing it seems to have cleared up? (Whatever it was survived a reboot here so it probably isn't a strange route cached at this end, and it cleared up BEFORE I rebooted the laptop again, since I'm trying to clean up and close down to do that.)

June 27, 2020

11 emails got through my spam filters from the various democratic fundraising panic-mongers today. I must give them money because the wave of recalls of governors could lead to a constitutional convention enshrining the GOP in power, and I must give them money because polls show the GOP's historic unpopularity could allow the democrats to sweep the field. (The fundraising shills see no contradiction.)

On the one hand, I'm sympathetic to their cause. On the other, I have ZERO guilt about deleting all that crap unread and adding more spam filter entries. I gave small amounts of money to elizabeth warren and AOC last year. I never agreed to sign up to any mailing lists when doing so. I'm being emailed from a dozen different sources, and have LEARNED MY LESSON ABOUT EVER GIVING THESE CLOWNS MONEY AGAIN.

The democrats are Good Cop, which is still a servant of the plutocracy. Their nominee is an octogenarian. I'm getting trump campaign ads on youtube about how Biden is too old to be president and going "yeah, good point". There is no positive case to be made for Biden, it's 100% a vote against. An 80 year old man who thinks he should be driving the country is automatically disqualified, but his opponent is a literally demented racist con artist who's surrounded himself with literal nazis and has done a dozen things that would be treason if anyone else did them.

Meanwhile, voter suppression has eliminated my local polling place. The one two blocks away from me has been replaced by one eight blocks away, which isn't as bad as I originally thought (1500 barbara jordan blvd is _not_ 15th street, which is 30 blocks south of 45th street) but still annoying.

You know how we had World War I and World War II? Welcome to Cold War II. (Except Russia has an economy the size of Italy's _while_ being one of the top 3 oil and gas producers in the world. Without that, what's left?)

The army does not lead. The army is not _for_ leading. The entire point of basic training is to turn out obedient soldiers who need to be told what to do.

GOP science denial is the same for coronavirus, climate change, and evolution. The police are worse than you think, but Cops gonna cop. The oil companies aren't going down quietly. Here's an excellent thread.

June 26, 2020

I've known about the arm-based macs for a while. Charles Stross's twitter has been putting together pieces on that for months. But more to the point, I myself predicted this more than ten years ago, and wrote about it repeatedly. And I'm by no means alone in that.

The numbers make it an obvious move: Apple sold 217.7 million arm-based iphones in 2018, and 18.2 million x86-64 macs. That's 10 times as many devices _before_ you add stuff like ipads. "Yeah but margins"... the estimated gross margin on the iPhone X was 64 percent. Way more money has gone into arm for a decade now, which means way more R&D spending. Having a rump x86 platform for historical reasons stopped making sense a while ago, it's just overcoming the friction of migrating everything over.

This transition is mainframe->minicomputer->microcomputer->smartphone. The phrase "All the World's a VAX" was a symptom of the minicomputer's standardization around a common platform that became the category killer due to the positive feedback loop of network effects: users are drawn to the system with the most software, and programmers write software for the system with the most users. When the microcomputer standardized around the IBM PC all the world became a 386 (then the backwards-compatible x86-64), and now both iPhone and Android are arm processors under the hood. Using an x86 PC in 2020 is like using a VAX in 1990: existing users keep at it but nobody new is going there and the developer pool will age out.

Google's been sticking arm in chromebooks, but hasn't really laid down the law about ARM development workstations. It's been cross-compiling from x86 PCs. I've been trying to fix that by making android self-hosting, but it's a hard thing for one guy to do part-time without official backing.

Oh well. Grinding away as best I can.

Meanwhile, I got a message on the toybox list in which its author probably didn't MEAN to say "I assure you, you will fail. Look at what I did instead. My project is so utterly superior to your folly, it's a shame you cannot perceive my greatness, if you only you welcome my project into your heart you will be bowled over by its magnificence and abandon your doomed frivolity, could you but conceive the wondrous splendour tantalizingly beyond the limits of your cognition."

Ok, what he actually said was:

...reading the blog is a bit painful because it's clear you will never finish your shell with the current strategy (and this is an informed opinion, after doing it myself).

I think you're less than 10% done with 3K lines of code. I think you will agree with my assessment if you [look at my stuff]...there are so many features you haven't even begun to think about.

A couple things I would suggest:

1) Learn about grammars and parsing...

2) Use some of the test cases and framework I developed...

It's... difficult to reply to this politely. I've been poking at shell stuff on and off since 2006 and maintained my own compiler fork for years, and he wants me to learn _about_ grammars and parsing? Like... that they exist?

His argument seems to be "tinycc was not designed like gcc, therefore it couldn't possibly work because I only understand one way to do it and must reach out to correct you if you try anything else". Except applied to the shell I'm not using yacc and lex in instead of the compiler I became interested in because it didn't use yacc and lex. (The simple design of tinycc is what attracted me to it in the first place.) And lex and yacc are both on the toybox roadmap, lex because it's in posix and not that hard to do, and yacc because the kernel added it as a build dependency in 2018, so yes I am aware they exist.

*shrug* If I _do_ have to write 9 times more code, I can. But I note that the whole of toybox (outside the pending directory) is currently 32,000 lines of C, so he's saying the shell _must_ be as big as the rest of toybox combined (implementing 206 commands). He can't conceive of it _not_ being that big. He insists it's not possible, and comes to my list to assert that impossibility directly at me, because watching me try is "painful".

I'm happy to take constructive criticism and am the first person to rail at how LONG all this is taking me, but... sigh.

June 25, 2020

Once again, The Onion Merely Documents Reality. There is no exaggeration for hyperbole because in the twilight of the Boomers, there's no room to exaggerate. But the protests are successfully making the Boomers uncomfortable, which is important and valuable work since the boomers stole all the wealth and of course blamed their kids for the lack. (Not stole the _money_, since that's a social construct they can just print at will. But the Boomers bought up all the land and housing, tied up all the avenues of social advancement with BS gatekeeping, and bought laws and politicians to enforce their worldview with them on top, while things like climate change, racism, and increasing inequality are Somebody Else's Problem they will die before addressing.)

The US oil shale industry turns out to have been a giant scam currently forcing lenders to write off $300 billion in loans, which never made a profit and only stayed in operation as long as they could endlessly borrow more money.

Suburbia was a giant federally subsidized racist project to enable white flight, and can't survive without the subsidies. And yet the idea of basic income remains inconceivable to Boomers.

The GOP is a terrorist organization, and they're finding new ways to cheat in elections because voter suppression is the only reason they still hold any office anywhere. Meanwhile the Tories are using Covid as a transparent excuse to abolish trial by jury.

Airbnb is terrible, so nobody's too sad they seem to be hurting financially.

Why is the Comic Book Legal Defense Fund is making women sign non-disclosure agreements preventing them from talking about being sexually harassed? Does Neil Gaiman know about this? He's still working with them...

Today I learned that the original 13th through 18th amendments, passed by congress and signed by president Buchanan, would have enshrined slavery in the constitution, with the 18th amendment literally saying support for slavery could never be repealed. The only reason they didn't get approved by enough states is the south couldn't wait and seceeded after Lincoln's election, starting the civil war. (But of course we don't teach this in school. Stem Stem Uber Alles, you can't be a bad person if you know enough science, as all the Nazi Scientists demonstrated. And therefore the Boomers stopped teaching the humanities, just like they ended manned flights to the moon as soon as it was clear they personally wouldn't be going, because if THEY didn't need it anymore nobody did.)

June 24, 2020

Ok, I THINK the variable expansion prefix cases are ${!} ${!@} ${!@Q} ${!x} ${!x@} ${!x@Q} ${!x#} ${!x[} ${#x} (not counting ${!x[*]} and ${#x[@]} which is a todo until array support). Yes, bash considers echo ${!@Q} an error (bad substitution) but if it's gonna accept ${#@Q} I think I should support both. Another inconsistency is that:

$ xx() { echo "${*@Q}";}; xx a b c d
'a' 'b' 'c' 'd'
$ xx() { echo "${@@Q}";}; xx a b c d
'a' 'b' 'c' 'd'

Should NOT produce the same output, that first one should be 'a b c d' because only "$@" splits words within quotes, I believe "$*" uses the first character of IFS to glue them together (and the default IFS is " \t\n"), which means the oggham nonblank space character sadly is not recognized by default as a word separator. Sadness. I'd ask posix what properly supporting utf8 should mean here, but Jorg Schilling isn't dead yet. Given that sort changed what alphabetical order means between ubuntu releases (because gnu/gnu/gnu/stallman/gnu), I expect adding proper utf8 space support in a future toysh release is within range of historical precedent. (And no, that had nothing to do with Ubuntu's dubious flirtation with the Defective Annoying SHell.)

Sigh. Chet Ramey keeps saying "mksh did that" or "that's what ksh93 does" and... if my question was "bash: who hurt you so you wound up like this", I would have my answer. But it's not what I asked?

C and unix managed to take over the world by being extremely simple for what they did. They staked out local peaks in design phase space and became category killers for them, and there was some local breakage like DOS "near" and "far" pointers or systems where char wasn't a byte, but mostly people carved out a common subset that made sense and the standards bodies documented that. Then the "unix wars" happened (starting with AT&T's drive to close up and commercialize the source), resulting in stupid fragmentation that almost killed unix until Linux came along and established a new de-facto standard. But C and Unix remain VERY GOOD at what they do, and it would be nice if people UNDER the age of 50 could still learn and use these technologies rather than reinventing the wheel badly.

I'm interested in implementing "what bash does" because that was the Linux de-facto standard. Linus Torvalds extended his terminal program to run bash specifically, that's why/how the Linux system call layer was created in the first place. Bash was THE shell of Linux until Ubuntu screwed up 15 years later, and ubuntu's mistake was so _spectacularly_ inept that the world wound up with systemd poorly addressing the problem ubuntu utterly failed to solve. Shuttleworth just never admitted his mistake and undid it.

But any time a single implementation carries the torch for a long while (bash, gcc, vim, netscape, linux, openssh, coreutils), you get a mix of "behavior you want" and "coincidental implementation detail corner cases" that are gratuitous sharp edges which should be filed off. Figuring out which is which is hard and subjective.

Decades of accumulated scar tissue are no excuse for winding up with crap like C++ instead of C. Needing a new incompatible version of the language every few years that everyone has to make a flag day transition porting their code to is not a good thing. Nor is being tied to a single irreproducible codebase that its own developers try and fail to replace.

C99 is still "good enough" 20 years later, and part of the reason is that there have BEEN so many independent implementations that had to work out what the common subset was and how to agree on necessary compatibility. Posix-2008 is still more or less good enough 12 years later and the main reason to use even _that_ instead of an earlier version is the 2008 update acnowledged Linux's openat() and friends to work around PATH_MAX limits and races (and that dprintf() is a thing).

Most of the useful tweaks to posix over the past 20 years have been scalability issues like large file support (terabyte disks) and 64 bit processors with gigs of ram. Other than that, they've removed stuff like tar and cpio that everybody still uses (ignoring their change), while FAILING to get rid of obsolete crap like sccs and ebcdic support in dd. And don't ask me what they were smoking replacing 'cc' with 'c99' because I couldn't tell you: since then there's been c11 and c18 which DO NOT MATTER because you can still feed K&R code into the compiler and it works. Call the compiler "cc", it is the C Compiler. (Not gcc, not clang: cc.) The main reason to move from c89 to c99 was the new uint32_t types with actually specified bit sizes, which LP64 did better anyway (uint32_t is just "unsigned" on every LP64 platform, which means everything except windows which as far as I'm concerned is "everything").

Ahem. Where was I? Implementing ${!@Q}, right.

June 23, 2020

A few days ago I got recruiter email du jour titled "Come Join our Billion Dollar Start Up", with the first paragraph:

Interested in joining one of the fastest-growing, venture-backed startups reimagining the $45B industry of enterprise physical security? At Verkada we are modernizing the way spaces stay secure and safe with our AI-based, easy-to-use management software and industry-grade cameras that enable advanced facial recognition, highly accurate motion detection, and other robust search features.

Which also mentioned that they were impressed by my contributions to the busybox project, which I handed off maintainership of 13 years ago and my last commit to was 9 years ago. (At a guess, it's because Bradley wanted a copyright notice when you typed "busybox" with the 3 maintainers to help lawsuit standing, and although he removed it again when I became a vocal opponent of the lawsuits continuing indefinitely, for several years busybox spat out my name when you ran it, which was not my idea.)

I deleted that email without replying, and today I got a follow-up email which I replied to honestly:

> I wanted to follow up with you about our opportunity here at Verkada. I imagine
> lots of companies reach out, however, I'm very impressed with your background
> and would love the opportunity to connect with you to tell you more about
> Verkada and what we're building.

You said in your first email you're doing AI based facial recognition tech to protect corporate assets, either from the company's own customers and employees or from the tens of millions of people currently protesting in the streets in lieu of sharpening guillotines.

> Let me know a good time to connect this week or early next week?

Half the "Boomers" were born before 1955 and the average US lifespan is 79, putting the LD50 on the Baby Boom somewhere around 2034, which seems a reasonable upper bound on when they lose political power. I do not expect the current form of capitalism to outlive them (the eight richest people in the world owning more than everyone else combined doesn't make sense to anyone younger than Boomers), the question is how bloody its end will be. The DNC's desire to replace the oldest president in history with someone who'd turn 80 in office suggests "very".

Another business model tightening the lid on inequality to let pressure build up is not something I want to stand near, let alone with. I would have thought palantir and emerdata had it covered, but apparently they're not good enough at blaming brown people yet?

No thanks,


I'm wondering if I was too harsh. It's not the recruiter's fault, but the idea of a billion dollar startup focusing on defense of corporate assets via facial recognition doing recruiting in the current political environment seems kinda creepy. Or is it just me?

I mean, the protests are continuing to escalate, the Resident is having dementia episodes so bad that all reporters have to be evacuated from the white house, how much endgame is left here? The world the Boomers knew was always completely artificial. It didn't exist before they did, and won't persist after their death. We have better ways to do basically everything now, we just can't deploy the new tricks until the old dogs roll over and play dead.

June 22, 2020

I meant to do shell programming tonight, but instead I have bug reports to field. Some of which I've been re-pinged about because I didn't get to them earlier...

June 21, 2020

So the GOP's going all in on voter suppression. Not even pretending anymore. Meanwhile the cops are murdering people and confiscating nearby cameras. Occasionally learning to pay lip service while people are looking, to buy time to stock up on military equipment while being utterly useless at their nominal jobs. They literally can't NOT be monsters, even to save their jobs.

Racism and misogyny have always had a divide and conquer aspect, but at their core they're bullies claiming other people as property, and convincing everyone who objects that they're a tiny isolated minority lost in a sea of "them".

I am reminded of a classic Dr. Who quote, "The very powerful and the very stupid have one thing in common. They don't alter their views to fit the facts. They alter the facts to fit the view. Which can be uncomfortable if you happen to be one of the facts that needs altering."

The pinkertons were a private security force guilded age capitalists like Andrew Carnegie hired to murder striking workers a century ago. (He later endowed Carnegie Hall so people would remember him as a philanthropist rather than a capitalist, the same way Alfred Nobel created the Nobel Prize so his obituary wouldn't just say "weapons manufacturer and war profiteer".)

The modern robber barons similarly point to the infrastructure they build, claiming that without rich people exploiting poor people we wouldn't have computers or railroads today. But what they're ACTUALLY trying to do is corner the market to profit from trends happening anyway, by getting there first and locking out the competition. Microsoft did not invent any new software in its entire history, when it didn't outright buy new products it copied other people's stuff and drove the actual inventors out of business. (In the process replacing the word "invention" with "innovation", which means "it's new to _us_, the novelty is that we're doing it now".) Facebook did not invent social media, it just captured the largest userbase via network effects and lock-in, decades of consistently unethical data collection and of course russian money laundering (when talk of zynga's criminal activity got too out of hand they created a game called "mafia wars" (well, cloned one) about the same way Boris Johnson pretended to make bus models out of cardboard). Of course back then, nobody took that sort of accusation seriously...

Modern cops fill the role of Pinkertons, intimidating protesting schoolteachers long before they had direct anti-cop protesters to maim. (They became the problem.)

The protests continue. The thread of police misbehavior is well over 500 entries and still going, and that's just the egregious stuff, not the endless microaggressions. They cannot be reformed.

The Boomers have always wanted more police standing around waiting for something to do. (And as usual with bullshit jobs, they make busy-work for themselves to justify their own existence. It's the civil version of an autoimmune disease.) Until the Boomers die, we're stuck in the past with them among with the rest of the rotting debris of expired Boomerdom, and nothing is going to get properly fixed.

Listening to what little kpop I have in my collection, in honor of the great work they've been doing. (I used to object to the lyric "dance dance dance 'till we run this town" on the theory... it doesn't work like that? I stan corrected: Quotus Ed Demonstratum.)

June 20, 2020

Hard to get traction on technical projects, the world's still on fire. I installed Merge Dragons on my phone, then deleted it again after it ate basically a day of productivity. (It's waaaaaay too skinner boxy for me.)

Still, adding lots of tests for toysh to pass. Here are three different behaviors:

$ abc=${a?bc} echo hello; echo blah
bash: a: bc
$ readonly abc=123; abc=def echo one && echo two
bash: abc: readonly variable
$ echo potato < /does/not/exist || echo hello
bash: /does/not/exist: No such file or directory

I'm getting the second two right at the moment, but the ${var?error message if unset} syntax is documented to exit the shell (if not interactive) in the bash man page, and that means I need different TYPES of error handling for the same action. (It can error-but-continue or error-and-abort. Great. A todo item.)

Then there's "echo > walroid ${a?blah}" not creating walroid, which toysh and bash are likely to _continue_ to do differently. In this case, the ${a?blah} variable resolution (which is an error) happens before the create-file redirect in bash. But in my shell, it handles the argument expansions in order, and when an argument is a redirect it Does The Thing right then and there, because the NOMMU support needs to exec as shortly as possible after vfork(), and you don't want to do error handling in vfork() child context with the parent blocked if you have _any_ choice int he matter. If you "echo > ${a?blah} walroid" it won't create the file because the argument expansion is a prerequisite for the redirect (and thus evaluated, and aborted, first), but if you "> name" it opens it right after resolving it, before looking at the next argument.

In this case the difference is "supporting nommu" vs "not supporting nommu", and I think the right thing to do is document the deviation and move on. (A deviation from bash, rather than from posix. I don't remember what if anything posix says here, and am unlikely to care while Jorg Schilling remains alive.) It's sequencing in an error recovery path: I suppose if a real user complained I could reevaluate and MAYBE adjust it. (Or maybe not, it would depend...)

A sequencing I do not get right (as in "matching bash") at the moment is:

$ ./sh -c 'abc=def > /does/not/exist; echo abc=$abc'
sh: /does/not/exist: No such file or directory

Bash prints abc=def because the assignment happens even if the redirect fails. Which is weird because it won't RUN a command but it'll run an ASSIGNMENT and... what? Hmmm. (I can adjust that to match, but ew?)

$ export abc=def > /does/not/exist
bash: /does/not/exist: No such file or directory
$ echo abc=$abc

That's bash. It's being inconsistent, doing local variable assignments but not assignments via builtins under the same circumstances.

Sigh, there's a certain amount of version skew WITHIN BASH, some of which I'm now responsible for by reporting this sort of thing to the maintainer. :P Do I care about this? Should I wait for somebody to complain and say it broke their script? Hmmm...

June 19, 2020

Oh dear. I think we know what the next financial crash looks like, and the epicenter is Softbank (the giant Japanese company that owns the ARM processor), which just used a company called Greensill to pull financial shenanigans on the level that destroyed Lehman Brothers, Arthur Anderson, and AIG circa 2008. This may be why Softbank is selling $20 billion dollars worth of its stake in T-mobile.

Remember how the 2008 financial crisis was basically the invention of the mortgage bond coming to fruition and the bills coming due? This greensill guy did something similar (used blockchain to securitize receivables). The problem isn't that Softbank invested $1.5 billion in Greensill, that's just a WeWork level mistake. No, the problem is Softbank dogfooded Greensill's product and applied it to all their own stuff, and it's infected all their own supply chains and finances. And this one is growing, maturing, and defaulting at internet speeds.

I'm listening to a podcast about this. Here's a few quotes from the first half hour:

"Companies turn their supply chain into a personal bank to invent new credit... A large company will extend their payment schedule to some ludicrous amount of time (200+ days) then if you want to be paid in 30 days you must use our reverse factoring partner... which turns the company's accounts payable from normal operating expenses into debt which is then owed to a financial institution which can be securitized and sold..."

"Reverse factor debt is recorded as operating costs... once the money leaves the factor to your books, it's not booked as debt... brighthouse had leverage ratios of 90-to-1 when it collapsed. The reverse factor is not legally a bank, it's a tech company... Greensill is the largest non-bank bond issuer in Europe."

Circa 26:30 in the podcast: "Uber isn't a tech company, it's an employment rights circumvention platform. AirBNB i's not a tech company it's a property and rent tenant's rights circumvention platform. Greensil's not a tech company, it's a financial regulation circumvention platform None of these tech companies are actually tech companies."

Ok, blockchain-based invoice processing created a new completely unregulated financial asset class, which is in the process of defaulting and collapsing, it's already somewhere north of a trillion dollars, and softbank at the center of it. It sounds really really bad, and I dunno how far the rot's spread.

Luckily, the current economy is completely fictitous, as I've mentioned rather a lot of times before. It's a bunch of numbers in a computer network that haven't represented anything real in living memory. Unfortunately, "there's no such thing as IBM, just a bunch of people pretending" can be both true and useless. When people riot over sports teams, people are still rioting. When stupid decision makers decide to impose unnecessary austerity, real people get hurt. The boomers will cling to capitalism until they die, they're too old to do anything else, and what THIS nonsense means is the amount of modern capitalism that's literally nothing but a giant scam drowns out the part that ISN'T by such a large ratio you can't even easily measure it.

Instead of yet another bailout, give every US citizen basic income. Politically, you can set the social security elligibility age to zero with a one page bill. You can "fund" it (prevent inflation caused by it) by bringing back the 92% tax rate on any earnings over $10 million/year, taxing stock buybacks the same as dividends, and cutting the military budget to no more than what the next 3 countries spend combined (rather than the next 8).

The Boomers will never stand for it, of course. Biden's would respond "over my dead body" but he turns 80 two years after the election, we can start work on lots of stuff that needs to happen over his dead body without impacting their schedules in any way...

June 18, 2020

At the UT table late at night, desperate need to blow my nose (cedar pollen!) and I dug up a Dotour oshibori out of a pocket in my backpack. This is sort of second derivative rude. (In japan it's hugely rude to blow your nose in public, you go to a restroom for that, but I'm not _in_ japan, this oshibori's been in my backpck so long it dried out through the plastic wrap and is just a napkin now. And in any case the point of coming here at 1am on a weeknight is nobody else being here...)

I'm to the point with anime subtitles where I can't really follow most of what they're saying, but I sometimes go "that's not actually what they just said". I listened to the japanese audio track of Groundhog Day on netflix the other night: I dunno if I've got it because I downloaded it in japan or of it's generally available now, but I'll take it. I suck at foreign languages and Japan's racists have used the pandemic as an excuse to forbid all foreigners visiting the country for the foreseeable future (presumably until the rescheduled olympics), but I'm still TRYING to learn this language...

Elliott is being really nice walking me through AOSP build and testing, but he just pointed me at cuttlefish, which that page puts next to another emulator and the way to figure out which to use is "ask the bionic maintainer". (This is why I compulsively write my own documentation. If you do not already know how to do this, where do you START. I also just spent 5 minutes trying to read the page before it, which is the conceptual equivalent of a forkbomb. I THINK what it's trying to say is:

A Generic System Image (GSI) is vanilla android built from unmodified Android Open Source Project code (with no out-of-tree additions) in a simple default configuration useful for testing. The only configuration selected when building a GSI is to specify what hardware (or emulator) the image should run on.

The GSI provides a common baseline, and is used to regression test that current android still works on the hardware by running the Vendor Test Suite (VTS) and Compatibility Test Suite (CTS).

Anyway, cuttlefish. Trying to build for that...

June 17, 2020

The resident's Progressive Supranulcear Palsy has advanced to his frontal lobe. There is no treatment, it is progressive and fatal. His con artist skills have been dedicated to covering for his increasing incapacity. But given how racist even places like silicon valley are, his supporters refuse to abandon him as long as he's still hurting the people they hate. (And given that he's hurting _everybody_...)

In this video a cop forces a weapon into prone protester's hand to retroactively justify the beating he's giving him. Cops kill people because they're insecure ("respek mah authoritai"), and with good reason. We're going about it wrong have no follow-up (all EMTs, no treatment or surgery) and should unbundle the services. Meanwhile, in response to the police abolition movement, cops offer to pepper spray students in their own classrooms less often (Why did LA's school police have a tank and grenade launchers? No seriously, why?) And of course the Golden State Killer was police officer. The police are the problem, it's not new, and they serve no other purpose.

Remember when the ACLU did the Good People On Both Sides thing defending Nazis from being punched? The protests are bigger than ever and accomplishing good things but the roots of the problem go deep. There's plenty of good videos on how the supposed good guys have been deeply insufficient. This isn't "equivalence", this is "Joe Biden is not the answer, he's a tourniquet at best". The real enemy is capitalists who fund racism as a defense mechanism for inequality. It's always been "let's you and him fight" sicking the poor against each other. (Again, the book "masterless men" is about that. I should read more books, there are some excellent ones out there but I have a copy of Masterless Men I haven't finished, a copy of The Box I'm like 3 pages into, I only made it halfway through Bullshit Jobs, but the audiobook is finally out.)

When the Boomers die, we burn down everything they ever touched. If you can't vote younger than 18, drink younger than 21, and be president younger than 35 then you can't hold elected office OLDER than 64. Mandatory retirement from public office: you get a gold watch and a pension on your 65th birthday and go into an advisory role where you are not the final arbiter of any decision.

Good thread on the intellectual errors at the heart of libertarianism. (From someone who thinks there's a point to it.)

June 16, 2020

I tried again to do an android build, left it running overnight, and today I ran "emulator" which said:

emulator: WARNING: encryption is off
Fontconfig warning: "/etc/fonts/fonts.conf", line 100: unknown element "blank"
queryCoreProfileSupport: swap interval not found
emulator: ERROR: VkCommonOperations.cpp:496: Failed to create Vulkan instance.
E0616 13:12:24.550453924 31310] check for SO_REUSEPORT: {"created":"@1592331144.550415611","description":"SO_REUSEPORT unavailable on compiling system","file":"/mnt/tmpfs/src/android/emu-master-dev/external/grpc/src/core/lib/iomgr/","file_line":169}
emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037

It popped up an empty window, which then sat there eating 100% of one CPU for an hour before I killed it. So that's nice.

Is it because I didn't build an image for it to run? Or didn't specify which image to run? Should it NOTICE it's not connecting to anything rather than spinning eating 100% cpu? And SO_REUSEPORT is in /usr/include/asm-generic/socket.h where it's #defined to 15 so what does it mean by "host system" here? Unknown element "blank"? Is failing to create a Vulkan instance fatal? If so why didn't it exit? Why is the emulator trying to connect to an adb daemon? If running adb itself will launch an adb daemon why won't the emulator launch it if it's not already running? Why didn't the instructions I was following mention the need for adb to...

So yeah, my experience with AOSP is about the same as usual. There's like a semester-long course in it I haven't had, and until then just trying to pick it up as you go along is a weird thing for a hobbyist to do, I guess?

I also broke threading in a reply I composed but haven't sent yet, but ever since Android updated itself a few months ago I haven't been able to access gmail through my phone tether, only through the home connection. (same issue from april, still broken I just live with it.) Neither the pop3 nor smtp servers will accept thunderbird logins when it's using my t-mobile connection, but it works fine from the home router. (Fetching gives the misleading "web login required" error message. Sending just claims the smtp password is wrong for any password.)

I thought it was ipv4 vs ipv6, but forcing dhcp to get an ipv4-only address on the phone tether doesn't help, while the Google Fiber connection "just works". I'm assuming that part of gmail has accumulated a full ogres-are-like-onions speech worth of "layers" in its codebase. I guess if I had Google Fee Fo Fum then my phone tether would also "just work". (I miss "don't be evil". It was good to have goals.)

But as with 2/3 of the ads on Youtube being "pay youtube to remove ads", if the reason to do it is because they broke _not_ doing it, it's Danegeld and goes in the "death first" bucket. I am ALREADY paying for netflix, hulu, and prime. I compromised enough to add crunchycrunch. I am NOT paying for disney+, hbo max, cbs all startrek, bbc iplayer, funimation... The services I _am_ paying for claim to be categorical, figure out how to work together and get paid rather than sending me a seperate bill for each and every show I watch. I object to being nickel and dimed with micropayments, I do not want to have to TRACK this nonsense.

Google could have bought twitter instead of creating Google+ and it could have bought netflix to get me as a customer instead of darth vader altering the bargain pray I don't alter it any further. And literally announcing plans to intentionally annoy your users into giving you money? That not only makes me implacably opposed to ever rewarding that behavior on principle, but to wait for the named decision maker to no longer work for the company before even considering re-evaluating that policy. You won't get a dime from me while the clown who ADMITS to doing that could ever call it a win. That particular Boomer is 60 years old, LD50 on Boomers is 79 years, so 50% chance that resolves by 2039. It's easy to be patient when you're waiting for someone specific to die.

My todo list runneth over and there's lots of stuff I'd love to spend focus on but don't get around to for years. Anything I can put in the "this too shall pass" bucket where just waiting it out DOES theoretically advance the agenda (if in a "the sun's only got so much hydrogen" purely theoretical way I may not personally profit from)... I can do that. I've mostly waited out Windows. I waited out AOL, and can wait out Facebook the same way. I will happily weaponize _not_ doing things. Any time someone thinks I'll come around given enough time and they can wait me out it's just adorable. I'm smiling at the inevitability of the ozymandias poem as it applies to them personally, not just on this issue but on any two atoms whoever it is ever exerted the most indirect influence over still having any discernable relationship to each other. Physics puts an expiration date on the last traces of their influence vanishing into the noise, and that can be my happy place if they want to put themselves in that category. (I've mentioned before having a vindictive streak with a high activation threshold. It mostly manifests these days as "ok, entropy is on my side on this one" and I don't usually explain the full meaning when I say I'm not gonna care about the Posix committee while Jorg Schilling is still involved, because it disturbs people. But the beauty is I don't _have_ to do anything. Just smile and wait.)

This doesn't mean I won't change my mind in response to new information, but if you haven't come up with a better argument or fresh data my opinion is not gonna _age_ into submission. I question my existing beliefs all the time, and I'm still using github despite their acquisition by microsoft (after years of boycotting expedia for less) because monkey-boy handed off to a new CEO who sees microsoft as properly third wave rather than second wave, and thus won't necessarily "embrace and extend" everything each new venture touches into a defense of Windows because third wave companies don't have a "core business" providing a corporate identity as "the company that does X". (Sigh, I wrote about this at length 20 years ago and revisited it 9 years ago. I should do another pass but... todo list runneth over.) But at the same time, Microsoft has earned an awful lot of distrust over the years, and expecting them to just stop monopoly leverage when it was all they did for so long that when you talk about their "bundling" you have to differentiate at least three different types (and when you say "the microsoft antitrust trial" you have to specify Judge Sporkin in 1994 or Judge Jackson in 1998)... I am reluctant to trust them with anything open-ended because there's a nonzero chance this newly sober company will fall off the wagon. I have advanced them a fixed amount of trust, I am currently being asked to advance more and am deeply uncomfortable, but there are valid arguments for it? The longer the new CEO does NOT spring a trap, the more comfortable I am, but today? Hmmm... (And I'd never _not_ have an exit strategy with those guys.)

So backing up about 3 tangents, I had to cut and paste-as-quotation the message I replied to from the web archive so I could compose a reply and send it when I get home, which doesn't marshall the message-id into a reply-to because implicit metadata, and that tends to break threading.

And yes, I'm still using pop3. The reason I don't use gmail's imap server is the issues with _that_ from 2012 never got fixed either, but then "living with obvious problems with gmail" dates back before that. Google's been too big to see who's underfoot for a while now, but I've also been pretty consistently on the wrong side of 80/20 decisions in the computer industry since I was ten years old, and am used to it.

June 15, 2020

One video today: the creator of Veggie Tales (and voice of Bob the Tomato) explains systemic racism in the United States in just under 18 minutes.

June 14, 2020

This chunk of shell is one of those big "bit off more than I can chew" sections, which boils down to me trying to write code and instead coming up with lots of tests and adding them to tests/sh.test to keep track of the things I need to implement. The resulting code can be relatively small and simple, but it does a lot of little fiddly things each of which has to be right, and many of which aren't obvious from the man page. (For example, ${!indirect} is listed several pages up from ${!prefix@} which is different from ${!array[@]} but all three are "saw ${! and did a thing".)

So I have a zillion open tabs with various command lines I've run to explore corner cases of bash variable resolution, and I'm slowly going through and closing them by adding sh.test entries for each one. It's slow and tedious, but that's what counts as "progress" at the moment.

Another thing I have to look forward to is marshalling random global state into subshells, such as the current set of function aguments, or TT.bangpid. Did you know that the $! value gets marshalled to subshells? (With fork() it's free but with vfork() you have to send it through the pipe.) "echo $! &" prints nothing for a fresh shell because $! is last background pid and we just GOT backgrounded but I don't think we include ourselves in that, so you have do something like 'true & echo $! &'. (And to BLOG that I have to type &amp; a lot, along with &lt; and &gt; but I'm used to it by now. You can't spell "evil" without "vi".)

June 13, 2020

Just one thread today. I found it extremely educational: Follow the money.

(Yes, I'm cheating slightly with the even/odd day thing. I should update my hacky old rss feed generator to do "programming.rss" and "politics.rss" and so on, since I've been doing the span tags for _years_, albeit with nothing regression testing that I close them or anything. Eh, it's on the todo list...)

June 12, 2020

Race conditions in job control: process creation fires up a pid that can in THEORY get suspended before it's properly registered with the job list, what should I do about that? Hmmm...

In run_command popen_setup() returns a PID which gets assigned to pp->pid in a local that is not yet on anybody's list, and if I set up a signal handler to catch child signals... If I'm calling wait() it's not gonna do anything until I call wait, but I think I need a signal handler? Hmmm, the command line plumbing reports terminated jobs at prompt time and the jobs command also queries, so possibly those are the points that handle it and update the list so it doesn't have to be asynchronous?

Meanwhile, I'm trying to work out what order of operations leading assignments and redirects happen in:

X=${x?bc} > walrus
>walrus echo ${a?bc}

And neither of those create "walrus". Unfortunately, they also abort the current script, so my tests can't report on the existence of walrus. Sigh, I need to 'toysh -c "firstpart"; secondpart' don't I?

And I'm confused again. This is the debian host bash:

$ touch abc\)d
$ echo ab+(c?d)
$ IFS=c ABC="c?d"
$ echo ab+($ABC)
ab+( ?d)
$ ABC='*'
$ echo $ABC
abc)d blah blah.txt

Does wildcard evaluation occur before or after variable resolution? It seems like it's before sometimes and after sometimes? Ah! It's IFS splitting, it's happening after variable resolution but before wildcard evaluation, so the split is making +() into two words and not registering as a wildcard grouper.

June 11, 2020

Today's reason to guillotine the billionaires.

The USA could produce a lot more food than it does if rich idiots didn't own so much farmland running intentionally terrible farms as a tax dodge. Dutch wheat farmers get 3 times as many bushels per acre as american farmers, and half of all corn is now used to make biofuel instead of food. A lot of our food isn't even grown on farms (to the consternation of farmers who hate the competition). But we can afford it because we stole so much farmland from native americans we have may more than we can manage. Sarah Taber did nice thread on that.

Voter suppression in Georgia was even more obvious this time. And of course it's racist.

The Good Cop Democrats continue to be useless. In response to the police abolition movement, Joe "Good Cop" Biden proposes giving the police $300 million more dollars to win Boomer votes. How exactly is this a defensible position in 2020? Here's a thread on ways the Seattle PD's been lying to people. Meanwhile, police in Tulsa come out and say they should be shooting more black people, and the guy the GOP put in charge of elections in Indiana was convicted of felony voter fraud.

Politicians claim a lack of funds to help people, but endless funds to pay cops to beat people. Why does the LAPD have 4 times as much funding as the Los Angeles fire department? Here's an LAPD Lamborghini parked in a disabled spot. Meanwhile, California Highway Patrol just murdered an unarmed 22 year old at a traffic stop, firing over 40 rounds into his car killing him and wounding his pregnant girlfriend. Austin's police department is doing PR puff pieces to distract from the people they've shot. Police in minneapolis admit they're the source of vandalism. Here's a thread explaining how Seattle PD attempted to facilitate a mass murder of protesters. Of course after days of beating protestors, they took the shooter into custody gently because he's white and on their side. Yes, right after he rammed people with his car and then shot somebody.

Remember how the one use of police was as a sort of notary public recording that a crime had happened before filing an insurance claim? It turns out paypal ignores that. (Not only is Paypal terrible, but also racist and misogynist hypocrites. There's a reason I don't use them.)

Here's a thread where an upper middle class white male explains how all the interactions he's ever had with police were at _best_ useless. It's a good thread.

Most of mine were traffic stops, the one time our house was robbed the police didn't even fingerprint anything. (They said it wasn't worth it.) When my car window was smashed on a visit to baltimore (they stole a VHS boxed set of the Hitchhiker's Guide to the Galaxy from the passenger seat and the change from the ashtray) the police didn't bother to come. When my bicycle was stolen in Florida (at 23 I chased the guy who did it for 2 blocks shouting "death") I got a case report number and nothing ever happened. Both times my bike was stolen off the front porch here in Austin they took a report and I got a case number about which nothing ever happened. (The lock cut through with bolt cutters? No, they didn't fingerprint that. I've never seen them fingerprint anything in person.) Literally the only point the police ever had for me was a checkbox on the way to filing an insurance claim.

But they HOUND you for traffic tickets endlessly, they want their money and the price goes up as you fail to pay promptly. Multiple times I've been either unable to find my car insurnace card or didn't have the new one with me and of course that turned into a thing each time because they want not just money but performative obeisance. (They have a computer system that can VERIFY if the card I show them is real, but can't LOOK ME UP so I don't need to give them the card. Because failure to provide proof on demand is a revenue source for them.)

People are out in force because being nice to police doesn't work. The head of virginia's KKK drives his car into protestors and of course HE isn't beaten. No, he's on their side. ICE is attempting to create gas chambers with create gas chambers with plausible deniability. If you're black being an stronaut who's been on star trek doesn't save you from police brutality.

The guy who filmed Eric Garner's murder has finally been released from prison. The police continue to arrest people who film them today, for the crime of filming them.

Police arrested a protester for throwing a teargas cannister back at them (the charge is "assault with a deadly weapon", the fact they shot it at protesters FIRST doesn't register because they're magic and allowed to do anything). They also object to protesters reflecting their lights back at them with aluminum foil.

Possibly the truest quote so far is "The police would rather kill white people than stop killing black people." Meanwhile, republican gun nuts vow that if the police don't murder enough black people they'll do it themselves.

There are a whole bunch of closed cases of police murder that all need to be reopened.

Part of the reason to abolish the police is you'll never get the military weapons back from them otherwise.

The police are still profoundly outnumbered.

Police behavior is ludicrously petty and cliche.

The NYPD is a sea of white guys. No group has that few black people without internal racist exclusion.

June 10, 2020

On the energy front, BP just laid off 15% of its workforce, and refineries have the problem that each barrel refined produces a bunch of different outputs some of which aren't selling. (That's how refining works: you take a mix of stuff and seperate it into individual components.) The price has come back up, but the fossil fuel industry still has epic structural problems.

It's still annoying when the test suite spits out stuff like:

bzcat: I/O or other error, bailing out.  Possible reason follows.
bzcat: Broken pipe
	Input file = (stdin), output file = (stdout)
PASS: tar extract dir/file from tbz2 (autodetect)

And I have to work out "ok, I did 'make test_tar' which means it's using the host (devuan) bzcat which is complaining the output pipe closed before it had written all the data to stdout which (in this case) is NOT AN ERROR because tar had read two consecutive blank headers (all zeroes) which is enough to know that the tarball has ended, even though the gnu/gnu/gnu/stallman/stallman/uber/alles/dammit tar appends several kilobytes of superfluous null headers for no obvious reason, which is why my tar tests trim the output when comparing binary equivalence"...

I.E. "not a real error, just noise, and mine shouldn't do that". (And it's a race condition because the pipe between processes has 32 pages of buffer in kernel adding up to 128k that bzcat can write into before output blocks, and closing with data waiting in the buffer is not an error, so MOST of the time zcat writes all its output into the discarded buffer which is why I haven't seen this error before, but THIS time it wasn't that far ahead and Julian Seward's bzip code felt the need to INFORM me.)

I REALLY should have named this project dorodango.

That busybox thing for work is making me sad. (They want a shell with interactive command history editing, and I can't implement that in time on my shell for this release. So, slap it on top as a "scripts/root/busybox" mkroot plugin.) But for some reason miniconfig isn't working in busybox anymore (KCONFIG_ALLCONFIG is being opened and read, but the symbols in it aren't being set? It complains if they don't exist, but when they do the state change is ignored?) So I did an allnoconfig and switched on a list of symbols WITHOUT dependecy resolution (just using sed), but... there's a lot of them?

Rich built a defconfig busybox, but when I try that under mkroot the airlock step breaks the build because defconfig busybox wants all sorts of build time dependencies the smaller config I was building didn't need. So that's not an easy out, I want the result to be an actual portable build and not "I got it to work once on a magic system I set up by hand without documenting what I'd done". (Rich already BUILT one of those, I'm trying to make it reproducible and portable with strict criteria for both.)

June 9, 2020

The plutocratic racist violence is not specifically a republican thing. Yes the GOP is nazi to such an extreme that 95 year old Auschwitz survivors are protesting them (and, sadly, dying). They're packing the courts to give their fascist takeover the veneer of law, and if they're not defeated there won't be anything left to salvage. But replacing the GOP with democrats is not where this ends. The centrist assholes like Biden are themselves a problem. You don't have a revolution to "return to normal": the Boomers' normal is gone never to return (and good riddance).

But we originally got this racist plutocracy from the british. Did you know the War of 1812 started because the british outlawed the slave trade in the west indies, which stopped US ships delivering slaves to British Guiana. This resulted in the assassination of british prime minister Spencer Percival by liverpool slave traders, the only british prime minister ever to be assassinated. (I watched an excellent movie about this in 2006 called Amazing Grace, which is of course not streaming anywhere. But the thread those tweets are taken from is pretty good.)

And as outright traitorous as the GOP is, I'm sad that the democrats are merely "less bad". When Bill Clinton proudly "doubled the number of cops on the street" it was a BAD THING that directly set up the current debacle. (He finally admitted it was a mistake while Hillary was running for president yet again as the issue was hurting her campaign.) Obama authorized extrajudicial drone killings, kept guantanamo open, allowed warantless wiretaps to continue, and called HIMSELF more conservative than Richard Nixon. The democrats blacklist vendors who work with primary challengers and Nancy Pelosi sees AOC as more of a threat to her power than the republicans.

The democrats and republicans are playing "good cop, bad cop" on behalf of the plutocracy. It's carrot and stick, the Good Cop's job is to dangle a carrot in front of you, eternally just out of reach. That's why Good Cop is always intentionally incompetent, they can't QUITE help you yet but maybe if you do this thing for them, and then do the next thing for them, then they need ONE MORE thing before they can help, ooh so close they can ALMOST help now but just this one more thing they need and maybe THEN they can help... But the reality is Good Cop is still a cop, and each new case the cops flip a coin to see who plays Good Cop this time. Democrats are still servants of a 1% that wants the other 99% kept in their place, that's why they're primarying AOC. Nancy and Hillary and Biden are there to stop Bernie and Warren and The Squad from ever actually doing anything. The only way to fix the plutocracy is to Guillotine the Billionaires.

That's why I'm not sure the democrats can be "pushed to the left". Sure, in the short term the bad cops are BAD. Rand Paul is currently taking a stand in favor of lynching. But the democrats support the racist plutocratic status quo. Most crime is a social construct that's not illegal (or not punished) when rich white people do it, but "loitering" gets you jail time (or murdered) when you're black, native, hispanic... Most theft in the USA is wage theft which is structurally never punished. If you do enough of it, you become president. More cars are stolen by banks than by individuals, and individuals can't generally steal your house while banks do it in bulk.

There are plenty of real crimes, but local police tend to be of dubious utility at best addressing them. After each mass shooting it's "too soon" to do anything about gun control, but not too soon to pass laws to prevent gun manufacturers from being sued (just like the police have immunity from lawsuits). Being able to dial 911 so anonymous unaccountable cops maybe show up 20 minutes later isn't as useful as preventing that guy from getting a gun in the first place. The police aren't there to stop crime, they're there to protect the rich from the poor. The GOP needs to burn this year, that couldn't be more obvious, but when the Boomers die (50% of them should be dead by 2034) the democrats need to go down with them. (And then the corporations...)

(The Boomers are aware we're going to chisel their names off all the monuments the instant they're gone, and seem kinda pissed about it.)

June 8, 2020

Hands up everybody who foresaw microsoft trying "embrace, extend, extinguish" on Linux. I mean that one was just TOO obvious.

Toysh: I'm trying to come up with a test for $! and it's annoying. It's the PID of the last backgrounded process, and although I can 'true & echo $!' easily enough... the number it produces changes. (And isn't QUITE controllable because anything can spawn a process at any time consuming a PID, including kernel threads.)

I can do 'true & jobs -p; echo $!' to get the same number twice via two different mechanisms, but I don't have test infrastructure to say "I don't know what to expect but it should be the same thing twice". Maybe I need to add a new test type.

Hmmm. I guess "bash -c 'true & [ $(jobs -p) = $! ] && echo yes'" works?

June 7, 2020

The idea of police abolition is going mainstream, because ongoing police behavior is surprisingly extreme. Lots of people are making strong cases for it. Police "reform" always increases their budgets, they get money to do new things. Taking the money away is the obvious response, and zeroing out police budgets is the only way to solve the entire problem. (As the protests continue the non-monsters resign, but 6 resignations per day from a force of 36,000 would take 20 years to go through the lot.) The police themselves are so ashamed of their behavior they're literally arresting people for filming it. (I mean they're REALLY fragile. That last link was item #377 on an an ongoing thread collecting instances of police misconduct (and items 376 and 378 were also police assaulting people for the crime of recording police misconduct), meanwhile item #371 is Austin's police department sending itself thank you letters through the US mail for PR purposes. It's quite the thread.) Of course Boomers clutch their pearls at the idea of not having police, but when the NYPD went on strike crime dropped dramatically. And the police we've got now are white supremacists.

If you decriminalize marijuana, sex work, and panhandling, half of what police do goes away. Divert a chunk of the police budget to mental health services so schizophrenic people can get treated rather than arrested. When cars switch to self-driving taxi services the need for traffic cops goes away. Eliminiate private for-profit prisons and the school-to-prison pipeline. Other professions don't get to fight violence with violence (which works about as well as fighting fire with fire: real firefighters mostly use water and foam and such). Police in the UK don't carry guns because they don't NEED them, but police in the USA are gassing crowds (and individuals), driving around in tanks, causing permanent hearing damage with sonic cannons and intentionally blinding people and it's not enough.

Then there's domestic violence: police have always been utterly useless in rape and domestic violence/abuse cases (even intentionally destroying evidence), so eliminating them entirely would at worst cause no change there. And domestic violence is the #1 reason police are called, despite the fact that 40% of police are KNOWN to commit domestic violence, which is one of those things where you know more of them have done it and just not gotten filmed.

The cops feel disrespected (since the protests are specifically against police behavior), so the cops are the ones rioting (it's peaceful when they don't, all the violence is orchestrated by the police). But did you know the police have no legal duty to protect anyone? If you call 911 they don't legally have to show up. (I'm not sure they're legally allowed to stop ambulances from getting to people they don't like, but they're doing it anyway. The police are a protection racket.) Of course it's blatantly unconstitutional that we can't safely film the police, especially when you realize they've been systematically lying to us for decades which isn't exactly news. But then none of this is new it's just a few people are finally starting to notice. Cops are following suspected protestors to their homes, not because they couldn't arrest them on site or pull them over and arrest them on the way home, it's purely theatrical for the intimidation value. (And to intimidate neighbors in their communities into compliance and silence.)

Statistically, any group that's entirely white is racist, but that's sort of the point. Racism is plutocrats playing divide and conquer. (There was a whole book about that specific topic. The tools turned against foreigners and minories are inevitably turned against everyone else.) Of course the only reason the police are giving even the meagre ground they have is due to being drastically outnumbered. The divide and conquer only works if the 99% don't figure out what the 1% is doing.

There's a failure mode where what you're doing isn't working so you do MORE of it, in an endless escalating spiral. The Boomers seem particularly prone to this failure mode. The usa has less than 5% of the world's population and over 1/5 of the world's prisoners. We are spending money to create problems. The "land of the free" is Doing It Wrong.

Of course the Boomers have also done this with wealth concentration: the "Greatest Generation" left the top tax rate at 92% and the Boomers lowered it to 28% (and allowed billionaires and corporations to dodge even that, these days doing their best to destroy the IRS entirely).

Adjusted for inflation, the old 90% tax rate used to kick in after the first $10 million someone earned in a single year: you got to KEEP ten million dollars PER YEAR, which is an insane amount of money. Keep in mind just ONE million dollars per year is 40 years of living expenses. (The "fight for 15" campign is about raising the minimum wage, 52 weeks in a year and 40 hours in a week. Assuming 2 weeks/year of unpaid sick time, $15*50*40=$30000, of which you get to keep around $25k after income tax and social security tax. One million dollars divided by 25k is 40 years of minimum wage spending without even earning interest.) Ten million dollars would be FOUR HUNDRED years of spending at that rate, and under the old tax regime the Boomers' greed destroyed you could keep that EVERY YEAR. These days, "millionaire" is barely mentioned anymore, to the point John Hodgman uses his million dollars of book royalties as a joke. The amount of money actual rich people have these days is truly offensive.

That's why rich bastards always get bailed out. They buy changes to the law: "privilege" literally means private law. They're the new aristocracy. Hence all the guillotines. But who they buy them FROM is coming into question. The decline of the GOP continues apace. Health experts are kind of pulling the same thing the Godwin guy did, telling people that in the current circumstances spreading the virus is the lesser evil, so go ahead and protest (with your mask on). The white house has literally surrounded itself with secret police (including ICE) as the Resident's dementia spirals inwards.

You know the murdering minnesota cop that started the protests? He committed voter fraud in Florida in 2016 and 2018. The GOP is guilty of EVERYTHING they accuse their opponents of, to like cartoonish levels. But some people are finding their limits, and even real courage.

Dear media organizations: equip your people properly. (Better equipment won't stop the police from targeting media, but it can still help.) And protestors in the USA can learn a lot from Hong Kong. There have been lots of good instructional threads, and one-offs like how to remove zip ties, or using half a milk jug and a water bottle to snuff teargas cannisters.

Conventional news outlets have The Stupid, reporting this as this, engaging in truly epic understatement... and then there's the New York Times soliciting a piece from Tom Cotton. (Not "accepting", they approched _him_.) That's just extra-stupid. I have no idea why anybody still buys (or writes for) the New York Times.

There have been a bunch of great protest signs.

Much of the reported "vandalism" and "looting" has been destruction of racist monuments (when it isn't white people starting fires while black people beg them to stop).

The headline "Court OKs barring high IQs for cops" is not a typo.

Slack works with the police, and so does Zoom. Don't organize through either.

Police unions aren't actually unions, they're guilds like the AMA.

Remember when the administration was stealing Covid-19 protective equipment? Now the cops are doing it.

New York has suspended habeas corpus, and can now detain anyone indefinitely without reason. Not just protesters: anyone.

Police slam 70 year old man's head into the concrete, leaves him unconscious on the sidewalk in a pool of his own blood. Chris Hayes did a good piece about it.

Here an officer gropes a woman, she breaks away, and gets batoned for resisting being groped.

You know how we send legal observers to monitor foreign elections? The NYPD is arresting them.

Kettling, 10 years ago in the UK.

June 6, 2020

Every time somebody builds a DIY item in Animal Crossing, I keep waiting for the horns to kick in, because I am old. (It apparently started life as a snippet of the Hawaii Five-O soundtrack, which I had not previously known but once you start down these ratholes...)

Speaking of old, Google is finally shutting down the last dregs of Google+. Why they didn't just buy twitter, I couldn't tell you.

Google+ could have been a good thing, its failure was a self-own by Google. Their UI tried WAY too hard to be facebook and offered no obvious way to get persistent URLs to anything people posted (so linking to content on it was either impossible or broke before long), and rather than improve it Google forced it down people's throats via monopoly leverage (microsoft-style bundling) which had lots of problems but the biggest was creating horrible youtube comment spam problems out of whole cloth (believe it or not before Google+ broke them, youtube comments were NOT a cesspool). Google replied in full Elon Musk Silicon Valley White Man fashion (never admit a mistake, charge boldly forward endlessly doubling down) by trying to dox their entire userbase, and the whole thing just snowballed into epic suck.

Seriously, one of the X-Men comics back in 1985 had Loki create a Plot Device that gave non-mutants superpowers, but took away their creativity to fuel it, and when people noticed and Noped out he tried via Oblatory Fight Sequence to force it on them. Then the Alien Superbeings he was trying to impress with his generosity so they'd give him a cookie showed up and anviled a moral ala "if you'd gracefully taken the no we'd have called it good but you went full supervillain trying to get your way so Bzzzzt, fail".

Whoever was running Google 8 years ago did not read enough X-men comics growing up.

June 5, 2020

Just one link today, a video titled Court denies immunity after officer obtains 23 year false conviction.

It's about a police officer and sexual predator who spent his entire career threatening women into sleeping with him, and when one woman moved and changed her phone number instead, he framed her 17 year old son for murder. Now 25 years later the retired officer is claiming in court he can't be sued because it happened as part of his work as a police officer and police have "qualified immunity" from prosecution.

The video is from the channel "Lawful Masses" which describes and analyzes legal decisions. It's a dispassionate reading and review of court filings that has nothing to do with the current protests: the video is 2 months old, the case is from an unrelated jurisdiction (Kansas City), and this video isn't particularly noteworthy (it got 127k views on a channel with 134k subscrbers). It's just one more unremarkable story of the reality of policing.

But it's also a thorough, compelling description of what police do and who police are. Accident victims in the united states beg bystanders NOT to call an ambulance because it will ruin their lives. At least as many people will never call 911 no matter what because introducing police into a situation, even where their lives are already threatened, can only ever make things worse. And just as anyone can wind up uninsured, anyone can wind up on the wrong side of some random officer's grudge whom the rest of the department will rally around and support unconditionally, forever, every time.

(In this case, since he's retired rather than active duty, and the evidence of his guilt is overwhelming, his old department has merely issued a no comment and gone into full ass-covering mode.)

June 4, 2020

And I forgot to plug my laptop in again when I got home, and the battery died when I wandered away from it. Wheee.

I had 4 email windows I was composing, one was a reply to this which I kept open as a todo item, and one was a reply to a private email from Patrick Oppenlander with instructions on how to test blkdiscard. No idea what the other two were.

If you ever accidentally close a chrome tab you didn't mean to, CTRL-SHIFT-T is your friend. (As with "right click -> inspect element -> delete node", there are some things modern web browsers are a lot less usable without.) After last crash a nice person walked me through changing my thunderbird config so it would save email I was composing, and of course thunderbird didn't.

June 3, 2020

Hmmm, my impression Austin's been mostly peaceful seems premature. It looks like I probably just haven't been targeted due to being white. (And also staying home in quarrantine other than walking to a secluded table in an unused corner of the university after midnight. I feel guilty for not protesting, but I'm still trying to quarantine. Among other things, Fade hasn't had it yet.)

I walked to UT after midnight anyway. I haven't got much other opportunity for exercise, and let's face it: the racist cops are going to see a white guy.

Don't get me started with this "all lives matter" crap. A "wet floor" sign says there is a problem HERE SPECIFICALLY, the only reason to point to the rest of the floor is to draw attention AWAY from the actual problem. If you put up an actual "all floor equally dangerous" sign, there's something wrong with you.

I've stopped collecting links. If you don't know what's going on by now you don't want to know. Fade sent me an excellent summary of what really happened in minneapolis, genericize that to the rest of the country. The police are openly looting in uniform and the military is standing around waiting for the GOP to give the order to murder civilians. Then we see how many of them do. The system has a lower limit on age to hold office so we have to wait for good candidates, but the electoral college and 3/5 compromise let septuagenarians and octogenarians run everything until they die. Ok Boomer.

(No, I didn't collect links. That's what scrolled by while I was writing that paragraph. As the man said, "My the world's on fire, how 'bout yours?")

June 2, 2020

Rich built busybox for the customer release last month, but when I tried to reproduce his setup (as a mkroot build script) the resulting shell (busybox hush) intermittently segfaults. As in you run the same command twice and one of the times it segfaults, the other it doesn't. Smells like an uninitialized variable maybe?

Rather than try to debug an unfamiliar codebase (I haven't looked at the hush source in years) I upgraded from 1.24 to 1.31.1 (current release) in hopes they've fixed it (it wasn't segfaulting for Rich) and... the build breaks because "off_t size is misdetected"? Which the nearby comments say is a workaround busybox added for bionic, but is triggering on a musl build. (Sounds like any libc that hardwires on Large File Support without requiring you to -D_IT_IS_NO_LONGER_1996 on the compiler command line will hit this.)

It's after an #ifdef staircase that's trying to micromanage a manual uoff_t declaration, which is just sad. Toybox goes out of its way to render unto libc that which is libc's. Something is either toybox's problem, or NOT toybox's problem. "Do or do not, there is no spoon." Eh, there's more than one reason I don't do busybox anymore...

June 1, 2020

Oh great, that'll show him. Thanks Nancy and Chuck. Problem solved.

Is anybody surprised that this is how the trump administration turned out? They've been signaling this for years.

The resident has a profound zero sum mindset, and his dementia means he retreats into ways of thinking set in stone over decades because everything else has washed away. He did his money laundering in the real estate industry, where you can't gain a piece of land unless someone else loses it. In real estate, "I can't gain unless you lose" because there is a finite amount of land that's just changing hands. He extended this into "if you lost, I gained" (because even love canal and chernobyl drove up the price of the remaining land you can still live on). Add in dementia and this simplifies to whipping boy politics: hurting people advances his agenda. Given his racist base lives on schedenfreude, that's exactly what they want to see. They don't care about getting hurt themselves as long as THOSE PEOPLE suffer.

Racism has crippled the GOP's attempts to deal with Covid-19 because they cannot allow any aid to reach brown people, so instead they had to deny the existence of the problem with some pretty obvious lies. And now they're gleefully hoping it spreads among "those people", whoever that moving target refers to this week.

We're basically having our Tianamen square moment. If the fascists win, they will hunt down and murder everyone who stood up. They're way beyond any historical version of "normal". Back in 2016 Will Smith said "Racism isn't getting worse, it's getting filmed.". But now it's ALSO getting worse, hopefully coming to a head as it dies. Right now we're in the middle of a quite complicated venn diagram.

Let's start by restating that the inciting incident was an explicit murder (that's a thread from a medical examiner), caught on camera from multiple angles, and the guy who did it has killed before. No amount of blaming the victim changes that. The military rules of engagement call this sort of thing an execution, and arrests those suspected of it pending investigation. (In the military they're not put on leave, they're arrested for murder.)

I have no idea what's helpful to do at the moment. I think the reason Austin is peaceful (so far) is the APD instituted a strong body cam policy circa 2015, with any and all footage available via texas open records request, which had time to sink in and become cultural to the point "you had your body cam off" is ITSELF strong evidence of guilt. And thus the cops have NOT torn the city apart like so many others.

Here's a state by state bail fund but most of the ones in Texas are there to oppose ICE (which is still horrific, murdering people and kidnapping children even more with the spotlight off them). There's specific advice for dealing with tear gas. (Did you know using tear gas is a war crime, it's only "legal" to deploy against citizens in peacetime?)

At least there have been a few useful half measures (from people finally catching up with the group). Military weapons should never have been given to municipalities in the first place. It was a really stupid policy, a side effect of the federal budget having enough wasteful defense spending to create a literal disposal problem. John Oliver did an excellent piece on this and also on police immunity from lawsuits and one on police stealing people's money and stuff in bulk. (I say "half measures" because there are 40 million unemployed in the USA and about 700k police officers, going to 41 million unemployed is a lot less intrusive than what we're living through right now. If none of us can afford to call an ambulance, why would doing without police be more dangerous?)

Years ago David Graeber said the police exist to protect the rich from the poor, and have no other purpose. They no longer even pretend to serve the public. Mayors should order their police forces to stand down. (Here's the guy those particular cops murdered yesterday.) The police don't care about the law, they break the law with impunity and even obviously violate the constitution. I have no idea why municipalities still fund them. Zero out their budgets.

The police are the problem. All these protests are peaceful until the police show up. The police attack peaceful protests. They attack people in their homes, or just standing still. Less than three weeks ago police broke into an EMT's apartment in the middle of the night and murdered her in her bedroom. The protests are because police have been murdering people on a regular basis with impunity for years. They've made themselves immune from lawsuits, they can steal anything they want at any time with no recourse, and they're collecting military weapons in bulk. And they're happy to protect other racists murdering people. It's kind of a problem.

A related problem is right wing loons pretending to be protestors. White men with racist tatoos start the fires when people with cell phone cameras catch them and report them then sometimes there's enough public outcry the police are forced to do their nominal jobs, but they presumably quietly let them go as soon as they're out of sight of the cameras. After all, they're working together, and this sort of thing isn't out of character for undercover cops.

But once the police do (officially) show up, police actions are pure sadism. They tape over their badge numbers and shut down their body cameras and jam cell phone signals before they attack. Police violence is just another kind of gun violence. Adding the national guard didn't help. Adding in the military can't possibly help.

Here's a thread collecting examples of police attacking journalists. And here's a video montage. They HATE being filmed. But the journalists have way more courage than the police do, and everybody has a camera phone now. Remember the photographer who lost her eye? She's not remotely alone, and cops regularly kill people with this stuff. They're targeting the media, here's another long thread of police targeting journalists. Here's an officer shooting directly at a cameraman while being filmed by that camera.

It's pure racism, the cops don't chase white people caught in the act of looting. At best white looters get a talking to. But they arrest each black person annually, hold them without bail for a day, then release them without charge (and demand an impound fee to get their car back). During the protests, white people are putting black people in danger, and refusing to listen. White people are the problem, majority black cities are peaceful.

In Los Angeles, they're planting movie prop police cars and setting them on fire to discredit protestors. In baltimore, cops stole drugs from pharmacies and sold them to drug dealers. (In addition to be reponsible for most merchandise theft in the USA, the police also commit 1 in 16 homicides.)

And or course the GOP are blaming the left, and doubling down on racism (and antisemitism), with "look what you made me do" speeches while quoting famous racists to justify shooting US citizens. The fascists remain a tiny minority mangified by bots and sock puppets (and of course Russia's been doing this for decades, but the billionaires have learned, and created a hermetically sealed propaganda network).

Biden is useless. The best thing you can say about that milquetoast equivocator is he's not actively making it worse. He looks stellar in comparison to screamy orange racist grandpa but so would a potted plant, which ALSO does damage more slowly. This entire article boils down to "the idiot really really really wanted Amy Klobuchar (who doesn't care who he rapedhow stupid an idea that was, the octogenarian can't cope with change".

The history books of this period may be interesting (or like tianamen square, may be erased from history altogether). We need to zero out police budgets everywhere.

By the way, the reason people were protesting outside Target is they donated $300k to the police to install surveilance cameras throughout minneapolis, and the first store attacked was a pilot for more intrusive surveilance.

Everything is a distraction from everything else. distraction from everything else. Guillotine the billionaires already. That's where the real looting is, each billionaire has stolen more money than this entire national uprising combined.

And we REALLY need to start teaching the humanities again, because our history of racism goes back at least 500 years. (All the other ex-british colonies with right wing governments are still being racist too, it's just come to a head here.)

The onion is continuing to merely document reality, and is not alone.

The biblical "log in thine own eye" applies to all the idiots looking for conspiracies when the "conservatives" are right there acting openly.

May 31, 2020

So the guy who triggered my first quarrantine stress meltdown back in april has sent more than 2 dozen seperate pull requests via github this week, most of which are stacks of multiple commits. He's well intentioned, and he can occasionally find real issues, but the net result is I've spent more energy saying no to his patches than getting work done on toybox for days now.

In theory this is a series of "portability" fixes for toybox, half of which seem like pointless churn and most of the rest (in my judgement) make the code worse. This signal to noise ratio in this series is incredibly low, but it's also clear he doesn't understand _why_, and there are some interesting lessons here. These pull requests completely misunderstand what I want, and maybe this is my fault. Perhaps I need to update the design page somehow to explain better?

My first question with this sort of thing is "portability _to_what_"? Nitpicky compliace with an abstract standard is "infrastructure in search of a user", especially if you can't regression test it. If the code's been like that for years and nobody noticed, what did you hit that broke so I can add a test case? In the case of "build fixes", what is the BENEFIT of doing that? Where specifically can you build/run now that you couldn't before? Keep in mind, this sort of cleanup work can always be done later when a user/need presents itself. This lazy binding, just-in-time approach to code changes avoids bit-rot.

(Bit-rot is a bit like the Pentagon hanging on to spare uniforms in a style it no longer uses. It bought in bulk to drive down costs and stored them well, why should it throw them out? The uniforms didn't change, the world around them did, and now they're no longer useful. If you ask "what about the uniform changed to break it" you're asking the wrong question, the answer is "its context".)

Some of these pull requests add unnecessary layers of indirection (that link goes to a comment I wrote explaining why that's bad), others break the semantics and change the callers to use the broken semantics while leaving a trap lying around for future callers (that's a comment explaining why THAT's bad). Others enlarge the code without making it any faster, smaller, simpler, or more readable: this one does so at every callsite, and this hides the expansion in a macro. Sometimes I'd already explained in the code why I was doing what the patch undoes.

This pull request changes the kconfig code I inherited from linux-kernel which I already announced plans to completely replace. The patch adds gratuitous changes vs upstream which make the code's continued use harder to understand (larger delta from what we inherited) and less defensible. "Long ago we took a snapshot of this infrastructure and haven't gotten around to replacing it yet" is a coherent story. "We keep modifying this infrastructure, ours looks nothing like theirs anymore, but it's just an old snapshot we don't actually maintain" is not. Back when I did that kconfig stuff for busybox I posted my changes to linux-kernel, and they didn't want them. If anybody sues over GPLv2 code in the toybox tree (which they shouldn't since the resulting binaries don't SHIP, it just makes turns one kind of text file into another kind of text file during the build), my first defense is "look, changes posted here, archived in the public linux-kernel web history, your fault for not wanting them". I still do that (and am surprised when anybody notices). These new changes would NOT be posted to linux-kernel (they're not relevant because their version's had a dozen years of change ours hasn't), which makes a very different statement. I am not maintaining a FORK of gplv2 code, it's grandfathered in and removing it entirely is on the todo list (and right there in the README). If the build started throwing warnings I might patch them out because the toybox build should not generate warnings, and if you come up with an actual target it causes a build break on I'd grumble but might merge changes for a specific testable reason. But it doesn't get aesthetic or speculative cleanups because it's under the wrong license and is very much deprecated, intended to be replaced.

Some of the patch series replace functions with equivalent functions which are actually less portable. (Just because Jorg Schilling suckered Posix into removing tar in favor of pax doesn't mean any linux system anywhere has pax or doesn't have tar 20 years later, and similarly deprecating/removing cpio didn't stop RPM and initramfs from basing their file formats on "cpio -h newc", and there's even talk of extending cpio for sparse files, xattrs, and 64 bit timestamps).

Aside: microseconds suck, please stop using them. Milliseconds measure human perception/reaction times, nanoseconds measure computer reaction times, microseconds measure NEITHER and must be converted into something else to ever be useful. Just as C++ is in the no-mans-land between C (explicitly describing what the hardware needs to do) and scripting languages (abstracting away lots of implementation details), microseconds are in the no-mans-land between nanoseconds and milliseconds. Figure out whether you want human time or computer time and use the appropriate unit, which is never microseconds. I've ranted about this before.

Don't use PRIu32 and friends when you can avoid it. Toybox uses LP64, which means char is 8 bits, short is 16 bits, int is 32 bits, long long is 64 bits, and long is the same size as pointers (32 bits on 32 bit systems and 64 bits on 64 bit systems). The basic integer types HAVE DEFINED SIZES, and this standard is used by Linux, BSD, MacOS X, iOS, and Android. The only thing that DOESN'T use LP64 is 64-bit windows (on 32 bit windows long and pointer are the same size), and modern windows can literally run Linux binaries. I'm quite happy to break compatibility with the win64 API, we have NEVER supported it and won't.

I'm on the fence about ending structs with array[0] vs array[], because the first has been accepted by compilers going back to the 1980's (really, Turbo C under DOS let you do that), but the standards committee decided the second (which used to be a syntax error) is what they were going to standardize. The first uses conventional K&R syntax from the 1970's to request zero bytes of memory be allocated (sizeof(*array)*0 is 0, the compiler is not confused about what to do), and then calculate how much extra space you want when you malloc() the struct and access it yourself. Then the "add undefined behavior to break existing code" brigade went "but bounds checking of arrays!" So they added a NEW syntax they had to change compilers to NOT treat as an error in order to mean the EXACT SAME THING as what people had already been doing for years, all so you STILL couldn't do bounds checking on these cases because the compiler still doesn't know how long array[] is either. If you instead taught your bounds checker "a zero length array doesn't get bounds checked" everything would have been fixed without having to change existing code.

Easy rule of thumb: assume C coders know what they're doing, and that C++ coders do not. C++ coders have already chosen to use C++ and C coders to use C, and that's a GREAT BIG SIGNAL right up front as to who is making good decisions here.

Standards bodies should DOCUMENT, not LEGISLATE, because every time a standards body tells people to change existing code IT IS A BAD THING. Implement compiler extensions, deprecate them if they turn out to be a bad idea, if they become widely used and adopted by multiple compilers (the way llvm picked up using "x ? : y" as a synonym for "x ? x : y" that doesn't evalute the first argument twice, which gcc's allowed for a couple decades now) THEN the standards body can go "ok, four different shells now support set -o pipefail, write it into the spec already".

But anyway, array[] exists now and has since c99 and I'm fine with using it, and the reason I'm on the fence is it IS one fewer character. If I was writing it in the first place and somebody looking over my shoulder pointed it out, sure I'd change it right then and there. But a patch to change array[0] to array[] is churn, and is it worth the churn? It's a diff that makes noise but doesn't really accomplish anything. As part of a larger change, sure. If you have a cleanup pass moving stuff out of pending, fine. But on its own? If the patch doesn't justify its own existence, having multiple separate commits to do the same thing is even less justified.

Other pull requests ignore allocation context, such as the way setenv() inserts the provided memory directly into the environment array, while putenv() creates a malloc() copy to insert into the array (and thus leaks it if the variable's value is replaced later). I wrote an entire file of infrastructure to handle environment variable allocation lifetimes, and have blogged about the issue repeatedly for years.

Another pull request replaces setlinebuf(stdout) with the equivalent setvbuf(stdout, 0, _IOLBF, 0) and which of those two makes it immediately clear what the function does, and which has a macro starting with an underscore for no immediately obvious reason? And of course the pull request is a stack of 4 seperate commits doing it in 4 places. (If you add .patch to the end of github pull request URLs you get a git format-patch style mbox file you can apply with "git am", and I sometimes edit those patches by hand in vi, to do things like squash 4 commits together into a single commit. In this case I would probably take a patch going the OTHER WAY and consider it a code cleanup because the 4 argument version is larger per call, with more cognitive overhead to understand even WITHOUT having to look up what a "vbuf" is or what _IOLBF does.)

Here's one that just straight-up ignores the stated goal of the toybox project as explained in the about and design pages that toybox is a Linux project building and running on Linux and implementing Linux commands with reference to the Linux man pages and the Linux standard base. Instead he says:

On linux, utmp isn't obsolete, and utmpx is the same as it, but on pretty much any other system utmp is obsolete and utmpx should be used instead.

See that part at the start, "On linux, utmp isn't obsolete" and then add a period. Full stop. "Should be used" is editorializing, this guy saying "what I want is more important than what you want, because I define 'should' and you, the project maintainer, do not". How nice. (This is AFTER the blow-up in april back when I cared WAY more about what he thinks and let my repeated objections being ignored and walked over affect my enthusiasm for the project. At least it was a learning experience for one of us.)

I can almost see the point of not wanting to use void pointer arithmetic and mostly I don't, but I avoid it by changing the type of the variable, NOT by inserting gratuitous typecasts (which are themselves a source of bugs, and which make the code larger and harder to read and reason about). In the called out cases (again ignoring pending which needs systematic analysis and restructuring, not fixing an apostraphe in the Eye of Argon), the types are void for a reason, and you'd insert a new variable just to copy the argument into, which I've done in plenty of places, but in context I'm just so exhausted by the rest of the pull requests I don't want to explain how to change it so that I might accept something that isn't worth doing. I'm not really bothered by it being in the code. Yes a few leaked in, if a compiler shows up that doesn't support it I assume it'll throw an error. If it wasn't for the other 25 pull requests maybe I'd care more, but in context it seems LESS worth doing.

But to be fair, let's end with an almost sort of worthwhile pull request. As with the zero size arrays this patch might be worth doing as one big cleanup pass for trivial issues. As with array[0] vs *array, you can say array[] is slightly fewer characters and toybox has a policy of consistently using the shorter way of expressing something when there are two equivalent ways. (It's under Coding Style on the design page. It's not worth multiple commits to do it, one cleanup pass changing all the instances is more or less a "fix typos in comments" level of "eh, doesn't hurt anything".)

But he's not motivated by that, he's submitted pull requests going the opposite way because he wants to eliminate all estensions for no obvious reason. This is a Linux program, it's not gonna build on windows. I actively don't want it to. Cope.

He's still at it, by the way. he found two tiny legitimate-ish changes that I would actually make... in code in pending that needs massive cleanup anyway. This is like reporting capitalization mistakes in the first draft of a novel: whole paragraphs are going away, these changes are not worth making at this time in this context. This isn't worth one commit, let alone two. (Note that earlier when he found a usleep->msleep change what I wound up doing was a big cleanup pass on the file, which isn't even ALL the cleanup I need to do there but I sat down and did enough work to bother checking in.)

Anyway, that's why I didn't get anything done on the shell again today. I was being a good maintainer, responding to user submissions, looking at and explaining why these changes should NOT go into the codebase. And then I was out of energy and went off to do other things. I've written it up here in hopes that at least SOME good will come of it.

P.S. I tend to think of code in context. For example, I'm implementing job control in the shell and I'm using "int" for the "plus" and "minus" indexes (I.E. the two most recently active jobs in the job array, which get a + and a - after them in "jobs" and can be referred to as "%+" and "%-".) While I _COULD_ use unsigned for this, in order for that int to wrap you'd need 2 billion simultaneously active jobs, and the Linux Process ID table doesn't go up that big (and ain't gonna). In linux the type of pid_t is also "int" (signed!) and the default value for /proc/sys/kernel/pid_max is 32768.

But it's not even a question of future proofing: ignoring kernel internal scalability, and the wattage to run millions of processors in parallel, just the MEMORY is infeasible. In order to have 2 billion simultaneous jobs you'd need at least that many processes (not threads), and if each has an 8k stack and dirties NO other pages (static XIP binary with no PLT or GOT fixups, on a nommu systems so a process doesn't have page tables), that's still 13 terabytes of RAM just for the stacks.

"Oh but future machines..." No. Moore's Law is basically over (because all S-curves bend down eventually and this one ran for 50 years). The 18 month doubling time of memory no longer applies, the rate of increase in computer capacity is decreasing as the curve bends down. A 2010 macbook came with 2 gigs of RAM, a 2015 macbook came with 8 gigs (only 2 doublings in 5 years, when 4 1/2 years is 3 eighteen month periods) and the default memory for a new macbook 5 years later is 16 gigs (only ONE doubling in 5 years, it's slowing fast). Sixteen terabytes (which still isn't enough to DO anything with 2 billion processes, if each was "hello world" it's still bigger than our example) is 10 more doublings from there, so is that 50 years or "never"? (It's going to keep slowing, that's what S-curves do, and the laptop->phone switch adds another 2 doublings.)

But ignoring ALL THAT, the fix would just be "if (jobcount==INT_MAX) error("cannot background");". None of these patches tried to make that particular change, but it's a design decision I just had to make for new code today, and explaining WHY is a bit of a lecture, innit? Either you understand this sort of thing, or you need a huge infodump just to have a frame of reference to make a decision in. It's a conundrum. I don't want to discourage people, but it's a giant timesink and the most dangerous part is when you THINK you know what you're doing and project confidence. Me, I'm here spending more time working out regression tests than writing code!

May 30, 2020

Fade's back in Austin (having always been scheduled to return at the end of the semester) and she's been posting a lot of links about what's been happening in her city despite not usually being all that political on her twitter.

I mentioned on the 16th that Harvard is the rape cover-up place.

Wear safety goggles while protesting because cops aim rubber bullets for people's eyes to cause permanent injury (a technique they picked up from chile and warning about that last link: close up photos of the results).

Here's a long detailed thread showing how the looting and fires are caused by white racists posing as protesters, while actual protestors beg them to stop. Dozens of examples, video from multiple cities. Some undercover cops, some Klan. They're even trying to organize fake protests to get real protestors to show up as cover while they play-act "the purge".

It's not just klan and undercover cops committing atrocities. On-duty in-uniform officers are doing it to. ran his car into a crowd of protesters, and here's a mounted officer running a woman down from behind with his horse. They're doing this openly, and explicitly targeting journalists.

Guillotine the billionaires. I know we're all waiting the worst of them to die of old age, but I'm not sure there's time.

The modern economy is still completely fictitious. Money is a way of keeping score. The government prints it at will, and running out of money is like running out of laws. It's an IOU the government issues and will accept back in payment of property taxes (which are unavoidable unless you're homeless; your landlord pays even if you don't). The united states' highest period of prosperity is the same as when its debt was highest: under the Eisenhower administration just after World War II. Most Government debt is borrowing money from itself, which is a way of printing money without acknowleding you're doing it (because it's perpetually "temporary").

The only downside of printing too much money is causing inflation, which is good for debtors (our debts decrease), and the easy way to reduce inflation is to either tax the rich to get the extra money out of circulation, or increase the supply of stuff to buy with the money. But inflation hasn't been a problem for the US economy for 40 years. Instead the united states economy has the opposite problem, it's stuck in a perpetual demand limited liquidity crisis, even over ten trillion dollars of "quantitiative neasing" in the years after 2008 couldn't get the inflation rate UP to 2%, it's stuck below that.

Having the _opposite_ of inflation means we can easily afford basic income, and politically all you have to do to implement it is pass a one page bill setting the social security elligibility age to 0 and granting everyone at least the "worked 30 years" minimum benefit of just under $900/month. And if the republicans could figure out a way to do that ONLY for white people without letting brown people benefit, they'd have already done it. (The appeal of the Resident has always been the idea that he's hurting "those people" at least as much as he's hurting his supporters. Every article about ICE stealing a baby buys him an indulgence from his base for whatever bad thing happens to them. They live on racist schedenfreude. They also have a zero sum mindset and the Resident even more so: they don't win unless somebody else loses, and whenever they hurt somebody else they MUST have benefitted even if they can't immediately see how.)

The capitalism of the united states has always been racist. Slavery was for-profit. At the time of the first civil war, the dollar value of the slaves was greater than the dollar value of all the real estate (land and buildings combined) of the South. The southerners were fighting over MONEY. And the billionaires today are responsible for (and steering) this mess.

May 29, 2020

Um, doesn't "all OSI approved licenses" include 0BSD, a public domain equivalent license? I guess what they're saying is if you _relicense_ to a proprietary license, then they can sue you.

Darn it, I was building mkroot and this happened:

Compile toybox....scripts/ line 34: echo: write error: Resource temporarily unavailable
...scripts/ line 34: echo: write error: Resource temporarily unavailable
............scripts/ line 34: echo: write error: Resource temporarily unavailable

Line 34 is:

[ ! -z "$V" ] && echo "$@" || echo -n "$DOTPROG"

It's saying stdout to the PIPE is temporarily unavailable. And isn't this the bash built-in echo doing this? Is... wait.

There's nothing in dmesg about this. To the mailing list!.

(Half the reason I say "I break everything" is when something like this happens I STOP and DEAL WITH IT rather than letting it go. For the same reason you don't let a roach escape under the fridge and go "I'm sure it's fine", you call the Letal Chemicals Man to show up in his ice cream truck playing helter skelter and perpetrate chemicals everywhere. Never let a bug go is similar to never let a crisis go to waste. Other people are better at deadlines and not getting distracted, but I'm trying to do science here).

May 28, 2020

Fade is scheduled to fly back to texas tomorrow, and isn't sure she can make it because minneapolis is... unwell.

The riots in minnesota are because people are (peacefully) protesting racism in the police force, so the racist cops are pushing things into riots to discredit the protestors.

The first store vandalized was caught on phone camera (people asking the white guy not to smash the store window and him threatening them with violence, then he ran off towards the police station). He has now been identified as a St. Paul police officer.

Of course none of this is making national news, I'm hearing about it from Fade who's now definitely flying back to Texas tomorrow because a friend gave her a ride to a hotel near the airport, where she's spending the night.

None of this is new, by the way. An interesting contributing factor to LBJ's decision to sign the civil rights act (and thus hand the "solid south" to the GOP, setting off the Southern Strategy) is that his research team figuring out why the detroit riots happened said it was racist cops.

Oh hey, after midnight the idiot state police arrested a CNN camera crew during a live report, and refused to say why. Ok, NOW it's getting some coverage. This is complete third world stuff.

And of course, the onion is on top of it.

Really, their whole main page right now.

Ooh, here's a practical thread on how to get the klan out of police forces. (See also.)

Did you know the police now steal more stuff (through civil asset forfeiture) than the official criminals do? The police have become the problem. (Of course most of the rest of the theft is the rich stealing from poor.)

May 27, 2020

As with Toys-backwards-R-us and Sears, Herz didn't go bankrupt because of the economy, it went bankrupt due to rich bastards stealing its money and loading it up with debt. Under the current administration, billionaires are literally buying off legal enforcement. The only reason Bain Capital (destroyer of Toys R Us) is getting dinged is because Mitt Romney is out of favor with the administration. Scratch the surface of any conservative action and you find a get-rich-quick scheme. That's why "guillotine the billionaires" is the central political idea that makes sense.

Of coure the billionaires know it, and have been expecting it. (They're surprised the rest of us have put up with it this long, they know exactly what kind of monsters they are. Rachel Maddow did an excellent piece on this back in 2010, the video of which has vanished from the the msnbc site from the but at least there's still a transcript).

That's why the billions in defense spending become domestic hardware to keep the populace in line. (Democrats keep falling for this. Clinton doubled police on the streets, it was a bad thing. They keep handing the GOP more stazi to keep the brown people down, and as always the order goes "done to foreigners, done to brown people, done to poor people, done to everybody".)

Meanwhile, the voting system is still extensively rigged.

May 26, 2020

Pipes need to live outside block type evaluation:

$ echo hello | potato() { echo abc; } | echo ha

But enabled/disabled segment evaluation (blk->run) is relative to block type. Blocks 0 and 1 skip if disabled, type 2 changes blk->run, and type 3 loops back when blk->run && "done". Not sure how the layering should work here...

Meanwhile, there's a syntax error checking miss: sh -c 'if true; then echo hello | fi' should complain "unexpected fi". (Ok, fixed it but I had THREE ongoing forks of the same file while I was doing that, and it makes me really nervous.

I wrote a long email message I can't send yet because Google mail has decided that any attempt to access its pop3/smtp servers via t-mobile phone tether is inexpicably invalid somehow (with the misleading "how dare you not use the web UI lock-in for everything" message), but it'll still work via Google fiber because that's their service. The Google proprietary lock-in is getting Google annoying. I'll have to send it from home later. (Yes, I'm still social distancing, the midnight walk to abandoned parts of UT remains very useful.)

The type 0 (simple command) and type1 (start of block) logic both handle pipes and redirection, and I'd _like_ to merge that handling but there's a lot of shufflilng. The combined logic would look a bit like:

end = pl->type ? block_end(pl->next) : pl;
ctl = end->arg->v[end->arg->c];
// Skip disabled block
if (blk && !blk->run) {
  if ((pl = end)) pl = pl->next;

if (pipe_segments(ctl, pipes, &urd)) break;


// Parse and run next command, saving resulting process
dlist_add_nomalloc((void *)&pplist, (void *)run_command(arg));

// If we didn't pipe output to next command's input, wait for exit
if (*pipes == -1) {
  if (ctl && strcmp(ctl, "&")) {

Speaking of which I still have a todo item to change how dlist works, but the churn's a bit unpleasant...

May 25, 2020

Did you know that the forward lean the Resident does _is_ one of the diagnostic factors for progressive supranuclear palsy, going back a hundred and thirty years? (Of course back then it was called Atypical Parkinson Syndrome, as in "a variant of Parkinson's disease that's also Althzehimer's".)

Conservatism isn't conservative, it's just fascist, racist, misogynistic, and plutocratic. But then conservatism boils down to the fundamental idea that some people are destined to own slaves, and others destined to be slaves. (And that's why they think hoarding food during a famine is right and proper, because their right to property trumps anyone else's right to keep living, or else what's the law for? Taxing billionaries to fund food stamp programs is against the natural order of things to conservatives. Peasants live or die at the king's pleasure.) This is of course why the guillotine was invented, because you'll never change their minds any other way.

This is why "conservatives" are all-in on voter suppression. Not only is it their only remaining way to stay in power, but their fundamental world view says "those people should not vote, we're special and they're not, we must rule or the world is wrong". They fundamentally do not believe "all men are created equal", and thus cannot believe in democracy. They KNOW they're a tiny minority, and think that's what makes them special. There have always been far more plebians than patricians, more peasants than nobility, more slaves than plantation owners.

Of course they edit the historical record wherever possible. Because what they say and do looks stupid in retrospect. For example, when Bill Clinton balanced the federal budget and maintained a surplus, his successor George W. Bush's first budget slashed taxes on the wealthy with the rationale (and I quote): "You see, the growing surplus exists because taxes are too high and government is charging more than it needs. The people of America have been overcharged and on their behalf, I'm here asking for a refund." This quickly led to the biggest deficit in history (at the time). He tried to turn paying down debt into a moral evil, because billionaires were being taxed.

It's also why the GOP has just eliminated accurate food labeling in the USA. Poisoning "those people" is fine, the rich can afford the good stuff without metal shards and downer cows in their caviar.

And it's why the GOP started agitating to break quarrantine the day after the new york times and washington post announced that black people were disproportionately hit by the disase. (Because poor people tend to love in food deserts where being malnourished looks like "I need to eat 3x my daily calorie needs to get enough nutrients", haven't got spare time/energy to exercise, can't afford to stay home from work, accumulate health conditions they can't afford to treat before they turn chronic...)

(Oh, did I mention the hospital is pestering Fuzzy for money because she thought she had either a kidney stone or a kidney infection and the second can be life threatening, and the local "charge you $200 up front" clinic's test was inconclusive so she broke down and went to the hospital and they did an MRI and found nothing, sent her home without treatment, and the hospital charged her $11,000 for it? She filled out the "I have no money" forms, they've asked her for more information 3 times already, and meanwhile send ever-increasing bills they're about to send to collections because the low-income paperwork does not pause the billing process. She spends hours on the phone each year confirming she still doesn't qualify for obamacare because Texas turned down the medicaid expansion money.)

Conservatives like stupid leaders. The 4 of the GOP's last 5 presidents were the current dementia patient, George W. "is our children learning" Bush, Ronald "I don't remember iran contra and will die soon of altzheimer's" Reagan, and Richard "not a crook" Nixon. Only Dubyah's father wasn't stupid enough to get a second term. He completely avoided the domestic economy to the point Dave Barry faux-quoted him "The united, whadayacallum, states. Barbara and I have a summer home there." but he showed competence on foreign policy (under Nixon he was head of the CIA), and that made him unpopular with his base.

Oh hey, religion's found a new way to kill people. I mean seriously, they're a disproportionately large source of Covid-19 deaths. (P.S. A common communion wine vessel the entire congregation drinks from was probably _never_ a good idea.)

It's not that the Boomers have all the money, it's that they have all the LAND. The rest of us are still waiting for them to die. Eat the rich and end the boomers.

Did you know that countries with functioning governments have the press hold press conferences and invite politicans to address them? What a concept.

May 24, 2020

Rich is using out of tree kernel headers in musl-cross-make. I'd really REALLY like him to reread the Linux From Scratch's project's attempt to put together a FAQ about Mazur's old out of tree kernel headers package from 2004, and then NOT make that mistake again please. (I am quoted multiple times in that page.)

Tomorrow is two weeks from the toybox 0.8.3 release and Wikipedia[citation needed]