
IDEAS:
Using a cheap phone plan with SMS for authentication.
Mighty Text as a free SMS solution.
Google VoIP number for shared accounts.
Issues with SMS verification blocking VoIP numbers.
Avoiding carrier-specific number blocks.
Multiple SIM cards for cost-effective SMS.
Rooting a phone to manage apps.
Security concerns with third-party apps.
Limited data usage for minimal phone plans.
Challenges with app compatibility on rooted devices.
Short-term phone solutions for SMS needs.
Shared Google accounts for streamlined access.
Avoiding premium SMS services like $15/month plans.
Using Wi-Fi for data instead of cellular plans.
Importance of SMS for MFA (multi-factor authentication).
Transitioning from old phones to new setups.
Balancing convenience and cost in phone plans.
Reliance on SMS for banking and insurance access.
Difficulty finding non-blocked SMS verification options.
Preference for minimal, low-cost phone solutions.
RECOMMENDATIONS:
Use a shared Google account for SMS access.
Opt for a cheap phone plan with unlimited texting.
Try Mighty Text as a free SMS alternative.
Avoid premium SMS services with high fees.
Use Wi-Fi instead of cellular data for minimal plans.
Choose carrier numbers over VoIP for critical services.
Root a device to manage app settings.
Test SMS compatibility with banks and providers.
Consider multiple SIM cards for redundancy.
Prioritize SMS for MFA over other verification methods.
Monitor app updates for compatibility with rooted devices.
Select phones with flexible data plans.
Use downloaded content instead of streaming.
Check for SMS blockages with new services.
Explore low-cost phone options for minimal use.
Maintain backup SMS methods for emergencies.
Simplify phone setups to reduce costs.
Verify SMS support before switching providers.
Combine Wi-Fi and SMS for reliable connectivity.
Share accounts to streamline digital access.
Jul 31

Dave and Kevie are back with another HPR Beer Garden and this time they turn their attention to Belgian Blonde Ales. Kevie samples
Leffe Blonde
, whilst Dave opts for
La Chouffe
.
Connect with the guys on Untappd:
Dave
Kevie
The intro sounds for the show are used from:
https://freesound.org/people/mixtus/sounds/329806/
https://freesound.org/people/j1987/sounds/123003/
https://freesound.org/people/greatsoundstube/sounds/628437/
The next 3 beer styles to be reviewed:
DDH IPA
Amber Ale
Lager
Jul 30

Hi, this is Archer72 for another episode of Hacker Public Radio.
In this episode, the ARRL Field Days was in the past month, so I thought this would be a good time to highlight events in the US as well as around the world.
Field Day (amateur radio : edited on 4 June 2026, at 13:51)
Experience the power of ham radio at 2025 ARRL Field Day Harrison County Amateur Radio Club Jun 12, 2025
Updated Jun 17, 2025
Amateur Radio Club to host annual field day By Keith Clifford Harrison County Amateur Radio Club Jun 15, 2026
Harrison County Amateur Radio Club Field Day Jun 22, 2026
Preceding collage used with permission by Keith Clifford of the Harrison County Amateur Radio Club (K4HSN)
Jul 29

