Generating Podcast Episode Ideas

Tomorrow, I will record and publish episode 36 of Write While True. I have not given a lot of thought about the content yet except that I have the topic.

For each episode, all I want to do is end with a takeaway that I have learned about writing better, It feels like there should be a limitless number of topics, so I’m not worried about running out, but I still need to think of them.

To make it more focused, I have been using “seasons” to set a theme. At some point in the week, something that fits in the theme comes to me. Sometimes it’s from something I’m reading, or maybe another podcast, or it just pops into my head from some past bit of writing advice I saw somewhere.

Sometimes I get an idea that is not on theme. For that, I just make a card on my podcast Trello board. Eventually, there will be enough cards in some other theme that I can use to start a new season.

In a way it’s a lot like James Webb Young’s Technique for Producing Ideas. He recommends exposing yourself to both random things and the problem you are trying to solve. At some point, a new idea will pop into your head, since new ideas are just novel combinations of old ideas.

Then, you refine it, because the idea alone is only a seed, and not good enough on its own.

OWASP Should Include LLM Prompt Hacks in Injection

Yesterday, I wrote that LLM prompt hacking was like an injection attack. I looked up injection in OWASP’s 2021 10 top of security vulnerabilties and see that it’s number three. Since LLM prominence started this year, they haven’t listed prompt hacking yet, but you can see from their description and list of remedies how similar it is to injection. And since we’re busily attaching LLMs to web applications via their APIs, prompt hacking should be considered a web application security vulnerability in the next survey.

Here’s the top prevention technique:

Preventing injection requires keeping data separate from commands and queries:

  • The preferred option is to use a safe API, which avoids using the interpreter entirely, provides a parameterized interface, or migrates to Object Relational Mapping Tools (ORMs).
    Note: Even when parameterized, stored procedures can still introduce SQL injection if PL/SQL or T-SQL concatenates queries and data or executes hostile data with EXECUTE IMMEDIATE or exec().

For an LLM this means that the LLM itself isn’t affected by the user query. I realize that that may be impossible with current implementations. My suggestion is to somehow create two channels (one for “code” and one for “data”) in the training process so that the resulting model isn’t exploitable this way.

No, I have no idea how to do that, but it’s not with a more convoluted prompt.

We Keep Reinventing Injection Attacks

Web programmers can cause security problems if they embed data into HTML and render the result. For example, if I have a simple form that asks for your name and then output a page with that name in it, I’ll open myself up to an “injection” attack if the user types in some Javascript, and I don’t carefully escape it. I’ll end up running that Javascript.

The same is true if we take user data and try to create queries by concatenating it with SQL, as lampooned by XKCD.

We invented encoding and string interpolation techniques to solve this. But nothing forces you to use those features, so we still mess it up, which is why security bounties are frequently paid for injection attacks.

But, those issues are with legacy languages like HTML and SQL where we send strings that mix code and data over the network and run them. We should have designed them in a way that separated the code and the data. Surely, we learned from that for new things that we invented since then.

We did not.

An LLM chatbot is also a service that we send strings over a network to. The prompt you send is “code” in natural language and the LLM “runs it”. The problem is that there is a kind of meta-language that controls the chatbot itself, which can be sent before your normal prompts. Using these “jailbreaking” prompts, you can trick the LLM into dropping its safety net and produce hate speech or help you code malware.

These prompts are essentially the same idea that Bobby’s mom is using in the comic, and the solution is likely going to be a prompt version of what encoding and string interpolation is doing.

It would be better if the system was designed such that user chat requests weren’t treated like a program that could change the chatbot itself.

Announcing: Morning Pages Journal with Prompts

I’ve been experimenting with creating books for Amazon KDP using Page-o-Mat. My first book is a journal for writing prompted morning pages [amazon affiliate link].

Cover for the Morning Pages Journal with Prompts book

There are 4 volumes of the journal, each offering a different 30 prompts.

If you don’t know what morning pages are, I covered them in two episodes of my podcast:

I have written about them in these posts:

