shell Archive

Scripting Intro: A Simple Menu

I thought I’d ease back into programming videos with some on *nix scripting. This first one doesn’t really try to teach specifics; it’s more about the process of writing a script: deciding on the task, sketching out the process, picking a language, and hacking out the script, being flexible enough to make changes that come to you along the way.

There seems to be a hum in this video that I didn’t hear when I was first editing it, so apologies for that. I’ll try to figure out where that’s coming from and clean it up next time.

Homegrown Frittata

First, some housekeeping. When I went to upload this video, I discovered that it’s been over three years since I last posted a video. Tempus fugit. I started a new (better) job in 2020, and that meant learning or getting back up to speed on about half a dozen programming languages and operating systems. That took up all my digital headspace, so my Internet- and computer-related side projects had to go on the back burner for a while. But I’ve been feeling the urge to do some instructional videos again, which means bringing the blog out of hibernation too.

I picked up a basic GoPro and various mounts for it, so this time I won’t have to tie up one hand holding the camera, which was limiting before. It’s too late for garden videos this year, but I plan to get back to them next year, and I’ll be able to show how some things are done instead of just taking walks through the garden pointing to things. I’m still working out what else I might be able to do with it, but this cooking video seemed like an easy start, and ties into the garden stuff since most of the ingredients came from there.

I stopped using Facebook a few years ago, and I’ll be sticking to that. Life is better without social media. But most everyone I know still uses it, and I know that’s where some people used to find my articles, so I’ll continue sharing the articles there.

No promises as to what’s coming next, but there will be something. I want to get back to my programming videos too, but I’ll have to watch some of them just to jog my memory first. I also have several real-world building projects in mind.


I used to make a lot of scrambled eggs, fried, eggs, and omelettes, but recently I’ve taken to frittatas. My old French cookbook says a frittata is an “Italian omelette.” I don’t know if that’s true, but I like them better. It’s basically an omelette where you cook the other ingredients with the eggs instead of dumping them on top at the end. It’s hard to go wrong with browning some combination of meat and vegetables and dumping eggs into them, so that’s become the daily breakfast around here.

At the same time, the chickens have been really doing well the last couple of years. I sold some and gave away some, but still had a lot of eggs to use. So I started frying up some egg whites for the dogs every day. Egg whites are full of protein, and dogs need a lot of protein, plus it’s better than the soy protein they get from bagged dog food. And that means more yolks for me, and yolks are where the healthy fats and most of the vitamins and minerals are. So it works out for everyone and uses up more eggs.

I usually cheat at the end, cooking it completely on the stove instead of putting it in the oven the way the recipes will tell you to. Finishing it in the oven definitely makes it look better, and it’ll hang together in one piece to put on a plate. My way lets it fall apart, especially when you add this many ingredients. But it eats the same, and it saves 10-15 minutes when you’re not worried about presentation and just putting breakfast on the table.

RIP Meat Loaf

I could probably count on one hand the number of celebrities whose death would sadden me. But Meat Loaf was one of them.

I’m not old enough to have grown up with him. I was still in grade school when he was sweating through “Paradise on the Dashboard Lights” on stage as a young star. But by the time I was old enough to start buying albums, everyone, and I mean everyone, had Bat out of Hell or a cassette tape copied from a friend’s album. We could all recite the “baseball” part. Conor Lastowka of Rifftrax said of “Crying Out Loud” that it just builds and builds until by the end it’s like they’re launching missiles off the stage. “It’s ridiculous, but that’s what I like about it.” That’s what I’ve always liked about his “biggest” songs too: the way just when you think they’re winding down, they build to a new level, until he’s wrung every ounce of feeling he can get out of it.

When Bat out of Hell II was coming out, it was pretty big news. It might have been one of the first CDs I bought. I think it was generally considered not as good as the original, but what could be? It was still pretty great, and songs like “Objects in the Rear View Mirror” and “Life Is a Lemon” carried over his style of operatic, intense rock.

When the Internet came along and made it possible to have all the music you ever liked, I discovered that he’d made several albums in between those two, and some of those songs are now favorites. They tend to be more conventional rock, less operatic, but you still get some 7-minute songs that build and build, like “Couldn’t Have Said It Better,” and just plain fun ones like “Los Angeloser.”

I don’t know anything about his personal life. I don’t think I ever wanted to, and not just because celebrities tend to be disappointing when you look too close. There’s a lot of pain in his music, and a man should be allowed to keep his pain to himself. The pain that comes through his songs is what he wanted to share, and that’s enough.

But it wasn’t just pain; that by itself wouldn’t have pulled me in. There’s a strength and optimism and heart that comes through his songs. And despite seeming to put everything he had into every performance, he didn’t take himself seriously. See his “Ode to Bagel Bites” with Jimmy Fallon for instance. Or his very, very bad movie, To Catch a Yeti. But be warned, it’s very bad.

One day I was listening to “Sweet Child of Mine” on the radio, and thought if I’m ever rich, I want to commission Meat Loaf to cover that song. Axl sings it fine, but it needs Meat’s power and heart. I guess I’ll have to wait on that.

Not Arguing on the Internet

The impulse to argue online, or just to share knowledge, is a strange thing. It’s a thankless thing to do these days, when so many people are just waiting to be triggered by anything.

This morning, on a forum about a completely different topic, someone brought up pit bulls. There was the usual nature/nurture argument between “it’s the owners turning them mean” and “it’s the breed.” I quickly knocked out a couple hundred words about how it’s both: the breed was designed over many generations to be an aggressive fighter, but now it draws people who want to encourage that behavior. It was a well-written, fair explanation, and as I proofread it, I thought, “Why do this?” It was sure to get me downvoted and attacked, probably by people on both sides. Some of them might have even read it, but most wouldn’t. The odds of changing anyone’s mind with one post is slim to none. I don’t know any of these people, so why do I care what they think about pit bulls anyway?

So I canceled it without posting. I’ve been doing a lot of that lately, writing something and then trashing it. When you know about things, there’s an impulse to share, and that’s generally not a bad thing. Internet forums probably aren’t the best place to do it, though. The other day, someone mentioned finding my reddit account. It was a weird feeling, because I’m not ashamed of anything I post there, but you don’t write the same in the middle of conversations as you would if you expected someone to read all your posts in one sitting. I even wonder about this blog sometimes. I stand behind everything I write here, but the “Dear Reader” in my mind when I’m writing is someone who knows me, so I don’t have to lard posts up with disclaimers. Someone who drops in here cold wouldn’t have that context and could take away all sorts of impressions. I’m too old to care about that, but if I were more fragile, I’d have to.

At least the blog has another purpose, as a place to collect links to my content that might actually produce some value. More on that coming soon. In the meantime, I think I’m going to stop all other online commenting that can be tied to my name, and do less of it in general. I should satisfy the impulse on more useful, lasting writing anyway.

Staying Warm & Bashing

Once I start burning wood for heat in the winter, I like to keep the fire going, because that’s easier than starting a fresh fire every day. The down side is, even a small fire in the furnace means you’re getting some heat, whether you need it or not. So these sunny, 50-something days get up to 80 in the house, and you have to start cracking windows. It’s almost nice when the weather settles into winter temperatures, so it feels good to keep it toasty all the time.


Sometimes it doesn’t pay to be too accurate. For years now, I’ve had “Unix shell programming” on my resume along with other programming languages. I said “shell” because there are lots of Unix shells, from the basic sh to its descendant ksh and then to bash and zsh, just to list one branch of the family tree. All the shells that descend from sh are programmed basically the same, plus features that each one adds; but if you program for sh, it’ll run in all of them. I mostly use mksh on my systems, but also bash and sh on a regular basis. So I just said “shell” rather than limit myself to a few or list them all, and I’ve never really gotten calls for doing it.

The other day I was talking to a friend in the business who said he runs into a lot of companies who need “bash programming,” and they think of it as just “bash,” not shell, so that’s what they look for. Bash is the default GNU/Linux shell, so people whose only Unix-type experience has been with Linux in the past 20 years think of it as the only one. Some distros are now moving to dash, another ksh successor, but bash is still dominant. Had I said I do “bash scripting,” I might have gotten calls for it, and 99% of the time it wouldn’t matter what shell they actually use.

I guess the lesson is: if you’re trying to market a skill or product, don’t choose the terms that make the most sense or are the most correct. Find out what the people who need it will call it, right or wrong, and use those.

Collecting Bones

Guy’s second annual Deer Drag has begun. He found another deer carcass, probably one the neighbors dumped behind their place, and is bringing it home piece by piece like last year. First there was a chunk of meat, then a leg, then a couple nights ago the whole spine and ribs. He hadn’t showed up for a while at night, so I went looking for him, and he was working on it in the neighbors’ front yard. I went and dragged it the rest of the way so he wouldn’t get hit while pulling it across the road.

I haven’t had to fill his dog food bowl in over a week, so that’s nice.

Collecting Bones

Guy’s second annual Deer Drag has begun. He found another deer carcass, probably one the neighbors dumped behind their place, and is bringing it home piece by piece like last year. First there was a chunk of meat, then a leg, then a couple nights ago the whole spine and ribs. He hadn’t showed up for a while at night, so I went looking for him, and he was working on it in the neighbors’ front yard. I went and dragged it the rest of the way so he wouldn’t get hit while pulling it across the road.

I haven’t had to fill his dog food bowl in over a week, so that’s nice.

Garden Update for November 7, 2019

Took me a while to get this one uploaded. It’s probably the last video of the garden for this year, unless I do one last one with snow on. There will be at least one more as a sort of wrap-up with some planning for next year.

Garden Update for October 16, 2019

We got a light frost a few days after I hoped we wouldn’t in my last video. It was borderline, though, so it killed some things and just singed others. I harvested as much as possible the day before the frost, so I spliced a video of that into the center of this one. If the next frost holds off for a week or two, there should still be more beans coming along from the plants that survived. All the fall crops–lettuce, peas, carrots, broccoli, cabbage, etc.–look great, some of the best I’ve ever had. Seems like it’s hard to get them planted early enough to get done but not so early that they burn up in the heat, but it worked well this year.

Garden Update for October 6, 2019

Winter is coming up fast all of a sudden. A couple days ago it was 90 degrees, now it’s dipping down into the 40s at night. There are a lot of green tomatoes and beans on the vine, so hopefully the frost will hold off for a couple more weeks so they can ripen. The squash are done, so they just need to sit in the sun another week to cure before they go into storage. Lots of harvesting and preserving to do in the next few weeks, and then time to think about what worked and didn’t this year and make plans for next year. I think I’ll do one video just on that.

Garden Update for September 21, 2019

Trying to keep up with the green beans and tomatoes, canning most of them. The watermelons seem to have a fungus called anthracnose, so I’m just hoping they produce some ripe melons before they die. Watermelons don’t ripen off the vine like tomatoes and some other fruits do, so there’s no picking them early. The butternut squash look great, some of the biggest I’ve ever gotten. The dry beans will need picking soon, so we could use a few dry days to get that done, but unfortunately it looks like rain.

Garden Update for September 12, 2019

We’re in full-on harvest season now. The cover photo is all the stuff I picked in one day, not counting a pound of radishes I pulled and cleaned earlier that morning. Some of the tomatoes have gone to make ketchup. Thirteen pounds of tomatoes cooks down to three quarts, so that uses them up fast. Several quarts of green beans are put away in dry salt or brine, some traditional preservation methods I’m trying out. Some of the late green beans that I said in this video would be ready soon…well, they’re ready. I looked under the leaves the next day and there were loads of them to pick. I think it’s time to make up a sign and find a way to sell some.

Garden Update for August 26, 2019

Picked over four pounds of green beans today, and there might be that much again tomorrow. Will have to start canning some this weekend, or take some to the farmer’s market. Cooler weather and regular rain lately have things looking great. The fall plantings of peas, lettuce, carrots, spinach, and kale are all up and growing. Also picking a lot of tomatoes and some Swiss chard and sweet corn.

Hen with Chicks

I think these chicks are about a month old, maybe a bit more. They’re the first ones I’ve had a hen hatch out successfully. She got pretty adamant about sitting on a batch of eggs, so I figured the summer was a good time to let her try. Usually they lose interest in them for the 21 days are up, and they wander off and I end up throwing away a bunch of eggs. This time she stayed long enough to hatch three out of about twenty. I put a chick waterer in the henhouse and tossed some feed on the floor, but basically she took care of them. It was kind of cool watching her break feed pellets with her beak so they could eat them.

This was just their second day coming outside, but now they’re on the move all the time. Fortunately the cats seem to have no interest in them. Animals are funny that way; if something is born on the farm, they seem to understand that it belongs, while if you brought chicks home from the store, they’d be all over them if you allowed it.

Garden Update for August 11, 2019

It was getting pretty dry when I recorded this, but we got an inch of rain later in the night, just in time. I dug all the early potatoes and got about 20 pounds. Not great, but the experiment worked out okay. The fall planting is done now, and the weeds are pretty well controlled. Harvesting lots of tomatoes and green beans, and there will be sweet corn and Swiss chard any day now.

Garden Update for July 30, 2019

Things are perking up after a half-inch of rain a couple days ago. I had to fence the chickens out of the first garden spot, because it looked like they might be snacking on cabbages and broccoli, and might have pecked at a tomato. Not harvesting much right now, but tomatoes and green beans should come on strong soon.

Garden Update for July 21, 2019

We finally got some rain, the night before this recording. I had to break out the soaker hose last week, as plants were starting to wilt. Things are growing pretty well now, and over the next couple weeks it’ll be time to start harvesting potatoes, green beans, and tomatoes. I’ll also be planting late garden: radishes, carrots, cabbage, beets, and whatever else is sure to finish in less than two and a half months or can take some frost.

Garden Update: July 9, 2019

It took me a few days to get this one processed and uploaded. It got cut off right before the end for some reason, but I was just about to wrap up and say, “Thanks for watching,” so: thanks for watching.

We’ve gone from rainy season to desert season. I watered most things the day after taking this one, because the soil I tilled up was just powder. Hoping some rain comes through soon. There are a lot of mid-season things coming up like beans, and I’ve started planting late-season crops. Just picked a couple of scalloped squash yesterday, and turnips, potatoes, green beans, and tomatoes should be ready soon.

Garden Update: June 19, 2019

Rain continues to be the story of this year’s garden. There was water standing in spots when I recorded this, and it’s pouring again as I upload it a couple days later.

Things are still growing, though. Whenever there’s a break in the rain for a few days, it’ll be time to do a lot of weeding and start setting out warm-weather plants like sweet potatoes and squash and planting late garden.

Quitting Facebook Again

I just finished up my second Facebook ban, this one for seven days. So I’m out. The next one would probably be for 30 days, and there’s no point in using a communications network where you could be switched off at any time and have no way even to tell people why you aren’t responding. I had quit the site a couple years ago, and was happy with that. I started using my account again last year just to get to a private group of an organization I was part of. But FB has decided I’m a Nazi whose opinion should be suppressed, so I won’t be giving them any more content. If my FB friends want to follow my blog and videos, they’ll have to check the RSS feed here (your browser or app should know what to do with it) or subscribe to my Bitchute and YouTube channels (and the YouTube ones might go away any time for the same reasons). It’s inconvenient, but that’s where we are. Convenience or freedom: pick one.

Both bans were for politically incorrect memes posted to the private group. FB says they were for violating community guidelines, but that doesn’t even make sense in a private group, so it’s a lie. It’s simply a gradual purge of any opinions that would offend the average gender-studies graduate, and they’re ramping it up for the 2020 election, so it’s happening to more people all the time. That was obviously the plan since 2016, but they’re speeding it up now that they’re finally coming under the scrutiny of the FTC and DoJ. They always double-down.

FB could pull its head out of its ass and go back to the benign neglect of pre-2016, when they blocked truly offensive/illegal content and let people make their own decisions about the rest using the tools they provide to hide and ignore people and posts. But that’s not going to happen. The owners of FB, Google, Twitter, and the rest of the Big Tech, Big Social gang are not Americans. Some are technically American citizens, but they don’t think of themselves as part of the American nation and they have no respect for American culture, law, or the Constitution. They see themselves as citizens of a global, supra-national techno-state, and their loyalty is to themselves and their fellow technocrats. They have more money than they can figure out how to spend, so they reckon they can afford to lose some by cutting loose the right-wing and conservative portion of their user base. They expect to gain more than enough to offset those losses by the gains from their global and foreign investments, as long as they can suppress American patriots and get the White House back in 2020. They’ll gladly lose money on their bottom lines for that goal.

So they won’t back down voluntarily. There are a couple ways the feds could bring them to heel, so it’ll be interesting to see how that plays out now that they’re starting to do their jobs again. I’ve talked about some of this before in podcasts, but the bad thing about podcasts is they’re hard to search, so I don’t remember exactly what I said. Maybe I’ll do some new ones to get up to date. In short: one option would be to apply Marsh v. Alabama, which says private corporations which provide a space for free public use have to respect constitutional rights in that space. Another option is to call them on the publisher/carrier game they’ve been playing. They claim to have no legal liability for the content they carry because they’re just carriers. For instance, if a group of people use FB to arrange to rob you, you can’t sue FB as a conspirator, just as you can’t sue the phone company if they plan it over the phone. But by censoring speech over offensive opinions, they act as publishers who are responsible for what users see on their system. They’ve had this both ways, and that can be stopped. They can be forced to go back to acting like carriers, as I said above, or they can be treated as publishers who can be charged and sued over any piece of content they allow, which would entirely destroy them.

We’ll see what happens. They may also be broken up under anti-trust law for monopolistic practices and other illegalities, but I don’t know much about that, and that doesn’t seem like it would address the problem as directly. It could break their dominance over the social media space and allow competitors without a political ax to grind to get a foothold, though.

Making a Wooden Wheel for a Lawnboy Mower

One of the drive wheels on my self-propelled mower started coming apart the other day. I tend to be hard on equipment, treating it like it was made of quality materials and can take some punishment. That’s why I like to buy older tools at auctions; they can handle heavier use than most new tools. Most of this mower is metal, but the wheels are plastic. I would hook the wheel on fence posts and let the mower pull itself around them, mowing close, and it kinda chewed up the wheel.

So a new wheel comes with the gear already pressed into it, and runs $40-50. I didn’t really want to spend that much, and I didn’t want to wait for one to ship anyway, so I thought I’d try to make a replacement. I built it with scrap plywood and a few bolts, and it works as good as new, so I’m pretty happy with it. The video is some clips of the process. Sorry about the crummy audio at the beginning; it does get better.

Garden Update: June 5, 2019

The rain and cool spells this spring have slowed down the garden, but today is hot and sunny so new seedlings are popping up all over. Hard rains can make the surface too hard for seedlings to break through, so that hurt some of the early plantings, and I’ve been replanting some of those or adding more seeds in empty spots. The strawberries loved the cool weather, so the small patch has produced about 7 pounds so far. Can’t wait to spread that patch out to have about four times as many.

I wound up with so many seedlings started inside that they won’t all fit in the garden, so I may try to sell some or just give them away.

Garden Update: May 20, 2019

I managed to get a video in between rain showers. I got about half the garden planted before the last batch of storms came through, though, so there should be a lot of plants coming up soon. The potatoes that I was about ready to give up on are through the straw and looking good now. The early plantings of sweet corn and beans were probably too early, and seem to have failed from cold and flooding, so those will get replanted whenever it dries out again.

Kittens and Spring Pictures

I’ll be darned.

The two older momma cats had kittens about a month ago. I normally don’t interfere in animal birthing unless there’s an obvious problem, because their instincts usually know best. One had hers in a sensible location, a shelf in the basement inside sort of a frame that kept them from falling off. The other one didn’t. She picked a small shelf over the basement stairs, so the kittens could immediately fall about 8 feet.

I found two of them after it was already too late for them, but she had one nursing. Then that one disappeared, so I thought she’d moved it to a safer place. After a while, though, I noticed she was following me around and acting out of sorts. She seemed to be making a nest in an old blanket on the porch, but there were no kittens there. Then I found the missing kitten where he must have fallen to the basement floor and crawled behind a box. He must have been there for at least a day.

He barely showed any signs of life, but I went and got his mama and made her smell him. She didn’t seem interested. So I took him to her nest on the porch, and then she started licking him. A day later he was gone again, so I thought he probably died. Then I noticed a couple times when I was in the basement, she came down the stairs, and I followed her back to a hole in the wall to the space under the bathtub. She’d moved him in there.

He mewled under there once in a while at first, but I hadn’t heard him in a long time, so again I thought he’d died. Yesterday I opened the basement door, and there were kitten and cat poking their heads out of the hole. It looked like she wanted to bring him out of there, but couldn’t make the jump to the stairs while carrying him. So I got a box and put some paper in it, and stuck them in the box next to the stairs.

Then he disappeared again, and I found him on the stairs going out of the basement. She must have been trying to take him outside somewhere and lost him along the way. Back to the box. In my mind, he’s already used up half his lives, but if he manages to survive this quality of mothering, he’s going to be one tough cat.

Here’s the other litter waiting for Momma to come back. Free kittens in T-minus two months, give or take. I haven’t counted boys and girls yet, because I respect their privacy (what’s that from?). As usual, I can’t take a decent picture indoors.


This was 2-3 weeks ago when we had that three inches of snow out of nowhere. It didn’t last long, but long enough to get a picture of the first asparagus sticking up through it.


The chickens like to be near some cover most of the time. Fear of hawks, I guess. So lately they’ve been hanging out near the pile I’ve been stacking up for a cookout.


I’ve been trying to decide where to put the new chicks this year, and time is running short to get them. I’ve had them in the basement before, and that worked okay, but I took down that pen to stack firewood there, and I didn’t want to have to put it back up. Wherever they go has to be cat-tight on top of coon-tight, which makes it tough. I thought about building a pen in the barn and running an extension cord out there for the heat lamps, but then I’d be up a couple times a night to make sure they stayed on.

Then I thought of this little chicken house I built a dozen years ago. I never expected it to last this long, and it’s been settling into the ground where it was sitting unused for eight years now. But I figured if I could drag it up near the house and make it tight, I could run an extension cord to it and have it close enough that I could look out from the house to check on it at night.

The bicycle wheels were so I could move it around the yard with a portable pen and keep the chickens from killing out one patch of grass. It’s heavy enough that it wasn’t easy to move, but it worked back then. There was no chance of moving it by hand this time, though. So I pried it up enough to get a rope under the front corners and around the back, and started pulling. Once it came loose from the ground, it actually went pretty well. The bottom is a 3/4-inch piece of plywood, and it hasn’t fallen apart yet. Now I just need to make sure everything is secure, and it’ll be ready for chicks.

Getting the Garden Started in 2019

This is a montage of several short videos I took from late March to today. There isn’t much growing to see yet, but it covers spreading straw over one plot, some early planting, and making bean tepees. The marshmallow plants I transplanted in the last video are greening up now, so it looks like they survived the move just fine despite some frost on them.

A Dog Story with a Happy Ending

Guy gave me a bit of a scare last week. He woke me up about 3am having some kind of spasms, and couldn’t settle down. It got worse over the next hour and he started panting hard too. I was looking up the symptoms to see what it might be, and the two main things seemed to be poison or a seizure. Vomiting usually went along with them, so I let him outside to see if he needed to do that. He wouldn’t leave my side and could barely stay on his feet, so I went back in to put my shoes on to walk him out into the yard. Then he ran off into the dark. And the rain. Great.

I got the spotlight and started circling around the place looking for him, but had no luck. By the time the sun came up, I was really just looking for a motionless white form. Then I spotted him tangled up in some brush on a slope. He couldn’t get his feet under him to get out of it, so he looked pretty pitiful, but he was still kicking.

I carried him up to the house and put him on some blankets to wait for the vet to be in. His shaking had subsided a lot, but whether from improvement or exhaustion I didn’t know. By business hours, though, he had stopped shaking almost completely and was able to stumble around a bit, so I decided to wait and see, since that’s what the vet likely would have said anyway. By evening, he was willing to eat a small piece of hot dog so I could put a pain pill in it, and then he crashed for the night. The next day all the trembling was gone, but he was still shaky on his feet, and would only eat small bits of chicken.

It took three days before he was back to normal drinking and eating a little dog food, but on the fourth day he was running in the woods while we hunted mushrooms, running every rabbit and deer track and collecting a couple dozen ticks. That’s the good thing about dogs: once they get over something, they’re over it.

Poisoning seems the most likely culprit. Some new neighbors down the road have been cleaning a bunch of junk out of a shed, including some old vehicles, so he could have gotten into a puddle of antifreeze, or someone could have something out for coons or rats. Hard to say, but I’m keeping a closer eye on him to keep him from wandering off for a while. Here he is while I was mowing yesterday. For some reason he likes to stay close for that, so he has to keep getting up and moving every time I come around.

It's Mueller Time

I’m not usually one to say I told you so, but it’s been two long years of being called a fool, a Pollyanna, a Q-tard, or even a Boomer in online forums for predicting what just happened. So just once: I TOLD YOU SO. Not you personally, just people.

Ah, that’s better. So now that we’ve finally reached this turning point, let’s review how we got here before talking about what comes next.

The Clinton campaign had a problem with Russia, namely too many corrupt connections to Russia/Ukraine. Their own polling told them that was a major weak spot with their own voters when it was pointed out to them. At the same time, Trump was boasting about his good relationship with Putin, as a way to argue that his lack of political experience didn’t mean he didn’t have foreign policy experience, since he had dealt with foreign leaders for business reasons. So they decided to accuse Trump of being too close to Putin.

It was a pretty smart tactic. If you think someone might accuse you of something, accuse him of it first. That way if he does accuse you in turn, it looks like tit-for-tat, and you could end up with a stalemate. So they started the “Putin puppet” narrative.

But once that narrative was in the air, people started using Mah Russia as a boogeyman for everything. When the DNC’s emails showed up at Wikileaks, the DNC’s IT consultant (a Russian-founded company, by the way) blamed it on Russian hackers. Online trolls invented the “pee tape” dossier and passed it to a desperate NeverTrumper who passed it to media and eventually it found its way through several hands (including John McCain’s) to end up printed by Buzzfeed. And when a pair of traitors at the FBI decided to make up an “insurance policy” just in case Trump won, they and their friend in British intelligence and some other friends at another Russian company called Fusion GPS came up with the Russian collusion theory and a fake dossier to support it.

But then Trump won. The establishment didn’t think that was even possible, because they gaslit themselves too well with their own push-polling and their refusal to believe the raw results they were getting in the battleground states. They assumed they would have at least four years of a Clinton presidency in which to cover their tracks. Suddenly they were desperate, so the insurance policy had to be used, and a campaign meme had to be turned into a criminal investigation.

Here’s the thing: they all knew. All the congressmen and media talking heads who pushed so hard on this knew it was bullshit. The Hollywood celebrities probably knew too, though I shouldn’t underestimate their stupidity. I know they knew because I knew, and they certainly have better sources than I do. They knew all along everything I wrote above, and they pushed ahead with it anyway because OrangeManBad. They just counted on Mueller to find something, because they projected on Trump and figured he probably did the kind of things they would do, so there would be a smoking gun about something. And if there wasn’t on him, there would be on one of his kids, and they could use that as leverage to get rid of him.

Unfortunately for them, businessmen have to play by the rules more carefully than politicians do, because they don’t have the same power to cover up their crimes. So he actually was clean, and Mueller really couldn’t find anything after two years of trying. They’ve invested two years of political capital into a fraud. They haven’t even gotten serious about finding good candidates or assembling a decent platform for 2020 yet, because they invested all their hope in Mueller doing the job for them. Now here we are.

So what comes next? Well, first of all, the media will claim it’s not over. They’ll say some flowery legalese in the report means there are still avenues for investigation, or claim some other investigation is the really important one. THEY WILL BE LYING, just as they’ve been lying about Mah Russia for nearly three years. You’ll be able to tell because their lips will be moving. They shouldn’t double-down, but they will, because they never had a Plan B. All they can do is keep pushing Plan A until it goes off a cliff.

Another thing they’ll do is try to rewrite history, claiming they didn’t just spend two years praying for Mueller to save them, holding #ProtectMueller protests every time the media said he might get fired, and saying we all must trust Mueller and the FBI. Fortunately, all their embarrassing “Mueller Time” memes are saved and ready to roll back out to remind them.

Aside from that, now we get to see if there’s a second act to all this. When Mueller interviewed people like Manafort and Podesta, did he carefully avoid any lines of inquiry that would bring up their Clinton dealings? Or did he pass that along to the DoJ, which has been pursuing it separately? I don’t have a solid read on that yet, but it would explain some nagging questions if that’s what’s been going on.

Commodore 128 Assembly #33: My Programming Environment

A couple people have asked me what tools I use during these programming videos, so I thought I’d go through the list. The list is below the video here too.

  • FreeBSD
  • i3 (x11-wm/i3 x11/i3status)
  • Emacs (editors/emacs)
    • org-mode for planning (.org)
    • asm-mode for assembly files (.a)
    • magit
  • git (devel/git)
  • tmux (sysutils/tmux)
  • ACME cross assembler
  • rlwrap (devel/rlwrap)
  • Vice (emulators/vice)
  • OBS (multimedia/obs-studio)
  • DroidCam (Google Play on phone)
  • ffmpeg (multimedia/ffmpeg)

Commodore 128 Assembly #32: SHA-256 Part 4

Didn’t get a lot of code written in this one. I got started on the trickiest part of the algorithm, where we need to process a sliding window of pointers through a block of data, and spent a lot of time trying to figure out how best to do it. I think I have it worked out now, so it should be easier from here on out.

Commodore 128 Assembly #31: VDC 80-Column Attributes & Graphics

More on the 80-column display. First we go through how to set attributes like color, flash, and underline for characters on the text display, then turned to the VDC’s graphics bitmap mode.

Big Guy

I was sorting through some old images and ran across this one. Looks like it’s from a little over two years ago, so I’d guess he’s about two and a half now. Doesn’t he look harmless?

He’s not a puppy anymore, though he’s still just as ornery. Today he was digging up mole runs. The moles must have been busy under the snow, because there are a bunch of hills and runs around. He’ll probably have this whole area dug up in a couple days. Don’t mind, as long as he gets them.


This is just fun, and well made, with a great song. And I learned something: when it sounds like they’re saying “Bruce” and the video has fun with all the Bruces, it’s actually a made-up word, “Grooss.” Whaddaya know.

First Gardening of 2019: Moving Marshmallow Plants

Made this a couple days ago. It’s too muddy to get in the garden for real yet, but I thought I’d move these marshmallow herb plants now that the ground was thawed. We planted them in this little flower bed a couple years ago, not realizing how big they’d get, and they kind of crowd everything out. The digging was harder than I expected, because they grew down into a pretty thick layer of rock, so I couldn’t bring them up with a nice dirtball. That probably won’t hurt anything, since herbs, especially perennials, tend to be pretty tough.

Once I had this one dug up, it started falling apart into several different plants, so it was already dividing itself. I planted five of them along a concrete wall where I’ve been wanting some taller cover. I have a feeling the remaining roots will come up again, so I may have to put plastic or something down for a while to snuff them out.

Also planted a few peas and radishes right behind these a couple days previously, just pressing them into the mud, but it’s too soon for them to be up. I saw some chickens loafing there the next day, so they may have gobbled up the seeds already.

Commodore 128 Assembly #30: SHA-256 Part 3

Continuing on with the SHA-256 calculator, we write more routines for copying blocks of memory in different ways, and the remaining low-level functions required by the algorithm. Next time we’ll be moving up a step or two to higher-level parts of the program.

The hat is a Lewis Round Barn hat from the Old Tyme Association. If you’ve been to the Adams County Fair outside Mendon, you know what that’s about. It’s not really my style of hat, but it’s local, so I thought I’d show it off.

Also, I’ve created a Patreon page for my programming videos. There’s no obligation, as all the videos and code will remain free for everyone. But if you’d like to support the project, check it out there with my thanks!

Springtime Chickens

The chickens are definitely ready for spring. They’ve been coming outside for a few weeks now, even a little in the snow, but they couldn’t have been finding much to eat in the frozen ground. Now they’re on the roam all day. They especially like the spot where firewood was stacked last year, so they couldn’t get to it until now.

I don’t know why the picture quality in this video is so bad. I guess I need to acquire either some better camera skills, or a better camera that can make up for my lack of them.

Commodore 128 Assembly #29: VDC 80-Column Routines

Started writing routines to drive the 80-column display. I’m hoping to use these in the Farm game, but they’ll be generally useful for any program that uses the RGBi display. Next time I’ll get into the graphical bitmap, which few programs explored for that display.

Computer Artistry

A friend linked to a thing today that’s pretty cool: the Deep Dream Generator. It’s a computer program that will take two photos and try to redraw one in the style of the other one. I gave it a picture of my mug and had it use a line drawing of a face as the style, and got the result below.

They call it AI. I don’t know about that. To me, AI would be a program that is self-aware and goes beyond its programming in unpredictable ways. This “learns” to draw in the style of a picture, but that’s still just one program writing new algorithms according to how it was programmed to do so. It’s interesting, though; and for someone like me who couldn’t draw to save his own life, it’s a way to get some artistic effects by rendering pictures in different styles and seeing what happens.

Commodore 128 Assembly #28: Programming the 80-Column Display

Here’s a whiteboard tutorial on programming the 80-column screen on the Commodore 128. It’s very different from the 40-column VIC display, since you have no direct access to 80-column screen memory and have to program it indirectly by reading and writing to the VDC’s registers, which requires a handshaking process through a pair of registers at $D600 and $D601 in the C128’s I/O block.

There will be another video soon demonstrating how to use the little routines here to do actual work.

Do Not Want

Interesting article here on America’s continued rejection of the metric system. I didn’t know it was pushed by the French Revolution, but I’m not surprised. The same people are still pushing it today. One of my earliest school memories is of watching a filmstrip about the metric system. It had a scene where a driver got a speeding ticket because he saw a sign that said 95 kilometers per hour and assumed it meant 95 miles per hour. We were told we’d better get with the program and learn to love metric, because it was inevitable.

Well, forty years on, there’s less metric in our lives than there was then, as far as I can tell. I run into metric sizes on vehicles and power equipment less often than I did 20 years ago. It’s still on labels for things like food, probably forced by those pro-metric laws from the 1970s, but it’s in parentheses, as if to say (and by the way, we had to add this).

Metric is useful in the lab where measurements are arbitrary, and that’s about it. It’s not good for measuring things in real life. It’s definitely not helpful for working with computers, since its base-10 nature is a pain where everything is done in base-2 or an exponent of that. Computer users adopted some of the prefixes like kilo and mega, but they’re only approximations. A real kilobyte is 1024 bytes and a real megabyte is 1,048,576. That leads to confusion, because some companies that sell things like hard drives started using them to mean literally a thousand, a million, a billion, etc. At the larger sizes, that makes a big difference in how much space you’re actually getting, since a true gigabyte is 7.4% larger than a marketing gigabyte.

So we’re not doing it. See also: soccer. That was the other thing they told us we’d better get used to, because soccer would outpace all our other sports someday. Well, lots of parents use soccer as exercise for their kids and a social event for themselves, but no one actually cares about the sport itself. And that’s fine. They never told us we had to learn cricket because it’s huge in India, or Go because it’s big in China. Just soccer, for some reason. But after decades of trying to make us care, we remain indifferent.

At least there are a few things we’re united on as Americans.

Commodore 128 Assembly #27: SHA-256 Part 2

Continuing on with the sha256 hash calculator, we create some of the intermediate functions that use the boolean and bit-shifting routines we wrote in the last session.

Commodore 128 Assembly #26: Farm Game part #0

No coding in this one, just introducing a new project: a game in the spirit of Stardew Valley. I say “in the spirit of” because it would be impossible to duplicate the game on an 8-bit system, even if copyright weren’t an issue. But I think it’ll be a good challenge to see how much of it can be done, with expectations scaled back drastically in terms of graphics and sound. Along the way I’ll be doing tutorials on more of the 128’s features, like the 80-column display. I’ll start programming on it in part #1 later this week.

Feeling Spring Fever

This always seems to me like the time of year when you’re just trying to get through. The sun is getting higher in the sky and the days are longer, so it feels like you should be outside doing things. But it’s 26 degrees. That’s not brutal or anything, but it means the ground is still frozen. Too soon to start working the soil, or digging up plants to move, or anything like that. There are some things to do, though. Sharpen hoes and shovels so they’re ready for action. Haul composted bedding out of the chicken house and spread it on the gardens. Pick up the sticks that are still scattered across the garden where I dropped the tree. Plenty to do, just not the fun springtime stuff yet.


There was some hedge in the last batch of firewood I cut, small limbs that got knocked down by the bigger tree I was cutting. Too small to keep if it were anything else, but hedge (Osage Orange to some) is amazing stuff. It’s like the sap is flammable. You can toss hedge in the furnace completely green, and it’ll burn hotter than anything else. It burns so hot that you have to be careful with it, because a full load of it can warp some furnaces. I just throw one stick in with a load of other stuff, and when I come back later, I can tell where it was because those coals are white-hotter than the rest. Need to cut some hedge posts this summer, for a fence and the firewood that comes with them.


The programming videos are going great. They still have a small audience, but it’s growing. I wasn’t sure at first that I’d be able to produce one a week, but they’ve been coming easier than I expected, so it’s been about double that lately. It helps that I’ve gotten kind of a process down for converting the raw file, offsetting the time on my voice, and getting it ready to upload. Now it’s usually a one-shot thing, instead of having to redo it a few times to get it right.

The next big project is going to be a Stardew Valley-type game for the 128. That’s way too ambitious, since there’s no way to replicate most of that game with 80s technology, but I think it’ll be interesting to see how much can be done. It might be a year-long project or more, I don’t really know. Should be fun.


The impulse to write seems to be coming back lately. Maybe it’s part of spring approaching. Or it might be that I was listening to a lot of podcasts, but got burned out and dropped most of them. You can’t really write and listen to someone talk at the same time, not on different topics. Same part of the brain, I guess. I’ll stick to music for a while and see what happens.

One podcast I’m not dropping is 372 Pages, which only comes out every week or two. It’s Mike Nelson of MST3K and one of his friends from Rifftrax, doing to bad books what they’ve been doing with bad movies. They started with Ready Player One, but they’ve also tackled Tekwar and some self-published books. That’s been another inspiration to get back to writing: there is some really bad writing out there, so nothing can be worse.


That also reminded me of this. In one of the first podcasts, they were talking about Meatloaf (both the food and the big sweaty guy), and one of them described this song as starting slow and then building and backing off and building some more until it feels like there are cannons firing off the stage. That’s pretty much it. I’m not usually a fan of live versions of songs I already like, and the original album version of this song is excellent. But it’s worth watching him sing it live for the first time in decades. He always looks like he’s about to scream his last breath into a song, and this is no exception. Every time you think he’s winding down, he’s just taking a breath.

Commodore 128 Assembly #25: SHA-256 Part 1

Started programming on the sha256 program. So far, the easy parts have been fairly easy, creating routines to do boolean operations and bit-shifts on 32-bit values. I think it’ll get tougher as we start putting those pieces together to form the various formulas, but it should keep coming together piece by piece.

I realized as I was watching it to check the recording quality that I could simplify the first couple routines a lot and lose the INX/DEX stuff, so that’ll be first on the agenda for next time.

If you landed here and don’t know what SHA-256 is, the Part 0 video introduces it and lays out the algorithm step by step.

Commodore 128 Assembly #24: SHA-256 Part 0

Now that the Worm program is finished, I’m starting two new projects to work on in parallel. The other one will be a game, once I work out some details. This one should be easier. It’s a 6502 implementation of a SHA-256 hash calculator. I thought it’d be interesting to see how well an 8-bit system could handle calculations that were designed for 32-bit (or more) processors, and how difficult it would be to implement.

In this video, we introduce the concepts involved and outline the pieces that will go into it. The programming will start in part 1.

Commodore 128 Assembly Programming #23: Banking

Memory management (banking) in the C128 is unlike the C64 or other 8-bit Commodores, since it uses the MMU to switch blocks of ROM and RAM in and out of service. This can seem kind of complicated at first, but it’s essential to taking full advantage of the resources that the C128 provides, so I thought I’d do a whiteboard tutorial on how banking works and how to do it in assembly.

Looks like I still need to work on lighting. I added a lamp, but there are still some shadows. I hope that doesn’t make it too hard to read my handwriting.

Commodore 128 Assembly Programming #22: Worm part 6

The Worm game is finished! It works pretty much how the BSD version does, which was the goal. It could be prettied up further than that with multiple colors and sounds or other new features, so if anyone wants to fork the source from the repository and do that, or use it in any other way, feel free. I’m ready to move on to something else, probably a more complex game with bitmap graphics, sprites, and sound. Still trying to decide what, exactly.

Shazam? Ah, No, Never Mind

[Setting: A Hollywood conference room.]

Suit #1: “Gentlemen, we have a problem. Our new movie is setting up to be a disaster. Test audiences hate it. They’re saying it makes no sense and that the lead actress has two modes, boring and bitchface. The editors say there isn’t enough good there to salvage. We’ve been promoting it hard, and now word is leaking out that it’s bad. How can we save our asses?”

Suit #2: “We could amp up the marketing campaign. Get some of our media allies to run positive reviews we provide and do some special interviews.”

Suit #1: “We’re already doing all that, and it’s not working. The fans just don’t care. Interviews with the star don’t help at all, because no one likes her except the producers who cast her.”

Suit #3: “We could bring in Joss Whedon and Ron Howard to punch up the script and reshoot half the movie.”

Suit #1: “God, no! Audiences have caught on to that. They know that’s a sure sign of a stinker. That would be throwing good money after bad. We need a fix that doesn’t bust the budget.”

Suit #2: “Well, we could get out ahead of it with a negative campaign against the genre fans. You know the drill: bash the basement-dwelling man-children for not wanting to see the movie. Tell women they have to see it to prove something-something about equality, and shame men into seeing it so they won’t be associated with the nerd virgins. Throw in something about racists and Russian trolls, and you’re golden.”

Suit #3: “Can that scam work again? Surely audiences are catching onto it by now.”

Suit #2: “It hasn’t failed yet. It couldn’t turn Ghostbusters into a hit, but it sold enough tickets more that it didn’t kill Sony outright. If nothing else, it creates buzz and curiosity, so some people will go just to see what the fuss is about. And it’s basically free marketing, because the media loves beating up on the male fan base of these franchises.”

Suit #1: “Good point. Okay, spread some articles in the industry press about how the angry male fanboys are attacking the movie already. Have our friends in the mainstream press pick it up from there. Have what’s-her-name talk about it in interviews. She hates the fans anyway. She’ll piss them off so they start bashing the movie for real, and then the media can blow it up into a major crisis. We’ll save our huge bonuses yet!”

Loving Perl and Appreciating Python

So I learned Python the other day.

Actually, that’s a joke. You can’t learn a programming language in a day. But if you already know several others, you can learn the basics: the syntax, looping constructs, how variables work, things like that. Enough to write simple scripts while checking the documentation for specifics on particular functions. Python has become ubiquitous enough that I figured I need to be familiar with it, if not expert, so I plowed through a tutorial.

I like it more than I expected to. The indentation-as-syntax thing doesn’t annoy me like it probably would have a decade ago. I’ve been using org-mode for a while now, so I’ve gotten used to hitting Tab to cycle through indentation levels in headings and lists. Doing the same in a Python script feels natural enough. The python-mode in Emacs usually guesses right anyway.

There’s always been a Perl vs. Python battle online, so I’m surprised how much it feels like Perl. Yes, the syntax is different, with no sigils on variables and indentation instead of curly braces for grouping statements. But that’s just surface-level stuff. Under that, they both feel like practical glue languages which have been extended to do classes and modules and other “serious” programming features, but are still at heart scripting languages. By a “glue language” I mean one that’s good at tying other tools together, especially taking output from one and processing it in some way before feeding it to another. Both languages are handy for knocking out short scripts for that kind of thing, or quick one-time filters at the command line.

Python, like many languages, uses Perl’s regular expressions, so that’s already familiar. It has list comprehensions which are like Perl-style postfix notation, so that these are the same:

#perl
say for (1..10);
#python
[print(x) for x in range(1,11)]

The python example is a bit more wordy, but when you consider that you can chain those and include IF statements, you can pack more into a Python statement sometimes. For example, print a list of all multiples of two two-digit numbers that are evenly divisible by both 5 and 7:

#perl
for my $y (10..99) {
    for my $x (10..99) {
        say "$y $x ".$y*$x unless $y*$x%7 or $y*$x%5;
    }
}
#python
[print(x,y,x*y) for x in range(10,100) for y in range(10,100) if not x*y%5 and not x*y%7]

You can jam the Perl example into one line, because that’s always possible, but it won’t be as clean as that.

Perl feels more Unix-ish, since it got a lot of ideas from shell scripting and Unix utilities like awk and sed. It has built-in functions for interacting with Unix, like inter-process communication and functions borrowed straight from Unix C libraries like gethostbyname(). It feels like it was designed by people who were using it to get things done at the same time, so they pulled in features as they needed them. That gives it that “tie tools together to make tools” Unix feel.

Python feels more like it was academically designed, like it came from computer science experts rather than sysadmins and hackers. (I don’t know if that’s true; just how it feels.) It feels more Lisp-y somehow, which isn’t a bad thing. The Unix stuff that’s built into the core of Perl is in separate modules in Python. That means better organization and probably a leaner core interpreter, but you do have to learn what comes from where so you can import the necessary modules when you need them.

One difference is in the mottoes of the two languages. Perl’s is TMTOWTDI: There’s More Than One Way To Do It. While Perl programmers have settled on some best practices over the years, the language still lends itself to multiple ways to do almost anything, and Perl programmers like it that way. For Python’s motto, some have suggested TOOWTDI: There’s Only One Way To Do It. Again, that’s overly simplified, but the Python community does seem agreed that there should be one best way to do a task, and that best way should be obvious.

One blatant example of this difference in attitudes is Perl Golf, where programmers have competitions to write the shortest program possible to do a task. This usually means using special variables and weird tricks, and results in programs like this one. It looks like a string of nonsense, but it’s a real Perl program that takes a 24-hour time like 15:30 and prints out a clock face:

$c[$_*=.52,5.5-4.7*cos][8+7.4*sin]=$`%12-$_?$_^$'/5?o:'m':$_^$'/5?h:x
for<>!~/:/..11;print"@$_
"for@c

There have been some attempts to do Python Golf, but it doesn’t look like there’s much enthusiasm for it, and the language just doesn’t give you the freedom to be that insane.

As someone learning the language, I don’t mind Python’s lack of that much freedom. I don’t need to learn several different ways to do each thing; one way is plenty. And I think TMTOWTDI is one reason Perl has lagged in popularity and isn’t pulling in as many new programmers as it used to, though it’s still used constantly by sysadmins like me: there’s not a streamlined way to teach or learn it. It’s a dirty toolbox full of tools that do all sorts of different things, some very similar to each other, and you just have to dive in and tinker with them all until you figure out how to put them together in ways that work for you. Python is a clean toolbox with fewer tools that each do one clear thing, and if you ask three python programmers how to use them, they will all tell you pretty much the same thing.

Perl is still more suited to my just-hack-it-together day-to-day mode of thinking, but Python has potential for writing programs for others to use and understand. I don’t see as much conflict between them as I expected, and they fall into the same category of “handy scripting language” for me compared to a compiled language like C or something more abstract like Lisp.

Commodore 128 Assembly Programming #21: Worm part 5

In this session, we change the color scheme and show how to fill color RAM to set the foreground color for text characters. We add a delay between moves and change the keyboard routine so a key can be held down without repeating too fast, and also to put a time limit on moves.

Next time we’ll be adding a final score display and a “play again” question, as well as a graceful exit back to BASIC.

If you want to discuss this video or any of the series, a good place would be the C128 subreddit. I check in there daily.

Commodore 128 Assembly Programming #20: Understanding the 6502 Stack

There may be some stack pointer manipulation coming up in the next Worm video, so I thought I’d do a mid-week video explaining the 6502 stack in detail. This one goes over how to use it and demonstrates what happens under the hood, instruction by instruction, then how to manipulate the pointer manually if you need to. It also touches on the pitfalls in using the stack and what to watch out for.

Commodore 128 Assembly Programming #19: Worm part 4

It’s customary when making videos about 1980’s technology to wear a funny or ironic retro t-shirt. I have only one of those, so instead, enjoy one of my collection of local farmer hats.

In this one we add code to keep the tail pointer-to-pointer (TAILP) updated, to handle collisions with digits on the screen, and to keep the worm at the proper length, growing it when it “eats” digits. All the worm functionality is finished now, so next time we’ll work on the end-game score display, and a better keyboard-entry routine.

Fixing a Monitor with an Identity Crisis

After today, I’m about ready for an old-man rant about the evils of modern technology. Instead I’ll write up the problem and solution I had today in case others come looking for it.

I happened to brush against my computer today and the static caused it to freeze up. Okay, that’s annoying, but not the end of the world. Reboot and start things back up. But monitor #2 came back up in a weird resolution. It’s normally 1680x1050, and it was 1280x1024 for some reason. Not just smaller, but stretched out horizontally.

Investigation found that the monitor, which is a Westinghouse LCM-22w3, started telling the video card it’s actually an Acer AL1714. It’s suddenly a trans-monitor. Next thing I know it’ll demand I call it Catelyn.

Back in the old days, you had to configure the X Window display for your monitor by hand, filling in modelines with horizontal and vertical sync values from the specs, which could be kind of a pain. Nowadays, monitors have something called EDID, which is a block of data held on a chip which is sent to the video card to tell it what the monitor is capable of. That’s very handy if it works. But suddenly mine’s EDID block says it’s an Acer with completely different specs. Other people online reported the same thing, so it must not be uncommon.

I figured there would be a database somewhere of correct EDID blocks for different monitors, the way we used to have databases of modelines. Couldn’t find one for it. So I couldn’t just override the monitor’s EDID block with a file. I tried tinkering with the Xorg config in various ways, none of which worked. Sometimes one monitor would work, sometimes the other, sometimes they’d both work and both have wrong resolutions.

One suggestion said to use xrandr to force the right mode, but that gave me a BadMatch error. It turned out that because the NVidia card was getting the bad EDID block, it thought the monitor couldn’t handle the mode I was trying to force. So the first part of the solution ended up being to add this line to the “Monitor” section for the Westinghouse in my xorg.conf (actually my /usr/local/etc/X11/xorg.conf.d/driver-nvidia.conf, but the location of yours may vary):

Option   "UseEDID"  "FALSE"

On starting X, both monitors were active (progress!) but with the wrong resolution, since the video card couldn’t use EDID to ask what it should be. So then I had to run these commands:

xrandr --newmode "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
xrandr --addmode DVI-D-0 1680x1050_60.00
xrandr --output VGA-0 --mode 1280x1024
xrandr --output DVI-D-0 --mode 1680x1050_60.00

My setup has a 1280x1024 Samsung connected via VGA on the left, and the 1680x1050 Westinghouse connected via DVI on the right. So the first line there adds the new mode the Westinghouse needs, using values I got from running cvt 1680 1050. The second line adds that new mode to the right-hand monitor, and the third and fourth lines set the correct resolution for each monitor. All is well now.

Now I’ll just add those four xrandr lines to my ~/.xinitrc, so they run each time I start up X with startx. Depending on how X starts on your system, you may need to put them somewhere else.

6502 Assembly Language #18: Indirect Addressing

I covered these addressing modes in video #14 on the addressing modes in general, but I’ve had a couple of questions about the indirect modes specifically. I thought it might help to draw out examples on the whiteboard, since they are more complicated than the other modes. Hopefully watching this along with the examples in #14 will make it clearer. Indirect addressing, especially the Y-indirect (indirect indexed), is a powerful mode that lets you setup pointers into memory that can be adjusted on the fly, as we do with HEADP and TAILP in the worm program.

Video production notes: The quality on these still isn’t very good. Seems like there are either glares or shadows, so that’s something to keep working on. For the audio, I tried recording that on my phone in my shirt pocket, so the video camera didn’t have to try to pick it up from several feet away. Then it was just a matter of laying one over the other with ffmpeg and working out the timing.

6502 Assembly Language #17: Pointers to Pointers

While working on the Worm program in #16, I realized we need to use pointers to pointers, which is kind of a complicated concept. I didn’t think my impromptu explanation there was very clear, so I thought it’d work better to draw it out visually and walk through what happens.

This method will allow us to keep track of the parts that make up the worm, in order from head to tail, so we can drop the tail characters as the worm moves along. And it doesn’t take much work, because we only need to adjust two pointers and add one other to a list each time we move. That’s quite a bit faster than a couple other methods I was thinking of.

Next time, back to the code.

Commodore 128 Assembly Programming #16: Worm part 3

Continuing with the Worm game. I thought I had worked out how to make the tail end of the worm go away, and then once I started to describe it I realized it wouldn’t be that simple. We have to keep track of each “body part” of the worm in order from front to back, so we always know which one is the next to drop off as the worm “moves.” That means we will have a list of pointers to those body parts, and pointers into that list.

Double pointers are challenging, so that will be a fun task I wasn’t expecting. I may do a whiteboard video to draw it out better than I explained it here. The pointer list will be in a 2K area of memory, wrapping around to the beginning if necessary, with two pointers into that list for the head and tail of the worm. Got the head pointer done in this video, and will add the tail pointer and the code to move the tail along in the next one.

Seed Inventory for 2019

It’s time to start getting organized for this year’s garden. First step was to inventory the seeds on hand, both saved from last year’s crops and leftover. Guy tried to help. Then I typed it up into a list, and went through and figured out what there isn’t enough of. The next step will be to go through the seed catalog and make up an order for everything I’d like to get, then total it up and swear at the total, then cross off things until it looks reasonable.

I’ll be doing some germination tests soon, because some of these seed packets are nearly ten years old and may not be viable at all. You can test them by putting a few seeds between layers of paper towels and keeping them damp and warm. Most seeds should sprout within a week if they’re going to. That’ll tell me whether some of these iffy ones will need to be replaced.

Hunkering Down for Colder Cold

My 6502 video series might be taking off. I had been getting a new YouTube subscriber every couple weeks, but last week there was about one per day, and then suddenly there were 11 on Sunday. Comments are increasing too. Don’t know yet if it’s a fluke or if it’ll keep climbing, but it’s cool either way. I was going to keep doing the series in any case, but it’s nice to know someone’s getting some use from it.


This will be me the next few days, but with firewood. We’re getting a little reprieve in the weather this morning, popping above freezing for several hours before diving back down to 3° tonight. Maybe it’ll at least melt off the ice we’ve been shuffling around on for the last week [note from the future: it didn’t]. Then we’re supposed to have about 40 hours straight where it never gets over -4°. Pretty cold for around here.


It’s a good thing I did my 6502 video a couple days early, because I was beat last night. Cutting firewood isn’t really that strenuous, but packing it a hundred yards through snow out of the timber is. I wanted to take down some dry, dead trees, and that’s as close as I could drive to them. It’ll be worth it to have a blazing fire going through this cold spell. Currently sitting at a toasty 76 degrees!

I’m typing this with one eye closed because it’s still watering and hurts a little from getting sawdust in it yesterday. I might have to start wearing eye protection while cutting wood. I’ve always hated any kind of goggles, because it feels like they cut off your vision, and that’s not good when I’m dropping a tree and watching for the first sign that it’s cracking. It’s probably worse to be blinking sawdust out of your eyes at that moment, though.


I’ve been forgetting to put my “playcast” videos up as blog posts lately, but I have done a few. Rather than make a bunch of posts after-the-fact for them, here are links to them:

I’ll be continuing with both, but the first Autoduel session ended when the game locked up, so I had to start over and replay back to a similar point in the game.

6502 Assembly #15: Worm on the Commodore 128 Part 2

In this video we continue working on the Worm game started in #13, adding collision detection and the random placement of a digit on the screen for the player to guide the worm to. Next time, we’ll start by debugging why the digit is always 5 instead of randomly 1-8 and always appears in the third quadrant of the screen.

This series is undergoing a slight re-branding. When I started it, I was focused only on the 6502 microprocessor, which is found in many different computers and products from the 1980s (Commodore computers, Nintendo Entertainment System, Atari consoles, etc.) and is still in wide use today. But when it comes to writing programs that actually run on something, you have to program for a particular platform. While the 6502 itself doesn’t change, the methods of input/output, printing things on the display, memory management, and so on vary greatly from one 6502-based system to another.

In other words, if you write a 6502 routine to multiple two values in memory, you can use that unchanged on any 6502 system. If you want to print those values on the screen, send them to a printer, or save them to a disk file, then it matters what system you’re on.

So I will be (and have been) writing these programs for the Commodore 128, for three reasons. First, it’s the system I’m familiar with, having owned a few back in the day, and I always wanted to do more with it. Second, it’s the most powerful system that the VICE emulator does. Since I’m using an emulator anyway, I might as well use the emulated machine that has the most power and features. Third, there seem to be very few people out there programming for the C128. There’s a lot of activity around the C64, with new games and products popping up regularly, but very little for the C128. A new YouTube channel just appeared called Nybbles and Bytes, where she plans to convert a Javascript game she wrote to the C128, and her video and some comments on it made me realize this isn’t well-traveled territory.

Fourth (insert Monty Python bit), if I ever buy a real Commodore again, it will be a C128, and then my programs will run on it.

That means I’ll be expanding into some of the C128’s more unique features, like the 80-column screen and banked RAM. The programming will still all be 6502, but we will get deeper into the C128’s hardware and some cool stuff you can do with it.

Learn To Code

It looks like I might need to ramp up production of my programming videos, to handle an influx of new student viewers. Fun times on the interwebs this week.

The backstory: when blue-collar workers have lost jobs and seen their communities waste away in recent years, the response from the white-collar establishment has been some version of, “Learn to code.” In other words, just go learn a completely new trade and find a job somewhere in the tech industry, probably moving your family to do it. The coal mine closed due to new environmental regulations? Learn to code. Your factory moved to Mexico? Learn to code. Your job at the slaughterhouse was given to a Somali because he’ll work for minimum wage and zero benefits? Move to Silicon Valley, let your hometown die, and learn to code.

Kevin Williamson, then of the supposedly conservative National Review, summed up the attitude: “The truth about these dysfunctional, downscale communities is that they deserve to die. Economically, they are negative assets. Morally, they are indefensible.” That was the message from white-collar elitists: People and their communities are economic assets to be moved around by smarter people like houses on a Monopoly board. If they aren’t profitable, break them up, move them around, or trade them in for better models. And they don’t come any more white-collar elitist than journalists.

So when some journalists – by which I mean clickbait writers – were laid off this week, some of those “negative assets” remembered, and took to Twitter to share their own advice with them. Because the media can dish it out but can’t take it, they reacted as if telling them to #LearnToCode was a hate crime, and blamed it all on 4chan trolls. Good stuff. Watching people hoist on their own petard is fun, but seeing them double-down and make it worse is priceless.

Garden Wrap-up for 2018

It’s about time to start planning for this year’s garden and getting a seed order together, so I thought I’d do a wrap-up of 2018 to refresh my memory.

First, the harvest list I kept is at the bottom because it’s pretty long. It’s not really complete, because I forgot to add things to it several times. It’s probably about 75% there, though. Also, I was pretty conservative on the price of things, using the base price in the store. So it’s basically showing what it would cost to buy the same stuff, but not necessarily the same quality. Most of mine is organic, for instance, and I didn’t try to find organic prices.

I don’t have a garden for the money savings, because there are some things you can’t grow as cheaply as you can buy them, if your time is worth anything. I do it for other benefits, but it’s nice to know it at least pays for itself.

There were two main problems last year. The first was drought. It was very dry through most of June and July. I watered a lot, but surface water really only keeps things alive; it doesn’t make them flourish. So after the early crops like asparagus and peas, everything just kind of sat there, and it looks like June and July added together produced less than May, which is very unusual. Some things were almost a total loss, like the sweet corn and the second crop of peas, that just shriveled up in the heat.

Nothing you can do about drought, but I’m going to invest in some soaker hose this year. That lets water seep out through the hose directly onto the ground, rather than spraying it up in the air. Less evaporation that way, and it’s easier to put it where you want it. Also, it won’t attract the neighbors’ dog to come over and dance around in the water.

The second problem was the weeds got away from me in the south plot, which is why I ended up harvesting almost no squash, melons, or tomatoes. It turns out that spot has some pretty poor soil compared to the others, so it needs a lot of organic material. A foot of straw or hay mulch would be a good start, and would help a lot with the weeds. I’ll definitely be mulching more this year.

I said last year that I need to divide up some crowded asparagus mounds and start a new patch with them. I forgot all about that by winter, so now I need to look and remind myself when you do that, whether it’s fall or spring.

I got a gift certificate from a nursery for Christmas, so I need to figure out what trees to get and when. Probably fruit trees, although a couple big shade trees wouldn’t hurt either.

Next garden post: cataloging the leftover seed!

date harvest grams pounds price value
[2018-04-24 Tue] asparagus 572 1.26 3.00 3.78
[2018-04-26 Thu] asparagus 556 1.22 3.00 3.66
[2018-04-28 Sat] asparagus 663 1.46 3.00 4.38
[2018-04-30 Mon] asparagus 508 1.12 3.00 3.36
[2018-05-02 Wed] asparagus 488 1.07 3.00 3.21
[2018-05-05 Sat] asparagus 460 1.01 3.00 3.03
[2018-05-08 Tue] asparagus 684 1.50 3.00 4.50
[2018-05-08 Tue] green onions 128 0.28 2.00 0.56
[2018-05-08 Tue] marshmallow 100 0.22 1.00 0.22
[2018-05-12 Sat] asparagus 1066 2.34 3.00 7.02
[2018-05-12 Sat] lettuce 150 0.33 2.50 0.82
[2018-05-15 Tue] asparagus 736 1.62 3.00 4.86
[2018-05-20 Sun] asparagus 686 1.51 3.00 4.53
[2018-05-20 Sun] lettuce 150 0.33 2.50 0.82
[2018-05-22 Tue] asparagus 251 0.55 3.00 1.65
[2018-05-24 Thu] asparagus 285 0.63 3.00 1.89
[2018-05-24 Thu] strawberries 260 0.57 3.00 1.71
[2018-05-25 Fri] lettuce 1057 2.32 2.50 5.80
[2018-05-27 Sun] asparagus 244 0.54 3.00 1.62
[2018-05-27 Sun] strawberries 130 0.29 3.00 0.87
[2018-05-28 Mon] lettuce 2000 4.40 1.00 4.40
[2018-06-01 Fri] asparagus 180 0.40 3.00 1.20
[2018-06-04 Mon] asparagus 243 0.53 3.00 1.59
[2018-06-07 Thu] asparagus 195 0.43 3.00 1.29
[2018-06-07 Thu] peas 522 1.15 3.00 3.45
[2018-06-11 Mon] peas 125 0.27 3.00 0.81
[2018-06-14 Thu] peas 50 0.11 3.00 0.33
[2018-06-25 Mon] peas 74 0.16 3.00 0.48
[2018-06-29 Fri] peas 85 0.19 3.00 0.57
[2018-06-29 Fri] snap beans 51 0.11 2.00 0.22
[2018-07-03 Tue] corn 6 0.01 1.00 0.01
[2018-07-10 Tue] corn 14 0.03 1.00 0.03
[2018-07-10 Tue] potatoes 300 0.66 0.50 0.33
[2018-07-16 Mon] potatoes 400 0.88 0.50 0.44
[2018-07-16 Mon] snap beans 298 0.65 2.00 1.30
[2018-07-20 Fri] potatoes 230 0.51 0.50 0.26
[2018-07-20 Fri] snap beans 380 0.84 2.00 1.68
[2018-07-30 Mon] Swiss chard 400 0.88 2.00 1.76
[2018-07-31 Tue] snap beans 800 1.76 2.00 3.52
[2018-08-01 Wed] snap beans 800 1.76 2.00 3.52
[2018-08-05 Sun] snap beans 633 1.39 2.00 2.78
[2018-08-06 Mon] snap beans 977 2.15 2.00 4.30
[2018-08-08 Wed] snap beans 437 0.96 2.00 1.92
[2018-08-13 Mon] snap beans 434 0.95 2.00 1.90
[2018-08-16 Thu] cucumbers 781 1.72 1.00 1.72
[2018-08-16 Thu] potatoes 675 1.48 0.50 0.74
[2018-08-21 Tue] snap beans 1636 3.60 2.00 7.20
[2018-08-22 Wed] potatoes 1200 2.64 0.50 1.32
[2018-08-22 Wed] red kidney 272 0.60 2.00 1.20
[2018-08-23 Thu] snap beans 453 1.00 2.00 2.00
[2018-08-25 Sat] radishes 250 0.55 0.50 0.28
[2018-08-27 Mon] snap beans 900 1.98 2.00 3.96
[2018-08-28 Tue] potatoes 1300 2.86 0.50 1.43
[2018-08-28 Tue] snap beans 501 1.10 2.00 2.20
[2018-08-30 Thu] snap beans 1150 2.53 2.00 5.06
[2018-09-01 Sat] snap beans 553 1.22 2.00 2.44
[2018-09-04 Tue] carrots 680 1.49 1.50 2.23
[2018-09-04 Tue] snap beans 730 1.60 2.00 3.20
[2018-09-05 Wed] snap beans 550 1.21 2.00 2.42
[2018-09-05 Wed] snap beans 663 1.46 2.00 2.92
[2018-09-07 Fri] snap beans 720 1.58 2.00 3.16
[2018-09-08 Sat] Swiss chard 450 0.99 2.00 1.98
[2018-09-09 Sun] potatoes 500 1.10 0.50 0.55
[2018-09-09 Sun] snap beans 650 1.43 2.00 2.86
[2018-09-10 Mon] potatoes 750 1.65 0.50 0.82
[2018-09-11 Tue] snap beans 440 0.97 2.00 1.94
[2018-09-12 Wed] broccoli 150 0.33 2.50 0.82
[2018-09-13 Thu] snap beans 530 1.16 2.00 2.32
[2018-09-14 Fri] Swiss chard 200 0.44 2.00 0.88
[2018-09-14 Fri] beets 900 1.98 2.50 4.95
[2018-09-14 Fri] green pepper 150 0.33 2.50 0.82
[2018-09-14 Fri] summer squash 400 0.88 1.70 1.50
[2018-09-15 Sat] snap beans 700 1.54 2.00 3.08
[2018-09-17 Mon] potatoes 400 0.88 0.50 0.44
[2018-09-18 Tue] snap beans 600 1.32 2.00 2.64
[2018-09-19 Wed] snap beans 450 0.99 2.00 1.98
[2018-09-20 Thu] snap beans 500 1.10 2.00 2.20
[2018-09-22 Sat] snap beans 500 1.10 2.00 2.20
[2018-09-24 Mon] snap beans 630 1.38 2.00 2.76
[2018-09-25 Tue] potatoes 140 0.31 0.50 0.15
[2018-09-25 Tue] zucchini 265 0.58 1.70 0.99
[2018-09-29 Sat] snap beans 2275 5.00 2.00 10.00
[2018-09-30 Sun] snap beans 2935 6.45 2.00 12.90
[2018-10-16 Tue] green pepper 6900 15.16 2.50 37.90
[2018-10-16 Tue] zucchini 2011 4.42 1.70 7.51
[2018-11-01 Thu] turnips 475 1.04 1.50 1.56
[2018-11-03 Sat] cabbage 4150 9.12 0.25 2.28
[2018-11-21 Wed] cabbage 6800 14.95 0.25 3.74
[2018-11-30 Fri] broccoli 40 0.09 2.50 0.23
[2018-11-30 Fri] cauliflower 1140 2.51 3.50 8.79
Totals 66365 145.86 2.00 291.72

Morning Wood Splitting

I was splitting wood this morning, and realized that has to be in the top ten of things that are completely unrealistic in movies and on TV. When you see someone splitting wood on screen, it usually looks like the beginning of this scene from Star Trek Generations: nice small, straight pieces of wood that split easy, a sturdy flat stump to set them on so they’re at the perfect angle, and no brush or snow or ice around your feet to trip on.

The reality often looks more like this: big knotty pieces with grain running three different directions, too big to go in the furnace as-is even if you cut them thin like this. Get any angle you want, and you’ll still be hacking at them for a while to crack them. The brush frozen into the snowy ground around your feet adds a bit more challenge.

It’s a good workout, though. Nothing like sweating through your shirt, sweater, and jacket when it’s 20 degrees outside.

In case anyone wonders: yes, that’s actually a maul, not an ax. A narrower splitting ax goes through lighter stuff better, but it tends to get stuck in wood like this. This 6-pound maul delivers a better blow when you’re really trying to crack it more than split it. That’s how it seems to me, anyway.

6502 Assembly Language #14: Addressing Modes

This is sort of a bonus video in the middle of the week, to cover something I should have done near the beginning of the series. Someone on an assembly forum asked about 6502 addressing modes, and someone else said they seemed awfully complicated, so I wished I had a video I could point them to that explains them. So here it is.

The sun went down while I was recording, so the webcam got darker than I realized. I didn’t figure anyone needed to see my face badly enough to redo the whole thing.

6502 Assembly Language #13: Worm Part 1

Starting a new project on the Commodore 128: the game Worm, an old game for text-based terminals. In this first part, we lay out the screen border and write the code to move the head of the worm around. The next part should cover detecting collisions with the border and making the body of the worm work.

I’ve created a top-level page on my blog that will link to this series of videos and related resources here: 6502 Assembly Language Programming

Consummatum Est

Translation: It is finished. Aaaaand there’s one piece missing, on the bottom edge there. Usually I throw away puzzles if they’re missing pieces, but I hate to do that with this one, since it’s my only 3000-piecer. So I took it apart into sections and put it back in the box ready to re-assemble. Maybe I’ll find the missing piece under some furniture or somewhere. I wouldn’t mind gluing this one to a board, if it were whole.

It was kind of an annoying puzzle, because some of the same shapes were used repeatedly. I’d put a piece in somewhere and then later realize it fit, but wasn’t exactly the right color. I don’t know why my picture of it is so bad. I just used my phone, so maybe there wasn’t enough light.

Now on to the 1000-piece chicken puzzle I got for Christmas. It looks to be much easier, which will be a nice break after this bear.

TIL about Trees & Power Lines

Today I learned that if you’re an Adams Electric customer, and you need to drop a tree on your property that might get into power lines, they’ll come out and cut it down for you. I knew they’d do that for the power lines along the road, but it turns out they’ll do it for the lines coming in as far as your meter too.

Good to know, so you can let them take care of it in the first place, instead of starting to drop it yourself and then having to call them anyway because you need more manpower to pull the tree over in the right direction.

6502 Assembly Language #12: 10 PRINT

With the Game of Life working at the end of the last session, I thought we’d do something a little different this time, converting a famous one-line BASIC program into assembly. In the process, we had to write code to scroll the screen as new lines appear at the bottom. Enjoy several minutes in the middle of me rubbing my furrowed brow as I struggle to figure out why it’s broken at one point. Technical details below the video.

I didn’t explain in the video how I found the problem, so I’ll do that here. First, here was the problem code:

        ldy #0                  ; loop 40 spaces
yloop:
        lda (NLINE),y
        sta (CLINE),y
        iny
        cmp #40
        bne yloop

I meant it to loop on the Y register, incrementing it from 0 up to 40, then falling out of the loop when Y==40. However, because I used CMP instead of CPY, it was comparing the accumulator (A) to 40 instead of Y. That seemed to work on the first few lines of the screen because 40 is the character code for a left parenthesis, and there was one of those in each line. So when it loaded that left parenthesis into A, that caused the loop to end so it could go on to the next line. On the fourth line, there were no left parentheses, so it looped forever.

What clued me in was when I let the code run and broke into it several times, and it was always somewhere in this loop, and then I noticed the Y register had all sorts of values, usually greater than 40. So I realized somehow it was getting past that comparison. Then it hit me I had the wrong opcode.

A technical note: For a webcam, I use my phone with an app called DroidCam that transmits the video to a web browser via wireless, and then I can capture that browser window in OBS and stick it in a corner of the screen. That’s handy, but it adds about a half-second delay, so my face is about a half-second behind the audio. It’s not a big deal, but it’s annoying. It annoys me anyway when I watch them to verify everything worked. So I fixed that by running the full video through an ffmpeg filter to crop that part of the video out, dropping the first 0.5 seconds, then another filter to overlay that cropped portion back over the full thing. I don’t know if it matches exactly yet, but it’s much better than it was. Only problem is that late in the video I expanded the C128 screen large enough to get into that space a bit, so it affected the bottom-right corner of that too. I’ll have to be more careful not to run them into each other next time.

Another note: I recorded this one the full size of the screen, with no shrinkage. These compress pretty well, since most of the screen isn’t changing most of the time. They’re larger at this size, but not too large to upload. I hope that makes them clearer for anyone who watches or downloads them in high quality.

One more: I noticed my last couple 6502 videos showed up twice on Bitchute. Turns out that’s because I’d given them my YouTube channel ID when I signed up, and at some point they started automatically pulling over videos that show up on my YouTube channel. That’s convenient, except that I really want to put them on Bitchute first to encourage people to use it. Also, the ones they get from YouTube seem to be lower quality. So I took the channel ID out to keep them from getting doubled-up.

Let It Snow

Looks like I jinxed us, talking about sunny weather and garden planning a couple days ago. I took an “after” picture to go with Thursday’s “before” picture, after most of the snow today.

As snowstorms go, it wasn’t bad. Lots of snow, but it came down easy, and we can use the added groundwater. Might get a little more overnight. Maybe tomorrow I’ll see if I can fashion a sled out of something and give the hill a try.

I don’t know how much we got, because it drifted around a bit, but the average seemed around 9 inches the last time we went for a walk today. That matched what I measured here with my hand, downwind of the house so it could pile up.

And the always-great view from the porch. I really should get rid of that satellite dish. It’s an eyesore and there’s no chance it’ll ever be useful again. It’s currently one end of the clothesline, though, so….

Birds & Blue Skies

A bald eagle flew overhead this morning while Guy and I were on patrol. By the time I got my gloves off, phone out, and camera on, it was nearly past, but I managed to get this one shot of it. They’ve been hanging around here a bit this last week. Shape-wise they look just like a turkey vulture, so that’s what I figured they were at first, but when they get close enough you can see the white head and tail.


We also saw a few bluebirds, but I couldn’t get close enough for a picture, so here’s a good one from someone else.


Between the birds and the blue skies, it’s starting to feel like spring is coming, even though it’s still a ways off. I even saw a dandelion yesterday, that must have been tricked into blooming by the warm weather. Might be time to break out the seed catalogs and start sorting through last year’s leftover seed. Need to figure out how much and what to plant this year, and how much garden to try to have in the first place. Three full plots was really too much to keep up with last year, so I might need to cut back. That’s hard to do in the spring, though, because the weather is nice and planting is easy.

6502 Assembly Language #11: Game of Life Part 4

In this session we added a “press a key to continue” feature to the program, and then worked out the bug that was keeping certain cells from updating properly. Then I talked a bit about the possibility of refactoring the algorithm for walking through the cells and determining their neighbors to make it faster, and whether to do that next time or move on to another project. Comments and suggestions are welcome.

Playcasting Stardew Valley, Jan. 3

This one is of Summer 5-8, Year 1. Not much interesting happened in this one; just grinding for money for the next one.

6502 Assembly Language #10: Game of Life Part 3

I realized after recording the last video that my method of converting the work area into the game board was overly complicated, so the first order of business this time was to simplify that. That also got rid of the buggy behavior we ended with last time.

Then we do some self-modifying code to save bytes, which is cool but also shows how easily that can result in bugs. Got that working, but there still seem to be a few cells that don’t work right. Next step will be to add some features like the ability to control the progress of the game with the keyboard, so we can slow it down and watch it work turn-by-turn.

I spent the last several minutes of this one trying to figure out which memory location keypresses arrive in, so I thought about cutting that out, but I did say at the beginning of this series that you’d get to see it all, so it’s in there.

Now that the holidays are over, I’ll post the next video in this series each Monday.

Going Puzzling

When I was done wrapping Christmas presents, the kitchen table was completely clear for the first time in a long time, so I decided to start a puzzle that needs a lot of space. This is the biggest one I have, at 3000 pieces, so it should take a while. As it turns out, I also got a new puzzle for Christmas (1000 pieces with chickens on it, very cool), so now I have to finish this one so I can do that one.

A puzzle like this definitely requires the reading glasses at this point. And plenty of light.

One weird thing about puzzles that take a long time: when I walk away for hours or days and come back, I’ll usually find the place for some pieces right away, even if I couldn’t place them the last time I was working on it. The same thing happens with killer sudoku puzzles. There’s something about stepping away and coming back with fresh eyes that makes things suddenly fall into place.


There was a power surge here today that knocked down my UPS, thus powering off my workstation. Pretty annoying, but that’s better than having the surge come through and burn something out. It gave me an excuse to open the system up and blow out a couple years’ worth of dust. I also stuck in a spare hard drive I had lying around and made it all swap space, so now my system has almost 80GB of swap. That’s ridiculous, but at least I know it won’t ever run out of RAM/swap when it’s building a big package like Iridium (Chrome) anymore.

And it booted right back up, which is the main thing. I always hold my breath after any power outage like that, until things are back to normal.


I did some of my Christmas shopping at the calendar store at the mall, which has a lot of board games and puzzles. I only go to the mall once a year, so I don’t know if it’s permanent or a seasonal thing. I noticed they carried a reproduction of Mattel Electronic Football. I was tempted to buy one for nostalgia’s sake, although I didn’t have it as a kid. Some friends did, so I got to play theirs a few times. I suppose that was my first experience with a “computer” of sorts.

It’s amazing to see now how simple it was – just blips on a 3x9 grid, and you tried to move your flashing blip past the other blips. And we would play it for hours. Nowadays they pour millions of dollars into fancy 3D graphics and modeling, and don’t always end up with a game more enjoyable than blips on an LED screen were then. There might be a lesson in that.

Playcasting: Stardew & Linux Admin Talk, Dec. 25

I spent most of this one talking about the apparent lack of Unix/Linux skills out there, the causes of the shortage, and what might be done about it. While playing through days 1-4 of Summer, year 1.

Merry Christmas Miscellaneous

Some thoughts I’ve jotted down over the last few days before Christmas:


I bought eggs this weekend for the first time this winter. It sucks to do that when you have chickens, but that’s how it goes. For those who don’t know: chickens usually stop laying for a month or two in the winter while they molt (gradually shed their feathers and grow a new set). Young ones don’t always do it their first winter, but after that they generally do. You can fool them by putting a light on a timer for 14 hours a day, because it’s the length of daylight that triggers the shutdown, but I don’t do that. I figure it’s probably healthier for them to have their natural break and then come on strong in the spring.

I’m still getting 2-3 a day from the younger ones, but that’s not as many as I normally use, so I figured I might as well pick some up on sale. Maybe next time I have a glut of them in the summer, instead of eating a dozen a day and giving a bunch away, I should freeze enough to use through the winter.


Speaking of seasons and the shortness of the daylight, at least the days are getting longer now. Always glad to get past that. The next couple of months may be colder, but it’s good to see the sun coming up earlier each morning.


I’m getting closer to getting a landline phone. I had another call a couple days ago where I struggled to hear the person. Actually, it was the second call, because the first time she called I couldn’t hear anything and the connection died after a few seconds. I realize the call quality is affected by both ends, so the other end could still be crap no matter what I do, but cell-to-cell just seems to keep getting worse.


I’ve had three (make that four) conversations in the last month with people who say it’s hard to find techs who know Linux. That really surprised me. I assumed most people who do “computer stuff” would have tinkered with Linux over the last 20-some years, but it doesn’t seem that way. So I’m kicking around the idea of doing some kind of Linux/Unix training, and what that would need to look like. More on that in a podcast soon.


Guy’s collecting habit is getting out of hand. He dragged the item below up last week. He could only pull it a few feet at a time before he had to stop and get a new grip, so it must have taken him quite a while to get it home. I’ve had to kick it out of the driveway a few times, because apparently that’s where he thinks he should keep it, right in the middle of things.

If it sounds like the yard is littered with bones at this point, well, not really. But a little bit. I’ll try to leave some space before the picture, so people who don’t want to see skeletal remains can stop here and not scroll down. Merry Christmas!

Scroll

Down

At

Your

Own

Risk

6502 Assembly Language #9: Game of Life Part 2

Continuing with our Game of Life, we work out the code to calculate the number of neighbors for each cell and then rebuild the cell grid for each turn. Also improved the randomness of the initial grid layout. There’s a bug somewhere that’s throwing off the rebuild, so debugging that will be the first task for next time.

More Stardew Playcasts

I’ve uploaded a couple new Stardew Valley podcasts. I’m trying out “playcasting” as a word for them. Not sure I like it yet, but it’s shorter than “playing and podcasting.” Still looking for a better title. These are both more playing than podcasting, but the second one does have some talk about spam and chicken dressing and other topics.

Concatenating Videos with FFmpeg

I capture screencasts with OBS and then process them with ffmpeg before uploading. Surprisingly, OBS doesn’t have a pause button, so if I have to stop for anything, I stop it and restart when I come back, and then I have to concatenate multiple videos into a single one later.

The ffmpeg docs say you can concatenate like this:

ffmpeg -i "concat:video1.mp4|video2.mp4|video3.mp4" [other arguments]

That doesn’t always work, though. I don’t know exactly why, but it has something to do with mismatched aspects of the files. Sometimes it stops after the first file and ignores the rest of them. So it’s more reliable to use the other method, where you put the filenames of your videos in a separate file like this:

file video1.mp4
file video2.mp4
file video3.mp4

And then you include that file like this:

ffmpeg -f concat -i filelist.txt [other arguments]

That always works, but it’s a hassle to create the separate file each time. So I finally wrote the shell script below to automate the process.

#!/bin/sh
#
# myff - script to take a list of files from stdin,
#   save the list to a file for ffmpeg to concat from

FFTEMP=$(mktemp)
if [ ! -f $FFTEMP ]; then
    echo Unable to create temp file $FFTEMP
    exit
fi

for i in `cat -`; do
    echo -n "file "
    readlink -f $i
done >$FFTEMP

ffmpeg -safe 0 -f concat -i $FFTEMP "$@"

rm $FFTEMP

Now I can just pass the video files to that on standard input, and it’ll make the temporary file for me, give it to ffmpeg, and delete it afterwards. I use it like this:

echo video?.mp4 | myff [other arguments]

A couple of technical notes. ffmpeg is picky about filenames and paths. It expects the video files and the list file to be in the same directory by default, and doesn’t allow full pathnames in the list unless you pass `-safe 0` first on the command line. Also, this was written on FreeBSD, but I think it should be completely portable to other *nix systems, as long as they have standard `mktemp` and `readlink`.

One flaw is that it doesn’t handle spaces in filenames. That’s okay with me, because I don’t allow them out of old habit. It would have to be more complicated to tell the difference between spaces in filenames and spaces between filenames. By treating them all the same, I can pass the filenames in from `echo`, `ls`, or whatever other tool is handy.

Hope this comes in handy for someone who ran into the same frustration with “-i concat:” that I did.

6502 Assembly Language #8: Game of Life Part 1

I started coding Conway’s Game of Life in 6502 assembly. This video covers the initial setup, laying out the game grid, filling in random (“random”?) cells, and thinking about how to process neighboring cells. I expect the full game to take a few more videos, as I have some ideas to add after getting the basic game working.

Playing & Podcasting: Start

I’m going to start podcasting while playing games. Basically like everyone is doing with streaming, except I’ll record them and upload later since I don’t have the bandwidth for streaming live. I plan to do at least three a week, to try to kickstart podcasting again.

So here are the first two from earlier this week, playing Stardew Valley in the new FreeBSD-native install. The first one is pretty dull, since I couldn’t think of much to talk about except the game itself, so I don’t recommend it unless you need help getting to sleep. In the second one I talked about uploading a new assembly language video, bidding on RAM (didn’t win), Guy’s deer leg collection now at 3, visiting the Dollar General in Payson, coddling a scaredy cat, and why podcast.

6502 Assembly Language #7: Debugging and Future Plans

I finally finished the next entry in my 6502 Assembly Language series yesterday, and it took overnight to process and publish. In this one I debug the print-a-number code from #6, and then talk a bit about what to do next. I think I’m going to write a version of Conway’s Game of Life, as a way to develop an operating system kernel along the way. A game will need basic functions like “print a character at coordinates x,y”, so I think that’ll be an interesting way to do it. The game will provide something to see on screen, and the kernel functions will show how to interact with hardware registers.

More Snow, Stardew, and Snookered

It’s snowing again this morning. The last snow just melted off a few days ago, and now things are white again. Seems like we’ve already had more snowy days than the last couple years. Don’t know if this one will be enough to sled on. There’s a pretty good long hill out back, but I didn’t get around to trying it last time.


A Dollar General just sprouted in Payson. That’s how it seems, anyway. I drive by there most weekends, and I just noticed the construction a couple weeks ago, and it’s already open. It’s not really any closer than Quincy from here, but it’s a better drive, and it’s good to see businesses opening in a small town like that. Payson might have more businesses now than it has since I was a kid.


Funny timing: I complained here a few days ago about playing newer games in VirtualBox, and yesterday I ran across instructions for how to run Stardew Valley natively on FreeBSD. It works great; no more graphics glitches or hammering half my CPUs to play it. I haven’t dug into how it does it, but I guess it’s because the game is built on a cross-platform framework called Mono, so it’s fairly easy to make it work anywhere that Mono runs, which includes FreeBSD.

Now I just need to figure out how to accomplish the same trick with FTL, and I can leave VirtualBox/Linux turned off except for work-related testing.


It’s been a long day, trying to fix an email problem that’s not really an email problem so much as a “client keeps getting their password stolen” problem, and trying to find a solution anyway rather than just telling them they have to keep changing their password every couple days because they must have a compromised system that’s letting it get out.

I should be doing my next 6502 Assembly lesson, but I’m beat. Maybe I’ll relax with some Hee Haw videos instead.

Guy's Prize

Guy found a prize a few days ago. Someone must have dressed out a deer not far away, so he showed up with part of a leg and a lot of dirt on his nose. Now every time we go outside, he has to go check on it and chase away any cats. A few nights ago, he tried to bring it inside. When I told him no, he stayed out on the porch guarding it for a couple hours until he got cold enough to come in without it.


I bought a pair of rubber boots yesterday, and had to get 14s to get a pair that slipped on easily as the 12s I bought a few years ago. Either my feet have been growing, or boot sizes are shrinking. I don’t think it’s my feet.


I’ve been having writer’s block lately, or at least blogger’s block. I did knock out about a thousand words for the intro of my Farscape series the other day, but that’s a different thing. I could try to plow through by writing about having writer’s block, but that would surely be even more boring to read than it would be to write about.

So how about a technical topic.

I’ve run FreeBSD on my workstation since about 2000, when I started using it on servers. I just prefer it to Linux, for a variety of reasons that I think I’ve written about before. There’s one area where it suffers, though: commercial games. Most open source games are available in the ports tree, but on commercial games we’re out in the cold where Linux was 20 years ago. Many commercial games come for Linux now, but not for FreeBSD.

So I get around that by running Linux or Windows in a virtual machine using VirtualBox. That works fine for older games that aren’t too demanding. It’s not great for newer games that really need hardware 3D, though. VirtualBox only supports OpenGL 2.1 for 3D graphics; and Stardew Valley, for instance, requires 3.0. So the only way to play Stardew is to turn off hardware 3D and let it use software rendering. That mostly works, but once in a while the framerate drops and gets really choppy for several seconds, then comes out of it. FTL does something similar, bogging down on certain screens with a lot of moving parts in the background. I tried pushing more CPUs at it, but that didn’t seem to make a difference.

I can’t complain, because it’s amazing that we can run virtual systems on systems in the first place. The ideal solution would probably be to get a second PC for gaming and run Linux on it. I can’t see doing that to make a couple games work better, though, when most of the games I play work fine as-is. All my old Commodore 64 games play great.


I get a kick out of this one. There’s some interesting symbolism in it (notice which two run together the whole time), but who knows whether that’s intentional. Mostly it’s just fun, and a good song.

6502 Assembly Language #6: Printing a Number

Continuing on from the last video, we start working on code to print a number on the screen, one digit at a time. Debugging to come in the next installment.

Last Garden Video of 2018

For something different, I thought I’d do this garden update in the snow. We got about three inches from the “blizzard” the other night, and it looks like it’ll melt in a couple days, but it looks nice for now.

There are a few cauliflower heads, one small branch of broccoli, and maybe a couple cabbages waiting under the snow to be harvested as soon as they thaw enough to cut with a knife. Mint is hiding under the snow to be used anytime. There’s also kale and Swiss chard that may survive this cold, but it’s iffy. I put greenhouse jugs over a few beet and turnip plants to try to keep them alive through the winter so they can go to seed next year, since they’re biennials. Might stick a couple of those on Swiss chard plants as well.

It looks like this will be my last garden video for this year. I’ll have at least one more update when I figure up the total harvest, whenever I remember to get prices on everything from the store to fill in my records. Then it’ll be time to review this year, what went well and what failed, and start planning for next year.

Thanks to everyone who watched. I hope they were enjoyable or useful.

Auction Haul

I went to an auction last weekend. The two main things I went for were a garden push plow (pictured below) and a chainsaw. I got both, plus about $20 in “choice boxes,” so it was a good day. Choice box is when they’re selling a bunch of stuff in boxes, usually on a wagon, and they don’t want to go box by box because that would take all day and some wouldn’t get bids. So they take “choice” bids on a bunch of boxes, and then whoever gets the high bid takes however many boxes he wants for that amount each, and then if there are any left, they go again.

Usually, they don’t shift to choice box until they’ve cleared some of the more valuable things off a wagon, and that gives you some time to eyeball what’s left. In this case, the auctioneer caught us by surprise, going straight to it on the first wagon, and the bid only went to $2, which was also his minimum bid. So right away he said, “Anyone else want a box off this wagon for $2?” I’d seen one box with hats and another with new pairs of gloves, both of which I needed, so I grabbed both of those. Ended up with more than two dozen hats, including a couple that weren’t even advertisements, so that was a bonus.

That’s how a lot of the day went. It was cold, under 40 degrees with a pretty good wind coming across the wet field so it felt colder. It was a big enough auction that they ran two rings most of the day, and I think they just wanted to get done. So I got several $2 boxes, one full of light bulbs, a couple with dishes and pots and pans, and some with tools and hardware. Also a small power sander and sabre saw together for $3.

It’s kinda funny, because at $1 or $2, it’s almost impossible for a box of stuff to be worth less than that. Even shop rags cost more than that if you buy them at a store. But when you’re at an auction, you can’t buy every box of stuff, so you hold back and look for great deals or things you really need.

The push plow was my real prize. A new one is $100 or so. I got mine for $18, and it’s probably made of stronger stuff than a new one. That’s going to save a lot of hoeing next year. The chainsaw is more questionable. I paid $10 for it, and it needs a new starter pulley. It has good compression, so I’m hopeful that it’ll run once I get that. Sometimes you take a chance.

Late that night, I went to get a drink in the dark and forgot all my choice boxes were still on the living room floor waiting to be sorted through. While falling, I had images of a box full of broken dishes stabbing me in the gut, so I managed to catch myself with my face and one free hand on the other side. My split lip is healed up, but it feels like there might be a small bone in my hand that’s cracked and will take longer.


This 5-1/2 pound cabbage got made into cole slaw for Thanksgiving. Actually, half of it did, because that was a big enough batch. I picked the rest of the cabbages this week, and this one was the biggest. There are still some cauliflowers out there, but I’ll leave them until after this warm spell, to give them a chance to pick up more size.


Got a picture of the cat I call Two-Face. Yes, that’s a horrible name for a cat, but I’m bad at names. This was as close as I can get when she’s not eating. I should learn how to take decent pictures. Cameras keep getting more pixels, and my pictures continue to be blurry. Everything but the cat seems to be in focus.


Something might be up with my Facebook account. Usually when I share a blog post there, it gets a few hits from that direction. The last few have gotten one or none. It might be because I’ve been using Bitchute for my videos. Bitchute was deplatformed the other day by Paypal, so I wouldn’t be surprised if their Big Tech allies are suppressing links to it. Its decentralized design is a real threat to the centralized systems like YouTube and Facebook, even if you ignore the political angle (which they don’t).

I’m going to keep using Bitchute because it’s a good thing and we need more choices like it. If that means Facebook suppresses my posts, well, I expected that eventually anyway.

It’s also possible my articles just suck lately so people stopped reading. Can’t rule that out.


Happy Thanksgiving, everyone.

More Old Blog Posts: Latin Mass

Here are some more posts copied from my old blog, all on the Latin Mass. These are almost exactly ten years old, from when it was just getting started at St. Rose. So this is sort of an anniversary post.

They are unedited, except for taking out broken links to images. If I start editing them, I’ll end up completely rewriting them, because I’d nitpick over my writing, and I’d probably think some of the opinions naive, since I was just starting to learn about the Mass then. I might have even gotten some things wrong. That’s okay, they are what they are, and it is what it is.

6502 Assembly Language #5: From Assember to Monitor

Continuing with the code we wrote in #4, we compare the code the assembler understands, with comments and labels, to the machine code it produces, using the machine language monitor in the Commodore 128 to disassemble it. We also convert the binary division routine from #4 to handle 16-bit dividends, and then 32-bit. Also discussed the issue of where to store working values in memory.

A side note: I was puzzled during the video why my perl command was printing a 1 after the expected value of “b27”. I realized afterwards I had written “print printf…” so the “printf” was prnting out the “b27” and then “print” was printing the succesful return value of the printf, which was 1.

Seed Catalogs and Smart Phones

The first seed catalog arrived today, from Pinetree. I like them a lot, and will be buying from them again next year. But this is really too soon to get seed catalogs. Next year’s garden is still next year. They used to start showing up around New Year’s. That works well because January is a good time to plan and think about warmer things. Right now, when we’re still harvesting things like cabbage and cauliflower, it just seems early. I’m not ready to plan for a garden five months away.

Then again, one of my neighbors has had Christmas lights up for a couple weeks. So maybe I’m the only one not anxious to get on with winter.

Guy doesn’t really love it either. He will go out in it, but doesn’t stay long if I’m not out there with him. Pepper had that double layer of fur from her wolf heritage, so she thrived in the cold and snow, but Guy not so much. He’s glad to go running in it if there’s something to hunt, though.


When I bought my phone, it was my first smartphone, so I bought the cheapest one they had, for $30 (then the same phone was $1 for new customers a couple weeks later, but oh well). They all looked the same for my purposes. They all ran the same version of Android, a.k.a. crippled Linux. Some had nicer cameras, but I didn’t care much about that. I just wanted one that could make calls and texts and maybe run a few apps, and it looked like they could all do that.

And my $30 LG K8 does it all fine. There’s just been one problem: it only has 8GB of RAM. That would be plenty on an ordinary Linux system, because I could strip it down to essentials, but the Android OS is larded up with lots of Google crap I don’t need that can’t be deleted. It also has a manufacturer’s “feature” in that it will only let you use an added SDRAM card for certain things. It can’t just be mounted as part of the main filesystem. Most apps can’t be moved to it, including all the built-in Google apps. I put a 32GB card in it to store things like video, but most apps are still locked into that internal 8GB.

When I first had it, the built-in stuff took up maybe 6.9GB, so I still had a GB or more free to work with. That was about three years ago, though, and apparently apps have been creeping up in size. Now I can only pare it down to about 7.5GB, even after getting rid of some apps like Facebook and Twitter altogether.

So it looks like I need to upgrade to at least a 16 GB system. Kinda crazy, but there it is. Hmm, they have a new 16GB version of the same model for $20. What are the odds that I get that one and it has a newer version of the OS that takes up 15GB? Guess it’s worth a try. I’ve been happy with it other than the memory idiocy. The battery life is noticeably shorter too, so it’s about time.

Ideally, I’d toss the thing and get a landline phone that hangs on the wall and doesn’t follow me anywhere, but that’s not an option for now.


Here’s a sleepy hour of Stardew Valley to follow up on the other night’s. I didn’t have much in the way of podcast topics to talk about, so this is mainly just me playing the game. Maybe a couple funny bits.

Low-Carb Ice Cream

Good low-carb ice cream isn’t easy to make. Ice cream fluffs up and stays soft because it’s an emulsification of the fat in the cream with the sugar, so if you use a different sweetener that doesn’t have the structure of sugar, it doesn’t emulsify, and you end up with a bunch of ice freezing to the sides of the container.

Sugar alcohols can work, but they seem kind of hit-and-miss as to whether people lose weight with them, plus they have a laxative effect. So I thought I’d try something using gelatin, because I’ve read about using that to thicken gravy without carbs. I made a batch with:

  • 2-3 eggs
  • 2 cups heavy cream
  • 2 cups milk
  • 1 box sugar-free Jello
  • 1 shot vodka

I use 2 eggs if they’re huge, 3 otherwise. Whisk those up, then whisk in the rest.

It worked out well as far as the freezing went. The gelatin helped it fluff up, and the vodka lowers the freezing temperature so it doesn’t freeze on the sides as fast. The only downside was that some of the gelatin was still a little grainy, like it hadn’t dissolved fully. Dissolving it in hot water isn’t an option, since everything needs to go in cold for this kind of ice cream maker to work. I could let it sit in the milk for a while first, though, before stirring it all together.

To be more natural and get away from the aspartame in the Jello, you could use a packet of plain gelatin, a better sweetener like stevia, and a flavoring like vanilla or chocolate. The Jello was just a convenient way to try those already mixed in the right ratio. Might have to experiment with that. Carb-wise, it’s something like 8 per serving, so it’s not bad as long as you stick to one.


This is a screencast/podcast where I play Stardew Valley and talk about various things: playing the game, giving away more cats, making good-quality videos is hard, reading glasses, waking up to a cold house in winter, social media, and others. This is kind of a test of a different way to distribute things through IPFS, so it may not be that interesting in itself. But feel free to listen or watch if the links work.

Stardew Podcast Nov. 10, 2018 - Audio Only MP3

UPDATE: Okay, that works fine for the MP3, but not for the video. It seems using the HTML5 video tag makes your browser download the whole video (or a lot of it) before starting to play it. That’s not acceptable with a 600MB video, which people might want to bail on after the first couple minutes. Moving it to bitchute instead, and I’ll have to experiment more with that.

Goodbye, Little One

Sad news today. Little One, the black cat who was in my last garden video, passed away. Ironic, since I said then that he was healthy and even fat after almost starving as a kitten. I noticed him seeming out of sorts the other day, but couldn’t find anything wrong with him. Then he didn’t show up for food, and later I found him already gone. He might have gotten hit on the road; I don’t really know what else it could have been. It’s a real shame; he was a nice cat. I’ll miss him getting underfoot.


No one offered me an “I voted” sticker when I went Tuesday. Not in 2016 either. How am I supposed to show off my civic responsibility without a sticker? Maybe I just don’t look like the sticker type.


You can’t see it very well because I was too slow getting my phone out for a picture, but a decent-sized plane (jet?) just went nearly overhead. I don’t think I’ve seen that here before. The emergency helicopter from Blessing goes over a lot, so I think the house is right on the line between two hospitals, but this is the first time I’ve seen a plane that size come through here that low.


I’m going to start copying articles from my old abandoned blog to this site, so I can repurpose that domain for something else. At least the articles that seem worth the trouble, anyway. I don’t even remember what all is there, so I’m sure there’s plenty of junk. I want to preserve the publication dates on the articles, so they won’t show up on top here, so I’ll link to them if they still seem interesting. Here’s the one that always got the most traffic.

How to Treat Your Introvert

One out of Two Ain't Bad

Well, I almost nailed the Senate, but I wasn’t close on the House. Guess I should have made a prediction on governors to use as the tiebreaker.

It looks like my main mistake was underestimating the importance of Republicans losing 40+ House incumbents who retired early for various reasons. I assumed that since Republicans held those seats before, they were likely Republican-leaning districts, but that wasn’t the case. That’s one disadvantage of trying to maintain a 10,000-foot view instead of digging into individual races.

I think some of the difference between the Senate and House results has to be credited to Trump’s rallies. They were focused mainly on Senate races, probably because there were fewer of those up for grabs. And frankly the Senate is more important to his goals. But that left a lot of new Republican challengers fighting against better-funded Democrats in a lot of out-of-the-way places. If it turns out several of those were close, it might be that some rallies in different places could have saved them, but that’s Monday-morning quarterbacking.

All in all, while it’s disappointing, it could have been a lot worse. Obama lost 63 House seats and 6 in the Senate in his first midterm. Clinton lost 52 House and 8 Senate in his. Dubya gained a few seats because we were gearing up for war and patriotism was high. But on average, presidents have lost 30 seats between the two houses in midterms, and in only a few cases have they gained seats in either one. So while the media will move the goalposts from “blue wave” to “losing the House is a disaster for Trump,” the reality is otherwise.

One reason it’s hard to prognosticate is that we’re so divided between rural and urban. Case in point: All 34 purely urban districts are now held by Democrats. I go to the polls knowing 70% or more in my county will vote Republican. But in another part of the state, in a place where they never see the horizon for all the buildings, they vote overwhelmingly Democrat. We mix less than ever. That makes it hard to get an objective look at the overall picture. You can’t see it from street-level, but it also gets fuzzy from too high up.

One silver lining: the 40+ Republicans exiting tend to be unreliable NeverTrump/GOPe types. Replacing one of them with a Democrat doesn’t change much except committee leaderships, and the fact that the Democrat will stab you in the front instead of the back. So the smaller GOP membership should also be more loyal and reliable. Also, some of the new Democrats ran on Trump-friendly platforms. They may have been lying (McCaskill in Missouri ran desperate ads like that which were shameless lies), but it’s possible that some will be amenable to bipartisan measures if the division is small.

Another: Democrats led by Pelosi, Waters, and some of their new radicals are likely to double-down on stupid and self-destruct. Liberals are already demanding that they subpoena Trump’s tax returns and fill up the next two years with endless investigations. Because they always project, they can’t accept that Donald Trump isn’t as corrupt as they are, so they’re convinced that if they just investigate Bad Orange Man enough they can find the magic spell that will make him disappear. Anyone old enough to remember when Americans got tired of Republicans investigating Clinton knows how that goes.

Can I Beat the Experts?

Senate 56, House 225. I figured I’d do a prediction for the midterms. What’s the point of having elections if we don’t all go out on a limb guessing what will happen? The following are some thoughts I jotted down over the last few days to explain why I think Republicans will hold the House and gain seats in the Senate, interspersed with some interesting screencaps.

The first thing is that early voting looks very good. The normal trend is that Republicans win the absentee ballots (lots of military), Democrats win early voting, and then Republicans win on Election Day. It’s not hard to see why. Democrats haul a lot of people to the polls to get them to vote. They go to churches and colleges and arrange to walk everyone to the polls in a group, and hand them sample ballots showing whom to vote for (just talking about the legal methods here). That takes time, so they’re doing it all through the early voting period, giving them an edge there. Republicans are more independent and likely to get themselves to the polls. They’re also more traditional and inclined to do it the old-fashioned way, voting on Election Day with everyone else.

All that means that, in a close election, Republicans often start out with a lead based on absentee ballots, then lose the lead as early voting goes on, and then the election hinges on whether enough Republicans vote on Election Day to overcome the Democrat lead from early voting.

I should point out that when we’re talking about absentee votes and early votes, we don’t know for sure how they voted. We only know which party they’re registered as. So when you read that Republicans have 50,000 early votes in a race, that means 50,000 votes have come in from registered Republicans. It’s possible that some of them will be for the Democrat or a third party. It’s possible some will be empty or mis-marked and not count at all. But generally you can assume those will balance each other out; there will be mistakes from both sides, and roughly equal crossover from each side.

So we currently know (in states that report it) that Republicans are leading early voting compared to 2016. In Florida, for instance, they’ve maintained a 50,000 vote edge over 2016. In 2016, early voting ended with Democrats 100,000 votes ahead. This year, Democrats will be ahead, but by less than 50,000 votes.

So democrats are now counting on one or more of:

  • Lots of Republicans who normally vote on election day voted early this time
  • Lots of Democrats who normally vote early will show up on election day this time
  • Lots of Republican early voters crossed over to vote Democrat
  • Independents voted Democrat at record rates

There’s no evidence for the first three, and frankly they’re kind of silly. On the first two, people are creatures of habit, and there’s no reason to think hundreds of thousands of people would change their voting habit in one direction in two years. In fact, the one thing that could be affecting it works in favor of Republicans: closed polls in the R-heavy Panhandle due to the hurricane. Those people could show up heavy on Election Day. On #3, Trump’s approval rating with Republicans is over 90%, far higher than in 2016. There’s no reason for Republicans to hand the House to the Democrats and make things harder for him.

So they’re really left with #4, and the only evidence they have for that is their polls. So that’s what many races will come down to. Are the polls wrong (again) or are voters doing something tricksy and weird that’s throwing off the usual pattern of early voting? It might help to know that we’ve been here before. In 2016, their polls also showed higher Democrat output than the early vote reflected, so pollsters convinced themselves of #3 up there. It wasn’t true then, and there’s no reason except “but muh polls!” to assume it is this time.


Another factor is that there’s just no reason for voter upheaval. The economy is good. Jobs are up. Gas prices are down. The president is doing the things he said he would do, to the extent Congress, the bureaucracy, and Hawaiian judges are letting him. His approval rating is higher than Obama’s was at the same point in his presidency. His approval rating with Republicans is sky-high, driving their enthusiasm, added to anger over the Kavanaugh hoax. All those environmental factors lean R.

I see parallels with 1998, when Clinton gained five House seats and held steady in the Senate. That was another time when the economy was pretty good, we hadn’t gotten into any wars for a while, and Americans were tired of the other party’s endless investigations of the president, correct or not.


Another important and under-reported factor could be the 1982 Consent Decree. In that year, Republicans in New Jersey were charged with voting shenanigans. As part of the settlement, the DNC and RNC both agreed to give up their right to seek remedies for voter fraud in many cases. That’s why you’ll hear about obvious cases of voter fraud, as when a district ends up with more votes than its population, and nothing is ever done about it. They legally weren’t allowed to. Well, that decree finally expired last December after the judge who kept extending it died. This is the first election in over 30 years where the parties will be in trouble if they’re caught breaking the rules.

That has to be giving would-be ballot-box-stuffers and defrauders pause, especially with the president proclaiming that voter fraud will be prosecuted according to the law. This attempt by North Dakota Democrats to fool hunters into thinking they could lose their hunting licenses if they vote might be a good place to start.


Finally, this is worth a chuckle. A 2016 poll of “Hard” Trump and Clinton voters found that 55% of Hard Clinton voters admitted they could be prevented from voting by a serious storm, reports of a disease epidemic, threats of violence, or other fairly mundane threats. Only 10% of Hard Trump voters said the same. There was one thing that could keep 38% of Hard Trump voters from the polls, though: attack by extraterrestrials. Some things just can’t be kept waiting.

Halloween 2018 Garden Update

Since the couple frosts we’ve had, all the summer crops are dead now, and it’s just down to the hardy ones. It looks like there will be quite a few cabbages and cauliflower, not so much on the broccoli. Lots of carrots, which I’ll leave in the ground as long as possible. If you cover them with some straw, they can stay there through the winter until needed.

The cat in the video is Little One. He’s the one who showed up starving in the spring and ended up in a video then. He’s been doing fine ever since, although it seems like he’s permanently a little fat now. I never thought of a better name, so Little One stuck. He gets underfoot a lot, so he got a chance to make a cameo.

Latin Book Incoming

New return address labels came from the insurance company today. They send so many free ones that I find myself wondering if I could use them for some kind of craft. Like maybe I could use them as wallpaper to redecorate a room.


Trick-or-treaters usually don’t come out here in the country, but I did pick up one bag of peanut-butter cups, just in case. I probably should have gotten a candy I don’t like, because now I won’t be sad when no one comes and I have to eat them myself.


I hate these Google captchas that some sites use, where you have to click on the pictures of things like cars and buses. They raise so many questions. Are the walk/don’t-walk signs part of the traffic light? Does “bicycles” include the bicyclist, or just the frame? Do trucks count as cars? It’s annoying to have to help train their AI just to use some sites, so I try to make sure and get at least one square wrong each time. I can usually do that without it catching it and making me do another set. Screw Google.


I went through my non-work projects-to-do file yesterday. Turned up a couple I’d forgotten about, so it’s good that I write ideas down. I picked out a few to work on this winter, so I’ll be writing about them here. One is the 6502 programming video series, which I’ve talked about already. I’ll be doing at least one video on that each week.

Another is my Latin book. I made up 30-some Latin lessons back when I was teaching it at St. Rose, and had them online for a while. A few years ago I thought they’d make a decent textbook for beginners, so I started working it into e-book format. I got about 90% of that done before I got sidetracked into other projects, so I just need to clean up some issues with it, like images not working right. Then I’m going to make a video to go with each lesson, which I started today. I’m not sure how to monetize it yet, but I’m thinking sell the book and put the videos out there for free. Then I might need to stream an hour a week or so to answer questions live. I haven’t done any teaching for a while, so I kinda miss it and am looking forward to completing this.


This is a good song, but I’m posting the video because it has tractors. One is an Allis-Chalmers D-21, which is something like the D-17 I drove a ton as a kid, just a bit bigger. Cool.

Helvetii Turnaround

Here’s a history lesson that isn’t taught in schools anymore. At least it wasn’t in mine, and judging by the way people talk about how very impossible it is to stop invaders, it isn’t now either. Short highlight version:

The Helvetii were a Celtic tribe that lived in part of where Switzerland is now. They were getting pressured by Germanic tribes moving down from the north, so they decided, along with a few neighboring tribes, to migrate to live with some cousins on the west side of Gaul (France). The best route there went through a Roman province. Historians estimate there were between 100,000 and 300,000 of them, including perhaps 40,000 warriors. They may have burned their homes so they wouldn’t be tempted to turn back, though the evidence is sketchy on that.

Julius Caesar got there ahead of them and destroyed the bridge at Geneva to stop their passage. They tried to negotiate, claiming they were just passing through (“Gosh no, we won’t rape and pillage, we’re just taking a walk here.”) Of course, a crowd that size can’t travel without eating and destroying everything in its path. Caesar played along with the negotiations long enough to fortify his position, then told them to piss off.

The Helvetii took a longer path around through some mountains and started pillaging Roman territory, as expected. Caesar showed up with 30,000 men and caught them in the middle of crossing a river. He wiped out one side, built a bridge to get his army across, treated the wounded, and then pursued the rest. If tribes didn’t immediately surrender and provide hostages, they were wiped out and the survivors taken as slaves.

It’s generally thought that Caesar defeated them more completely than necessary to improve his standing back at Rome. If so, it worked. The Romans wanted nothing to do with barbarian tribes coming any further south, and weren’t too particular about how they were treated. Caesar’s campaigns in Gaul kicked off his popularity, which grew until he was elected dictator for life. He became so popular that the elites of Rome began conspiring against him, eventually leading to his assassination.


Julius Caesar had no A-10 Warthogs. If a nation of 300 million people wants to keep out 5000, or 50,000, or 1,000,000 invaders, the question isn’t, “Is it possible?” The question is, “How best to do it?” What methods will best:

  • stop the invasion
  • prevent future invasions
  • limit the risk to the nation’s troops and citizens
  • limit unnecessary harm to the invaders
  • expose any internal traitors who encouraged or funded the invasion
  • reflect well on the leaders fighting the invasion

Those are all factors, more-or-less in order of importance, that have to be considered while choosing from a whole range of lethal and non-lethal options for stopping the invasion. But regardless of the answers, if the invasion isn’t stopped, it isn’t because it couldn’t be. It is because the people in charge chose not to.

Fertilizing

It looks like they’re getting ready to inject manure in the fields around here today. For those who don’t know how it works, this might be interesting. They unroll about a mile of this big hose that Guy is inspecting in the picture below, stretching from the dairy down the road to the far side of the field. Then they start pumping liquid manure (enough water is added to make it a slurry) through the hose, which is attached to a plow with injectors that’s pulled by a tractor. The plow slices the soil open, injects the manure in, and then lets the soil fall back.

It works pretty well. We’ll smell it around here for a couple days, but it’s nothing like the smell you’d get if they spread it on top like they used to. They don’t have to use as much chemical fertilizer, if any at all. It also reduces the amount that runs off if it rains. It’ll put an end to picking up downed ears of corn, though.

The hose is probably 8 or 10 inches across. Basically a fire hose. It gets pulled back and forth across the field as they work their way from the far side this way. It seems like it would be too heavy, full of slurry, to drag that much hose that far, but it works.


I picked twelve pounds of green and red bell peppers on that first day of frost. I was going to dry them all, but that would give me way more than I need, so I decided to pickle some. This is a recipe from the Stocking Up book, which uses half peppers and half onions. I went about 5 parts peppers and 3 parts onions, since I was trying to use up peppers. Add vinegar and sugar, cook down, and process in pints. I’m thinking of using them as Christmas presents, if I can think of anyone who would like such a thing. I’m hoping it serves as a sort of relish for sausage, that kind of thing.


Part #3 of my assembly language video series has over 1000 views, which is way more than any others I’ve done. So I’m going to put in some more time on that in the coming weeks. It’d be cool if I could turn it into a real project that pays for itself, maybe with a Patreon kind of thing. There are some people doing that, like the guy making Handmade Hero, a game written in C, who does all the work on stream and puts the videos up to watch.

I think I’ll do a couple more entries in the series and see how it goes. Maybe I can get some feedback on the idea. I’d need to decide what kind of project to do first. One possibility would be an operating system. Not that the Commodore 64 or 128 needs another operating system, but that would cover all the ways the 6502 interfaces with other hardware, which could be useful for people programming it on other platforms.


I bought a Sansa Clip MP3 player many years ago. Still have it, actually, though the headphone jack got bad, so now I just use it to take dictation. It came with two songs pre-installed on it. I don’t remember the other, but this one was good enough that I tracked down a lot of other songs by the same guy, Andrew Paul Woodworth. Seems like he’s mostly a regional performer in the Seattle region. Too bad, I’d go to see him if he came around here.

Bombs Away

I’m going to start posting my political stuff separately from my personal stuff. I don’t actually know who is reading this blog, if anyone, but I figure people who are interested in my garden/programming/etc. might not be interested in politics and vice versa, and if you are they’ll still both be here. But now if you see the “politics” tag at the top (like this one), you’ll know it’s political all the way down, and otherwise it’s not. Figured I’d change that since I’m writing more political articles than I expected to.


No need for a Triggering today, since the media had bombs to talk about, or “bombs,” as the case may be. But let’s run down the narrative being pushed hard out there, plus some facts, shall we? Supposedly:

  • right-wingers driven to violence by Trump’s rhetoric
  • sent a bunch of non-exploding bombs to Democrats
  • some of whom aren’t in power anymore
  • none of whom probably open their own mail, especially at the offices most of the bombs went to
  • two weeks before an election Republicans have been pulling ahead in
  • through the US Postal Service
    • which x-rays packages for stuff like this
    • and is known for being great at tracking down senders
  • CNN got one and set off alarms and evacuated the building on live TV it was so dangerous
    • but they took it out of the envelope to take pictures of it
    • and were allowed to publish said pictures by whatever agents and bomb experts were involved
  • Alex Soros, son of George, had an op-ed written and published about all this before the morning was out
  • they’re made of PVC….. WTF?

Ooookay then. Personally, I’ll wait until we have some actual information from the authorities before placing blame, unlike the media. They can’t get straight yet whether the bombs are real or fake, or which ones were intercepted at the post office, but they’re already sure whose fault it is. Usually these things end up being some crazy with unclear political beliefs, and if they aren’t convenient beliefs, they’re quickly forgotten. Notice the media’s lack of interest in the motives of the guy who sent the ricin to Trump and Mattis, or the Bernie supporter who shot up the Republican softball game last year.

It’s not ridiculous to think it could be a radical leftist group reacting to recent news of their Blue Wave fizzling, trying to make Republicans look bad before the midterms. Or some drunk college students pulling a very stupid stunt with fake bombs. We’ll have a better idea when we know whether the bombs were real (PVC, really?), and I wouldn’t be surprised if the USPS and Secret Service produce a suspect soon.

I have a feeling Acosta will regret taking that picture.

I, Nationalist

Like President Trump, I am a nationalist. Not a white nationalist (“white” is not a nationality and can’t be), or a national socialist, but a nationalist. This should be obvious and uncontroversial. A nationalist is someone who loves his nation, takes pride in her, and puts her interests above those of other nations, though he respects that the people of those nations will do the same. A nationalist wants his nation to be open to temporary alliances and trade deals with other nations when they are clearly in the national interest, but to avoid foreign entanglements in general, as George Washington recommended in his Farewell Address.

This should be a no-brainer. It used to be. We said the Pledge in school and stood when the flag went by at parades, so we were nationalists whether we knew the word or not. Why wouldn’t we be? But the globalists have been on the rise for decades now, and they’ve twisted simple national devotion into something scary, as if putting America first means you want to subjugate all others.


The president is currently putting the insanity and violence of the globalist left on display. It’s not pretty, but it has to be done. The media can’t continue to whitewash their actions, turning violent mobs into “peaceful protesters” and aggressive invaders into “poor refugees.” The six globalist companies that own all US media (yes, including Fox News) won’t get away with it anymore.

So every day is a new Triggering. Today “I am a nationalist,” yesterday saying a person’s sex at birth is the one that counts for interactions with the government like Title IX (you know, the way it was for all of human history until Obama’s executive order a few years ago). Wonder what it’ll be tomorrow. Each time the left is triggered, they show off another uglier side, and in the meantime they’re doing nothing to prepare for the midterms that they thought were in the bag a month ago. The Kavanaugh hoax turned the Blue Wave into a Red Wave, and now it’s becoming a Red Tsunami, as districts around the nation report higher Republican early-voting turnout, despite the fact that Democrats normally lead that.

Now the media are starting to complain about it, as if we’re all in danger if their filters can’t keep up. They like to use their megaphone to create false narratives, but that takes time, because you have to build them on partial truths and then create buzz around them so they seem organic. They can’t do that at this pace. All the facts are still out there, but you have to find them for yourself in raw form and decide for yourself what to think about them. They can give you a pre-thought-out package anymore, not on every topic.

And we still have two more weeks of Triggering to go. It’s exhausting, but necessary. Then the greatest salt harvest ever.

Twitter Tomfoolery & NPCs

The big social media companies are increasingly being exposed for their anti-competitive and fraudulent practices. Twitter was the latest this week as a bit of a joke campaign turned up an interesting reaction from supposed “users” on Twitter and then from the service itself. I thought I’d do a quick rundown as a screencast/podcast, talking over some posts from the jokesters.

Audio only here: Twitter Tomfoolery MP3

Cat Scratch Fever

I was trying to give away four cats last night. By the time we were done, one cat was transferred successfully, three had escaped into the night, the back porch was trashed, and I had blood dripping from one hand. I’m going to need a better strategy than just “grab them and hand them to strangers.”


I used to wonder how items shipped from China on Ebay could be so cheap. Sometimes the item plus shipping is cheaper than shipping alone from a US location. You have to wait longer, but there’s a huge price difference. Turns out it was just another one of those “free trade” treaties our government signed that was screwing us, giving Chinese importers a direct advantage on shipping costs over American businesses.

Thanks in advance, Mr. President.


I’m no lawyer, but this sounds like straight-up fraud to me. Basically, Facebook lied to content producers and told them videos got about 9 times the views they actually get. Many web sites changed their whole model to shift from written articles to more videos, firing writers and expanding their video departments. Some even went to all-video.

When one of the sports news sites (Yahoo, I think) announced they were going all-video, sports radio guy Steve Czaban was skeptical. He figured, who wants to sit through a 15-second ad and watch a video to get the gist of last night’s game, when you can skim through a text article and get it in a few seconds? Turns out he was right, and it was all based on a scam.

Libertarians like to say just don’t use companies like Facebook if you don’t like how they do business. That’s not really an option if you want to provide content online, because they control the audience. Hell, even my stupid little blog gets five times the traffic for the posts I share to Facebook. That’s why when Facebook said “Jump,” all these companies said “How high?” You have to follow their rules even if you don’t use them.

I’ve been saying the Big Data companies are in trouble for anti-trust activities, and this isn’t even that. But this is very bad in itself. These companies really do think they’re above the law.


This is just a cool song and video. When the art kicks in at around 1:30, it puts me in mind of a cross between Heavy Metal and Meaning of Life.

Frosty Morning

Just a note to say that if you want to be notified whenever I post to this blog, click this link for my RSS feed. Your browser or app or whatever should know what to do with it. I try to share the more interesting ones on Facebook for my friends there, but I forget sometimes since I don’t use it anymore. The RSS feed will have them all.


Oof. I think the non-hardy garden season came to an abrupt end last night. I knew there was a chance of the temperature getting down to 32, so I thought things might get singed, but this looks pretty heavy. There are a ton of beans still hanging on those plants, but I just didn’t have time to pick and can them. Guess I should have found someone who wanted them to come pick them for free. Have to remember that for next year.

Better get these peppers in the bottom part of the picture picked and chopped up for the freezer today. That’s what I had planned for them anyway, so that will be fine even if the frost killed them. All the brassicas – cabbage, broccoli, Swiss chard, cauliflower, kale – and other hardy crops will keep growing. The main summer crops I had left were the beans, peppers, and squash.


Later in the day: Yep, the frost killed all the non-hardy stuff. The bush beans and pepper plants were pretty much melted by evening. The pole beans on the trellis seem like they might have survived, being further from the ground, but I’ll see over the next couple days. Harvested 12 pounds of green peppers, which should be about a 10-year supply.

It seems like the frost snuck up on us, but October 15th is the average first frost date around here, so it really didn’t. I suppose that’s just because the nights only started getting below 50 a couple weeks ago.


It feels like time to start remembering how some names and events we learned about last year connect together, so I’ll start posting some as they seem relevant. None of these investigations went away or were resolved; they just seemed to stall. This one looks like it might be moving again. By the way, the Christopher Steele mentioned here was a British intelligence agent. That’s one reason this stuff is so sticky. Turns out there may have been foreign agencies interfering in the election for real. Just not Russia, at least not the way they’ve been saying.

Fun with Chromosomes and Math

Let’s talk about chromosomes and heritage, and see how much I can remember from biology class a couple years ago.

Humans have 46 chromosomes, which are in 23 pairs, normally numbered from 1 to 23. When you were conceived, you got 23 from your father and 23 from your mother. Which ones you get is random, but you get one from each pair from each parent. So you end up with two #1 chromosomes making up your #1 chromosome pair, and so on down to #23. There’s also something called crossover when the gametes are being created, so the chromosomes a parent passes down are spliced together chunks of the two halves of a pair rather than copies of whole chromosomes, but that doesn’t change the math here.

This is all true for each generation. Your dad’s #1 pair has a chromosome from his father and one from his mother. So on average you’ll get 11.5 chromosomes from your paternal grandfather and 11.5 from your paternal grandmother. The ratio could lean one direction or the other, but it’ll add up to 23. Same thing on your maternal side.

Continuing back, you will average 5.75 chromosomes from each great-grandparent, 2.875 from each great-great-grandparent, 1.4375 from each before that, and 0.71875 from the generation before that. By the time you get back to your great-great-great-great-great grandparents, you have less than a 50% chance of having even a single chromosome’s worth of genes from a particular ancestor. When you go much further back, everyone in the same general racial/ethnic pool (haplogroup) basically has the same gene pool to draw on.

That’s why American Indian groups generally require 1/8 or 1/16 Indian heritage for membership. If you go back further than that, everyone might or might not have a little. It’s why dairy cows that are 7/8 one breed are considered purebred. That other 1/8 of something else just doesn’t affect much.

And it’s why it doesn’t matter whether Elizabeth Warren has zero or one American Indian ancestors out of 256. The reason the Pocahontas nickname burns her so much that she keeps fighting it is that she built a career on the claim that having American Indian blood gave her special moral authority to lead Americans that she wouldn’t have had without it. That’s pretty gross, really. Whether she was right about her DNA doesn’t change that. “You should vote for me because I have such-and-such blood” is supposed to be an unacceptable argument in 2018, whether you’re lying about the blood or not.

Line of the day from anon: “You have to look so far back that her ancestor may actually be Pocahontas.”


I got trips today, which is always fun. I predicted it here three weeks ago, and articles about it started showing up this weekend. It’s still #HerTurn if she’s still walking around in 2020.

Sentinel C64 Longplay - Levels 555-564

This is just what it says, a longplay video of Sentinel on the C64 (emulated) playing through 10 levels. I thought I might make a podcast sort of thing out of it, but I was too tired to think of much to say, so there’s some rambling. Posting it because why not. People watching other people play games seems to be a thing today, so maybe someone out there will want to watch it.

Kanye Goes to Washington

(I don’t suppose I’m the first to use that clever title.) So Kanye West had a meeting with President Trump today, and the media had a collective spaz attack.

It’s kind of amazing to see the same people who would normally scold you for any negative comments about a racial minority, slinging around terms like “house negro” and saying that a black man must be off his meds because he disagrees with them and doesn’t talk educated like they do. It’s pretty clear that the talking points have gone out to say he’s crazy, so I wouldn’t be surprised if they try to get his family to have him committed soon to shut this down. They’re terrified of the effect he could have.

Celebrities constantly tell us what to think about a whole range of political and social issues, both within their shows and outside them. But one popular man comes out with a different message, and they freak out. If they lose the media/Hollywood/academia grip on the narrative, the left is screwed. (See also the way they reacted to USA Today allowing an opinion piece by the president. Cracks are appearing.)

The treatment Kanye is getting, though focused, feels familiar. Regular Americans are used to being told that our opinions aren’t wanted if they aren’t the right ones. They laugh at us too, for the way we talk and the things we say sometimes. Especially those of us who “cling to our guns and God.” We’re supposed to watch TV and consume, and leave policy up to the self-appointed policy-makers. You know, the people who decided we should have American troops in 70 other nations, and would push that number higher if our current president weren’t balking.

I don’t know Kanye’s politics. I’ve barely heard his music, other than a remix of a Daft Punk song I like. But I don’t care. We should have more “off their meds” Americans getting a word in once in a while to compete with the Beltway elites, not fewer. We don’t need CNN or other blue checkmarks deciding who gets to talk and who doesn’t. If Americans who speak up have crazy ideas sometimes, so what? It’s just a conversation. Take the good and leave the rest.


That’s it for today. I watched a video that was going to go here, but it disappeared off YouTube. Guess it was too good. Maybe I’ll upload it elsewhere so I can post it tomorrow.

Free Corn

A few years ago I picked up several buckets of ears of corn in the field after they finished combining it. (Actually, I sat inside and drank and watched videos while kids picked them up, but it’s the thought that counts.) They don’t have the field fenced, so they can’t run cattle or hogs to clean it up, so any downed ears will just lie there and sprout in the spring until they’re killed by Roundup. So it’s free chicken feed for the picking up.

I went out last week to do the same, and only found about a dozen ears in the same area. I noticed the older farmer who lives next door was the one driving the combine this year. It looks like he did a better job of staying on the rows than whoever did it last time. Oh well, just have to range farther to fill the buckets.


Pardon the foul language in the rest of this post, but it’s unavoidable. The president has talked about the extreme language and violence of the left in response to the Supreme Court confirmation. Antifa is taking over the streets in Portland and mailing death threats to Republican voters. Yet the mainstream media is trying to pass off the president’s comments as a hoax or shit-stirring. And Hillary Clinton has this to offer. She’s actually right as far as she goes, but you’ll notice she doesn’t say which party she’s talking about. She’s going to let the media help you infer that part – she’s a Democrat, so the “destroyers” must be the Republicans, right? But to see a real call for destruction, check out the tweet below her quote.

That’s the kind of thing Twitter has been full of, but the media won’t show it, and of course that tweet has been deleted. Dave Hogue is not some weirdo in his mom’s basement. He’s a Google executive, one of the people who makes decisions for a company that sees itself as a supra-national organization above mere national governments. A company that recently admitted that a “security vulnerability” allowed a half million of its users’ data to be vulnerable for years. A company that will soon be in trouble for violating anti-trust law as I’ve mentioned before, and probably for breaking laws in dealings with China. Just the sort of people we want trying to run the world. It’s not just the fact that he thought that in a moment of anger, but that he has so little self-control he thought it would be a good idea to say it in public.

Now, I can certainly find vitriol like that from right-wingers. There are crazy people in every group. But I would have to go well off the beaten path to find it, because those people aren’t allowed on mainstream services like Twitter, or they have no followers in the first place. These deranged leftists, on the other hand, feel completely comfortable in sharing their murder and assassination desires right there in the open on social media, because they’ve always been able to count on media cover. And they get likes and retweets when they do it.

More in the montage below, which is just a small sample. This is what the president is talking about, and what the media wants to blame on “uncivil” behavior by Republicans. Sorry, but Lindsey Graham calling the Democrats liars doesn’t justify calls for murder (or actual attempts with ricin), no matter how uncivil it might be.

Also, note the Planned Parenthood tweet at the bottom, which tells Republicans “we’re coming for you.” In a vacuum, they can say that’s innocent, that they only mean with funding and votes. In the context of all those other tweets swirling around, it would be naive to think they would mind if their followers take it as marching orders for something more direct.

Fortunately, the Internet never forgets, and CNN and the other Dead Media can only control the narrative for the shrinking fraction of the public that lets them. These will never go away.

Lindsey's a Bad Mutha–Shut Yo Mouth

Be the captain of a youth basketball team. You get stuck with Ralphie, an unathletic boy who can’t play. His parents made him sign up because they think he needs exercise and new friends, but he doesn’t want to be there, doesn’t want to try and screw up and be embarrassed. You know if you give him the ball, he’s more likely to give it away to the other team than do anything good with it.

But if you do. If the other team stops guarding him because they know he sucks, and you spot him all alone under the basket and throw it to him because time is running out, and he catches it and gets it through the rim….damn that’s huge for him. He will remember that shot and the high-fives you give him for the rest of his life.

That doesn’t mean you suddenly try to make him your star and feed him the ball every play. He still sucks at basketball. But maybe he has a different perspective now. Maybe now he doesn’t hate being there anymore, and he’d like to get better. Maybe he starts wanting to try other things he thought he couldn’t do, and discovers he can, and that he likes it.

That’s kind of how I see Lindsey Graham. He’s been one of those liberal/moderate Republicans for his whole career, frequently crossing the aisle to vote against conservative measures and piss off his party. When the Democrats said boo, he jumped. He was so dedicated to getting along and maintaining gentility that he’s never even helped another Republican run for Senate. He didn’t think it would be nice. There can’t have been much fun in that.

But the Democrats pushed too far this time, trying to destroy a man Lindsey knew was innocent – and he knew they knew it too, and were doing it out of pure partisan gain. So he went off and dunked on them. If you didn’t see it live, watch the short video below, because it’s awesome. His speech, along with Kavanaugh’s passionate self-defense and the fact that no-one believed Blasey Ford, won the day. It caught the Democrats totally by surprise, and they never recovered from being called out so honestly from a direction they never expected.

Yeah, next week he’ll probably be praising an amnesty idea or something, just like Ralphie will probably dribble the ball off his foot the next time you pass it to him. But not this week. This week you high-five him, because he damn well deserves it. And next week, who knows, maybe he will surprise you again. There were lots of surprises from Republican leaders in this deal, standing tall in ways they didn’t used to. It’d be great to see that continue. They can start by subpoenaing the documents that Ford’s lawyers refused to submit, which she claimed would back up her story.


Aaaaand it looks like a Democratic Senator was involved in hiring the “cybersecurity” companies that produced the claims that a Trump email server was communicating with nefarious forces in Russia. Seems like I wrote about that last summer. Maybe not on this blog. That might have just been on Facebook, where it would be a pain to track down. Or maybe it was a podcast. Great organization, huh?

Anyway, I explained then why it was nonsense, and how they were mixing up the jargon to make it seem like something it wasn’t. But it appears that turned out to be one of the things they used as justification for moar surveillance on the Trump campaign. Once again we see familiar names like Soros and Fusion GPS. Man, wiretaps, dossiers, moles, Russians requesting bait-and-switch interviews – they were all over that campaign. And yet they couldn’t come up with any crimes or get anyone to bite on any shady offers. Can’t wait to find out which Senator it was. This month just keeps getting better. Let’s get some declassification going!

If Only You Knew

I picked up my first reading glasses the other day. I’m not used to having them yet, so I keep forgetting to grab them and catch myself squinting instead. The computer monitor is too far away for them, but I need them for anything closer, so that’s convenient. I tried peering over them at the screen, but that doesn’t work at all. At least I can read a book comfortably again. I don’t quite understand what happens when your close-up vision goes bad, but I’m glad there’s a $5 fix.


I used to do some tutoring, so I had kids showing up most mornings, and Guy would wait outside for them. I stopped that back in the spring, but I’ve noticed him sitting in the driveway watching the road again lately. He didn’t do that in the summer, so I guess either the season or the school buses going by triggered his memory. I think there are still three of them every day, between the two school districts that meet on this road.


For my daily bowl of green beans today, I was out of butter, so I used a little cream cheese. Not bad, actually. No substitute for butter, though. They’re still coming from the garden faster than I can eat them.


Good day in politics today, but it’s just another step. Still hoping for a couple more votes to hit my prediction of 53 for Kavanaugh tomorrow, but I’ll take 51. This whole month should be a fun ride. Behold a rare original meme to honor the occasion, sticking together a classic one with a brand new one.

Morning Rundown Oct. 5, 2018

Another morning rundown, to keep track of all this for future reference. Lots of little things going on, not sure which will become important when.

Yesterday’s DoJ press conference was about the arrest of nine Russian spies. Probably should be bigger news, but it can’t compete. More important was the news that they’ve identified a Clinton/DNC lawyer who was involved with the FBI/Fusion in the FISA wiretapping case. As I said yesterday, we’ve known the basic shape about that for a while, but now they’re filling in the details. When Sessions brings people to court for it, there won’t be any I’s left un-dotted.

Feinstein looked like she ate a bug coming out of Schumer’s office yesterday. Or like she found out she could be charged with witness and evidence tampering. Ford’s buddy McLean keeps getting more interesting. She was presented as just a “beach friend,” but it turns out she left the FBI during the Trump transition, where she worked for a man involved in the aforementioned FISA crimes, and her lawyer’s name comes up many times in the Strzok/Page communications. Every time you turn over a rock in the Swamp, these same people keep turning up. Why do you need a highly connected, very expensive lawyer anyway, when you’re supposedly just a friend of the accuser who came along to offer some support and a character reference? And now one of Ford’s friends says McLean pressured her to change her story about not remembering the party Ford said she was at.

Grassley’s not letting go of this. The polygraph was the closest thing Ford had to any evidence. But if they won’t turn over the polygraph documentation, it’s less than worthless. Polygraphs aren’t allowed as evidence in court for a reason: they’re far too easy to manipulate in both directions. But if you’re going to present one in another context, you have to at least include the recording and documentation that shows you did it right. Otherwise it’s just your word: “Oh, and I took a polygraph and it totally said I’m telling the truth. Trust me!”

They were so sure the Republicans would back down and let them turn this into another endless investigation like Mueller’s. Now it’s turned into an investigation of them, and they’re having trouble calling it off because their deranged followers are outside protesting and demanding more of it. The media is now reduced to gaslighting Republicans with silly claims like a Republican might not vote because he has a wedding to go to.

Expecting more fun along those lines today.

Morning Rundown Oct. 4, 2018

Yesterday was interesting, with Republicans continuing to signal that they’re sitting on a nut straight. The amount of spine in these guys all of a sudden is shocking. On the other side, Feinstein refuses to turn the polygraph documentation over to the Senate Judiciary, saying they will give it to the FBI if interviewed. But the FBI has no jurisdiction to subpoena it, and that would lead into more delays that are the Democrats’ whole goal in the first place. So that’s a desperate bit of tap dancing.

Today could be more interesting. There’s suddenly a DoJ press conference with Rosenstein this morning, and Sessions has been subpoenaed to deliver materials to Congress at noon. There are hints that the DNC/FBI/Fusion/FISA wiretapping collusion case that we’ve known the basic shape of for at least a year might finally be coming out officially. Names and people who faded from view back in January are suddenly popping back up in various places. It feels like we’re coming out of a 9-month stall, and the possible happenings from before are still on the table. I’m cautiously optimistic, because I don’t know the reason for the stall. But it feels like things are moving again. And if there was ever a time to spring a new angle of attack while the Swamp is distracted and disorganized, this is it.

Keeping a corner of an eye on today: Sessions, Comey, McLean (Ford’s FBI polygraph helper), Schumer. The Kavanaugh stuff is over except the Senate procedures which require a certain number of hours delay. Then the salt harvest. We’ll have enough salt to last forever (what’s that from?).

Assembly Language #04: Binary Division on the 6502

We walk through an assembly language routine to divide one 8-bit value by another on the 6502.

It was a little darker in there than I realized, so I hope it’s watchable, since I don’t want to do it all over. As usual, questions and comments are welcome. The next chapter will incorporate this routine into a larger bit of code.

Comfy in the Briar Patch

To add to yesterday’s article: it came out overnight that a couple of the people involved in Ford’s polygraph testimony are former FBI. The woman she coached on how to take a polygraph – which she lied and said she’s never done – left the FBI when Trump took office, after working close to some people involved in the illegal FISA warrant. Ford’s brother is also connected to Fusion GPS, the Russian-founded company that helped fake the warrants and tried to get informants inside the Trump campaign.

So in addition to the other motives I listed, it appears this may have been another “insurance policy” put together by corrupt elements at the FBI. With Strzok, McCabe, and other dominoes beginning to fall, they’re desperate to stop Trump and Sessions before all their corruption can be exposed.

Grassley has the scent (which he probably got before this started) and is demanding the polygraph documentation, and Feinstein is now stalling. The investigation changed direction yesterday, though the media isn’t admitting it yet. We should see more cracks in the narrative today.

Today’s rundown:

Peak Leftardism

I’d like to say we’ve reached peak leftist insanity, now that people are sending ricin to Republicans in the mail. But we haven’t. The leaders of the globalist left have pushed their followers to within an inch of their emotional limits, and there’s no handy off switch. If you follow many of them on social media or forums, you’ve seen them send public streams of profanity at politicians – sometimes politicians they liked in the past. You’ve seen them openly call for assassination, or for the rape of the president’s wife and children. Those are things that normal people with jobs and friends don’t allow themselves to do in public, but they pat each other on the back for them. They’ve been pushed past the point of reasonable self-control.

Even if their leaders could pull them back from the cliff, they won’t. Here’s how I see the situation, as I wrote it a few days ago, which hasn’t changed. The primary goal of Feinstein’s bunch was delay. Blocking Kavanaugh was secondary. See, Kavanaugh is actually fairly middle-of-the-road as a judge, conservative on some things, less so on others. The kind of choice about which Democrats would normally shrug and think, “Well, could have been worse, and maybe we can pull him left like we did O’Connor and Kennedy.” So it wasn’t about him.

It was about delaying the vote until the midterms, so they could use it to drive their base to the polls, which is normally hard for Democrats to do in the midterms. That’s why they waited until the confirmation to come forward with the letter Feinstein had in July. That’s why they lied to Dr. Ford and said she had to come to D.C., when the Committee had already offered to meet her in her home city. That’s why they had a few other “accusers” lined up to present later, instead of introducing them in time for the hearing. Everything they could do to stall the confirmation and drag out an investigation for about a month and a half until the midterms.

But it blew up in their faces. Ford’s story barely contained an accusation, and no claims for an investigation even to follow up on. Accuser #2 in the New Yorker fell apart before the ink was dry on the article, and accuser #3 admitted today that she didn’t see Kavanaugh do anything except stand near a punch bowl at a party. Plus she glows in the dark worse than Ford, and another letter dropped today explains why the Democrats never wanted her answering questions. And Republicans like Grassley and McConnell suddenly discovered they like fighting and winning and wouldn’t give them the open-ended witch-hunt investigation they wanted, so they’re still a month short.

Now they’ve made sure that every Republican who was thinking of sitting out the election because he’s kinda disappointed with the lack of Wall and Democrats in orange jumpsuits, will damn sure be voting next month. They turned their imagined blue wave into a red storm, so now they stand to lose the election and see Kavanaugh seated on the Court after they tried to destroy his life. So they’re desperate to claw back a victory on one of those, to either kill the nomination or stretch it. Stretching it looks impossible now, and since it’s clear that Trump and Kavanaugh aren’t backing down, the only way to kill it is to scare a few Senate Republicans into bailing on him. On top of all that, now they are being investigated for criminal activities in this, and the only way to stop that is to win it all.

So they’ve painted themselves into a corner where it seems like their only choice left is to double down, and that’s what they do best anyway. So the accusations will get more and more over-the-top and silly (he threw ice one time!), the threats will get more violent and widespread, and unfortunately, some deranged idiot is going to blow himself up trying to take a couple senators with him because the people he follows on TV and social media told him they were evil. Or maybe he’ll just go next door and kill his neighbors because they had a Trump sign in the yard two years ago.

That’s where we’re headed, if we’re not there already. I’d like to wrap this article up with the solution, but I don’t see one. These people have been indoctrinated and gas-lit for their entire lives. They’ve been told that their political side has all the answers and could make life great for everyone, so every setback they have is the fault of a “vast right-wing conspiracy.” When you think every bad thing comes from a shadowy group that you can’t see or locate, it’s easy to dehumanize that group and think that eliminating that group would solve everyone’s problems. That kind of belief can’t be undone overnight, especially not when mass media reinforces it by the hour.

The solution for individuals: cut the media cord. Don’t watch it, don’t follow it, don’t follow the people who make a living commentating on it. (No, I didn’t get any of the above directly from any of those sources.) As Raz0rfist said in a recent video, you don’t have to replace the mainstream media with some sort of alternative or right-wing media. Just cutting out the MSM for a while allows common sense to reassert itself and to process the reality around you without interference. Cutting out that mind infection makes a huge difference, but I’ll write more about that soon.

Oh, also: 53-47 for Kavanaugh.


October 2nd, a Day That Shall….Happen

I have a good feeling about today. Which probably means nothing will happen until tomorrow. But it feels like several different events in motion are coming to a point at the same time. It feels like happenings which seemed imminent in January and then stalled are now back in the mix. LARPs that don’t quite feel like LARPs. Deadlines for seemingly disconnected events that are lining up on the same short stretch of days. Republicans acting like wolves and media acting mildly objective in odd ways. Now the chans under attack. Something’s happening.

Still Got It

It feels good when you’re pushing 50 and you’re hefting boars up for the knife and a healthy 16-year-old boy has to run the chalk marker because he can’t handle your job. Although I have to admit my shoulders were sore the next day. And the day after that. But it felt good at the time.


Sun tea is a scam, right? I mean, it works. If you put tea bags in water and sit it in the sun, it makes tea. I like doing it in the summer rather than heating up the kitchen with boiling water. But it’ll do that if you don’t put it in the sun, just more slowly. By “scam” I mean the idea that making it in the sun makes it better somehow. As far as I know, making tea means getting particles from the tea leaves to dissolve in water, and dissolving happens faster if the water is hotter. I don’t think the sun actually adds anything except temperature. Unless you’re using different tea leaves, it’s the same thing.

Or maybe I just don’t have sensitive enough taste buds to pick up the sun flavor. I just drink a lot of plain tea and want the simplest way to make it.


I’m going to go on record here: Kavanaugh will be confirmed, most likely this week, and the smear campaign against him will be fully exposed. Feinstein should and may be perp-walked for illegal and unethical activities, though that may take time to develop. I’ll write more about this farce soon, but I wanted to put that down now so I can explain why I did later.

A Letter from Onions-1

I had to screencap that because it made me laugh. The context was a discussion of a potential urban-versus-rural civil war, and the left-wing fantasy that they will use the military and police to quickly dominate the rural areas, confiscate all the guns, and lock up or shoot the hicks. Yes, they really believe this. They speculate about it constantly; you just won’t see it in the mainstream media.

I’m not going to go into all the reasons that’s stupid here. But one point that always comes up is food. They know the cities only have enough food to last a few days, and they know there’s food out there in the rural areas, so they assume the city hordes will eat as they go. They see food like a resource in a computer game, little crates all labeled “FOOD” on the side, that they can just pick up along the way. No problem.

Except that’s not true. Oh sure, there’s loads of food here. But it’s mostly not food yet. Where I sit, I can see about 100 acres of field corn. That’s at least a million pounds of corn. But it’s not edible. Not really. First you have to shell the kernels off the ears. It’s kinda fun to shell a few ears by hand. By the end of the day, trying to shell enough to feed your horde, your hands will be bleeding. Then you have to get it into an edible form. It doesn’t just turn into tortillas. Gotta grind it, or soak it and mash it. Then you’ll have food, sort of, and while you’re doing this, you’re not sweeping across the land taking down your enemies.

And that corn isn’t always there. In fact, they started combining yesterday, so in a couple days it will be gone. Until next summer, those fields will be as empty of food as any urban grocery store after a week-long riot.

Now, there is some edible food in my garden. Not enough to feed a horde, but maybe the horde’s scouts. Assuming I don’t stop them, a few people could eat for a few days on that. But again, that’s only true for about half the year. There’s also food in storage, canned and frozen, and the chickens, but then that takes us back to their fantasy that the U.S. military will storm homes and disarm Americans and hand over the food to people who could neither grow it themselves nor take it by force themselves. It also assumes that they can do things like wipe out all resistance in an area without killing the electrical power that keeps frozen food good. Again, little crates marked FOOD, dotting the landscape.


Well, that was exciting today. I won’t write about it right now; maybe after he’s confirmed. Got a laugh from this, though. I saved it two days ago, so pretty good prediction by someone.

Pol Is Always Right Again

Guy didn’t eat anything for the first week after his accident, except a few bits of chicken I gave him with pills. Then the second week he seemed to eat pretty much normal. Now he’s eating like a horse, and drinking water like one too, so I’m filling his bowl a couple times a day instead of a couple times a week. I guess that means he’s all healed up and putting weight back on. He did get kind of bony there for a few days.

I’ve been lucky in that both of my dogs have regulated their own weight so I didn’t have to. Guy is still young, so maybe he’ll get fat when he gets older, but I doubt it. I think he’s the wrong mix of breeds for that. I hear about people having to ration out food for their dogs, which sounds like a pain. I just fill the food dish when I see it’s empty, and let them self-feed. Seems to work.


The bad thing about eating green beans 1-2 meals a day is they really don’t have many calories. I had a big bowl of them (about 1.25 pounds) with butter, and was hungry within a couple hours. I went to check the database, and that was only 360 calories: about 260 for the beans and 100 for the butter. It’s fine as far as carbs go, but I’d have to eat them about 6 times a day to keep from starving. It’s great to eat whatever is piling up from the garden, but that’s not really practical.

“Vegetarian” is really a misnomer when you think about it. They should be called no-meat-ians. If I eat two pieces of bacon and four pounds of vegetables today, I won’t be a vegetarian. But someone who has a bagel for breakfast, pasta salad for lunch, and a tofu pizza for supper can call himself one. Kinda silly, but I guess it’s a marketing term, not a scientific one.


Interesting day today on the interwebs. So there’s this Creepy Porn Lawyer (may that be his title from this day henceforth) who claims to have a client or clients who were sexually assaulted by Supreme Court appointee Kavanaugh. However, he’s been stalling about having them come forward, offering one excuse after another, and there have been no sworn statements, just his word about things. The obvious goal is to delay the nomination until after the midterm elections so the Democrats can use the struggle over that seat to bring out their base.

Senator Grassley, who has more steel in his spine than most Republicans despite being an Iowa gentleman and about 100 years old, invited the accuser to testify and even brought in a woman prosecutor who handles sexual assault cases. In other words, she would be questioned by a woman who is normally on the side of women like her, not by a bunch of mean old men.

That took away all of CPL’s excuses for delay, and the deadline is Thursday, so he’s been ramping up the outrageousness of his claims instead, tweeting some real whoppers. It seems CPL fancies himself as a presidential candidate in 2020 for some reason. It seems many Democrats actually think that makes sense, for reasons I can’t fathom. A bunch of them even attacked transgender activist and computer programmer Brianna Wu on Twitter today for daring to mildly criticize CPL’s tactics. It was a shocking hate crime, really.

Now /pol/ are claiming that they made up and fed CPL the third client he’s claiming to have, plus some of the more bizarre bits of evidence he’s been tweeting about. I don’t know if that’s true, but it is just the kind of stuff they would make up, and it wouldn’t be the first time. At this point the more mainstream Democrats are trying to distance themselves from him, so the media is jumping on the idea. When his bluff collapses around him, they’d rather hang it all on him being suckered by a bunch of nerds on a Mongolian basket-weaving forum than admit they all got taken by a shyster they’ve been calling a potential presidential candidate. Under pressure from his media allies and trolls having fun with him, CPL locked his Twitter account. That’s called running scared.

My take: CPL thought if he made a scandalous enough accusation, enough Republican senators would fold, and Kavanaugh would do the “honorable” thing by asking for his nomination to be withdrawn. Trump would have to start over, nothing could be done before the midterms, and CPL would be a hero to the Left. Maybe he would have jumped into a possible 2020 nomination (except it’s still #HerTurn). Big bluff, but he got called. Thursday should tell the tale one way or the other.

Test Results and More

I’ve only been streaming for a few days, but some results are in. On the days I streamed a couple hours, I used 5GB/day. About 1GB or so of that was probably other traffic. Maybe more, since I’ve been doing some IPFS stuff and other moving data around. But the numbers show that the bulk of it was streaming.

So if it takes 2GB/hour, I definitely can’t do it a couple hours every night and stay under my 50GB/month limit. I could get away with an hour, though. Or, if I do an online class, I could do a live classroom for a couple hours twice a week. Something like that should be doable. Some more testing is in order, but no more two-hour sessions for this month, or I’ll cross my limit with a week of month left.


Vox takes another whack at the evolutionary pseudoscience pinata today. I was initially skeptical of evolution because it was pushed by the same people who pushed a lot of other nonsense through the schools: that men and women are the same, that socialism is the best, that we shouldn’t eat animals, that we should switch to the metric system.

Then a couple years ago I went through a biology course. The shift in presentation when I got to the evolution section was striking. Up to that point, everything had been presented clearly and logically, fact A building on fact B and leading to conclusion C. On evolution, that was replaced with handwaving and appeals to authority. The book made very confident claims about how the evidence for evolution is overwhelming – so overwhelming, apparently, that they couldn’t decide which bits to choose to put in the book.

On the other hand, the sections on the structure of a single living cell and all its moving parts, and the function of DNA and how much goes into the production of a single protein molecule that’s needed for some function of the body, just made me laugh that anyone could study this and think it just happened. It’s easy for them to wave their hands at schoolchildren and say, “And then a mutation produced feathers,” as if one little change could do that. But at the genetic and cellular level, so many changes would have to happen simultaneously in support of each other to make that happen that the idea is laughable.


I was playing Sentinel the other day. It’s an old C64 game that I could swear I’ve done a video on before, but now I can’t find it. Guess I’ll put that on my todo list. It occurred to me that I should put my list of level keys online, since it’s up to about 450 of the 10,000 total levels, and I couldn’t find a list online that has more than a few dozen. So here’s my list of Sentinel level codes, now linked for posterity.


Hearing the sports news this morning, it occurred to me that the NFL has gone past parity and reached randomness (“We’ve gone to plaid!”). People often praise “parity” in the NFL, meaning that any team can “get good” and compete fairly quickly with some smart/lucky draft picks and signings, good coaching, and hard work. But this isn’t that. This is randomness, where a team that does everything right can get pounded by a team that does everything wrong, and there’s no rhyme or reason to it. I don’t think that’s what sports fans want. Maybe it’s what non-sports fans want, because it’s cheap, reality-TV-style drama.

But it’s not sports drama. Pick any sports movie, and there’s a progression to it. Usually it starts with a benchwarmer or a plucky team of losers, and through a lot of hard work and overcoming setbacks, they make it to the top and achieve greatness. They don’t just screw around, lose games they should win, back into the playoffs because other teams screwed up, and then win the championship on other teams’ mistakes. (Unless Rian Johnson made a sports movie that I don’t know about.) If my team sucks, I want to root for them to get better and win. I don’t really want to root for them to get lucky in inexplicable ways.


Back in 2016, CNN decided it didn’t like the way people were increasingly turning to word-of-mouth and alternative news sites for their news. So they came up with their “Fake News” campaign, where they would run ads showing people getting bad info from sketchy sources, and recommend that everyone stick with brand-name, major-network, establishment-approved news.

Some people on the Internet quickly said, “Oh, really, you are calling out Fake News? That is rich.” The memes began to flow and CNN’s Fake News was called out every time they lied, which was most of the time. At some point Donald Trump picked up on it and started using it during the campaign, and there was much rejoicing.

Sometime last year I said CNN was dead. Unfortunately, like the guy on the cart in Holy Grail, it’s not completely dead yet. It’s dying, but still gasping and flailing about like a chicken with its throat only half-cut. But the end is coming, and there will be more rejoicing.

September 21, 2018, Garden Update

I’m just harvesting at this point, not trying to keep weeds pulled anymore. It’s too late in the season for that. As soon as the crops are done, I’ll mow the rest off and leave it as cover for winter. I’d like to bring in about a foot of mulch to cover all the plots with, but don’t know if I’ll get that done.

So right now I’m just trying to stay ahead of picking what’s ripe, especially snap beans, also beets, Swiss chard, carrots, broccoli, and dry beans. I’ve remembered to log most harvests in my garden journal, but not quite everything. I’ll post that at the end of the year, and see what it adds up to.

Ready for Fall

Cripes, 93 degrees. No wonder it seemed hot today. It was. Be glad when it breaks for good and fall is here.


It turns out you can cut beets into pieces small enough to fit in a steamer and cook them that way. It also turns out you really shouldn’t, though, because they still lose a lot of juice and flavor. Oh well. The other option for cooking that big thing was the roaster, which seemed like overkill. It was still good with butter, and a chance of pace from green beans for a day.


My streaming experiments continue. The results are still kind of blurry, so I’m still trying to find the best settings. It might be okay for most games, but if I’m going to use it for teaching programming or Latin, people need to be able to read the text.


This is just a nice song and video. It’s not a rare find or anything, but the funny thing is I found it through the band A Great Big World, because several years ago a friend recommended an Irish band called Great Big Sea. I think the similarity in names caused this one to pop up for me, and I didn’t realize it was someone else at first. The Pentatonix cover might even be better.

Memory Hole

Huh. I just noticed yesterday that my video on the 6502 assembly instruction set has nearly 1000 views, more than 4 times as many as any other video I’ve made, even though it’s one of the newer ones. Someone must have linked to it from somewhere a lot more popular than my own site. Cool! I guess that means I should get on with more in that series.


The beets didn’t come up very well this year because the seed was old, but the ones that germinated did well, and this one went crazy. Now I just have to figure out what to cook it in. By the way, the variety is Cylindra. They have more of a carrot shape than the usual round beet shape, which makes them easier to work with.


Something weird I’ve noticed about online typos is that people always type the longer thing when they make mistakes, especially adding apostrophes instead of leaving them out.

what they mean what they type
led lead
its it’s
their they’re
were where

Seems like if they’re guessing, simple laziness would produce the mistake with the least typing, but it goes the other way. Weird.


Memory is a strange thing. Back in the mid-2000s, what seems like a lifetime ago, I went to a rock concert out at the racetrack. Yes, really. For the last few years, I’ve been unable to remember the name of the band. Every once in a while, something would remind me of it, and the band’s name would be on the tip of my tongue, but not quite there. Usually when that happens, it’ll come to me later, but not in this case. So it’s been aggravating me sporadically for a while, like a tiny mental gnat. I was sure the name was one six-letter word, maybe as many as eight letters, starting with N or H. Not Hanson or Nelson, but still couldn’t think of it with all those clues.

The other day I remembered that I couldn’t remember, so I set out to find the name. Started searching lists of band names starting with N, and then H. I went through a few lists, but finally found it: Hinder.

The Internet being what it is, I soon reacquainted myself with their work and what they’ve been up to, pulling most of it from Youtube. They were kind of a standard rock band of the time, post-hair-band, pre-hipster. Some success, but probably not A-list. Seems like a lot of their music was about doing drugs, so that probably didn’t help on the radio. They must have played in Quincy right before their 2005 album went platinum. And I was there, but I didn’t get the t-shirt.

I'll Try Streaming, That's a Good Trick

(Title shamelessly stolen from MauLer, a British guy who reviews games and movies.)

I’d like to try using Twitch for some live online classes, but I thought before I dive into anything real, I should test it for a while first. So I’m going to be streaming games when I get a chance, starting with bridge. I figure I need to do a dozen or so sessions, and then I can analyze how much of my precious bandwidth it uses, how reliable it is over my connection, and things like that. Then if it looks viable, I’ll see about starting some classes.

Here’s my channel. I don’t have a schedule or anything yet, but if you use Twitch and you’re interested, I think you can follow me and it’ll alert you when I start. It’ll probably be in the evening, though I could try it on a lunch break. Their interface is pretty dense, so I haven’t figured it all out yet. We’ll see how it goes. My first session of playing bridge is below, and it looks like the resolution at 480p was too low, so I’m going to try the next one at 720p. There are several settings to tinker with, so it may take a few tries to find the best ones.

I did a very short intro to the game in the first video, and I guess I’ll keep explaining my bids as I play, unless I think of something more interesting to talk about.

Take My Files….Please

With a distributed file system like IPFS, you don’t upload your files to the network; you put them on your node and let others download them. So what if your files are useless to anyone but yourself? How can you make them valuable to others, so they will spread across the network and be reliably available out there?

I demonstrate here one method that’s kinda silly, but might be a useful thought experiment toward more practical ideas. Also steganography, which is just cool.

Office Linebacker

Looks like I won’t be watching football again this year. I’m not protesting the protesters exactly, at least not primarily. I’ve just been watching less in recent years as it became more and more obvious that the NFL doesn’t want me as a viewer, and I keep finding better things to do on a Sunday afternoon. The anthem thing is just a part of that, which I’ll write more on another time.

The bigger problem is the way they’ve been changing the game to appeal more to people who don’t actually like football, but who like big, obvious plays so they can cheer with their friends and check their fantasy team on their phone. The NFL has drawn in an audience that doesn’t want to see a team grind out a 17-play drive four yards at a time, because that’s boring and they don’t understand what those guys in the middle pushing on each other are doing anyway. They’ve introduced replay refereeing, which turns it into a reality show where the drama isn’t in the play on the field, but in the wait afterwards to see how someone in New York rules on it. And now they’ve added a “squishing the quarterback” penalty, so flags hanging from the QB’s belt can’t be far off. It’s a mess, and they won’t even admit there’s a problem with the ratings dropping, let alone do anything to fix it.

Anyway, though I won’t be watching, I do still kinda miss the game. Maybe I should catch a couple local college or high school games. Hmm, QU games are $9/seat for the nosebleed section, which means about 12 rows up. No bad seats in a D2 stadium, and I’ll bet beer is less than $10 a cup. In the meantime, something reminded me of the old Terry Tate Office Linebacker spots, so I watched some of those. They’re still as funny, maybe funnier, now that all these hits would be flagged for unnecessary roughness and then flagged again for taunting.

Plug for Country View Veterinary Service

I want to give a plug to Country View Veterinary Service in Barry and Payson in Illinois. Short version: they were very nice with Guy, and the price was right, so I highly recommend them. If you’re in Quincy, Payson is only 15 minutes away, so it’s worth the short drive. Now the long version.

When I decided to take Guy to the vet to make sure he was okay, I wasn’t sure where to go. The last time I needed a vet was when Pepper had to be put down. I’m not going to say where I went, because they were nice people and handled it very well. But I almost lost my cool when they handed me the bill. I know they have to make a living like everyone else, but $130 for a 10 minute exam and explaining to me what I already know but didn’t want to hear, plus a shot, seemed extreme. That’s enough that some people would have to question whether to pay it or let their animal suffer longer, which is unfortunate.

So I did a little phone probing and got the strong feeling they would want to go straight to x-rays, which would easily push the visit up over $200 and more. Too much for just a second opinion and some reassurance. Then I thought of Lohnes’s in Barry, which it turns out is now called Country View. My folks have used them for years for livestock work. I called and found out an exam would be $30, half the price of the place in Quincy, and they were less inclined to x-rays. It’s a 45-minute drive, but I figured it would be worth it. They he mentioned that they had a place in Payson, less than 10 minutes from my place. Sold!

I took Guy over there, and Dr. Brittany Meyer checked him out and made sure all his parts were still in the right place. The exam plus painkillers plus a flea pill (the retail stuff for fleas is worthless, but that’s another article) cost as much as the exam alone would have in Quincy. In fact, he’s due for another painkiller now, so I’d better go take care of that. He’s definitely feeling better, but he’s still traumatized. He barely wants to go outside, and he sits leaning against me as much as possible. Guess he won’t be running out into the road again for a while, so there’s that.

Better News on Guy

Well, it looks like Guy’s going to make it. The nice lady vet says he doesn’t seem to have any major breaks or spinal injury, so he’s probably just really sore. Of course, he let her probe and pull at him without any of the whining or growling he was giving me. Now he’s relaxing under the influence of painkillers. I should probably relax with some potato-based liquid painkiller myself.

Nursing a Hurt Dog

Blogging might be light this week. Guy got hit on the road Saturday, so I’m nursing him. At least I think that must be what happened. I saw him go across the road, and then a couple minutes later he showed up limping with scratches on a few extremities. He doesn’t seem to have anything broken, but he’s clearly in some pain, so I think he got bounced around. I think he’s just spooked, too, because he hasn’t drank any water since, but I just got him to drink some chicken broth. So it’s not that he can’t drink, and he ate some meat.

Dogs are funny, because even when they’re hurt, they stick to their habits. Guy still jumped up into his usual bed, even though he could barely get there and it clearly hurts to jump down if I don’t notice and help him down first. On the other hand, their instincts take better care of them than we probably can, so I’m trying not to force-feed him or anything.

Someone Else's Computer

A conversation at Vox’s about trusting the cloud today reminded me I’ve been wanting to write about that. “The Cloud” is mainly a marketing term that’s been misused in some confusing ways, so let’s define some terms.

Up until a decade or so ago, if you wanted to have a computer at some remote location – usually to provide it with a high-speed, redundant Internet connection – you had a couple of choices. You could do a “colocated” server, where you own the computer yourself, and pay a company to provide electricity and a high-quality Internet connection to it. Or you could get a “dedicated” server, where you lease the computer from the company along with the network access. The main difference is that with colocation, you’re responsible for replacing any failed hardware yourself, but your monthly cost is much lower. But in both cases, the computer you’re using is a specific one, like machine #3 in rack #15 in room D12.

Then computers with multiple processors became cheaper and virtualization became a thing, and companies started selling virtual private servers (VPS). In this case, you’re renting a subset of the resources on one computer instead of the whole thing. A server with 8 CPUs might be divided up into four 2-CPU VPSs for four different customers, for instance. Each VPS only sees the resources that were assigned to it. So if you buy a 2-CPU VPS, you can’t see what else is on the physical machine. You just see what your VPS has been given, as if it was on a physical machine with those limits.

Companies that were selling a lot of VPSs gradually developed tools that made it easy to spin these virtual servers up quickly, or knock them down on one machine and spin them back up on another within seconds. They called this a “cloud” because of the idea that you didn’t see them as individual machines anymore, but as a pool of resources to draw on. Any particular VPS could be on any particular physical machine, and it wouldn’t matter. Since servers could be moved around the cloud with so little effort, it would be easy to do upgrades and handle hardware failures with little disruption.

Another advantage is that, since you can spin servers up and down so quickly and they’re normally charged by the hour, you don’t have to keep a whole room of computers running if you only need to do heavy computation once in a while. If there’s some huge monthly task that needs a hundred servers to get done in less than a day, you can spin them up, run it, and knock them down when they’re done, only paying for the day.

So that’s what the cloud is. The first thing to note from that is that there isn’t one “The Cloud” the way it sounds in commercials. Microsoft has a cloud, so does Amazon, so does Google, so does Apple, and so do lots of other companies. Some companies rent out servers in their cloud; others only use it to offer other services. For instance, my LG phone will do automated backups. Those probably go to a cloud, but whether LG has its own cloud or rents cloud storage from someone like Amazon, I have no idea.

Device and app makers like to put your files “in the cloud.” That allows them to make your device seem like it has more space than it does, because your files are actually somewhere else except when you’re using them. It also has the advantage that if you drop your device in a lake, your files aren’t lost.

However, that means those pictures and videos you think you have on your phone aren’t necessarily really there. They may be stored in the cloud, and only pulled down when you need them. You’re completely dependent on the cloud provider and their software not to lose your files in the meantime. And odds are, if they do, you have no recourse except complaining to someone who barely speaks English. So trusting your files to long-term cloud storage may not be the best idea.

One option is to have your own cloud server at home. The funny thing is, this isn’t a “cloud” at all, since there’s no pool of resources. It’s one computer, working only for you. But it will have cloud-type services running on it, so it will let your mobile apps treat it like a cloud server, allowing you to take advantage of those features without trusting someone else to keep them safe. They’ve been called “personal cloud servers” for that reason.

You can even use both: keep everything backed up to your own personal server in your home or office, and also back files up to cloud storage somewhere. That way you still have remote storage in case your house burns down, but you aren’t counting on the cloud as your only storage for anything.

Storage is so cheap at this point that there’s really no reason to skimp on it. My own workstation has three hard drives mirrored, so two of the three could fail at once and I still wouldn’t lose anything. And I do remote backups to another server in case of a catastrophic loss like fire. I lost files in The Great RAID Disaster Of 2002; that’s not going to happen again.

Sacrificing Everything?

So Nike hired Colin Kaepernick to head up their new ad campaign, featuring his face under the slogan “Believe in something. Even if it means sacrificing everything.” Oooookay, let’s unpack that a little.

Some on sports radio are debating whether this will sell more products for Nike, whether the gain in woke Kaepernick fans will outdo the loss to anthem supporters. It won’t, because SJWs mostly don’t play sports. But that’s not what this is about for Nike anyway, not directly.

Nike is a global corporation, not an American one. Their profits are highly dependent on cheap foreign labor and free trade policies. President Trump’s America First-style trade policies threaten that. So this is a way to take a swipe at him with the midterm elections coming up, in hopes of keeping him from getting votes he needs.

That makes sense, considering their business model. Still, it’s hard to believe they were tone-deaf enough to pick that slogan, considering that the whole Kaepernick/anthem controversy comes from the fact that millions of Americans think his kneeling was disrespectful to veterans who literally did sacrifice everything. As it turns out, Kaepernick sacrificed a chance to be a backup QB in the NFL making something not far from the league minimum, in exchange for a paying job with Nike that doesn’t require him to get tackled on Sundays. That doesn’t quite compare to a soldier sacrificing his legs or his life, does it.

Nike’s going to get hammered for that own-goal. Someone there really should have seen that coming. The president did. The cordial tone of his tweeted response showed he knows they set themselves up. But TDS is a terrible affliction; it makes even well-paid corporate shills do stupid things.


Looks like Joe Bob Briggs is coming back, on something called Shudder. He’s going to do a couple of specials around Thanksgiving and Christmas, and then have a regular show next year. If you watched bad/old movies in the 90s, you might remember Joe Bob from Monstervision or Joe Bob’s Drive-in Theater. He would introduce movies and share trivia about them during the commercial breaks. Someone put together a collection of clips from his shows that’s up to 321 videos at this point. Here’s one of the few that doesn’t look like you’re watching it through an aquarium. The audio/video quality on shows people taped back then tends to be pretty awful.

Maybe Try Something Else

A few telemarketers have found a way to spoof their phone number as if they’re calling from your own local exchange. I get a call that starts with 217-617, so it looks like it could be from a neighbor or something, but it’s not. I don’t know how they do that – or why they aren’t all doing it – but it makes spam blockers like Mr. Number worthless, since the number usually belongs to an ordinary person in the area. So we’re back to letting calls go to voice mail, at least local calls in the same exchange. Aggravating.


Someone posted this in r/c_programming today, looking for help with his studies:

Hi. I’ve been studying hard on loops lately and I really don’t get it. […] I dont get the logic behind it and how it should work and the difference between the 3 (well I have read the definitions of each loop but I still dont get it! I suck at really comprehending logic like these.)

My best answer (which I didn’t post because it would get downvoted there for being “mean”) would have been, “Why the hell are you studying to be a programmer if you’re terrible at logic?” That’s like studying to be an interior decorator if you’re color blind. Computers are logic machines, and a lower-level language like C doesn’t even attempt to hide that.

I suspect many non-programmers can get the gist of something like this without training:

FOR I IN 1 TO 10
  PRINT I
NEXT I

I think many people could guess that prints the numbers 1-10, looping through values for I. I wrote that in BASIC because it’s more English-like than C’s syntax, but the logic is the logic. If that’s still not clear after having it explained in class and reviewing it multiple times in the textbook, then programming probably isn’t your bag. I would say to this questioner: No offense, but we already have enough bad programmers asking for homework help because they’re being pushed through four-week “college” courses before being unleashed on unsuspecting clients. Do yourself a favor and find a different field.

But I would say it more nicely to a real student.


Too bad the sound quality isn’t better on this one, but it’s always cool when people find ways to get more out of an instrument than it was designed for. Makes me feel like when I couldn’t find the trowel, so I used a big screwdriver to dig carrots. It’s like that.

Sincerity

I didn’t decide in advance whether to blog over the weekends or not. Turns out the answer was no. Too much to do, and it’s good to get away from the keyboard. Anyway, I realized titling these things the same with the date every day was stupid since they’re already dated, so I’m going to start titling them with the main topic(s).


I’ve been reading and thinking lately about sincerity, or the lack of it in this era. That’s the best word I’ve found for it, anyway. It’s like we’re all allergic to anything that’s expressed sincerely. You see it in modern movies, where every dramatic scene has to be undercut with a joke of some sort. Nothing can be too serious for too long.

Compare to an 80s action movie like Predator. It’s completely cheesy and unrealistic, and yet it’s completely sincere. The movie never winks at you and says, “Ha, isn’t this cheesy? Don’t take it seriously.” Within the universe of the movie, and on the level of communication between the movie and the viewer, it plays it completely straight. Even an outright parody like Spaceballs is sincere. It’s nothing but jokes and references, but it’s sincerely trying to be funny. It never winks at you and says, “Don’t worry, we know some of these jokes aren’t funny.”

It goes beyond entertainment. The other day, Vox posted a prediction about something that went pretty far out on a limb. Some of his readers said he was embarrassing himself, and his answer was, “So?” Good answer. We’ve become way too concerned about how we look, especially about not looking stupid or foolish. So everything gets wrapped in Daily Show-style snark, as if to say, “Whatever I’m saying right now, I’m not that serious about it.” The only sincerity that’s allowed is sincere hate (as long as it’s politically correct). Sincere love, sincere patriotism, sincere faith, sincere admiration, sincere heroism, sincere friendship – those we cringe away from, and wrap in irony to make sure we don’t look lame.

I’m probably as bad as anyone about it, but it’s gotten tiresome, having everything that matters wrapped in self-aware mockery – the more it matters, the more mockery. If it’s generational, it looks like a trait of Gen X, my generation. We tend to be pretty cynical, so maybe that is part of it. Maybe it’s an overreaction to the way Boomers treated everything like Serious Business, as if even listening to the right music and wearing the right T-shirt slogan was going to change the world. It might afflict Millennials too, though. I’m not sure about that. It seems to have grown since a decade or so ago, but I don’t know whether it was a response to anything in particular. Whatever the reason, it sucks, and it’s time to cut it out.

More to come on this, I’m sure.

Daily Musings of August 29, 2018

I want to do a plug for Selby Implement in Quincy, specifically their parts department. The first thing I bought from them was a kitchen stove about 20 years ago, when they still carried appliances along with their main lines of farm machinery and power equipment. I called the other day to get a carburetor for my new-to-me lawnmower, and the guy said their supplier had it marked as discontinued. So I started looking around online to see if I could find it still in stock somewhere, or a used one. I found a couple that were probably right based on the numbers, but they didn’t have a picture to compare. While I was searching, my phone rang, and it was the parts guy. Good thing for caller ID. He’d looked around in their inventory and found one he thought matched, so I took mine in to compare, and it did. I’ve always been happy with their service, but I really appreciated his going the extra mile like that.


https://www.reddit.com/r/RedLetterMedia/comments/9aypsr/the_last_jedi_plinkett_review/?limit=500

(That reddit thread has a no-politics rule, so I can’t post this there, even though you can’t really talk about what’s wrong with the new Star Wars movies without getting into the politics.)

It’s fun to watch fans argue that there isn’t politics in the Disney Star Wars movies. Come on. The creators aren’t shy about their political views or how they see their movies as vehicles for social education. One writer talked about how the Empire represents “white supremacists” (because Stormtroopers wear white, I guess). Kathleen Kennedy had freaking t-shirts made to declare one of her political goals for the series. Politics is all through the films. You can agree or disagree with it. You can say it can be ignored and doesn’t spoil the movies. But saying it’s not in there just makes you look disingenuous or ignorant.

Of course, movies have always had political messages inserted into them, usually of the left-wing variety since that’s how Hollywood rolls. They used to be more subtle, though. A team of writers in 1975 might have come up with the idea of a horny SJW robot, had a laugh about it, and then said, “Okay, back to work,” and slipped a little of those concepts into a scene somewhere. In 2018, they just do it.


I hate cell phones. I was talking to a client the other day and we got cut off three times in about 15 minutes. No idea which end was the problem. This client also likes using the speaker phone, so that adds another layer of audio cutting out and talking over each other. So pleasant.

So I went looking to see what it would cost to get an old-fashioned landline with a phone stuck on the wall. It took some digging to find, because AT&T had nothing about landlines on their home page or the services page that came up for my zip code. I had to do a search that jumped me into a section of their site that wasn’t linked from the main menu. Anyway, $20/month for the stripped-down, no long distance, no frills, possible extra fees for “local toll calls” landline. Probably closer to $30 by the time you add taxes and various fees.

Ouch. I get it: the cost of maintaining copper in the ground hasn’t gone down just because other communications technology has improved, so there’s no reason for landline service to have gotten cheaper over the past 20 years. That’s a lot to pay for a second phone I only use for incoming client calls, though. Too bad.


Watch this and guess what part of the country these guys are from, then scroll down below the video to see the answer.

It was a trick question. They’re from Finland.

Daily Musings of August 31, 2018

I like this new blogging method so far. It’s working so well that I’m now writing this from yesterday, to give me an idea for tomorrow (er…). Slapping down thoughts 100-200 words at a time works better for me than long-form articles or short tweet-style grunts. I don’t know whether the results are any good, but at least it got me writing. I’ll worry about quality later.


Good grief. I was just updating the St. Rose calendar, which I do by taking the same entries from last year and editing them for this year. And I see one says “First Firday.” The feast of pine trees? Guess I wasn’t using a spellchecker on that one.


Some nerds on reddit were talking about why Disney Star Wars went back to the same old Rebels-versus-Empire idea of the original trilogy, without even giving a decent explanation why. The reason is pretty simple. The people who now run Disney and Lucasfilm still think of themselves as the counter-culture. They’re Boomers, so that’s part of their generational identity. It’s always 1968, and they’re always fighting against The Man, with no self-awareness that they are The Man now.

Someone suggested that they should have had the New Republic turn lazy and corrupt over the 30-some years between movies, and then the heroes could have been some rebels within that banding together with elements of the old Empire to revolt against it. While that’s a great idea, think about how it would look from the creators’ perspective.

The heroes in which they see themselves won the day in the original series, but then they became so corrupt that other heroes rose up to fight and defeat them, including some of the enemies they thought they’d wiped out the first time. Now look at them in real life: they rebelled and won in the 60s/70s, taking over major corporations like Disney as well as academia and much of government, then they became lazy and corrupt, and 30-odd years later heroes rose up to overthrow them…. Who are the heroes in this scenario, and who is their leader?

Yeah, that’s not a movie they would make. It’s not a movie they could even think of.


Someday soon I’m going to start a series of reviews of Farscape, the best TV show ever made. It starts out with a guy going into orbit to do nerdy science stuff, and 88 episodes later we’re getting scenes like this one. It’s a show made of puppets and leather and bodily fluids that turns into an exploration of the human mind and the nature of reality (and unreality). But now I’m getting into it, so I’ll save the rest for the reviews. Just have to get the DVDs first.

IPFS key for this video: QmV21rwU3Ldy6BKKYfKxT5YWgDopPZibrdbpQVSaWaH63M

Daily Musings of August 30, 2018

I started using Quora a while back when it notified me that a couple of friends had started following me on there. I’d created an account years ago, but hadn’t used it. The idea was that it would be good for getting freelance business. If you’re not familiar with Quora, it’s a site where people ask questions and anyone can answer them, and then answers are voted up or down. You’re allowed (encouraged) to advertise yourself through it, so it’s a chance to show off your expertise.

That’s the theory, anyway. Now that I installed the app and get a notification about some questions in my fields every day, I’ve noticed something odd. Many of the questions don’t really feel like honest questions. They feel like leading questions designed to promote something. A lot of them are like, “Why do so many system administrators prefer Linux over BSD?” Or, “Why is Microsoft Outlook the best email program?” Even in cases where the products named aren’t for sale, so there isn’t an obvious profit motive, it feels like someone’s selling something. Maybe people who want to answer those questions to sell their own services are posting them with a sockpuppet. I dunno.

So I haven’t really gotten into it, and now I’m not looking for freelance work. I wouldn’t mind answering real questions, but it’s hard to find them among the fluff. Also, the app sucks. Apps suck in general, but this one sucks worse than most. So it’s not something I’m likely to do while I’m having a beer under the shade tree in the evening. I’ll keep half an eye on its notifications, though, and answer the occasional interesting one that comes through.


I might be writing some stuff about Star Wars, Star Trek, and movies in general for a while. I’m not a super-fan or anything, but they are a part of our culture, some of the stories we use to talk about and understand ourselves. That idea gets derided, but there’s nothing wrong with it. Shakespeare and Homer were the popular culture of their day, but we call them classics because they’re old and have stood the test of time. We don’t know yet how much of our entertainment will stand that test (I think we can make some good guesses, and I will), but we do know how influential it is now. These stories, being made as they are by corporations with global aspirations, have ideological aspects that matter. So I’ll be diving into some aspects of that as they come to me here, and maybe assemble them into something longer and more coherent later. Case in point, next:


Someone at reddit was comparing Boba Fett and Captain Phasma, saying basically that Captain Phasma is just another Boba Fett – a character that does nothing except look cool – implying that you can’t blast her if you liked him.

I’m old enough that some of my grade school classmates had the OT action figures. One kid had shelves of them (and black lights in his room! Very cool), so I’m sure he had Boba Fett, maybe an army of Fetts. The thing I remember is that that was all pretty organic. People started buying the heck out of the main figures, so they made more from the secondary characters, and people gobbled those up, and pretty soon they were making one of that guy you see in two frames in the back of the cantina.

And as someone said, Boba Fett was one of the cooler-looking ones, so kids imagined a character and stories for him, and eventually that became fan-fic and books and a whole fandom. It grew from the bottom-up. I don’t think Boba Fett’s actor ever did interviews before the movies to tell people how important he was.

Long story short, the fans decided Boba Fett was cool – then later, Lucas ham-handedly inserted him into scenes in the special editions in response to that. In contrast, Lucasfilm declared Phasma was cool in advance, and dared anyone to disagree by calling those who did “misogynist man-children” (good band name). That’s why it feels so different, even though at a glance they’re both cool-looking action figure characters that do almost nothing in the movie.


This one’s kind of an inside joke, so I can’t explain the whole reason it’s a favorite around here (1:30). But I get a kick out of these that match music with unrelated video when it meshes this well. Plus the clothes and dancing of the 70s are just amazing. Past eras had so much style. Some of the style was terrible, but at least they had it.

Daily Musings of August 28, 2018

One somewhat longer one today, then a fun one. I think I’ll keep wrapping up with a fun item each day, for balance.

https://www.buzzfeednews.com/article/kevincollier/tech-companies-are-gathering-for-a-secret-meeting-to

It’s Buzzfeed, so you have to read between the lines, but this is the kind of thing I was alluding to yesterday in my video on fixing the Internet. The Big Social companies got a rude awakening in 2016. They found out if they allowed everyone to use their platforms freely – which was a big part of how they became popular in the first place – smart people on the other side of the political aisle could use those platforms to beat them in elections. When they say “manipulation,” they really mean “the other side playing by our rules.” When they say “election protection,” they mean “making sure our platforms help our side win.”

It’s not about “Russian troll farms,” which do exist, but can be hired by both sides, and aren’t effective anyway. It’s about Americans on the Right organizing and passing effective memes and ideas around on social media. These companies and their CEOs are pouring millions into the campaigns of open-borders globalist candidates. They see no reason to let their own systems be used to oppose them. The only reason they didn’t shut down all dissenters on November 9, 2016, is that their business model depends on keeping a critical mass of users, so they can sell that data. There’s no point in being on Facebook (or Twitter, Google+, etc.) if your friends and people you want to follow aren’t on it. If they openly turn their platforms into left-wing echo chambers, they’ll be setting themselves up to be replaced the way Facebook replaced MySpace.

They know that, but at the same time, they’re already billionaires, so some of them may figure they can afford to lose some money for the cause. And they’re very angry at Americans for voting for President Trump, to the point where some of them aren’t really thinking straight. So they’re trying to shut down dissent anyway, but piecemeal, picking away first at “extremists” like InfoWars before moving on to more moderate dissenting voices.

When a handful of companies control an entire industry and collude to decide what products will be allowed in their marketplace, they run up against anti-trust law. When they do so to manipulate elections, you can add election law to that. Their butthurt over 2016 is going to get them in big trouble if they don’t wise up. Some of the CEOs seem to realize that, but they’ve surrounded themselves with a SJW workforce that doesn’t. Looks like they’re headed for the cliff.


One thing you can say for the Internet: it’s made it easier than ever for artists to produce work and get paid for it. I’m not some kind of hipster, searching for obscure music you probably never heard of, but there’s just a ton of good, inventive stuff out there to stumble over. Of course, half the time I’m probably “discovering” someone that everyone else already saw on a reality TV show three years ago. Oh well, it’s new to me. Here’s a good one.

Fixing the Internet

I’ve been experimenting lately with IPFS, the InterPlanetary File System, and learning more about distributed information systems like it. I think I mentioned this kind of thing in passing in a podcast a year or so ago, so I thought I’d do more of an explanation of it. First I demonstrate the client-server model which most Internet applications use, and why it’s increasingly fragile now that a handful of corporations control so much of our access to and ability to share information. Then I describe the distributed model that I expect will replace it, using IPFS as an example.

This stuff is in use, but very much under development, so I expect to do more videos and articles on it in the future, as more uses are found for it and applications built on top of it. Right now, it’s kind of like the early 1990s again, where you had to be a hobbyist, if not an expert, to really use the Internet well. It’ll take some time before these distributed systems can be used as handily as we can currently browse the web. But in the long run, we’ll have an information system that’s about as anti-fragile as possible.

IPFS key for this video: QmcMjiKBG7yoLdqXQJADBd7SqGh4Tmr5wzTF7g5rQ4cYZR

Daily Musings of August 27, 2018

I’m going to try something new for the blog. By “new” I mean something I’ve done before, but I’m trying it again a little differently. I do some blog commenting and forum posting here and there, but it’s always seemed like there should be a better way. A response isn’t always worth writing a full blog post of my own. But often the thought I have is kinda long for a comment, or it goes off-topic, so it’s not really appropriate for a comment. I could tweet them, but Twitter sucks, and it doesn’t seem like any of the alternatives are ready yet.

So I’m just going to put them here, with links to the article I’m commenting on, along with other thoughts that pop into my head – basically anything that might be worth expanding into an article later. Then I’ll try to remember to publish it at the end of the day. The comments may not make much sense out of context, so if you don’t want to go read the original articles, feel free to skip these. This is borderline experimental.


http://voxday.blogspot.com/2018/08/mailvox-archetypal-forked-tongue.html

Next to Shapiro, no one’s been pushed harder on the chans as someone to follow than Peterson. So one day I thought I’d watch a video he did on philosophy that was highly recommended. It didn’t make much sense to me, which is usually a sign that I should check my wallet. I barely know who Jung and Kant are, though, so it’s possible I just wasn’t educated enough to get it. But here’s the thing: neither is that target audience. They aren’t responding to him because he made a profound point about Jungian archetypes, so they’re following him because something he said hit them in the feels.


http://www.unz.com/freed/decline-in-the-fall-or-late-summer-anyway/

I have to disagree with Fred Reed on one point here:

Americans no longer have a shared identity, a common culture to hold them together. In 1950 America was overwhelmingly white, European, and Christian. How deeply one believed was not the point. Christianity was a matrix binding all

It did matter how deeply it was believed. Sure, there were people in 1950 who didn’t really believe and just went along to get along, but they were the minority. When Christianity was no longer believed by the majority, and became just a shared set of cultural norms, it didn’t take long to discard those in favor of individual freedom and diversity. Now even some atheists realize our society would be better off if we all still went to church on Sundays and tried to have kids in wedlock, but you can’t get a population to follow rules like that unless the people believe the religion that sets them.

And Fred probably shouldn’t look too closely at the Catholicism of his adopted culture, lest he see how skin-deep it is too.


On a lighter note, I found this the other day. I’m not sure what it is, but it’s pretty great.

August 21st, 2018, Garden Update

The image with this video is a double rainbow we had last night after a surprise quick rain shower. My phone camera doesn’t really do it justice.

There have been a few rains in the last couple weeks, so now that the drought is over, everything’s growing like crazy, including the weeds. I hope this will serve as a “before picture,” so my next video can show the garden with most or all of these weeds removed. Currently harvesting snap beans, Swiss chard, potatoes, squash, cucumbers, kale (have to figure out how to use it), mustard, and broccoli within the week.

265/220/200

Forty-five down, twenty to go. For those unfamiliar, that’s what the title means: starting weight, current weight, goal weight. I lost the first 35 pretty steadily over 2017, then stalled for most of the first half of this year, and now the scale is moving again. Stalls happen; the main thing is not to start gaining it back.

My goal of 200 is based on calculations using wrist size to determine lean mass (bone and muscle). Just looking in the mirror, I feel like I have more than 20 to go, so I’ll recalibrate when I hit 200. For now that’s a pretty good goal, since I don’t think I’ve weighed that little since about 1988.

I don’t like to talk too much about weight loss (unless someone asks), because no one wants dieting advice from a fat guy. For now I’ll just say it’s low-carb. Nothing fancy, just what I call lazy-man’s low-carb: meat, animal fats (lard and butter), eggs, dairy, lower-carb vegetables. If you’ve watched my garden videos, you know I cross the line now and then for things like potatoes and sweet corn. I find that those are okay for me in moderation, which is how they come out of the garden. They’re seasonal, and harvesting them burns off some of their calories. Big difference between that and a bag of Doritos.

It’d be nice to hit 200 by the end of the year, but that would be a pound a week, so that might be pushing it. People usually slow down as they get closer. As long as it keeps moving the right direction, I’m not too worried about it.

Assembly #03: Intro to 6502 Instruction Set

This video introduces the 56 op-codes in the 6502 assembly language instruction set, and gives examples of the commonly used ones, using a Commodore 128 monitor. Here’s the list of op-codes divided up by function.

This is the third video in my ongoing 6502 assembly language series. If you’re not familiar with the 6502 hardware, or with binary math and bitwise operations, check out the two previous videos in the series for info on those.

If you’re serious about learning 6502 assembly, there are some good books available. The one I used for a couple of examples in this video is Commodore 128 Assembly Language Programming, published by SAMS. It’s long out of print, of course, and hard to come by, but you can find a scanned PDF of it here.

I’m trying to decide what to program, now that I’ve covered the introductory materials. I’m open to suggestions, and also welcome any questions about the videos so far, at aaron@baugher.biz.

A Bit of Grammar Pedantry

There are some grammar mistakes that I see at least daily these days, more often than you’d think possible. I thought I’d use a few for blog fodder, and maybe it can be a resource. Buckle up for hardcore grammar nerdery.

The reason….is….because….

For instance, “The reason I won the blue ribbon is because my cabbage was the biggest.” This is always wrong. It’s hard to explain why if you don’t know how to diagram sentences; but basically, you need a noun clause to be the thing the reason is, and noun clauses don’t start with “because.” You end up with an adverbial clause trying to modify the noun subject, and then my teeth hurt.

You can usually fix it by using “that” instead of “because,” because “that” starts noun clauses: “The reason I won the blue ribbon is that my cabbage was the biggest.” That’s fine. Another option is to shorten the sentence, because “the reason is” tends to be fluff anyway: “I won the blue ribbon because my cabbage was the biggest.”

Why is “because” correct in that last sentence? Because now the main verb is “won” and the adverbial clause modifies that verb instead of trying to modify the subject.

If you look this up, you’ll find claims that “reason…is…because” is wrong because “because” means roughly “for the reason that,” so it contains the meaning of “reason,” making one of them redundant. That may be true, but that only makes it redundant, not incorrect. The reason above is the real reason.

Aaand, now I’ve typed “reason” far more times than is reasonable, so moving on.

Amount/Number

I’m amazed how often I see and hear this one, several times a day. The rule is simple: if you would normally count something, you use “number.” If you would measure it, you use “amount.”

measured things counted things
amount of pudding number of bowls
amount of friendship number of friends
amount of meat number of sandwiches
amount of text number of words

Get the idea? But for some reason, I hear “amount” used in place of “number” constantly, and never the other way around. It’s weird.

What about edge cases that can be counted or measured? That’s why I said “normally counted.” Take peas, for instance. You can count peas individually, but you normally don’t. You buy them by the pound and eat them by the spoonful, so you would say, “I ate a large amount of peas.” But if you were planting them, actually putting them down one by one, you could say, “I planted a large number of peas.”

As a bonus, this rule also applies to “less” and “fewer”: use “less” for measured things and “fewer” for counted things:

measured things counted things
less pudding fewer bowls
less friendship fewer friends
less meat fewer sandwiches
less text fewer words

Easy peasy.

Who/Whom

This is a tough one. My main advice is, if you don’t know when to use “whom,” like know it cold, just don’t use it. Use “who” everywhere. If you use “who” where it should be “whom,” it’s wrong, but it just sounds conversational, so it doesn’t set anyone’s teeth on edge. If you use “whom” where it should be “who,” it’s like waving a big flag that says, “I don’t know what I’m doing, but I tossed in ‘whom’ to sound smart.” That’s probably not fair, but fortunately only good grammar students will see it waving.

Having said that, how do you use them correctly? Well, “who” is nominative case and “whom” is objective. But the trick is to see whether the word is nominative or objective in its clause – not in the overall sentence. If you’ve learned an inflected language like Latin, or learned sentence diagramming very well, you had to get that, so who/whom shouldn’t be too hard. Otherwise, it can be pretty mysterious.

In simple questions, it’s not too hard:

  • Who was at the party?
  • Whom do you love?

In the first sentence, “Who” is the subject, so it’s nominative. In the second, “Whom” is the direct object of “do love,” so it’s objective. When “whom” is correct starting a question, you can usually turn the sentence around into a statement, replace “whom” with another pronoun, and see quickly which is correct:

  • You do love whom?
  • You do love him.
  • You do love he.

The last one is obviously wrong. Since “him” is objective, “whom” is also objective, no matter how you rearrange the sentence.

It’s harder when who/whom starts a relative clause:

  • I asked who was at the party.

This catches people because “who” follows “asked” so it feels like maybe it’s the direct object and should be objective case. But the entire clause beginning with “who” is the direct object. A relative pronoun gets its case from how it’s used in its clause, not from the main sentence. So “who” is still nominative here, because it’s still the subject of “was at the party.”

  • I asked Jim whom he loves.

This is correct, because “whom” is the direct object of “loves” in its clause. It sounds awkward, though, because it’s so rarely used right. I’d only say it this way out loud if I wanted to sound snooty for fun; otherwise I’d say “who” and give myself a mental demerit.

The longer and more complicated a sentence gets, the more likely we are to be guessing and get it wrong. To always get it right, you have to be able to pull out the relative clause that who/whom introduces, and diagram it in your head to see whether the who/whom is the subject or an object. Otherwise, it’s safer to stick to “who.”

Those are the three that have been bugging me lately. If I think of more, I’ll have to do another post.

DNA Is Code

I studied biology a couple years ago. I guess I mostly slept through it in high school, because I sure didn’t remember much. When we got to the section on DNA, I was like, “Holy shit, it’s a computer program!” DNA isn’t just roughly analogous to programming; it’s basically the same thing.

When a living cell needs to produce something, the nucleus cuts-and-pastes a string of instructions out of DNA, picking the right short chunk out of a string billions long. It passes a copy of these instructions out to a builder unit (I forget the names of all this stuff) which follows those instructions to build the thing the cell needs.

When you want to produce an effect inside a computer, you send a list of instructions to the CPU. For common tasks, rather than write these instructions anew every time, you may call a routine in the kernel, which runs a particular set of instructions that were designed for that task. A modern kernel is a string of millions of instructions, but the set for a particular task may only be dozens of instructions long.

DNA is the kernel for the operating system of a life-form. Or maybe I should say a kernel is the DNA of a computer operating system, since DNA came first. Either way, if you understand one, you should grasp the other one pretty quickly.

So now to evolution. Sometimes there are mutations in DNA, where an instruction is changed or cut out. Usually these are harmless. Occasionally they are harmful, because the change happens in an important set of instructions, which that cell can no longer use. The cell may die or become cancerous. But on very rare occasions, a mutation may be beneficial, and the cell now does something better. All that is fact, not controversial.

According to evolutionists, once in a while one of these beneficial mutations allows that creature and its descendants to survive and reproduce better than others without that mutation, so the mutation gradually spreads over generations. The species has improved. Then there’s another mutation, and another, and over a gazillion years, you mutate your way from a bacterium to Eliza Dushku.

The math doesn’t work at all, but let’s ignore that and just go back to our analogy to programming and apply some common sense. A DNA mutation is like a typo or glitch in a piece of code. Often – if it’s in a comment or an area of code that is rarely used – it will be harmless. Sometimes it will be harmful, crashing the program or causing it to work wrong, like giving you the wrong balance for your checkbook. But on very rare occasions, a glitch could cause a program to work better, faster, more efficiently. (It could. I doubt I’ll ever see it in my lifetime.)

Now let’s say you copy this mutated “child” version of the program, and it becomes popular and out-competes other programs of its type. Then someday there’s another beneficial glitch, and one copy again gets a little better and supersedes the others. Generation after generation, most glitches are harmless or harmful and kill programs off, but sometimes one survives and thrives in a new form. How long would it take for your original simple program, like a tic-tac-toe game, to “evolve” via glitches into a grandmaster-level chess program?

Because that’s what evolution means. And I can tell you there aren’t enough seconds in time, or enough electrons in the universe, for that to “just happen” to any computer program.

Intro to Binary & Hexadecimal and Bitwise Operations

I’ll be doing videos to demonstrate the 6502 instructions soon, and you can’t understand several of them without a basic understanding of binary math. It’s not hard, but it’s something that isn’t taught in math classes anymore, or is touched on as a concept but not really absorbed. This video demonstrates how to write binary numbers and translate them to decimal, how to add them, and how to convert to hexadecimal (base 16).

I hope it’s watchable enough. This was the fourth take, after recording it with my phone failed for various reasons (not even sure why on the last one, it just stopped), and switched to my old Flip camera.

July 25th Garden Update

Still watering quite a bit, though there was one small rain a week ago. Harvesting snap beans, Swiss chard, and a few potatoes. There will be scalloped summer squash and cucumbers along very soon. Got most of the late garden planted, with turnips, radishes, beets, carrots, and a few other things.

Time for the Fair

Almost time for the Adams County Fair! It doesn’t look like I’ll be exhibiting anything, since the only thing in the garden that looks good right now is the Swiss chard, and there’s no Swiss chard category. It would wilt before it could be judged anyway. But I’ll be there for dairy judging on Saturday morning, at least. That’s always a good time, watching cows drag kids around the ring. I saw the heifers they were trimming up and getting ready to go, and they looked great, not that I’m much of a dairy judge. I figure it’s all about the udders.

I also like to get there for the hog show on Monday, if I can. And apparently the Oak Ridge Boys are playing one night. I don’t usually go over to the grandstand events, but that one might be worth checking out, or at least listening to from nearby. It’s nice to just spend some time up there, especially outside the busy hours, when it’s mainly the livestock owners and fair workers taking it easy before the crowds come. I’ll have to check out the wi-fi situation; it might be possible to do work from there now if something comes up.

It looks like the weather will be incredible, around 80 or lower every day. There might be some rain, but usually there’s scorching heat plus rain at some point to boost the humidity, so you need an extra shirt for when you sweat through the first one. If the forecast holds up, this could be the best weather I’ve ever seen at a fair.

Maybe this will be the year I come home with a couple rabbits. Got an empty hutch now….

Intro to 6502 Assembly Language Programming

I plan to do some demonstrations of assembly language programming, so I thought I’d do a short intro. This is about the 6502 family of microprocessors, which were used in many computers of the 1980s, and are still produced by the millions for embedded hardware and hobby projects. The 6502 is a pretty easy CPU to program, because it has a fairly small set of instructions, and yet it’s powerful enough to do interesting things.

I did forget to mention a few instructions, mainly the ones having to do with comparing numbers and doing boolean operations. I think I’ll cover those in a video on the full instruction set, and maybe another video just on binary arithmetic and hexadecimal, since those are pretty much a necessity for assembly language work.

My camera kept refocusing once in a while, but I hope that’s not too distracting.

Same Deal Every Time

I was telling someone the other day that every computer I’ve bought has cost about $700-800, even though they keep getting more powerful. You can spend a lot more than that, of course. But it seems like each time I put together a system with current proven hardware that’s plenty powerful for my needs, the price ends up in that range, going back to my first computer in 1988.

Then I got to wondering whether that’s really true. That’s a pretty old memory, so is it accurate, or something I dreamed up over the years because it sounded good? I went hunting online and found the Sears Catalog page from 1998 below, which matches up with what I remember. I bought a 128D and monitor from Sears just like the ones in the picture. According to that, the computer was $499 and the monitor was $299, but there’s the combo price in the lower right: $749.98. I don’t remember what accessories I bought, if any. I know I didn’t get a printer, but I probably got a joystick and some blank floppy discs.

That was a fun little nostalgia trip, since that was my computer until some point in the late 90s. Even after I got into the Internet business, I would connect to the Unix systems at work using a terminal on the 128 at home, so I used it for nearly ten years.

Aside from nostalgia, I’ve been thinking about that system because, since I got back into assembly programming a little, I was surprised to find out how much is still being done with the 6502 family of CPUs used by so many of the top 1980s systems. They’re apparently pretty popular in embedded systems and some of those hobby mini-computer boards, so I’d say there’s more interest in them now than there was 10-15 years ago.

That looks like another reason to do some assembly language tutorials or other videos like I mentioned in my recent C programming series. More to come on that soon.

Hats for Bats

If I wear a hat doing work out in the yard, I usually wear a baseball cap style hat, as is common around here. But the other day a few of my hats fell apart in the laundry, they were getting so worn. So while I was at Farm & Home getting feed, I thought I’d look at hats.

The first one – just an ordinary baseball cap – was $30. It didn’t have a corporate logo on it, but still, I’m not paying $30 for a stupid hat. I looked around some more, including at some with logos, and the cheapest I found was $15. If you want me to wear your logo, you need to pay me, not the other way around. (Actually, I wouldn’t mind wearing a hat to promote a local business I like, but they’d probably give them away.)

I gave up on those and walked over to the display of real hats – fedoras and straw hats and such, not baseball caps. Some of those can run up to $100, and they may be worth that, but I just wanted something to keep the sun off my face. Then I saw this one: $5 plus 30% off. Now we’re talking. I may look like an Amish with the wrong kind of beard, but it’ll keep the sun off better than a cap would, and may be cooler.

C Programming: Tic-Tac-Toe Simulator - Part 4

The fourth and final video in the series. I add the ability to ask for a number of games on the command line, do some final cleanup of the code and testing, and push it all to my gitlab repository.

I intend to do more programming videos, so if you have suggestions or questions, please send them to aaron@baugher.biz. I may try some live streaming so it would be possible to interact in more of a classroom manner, if these generate any interest in that.

July 12th Garden Update

We got a half-inch or so of rain last week, but still need more. Things were curling up again within a few days. Currently harvesting sweet corn and Swiss chard, hoping the snap beans kick in soon. So far, thanks to the heat, there’s nothing that will win any ribbons at the fair, but it’s still a couple weeks away.

I tried something different with this one, taking photos and doing a slideshow with voiceover, instead of live video. My cheap phone doesn’t handle high sun very well, and that’s all there’s been lately. It takes better photos, so I thought this would be worth a try.

C Programming: Tic-Tac-Toe Simulator - Part 3

This is the one where I spend an embarrassing amount of time figuring out how exactly to avoid losing a game of tic-tac-toe. Got it figured out, though. Now the players are smart enough to force a tie every time. In Part 4 I’ll clean up the code somewhat, add a few more features, and maybe talk about what comes next in the series.

C Programming: Tic-Tac-Toe Simulator - Part 2

Here in part 2 I write most of the code, getting the program to where it can simulate one game. The AI is very dumb at this point, on purpose, so I could make sure the win and block conditions worked correctly. Part 3 will make it smart enough to produce all tie games, clean up the code, and do any debugging.

This isn’t a tutorial, so I’m not trying to teach C in it, though that’s something I may tackle at another time. It’s mainly a programming demonstration, to give those who might be interested in programming, or who have experience in other languages and have an interest in C, a chance to see what it’s like.

If you have any comments or questions, please comment at the video hosting site. I’d be glad to read and respond to them. Also, my apologies for the microphone crashing in the middle of it.

C Programming: Tic-Tac-Toe Simulator - Part 1

This the first part in a series of videos on C programming, which will walk the viewer through programming a tic-tac-toe simulator (a program which has the computer play against itself, a la War Games). I will be making it up as I go along, so you’ll get to see how the sausage is made, from designing to debugging. I hope that doesn’t result in too many long pauses as I think about things, or too many times of backing up and starting over, but we’ll see.

This part 1 just goes over some of the tools I use, and how to set up a project in the first place, including the creation of a git and GitLab repository so the project can be shared with others, who can then offer patches or fork it for their own use. Actual design and coding of the program will be coming soon in part 2.

June 19 Garden Update

Shot this one yesterday, after the tiny bit of rain we got out of some pretty dark clouds. Better than nothing, and at least it cooled things off some overnight.

The weed situation is much more under control now than two weeks ago. There are still a few here and there, but now that the ones I pulled have died, I can spot the stragglers. Everything I started inside is now transplanted, but I have a few plants – cauliflower, kale, and tomatoes – that I picked up cheap at Farm & Home to find a place for. There’s still some space for planting, so I need to get out the seed bucket and pick a few more things, but mostly we’re coming into harvesting and weeding season. The snap beans will be ready to pick soon, and then that becomes an every-couple-days thing. Swiss chard will soon be big enough to start taking leaves here and there too. Then potatoes and sweet corn in July.

Little Buddy

One of the kittens turned up starving a few days ago, so I have a new best friend. Nothing like hunger to tame a wild cat, I guess. I took this a couple days ago, and she’s still filling out and doing better. Feisty enough to run past me a couple times when I opened the door, anyway, but we’ll be having none of that.

First Peas of 2018

Picked the first peas of 2018 yesterday; got a little over a pound. Those early plants are already fading fast in the heat, but this was more than I expected to get from them, considering how spotty they came up. It took about 20 minutes to pick them and another 40 to shell. Not terribly cost-efficient, but 40 minutes spent shelling peas in the shade with a beer and the Stanley Cup game on the radio isn’t a bad thing. Fresh peas are pretty great, too. I could do without peas the rest of the year (canned ones especially suck), but fresh ones are worth some work.

June 4 Garden Update

Sorry about the video quality on this. It seems like I either get too much light and things are washed out, or too little and it’s fuzzy. That’s what I get for using a cheap phone as a video camera, I guess.

It’s been really dry here this year, so I’m already watering quite a bit. Strawberries are finished for the year, and asparagus and the early lettuce will be soon, and then it’ll be time to pick peas. And pull weeds, and more weeds.

Pork Buying Demonstration

There are a few questions people often have about buying pork by the hog or half-hog, so I thought I’d do a little video to answer them with my latest haul. It should give an idea how much meat you have to be prepared for, what kind of cuts you can look forward to, and how the pricing works (if you get the hog from us). I hope it’s informative.

And here’s a video I did last year on how to render your own lard, if you get the fat.

Tables in Org-mode

Here’s another nice thing about blogging in org-mode: easy tables. You can create a table in org-mode as simple as creating the first line with pipes between each item, and then tab for the next cell or line. Formulas are also pretty simple. Then exporting to a blog turns that into a nice HTML table for you.

For instance, here’s the table I’ve been using to track my garden harvest so far this year, as it looks in org-mode as of today:

| date             | harvest      | grams | pounds | price | total $ |
|------------------+--------------+-------+--------+-------+---------|
| [2018-04-24 Tue] | asparagus    |   572 |   1.26 |  3.00 |    3.78 |
| [2018-04-26 Thu] | asparagus    |   556 |   1.22 |  3.00 |    3.66 |
| [2018-04-28 Sat] | asparagus    |   663 |   1.46 |  3.00 |    4.38 |
| [2018-04-30 Mon] | asparagus    |   508 |   1.12 |  3.00 |    3.36 |
| [2018-05-02 Wed] | asparagus    |   488 |   1.07 |  3.00 |    3.21 |
| [2018-05-05 Sat] | asparagus    |   460 |   1.01 |  3.00 |    3.03 |
| [2018-05-08 Tue] | asparagus    |   684 |   1.50 |  3.00 |    4.50 |
| [2018-05-08 Tue] | green onions |   128 |   0.28 |  2.00 |    0.56 |
| [2018-05-08 Tue] | marshmallow  |   100 |   0.22 |  1.00 |    0.22 |
| [2018-05-12 Sat] | asparagus    |  1066 |   2.34 |  3.00 |    7.02 |
| [2018-05-12 Sat] | lettuce      |   150 |   0.33 |  1.00 |    0.33 |
| [2018-05-15 Tue] | asparagus    |   736 |   1.62 |  3.00 |    4.86 |
| [2018-05-20 Tue] | asparagus    |   686 |   1.51 |  3.00 |    4.53 |
| [2018-05-20 Tue] | lettuce      |   150 |   0.33 |  1.00 |    0.33 |
| [2018-05-22 Tue] | asparagus    |   251 |   0.55 |  3.00 |    1.65 |
|------------------+--------------+-------+--------+-------+---------|
| Totals           |              |  7198 |  15.82 |  2.53 |   40.02 |
#+TBLFM: $4=$3/455;%.2f::$6=$4*$5;%.2f::$5=$5;%.2f:: @19$3=vsum(@4..@-1)::@19$5=vmean(@4..@-1);%.2f

The cryptic stuff at the bottom is a list of formulas to do things like convert grams to pounds and calculate and total the prices, so it stays up to date whenever I add lines.

And here’s how it looks in the web page as exported through ox-hugo, with no tinkering except to set a few general CSS table styles:

date harvest grams pounds price total $
[2018-04-24 Tue] asparagus 572 1.26 3.00 3.78
[2018-04-26 Thu] asparagus 556 1.22 3.00 3.66
[2018-04-28 Sat] asparagus 663 1.46 3.00 4.38
[2018-04-30 Mon] asparagus 508 1.12 3.00 3.36
[2018-05-02 Wed] asparagus 488 1.07 3.00 3.21
[2018-05-05 Sat] asparagus 460 1.01 3.00 3.03
[2018-05-08 Tue] asparagus 684 1.50 3.00 4.50
[2018-05-08 Tue] green onions 128 0.28 2.00 0.56
[2018-05-08 Tue] marshmallow 100 0.22 1.00 0.22
[2018-05-12 Sat] asparagus 1066 2.34 3.00 7.02
[2018-05-12 Sat] lettuce 150 0.33 1.00 0.33
[2018-05-15 Tue] asparagus 736 1.62 3.00 4.86
[2018-05-20 Sun] asparagus 686 1.51 3.00 4.53
[2018-05-20 Sun] lettuce 150 0.33 1.00 0.33
[2018-05-22 Tue] asparagus 251 0.55 3.00 1.65
Totals 7198 15.82 2.53 40.02
  • price notes
    • asparagus price from Mill Creek Farm in season
    • green onions guessed from online
    • no idea on marshmallow, so plugged in $1
    • have to look up lettuce price too

Simple Comparison of Some Programming Languages

As I say in the video, I get asked now and then what programming language a person should learn. I thought I’d put together a simple demonstration of several, to show some of the similarities and differences, and why it’s a good idea to be proficient in more than one.

I’m also trying something new in using my phone as a webcam. Works okay, though it does add a short delay. Hopefully that’s not too annoying, but I’ve noticed that when I’m watching how-to videos myself, I tend to enjoy them more if I can see the narrator, even if there’s no particular need to. So I’ll be using that more in the future.

Tau Station Intro

I’ve been playing a game called Tau Station lately. It’s an online, multiplayer, text-based, sci-fi role-playing game which is in alpha development. I got involved in it because I played Lacuna Expanse, a previous game by some of the same people, and wrote some scripts for that game. I was interested to see what they would do with this one, which is also being written in Perl, so I got in on the alpha phase.

They recently opened up the alpha stage up to everyone, so I thought I’d do a basic intro. It’s a pretty immersive game for being only text, and it’s the kind of game you can play for a few minutes here and there. If you want to try it out – it’s free – you can sign up at http://alpha.taustation.space/.

First Garden Video of 2018

A few days ago, I was wearing a stocking cap to keep my ears warm. Today I’m wearing a hat to prevent sunburn. At least the weather isn’t boring.

Now that it’s warmed up, things are starting to move in the garden. The early crops are up and growing, and it’s time to plant a lot of the warm weather ones. The asparagus has produced several pounds so far, and there will be lettuce and radishes to harvest soon.

But I guess there’s no need to repeat everything I said in the video. I’m planning to do these every week or two again this year. They came in handy a couple times last year when I couldn’t remember what I’d planted somewhere, and maybe others get something out of them too.

Mint Jungle

If you live in the area and could use a couple mint plants, let me know. I started with one snipping from one of my mom’s mint plants last fall, and this is what it’s developed into now, plus the four plants I already put out next to the grotto. I’ve just kept dividing it when it seemed ready, and now I’m not sure what to do with it all. Make mint juleps for Kentucky Derby weekend coming up, maybe.

First Asparagus of 2018

I finally harvested the first asparagus today. It started poking through a couple weeks ago, but the cold weather slowed it down. Now that it’s warmer, it’s coming on for real. Wound up with 1-1/4 pounds – pretty good lunch with butter on it.

I’m going to try to keep track of how much of everything I harvest this year. I’ve planned to do that before, and never managed to stick with it, but I think it would be really interesting to look back at the end of the year and see how much was produced from a little seed and a lot of labor. Gonna try again this year. It’ll be a few weeks before there’s anything besides asparagus and green onions from around the grotto.

Gut Punch

Art doesn’t usually do that much for me. I tend to take things at face value, expect them to mean what they say. So the idea of reading a poem or looking at a painting and seeing things that aren’t there on the surface – it doesn’t happen much. But once in a while something works, and then it can be a real punch to the gut.

This video is one of those. It came up in a discussion of music videos with movie-quality storytelling. The first time through, I didn’t get it, but I could tell there was something there I wanted to get. The next time through, it started to fall into place. I’ll be watching it a lot more to see what else comes out. I won’t go into the meaning I get from it, so I don’t spoil it for others. But it reminded me a little of the best moments of Scrubs, when you’d think you knew what was happening, and then that gut-punch came.

The other two videos below don’t hit me as personally, but they’re pretty great storytelling too. It’s nice to know that with so many movies these days being unimaginative reboots and nostalgia cash-ins, there’s still visual storytelling going on. And the music’s pretty great too.

Don't Be Spammed

A note to anyone who emails me: don’t put anything in your subject line like “website proposal” or “domain proposal,” even if it’s correct in context. I get so much spam with subjects like that, that you’re almost certain to be spammed. In fact, if you’re emailing from an address I haven’t already whitelisted, the best subject line is probably, “Hey, this is so-and-so, for real!”

Spinning Up a New Digital Ocean Droplet (VPS)

I have a $5/month virtual server at Digital Ocean, which I use for some light work and for an extra location outside my usual networks from which to test connectivity. I noticed recently that they’d increased the RAM and disk space included for that price. It turns out I could have just clicked a button to expand it, but I decided to make a new droplet and move everything to it, since that’s really how you’re supposed to handle the cloud – lean toward spinning up new systems rather than getting attached to the ones you have.

So I recorded myself going through the process of starting and configuring the droplet, setting it up far enough to start installing packages. If you’re inspired to get a droplet for yourself, feel free to use my referral link, which I think gives me $5 when someone signs up with it. I’m also available if you need a sysadmin for your servers.

Dragged Me in Kicking

They may be able to make me sign up for their data tracking nonsense to get coupons, but they can’t make me use my real name. (If you know where that’s from, you are a cultured individual.)

Early Asparagus

I spotted two asparagus spears just poking through the surface in the garden today (April 3rd). I wasn’t expecting it yet, as cold as it’s been, but happened to see one as I was walking by. Considering it’s supposed to get down as low as 18 this week, I’m not sure that’s a good thing. I don’t know how asparagus handles freezing, or whether it will freeze off and then come back when it warms up. Guess I’ll see.

Mushrooms usually come around the same time as asparagus, and it definitely isn’t time for them yet. I think they start sprouting when the soil temperature hits something like 55, and we’re nowhere near that now.

Should Have Been a Hoarder

I get an automated eBay notification for Commodore C128s, because sometimes I think it’d be nice to have a real one again, and I’m curious about what people are doing with them. But the prices on them keep going up, and an emulator is a pretty good substitute, so I haven’t bought any yet. The picture below is an example of what they’re going for these days: two completely untested systems, which may not work at all, and have missing keys, have a bid of $116 (including shipping). Tested ones without anything missing can bring $300.

And 15 years or so ago, I gave three of them, plus some peripherals, away to a metal scrap guy. They weren’t worth anything then, but now they’re making a comeback as collector’s items. Oh well. Would be nice to still have them, but you can’t save everything just in case.

Commodore 8-bit Memories: Episode #2: M.U.L.E.

I’ve been playing some MULE lately as I work on the design of a new game inspired by it, so I thought I’d do a play-through video.

Fixing BBDB in Emacs with bbdb-migrate

I recently upgraded Emacs and BBDB, and it stopped working to auto-complete addresses in Gnus. The error turned out to be that it was trying to run bbdb-migrate to update the database, and I wasn’t loading that. So I just needed to add this to my .emacs:

(require 'bbdb-migrate)

And do a C-x C-e at the end of that line to execute it. Then the next time I tried to use BBDB by auto-completing an address, it took a few moments to migrate the database, then worked fine.

I’m not sure if I have to leave it enabled, so I just commented out the line for now, and I’ll see if it keeps working after my next restart of Emacs, whenever that might be.

Change to org-agenda-time-grid in Org 9.1

Another small one that others might be searching for. The upgrade to Org 9.1 included a change to the arguments in org-agenda-time-grid, adding a new one and rearranging them a bit. This was my previous setting (from Bernt Hansen’s config):

(setq org-agenda-time-grid (quote ((daily today remove-match)
                                   #("----------------" 0 16 (org-heading t))
                                   (0900 1100 1300 1500 1700))))

And now it’s this:

(setq org-agenda-time-grid (quote ((daily today remove-match)
                                   (0900 1100 1300 1500 1700)
                                   "      " "................")))

It doesn’t seem necessary to insert org-heading into the last string anymore; it’s doing that on its own, even though the docstring for the variable doesn’t mention that. I changed those two strings just for style purposes. The first, shorter string comes after the time in the scheduler, and spaces look better there.

Switched from ido-mode to ivy-mode for org-mode completion

I used ido-mode for completion in org-mode for a long time, based on settings I got from Bernt Hansen’s Org Mode config. Recent changes to Org for version 9 have broken a few things. One is that org used to have its own hook into ido-mode for completion on things like refile tasks, using the variable org-completion-use-ido. That no longer exists. The docs say it can use a completion engine via completing-read, but while researching how to do that, I ran across ivy-mode. It’s similar to ido, but nicer in some ways. To enable it, just remove the ido stuff in your emacs/org-mode config, and add this somewhere in your .emacs:

(ivy-mode 1)

That seems to enable it everywhere useful, so far. I like the way it displays choices better than ido, so I’m already getting comfortable with it after a couple days.

Design Notes on a MULE-type Game

I’ve been playing some Stardew Valley lately. I got it from gog.com for $15, which is the most I’ve spent on a game in a long time. It’s a very well-made game, and even more impressive when you find out it was done by one man. Not many people can code well enough to make a complete game work, and do good graphics, and do good music, etc. Most games are made by teams of people with different skills, and when one skill is missing, it shows.

Anyway, as usually happens when I play newer games, I was soon drawn to the old games, which got me thinking about a couple that I want to do web-based (or nowadays maybe mobile-based) versions of. Or more likely new games inspired by them.

The first one on the list is M.U.L.E., a 1983 game. One great thing about MULE on the Commodore 64 was that it allowed four players to play at the same time. I can’t think of any other C64 game that did that, though there may have been a few. Playing it alone against the computer gets dull after a while, because the computer players are kinda dumb and predictable. So I’ve thought for a long time that it would make a good networked multiplayer game, but wasn’t sure just how to do it. It’s a fairly slow-paced game that can take a couple hours with four human players, so that’s a long time to expect four players to stay connected and playing. Full networked multiplayer means you have to deal with disconnections, lag, and all that. It would add a pretty big layer of complexity to a game that fit on a 170K floppy disc. A team has been working on adding multiplayer to Stardew Valley for several months now. I don’t really want to get into that, so that’s where I was stuck a couple years ago the last time I brainstormed on it.

Now I think I’ve got it figured out. I can go with a turn-based style, turning the interactive multiplayer parts into more of an auction, which fits with the game’s other auction portions. Kinda like a lot of social media games, where you’re competing against other people, but you login and take your turns whenever you want (but without the annoying upselling). That will change the game considerably, but that’s not a bad thing, because it eliminates any copyright concerns. It’ll really be a new game with some ideas from MULE, not a remake.

I’m programming it in Perl, at least on the server end of things. If anything needs maximum speed, I’ll refactor that part in C. It’ll use JSON for communications between client and server. That’s pretty universal, so a mobile app could easily handle that, and it’s human readable, which is nice when you’re debugging.

So as I’m planning it right now, there’s a game server running, and then a web-based client which could run on the same server or a different one, which talks to the game server. That means a fully browser-based client in Javascript could work too, or a mobile app written in Java or whatever they’re using these days. I’ll need a clear API for talking to the game server. Security (user accounts, logins, sessions) will have to be handled by the game server.

One thing I’ll have to figure out is how to get paid for it. For a long time, the easiest way to get paid online was to slap ads on things. That’s getting less profitable all the time, though, as ads pay less and less for a variety of reasons. Many content producers are moving to a patron-type model, where people voluntarily pay for things they like, and that seems to be working, at least for some of them. I was skeptical of that at first, because I was around in the shareware days, when maybe 1% of users paid for the software if you were lucky. Voluntary payment seems to be working better now, for a couple reasons. One is that it’s simply easier to click a donate button that’s right there when you’re in the game than it was to put a check in the mail later sometime. Another is that the prices tend to be lower. If you were asking $10 for your shareware package in 1985, that’s about $20 in today’s dollars. That’s not nothing. By comparison, I’ve bought several games on sale from GoG for less than $5. That’s easier to pay.

Another possibility would be a “free first one” model, where they can sign up and play for a month or a certain number of games, and then have to pay to keep using it. Users could get around that by creating new email addresses somewhere like Gmail, but most people won’t go to that trouble to save a few dollars. I could also combine a kickstarter-type program with any of these ideas.

More to come. I think I’ll do a play-through video of MULE soon, since talking an audience through the game might help me focus some ideas.

Fixing Org-protocol issue with conkeror

I have a function in conkeror that saves a web page’s URL and title, along with any selected text at the time, in Emacs/Org-mode as a captured task, when I hit C-c r. It does this by feeding an org-protocol command through emacsclient. A recent upgrade of org-mode broke it, so I had to change it up a bit. The function in my .conkerorrc used to look like this:

function org_capture (url, title, selection, window) {
    var cmd_str = 'emacsclient "org-protocol://capture:/w/'+
        url + '/' + title + '/' + selection + '"';
    if (window != null) {
        window.minibuffer.message('Issuing ' + cmd_str);
    }
    shell_command_blind(cmd_str);
}

And now it looks like this (plus the interactive function and key definition to call it, which hasn’t changed):

function org_capture (url, title, selection, window) {
    var cmd_str = 'emacsclient "org-protocol://capture?template=w&url='
                  + url + '&title=' + title + '&body=' + selection + '"';
    if (window != null) {
        window.minibuffer.message('Issued: ' + cmd_str);
    }
    shell_command_blind(cmd_str);
}
interactive("org-capture",
            "Clip url, title, and selection to capture via org-protocol",
    function (I) {
        org_capture(encodeURIComponent(I.buffer.display_uri_string),
                    encodeURIComponent(I.buffer.document.title),
                    encodeURIComponent(I.buffer.top_frame.getSelection()),
                    I.window);
    });
define_key(content_buffer_normal_keymap, "C-c r", "org-capture");

Basically, they went from a format that separated the items by slashes to one with key=value pairs, like URL format. I also had to make a change in my emacs config to org-capture-templates (just showing the one template here), from this:

("w" "org-protocol" entry (file "~/work/org/refile.org")
 "* TODO Review %c :CAP:\n%U\n\n%i" :immediate-finish t)

To this:

("w" "org-protocol" entry (file "~/work/org/refile.org")
 "* TODO Review %:annotation :CAP:\n%U\n\n%i" :immediate-finish t)

Not much change there; just seems like they changed the %c template marker to %:annotation. Works perfectly again now.

I Left Him Cheese

I was reading through some old notes, and was reminded of this Dairy Council ad. It’s been almost 20 years, but thinking of that little girl’s grinning last line still makes me chuckle.

Putting My Old Usenet Posts Online

I was hunting through my old Usenet posts recently, and thought it might be useful to put them online for searching. Google still has the Groups archive, but it’s clear that they’ve started scrubbing things politically, so who knows how long that will survive. These are from 2002-2008, which must be when I mostly stopped using Usenet. I keep trying to get back into it, but unfortunately it’s kind of a wasteland now. I also lost my local copy of everything from before 2002 in the Great RAID Disaster of that year. Maybe sometime I’ll scrape those from Google Groups while I still can.

I’m leaving them as plain text files, because that’s how they were originally, so converting them to org/HTML would cause weirdness.

Getting bwn driver working on a Dell Latitude D520

I run FreeBSD on a Dell Latitude D520 laptop. One issue in installing it is that the wireless doesn’t work out of the box, so you have to install firmware for it. In this machine’s case, the needed firmware is in the net/bwn-firmware-kmod port. So you have to connect with the Ethernet port long enough to get that installed, or pull it in some other way, like a flash drive.

After installing the port, though, it still wasn’t working. It installs three files in /boot/modules:

  • bwn_v4_lp_ucode.ko
  • bwn_v4_n_ucode.ko
  • bwn_v4_ucode.ko

But looking at the dmesg errors, it was searching for a file called bwn_v4_ucode5.ko. So I had to do this to get it working:

cp /boot/modules/bwn_v4_ucode.ko /boot/modules/bwn_v4_ucode5.ko

I don’t know why the discrepancy, but this gets mine running, so I haven’t dug into it further. It seems like laptops vary greatly, even within the same model number sometimes, so you never know. I figured I’d put it on public record, in case anyone else gets the same error message and goes hunting for a solution.

Starting the Gardening Year

It’s time to start working on the garden. Actually, a little past time. I planted a double-row of peas about ten days ago, as well as lettuce, parsnips, radishes, and carrots in the little bed in the grotto. The cold weather last week made that seem too early, but those things should still come up.

I have a lot of leftover seed that germinated okay last year, but it might be iffy this year. So I wanted to get some things out there early to see how they come up. I may also need to germinate some seeds in paper towels, to see how they do before planting them out.

Other plants already started: mint that I got from my mom over the winter and started in a pot, and sweet potatoes that I started from a couple potatoes that had sprouted in the basement. It’s still a couple months before the sweet potatoes can go out in the garden, but they should have plenty of roots by then.

We should have marshmallow, hyssop, and toothache plant as perennials in the herb garden. There may be catnip by the grotto, but I think the cats wiped it out rolling around on it last year, so I expect to have to start that again.

The walking onions around the grotto are starting to green up, and the strawberries that survived last year look good and need to be weeded around. So quite a few things are already underway. Right now, I have two things to get figured out. First, where I’m going to get enough mulch to cover all the garden spots. If I’m going to use the mulch method this year, I’ll need enough to bury the gardens in several inches of mulch. Alternatively, I could use paper or cardboard, but I’ll still need enough mulch to put on that and hold it down in the wind. One thing I’m thinking of is to buy a half-dozen round bales of hay, and bust two of them up on each garden spot. That would certainly do it.

The second thing is to get seeds ordered. So before that I need to go through the leftover seed and seed saved from last year and see what else I need to add to that. I don’t think there are too many things I’m missing, but I always like to add something new. I had really good luck with the watermelon last year, better than I ever have before, and I grew Moon & Stars for the first time, so I want to make sure to get that again.

Oh, a third thing: it’s time to start cleaning out the chicken house and spreading it on the gardens. That will help with the mulch situation too.

The pole at one end of my trellis finally rotted through at the bottom, so I need to replace it. When I put that in seven years ago, I used ordinary pine lumber, so I didn’t think it would last more than a couple years. It’s worked out pretty well. Have to weave new twine on it for the year, but that doesn’t need to be done until something is ready to climb it, probably not until a couple months from now.

I may have to put some fence around at least one of the garden spots. The chickens really worked on the cabbages there last year, devouring a couple of them entirely, which was strange. I won’t be planting cabbage in the same spot, since I rotate things through the gardens every year, but that’ll be something to watch out for. I like letting them roam around the gardens eating bugs, but I don’t need them eating my vegetables.

I want to get some permanent fruit trees going this year. I started a couple grapes and a couple raspberries last year, but none of them survived. Need to get better stock from Stark’s this year, instead of the cheap ones off the shelf. The asparagus bed is mature now (could be bigger), and the strawberries are getting started, so I’d like to keep adding another long-term planting each year. A small orchard of apple, pear, peach, and cherry trees would be great.

As far as annual stuff goes, it’ll be the usual. I think I’ll do videos every couple weeks again this year, since that was a good way to keep track last year. I referred back to those a couple times to find out when I planted something or what variety where. Probably not until there are some plants coming up to see, though.

Hammer All the Cores

My current workstation has 8 CPU cores (each core can handle a stream of instructions independently, so it’s more-or-less like having 8 CPUs – 8 different “brains” that can each be running its own thing at the same time). My last computer had 2, so I’m guessing my next one will have 32. They seem to be hitting a wall on how fast a single CPU can be, so the next best thing is to stack more and more of them together.

The only problem is that most programs can only use a single core. It’s a lot more complicated to write a program to spread its work across multiple cores, and some programs couldn’t take advantage of that anyway. So there are many times when I’m running a program that’s working one core as hard as it can, while the other seven are mostly idle. The nice thing about that is that one heavy program doesn’t bog down the system, since other programs can sail along on the other cores. Most of the time, that’s great. But if you have a task that you want to complete quickly, it would be nice to spread it across more of them.

For instance, I recently needed to increase the volume on a series of 15 podcast files. You can do that with ffmpeg, using a command like this:

ffmpeg -i file.mp3 -vn -sn -dn -af volume=10dB new/file.mp3

That reads file.mp3, ignoring the video and subtitle streams, and writes it into the same filename in a ’new’ subdirectory, bumping up the volume.

But it takes a minute or two per file, and I have 15 of these files, so I don’t want to type that command for each file every couple minutes. So the simple thing to do is to wrap a loop around it:

time (for i in *.mp3; do  ffmpeg -i $i -vn -sn -dn -af volume=10dB new/$i  2>/dev/null; done)

A couple of new things here. First, I wrapped the whole thing in a ’time’ call so it would tell me how long it took. I also sent the output of ffmpeg to /dev/null, so it’s not filling up the screen. The loop runs ffmpeg for each MP3 file, substituting the filename for $i in the command.

But here’s where I run into the problem I started this post about, because it runs one command at a time, and the whole thing took 29 minutes. How could I run them in parallel? Well, an easy way is to run them in the background, so the for loop won’t wait for each one to finish before starting the next. Like this:

for i in *.mp3; do (</dev/null ffmpeg -i $i -vn -sn -dn -af volume=10dB new/$i 2>/dev/null)&; done

The new thing here is that the & puts the ffmpeg command in the background. I give ffmpeg its input from /dev/null, because otherwise when you put it in the background, it stalls and complains because it’s watching for input from standard input (the keyboard, usually). I had to remove the time call because, since this puts the commands in the background, it finishes immediately. So I timed this manually, and it took a little over five minutes.

That’s a big improvement, but now there’s a new problem: I’m running 14 processes that can each use one CPU to its limit, but I only have 8 cores, so they’re having to share. That’s not a problem at this scale, because FreeBSD multitasks very well, and I didn’t have anything else important going. But what if I had a hundred, or a thousand files? Running that many ffmpeg processes in parallel could bring a machine to its knees.

So I’d really like to limit how many run at once, putting them into a queue so that one starts after another finishes, but a certain number can run at once. Now, there are programs that are designed to do just that, and I could install one of them and learn how to use it. But one thing I like about Unix is that, if you know the basic tools, you can put them together to do complicated tasks for unexpected tasks that come along. It’s like when you’re working on a car and the shop manual says, “You will need a door handle clasp removal tool to remove the door handle clasp.” Yeah, right. I’m not buying a tool that I’ll only use once. I have pliers and screwdrivers; I’ll get it off just fine, probably after some swearing and bloody knuckles.

So my inclination is to look first to the standard tools, and there’s one that fits the bill here: xargs. Xargs is a great program that takes a stream of text input and passes it to a program as arguments. I use it in combination with find every day in commands like this one that searches through a tree of files for a phrase:

find . -type f -print0 | xargs -0 grep phrase

But xargs also has a queuing ability, because you can tell it how many times it can run its argument at once. So I dropped the for loop (since xargs effectively does its own loop), and rewrote my command:

time (echo *.mp3 | xargs -n1 -I %% -P6  ffmpeg -i %% -vn -sn -dn -af volume=10dB new/%%  2>/dev/null)

I was able to bring back time, since this doesn’t background anything. The arguments to xargs tell it to take one argument from the pipe at a time (-n1), replace %% in the ffmpeg command with that argument (-I %%), and run up to 6 processes at a time (-P6). This took just over 7 minutes, and it never pushed the load average over about 6.5, which means I still had a CPU or two available for doing other work without getting slowed down. If I let it run 8 at a time, it might shave another minute off.

So in the final analysis, I got a 4-times speedup on the task, using very basic tools available on any *nix system, without any complicated programming effort. And I learned a little something about xargs in the process. Good deal.

My 750 Words a Day

I’ve been wanting to do more writing, but have had trouble getting in the habit. I got some inspiration recently, though, from a podcast series done by Mike Nelson of MST3K and Rifftrax fame, where he and a friend read and discussed Ready Player One, the best-selling book that’s being made into a movie. I haven’t read it, but based on the excerpts they shared, it sounds as if Tommy Wiseau (The Room) and James Nguyen (Birdemic: Shock and Horror) co-wrote a sci-fi novel. If something that bad can sell millions of copies, I have no excuse for not getting words on paper.

So I’m setting myself a requirement of 750 words per day, which I will be posting here. That seems to be a common limit people use. No particular topic for now, just whatever I can think of. If I can’t think of anything, I’ll write about how I can’t think of anything.

A tip I recall from Piers Anthony’s autobiography: when he was writing (with pencil and paper, back then) and got stuck, it was usually because his mind wandered to something else. So he would just put an open bracket and write about the other thing until his mind came back to his original story, then close the bracket and go on. When writing the final manuscript, he would skip the bracketed sections, but sometimes he would find ideas for other stories inside those brackets. Since I’m writing in org-mode, I can go one better: distracting ideas can be captured into separate tasks which will come up to be refiled later.

I’m always tempted to edit as I write. Most of my blog posts and other writing online are first and last drafts, except for spell-checking and very minor editing. Although I went to what was considered a good school, we really didn’t do much writing that I recall. Most papers were 500 words or so, which I could plan out in my head and then slap down on paper in one go; and I’m still writing that way, editing at the end of each sentence, or even mid-sentence. That’s not really very efficient, which is probably why it’s tiring and seems daunting to start. So I’m going to make myself just write and not try to edit on the fly. This writing isn’t for anything, so it doesn’t have to be perfect, and if I happen to write something with potential here, I can come back and edit and shine it up later.

I’m writing in org-mode, an organizer mode for Emacs that does a whole lot of other things. I should write more about org-mode itself, because it’s great. For this project, it’ll allow me to set a reminder which pops me right into this project. When I finish an article, I’ll hit C-c C-e H H to publish it right to my blog. It’ll be easy to search for ideas later, and it’s already set to back everything up with version control. I also have it on my phone, and though that’s not a practical place to write, I can capture topic ideas there and import them to my workstation later.

I’ve been assembling a list of ways to think of topics. One interesting idea comes from James Lileks. He found a box of old matchbooks that someone had collected from motels across the country. So he created a character called Joe Ohio, a traveling salesman. Each day he would pull out a matchbook and write for 30 minutes about Joe visiting that location. He came up with some pretty good stories, and was talking about turning it into a novel, though I don’t think that ever happened.

So ideas can come from anywhere, but they have to come from somewhere. I think I have enough ideas and ways to generate ideas that I shouldn’t have the “I can’t think of anything to write about” excuse. With gardening season coming up, there’s always that. I also need to write for some work projects, so I could do double-duty on some of those.

I did the podcast thing for a while last year, and I might get back to that when the weather warms up. It was nice to sit outside in the shade, away from my desk, for that. It’s probably not going to be my thing, though. To keep from outright rambling, I needed to have some kind of outline in place, much like I’d do in my head before writing a post, so it wasn’t the labor-saving exercise I thought it would be. It turns out talking into a microphone extemporaneously is a skill that requires practice, not something just anyone can do off-hand.

750 words is a lot of words, when you actually pay attention.

Starting Over

I’ve decided to revamp this site from scratch. I had built a very simple CMS based on Dancer, and it was fine, but I’ve been looking at static site generators and the possibility of creating my content in org-mode. I don’t really need dynamic content generation on the back-end, and I do everything else in org-mode anyway, so that seems like a better way to go. I’ll write more about it as I get familiar with it.

Quitting Facebook

I quit using Facebook a few months ago, when I wiped the app off my phone because it kept moving itself back to main memory and hogging it all. Normally I don’t announce when I’m going to stop using an online forum; I just stop. But in this case, it occurred to me that people might comment or post stuff on my timeline, and think I’m rudely ignoring them. I’m not, I’m just not seeing it. It’s not personal. Social media just isn’t my thing, and it’s becoming less my thing all the time. This isn’t a manifesto, and I’m not trying to start a boycott. I’m just out.

For keeping in touch with friends, I’m going to stick with the tried-and-true methods – you know, email and texting (maybe even phone and face-to-face, like in olden times). I won’t delete this account because it owns a couple of business pages that need to keep working. So I may still share links on it to things I write other places, in case anyone here is interested, but I won’t be following any comments on them.

And this is just fun:

New Year's Two Furnace Morning

Cold morning to start the year, -11 degrees when I went out to feed and water the beasts. Fired up both furnaces for a while to get things comfy for the day.

Podcast: DNS, Malware, Russia, Oh My

A bit of a tutorial on how DNS works to let computers find each other on the Internet, how that and some other clues told me Salon’s October Surprise article about a Trump/Russia server connection was bogus at first glance, new info that’s coming to light now, and what I think might really have happened to prompt that article. 31 minutes.

Click to listen or download: DNS, Malware, Russia, Oh My (34MB high quality audio)

Click to listen or download: DNS, Malware, Russia, Oh My (11MB low quality audio)

Latin Mass Propers

I’ve added a page containing many Latin Mass propers to the St. Rose web site, so I thought I’d link to it here as well.

I’ve been making the propers for St. Rose since it opened, so I’ve gradually accumulated a decent collection that covers all the Sundays, Holy Days, and some other feasts. (A “proper” is the prayers and readings in the Mass that change from day to day.) Haven’t needed to do a new one in a while. When I made them, I was often able to find samples online that I could cut-and-paste from, but sometimes they were scans that were full of typos, sometimes I’d have to get the Latin from one place and the English from another, and in a few cases I couldn’t find one and had to type it from scratch. So I thought it might be helpful to put them online for others who are in the same boat I was.

The English translations should be the same as the ones in the Baronius 1962 missal. I think I’ve proofread them all pretty well in both languages, but I’m sure there are still a few typos, so please let me know if you spot any.

I’m putting them on the St. Rose site instead of this personal one, since that seems like where they belong. There are instructions on the page with them, but in short: download the PDF if you just want to print it, but it will say “Saint Rose Latin Mass Proper” at the top. If you want to edit it or use it in your own materials, download the DOC or ODT version, which you can edit in Open Office or Libre Office, or possibly Microsoft Office (I’m not sure whether MS Office does ODT). Consider them public domain, and use the files or the text in them however it can help you.

Latin Rosary Card

This is a prayer card I designed back when I was teaching a Latin class, so I could give one to each student. I ran across the files recently and thought I might as well put them online where someone else might get some use from them. They have all the standard Rosary prayers in Latin: the Sign of the Cross, Apostles Creed, Our Father, Hail Mary, and Gloria.

If you download the two PDF files and print them on opposite sides of an 8.5x11 piece of paper or card stock, then cut on the cut lines, you’ll get three prayer cards a bit under 3x5 inches, a bit bigger than a standard holy card, but a good size to fit in a pocket. I had a printer do it and then laminate each card, which I think ended up costing about 70 cents per card. Pretty good deal.

PDF Side 1

PDF Side 2

I’m also putting up the original files I designed, in case someone wants to make changes before printing them. I created them in the open source desktop publishing program Scribus, so you’ll need that or something that knows that format.

Scribus File Side 1

Scribus File Side 2

Teaching

Wherein I talk a little about how I got into teaching and tutoring, and some ideas of where I might go with it in the future. This one gets kinda rambling and repetitive. I think I’m going to start making at least a simple outline, because not every topic inspires a solid stream of ideas. I started this one with a single word in mind – “teaching” – and it didn’t go so well.

Click to listen or download: Podcast #3: Teaching (14MB high quality audio)

Click to listen or download: Podcast #3: Teaching (5MB low quality audio)

Org-Mode: Return to Task Buffer When Closing Email

This is a small thing, but it’s been bugging me for a while, so I’m glad I finally took the time to find a solution.

When I read my email, I don’t respond to anything on the spot. Every message that requires a reply or any other action gets refiled as an org-mode task with a header, timestamp, and link to the message. When I’m finished going through mail and refiling everything that needs an action, I then go to my org-mode agenda, which shows those tasks, and clock each one in while I handle it. That way, the time I spend on each email is recorded, and I don’t get bogged down in the middle of checking email without knowing what else I have to do. If one of them needs priority over the others, I can tackle it first without worrying that unknown emergencies are waiting further down in my email.

Each of these tasks is saved with an underlined link directly to the message in Gnus, as in the following example. That’s very handy, since I can clock-in the task and then one keystroke gets me right back into the email, where I can reply or do whatever I need to do.

* NEXT Respond to Castalia House <books@castaliahouse.com> on NEW RELEASE: APPENDIX N: A Literary History of D&D
SCHEDULED: <2017-01-17 Tue>
[2017-01-17 Tue 10:01]
<u>Email from Castalia House: NEW RELEASE: APPENDIX N: A Lit</u>

The annoyance comes when exiting the email. Hitting ‘q’ to leave the summary buffer takes me back to the Gnus Group buffer, not back to the buffer containing the org-mode task I’m working on. In almost all cases, I want to return to that task to make notes and/or mark it done. I don’t need to go to the Group buffer, because I’m not in “email reading mode” now.

At first I thought I could add something to one of the hooks that runs when exiting a Gnus group. But both of the hooks, gnus-summary-exit-hook and gnus-group-exit-hook, run in gnus-summary-exit before the buffer is switched back to the Group buffer. No hooks run after that, and there’s no option to have it not switch to that buffer. So I would have to hack the function itself, which is a poor solution.

Then I remembered the “advice” ability of Emacs, to define a function to run after any other function, whether the first function has hooks for it or not. This worked nicely. A single line did the trick:

(defadvice gnus-summary-exit (after gnus-summary-exit-after activate) (bury-buffer))

What this does is to “bury” the Group buffer after gnus-summary-exit has returned to it. Burying a buffer just moves it to the bottom of the buffer list, which leaves the next buffer on top – in this case, the buffer I was in before I went into the email, which is the buffer containing the org-mode task. My cursor is even right where I left it in the task, ready to finish the action.

The only downside to this solution is that if I’m reading news in Gnus, each time I leave a group, it’s going to bury the Group buffer, and I’ll have to select it again. I almost never do that, though, so that’s not an issue for me.

Pepper

"[S]he lies in front of me curled up before the fire, as so many dogs must have lain before so many fires. I sit on one side of that hearth, as so many men must have sat by so many hearths. Somehow this creature has completed my manhood; somehow, I cannot explain why, a man ought to have a dog. A man ought to have six legs; those other four legs are part of him… [M]y dog knows I am a man, and you will not find the meaning of that word written in any book as clearly as it is written in [her] soul." – G.K. Chesterton

I got her as a puppy 16 years ago. I wasn’t looking for a dog; my new landlord was getting rid of extra puppies and offered one. We had dogs on the farm growing up, but she was the first dog that was mine. She was half coon hound and half Spitz, so she had the pointy ears and thick fur of a wolf from the Spitz side. My sister used to call her a dingo, and there was a definite resemblance.

She was so friendly and well-behaved that she gave me a reputation for being some kind of dog trainer, but the truth is I never really trained her at all. She just seemed to know what she was supposed to do, and to do the right thing almost all the time.

She wasn’t a surrogate child, or a “companion animal.” To call her a “best friend” would miss the point and sell her short. What she was was My Dog, the best dog I could have hoped for, with all the faithfulness and devotion you can possibly pack into that title. In the last several years, she went nearly everywhere with me, and always knew when I was headed for the car. Even when she got old enough that it was hard for her to jump in, she was there, ready to go wherever I was headed.

One time when I had her at the store, a lady came in, dropped to her knees, and started petting her. After a couple minutes, I noticed she was crying, and she sat there petting her for a long time. Finally she said something about how Pepper drew feelings out of her about a childhood pet of her own that she hadn’t felt in a long time.

When so many people exclaimed over how pretty and nice and happy she was, at first I figured that’s just what you say about anyone’s dog to be nice. But eventually I realized it was more than that; she really was something special.

She’s been mostly deaf for a few years, but I still talked to her all the time, only now I didn’t bother to speak up. It seemed like she understood my mumbled thoughts just as well as ever.

Today I buried her, in the shade out by the grotto of the Virgin Mary, so she’ll be near me when I sit out there and pray. I was crying when I put her in the ground, same as I’m crying now as I write this. We’ll miss you, Pepper. You were a good dog.

Written September 10, 2016. – Aaron Baugher

Using Jails with ZFS on FreeBSD - Part 1

For FreeBSD administrators, ZFS and jails combine to make virtualization easy, fast, and secure. A FreeBSD jail is a virtual machine which can only access the resources assigned to it when it was created, so its processes have no access to the rest of the machine. ZFS is an advanced filesystem that makes it very easy to create and destroy filesystems whenever they are needed. Together, they make it a matter of moments to create a new virtual system for testing, walling off network services, or other projects.

This article, Part 1, will walk you through setting up a host FreeBSD system to be ready for jails. Part 2 will cover creating a jail to run a network service. In the terminology I’ll use here, the “host” system is the main OS, which can control and look inside its jails. The “jailed” or “guest” system can only see what resources the host has assigned to it, and cannot see outside itself.

Create a ZFS pool (if necessary)

If you already have a ZFS pool on your system and want to put your jails in it, you can skip this step. This sets up a ZFS pool named zf on one or more hard drives, in which you will then create your ZFS filesystems. Depending on how many free drives you have available, use one of these commands, substituting in the device names for your drives:

zpool create zf /dev/ada2                             # one drive, no redundancy
zpool create zf mirror /dev/ada2 /dev/ada3            # two drives, mirrored
zpool create zf raidz  /dev/ada2 /dev/ada3 /dev/ada4  # 3+ drives, striped

Create and mount a filesystem for your jails

We will create one filesystem called zf/jail, mount it on /usr/jail, and give it the options we want all our jails to have. Then those options will be inherited by all filesystems created beneath it:

zfs create zf/jail
zfs set mountpoint=/usr/jail zf/jail
zfs set compression=on zf/jail

You probably want to turn on compression, unless you know you’re going to be storing mostly already-compressed files in the jail. You can also turn that on and off per-jail later, so use whatever you want as the default here.

If your pool has a single drive, you may also want to use what I call “poor man’s RAID,” by telling ZFS to store two copies of every file. If the drive fails entirely, you will still lose everything, so it’s not as good as multiple drives or a replacement for regular backups. But if individual sectors fail or there are occasional bit errors, ZFS will be able to repair a file by making a new copy based on the other good sector, so you might be able to get by until you’re ready to replace it. To turn on two copies:

zfs set copies=2 zf/jail

Now create a filesystem in which to build a fresh FreeBSD install. Give it a dotfile name, because you won’t actually be using this one as a live system, so that’s an easy way to keep it separate from them in scripts:

zfs create zf/jail/.freebsd-10x64

Unpack FreeBSD into the new jail

Go to your favorite FreeBSD mirror site and fetch the distribution files matching your architecture and the release you want to use. You can get your architecture with uname -p, and see your release with uname -r (dropping any -pX patchlevel from the end). In my case, my architecture is amd64 and my release is 10.2-RELEASE, so I fetched from ftp://ftp5.us.freebsd.org/pub/FreeBSD/releases/amd64/10.2-RELEASE.

You don’t need the kernel, ports, or doc archives, so grab the other four. (You probably don’t need games either, but it’s small.) Download them into somewhere handy. I put them in /root.

Unpack them into your new jail:

cd /usr/jail/.freebsd-10x64
tar -xJvf /root/base.txz
tar -xJvf /root/lib32.txz
tar -xJvf /root/src.txz
tar -xJvf /root/games.txz

Setup the fresh install

You need to copy a few things into your new FreeBSD install and setup a few things to make it a bootable OS of its own:

cp /etc/resolv.conf /usr/jail/.freebsd-10x64/etc/  # so the jail can do DNS

Edit /root/.profile and add this line, if you aren’t already defining and exporting ENV. The reason for this will appear later:

ENV=$HOME/.shrc ; export ENV

Now we’ll chroot into the filesystem, so that the following commands will treat the jailed filesystem as if it is the root filesystem. These are setup details that would normally be handled by the installer. The last line updates the guest OS with any available updates.

chroot /usr/jail/.freebsd-10x64

passwd               # (set the password for root in the jail)
mkdir /usr/ports
mkdir /usr/home
ln -s /usr/home /home
cd /etc/mail
make aliases
freebsd-update fetch install

Now edit /root/.shrc (still chrooted into the jailed filesystem) and add the following line, plus any other environment variables or aliases that you want to set when you run a shell within the jail. This will put JAIL:{hostname} in your command prompt later whenever you enter a jail as root, so you won’t get confused about whether you’re in the host or the guest. You don’t want to do a rm -rf * at some point, thinking you’re in the jail, and then realize you already exited and are wiping something out on the host.

PS1='JAIL:{\h} \$ '

Edit /etc/rc.conf and add a few lines to keep the jail from running things it doesn’t need to:

sendmail_enable="NONE"
syslogd_flags="-ss"
rpcbind_enable="NO"

Edit /etc/make.conf and add these lines. The important thing here is that we’re going to have each jail mount /usr/ports read-only from the host system, so all your jails don’t have to download and maintain their own copies of the ports tree. But since they won’t be able to write in /usr/ports, they need to download distfiles, build ports, and store packages somewhere local. If you don’t want them in /var, choose somewhere else, just not under /usr/ports.

WITH_PKGNG=yes
WRKDIRPREFIX=/var/ports
DISTDIR=/var/ports/distfiles
PACKAGES=/var/ports/packages
INDEXDIR=/usr/ports

Now run pkg once to setup the pkg directories, and ignore the error it spits out.

If there’s anything else you can think of that you want all your jails to have, go ahead and put it in place now. For instance, if you want a particular user account in every jail, create it now. When you’re ready, exit to get out of chroot and back to the full host.

Create a snapshot of this prepared FreeBSD image

Now that you have this fresh install of FreeBSD configured to your satisfaction and have exited back to the host, take a ZFS snapshot of its filesystem. You will clone this snapshot later to create individual jails. I name it “ready” to show that it is ready for cloning:

zfs snapshot zf/jail/.freebsd-10x64@ready

Setup the host to support jails

First enable jails:

echo jail_enable="YES" >>/etc/rc.conf

Now create /etc/jail.conf and add the following lines.

# file: /etc/jail.conf
# Defaults
exec.prestart = "/sbin/mount -t nullfs -o ro /usr/ports/ /usr/jail/$name/usr/ports";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.poststop = "/sbin/umount -f /usr/jail/$name/usr/ports";
exec.clean;
mount.devfs;
mount.fstab = "/etc/fstab.blank";
host.hostname = "$name.domain.com";   # replace 'domain.com' with your own
allow.nomount;
path = "/usr/jail/$name";

You’ll add a few lines here later when you create your first jail, but this sets up defaults for all your jails. To explain some of these lines: the jail commands replace $name in these settings with the name of a jail. The exec.prestart lines runs before the jail starts and mounts /usr/ports read-only so the jail can see it. The exec.poststop line likewise unmounts it when you stop the jail. It gives a blank fstab so the jailed OS won’t complain on boot. Set the hostname domain to whatever you like; the $name will match the jail name, which makes things easy.

Now create that empty fstab:

touch /etc/fstab.blank

Make jails!

Now your host system is ready to create all the jails you like! The first time you do all this, it may take a few hours, as you get things just the way you want them. With some experience, it can all be done in 30 minutes or so.

Coming up in Part 2: creating a jail to support a single network service.

(Hat-tip to Savagedlight, whose article on FreeBSD jails and ZFS clones was a major source of the procedure I’ve outlined here.)

My Public Key

For those who know what it is, here’s my public key. I’m going to start signing my email with it, so you can use it to verify me, and feel free to encrypt email to me with it. Contact me via any other channel you like to get my fingerprint to verify that it matches this, to make sure someone hasn’t compromised my web site and changed it.

It’s a bit longer than usual because it has a JPEG of my smilin’ mug encrypted in it, for another possible way to verify it.

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2

mQINBFXo1xIBEADSmHyHTslAUTqlfomN1Wu7uEKJjr5jQwyyO4kpy8RXunk6Zx3M
j4p3y0dZkDN8i8VbYs6pWI0luy1PzNEZEMdINHM3omRjo88p2mK4AD68MWQtiJVL
MEyhDi30wHEFfE+EoJW3uUhV8oFSLwNVDGVsLqIzILY84irr0F6iqE+omVcq3IOc
bsqJDcTF2WdFW2y4uaI7keD8ro2Ig4jKCw1mfogfBzilpfQnKyjzxzUrbcEkRfEt
TTiLeS76WfdtZNgOH5w5JaIN074TSBAko3eG0svYlWsVcCaaBIAFXpwMghkJH69Q
9L/DlN3T8XDyZJufOsMHz53nde44UCchXMxwwIL+BDu7+grsGArTQDRoy/jzpzbT
K4MjtjS+bWrYU4fMg9zjLPuGXK4MoHljhhK7SOty8UiVOGQ4820+B7y7BgOXdyMF
Nl92RI+9F3lkIqJkhkm0shJAK1r2NeYKU/Eabz+XGfRKMYzjEkXqBbHdAPYXN6rl
Kh0u4Oef4U5MGgpev7Xt/culD4ZFnV2dzuCK1eWDpRZlF+3BDdfyffept9fFqi4N
VLv4iu6HNf4hcD2Z9hSpsxQeCbMiOyHQnZHYFvX/mfp8H1SJhnYcNxXRJvYfDE1w
xb/bOEEotnhfv+ChV1qgOnqT4By0tmAX7HXqSMM6MqvjFcopmixE/CD48wARAQAB
tC5BYXJvbiBCYXVnaGVyIChNYXN0ZXIgS2V5KSA8YWFyb25AYmF1Z2hlci5iaXo+
iQI3BBMBCAAhAhsDAh4BAheABQJV6NldBQsJCAcDBRUKCQgLBRYCAwEAAAoJEODC
uFw8+wNC+6cP/3SeBEB7SjKbwys/H8RSxuMMx1TzU1KUoJnRiADXduEtkg7WdUpn
UhluV5M3P1q0mA1RW6Ul4+cG4tFn1Nr7fiYH/7xjGQaqsoL1WthDa6Wg6w1Aa12v
lHMFLE/Z6FMV4XThL7DP0oMHtpAYDZ0LOOUUjUFvR2Sh2mb1Dh528869fsfYR2B0
rbZlAqNLMOutOtUG/NaOgBvsl3dH8PUsRg7aQaVmD9KFP93eiHClwVQiBD9RcUWN
8o8+nA7Rtdu3xihHj614MytRJqrGxLXbSMo3gNPGErSTRhYUeifhl48G0ftI+6Ju
AvuYpv4qq8S8vf2pHQPYQc33qRa+peeb/jlLXJ8txqnV4/EMxFNMVocW1Z1QNQm5
pzZbSwTwWx5Jjf/Jc9sOv1vN+JMumiDGqn68w4F/U0gEUCoNkBm4E4WMCjXcxewy
JUid0DE9pEoQa9TqWAfXgO+S/aviYLnOljO6r2AJc4kwJT0Qk0TloTdaX4YodyF3
BufZRmFb+k6ro5VC9F2ucVctmH5UT/c++TAi9IBIdpCDz3/kgCszKJ7UctkRfgzt
q22ETbQzWb3KsozAMmEqAJpSeA45JJxTCkDYUGc84ps0hlWt4z4RbihiDBlnJhL7
P2fuPZmv6pNVgdvBE9zM+BGzpgd8e/DLeDmbsqL10UlyK1ItSeXW8iyV0cq1yrMB
EAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQEBAEgASAAA//4AE0NyZWF0ZWQg
d2l0aCBHSU1Q/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsL
DQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0L
DRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU
FBQU/8IAEQgAMgAyAwERAAIRAQMRAf/EABsAAAICAwEAAAAAAAAAAAAAAAUGBAcC
AwgB/8QAGgEAAgMBAQAAAAAAAAAAAAAAAAMBAgQFBv/aAAwDAQACEAMQAAABvTH2
UqNW3r+aZMtp4CAskK6R0ASXnWyER0bF3+WWgsAEUBYBl6zZBrociKh74pysCYEj
Qs1es6tcaXbktRoleiYOlLJ1si/j6NacxnV1k8pKuezvJ7ct0aUpWdkgH6Lc9QP0
llh4GhlMZiUpn//EACIQAAICAwABBAMAAAAAAAAAAAQFAQMAAgYSERQVFgcQE//a
AAgBAQABBQJ+5rSWqO12eNVz5lZADg7+gTO8w5a0M+ezoKAng/PjAc9jdnov0XGl
H3mBj+2inQqjHHTUqbPuAfyRvRhH60N1ylsW8qi0G+Dv005pe5ueDrKjtVqDUfTR
SYxa0LBt49or3yOxXzirYdozHJViLrgBKbPyEp2d8+ZzBDA6I9IFiaq+NH2tJT8p
cqUbk+Fv2u+bqukNtzTy8LdNZs5vWIPyY9Y2Hq3yBaYnP//EACgRAAEDAgQFBQEA
AAAAAAAAAAEAAgMEEQUSITEQEyAiUTJxgdHwQf/aAAgBAwEBPwHDqB+IkxRjXz4W
IYaMPi7tSTuh00NdLQS82JV+JS4gRnFgFh9EypzPedG/Tjv8Kqo6SFjza1vff+WF
tffqgqpacEM2PypqmWo9ZTqkNOW2v77UUnMbm6HPDLAoStJsnQsccxTGiMWvwsi0
jdOYH7p7GsOih7zbNlRgi5Ra1237Tg/fRTHtbwc+zgLK6v1FrTuFkb44f//EACYR
AAIBAwIGAgMAAAAAAAAAAAEDAgAEERIxEBMgISJBMlGh0fD/2gAIAQIBAT8BuHhG
CaS7nTpkIgdulyYujplVvbBGTnNOaY4FQYyRHVKAnvUYRhtUbcyGrPamw5ctPQtE
2gmPqp2rIAyPqlsbjRDvR1uPiNvrhmhIS2pTppzopLWNh5H79CktNq3xO/8AfirB
92pLkuwAT44znH7G/CG3ekDE58IL1LMs1isdUWTj8TXNZtqPD//EADEQAAIBAwIE
BAUCBwAAAAAAAAECAwQREgAhEyIxUQUQMkEUI3GBkWGxJCVCoaKy8P/aAAgBAQAG
PwKOaadliwPyVX1nTR06yLHFE8vDYevsNZyTxTLLDK+KLvCVH7aEUkBlMkYmjuVB
x5b+/cnVOSoihdZOQNe9mt20RUVKSeH1gf4MBbek9/e438uDUiWIrJikirvfpomB
JJS43lK4i3/HSLBSxLJVBsmwB6Mq9P6vVqiVo4JxfJU4SEIgtc3vynfpopwlRW+X
8sWIDbbdtU0EvDwpWWSFw4G49O3t5VqPTNL8LTCqNj15rW09EaQiZalKcXtzZD1D
6a8KaWgnzql/g+HJiS2QBS46ex18DHTvxGJLTHmJubE3+q2+2pKWSDKUEgR5eo3X
H85A6Vo/C0w3BcSCwt09v0/byEtVEzNjg2MjKHW97MAdxqCWMU5mSZpzIWLlZeUD
YOOv421RCSJSzIIkwlZuHYhiAb7G/wB9RzcJviXIZcsgG62a3Q++viqyZKZmItIz
47gEC351A0viZTisWtJIgEzH36ftt5GzNt+mqpqecZNHJdhe+9rX+mquepy4FPaU
iHK1r4dL73ZL6WWFZRcLieK23a3bWaRytUQPycIZdetxrwCOajqxAVRZLpfFb/4/
fVtNmMb99eKxYi7wEWkTIH7e+vEWn8Pjnllpki4MESRu3KMub6/66hVoSMh17aDC
hlalO4KxuSV2s9wLe/TR/lEykNjYnrvbt3/tpc7Z23x6X0l1Gn2Ho8rHcaF40Nth
ddA8JLjocfL/xAAjEAEBAAIDAQACAQUAAAAAAAABEQAhMUFRYRCRcYGhscHw/9oA
CAEBAAE/IdBfZlqSPUuPjWAbCUOC/vOO/VXSL9aN+5szRHyL4cw7CXkyPrfYtx08
69xjOQAXiPofQU/FVjLkBV1sY8X94kY1egL58d9vGdwczK1E7Zvr7lsh6YZNqQQL
cNJJsd5D7Km8AUbFU7o8QZzUn4dwNAJVLx1bnni0Aj/EiJ1T3BbmVvEyGhvdQ9Jg
KqhqdkbTYqb1EyrDW4MnGuS63zMMsxtgk5B/Sl08yZDS1rCBbccZKjL82hI3dOve
QDpWuqeTGjUOQxcdIoTlOjZP9ZJZcbaRPYP9HmAqhplPAupqOGvxtz7TK6pG93ym
cGT3DVcHC+v+oP0e3FciYCWg2oBdfcD61b0CQbSeY0aIokpdkDXTRxdYBDgIYAK+
cdYLWiId6XoPEwype8lJXTeeUPmadFak9l+f93htUFKxAhCRG6OGyRadTGeKq9bZ
84P7xPmDiSHJiwE0UPp+AYBCI95wzegYeYBT4gU8/wAH4//aAAwDAQACAAMAAAAQ
Hggk2sEgnOkEH8AkQHYpsggPn//EACQRAQACAgAFBQEBAAAAAAAAAAERIQAxEEFR
YXEggZGhsfDR/9oACAEDAQE/EDv2JbAL2c5jznJbAGgvRtWPAGJfTQiYhHSdHIxN
AP8AW8JsAk1M9Qg56ae2SkQhKyXKEqQWwRpmvUi5TIgGJiker8uRmsAAAAJiAgIl
+XELokidskfMHtfTGNkb5zpjofnoe5nCw2679/rGtTV+BD9/OmKLFZViV9oPg4KN
5BwicjunKDZrm/WFnWST2hr315xMJgBJbCFmUq5qi74IbJMkvmnh1Nc/7++8p6ys
g+2BshnwcP/EACMRAQABAwIHAQEAAAAAAAAAAAERACExQWEQIFFxgZHw0bH/2gAI
AQIBAT8Qk23kAMvfSmAWDp90pNBEjzy/HylwSdXQ6FR7efMXDHmjCZntjVWbduZ4
czeKxn9oSbkMxghn1Cb+aFwzjSM+X+8hPyZ+Z/KCgjKEYbWd7lIgIJsC2UWxpb6a
kGUGAoB7Y3XgBw1PTmKugE7D1uThu4qHFD3EQs2urF80bSiAqSEuYLzkekSzCxS4
rECsFwAsoomOBS1DWARc4QnGNPuvq18kicVLg8gMKGylLCoHd4f/xAAeEAEBAQAD
AAMBAQAAAAAAAAABESEAMVEQQWFxkf/aAAgBAQABPxBafmTrlOhXQjfrXyTo7oLB
DjV+DQsshElhdCW1H84B61iptAnEUAA8JqnuZV6glJUjvXDNSDACfVFWiMB+OvFd
egsdCggR0BfLDoFJR0Qi2k6w5pQGOjUahY9QTMAOVR1o5BEAvKXDmcRM0oJ3bQ4u
68/DtkkxPUBnwYoS0EUMVU94k6GwAiia0TU/05sWksmQJEo8WXA84wYupHYRCBeD
MgJAm3QDa8KPHCKhiFjYy9P1j8JsqT4C0BIUv5nHnwQKr0VRSFToj5a30AzPFoOG
/Ec/P7kkxoXeGqn+vsIQp7vTkekCow64RFyamPwxgVasOG64wh/IidhUm8WZ3uwZ
bKBJ7CWAGq+iwEofYw4k/wBUhHEuUyox6vE0pYQskpg0oGHJuwwLcOH16vcjHhM5
OddVB1ogjHkheErk0dj4goOVVS9zvmpCg6NBBBMkpSCYcFBVCPKWUUC70AkQhXYc
/wBnF0HZurLs50kUCnfMHzgGdF8+H/iDoHsT7OAE2JhUimE+jjYlEHGEMyYfw8+P
/9mJAjcEEwEIACECGwMCHgECF4AFAlXo2V0FCwkIBwMFFQoJCAsFFgIDAQAACgkQ
4MK4XDz7A0J8GQ//amz8UGvG8EMLM4UTMs9BH9lEqaMV+6+BeZ/tJfU/AqgWBOKO
fohyBq4tB3hqYtF4OIaStXhtmi+7qlaCGGlGqasDee+d6uCFG7xTaztKhFmUnEvQ
JyrMxZXaAg1mSzY4aSde3SoHL4+qTFZ7MsJREA3RGZb0KP+OA4tLkeXJZmk87TIH
oJtoXum/mzMEEkhrxVCcPzwiKCiGiESqfjd8WPdcjBU49CBw7PPOpkMxSGiWNzv2
fScORgvfI4ACa84qucXi23dqkDdS26A1DCbgmH4yXcDE5ttTEh7JXbNk7IDMvkrd
PJrYKJ2UWXMSYp3I/F704Nv52oOn81Z5r81da4beld8r/bxyrPl/kN/yOTAj92Yf
6UVPUCg+I34bT40GiIduyaClt90yiKgIGX87OmFteeRoDT3+6XnbGX41ylaXKPod
5fOZAot7zAwGpX1cDKRfR5O6dWqWwVFBac6gvWhpHhVy9pNg3OUkRDhJnFL+nneL
upDaWkalT3q22+69qfsyK8CF6zS+yJfn7TDFuBk73wGteATcLvl0ruKnrDsfOrFy
pusLOTgwFkOjmSOQrnu4J0ePyNTIxQJ3uvBNw7ZwuUVwZxoAPRkVxgUnLJgCKZN2
PGIBom+Z+qBxt50B4VUdfwEaEQHvQVOXty22IXzo2bqZLt/xfFQdEuZcqJW5Ag0E
VejXEgEQAMAt/m3nZirqmqIeejD2o3Dv/RUvPo2GvEoTc8Sh3p89nyyzJ1tbiQwL
51AwhqZ0L4T+yNZ2jZB5JVXi3xu1WFShcJiHq55Sr0Z/FdIYKzK8QRjRcBUFgWgU
Jm9sxug2r/uN3oKdrvizYyWMaIRsvTv7IEQ8988pPYrLTNGME9GpCSLH6N9HADxh
Gess9nrHrR1/kxVRjWS1pGoylDsyLngmlILFFww+HZZNpEQ4CDDX4HQL3OYu8mAX
il6AKeZF248u4N+O+8NxgSmng+Q85mvmxE9FadZRo7JSi/Gbf0PMK8JXm8CmK3Xu
JvuQYpr4q4E0QuF+1+FzJWAbValaQaO+Dl6cCmalQoS7pPaQFMRSovz4ap3ICKus
FbQstiAhJ0FpApybVrC7w8Hly9lE75y+tNzx9acuMK3fhtO8bkZoadLlXLdPZkNM
c7AzSxLdHStWXPANFf/r4OO5u0YU8fC5fFV0M1AL5nB6Ipn602zWIJ5oQAIeiFO6
J1OMOKPT7eLASvo0d9+1DwNdayu3b9Eg2yQ+ULv33WosrMrYKYZNEP4sJLI46AQY
MZmdG5DT8TKiaFDHqMwkmp9j8rws7x9ahUBQYYfmg/Or9H843lqRELMTlJ5V0CkD
qPk4gfh+/J6FqT6hj8mBEmZ4gX/UFyEmS0ry0nABWOTB+p8b34dNABEBAAGJAh8E
GAEIAAkFAlXo1xICGwwACgkQ4MK4XDz7A0JfTRAAxolmHayHw6Lkf+coyONfiqcY
m0qp6g83+Pvv39h4TGTwbGprScFEnveXH6/tPaKFKqu8rORSFPxz6vMA+rBvFgwG
tDiz3opzns0zxElkYAAXnm4Wwtj2IJ/sFdwlblnhX3oYvOlapwbA98+OxEiA8Tma
PkWdzQM6Q81xJJDB5pQNiOY+KLY9nyZKH5fbwxJW7DiKLWGC7crnyCU9k79cscbt
8KpZcH0F+6hby4fux1L87U/iTbkamXgE0XQiL+4xfKyk1vpblmVOrd7ZEIfZsYll
UrSmo048bf47eFj1ej6S6SZYs0TIAp3WIW62+eubihDGLBIiYq0UmB+P5U0zfLTO
isbqRYKGyBxQ98Eg2V+4uVL8mw58IwLDCThNahIaoSYZN7jx0IGunH+re+ZAF2bY
qbAGGQEvuuiQAukKxvhbXAP84afGub8BFfu+JEK/peZv+Ru70gFPspDpJAYNAhI4
hO/EXCV3QXdZA8yeEnHqw8Ru21KvOMaDbGbxUccbOtB46NP7YDRhOr1YFX48qmfO
dzeqDFN+nmjPfPxHr6nnWaVj7HWelM0YPyTh8ph6flmOyGdV98sWMy/ZhpAUzFp1
7Pe0X06/JC43O8PcCF1btEQkQuz+1Gt+GfgQvguzXL/zoxaq5m+23Hts1RrCHH9p
tCdhvFlbTeQC62/qt5G5Ag0EVejZpAEQAJ+A54iS70WgHJVDm1txqnB7x3wbd1PB
9VaDih/SvNlYyWp6AjBU9y+Bz4f+PVPK3Wvy/tMs6cRXDqAg5VcjFibRN7IHWI4o
mJppphHwhUUNF64NReCqbe2qbSNewymHBoDiaVFP5YEumGDhvHqpHcRTiB9Ku+Pm
VQfpMPLX6Kc31fUd9gTNgnM5UmMcpV4fjYohSh9VoHfE+Jwzp2oQUdyR3y3D3Sso
Q9L4IFu1rpigD0m9GVPq5KQTznCJV76arEpWxe6poEh8ymMFbD3+ZonNpFw+TOLu
r3IxCdgZfwzI+zO3XXLZiMctS7Q+7jzS1TnhB4q8sHR2bRcVj554UbMTTcLs76IV
Ft65Nu0s/yxjJ8Qj6QOlaaIisk724lGkIFNF/mwoMvfWL2RiGdaT8KX2z9ax8jGE
Qk/PeWQky9W2kRL5fZ42MOKlCdsgzrEtTXSEoqhqHP1LjyDYqbdEKkSTu00aY21l
564NlWP5snHhzldGZ8WvD1Im4Qvwh+ZBdDCIVFyx4dg0ruqXEcqB27FczumtNxQa
/w6dpXP5xBok4hy09fYBI7A6xb7GGHP+P09Y4z1Wjxsnt5Q/p7F2VTxTKMzwWb8x
66b7abUaztK2Y3O89FrZBmiF3s+7s65khrxlzpkeVkr7OUps0F5Z4W/5xDUZDe82
wYCJNBn6mHz3ABEBAAGJBD4EGAEIAAkFAlXo2aQCGwICKQkQ4MK4XDz7A0LBXSAE
GQEIAAYFAlXo2aQACgkQfk/mU/EVvQIOGQ/6Ai2xWhH/42DxIKYc1zY1rwZnY2Pg
urj5OYIdi9Cyj0HKuyRPpHu2hODXeDZKpBAgvFgBOwqJT35tNd1tX11ecwSmL9ex
X/euKoKIq8aysAllgqM42aaLAjncCihBaFC39KU7OxewZSQbCtcuJy8ST8WNivib
ionG+5DQ4CupD5SGJ0sTifqrYALp6mlMeN0kdavbeMtJHRRqyDi+qRVcGR/rkRcN
dUlxbWXgYHOrB2/3uPNr6cwr6ixQ+fkEl7qBDV0rSUWRg2R+D8XaL6zRvbiYYB6Z
9+pJFBbzdoi4u0ShEdi1wtAAXJ8WyClw7tJ02ys3GgmhdZEcstqpRyidTxyPwmLB
lEiWQUKA2f+C3oJ9xtKjEytdpV/jkDpRS/ZAMWaXgFaAS/W1P0ZcYmN6B5fqS6F9
Se1L1mn5I5DnqXrjQSHiqu5DHcRIH0Yp8xQbP3nPSatleH0X1mZggpCN3SahoK7c
wgAf9iv7kwgiOj2lsXqlY3kkXc/zy9IcnXI2BqsVB7dD2j3BUqrnXl1vVyNHQGz8
yCKC+mKtEfASgBZ1x8EYUdVtHVnJJwDdEh4i+/WASzN8V5XiFsieXUgd+/Rq5dBI
Sx5dP9urxJuaUolM3/XtqjGfROZtL4xLoCWGn5lzbmkwvglRqtM279kfsB/htKDN
J8lt6VRwc+5Jh57qlg//WkT8jWDFXd8KWJY1MLeBVz1eucavOxWb6DsSqdkNcYnp
v/NBjugIimM+CqaZddkscL7h0Mn9QlYLhuYaIt/GeAAi+XxOjw2qm4Vh3aYmbXUf
O1o941WoiV8gLPyeKEQdhhrmLL0SPy1w3fkOP/VL877zUhEQM90N1Nd2TiGdtx6S
XGjTWad4VuSDczbtEtWTQEMdytlaggJj6cbdfOgnDtTnL48IYF4MtMrojkS3Xd0L
1pPyl8rGhBu4UF5hIMeC5al8t/9dacH4KiVuvyvBYZskkDAxegsFBnPRTBPP4SEj
RiZuUz4FDURHR6tCzU2EZXs/KsFUDRAMmvUeRDXcq16PGMEAb+yCs8Ympy8mz+JI
5lSrCWWlhl5dxHmlddDclKRyUY9j811yTuXbIHHqvo/7NDjiFEFD8PPxj54zOUVP
miiEAMh7oo7Oax1IZeHMOJniQMIOrG5ee8J3tN396pcOxOODptcWIQkaHp1/NP3Z
9g+OeOPnW6wltJjZuyFC0o5nk7prwZSjWLQfboT17tYfr480rhXDhJryg0WAApFI
68Ajow0V4MTHXhvj/QLd/a+gtpCwkQi4z0mTd3Oxnv3TFZncyYaJBO+HTm6MBAtw
vGpL+7e1ufhyfhcr/z/YmoE+exUCaq/c1ElEwNiyk+lWprK4yXmV8x7pejugYS0=
=9srg
-----END PGP PUBLIC KEY BLOCK-----

Reaching for the Unix Toolchain

The first time I used the Unix shell, I was hooked. The idea of having all these little programs, each of which did one thing, and being able to chain them together to do more complicated things, made perfect sense. Coming from an 8-bit background, where you were always up against the limits of the machine and waiting for programs to load, keeping everything small and focused was great.

I still reach for the toolchain on my own systems on a daily basis. There are many times when I could reach for a language like Perl or C and write a complete application, but so many times that isn’t necessary – I just want to do one thing, one time, and do it right now with as little work as possible.

For instance: today I was going to listen to music on my MP3 player, but the plug is getting loose, so it wouldn’t play right. So I plugged it into the computer, mounted it, and figured I’d play the songs there. But I wanted to use the playlist from the unit, and shuffle the songs like it does, and the songs are in multiple directories.

Now, I’m sure that I could install a program like XMMS, and it would handle all that, but installing and learning it would take time, and it would mean running a full app to get at 1% of its features. That’s not very Unix-y. So here’s what I did. It’s an example of starting with one function and then adding tools to the chain until you’re finished.

First of all, after changing directory to the player’s MUSIC directory, the playlist is in “music.m3u”. The format of this file has one comment line at the top, and then each song is on its own line, with blank lines between each song. So the first thing I needed to do was just get the actual song lines. Since all the songs have an mp3 suffix, that was easy:

cat music.m3u | grep mp3

Okay, that gives me the list, but they’re in order. (I know, useless use of cat, but I reckon it makes it clearer what I’m doing.) To shuffle the list, I reach for the random utility:

cat music.m3u | grep mp3 | random -f - 1

Now I have a shuffled list of songs, so I need to loop through them and pass them to a program that will play them. First, I usually just loop and echo the lines to make sure that works:

for i in `cat music.m3u | grep mp3 | random -f - 1`; do echo $i; done

The backquotes there pass the output of my chain to the for loop, so it can loop through them. Uh oh, that shows a problem: by default, for breaks on all whitespace, and my songs have spaces in their names, so every word is being echoed on a separate line. That won’t work, so I need to tell for to break only on newlines. I do that by setting the IFS environment variable:

IFS="
"; for i in `cat music.m3u | grep mp3 | random -f - 1`; do echo $i; done

Great, now it’s seeing one song each time through the loop and putting it in $i. So now I add my MP3 playing program:

IFS="
"; for i in `cat music.m3u | grep mp3 | random -f - 1`; do mpg321 "$i"; done

I put quotes around $i so that mpg321 will see the filename as one argument as well. But now I’ve discovered one more problem that I didn’t notice before: the filenames in the playlist use backslashes between directory and filenames, rather than the forward slashes that my system uses. So I need to insert a command to change those:

IFS="
"; for i in `cat music.m3u | grep mp3 | random -f - 1 | sed 's/\\\\/\\//g'`; do mpg321 "$i"; done

Here’s the deal with that sed command. The first four backslashes end up being seen by sed as a single literal backslash to be replaced, because the shell evaulates each pair as a single escaped backslash, then sed does the same. The second pair of backslashes are turned into a single literal backslash by the shell, and then sed uses that to escape the forward slash that follows. The result is to replace each backslash in the line with a forward slash.

Now it works, but there’s one small issue: it’s hard to kill out of it. Killing the current mpg321 process allows the loop to continue and start the next one. If I keep pressing Control-C, it just keeps killing the mpg321 processes, not the for loop itself. So let’s add a one-second sleep after each song, so I can Control-C twice: once to kill the song, then again to kill the loop while it’s sleeping:

IFS="
"; for i in `cat music.m3u | grep mp3 | random -f - 1 | sed 's/\\\\/\\//g'` ; do mpg321 "$i"; sleep 1; done

And that’s it! It took me maybe 3 minutes to hack it together; I didn’t even sit down. Now, if I were doing this for pay, or as a program I expected to use on a regular basis, there are a lot of things I’d add, and I’d probably redo it as a single program. I’d want a cleaner exit method. I’d want it to handle non-MP3 files. I’d want it to deal more gracefully with unusual filenames – this will choke on a file that actually has a backslash in the name, for instance (which is very unlikely, but possible). If others were using it, I might write my own randomizer, in case their system doesn’t have ‘random’ installed, and I’d want it to ask them what audio player to use. There would be lots of ways to nice it up.

But in this case, just wanting to get the music started so I could get back to what I was doing, this was the best solution. And that’s often the case with sysadmin work: someone says, “Can you tell me what email came in at 7:45:03 last night?” I could write a program to let the client enter a time and see a report of emails from that time – or I could just toss together a pipeline of a few commands and answer the question. You have to know when it makes more sense to build something more complete and lasting, but many times the best solution is the quickest one using the tools at hand.

FreeBSD Administration

I’ve been doing FreeBSD sysadmin work and using it on my own systems since about 1998. I like its no-nonsene, professional attitude and the simplicity and openness of its licensing. I can build the kernel and OS from source (though that’s not necessary as often as it used to be). Other skills:

  • System and security updates
  • Security auditing
  • Installing and configuring ports
  • Networks (including wireless) and firewalls
  • Installing and administering services (web, email, etc.)
  • Backup and restore
  • Scripting admin tasks
  • Data mining of log files
  • Kernel tuning (sysctl)
  • RAID (using arrays of hard drives for redundancy)

I am also the maintainer for the games/xlogical port (a port of the classic 8-bit game), and I’m looking for other opportunties to contribute to ports.

If you need a regular FreeBSD sysadmin or help with any emergency problem, please contact me at aaron.baugher@gmail.com.

Saving Blog Comments in Org-Mode with Clocking

After using </emacs/org-mode/saving-blog-comments-in-org|my mix of edit-server and org-capture for blog comments> for a while (see that page for instructions on setting up the org-mode template), I realized I’d like to have org-mode clock the time I spend commenting on blogs. I already have a ‘Reading Blogs’ task that I clock in for that, but it’d be nice to clock commenting separately, since that’s creating content. Plus, org-mode’s clocking is so nice that I like to use it as well as possible.

At first I wasn’t sure how to do it, though. Org-capture has clocking built-in, but I couldn’t use that, because I’m not editing in the org-capture buffer. Editing the comment is done in an edit-server buffer, then passed to org-capture. So clocking in the org-capture buffer would only count the split-second it takes to file the task.

I dug through the source of both edit-server.el and org-capture.el, looking for a way to tie the two together. I thought I might be able to get edit-server.el to do the clocking itself. Then I thought maybe edit-server.el could pass the text on to be edited in the org-capture buffer, which could then send it back to edit-server to be sent back to the browser. I think either of those would be doable, but they’d require hacking on the source of one or both modes, which I wanted to avoid if possible.

Then I had a new thought: I don’t actually need to clock the individual comments. In fact, I’d rather not break it down that fine; I just want to keep track of time spent on blog commenting in general. That gave me the answer: create a new task called ‘Blog Commenting’, and clock that task in while I’m working in the edit-server buffer, and clock out that task when I exit it. That turned out to be fairly easy to do.

First, I needed the ‘Blog Commenting’ task, and a way to clock it in from anywhere else in Emacs. I created it as a task in comments.org, above the datetree section, and gave it a unique ID property with org-id-get-create (creates an ID for the current task if one doesn’t already exist). That gave me this (your ID value will be different):

* NEXT Blog Commenting
:PROPERTIES:
:ID:       0312e0bf-6c55-4657-b2aa-5d92817d4d3f
:END:

Now I need to add a function to the hook that edit-server runs when starting an edit buffer on a new comment. This code in my .emacs does that. org-id-find returns a marker to the task containing the ID I just created in the Blog Commenting task (and copy-pasted to this code), and org-with-point-at runs org-clock-in on that task:

(defun ajb/clock-in-blog-commenting-task ()
  "Clock in the special commenting task while editing a blog comment
via edit-server."
  (org-with-point-at (org-id-find "0312e0bf-6c55-4657-b2aa-5d92817d4d3f" 'marker)
    (org-clock-in)))
(add-hook 'edit-server-start-hook 'ajb/clock-in-blog-commenting-task)

Now to clock-out the task when I close the buffer. I just needed to add two lines to the function I’d already written, but here’s the whole thing for simplicity’s sake, again from my .emacs:

(defun ajb/save-edit-server-buffer ()
  "Save the edit-server buffer as an org-mode entry via org-capture
   when it is saved with C-c C-c.
   Should be called from edit-server-done-hook."
  (when (not (string-match "edit-server" (buffer-name)))
    (goto-char (point-min))
    (insert (buffer-name) "\n")
    (mark-whole-buffer)
    (org-capture nil "e")
    (goto-char (point-min))
    (kill-line 1)
    (if (equal org-clock-current-task "Blog Commenting")
        (org-clock-out))))
(add-hook 'edit-server-done-hook 'ajb/save-edit-server-buffer)

The new part is the if statement near the end. I have it check to make sure the current task is the Blog Commenting task before clocking out of it. That way, if I’ve already closed the task, or if I’ve switched to some other task in the middle of writing a comment, I won’t be clocking-out of some other task without meaning to.

It works just like it did before, except now I have a running total of how much time I spend writing blog comments, which can be included in my daily/weekly/monthly time reports and other stats. I look forward to seeing how much time I spend writing comments, compared to reading blogs and other work-related activities.

If you have questions or need help getting this working, please contact me.

Org-Mode: Saving Blog Comments

Update: I added clocking as a feature later.

I like to save my blog comments and other things I post to the web, for a couple reasons. First, once in a while a comment form fails, especially at sites like Blogspot. You spend 20 minutes writing and proofreading a comment, press the submit button, and poof – an error page and your comment is lost. So saving them provides a backup. But I also like to keep them in case I want to refer back to something I wrote later. Back in the days of Usenet and mailing lists, it was just standard to save outgoing copies of everything. But on the web, it’s rare for a site to have that kind of functionality, and it can be difficult to track a comment down with a web search if you can’t remember the exact wording – and there’s always the chance a site will go away.

So for a few years now, I’ve been using an extension for Chromium called <https://chrome.google.com/webstore/detail/comment-save/ndmcbhmmonjkclhmeidccodfhlifmmco|Comment Save>. It’s supposed to save everything you submit in a textarea (the standard multi-line text field). There are some problems with it, though. It’s flaky – sometimes when I go looking for a comment, it doesn’t have it. It also doesn’t seem to work with some of the sites where I post frequently. It’s also only for Chromium/Chrome, and I’d like to shift to Qupzilla for most of my browsing.

I didn’t see any promising alternatives, so I started thinking about other ways to do it. I use another extension called <http://www.emacswiki.org/emacs/Edit_with_Emacs|Edit with Emacs>, which allows you to use Emacs to edit textarea fields. It puts a button next to each textarea, and when you press it, the textarea’s contents pop up in an emacs buffer (via a small daemon called edit-server). You edit it there, save it with C-c C-c, and the edited text appears back in the textarea in Chromium. It works pretty nicely, and editing in Emacs is much nicer than editing in a standard text box, but I haven’t used it much up to now.

So I started thinking: when I hit C-c C-c to tell edit-server to send the new text back to Chromium, surely I could hack into that code to have it save the buffer to a file. Sure enough, edit-server even provides a hook, edit-server-done-hook, which runs at that point. So I started thinking about how I would arrange the saved comments into a file tree, perhaps arranged by URL/year/month/day, or something like that. Then it hit me – why not save them into org-mode? It already has journal-style capture functionality, with the ability to save entries by date. Then instead of having them scattered through a bunch of files, I’ll have them all arranged in org-mode where I can use familiar tools to search them, back them up, and do whatever else might come to mind.

This sounded very promising, so I got to work. First, I needed a capture template for capturing these entries into a date-arranged tree. I added this to the list in org-capture-templates:

("e" "Edit with Emacs" entry (file+datetree "~/work/org/comments.org")
  "* %U\n%i\n\n" :immediate-finish t)

Here’s what the elements in that template do:

“e” The key that org-capture will use to specify this template.
“Edit with Emacs” A description for this template.
entry The type, in this case a normal org-mode entry with a headline.
file+datetree The entry will go in a file, specified by the next argument, arranged in a date-tree.
“~/work/org/comments.org” The file into which the entries will be captured.
“* %U\n%i\n\n” The actual template. This one says the entry has a headline (the *), the %U is replaced with a date-time stamp, and %i is replaced with the edited text buffer contents. Each \n is a newline.
:immediate-finish t Don’t clock in a task or prompt me for anything, just capture it and save it.

In the comments.org file, org-capture will automatically create the necessary date-tree outline sections. So if I save a comment today, it will be filed under an outline showing the year, month, and day, with its own date/time-stamp (%U), like this:

* 2015
** 2015-06 June
*** 2015-06-08 Monday
**** [2015-06-08 Mon 21:12]
     A test comment.

Now I just need the code to hook into edit-server and pass the edited buffer contents to this capture template. Here’s the code I added to my .emacs:

(defun ajb/save-edit-server-buffer ()
  "Save the edit-server buffer as an org-mode entry via org-capture
   when it is saved with C-c C-c.
   Should be called from edit-server-done-hook."
  (when (not (string-match "edit-server" (buffer-name)))
    (goto-char (point-min))
    (insert (buffer-name) "\n")
    (mark-whole-buffer)
    (org-capture nil "e")
    (goto-char (point-min))
    (kill-line 1)))

(add-hook 'edit-server-done-hook 'ajb/save-edit-server-buffer)

It’s fairly straightforward, but it took a while to work out the bugs. First, for some reason, the hook gets called twice – once on a buffer named for the web site where the text came from (like “blogspot.com”), then again for a buffer called " edit-server-343434", where the number at the end keeps changing. I’m not sure why it does that, but the (when line handles that by ignoring the buffer with “edit-server” in the name.

The rest is pretty simple. It goes to the beginning of the buffer (goto-char (point-min)), and inserts the name of the buffer and a newline there. I did that so I have the name of the site where the comment came from saved at the beginning of it. It only gives the domain. It might be nice to have the full URL to the page, so I may come back later and see if edit-server has access to that information. But at least this way I know what the comment was about, and I can do a site: search if I need to track down the specific page.

Next it marks the whole buffer for processing by org-capture, which it calls specifying the “e” template that I setup earlier. This is where the actual capture happens, and the buffer is saved in comments.org, in the right spot in the date-tree outline.

Next it goes to the beginning of the buffer again, and removes the first line (kill-line 1), which contains the buffer-name that I wrote there earlier. That way the buffer name is saved to comments.org, but doesn’t show up over in Chromium. In other words, it restores the buffer to the contents it had when the hook was called.

Then the function ends, so edit-server moves on and sends the contents of the buffer back over to Chromium, where I can post it or whatever.

I’ve tested it a bit, and it works nicely. As I mentioned, I’ll probably try to get the full URL instead of just the buffer-name, if possible. Other than that, I can’t think of any improvements right now, but something may come to me as I use it for a while. The main thing I’ll have to get used to is using Edit with Emacs for all my posting, and not typing quick comments in directly if I want to save them.

I’m still hoping to switch to Qupzilla for more of my browsing, and I don’t think there’s an Edit with Emacs extension for it, so as a future project I may need to port that over to it.

Update: I added clocking as a feature here.

Org-Mode: Returning to Previous Task on Clock-out

I’ve been getting into http://orgmode.org|org-mode over the last couple years, using it to organize my work and as many other things as possible. Org-mode is an organizer (and much more) that runs in Emacs, which I use for many other things, so it’s a great fit. I owe a great deal of thanks to <http://doc.norang.ca/org-mode.html|Bernt Hansen, who put his complete org-mode configuration> online with detailed explanation and instructions. He uses it in a very http://gettingthingsdone.com|GTD-style way, which is exactly what I wanted, so I cut-and-pasted much of his base configuration at first, but since then I’ve done some tinkering of my own.

One of the great features of org-mode is clocking. I can clock into any task with C-c C-x C-i (or hitting I on it in the agenda), and then org-mode logs the time I spend on that task until I clock out, either with C-c C-x C-o (or O in the agenda) or by marking the task DONE. Each task has a LOGBOOK which collects all the time spent on it, so I can print invoices, productivity reports, or anything else I want out of that data.

Thanks to some of Bernt’s customizations, once I punch in to start the day, org-mode is always clocking something until I punch out. Anytime I clock-out of one task, it switches to clocking something else, so my time is always accounted for somewhere.

But which task should it switch to? In Bernt’s configuration, when you close one task, it switches to that task’s parent. To explain what a parent task is, here’s a very simplified example org-mode file:

* Garden
** TODO Plant Vegetables
*** NEXT Peas
*** TODO Beans
*** TODO Corn

* Blogging
** TODO Write a post on clocking in org-mode

* TODO Write Novel
** NEXT Write outline
** TODO Write preface
** TODO Write chapter 1
** TODO Write chapter 2

Org-mode is based on an outline type of format. Every line starting with one or more asterisks is a heading, and the number of asterisks determines the level. Here there are three top-level (1 asterisk) headings, and each one has some sub-headings. So “Garden” is the parent of “Plant Vegetables,” which is the parent of “Peas,” “Beans,” and “Corn.” Likewise, “Write Novel” is the parent of “Write outline,” “Write preface,” and so on. (If you’re curious about what TODO and NEXT mean, they both signify tasks that are waiting for me to act on them. The difference is that NEXT tasks are the next one I intend to do for their project, and they shouldn’t have to wait on any other tasks.)

In Bernt’s configuration, when you close one task, the clock switches to that task’s parent. If I’m working on my novel, that might make sense. When I finish the outline, I mark that task done, and the clock switches to its parent, “Write Novel.” I still have some more time to write, so I move down and clock into “Write preface” and continue writing. All the time gets clocked into either one of the sub-tasks or the parent.

However, that doesn’t work so well when I’m not likely to move right from one sub-task to another, which is usually the case for me. For instance, let’s say I’m working on this blog post, so I have that task clocked in. I hear thunder outside, and realize I should run out and plant my peas before the rain starts. I quickly clock into “Peas” (which clocks me out of the blogging task), and run out to plant them. When I come back in and mark “Peas” DONE, I don’t want it to switch to the parent task “Plant Vegetables.” I want it to switch back to the blogging task I was working on before.

I find that that’s usually the way my work-flow goes. I can do that manually with a few keystrokes, but it’d be nicer to have it happen automatically, and not have that few moments clocked into a task I didn’t intend. So I tracked this functionality down to the bh/clock-out-maybe function. Here’s the original:

(defun bh/clock-out-maybe ()
  (when (and bh/keep-clock-running
             (not org-clock-clocking-in)
             (marker-buffer org-clock-default-task)
             (not org-clock-resolving-clocks-due-to-idleness))
    (bh/clock-in-parent-task)))

This checks a few things, and if they all are true, it clocks in the parent task. So I want it to clock in the previously clocked task instead. I changed it to this:

(defun bh/clock-out-maybe ()
  (when (and bh/keep-clock-running
             (not org-clock-clocking-in)
             (marker-buffer org-clock-default-task)
             (not org-clock-resolving-clocks-due-to-idleness))
    (if (marker-buffer org-clock-interrupted-task)
        (org-with-point-at org-clock-interrupted-task
          (org-clock-in))
      (bh/clock-in-parent-task))))

As you can see, it’s not a huge change. When it runs, it first checks to see if there’s a marker for a task that was interrupted by the current task, which org-mode handily keeps track of. If there is, it switches to that mark and clocks in there. If there’s not – if the current task is my first task of the day, for instance – then it uses the previous behavior of switching to the parent. Either way, the clock keeps running.

This works better for me, and I also like the fact that it better matches the way org-mode’s capture mode works, which also switches back to the interrupted task after capturing something. Although it’s a very small change code-wise, it taught me a lot about the internals of org-mode as I tracked this down.

Dactylic Hexameter

I made the mistake of telling the kids that their recent literature assignment might be more difficult than anything of the sort that I had to do in school. That gave them an opening to insist that it was impossible, and challenge me to prove that it wasn’t by doing it myself. Oops.

The assignment was to write a 25-line poem in dactylic hexameter, the verse-form the Iliad was written in. “Dactylic” means the rhythm uses sets of three syllables with the first one stressed, so it goes DA-da-da-DA-da-da, like a waltz. “Hexameter” means there are six of those DA-da-da sets in each line, though Homer apparently cheated a little and ended some lines a syllable or three early. Fortunately, it doesn’t also have to rhyme.

So I threw one together to show them it could be done. Since it’s only the second or third poem that I’ve ever written of my own free will, I thought I might as well put it up here for posterity. I don’t think it’s too bad, for 9th grade work. I cheat a little in spots (is “girl” one syllable or two? Here it’s both!) but not too much. I’m especially proud of the fact that I worked a Homeric simile into it.

So if you have a Kolbe Greek Literature student who thinks this assignment is too hard, feel free to show him this as proof that it can be done. If you are a Kolbe Greek Literature student and you decide to steal this, let me know what kind of grade you get.

A
boy and a girl ran swiftly and lightly like deer through the heather; stars
twinkled above, ancient lights in the distance, each marking their footsteps; like
water o'er rocks in a swift-rushing stream when the spring rains come falling,
babbling and bubbling along in the sunlight with fishes below, so the
boy and the girl ran freely there chasing and chased without care. At a
hilltop at dawn a sight caught their attention: a cloud with a sinister
look was on-rushing toward them from peaks in the misty horizon. We
must get to shelter, they said to each other, so there we'll be safe. But their
chasing and fleeing and laughing had taken them far from their homes. As the
cloud came 'ere nearer they saw cloaked beneath it dire creatures of lore marching
swiftly and steadily forward toward them equipped as for war.

Above the cloud fearsome and giant beasts glided in circles a-shrieking. A
coldness came over the boy and the girl as they stood and considered their
doom that approached them too massive and wide to be fled or avoided. The
boy held the girl, wanting only to save them but offering comfort. They
prayed as she trembled against him but stood on that hill with him bravely. Then
off in the distance a horn they heard sounding -- the horn of a hero. It
blared two more times, then through mists came descending great steeds breathing fire. On their
backs they bore warriors all armored in light like the stars only more. Their
swords as they drew them forth thundered like lightning with strikes from the heavens.

Onward and downward they plunged t'ward the darkness, their battle cry shaking the earth. The
boy and the girl stood watching the fight as the warriors of light charged in,
prayers on their lips for the vict'ry of light as they witnessed the struggle. A
long time the forces of light and the cloud met and clashed in that place but the
boy and the girl heard the horn sound again as the cloud's troops retreated; the
sun reemerged as the warriors of light swept back into the sky. As they
passed out of sight through a gleam in the sunlight the last turned a moment;
before he departed the boy and the girl heard this call: "Thanks for helping."

Avoiding robots.txt in wget

I occasionally use the wget utility with the -m option to download a mirror of an entire website. This is very handy, but wget respects the robots.txt file, so it won’t mirror a site if robots.txt disallows it.

Obviously, you should respect the downloading restrictions of other sites, but there are times when you have a valid reason to ignore them (when it’s your site, for instance, but you don’t want to change robots.txt on a live site). In that case, here’s what you do: First run wget with the -m option. It will download the robots.txt file and then quit. Now edit the robots.txt file, change it to Allow instead of Disallow where necessary, and save it. Now change the permissions on that file to 444. Now run your wget -m command again.

On the second run, the permissions change will prevent wget from overwriting the robots.txt file with the version that disallows it, and it will go on happily mirroring the rest of the site.

Here is the sequence of commands (replace vi with your editor of choice):

wget -m http://www.mysite.com/
vi www.mysite.com/robots.txt (edit and save)
chmod 444 www.mysite.com/robots.txt
wget -m http://www.mysite.com/

How to Treat Your Introvert

I ran across this link called How to Care for Introverts today and realized I’ve never written about being an introvert, although I’ve mentioned it in passing a couple times. That link goes to a very crummy scanned image, so I thought I’d type it in here, and then add my own thoughts.

First of all, for those who don’t know what an introvert is, the best definition I know is: “someone for whom spending time with other people is tiring.” An extrovert is just the opposite: someone who gets a charge from being around people, who finds long periods alone boring and tiring. An introvert expends energy in dealing with other people, and needs downtime alone to recharge from it. There are other aspects to it, but that’s the main difference.

It doesn’t matter whether we have fun and like the people at the party, either, which is the part extroverts usually have trouble understanding. One time I mentioned to someone how I wasn’t looking forward to a string of family Christmas parties one right after the other, and she asked, “Why, don’t you like your family?” She couldn’t understand how going to a fun party with people I really like could wear me out. If anything, those occasions are the most tiring of all, because instead of sitting in the corner and waiting for it to be over, I actually talk to people and get involved, which takes more energy.

Being introverted isn’t the same thing as being shy, although there are certainly shy introverts. I was very shy as a kid, and I’m much less so now, but I’m just as introverted as ever. I think shyness is partly about fear, while introversion is simply about energy and what increases or decreases it for you.

So, here’s the list from the link. Some of these seem to assume you’re in charge of the person, so they mostly apply to the parents of introverted kids, but others could apply to anyone.

  • Respect their need for privacy.
  • Never embarrass them in public.
  • Reprimand them privately.
  • Teach them new skills privately rather than in public.

I never thought of this as an introvert thing, but I do like my privacy. Being embarrassed in public doesn’t bother me as much now, but it certainly did when I was a kid. I don’t mind opening up to a certain extent now, but there’s a limit. I also definitely prefer to learn things in private, rather than stumbling through them in public. (Like spending a year learning to play bridge before playing with people.)

  • Let them observe first in new situations.
  • Give them time to think. Don’t demand instant answers.
  • Don’t interrupt them.
  • Give them advanced notice of expected changes in their lives.
  • Give them 15-minute warnings to finish whatever they are doing before calling them to dinner or moving on to the next activity.

This kind of makes us sound slow, which isn’t the point. It’s just that we like to think before we speak, observe before acting. Introverts rarely blurt things out, and when we do, we often regret it. When I’m in a normal conversation, I don’t say anything without thinking over the sentence to myself first, considering how it will be received, and editing until I’m happy with it. That takes time.

This also makes me think that constant multitasking isn’t a good plan for introverts, and I see that in my own work. When I’m working on project A and getting instant messages about project B and a phone call comes about project C, I tend to not be very productive at any of them for a while. If you’re smart and good at what you do, you can cover for that to some extent, but there’s no way to be as productive as if you could focus on one thing for a few hours. I never thought of that as an introvert thing either, but it makes sense, since each new interruption requires a complete shift of thinking so the introvert can focus on the new thing before acting on it.

That 15-minute warning before switching tasks sounds really good. Maybe I should try to implement that with my work schedule, setting a 15-minute warning alarm that goes off before each appointment or task on my schedule.

  • Enable them to find one best friend who has similar interests and abilities, encourage this relationship even if the friend moves.
  • Do not push them to make lots of friends.

I’d certainly agree with the second one. Introverts take conversations slowly, and a friendship is essentially an extended and complicated conversation. Since conversations require energy, having lots of friends would wear us out and not leave enough time to recharge. It probably is better for us to have one very good friend than a bunch of casual ones, and we’re okay with long-distance friends because we can get away from them when we need time alone.

  • Respect their introversion. Don’t try to remake them into extroverts.

This is the biggest one. I’m sure every introvert has been told at least once to “open up,” as if it’s a personality defect we need to get over, like swearing too much. I’m so glad my parents never pushed that way; an introvert with extroverted parents who didn’t understand would have a rough time. Telling an introvert to “open up” is like telling someone with bad knees to run a marathon: it’ll be painful and won’t help.

Now for one of my own:

  • When an introvert isn’t talking, it doesn’t mean he’s mad about something or doesn’t like you. An introvert enjoys companionable silence.

If I had a nickel for every time someone asked me what was wrong just because I was being quiet, I’d be a rich man. If I don’t talk for a while, it could mean I’m thinking about what to say, or I just don’t have anything to say. An introvert won’t just babble to fill silence, so sometimes that leaves lulls in the conversation that make extroverts nervous.

All this might make it seem like introverts are natural hermits who don’t like people, but that’s not the case at all. When I lived by myself in Barry, I’d find an excuse to go to the store or somewhere every couple days, for the human contact. I didn’t need a lot of it, but I did need it, just in small doses on my terms.

Latin Mass Walk-Through

We had some new people at the 8:00 Mass this Sunday, and I discovered afterward that we’re not doing a very good job of helping newbies get started and follow along. After you’ve been going a while, it’s easy to forget how confusing it was the first time, but it doesn’t have to be that way if people are helped a little. So for people who are thinking about joining us at St. Rose, here’s a step-by-step guide that I hope will prevent some confusion.

I’m writing about the Low Mass here, since it’s the one I attend at 8:00am every Sunday, and it’s also the form used on other days of the week. The High Mass at 11:00am Sunday and some holy days is different because the choir sings the responses and some other things, and there’s more going on. The Low Mass is easier to follow your first time, since it’s all spoken rather than sung. Maybe I’ll do another walk-through on the High Mass sometime.

When you enter the church on Sunday, there should be a holder attached to the wall next to the doors, containing bulletins and the proper of the Mass. Be sure to grab both, because the proper has the readings and prayers that are particular to that Sunday. More on that below. There are other things on the tables in the vestibule that you dont need for Mass but you might want to check out afterwards, like prayer cards and the FSSP newsletter.

When you enter the actual church, try to be as quiet as possible. There will usually be people praying before and after Mass, and they’ll appreciate the silence. You’ll probably want to sit in the back half so you can see when people do sit and kneel and so on. Rosary starts about twenty minutes before Mass, and Father hears Confessions for about thirty minutes before Mass. The confessionals are at the very back of church behind the pews to the left and right.

In the pew, you’ll find a Sunday missal with a red cover. This has all the prayers that are the same at each Mass, plus instructions and some commentary about what different things mean. Together with the proper, this gives you all the prayers and readings that will be used during the Mass. The Low Mass starts on pages 10-11 of the missal, and each pair of pages has the prayers in Latin and English. It also tells you when the priest moves to one side or the other and when the servers ring the bells, so there are a lot of cues in case you can’t follow the Latin.

Everyone rises when the servers and priest come out to the altar, then kneels when Mass begins with the Sign of the Cross (“In nomine Patris…”). The priest and servers recite the Judica Me (Psalm 42), alternating like it says in the missal. The servers say the words for the congregation, so the people aren’t expected to say the responses. Some people like to, but don’t feel like you’re doing it wrong if you just listen and pray internally.

After the initial prayers at the foot of the altar, the priest goes up and kisses the altar and goes to the book on the right side of the altar (the epistle side) to read the Introit. This is the first point where you’ll need the proper you got at the doorway. The Introit is followed by the Kyrie and Gloria (in the missal), then back to the proper for the Collects. The Collects are the collected prayers of the faithful, for which the Mass is being offered. There is usually one Collect, but may be as many as three if certain feasts overlap.

After the Collects come the Epistle, which is a reading from somewhere in Scripture other than the Gospels, then the Gradual (somewhat analogous to the responsorial psalm in the Ordinary form). These are both in the proper. On weekdays, the priest may read the Epistle in English only, but on Sundays he reads it in Latin, then usually again in English before his homily.

After the Gradual, a server moves the book to the left side of the altar (the Gospel side), and everyone stands for the Gospel, which is in the proper. After the Gospel, everyone sits for the homily, before which the priest may read the Epistle and Gospel in English.

After the homily, everyone stands for the Credo (Creed). We’re back to the missal now. About a third of the way through the Credo, everyone genuflects during the line that ends, “et homo factus est” (“and He was made man”). After the Credo, the priest turns to face the people and says “Dominus vobiscum” (the Lord be with you), and the servers (and the people, if they want) respond with, “Et cum spiritu tuo” (and with your spirit). Everyone sits, and the ushers come around to collect the offering while the priest (quietly) reads the Offertory prayer that’s in the proper.

From this point until Communion, many of the prayers of the priest are silent, which may be one of the strangest things for someone who’s used to the constant activity and dialogue in the modern format. Once I got used to it, though, I found that the silence allowed me to get into a more reverent state.

After the priest mixes the water and wine and washes his hands (the Lavabo), he turns to the people and says the Orate Fratres (Pray, brethren…), and the servers say the reply. Then the priest silently reads the Secret, which is in the proper if you’d like to read it to yourself at the same time. There are a few short prayers and responses by the servers, then the Preface from the proper. There are several different prefaces for different seasons and types of feast day.

At the end of the Preface, the priest goes straight into the Sanctus with “Sanctus, Sanctus, Sanctus” (Holy, holy, holy…), and the server rings the bells three times as everyone kneels. After the Sanctus begins the Canon, much of which he says quietly. It’s all in the missal, so you can follow along by watching his movements at the altar, or just pray and prepare yourself for Communion. The server rings the bells once at “Hanc igitur,” the beginning of the Consecration. Then the servers go up and kneel behind the priest.

After the actual words of Consecration of the Host, the server rings the bells three times: when the priest genuflects, when he elevates the Host, then when he kneels again. This pattern is repeated after the words of Consecration of the Wine. During each elevation, the servers lift the priest’s vestments, which I’ve always thought is nicely symbolic of us (since the servers represent us) assisting him in offering the Sacrifice. Again, this is all done silently except for the bells. Then the servers move back down the steps to where they were before and the Canon continues quietly.

If you’re listening closely, there are three words a bit later in the Canon that the priest says in a louder voice: “Nobis quoque peccatoribus” (To us sinners, also). He finishes the Canon with “Per omnia saecula saeculorum” (World without end) and then goes into the Pater Noster (Our Father). There are some more silent prayers while he breaks the Host and puts a Particle into the Wine, before saying out-loud the Agnus Dei (Lamb of God).

Then there are quiet prayers before Communion for Peace, Sanctification, and Grace, followed by the priest’s Communion. Holding the Host, he strikes his breast three times, each time saying out loud, “Domine, non sum dignus” (Lord, I am not worthy) while the server rings the bells, then finishing the prayer quietly.

After the priest receives the Body and Blood, the servers repeat the Confiteor (I confess) that they and the priest each said back at the first part of Mass. The priest turns to the people (for whom the servers are speaking) and says the prayer of absolution. Most people make the Sign of the Cross when he does at this point.

The servers move up the steps again, and the priest turns to the people and again repeats three times the prayer beginning with “Domine, non sum dignus.” Some people like to recite it with him this time. He then gives Communion to the servers and then to everyone else.

Communion is taken on the tongue, kneeling at the Communion rail, for those who are able to do that. People who have trouble kneeling should sit in the front pew, and Father will bring Communion down to them. He usually does that first, so it’s a good idea for the rest of us to stay back until he’s finished with them, to not get in the way. At the Communion rail, ormally 5-6 people go up and kneel down at one time, he distributes Communion to them all, and then they all leave and make room for the next 5-6.

When you kneel down, place your hands beneath the cloth that hangs over the rail. The idea is that if a Host would drop and miss the paten the server is holding under your chin, it would land on the cloth and not on the floor. Stick your tongue out just a bit so he can place the Host on it. Don’t say “Amen” like we do in the new form; the priest says it for you.

After Communion, eveyone goes back to their pews and kneels again (if they can) while the priest cleans the vessels and puts any extra consecrated hosts away in the tabernacle. The servers move the Book back to the right side of the altar, and the priest reads the Communion prayer, then the Postcommunion prayer, both of which are in the proper. (You’re done with the proper after this.)

The priest then turns to the people and says the dismissal, “Ite, missa est” (Go, the Mass is ended). After one more silent prayer toward the altar, he pronounces the Blessing, and everyone makes the Sign of the Cross as he does.

Now everyone stands as he goes to the far left of the altar for the Last Gospel. This is the beginning of the Gospel of John, and is read at the end of most Masses. Everyone genuflects during the words, “Et Verbum caro factum est,” (And the Word was made flesh).

After Low Mass, everyone kneels again for the prayers ordered by Pope Pius XI in 1929 for the salvation of Russia, which are said in English. After these, everyone stands while the priest and servers genuflect one last time and leave the sanctuary. Mass is over. Some people stay and pray for a while or light a candle, so it’s good to leave quietly and go visit in the hall, where there will be coffee and juice and donuts (at least).

Whew, that got a lot longer than I expected! I don’t suppose anyone could memorize all that before going, but maybe reading this first will help someone recognize what’s happening and not get lost. The important thing is to make sure you get the proper when you come in, and understand that everything that’s not in the proper is in the missal, and the missal will guide you through the Mass. And when Father isn’t speaking up there during the Canon, it doesn’t mean he’s stuck; he’s actually moving right along. If you need help with anything before Mass, feel free to ask an usher. If you aren’t sure who the ushers are, ask one of the guys sitting in the back pew. (Tell them I said that’s what they get for sitting way back there.)

Hope to see you at St. Rose soon!

Latin Mass FAQ

I’ve been asked several questions about the Latin Mass (which I should really call the Extraordinary Form, since it is technically possible to say the Novus Ordo Mass in Latin) since I started going, and some come up repeatedly, so I thought I’d answer them here. These are not official, just according to my understanding. I’ve touched on some in other posts, but I think I can answer them better now.

Do I have to know Latin?

Not at all. When you enter the church on Sunday, look for a folded piece of paper in a holder on the wall near the door, titled “Saint Rose Latin Mass Propers.” This has all the prayers and readings that change from week to week, in both Latin and English. In your pew you’ll find a red booklet. This is the missal, which has everything which is the same at every Mass, also in Latin and English, plus instructions and explanations for what’s going on. It may be confusing at first, especially if you’re at High Mass with all the singing and incensing, but once you get the hang of it, you can see the English translations of everything that’s being said. Ask an usher for help if you’re confused. Also, on Sundays and Holy Days, the priest will re-read the English versions of the Epistle and Gospel before his sermon.

If you follow along in the missal and watch what’s happening around the altar, it’s not hard to keep track of where you are after a while, even if you can’t follow the Latin. The priest reads certain prayers from certain places, bells ring at certain times, and so on. There are lots of cues to help people keep track.

I’d guess that at least 90% of the congregation couldn’t translate a paragraph of Latin, although they’ve probably picked up a few whole phrases, like “Et cum spiritu tuo”—“and with your spirit.” There may be no one in the pews who knows Latin well enough to translate at speaking speed. (I sure can’t.) Don’t worry about it.

Do I have to wear a head covering (if I’m a woman)?

Many women choose to wear a veil or hat, but it’s not required. I’d guess that about 50% do at Sunday Mass, and more like 80% at daily Masses. Women actually have more freedom in this area than men, since we aren’t allowed to cover our heads at all. :)

The reasoning, as I understand it, is that the Church has a long tradition of veiling “holy vessels.” The tabernacle is often veiled, as are the Communion vessels when the priest is carrying them in and out of Mass. Women are also considered holy vessels, since they carry and nurture new life. Mary, being the holiest vessel of them all, is never pictured without a veil, as far as I know.

I’ve also heard women refer to the veil as a sort of symbolic shield that blocks out the outside world and helps focus their attention on God. Sort of like a football player pulling his helmet down tight and snapping his chin strap, maybe—he’s preparing himself for what’s coming.

Do I have to take Communion on the tongue?

Yes. This is part of the respect we show to the Eucharist that’s more overt at the Latin Mass. A priest’s hands are consecrated when he receives Holy Orders, partly for this very purpose. If you read the missal, you’ll see there are several prayers where he cleanses himself and his hands to prepare for handling the Body and Blood. He holds his fingers and moves his hands in a certain way to ensure as far as possible that not the smallest crumb from a consecrated host is dropped or treated without the greatest respect.

It wouldn’t make much sense to go through all that, and then drop the Eucharist into everyone’s grubby hands, would it? When the priest is finished, he goes back and carefully brushes any particles from his fingers and the patens into the cup to make sure they’re consumed. If you receive the host in your hands, what happens to any particles that might come loose? Whether they end up in your pockets or on the floor, that’s not the way they’re supposed to be treated. Receiving on the tongue eliminates that whole issue.

What’s that business at the end of the Low Mass about the conversion of Russia?

In the mid-19th Century, the Church in Rome was surrounded by enemies: hostile neighboring city states, Masonic societies, and revolutionary groups were all pressing in on Church property and things didn’t look good. Pope Piux IX decreed that a set of prayers be said after each Mass within the Papal States for the intention of defeating these enemies. By the mid 1880s, Rome had fallen and the Church was under direct attack by both physical means and confiscatory laws, so Pope Leo XIII updated these prayers and ordered that they be said around the world. This version was very similar to what we pray today, which is why they’re sometimes called the “Leonine Prayers.”

Apparently it worked—the Church survived these enemies, and by 1929 was able to establish a treaty with the Italian state and regain some of the property that had been stolen. At that time, the Communist government in Russia was really ramping up its persecution of Catholics, so Pope Pius XI decided to redirect these prayers for the freedom of the Church in Russia.

Again, it appears to have worked, or to be working. I don’t know whether Catholics in Russia today are completely free to worship without fear of persecution, but they’re certainly freer than they were under Soviet rule. There seems to be an honest argument at this point about whether the prayers have been answered, and if so, should we still be saying them? Should they perhaps be directed to another intention? Or should we keep them as they are until we’re very sure? Unless the Pope says otherwise, I guess we’ll keep saying them. Surely it couldn’t hurt.

Why the Latin Mass? #7: Reverence

(This is the seventh and final in a series of posts called Why the Latin Mass? I’ve been asked by several people why I like the Traditional Latin Mass—why people will drive a hundred miles to get to one, or spend a lot of time and money bringing it to their area. I’m trying to answer that from my perspective in this series.)

When people talk about why they like the Latin Mass, lots of reasons come up: organ music, no one wearing shorts or tank tops, the beauty of the language, etc. But one word comes up more than all the others combined: reverence. We seem to be starved for a sense of reverence, a feeling that we’re in God’s Presence with a capital P, not hanging out with our buddy Jesus. The dictionary says reverence means “a feeling of profound awe and respect and often love,” which sums it up pretty well. That’s the feeling I think we get from the Latin Mass, that was hard to feel at Ordinary Masses.

Compare these two scenarios:

The Sign of Peace just ended, so the meditative, prayerful state you attained during the Eucharistic Prayer was broken while you shook hands with the people around you and smiled and waved to some friends across the way. Now you’re in line for Communion, trying to get that solemn feeling back and not be distracted by reading the words on the back of the T-shirt the guy in front of you is wearing. When you reach the front, one of your neighbors says “Body of Christ” and drops the Eucharist in your hand. You quickly mumble “Amen,” step to the side, and get the host in your mouth all in one move, because the people behind you are waiting. Next up, you either take the wine or weave around the people who are waiting for it, and get back to your pew. Now you can finally meditate on the Sacrament you received, while singing “On Eagles’ Wings” or an older song that has had the wording changed to be politically correct.

The Canon—several minutes of silence, broken only by the sound of bells as the priest consecrated the Eucharist—has ended. After a few more prayers of preparation, you go forward and kneel down at the Communion rail and slip your hands under the cloth there. The priest comes over to you, holds up the Eucharist, and says, “Corpus Domini nostri Jesu Christi custodiat animam tuam in vitam aeternam. Amen,” which your missal tells you means, “The Body of our Lord Jesus Christ preserve thy soul unto life everlasting.” He places the host on your tongue. A server holds the paten (a metal plate with a handle) below your chin and the priest’s hands, to catch the host in case it falls. If he misses it, which is unlikely, it will land on the cloth that is over your hands. After receiving, you mediate on the Sacrament for a moment while the priest finishes with the rest of the people who are kneeling with you. Then you return to your pew to meditate in silence (Low Mass) or while the choir sings a hymn (High Mass).

Call me crazy, but one of those makes me feel much more reverent than the other. Now, some of the problems with the first scenario wouldn’t have to be there, but they usually are. At the Latin Mass, the second scenario is simply normal—the way you can expect it to be every time. It won’t force you to feel reverent, but it gives you every opportunity. Everything about it—the silence, the kneeling, the care taken with the Eucharist, the lack of haste—all shout, “Pay Attention! God is here; the God who created you and everything else, and loves you enough to come to you in this special way. Show some respect.”

I have to admit, even though I grew up Catholic and spent four years at a high school seminary, I never really thought much about transubstantiation. Sure, I accepted intellectually that the bread and wine become Christ’s Body and Blood. After all, God can do anything, why not that? We were always taught that He’s in everything anyway, so why not in a piece of bread? It was easy enough to believe; I just never thought much about what it really meant.

The Latin Mass makes it harder to be so blasé about that. Maybe I’m just thick, but thousands of Novus Ordo Masses didn’t drive the point home. The Latin Mass did in a few weeks. In many little and big ways, it says so much more clearly and forcefully that this isn’t just any piece of bread that’s being offered to me. It’s not even a holier-than-usual piece of bread. It’s…Everything, really. It’s His Divine Love, His Sacrifice on the Cross, and His promises for our eternal life, everything we could ask God for, plus things we don’t even know we need, all wrapped up in one gift, if we choose to accept it.

That’s not something that’s easy to take lightly. It makes me want to be as worthy as I can be of what I’m being offered, to have my ducks in a row spiritually, to actually be in a state of grace as Catholics are always supposed to be before receiving Communion. It makes me want to be a better husband, man, and person, so when I walk into Mass, I don’t have as much baggage to shed before saying, “Ok, I’m ready.” It makes me want to have kids, so I can introduce them to this miracle of, as St. Athanasius put it, the Son of God becoming man “so that man might become God” through His grace. It even makes me want to stay for coffee and donuts after Mass (even though I can’t eat them), and help out with fundraisers and stuff—not exactly my usual habits. But most of all, it’s made me feel a spiritual connection to Christ that I don’t think I ever felt before. It’s a little strange, but definitely a good thing.

Well, unless I think of something I missed later, that wraps up this series. I hope people enjoyed it and feel free to add their own thoughts.

PS. If you’ve never been to a Latin Mass and I’ve piqued your interest, please join us at St. Rose sometime. It’s really not scary, and you don’t need to know Latin or the secret handshake or anything. Just dress nice and sit toward the back so you can see when people sit and stand and kneel. You shouldn’t go to Communion if you’re not a Catholic in a state of grace, but you’re welcome to participate in every other way. I’m going to write up a Latin Mass How-To soon, where I’ll explain more in detail, but there’s nothing wrong with just being there and assisting with your prayers. (Don’t forget the carbs and caffeine in the hall afterwards.)

Why the Latin Mass? #6: What It's Not

(This is the sixth in a series of posts called Why the Latin Mass? I’ve been asked by several people why I like the Traditional Latin Mass—why people will drive a hundred miles to get to one, or spend a lot of time and money bringing it to their area. I’m trying to answer that from my perspective in this series.)

I’ve been trying to keep this series positive, focusing on the pros of the Latin Mass (also known as the Extraordinary Form) rather than the cons of the Ordinary Form (aka the Novus Ordo), which is used in most churches today. To avoid that topic completely, though, would be ignoring half the story, because my dissatisfaction with the implementations of the Novus Ordo was part of the process that brought me to the Latin Mass.

Let me start by making clear that I don’t think the Novus Ordo is invalid. Most of the Catholics I know, including my family, still attend the NO Mass, and I don’t think they’re being bad Catholics or failing to get the full Sacrament. The NO is valid. It just seems to invite problems in a way that the Latin Mass doesn’t, and didn’t for over 1500 years.

If you go to YouTube and search for “Catholic liturgical abuse,” you’ll see every goofy thing imaginable being done at Mass: priests dressed as clowns, half-naked dancers, Doritos used as Communion, magic tricks, huge skull decorations, and even mimes. In many Catholic churches today, anything goes, if someone thinks it’ll be fun or attention-getting.

Here in the rural Midwest, fortunately, you can still expect a sane Ordinary Mass. We keep our experimentation more subdued: applause during Mass for things like birthdays and anniversaries, having wine every Sunday even after the Pope reminded us we shouldn’t, distracting arm-waving and hand-holding, dragging the Sign of Peace out forever, people dressed for the beach or the ball-field, the homily replaced with lay people giving fundraising or political speeches, pastors ad-libbing the prayers according to their own preferences, and the Eucharist being handed around like nothing special. These may not be as harmful as Clown Masses, but they take the focus away from the Sacrament and make the Mass seem like something less than it is.

So why did this happen? How did more weirdness and novelty sneak into the Mass in thirty years than in the previous 1500? Modern society has to take some of the blame: weirdness and novelty are idolized throughout our culture today. “Change!” has gotten two presidents elected. I don’t think that’s the whole story, though, because there have been other morally permissive or confused periods in history, and the Latin Mass didn’t change to accommodate those cultures. On the contrary: its permanence seems to have been one of the things that helped the Church survive persecution and scandal. It seems to me that where there’s smoke, there’s fire: the room for interpretation and innovation in the Novus Ordo, which was meant to make it more approachable, in practice opened it up to whatever a priest and his congregation wanted to make of it.

In the Latin Mass, the priest stands in a certain place and holds his hands in a certain way for each prayer, speaks or sings the words as written, and even cleans the vessels a certain way. Maybe that amount of detail in the “rules” isn’t strictly necessary: if he doesn’t keep his fingers and thumbs together for the entire time he’s supposed to, no one will notice and the Mass will be just as reverent. But at least that strictness protected the Latin Mass from the influences of the many secular societies that conflicted with it over the centuries. The New Mass doesn’t seem to have that built-in protection.

One problem I see is that parishes try to work everything else into the Mass. It’s the one time everyone is there (or it was, anyway, when Catholics still attended weekly), so if you want to involve as many people as possible in something, it’s only logical to do it at Mass if you don’t know any better. So the Mass gets used to welcome strangers, chat with friends, teach bible school for kids, collect funds for various activities, applaud parishioners, and hold folk music sing-a-longs.

None of these things are bad in themselves. They could be great things to do in the hall after Mass, or to get a group together for some weekday evening. They just aren’t part of the Mass, and I think dragging them all into it is one reason people have lost track of what the Mass is really about. I don’t think it’s a coincidence that regular Mass attendance has dropped drastically in the last thirty years, or that polls show most Catholics today don’t think God is truly present in the Eucharist.

So I’m thankful that we have the Latin Mass in Quincy again, not just for what it is, but also for what it’s not. It’s not casual. It’s not changing. It doesn’t try to accommodate society’s wishes. It doesn’t relax its standards to make us comfortable; it expects us to raise our standards in order to be worthy of it. God willing, it will continue to do so for a long time to come.

We are what you once were. We believe what you once believed. We worship as you once worshipped. If you were right then, we are right now. If we are wrong now, you were wrong then. — Traditional Catholics’ Motto

Why the Latin Mass? #5: Consistency and Community

(This is the fifth in a series of posts called Why the Latin Mass? I’ve been asked by several people why I like the Traditional Latin Mass—why people will drive a hundred miles to get to one, or spend a lot of time and money bringing it to their area. I’m trying to answer that from my perspective in this series.)

Surprises are fun–in birthday gifts and haunted houses. I don’t find that they’re very conducive to a prayerful state, though. I’m trying to keep these posts positive about the Latin Mass, rather than a list of negatives about the Novus Ordo Mass, but one thing I never liked with the NO Mass was the tendency for surprises. I’ve never seen extremes like clown masses or Dorito “hosts” around here, but you never knew when you’d be asked to hold hands with the people across the aisle, or a priest would start the Mass by striding out front and asking the out-of-towners to introduce themselves, or someone would give a talk after Mass with a puppet.

Even if you enjoy those things, the variations mean you have to keep your head up and stay prepared so you can react when something unexpected happens. (If you’re easily spooked, they make you feel like a long-tailed cat in a room full of rocking chairs, as the saying goes.) If you’re deep in prayer, the people next to you will think you hate them when you don’t hold hands or whatever the latest thing is. I much prefer the consistency of the Latin Mass. There will be no surprises, so I know exactly what’s going to happen (now that I’ve been to a few), and I can relax and be as deeply meditative or as focused on the Sacrament as I like. The priest is going to say all the prayers and readings as they are in the missal, the bells are going to ring at the proper times, and everything will be nice and consistent. No surprises.

That’s not only true from week to week within a single church that practices the Roman Rite, but also for all Latin Masses held around the world. You might walk into two Novus Ordo Masses in the same town and have two very different experiences, but you can walk into two Latin Masses anywhere in the world and assist at the very same Mass (except for the sermon, which will be in the local language). That gives me a sense of unity with the entire Church that I never felt before.

This unity even stretches over time, as the Latin Mass has been changed very little for the past 1500 years, and substantially goes all the way back to the Apostles. At any hour of the day, a Mass with the same language and motions and meaning is being said somewhere on the surface of the earth. In a sense, the Latin Mass is one long prayer that Catholics of all nations and races have been saying consistently and continuously for centuries! That seems like a very powerful idea to me; one that inspires me whenever I’m part of it.

When I’m at Mass now, I’m praying the same prayers and assisting at the same rite as my grandparents (until the 1970s, anyway), my great-grandparents, and most of the saints. There’s a real feeling of connection there that goes way beyond the group of people in the pews. I’m not usually much of a joiner, but that’s one “community” I like being a part of.

Why the Latin Mass? #4: Snappy Dressers

(This is the fourth in a series of posts called Why the Latin Mass? I’ve been asked by several people why I like the Traditional Latin Mass—why people will drive a hundred miles to get to one, or spend a lot of time and money bringing it to their area. I’m trying to answer that from my perspective in this series.)

I’m not exactly what you’d call a clothes-horse. Since I work from home, most days my only fashion decision is whether to bother putting on shoes with my jeans and t-shirt, or stick with slippers. If I couldn’t ask my wife whether my clothes match, I’d have to buy Garanimals. I own one suit and about half a dozen ties—most of which were gifts, and at least one of them was last in style about the time Miami Vice went off the air.

So I don’t want to sound like a clothes snob, and I wouldn’t want anyone to let a lack of dressy clothes to stop them from coming to the Latin Mass, but I’m glad people make an effort to dress nice. The men run the gamut from nice jeans and a collared shirt to three-piece suits. The women wear dresses or nice slacks, and many choose to wear veils. Kids tend to dress like their parents. Some people have to dress more casually for weekday Mass because they’re on their lunch breaks and have to come in their work clothes even if they’re in construction, but they still do their best. No one wears T-shirts with distracting slogans, or jeans or pants tight enough to get the people behind them thinking really inappropriate thoughts.

In general, people look like they’re wearing their “Sunday best,” whatever that is for them. For me, that adds a touch of reverence and respect, and helps set a mood of what we’re doing here is important.

When I was a kid, we had our “church shoes” that we only wore to church, and woe betide the child who got his church shoes dirty! It was just one of those little things that said going to Mass was special, that it deserved something extra, so I’m glad to see people wearing their “church shoes” again.

Why the Latin Mass? #3: The Music, or Lack Thereof

(This is the third in a series of posts called Why the Latin Mass? I’ve been asked by several people why I like the Latin Mass—why people will drive a hundred miles to get to one, or spend a lot of time and money bringing it to their area. I’m trying to answer that from my perspective in this series.)

I grew up on rock and roll. It’s not my parents’ fault; they listened to country at home, and not a lot of that. But I picked up 80s rock and pop from friends: AC/DC, Reo Speedwagon, J. Geils Band, Foreigner, Pat Benetar, Rick Springfield, Toto, and yes, Michael Jackson. (Hey, 10 million other people bought Thriller too; we didn’t know what a freak he was then.) My favorite then was Billy Joel—the Angry Young Man version who did Captain Jack and Glass Houses, not the happy version that was married to Christie Brinkley or the morose version she divorced. Later, when I lived in range of a classic rock station for a while, I caught on to the Eagles, Clapton, BTO, and the like.

All that left me with a definite expectation that music would have a strong drumbeat, and usually a melody carried by electric guitar. Popular music tells you plainly when to tap your foot. There’s nothing subtle about it, but it’s catchy. Now that I’m older and trying to expand my cultural horizons, I try to appreciate classical music and chant, but it’s hard to. It doesn’t give me that obvious beat, and soon my mind is wandering off. The only time I really seem to appreciate classical music is in an auditorium, listening to an orchestra play live.

And the one time I definitely enjoy chanting and “church music” is when I’m in church, fortunately enough. There it just fits. Like most Catholics my age, I grew up with Masses where people played guitar, shook tambourines, and probably even whipped out a kazoo or two that I’ve blocked from memory. Those things all have their place elsewhere, but there’s something special about organ music and chanting in church. I’ve been told that the reason the organ was always allowed at Mass was because it “breathes” through the pipes, so it’s similar to a human voice. I don’t know if that’s the real reason, but whatever the reason, the result works. A choir backed by a real organ makes a sound that is unquestionably “churchy,” that you can’t mistake for an Arlo Guthrie concert.

I don’t know enough about chant and terms like “polyphonic” to appreciate it on any deeper level than that. Most of the time I attend Low Mass, which doesn’t have any music, and that’s fine by me too. Either have the real thing, or don’t have music at all, and I’ll be happy. Just keep those tambourines away!

Why the Latin Mass? #2: Beautiful Churches

(This is the second in a series of posts called Why the Latin Mass? I’ve been asked by several people why I like the Latin Mass—why people will drive a hundred miles to get to one, or spend a lot of time and money bringing it to their area. I’ll try to answer that in this series.)

This one isn’t an absolute, of course. There are plenty of new-style Masses being said in beautiful, ornate churches like St. Francis in Quincy. There have also been many Masses of both rites said in basements, barns, or outdoors, when the circumstances demanded it, as in missionary locations or when a church is being rebuilt. That’s all good.

But when people get a chance to build a new church of their choice, then we start to see a difference. Latin Mass devotees, today or pre-1960s, tend to build churches like the first one on the right. People attending the Novus Ordo Mass over the few decades of its use have tended to wander to other concepts, like the two below that.

Call me an old fogey if you like (won’t be the first time), but I want a church to look like churches have for centuries. Styles change, but some things are common to what we’d all instantly recognize as a church. I don’t want to feel like I’m walking into an office building or branch library; nor do I want to feel like I might bump into Klingons while I’m there. If you go to a Latin Mass, you can be pretty sure the church will direct the focus to Christ’s presence in the tabernacle and at the altar during Mass. The first priority of the building won’t be comfort or efficiency or community spirit, but worship and glory to God.

What really awes me about older churches is that most of them were built when construction was much harder than it is now. I’ve done some bricklaying and other construction, and I know how much work it is. Even today, with all our power tools and hydraulic lifts and laser levels, building a church like St. Rose would be a huge and expensive project. When it was built nearly a century ago, it would have involved far more sweat and heavy lifting. They didn’t have to build huge domes and towers way up in the sky, and adorn it inside and out with complicated brickwork and vast windows and paintings. They wanted their church to inspire people to worship and direct their gaze to God. In my opinion, it paid off.

Why the Latin Mass? #1: Everything's Better in Latin

(This is the first in a series of posts called Why the Latin Mass? I’ve been asked by several people why I like the Latin Mass—why people will drive a hundred miles to get to one, or spend a lot of time and money bringing it to their area. I’ll try to answer that in this series.)

One thing I always tell people is it’s not just about the language. There are many other differences between the TLM and the Novus Ordo (the new Mass said in most churches today). But the Latin is an important part of it, for a variety of reasons. When you hear someone speaking in a foreign language, it gets your attention, whether you can understand it or not. It’s an immediate sign that something unusual is happening here. That helps me focus and want to know what the speaker is saying and why.

Latin is also important because it’s a dead language, so it isn’t changing anymore. The meanings of the words are the same as they were centuries ago. Modern languages are always changing, and the meanings of words can change quite a bit in a short time. The sentence God Is the End of Man is inscribed over the door of a school near here. When that was written, the “final purpose” meaning of the word “end” must have been more commonly used. But now, I picture those kids looking up at that and thinking of God as a sort of Terminator character who will come “end” them someday.

If our prayers are in English, we’re going to have to keep tweaking them over the years to keep the meaning the same. (Anyone know what “vouchsafe” means? It was all over English prayers a century ago.) If you’ve ever studied a foreign language, or just used an online translator to translate something to a foreign language and back again, you know how quickly the meaning can vary with each translation. By sticking with Latin, we don’t have to worry about that. We may use different English words than they used 500 years ago to get the same meaning, but the essential prayers themselves and the meanings of the words won’t have changed.

Different languages lend themselves better to different uses. English is a very blunt, stripped-down language, great for quick dialogue and technical writing. Latin, with its more complex structure, has a formality that works well in the liturgy. Many prayers were originally written in Latin, so they flow better in it than when translated into another language. The Ave Maria (Hail Mary), for example, is awkward in English, but it flows like poetry in Latin, even if you don’t know what it means.

So it’s not about stubbornness, or using something old for oldness’s sake. The Latin language itself adds something to the Mass, especially when combined with the things I’ll talk about in the next articles.