Site Map - skip to main content - dyslexic font - mobile - text - print

Hobby Public Radio

Your ideas, projects, opinions - podcasted.

New episodes Monday through Friday.



Welcome to HPR the Community Podcast Network

We started producing shows as Today with a Techie on 2005-09-19, 13 years, 7 months, 10 days ago. Our shows are produced by listeners like you and can be on any topic that "are of interest to hobbyists". If you listen to HPR then please consider contributing one show a year. If you record your show now it could be released in 29 days.

Meet the team

Please help out tagging older shows !


Latest Shows


hpr2798 :: Should Podcasters be Pirates ?

Knightwise waxes nostalgically on the early days of podcasting and wonders if we all sold out?

Hosted by knightwise on 2019-04-24 is flagged as Explicit and released under a CC-BY-SA license.
Tags: podcast,pirate radio,decentralisation.
Listen in ogg, spx, or mp3 format. Comments (1)

In a car rant I think back to the early days of podcasting and how the ambience and vision of podcasting was far from the mainstream media approach from today. Have we all sold out ?


hpr2797 :: Writing Web Game in Haskell - Simulation at high level

tuturto gives overview of simulation in their 4x game

Hosted by tuturto on 2019-04-23 is flagged as Clean and released under a CC-BY-SA license.
Tags: haskell, persistent.
Listen in ogg, spx, or mp3 format. Series: Haskell | Comments (0)

So far we have been concentrating on separate pieces of the game. Now it’s time to put some of them together as a simulation.

Overview of simulation

Simulation is done in discrete steps. Each step is roughly 1 earth month (completely arbitrary decision). Shorter than that and there might not be enough happening during turns to keep things interesting. Much longer than that and player might not have enough control on how to react things.

In any case, current time is stored in database in table time. There should be only one row in that table at any given time. And that row has only one value, current time. Time is stored as integer as I didn’t want to deal with problems that you get when adding fractions to a float time after time. So current time (March 2019) would be 2019.3 in game terms and stored as 20193 in database.

Main processing is done in function called processTurn that is shown below. It advances time for one decimal month, removes all expired statuses as explained in episode 2768 and then loads all factions.

After that, various steps of the simulation are carried out for all loaded factions. These include handling special events as explained in episode 2748 and doing observations and report writing in manner described episode 2703.

processTurn :: (BaseBackend backend ~ SqlBackend,
    BackendCompatible SqlBackend backend, PersistUniqueRead backend,
    PersistQueryWrite backend,
    PersistQueryRead backend, PersistStoreWrite backend, MonadIO m) =>
    ReaderT backend m Time
processTurn = do
    newTime <- advanceTime
    _ <- removeExpiredStatuses newTime
    factions <- selectList [] [ Asc FactionId ]
    _ <- mapM (handleFactionEvents newTime) factions
    mapM_ handleFactionFood factions
    mapM_ (handleFactionConstruction newTime) factions
    _ <- mapM (addSpecialEvents newTime) factions
    -- Doing observations should always be done last to ensure players have
    -- recent reports of property they have full control, ie. planets.
    -- Otherwise it's possible that they'll receive reports that are one
    -- turn out of sync.
    mapM_ (handleFactionObservations newTime) factions
    return newTime

More mapping

Remember map and fmap that are used to run a function to each element in a list or general structure? mapM works in a similar way, but is used in monadic context. In processTurn function, we’re dealing with input and output and have IO monad present to allow us to do that (MonadIO m part of the type signature).

If you step back a bit and squint a bit, then map :: (a -> b) -> [a] -> [b] and fmap :: (a -> b) -> f a -> f b and mapM :: Monad m => (a -> m b) -> t a -> m (t b) look pretty similar. Each take a function, structure and produce a new structure which values were created by running the given function for each element of the original structure.

The difference is that map works only for lists, fmap works for functors (that were covered in episode 2778) and mapM works for structures in monadic context.

Best way to contact me nowadays is either by email or through fediverse where I’m tuturto@mastodon.social.


hpr2796 :: IRS,Credit Freezes and Junk Mail Ohh My!

IRS Credit Freezes and Junk Mail

