Chris Johnson

HTML code close up

Document Object Model

A modern website is a complex system of inter related pieces. Each of which must work correctly and communicate correctly with the other parts of the system.

As website creators, we break the design into the Frontend and the Backend. The front end is anything the end user sees, while the back end is responsible for generating content to be displayed.

The backend is further subdivided into the Model, Controller, and View. The model is our term for the database and database access. The controller is the rules for the website. The view is the creation of content to be displayed.

Consider a website that allows you to purchase an item. The “model” would describe that item. SKU, size, weight, cost, price, images, description, name, and much more. The “controller” encodes the business rules. We can only ship to people that have paid us. And the view turns all the information into content for a browser to display.

The content is delivered as HTML. We can also supply JavaScript code and Cascading Style Sheets. The HTML can have the JavaScript and CSS embedded in the HTML or the HTML can link to other resources to be included with this page.

HyperText Markup Language

The US government wanted a standardized way of creating electronic documents for printing. This was the Standard Generalized Markup Language, ISO8879.

SGML has the advantage of being very application-specific. If you are writing a book, you use one set of tags, if you are creating the Message Of The Day, you use a different set of tags.

The power of markup is that you describe what you are marking up, rather than formatting whatever it might be.

Consider and address. Bilbo Baggins, 999 Bagshot Row, Hobbiton, The Shire. As written in this sentence, it is just a row of text. You could write it that way on a letter and it would be delivered, but the postman would be unhappy at the formatting

<b>Bilbo Baggins</b><br/>
999 Bagshot row<br/>
Hobbiton, The Shire<br/>

Is the address formatted, which looks like

Bilbo Baggins
999 Bagshot row
Hobbiton, The Shire

Using DocBook, a particular version of SGML, we would write that same address something like:

<address><surname>Baggins</surname><givenname>Bilbo</givenname>
<street>99 Bagshot row</street>
<city>Hobbiton</city><state>The Shire</state>
</address>

We do not know how to display the address, but we know that it is an address. If we are provided rules on how to display addresses, we can display this address per the rules.

Structure

HTML was designed to be simpler than SGML. There are fewer tags, and the fixed meaning of the tags made it easy to write HTML by hand.

Almost every post I create is written in raw HTML. That HTML is then styled and displayed in nearly pretty ways.

HTML defined the structure of the document. The structure was of a header section, describing the page, and a body section with the actual content.

Within the content section were the different displayable content. You had headers, levels 1 through 5, you had numbered lists, unnumbed lists, and definition lists (a word with an attached definition). There were paragraphs, links, tables, and finally, there were images.

This content was rendered however the browser wanted to.

There were formatting tags for bold, italics, blinking, and not much more.

If you wanted to “layout” your webpage, you used tables and fought to get things right.

Cascading Style Sheets

CSS allowed us to provide styling to an element. The paragraph above has margins, padding, and boarders applied to it. It has colors applied for the background and for the font. All are set via a style sheet. Your browser has a default style for each element.

The problem that arises is how to attach that styling to particular elements. The answer starts with the structure of the document.

p {
  color: red;
  background-color: green;
  margin-left: 50px;
  border: 2px;
}

This uses a CSS selector, ‘p’ to locate all paragraph elements. It then sets the background to green, the font to red, moves it to the right 50px, then draws a 2px solid border around the paragraph.

This is a basic selector. Selectors get very complex.

DOM

Every element in an HTML document is loaded into the DOM. From there, we can select elements and modify the style of the element with CSS and CSS Selectors.

The simplest method is to give important elements an ID. IDs are unique for a DOM. If there is more than one element with the same ID, this will generate an error, which most people will never see. The rules tell us which element will own that identifier.

To find a particular element with a particular ID you use the ‘#’ symbol. Thus, to find the header just above, we would write “#DOM”. While the header would look like <h3 id=”DOM”>DOM</h3>.

We can add a multiuse identifier, called a class, to multiple elements at the same time. <div class=”quote”> is the code I use to create a quote. The class “quote” has a CSS group attached. This causes all the divs of class quote to be rendered as a block quote.

We then have the tag selector. We used one above with the “p” element. This allows us to select all the elements of a particular type. The selector “li” would select all the list items in the DOM. We could use this to make every line italic.

We can combine selectors to limit which elements are selected. “ul>li” would select all line items of unordered(without numbers) list, while “ol>li” would select all line items which were part of an ordered (with numbers) list.

These selectors can even allow us to move through the DOM in a structured way. We can ask for the first paragraph after a header for special treatment.

DOM Manipulation

When we load JavaScript on a web page, that JavaScript can watch for events on elements. This is done by locating an element with a selector, then watching for a particular event to take place on that element.

The JavaScript can then modify the DOM. This can be by changing the structure of the DOM, or it can be modifying the style of elements in the DOM.

A recent example of this, I added a class to some table data items (td). I did it with a class. I then found all the elements with that class and watched for a mouse click on those elements.

When the click was detected, my JavaScript ran. The JavaScript grabbed the contents of the element, stripped out formatting, then put that content into a text input box, displayed the text input box for the user to edit.

When the user completed their edit, the value they entered was formatted, the input was removed from the DOM. The formatted value was then placed back in the element.

All with a bit of good selection to make it work.

Finally, Selenium uses different types of selectors to find elements for manipulation or testing.

Very powerful stuff.

