

Ward Cunningham, creator of Calvin & Hobbes?
No relation to the sports channel.
Ward Cunningham, creator of Calvin & Hobbes?
Marathon’s Security Officer already had the green armor and shiny mask.
It has been obvious for many years that the Trump movement aims at the downfall of America, through the promotion and exaggeration of America’s flaws and the increasingly violent suppression of its virtues.
I recommend picking up Graham Hutton’s short text Programming in Haskell, Second Edition. Even if you don’t end up using Haskell in “real work” (and you might!) it will teach you a remarkable number of things about how functional programming works.
England has a surfeit of terms for obnoxious people.
I may have made those last two up.
The term “open source software” was coined specifically to refer to software licensing that recognizes a particular set of freedoms. It is not a generic term for source-available software, and never was.
One of the freedoms of open source is “no discrimination against fields of endeavor.”
Calling the Hippocratic license family “open source” is inaccurate, since its entire goal is to discriminate against certain fields of endeavor.
It’s better described as a sort of source-available license.
Lichess may be the best board game software for any board game ever. It’s that good.
The ruble is worth more than the penny, but it’s way down from 2008 when it was almost a nickel.
To be clear, I mean people who praise Hitler, get swastika tattoos, blame everything on a Jewish Conspiracy, etc.
You know, Nazis.
Not really. Nazis are scum and deserve to be kicked out.
I drifted slowly from right-libertarian to a more leftish position: pro-union, pro-social-programs, skeptical of the compatibility of unregulated capitalism with individual freedom. Still no fan of tankies.
This wasn’t from anyone sitting down and trying to convince me, though. Part of it was discovering how close right-libertarianism had always been to white-supremacism: some old Ron Paul newsletters were unpleasantly enlightening. Part was seeing people who called themselves “libertarians” line up with the far right to support state violence, especially against black and brown people. And heck, part was from getting richer and seeing how that worked.
I have a lot of sympathy for the frustrations that get young men into right-wing positions and occasionally I try to puncture some of the nonsense they’re being fed.
The 45 RPM adapter is this already, between generations.
Fascists lie.
As long as the US military remains capable of projecting force abroad in defense of America’s traditional allies, the US military will be the enemy of the Trump administration.
Hurting LGBT people is fun for the Trumpies, but their overall goal is to wind down America as a world power; and specifically to hand the children of Europe over to Putin’s rape gangs.
To be clear, Putin won’t get far unless France falls to fascism first, because France has nukes and will remember how to use them for things other than offending Kiwis.
As a reminder, Eich was turfed from Mozilla for joining an anti-LGBT hate campaign (and thus alienating a whole lot of developers, sponsors, and users); and his So Brave browser pushed NFTs and stole money via referral fraud.
exploiting the fact that literacy among blacks was lower
That wasn’t the exploit. The exploit was twofold:
Well someone’s a scrub there …
Congratulations … you’ve trained a generation of junior product managers.
The answer given in the spoiler tag is not quite correct!
According to the spoiler, this shouldn’t match “abab”, but it does.
This will match what the spoiler says: ^.?$|^((.)\2+?)\1+$
Any Perl-compatible regex can be parsed into a syntax tree using the Common Lisp package CL-PPCRE. So if you already know Common Lisp, you don’t need to learn regex syntax too!
So let’s put the original regex into CL-PPCRE’s parser. (Note, we have to add a backslash to escape the backslash in the string.) The parser will turn the regex notation into a nice pretty S-expression.
> (cl-ppcre:parse-string "^.?$|^(..+?)\\1+$")
(:ALTERNATION
(:SEQUENCE :START-ANCHOR (:GREEDY-REPETITION 0 1 :EVERYTHING) :END-ANCHOR)
(:SEQUENCE :START-ANCHOR
(:REGISTER
(:SEQUENCE :EVERYTHING (:NON-GREEDY-REPETITION 1 NIL :EVERYTHING)))
(:GREEDY-REPETITION 1 NIL (:BACK-REFERENCE 1)) :END-ANCHOR))
At which point we can tell it’s tricky because there’s a capturing register using a non-greedy repetition. (That’s the \1
and the +?
in the original.)
The top level is an alternation (the |
in the original) and the first branch is pretty simple: it’s just zero or one of any character.
The second branch is the fun one. It’s looking for two or more repetitions of the captured group, which is itself two or more characters. So, for instance, “aaaa”, or “abcabc”, or “abbaabba”, but not “aaaaa” or “abba”.
So strings that this matches will be of non-prime length: zero, one, or a multiple of two numbers 2 or greater.
But it is not true that it matches only “any character repeated a non-prime number of times” because it also matches composite-length sequences formed by repeating a string of different characters, like “abcabc”.
If we actually want what the spoiler says — only non-prime repetitions of a single character — then we need to use a second capturing register inside the first. This gives us:
^.?$|^((.)\2+?)\1+$
.
Specifically, this replaces (..+?)
with ((.)\2+?)
. The \2
matches the character captured by (.)
, so the whole regex now needs to see the same character throughout.
“Hallelujah” is a song about sex — but it’s not dirty sex, it’s holy sex.