Hosted by operat0r on 2019-04-22 is flagged as Clean and released under a CC-BY-SA license.
Tags: IRS,Credit Freeze,Junk Mail,hacking.
Listen in ogg, spx, or mp3 format. Comments (0)


hpr2795 :: Dead Earth

A review of a 20-year old, GNU Free Documentation Licensed, RPG about post-apocalyptic turmoil

Hosted by klaatu on 2019-04-19 is flagged as Clean and released under a CC-BY-SA license.
Tags: RPG,Tabletop Game,Dead Earth.
Listen in ogg, spx, or mp3 format. Series: Tabletop Gaming | Comments (0)

Full shownotes are on mixedsignals.ml

You can download Klaatu's update revision of the game materials here: https://mixedsignals.ml/download/deadearth-bundle-gfdl.7z


hpr2794 :: Interview with Martin Wimpress

In this episode, Yannick talks with Martin Wimpress about the Ubuntu MATE project

Hosted by Yannick the french guy from Switzerland on 2019-04-18 is flagged as Clean and released under a CC-BY-SA license.
Tags: ubuntu, mate, ubuntu mate, martin wimpress, raspberry pi, desktop environment, linux.
Listen in ogg, spx, or mp3 format. Series: Interviews | Comments (0)

Ubuntu, MATE.

Two words which, taken separately, refer to great products.

On one side, Ubuntu, one of the most popular, if not the most popular, linux distribution.

On the other side, the MATE desktop environment, also very popular.

One person took those two elements and combined them together to make Ubuntu MATE. That person is Martin Wimpress, and he joined me on the 21st of March to talk about the past, present, and future of the project.


hpr2793 :: bash coproc: the future (2009) is here

clacke discovers bash's coproc keyword and explains some toy examples


Hosted by clacke on 2019-04-17 is flagged as Clean and released under a CC-BY-SA license.
Tags: bash, coproc, subshell.
Listen in ogg, spx, or mp3 format. Series: Bash Scripting | Comments (1)

If you want the full manuscript, that’s at gitlab: hpr2793_bash_coproc_manuscript.adoc. It’s almost a transcript, but I added spontaneous commentary while reading the examples, so that’s not in the manuscript.

Episode errata:

  • Command substitution with $() is perfectly valid according to POSIX, and is accepted both by dash and by bash --posix. It’s not to be considered a bashism.

  • I fumbled the pronunciation of the printf format string in one place and said "parenthesis" instead of "percentage sign".

  • I tried to say "space" every time there’s a space, but I know I forgot it in a few places. But you probably need to look at the show notes to really make sense of the commands anyway.

Example #1:

More on command substitution in Dave’s hpr1903: Some further Bash tips.

Example #2:

You can also combine process substitution with redirection.

Example #3:

More on process substitution in Dave’s hpr2045: Some other Bash tips.

For a description of a hack for creating bidirectional anonymous pipes in bash, see my Fediverse post on this, and I owe you a show.

A coprocess in bash is a subshell to which you have access to two file descriptors: Its stdin and its stdout.

The two file descriptors will be put in a bash array. To learn more about arrays, check out Dave’s series within the bash series, a whopping five-part quadrology including hpr2709, hpr2719, hpr2729, hpr2739 and hpr2756.

You create a coprocess using the coproc keyword, brand spanking new since bash 4 from 2009. I am filing issues to pygments and GNU src-highlite to support it.

There are two ways to call coproc. The first way is to give coproc a simple command.

Example #4:

The other way is to give coproc an explicit name and a Command Grouping.

Example #5:

Slightly less contrived example #6:

$ coproc GREP (grep --line-buffered pub); printf '%s\n' hacker public radio >&${GREP[1]}; cat <&${GREP[0]}
[1] 25627
public
^C
$ kill %1
[1]+  Terminated              coproc GREP ( grep --color=auto --line-buffered pub )

Here grep and cat wait forever for more input, so we have to kill them to continue our lesson.

But we know that GREP will only return one line, so we can just read that one line. And when we are done feeding it lines, we can close our side of its stdin, and it will notice this and exit gracefully.

I’m glad I stumbled over that {YOURVARIABLE}>&- syntax for having a dereferenced variable as the left FD of a redirection. Originally I used an ugly eval.

Example #7:

