This old Gen-X'er is always happy to see he's not alone.
This old Gen-X'er is always happy to see he's not alone.
The case began after a wealthy lawyer from Australia purchased a yacht named the Mignonette and hired Captain Dudley, an experienced seaman, to deliver it from England. Dudley set out from Southampton in May 1884 with three crew members. They hit a storm off the coast of Africa. The Mignonette was swamped by a massive wave that towered halfway up its masthead and destroyed the ship. The men barely escaped with their lives, and they did so in a lifeboat with almost no food or water.They drifted for over three weeks in that tiny boat, during which, among other misadventures, they had to fight off a shark that rammed them from below. When the captain decided they were in danger of dying of hunger and thirst, he slit the neck of the cabin boy, Richard Parker, an amiable 17-year-old orphan who had been excited to make his first real sea voyage. The captain said he chose Parker because the cabin boy was the weakest of the four, having drunk seawater that made him sick—but the truth was, it was almost always the cabin boys, or racial or national minorities, or others at the bottom of social hierarchies, who were chosen to be eaten. The three surviving men feasted on the boy’s body.
Source: The 1884 Cannibalism-at-Sea Case That Still Has Harvard Talking | Harvard Magazine
I have seen the future. And that guy is its star.
Let's listen to the Banana Splits!
You're welcome.
I'm working on a side project of my own - a Windows desktop application to apply video effects. It's written in Visual Studio (started in VS2022, now VS2026). I wanted to include a text editor to edit the 'script' files that drive the program, and I wanted one that could handle basic syntax coloring. So I looked around and found Scintilla.
Scintilla is a very nice, open source, text editor component. It's been around for a long time and has been used in many well-known applications (it's the editor behind the popular Notepad++ app, for example). But, there are surprisingly few examples of how to make it do all the various things it can do, on the web. There's the Scintilla documentation, but I didn't find it to be very useful when getting started. Once I started seeing how things worked, it did come in handy however.
You can find the source to a few large, open source, applications that use it (ex. Notepad++, SciTX). But those kinds of applications aren't always good references if you're just getting started in something because their usage is probably very complex and have become encrusted with their own patterns and mechanisms. You have to figure out enough of their workings to know which parts are and aren't applicable to what you need and which are just the things that their app needs.
Eventually I was able to get it to do what I wanted, mostly. But it took me a full week of digging on the web, to get it to do what my application needed. And so, I'm going to share what I came up with, in case anyone else finds themselves in my situation.
typedef void* (FAR WINAPI* CreateLexerPtr)(const char* name);
extern CreateLexerPtr gCreateLexer;CreateLexerPtr gCreateLexer;m_hModScintilla = LoadLibrary("Scintilla.dll");
if (m_hModScintilla == NULL)
{
TRACE("Scintilla load error : %d\n", GetLastError());
AfxMessageBox("The Scintilla DLL could not be loaded.", MB_OK | MB_ICONERROR);
}
else
{
m_hModLexilla = LoadLibrary("Lexilla.dll");
if (m_hModLexilla == NULL)
{
TRACE("Lexilla load error: %d\n", GetLastError());
AfxMessageBox("The Lexilla DLL could not be loaded.", MB_OK | MB_ICONERROR);
}
else
{
gCreateLexer = reinterpret_cast(GetProcAddress(m_hModLexilla, "CreateLexer"));
if (gCreateLexer == NULL)
{
TRACE("Lexilla CreateLexer load error: %d\n", GetLastError());
AfxMessageBox("The CreateLexer Lexilla from could not be loaded.", MB_OK | MB_ICONERROR);
}
}
}
Now your application is ready to create a Scintilla window and give it a lexer to do syntax highlighting.
So here is my fairly-simple MFC CDialog-based class that creates a Scintilla editor, sets it up for JSON lexing, sets some styles, does basic auto-indent, deals with the document's 'dirty' state, shows reading and setting of the document text. It can use either Scintilla's SendMessage API or the direct-call API (which end up being essentially identical once you define a couple of helper functions). In my application, it is used as a modeless dialog, and is based on a simple resizable CDialog base class, but neither of those things add any real complexity to the class. So, you should be able to take the Scintilla-related bits from this without much trouble.
I am far from a Scintilla expert, but if you have any questions, feel free to ask.
I am working on a programming-related post. So, I'm writing some comments in the code, explaining some things. Copilot, seeing that I'm using a personal tone, gives some suggestions about how I could sign my comment.
Of course, it doesn't know who I am, or what year it is, or anything at all about reality. But it does know how to spit out the stuff it was trained on:





