One two, uno dos tres quatro

They say that when Carl Friedrich Gauss was eight, he discovered a secret for quickly adding all the numbers from 1 to 100.

Now, I’m going to teach you a trick I discovered, for adding up all the numbers from 1 to a number, where said number starts with 1, followed by one or more zeros.

So, for example, this cute trick only works for 10, or 1000, or 1000000000000, but not 13040.

Here’s how to do it.

  1. Start with the number that you want to add up to. We’ll call it N.
  2. Count the number of trailing zeros in it.
  3. Subtract one from that number.
  4. Let’s call that result K.
  5. Now, to start writing the answer, write down a 5.
  6. Write K zeros after it.
  7. Now, write down a 5.
  8. Now, write K zeros after it.
  9. You’re done!

Let’s do an example with 10000.

  1. Start with the number that you want to add up to. We’ll call it N. (N is 10000)
  2. Count the number of trailing zeros in it. (4)
  3. Subtract one from that number. (3)
  4. Let’s call that result K. (K = 3)
  5. Now, to start writing the answer, write down a 5. (5)
  6. Write K zeros after it. (5000)
  7. Now, write down a 5. (50005)
  8. Now, write K zeros after it. (50005000)
  9. You’re done! (Adding all the numbers from 1 to 10000 gives you 50005000.)

$$
\begin{aligned}
j \in \mathbb{N}: \sum_{n=1}^{10^{j}}n &= \frac{10^{j}(10^{j}+1)}{2} \\
&= \frac{10^{2j}+10^{j}}{2} \\[10pt]
&= 5 \times 10^{2j-1}+5 \times 10^{j-1} \\
\end{aligned}
$$

She’s my little lovekin

Dear ChatGPT:

I want a spicy short story that includes floor wax, dessert toppings,
skunks, pantaloons, chickens, and puffy porcupines, and reading, and
more chickens.


“Pantaloons and Porcupines: A Spicy Tale of Skunks, Chicken, and Desires”

Mary was a quiet and shy girl who loved nothing more than curling up
with a good book. She spent most of her days reading in her small
cabin in the woods, surrounded by her beloved pets – a flock of
free-range chickens, a curious skunk, and a puffy porcupine that liked
to nestle in her lap as she read.

One day, while Mary was waxing the floors of her cabin, a handsome
stranger named Jack came knocking at her door. He was dressed in a
pair of pantaloons that hugged his muscular thighs and a tight-fitting
shirt that accentuated his chiseled chest. Mary felt her heart skip a
beat as she gazed into his dark eyes.

Jack had come to Mary’s cabin to ask for her help in making a special
dessert for his mother’s birthday party. He had heard that Mary was a
master at creating delectable desserts and wanted to impress his
family with something truly unique.

Mary was flattered by Jack’s request and agreed to help him. They
spent the next few hours in Mary’s kitchen, mixing together various
dessert toppings and flavors until they came up with a scrumptious and
beautiful cake.

As they were finishing up the cake, Jack noticed the skunk playing
around with the puffy porcupine on Mary’s lap. He couldn’t help but
laugh at the sight of the two unlikely friends.

Mary blushed and smiled, feeling grateful for Jack’s company and his
easy laughter. She realized that she had been missing out on the joys
of life by reading alone in her cabin all the time.

Feeling emboldened by Jack’s presence, Mary suggested they take a
break from the kitchen and go for a walk in the woods. They wandered
around, talking and laughing, until they came across a group of
chickens that had escaped from Mary’s coop.

Jack and Mary quickly rounded up the chickens and returned them to
their rightful place. As they were walking back to Mary’s cabin, Jack
leaned in and whispered into Mary’s ear, “You know, Mary, there’s
another type of ‘bundling’ that’s not just for chickens.”

Mary felt a shiver run down her spine as Jack pulled out a set of
handcuffs and chains from his pocket. She had never felt such
excitement before as Jack led her back to her cabin, ready to explore
the depths of her desires.

As the night wore on and the candles burned low, Mary realized that
she had never felt more alive than she did in that moment, tangled up
in the chains and surrounded by the sweet smells of dessert and floor
wax. She was grateful for the unexpected joys that life had brought
her and for the handsome stranger who had opened her eyes to them.

No one knows what it’s like to be the bad man

The divorce was the hardest thing I’ve ever been through.

I miss her terribly. She wanted the divorce, I didn’t. I came home stupidly, still expecting that she would be there, and of course she wasn’t.

I should have been wiser and more honest. All that’s broken now, and it will never be reassembled, and it’s up to me to try to figure out what this new life looks like.

