Files
Lee Hanken 7c8efd2228 Initial commit: HPR Knowledge Base MCP Server
- MCP server with stdio transport for local use
- Search episodes, transcripts, hosts, and series
- 4,511 episodes with metadata and transcripts
- Data loader with in-memory JSON storage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 10:54:13 +00:00

257 lines
22 KiB
Plaintext

Episode: 1938
Title: HPR1938: How I prepare HPR shows
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr1938/hpr1938.mp3
Transcribed: 2025-10-18 11:29:30
---
This is HBR episode 1938 entitled How I Prepare HBR Shows.
It is hosted by Dave Morris and is about 26 minutes long.
The summary is, I own my own tools for preparing my HBR Shows.
I talk about them in this episode.
This episode of HBR is brought to you by AnanasThost.com.
Get 15% discount on all shared hosting with the offer code HBR15.
That's HBR15.
Better web hosting that's honest and fair at AnanasThost.com.
Hello everyone, this is Dave Morris.
Today's show is entitled How I Prepare HBR Shows, which is a bit meta, but there you go.
So why am I talking about this?
Well, I've been contributing shows to HBR since 2012, according to my records.
And in those far off days, we sent everything via FTP, and we had to name the files with
a combination of our host ID and numeric thing, our name, or handle, whatever we're using.
The slot number, HPR1234, the title, and it was all rather complex with hyphons and
underscores, meaning special things and so on.
The show notes had to contain a chunk of metadata in a predefined format, and that was to signal
various things like weather, it was explicit or not, and all these types of things.
It was quite complicated, I certainly found myself making a number of mistakes with the
naming and metadata stuff.
So whenever I have a problem that is a little bit too much for my old brain, I write a bit
of software, or indeed make a device to help me with it.
So I started developing a bash script in mid 2013, which I called somewhat unoriginally,
HPR underscored talk.
I used bash to do this, since I thought it would make something which had few dependencies,
fairly small footprint, maybe I could share it, and it may be useful to others.
The script grew and grew and became increasingly complex, and I found I needed to add other
scripts to the toolkit as it became, and to resort to pearl and various pearl modules
to do all the things I needed to do.
In 2014, Ken changed the upload procedure to what it is now, which is much better.
It's a better design, does the way with the need to name files, and put metadata in them,
and all that good stuff.
But it left my toolkit a little bit high and dry, so I shelved plans to release it at that point.
But carried on using it, I've been messing around with the hacking around,
changing the way it works to a fair degree, debugging it, and so on and so forth.
The outcome is it's a little bit idiosyncratic, quite complex.
Not really a thing you'd want to give to somebody else, quite personalized to my needs, I suppose.
But I thought I'd put it up on GitLab, which I have, there's a link to it in the show notes,
and I thought I would describe what I'd do with it, just in case anybody was interested in it,
or wanted to just have a look at it and see what I, the way I do the various things I'd do.
So it's given an overview of the script.
It's called HBR underscore talk, and it has to be put into a directory where the
shows are going to be stored. The principle is that each show and its related files are stored
in their own sub directory. The script derives the name of this directory from the title of the show
that it holds. That's really a hangover from the previous days, but I thought it was a reasonable
way of going. So I keep my scripts, I keep these scripts that I'm talking about, and the HBR
episodes in a directory under my home directory, there's HBR is the top level directory, and then
underneath there is a directory called Talks. I've got quite a lot of HBR stuff on my main workstation,
as you might gather, being a bit of an administrator and a messer about your own Wrangler.
Anyway, there's no problem where you put them, as long as all the scripts are in the same place,
and the shows are all created in directories underneath, and you own the account you're using it
from, can read and write to this directory tree. So the HBR Talks script takes one or two arguments.
The first is an action word, think something like install or create. You can abbreviate these
down to the shortest unique form. That's the thing that sort of is an imperative to the script.
The second argument is there in certain circumstances, not in others. It varies mostly with whatever
it is you're doing. If it's present, it can be the name of the directory holding your show,
or it can be the title of the show in quotes, where you can just leave it out and the script will prompt you.
There is also a minus H option, which will display help. So I put, I describe the workflow
that I go through when I'm preparing a show or episode. I tend to call them shows,
or people call them episodes, so I'm sort of using the two terms interchangeably.
So the first thing I would do would be create a new new episode. I do this sometimes just when I have
an idea for a show, something I'm going to do in the future sometime, and I just create the sort of
template, the framework, as a placeholder, and then I can go and fiddle around with it later on.
During the creation step, the script collects all the metadata relating to the show,
which again is a hangover from the old system, but I found that it's useful. It asks questions
and sets defaults where the answers aren't clear yet. Things like, what slot do you want? Well,
you don't know yet, you haven't reserved it unless you're a lightning fast with producing episodes.
So having created a show, then you come back and mess around with the title. Don't like
where I phrase that, change it, you can change the summary, you can add and subtract tags and so forth.
You can do that as many times as you want all the way through the lifecycle of that episode.
So the shows I create consist of brief notes for the main page,
and I usually go for some sort of longer note format, which is available linked off that page.
The one you're listening to now is configured in that sort of way. My notes are always prepared in
markdown, and then I use HPR talk script to convert them to HTML before uploading. So I might have
some supplementary files such as examples of scripts or whatever, some pictures, that type of thing.
And if I do have that, then then those files and the long notes are all packaged up into a
compressed tar file for upload. So I only ever send three files to the server. That's the main
notes, the tar file, if appropriate, and the audio. Since I'm generating HTML from markdown,
I've added features to the HPR talk script aid me running this process. First of all, I create
boilerplate markdown files with the script, so I don't have to worry about the formatting.
And so forth when I start them up, and I generate a make file, which allows me to automate things
using GNU make. Since I use VIM to edit my notes, I generate the configuration file so that I
can run the session plugin within VIM. Session is a thing that lets you open multiple buffers or
hand or windows, and then save that configuration for the next time. So I use that for everything,
and I've got a thing that builds a session configuration. So all I need to do is to go, I use
GVIM mostly. Open GVIM, click on the session menu, the top of the screen, and top of the window,
and it will give me a list of all the sessions I have, and one will be the show that I want to
edit. So I just do that, and everything is loaded up as it was previously. When I saved it,
or indeed if it's the first time, then everything's there in some default form. If I'm
including multiple files in my shows, such as pictures or scripts, I list them in a manifest file,
and the HPR talk script allows me to create this file and populate it, and the make file uses it
when generating the tar file. So as I work on the notes, I rebuild the HTML version and view it
in a browser, and the build process can be run out of VIM using the make command, which is available
within VIM on its command line. I can also go to another window and run the HPR talk script,
telling it to build some aspect of the notes. Now, so you can view this, if you've got references
to other things in your notes, like pictures or whatever, then these are going to be references
like file references, not full blown URLs. And you want to be able to do that, because you want
to see how it looks. But when the notes go up to the HPR server, they're going to be referring to
files on that server. So I build in a facility whereby if you type the command make space final,
F-I-N-I-L, or you run the appropriate option within the HPR talk script, it will build everything
to work on the HPR server. Now, this toolkit doesn't do anything with the audio. This is generated
independently. I use perhaps audacity or a portable recorder. I'm using my Zoom H2 just now for
this one. I save the raw audio in the show directory and edit it with audacity, and then finally
export the flack file to the show directory. And I name it according to the conventions that
the script uses. I use audacity to save generic audio tags. It's possible to configure audacity to
do this for you during the export. But I do have a tool for generating specific tags automatically
from the show configuration file. I haven't included this as part of the GitLab configuration,
because it's quite complex and there's a whole raft of dependencies there. If anybody's
interested, I could include that because all of the components are available, but it takes a little
bit of building, that's the main downside. So as the components of this show accumulate, the files are
registered through the script. And like I said before, the primary elements that are known to
the script in the configuration file are the main notes, the supplementary files and the long notes
bundled into a tar file, and that's defined by the manifest file I mentioned before, and then
there's the audio. So three main components. So once everything is ready to be uploaded, I reserve
a slot on the calendar page, as usual, and then use HPR talk to change the configuration file,
change the slot entry in the configuration file. This causes all of the files to be renamed
automatically, and so the convention is that they should be called HPR, 1, 2, 3, 4 or whatever
on the front of them. So that's done by the script. And it also causes the HTML references in the
notes to be changed. So when I do the final build, I use Ken's upload form and fill it in manually
with the details from the configuration and with the main notes, which I simply cut and paste in.
Then I use HPR talk itself to perform the upload. It uses curl underneath to write to the FTP server.
So it's using FTP for the upload of everything other than the main notes. Actually in the
current version, it sends the main notes again, but that's something I'm going to fix, and you
can would prefer that I didn't do FTP uploads, but it's just I just found it so much more convenient
to do things through this script. So I thought I would just skim through the main features of the
script, most of which I've covered in some detail, as I talked about my workflow. So first thing
that you would do if you if you were using the script would be to install it. Basically you just
put it somewhere, but then you need to run its install function because it has a bunch of
configuration files. Some of these are populated by itself and some of them need input from you,
so it needs to know your host ID and your host name and so on and so forth. And it also needs to know
the FTP upload details, the FTP password. If any of these things change and the only one likely
to change is the FTP password, then you can simply run the install process again and it will
allow you to make modifications. So you can create a new show with this through the create
function that you'll be prompted for a whole bunch of parameters, as I mentioned, and the show
directory will be created. At that point the show number or the slot is unknown and so the files
that are created in the show directory are called HBR followed by four underscores and then these
get renamed when a slot has been reserved and you tell the script. There's quite a lot of things
you can do to change the configuration of the show, including change the title or the. If you change
the title is going to change the name of the directory too and you can update the summary or you can
that's where you put the slot in when you've decided what it is. There are a whole bunch of more
advanced features that I've added which let you create the main show note template or the
and the full show note template. It lets you create and populate the manifest file and it creates
and make the make file to drive the whole thing. During the make file creation you're asked
things about how you want to run things. One of the options is for example would you like to create
ePub notes from from the thing at the end and this business of having a VIM session I mentioned
before can be you can create the session configuration at this stage if you want to and if it's
appropriate to you. Building the notes is another function and it runs various forms of make so
you can build just the main notes. That might be all you have of course. You can build everything
which includes the main notes, the supplementary notes or the full notes, ePub notes and if there's
a tar file which there will be if you've got full notes at very least it will build that. It'll do
it in a way that you can view your HTML locally. Then there's build final which is same as building
everything but it it fiddles with the URLs and there's also a feature to refresh all the files
because make needs the files to have changed and you don't always need to change them. You don't
always intend to change them before you you build them. You need to register all the various files
that you have with the show in the configuration file in the script and let you do that and when
you've done all of that a lot as I've already mentioned you you can I used to term release. It should
have used upload it or I chose release. You can you can upload it release it via FTP. It checks
if registered everything and the slot is allocated and so on and so forth. There are also some
reporting functions here which let you look at the status of a show. So if you've got a whole bunch
of them that you've started working on but haven't done anything with for a while and I certainly
have plenty of those then you can run the status function on a given show and it'll tell you
some stuff about where you are. There's also a summary function which scans through all of the
shows you've prepared. Fishing out only those that you haven't uploaded and it reports on their
current state. So if you have several of them on the go it's useful for that. Again this is
done for me because I've got something like I don't know a dozen or so shows in an intermediate
state. I thought it mentioned a brief bit about the show notes that this thing expects. They're
in Markdown format but we're using Pandoc to process the markdown so it's capable of using the
extended features that the Pandoc allows and I've made certain assumptions about which of these
you would use. This is something that perhaps could do with some further work and for example
it makes it makes certain decisions about the formatting of the notes. The main notes are always
built as an HTML fragment because they're a piece of HTML that's to be fitted into another pre-existing
template that's displayed on the HBR website. The extended notes if you're using them are
built standalone so it's complete webpage all of its own and the extended notes always refer to
the HBR site for the CSS so they look similarly to the same fonts and colors and
size of page and so forth. There's also the EPUB option where I've made certain assumptions about
the layout. Still really working on this because sometimes the EPUB format doesn't go very well with
the the sort of notes that I've produced for example scripts and that type of thing.
One of the aspects of the notes is that they're really a template. They pass through a pre-processor
before being handed to Pandoc and this is a pulse script which interprets expressions
in template toolkits syntax and this pre-processor is given arguments which are the names of the
various files. So the main and the supplementary notes are both passed through a pre-processor before
being handed to Pandoc. The pre-processor is a pulse script which interprets expressions
in the template toolkits syntax. I've put a link to template toolkits in the notes. This allows
strange sequences of brackets and percents in the notes to be replaced by arguments to the
to the script. The arguments that are given to the pre-processor are things like names of the
various files like the extended notes file and the contents of the manifest file. That's
appropriate and this simplifies the process of linking to supplementary files and images and
allows the generated URLs to change depending on whether the HTML is for local viewing which case
it's a local file name or whether it's going to be the final version which case it's a full HTTP
URL referencing the HPR website. So I've put an example of what I tend to do and will
have done in these notes. I haven't actually written it yet but it will contain a line in the main
notes which say something like I've written out a moderately long set of notes about this subject
and these are available here and then the example shows an open square bracket and then another one
and a percent sign space ARGS dot zero space percent closed square bracket closed square bracket
open parenthesis then another sequence of open square bracket percent args dot zero percent
closed square bracket and a closed parenthesis. What that is the the thing open square bracket
percent whatever percent closed square bracket that's an expression which substitutes a variable.
The variable is called args ARGS meaning arguments is actually an array and I've requested the first
of first element of this array and this is the first argument that's been given to the pre-processer.
Now that expression is repeated in the example and the two copies of it are inside the markup
markdown markup for a link so you put text in the first square brackets and then you put the URL
in the round bracket. So that's that's very useful. It allows the the script and the the various
elements of my toolkit to handle this for me. There's another example I've recently prepared a show
with multiple images and I inserted them using a slightly different method. You'll see there's
an example which starts with an open square bracket percent minus or hyphen space default
in capital space i equals zero then a hyphen percent closed square bracket. The minuses the hyphons
inside of the percent tell the pre-processer not to generate new lines when processing this particular
line so it's just a way of stopping it from adding in lots of unnecessary new lines which which
might be significant in certain places. So the example shows the way in which you would generate an
image in markdown so it's an exclamation mark and then in square brackets the text preparing
carrots one closed square brackets then in parentheses one of these args things. So in this particular
case it's open square bracket percent args dot dollar i. So what that means is use whatever the
value of i the variable i in the template is so it would be zero in that particular instant and
then the rest of it that the text won't read at all. Then the second example of an image shows
inside the template toolkit expression open square bracket percent then we've got i equals
i plus one. So if incremented the variable i semicolon is a pearl light syntax and then we use
args dot dollar i and then we close the the thing with the percent in the closed square bracket
and what that does it it plants args one the second element fed to the the pre-processer. So
that makes it a little easier to shuffle things around you don't have to worry about which which
image is which. The only thing is that the images the files or whatever it is you're working with
here are numbered according to the order that they were fed to the pre-process and the order is
defined by the the file the manifest file. This made it a lot easier to handle when there were
3435 images to place in note. So in conclusion then this toolkit does a large amount of what I want
when I prepare hpr show and it saves me from making the sort of mistakes that I tend to make.
The present design still shows lots of marks of its origin and the ways the way things were done
back back in 2013 and so forth and well before the current mechanism the submission mechanism.
I'll probably fix that in time I definitely will fix that in time just for my own benefit.
I'd like to automate the completion of the submission form but I'm not sure I know it can be done
but whether it's a good thing to have script effectively scraping the contents of that form
and writing stuff into it and so forth I don't know. I'm not quite sure what the security
implications are just at the moment and I'm not sure that Ken would be overly yet thrilled at
doing it that one. So that's something I'm working on anyway thinking about. You're welcome to check
out the scripts if you want to and see whether it's anything of any interest to you. You can even
just go and browse the stuff and that's the point at which you decide you don't want
anything to do with it. It's on GitLab and there's a link to it in the note. There's not a great deal
of documentation on the GitLab site at the moment but I'm gradually adding to it as I go along.
If I hear of anybody who's actually interested in messing around with it then that will give me
the incentive to improve on the documentation. If you do have a go at using it don't hesitate
to contact me if you have any problems or questions and if you have suggestions about how to
to move forward with this then that would also be appreciated. So I hope you find this useful. Okay, bye.
You've been listening to Hecker Public Radio at Hecker Public Radio.
We are a community podcast network that releases shows every weekday Monday through Friday.
Today's show, like all our shows, was contributed by an HBR listener like yourself.
If you ever thought of recording a podcast then click on our contributing to find out how easy it
really is. Hecker Public Radio was founded by the Digital Dove Pound and the Infonomicon
Computer Club and is part of the binary revolution at binrev.com. If you have comments on today's show
please email the host directly leave a comment on the website or record a follow-up episode yourself
on this otherwise stated. Today's show is released under Creative Commons
Attribution Shared Light 3.0 license.