$ coproc GREP (grep --line-buffered pub); printf '%s\n' hacker public radio >&${GREP[1]}; head -n1 <&${GREP[0]}; exec {GREP[1]}>&-
[1] 25706
public
[1]+  Done                    coproc GREP ( grep --color=auto --line-buffered pub )

There we go! Not the most brilliant example, but it shows all the relevant moving parts, and we covered a couple of caveats.

Now go out and play with this and come back with an example on how this is actually useful in the real world, and submit a show!


hpr2792 :: Playing around with text to speech synthesis on Linux

Playing around with different text to speech programs to see what is possible.

Hosted by Jeroen Baten on 2019-04-16 is flagged as Clean and released under a CC-BY-SA license.
Tags: speech synthesis linux.
Listen in ogg, spx, or mp3 format. Series: Sound Scapes | Comments (0)

Below the script I used to generate a bunch of wav files with different text to speech applications.

#!/bin/bash

string="This is HPR episode 2792 entitled \"Playing around with text to speech synthesis on Linux\" and is part of the series \"Sound Scapes\". It is hosted by Yeroon Bahten and is about 20 minutes long and carries a clean flag."
echo "${string}" > text.txt

espeak -w espeak.wav "${string}" 
espeak -w espeak-ng-v-mb-us1.wav -v mb-us1 "${string}"
espeak -w espeak-ng-v-mb-us2.wav -v mb-us2 "${string}"
espeak -w espeak-ng-v-mb-us3.wav  -v mb-us3 "${string}"
espeak-ng "${string}"
espeak-ng -v en-gb "${string}"
espeak-ng -w espeak-ng-en-gb-scotland.wav -v en-gb-scotland "${string}"
espeak-ng -w espeak-ng-en-us.wav  -v en-us "${string}"

flite -o flite-voice-cmu_us_slt.wav -voice cmu_us_slt  "${string}"

echo "${string}"| festival --language english --tts # same as next line
echo "${string}"| text2wave --language british_english --tts -o festival_british_english.wav
text2wave -o festival_british_english.wav  text.txt

for voice in don_diphone kal_diphone ked_diphone rab_diphone
do
  text2wave -o festival_voice_${voice}.wav -eval "(voice_${voice} )"  text.txt
done

# Gnustep say, recorded with audio recorder.
say "${string}"

text2wave -o festival_voice_cmu_us_slt_arctic_hts.wav -eval "(voice_cmu_us_slt_arctic_hts )" text.txt

# merlin https://github.com/CSTR-Edinburgh/merlin

# marytts: https://github.com/marytts

hpr2791 :: LUKS like truecrypt

Klaatu demonstrates how to use LVM and cryptsetup to create and use portable encrypted filesystems

Hosted by klaatu on 2019-04-15 is flagged as Clean and released under a CC-BY-SA license.
Tags: encryption.
Listen in ogg, spx, or mp3 format. Series: Privacy and Security | Comments (0)

Create an empty file of a predetermined size:

$ fallocate --length 512M foo.img

Create a LUKS container on it:

$ cryptsetup --verify-passphrase luksFormat foo.img

Set it up:

$ sudo cryptsetup luksOpen foo.img foo
$ ls /dev/mapper
foo
$

Make a file system on it:

$ sudo mkfs.ext2 /dev/mapper/foo

If you don't need it for anything now, you can close it:

$ sudo cryptsetup luksClose foo
$ ls /dev/mapper
$

Mount it as a usable filesystem:

$ sudo mkdir /crypt
$ sudo mount /dev/mapper/foo /crypt

Depending on your system configuration, you may need to set up reasonable permissions:

$ sudo mkdir /crypt/mystuff
$ sudo chown klaatu:users /crypt/mystuff
$ sudo chmod 770 /crypt/mystuff
$ echo "hello world" >> /crypt/mystuff/file.txt

When you're finished using your encrypted vault, unmount and close it:

$ sudo umount /crypt
$ sudo cryptsetup luksClose foo

hpr2790 :: My YouTube Subscriptions #5

Part five of my list of subscribed channels


Hosted by Ahuka on 2019-04-12 is flagged as Clean and released under a CC-BY-SA license.
Tags: YouTube, Channels, Subscriptions.
Listen in ogg, spx, or mp3 format. Series: YouTube Subscriptions | Comments (0)