Quality Assurance and Document Control with Checklist Icons. Businessman mark off items on digital checklist, representing quality assurance and document control processes, verification and compliance

Unit testing

This is boring geek babble.

Quality Assurance is not something computer nerds are good at. It is boring, repetitive, and difficult.

That doesn’t mean it shouldn’t be done. Instead, it means that you need somebody to do QA for you. You cannot do QA on your own. You won’t see your own errors.

Consider a simple unit test. You have just created a new model (database table). You know you have created it correctly. Some of that is because you trust the infrastructure you are using, but mostly it is because it has worked in the past.

To do a proper unit test, you would need to verify that you can read and write an object of that model. That each functional manipulation does what is should, and that all possible options into the functional unit works.

In the past, I would test student programs that did simple math. For example, they would write a simple four function calculator. I’m the ass that would get their calculator to attempt to divide by zero. They had to handle that case.

The thing that happens, is that as we are developing new code, we test that code, extensively. We know what we are adding and what it should do. We don’t “retest” what we know is already tested and working.

Last Tuesday, that nearly broke me. I had tested my code, was getting ready to deploy the code. Before deploying, I was doing some testing. It wasn’t until I clicked on a link that went to a page I was not going to be testing that I discovered a major error.

I wasn’t even planning on looking at that page.

Here is another example, you have a standardized header for your website. If you check it on one page, why should you test the header on every page? It should work the same. So you don’t test it on every page. Except that there is one page that doesn’t set a context variable, so it causes errors on the page. Because you didn’t test that particular page, the error is missed.

This is where unit tests are a win. In theory, you write a test for every part.

Currently, I’m working with Selinium, This is an API that interfaces to an actual browser. This allows you to control the browser via code.

The basics are you write code to find a page element, you can then verify different aspects of the page.

I’m currently writing code to test the left column. The left-hand column is on almost every page of the website. In the past, I’ve verified the parts of that column I’ve been working on. I haven’t verified the entire column since I first created the site.

Using Selenium, I am able to run the same set of tests against the left column on every page. I can also verify that every menu item opens and closes. I can exercise the entire website.

Because it is so easy to do this, I can just run the tests every time, giving me better results.

Of course there is a learning curve. Of course it takes a different mindset to do these tests. Regardless, it is worth it.

Department of Education v. California

The games people play…

Consider the following, a plaintiff comes to the district court with a challenge and a request for a summary judgment. The court looks at the filings by the plaintiff, agrees the plaintiff is in the right. The court grants the summary judgment.

At that instant, the defendants will appeal to the circuit court. They will request an administrative stay pending the court deciding if a stay pending appeal is warranted.

The administrative stay is supposed to be very short.

In one of the cases coming out of the D.C. District Court, the inferior court granted a temporary stay on a government action. The TRO then granted the plaintiff the relief they wanted as final judgment. The government appealed to the D.C. Circuit court, which said, “You can’t appeal a TRO, even if it is acting like a preliminary injunction or summary judgment.” The government then appealed to the Supreme Court.

The appeal was presented to Chief Justice Roberts, who granted an administrative stay. This required almost no argument, the papers filed by the petitioner were enough. When SCOTUS heard the petition for a stay of the TRO, the Court denied the stay because the TRO had already expired, and thus the petition was moot.

If the appeals court denies the stay, the defendant can then appeal to the Supreme Court for a stay pending the outcome of the case.

The point of all of this is that a summary judgment can be appealed up to the Supreme Court.

A Temporary Restraining Order is a temporary injunction. It is supposed to pause actions until a hearing for a preliminary injunction is heard.

Since it is such a short-term instrument, it is not (normally) appealable.

These inferior court judges are granting TRO’s against the government that act more like preliminary injunctions than TRO’s.

Winter Factors

The Supreme Court, in the Winter opinion, gave clear guidance on when an injunction or stay should/can be issued. These are known as the “Winter Factors”.

The first factor is the likelihood of success on the merits. That is to say, is the party requesting the stay or injunction likely to prevail on the merits of the case?

For example, if you are requesting an injunction on the IRS freezing your assets, you have to have a strong enough argument that you will win before the court will consider your request. Since it is unlikely you will win, no injunction will issue.

This is the place where most Second Amendment challenges loose. The courts will determine that the plaintiffs (good guys) are unlikely to succeed on the merits, and will thus not grant the injunction.

The second factor is irreparable harm.

In general, if the party were to prevail with no stay or injunction, could they be made whole with a payment of money?

Any suit involving money is very unlikely to create irreparable harm.

For example, if you are fired, and you sue for wrongful termination, your loses can be made whole with payment for your lost wages. The courts do not consider secondary problems, only the primary. So if you were to lose your house because you defaulted on your mortgage, you might not get enough money to recover from that lose.

The third winter factor is Balance of Equities. This is designed to balance harm. If the injunction is granted, one party will be harmed. If the injunction is denied, the other party will be harmed. If granting the injunction would delay some “good thing” to the harmed party, but denying the injunction would cause somebody to lose their home, the balance of equities swings to granting the injunction.

The fourth factor is Public Interest. Is granting the stay or injunction in the best interest of the public?

When any court disregards the winter factors, they are going rogue.

In Second Amendment cases, the courts would often say that the infringement was “in the best interest of the public” and deny relief to the Second Amendment plaintiffs. They would do this, even if the other factors would lead to granting the stay or injunction.