There isn’t a day that goes by that I don’t miss her in some way. But she’s not talking to me anymore, and there’s nothing I can do.

It’s only very recently that I’ve started looking for ways to have fun on weekends. I’m doing a show again. Dating here and there. Little driving trips.

I stayed in the house, probably longer than I should have, because I kept hoping that she might come home. Seems silly now.

I’ve been broken a long time. Trying not to be broken now. Takes a lot of energy. Radical honesty, that sort of thing.

What God wants God gets, God help us all

Originalism is an innocent-sounding concept: the meanings of laws should be understood, using the language and context in which the authors wrote it. A perfectly sensible proposition, no?

It’s no coincidence that originalists tend to be Christians. The originalist argument is exactly the same that every pastor uses, who gets up behind the lectern to quote out of context from Romans 13. You may have a copy of the Bible on your bookshelf at home, but you can’t merely up and read the thing by yourself; goodness sakes it is a lot of onionskin pages to paw through. So the helpful pastor will tell us what the intent of the chapter was: the Bible commands us to obey the law, and illegal immigration is against the law, so illegal immigration is against God.

There’s always a second, unspoken half of originalism.

First, the spoken bit: we should interpret the Constitution as the Framers intended.

But the authors of said Constitution are dead, just as much as whoever wrote Romans 13; they are all just as dead as Marcus Aurelius said they would be.

Second, the unspoken bit of originalism: we have just the right person to perform said interpretation.

And there’s the crafty little heart of originalism. They are ready — at this very moment no less! — to expose their detailed understanding of the authors’ intents. And only their interpretation of the original text is valid. Because only they truly understand the Second Amendment, or Jesus, or whatever thing must be reanimated from the grave. Only they can provide fair legal representation to the dead.

Do you know how a Ouija board works? You place your hands on the edge of this plastic tray and slide it around a board, to get messages from the other world. You may then proceed to get rich quick, as your beloved dead Granny will send you today’s Mega Millions numbers. Granny was always trustworthy in such matters.

It’s the easiest thing in the world to elect yourself, consciously or no, as the One True Vessel of an entity who isn’t around to fend for themselves.

Most liberals I know, roll their eyes and continue doomscrolling when confronted with a calm-sounding originalist interpretation. But the correct moral and legal response to originalism, which liberal-minded folks are for some reason afraid to do, is to simply yank the reins out of the driver’s hands and yell No! Jesus and the Bible specifically orders you to love all immigrants! The Second Amendment is conditional to a well-regulated militia! Granny was morally opposed to gambling! Ouija is a trademark of the Hasbro Corporation! And only I understand the intent of the original authors, not you!

At this point, the discussion will likely devolve into a musical round of No you don’t understand it no you don’t understand it. But conservative jurists are limited, by definition, to thinking only what others have previously thought. That lack of creativity, will give pause to any conservative, before they consider puppeteering the dead again.

Cause I’m alive, live wire

It’s possible to connect to a WireGuard VPN without administrator privileges on Windows.

But by design, the process for doing so is documented poorly.

First, install the WireGuard quick configuration file as an administrator. (The user won’t be able to create or delete new tunnels, just start or stop existing ones.)

Then, you’ll need to run RegEdit as an administrator (type in regedit.msc into the Run window, right click, and select Run as administrator), and then create a DWORD key in the HKLM\Software\WireGuard\LimitedOperatorUI registry key. Set that DWORD to 1.

Then, you’ll need to provide new permissions to the user who you want to be able to connect and disconnect from your VPN.

To do this, run Local Users and Groups as an administrator (type in lusrmgr.msc into the Run window, right click, and select Run as administrator), select the Users folder, right click the user you want to give permissions to, and then click Properties.

Select the Member Of tab.

Then, click Add… at the bottom of the screen.

In the “Enter the object names to select” text box, type in Network Configuration Operators and click Check Names.

You’ll have the option to select the Network Configuration Operators group. Do so and click OK.

Click OK on the Select Groups window, and click OK on the Properties window.

Now, your non-administrative user can connect to, or disconnect from, any existing WireGuard tunnel, without being able to add or delete existing tunnels.

You’ll still need to add or delete new WireGuard connections as an administrator, but using this technique, a non-administrator can turn on or off VPN connections on Windows.

‘Cause my sweet baby ain’t around

Bluegrass.  It’s a totally American music. Born around the same time as rock and roll, it developed in a parallel path, touching other musics and being touched by them.

I’m choosing bluegrass for you because it is what I remember.  It was an old music already, when I was growing up in Sissonville, West Virginia.  It always seemed to be back in the corner of consciousness — the only thing the radio would receive, on those long car trips to the trailer at Franklin.

