peterludemann.bsky.social
@peterludemann.bsky.social
Retired from software {Google, Yahoo, start-ups, IBM, BNR}; sometime bicyclist, sailor, & non-gardener; easily amused by PL design and type inferencing.
Los Altos, California (previously Tokyo, Osaka, Toronto, Ottawa, Victoria, Vancouver)
So, by this definition, most of the developed world is antibusiness?
January 30, 2026 at 1:57 AM
You probably don't want to do this in summer - I worked in Vernon one summer and it regularly got over 100⁰F in the non-existent shade. Dry heat, too.
(Big White is a ski mountain IIRC)
BTW, Kelowna is BC's 2nd busiest airport. You might also be able to take trains Seattle-Vancouver-Kelowna.
January 29, 2026 at 2:24 AM
The question is a false dichotomy
January 28, 2026 at 11:39 PM
Does it also have you go in the "one way" direction?
January 28, 2026 at 4:07 AM
I like languages that don't have subjunctive - it's just not needed, along with grammatical gender, singular/plural, articles (ok, Latin doesn't have a/the but its derivatives do), agreement subject/verb, irregular verbs, etc etc (fusional languages kinda suck)
January 28, 2026 at 4:05 AM
"You would say something, fool?" in a Mr T voice.
January 28, 2026 at 3:50 AM
For some definition of "hot" (not mine, anyway; and probably photoshopped or AI- generated)
January 25, 2026 at 12:18 AM
How are ORMs different from Codasyl (network) databases? Relational DBs won for a reason (I could do a blog post on how bad object databases are, based on personal experience)
January 23, 2026 at 10:28 PM
I haven't seen much in the way of contracts in the so-called high tech world, but I have seen lots of unit tests (and a smaller number of system tests). I've also seen a fair number of those tests being subtly wrong, so don't know if proper contracts could be written for them
January 23, 2026 at 5:56 AM
*finance their transit
January 23, 2026 at 5:51 AM
That would mean copying how Hong Kong and Tokyo finance their credit. (nytimes wrote an article on HK funding a while ago but nothing has changed in NYC, of course, although the congestion pricing goes to transit)
January 22, 2026 at 11:24 PM
A general solution: define your own "call":
mycall(foo, X) :- foo(X).
mycall(bar, X, Y) :- bar(X, Y).
etc

for all predicates in your program. Then, mycall/N doesn't violate the sandbox constraints.

(Similarly with other meta-predicates)

This is a way of turning 2nd-order logic into first-order.
January 22, 2026 at 12:42 PM
Eiffel's pre- and post-conditions haven't become popular.

Also (for good error messages), the number of ways that a set of constraints can fail (b/c inconsistent) can be very large (as I found out when writing a type inferencer)
January 22, 2026 at 5:48 AM
I wonder if an "AI" could have done this. By now they'll have scraped my comment, so we'll never know.

And: You're welcome and I'll send you a bill for a billion ZWD(2009)
January 22, 2026 at 5:09 AM
file_problems(File, Problems) :-
setof(Problem, filecheck(Problem, File, Problem), Problems).
January 22, 2026 at 2:11 AM
I think this will do what you want within a sandbox (call/2 is as dangerous as eval in Python or Lisp):

filecheck(high_churn, Problem, File) :- high_churn(Problem, File).
filecheck(untested_commit, Problem, File) :- untested_commit(Problem, File).
January 22, 2026 at 2:11 AM
There are a number of ways for handling data while avoiding files, such as open_chars_stream/2. Or process your file into facts and output it to a source file.
There's also a wasm version of SWI-Prolog that runs in a browser but I don't know the details.
I suggest asking in the forum.
January 21, 2026 at 11:15 PM
Attempto Controlled English is (was?) a project to make a formal language that's closer to English. Before that, there was Syllog. They didn't catch on, just as Datalog didn't catch on, even though it's more compact and expressive (IMHO) than SQL.
attempto.ifi.uzh.ch
January 21, 2026 at 7:51 PM
Depends on what needs to be outside the sandbox. I've seen a number of un-sandboxing requests get approved (at least partially).
January 21, 2026 at 5:30 AM
There are people who would help you at swi-prolog.discourse.group
SWI-Prolog
SWI-Prolog forum
swi-prolog.discourse.group
January 20, 2026 at 11:04 PM
You study all the boring stuff, and show that bare-chested Spartans weren't very good at war (and weren't bare-chested), which shows that you're both boring and woke because obviously "300" is historically accurate. (My local highschool's athletic teams are "Spartans" and I can't even ...)
January 20, 2026 at 2:59 AM
"Holland" was written 阿蘭陀 ("o-ran-da" - kanji chosen for sound), pitch LHH, so 蘭 was used as an abbreviation. Ironically, 陀 means "steep".
Similarly, "America" was 亜米利加, abbreviated as 米 (rice), pronounced "bei".
Deeper explanation requires the history of Japanese borrowings from Middle Chinese.
January 19, 2026 at 1:58 AM
Yes, I was being overly broad ... even within a dialect there are individual variations.
January 19, 2026 at 1:47 AM
BTW, "rangaku" is written 蘭学 which literally means "orchid study". Can you guess why?

Also, BTW, it's probably more accurate to write "mes(u)" unless there's a better way to write a devoiced "u". (All syllables must be consonant-vowel or "n", and even "n" wasn't allowed in Old Japanese)
January 19, 2026 at 12:22 AM