The Supreme Court has emphasized that a denial of a Constitutionally protected right is irreparable harm, that the balance of equities always tilts to those being denied their Constitutionally protected right, and that the public has no interest in enforcing unconstitutional regulations.

Winter v. public interest

The opinions issued by these rogue inferior judges often discard the winter factors. This is something that could and should be appealed. But a TRO cannot be appealed.

This means that these rogue judges are doing their best to make these TRO’s as broad as possible and to last as long as possible to stop the administration’s policies from being effected.

Judge Shopping

There are almost 100 federal district courts with 677 judgeships, with a few more senior judges thrown in.

A senior judge is a judge who is no longer in the lottery but still hears cases. I.e. A judge who is very near retirement.

If you want to file a suit against a gun company, you can do no better than filing your case in the District Court of Massachusetts. They haven’t found an infringement they didn’t approve of.

There is no combination of judges in the First Circuit court who would agree that any law was an infringement of the Second Amendment. They are so anti-gun that I don’t believe there is a single case where they found for The People in a Second Amendment Challenge.

The attitude of the Supreme Court has varied. Unfortunately, it takes a very long time for a case to make its way to the Supreme Court.

These bad actors are intentionally searching out judges that they expect will go rogue. There also appears to be a thumb on the lottery system used to pick judges for cases.

Oh, when a case is filed, the judge assigned is picked at random via a lottery. A plaintiff can request that a case be assigned to a particular judge, if the plaintiffs believe that their case is similar to other cases the judge is or has handled.

This is why one judge in the Southern District of New York got so many of the product liability cases against drug manufacturers. He’s the guy who decided that even if a person couldn’t prove which company manufactured the medication, he would portion out the penalty based on the market share of the different manufacturers.

Consider a judge who found that the distillery was liable for crashes where the driver was drunk. He has 1000s of plaintiffs demanding money from the distillery.

The problem is which distillery is at fault for a particular crash. The guys drinking rum and coke, which brand of rum did they drink? It is unlikely they know.

So instead of forcing the plaintiffs to point to a particular “guilty” distillery, the judge looks at the market share of each distillery. If the penalty is $1,000,000 then the distillery with 50% of the market share of that class of product is responsible for $500,000 of the penalty.

The little distillery, that is producing Don’t Drive Vodka, is so small they only account for 0.1% of the market share of vodka. They would be responsible for $1,000 of the $1,000,000 penalty.

But what if 90% of the drivers that are drunk were drinking “Don’t Drive Vodka”? Wouldn’t that mean they should pay more of the penalty? Yes, it does mean that, but it’s not what this judge did. It was all about market share.

California in Massachusetts?

Why would the lead plaintiff, California, be opening a case in Massachusetts?

Because they know that it is an almost certainty that they will get a judge with TDS.

On March 10, 2025, the United States District Court for the District of Massachusetts issued what it styled as a temporary restraining order (TRO) enjoining the Government from terminating various education-related grants. The order also requires the Government to pay out past-due grant obligations and to continue paying obligations as they accrue. The District Court’s conclusion rested on a finding that respondents are likely to succeed on the merits of their claims under the Administrative Procedure Act (APA), 60 Stat. 237. On March 26, the Government filed this application to vacate the District Court’s March 10 order (as extended on March 24) and requested an immediate administrative stay. The application was presented to JUSTICE JACKSON and by her referred to the Court.

Although the Courts of Appeals generally lack appellate jurisdiction over appeals from TROs, several factors counsel in favor of construing the District Court’s order as an appealable preliminary injunction. Among other considerations, the District Court’s order carries many of the hallmarks of a preliminary injunction. See Sampson v. Murray, 415 U. S. 61, 87 (1974); Abbott v. Perez, 585 U. S. 579, 594 (2018). Moreover, the District Court’s “basis for issuing the order [is] strongly challenged,” as the Government is likely to succeed in showing the District Court lacked jurisdiction to order the payment of money under the APA. Sampson, 415 U. S., at 87. The APA’s waiver of sovereign immunity does not apply “if any other statute that grants consent to suit expressly or impliedly forbids the relief which is sought.” 5 U.S.C. §702. Nor does the waiver apply to claims seeking “money damages.” Ibid. True, a district court’s jurisdiction “is not barred by the possibility” that an order setting aside an agency’s action may result in the disbursement of funds. Bowen v. Massachusetts, 487 U. S. 879, 910 (1988). But, as we have recognized, the APA’s limited waiver of immunity does not extend to orders “to enforce a contractual obligation to pay money” along the lines of what the District Court ordered here. Great-West Life & Annuity Ins. Co. v. Knudson, 534 U. S. 204, 212 (2002). Instead, the Tucker Act grants the Court of Federal Claims jurisdiction over suits based on “any express or implied contract with the United States.” 28 U.S.C. §1491(a)(1).
Department of Education v. California 604 U.S. ___ (2025)

The five Justices that wrote the unsigned opinion obviously thought the rogue, inferior judge, was playing games.

The Chief Justice couldn’t bother to write why he dissented, but he did.

Justice Kagan claims her dissent was because the government didn’t argue that what they did was legal. She entirely ignores the government’s merits argument, that the district court didn’t have jurisdiction, instead focusing on “irreparable harm” that involved money.

