Author Archives: Lou Franco

LLMs Can’t Turn You Into a Writer

In Art & Fear, the authors write:

To all viewers but yourself, what matters is the product, the finished artwork. To you and you alone, what matters is the process, the experience of shaping that artwork. The viewers’ concerns are not your concerns. Their job is whatever it is, to be moved by art, to be entertained by it, whatever.

Your job is to learn to work on your work.

If you use LLMs to write for you, you will end up with writing. You’ll pass your class, get by at work, or get some likes on a post. But you will not become a better writer.

It might even be hard to become a better judge of writing. If you do, it won’t be by reading what LLMs bleat out. It won’t be by reading their summaries of great work. “Your job is to learn to work on your work” and to do that you need to do your own writing and limit your reading to those that do the same.

Policies that reduce dependencies

Over time I have become skeptical of most dependencies. I wrote in Third-party Dependencies are Inherently Technical Debt:

[…] any third-party dependency is technical debt. Third-party? Here’s how I am defining it for the purposes of this article. You are the first party, the platform you are writing on (e.g. iOS, Android, React, NodeJS) is the second party. Everyone else is third party.

[Third-party dependencies are debt because] you need to constantly update them, […] they introduce breaking changes, […] they become unsupported, […] your platform adds their own incompatible implementation, [… and] they don’t update on the same schedule as the [platform].

To that end, I like policies that tend to reduce the number of dependencies you have. Here are a couple that I have seen work.

  1. Become a committer on any third-party dependency you take on. To be fair, you kind of owe that to the project.
  2. Donate to any third-party dependency you take on where you won’t become a committer.
  3. Fork the dependency and bring in updates carefully.

Seems like extra work, right? The extra work is why they work.

Identity is a Powerful Habit Totem

In my post, Environment Hacking, I wrote about a problem I ran into with BJ Fogg’s Behavior Model:

One of BJ Fogg’s insights is that you already have habits that are completely automatic, so he suggests using those as prompts for a new habit you are trying to build. You repeat to yourself, “After I do [some automatic habit], I will do [some tiny version of a new habit]”. For example, “after I brush my teeth, I will floss one tooth”. In this case, the environment is your existing habit.

This works great, but I have some habits that I can’t easily tie to existing one (or at least I haven’t been successful at it yet). For these kinds of habits, I have been thinking of “habit totems” I can put into the environment to prompt me.

In that article, the idea was to place objects in the world that remind you to do things when you see them. I called those objects “Habit Totems”. A Habit Totem works because it’s always present at the place where you want to do the habit, and it prompts you to do it.

Your identity can be a powerful Habit Totem because it is always present, and it changes how you perceive the environment such that it turns everything into a prompt.

I have an identity as a programmer. I program all of the time without prompts, because everything reminds me about programming. I also have an identity as someone that eats plant-based food—no prompt needed at the grocery store or restaurant because it’s just a part of who I am.

But I struggle with my aspirational identities. I want to be a writer, but I still haven’t assumed that identity enough for it to be a driver on its own. I want to make my plant-based identity more specific by becoming “whole-food plant-based”, but I haven’t made a lot of progress.

What I am trying now is to try to internalize that I have already become the identity I aspire to be. I walked through the grocery store last weekend just repeating “I only eat whole plant-based food” and managed to leave with a cart more aligned to that identity. I am writing this blog because “I am a writer” and a writer writes. When I thought about my experience at the grocery store, I was more compelled to write about it.

It’s only been a few days, but it feels very powerful so far.

Humans Have Been Upgraded by LLMs

If, twenty years ago, you took the most sophisticated AI thinkers in the world and set up a Turing test with a modern AI chatbot, they would all think they were chatting with a human. Today, that same chatbot would have a hard time fooling most people that have played around with them.

In a sense, humans have been upgraded by the existence of LLMs. If we had no idea that they existed, we would be fooled by them. But, now that we’ve seen them, we’ve collectively learned how they come up short.

Write While True Episode 43: Accountability Groups

There’s a hole in this process, and we need to fill that right now. This only works if you’re doing the lead activities consistently, and if they really do build up to the end goal. It’s true that working on the book is intrinsically fun and interesting. And if that’s all that happened, I’d probably be okay with it, but I really do want a book in the end.

Transcript