I am subscribed to a number of YouTube channels, and I am sharing them with you


hpr2789 :: Pacing In Storytelling

Lostnbronx takes a stab at explaining why the pace of your story matters.

Hosted by lostnbronx on 2019-04-11 is flagged as Clean and released under a CC-0 license.
Tags: stories, storytelling, pacing, lostnbronx.
Listen in ogg, spx, or mp3 format. Series: Random Elements of Storytelling | Comments (1)

Some stories, that are otherwise cookie-cutter in form, possessing familiar situations and clichéd characters, seem to nonetheless stand out. Other tales that might have great ideas, intriguing plots, and vivid characters, seem to hit the ground with a thud. The determining value here may lie with the pacing of the story.

How does pacing (that is, timing) affect your story? Why does it matter? Can you make improvements in the pace by moving things around? What’s the best approach for creating it to begin with?

Lostnbronx meanders for a while, often losing his way, and rarely making a coherent point regarding this complicated topic.


Previous five weeks

hpr2788 :: Looping in Haskell hosted by tuturto

Released: 2019-04-10. Duration: 00:47:28. Flag: Clean. Series: Haskell.
Tags: haskell, programming.
tuturto describes some loop-like constructs in Haskell

hpr2787 :: NodeJS Part 1 hosted by operat0r

Released: 2019-04-09. Duration: 00:10:13. Flag: Clean.
Tags: NodeJS,puppeteer,programing,Javascript.
I don't know Javascript do ?

hpr2786 :: My YouTube Channels hosted by Tony Hughes AKA TonyH1212

Released: 2019-04-08. Duration: 00:07:03. Flag: Clean. Series: YouTube Subscriptions.
Tags: Linux, Computers, YouTube, Gaming, Electronics, Audacity.
A short show about some of my YouTube channels inspired by Ahuka

hpr2785 :: What is uCPE hosted by JWP

Released: 2019-04-05. Duration: 00:06:39. Flag: Explicit.
Tags: Network Function Virtualization,NFV,Universal customer premises equipment,uCPE.
A short talk on telco networking standards

hpr2784 :: The Yamaha Disklavier hosted by Jon Kulp

Released: 2019-04-04. Duration: 00:24:00. Flag: Explicit.
Tags: Music, Piano, Keyboard, Musical Instruments, Player Pianos, Recording Devices.
I talk about the Yamaha Disklavier DKC500RW that's in my office at work

hpr2783 :: The Windows "Shutdown.exe" Command Explained hosted by Claudio Miranda

Released: 2019-04-03. Duration: 00:15:23. Flag: Clean.
Tags: shutdown, windows, commandprompt, cmd.
A rundown of the Windows "shutdown.exe" command.

hpr2782 :: Never stop gaming hosted by klaatu

Released: 2019-04-02. Duration: 00:21:17. Flag: Clean. Series: Tabletop Gaming.
Tags: rpg,dm,gm,game master,dungeon master,dnd.
Ways to feed the gaming impulse, even when you can't game

hpr2781 :: HPR Community News for March 2019 hosted by HPR Volunteers

Released: 2019-04-01. Duration: 00:59:24. Flag: Explicit. Series: April Fools Shows.
Tags: Community News.
HPR Volunteers talk about shows released and comments posted in March 2019

hpr2780 :: My SBC Nextcloud Install Pt. 1 - Hardware hosted by minnix

Released: 2019-03-29. Duration: 00:22:55. Flag: Clean.
Tags: nextcloud,single board computers,home server,sbc,arm.
How I built my self-enclosed Nextcloud server using a single board computer and a RAID enclosure

hpr2779 :: HTTP, IPFS, and torrents hosted by aldenp

Released: 2019-03-28. Duration: 00:11:51. Flag: Clean.
Tags: HTTP, IPFS, torrents.
Replacing the web with new, decentralized protocols

hpr2778 :: Functor and applicative in Haskell hosted by tuturto

Released: 2019-03-27. Duration: 00:30:41. Flag: Clean. Series: Haskell.
Tags: haskell, functor, applicative.
Brief introduction on functor and applicative patterns in Haskell and where they can be used

hpr2777 :: The quest for the perfect laptop. hosted by knightwise