Justice Jackson spent 15 pages on her dissent, with Sotomayor joining. Jackson also ignores the majority’s view that the government was likely to prevail on the merits, no jurisdiction, instead focusing on the inferior court thinking that the government’s termination of grants was somehow illegal.

She argues that the TRO would be moot in a few days, so this wasn’t the right time to take up the issue.

And finally, she thinks the government has to provide “meaningful explanation” of the cancellation of these grants.

I still think she is a clown.

Conclusion

This is a win for the Trump administration. It is the Supreme Court taking a stand. They are calling this particular judge on these preliminary injunctions wrapped in the verbiage of a TRO.

More importantly, that part where they say, …the Government is likely to succeed in showing the District Court lacked jurisdiction to order the payment of money under the APA &mdash, Ibid, that is a warning to the inferior courts that they need to reconsider if they have jurisdiction in these cases.

The Supreme Court speaks in code. Lawyers understand the code. Courts understand the code. Those that follow the Supreme Court will often figure out the code. Leftist refuse to acknowledge the code.

Rogue courts insist that the code means something different. All that you need to do to understand this is to watch a court twist one footnote into the most important part of Bruen while ignoring the thousands of words that refute the footnote.

SCOTUS Watch

Watching The Supreme Court is always frustrating. There is a tendency for things to take a long time.

David Snope filed a petition for writ of certiorari on September 23, 2024. This will be the third or fourth time he has requested a writ of certiorari from the Supreme Court.

It has been granted once, the ruling of the Fourth Circuit court was vacated, and the case was remanded back down to the Fourth for a do-over in light of Bruen.

In November 2024, we were hoping that this case and Ocean State Tactical would both be granted cert. It did not happen.

If cert had been granted by January 16th, the case would have had oral arguments in the fall, with the opinion issuing in August.

As things sit, we might not hear the outcome of this case, if granted cert, until the fall of 2026.

But there are things afoot here.

First, the court heard Bondi v. Vanderstok and published their opinion on March 26th. This was not a direct Second Amendment Challenge, it was more of an administrative challenge. We did not win. Both Alito and Thomas dissented.

Mexico’s lawfare case was heard. We will have an opinion on that before the end of the 2024-2025 term. This is a case where the Supreme Court can slap down the lower courts for abusing the Protection of Lawful Commerce in Arms Act.

Snope is in regard to Maryland’s “assault weapons” ban. It is one of the many cases where the inferior courts have said things of the sort of “well, some arms aren’t arms under the protection of the Second Amendment.”

Another case, with a docket that looks almost the same, is Ocean State Tactical challenging Rhode Island’s magazine ban. Here, the inferior courts have declared that magazines aren’t really arms under the Second Amendment.

A third case has shown up on the radar.

Antonyuk II is a Second Amendment challenge to New York State’s Bruen tantrum response bill.

The heart of this is New York designating almost every part of the state a sensitive place. Even though Bruen explicitly said that the state couldn’t declare Manhattan a sensitive place, just because there were cops and people there.

All three of these cases are being discussed by the justices, again, this Friday. If we get lucky, we will hear some movement on Monday.

At this point, my tea leaves are missing, my crystal ball has clouded up, and the wife won’t let me sacrifice a chicken to read its entrails.

I haven’t a clue what the justices are going to do. I am holding out hope.

Group Of People Writing On Sticky Notes Attached To Blackboard In Office

Project Management

Love it or hate it, project management is a thing. It has to be there. If you don’t think it is there, you are just doing it badly.

Project Managers are a different kettle of fish. Some need to be boiled alive. Others can just dance on hot rocks. And a very few can sit at the big boys’ table.

I’m coming off the end of a rush project that was big. I had to take a customized system and add tariffs to it with about 14 days from concept to deployed. More than a little to get done.

When I started programming, I had a choice of an 8080 with a 24×80 character display, or a 6502 with a 24×40 character display.

When I was introduced to JOVE, Jonathan’s Own Version of EMACS, I fell in love with it. Multiple views into the same file, the ability to copy and paste from different files or different places in the same file. And auto indentation.

Powerful stuff for the time.

My fingers worked will with vi and later vim because I played Nethack and before that, Hack. The programs had a particular key set for moving the cursor based on the key caps of a terminal type used at MIT.

The author had never seen a terminal without arrows over the J, K, H, and L keys. To give you an idea of how ingrained those are, I had to fire up vim and tell my fingers “down”, “up”, “right”, and “left” to record the keys for this sentence. My fingers know, I don’t.

Besides jove, I learned emacs. Emacs is my programming editor. It is what I use when I need to write a lot of code or text. With modern computers, it starts just as fast as jove ever did on a 68020 class CPU.

The problem we had was keeping track of what needed to be done or fixed. This might start off as a document, written with jove in troff. This could be fed to different processors to create PostScript files to be sent to our printers.

Later, some of us used LaTeX for the same thing. Your “design document” was a separate file that was “fixed” before you started coding. These documents never contained more than brief pseudocode and discussions of algorithms.

As you were coding, if you discovered something, you created a comment and marked it. The two most common marks were, XXX which meant that the code was broken in some way, but it didn’t need to be fixed now. All XXX marks had to be addressed before the code could be released.

The other mark was TODO. This was working code but needed some features or extensions added. These did not need to be fixed before release.

In general, we used grep to find all these markers in a list of files. It wasn’t difficult.