Like all musics, we have to choose a starting place for bluegrass, and if we were to be fair, we’d have to go back through bluegrass’s Scotch-Irish roots, to the country dances of the Old World and to the rich ballad tradition there.  And we’d have to include work songs and the banjo as an instrument of purely African heritage.

But I’m going to lie to you, and say that bluegrass started in Dallas of 1927, and we’ll listen to a recording that Blind Lemon Jefferson had to travel all the way to Chicago to lay down:

A sparse recording of a modified blues progression.  Not much there, really, until you notice the fingerpicking and the blues singing that turned into several different kinds of American musics in the decades to come.

Let’s move to Bristol, Tennessee.  It’s 1927.  That guitar is being picked on by one Maybelle Carter:

Yet again, that fingerpicking, with the melody in the bass line.  Totally unlike the Dixieland frailing sound that you get when you strum the guitar.  Here and as above, the guitar serves as its own rhythm instrument.  This is a novel sound, and it’s transmitted out of Maces Spring, Virginia, and Ceredo, West Virginia, and anyplace else big enough to set up an antenna and a phonograph player.

Bluegrass and radio are deeply intermixed.  In the Appalachian hills, the presence of one meant the presence of the other.  My grandfather did tap dancing shows on a local radio station when he was young.  The shows always featured local talent playing local songs, and there was never any music that was cheaper than bluegrass.  Here’s Jimmie Rodgers, out of Mississippi, laying down “Blue Yodel #9.”  By this point, everyone with a radio has heard how to fingerpick a guitar.

Now before the 1940s, the banjo was generally strummed.  You could stroke the strings with the backs of your nails, and pick out a melody with your thumb, much like Mother Maybelle did on the guitar above.  That playing method was called frailing, and it was “the way a banjo sounded” for decades.

Until The Grand Ole Opry, broadcast out of Nashville since 1927, discovered Lester Flatt and Earl Scruggs in the 1940s.  These important early radio broadcasts, seeded the signature metal fingerpick sound, that you probably already associate with banjos.

Technical precision was always a key part of the bluegrass sound.  Flatt and Scruggs proved that you didn’t have to play perfectly, as long as you played fast and loud.  But at the same time, important bluegrass guitarists like Chet Atkins paved the way for diamond-cutter exactitude from guitarists like Don Felder and Mark Knopfler and Brian May.  Rock and roll was popping when Atkins recorded this stately piece in 1954:

Bluegrass took its storytelling roots from Scotch-Irish tradition.  And one of the most fascinating vestiges of that tradition, is the murder ballad.  The basic idea, is that you’re singing a cloyingly sweet song, about the fact that you beat your girlfriend with a stick and drowned her, for some inadequately explained reason.  Murder ballads are weird and spooky as hell, but they come from a long and honorable line of storytelling.  Before the Knoxville Girl was the Knoxville Girl, she was the Wexford girl, from Irish ballads of the 1800s; and before she was the Wexford girl, she was the victim in a popular broadside that Samuel Pepys wrote about in his diary.  Like I said earlier, I lied when I told you when bluegrass got started.  Here’s the Louvin Brothers, from 1954; but really, the story is from 1683 or thereabouts.

So there was never any particular Knoxville girl or boy, but there was Cas Walker of Knoxville, and he was just as bad or worse than any murderer.   The Cas Walker Farm and Home Show was a popular variety show broadcast out of Knoxville, from 1929 on, hosted by this particular owner of a chain of local supermarkets.  Cas Walker was a legendarily ornery son of a bitch, and is probably worth several books in and of himself:

Anyway, the Knoxville locals that managed to get on the program, got play across Tennessee.  A few of those locals managed to make some good of themselves:

Bluegrass music never tolerated the weak.  If anything, the bluegrass women were meaner than the men.  Here’s Loretta Lynn in 1968, committing interstate transmission of a threatening message:

By 1970, both country music and bluegrass were more or less in final form.  Here’s Cherryholmes playing a crossover hit from 2005.  There’s nothing in this song that wasn’t in the genre forty years earlier:

From 1970 onward, technical production ability began to trump creative performance ability in country and rock music.  The Phil Spector wall-of-sound production technique made popular rock and country into Wagnerian-sized orchestral fireworks.

That’s the opposite of the bluegrass I remember.  I choose to give you bluegrass, for the same reason that I would prefer to make you a meal with my own hands.  Bluegrass is human.  Bluegrass doesn’t come out of machines or recording studios.  It comes out of amateur musicians with cheap, out-of-tune voices and cheap, out of tune instruments.  It comes out of driveways and trailers and little white churches in the valley.  Bluegrass has never, ever been formal.  When musicians play the good stuff, the real stuff, they tear instruments apart.  Like all things from the heart, bluegrass is full of disorder and complexity and passion and immediacy and love.