Links to a more in depth way to do the musique concrete method and
harsh noise wall (they don't use audacity, but it all can be done
on audacity, just gives you an idea what I'm talking about)
visual of generating noise on audacity (for harsh noise, you want
to have a larger amplitude or any thing that makes the noise
louder)
https://youtu.be/CkZS1C7JUmM?si=qGe7g94lrBE-fAh6
Musique Concrete
https://youtu.be/hvI0URwiCJc?si=l_7N3DASLu4Cw7qQ
Harsh Noise Wall
https://youtu.be/_zwgleyfBgQ?si=IgtK3ydM0queuHBX
Jul 28

C++ is a high-level, general-purpose programming language created
by Danish computer scientist Bjarne Stroustrup. First released in
1985 as an extension of the C programming language, adding
object-oriented (OOP) features, it has since expanded
significantly over time adding more OOP and other features
- from https://en.wikipedia.org/wiki/Main_Page
Serenity OS - https://serenityos.org
The C Programming Language, Kernighan and Ritchie -
https://colorcomputerarchive.com/repo/Documents/Books/The%20C%20Programming%20Language%20%28Kernighan%20Ritchie%29.pdf
C++ - https://en.wikipedia.org/wiki/C%2B%2B
The Ghost of Unix SVR4 - https://github.com/macsplit/unix_doc
Jul 27

In our sample game we look at playing as Austria and aiming for a Diplomatic Victory. And our focus is on puppeting City-States, but I misunderstood and instead of making a Diplomatic Victory easier, it makes it harder. I still managed to get my Diplomatic Victory, but a Science or Domination Victory would definitely have been easier in this scenario.
Playing Civilization V, Part 14
Now I am at turn 340, I just puppeted another City-State, and I have one more on the way. I have sent a large number of military units, both land and sea, to the City-States that are on Japan’s border. If he tries anything now he will likely regret it. Now I am starting to build things I had not bothered with before, like Granaries and Amphitheaters. I got a couple of Great Engineers, and used them to rush build Wonders. I am nearly finished puppeting all of the City-States, and my Happiness and Income are both quite healthy. I am in such good shape I started to build the World’s Fair, which I initally proposed then ignored.
At this point I only have one more City-State to puppet, then I will have puppeted every City-State in the game. So it is time to put my large income to use in other ways by giving gifts to the other players. I may want to get a few more votes on my side to get over the top in the World Leader vote when it happens. On turn 357 I completed the puppeting of all of the City-States in the game. Meanwhile, I am building up my Science and building Wonders as they become available. I didn’t build any in the early game because I had other priorities, but now I have a strong military, high income, and no other pressing needs. My score on the Leader Board is now double that of my nearest competitor which is still Japan. And their denunciation me of just expired with them taking no action.
I used a Great Engineer to rush build the Porcelain Tower, earning me another Great Scientist, which I then used to build another Academy. At this point it is mostly a slog to the finish. Since I was so dominant and so wealthy I could afford to pursue a couple of other options just in case. One was a Science victory, which looked like a possibility, though it would be close. I had to be very focused in my Science Research. The other option was a Culture victory, and I had dominated two other empires culturally without half trying, and I was generating Great Artists, Great Musicians, and Great Writers pretty rapidly. So I built Museums, then Archeologists, and grabbed every artifact I find to stuff into the Museums. But the final Victory came when I researched Globalization. This tech allows you to get an extra vote in a World Council for every Spy you send to another empire’s capital and designate as an Ambassador. I immediately sent my spies out (they had previously been in my cities doing counter-espionage since I had a tech lead). And a few turns later a vote for World Leader came up and I won.
This was my first time using Maria Theresa of Austria as my leader, and it was fun, but in the end puppeting all of the City-Staters actually made it harder to win a Diplomatic victory. In other games I have played, every City-State that was an ally was an extra vote in the World Council, and I assumed that making them puppets would mean I would get that many votes. But that didn’t happen. Of course, if I had read more carefully in the Civilization Wiki I would have realized this, because it says there very clearly that Austria is one of the worst Empires to pick if you are going for a Diplomatic victory. So the fact that I managed it anyway is nice. I think I actually could have done a Science victory as I had my Spaceship half-built when I won the Diplomatic Victory. But I hope this analysis of how I actually played this game will be helpful to someone else.
Links
https://www.palain.c
Jul 24

Hello, again. This is Trey.
Welcome to part 8 in my Cheap Yellow Display (CYD) Project series.
If you wish to catch up on earlier episodes, you can find them on my
HPR profile page
https://www.hackerpublicradio.org/correspondents/0394.html
It is hard to believe that I started this project and the HPR series to document it more than a year ago. Time flies. Life happens. I spent the last 8 months so focused on work related activities that I had to set the project aside. And once I set it aside, it was difficult to get back to again. The one time I tried, I found that my son's old Windows laptop, which I had commandeered to use for the project, was once and truly dead.
We live in a different world now than we did when I began this project. Today, everything is about AI – how it is changing our world, increasing efficiencies, and even displacing certain types of jobs. "Vibe coding" is transforming the way we make software, and now everyone is a developer.
Within my organization, we are all being strongly encouraged to learn more about AI and apply it in our daily work. We are blessed to have access to a wide range of training and to powerful tools which support the process. Several colleagues within my organization and outside my organization have recommended Claude Code -- for development, for organization, for brainstorming, and for much more. My role is not that of a developer, and I have had no need for Claude Code at work. There are plenty of other tools for me to use.
But at home, I thought... I could install Claude Code at home to experiment with and to learn. And then it hit me. I wonder if I could use Claude Code to help me with my stalled CYD project.
"Hello, my name is Trey, and I am a fraud."
OK. I don't think I am a fraud, but having never used such a powerful tool to help me code, I feel a little bit like a fraud, with Claude doing the work for me. Let's talk through what we did.
As I mentioned, I was unable to use the laptop on which I created the original GUI code. But no worries, because It was all on GitHub, right?
So, I began by trying to install Claude Code on one of my Ubuntu machines. That failed miserably, and all the instructions I found online recommended running it on Windows. So I transitioned to installing Claude Code on a freshly built Windows 10 system using some old hardware which will not support Windows 11. Surprisingly, It seems that Claude wants to run within Ubuntu on Windows Subsystem for Linux (WSL).
Once I went through all the hoops for installing and setting up my basic subscription, I got to work. I created a new directory to use for all my project files, and another one for Claude to write all its output files to.
Everything I have read and heard about using Claude Code for a project like this recommended beginning by using Claude to create the project plan. So my first prompt was as follows:
"I am building a project using an ESP32 cheap yellow display. The final goal is to have a device with a graphical user interface which will allow me store several text messages, each assigned to their own specific button. Then, when one of the buttons is pressed, the message will be converted into morse code, and the message will
Jul 23

01 Introduction
In this episode I will describe techniques for downloading podcasts using basic shell commands such as wget.
I will illustrate this using a bash script that can be used to download HPR podcasts.
Even if you do not have any interest in downloading your podcasts using this method, you may find some of the methods useful or interesting.
It is the principles that are discussed here that are important, rather than the implementation.
02
I realize that there are already a number of different podcast download programs available, including at least one written in bash.
However, you may feel that none of these suit how you wish to do things and want to create your own system tailored to your specific needs.
If so, then I hope the following is of some use to you.
If not, then you may still find some of the things discussed here to still be of interest.
Some of the subjects I cover include
wget to a user defined file name.
parsing xml with xmllint.
using inotifywait to trigger an action when a file is created or modified.
using notify-send to send a message to the notification area.
and
a way of allowing a cron job to send a message to the user interface.
03 Background
There has been an ongoing discussion in comments to some HPR episodes about problems downloading HPR podcast episodes.
Apparently some people have been experiencing problems with the way the episode URLs are structured.
04
I am afraid that I don't fully understand the nature of these problems, so I won't be addressing that problem directly.
Instead, I will present a bash script that I have written which can be used to download HPR podcasts.
This bash script can be run using cron to automatically fetch new HPR podcasts and save them to a designated directory.
This is a simplified version of a script that I have used for years to download HPR and other podcasts.
05
I won't try to read the full bash script out in this podcast, as that would be a bit dull to listen to.
I will instead describe what each section does and why I chose to do things that way.
Perhaps other people can offer suggestions of better ways to do things.
I will post the full bash script in the show notes.
06 Fetching Podcasts
The standard way of distributing podcasts is to publish an RSS feed containing URL links to the audio files.
RSS is a very long established and widely supported mechanism for this and other purposes.
An RSS feed is basically an XML document which can be accessed over HTTP.
These URLs contained in the RSS XML document can then be used to download the actual audio files, such as MP3 or OGG files.
07
Basically what we need to do is the following
• Download the RSS XML document.
• Extract the URL links to the audio files.
• Compare the list of these links to a previously saved list to see which ones are new and which ones are ones that we previously downloaded.
08
• Make a list of the new URLs.
• Go through this list of new URLs and download each of the new audio files.
• Check to see that we actually received the new audio file.
• Add the URLs of the files we successfully downloaded to our saved list of podcast URLs
09
In addition to this, we would like to have the above happen automatically in the background without our having to take any action on our own.
Jul 22

ether
This series is dedicated to exploring little-known—and occasionally useful—trinkets lurking in the dusty corners of UNIX-like operating systems.
I frequently find myself reaching for the
cut
utility when writing scripts to extract one piece of data from a line, or to select specific fields from a log file. While I am familiar with its counterpart,
paste
, I don't employ it very often because I don't typically need its functionality.
This perhaps has to do with the fact that I rarely work with text files containing lists. For shorter lists, I usually end up using a spreadsheet and for larger ones, a relational database. Both are valuable tools with their own strengths and weaknesses, but it is good to also know about standard utilities for working with lists. After uploading UNIX Curio #8 (
HPR episode 4657
), I felt like maybe I had been too dismissive of the
comm
utility in that episode and should talk more about tools that are useful when managing lists.
I don't frequently find myself using
paste
1
, but can explain how it works. Briefly, it is a rough opposite of
cut
—when given multiple files as arguments, it assembles the first line from each one separated by tabs, then the second line, and so on. Instead of tabs, a different delimiter can be chosen with the
-d
option. Another option is
-s
, which swaps rows and columns so that the contents of each named file would appear on one line. While
paste
itself doesn't qualify as a UNIX Curio in my opinion, there is one feature that does: a hyphen can be given as an argument multiple times. In this special case, the output is taken line by line from standard input, but is spread across as many columns as there are hyphens.
Example of using
paste
to turn the output of
ls
into columns. Because these columns are separated by tabs, they don't necessarily line up when a filename is eight or more characters long. The
-1
is not required for the second
ls
command since that behavior is implied when output isn't going to a terminal. The
-C
option to
ls
usually gives nicer-looking output on a terminal—also, it lists in ascending order down by column. (Most implementations default to
-C
when output goes to a terminal.) If you want items ascending along rows like the
paste
example does, try
ls -x
instead.
$ ls -1 /proc/net
anycast6
arp
bnep
connector
dev
dev_mcast
dev_snmp6
fib_trie
fib_triestat
hci
icmp
icmp6
if_inet6
igmp
igmp6
ip6_flowlabel
ip6_mr_cache
ip6_mr_vif
ip_mr_cache
ip_mr_vif
ip_tables_matches
ip_tables_names
[...35 more entries not shown...]
$ ls /proc/net | paste - - - -
anycast6 arp bnep connector
dev dev_mcast dev_snmp6 fib_trie
fib_triestat hci icmp icmp6
if_inet6 igmp igmp6 ip6_flowlabel
ip6_mr_cache ip6_mr_vif ip_mr_cache ip_mr_vif
ip_tables_matches ip_tables_names ip_tables_targets ipv6_route
l2cap mcfilter mcfilter6 netfilter
netlink netstat packet protocols
psched ptype raw raw6
rfcomm route rt6_stats rt_acct
rt_cache sco snmp snmp6
sockstat sockstat6
Jul 21