The small program I’m working with has some 250k lines of code. After 3 or 4 years of supporting this site, I would say I’ve looked at every line of code in the system.

Finding every marker in 4100 files across 1200 directories is a pain.

Enter Kanban

Kanban is a project management tool. The concept is easy enough to do with sticky notes and a white board or notes with push pins on a larger bulletin board.

Today, the normal Kanban has 4 columns to hold cards. The cards are labeled, “backlog”, “To Do”, “Doing” or “Working”, and “Done”.

When you create a card it goes into the “backlog” column. These are issues or tasks that have no resources assigned to them.

Once per week, there is a meeting of the workers and the project manager. In this meeting, the project manager evaluates the cards that are in the “Done” column. If they are truly done, then they are removed from the board and added to the QA project.

Cards that are in the working column stay in the working column. Cards that are in the working column can be moved into the backlog column if some other card blocks them.

For example, if you have a card that says, “Put new tire on left front wheel” it cannot be worked on until the card that says, “Purchase a new tire for the front left wheel.” Until the purchase card is completed, you can’t work on the installation card.

If there are any resources (workers/developers) that think they are going to need more tasks to work on, the project manager will take cards from the backlog column and move them to the To-Do column.

When a worker requires more work, they move the card from the To-Do column to the working column. When they complete the card, they move it to the Done column.

I’ve used Kanban in the past. It never really appealed to me as it didn’t feel any different from the old ways of doing things.

For this latest project, I used my Kanban board.

Instead of putting markers in the code, I opened a new issue. That issue just went into the “backlog” column. I could tag the issue as a bug or a feature. I could indicate that cards were blocked. It was faster to create the issues/cards than to make entries into the files and then try to locate them later.

Today, I’ll be looking through anything in the QA column and writing unit or web tests for them. I’ll also be doing a QA across the site, to add to the project board.

The biggest thing for me was the ability to visual see what still needed to be done.

Conclusion

Good tools make the work go faster.

I can do it, concept. Successful business man jumps over a rock at sunset. I can't turns into can, creative idea

I can do that

Good points on flintlocks. Then again, making your own primers is definitely possible, including the charge inside. I ran into a reference (online) about making primer charges. You do need some chemical skills, though not a whole lot more than what it takes to make powder for some of the options. I once made mercury fulminate way back in college following the procedure listed in a German textbook I had read (Die Explosivstoffe by H. Brunswig, you can find it online). Not an optimal choice but easy and it would do the job.

On “technology would return quickly”, maybe so, but I wonder about that. A month or two ago on a list I follow someone posed the question “what is your book list for the books to save if civilization were to collapse?” I tried to make a list of 3, a list of a dozen, and the outline of a list of 100. Even with 100 it’s not so easy.

Suppose you have to start over with basic hand tools and a stock of metal. Can you make things? It would help to have a lathe. Can you make a lathe? A basic one (wood turning style) is not too hard. What about a screw cutting lathe? Maudsley figured out how to make a lead screw without a screw cutting lathe. How? Chase it? I suppose that must be the answer, but I haven’t seen the procedure documented.

And this is just one example. You’ll probably want nitric acid. Can you make that?

Do you want to communicate? Can you find Morse code, or semaphore code? Do you want a radio, and how would you make the parts? Even a first generation radio (spark transmitter, crystal receiver) takes electric power and headphones and other stuff you would have to learn to make.

pkoning

Black powder is a low explosive. It deflagrates instead of explodes.

Does this mean it is less powerful than a high explosive? I’m not the one to answer that.

In doing research, I found that in some mining situations in the past, they would create a room to hold the explosives. The room would be filled with high explosives to shatter the rock and black powder to push the rock out. The cartoons of rooms filled with “gunpowder” and “dynamite” were based on real-world things.

I have not attempted to make any high explosives. I have the knowledge, I have some books on how to do it, I have not done it. Therefore, I do not have the skill(s) — yet.

One of the interesting aspects of high explosives it that many don’t like to go boom. They need an initiation charge to do so. So you need a small amount of a more sensitive yet still energetic enough explosive to make the high explosive go boom.

One of my manuals describes how you create a blasting cap from a 5.56 case. Simplified, remove the primer from a spent case. Feed a slow fuse through the primer hole. Place it in the “press” to be filled.

The press is a wooden dowel that fits in the case mouth. It is attached to a wooden lever, with one end of the lever attached to a firm upright. The dowel is positioned only a couple of inches from the pivot point.

The lever is a couple of feet long. At the far end is a hole for a rope. The rope leads down to a snatch block (pulley) on the ground.

To use the press, you put a small amount of the primary explosive in the case. You GENTLY put the wooden dowel in the case mouth. You go a good distance away to the end of your rope, and you gently pull the rope to pull the lever down to press the primary explosive into the case.

When you have an unexpected explosion of the primary explosive, you are hopefully far enough away and behind cover so you are not harmed.

Yeah, not for the faint of heart.

Primers, again something I have knowledge about, I haven’t attempted it. I have been collecting spent primers for a few thousand rounds, just in case.

As for technology returning rapidly? Yeah, it will. Not because of any one person, but because of the wealth of skills that exist. As my mentor used to say, “If the Internet were to be destroyed tomorrow, it would be back up in a couple of weeks because geeks can’t live without their porn.”

It isn’t so much that we could rebuild everything, it is that we have so much “scrap” that could be brought back on line.

