Compare commits
84 Commits
8e6c44c46c
...
I164_check
Author | SHA1 | Date | |
---|---|---|---|
0f57b99fbe
|
|||
48b3c51bb3
|
|||
4e9f1457d5
|
|||
4ae854f5e1
|
|||
af810c88bc
|
|||
|
92dce90753 | ||
|
65e4e1af5e | ||
|
b5384408db | ||
|
1a84becd8d | ||
|
d74c23bace | ||
|
f1817e6820 | ||
|
493bae282b | ||
|
dbc557d4c5 | ||
|
2099f0e130 | ||
|
29c9c827a4 | ||
|
c72c813b02 | ||
|
966a94647d | ||
e090bf8498 | |||
|
4d1d4c8c1d | ||
99aee89698 | |||
|
f6f2c01202 | ||
797039d182 | |||
|
93f22fb266 | ||
|
eb0b752841 | ||
4c19b56643 | |||
9766ec2c36 | |||
392f9ba9e5 | |||
41979786eb | |||
|
a61f2a5222 | ||
|
ccba560ee3 | ||
|
a2c69ec898 | ||
|
1382fe5e2a | ||
54ba2dc318 | |||
c2c2cb0cc2 | |||
|
5ec9fd21e9 | ||
|
d053ec253a | ||
|
db6c0bedaa | ||
0c000b17b9 | |||
1853af5521 | |||
f4530a3f48 | |||
|
5b2b2ce6d0 | ||
6d8bdaa7a9 | |||
2713664f86 | |||
eacd1e8425 | |||
|
138c1e2d2b | ||
|
b69cb913ea | ||
|
467a14a72a | ||
|
69dcb66d05 | ||
|
1e451e156d | ||
|
7c98273236 | ||
|
fcf624dc22 | ||
|
fc096c6fa6 | ||
|
d34064d787 | ||
|
4287028e25 | ||
|
67f28d43e3 | ||
|
dc36d9de86 | ||
|
96642bc69f | ||
|
f432954891 | ||
|
3f32a39301 | ||
|
7d8af97f7d | ||
130f603748 | |||
|
eba235c503 | ||
|
8bcf6bd0e8 | ||
|
15cd9018b0 | ||
|
e5b5aac104 | ||
|
0ef92840c8 | ||
|
79a788bda9 | ||
|
2e151ebae9 | ||
|
097b50b30b | ||
|
8325b2c0d1 | ||
|
a49bd6b08d | ||
|
c8135d811d | ||
|
dab80f1772 | ||
|
3ccd6101ee | ||
|
51d328203b | ||
|
366729a827 | ||
|
faac8c202e | ||
|
3cf2f3a8e1 | ||
|
83bb04f25c | ||
|
383ef45bb7 | ||
|
68c5e91552 | ||
|
35fa97e120 | ||
|
47a7493ef2 | ||
|
b4448caf16 |
@@ -41,8 +41,9 @@ apt install libconfig-std-perl \
|
||||
## Using CPAN to install the modules
|
||||
|
||||
A cross platform method to install the needed modules is the Perl CPAN application.
|
||||
Make sure both the [make](https://www.gnu.org/software/make/manual/make.html)
|
||||
command and the [cpan](https://perldoc.perl.org/CPAN) command are available.
|
||||
Make sure that the [gcc](https://www.gnu.org/software/gcc/),
|
||||
[make](https://www.gnu.org/software/make/manual/make.html),
|
||||
and [cpan](https://perldoc.perl.org/CPAN) commands are available.
|
||||
Install them using the operating system's package manager, or from source.
|
||||
|
||||
Run commands:
|
||||
@@ -51,9 +52,21 @@ Run commands:
|
||||
cpan Config::Std
|
||||
cpan Template
|
||||
cpan Template::Plugin::DBI
|
||||
cpan Template::Plugin::HTML::Strip
|
||||
cpan DBD::SQLite
|
||||
cpan Date::Calc
|
||||
cpan Tie::DBI
|
||||
cpan Text:CSV_XS
|
||||
```
|
||||
|
||||
## Testing for Perl module dependencies
|
||||
|
||||
A bash script is included in the utils directory that will list the Perl modules used by the site-generator and report whether the modules are installed on the current OS.
|
||||
|
||||
It can be run from any directory. To run from the utils directory:
|
||||
|
||||
```
|
||||
./check-dependencies.sh
|
||||
```
|
||||
|
||||
# Create the HPR database
|
||||
|
36
README.md
36
README.md
@@ -4,16 +4,16 @@ Static web page generator for the Hacker Public Radio website.
|
||||
## Installation
|
||||
* Clone or download this repository
|
||||
* With SQLite
|
||||
* Create the sqlite3 database from the hpr.sql MySQL dump file available on
|
||||
hackerpublicradio.org. The default name for the database file is "hpr.db"
|
||||
and should be located in the root of the project directory. The name and
|
||||
* Create the sqlite3 database from the hpr.sql MySQL dump file available on
|
||||
hackerpublicradio.org. The default name for the database file is "hpr.db"
|
||||
and should be located in the root of the project directory. The name and
|
||||
location can be set in the site.cfg file.
|
||||
* An "update-hpr.sh" helper script is available in the utils directory. This
|
||||
script will download the hpr.sql file, convert it to the SQLite hpr.db file,
|
||||
and regenerate the website using the site-generator.
|
||||
* An "update-hpr.sh" helper script is available in the utils directory. This
|
||||
script will download the hpr.sql file, convert it to the SQLite hpr.db file,
|
||||
and regenerate the website using the site-generator.
|
||||
1. `cd` into the root of the project directory
|
||||
2. Run `./utils/update-hpr.sh`
|
||||
* SQLite v3.8.3 or greater is recommended. CTE WITH clauses are used in some template queries. Must convert WITH
|
||||
* SQLite v3.8.3 or greater is recommended. CTE WITH clauses are used in some template queries. Must convert WITH
|
||||
clauses to sub-queries when using earlier versions of SQLite.
|
||||
* With MySQL
|
||||
* Create database hpr_hpr in the MySQL server from HPR dump file.
|
||||
@@ -25,24 +25,30 @@ Static web page generator for the Hacker Public Radio website.
|
||||
- ``GRANT SELECT ON hpr_hpr.* TO 'hpr-generator'@'localhost';``
|
||||
- ``GRANT EXECUTE ON `hpr_hpr`.* TO 'hpr-generator'@'localhost';``
|
||||
* Install the needed Perl modules using preferred method (distribution packages, CPAN, etc.)
|
||||
* GetOpt
|
||||
* Getopt::Long
|
||||
* Pod::Usage
|
||||
* Config::Std
|
||||
* Template
|
||||
* Template::Plugin::File
|
||||
* Template::Plugin::DBI
|
||||
* Template::Plugin::Date
|
||||
* Template::Plugin::HTML::Strip
|
||||
* DBI
|
||||
* Tie::DBI
|
||||
* DBD::SQLite or DBD:mysql
|
||||
* DBD::SQLite or DBD::mysql
|
||||
* Date::Calc
|
||||
* See the Getting Started tutorial (GETTING_STARTED.md) for more details on
|
||||
* Text::CSV_XS
|
||||
* HTML::Entities
|
||||
|
||||
* See the [Getting Started](GETTING_STARTED.md) tutorial for more details on
|
||||
installing the HPR generator.
|
||||
|
||||
## Usage
|
||||
Generate two specific pages:
|
||||
`site-generator index about`
|
||||
`site-generator index about`
|
||||
|
||||
Generate the whole site:
|
||||
`site-generator --all`
|
||||
`site-generator --all`
|
||||
|
||||
Generate pages based on the same template:
|
||||
`site-generator correspondent=1,3,5..10`
|
||||
@@ -65,7 +71,9 @@ To make a suggestion, please [submit an Issue](https://repo.anhonesthost.net/rho
|
||||
and add the label "**Feature Request**".
|
||||
|
||||
## Authors and acknowledgment
|
||||
* Roan "Rho`n" Horning
|
||||
* Roan "Rho`n" Horning
|
||||
* Dave Morriss
|
||||
* gordons
|
||||
* Ken Fallon
|
||||
* norrist
|
||||
* norrist
|
||||
|
||||
|
BIN
public_html/images/hosts/149.png
Normal file
BIN
public_html/images/hosts/149.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.1 KiB |
BIN
public_html/images/hosts/421.png
Normal file
BIN
public_html/images/hosts/421.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
BIN
public_html/images/hosts/425.png
Normal file
BIN
public_html/images/hosts/425.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
public_html/images/hosts/433.png
Normal file
BIN
public_html/images/hosts/433.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.0 KiB |
@@ -67,18 +67,21 @@ Perl Template Toolkit.
|
||||
- GRANT EXECUTE ON `hpr_hpr`.* TO 'hpr-generator'@'localhost';
|
||||
|
||||
Install the needed Perl modules using preferred method (distribution packages, CPAN, etc.)
|
||||
* GetOpt
|
||||
* Pod::Usage
|
||||
* Config::Std
|
||||
* Template
|
||||
* Template::Plugin::File
|
||||
* Template::Plugin::DBI
|
||||
* Template::Plugin::HTML::Strip
|
||||
* DBI
|
||||
* Tie::DBI
|
||||
* DBD::SQLite or DBD:mysql
|
||||
* DBI
|
||||
* Data::Dumper
|
||||
* Date::Calc
|
||||
* GetOpt::Long
|
||||
* HTML::Entities
|
||||
* Pod::Usage
|
||||
* Template
|
||||
* Template::Plugin::DBI
|
||||
* Template::Plugin::Date
|
||||
* Template::Plugin::File
|
||||
* Template::Plugin::HTML::Strip
|
||||
* Text::CSV_XS
|
||||
* Tie::DBI
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -115,9 +118,16 @@ use Getopt::Long qw(:config auto_help);
|
||||
use Pod::Usage;
|
||||
use Config::Std;
|
||||
use Text::CSV_XS;
|
||||
use HTML::Entities qw(encode_entities_numeric);
|
||||
#use HTML::Entities qw(encode_entities_numeric);
|
||||
use HTML::Entities qw(encode_entities);
|
||||
use Date::Calc;
|
||||
use DBI;
|
||||
use Tie::DBI;
|
||||
use Template;
|
||||
use Template::Plugin::Date;
|
||||
use Template::Plugin::DBI;
|
||||
use Template::Plugin::HTML::Strip;
|
||||
|
||||
use Data::Dumper;
|
||||
|
||||
exit main();
|
||||
@@ -225,7 +235,7 @@ sub main {
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub get_template_html (\%@) {
|
||||
sub get_template_html {
|
||||
# For an HTML based Template file, define the
|
||||
# template start and end tags to also function as
|
||||
# HTML comments to make the template file valid HTML.
|
||||
@@ -418,7 +428,8 @@ sub parse_csv {
|
||||
sub xml_entity {
|
||||
my ($text) = @_;
|
||||
|
||||
encode_entities_numeric( $text );
|
||||
# encode_entities_numeric( $text );
|
||||
encode_entities( $text );
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
1
site.cfg
1
site.cfg
@@ -29,6 +29,7 @@ content: page.tpl.html
|
||||
#baseurl: OPTIONAL [i.e. file://<full path to local website directory>]
|
||||
#baseurl: file:///home/roan/Development/hpr/website/hpr_generator/public_html/
|
||||
baseurl: https://hackerpublicradio.org/
|
||||
http_baseurl: http://hackerpublicradio.org/
|
||||
hub_baseurl: https://hub.hackerpublicradio.org/
|
||||
media_baseurl: https://archive.org/download/hpr$eps_id/
|
||||
generator_name: The HPR Robot
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@
|
||||
<!--% query_hpr_show_count = DBI.prepare('
|
||||
SELECT id
|
||||
FROM eps
|
||||
WHERE eps.hostid = ?
|
||||
WHERE eps.hostid = ?
|
||||
')
|
||||
%-->
|
||||
<!--% results_hpr_shows = DBI.prepare(query_hpr_shows)
|
||||
@@ -25,18 +25,18 @@
|
||||
')
|
||||
%-->
|
||||
<!--% query_twat_shows = DBI.prepare('
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.notes,
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.profile,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM twat_eps AS eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
WHERE hosts.hostid = ?
|
||||
ORDER BY eps.id DESC
|
||||
@@ -58,6 +58,7 @@
|
||||
<p><!--% get_avatar(this_host.hostid, this_host.host) %--><br>
|
||||
<label>Host ID</label>: <!--% this_host.hostid %--><br><br>
|
||||
<label>email:</label> <u><!--% this_host.email %--></u><br>
|
||||
<label>profile:</label> <!--% this_host.profile %--><br><br>
|
||||
<label>episodes:</label> <strong><!--% hpr_show_count + twat_show_count %--></strong>
|
||||
</p>
|
||||
<!--% FOREACH hpr_show IN hpr_shows; %-->
|
||||
|
@@ -18,9 +18,10 @@
|
||||
</p>
|
||||
<p><!--% show_avatar(episode.hostid, episode.host) %-->
|
||||
Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(episode.hostid) %-->.html"><!--% episode.host %--></a> on <span><!--% episode.date %--></span> is flagged as <span><!--% display_explicit(episode.explicit) %--></span> and is released under a <span><!--% episode.license %--> license</span>. <br>
|
||||
<!--% display_tags(episode.tags) %-->
|
||||
<!--% display_tags(episode.tags) %-->
|
||||
|
||||
<label>Comments: </label><!--% display_comments_tally(episode.id, episode.eps_tally) %--> <br>
|
||||
The show is available on the Internet Archive at: <a href="https://archive.org/details/hpr<!--% zero_pad_left(episode.id) %-->">https://archive.org/details/hpr<!--% zero_pad_left(episode.id) %--></a>
|
||||
<!--% listen_now(episode, "hpr", baseurl, media_baseurl) %-->
|
||||
</p>
|
||||
<h3><!--% show_series(episode.series, episode.seriesid, "Part of the series") %--></h3>
|
||||
@@ -53,7 +54,7 @@ Subscribe to the comments <a href="<!--% absolute_path(baseurl) %-->comments.rss
|
||||
<!--% comment_index = 1 %-->
|
||||
<!--% comments_result = query_comments.execute(id) %-->
|
||||
<!--% FOREACH comment IN comments_result %-->
|
||||
<h5 id="comment_<!--% comment.id %-->">Comment #<!--% comment_index %--> posted on <!--% comment.comment_timestamp %--> by <!--% comment.comment_author_name %--></h5>
|
||||
<h5 id="comment_<!--% comment.id %-->"><a href="/eps/hpr<!--% zero_pad_left(episode.id) %-->/index.html#comment_<!--% comment.id %-->">Comment #<!--% comment_index %--></a> posted on <!--% comment.comment_timestamp %--> by <!--% comment.comment_author_name %--></h5>
|
||||
<h4><!--% comment.comment_title %--></h4>
|
||||
<!--% comment.comment_text FILTER html_para %-->
|
||||
<!--% comment_index = comment_index + 1 %-->
|
||||
@@ -109,9 +110,18 @@ Subscribe to the comments <a href="<!--% absolute_path(baseurl) %-->comments.rss
|
||||
</tr>
|
||||
<!-- . -->
|
||||
<tr>
|
||||
<td>Who hosted this show?</td>
|
||||
<td>Who is the <strong>host</strong> of this show?</td>
|
||||
<td>
|
||||
<input required type="text" name="hostid" size="20" maxlength="5" placeholder="Type the host number"></td>
|
||||
<select required name="hostid" id="hostid">
|
||||
<option value="Spammer" selected="selected">Spammer</option>
|
||||
<option value="Spammer">Linus Torvalds</option>
|
||||
<option value="Spammer">Marie Curie</option>
|
||||
<option value="<!--% episode.hostid %-->"><!--% episode.host %--></option>
|
||||
<option value="Spammer">Alan Turing</option>
|
||||
<option value="Spammer">Terry Pratchett</option>
|
||||
<option value="Spammer">Yuri Gagarin</option>
|
||||
</select>
|
||||
<td>
|
||||
<td>
|
||||
<!-- . -->
|
||||
<tr>
|
||||
|
@@ -17,7 +17,7 @@
|
||||
<p>
|
||||
<!-- Creative Commons License -->
|
||||
<a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/2.5/"><img alt="Creative Commons License" border="0" src="https://creativecommons.org/images/public/somerights20.png" width="88" height="31" /></a><br>The following work is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/2.5/">Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License</a>.</p>
|
||||
<p>T.W.A.T. Radio was brought to you by <a href="https://en.wikipedia.org/wiki/Infonomicon">The Infonomicon Computer Club</a></p>
|
||||
<p>Today With a Techie Radio was brought to you by <a href="https://en.wikipedia.org/wiki/Infonomicon">The Infonomicon Computer Club</a></p>
|
||||
<!--% FOREACH twat_episode IN DBI.query('
|
||||
SELECT
|
||||
eps.id,
|
||||
|
@@ -1,2 +1 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
|
||||
|
@@ -11,34 +11,36 @@
|
||||
<!--% img_re = '(?six)^(.*?)\<img ([^\>]+\>)(.+)$' %-->
|
||||
<!--% lazy_re = '(?i)loading="lazy"' %-->
|
||||
<!--% WHILE (matches = lines.match(img_re)) %-->
|
||||
<!--% img_tag = matches.1 %-->
|
||||
<!--% after_html = matches.2 %-->
|
||||
<!--% matches.0 %-->
|
||||
<!--% IF (img_tag.search(lazy_re)) %-->
|
||||
<!--% img_tag = matches.1 %-->
|
||||
<!--% after_html = matches.2 %-->
|
||||
<!--% matches.0 %-->
|
||||
<!--% IF (img_tag.search(lazy_re)) %-->
|
||||
<img <!--% img_tag %-->
|
||||
<!--% ELSE %-->
|
||||
<!--% ELSE %-->
|
||||
<img loading="lazy" <!--% img_tag %-->
|
||||
<!--% END %-->
|
||||
<!--% lines = after_html %-->
|
||||
<!--% END %-->
|
||||
<!--% lines = after_html %-->
|
||||
<!--% END %-->
|
||||
<!--% after_html %-->
|
||||
<!--% END %-->
|
||||
<hr>
|
||||
<article>
|
||||
<header>
|
||||
<h3>Welcome to HPR the Community Podcast</h3>
|
||||
<h3>Welcome to HPR, the Community Podcast</h3>
|
||||
</header>
|
||||
<!--% days_till_next_episode = 0 %-->
|
||||
<!--% USE DBI(constants.driver, constants.user, constants.password) %-->
|
||||
<!--% FOREACH next_available_episode_result IN DBI.query(query_next_available_episode)
|
||||
%-->
|
||||
<!--% USE date %-->
|
||||
<!--% calc = date.calc %-->
|
||||
<!--% days_till_next_episode = calc.Delta_Days(date.format(date.now, '%Y'),date.format(date.now, '%m'),date.format(date.now, '%d'),next_available_episode_result.last_year,next_available_episode_result.last_month,next_available_episode_result.last_day) %-->
|
||||
<!--% END %-->
|
||||
<!--% USE date %-->
|
||||
<!--% episodes = DBI.query(query_next_available_episode).get_all() %-->
|
||||
<!--% last_date = episodes.0.date.split('-') %-->
|
||||
<!--% offset = (calc.Day_of_Week(last_date.0,last_date.1,last_date.2) == 5 ? 3 : 1) %-->
|
||||
<!--% slot_date = calc.Add_Delta_Days(last_date.0,last_date.1,last_date.2,offset) %-->
|
||||
<!--% now = calc.Today() %-->
|
||||
<!--% days_till_next_episode = calc.Delta_Days(now.0,now.1,now.2,slot_date.0,slot_date.1,slot_date.2) %-->
|
||||
|
||||
<!--% delta = date.calc.N_Delta_YMD(2005,9,19, date.format(date.now, '%Y'),date.format(date.now, '%m'),date.format(date.now, '%d')) %-->
|
||||
<p>We started producing shows as <a href="<!--% absolute_path(baseurl) %-->eps/index.html#twat_episodes"><em>Today with a Techie</em></a> on 2005-09-19, <!--% delta.0 %--> years, <!--% delta.1 %--> months, <!--% delta.2 %--> days ago. our shows are produced by <a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">listeners</a> like you and can be on any <a href="<!--% absolute_path(baseurl) %-->eps/index.html">topic</a> that <strong>"are of interest to <a href="https://en.wikipedia.org/wiki/hacker_(hobbyist)">hackers</a>"</strong>. If you listen to HPR then please consider contributing one show a year. if you <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">record</a> your show now it could be <a href="<!--% hub_baseurl %-->calendar.php">released</a> in <strong><!--% days_till_next_episode %--></strong> days.</p>
|
||||
<p>We started producing shows as <a href="<!--% absolute_path(baseurl) %-->eps/index.html#twat_episodes"><em>Today with a Techie</em></a> on 2005-09-19, <!--% delta.0 %--> years, <!--% delta.1 %--> months, <!--% delta.2 %--> days ago. Our shows are produced by <a href="<!--% absolute_path(baseurl) %-->correspondents/index.html">listeners</a> like you and can be on any <a href="<!--% absolute_path(baseurl) %-->eps/index.html">topics</a> that <strong>"are of interest to <a href="https://en.wikipedia.org/wiki/hacker_(hobbyist)">hackers</a>"</strong>. If you listen to HPR then please consider contributing one show a year. If you <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">record</a> your show now it could be <a href="<!--% hub_baseurl %-->calendar.php">released</a> in <strong><!--% days_till_next_episode %--></strong> days.</p>
|
||||
</article>
|
||||
<!--% display_call_for_shows() %-->
|
||||
<hr>
|
||||
@@ -54,7 +56,7 @@
|
||||
<h3><!--% latest_episodes.summary%--></h3>
|
||||
<p class="meta"$><!--% show_avatar(latest_episodes.hostid, latest_episodes.host, host_cnt) %-->
|
||||
Hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(latest_episodes.hostid) %-->.html"><!--% latest_episodes.host %--></a> on <!--% latest_episodes.date %--> is flagged as <!--% display_explicit(latest_episodes.explicit) %--> and released under a <!--% latest_episodes.license %--> license. <br>
|
||||
<!--% display_tags(latest_episodes.tags) %-->
|
||||
<!--% display_tags(latest_episodes.tags) %-->
|
||||
<span><!--% show_series(latest_episodes.series, latest_episodes.seriesid) %--></span>
|
||||
<span><label>Comments: </label><!--% display_comments_tally(latest_episodes.id, latest_episodes.eps_tally) %--></span><br>
|
||||
<!--% listen_now(latest_episodes, "hpr", baseurl, media_baseurl) %-->
|
||||
@@ -72,7 +74,7 @@
|
||||
<hr>
|
||||
<h1>Previous five weeks</h1>
|
||||
</header>
|
||||
<!--% FOREACH last_5_weeks_episodes IN DBI.query(query_last_5_weeks_episodes)
|
||||
<!--% FOREACH last_5_weeks_episodes IN DBI.query(query_last_5_weeks_episodes)
|
||||
%-->
|
||||
<!--% show_summary(last_5_weeks_episodes) %-->
|
||||
<p class="listen-in"><!--% display_listen_in(last_5_weeks_episodes.id) %--></p>
|
||||
|
106
templates/content-recording.tpl.html
Normal file
106
templates/content-recording.tpl.html
Normal file
@@ -0,0 +1,106 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<h1>Recording a Podcast</h1>
|
||||
<p>
|
||||
On this page you will find information on how to record a podcast. Our golden rule is <strong>Any audio is better than no audio.</strong> so keep that in mind. Don't forget to <strong>introduce yourself</strong> in your show.
|
||||
</p>
|
||||
<!--
|
||||
<h2 id="callin_numbers">Recording with the telephone<a href="#">.</a></h2>
|
||||
<p>
|
||||
The quickest way to get started is to use our call in numbers to record a show over the phone. :
|
||||
</p>
|
||||
<ol>
|
||||
<li>If possible <a href="request_a_slot.php">request a slot</a> so that you can get the episode number for inclusion in the recording.</li>
|
||||
<li>Pick up a telephone and dial:
|
||||
<pre>
|
||||
USA: +1-470-222-4257 (HCKR)
|
||||
UK: +44-203-432-5879
|
||||
</pre>
|
||||
</li>
|
||||
<li>Listen to the introduction</li>
|
||||
<li><strong>Talk to us</strong>, and include your <strong>episode number</strong>, name and email address clearly.</li>
|
||||
<li>Press the <strong>#</strong> when you are finished and hang up.</li>
|
||||
</ol>
|
||||
<p>
|
||||
That's it. Your show will be automatically sent to us and we will take care of the rest. If you have not done so already then please <a href="request_a_slot.php">request a slot</a> for your show.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Don't forget to end by pressing the # sign.</strong> If you don't your show will be lost and that makes us sad.
|
||||
</p>
|
||||
<p>
|
||||
<em>(Thanks to K5tux for supplying the service and finux for the UK number)</em>
|
||||
</p>
|
||||
-->
|
||||
<h2 id="portable_media_player">Recording with a portable media player<a href="#portable_media_player">.</a></h2>
|
||||
<p>
|
||||
Many of today's <a href="http://wiki.xiph.org/PortablePlayers">portable media players</a> support recording audio out of the box. Search for "Voice Recorder", to see if there is an application for your smartphone. Whichever option you have close to hand, try and set the recording to the best quality format (<a href="http://en.wikipedia.org/wiki/WAV">WAV</a> or <a href="http://en.wikipedia.org/wiki/FLAC">FLAC</a>), and set everything else to the highest setting. It's always the goal to get the best quality audio but here at Hacker Public Radio we value content over quality and so long as it's audible we'll take it.
|
||||
</p>
|
||||
<p>
|
||||
Then just record your show, <a href="<!--% absolute_url(baseurl,'request_a_slot.html') %-->">request a slot</a>, and we'll do the rest.
|
||||
</p>
|
||||
|
||||
<h2 id="smart_phone">Recording with a portable media player<a href="#smart_phone">.</a></h2>
|
||||
<p>
|
||||
Some of our hosts recommend <a href="https://gitlab.com/axet/android-audio-recorder">Android Audio Recorder</a> on my android phone. It's available on <a href="https://f-droid.org/en/packages/com.github.axet.audiorecorder/">F-Droid</a> and <a href="https://play.google.com/store/apps/details?id=com.github.axet.audiorecorder">Google Play</a>. These are the recommended settings:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Recording Source - Unprocessed</li>
|
||||
<li>Sample Rate - 44.1 kHz</li>
|
||||
<li>Encoding - .flac</li>
|
||||
<li>Audio Channels - Mono</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="editing">Recording/Editing using your Computer<a href="#editing">.</a></h2>
|
||||
<p>
|
||||
The majority of podcasters use <a href="http://audacity.sourceforge.net/download/">Audacity</a>. First set the Project Rate to 44100Hz, then you can either record your show in Audacity itself or import the file you recorded earlier and edit it as you wish.
|
||||
</p>
|
||||
<p>
|
||||
<img width="600" src="<!--% absolute_url(baseurl,'images/contribute-audacity-record.png') %-->" alt="Audacity Can Record" title="Audacity Screenshot of Recording" >
|
||||
</p>
|
||||
<blockquote>Audacity is a free, easy-to-use and multilingual audio editor and recorder for Windows, Mac OS X, GNU/Linux and other operating systems.</blockquote>
|
||||
<iframe width="640" height="390" src="//www.youtube.com/embed/ss8CyTwBOPY" style="border: none"></iframe>
|
||||
<p>
|
||||
When you have finished editing your podcast you can export it.
|
||||
</p>
|
||||
<ol>
|
||||
<li>Confirm that the Project Rate is set to 44100 Hz (bottom left).</li>
|
||||
<li><em>File -> Export</em> and select <strong>FLAC File</strong>.</li>
|
||||
<li>Click <em>Options...</em> to reveal FLAC Export Setup.</li>
|
||||
<li>Set <em>Level</em> to <strong>8 (best)</strong>.</li>
|
||||
<li>Set <em>Bit depth</em> to <strong>24</strong>.</li>
|
||||
</ol>
|
||||
<p>
|
||||
<img width="600" src="<!--% absolute_url(baseurl,'images/contribute-audacity-export.png') %-->" alt="Audacity Export Settings" title="Audacity Screenshot of an Export" >
|
||||
</p>
|
||||
|
||||
<h2 id="phone_interviews">Recording Interviews with the Phone<a href="#phone_interviews">.</a></h2>
|
||||
<p>
|
||||
If you want to record a one-to-one interview with someone then you can use <a href="skype.com">Skype</a> in conjunction with <a href="http://atdot.ch/scr/">Skype Call Recorder</a>. If everyone is using skype then it won't cost you anything otherwise you will need to pay for SkypeOut service. Although the quality is usually terrible, you could also put your phone on hands free and record with a <a href="http://wiki.xiph.org/PortablePlayers">portable media player</a>.
|
||||
</p>
|
||||
|
||||
<h2 id="round_table">Recording round table discussions<a href="#round_table">.</a></h2>
|
||||
<p>
|
||||
If you would like to record with multiple participants then you can use <a href="http://www.mumble.com/">Mumble</a>. Connect to <strong>chatter.skyehaven.net</strong> Port: <strong>64738 </strong>.<br />
|
||||
Walk through the audio wizard and then pop into the <strong>Hacker Public Radio</strong> room. Once you are ready press the <strong>recording</strong> button, select <em>multichannel</em> and then <em>start</em>. That will record multiple tracks, one for each participant which you can edit and then submit.
|
||||
<br />
|
||||
Kwisher made a <a href="<!--% absolute_url(baseurl,'Mumble-How-To.pdf') %-->">Mumble tutorial</a> which you might find useful and Delwin has produced a number of short <a href="<!--% absolute_url(baseurl,'correspondents/0228.html') %-->">shows</a> on how to configure the audio quality.
|
||||
</p>
|
||||
<p>
|
||||
<img width="600" src="<!--% absolute_url(baseurl,'images/contribute-mumble-record.png') %-->" alt="Audacity Can Record" title="Audacity Screenshot of Recording" >
|
||||
</p>
|
||||
|
||||
<h2 id="background_music">Avoid Bedding/background music<a href="#background_music">.</a></h2>
|
||||
<p>
|
||||
You may include backing music but it's best if you don't. Most long time podcast listeners speed up their shows, as this allows them to cram more shows into a day. Having bedding music makes it more difficult to understand, and prevents tools like <em>truncate silence</em> from working correctly.<br/>
|
||||
Others will convert shows to mono to listen in one ear leaving the other free to carry out their other chores. Still more slow the shows down so that they can improve their English. Others are hard of hearing and backing music makes it difficult to understand the text.
|
||||
</p>
|
||||
|
||||
<h2 id="encoding">We mix down to Mono<a href="#encoding">.</a></h2>
|
||||
<p>
|
||||
We will by default mix down your show to one channel mono and we will <a href="https://gitorious.org/hpr-scheduling-system/hpr-scheduling-system/source/2d526e000d31e79afa3d863ea8659503e2074267:transcoding/hprtranscode">transcode</a> to MP3, ogg and spx formats. If you want to control this in more detail then please email admin at Hacker Public Radio for more information.
|
||||
</p>
|
||||
|
||||
<h2 id="no_metadata">No need to add Metadata to the file<a href="#">.</a></h2>
|
||||
<p>
|
||||
There is no need to add any information to the file as that will be inserted based on the information you fill in when you upload the show.
|
||||
</p>
|
139
templates/content-request_a_slot.tpl.html
Normal file
139
templates/content-request_a_slot.tpl.html
Normal file
@@ -0,0 +1,139 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<h1 id="requesting_slot">Picking a slot for your show</h1>
|
||||
<p>
|
||||
Any host can select any free slot a up to year in advance, by recording their show and uploading it to the desired slot. In exceptional circumstances it may be necessary to reserve a slot while not having the audio available, but this must be approved by the <a href="<!--% absolute_url(baseurl,'/maillist') %-->">HPR mailing list</a> in advance. Be sure to allow as much time as possible, and include a reason why you feel it is necessary to reserve the slot.
|
||||
</p>
|
||||
<p>
|
||||
This is intended only for exceptional circumstances, such as a scheduled interview where we would like the audio to be released as soon after the event as possible, or to cover an important topical situation that has occurred. Due to the extended time now needed to post shows to external sites, the extra work this entails and the disruptive effect of reservations, we will no longer be allowing them except in very rare cases of the type mentioned above. [<a href="https://lists.hackerpublicradio.com/pipermail/hpr/2018-February/003482.html">?</a>]
|
||||
</p>
|
||||
<p>
|
||||
You can post your show by going to the <a href="<!--% hub_baseurl %-->calendar.php">Calendar</a> page. Once you have selected a date you will be redirected to the <a href="<!--% absolute_url(baseurl,'request.html') %-->">request page</a>, where you will be asked to select your show and email address. We will send a link to where you can upload your show to this address and therefore it must be a valid working address that you can access quickly. We intend to use <a href="https://www.gnupg.org/">GPG</a> to speed up the validation of hosts, so you may wish to use an email address that has an associated public key available on public key servers.
|
||||
</p>
|
||||
<p>
|
||||
The audio of your show will not be moderated, however <em>the information provided in the upload form <strong>may be moderated</strong></em>. All publicly facing material is managed by the HPR Community as a whole, and not just the host providing the show. The show <a href="<!--% absolute_url(baseurl,'eps/hpr2210/index.html') %-->">hpr2210 :: On Freedom of Speech and Censorship</a> describes the agreed approach to this topic.
|
||||
</p>
|
||||
<p><strong>Note:</strong> This email address will be published on the HPR website and will be given out in the feeds, so please use a <strong>public email</strong> address for this purpose. Where we publish it we pad it with dot nospam at-sign nospam dot. <br />
|
||||
i.e. <em>hpr@example.com</em> becomes <em>hpr.nospam@nospam.example.com</em>. If you do not want to have your email exposed, please contact the admin@hpr team to arrange a alias.
|
||||
</p>
|
||||
<p>
|
||||
Once you press <em>next</em>, an email will be sent to your email address pointing to where you can upload the show. You need to <em>open</em> the link within <strong>15 minutes</strong> or the temporary lock will be released. Once you open the link, you can fill in the information at your leisure. The upload form works on the assumption you will be posting one show at a time, from the same IP address. Once you have pressed submit you will not be able to edit any of the information.
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="adding_the_episode">Adding the Episode</h2>
|
||||
<p>
|
||||
The unique link sent by email will allow you to manage both the episode and information about yourself that is displayed on HPR. The following information will be requested:
|
||||
</p>
|
||||
<h2 id="personal_information">Personal Information</h2>
|
||||
<p>
|
||||
Remember <em>All information will be displayed publicly</em>. The only exception is that your email address will be sent in the feed with some anti-spam additions.<br />
|
||||
For example <em>hpr@example.com</em> will become <em>hpr.nospam@nospam.example.com</em>
|
||||
</p>
|
||||
<ul>
|
||||
<li id="email"><strong>email:</strong> <em>already populated</em><br />
|
||||
See notes <a href="#requesting_slot">above</a><br />
|
||||
</li>
|
||||
<li id="image"><strong>image:</strong> <em>Optional</em><br />
|
||||
If you have associated a <a href="http://en.gravatar.com/">Gravatar</a> image with an email address, then it will be displayed here. Otherwise you can upload a 80x80 image .</li>
|
||||
<li id="Name_Handle"><strong>Name/Handle:</strong> <em>Mandatory</em><br />
|
||||
It should be the name you wish to be known as on HPR. It can be your real name, an Internet handle or both.</li>
|
||||
<li id="Default_license"><strong>Your Default license:</strong> <em>Mandatory</em><br />
|
||||
This field tells us what your work is normally licensed under. All our shows are now released under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</a> license, which means that while you continue to retain the copyright to your show you are allowing us (and everyone else) to use it provided we give you attribution and that we release it under the same license. Click the <a href="https://creativecommons.org/licenses/by-sa/4.0/">link</a> for more information.</li>
|
||||
<li id="Profile"><strong>Profile:</strong> <em>Optional</em><br />
|
||||
Enter some text about yourself with links to your blog or other online presence.</li>
|
||||
</ul>
|
||||
<p>
|
||||
Your profile information is used on the website, in the RSS feeds, and on social media sites. You can change your profile information at any time, by submitting another show.
|
||||
</p>
|
||||
<h2 id="episode_information">Episode Information</h2>
|
||||
<ul>
|
||||
<li id="Title"><strong>Title:</strong> <em>Mandatory</em><br />
|
||||
This will be a short descriptive title and will be used everywhere to identify your show. Any valid UTF-8 character is acceptable, but keep the length short and clear.</li>
|
||||
<li id="Short_Summary"><strong>Summary:</strong> <em>Mandatory</em><br />
|
||||
This is a short 100 character summary of what your show is about. Please fill this out as it is used once the show has gone off the main page, on the mobile site, on printed brochures, on text to speech announcements, on twitter, mastodon etc.</li>
|
||||
<li id="Theme"><strong>Theme:</strong> <em>Automatic</em><br />
|
||||
The <a href="<!--% absolute_url(baseurl,'theme.html#intro') %-->">Intro</a>, and the <a href="<!--% absolute_url(baseurl,'theme.html#outro') %-->">Outro</a> will be added automatically. Please do not add it.
|
||||
</li>
|
||||
<li id="Explicit"><strong>Explicit:</strong> <em>Mandatory</em><br />
|
||||
See <a href="http://www.apple.com/uk/itunes/podcasts/specs.html#submitting">iTunes</a> for more information.</li>
|
||||
<li id="License"><strong>License:</strong> <em>Mandatory</em><br />
|
||||
All our shows are now released under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</a> license, which means that while you continue to retain the copyright to your show you are allowing us (and everyone else) to use it provided we give you attribution and that we release it under the same license. Click the <a href="https://creativecommons.org/licenses/by-sa/4.0/">link</a> for more information.</li>
|
||||
<li id="show_notes"><strong>show notes:</strong> <em>Mandatory</em><br />
|
||||
It is important to provide good show notes because:
|
||||
<ul>
|
||||
<li><strong>They provide the listeners with more information on the topic.</strong><br />
|
||||
You have taken the time to record a show on a topic, so many people will want to find out more on the subject, therefore you should include links to give more information. It is not enough to just give it in the show itself as people may be listening while away from the Internet, and they may have forgotten or misheard your links.
|
||||
</li>
|
||||
<li><strong>They ensure your show gets posted on time.</strong><br />
|
||||
If you do not supply show notes then your show notes will need to be edited manually by an HPR volunteer and this will most likely result in delays. During that time other shows will be processed and may get posted before your show. It is always better if you send us show notes yourself as you know best what information you are trying to convey.</li>
|
||||
<li><strong>They encourage people to download your show.</strong><br />
|
||||
We produce a lot of shows and many people download based on the text in the show notes. If the show notes are not descriptive then it is less likely that it will get as many downloads as other shows with good show notes.</li>
|
||||
<li><strong>They allow your show to be indexed by search engines.</strong><br />
|
||||
Search engines cannot determine the content of your show from the audio alone. The only way for your show to be indexed is for you to describe in the associated text what you say in the audio.</li>
|
||||
<li><strong>They make your show accessible to the deaf and hard of hearing.</strong><br />
|
||||
Your audio is completely inaccessible to those who have hearing problems, so the only way for your show to be of help to them is if you distill the essence of the show into the show notes. If you are using a script to prepare your show then include that.</li>
|
||||
</ul>
|
||||
The amount you can enter is restricted to 4000 characters, but you can provide additional show notes if you wish. Please add them to an index.html file which you can expect to be served from http://www.hackerpublicradio.org/eps/hpr9999/index.html<br /> <br />
|
||||
<li>
|
||||
If you wish to include text formatting then please use a format that supports it. We accept:
|
||||
|
||||
<ul>
|
||||
<li>HTML5</li>
|
||||
<li>Markdown (standard)</li>
|
||||
<li>Markdown (GitHub flavoured)</li>
|
||||
<li>Markdown (Pandoc flavoured)</li>
|
||||
<li>RestructuredText</li>
|
||||
<li>txt2tags</li>
|
||||
<li>Plain text</li>
|
||||
</ul>
|
||||
|
||||
However please restrict yourself to text unless you are experienced producing valid markdown/HTML5. Regardless of the format you send your shownotes will end up in html5 <article> section, where the header and footer are not available to you. Avoid using <div> or <span>. The inclusion of JavaScript will send your show into quarantine, until an experienced HPR volunteer can be found to debug it.<br />
|
||||
It takes us a lot longer to fix incorrectly formatted shownotes than plain text, so please only create formatted show notes if you know what you are doing and are sure that what you are writing is valid.
|
||||
</li>
|
||||
<li id="shownotes_format"><strong>Show Note Format:</strong> <em>Optional</em><br />
|
||||
Please tell us which format, if any you used when filling in your shownotes.
|
||||
<ul>
|
||||
<li><a href="http://www.w3schools.com/html/html5_intro.asp">HTML5</a></li>
|
||||
<li><a href="https://en.wikipedia.org/wiki/Markdown">Markdown (standard)</a></li>
|
||||
<li><a href="https://help.github.com/articles/basic-writing-and-formatting-syntax/">Markdown (GitHub flavoured)</a></li>
|
||||
<li><a href="http://rmarkdown.rstudio.com/authoring_pandoc_markdown.html">Markdown (Pandoc flavoured)</a></li>
|
||||
<li><a href="http://docutils.sourceforge.net/docs/user/rst/quickstart.html">RestructuredText</a></li>
|
||||
<li><a href="http://txt2tags.org/online.php">txt2tags</a></li>
|
||||
<li>Plain text having no formatting.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li id="series"><strong>Series:</strong> <em>Optional</em><br />
|
||||
Select the <a href="<!--% absolute_url(baseurl,'series.html') %-->">series</a> if any that your show is a part of.
|
||||
</li>
|
||||
<li id="tags"><strong>Tags:</strong> <em>Optional</em><br />
|
||||
Add a list of comma separated tags. Pick the most important words from the shownotes. These are used to <a href="http://hackerpublicradio.org/tags.php">find shows via the tags page</a>.
|
||||
</li>
|
||||
<li id="upload_method"><strong>Upload Method:</strong> <em>Optional</em><br />
|
||||
You have the choice of the following options:<br />
|
||||
<ul>
|
||||
<li id="browser"><strong>Upload now via this browser</strong><br />
|
||||
You can upload single or multiple files using this method. Chrome will display the percentage uploaded but to see this in Firefox you will need to install a <a href="https://addons.mozilla.org/en-US/firefox/addon/uploadprogress/">plugin</a>, or just wait.
|
||||
</li>
|
||||
<li id="url"><strong>Provide a url for us to get it from</strong><br />
|
||||
Using this option may cause delays as a HPR volunteer will need to troubleshoot any issues that may occur, and this can result in your show not been posted on time.
|
||||
</li>
|
||||
<li id="upload_later"><strong>Other</strong><br />
|
||||
The postal information will be sent to you after submission.
|
||||
</li>
|
||||
</ul>
|
||||
<br />
|
||||
If you want to submit an additional file with your show, then put them in a zip, or tgz file. This should expand to a directory with a index.html file that refers to the other files. This will be hosted in the eps directory under a new directory with the episode number.
|
||||
<pre>
|
||||
http://www.hackerpublicradio.org/eps/hpr9999/index.html
|
||||
http://www.hackerpublicradio.org/eps/hpr9999/other-file.pdf
|
||||
http://www.hackerpublicradio.org/eps/hpr9999/yet-other-file.c
|
||||
...
|
||||
</pre>
|
||||
Ensure that all links are full urls, as relative urls will not work in RSS feeds. Adding additional files will delay processing as they need to be verified manually.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Press submit and your show will be sent to the HPR Volunteers to be processed. Keep an eye on the <a href="<!--% hub_baseurl %-->calendar.php">calendar</a> for when it is posted.
|
||||
Your show information is used to process the media files, on the website, in the RSS feeds, and on social media sites.
|
||||
</p>
|
59
templates/content-requested_topics.tpl.html
Normal file
59
templates/content-requested_topics.tpl.html
Normal file
@@ -0,0 +1,59 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<h1 id="requested_topics">Requested topics</h1>
|
||||
<p>This is a list of topics that have been requested by the community. Feel free to add it to the list by emailing admin at hpr or by tweeting us on <a href="https://twitter.com/hpr">@HPR</a>.</p>
|
||||
<ul>
|
||||
<li>How did you get into podcasting/linux/geekdom?</li>
|
||||
<li>What podcasts you listen to and can recommend</li>
|
||||
<li>What’s in your bag? Tell us what tools/gear/stuff you keep close at hand.</li>
|
||||
<li>What got you into Linux?</li>
|
||||
<li>Your favorite Android applications.</li>
|
||||
<li>Your favorite desktop applications.</li>
|
||||
<li>Your favorite browser extensions.</li>
|
||||
<li>A introduction to Wireshark.</li>
|
||||
<li>How to set up your own blog.</li>
|
||||
<li>Choosing a artistic design for website, business cards etc.</li>
|
||||
<li>Music Theory</li>
|
||||
<li>Installing a VPN to your home network</li>
|
||||
<li>Init and System.d</li>
|
||||
<li>Episodes for the <a href="<!--% absolute_url(baseurl,'series/0007.html') %-->">LPI</a>, or the Networking series.</li>
|
||||
<li><a href="https://web.archive.org/web/20160629174556/opensourcemusician.com/index.php/Beginning_Audio_Series_for_HPR_and_OSMP_Release">Beginning Audio Series for HPR and OSMP Release</a></li>
|
||||
<li>Hackintosh computers - what are they, why would you want one.</li>
|
||||
<li>Grub 2.0 introduction and customization.</li>
|
||||
<li>FM Transmitter hack to listen into internet streams</li>
|
||||
<li>How I Got Into Accessible Computing</li>
|
||||
<li>How to do knitting</li>
|
||||
<li>How to build a house</li>
|
||||
<li>Bitcoin howto <a href="<!--% absolute_url(baseurl,'eps/hpr0788/index.html') %-->">hpr0788</a></li>
|
||||
<li>How to solder <a href="<!--% absolute_url(baseurl,'eps/hpr1037/index.html') %-->">hpr1037</a>, <a href="<!--% absolute_url(baseurl,'eps/hpr1047/index.html') %-->">hpr1047</a></li>
|
||||
<li>How to weld</li>
|
||||
<li>How to fix a car</li>
|
||||
<li>Reviews of stream playing software, (for linuxheads who don't want to keep a browser tab open all the time)</li>
|
||||
<li>Reviews of stream ripping software on linux</li>
|
||||
<li>Beginners guide to gnuplot</li>
|
||||
<li>Nagios series, intro, setup, advanced ...</li>
|
||||
<li>How to set up GPG/openPGP</li>
|
||||
<li>What I do with my Raspberry Pi</li>
|
||||
<li>It broke, I fixed it</li>
|
||||
<li>How does coreboot work</li>
|
||||
<li>Introduction to HAM Radio</li>
|
||||
<li>I've moved and they do it like this here</li>
|
||||
<li>How to record a tag team tutorial on a topic</li>
|
||||
<li>Open Street Map new editor</li>
|
||||
<li>etymology</li>
|
||||
<li>functional versus procedural programming</li>
|
||||
<li>sed, awk and grep</li>
|
||||
<li>Setting up imap/smtp (gmail) in a cli mail program</li>
|
||||
<li>Irssi - a sane setup</li>
|
||||
<li>Your view of the future</li>
|
||||
<li>Alternative uses for Bayesian email classifiers (<a href="https://www.youtube.com/watch?v=JKB5CojW4AA">more info</a>)</li>
|
||||
<li>How to use a multimeter, and other basic electronic components like a 555 timer</li>
|
||||
<li>How does Hubble remain fixed on a spot in space while in orbit of the earth</li>
|
||||
<li>Gnu automake system.</li>
|
||||
<li>What's the deal with IPv6 (i.e., why can't we just NAT at the ISP level, are there privacy issues in having your MAC address as part of your IP?)</li>
|
||||
<li>Network like a Pro. If you were to treat your home network like a corporate server farm, what tools and hardware would it entail to treat your home network like a security professional? What do we need for a firewall and what are the detection/prevention technologies that we could be implementing?</li>
|
||||
<li>Beyond Firewall and an IDS/IPS, what do I need? I've started listening to Security Weekly, starting with last December, and at one point the suggested a secondary IDS, behind the firewall, to record what the primary defenses missed. Where and how do I set that up? Beyond firewall and IDS, what other tools should I be running, where should they be in my network, and how many physical boxes are we talking? Emphasis should be on low power devices and free as in beer tools.</li>
|
||||
<li>Now That Your Security is in Place, How to Read Logs and Formulate a Response to an Intrusion. What I've learned from SW, is that you can't prevent an intrusion, it's how to respond when you are compromised. Again, according to SW, the security manager's job is to detect intrusions, inside 48 hours rather than 48 months. How can you protect your proprietary data and customer database?</li>
|
||||
<li>What Are the Answers I Need, To the Questions I Don't Know Enough to Ask?</li>
|
||||
<li>#IPFS (and don't leave out IPNS!). I'd really like to get a better understanding of practical use of this.</li>
|
||||
<li>Any experiences integrating Dell/Wyse thin- and zero- clients into linux networks.</li>
|
||||
</ul>
|
@@ -1,5 +1,4 @@
|
||||
<h1>RSS Syndication</h1>
|
||||
<p><small><em><a href="<!--% absolute_path(baseurl) %-->syndication.html">Advanced Settings</a>.</em></small></p>
|
||||
|
||||
<article>
|
||||
<header>
|
||||
@@ -78,12 +77,16 @@
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->comments.rss">Listener contributed comments to the episodes</a></li>
|
||||
</ul>
|
||||
</article>
|
||||
<hr />
|
||||
<h1>Other Download Options</h1>
|
||||
<article>
|
||||
<header>
|
||||
<h2>Site Replication Sources</h2>
|
||||
</header>
|
||||
<ul>
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->hpr.sql">Daily Database Dump in SQL Format</a></li>
|
||||
<li><a href="https://repo.anhonesthost.net/explore/repos">All the HPR Source Code is on GitTea</a></li>
|
||||
<li><a href="https://hub.hackerpublicradio.org/stats.json">Current Statistics on the HPR Project (updated every 15 mins)</a></li>
|
||||
<ul>
|
||||
</article>
|
||||
<article>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->index.html"><strong>Home »</strong></a></li>
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->syndication.html">Get Shows</a></li>
|
||||
<li><a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">Give Shows</a></li>
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->help_out.html">Contribute</a></li>
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->about.html#how_to_help">Contribute</a></li>
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->tags.html">Tags</a></li>
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->about.html">About</a></li>
|
||||
<li><a href="<!--% absolute_path(baseurl) %-->search.html">Search</a></li>
|
||||
|
@@ -75,17 +75,18 @@
|
||||
<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/">Talk With a Techie</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="<!--% absolute_url(baseurl) %-->/maillist" >Mailing list</a></li>
|
||||
<li><a href="<!--% absolute_url(baseurl,'/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>
|
||||
@@ -113,6 +114,7 @@
|
||||
<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>
|
||||
|
@@ -1,18 +1,18 @@
|
||||
<!--% query_hpr_shows = '
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.notes,
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.profile,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
WHERE hosts.hostid = ? AND eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
|
||||
ORDER BY eps.id DESC
|
||||
WHERE hosts.hostid = ? AND eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
|
||||
ORDER BY eps.id DESC
|
||||
'
|
||||
%-->
|
||||
|
@@ -1,18 +1,18 @@
|
||||
<!--% query_hpr_shows = '
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.notes,
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.profile,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
WHERE hosts.hostid = ? AND eps.date < date(\'now\', \'+1 days\')
|
||||
ORDER BY eps.id + 0 DESC
|
||||
WHERE hosts.hostid = ? AND eps.date < date(\'now\', \'+1 days\')
|
||||
ORDER BY eps.id + 0 DESC
|
||||
'
|
||||
%-->
|
||||
|
@@ -1,58 +1,54 @@
|
||||
<!--% query_next_available_episode = '
|
||||
WITH next_id AS (
|
||||
SELECT id, id + 1 AS \'id_next\', date as \'last_date\'
|
||||
FROM eps
|
||||
WHERE eps.date > NOW()
|
||||
)
|
||||
SELECT
|
||||
MIN(next_id.id_next) AS \'next_id\',
|
||||
DATE_FORMAT(DATE_ADD(MIN(last_date), INTERVAL 1 DAY), \'%Y\') AS \'last_year\',
|
||||
DATE_FORMAT(DATE_ADD(MIN(last_date), INTERVAL 1 DAY), \'%d\') AS \'last_day\',
|
||||
DATE_FORMAT(DATE_ADD(MIN(last_date), INTERVAL 1 DAY), \'%m\') AS \'last_month\'
|
||||
FROM next_id
|
||||
LEFT JOIN eps ON next_id.id_next = eps.id
|
||||
WHERE eps.id IS NULL
|
||||
'
|
||||
SELECT id, date FROM eps e WHERE id = (
|
||||
SELECT id + 1 FROM eps mo
|
||||
WHERE NOT EXISTS (
|
||||
SELECT NULL
|
||||
FROM eps mi
|
||||
WHERE mi.id = mo.id + 1
|
||||
)
|
||||
ORDER BY id
|
||||
LIMIT 1) - 1
|
||||
'
|
||||
%-->
|
||||
<!--% query_latest_episodes = '
|
||||
WITH comment_tallies AS (
|
||||
SELECT
|
||||
WITH comment_tallies AS (
|
||||
SELECT
|
||||
eps_id,
|
||||
COUNT(eps_id) AS eps_tally
|
||||
FROM comments
|
||||
GROUP BY eps_id
|
||||
GROUP BY eps_id
|
||||
)
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.notes,
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email,
|
||||
miniseries.name AS series, miniseries.id AS seriesid,
|
||||
COALESCE (comment_tallies.eps_tally, 0) AS eps_tally
|
||||
FROM eps
|
||||
COALESCE (comment_tallies.eps_tally, 0) AS eps_tally
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
LEFT JOIN comment_tallies ON eps.id = comment_tallies.eps_id
|
||||
WHERE eps.date <= UTC_DATE()
|
||||
ORDER BY eps.id DESC
|
||||
ORDER BY eps.id DESC
|
||||
LIMIT 10
|
||||
'
|
||||
%-->
|
||||
<!--% query_last_5_weeks_episodes = '
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
eps.date, eps.license, eps.title, eps.summary,
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.title, eps.summary,
|
||||
eps.duration, eps.notes, eps.tags,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.local_image,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
WHERE eps.date <= UTC_DATE()
|
||||
ORDER BY eps.id DESC
|
||||
|
@@ -1,58 +1,54 @@
|
||||
<!--% query_next_available_episode = '
|
||||
WITH next_id AS (
|
||||
SELECT id, id + 1 AS \'id_next\', date as \'last_date\'
|
||||
FROM eps
|
||||
WHERE eps.date > date(\'now\')
|
||||
)
|
||||
SELECT
|
||||
MIN(next_id.id_next) AS \'next_id\',
|
||||
strftime(\'%Y\', DATE (MIN (last_date), \'+1 Days\')) AS \'last_year\',
|
||||
strftime(\'%d\', DATE (MIN (last_date), \'+1 Days\')) AS \'last_day\',
|
||||
strftime(\'%m\', DATE (MIN (last_date), \'+1 Days\')) AS \'last_month\'
|
||||
FROM next_id
|
||||
LEFT JOIN eps ON next_id.id_next = eps.id
|
||||
WHERE eps.id IS NULL
|
||||
'
|
||||
SELECT id, date FROM eps e WHERE id = (
|
||||
SELECT id + 1 FROM eps mo
|
||||
WHERE NOT EXISTS (
|
||||
SELECT NULL
|
||||
FROM eps mi
|
||||
WHERE mi.id = mo.id + 1
|
||||
)
|
||||
ORDER BY id
|
||||
LIMIT 1) - 1
|
||||
'
|
||||
%-->
|
||||
<!--% query_latest_episodes = '
|
||||
WITH comment_tallies AS (
|
||||
SELECT
|
||||
WITH comment_tallies AS (
|
||||
SELECT
|
||||
eps_id,
|
||||
COUNT(eps_id) AS eps_tally
|
||||
FROM comments
|
||||
GROUP BY eps_id
|
||||
GROUP BY eps_id
|
||||
)
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.duration,
|
||||
eps.title, eps.summary, eps.tags,
|
||||
eps.notes,
|
||||
hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email,
|
||||
miniseries.name AS series, miniseries.id AS seriesid,
|
||||
COALESCE (comment_tallies.eps_tally, 0) AS eps_tally
|
||||
FROM eps
|
||||
COALESCE (comment_tallies.eps_tally, 0) AS eps_tally
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
LEFT JOIN comment_tallies ON eps.id = comment_tallies.eps_id
|
||||
WHERE eps.date <= date(\'now\')
|
||||
ORDER BY eps.id + 0 DESC
|
||||
ORDER BY eps.id + 0 DESC
|
||||
LIMIT 10
|
||||
'
|
||||
%-->
|
||||
<!--% query_last_5_weeks_episodes = '
|
||||
SELECT
|
||||
eps.id,
|
||||
CASE eps.explicit WHEN 1 THEN \'Explicit\' ELSE \'Clean\' END AS explicit ,
|
||||
eps.date, eps.license, eps.title, eps.summary,
|
||||
SELECT
|
||||
eps.id,
|
||||
eps.explicit,
|
||||
eps.date, eps.license, eps.title, eps.summary,
|
||||
eps.duration, eps.notes, eps.tags,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.local_image,
|
||||
hosts.hostid,
|
||||
hosts.host, hosts.email, hosts.local_image,
|
||||
miniseries.name AS series, miniseries.id AS seriesid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
FROM eps
|
||||
INNER JOIN hosts ON eps.hostid = hosts.hostid
|
||||
INNER JOIN miniseries ON eps.series = miniseries.id
|
||||
WHERE eps.date <= date(\'now\')
|
||||
ORDER BY eps.id + 0 DESC
|
||||
|
@@ -2,8 +2,8 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<rss version="2.0"
|
||||
xmlns:googleplay="https://www.google.com/schemas/play-podcasts/1.0"
|
||||
xmlns:atom="https://www.w3.org/2005/Atom"
|
||||
xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" >
|
||||
<channel>
|
||||
<title>Hacker Public Radio</title>
|
||||
@@ -17,7 +17,7 @@
|
||||
<itunes:category text="Education">
|
||||
<itunes:category text="Training"/>
|
||||
</itunes:category>
|
||||
<itunes:image href="<!--% absolute_url(baseurl) %-->images/hpr_feed_itunes.png"/>
|
||||
<itunes:image href="<!--% absolute_url(http_baseurl) %-->images/hpr_feed_itunes.png"/>
|
||||
<itunes:explicit>yes</itunes:explicit>
|
||||
<itunes:author>Hacker Public Radio</itunes:author>
|
||||
<itunes:keywords>Community Radio, Tech Interviews, Linux, Open, Hobby, Software Freedom</itunes:keywords>
|
||||
@@ -30,8 +30,8 @@
|
||||
</itunes:owner>
|
||||
<webMaster>admin@hackerpublicradio.org (HPR Volunteer)</webMaster>
|
||||
<generator>site-generator</generator>
|
||||
<docs>https://www.rssboard.org/rss-specification</docs>
|
||||
<ttl>43200</ttl>
|
||||
<docs>http://www.rssboard.org/rss-specification</docs>
|
||||
<ttl>720</ttl>
|
||||
<skipDays>
|
||||
<day>Saturday</day>
|
||||
<day>Sunday</day>
|
||||
@@ -47,9 +47,9 @@
|
||||
<googleplay:author>HPR Volunteer</googleplay:author>
|
||||
<googleplay:description>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.</googleplay:description>
|
||||
<googleplay:email>admin@hackerpublicradio.org</googleplay:email>
|
||||
<googleplay:image href="<!--% absolute_url(baseurl) %-->images/hpr_feed_itunes.png"/>
|
||||
<googleplay:image href="<!--% absolute_url(http_baseurl) %-->images/hpr_feed_itunes.png"/>
|
||||
<googleplay:category text="Technology"/>
|
||||
<atom:link href="<!--% absolute_url(baseurl) %--><!--% filename %-->" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="<!--% absolute_url(http_baseurl) %--><!--% filename %-->" rel="self" type="application/rss+xml" />
|
||||
<pubDate><!--% format_feed_date(date.now) %--></pubDate>
|
||||
|
||||
<!--% INCLUDE $content %-->
|
||||
|
@@ -57,7 +57,7 @@ or
|
||||
|
||||
<!--% MACRO twat_show_summary(show, hide_host) BLOCK %-->
|
||||
|
||||
<h3 class="title"><a href="<!--% absolute_path(baseurl) %-->eps/twat<!--% zero_pad_left(show.id) %-->/index.html">twat<!--% show.id %--> :: <!--% show.title %--></a> <!--% IF hide_host == "" %-->
|
||||
<h3 class="title"><a href="<!--% absolute_path(baseurl) %-->eps/twat<!--% zero_pad_left(show.id) %-->/index.html">Today with a Techie Ep.<!--% show.id %--> :: <!--% show.title %--></a> <!--% IF hide_host == "" %-->
|
||||
hosted by <a href="<!--% absolute_path(baseurl) %-->correspondents/<!--% zero_pad_left(show.hostid) %-->.html"><!--% show.host %--></a>
|
||||
<!--% END %-->
|
||||
</h3>
|
||||
|
@@ -1,24 +1,25 @@
|
||||
<!--% PROCESS 'shared-utils.tpl.html' %-->
|
||||
<!--% MACRO display_item(episode, file_extension, audio_mime_type) BLOCK %-->
|
||||
<!--% USE HTML.Strip %-->
|
||||
<!--% USE HTML.Strip emit_spaces = 0 %-->
|
||||
<!--% IF audio_mime_type == "" %-->
|
||||
<!--% audio_mime_type = 'ogg' %-->
|
||||
<!--% END %-->
|
||||
<item>
|
||||
<itunes:explicit><!--% display_explicit_feed(episode.explicit) %--></itunes:explicit>
|
||||
<googleplay:explicit><!--% display_explicit_feed(episode.explicit) %--></googleplay:explicit>
|
||||
<title>HPR<!--% zero_pad_left(episode.id) %-->: <!--% episode.title %--></title>
|
||||
<googleplay:explicit><!--% display_explicit_feed_2(episode.explicit) %--></googleplay:explicit>
|
||||
<title>HPR<!--% zero_pad_left(episode.id) %-->: <!--% episode.title | html_strip | xml_entity %--></title>
|
||||
<author><!--% episode.email %--> (<!--% episode.host %-->)</author>
|
||||
<googleplay:author><!--% episode.email %--> (<!--% episode.host %-->)</googleplay:author>
|
||||
<itunes:author><!--% episode.email %--> (<!--% episode.host %-->)</itunes:author>
|
||||
<googleplay:image href="<!--% absolute_url(baseurl) %-->images/hpr_feed_itunes.png"/>
|
||||
<googleplay:image href="<!--% absolute_url(http_baseurl) %-->images/hpr_feed_itunes.png"/>
|
||||
<link><!--% absolute_url(baseurl) %-->eps/hpr<!--% zero_pad_left(episode.id) %-->/index.html</link>
|
||||
<description><![CDATA[<!--% episode.notes %-->]]>
|
||||
</description>
|
||||
<itunes:summary><![CDATA[<!--% episode.notes.substr(0, 4000) | html_strip | xml_entity %-->]]>
|
||||
</itunes:summary>
|
||||
<pubDate><!--% format_feed_date(episode.date) %--></pubDate>
|
||||
<enclosure url="<!--% baseurl %-->eps/hpr<!--% zero_pad_left(episode.id) %-->.<!--% file_extension %-->" length="<!--% episode.length %-->" type="audio/<!--% audio_mime_type %-->"/>
|
||||
<guid><!--% baseurl %-->eps/hpr<!--% zero_pad_left(episode.id) %-->.<!--% file_extension %--></guid>
|
||||
</item>
|
||||
<enclosure url="<!--% http_baseurl %-->eps/hpr<!--% zero_pad_left(episode.id) %-->.<!--% file_extension %-->" length="<!--% episode.length %-->" type="audio/<!--% audio_mime_type %-->"/>
|
||||
<guid><!--% http_baseurl %-->eps/hpr<!--% zero_pad_left(episode.id) %-->.<!--% file_extension %--></guid>
|
||||
</item>
|
||||
|
||||
<!--% END %-->
|
||||
|
@@ -35,6 +35,10 @@
|
||||
<!--% display_choice(is_explicit, 'yes', 'no') %-->
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO display_explicit_feed_2(is_explicit) BLOCK %-->
|
||||
<!--% display_choice(is_explicit, 'Yes', 'No') %-->
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO format_feed_date(date_to_format) BLOCK %-->
|
||||
<!--% USE feed_date = date(format = '%a, %d %b %Y %H:%M:%S +0000', gmt=1) %-->
|
||||
<!--% feed_date.format(date_to_format) %-->
|
||||
@@ -45,6 +49,20 @@
|
||||
<!--% iso8601_date.format(date_to_format) %-->
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO absolute_url(base, path) BLOCK %-->
|
||||
<!--% UNLESS base.empty %-->
|
||||
<!--% UNLESS base.substr(-1) == '/' %-->
|
||||
<!--% base = base _ '/' %-->
|
||||
<!--% END %-->
|
||||
<!--% END %-->
|
||||
<!--% UNLESS path.empty %-->
|
||||
<!--% IF path.substr(0,1) == '/' %-->
|
||||
<!--% path = path.substr(1) %-->
|
||||
<!--% END %-->
|
||||
<!--% END %-->
|
||||
<!--% base _ path %-->
|
||||
<!--% END %-->
|
||||
|
||||
<!--% MACRO absolute_path(baseurl) BLOCK %-->
|
||||
<!--% IF baseurl %-->./<!--% ELSE %-->/<!--% END %-->
|
||||
<!--% END %-->
|
||||
|
73
utils/check-dependencies.sh
Executable file
73
utils/check-dependencies.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash -
|
||||
#===============================================================================
|
||||
#
|
||||
# FILE: check-dependencies.sh
|
||||
#
|
||||
# USAGE: ./check-dependencies.sh
|
||||
#
|
||||
# DESCRIPTION: Check that Perl module dependencies for the hpr_generator
|
||||
# are installed.
|
||||
#
|
||||
# OPTIONS: ---
|
||||
# REQUIREMENTS: ---
|
||||
# BUGS: ---
|
||||
# NOTES: ---
|
||||
# AUTHOR: Roan "Rho`n" Horning (roan.horning@gmail.com)
|
||||
# ORGANIZATION:
|
||||
# CREATED: 09/05/2024 09:55:00 PM
|
||||
# REVISION: ---
|
||||
#===============================================================================
|
||||
|
||||
set -o nounset # Treat unset variables as an error
|
||||
|
||||
#--- FUNCTION ----------------------------------------------------------------
|
||||
# NAME: is_module_installed
|
||||
# DESCRIPTION: Tests if the supplied module is found on the system
|
||||
# PARAMETERS: Name of the denpendent Perl module
|
||||
# RETURNS: 0 if not found, 1 if found
|
||||
#-------------------------------------------------------------------------------
|
||||
function is_module_installed {
|
||||
HR="----------------------"
|
||||
perl -e "use ${1} "
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo ${HR}
|
||||
else
|
||||
echo "Found module ${1}"
|
||||
echo ${HR}
|
||||
fi
|
||||
}
|
||||
|
||||
MODULES=( \
|
||||
"Getopt::Long" \
|
||||
"Pod::Usage" \
|
||||
"Config::Std" \
|
||||
"Template" \
|
||||
"Template::Plugin::File" \
|
||||
"Template::Plugin::DBI" \
|
||||
"Template::Plugin::HTML::Strip" \
|
||||
"DBI" \
|
||||
"Tie::DBI" \
|
||||
"DBD::SQLite" \
|
||||
"DBD::mysql" \
|
||||
"Date::Calc" \
|
||||
"Text::CSV_XS" \
|
||||
)
|
||||
|
||||
echo "The following modules must be installed for the site-generator to function: "
|
||||
for module in "${MODULES[@]}"
|
||||
do
|
||||
echo "* ${module}"
|
||||
done
|
||||
echo "When MySQL is used, the DBD:mysql module is required (otherwise it is optional)"
|
||||
echo "When SQLite is used, then the DBD:SQLite module is required (otherwise it is optional)"
|
||||
|
||||
echo "Scanning for modules ..."
|
||||
echo "----------------------"
|
||||
|
||||
for module in "${MODULES[@]}"
|
||||
do
|
||||
is_module_installed "${module}"
|
||||
done
|
||||
|
||||
echo "Finished scanning."
|
Reference in New Issue
Block a user