Neat™ Document Database

Problem

Every day, I receive physical documents, such as receipts, invoices, account statements, insurance policy updates, and so forth. Each of these documents should be retained for some period of time. Some of these documents should be forwarded to other people (such as, insurance provider or CPA). Physical documents take up space, and unless one is really, really dedicated to filing and indexing, they’re time-consuming to search, copy, and purge.

Continue reading “Neat™ Document Database”

Note Application Obsidian

There’s one person I know of who is an enthusiastic user of Obsidian. After seeing them fanboy about it for, like, a year, I finally thought I’d take a look at what it is.

It’s a note app. There are some cool affordances it offers, like built-in synchronization between devices, but fundamentally it’s all about recording, reading, and publishing your process mediated via a glowing rectangle that talks to a server somewhere. So, like, Evernote or something. I get the feeling that it could have some overlap or perhaps synergy with DevonThink (which is also a thing that I don’t use, but I know people who do).

It doesn’t solve a problem I have right now, although I can conceive of situations where I might want to use it. It can, for example, turn a big pile of notes into a wiki, which can be published to a server (or local drive?) so, kind of yay? It uses Markdown, which means that linking one note to another note is pretty easy, and because it parses its notes, it can draw a graph of the note blob as a network.

For now, though, my life is better off with a paper book and a pen.

Let’s Not Argue About Tools

I just ran across1 a thread in which a person asserts that GitHub Copilot is a bad tool precisely because it makes it easy to write lots of repetitive code. Their argument amounts to the claim that repetitive, boilerplate code is bad, and if you find yourself writing enough of it that Copilot seems like a good idea then You’re Doing It Wrong.

Read more: Let’s Not Argue About Tools

This is a thing I love2 about public discourse: not only do people tell other folks how to live their lives, but they manage to do it while also denigrating all the ways that are not theirs. This is not even confined to short-form social media; it’s even a staple of the lifestyle sections of newspapers.3 This drives “engagement” because insulting people gets them angry and defensive, and people who are feeling strongly about stuff (like, protecting their identities or their feelings of self-worth) are pretty motivated to take some kind of action.

If I pause to reflect, however, I am not able to come up with a single instance of having changed a person’s mind about something by telling that person that they’re an idiot and they’re doing it wrong. (That may, of course, be because I did it wrong.)

You know another tool that some people say you shouldn’t use? An adjustable wrench. Oh, there are reasons, and there are many times when another tool will serve you better, but people still have them and use them. Does that make them bad people?

Oh, yeah, and the argument that Copilot makes it easy to write lots of bad code? That’s just elitist gatekeeping. That’s just saying that you had to work really hard and think really hard and learn a lot of stuff in order to write elegant code, and nobody who didn’t do that should have the ability to bang out a steaming pile of spaghetti that accomplishes the same end.

Copilot is still problematic at best. It’s been trained on a bunch of code that was released under licenses that prohibit its use in that way, and because it is treating programming code as if it were language and not actually instructions, it can make some rookie mistakes just because the training code base also includes rookie mistakes. So, there are cautions and, as I wrote before, it’s really incumbent on the person using the AI tool to understand the limitations of the AI tool.

But let’s stop clutching our pearls and gasping, and let’s also stop calling each other names because of our choice of tools.

  1. By “ran across,” of course I mean that a friend boosted someone’s bumper sticker opinion and I allowed myself to read the whole sniping series. So that’s on me. ↩︎
  2. I specifically do not love this. ↩︎
  3. …and magazines and television and books and… ↩︎

Oh, You Meant Angst!

Two days ago the U.S president took a plane trip from the relative security of Washington, D.C. to somewhere in Israel (Tel Aviv?), which is an active war zone. He did this in order to…I have no idea. Be seen and talked about, I guess.

This morning, I saw a headline about the governor of California going to visit Israel, and I’m mystified. Why? What possible good does this serve?

And then, as I was washing dishes, I happened to think of a bumper sticker I used to see on hippie cars all the time when I was a kid: “What if they threw a war and no-one showed up?” And now, I get it.

That wasn’t an aspirational message, like, “Let’s not spend energy on wars,” but an anxious, fear-of-missing-out message, like, “Oh my god, you mean they went to all that trouble to throw a war and you didn’t even show up?”

Why do these people get elected?

Code Editor Nova

I hate having to come up with titles for things. I’m bad at it. With blog posts it’s even worse, since the thing I am thinking about when I start writing is often not even the thing that the post turns out to be about, and I suck at titles anyway, and then looking back, it’s all nonsensical. Case in point: I want to write about a “code editor” that I’ve now looked at a couple of times (Nova, by Panic) but the way I got to this point now was by looking through my email inbox (which currently has 110 “unread”) emails and so I thought maybe I should write about email and why I’m not unsubscribing from the marketing list that got me to take a look at the editor. So the initial title I filled in at the top was, “Inbox Zero Is Bunk,” but then as I started typing I thought about looking through all my old posts and their titles (wondering if I’ve already written about this editor) and how my clever titles mean I have no fucking clue what most of these things are about.

Continue reading “Code Editor Nova”

Doing DB Stuff in Vapor