My plan for books is to take a few thousand with me. A Kindle device with a low-power draw and a few thousand books sitting in a cage to protect it from EMPs. Hell, multiple such devices. I have small memory devices of 64GB. You can put a hell of alot of data on one of those. And duplicate it.

Paper books would be a back-up, and we have bookshelves of such books.

Suppose you have to start over with basic hand tools and a stock of metal. Can you make things?

I have a foundry. I can make castings. I can make patterns. This is a good first step. Can I pour iron? I have the knowledge and tools to do so. I haven’t poured iron. I’ve only poured aluminum.

Aluminum isn’t as good as iron for most castings, but it is better than wood. There is plenty of aluminum to be had as scrap.

I do have a lathe. The lathe I have is belt-driven. That belt is powered by a 3 phase electric motor. I have the skills to make new leather belts for it. In a worse case situation, I can get slow speeds from it with a human-powered system, like a bicycle.

This is the reason I learned how to make safe steam boilers (knowledge) and steam expansion engines (skill). I have a generator set that I plan to make steam powered, if required, to make electricity for the mill.

Can I make a wood cutting lathe? Yes. I have the skills to use it.

Can I make a wooden screw? Yes. I have done so. The thing about making screws is that you only need to make one course and nearly correct screw to be able to create any screw of any quality.

The magic is in the reduction gears. Assume you want to make a screw that is a precise 8 threads per inch. You start with a hand cut screw of whatever pitch say 1.5x6tpi. This is a tap and die set you can pick up on Amazon. You can get different diameters and pitches.

Even if this thread is not that precise, you can use it to make a more precise thread. If you feed this at a 4 to 1 ratio, you can get a pitch of 24. If you run it a 4 to 3, you can get your 8 threads per inch. The gearing might be a bit complex, it will take some time to get it right, but it can be done.

Of more interest is making flat surfaces and right angles. With three right-angle samples, you can create three right angles and with 6 flat faces.

Start by making a flat surface. This is done by starting with three nearly flat surfaces. Call them A, B, and C. Ink B and use it to find “high spots” on A. Scrape down the high spots on A. Repeat with C on B.

A and C are now flatter as referenced to B. Ink C and use it to find high spots on A and B. Scrape the high spots. A and B are now flatter as referenced to C. Repeat for switching your inking surface each time. You can get a flat surface within the limits of your ink and the material you are using in short order.

It took me a couple of weeks to accomplish this with rough aluminum castings. Mostly because I was only working a couple of hours per week on it.

Once you have your flat surfaces, they become your reference. You can now make one face of each of your right angles flat. This doesn’t take much time because it is relatively easy because you are only scrapping one surface at a time.

Now that you have those three faces flat, you can use the same method of A, B, and C with the vertical surfaces. If A is your reference surface, and it is out 0.100 over 4 inches, and you use it against B and C. Both B and C will be scraped towards a 0.100 IN over 4 inches.

If you continued like this, you would end up with angle blocks that are not square.

But, when you rotate through a different master each time, the angles will move towards vertical.

A is out 0.100, this causes B and C to be IN by a little. Not the full 0.100. We now test A against B and A will be cut IN a little, making it more correct. B and C will hit lower than the top and will modify there.

Each round, the surfaces get better and better.

Can I make nitric acid? I have the instructions someplace. Again, knowledge, not skill.

I don’t know morse well enough. I have knowledge but not skill. I have references for semaphore. Knowledge, not skill. I have real-world cypher experience. I haven’t built a radio in 50 years, but again, I have the references.

So the brief answer is keep learning. Have fun learning. And make sure you translate that knowledge into skills.

There is a shed on my property that my children and I built. I built it as if I were building a house, but in small. I built it to translate knowledge into skills. And we learned. Boy did we learn.

Zombie hands rising in dark Halloween night.

Preppers and The Zombie Apocalypse

I grew up a prepper. Most of the people I knew were preppers. The difference was that it was normal.

My parents were born at the tail of the great depression. They lived through WWII as children and suffered the rationing that took place in the US.

My grandparents planted and tended a garden every summer. It was just the norm.

We once lived a good 2 hours from any supermarket. There was a local grocery, but everything there was pricey. It was the sort of place you went if you ran out of eggs.

Once a month, my mother would drive onto base in DC and shop at the commissary. She would have three or four carts of food. She purchased a month’s worth of milk. When we got home, everything was put away in freezers. We had “fresh” milk for about 3 days per month, thereafter, it was from frozen.

When we could, mom had a garden. She was never happier than when she had an entire acre of garden.

People think about “getting started” with prepping.

I believe this is the wrong mindset. The correct mindset is to start thinking about what knowledge and skills do you need?

Skills and knowledge are entirely different things. You might know how to wire an electrical outlet, but do you have you done it? Do you know how to use the tools? Do you have the right tools? Can you do it without harming yourself or others?

Because of my parents, I started with a “being prepared” mindset. There was always enough food in the pantry, freezer, and refrigerator. It was just the way I grew up.

I remember the first major snowstorm in Maryland after my daughter was born. Wife number one wasn’t satisfied with what we had in the refrigerator. Our child would starve if I didn’t get some milk, right now.

I put on my calf high moccasins, my wide brimmed hat, my winter coat and walked to the 7/11 to get milk.

On the way there, I pushed a female cop’s car out of the snow bank three times.