Released: 2019-03-26. Duration: 00:31:07. Flag: Clean.
Tags: computer, hardware, geek, buy.
Knightwise is out looking for a new laptop and describes what he is looking for and why.

hpr2776 :: Sub-Plots In Storytelling hosted by lostnbronx

Released: 2019-03-25. Duration: 00:18:13. Flag: Clean. Series: Random Elements of Storytelling.
Tags: stories, storytelling, sub-plots, lostnbronx.
Lostnbronx looks at the importance of tightly-structured subplots in storytelling.

hpr2775 :: My YouTube Subscriptions #4 hosted by Ahuka

Released: 2019-03-22. Duration: 00:19:58. Flag: Clean. Series: YouTube Subscriptions.
Tags: YouTube, Channels, Subscriptions.
Part four of my list of subscribed channels

hpr2774 :: CJDNS and Yggdrasil hosted by aldenp

Released: 2019-03-21. Duration: 00:10:29. Flag: Clean.
Tags: CJDNS,Yggdrasil.
A summary of the things I like about CJDNS and Yggdrasil, and the places I think they could improve.

hpr2773 :: Lead/Acid Battery Maintenance and Calcium Charge Voltage hosted by Floyd C Poynter

Released: 2019-03-20. Duration: 00:31:09. Flag: Clean.
Tags: automotive, battery, maintenance, charger.
Discussion on installing new Calcium battery into older vehicle and resulting maintenance issues.

hpr2772 :: My applications and software part 3 hosted by Tony Hughes AKA TonyH1212

Released: 2019-03-19. Duration: 00:09:45. Flag: Clean.
Tags: Software, applications, utilities.
A short show about the software I use in Linux Mint

hpr2771 :: Embedding hidden text in Djvu files hosted by klaatu

Released: 2019-03-18. Duration: 00:41:16. Flag: Clean.
Tags: pdf, ebook, bloat, djvu.
Part 2 of Klaatu's Djvu mini series

hpr2770 :: Navigating the maze of RPG books hosted by klaatu

Released: 2019-03-15. Duration: 00:31:13. Flag: Clean. Series: Tabletop Gaming.
Tags: book,rpg,game.
There are so many kinds of RPG books out there, where do you start? Klaatu tells all!

hpr2769 :: Quick Review of the AstroAI WH5000A Multimeter hosted by NYbill

Released: 2019-03-14. Duration: 00:24:15. Flag: Clean.
Tags: multimeter, electronics, test equipment, hardware review.
NYbill reviews, yet another, inexpensive multimeter.

hpr2768 :: Writing Web Game in Haskell - Planetary statuses hosted by tuturto

Released: 2019-03-13. Duration: 00:18:42. Flag: Clean. Series: Haskell.
Tags: haskell.
tuturto describes system for recording planetary statuses in their game

hpr2767 :: Djvu and other paperless document formats hosted by klaatu

Released: 2019-03-12. Duration: 00:32:15. Flag: Clean.
Tags: pdf, ebook, bloat, djvu.
A tutorial on how to read and generate djvu files

hpr2766 :: Disk enumeration on Linux hosted by klaatu

Released: 2019-03-11. Duration: 00:24:03. Flag: Clean.
Tags: fdisk,dmesg,lsblk,udisks.
Klaatu reviews the various commands used to enumerate drives on Linux

hpr2765 :: My YouTube Subscriptions #3 hosted by Ahuka

Released: 2019-03-08. Duration: 00:22:09. Flag: Clean. Series: YouTube Subscriptions.
Tags: YouTube, Channels, Subscriptions.
Part three of my list of subscribed channels

hpr2764 :: Personal password algorithms hosted by klaatu

Released: 2019-03-07. Duration: 00:40:44. Flag: Clean. Series: Information Underground.
Tags: password,security,algorithm,puzzle,cipher.
Is it possible to generate a unique password for every site? Klaatu tries.

hpr2763 :: Deepgeek explains SPF records hosted by klaatu

Released: 2019-03-06. Duration: 00:14:09. Flag: Clean. Series: Information Underground.
Tags: email,spf,mx,postfix,smtp.
Confused about SPF? Klaatu was. Here's Deepgeek's explanation.

hpr2762 :: What You Really Are hosted by lostnbronx

