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>
This commit is contained in:
563
hpr_transcripts/hpr3132.txt
Normal file
563
hpr_transcripts/hpr3132.txt
Normal file
@@ -0,0 +1,563 @@
|
||||
Episode: 3132
|
||||
Title: HPR3132: Keeping track of where I am
|
||||
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr3132/hpr3132.mp3
|
||||
Transcribed: 2025-10-24 17:31:45
|
||||
|
||||
---
|
||||
|
||||
This is Hacker Public Radio Episode 3132 for Tuesday 4 August 2020. Today's show is entitled,
|
||||
Keeping Track Of Where I Am A Seer It Is Hosted by MrX
|
||||
and is about 23 minutes long
|
||||
and carries an explicit flag. The summary is,
|
||||
How I Keep Track Of Where I Am.
|
||||
This episode of HPR is brought to you by An Honest Host.com.
|
||||
Get 15% discount on all shared hosting with the offer code
|
||||
HPR15. That's HPR15.
|
||||
Better web hosting that's Honest and Fair at An Honest Host.com.
|
||||
Hello and welcome Hacker Public Radio audience. My name is MrX
|
||||
and welcome to this podcast.
|
||||
As usual I'd like to start by thanking the people HPR for making this service available to us all.
|
||||
There's truly an invaluable service in this year into troops.
|
||||
HPR is a community-led podcast provided by the community for the community.
|
||||
That means you can get you a bit too.
|
||||
Why not pick up a microphone, maybe your mobile phone, your PC, anything you can record with and send a show.
|
||||
And I've gone to a great deal of effort to streamline the process. It's really quite easy.
|
||||
If I can do it, so can you.
|
||||
When I give it a go I'm sure you must have something with all for the interesting to hear.
|
||||
So, this episode is how I keep track of where I am.
|
||||
So, how do I do that?
|
||||
Well, first of all, I get my Android tablet and I open it up and I go to Google Maps.
|
||||
No, no, no, not that kind of thing.
|
||||
What I really mean is, where I am in my podcast, podcast listening.
|
||||
How do I keep track of where I am within the podcast list that I'm listening to?
|
||||
I've got a queue of episodes I'm listening to and I want to know where the hey comma.
|
||||
When I last left off sort of thing, you know.
|
||||
And when I was actually thinking about this, I had to relook back.
|
||||
I mean, I almost ever produced this podcast because I discovered really that I'd covered a lot of this in my, in a previous episode,
|
||||
you know, describing how I was in the podcast part 2, HBR 2889.
|
||||
I'm quite conscious that I've got tendency to repeat myself in real life.
|
||||
I think this is because I have such a rubberish memory.
|
||||
But anyway, despite this, I decided to continue with the episode.
|
||||
I might be going to the, how I went about doing it in a bit more detail.
|
||||
It's kind of evolved over time sort of thing.
|
||||
And I don't use it a heck of a lot, but it's something I've kind of developed anyway.
|
||||
I haven't used some time to time.
|
||||
So as I previously mentioned, I use cordless headphones to listen to my podcast and audio book,
|
||||
audio books, whatever.
|
||||
And the headphones come with a bass transmitter, which was originally plugged into my old compact home server.
|
||||
So the server was generally turned on when I came home from work and turned off before going to bed each night.
|
||||
Each night I had to remember which track I was listening to.
|
||||
I've heard about in the track I was.
|
||||
I often forgot I had to try and find the place again.
|
||||
This quickly became quite tiresome.
|
||||
My first solution was to use some Bash Confuge agree bookry to create a list of files,
|
||||
which I placed in each podcast folder.
|
||||
And that way I could just open up and look to see all right.
|
||||
That's where I'm on this particular show, you know.
|
||||
In the process of doing this, I learned a wee bit about Bash commands and whatnot.
|
||||
So I had a look at some of these lists because they're still existing to folders today.
|
||||
And, you know, use something like, pardon me, that's my four-legged companion,
|
||||
who's something loyally by my side, not so loyally.
|
||||
So the command of a user would be something like ID3 V2, dash L, so that lists the ID3 tag information.
|
||||
Start at MP3.
|
||||
Pick that to grep.
|
||||
Look for the string TIT2, title 2.
|
||||
Pick that to cut.
|
||||
Cut between column 44 and the end.
|
||||
And redirect that to the readme file to readme.txt file,
|
||||
which I generated in each podcast folder.
|
||||
I actually used a double arrow to append it to the readme.txt file.
|
||||
And then, of course, as things got on, I used grep or e-grep with regular expressions,
|
||||
yeah, to try and filter out what I was wanting to send to the readme.txt.
|
||||
You wanting out?
|
||||
You better not cry if I let you out.
|
||||
All right, here you go.
|
||||
Bye-bye.
|
||||
I bet you will.
|
||||
Oh, all right.
|
||||
It was a...
|
||||
Hmm.
|
||||
So, for example, I've got a privy.pim.
|
||||
I've got an example of this sort of...
|
||||
...file it to create.
|
||||
So, first line in that says hpr006.
|
||||
Because that's going back a long way.
|
||||
Don't MP3.
|
||||
Got that to go back that far.
|
||||
And then a dash and a dustman.
|
||||
And then after that, I've got the word to complete.
|
||||
So, I'll just listen to that one.
|
||||
Next one is hpr0010.
|
||||
I don't know what happened to 789.
|
||||
The next group process, part one.
|
||||
That was complete as well.
|
||||
So, I think if it wasn't complete, I would sort of say, you know,
|
||||
five minutes, 23 seconds or whatever.
|
||||
So, the downside of this was that at the end of each night,
|
||||
I had to remember to update my file lists,
|
||||
recording where I had listened to,
|
||||
and what position I was in within the track.
|
||||
From time to time, I had to update this list
|
||||
by pending the latest episodes sitting on my server
|
||||
using the previous ID3 V2 command.
|
||||
I just mentioned that, yeah.
|
||||
As you can imagine, this took up a ferment of time
|
||||
and became very tiresome.
|
||||
I would sometimes forget to do it.
|
||||
This would cause me a headache.
|
||||
Next time, I started listening to my podcast.
|
||||
My next solution involved creating a bass grip
|
||||
that attempted to persuade my music player, Mark,
|
||||
to find the track I was previously listening to.
|
||||
The script sometimes worked, but it was a bit flaky
|
||||
and didn't always work.
|
||||
I recall it sort of...
|
||||
I think I had recorded the track it was listening to previously.
|
||||
And then, step through each track at a time
|
||||
until the current track was matching
|
||||
the track I recorded previously.
|
||||
But it was very, very clunky and often didn't work.
|
||||
So that was awfully, awfully great.
|
||||
So my final solution is in multiple parts.
|
||||
It's a kind of clutch that works for me.
|
||||
Whether anyone will find it useful
|
||||
or do something similar, I don't know.
|
||||
So the first part consists of a bass grip
|
||||
and a log file.
|
||||
It was a handy way of checking the last podcast episode
|
||||
and last position.
|
||||
This information is recorded to the log file
|
||||
when the front end of Mark is exited
|
||||
by hitting the Q command.
|
||||
Of course, this doesn't work if Mark P closes
|
||||
for any other reason.
|
||||
I, if I forgot to hit Q or my Pi crashed,
|
||||
which it never does, by the way.
|
||||
But anyway, that's by the by.
|
||||
So the script...
|
||||
I've got scripts folder in my home folder,
|
||||
home directory,
|
||||
and the script is called podcast.
|
||||
So I was a quick lash up script
|
||||
created in 2012, no less.
|
||||
I created to keep track of last position
|
||||
of the listened podcast.
|
||||
So from the...
|
||||
I've got comments within the script
|
||||
that from the script and it says,
|
||||
script displays the last four lines
|
||||
of log file, log file, podcast.text.
|
||||
The four lines consist of a dashed line separator,
|
||||
the last recorded track title,
|
||||
the last recorded file name,
|
||||
and that last recorded position.
|
||||
The script then pauses
|
||||
and displays a message saying,
|
||||
there's any key to continue,
|
||||
that runs mock P.
|
||||
So that's...
|
||||
Basically, it does a lot,
|
||||
and then runs mock P.
|
||||
And when the front end up,
|
||||
at once I've finished playing mock P
|
||||
and listening to all my shows and whatnot,
|
||||
where I'm going to do that day,
|
||||
when I hit Q to exit mock P,
|
||||
the script gets a current track file name.
|
||||
If the result is empty,
|
||||
I know file name,
|
||||
saying mock was not playing anything.
|
||||
If not empty,
|
||||
it depends a dashed line separator
|
||||
to the log file.
|
||||
The current track title,
|
||||
the current file name,
|
||||
the current track position,
|
||||
all to the log file.
|
||||
It then displays,
|
||||
it then displays the last four lines
|
||||
of the log file at exit's script.
|
||||
So in essence,
|
||||
I get a reminder of the track composition
|
||||
I'm listening to every time I start
|
||||
and stop the front end of mock.
|
||||
The log file is located at,
|
||||
just for just sake,
|
||||
homepy scripts,
|
||||
podcast.text,
|
||||
or TXT.
|
||||
Just for general interest,
|
||||
podcast.txt,
|
||||
as of the 4th of October 2019,
|
||||
is 168 kilobytes in size,
|
||||
and currently has
|
||||
4904 lines.
|
||||
As each entry has four lines,
|
||||
this means it currently contains
|
||||
1226 entries,
|
||||
fast knitting, I'm sure.
|
||||
The second script,
|
||||
how are we doing for time?
|
||||
11 minutes.
|
||||
The second script I use
|
||||
runs as a cron job every night
|
||||
at 1101pm.
|
||||
1101pm.
|
||||
The script keeps track
|
||||
of all the files copied
|
||||
to the MP3 directory of my Raspberry Pi.
|
||||
This is where I put my podcast
|
||||
that I want to listen to.
|
||||
I can then rep the log file to see
|
||||
the latest version
|
||||
of a particular show
|
||||
that's been copied to my MP3 directory,
|
||||
and some time to time I delete the episodes
|
||||
I have listened to before copying new ones in.
|
||||
So this script
|
||||
is stored in scripts.
|
||||
A tilde, I should say,
|
||||
in my home directory,
|
||||
scripts,
|
||||
update podcast episode log,
|
||||
and the comments from a script
|
||||
are
|
||||
wrote at the time.
|
||||
Created to keep track
|
||||
of the latest podcast episode I've listened to,
|
||||
it does this by logging the contents
|
||||
of the MP3 directory
|
||||
on the Raspberry Pi.
|
||||
The script checks the log file exists,
|
||||
then checks a podcast
|
||||
and then uses the find command
|
||||
to list the files named
|
||||
MP3 directory,
|
||||
and sends the listing to a log file.
|
||||
A date stamp is added
|
||||
at the beginning of the listing.
|
||||
So that was
|
||||
version 1 was created
|
||||
in the 11th of July 2015.
|
||||
By the way, I will include all these scripts
|
||||
with a show
|
||||
in case you're interested.
|
||||
The log file
|
||||
is created at home Pi file
|
||||
with the latest podcast
|
||||
episode log.
|
||||
As of the 4th of October 2019,
|
||||
the log file
|
||||
is an impressive
|
||||
698 kilobytes.
|
||||
It contains a whopping
|
||||
28,150 lines.
|
||||
The first entry was dated
|
||||
to 15th July 2013.
|
||||
So of course, you know,
|
||||
I can go,
|
||||
it's probably a very
|
||||
wasteful way of doing things
|
||||
from day to day.
|
||||
That folder will not change.
|
||||
So it's basically
|
||||
writing the same information day
|
||||
after day,
|
||||
appending it to a text file,
|
||||
a log file.
|
||||
But still, at least that way,
|
||||
I can still find out
|
||||
what the last episode
|
||||
of a particular
|
||||
show that I'm listing to
|
||||
was. So I can say,
|
||||
what was the last
|
||||
to finish off? And I deleted that
|
||||
with all the files by mistake
|
||||
for that show.
|
||||
What was the last one I listened to?
|
||||
I don't know where the heck I'm
|
||||
with that show.
|
||||
I can grip it and say, oh yeah,
|
||||
it was episode 23 or something.
|
||||
So that's a general idea
|
||||
of that particular script.
|
||||
Well, you know,
|
||||
it's,
|
||||
what did I say? What size did I say was
|
||||
688 kilobytes.
|
||||
Oh, you know, you could make that
|
||||
so much more, yeah,
|
||||
loads of duplicates and stuff in the file.
|
||||
And I should maybe do log rotation,
|
||||
and all that sort of stuff.
|
||||
Well, it's 688 kilobytes
|
||||
these days, you know.
|
||||
We're also wasteful nowadays.
|
||||
So that's my excuse anyway.
|
||||
It works.
|
||||
And I just, um,
|
||||
God, that's what size it
|
||||
lined up eventually.
|
||||
But that was since 2013, remember.
|
||||
The third script,
|
||||
um, what it does,
|
||||
uh, subscripts also runs as a
|
||||
growing job, uh, every night
|
||||
at 11 o'clock.
|
||||
Um, and it's in Home Pie
|
||||
scripts,
|
||||
update, broadcast,
|
||||
position, log.
|
||||
And below the comments,
|
||||
take it directly from the script.
|
||||
Created to log current
|
||||
position of current podcast.
|
||||
The script checks, the log
|
||||
then checks that mock
|
||||
P is installed on the system.
|
||||
And then writes a time stamp
|
||||
and track position information
|
||||
to a log file,
|
||||
uh, using mock with the dash Q
|
||||
flag, uh, to get the current
|
||||
track position track title
|
||||
and final name.
|
||||
Version 1 was created in July 2015.
|
||||
Um, yeah, you can use a Q command
|
||||
and that way you can
|
||||
tell it out mock
|
||||
or spout information,
|
||||
depending on how, how you
|
||||
what you actually have.
|
||||
I can't remember exactly how you use it.
|
||||
Is it a percent?
|
||||
And then, uh, you can look at the
|
||||
modern page and mock to see how you use
|
||||
a Q dash, uh, dash,
|
||||
capital Q command.
|
||||
Uh, the log file is located at Home Pie, uh,
|
||||
files, logs,
|
||||
podcast, position,
|
||||
log.
|
||||
So it's 140 kilobytes
|
||||
currently has 1495 lines.
|
||||
The first entry was dated to
|
||||
15th of July 2013.
|
||||
So an example, um,
|
||||
log out, we have got
|
||||
1509062301.
|
||||
So, uh,
|
||||
I know Dave like it.
|
||||
I know Ken likes us this year,
|
||||
month, day, hour, minute.
|
||||
And then a pipe symbol
|
||||
and then the track position
|
||||
which gives you, uh,
|
||||
minute and second.
|
||||
So I'm one minute 12 seconds
|
||||
on this, for example.
|
||||
The other, the other pipes,
|
||||
pipe symbol to separate the fields.
|
||||
And this time, the third entry
|
||||
is ID3 track type,
|
||||
ID3 track title.
|
||||
So in this case,
|
||||
Steve Morris, uh,
|
||||
HPR1811
|
||||
Life and Times of a Geek
|
||||
Part II hacker public radio.
|
||||
And finally,
|
||||
the last field,
|
||||
separated by a pipe, uh,
|
||||
the vertical bar, I should say,
|
||||
is the final name.
|
||||
And that's HPR1811.mp3.
|
||||
Um, so yes, uh,
|
||||
so that, that,
|
||||
that means I can look at the, uh,
|
||||
at that log and see
|
||||
basically where I'm,
|
||||
because every night at 11 o'clock
|
||||
it records that.
|
||||
So, you know, if my pipe was to crash
|
||||
or something was to happen,
|
||||
the very, you know,
|
||||
by the end of that day,
|
||||
that tends to be, by that point,
|
||||
I won't have listened to anymore.
|
||||
So it'll be pretty much bang up today,
|
||||
or at the very most, only one day out.
|
||||
So it's quite easy to,
|
||||
to work out where,
|
||||
where I am basically.
|
||||
Um, so that's, that's the idea that script.
|
||||
Um, the fourth script
|
||||
is a previous script,
|
||||
but it uses, uh,
|
||||
it's used to update the current
|
||||
audio book position to log file.
|
||||
Like the previous script,
|
||||
it runs as a cron job every night.
|
||||
And that's HomePieScripts
|
||||
update audio book position log.
|
||||
And, uh,
|
||||
the final script,
|
||||
uh, the fifth part is, uh,
|
||||
HomePieScript Logs.
|
||||
It was created to easily view,
|
||||
uh, the,
|
||||
podcast and audio, audio book logs.
|
||||
The script first checks
|
||||
that the log files exist.
|
||||
Then displays the last three lines
|
||||
of my podcast and audio books logs.
|
||||
So I can quickly see
|
||||
the most recent episode positions
|
||||
that were stored by the cron job
|
||||
is around 11 p.m.
|
||||
Uh, the logs are stored
|
||||
at HomePieFilesLogs.
|
||||
The version was created
|
||||
in July 2015.
|
||||
Version 2 was in August 2015.
|
||||
Uh, this added the option
|
||||
to search for a string
|
||||
in my episode position logs.
|
||||
Uh, it's easily found out
|
||||
what the latest episode they listened to
|
||||
of particular book or podcast.
|
||||
The output is pepped
|
||||
too less as
|
||||
you can see.
|
||||
If more than one argument is given
|
||||
then this plays an error
|
||||
and a usage message.
|
||||
Version 3 of the script,
|
||||
uh, another retweet
|
||||
in July 2017.
|
||||
Um, so if a single argument is
|
||||
given the numbers to do
|
||||
to search for a string,
|
||||
then it now jumps
|
||||
to the end of the list
|
||||
rather than the beginning.
|
||||
The default option for
|
||||
less is to jump
|
||||
to the beginning of the, uh,
|
||||
file.
|
||||
Uh, I've discovered
|
||||
that you can make it jump
|
||||
to the end of the file
|
||||
by using the plus G
|
||||
plus capital G flag.
|
||||
Um, so that's, that's quite handy.
|
||||
Um, I mean,
|
||||
if I'm not, if I'm not searching
|
||||
for a string and I'm not,
|
||||
in other words, if I'm not using any, um,
|
||||
arguments with the script,
|
||||
then it just uses, uh,
|
||||
tail
|
||||
to display the last few lines.
|
||||
So I don't know to worry about that.
|
||||
But it's when you're using less,
|
||||
it doesn't say defaults to the top,
|
||||
the top of the file is supposed to
|
||||
end. So I hope that makes sense.
|
||||
Um, so yeah, there's a script
|
||||
that displays the contents
|
||||
of the following logpiles,
|
||||
homepy, files, logs,
|
||||
podcastprison.log
|
||||
and homepy files logs
|
||||
audiobookposition.log
|
||||
Phew.
|
||||
Does that all make sense?
|
||||
I don't know.
|
||||
Um, I don't very often need to use
|
||||
this facility because, uh,
|
||||
or these facilities, because my pie
|
||||
is, I've seen before, pretty, pretty damn stable
|
||||
and, uh, you know, it doesn't crash.
|
||||
Um,
|
||||
but, um,
|
||||
I've seen me going and holding,
|
||||
and I'm shutting it down or
|
||||
it has been, uh, I remember,
|
||||
on one hand, many times, I've actually
|
||||
needed to use this, uh,
|
||||
but it is a handy way to, um,
|
||||
to get back to where I was, you know,
|
||||
and not to look at a, uh,
|
||||
a playlist on, on, on what can I think?
|
||||
God, where the heck was on, uh,
|
||||
where these 50 shows that,
|
||||
in a playlist, what episode was on?
|
||||
And now that I've found the episode,
|
||||
where on earth was out, within the episode.
|
||||
It does greatly, um,
|
||||
simplify things.
|
||||
I don't know how, how,
|
||||
the rest you keep track of these sort of things,
|
||||
maybe you use your phone or,
|
||||
I think a bit of most people these days
|
||||
just use a phone, uh, to, uh,
|
||||
to the podcast.
|
||||
I don't have a smart phone and,
|
||||
I don't fancy carrying a big,
|
||||
tablet type thing on the back,
|
||||
my back pocket or whatever.
|
||||
Anyway, I guess I could use a name, uh,
|
||||
my Sansa Clipper or whatever.
|
||||
Uh, when I'm, uh,
|
||||
outside obviously.
|
||||
But this is very convenient when, uh,
|
||||
in the house. Um, so yeah,
|
||||
I've been interested to hear how,
|
||||
uh, other listeners said,
|
||||
do this sort of thing. Um,
|
||||
so anyway, I, I think that's just
|
||||
about all I've got to say on the subject.
|
||||
I hope I haven't bored you all to tears.
|
||||
I haven't spoken too quickly.
|
||||
Uh, but, uh, there we go.
|
||||
So, thanks very much for the last thing.
|
||||
And, uh,
|
||||
only just remind, it just remains for me to say,
|
||||
if you want to contact me,
|
||||
I can be contacted at MrX
|
||||
at HPR
|
||||
at googlemail.com.
|
||||
That's MRX
|
||||
80
|
||||
HPR
|
||||
the At symbol
|
||||
googlemail.com.
|
||||
So until next time,
|
||||
thank you and goodbye.
|
||||
You've been listening to HECA Public Radio
|
||||
at HECA Public Radio.org.
|
||||
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 HPR listener
|
||||
like yourself.
|
||||
If you ever thought of recording a podcast,
|
||||
then click on our contributing
|
||||
to find out how easy it really is.
|
||||
HECA Public Radio was founded
|
||||
by the digital dog pound
|
||||
computer club,
|
||||
and it's part of the binary revolution
|
||||
at binwreff.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.
|
||||
Unless otherwise stated,
|
||||
today's show is released on the
|
||||
Creative Commons,
|
||||
Attribution, share a life,
|
||||
3.0 license.
|
||||
Reference in New Issue
Block a user