URLs du Jour


  • Dead Solid Perfect. Many are pointing out this reaction to Richard Branson's rocket ride yesterday:

    but I got an unseemly amount of amusement from James Lileks' comment on it in his Monday Bleat:

    A fitting sentiment from someone whose name suggests an organism that fastens to a vessel and moves around without doing anything, I guess.

    Making fun of people's names isn't the nicest thing. On the other hand, it's not as bad as advocating legal looting of people you don't like.

  • If There Were Olympic Games For Politicians, Flip-Flopping Could Be an Event. Conor Friedersdorf has a valuable, balanced look at the state legislative efforts to "ban CRT", and makes an interesting observation: Critical Race Theory Is Making Both Parties Flip-Flop. He looks specifically at the proposed law in North Carolina, and finds that it avoids the over-broadness of other states' efforts. But:

    Actors on both sides are taking positions that they reject in other circumstances. Prior to this year, observers of American politics could expect a bill targeting discrimination on the basis of race or sex (as at least six of the seven concepts named in the legislation do) to be disproportionately supported by Democrats invoking values such as diversity, inclusion, and the importance of combatting hate, and disproportionately opposed by Republicans citing concerns about restricting individual liberty and needlessly inviting costly, frivolous litigation. Instead, the Republicans pushing the bill say that “it simply prohibits schools from endorsing discriminatory concepts,” as Representative John Torbett, the lead sponsor, put it. Opponents of the North Carolina measure and similar bills in other states emphasize their potential chilling effect. Commenting on GOP proposals collectively, the ACLU declared, “Using these laws to prevent talk about racism is anathema to free speech—a right many conservative lawmakers claim to hold dear.”

    This role reversal is due to the confluence of many factors. For years, academic training programs and professional organizations for American educators have asserted that teachers have an ethical duty to advance progressive notions of social justice in the classroom, given the opportunity. More recently, an opportunity to advanced these notions arose: The rise of Black Lives Matter, the ideological shift of white liberals to the left of Black voters on issues of race, and the murder of George Floyd all contributed to greater support, especially in blue America, for radically transforming the way that public schools discuss race, for better and worse. Events such as the arrival of enslaved people in English colonies, Juneteenth, the Tulsa massacre, and unjust police killings have received due attention. And education about the workings of systemic racism—for instance, how redlining created racial disparities in inherited wealth—has grown more sophisticated.

    The problem is broader than CRT, I think, and certainly predates the current hubbub. I've seen it called "Zinnification". You can "teach history" using cherry-picked facts, impute saintly motives to your ideological soulmates, dismiss or ignore those of your adversaries. Anybody can play this game!

    It's just that the lefties currently are (mostly) in control of what happens in the history classroom. And they (mostly) have no compunctions about playing the Zinnification strategy.

    How are you going to legislate against that?

  • Well, We Can Try. Michael Graham [aka "NHJournal"] provides local perspective on the issue: Yes, New Hampshire, There Is A CRT Problem. He looks at the recent National Education Association vote in favor of critiquing "empire, white supremacy, anti-Blackness, anti-Indigeneity, racism, patriarchy, cisheteropatriarchy, capitalism, ableism, anthropocentrism, and other forms of power and oppression at the intersections of our society." And NH's legislative attempt to push back on that.

    Yes, the usual suspects are outright lying about the actually-enacted legislation. But:

    That doesn’t mean the anti-discrimination law is a good thing. State Rep. Jim Maggiore (D-North Hampton), who resigned from the governor’s Council on Diversity and Inclusion, may be right when he says, “we’re going to put a gag order, and put up a time limit on history” with this legislation.

    Rep. Linda Harriot-Gathright (D-Nashua) may be onto something when she says, “This language robs young people of an inclusive and realistic education.”

    Which is why NHJournal has been asking the ACLU of New Hampshire, members of the legislature, and other opponents of the new law a very simple question:

    What is the subject or topic you believe should be taught to students or used in training government workers that would be banned by the anti-discrimination law, and what specific section of the law would ban it?

    Thus far, not a single opponent of the law has been able to do so.

    Good question. Deserves an answer.

    [Michael points to this article, which was featured on the front page of my local paper yesterday. It's the usual thinly-disguised advocacy posing as "news", something that's gotten more prevalent over the years.]

  • Blame Canada! Are things worse in the Great White North? Well, maybe not, but they're at least more honest about what they're up to. Legal Insurrection has the story. Ontario: Math Is “Subjective” And “Used to Normalize Racism and Marginalization of Non-Eurocentric Mathematical Knowledges”. Quoting the Toronto Sun, eh?:

    Changes to Ontario’s math curriculum announced last year by Education Minister Stephen Lecce will include a ‘subjective’ and ‘decolonial’ approach to mathematics, according to documents posted on the ministry’s website.

    “Mathematics is often positioned as an objective and pure discipline,” reads a section of an online brief highlighting the ‘vision and goals’ of the updated curriculum.

    “However, the content and the context in which it is taught, the mathematicians who are celebrated, and the importance that is placed upon mathematics by society are subjective.”

    Math, it continues, has been “used to normalize racism and marginalization of non-Eurocentric mathematical knowledges,” and explains that taking a “decolonial” and “anti-racist approach” to teaching math will outline its “historical roots and social constructions” to students.

    “The Ontario Grade 9 mathematics curriculum emphasizes the need to recognize and challenge systems of power and privilege, both inside and outside the classroom, in order to eliminate systemic barriers and to serve students belonging to groups that have been historically disadvantaged and underserved in mathematics education,” the brief continues.

    Have pity on the Grade 9 Canadian kids, who may not learn much algebra.

  • Once Again, USPS Delenda Est. Eric Boehm draws attention to The Post Office Pension Ponzi Scheme, a print article brought out from behind the Reason paywall.

    Like many other government entities, the USPS has overpromised and undersaved for its employees' retirements. The pension system for retired postal workers has a $50 billion unfunded liability—that's an accounting term for the gap between what actuaries expect the system to owe current workers and retirees for the rest of their lives and the revenue it's expected to take in from paychecks and investment earnings. Meanwhile, the USPS fund that's supposed to cover health care expenses for retired workers is facing a $70 billion unfunded liability, and it has less than half the assets necessary to cover expected future costs.

    With each passing year, the situation grows worse. Even though the Postal Service reported a $2 billion uptick in operating revenue during the fiscal year that ended on September 30, 2020, expenses (largely due to the pension debt) increased faster. Overall, the USPS lost nearly $9.2 billion last year, up from about $8.8 billion of red ink the year before. Since 2007, the USPS has reported more than $86 billion in losses.

    As always: repeal the Private Express Statutes; allow other companies to put stuff in your mailbox; sell off valuable USPS property.

  • Linguistic note inspired by the "USPS lost nearly $9.2 billion" above. When I see that kind of usage, I usually think: "They didn't lose it. They know exactly where that money went."

    But then I looked at the Merriam-Webster page for Lost. Wow.

    There are nine distinct definitions of the word, some subtly different, others wildly different.

    English is tough.