Released: 2019-03-05. Duration: 00:16:36. Flag: Clean. Series: Tabletop Gaming.
Tags: gaming, D&D, lostnbronx.
Lostnbronx looks back at his early gaming days.

hpr2761 :: HPR Community News for February 2019 hosted by HPR Volunteers

Released: 2019-03-04. Duration: 01:07:02. Flag: Explicit. Series: HPR Community News.
Tags: Community News.
HPR Volunteers talk about shows released and comments posted in February 2019

hpr2760 :: What is VNF hosted by JWP

Released: 2019-03-01. Duration: 00:07:25. Flag: Clean. Series: Networking.
Tags: Virtual network function,VNF,network functions virtualization,NFV.
A topic from the Open Networking conference in Amsterdam

hpr2759 :: Cleaning the Potentiometers on a Peavey Bandit 65 hosted by Jon Kulp

Released: 2019-02-28. Duration: 00:20:44. Flag: Clean.
Tags: Guitars, electronics, amplifiers, maintenance, repair.
I disassemble and clean the pots on my Peavey Bandit 65 to fix static in the knobs.

hpr2758 :: Haskell - Data types and database actions hosted by tuturto

Released: 2019-02-27. Duration: 00:42:46. Flag: Clean. Series: Haskell.
Tags: haskell, database.
Brief summary of how to declare your own datatypes in Haskell and how to store data in database

hpr2757 :: How to DM hosted by klaatu

Released: 2019-02-26. Duration: 00:44:54. Flag: Clean. Series: Tabletop Gaming.
Tags: rpg,dm,gm,game master,dungeon master,dnd.
Klaatu explains how to DM an RPG, and Lostnbronx demonstrates, step by step, how to build a dungeon

hpr2756 :: Bash Tips - 20 hosted by Dave Morriss

Released: 2019-02-25. Duration: 00:32:35. Flag: Explicit. Series: Bash Scripting.
Tags: Bash,array,delete,positional parameters.
Deleting arrays; positional and special parameters in Bash

hpr2755 :: My YouTube Subscriptions #2 hosted by Ahuka

Released: 2019-02-22. Duration: 00:22:09. Flag: Clean. Series: YouTube Subscriptions.
Tags: YouTube, Channels, Subscriptions.
Part two of my list of subscribed channels

hpr2754 :: Craigslist Scam Catch hosted by Edward Miro / c1ph0r

Released: 2019-02-21. Duration: 00:07:40. Flag: Explicit. Series: Privacy and Security.
Tags: craigslist, scam, con, social-engineering, puppy, dog, money, moneygram, infosec, cyber-security 101.
Helped a client avoid being scammed on Craigslist and wanted to share some tips to HPR.

hpr2753 :: Specific Settings In Storytelling hosted by lostnbronx

Released: 2019-02-20. Duration: 00:17:07. Flag: Clean. Series: Random Elements of Storytelling.
Tags: stories, storytelling, setting, lostnbronx.
Lostnbronx looks at why you might choose specific settings for your tales.

hpr2752 :: XSV for fast CSV manipulations - Part 2 hosted by b-yeezi

Released: 2019-02-19. Duration: 00:22:39. Flag: Clean.
Tags: csv,commandline,data.
Part 2 of my introduction to the XSV tool

hpr2751 :: Battling with English - part 3 hosted by Dave Morriss

Released: 2019-02-18. Duration: 00:13:42. Flag: Explicit.
Tags: grammar,spelling,punctuation,word misuse,English.
Misunderstandings about English grammar, spelling, punctuation, etc.

hpr2750 :: Windmill is on the Fritz hosted by Ken Fallon

Released: 2019-02-15. Duration: 00:04:30. Flag: Clean. Series: Hobby Electronics.
Tags: Fritzing, Reverse Engineering, LED.
Using Fritzing to help reverse engineer a circuit in a winter model village windmill

hpr2749 :: Lostnbronx and Klaatu commentary from episode 2743 hosted by klaatu

Released: 2019-02-14. Duration: 00:14:50. Flag: Clean.
Tags: rpg, game, gaming.
Thoughts about RPG character building, modern RPG play style compared to the Old School, and more

Older Shows

Get a full list of all our shows.