Compare commits

...

7 Commits

Author SHA1 Message Date
20f1951321 new cn date 2025-10-31 18:18:58 +01:00
Dave Morriss
e54e1c926f Removed the timestamp at the end of Community_News/shownotes_container.tpl 2025-10-31 15:09:57 +00:00
e784b07dbd Support for extra files associated with the eps 2025-10-28 17:14:15 +01:00
Dave Morriss
00172063de Adjustments for new website
Community_News/make_meeting: added a new -output=FILE option

Community_News/shownote_template.tpl: removed reference to previous name
    shownote_template13.tpl

Community_News/shownotes_container.tpl: rewrote to use the new website
    design. Also removed some irrelevant parts like the navigation links
    and the comment form.
2025-10-26 18:35:11 +00:00
01c5ed1495 dat update and minor format changes 2025-10-20 15:37:24 +02:00
50facb86f3 dat update and minor format changes 2025-10-20 15:36:48 +02:00
Dave Morriss
9c5cccd0f2 Addition of notes about running "thanks_to_hosts" 2025-10-07 12:33:37 +01:00
6 changed files with 194 additions and 237 deletions

View File

@@ -0,0 +1,51 @@
# Thanking hosts at the end of the year
## Introduction
Every year, in the last Community News recording (for December) it has been the
norm to list all of the hosts who have contributed. A list of host names is
assembled for this purpose, included in the notes and read out by the
volunteers.
## Method
A Bash script exists, called `thanks_to_hosts`, which manages the generation of
the list of hosts. The end product is a piece of HTML for insertion into the
notes.
The script is invoked simply by typing:
```
thanks_to_hosts
```
By default, the script uses the current year when generating the list of hosts.
If, as may happen, the list is being generated in the next year, then a 4-digit
year can be given in as an argument.
### Items required to run
The `thanks_to_hosts` script requires a number of tools and files to run:
- `query2tt2` - this is a Perl script which performs a database query and hands
the results to Template Toolkit template.
- `hpr.db` - a SQLite database which contains a copy of the live HPR database.
This needs to have been refreshed in the recent past.
- `.hpr_sqlite.cfg` - the configuration file for `query2tt2` to indicate what
type of database is being used and where to find it.
- `hosts_in_year.sqlite.sql` - a file containing the query used (using SQLite
syntax)
- `hosts_list.tpl` - the template which will be used to generate HTML
### Output file
Running the script `thanks_to_hosts`, if successful, will result in the
generation of a file called `hosts_in_year_${YEAR}.html`, where `${YEAR}` is
replaced by the default or explicit year. The script will report the name of
this file for convenience.
<!--
vim: syntax=markdown:ts=8:sw=4:ai:et:tw=78:fo=tcqn:fdm=marker:com+=fb\:-
-->

View File