My wife was in a panic. I was not. I had powdered milk, a supply of gravity feed fresh water, and a camp stove. There was nothing to worry about.

I was wrong. I had knowledge, but not enough skills.

I’ve spent the last forty years learning more skills. What skills I didn’t learn for myself, I found people I love and trust to have those skills.

When I lived in Maryland, it felt like there was a strong chance of a war engulfing the East Coast. Not American vs. American, but of actual foreign soldiers on our soil. I had the money, I spent that money on firearms for battle. I wasn’t thinking of hunting. I wasn’t thinking of food and shelter.

I was ignorant. But it was a step in the correct direction.

Today I have more skills, I have a better idea of what I don’t know. I still don’t know what I don’t know, but I can see that I have gaps.

One of the people making comments suggested that I have a flintlock style firearm. Amazingly enough, that is coming to my home shortly.

The Fort At #4 represents the time around of the French and Indian war. I am working with some reenactors to find a smoothbore that is period correct and a rifle. I want a Kentucky long rifle. I’ve loved the look of that rifle since watching Daniel Boone on TV.

I not only know how to make black powder, I’ve done it. I have extensive notes on how I did it. I have the tools to manufacture it, about 2 pounds at a time.

We are practicing making salt-peter but haven’t succeeded yet. I’ve made proper charcoal. And I have some sulfur. KNO3 is also around here.

I want to make my own primers, but it is not worth the risk.

I’ve made my own slow fuse and my own fast fuse. I’ve made fireworks. All cools stuff.

If I’m talking to somebody knew to prepping, I always start with the rule of threes.

  1. You can live 3 minutes without air
  2. You can live 3 hours without shelter
  3. You can live 3 days without water
  4. You can live 3 weeks without food
  5. You can live 3 months without hope

Without air is first-aid, hygiene, medical. If you are bleeding out, you aren’t going to make it the 3 hours to die without shelter. If you aren’t breathing, nothing else will matter in a few minutes.

Without shelter includes fire making, proper clothing, proper shelter from the elements, and the skills to build a home.

While 3 hours sounds extreme, consider falling into a freezing river in winter. How long will you survive? How long will you survive in the desert without proper protection from the sun?

For whatever reason, most people put food before water. Water is life.

Back in the ’80s, the army was looking at the best way to hydrate their soldiers. One method was to only allow the men to drink at rest stops, and only as much as they wanted. Another was to make them drink a certain amount at rest stops. Another was drinking on the move and making sure they drank “enough”.

The test was simple, take a group of soldiers, make them hike a distance, then test them in a combat situation.

Method one had the men combat ineffective at the end of the march. They were combat ineffective for a couple of days after.

Method two had the men combat effective after a few hours of rest at the end of the march. They were combat ineffective for the next few days.

The third method? The troops arrived and immediately went into combat, they were effective. They were able to repeat the test the next day without issue.

There is a reason that the military has hydration rules that push water into the men. There is a reason that hydration packs are worn by sailors.

Three weeks without food is pushing it. People become less capable after only a few days without food.

Our family added, “Three months without hope.” Hope is having some form of joy with you. Pictures of loved ones. A deck of cards. Anything to help take your mind off what you are going through.

One of the biggest takeaways I can give you, if you are starting to prep, “Don’t plan on survival, plan on living. Life was strong before our modern society, and life was good.”

I close with a definition of a zombie. A zombie is that city dweller, from a deep blue city, that hasn’t eaten in a week, is drinking unfiltered water wherever they find it, and they are stripping the countryside clean of all food and goods.

We saw zombies burning down cities because a criminal died of heart disease while in police custody. When you think of zombies, think of those drones, living in a city with less than 24 hours of food.

On the wall…

There are five rifles on the wall. Four lever action and “Mrs. Pink”, an AR-15 platform with pink furniture. Don’t ask.

They are known as “Bear”, “Deer”, “Raccoon”, “Squirrel”, and “Mrs. Pink.”

Bear is a Henry Big Boy in 45-70. Deer is a Winchester model 94 in 30-30. Squirrel is a Henry Golden Boy in .22LR.

We do have bear around here, and I know that Bear has enough stopping power, with rapid follow-ups.

Deer has taken a couple of deer. She does a fine job with iron sights for me out to around 150 yards.

Squirrel isn’t used for squirrel hunting, but damn he’s fun to shoot.

That leave’s Raccoon. Raccoon is a Rossi R-95 in .357 Magnum. She eats .38 special just fine. She is a little loose where the stock attaches to the receiver, but she will put rounds on target out to 100 yards with no problem.

The lever action in .357 is a nice, mid-weight, rifle. I’ve used it for taken fat raccoon and opossums. One shot and they are down.

She is easy to reload for, and it is easy to police up all the brass. I cast hollow point bullets for her and have some commercial bullets for her as well.

All in all, she is a great rifle.

There is a matching wheel gun in .357 magnum. I don’t have enough time with that revolver. It is more than capable of putting rounds on target, I’m not. It doesn’t shoot like my Sig nor my 1911s.

Would I recommend an R-95 for a first-time gun buyer? No.

They don’t have a great reputation. The loading gate is nasty sharp, it needs a little care to get it to function easily. I found that finding ammo for it was a bit of a pain. With reloading, it is a joy.

