Slate, M.D.
===========
2026-02-01
----------
### 5-D Poker
The world needs an "illegal poker" game that is truly 5-D (the D stands for
Deck).
The game is five-card draw. Two hundred and sixty cards from five decks are put
together. In the first betting phase, the first bet, and every raise, is paired
with a declaration of "legal" or "illegal", meaning that all illegal hands will
rank below all legal hands, or legal and illegal hands will rank together,
respectively. An illegal hand is one that contains duplicate cards, whether or
not the duplicate improves the hand's rank.
| Hand | Count | Count (Legal) |
| ----------------- | ---------- | ------------- |
| 5-of-a-Kind Flush | 52 | |
| 4-of-a-Kind Flush | 15600 | |
| Full House Flush | 62400 | |
| Straight Flush | 125000 | 40 |
| 5-of-a-Kind | 201500 | |
| 3-of-a-Kind Flush | 858000 | |
| Two Pair Flush | 1716000 | |
| One Pair Flush | 14300000 | |
| 4-of-a-Kind | 15100800 | 624 |
| Full House | 33727200 | 3744 |
| (Any) Flush | (33039552)| 5108 |
| Straight | 31875000 | 10200 |
| 3-of-a-Kind | 390390000 | 54912 |
| Two Pair | 617760000 | 123552 |
| One Pair | 4332900000 | 1098240 |
| High Card | 4070437500 | 1302540 |
This game introduces flush variants of every hand, including the special five-
of-a-kind flush, which is of course highly illegal.
For an example of strategy, imagine that you are dealt 9♦ 9♦ 9♦ K♦ 3♣. You
should be willing to go all-in before the draw to secure an "illegal" bid,
and then draw, replacing the 3♣, to try for a three-of-a-kind flush.
2026-01-04
----------
This script writes the date, counting backwards from the Kalends, Nones, and
Ides, to an element with `id="date"`, and writes the year as a Roman numeral to
an element with `id="year"`.
The Roman numerals are handled in an infinitely extensible way using compact
logic.
```js
"use strict";
function dateNewRoman() {
const now = new Date();
let jsYear = now.getFullYear();
const jsMonth = now.getMonth();
const jsDate = now.getDate();
let Kalendae;
let Idus;
let Nonae;
let bissextus = false;
if (jsMonth == 1) {
Kalendae = 29;
} else {
Kalendae = 31 - Number([3,5,8,10].includes(jsMonth)) + 1;
}
const oldHollowFull = [2,4,6,9].includes(jsMonth);
Idus = 13 + 2*Number(oldHollowFull);
Nonae = Idus - 8;
let ordinal;
let date;
let month = jsMonth;
if (jsDate == 1) {
ordinal = 1;
date = "Kalendis";
}
else if (jsDate > Idus) {
ordinal = Kalendae - jsDate + 1;
month += 1;
month %= 12;
if (jsMonth == 1 &&
jsYear % 4 == 0 &&
(jsYear % 100 != 0 || jsYear % 400 == 0))
{
bissextus = (ordinal == 6);
ordinal = ordinal < 6 ? ordinal + 1 : ordinal;
}
date = "Kal.";
} else if (jsDate > Nonae) {
ordinal = Idus - jsDate + 1;
date = ordinal == 1 ? "Idibus" : "Id.";
} else {
ordinal = Nonae - jsDate + 1;
date = ordinal == 1 ? "Nonis" : "Non.";
}
if (ordinal == 1) {
ordinal = ""
} else if (ordinal == 2) {
ordinal = "Prid. "
} else {
ordinal = "a.d. " +
(bissextus ? "bis " : "") +
["","x"][Math.floor(ordinal/10)] +
["","i","ij","iij","iv","v","vi","vij","viij","ix"][ordinal % 10] +
" ";
}
month = [
"Jan.","Feb.","Mar.","Apr.","Maj.","Jun.",
"Jul.","Aug.","Sep.","Oct.","Nov.","Dec."
][month];
let year = "";
let symbols = ["I","V","X","L","C","IↃ","CIↃ"];
let decimalPlace = 0;
let padding = "";
while (jsYear) {
if (decimalPlace >= 2) {padding = " ";}
year = (
jsYear % 5 == 4 ?
symbols[0] + padding + symbols[1 + Number(jsYear % 10 > 5)]
: (jsYear % 10 >= 5 ? symbols[1] : "") + padding +
(symbols[0] + padding).repeat(jsYear % 5)
) +
padding + year;
jsYear = Math.floor(jsYear/10);
symbols = symbols.slice(2);
symbols.push(symbols.at(-2)+"Ↄ");
symbols.push("C"+symbols.at(-2)+"Ↄ");
decimalPlace += 1;
}
const displayDate = ordinal + date + " " + month;
document.querySelector("#date").innerHTML = displayDate;
document.querySelector("#year").innerHTML = year;
}
```
2026-01-01
----------
### Don't Abide the Mnemonic "New Year, Sundial Slow"
Appeal instead to the visible configurations of the sky: rote memorization
is not the enemy of intuition, but excessive abstraction is.
* * *
The Sun's motion can be analyzed into a diurnal and an annual component:
the *anomaly* of the annual component is the cause of the equation of
time relating the clock to the sundial.
Imagine photographing the sky every day at midday. The Sun will appear
higher (more northerly) in the summer than in the winter, but the shape
of the path traced is not obvious. In fact, it is a narrow lemniscate or
figure-eight, with the Sun tracing the northern lobe counterclockwise, and
the southern lobe clockwise.
At the top and bottom of the figure, on the solstices, the Sun's annual motion
is due east (toward the left in the sky), but at a high declination, where the
lines of equal right ascension are more narrowly spaced. On the equinoxes,
the Sun moves most obliquely to the equator, crossing the center of the figure
both ways toward the west (the right).
So much for referring uniform zodiacal motion to the equatorial grid. Now, the
Sun's (ever eastward) zodiacal motion is fastest in the early winter, and
slowest in the early summer. By itself, this anomalous motion would appear as
an oscillation left and right throughout the year. But, knowing that it
reinforces the lemniscate motion at the winter solstice, and opposes it at the
summer solstice, the compounded effect of the motions is that the southern
lobe is actually larger, and the northern lobe is smaller.
Any question about when the Sun will rise, set, or culminate can be answered
without an ephemeris by imagining this figure in the sky.
2025-12-16
----------
One problem to do with improving the Terminal page (which is intended to be
where text-based JavaScript interactives live, nothing more) is the open-ended
array of hotkeys that attend the interface before even reaching any actual
program. Taking Command Prompt as the standard to emulate, I have found so far:
| Input | Action |
| ------------------------------- | ----------------------------- |
| Mouse Scroll | scroll by 3 lines |
| Ctrl-Up/Down | scroll by 1 line |
| Ctrl-Left/Right | bump caret to start or end |
| Shift-Left/Right | select consecutive characters |
| Shift-Up/Down | select consecutive rows |
| Enter (without selection) | run command |
| Right Click (without selection) | paste |
| Enter (with selection) | copy |
| Right Click (with selection) | copy |
2025-11-30
----------
The CSS "marquee substitute" is
[here](https://codepen.io/jamesbarnett/pen/kQebQO),
but nothing looks like the genuine article.