Pete got into one his Mr Hyde moods the other night and bit me on the arm. In the morning, one of the punctures had started to swell. So, I went to the urgent care to get some antibiotics.
Apparently there's a county regulation that any doctor treating an animal bite has to report it to the local animal control department. So, last night I got a call from an animal control officer who took a statement about the incident and asked for Pete's vaccination records, etc.. He also said that Pete has to be quarantined for ten days - but, he can do that at home. Which is no different from any other 10 days, because Pete isn't allowed outside. And, they're going to send an animal control officer around to check to make sure that he's in quarantine (aka: in the house) twice during those ten days.
Our little guy now has a permanent record.

The latest version of Visual Studio (VS 2026) has Microsoft's AI assistant "Copilot" built-in. So, I've been trying to find a use for it.
Here's how that's going.
I have a class (CParameter) that can hold one of several types of data: integers, floating point numbers, text strings, booleans, etc.. This is used to pass parameters from a script (written in JSON) into an arbitrary set of "actors" who will perform various operations on still images. And then there's a class that holds a collection of these parameters (CParameterMap). So these are utility classes. They don't interact with the user or the screen; they simply exist to shuffle data from one place to another, transforming it from one type to another (ex. text to number) as necessary. And they are fairly simple. But since they are at the heart of the application I'm writing, I thought I would see in Copilot had any suggestions.
Classes like these show up in a lot of applications. "Data from outside sources needs to be collected and presented to the code that uses it in a way the code expects" is a common situation. I would expect Copilot to have seen many variations of this.
OK. Open the CParameter / CParameterMap file, open the Copilot chat pane, type "analyze this for performance".
Copilot chugs away for a few minutes, then comes back with 20 paragraphs of suggestions. Uh oh.
First paragraph:
Hot spots and costs
- Key type and container
- std::map
uses ordered tree lookups: O(log N). Every lookup constructs a temporary CString CListCtrl::GetEmptyText from const char* and then does node traversal — cost includes allocations/comparisons and pointer chasing.
Yes, maps have overhead. String keys are not ideal. I know.
"Every lookup constructs a temporary CString CListCtrl::GetEmptyText" ?
What?
CListCtrl is a UI component that shows collections of things, in various ways: strings, icons, grids, lists. The original Windows Explorer was built around it (maybe it still is). It's the classic example of what the control does: Here's your list of files in a grid; here they are in a list; here they are as icons of a different size; change the columns show, change the size. Same data, just shown in different ways. It's very useful and infinitely flexible, though notoriously complicated to use.
But specifically, CListCtrl::GetEmptyText is a function of CListCtrl that gives you a copy of what is known as the 'zero-state' message. It's the "There's nothing to display here" or "Your search returned no results" text. It's what gets shown when the list of things you would otherwise show is empty.
I don't use a CListCtrl, or anything like it, anywhere in my application. And a big complex UI component like CListCtrl has nothing to do with what my parameter collection code does.
But eight of the 20 paragraphs Copilot returned mention CListCtrl::GetEmptyText ! And I don't know why.
So, even though I know LLMs have no concept of their own internal state, and so they can't actually answer the question, I ask it anyway:
"Why are you talking about CListCtrl ?"
Here's the response:
Sorry — that was a mistake. There is no CListCtrl in the ParamMap.h you opened; any mention of CListCtrl was a context mix-up on my part.
Focus now: your CParamMap/CParameter analysis and optimizations. I can:
- Add non-copy lookup helpers (findParam, readRef) to avoid CString CListCtrl::GetEmptyText copies, or
- Convert m_paramMap to std::unordered_map with a CString CListCtrl::GetEmptyText hash/equal for faster lookups, or
- Run a targeted profiler pass to show hot call sites.
Which would you like me to do next?
Perfection.
Joe Rogan recently told the American Alchemy podcast that AI-powered machines could one day have a 'virgin birth,' creating advanced robots, or 'offspring,' capable of performing real-world miracles using technology.
'Jesus is born out of a virgin mother. What's more virgin than a computer?' Rogan told podcast host Jesse Michels during the interview released on Sunday.
'So if you're going to get the most brilliant, loving, powerful person that gives us advice and can show us how to live, to be in sync with God, who better than artificial intelligence to do that?'
Rogan suggested that AI-powered technology could soon replicate some biblical feats, potentially enabling humans to bring people back from the dead using medicine or mind-uploading technology.
'Artificial intelligence could absolutely return as Jesus. Not just return as Jesus, but return as Jesus with all the powers of Jesus. Like all the magic tricks, all the ability to bring people back from the dead, walk on water, levitation, water into wine,' Rogan claimed.
I've never been that high. Alas.
Somehow I never learned the origin story for this song.
(story is mostly in the first 2 minutes of this vid. and, if you're not into music theory, it picks up again at 13:20)