Powered by RND
PodcastsTechnologyHacker Public Radio

Hacker Public Radio

Hacker Public Radio
Hacker Public Radio
Latest episode

Available Episodes

5 of 10
  • HPR4380: Isaac Asimov: The Rest of Asimov's Foundation Stories
    This show has been flagged as Clean by the host. Isaac Asimov began with the Foundation series, but then added to it. Early on, he wrote what are called the Empire novels which are prequels to the rise of Trantor. Then he decided to tie his Robot series into his Foundation series. So now we will take a look at these remaining novels. Links: https://en.wikipedia.org/wiki/Galactic_Empire_series https://en.wikipedia.org/wiki/The_Stars,_Like_Dust https://en.wikipedia.org/wiki/The_Currents_of_Space https://en.wikipedia.org/wiki/Pebble_in_the_Sky https://en.wikipedia.org/wiki/Robots_and_Empire https://www.palain.com/science-fiction/the-golden-age/the-rest-of-asimovs-foundation-story/ Provide feedback on this episode.
    --------  
  • HPR4379: Mapping Municipalities' Digital Dependencies
    This show has been flagged as Clean by the host. In this episode, I discuss my ongoing project aimed at mapping the dependencies municipalities have on major third-party digital services, particularly focusing on Microsoft and Google , given their dominance in the market. The aim of this research isn't about debating the quality of these products—it's assumed that with thousands of employees, these services meet most quality expectations. Instead, the focus is on the critical implications of widespread dependency and potential risks related to service interruptions or supply chain attacks. Why is this important? Supply Chain Attacks : High dependency means higher vulnerability to targeted disruptions. Business Continuity : Significant risks were illustrated by incidents such as the CrowdStrike outage in July 2024 , which forced Brussels Airport back to pencil-and-paper operations temporarily. My Research Approach: Primarily, I analyze the DNS MX records of municipalities: MX records typically reveal if mail services are hosted on Microsoft (Office 365/Exchange Online) or Google (Workspace). A high probability that using these providers for email also means municipalities likely depend on the respective cloud office suite (e.g., Word/Excel/SharePoint or Docs/Sheets/Drive). Preliminary Observations: Belgium, Finland, Netherlands : Over 70% of municipalities rely heavily on Microsoft mail services, a significant warning sign of dependency. Germany, Hungary : Fewer than 5% of municipalities use Microsoft or Google explicitly via MX records, though caution is necessary. Here’s why: Challenges Identified: Local MS Exchange Servers : Municipally hosted local installations aren't externally identifiable via MX records. Mail Proxies : Some municipalities use mail proxy services (spam/phishing filters) obscuring the actual mail service used behind proxy domains. Techniques Tested: SPF Records : Often reveal the underlying email service, though they may contain outdated information, lowering reliability. Telnet EHLO Commands : Municipalities commonly obscure their SMTP headers, limiting usefulness. Cloud Provider IP-Ranges : Investigating if mail servers run on Google, Amazon, or Azure infrastructure. Even if identified, this alone doesn't clarify if proprietary or replaceable services are used. TXT Records : Occasionally contain subscription keys or mail-related settings (e.g., MS subscriptions, Mailjet), but again, could be historical remnants. Unfortunately, none of these get to show me all of the third party services. Community Call: I'm reaching out to listeners and the broader community for ideas or techniques on reliably fingerprinting the actual digital service providers behind mail servers. Specifically: How to accurately determine if servers run Microsoft or Google services ? Any ideas to detect deployments of Nextcloud or similar open-source alternatives? Resources: Project Webpage : jurgen.gaeremyn.be/map.html Source Code : gitlab.com/jurgeng/mxcheck I'm looking forward to all your suggestions in the comments! Provide feedback on this episode.
    --------  
  • HPR4378: SQL to get the next_free_slot
    This show has been flagged as Clean by the host. SQL for find next available Episode Problem https://repo.anhonesthost.net/HPR/hpr_hub/issues/71 We need to get the next_free_slot, and this needs to take into account the Eps and reservations table. Eps table contain recorded and uploaded shows. reservations table reserve episodes that have not been recorded. There are existing queries to find the next free slot, but it does not include reservations. HPR SQL dump - https://hackerpublicradio.org/hpr.sql TLDR Create a list of all episode IDs from eps and reservations tables using SQL UNION Join the union list + 1 with the IDs from the eps and reservation tables WHERE clause to select rows in the union list +1 that are not in eps and not in reservations Order by and Limit to select the smallest Test Data Test data to make developing query easier. Simpler numbers so it is easier to spot patterns Same table and column names, and store them in a different database. Create the test data tables -- Create eps CREATE TABLE IF NOT EXISTS eps ( id INT, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS reservations ( ep_num INT, PRIMARY KEY (ep_num) ); Insert the test data -- Inserts INSERT INTO eps (id) VALUES (1001); INSERT INTO eps (id) VALUES (1002); INSERT INTO eps (id) VALUES (1003); INSERT INTO eps (id) VALUES (1004); INSERT INTO eps (id) VALUES (1011); INSERT INTO eps (id) VALUES (1021); INSERT INTO eps (id) VALUES (1031); INSERT INTO eps (id) VALUES (1041); INSERT INTO reservations (ep_num) VALUES (1004); INSERT INTO reservations (ep_num) VALUES (1005); INSERT INTO reservations (ep_num) VALUES (1006); INSERT INTO reservations (ep_num) VALUES (1010); INSERT INTO reservations (ep_num) VALUES (1016); Print the test data tables -- Episodes SELECT e.id as e_id FROM eps e order by e.id; +------+ | e_id | +------+ | 1001 | | 1002 | | 1003 | | 1004 | | 1011 | | 1021 | | 1031 | | 1041 | +------+ SELECT r.ep_num as r_id FROM reservations r; +------+ | r_id | +------+ | 1004 | | 1005 | | 1006 | | 1010 | | 1016 | +------+ Join Types UNION - combine results of 2 queries INNER - Only records that are in both tables LEFT - All the Results in the Left column and matching results in the Right Test data Join Examples In the test data, the ID 1004 is in both the episodes and reservations table. This will not occur in the real HPR database, but is useful to how different join types work Example queries with INNER , RIGHT , and LEFT joins. MariaDB [next_av]> SELECT e.id ,r.ep_num FROM eps e INNER JOIN reservations r ON e.id = r.ep_num; +------+--------+ | id | ep_num | +------+--------+ | 1004 | 1004 | +------+--------+ 1 row in set (0.001 sec) MariaDB [next_av]> SELECT e.id ,r.ep_num FROM eps e RIGHT JOIN reservations r ON e.id = r.ep_num; +------+--------+ | id | ep_num | +------+--------+ | 1004 | 1004 | | NULL | 1005 | | NULL | 1006 | | NULL | 1010 | | NULL | 1016 | +------+--------+ 5 rows in set (0.001 sec) MariaDB [next_av]> SELECT e.id ,r.ep_num FROM eps e LEFT JOIN reservations r ON e.id = r.ep_num; +------+--------+ | id | ep_num | +------+--------+ | 1001 | NULL | | 1002 | NULL | | 1003 | NULL | | 1004 | 1004 | | 1011 | NULL | | 1021 | NULL | | 1031 | NULL | | 1041 | NULL | +------+--------+ 8 rows in set (0.001 sec) Combine episode and reserved IDs Create a single list of IDs from both tables with UNION UNION combines the results of 2 queries SQL as keyword renames query results SELECT id as all_ids FROM eps UNION select ep_num FROM reservations ; +---------+ | all_ids | +---------+ | 1001 | | 1002 | | 1003 | | 1004 | | 1011 | | 1021 | | 1031 | | 1041 | | 1005 | | 1006 | | 1010 | | 1016 | +---------+ Join tables with the Union Left Joins Keep everything in the Left column Use the Union of all IDs and join with Eps and reservations The SQL will print a table of all the ids the eps and reservation columns will have the id if they match or NULL if there is not a match. select all_ids.id as all_ids ,eps.id as eps_ids , r.ep_num as reserved_ids FROM (SELECT id FROM eps UNION select ep_num FROM reservations) as all_ids LEFT JOIN eps ON all_ids.id = eps.id LEFT JOIN reservations r ON all_ids.id = r.ep_num ; +---------+---------+--------------+ | all_ids | eps_ids | reserved_ids | +---------+---------+--------------+ | 1001 | 1001 | NULL | | 1002 | 1002 | NULL | | 1003 | 1003 | NULL | | 1004 | 1004 | 1004 | | 1011 | 1011 | NULL | | 1021 | 1021 | NULL | | 1031 | 1031 | NULL | | 1041 | 1041 | NULL | | 1005 | NULL | 1005 | | 1006 | NULL | 1006 | | 1010 | NULL | 1010 | | 1016 | NULL | 1016 | +---------+---------+--------------+ Join with union plus 1 -- All Results Add an additional column of the union ids +1 Join the Union plus one list with the episodes and reservations Available episodes will have NULL in the eps and reservations column select all_ids.id as all_ids,all_ids.id+1 as all_ids_plus ,eps.id as eps_ids , r.ep_num as reserved_ids FROM (SELECT id FROM eps UNION select ep_num FROM reservations) as all_ids LEFT JOIN eps ON all_ids.id+1 = eps.id LEFT JOIN reservations r ON all_ids.id +1 = r.ep_num ORDER BY all_ids ; +---------+--------------+---------+--------------+ | all_ids | all_ids_plus | eps_ids | reserved_ids | +---------+--------------+---------+--------------+ | 1001 | 1002 | 1002 | NULL | | 1002 | 1003 | 1003 | NULL | | 1003 | 1004 | 1004 | 1004 | | 1004 | 1005 | NULL | 1005 | | 1005 | 1006 | NULL | 1006 | | 1006 | 1007 | NULL | NULL | | 1010 | 1011 | 1011 | NULL | | 1011 | 1012 | NULL | NULL | | 1016 | 1017 | NULL | NULL | | 1021 | 1022 | NULL | NULL | | 1031 | 1032 | NULL | NULL | | 1041 | 1042 | NULL | NULL | +---------+--------------+---------+--------------+ Add a WHERE clause Add a where clause to only print rows were eps and reservations are null The smallest number in the +1 column will be the next available select all_ids.id as all_ids,all_ids.id+1 as all_ids_plus ,eps.id as eps_ids , r.ep_num as reserved_ids FROM (SELECT id FROM eps UNION select ep_num FROM reservations) as all_ids LEFT JOIN eps ON all_ids.id+1 = eps.id LEFT JOIN reservations r ON all_ids.id +1 = r.ep_num WHERE eps.id is Null and r.ep_num is NULL ORDER BY all_ids ; +---------+--------------+---------+--------------+ | all_ids | all_ids_plus | eps_ids | reserved_ids | +---------+--------------+---------+--------------+ | 1006 | 1007 | NULL | NULL | | 1011 | 1012 | NULL | NULL | | 1016 | 1017 | NULL | NULL | | 1021 | 1022 | NULL | NULL | | 1031 | 1032 | NULL | NULL | | 1041 | 1042 | NULL | NULL | +---------+--------------+---------+--------------+ 6 rows in set (0.002 sec) Add a limit and only select the id Sort and select the 1st row select all_ids.id+1 as available_id FROM (SELECT id FROM eps UNION select ep_num FROM reservations) as all_ids LEFT JOIN eps ON all_ids.id+1 = eps.id LEFT JOIN reservations r ON all_ids.id +1 = r.ep_num WHERE eps.id is Null and r.ep_num is NULL ORDER BY available_id LIMIT 1 ; +--------------+ | available_id | +--------------+ | 1007 | +--------------+ Provide feedback on this episode.
    --------  
  • HPR4377: Password store and the pass command
    This show has been flagged as Clean by the host. Standard UNIX password manager Password management is one of those computing problems you probably don't think about often, because modern computing usually has an obvious default solution built-in. A website prompts you for a password, and your browser auto-fills it in for you. Problem solved. However, not all browsers make it very easy to get to your passwords store, which makes it complex to migrate passwords to a new system without also migrating the rest of your user profile, or to share certain passwords between different users. There are several good open source options that offer alternatives to the obvious defaults, but as a user of Linux and UNIX, I love a minimal and stable solution when one is available. The pass command is a password manager that uses GPG encryption to keep your passwords safe, and it features several system integrations so you can use it seamlessly with your web browser of choice. Install pass The pass command is provided by the PasswordStore project. You can install it from your software repository or ports collection. For example, on Fedora: $ sudo dnf install pass On Debian and similar: $ sudo apt install pass Because the word pass is common, the name of the package may vary, depending on your distribution and operating system. For example, pass is available on Slackware and FreeBSD as password-store. The pass command is open source, so the source code is available at git.zx2c4.com/password-store. Create a GPG key First, you must have a GPG key to use for encryption. You can use a key you already have, or create a new one just for your password store. To create a GPG key, use the gpg command along with the --gen-key option (if you already have a key you want to use for your password store, you can skip this step): $ gpg --gen-key Answer the prompts to generate a key. When prompted to provide values for Real name, Email, and Comment, you must provide a response for each one, even though GPG allows you to leave them empty. In my experience, pass fails to initialize when one of those values is empty. For example, here are my responses for purposes of this article: Real name: Tux Email: tux@example.com Comment: My first key This information is combined, in a different order, to create a unique GPG ID. You can see your GPG key ID at any time: $ gpg --list-secret-keys | grep uid uid: Tux (My first key) tux@example.com Other than that, it's safe to accept the default and recommended options for each prompt. In the end, you have a GPG key to serve as the master key for your password store. You must keep this key safe. Back it up, keep a copy of your GPG keyring on a secure device. Should you lose this key, you lose access to your password store. Initialize a password store Next, you must initialize a password store on your system. When you do, you create a hidden directory where your passwords are stored, and you define which GPG key to use to encrypt passwords. To initialize a password store, use the pass init command along with your unique GPG key ID. Using my example key: $ pass init "Tux (My first key) <tux@example.com>" You can define more than one GPG key to use with your password store, should you intend to share passwords with another user or on another system using a different GPG key. Add and edit passwords To add a password to your password store, use the pass insert command followed by the URL (or any string) you want pass to keep. $ pass insert example.org Enter the password at the prompt, and then again to confirm. Most websites require more than just a password, and so pass can manage additional data, like username, email, and any other field. To add extra data to a password file, use pass edit followed by the URL or string you saved the password as: $ pass edit example.org The first line of a password file must be the password itself. After that first line, however, you can add any additional data you want, in the format of the field name followed by a colon and then the value. For example, to save tux as the value of the username field on a website: myFakePassword123 username: tux Some websites use an email address instead of a username: myFakePassword123 email: tux@example.com A password file can contain any data you want, so you can also add important notes or one-time recovery codes, and anything else you might find useful: myFake;_;Password123 email: tux@example.com recovery email: tux@example.org recovery code: 03a5-1992-ee12-238c note: This is your personal account, use company SSO at work List passwords To see all passwords in your password store: $ pass list Password Store ├── example.com ├── example.org You can also search your password store: $ pass find bandcamp Search Terms: bandcamp └── www.bandcamp.com Integrating your password store Your password store is perfectly usable from a terminal, but that's not the only way to use it. Using extensions, you can use pass as your web browser's password manager. There are several different applications that provide a bridge between pass and your browser. Most are listed in the CompatibleClients section of passwordstore.org. I use PassFF, which provides a Firefox extension. For browsers based on Chromium, you can use Browserpass with the Browserpass extension. In both cases, the browser extension requires a "host application", or a background bridge service to allow your browser to access the encrypted data in your password store. For PassFF, download the install script: $ wget https://codeberg.org/PassFF/passff-host/releases/download/latest/install_host_app.sh Review the script to confirm that it's just installing the host application, and then run it: $ bash ./install_host_app.sh firefox Python 3 executable located at /usr/bin/python3 Pass executable located at /usr/bin/pass Installing Firefox host config Native messaging host for Firefox has been installed to /home/tux/.mozilla/native-messaging-hosts. Install the browser extension, and then restart your browser. When you navigate to a URL with an file in your password store, a pass icon appears in the relevant fields. Click the icon to complete the form. Alternately, a pass icon appears in your browser's extension tray, providing a menu for direct interaction with many pass functions (such as copying data directly to your system clipboard, or auto-filling only a specific field, and so on.) Password management like UNIX The pass command is extensible, and there are some great add-ons for it. Here are some of my favourites: pass-otp: Add one-time password (OTP) functionality. pass-update: Add an easy workflow for updating passwords that you frequently change. pass-import: Import passwords from chrome, 1password, bitwarden, apple-keychain, gnome-keyring, keepass, lastpass, and many more (including pass itself, in the event you want to migrate a password store). The pass command and the password store system is a comfortably UNIX-like password management solution. It stores your passwords as text files in a format that doesn't even require you to have pass installed for access. As long as you have your GPG key, you can access and use the data in your password store. You own your data not only in the sense that it's local, but you have ownership of how you interact with it. You can sync your password stores between different machines using rsync or syncthing, or even backup the store to cloud storage. It's encrypted, and only you have the key.Provide feedback on this episode.
    --------  
  • HPR4376: Re-research
    This show has been flagged as Explicit by the host. Research Tools Harvard Referencing - https://en.wikipedia.org/wiki/Parenthetical_referencing#Author%E2%80%93date_(Harvard_referencing) Google Notebook LM - https://notebooklm.google/ Google Scholar - https://scholar.google.co.uk/ Connected Papers - https://www.connectedpapers.com/ Zotero - https://www.zotero.org/ Databases SQL Databases - https://en.wikipedia.org/wiki/Relational_database NoSQL Databases - https://en.wikipedia.org/wiki/NoSQL Graph Databases - https://en.wikipedia.org/wiki/Graph_database Misc Borland Graphics Interface - https://en.wikipedia.org/wiki/Borland_Graphics_Interface Hough Transform - https://en.wikipedia.org/wiki/Hough_transform Joplin - https://joplinapp.org/ Provide feedback on this episode.
    --------  

More Technology podcasts

About Hacker Public Radio

Hacker Public Radio is an podcast that releases shows every weekday Monday through Friday. Our shows are produced by the community (you) and can be on any topic that are of interest to hackers and hobbyists.
Podcast website

Listen to Hacker Public Radio, How I AI and many other podcasts from around the world with the radio.net app

Get the free radio.net app

  • Stations and podcasts to bookmark
  • Stream via Wi-Fi or Bluetooth
  • Supports Carplay & Android Auto
  • Many other app features
Social
v7.18.2 | © 2007-2025 radio.de GmbH
Generated: 5/18/2025 - 1:56:30 AM