Mrs. Pink as a red dot on her. She belongs to my wife. We run the manual of arms every so often, but I figure she has 30 rounds before she needs an assist to load the next magazine. But I know that those 30 rounds are going exactly where she wants them to go.

The iron sights on the four lever guns work fine for me today. I have another 30-30 that has a scope mounted on it. I need to spend a few dollars to replace the scope with something modern and then sight everything in.

All in all, those rifles make up the “go to” when needed now.

The other part of this are the LBV that are available for use. Each vest has 6 30 round mags of 5.56, at least 2 spare mags for the pistol that goes with the LBV, and a first aid kit.

Past Plans

When I was considering buying my first firearms, I was looking at “what happens if…” My thought process was based on the concept of availability of ammo after the fall.

That lead me to an AR-15 in 5.56, an AK type rifle in 7.62×39, a 9mm Glock, a bolt action in 7.62×51, a black powder revolver, and a black powder rifle.

The firearm I have the most fun with, to this day, are the AR’s. They are gentle on the shoulder, the ammo isn’t too expensive, they are easy to carry and are just plain fun.

Though I will note that they eat ammo rapidly. It isn’t an unusual range day when I won’t send 300+ rounds down range.

I still have .308 from the original ammo buy. I’ve augmented it with reloads, but I don’t feed much through that rifle.

Of course, once I started buying firearms, it hasn’t really stopped.

Regardless, as more than one person has said, when the SHTF, the best firearm is the one you have.

Bondi v. Vanderstock 604 U.S. ___ (2025)

This is an outcome that I disagree with.

This was a 7-2 option in favor of the state (the bad guys).

Thomas wrote a great dissent, I agree with him about the correct outcome.

Alito did a better job of explaining why the court got it wrong.

On the record here, I would not hold that respondents agreed that the Salerno test should apply. The Court relies on the use of the term “facial” in their complaints, but that characterization of their challenges did not constitute agreement with the proposition that a facial challenge to a regulation must satisfy the Salerno test. And in fact respondents never conceded that point. They did not address the issue at all in their briefs, and at no point during the lengthy oral argument in this case were they asked about that question. Holding that they conceded the point is unwarranted and extremely unfair. And in any event, we should adjudicate a facial challenge under the right test regardless of the parties’ arguments. See Moody v. NetChoice, LLC, 603 U. S. 707, 779–780 (2024) (ALITO, J., concurring in judgment).
— Bondi v. Vanderstock, Alito dissenting

Emphasis added.

Facial challenges that require the Salerno test are the most difficult to win. The challengers must prove there is no case in which the regulation is legal (or constitutional).

This is what happened in Rahimi. The court found that §922(g)(8) withstood a facial challenge because a person who had been found to be a violent danger to others could be temporarily disarmed.

The Court found that there was a tradition of disarming violent persons in the late 1700s. That the disarmament could only be temporary, and it had to be properly adjudicated.

Because of the very limited scope they found, the law survives the facial challenge.

By extension, a lifetime loss of Second Amendment protected rights runs against the opinion in Rahimi.

Here, the state slipped in a statement about Salerno. The respondents (good guys) didn’t feel it needed a response, so they didn’t respond.

The majority of the Court then took this as the respondents agreeing that Salerno should control.

Now that Salerno attaches, all the state need do is find ONE example where the regulation is acceptable.

In this case, they used an example, provided by the state, of a frame that required two plastic tabs clipped and filed, and a few holes drilled. Something any of you should be capable of doing in 10 to 15 minutes.

The other was a complete kit which contained everything to assemble a firearm. The time to assemble was listed as around 21 minutes.

As Alito points out, this means that those two are firearms, as defined by the GCA of 1968. It doesn’t say anything about the rest of the frames and receivers out there.

Regardless, background checks are unconstitutional, in my opinion.


This is 12 hours late. I am working a hard deadline for a client that has to be able to handle tariffs correctly by April 2nd. Sorry about that.

Ivory Ball Phython Snake curled up in the straw.

How Many Languages Do You Speak?

In computer languages, there are very few that are structurally different.

FORTRAN is like COBOL, which is like Pascal, which is like BASIC, which is like ADA, which is like …

Forth is not like those above. Nor is APL or Lisp.

Assembly languages can be used in structured ways, just like FORTRAN, COBOL, Pascal, and many others. It requires the discipline to use if not condition jump skip_label; do stuff in condition; skip_label:. The actual programming logic stays the same.

The two computer languages I dislike the most are PHP and Python. Both because they are weakly typed.

In a strongly typed language, you declare a variable’s type before you use it. The type of the variable is immutable for its lifetime.

In other words, if you declare a variable of being of type integer and then attempt to assign a string to it, it will barf on you during compilation.

In PHP, all variables look the same, any variable can hold any type at any moment. The type can change from line to line. And the language will do implicit type casting. It is hateful.

Python has all the same characteristics I hate in PHP, with the added hateful feature of using indentation instead of begin-and markers for blocks.

I’m lucky that Python has an optional typing capability, which I use consistently. The optional part is a pain when I want to use a module that has no typing information. When that happens, I need to create my own typing stub.

But the worse part of all of this is that they get jumbled together in my head. How many entries in an array? In PHP, that is determined by the count() function, in Python it is the len() function.

In Python, the dot (.) is used to access methods and attributes of objects. In PHP, it is the concatenation symbol.

I am tired of writing Python in my PHP files and I dread switching back to Python because I know my fingers will mess things up.