For Efficient Traversal of the Grocery Store

[2021-07-13 Update: Didn't take long after my initial post to make some major changes. Embarassing that I didn't get it right the first time.]

Another Perl/Linux-based salve to the mental aberration I've mentioned in the past: using my meager coding skills as a hammer to whack down life's occasional slightly-annoying nails. Specifically, grocery shopping. It's partially my job. Mrs. Salad provides me with a handwritten list. A recent example:

Example List

Nice handwriting, right? Yes, she really calls those cookie dough packages "plunk & bake". And this example is neater than average, shorter than average, and pretty well organized. Still… Often I'll be finishing up shopping in Aisle 13 of the Dover, New Hampshire Hannaford … and suddenly realize that I missed getting something back in Aisle 2.

(Or sometimes not realizing I missed items until I get home.)

What I wanted was a list organized in the order in which I actually go through the store, separated into aisles (or departments) to make it easy to check that I've gotten (for example) all the Aisle 2 items before I move on to Aisles 3, 4, …

Something like this, an HTML table:

Loc/Aisle Qty Item Notes
4   Brownie Mix
    Jambalaya Mix Large
5   Raisin Bran Crunch
    Pineapple Tidbits
    Rice Krispies
6 2 V8
8   Incredibites Dry, Chicken
Back Wall   Milk
11   Bread Artesano
13   Cookie Dough
    Pie Crust
    Ice Cream Cherry Vanilla
    Outshine Coffee Bars