Show Notes
Episode Overview
Operator kicks off the episode feeling under the weather but shares a quick tip for making perfect egg drop soup before diving into his main project: diagnosing why his front-door security camera stopped sending alerts and recording events. What follows is a live-debugging session covering network config, script logging, Windows permission hacks, NTP time drift, and firmware flashing.
Key Topics & Breakdown
Egg Drop Soup Hack:
How to get that perfect ribbony texture by creating a boiling swirl before pouring in the eggs, plus broth-to-egg ratio tips.
Camera Setup & Network Config:
Using static DHCP via MAC address binding on a UniFi Dream Machine (UDM) for local domain resolution instead of hardcoding IPs.
Python & Cron Automation:
Running a custom Python script every 2 minutes to check for new recordings, parsing logs with
grep -v
, and navigating massive log files in
vi
.
Windows Troubleshooting Tangent:
Deleting the stubborn
Windows.old
folder using the TrustedInstaller service hack (
ExecTI.exe
) instead of taking ownership manually.
Time Sync & Firmware Quirks:
Discovering the camera's system clock was stuck in 2011/2026, causing missed events. Downloading firmware via a slow third-party link, renaming
.bin
to
.zip
, and extracting with 7-Zip.
Pre-Flash Backup Routine:
Exporting camera configuration before upgrading, storing it in Google Drive for searchable documentation, and clearing old log/trigger files to reset the event pipeline.
️ Tools & Techniques Mentioned
crontab
+ Python scripts for automated monitoring
grep -v
,
cat
,
tail
, and
vi
(line navigation with
:1000
)
Obsidian for note-taking & AI assistant integration
Firefox/Playwright for headless browser testing
Turbo Download Manager & Bolt Media Downloader for multi-threaded/sniffing downloads
7-Zip for archive extraction
Google Drive for searchable config backups
Resources & Links
Python API Script:
Uniview IPC3628SR Recording Checker
Camera Model:
IPC3628SR
(Uniview Wyze ISP Warm Light Deterrent Network Camera)
TrustedInstaller Run-as Tool:
ExecTI TrustedInstaller Runner
Quick Takeaways
Always verify NTP/time sync on IoT cameras before troubleshooting missed events or alerts.
Use
grep -v "noise"
to quickly filter out repetitive log entries when debugging automation scripts.
Windows system folders can be stubborn; running commands as
TrustedInstaller
bypasses hidden file locks without manual ownership changes.
Always export and back up device configs before flashing firmware, even if the upgrade seems straightforward.
Third-party download links often use temporary tokens or
.bin
wrappers; renaming to
.zip
and verifying with 7-Zip can save headaches.
Thanks for listening! Stay curious, keep your logs c
Jul 20