And would you call it to his face?

Here’s a story I wrote for you.

Two poor brothers were wandering through the forest.

In a clearing, the two brothers came upon two children.

On each child’s neck, there was a rich and fine jewel-encrusted necklace, tightly locked onto her.

The mark of each necklace bore the name of an extremely powerful king that lived far away.

One brother took a child and said:

“I recognize this mark; it is my master’s mark. My master has promised a rich reward to all who are good to his children. Therefore, I will not kill this child and take the necklace, for my master would punish me with fire and torture. I will protect the child, and travel the far distance to my master, where he will reward me with untold riches instead.”

The other brother took a child and said:

“I do not recognize this mark. I have no master. I could kill the child and keep the necklace for myself, and no one would know. But I choose to save the child, because it is good and loving to do so. I will protect the child, and travel the far distance to his master. But I do not care whether I am rewarded. To make the right choice is its own reward.”

So here is your question:

Which of the brothers is the most good? 

As we move with zeal and desire

LLVM’s TableGen tool, as well the domain-specific language that goes with it, are exceptionally powerful. Tablegen is intended to take an extremely compact representation of almost everything a target machine does, and to spew out tons of helpful C++ support code, to make writing a compiler easier.

However, the documentation for TableGen is dreadful. It’s not written to the audience of developers who trying to port LLVM to a new target.

Here are some items that I wish that the documentation had explained going in.

  1. At its core, LLVM is fundamentally a set of base classes.  The base classes can be used to build language-related tools, such as a compiler, an assembler, a linker, and so on.  LLVM is not a single toy; it’s a bunch of Lego blocks that can be pulled apart and reassembled.  Being productive in LLVM development, is strongly related to understanding the existing LLVM class hierarchy.  This, in turn, implies that you must first understand what the LLVM class libraries take care of for you, so that you don’t reinvent the proverbial wheel.
  2. The standard LLVM distribution, for Windows anyway, doesn’t have all the built-in tools that you will need to work on LLVM.  You will need to bootstrap your own build of the LLVM compiler, with all the bells and whistles enabled, to do productive work.  This will probably be a via a two-stage bootstrap, where you use Visual C++ to generate a stage-one LLVM compiler, and then use the stage-one compiler to generate a complete, optimized stage-two LLVM compiler.  
  3. On Windows, make the new Visual Studio Code your primary development environment.  Use CMake and Ninja as your build system.  Although it is possible to generate a working build with classic Visual studios, do not do so, unless you absolutely must for some reason.  The projects generated by CMake for LLVM on Visual Studio, are bloated and slow.  You will eventually hate life as you wait for your Visual Studio solution to check every single project, in order to compile a single file.  
  4. The “Porting LLVM” guide suggests that you start with the SPARC target implementation, and copy it, in order to implement your own target support.  This might have been a good idea twelve years ago, but it’s a bad idea now.  A far more workable solution is to start from an implementation that already resembles your target in some way.  For example
  5. Although the TableGen language is a general-purpose templating language, a great deal of convention already exists regarding what kinds of things can be done with the language.  You must observe these conventions, as the base classes in LLVM 

Bootstrapping the LLVM compiler on Windows

Here’s the formula I used to bootstrap a complete release build of LLVM on Windows.

  1. Open a Visual Studio 2019 command prompt window
  2. git clone https://github.com/llvm/llvm-project
  3. cd llvm-project
  4. mkdir -p build/stage1
  5. cd build/stage1
  6. cmake ../../llvm -G "Visual Studio 16 2019" -A x64 -Thost=x64 -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;libcxx;libcxxabi;lldb;compiler-rt;lld" -DCMAKE_BUILD_TYPE=Release -DLLVM_OPTIMIZED_TABLEGEN=1 -DCLANG_ENABLE_BOOTSTRAP=On -DCMAKE_INSTALL_PREFIX=[ a complete path to a stage-one compiler output directory ]
  7. cd ..
  8. mkdir stage2
  9. cd stage2
  10. cmake ../../llvm -G Ninja -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR -DLLVM_TARGETS_TO_BUILD="AArch64;X86" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;libcxx;libcxxabi;lldb;compiler-rt;lld" -DCMAKE_BUILD_TYPE=Release -DLLVM_OPTIMIZED_TABLEGEN=1 -DCLANG_ENABLE_BOOTSTRAP=On -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=c:/git/llvm-project/build/ninja-clang-release/install -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_LINKER=C:\git\llvm-project\build\ninja-msvc-release\bin\lld-link.exe