Static Site Generation from Django

I created App-o-Mat in 2014 using Django (pre-1.0) and Python 2, and for all that time it was deployed on relatively cheap hosting that supported Python backends. Unfortunately, my host recently decided to stop supporting Passenger and Django had long ago abandoned fastcgi. My options were to upgrade my hosting or look for an alternative host.

I had been wanting to look at AWS’s App Runner service, so I started reading through the docs and doing a trial port of my site. Since I also use MySQL, I had to also learn RDS. At some point I knew enough to try to figure out what this was going to cost to host and it turned out to be more expensive than just upgrading my hosting platform, so I abandoned AWS.

App-o-Mat is a content-driven Django app. It doesn’t have any interactivity in the public pages—most of the advantage of Django to me is in its CMS admin interface where I can author new articles. The public site is essentially static.

So, rather than upgrade my host, I decided that I now just run the site locally on my laptop and use wget to crawl it to get a static site that I scp to my host. I had to manually cause issues to get my 404 and other error pages to be part of the crawl. I see that there’s a project, https://django-distill.com, that purports to turn any Django project into a static site generator, but it also doesn’t automatically handle your error pages.

I might use django-distill in the future, but I write new content very infrequently, so we’ll see.

February/March 2024 Blog Roundup

Personal productivity has been on my mind in the past couple of months because of a new tool I am working on. I shared thoughts in these posts

I also finally started Season 4 of my podcast, Write While True, which is where I share what I am learning about writing.

And I also shared my process for generating Transcripts for a Self-hosted Podcast.

Write While True Episode 42: Keeping Score

As I mentioned in the past two episodes, I’m trying to write a short book, and I want to share the process as I’m going through it. For example, to help me structure my time, I’m using the book The Four Disciplines of Execution.

In the last episode, I shared how I’m applying the second discipline. I defined an activity that I could do every day and a lead measure, a metric of that activity, that I could have as a goal for every week.

The idea is that if I constantly achieve this lead measure, I believe that the larger goal will be achieved. My weekly goal is to spend at least one hour a day on five different days working on the book. It’s a goal that resets every week. That way, a bad week doesn’t derail me. Every Monday, I have a chance to try to win that week. But I have to remember to do it. Keeping this lead measure top of mind is what the third discipline is about. And that’s what I want to talk about next.

Transcript

Write While True Episode 41: The Lead Measure

My wildly important goal is to publish a fifty page book on a topic in my industry by the end of 2024. I defined it using the SMART goal format (S. M. A. R. T.), which means it’s specific, measurable, achievable, relevant, and time-bound. This is a good way to define goals, but the issue with SMART goals is that even though you can easily tell if you have reached them, they don’t drive day-to-day activities. That’s where the 2nd of the four disciplines comes in.

Transcript

Transcripts for a Self-hosted Podcast

The latest Apple iOS update included an update to the Apple Podcasts app that added support for transcripts. They claim that they will auto-generate transcripts, but they allow you to provide your own. I have always provided a transcript for my episodes because I believe in accessibility. It’s also good for SEO, and my process starts from a script, so editing it to the transcript has never been a problem.

But, those transcripts are just text that I post on a web page. For the Podcast app, it’s much better to have a .srt file, which is a text file with the transcript and time codes. It looks like this:

1
00:00:00,000 --> 00:00:15,060
I'm Lou Franco, and this is Episode 40 of Write While True.

2
00:00:15,060 --> 00:00:18,960
Write While True is an infinite loop, and that's because I think of writing as an

3
00:00:18,960 --> 00:00:19,960
infinite game.

4
00:00:19,960 --> 00:00:24,520
A game I play for fun and to get better at it, like a game of catch.

This is a little harder to make manually, so I use whisper from OpenAI. Whisper can create the .srt file directly, and since the format is still text, I can make any corrections I need to. Whisper doesn’t make many mistakes, though, which is surprising because I have a New York accent that sometimes confounds AI.

From there, I just post the .srt file in S3 in the same bucket as my mp3. The Blubrry PowerPress plugin, which generates my podcast feed, lets me provide a URL to a transcript file.

Finally, to get Apple to use it, you need to login to your Podcast Connect account and go the the “Availability” section of your podcast and turn on the option that allows you to provide your own transcripts.