Having imported a bunch of tables from an Access database into a Postgres database, I want to transform them so that the information can be used by a Vapor application. Mostly, that app is just going to do exporting again, but you never know; someday someone might actually want to do something more intricate.

Continue reading “Doing DB Stuff in Vapor”

Be Careful What You Wish For

So, a lawyer decided to use ChatGPT to “help” write some papers he filed in court, but got in trouble when the included citations were bogus.

The naive interpretation of this is that the computer program is broken, and it’s a danger to society and ought to be really regulated, and actually, I don’t disagree. However, there’s even more going on, here, that shows up below the fold in the story.

The lawyer, Steven Schwartz, claims that he was unaware that ChatGPT just makes stuff up. Never mind that this has been talked about openly in non-technical forums.

So here’s a flaw in the program:

• ChatGPT is utterly ignorant of and indifferent to the notions of “true” and “false.”

And here’s a flaw in the lawyer:

• Mr. Schwartz is fully cognizant of the notion of “true” and “false” and doesn’t care about them in and of themselves, but only insofar as getting caught telling falsehoods actually gets him in trouble.

And here’s a flaw in society:

• When a student submits a paper with false citations, that student suffers (gets a bad grade). When a person tells a lie in court, that person suffers (charged with perjury). When ChatGPT makes some shit up, ChatGPT does not, in fact, suffer. There is no negative consequence, so we don’t actually expect that its behavior is going to change.

“But what about fiction? It’s not always wrong to make stuff up!” I hear you say, because it makes my own objection sound like a chorus. And that’s true. But the thing that makes fiction okay is that we have figured out larger contextual cues that allow us to signal when it’s okay and when it is not okay to tell lies.

But that’s a really hard problem to solve! It’s way easier just to program the thing to “tell the truth only” or “don’t care about the truth” and not have to worry about switching back and forth between those two. But guess which of those two strategies is harder to implement? Right, it’s definitely harder to care than to be indifferent. So here’s another flaw:

• The programmers chose to implement a chatbot that emulates human writing and which is utterly indifferent to the truth.

…which is not actually a problem all by itself but then:

• The company took this program that writes prose like a human and is utterly immune to the consequences of its speech and turned it loose on the world.

The way I see it, there has to be feedback. Punish the system, and that system definitely includes those humans who are responsible for the system. If you want to participate in society, then you have to really participate, and that looks like learning, and trying not to do harm.

The Mysterious Fix

And now that we’re home and I’ve got a decently fast and wide connection (compared to the ship)…I’ve spent a bunch of time rebuilding and testing my various layers of Docker images. And guess what? Ubuntu “jammy” with OpenSSL 3 compiles my stuff just fine. *sigh*.

Again, the lesson here is that people who write tools for development seem to assume that everyone who will use those tools is going to be online, all the time, and with a decently fast and wide connection. And that, my friends is Just Not True.

There’s still a huge section of the population of the Earth who are excluded, by implicit design, from participating in the creation of useful software.

Khaaaaaaaaan!

Okay, so I caught COVID a week ago, so I’m confined to quarters until I stop testing positive. This is fine. Except that the stateroom is a pretty effective Faraday cage and I can’t get online much. Tired of watching BBC adverts for BBC shows, and tired of playing video games, I started poking deeper and deeper into this problem with OpenSSL I’ve been having. And it turns out I found the answer! Which I can’t solve until I’m online again!

First: Kitura/SMTP is what my app uses to send transactional emails.

Second: Under the hood, SMTP uses Kitura/BlueSocket for network communications, and adds in Kitura/BlueSSLService to supply SSL support.

Third: On Linux, BlueSSLService uses Kitura/OpenSSL to bridge over to whatever version of OpenSSL is installed on the system.

And finally, Kitura/OpenSSL only supports OpenSSL versions 1.x and 2.x.

Meanwhile, Ubuntu “jammy” has started shipping with OpenSSL 3.x. So, in order to compile all my dependencies I need to downgrade the SSL library and headers to a 2.x version.

Now, I suppose I could revert to Ubuntu “focal”, except that this app gets deployed to Heroku and Heroku wants everyone up on “jammy”.

Or, I guess I could hang from a rope until Kitura/OpenSSL gets updated to support 3.x. There’s no way that could go wrong.

Pigs in Space

The other day I saw a lecture on space travel technology. The speaker was talking about how fast various kinds of propulsion systems (existing and potentially possible within the next 30-50 years) could get a vessel going, and how long that vessel would take to get to the nearby stars.

That got me thinking about the problems of sending humans any significant distance through space (well, that and playing some Kerbal Space Program). Basically, interstellar travel is going to be the domain of robots and seeds, since sending a self-supporting (and repairing!) biome for multiple generations of humans requires a fantastic amount of mass.

And then, what would the people sending the robots want them to do? As others have pointed out, so far we’ve essentially been sending out dick pics and plaques saying, “Come over to my place!”

And now I’m concerned that some bright spark is going to think, “Oh, I know, the best way to introduce humanity to the universe is to embed Chat GPT in our outbound robots.” Because why not unleash SimFratBoy — what could possibly go wrong?