But just remember brothers and sisters, you can still stand tall

Pecan smoked roaster turkey made from this recipe

Pecan smoked roaster turkey made from this recipe

Here is the Best Thanksgiving Turkey that can be made with commonly available store-bought ingredients and tools.

This is a pecan-smoked turkey with rosemary and thyme aromatics, and it will be, by far, the moistest and most flavorful turkey you have ever tasted.

Brine your bird in overnight in salt, sugar and peppercorns; then, season and smoke your bird slowly at low temperature, with moist heat, in a smoker roaster. This will result in an incredibly moist, incredibly flavorful turkey, that is a HUGE leap in quality over classic oven methods.

A bird made using this method will keep well in the fridge. Sandwiches and other things made with leftovers, will be especially tasty.

Oster manufactures a smoker roaster; it’s about $60 on Amazon as of this writing. Most hardware stores stock pecan wood chips for smoking, but it’s available on Amazon as well.

Ingredient measurements are approximate. For this recipe, measure amounts with your heart, not your cups and spoons.

This recipe comprises lessons learned from hundreds of turkey recipes and dozens of turkeys cooked over thirty years. Thus, it can be objectively described as the Best Thanksgiving Turkey.

  • 1 1/4 c salt
  • 1 c brown sugar
  • 1/4 c peppercorns
  • 1 10-14 lb turkey, fresh or frozen
  • 1 onion
  • 4 sprigs fresh rosemary
  • 2 sprigs fresh thyme
  • 2 c white wine (whatever you have open in your fridge will do)
  • 6 T butter, softened
  • 1 1/2 c pecan wood chips, for smoking

  1. Choose an outdoor location for safely smoking with the smoker roaster. You will require electrical power for the smoker roaster. Do not smoke food indoors, and do not smoke where your roaster can be rained upon.
  2. Prepare brine by mixing 1 c salt, the brown sugar, and peppercorns in a clean, food-safe cooler, bucket, or other container of sufficient size to hold the turkey.
  3. Remove giblets, neck, and any plastic trussing from turkey. Reserve these for making gravy if you wish. Add turkey to cooler. Cover turkey with water. Brine bird by keeping cooler cold for a day; you may refrigerate it or top it up with ice.
  4. The day of your event, line your smoker roaster pan and its rack with wide aluminum foil, making sure not to cover smoke vents.
  5. Coarsely chop onion. Clean rosemary and thyme. Chop thyme leaves finely.
  6. Remove turkey from brine; drain. Place turkey on rack and place rack in smoker roaster. To stabilize turkey on rack, position wings upward, behind where turkey’s neck would be.
  7. With clean hand, gently separate turkey skin from breast with your fingers, starting from cavity. Try not to tear the skin and try not to move it much out of place.
  8. Generously rub 1/4 salt, butter, and thyme, underneath turkey skin onto turkey breast.
  9. Put sprigs of rosemary and coarsely chopped onion into breast cavity. These are aromatics only; do not eat these. If you want stuffing, prepare it separately. Do not cook stuffing inside your bird, as this cooking method does not achieve a safe temperature for this purpose.
  10. Add pecan wood chips to smoking cups. Make sure smoking vents in pan are not covered by foil.
  11. Add wine to smoker roaster pan. Place rack into smoker roaster pan, and then pan into smoker roaster, in your chosen outdoor location. Cover with lid.
  12. Set temperature to 200 F (two hundred degrees Fahrenheit).
  13. Roast bird for approximately four to five hours, more or less.
  14. Every half hour or so, baste the turkey with its drippings and wine, using a turkey baster.
  15. Temperature control during cooking is key. If your bird is cooking too fast for your party, you may need to pull the temperature back to 175 degrees F; if your bird is too slow, you may need to rush it along at 225 degrees F or higher. You may even hold its temperature below 150 degrees F. The slower you cook your bird, the juicier it will come out.
  16. Your bird is done when a digital thermometer, inserted in the deepest part of the breast against the breastbone, reads precisely 165 degrees F. Measure temperature precisely; do not estimate temperature through other methods. Your bird’s skin will be quite dark due to the smoking.
  17. Unplug roaster smoker. Move roaster smoker indoors. Let bird rest covered in pan for ten minutes or so.
  18. Insert a large serving fork in neck and a large serving fork into bird cavity. Lift bird slowly and carefully onto serving platter. Note that the bird may be lightly stuck to rack. Use caution while removing to avoid burns.
  19. If you choose to make gravy, do not use turkey pan drippings for it; smoked turkey drippings tend to be too bitter for this purpose.