In fact, exactly like that. You might notice I've added a couple items of my own; I'm in charge of keeping track of pet food, Raisin Bran Crunch, V-8, and a few other things.

Hence this script, listmaker; it produces a suitable-for-printing HTML list organizing the listed items into the order I traverse the store. Typically that's in ascending-aisle order, but including the departments (Deli, Meat, Seafood, Bakery,…) on the store's periphery. Before I leave (say) Aisle 2, it's easy to verify that I've picked up everything I was supposed to get in Aisle 2.

The workflow is simple. First, I transcribe the handwritten list into a text file:

2 V8
Raisin Bran Crunch
# Orange Juice
# Eggs
# Coffee
Cookie Dough
Pie Crust
Brownie Mix
Pineapple Tidbits
Jambalaya Mix | Large
Rice Krispies
Ice Cream|Cherry Vanilla
Outshine Coffee Bars
Incredibites|Dry, Chicken

The syntax is simple, informal, and flexible:

  • One "item" per line.
  • Lines starting with a pound sign (#) are comments, and are ignored. Used for commonly-bought items; just remove the pound sign to include them, add one to exclude them.
  • A leading digit string designating quantity is optional. Of course, a missing number implies quantity 1.
  • An optional "Notes" field is text following a vertical bar (|). This can be used in many ways: specifying a brand, size, flavor,… Notes go in a separate column in the HTML table.

Once the list is transcribed, the script can be run. Example, assuming the transcribed list above is in the file $HOME/Documents/mylist:

$ listmaker ~/Documents/mylist
[HTML list saved at file:///home/pas/Documents/mylist.html]

As a somewhat arbitrary design choice, the HTML output file is written to the same directory containing the list, with the .html extension tacked on.

I use a "store configuration file" for store-specific details. It contains Perl initialization code for two hashes:

  • %ORDER which specifies the order in which I visit aisles/departments:

    %ORDER = (
        '10'        => 14,
        '11'        => 16,
        '12'        => 17,
        '13'        => 18,
        '1'         => 4,
        '2'         => 5,
        '3'         => 6,
        '4'         => 7,
        '5'         => 8,
        '6'         => 9,
        '7'         => 10,
        '8'         => 12,
        '9'         => 13,
        'Back Wall' => 15,
        'Bakery'    => 1,
        'Deli'      => 2,
        'Front End' => 21,
        'Hbc 4l'    => 20,
        'Meat'      => 11,
        'Pharm'     => 19,
        'Produce'   => 0,
        'Seafood'   => 3,

    In this case: the visitation order is: Produce, Bakery, Deli, Seafood, Aisle 1, 2, … (I've used perltidy to prettify the actual file.)

  • %HMAP which maps item names to aisles/locations. It contains many lines, here's a sample:

    %HMAP = (
        'v8'                 => '6',
        'raisin bran crunch' => '5',
        'brownie mix'        => '4',
        'pastrami'           => 'Deli',
        'ice cream'          => '13',

    This hash can get messy and possibly redundant, especially if you (like me) are not consistent or careful in how you specify items. It's easy enough (if somewhat tedious) to clean up with a text editor.

The configuration file is loaded into the script with a Perl do command. Some basic sanity checks are performed.

The default location for the configuration file is $HOME/etc/listmaker.cf. The idea here is that if you want to use this script for more than one store, you use different configuration files. A non-default configuration file is specified to the script with the -s option, for example:

$ listmaker -s ~/Walmart.cf mylist

This is a project in my Github repository; the script is here. Notes:

  • The script uses the HTML::Template CPAN module to produce its HTML output. The template is pretty straightforward and it is here.

  • If there's an item on the script not found in the configuration file, the script will ask that you provide an aisle/location for it. Good news: your response will be used to update the configuration file, so you won't need to do that in the future. (Specifically, the script uses the Data::Dumper Perl module to produce new initialization code for the hashes described above, written back out to the file.)

Last Modified 2021-07-13 6:38 AM EDT