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

101 lines
8.7 KiB
Plaintext

Episode: 2919
Title: HPR2919: hosting software in HPR show notes
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2919/hpr2919.mp3
Transcribed: 2025-10-24 13:15:54
---
this in HBR episode 2919 entitled Hosting Software in HBR Show Notes and in part of the series
programming 101 it is hosted by Genre and in about 10 minutes long and Karima Cleanflag.
The summer is, notes are awesome, but might lead to Hosting Software in the HBR Show Notes.
This episode of HBR is brought to you by an honesthost.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 An Honesthost.com.
Hello HBR listeners, my name is Jezra and I bought a canoe. To be fair the canoe is not what this
episode is about. With that in mind I'm going to tell you a bit more about the canoe.
The canoe is a red 16 foot long prospector model manufactured by Winona. It is the special Lewis
and Clark edition so presumably it was manufactured in 2005. For those who are curious this episode is
about software and consuming an API and I will get to that in a bit but first let's get back to
this boat. After a bit of paddling in a little pond I decided that this boat needs to have a clamp
on mount for an electric motor so I built a little clamp on mount mounted it on the canoe put on
the electric motor out of the battery went out in a little pond to test it out hit full throttle to
see how it's going to go and I did a wheelie in a canoe flipped it over I went for a swim. Sadly my
beloved Nexus 5X phone was in my pocket and it was kind of ruined by the experience. Bomber dude
obviously the canoe was telling me no way bro you're not putting a motor on me I'm a canoe I should
probably have a sail. With that inspiration I designed and built a clamp on sailing system for
this canoe I built a rudder and a tiller and some outriggers for flotation and a mast and I sewed a
sail out of a tarp so I could get this boat on some water and actually go sailing. On Labor Day
weekend I took the canoe and sail rig to Scotts Flat Lake it's a local lake to go test it out
but the canoe and the water put all the components on it and I went sailing sort of there wasn't much
went however I did manage to see a bald eagle pluck a fish from the lake oh it was so close it was
amazing absolutely amazing but man I did a lot of paddling that day a lot I should not have paddled
so much but I had to because there was not much wind if only there was something I could do about
such things. Fortunately for me the U.S. National Weather Service has an API where one can send
GPS coordinates latitude and longitude and get information about weather in that area as well as
a forecast for weather in that area and that forecast includes wind information.
That's a racer. The API provided by the National Weather Service is a web accessible API which
means that the data available on the API is accessible through any programming language that can
make a request for a web page or I should say for the contents of a web page armed with this
knowledge I crafted a plan. I would write a script that would access the data from the API and
if the wind speed were above a certain threshold I would get a text message saying at this date the
wind speed will be above this certain threshold at which point I would say wow I've got a lot to
do that day sadly I can't go out sailing on the lake but it would be nice to know that that would
be a good day to go out sailing on the lake. Now that the need has been explained I'm going to call
this episode how not to release software and I say that because in the comments of an HPR
episode is the worst place to release software well maybe not the worst place but you know I could
use some sort of external software hosting service oh I guess that's what HPR is now never mind
this episode is now called please host your software in the comment section of an HPR episode.
In my web browser I opened up the Google Maps website found the very center of the lake
where I would like to get the wind speed did right click something or other figured out the
latitude and longitudinal points and put them in my script. The script is written using the Python
programming language it is using the URL lib library for accessing the URL for accessing the API
URL. Also used is the JSON library for processing the data returned by the API.
The regular expression libraries also used because I need to process some numbers in text
and the subprocess library is used which is an excellent way for me to run my text
Jesra script from within another script. After my wind checking script imports the libraries
that are used I declare some variable properties latitude and longitude agent which represents the
user agent string sent to the API. The National Weather Service documentation specifically states
that having a unique user agent string is the best way to keep the request from getting blocked.
It's possible that they get spammed a lot or bots that have a non-unique string hammer their API.
I'm not sure why they have that policy but they have that policy. I also set a variable called
MinSpeed and MinSpeed represents the minimum wind speed in miles per hour that is necessary for
triggering the text to myself saying the wind is good. I set that speed at nine miles per hour.
If the wind is going to be below that I don't need a text message to tell me but if it's going to
be nine miles per hour or more I'm your Hegelberry. Because the wind check script needs to
get data from two different API endpoints that is to say it needs to get data from two different
URLs. I created a function called get API data and that is passed the URL that the script needs to
get data from. A request is made to the URL. It includes the user agent string and the data
that gets returned is passed from JSON into a Python object and then the function returns that
Python object back to the script so that it's one easy place to maintain accessing an API converting
the returned JSON data to a Python object and then having access to that Python object.
The first API request gets data about that specific GPS coordinate point within that returned
data is a URL to get forecast data for that GPS location. So again this is the second time that
the get API data function is called to get the forecast data for that endpoint and it gets
returned as a Python object. The returned forecast data has periods and periods have name and
wind speed as properties. So it will be things like Tuesday evening Wednesday Wednesday evening
actually I guess it's Wednesday night. Those would be the names of the periods for the forecast.
Wind speed is always going to be in one of two formats either number MPH or number to other
number MPH. That is to say it could be five miles per hour or five to seven miles per hour or five
to nine miles per hour. And this brings us to the second function of this script which is called
wind is good and it's just past the wind speed string. Knowing that the wind speed string will
either be number MPH or number to number MPH. The wind is good function uses a regular expression
to find all matches of a number. And then it goes through those numbers that are matched to see if
any of them are above the minimum speed or sorry I should say above or equal to the minimum speed.
As the current minimum speed is nine if the wind speed were nine miles per hour then that would
return true. If the wind speed were five to nine miles per hour that would also return true.
Four to ten miles per hour again would return true. Four to seven miles per hour would return false.
Regular expressions are great for such things. Boyle down to its simplest form. The script does this.
Gets data for a point. Finds the forecasts for that point. Loops through the forecasts.
Looking for a wind speed that is greater than nine miles per hour. If one is found,
run text Jezra with the name of the forecast period and the wind speed of the forecast period.
And that's it. Hope you enjoyed the episode. Timezone appropriate farewell to you.
You've been listening to Hacker Public Radio at Hacker Public Radio dot 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 HBR listener like yourself.
If you ever thought of recording a podcast and click on our contributing to find out how easy it
Hacker Public Radio was founded by the digital dog pound and the infonomicant computer club.
And it's 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.
Unless otherwise stated, today's show is released on the creative comments,
attribution, share a light, free dot org license.