The journal has two pages per prompt. At 8.5 x 11, it takes me 20-30 minutes to fill them, which is about the right length of time for morning pages. I set them up so that they are the front and back of the same page, so you could remove the page if you wanted.

I also encourage you to read and highlight past pages. At the back of the book is an index where you can harvest your favorite parts.

Using Recruiters for Entry Level Developers

I graduated in 1992 and got my first job using a tech recruiter. It was for a small company in FinTech with less than 20 people when I joined. While I was there we hired a lot of entry-level developers, mostly from college recruiting, but we did use recruiters too.

30 years later, I think it’s rare to use a recruiter to hire entry-level developers. There is a lot of supply. There is certainly as aspect to recruiting in what the code bootcamp schools are doing, but from the hiring end, I haven’t been at a place that used recruiters for junior developers for quite a while.

But, one exception I noticed is in FinTech. John Easton, who got me my first job, and who is one of the best recruiters in NYC, seems to frequently have entry-level FinTech jobs. Here’s one he posted today.

If you are in the market for this kind of work, especially if you are in NYC, I’d follow his account.

More Page-o-Mat Updates

I am working on making some books for Amazon KDP using Page-o-Mat, so that’s driving feature development right now.

I decided to create cover art using vector drawings, so I added the ability to add a list of drawing objects to a page. I currently support rectangles, ellipses, lines, text, and QR codes. Each object has keys to set stroke, fill, alpha, and other parameters.

A cover in KDP needs to be big enough to support the trim, bleed, and spine, so it ends up that page size is an arbitrary number. I had only supported standard sizes, like A5, Letter, etc. Now Page-o-Mat supports custom sizes and orientation.

I uploaded some books to KDP today. When they are approved, I’ll announce them here.

Write While True Episode 35: Zombie Nouns

I recently came across the phrase zombie nouns, which was coined by Helen Sword. She’s an author and currently runs a private consultancy to help writers. Back in 2012, she was teaching at the University of Auckland in New Zealand, and she wrote an article for the New York Times called Zombie Nouns.

Transcript

“What do you do?”

Just heard this template from The Art of Charm ep. 782 for how to answer “What do you do?” when you are meeting someone in a business context.

The idea is that you want to tell them something they can remember and repeat to the right person. So, you lead off with the kind of people you help, and then you say how you help them.

For me that’s something like: “I help B2B software companies by advising them on their product engineering.” I would somewhat alter that based on who exactly I was talking to (maybe niching down to fintech or mobile). It’s intentionally not very detailed to either invite questions or to let the conversation move on.

Later, if that person meets someone who works at a B2B software company that says something like “I wish I could get a handle on our developer productivity”, they might think of me.

Page-o-Mat Minor Update

I made a minor update to Page-o-Mat to add a few features I need for a journal I want to make.

New keys

  • subtitle: for adding a subtitle to a page. There are also the font, color, and alignment variants
  • show-title: a boolean that controls whether or not to show the title. You can use a string expression based on the page/section/variant indexes. This allows you to have a title that might only be on the first page of a section. (there is also show-subtitle)
  • footer-space: For lined journals, this allows you to have some blank space at the bottom. I also renamed heading to header-space, but support both for backwards compatibility (I believe that New Versions Should be Substitutable)

My plan is to use this to make a writing practice / morning pages journal with prompts (see my podcast episode Write While True Episode 19: Prompt Your Morning Pages for the rationale behind this).

1960’s GE Trained Programmers

This is the third installment of a series I didn’t know I was writing

Today, I met Tom, who got his start working for a cotton mill owned by his father-in-law. In 1964, the mill was buying a mainframe, and his FIL convinced him to apply to GE to become a programmer: “He told me it was like putting railroad tracks together”. It wasn’t.

GE hired him and then trained him to write COBOL in a few weeks. They placed him on other cotton mills to code order taking software.

That led to a lifetime in programming. He started a company that automated letter writing for members of congress (writing “customized” form letters back to constituents based on their interests). Al Gore was a customer.

Today, he still runs a company that advises mainframe programmers on performance and other matters.

But, it all started because GE was willing to hire and train someone with no experience. It’s a lesson that I continue to hope will be relearned.