@@ -10,16 +10,16 @@
# recurrence description is not adequate. # recurrence description is not adequate.
# #
# OPTIONS: None # OPTIONS: None
# REQUIREMENTS: Needs modules Getopt::Long, Data::ICal, Date::Parse and # REQUIREMENTS: Needs modules Getopt::Long, Data::ICal, Date::ICal,
# Date::Calc # Date::Parse and Date::Calc
# BUGS: --- # BUGS: ---
# NOTES: Based on a script distributed with the HPR episode "iCalendar # NOTES: Based on a script distributed with the HPR episode "iCalendar
# Hacking" # Hacking"
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com # AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
# LICENCE: Copyright (c) year 2012-2024 Dave Morriss # LICENCE: Copyright (c) year 2012-2025 Dave Morriss
# VERSION: 0.2.3 # VERSION: 0.2.4
# CREATED: 2012-10-13 15:34:01 # CREATED: 2012-10-13 15:34:01
# REVISION: 2024-10-28 13:17:44 # REVISION: 2025-10-23 16:51:48
# #
#=============================================================================== #===============================================================================
@@ -42,7 +42,7 @@ use Date::ICal;
# #
# Version number (manually incremented) # Version number (manually incremented)
# #
our $VERSION = '0.2.3'; our $VERSION = '0.2.4';
# #
# Script name # Script name
@@ -88,9 +88,10 @@ usage() if ( $options{'help'} );
# #
# Collect options # Collect options
# #
my $count = ( defined( $options{count} ) ? $options{count} : $DEF_COUNT ); my $count = ( defined( $options{count} ) ? $options{count} : $DEF_COUNT );
my $reminder = ( defined( $options{reminder} ) ? $options{reminder} : 0 ); my $reminder = ( defined( $options{reminder} ) ? $options{reminder} : 0 );
my $force = ( defined( $options{force} ) ? $options{force} : 0 ); my $force = ( defined( $options{force} ) ? $options{force} : 0 );
my $outfile = $options{output};
#my $reminder_summary = ( defined( $options{summary} ) ? $options{summary} : #my $reminder_summary = ( defined( $options{summary} ) ? $options{summary} :
# $DEF_SUMMARY ); # $DEF_SUMMARY );
@@ -120,6 +121,19 @@ else {
@startdate = Today(); @startdate = Today();
} }
#
# Open the output file (or STDOUT)
#
my $outfh;
if ($outfile) {
open( $outfh, ">:encoding(UTF-8)", $outfile )
or die "Unable to open $outfile for writing: $!\n";
}
else {
open( $outfh, ">&", \*STDOUT )
or die "Unable to initialise for writing: $!\n";
}
# #
# Date and time values # Date and time values
# #
@@ -291,7 +305,7 @@ if ($reminder) {
# #
# Print the result # Print the result
# #
print $calendar->as_string; print $outfh $calendar->as_string;
exit; exit;
@@ -440,7 +454,7 @@ sub ISO8601_Date {
#=============================================================================== #===============================================================================
sub usage { sub usage {
print STDERR <<EOD; print STDERR <<EOD;
Usage: $PROG [options] [FILE...] Usage: $PROG [options]
$PROG v$VERSION $PROG v$VERSION
@@ -452,6 +466,8 @@ adds reminders in the form of TODO items in relation to each meeting.
-count=N Number of entries; default 12 -count=N Number of entries; default 12
-[no]force Allow a -from=DATE date before today; default not -[no]force Allow a -from=DATE date before today; default not
-[no]reminder Add a reminder TODO item; default no -[no]reminder Add a reminder TODO item; default no
-output=FILE Name of file to write to; optional, writes to STDOUT
if omitted
EOD EOD
# -summary=TEXT Alternative text for the reminder (default 'Send out # -summary=TEXT Alternative text for the reminder (default 'Send out
@@ -472,7 +488,8 @@ EOD
sub Options { sub Options {
my ($optref) = @_; my ($optref) = @_;
my @options = ( "help", "from=s", "count=i", "force!", "reminder!"); my @options
= ( "help", "from=s", "count=i", "force!", "reminder!", "output=s" );
# "summary|rs=s" ); # "summary|rs=s" );
if ( !GetOptions( $optref, @options ) ) { if ( !GetOptions( $optref, @options ) ) {

View File

@@ -0,0 +1,40 @@
2021-10-01,2021-10-30 14:00:00
2022-06-01,2022-07-02 14:00:00
2022-07-01,2022-07-30 14:00:00
2022-08-01,2022-09-03 14:00:00
2022-09-01,2022-10-01 14:00:00
2022-10-01,2022-11-05 14:00:00
2022-11-01,2022-12-03 15:00:00
2022-12-01,2022-12-27 15:00:00
2023-01-01,2023-02-04 15:00:00
2023-02-01,2023-03-04 15:00:00
2023-03-01,2023-04-01 15:00:00
2023-04-01,2023-04-29 15:00:00
2023-05-01,2023-06-03 15:00:00
2023-07-01,2023-08-05 15:00:00
2023-08-01,2023-09-02 15:00:00
2023-09-01,2023-09-30 15:00:00
2023-10-01,2023-11-04 15:00:00
2023-11-01,2023-12-02 15:00:00
2023-12-01,2023-12-30 15:00:00
2024-01-01,2024-02-04 15:00:00
2024-02-01,2024-03-02 15:00:00
2024-03-01,2024-03-30 15:00:00
2024-05-01,2024-06-02 13:00:00
2024-06-01,2024-06-28 15:00:00
2024-07-01,2024-08-02 15:00:00
2024-08-01,2024-08-29 15:00:00
2024-09-01,2024-10-04 15:00:00
2024-10-01,2024-11-01 15:00:00
2024-11-01,2024-11-29 15:00:00
2024-12-01,2025-01-03 15:00:00
2025-01-01,2025-01-31 15:00:00
2025-02-01,2025-02-28 16:00:00
2025-03-01,2025-04-04 16:00:00
2025-04-01,2025-05-02 15:00:00
2025-05-01,2025-05-30 15:00:00
2025-06-01,2025-07-04 15:00:00
2025-07-01,2025-08-01 15:00:00
2025-08-01,2025-08-29 15:00:00
2025-09-01,2025-09-26 15:00:00
2025-10-01,2025-09-26 15:00:00

View File

@@ -1,4 +1,4 @@
[%# shownote_template13.tpl Updated: 2025-08-20 -%] [%# shownote_template.tpl Updated: 2025-10-22 -%]
[%# -------------------------------------------------------------------------------- -%] [%# -------------------------------------------------------------------------------- -%]
[%# Makes either an HTML snippet for insertion into the database or a full -%] [%# Makes either an HTML snippet for insertion into the database or a full -%]
[%# listing with full comments for circulation to the hosts recording the episode -%] [%# listing with full comments for circulation to the hosts recording the episode -%]

View File

@@ -1,4 +1,4 @@
[%# /home/cendjm/HPR/Community_News/shownotes_container.tpl 2024-06-22 -%] [%# /home/cendjm/HPR/Community_News/shownotes_container.tpl 2025-10-26 -%]
[%# Container to display Community News shownotes as an HTML page -%] [%# Container to display Community News shownotes as an HTML page -%]
[%- USE date -%] [%- USE date -%]
[% DEFAULT shownotes = "" [% DEFAULT shownotes = ""
@@ -8,250 +8,99 @@
<!DOCTYPE HTML> <!DOCTYPE HTML>
<html lang="en"> <html lang="en">
<head> <head>
<title>Hacker Public Radio ~ The Technology Community Podcast</title> <base href="https://hackerpublicradio.org/"> <meta charset="utf-8" /> <title>Hacker Public Radio ~ The Technology Community Podcast</title> <base href="https://hackerpublicradio.org/"> <meta charset="utf-8" />
<meta http-equiv="X-Clacks-Overhead" content="GNU Terry Pratchett" /> <meta http-equiv="X-Clacks-Overhead" content="GNU Terry Pratchett" />
<meta http-equiv="last-modified" content="Sat, 22 Jun 2024 16:04:21 +0000"> <meta http-equiv="last-modified" content="Wed, 22 Oct 2025 09:32:36 +0000">
<meta name="keywords" content="Technology, Tech News, Education, Training" /> <meta name="keywords" content="Technology, Tech News, Education, Training" />
<meta name="description" content="Hacker Public Radio is a podcast that releases shows every weekday Monday through Friday. Our shows are produced by the community (you) and can be on any topic that is of interest to hackers and hobbyists." /> <meta name="description" content="Hacker Public Radio is a podcast that releases shows every weekday Monday through Friday. Our shows are produced by the community (you) and can be on any topic that is of interest to hackers and hobbyists." />
<meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="/hpr.ico" >
<!-- Internal CSS --> <link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Opus RSS" href="/hpr_opus_rss.php" />
<style type="text/css"> <link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Ogg Vorbis RSS" href="/hpr_ogg_rss.php" />
article, aside, dialog, figure, footer, header, hgroup, menu, nav, section { <link rel="alternate" type="application/rss+xml" title="Hacker Public Radio MP3 RSS" href="/hpr_mp3_rss.php" />
display: block; <link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Comments RSS" href="/comments.rss" />
}
#list1, #list2, #list3 {
display:none;
}
</style>
<link rel="shortcut icon" href="https://hackerpublicradio.org/hpr.ico" >
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Ogg Vorbis RSS" href="./hpr_ogg_rss.php" />
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Speex RSS" href="./hpr_spx_rss.php" />
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio MP3 RSS" href="./hpr_mp3_rss.php" />
<link rel="alternate" type="application/rss+xml" title="Hacker Public Radio Comments RSS" href="./comments.rss" />
<link rel="license" title="CC BY-SA 4.0" href="https://creativecommons.org/licenses/by-sa/4.0/" /> <link rel="license" title="CC BY-SA 4.0" href="https://creativecommons.org/licenses/by-sa/4.0/" />
<link href="./css/hpr.css" rel="stylesheet" /> <link href="/css/hpr.css" rel="stylesheet" />
<!--[if IE]> <!--[if IE]>
<link rel="stylesheet" href="./css/hpr.css" media="screen" type="text/css" /> <link rel="stylesheet" href="/css/hpr.css" media="screen" type="text/css" />
<script src="/JavaScript/html5.js"></script> <script src="/JavaScript/html5.js"></script>
<![endif]--> <![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.5, user-scalable=yes"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"/>
</head> </head>
<body id="give"> <body>
<div id="container" class="shadow"> <div id="top_navigation" class="sr-only">
<header> <nav id="accessible_menu">
<a href="./"><img id="hprlogo" src="./images/hpr_logo.png" alt="hprlogo"></a> <menu>
<div id="hpr_banner"> <li><a href="#main_content">Skip to Main Content</a></li>
<p id="accessible_menu"> <li><a href="/sitemap.html#main_content">Site Map</a></li>
<a href="./sitemap.html">Site Map</a> </menu>
- <a href="#maincontent">skip to main content</a> </nav>
<hr class="no-css">
</div>
<header role="banner">
<div class="bounding-box">
<hgroup id="title">
<h1 id="site_acronym"><a href="/index.html">HPR</a></h1>
<p id="site_name">
<a href="/correspondents/index.html">H</a>acker
<a href="/comments_viewer.html">P</a>ublic
<a href="/syndication.html">R</a>adio
</p> </p>
<h1 id="sitename"> </hgroup>
<a href="./correspondents/index.html">H</a>acker <hgroup id="tag_line">
<a href="./comments_viewer.html">P</a>ublic <h2 id="tag1">The Community Podcast</h2>
<a href="./syndication.html">R</a>adio <p id="tag2">Sharing your ideas, projects, opinions since 2005</p>
</h1> <p id="tag3">New episodes every weekday </p>
<h2>Your ideas, projects, opinions - podcasted.</h2>
<h3>New episodes every weekday Monday through Friday.<br />
<em><small>Temporary version of the Community News notes for hosts to use when recording<br />
Updated on [% date.format(date.now,'%Y-%m-%d %H:%M:%S') %]</small></em></h3>
</div> </hgroup>
<hr /> </div>
<nav class="menu" role="navigation"> <ul>
<li><a href="https://hub.hackerpublicradio.org/"><strong>⇧Upload⇧</strong></a></li>
<li><a href="./index.html"><strong>Home</strong></a></li>
<li><a href="./syndication.html"><strong>Get Shows »</strong></a></li>
<li><a href="./eps/index.html">Full Episode Guide</a></li>
<li><a href="./series/index.html">In-Depth Series</a></li>
<li><a href="./download.html">Download Options</a></li>
</ul>
</nav>
</header> </header>
<main id="maincontent"> <main id="main_content" role="main">
<article> <article>
<header> <header>
<h1>hpr[% episode %] :: HPR Community News for [% month_year %]</h1> <h1>hpr[% episode %] :: HPR Community News for [% month_year %]</h1>
<h3>HPR Volunteers talk about shows released and comments posted in [% month_year %]</h3> <h3>HPR Volunteers talk about shows released and comments posted in [% month_year %]</h3>
<p class="meta"><small><a href="./eps/hpr0001/index.html" rel="first">&lt;&lt; First</a>, <a href="./eps/hpr4190/index.html" rel="previous">&lt; Previous</a>, Next <span>&gt;</span> <a href="./eps/hpr4145/index.html" rel="last">Latest &gt;&gt;</a></small> </p>
<p><a href="./correspondents/0159.html"><img src="./images/hosts/159.png" height="80" width="80" alt="Thumbnail of HPR Volunteers" /></a><br>Hosted by <a href="./correspondents/0159.html">HPR Volunteers</a> on <span>2024-09-02</span> is flagged as <span>Explicit</span> and is released under a <span>CC-BY-SA license</span>. <br> <span><label>Tags:</label> <em> <a href="./tags.html#community news">Community News</a>.</em> <p><em><small>Temporary version of the Community News notes for hosts to use when recording<br />
Updated on [% date.format(date.now,'%Y-%m-%d %H:%M:%S') %]</small></em></p>
<p><a href="/correspondents/0159.html"><img src="/images/hosts/159.png" height="80" width="80" alt="Thumbnail of HPR Volunteers" /></a><br>Hosted by <a href="/correspondents/0159.html">HPR Volunteers</a> on <span>Monday, 2025-10-06</span> is flagged as <span>Explicit</span> and is released under a <span>CC-BY-SA license</span>. <br> <span><label>Tags:</label> <em> <a href="/tags.html#community_news">Community News</a>.</em>
</span> </span>
<label>Comments: </label><a href="./eps/hpr[% episode %]/index.html#comments" aria-label="Comments for hpr[% episode %]">(Be the first)</a>. <br>
The show is available on the Internet Archive at: <a href="https://archive.org/details/hpr[% episode %]">https://archive.org/details/hpr[% episode %]</a><p> Listen in <a href="https://archive.org/download/hpr[% episode %]/hpr[% episode %].ogg" aria-label="Download hpr[% episode %] as">ogg</a>, <label>Comments: </label><a href="/eps/[% episode %]/index.html#comments"
<a href="https://archive.org/download/hpr[% episode %]/hpr[% episode %].spx" aria-label="Download hpr[% episode %] as">spx</a>, aria-label="Comments for [% episode %]">(Be the first)</a>. <br><p> Listen in <a href="https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/[% episode %]/[% episode %].ogg" aria-label="Download [% episode %] as">ogg</a>,
or <a href="https://archive.org/download/hpr[% episode %]/hpr[% episode %].mp3" aria-label="Download hpr[% episode %] as">mp3</a> format. Play now:<br> <a href="https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/[% episode %]/[% episode %].opus" aria-label="Download [% episode %] as">opus</a>,
or <a href="https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/[% episode %]/[% episode %].mp3" aria-label="Download [% episode %] as">mp3</a> format. Play now:<br>
<audio controls preload="none"> <audio controls preload="none">
<source src="https://archive.org/download/hpr[% episode %]/hpr[% episode %].ogg" type="audio/ogg" > <source src="https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/[% episode %]/[% episode %].ogg" type="audio/ogg" >
<source src="https://archive.org/download/hpr[% episode %]/hpr[% episode %].mp3" type="audio/mpeg" > <source src="https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/[% episode %]/[% episode %].mp3" type="audio/mpeg" >
</audio><br> </audio><br>
Duration: 00:00:00</p></p> Duration: 01:23:13<br>Download the <a href="https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/[% episode %]/[% episode %].txt" aria-label="Download [% episode %]">transcription</a></li> and
<h3> <label>Part of the series:</label> <a href="./series/0047.html">HPR Community News</a>.</h3> <a href="https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/[% episode %]/[% episode %].srt" aria-label="Download [% episode %]">subtitles</a>.</p></p>
<h3> <label>Part of the series:</label> <a href="/series/0047.html">HPR Community News</a>.</h3>
<p><em>A monthly look at what has been going on in the HPR community. This is a regular show scheduled for the first Monday of the month.</em></p> <p><em>A monthly look at what has been going on in the HPR community. This is a regular show scheduled for the first Monday of the month.</em></p>
</header> </header>
<div> <div>
[% INCLUDE $shownotes -%] [% INCLUDE $shownotes -%]
</div> </div>
<footer><h2>Show Transcript</h2>
<p>Automatically generated using <a href="https://github.com/openai/whisper">whisper</a>
<pre><code>whisper --model tiny --language en hpr[% episode %].wav</code></pre></p>
<p>
You can save these subtitle files to the same location as the HPR Episode, and they will automatically show in players like <a href="https://mpv.io/">mpv</a>, <a href="https://www.videolan.org/vlc/">vlc</a>. Some players allow you to specify the subtitle file location.
</p>
<ul>
<li>Text: <a href="https://archive.org/download/hpr[% episode %]/hpr[% episode %]/hpr[% episode %].txt">hpr[% episode %].txt</a></li>
<li><a href="https://en.wikipedia.org/wiki/WebVTT">WebVTT</a>: <a href="https://archive.org/download/hpr[% episode %]/hpr[% episode %]/hpr[% episode %].vtt">hpr[% episode %].vtt</a></li>
<li><a href="https://en.wikipedia.org/wiki/SubRip">SubRip</a>: <a href="https://archive.org/download/hpr[% episode %]/hpr[% episode %]/hpr[% episode %].srt">hpr[% episode %].srt</a></li>
</ul><p><small><a href="./eps/hpr0001/index.html" rel="first">&lt;&lt; First</a>, <a href="./eps/hpr4190/index.html" rel="previous">&lt; Previous</a>, Next <span>&gt;</span> <a href="./eps/hpr4145/index.html" rel="last">Latest &gt;&gt;</a></small></p>
</footer></article><hr />
<h1>Comments</h1>
<p id="comments">
Subscribe to the comments <a href="./comments.rss">RSS</a> feed.
</p>
<h2>Leave Comment</h2>
<p>
<strong>Note to Verbose Commenters</strong><br />
If you can't fit everything you want to say in the comment below then you really should <a href="https://hackerpublicradio.org/about.html#so_you_want_to_record_a_podcast">record</a> a response show instead.
</p>
<p>
<strong>Note to Spammers</strong><br />
All comments are moderated. All links are checked by humans. We strip out all html. Feel free to <a href="https://hackerpublicradio.org/about.html#so_you_want_to_record_a_podcast">record</a> a show about yourself, or your industry, or any other topic we may find interesting. <em>We also check shows for spam :)</em>.
</p>
<form method="POST" action="https://hub.hackerpublicradio.org/comment_confirm.php">
<fieldset>
<legend>Provide feedback</legend>
<table>
<tr>
<td>Your Name/Handle:</td>
<td><input required type="text" name="comment_author_name" size="40" maxlength="40" placeholder="Enter your name" ></td>
</tr>
<tr>
<td>Title:</td>
<td><input required type="text" name="comment_title" size="50" maxlength="100" placeholder="What is your comment about?"></td>
</tr>
<tr>
<td>Comment:</td>
<td><textarea required name="comment_text" maxlength="2000" rows="10" cols="50" placeholder="Place the comment here."></textarea></td>
</tr>
<tr>
<td>Anti Spam Question:</td>
<td>
What does the letter <strong>P</strong> in <em>HPR</em> stand for? <br />
<input required type="text" name="anti_spam_question" size="50" maxlength="100" placeholder="Type out what the P in HPR stands for."></td>
</tr><!-- . -->
<tr>
<td>Are you a spammer?</td>
<td>
<input required checked="checked" type="radio" name="spammer" id="spammer_yes" value="Yes">
<label for="spammer_yes">Yes</label>
<input required type="radio" name="spammer" id="spammer_no" value="No">
<label for="spammer_no">No</label>
</td>
</tr>
<!-- . -->
<tr>
<td>What is the <strong>HOST_ID</strong> for the host of this show?</td>
<td>
<input required type="text" name="hostid" size="20" maxlength="5" placeholder="Type the host number"></td>
<td>
<!-- . -->
<tr>
<td>What does HPR mean to you?</td>
<td><textarea required name="justification" maxlength="200" rows="4" cols="50" placeholder="Convince us you are part of the community."></textarea></td>
</tr> <tr><td>
<input type="hidden" name="eps_id" value="[% episode %]">
</td></tr>
</table>
<input type="submit" value="Next">
</fieldset>
</form>
</main>
<footer id="footer_page"> </article>
<h1 class="thick_bar"><span style="padding-left: 1em;">More Information...</span></h1>
<div id="more_info"> </main>
<nav class="column"> <footer role="contentinfo">
<h2>Ancestry</h2> <hr class="no-css">
<ul>
<li><a href="http://audio.textfiles.com/shows/radiofreekamerica/">Radio Freek America</a></li>
<li><a href="http://audio.textfiles.com/shows/binrev/">BinRev Radio</a></li>
<li><a href="http://audio.textfiles.com/shows/infonomicon/">Infonomicon</a></li>
<li><a href="http://audio.textfiles.com/shows/twat/">Today With a Techie</a></li>
</ul>
</nav>
<nav class="column">
<h2>Social</h2>
<ul>
<li><a href="https://hackerpublicradio.org/maillist" >Mailing list</a></li>
<li><a href="https://botsin.space/@hpr" >Mastodon</a></li>
<li><a href="https://matrix.to/#/#hpr:matrix.org" >Matrix</a></li>
<li><a href="mumble://chatter.skyehaven.net:64738/Hacker%20Public%20Radio?version=1.2.0" >Mumble</a></li>
<li><a href="https://web.libera.chat/gamja/?channels=oggcastplanet" target="_blank">#oggcastplanet</a></li>
<li><a href="https://t.me/+6fEhQrf5IEc4ZGU8">Telegram</a></li>
<li><a href="https://twitter.com/HPR">Twitter.com</a></li>
<li><a href="https://www.facebook.com/HenryPartickReilly" target="_blank">Facebook</a></li>
<li><a href="https://www.linkedin.com/company/hackerpublicradio/" target="_blank">Linked-In</a></li>
</ul>
</nav>
<nav class="column">
<h2>Unaffiliates</h2>
<ul>
<li><a href="https://archive.org/details/hackerpublicradio">Archive.org</a></li>
<li><a href="https://music.amazon.fr/podcasts/9d9e6211-ff78-4501-93b6-6a9e560c4dbd/hacker-public-radio">Amazon Music</a></li>
<li><a href="https://podcasts.google.com/feed/aHR0cDovL2hhY2tlcnB1YmxpY3JhZGlvLm9yZy9ocHJfcnNzLnBocA">Google Podcasts</a></li>
<li><a href="https://www.iheart.com/podcast/256-hacker-public-radio-30994513/" target="_blank">iHeart Radio</a></li>
<li><a href="https://podcasts.apple.com/us/podcast/hacker-public-radio/id281699640">iTunes</a></li>
<li><a href="https://www.listennotes.com/de/podcasts/hacker-public-radio-hacker-public-radio-mNH-jsI7LcJ/">Listen Notes</a></li>
<li><a href="https://www.mixcloud.com/hackerpublicradio/">MixCloud</a></li>
<li><a href="https://player.fm/series/hacker-public-radio">PlayerFM</a></li>
<li><a href="https://www.podchaser.com/podcasts/hacker-public-radio-76781">Podchaser</a></li>
<li><a href="https://nl.radio.net/podcast/hacker-public-radio">Radio.net</a></li>
<li><a href="https://open.spotify.com/show/7e2hYcnHj9vKgUzsIOf4r3">Spotify</a></li>
<li><a href="https://toppodcast.com/podcast_feeds/hacker-public-radio/">Top Podcasts</a></li>
</ul>
</nav>
<nav class="column">
<h2>Commons</h2>
<ul>
<li><a href="https://freeculturepodcasts.org/">Free Culture Podcasts</a></li>
<li><a href="https://archive.org/details/hackerpublicradio">archive.org</a></li>
<li><a href="https://repo.anhonesthost.net/explore/repos" >HPR Source Code</a></li>
<li><a href="https://cchits.net/">cchits.net</a></li>
<li><a href="https://freesound.org/">freesound.org</a></li>
<li><a href="https://librivox.org/">librivox.org</a></li>
<li><a href="https://openclipart.org/">openclipart.org</a></li>
<li><a href="https://openfontlibrary.org/">openfontlibrary.org</a></li>
<li><a href="https://www.openrouteservice.org/">openrouteservice.org/</a></li>
<li><a href="https://pixabay.com/">pixabay.com/</a></li>
</ul>
</nav>
<nav class="column">
<h2>Patrons</h2>
<ul>
<li><a href="https://anhonesthost.com/hosting/shared-hosting">AnHonestHost.com</a></li>
<li><a href="https://archive.org/donate/">Archive.org</a></li>
<li><a href="https://rsync.net/">rsync.net</a></li>
</ul>
</nav>
</div><!-- more_info -->
<h1 class="thick_bar"><span style="padding-left: 1em;">Copyright Information</span></h1>
<div id="copyright"> <div id="copyright">
<p> <span>Unless otherwise stated, our shows are released under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">
Unless otherwise stated, our shows are released under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"> Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</a> license.</span>
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</a> license.</p> <span>
<p>
The <span property="dct:title">HPR Website Design</span> is released to the <a rel="license" href="https://creativecommons.org/publicdomain/mark/1.0/">Public Domain</a>. The <span property="dct:title">HPR Website Design</span> is released to the <a rel="license" href="https://creativecommons.org/publicdomain/mark/1.0/">Public Domain</a>.
</p> </span>
<hr /> </div>
</div><!-- copyright -->
<hr />
</footer> </footer>
</div> </body>
<!-- shadow --> </html>
[%# [%#
vim: syntax=html:ts=8:sw=4:ai:et:tw=78:fo=tcqn:fdm=marker:com+=fb\:- vim: syntax=html:ts=8:sw=4:ai:et:tw=78:fo=tcqn:fdm=marker:com+=fb\:-
-%] -%]

View File

@@ -48,13 +48,6 @@ function echo_debug() {
fi fi
} }
#################################################
# Display Information message
function abs_diff() {
echo $(($1 >= $2 ? $1 - $2 : $2 - $1))
}
################################################# #################################################
# Display Help # Display Help
@@ -63,6 +56,13 @@ function display_help_and_exit() {
exit 1 exit 1
} }
#################################################
# Calculate difference
function abs_diff() {
echo $(($1 >= $2 ? $1 - $2 : $2 - $1))
}
################################################# #################################################
# Program Checks # Program Checks
@@ -174,7 +174,7 @@ function check_variable_is_correct() {
fi fi
if [ "$( file --brief --mime-type "${assets_csv}" | grep --count 'text/csv' )" -ne "1" ] if [ "$( file --brief --mime-type "${assets_csv}" | grep --count 'text/csv' )" -ne "1" ]
then then
echo_error "The \"assets_csv\" variable has not a valid \"text/csv\" mime type." echo_error "The \"assets_csv\" file has not a valid \"text/csv\" mime type."
fi fi
if [ "$( wc --lines ${assets_csv} | awk '{print $1}' )" -le "1" ] if [ "$( wc --lines ${assets_csv} | awk '{print $1}' )" -le "1" ]
then then
@@ -1657,7 +1657,7 @@ function generate_show_transcript() {
cat "${episode_srt}" | while read this_line cat "${episode_srt}" | while read this_line
do do
if [ "$( echo "${this_line}" | grep -c --perl-regexp '^[0-9]+$' )" -eq "1" ] if [ "$( echo "${this_line}" | grep --count --perl-regexp '^[0-9]+$' )" -eq "1" ]
then then
echo "${count}" echo "${count}"
count=$((count+1)) count=$((count+1))
@@ -1899,7 +1899,7 @@ function register_assets() {
echo '"episode_id","filename","extension","size", "sha1sum", "mime_type", "file_type"' | tee "${assets_csv}" echo '"episode_id","filename","extension","size", "sha1sum", "mime_type", "file_type"' | tee "${assets_csv}"
find "${working_dir}/" -maxdepth 1 -type f \( -iname "hpr${ep_num}.*" -or -iname "hpr${ep_num}_image_*.*" \) | \ find "${working_dir}/" -maxdepth 1 -type f \( -iname "hpr${ep_num}.*" -or -iname "hpr${ep_num}_image_*.*" -or -iname "hpr${ep_num}_extra_*.*" \) | \
while read this_asset_filename while read this_asset_filename
do do
this_asset_filename="$( basename "${this_asset_filename}" )" this_asset_filename="$( basename "${this_asset_filename}" )"