Player FM - Internet Radio Done Right
28 subscribers
Checked 8h ago
הוסף לפני ten שנים
תוכן מסופק על ידי HPR Volunteer and Hacker Public Radio. כל תוכן הפודקאסטים כולל פרקים, גרפיקה ותיאורי פודקאסטים מועלים ומסופקים ישירות על ידי HPR Volunteer and Hacker Public Radio או שותף פלטפורמת הפודקאסט שלהם. אם אתה מאמין שמישהו משתמש ביצירה שלך המוגנת בזכויות יוצרים ללא רשותך, אתה יכול לעקוב אחר התהליך המתואר כאן https://he.player.fm/legal.
Player FM - אפליקציית פודקאסט
התחל במצב לא מקוון עם האפליקציה Player FM !
התחל במצב לא מקוון עם האפליקציה Player FM !
HPR4333: A Radically Transparent Computer Without Complex VLSI
Manage episode 470887670 series 108988
תוכן מסופק על ידי HPR Volunteer and Hacker Public Radio. כל תוכן הפודקאסטים כולל פרקים, גרפיקה ותיאורי פודקאסטים מועלים ומסופקים ישירות על ידי HPR Volunteer and Hacker Public Radio או שותף פלטפורמת הפודקאסט שלהם. אם אתה מאמין שמישהו משתמש ביצירה שלך המוגנת בזכויות יוצרים ללא רשותך, אתה יכול לעקוב אחר התהליך המתואר כאן https://he.player.fm/legal.
TITLE A Radically Transparent Computer Without Complex VLSI VENUE 1st IEEE Conference on Secure and Trustworthy CyberInfrastructure for IoT and Microelectronics (SaTC 2025), Wright State University, February 25-27, 2025. This is a recording of the final rehearsal that occurred three hours before this invited talk. No slides were used. ABSTRACT Foreign adversaries have colonized America’s computers from at least 1986. Four decades later, online safety is the largest failure in the history of human engineering. Radical stewardship in cybersecurity would bring radical progress, but responsibility for losses will need to flow from the bottom up. The buck stops with victims, who must accept all blame for cyberattacks. Only then will people at risk properly vet the products and vendors they select. A leading challenge in stewardship is balancing the opaque, proprietary nature of VLSI complex logic with the owner’s need for complete control. Since these aspects are incompatible and owner control is essential, it’s necessary to design computers that avoid complex VLSI entirely. One such architecture, Dauug | 36, is being developed at Wright State University to deliver 36-bit computing, preemptive multitasking, paged virtual memory, and hundreds of opcodes, all without using a single microprocessor or anything like one. BIOGRAPHY Marc Abel is an engineer-scientist specializing in technology that supports civil rights, economic security, and geopolitical stability. He holds a 1991 B.S. in Engineering and Applied Science (focused on computer science) from Caltech, and a 2022 Ph.D. in Computer Science and Engineering from Wright State University. Marc is the sole inventor, architect, implementer, maintainer, documenter, and promoter of the Dauug | 36 open-source minicomputer for critical infrastructure. He is the original and still only author of Dauug | 36’s firmware, designer and implementer of Dauug | 36’s assembly language and assemblers, writer of several related software tools, especially open-source electronic design automation and simulation tools, and the sole author of Osmin, a real-time operating system (RTOS) kernel for the architecture. He is the writer of 200,000 words of system documentation, including his dissertation and its online continuation called The Dauug House.
…
continue reading
4432 פרקים
Manage episode 470887670 series 108988
תוכן מסופק על ידי HPR Volunteer and Hacker Public Radio. כל תוכן הפודקאסטים כולל פרקים, גרפיקה ותיאורי פודקאסטים מועלים ומסופקים ישירות על ידי HPR Volunteer and Hacker Public Radio או שותף פלטפורמת הפודקאסט שלהם. אם אתה מאמין שמישהו משתמש ביצירה שלך המוגנת בזכויות יוצרים ללא רשותך, אתה יכול לעקוב אחר התהליך המתואר כאן https://he.player.fm/legal.
TITLE A Radically Transparent Computer Without Complex VLSI VENUE 1st IEEE Conference on Secure and Trustworthy CyberInfrastructure for IoT and Microelectronics (SaTC 2025), Wright State University, February 25-27, 2025. This is a recording of the final rehearsal that occurred three hours before this invited talk. No slides were used. ABSTRACT Foreign adversaries have colonized America’s computers from at least 1986. Four decades later, online safety is the largest failure in the history of human engineering. Radical stewardship in cybersecurity would bring radical progress, but responsibility for losses will need to flow from the bottom up. The buck stops with victims, who must accept all blame for cyberattacks. Only then will people at risk properly vet the products and vendors they select. A leading challenge in stewardship is balancing the opaque, proprietary nature of VLSI complex logic with the owner’s need for complete control. Since these aspects are incompatible and owner control is essential, it’s necessary to design computers that avoid complex VLSI entirely. One such architecture, Dauug | 36, is being developed at Wright State University to deliver 36-bit computing, preemptive multitasking, paged virtual memory, and hundreds of opcodes, all without using a single microprocessor or anything like one. BIOGRAPHY Marc Abel is an engineer-scientist specializing in technology that supports civil rights, economic security, and geopolitical stability. He holds a 1991 B.S. in Engineering and Applied Science (focused on computer science) from Caltech, and a 2022 Ph.D. in Computer Science and Engineering from Wright State University. Marc is the sole inventor, architect, implementer, maintainer, documenter, and promoter of the Dauug | 36 open-source minicomputer for critical infrastructure. He is the original and still only author of Dauug | 36’s firmware, designer and implementer of Dauug | 36’s assembly language and assemblers, writer of several related software tools, especially open-source electronic design automation and simulation tools, and the sole author of Osmin, a real-time operating system (RTOS) kernel for the architecture. He is the writer of 200,000 words of system documentation, including his dissertation and its online continuation called The Dauug House.
…
continue reading
4432 פרקים
כל הפרקים
×H
Hacker Public Radio

This show has been flagged as Explicit by the host. Overview Several years ago I wrote a Bash script to perform a task I need to perform almost every day - find the newest file in a series of files. At this point I was running a camera on a Raspberry Pi which was attached to a window and viewed my back garden. I was taking a picture every 15 minutes, giving them names containing the date and time, and storing them in a directory. It was useful to be able to display the latest picture. Since then, I have found that searching for newest files useful in many contexts: Find the image generated by my random recipe chooser, put in the clipboard and send it to the Telegram channel for my family. Generate a weather report from wttr.in and send it to Matrix. Find the screenshot I just made and put it in the clipboard. Of course, I could just use the same name when writing these various files, rather than accumulating several, but I often want to look back through such collections. If I am concerned about such files accumulating in an unwanted way I write cron scripts which run every day and delete the oldest ones. Original script The first iteration of the script was actually written as a Bash function which was loaded at login time. The function is called newest_matching_file and it takes two arguments: A file glob expression to match the file I am looking for. An optional directory to look for the file. If this is omitted, then the current directory will be used. The first version of this function was a bit awkward since it used a for loop to scan the directory, using the glob pattern to find the file. Since Bash glob pattern searches will return the search pattern when they fail, it was necessary to use the nullglob (see references) option to prevent this, turning it on before the search and off afterwards. This technique was replaced later with a pipeline using the find command. Improved Bash script The version using find is what I will explain here. function newest_matching_file { local glob_pattern=${1-} local dir=${2:-$PWD} # Argument number check if [[ $# -eq 0 || $# -gt 2 ]]; then echo 'Usage: newest_matching_file GLOB_PATTERN [DIR]' >&2 return 1 fi # Check the target directory if [[ ! -d $dir ]]; then echo "Unable to find directory $dir" >&2 return 1 fi local newest_file # shellcheck disable=SC2016 newest_file=$(find "$dir" -maxdepth 1 -name "$glob_pattern" \ -type f -printf "%T@ %p\n" | sort | sed -ne '${s/.\+ //;p}') # Use printf instead of echo in case the file name begins with '-' [[ -n $newest_file ]] && printf '%s\n' "$newest_file" return 0 } The function is in the file newest_matching_file_1.sh , and it's loaded ("sourced", or declared) like this: . newest_matching_file_1.sh The '.' is a short-hand version of the command source . I actually have two versions of this function, with the second one using a regular expression, which the find command is able to search with, but I prefer this one. Explanation The first two lines beginning with local define variables local to the function holding the arguments. The first, glob_pattern is expected to contain something like screenshot_2025-04-*.png . The second will hold the directory to be scanned, or if omitted, will be set to the current directory. Next, an if statement checks that there are the right number of arguments, aborting if not. Note that the echo command writes to STDERR (using '>&2' ), the error channel. Another if statement checks that the target directory actually exists, and aborts if not. Another local variable newest_file is defined. It's good practice not to create global variables in functions since they will "leak" into the calling environment. The variable newest_file is set to the result of a command substitution containing a pipeline: The find command searches the target directory. Using -maxdepth 1 limits the search to the chosen directory and does not descend into sub-directories. The search pattern is defined by -name "$glob_pattern" Using -type f limits the search to files The -printf "%T@ %p\n" argument returns the file's last modification time as the number of seconds since the Unix epoch '%T@' . This is a number which is larger if the file is older. This is followed, after a space, by the full path to the file ( '%p' ), and a newline. The matching file names are sorted. Because each is preceded by a numeric time value, they will be sorted in ascending order of age. Finally sed is used to return the last file in the sorted list with the program '${s/.\+ //;p}' : The use of the -n option ensures that only lines which are explicitly printed will be shown. The sed program looks for the last line (using '$' ). When found the leading numeric time is removed with ' s/.\+ //' and the result is printed (with 'p' ). The end result will either be the path to the newest file or nothing (because there was no match). The expression '[[ -n $newest_file ]]' will be true if $newest_file variable is not empty, and if that is the case, the contents of the variable will be printed on STDOUT, otherwise nothing will be printed. Note that the script returns 1 (false) if there is a failure, and 0 (true) if all is well. A null return is regarded as success. Script update While editing the audio for this show I realised that there is a flaw in the Bash function newest_matching_file . This is in the sed script used to process the output from find . The sed commands used in the script delete all characters up to a space, assuming that this is the only space in the last line. However, if the file name itself contains spaces, this will not work because regular expressions in sed are greedy . What is deleted in this case is everything up to and including the last space. I created a directory called tests and added the following files: 'File 1 with spaces.txt' 'File 2 with spaces.txt' 'File 3 with spaces.txt' I then ran the find command as follows: $ find tests -maxdepth 1 -name 'File*' -type f -printf "%T@ %p\n" | sort | sed -ne '${s/.\+ //;p}' spaces.txt I adjusted the sed call to sed -ne '${s/[^ ]\+ //;p}' . This uses the regular expression: s/[^ ]\+ // This now specifies that what it to be removed is every non-space up to and including the first space. The result is: $ find tests -maxdepth 1 -name 'File*' -type f -printf "%T@ %p\n" | sort | sed -ne '${s/[^ ]\+ //;p}' tests/File 3 with spaces.txt This change has been propagated to the copy on GitLab . Usage This function is designed to be used in commands or other scripts. For example, I have an alias defined as follows: alias copy_screenshot="xclip -selection clipboard -t image/png -i \$(newest_matching_file 'Screenshot_*.png' ~/Pictures/Screenshots/)" This uses xclip to load the latest screenshot into the clipboard, so I can paste it into a social media client for example. Perl alternative During the history of this family of scripts I wrote a Perl version. This was originally because the Bash function gave problems when run under the Bourne shell, and I was using pdmenu a lot which internally runs scripts under that shell. #!/usr/bin/env perl use v5.40; use open ':std', ':encoding(UTF-8)'; # Make all IO UTF-8 use Cwd; use File::Find::Rule; # # Script name # ( my $PROG = $0 ) =~ s|.*/||mx; # # Use a regular expression rather than a glob pattern # my $regex = shift; # # Get the directory to search, defaulting to the current one # my $dir = shift // getcwd(); # # Have to have the regular expression # die "Usage: $PROG regex [DIR]\n" unless $regex; # # Collect all the files in the target directory without recursing. Include the # path and let the caller remove it if they want. # my @files = File::Find::Rule->file() ->name(qr/$regex/) ->maxdepth(1) ->in($dir); die "Unsuccessful search\n" unless @files; # # Sort the files by ascending modification time, youngest first # @files = sort {-M($a) <=> -M($b)} @files; # # Report the one which sorted first # say $files[0]; exit; Explanation This is fairly straightforward Perl script, run out of an executable file with a shebang line at the start indicating what is to be used to run it - perl . The preamble defines the Perl version to use, and indicates that UTF-8 (character sets like Unicode) will be acceptable for reading and writing. Two modules are required: Cwd : provides functions for determining the pathname of the current working directory. File::Find::Rule : provides tools for searching the file system (similar to the find command, but with more features). Next the variable $PROG is set to the name under which the script has been invoked. This is useful when giving a brief summary of usage. The first argument is then collected (with shift ) and placed into the variable $regex . The second argument is optional, but if omitted, is set to the current working directory. We see the use of shift again, but if this returns nothing (is undefined), the '//' operator invokes the getcwd() function to get the current working directory. If the $regex variable is not defined, then die is called to terminate the script with an error message. The search itself is invoked using File::Find::Rule and the results are added to the array @files . The multi-line call shows several methods being called in a "chain" to define the rules and invoke the search: file() : sets up a file search name(qr/$regex/) : a rule which applies a regular expression match to each file name, rejecting any that do not match maxdepth(1) : a rule which prevents the search from descending below the top level into sub-directories in($dir) : defines the directory to search (and also begins the search) If the search returns no files (the array is empty), the script ends with an error message. Otherwise the @files array is sorted. This is done by comparing modification times of the files, with the array being reordered such that the "youngest" (newest) file is sorted first. The <=> operator checks if the value of the left operand is greater than the value of the right operand, and if yes then the condition becomes true. This operator is most useful in the Perl sort function. Finally, the newest file is reported. Usage This script can be used in almost the same way as the Bash variant. The difference is that the pattern used to match files is a Perl regular expression. I keep this script in my ~/bin directory, so it can be invoked just by typing its name. I also maintain a symlink called nmf to save typing! The above example, using the Perl version, would be: alias copy_screenshot="xclip -selection clipboard -t image/png -i \$(nmf 'Screenshot_.*\.png' ~/Pictures/Screenshots/)" In regular expressions '.*' means "any character zero or more times". The '.' in '.png' is escaped because we need an actual dot character. Conclusion The approach in both cases is fairly simple. Files matching a pattern are accumulated, in the Bash case including the modification time. The files are sorted by modification time and the one with the lowest time is the answer. The Bash version has to remove the modification time before printing. This algorithm could be written in many ways. I will probably try rewriting it in other languages in the future, to see which one I think is best. References Glob expansion: Wikipedia article on glob patterns HPR shows covering glob expansion: Finishing off the subject of expansion in Bash (part 1) Finishing off the subject of expansion in Bash (part 2) GitLab repository holding these files: hprmisc - Miscellaneous scripts, notes, etc pertaining to HPR episodes which I have contributed Provide feedback on this episode .…
H
Hacker Public Radio

This show has been flagged as Explicit by the host. New hosts There were no new hosts this month. Last Month's Shows Id Day Date Title Host 4391 Mon 2025-06-02 HPR Community News for May 2025 HPR Volunteers 4392 Tue 2025-06-03 The Water is Wide, and the sheet music should be too Jezra 4393 Wed 2025-06-04 Journal like you mean it. Some Guy On The Internet 4394 Thu 2025-06-05 Digital Steganography Intro mightbemike 4395 Fri 2025-06-06 Second Life Lee 4396 Mon 2025-06-09 AI and Sangria operat0r 4397 Tue 2025-06-10 Transfer files from desktop to phone with qrcp Klaatu 4398 Wed 2025-06-11 Command line fun: downloading a podcast Kevie 4399 Thu 2025-06-12 gpg-gen-key oxo 4400 Fri 2025-06-13 Isaac Asimov: Other Asimov Novels of Interest Ahuka 4401 Mon 2025-06-16 hajime oxo 4402 Tue 2025-06-17 pinetab2 Brian in Ohio 4403 Wed 2025-06-18 How to get your very own copy of the HPR database norrist 4404 Thu 2025-06-19 Kevie nerd snipes Ken by grepping xml Ken Fallon 4405 Fri 2025-06-20 What did I do at work today? Lee 4406 Mon 2025-06-23 SVG Files: Cyber Threat Hidden in Images ko3moc 4407 Tue 2025-06-24 A 're-response' Bash script Dave Morriss 4408 Wed 2025-06-25 Lynx - Old School Browsing Kevie 4409 Thu 2025-06-26 H D R Ridiculous Monitor operat0r 4410 Fri 2025-06-27 Civilization V Ahuka 4411 Mon 2025-06-30 The Pachli project thelovebug Comments this month These are comments which have been made during the past month, either to shows released during the month or to past shows. There are 29 comments in total. Past shows There are 4 comments on 3 previous shows: hpr4375 (2025-05-09) " Long Chain Carbons,Eggs and Dorodango? " by operat0r . Comment 4 : Torin Doyle on 2025-06-06: "Reply to @Bob" hpr4378 (2025-05-14) " SQL to get the next_free_slot " by norrist . Comment 1 : Torin Doyle on 2025-06-12: "Cheers for this." hpr4388 (2025-05-28) " BSD Overview " by norrist . Comment 4 : Henrik Hemrin on 2025-06-02: "Learned more about BSD." Comment 5 : norrist on 2025-06-02: "Additional info for OpenBSD Router" This month's shows There are 25 comments on 10 of this month's shows: hpr4391 (2025-06-02) " HPR Community News for May 2025 " by HPR Volunteers . Comment 1 : Torin Doyle on 2025-06-06: "Very disappointed." Comment 2 : Ken Fallon on 2025-06-06: "Thanks for your feedback." Comment 3 : Torin Doyle on 2025-06-09: "Reply to Ken [Comment 2]" Comment 4 : norrist on 2025-06-09: "Watch the Queue for a show about how to find all the comments" Comment 5 : Torin Doyle on 2025-06-10: "Comment #3 typo." Comment 6 : Torin Doyle on 2025-06-11: "Reply to Comment #4 by norrist" Comment 7 : Torin Doyle on 2025-06-11: "Got the link." hpr4394 (2025-06-05) " Digital Steganography Intro " by mightbemike . Comment 1 : Henrik Hemrin on 2025-06-05: "Fascinating topic" Comment 2 : oxo on 2025-06-05: "Good show! " hpr4395 (2025-06-06) " Second Life " by Lee . Comment 1 : Antoine on 2025-06-08: "Brings philosophical thoughts" hpr4397 (2025-06-10) " Transfer files from desktop to phone with qrcp " by Klaatu . Comment 1 : Laindir on 2025-06-18: "The perfect kind of recommendation" hpr4398 (2025-06-11) " Command line fun: downloading a podcast " by Kevie . Comment 1 : Henrik Hemrin on 2025-06-11: "Tempted to have fun" Comment 2 : Ken Fallon on 2025-06-22: "Personal message to redhat (nprfan)" hpr4403 (2025-06-18) " How to get your very own copy of the HPR database " by norrist . Comment 1 : Torin Doyle on 2025-06-18: "Appreciated!" Comment 2 : Torin Doyle on 2025-06-18: "Database size." Comment 3 : norrist on 2025-06-18: "Also an SQLite version" Comment 4 : Torin Doyle on 2025-06-25: "Not able to use database to find my comments." hpr4404 (2025-06-19) " Kevie nerd snipes Ken by grepping xml " by Ken Fallon . Comment 1 : Henrik Hemrin on 2025-06-22: "More to digest" Comment 2 : Alec Bickerton on 2025-06-29: "Shorter version" Comment 3 : Alec Bickerton on 2025-06-29: "Shorter version" Comment 4 : Alec Bickerton on 2025-06-29: "XML parsing without xmlstarlet" hpr4405 (2025-06-20) " What did I do at work today? " by Lee . Comment 1 : Dave Morriss on 2025-06-25: "Thanks for bringing us along..." hpr4406 (2025-06-23) " SVG Files: Cyber Threat Hidden in Images " by ko3moc . Comment 1 : oxo on 2025-06-23: "Interesting! " Comment 2 : ko3moc on 2025-06-24: "response " hpr4408 (2025-06-25) " Lynx - Old School Browsing " by Kevie . Comment 1 : Henrik Hemrin on 2025-06-29: "Review ALT texts" Mailing List discussions Policy decisions surrounding HPR are taken by the community as a whole. This discussion takes place on the Mailing List which is open to all HPR listeners and contributors. The discussions are open and available on the HPR server under Mailman . The threaded discussions this month can be found here: https://lists.hackerpublicradio.com/pipermail/hpr/2025-June/thread.html Events Calendar With the kind permission of LWN.net we are linking to The LWN.net Community Calendar . Quoting the site: This is the LWN.net community event calendar, where we track events of interest to people using and developing Linux and free software. Clicking on individual events will take you to the appropriate web page. Provide feedback on this episode .…
This show has been flagged as Clean by the host. After updating the firmware on my Sony Noise Cancelling Headset, and upgrading to Fedora 40 , my A2DP ) profiles stopped working. I did a quick search and found someone with the same issue and it would be fixed in a Kernel upgrade. Common enough on a bleeding edge that is Fedora, however as the months moved on and the kernel upgraded, the problem remained. I tried to implement workarounds several times but eventually came across this passage from hank aka hankuoffroad on the Fedora Forums This is a known behavior when using Bluetooth audio on Linux on hands-free mode: you cannot use A2DP for high-quality audio output while simultaneously using the Bluetooth microphone via HSP/HFP, due to profile limitations in the Bluetooth specification and current Linux audio stack. I knew this of course, but my Sony WH-CH700N Wireless Noise Cancelling Headphones don't have a microphone. ... Hold on how does Noise Cancelling work exactly again ? Active noise control (ANC), also known as noise cancellation (NC), or active noise reduction (ANR), is a method for reducing unwanted sound by the addition of a second sound specifically designed to cancel the first Wikipedia If the first is the background noise, it needs a microphone to capture it so it can be inverted. Ah ha...I had recently also disabled my Zoom H2v2 as it was now sometimes acting as a speaker. So presumably pipewire tries to find any microphone on the system, when it cant find the best one it will resort to the one used for noise canceling in the headset. Once the headset is been used for audio in as well, then there isn't enough bandwidth to do high definition audio, so you end up with the low quality two way profiles. Would the solution be as easy as enabling a proper microphone . . . . Provide feedback on this episode .…
H
Hacker Public Radio

This show has been flagged as Clean by the host. Having purchased a new cable bag from Bellroy at the start of the year, Kevie shares his thoughts on the Bellroy Travel Kit . Provide feedback on this episode .
This show has been flagged as Clean by the host. If you go to the system settings in the main menu for KDE and scroll down, you can get to shortcuts and under shortcuts, there is a thing called custom shortcuts, and you can do anything you want in here. Provide feedback on this episode .
This show has been flagged as Explicit by the host. The program starts with a brief trailer, presenting the story, before starting the full audiodrama... I hope you have a good show, thanks in advance for listening. References (some): LIANG, Jiashuo. A History of Japan’s Unit 731 and Implications for Modern Biological Warfare. Advances in Social Science, Education and Humanities Research, v. 673. Atlantis Press, 2022. PBS. The Living Weapon: Shiro Ishii. Link: https://www.pbs.org/wgbh/americanexperience/features/weapon-biography-shiro-ishii . Accessed: January 2025. RIDER, Dwight R. Japan’s Biological and Chemical Weapons Programs; War Crimes and Atrocities – Who’s Who, What’s What, Where’s Where. 1928 – 1945. 3rd ed., 2018 [“In Process” version]. Credits of audio used — in order of appearance (or “listenance”): Kulakovka / Pixabay – Lost in Dreams (abstract chill downtempo cinematic future beats). BBC Sound Effects – Aircraft: Beaufighters - Take off. (Bristol Beaufighter, World War II); Army: Parade Ground Manoeuvres - Platoon strolls single-file on parade ground; Weather: Snow - Blizzard - heard inside house, with banging shutters; Footsteps In Snow - Footsteps in snow, 3 men departing; Water - Filling metal bucket from pond and pouring water on to concrete. florianreichelt / Freesound ¬– quick woosh. Thalamus_Lab / Freesound – Vertical Noise_Chinese Folk Duo Decay. neolein / Freesound – Mystic chinese guzheng. BBC Sound Effects again – World War 2 - Enemy artillery (World War II actuality) - 1975 (500S); Aircraft: Beaufighters - Exterior, steep climb. (Bristol Beaufighter, World War II). JamesFarrell_97 / Freesound – Game Theme. Luke100000 / Freesound – turning old pages. BBC Sound Effects – Sirens & Gunfire - World War II Air Raid Siren, German, all clear sounded. Gvidon / Pixabay – Spinning Head. * If you'd like the script to read (along with a few other things, like the Audacity project), you can obtain the text at the production's page on Archive.org: https://archive.org/details/the-prisioner-of-unit-731-audiodrama-final * As a post-show extra: you can listen to the producer's motivation for producing this story on ep. 4313. hpr4313 :: Why I made a 1-episode podcast about a war story: https://hackerpublicradio.org/eps/hpr4313/index.html Provide feedback on this episode .…
H
Hacker Public Radio

This show has been flagged as Clean by the host. In this episode Dave and Kevie chat with Nik from the Pachli project. Pachli is a free/open-source Mastodon/Fediverse client for Android. We talk in depth about Nik's background, Pachli's name and origin, and the motivation for creating another client for the Fediverse. Also discussed is Pachli's association with the Nivenly Foundation , and how users and developers can contribute to the project as a whole. With thanks to Nik for his time and candor. Fediverse: @nikclayton@mastodon.social Fediverse: @pachli@mastodon.social Email: team@pachli.app Website: pachli.app GitHub: pachli-android Provide feedback on this episode .…
This show has been flagged as Clean by the host. Civilization V, released in 2010, was a further evolution of the franchise that added interesting new features. We introduce it in this episode. Links: https://en.wikipedia.org/wiki/Jon_Shafer https://civilization.fandom.com/wiki/Production_(Civ5) https://civilization.fandom.com/wiki/Happiness_(Civ5) https://www.youtube.com/watch?v=xgRIdcWq_fs https://www.youtube.com/watch?v=rh6hXzW_GyA https://www.youtube.com/watch?v=DbK82-u08dw https://www.youtube.com/watch?v=Hyv3qJpMNIs https://www.youtube.com/watch?v=Qgc8ZaShkR4 https://www.youtube.com/watch?v=Wy6AoOQ136Y https://www.youtube.com/watch?v=q7VW-rGvfrs https://www.youtube.com/watch?v=xypYpI4UiEc https://www.youtube.com/watch?v=I__9ZlOUG4E https://www.youtube.com/watch?v=Z3x3P8gsCFA https://www.palain.com/gaming/civilization-v/ Provide feedback on this episode .…
H
Hacker Public Radio

This show has been flagged as Clean by the host. Never fan of duel monitors Mother inlaw had a better monitor then me https://slickdeals.net 4:3, 16:9, 21:9 (Ratio calculator) Samsung 49" Class Odyssey G95C DQHD 240Hz Curved Gaming Monitor LS49CG95DENXZA US $646.49 posture / arms out / screen position / mouse shoulder For car sim and gaming not for DEV Virtual Monitor for Display Port connections https://github.com/roshkins/IddSampleDriver HDR profiles for windows HDR calibration https://github.com/dylanraga/win11hdr-srgb-to-gamma2.2-icm avsforum HDR10 test patterns set https://www.avsforum.com/threads/hdr10-test-patterns-set.2943380/ Set and Forget HDR on Win11. Works for Black Myth Wukong. Sdr Hdr Trick https://www.youtube.com/watch?v=EPUKW3xLTNM Talk about Gameplay / Lighting /HDR / Bright High contrast https://github.com/freeload101/SCRIPTS/blob/6059ce43696e3c8101926da7959bebafbd0ab3b6/AutoHotkey/C0ffee%20Anti%20Idle%20v2.ahk#L130 SUMMARY The presenter discusses configuring monitor settings for development, emphasizing HDR calibration and multi-monitor productivity. IDEAS Calibrating a monitor's HDR settings can significantly improve image quality by adjusting brightness and color. Using HDR (High Dynamic Range) enhances the visual experience by improving contrast and color accuracy. Adjusting black levels and brightness helps in achieving optimal visibility for both bright and dark scenes. The calibration of HDR settings involves fine-tuning various parameters like gamma, whites, and blacks. Multi-monitor setups can enhance productivity by allowing more efficient workspace organization. Curved monitors may benefit development tasks by providing a larger visual area without needing multiple displays. Managing dual monitors requires spatial awareness to efficiently switch focus between screens. Windows' snapping features help in organizing windows on multi-monitor setups, enhancing workflow efficiency. The presenter finds the transition from dual monitors to a single large curved monitor advantageous for productivity. A larger screen real estate reduces the need for physical separation of workspaces, easing multitasking. QUOTES "I will be looking at calibrating my monitor's HDR settings." "Let me know if you have any questions or suggestions in regards to these videos..." "HDR is an incredible technology that allows us to see better contrast and colors on our screens." "That way we can achieve a much more dynamic range of colors while playing games and watching media on our TVs, computer monitors, phones, etc." "It will be a bit different between calibrating a normal monitor with SDR to a HDR-enabled display." "So if the blacks are too bright then you won't really see the black levels as well." "The idea is that your brightest whites should be at 100% and your darkest blacks should be around 0%." "With this being said, I've never had a lot of luck with using my Windows HDR settings before." "A lot of people say don't buy a curved monitor for production stuff." "And now I have like basically three monitors." RECOMMENDATIONS Calibrate your monitor's HDR settings to enhance color and contrast. Adjust brightness, gamma, whites, and blacks for optimal visibility in various lighting conditions. Utilize Windows snapping features for efficient window management on multi-monitor setups. Consider transitioning to a single curved monitor for improved productivity and workspace real estate. Familiarize yourself with the tabbing system to ensure input is directed to the correct window. Experiment with panel sizes in your multi-monitor setup to find a configuration that suits your workflow. Ensure proper calibration of both SDR and HDR displays to achieve the best visual experience. Adjust black levels so they are not too bright, maintaining clear visibility of darker scenes. Set whites to 100% for better representation of bright areas in images and videos. Explore different monitor configurations to determine what enhances your productivity the most. ONE SENTENCE SUMMARY The presenter shares insights on optimizing HDR monitor settings and maximizing productivity with multi-monitor setups for development tasks. Provide feedback on this episode .…
H
Hacker Public Radio

This show has been flagged as Clean by the host. Kevie , from the TuxJam podcast, takes a look at the Lynx command line browser and briefly discusses it's uses and if it still has a place in our modern times. Some Useful Hot-keys: g to go to a specific website m goes to your start page (Main screen is what Lynx calls it) o for options h for help p for print q to quit program / search for text on a page Navigation < previous page > forward page up and down move between links on the page. Down or left will also cancel a command if pressed accidentally. Pg Up and Pg Down scroll up or down a whole screen at a time. ctrl n (down or next) and ctrl p (up or previous) will move the page up and down a couple of lines a will add the current page to the bookmarks list v views the list of bookmarks , open the current page in another browser G displays the URL and allows editing ctrl L reloads the current page Some Basic Config Edits: Edit the file /etc/lynx/lynx.cfg (You will need to used sudo privileges to edit a system file) To change the starting page go to Line 111 and add STARTFILE:YOUR_CHOSEN_PAGE_URL I used https://duckduckgo.com/lite Don't forget to comment out the default one at line 105 To change the browser to open a link, go to Line 3141 and add EXTERNAL:http:BROSWER_LAUNCH_COMMAND %s:TRUE To use the default browser on modern Linux systems add xdg-open Provide feedback on this episode .…
H
Hacker Public Radio

Introduction On 2025-06-19 Ken Fallon did a show, number 4404 , responding to Kevie's show 4398 , which came out on 2025-06-11. Kevie was using a Bash pipeline to find the latest episode in an RSS feed, and download it. He used grep to parse the XML of the feed. Ken's response was to suggest the use of xmlstarlet to parse the XML because such a complex structured format as XML cannot reliably be parsed without a program that "understands" the intricacies of the format's structure. The same applies to other complex formats such as HTML, YAML and JSON. In his show Ken presented a Bash script which dealt with this problem and that of the ordering of episodes in the feed. He asked how others would write such a script, and thus I was motivated to produce this response to his response! Alternative script My script is a remodelling of Ken's, not a completely different solution. It contains a few alternative ways of doing what Ken did, and a reordering of the parts of his original. We will examine the changes in this episode. Script #!/bin/bash # Original (c) CC-0 Ken Fallon 2025 # Modified by Dave Morriss, 2025-06-14 (c) CC-0 podcast="https://tuxjam.otherside.network/feed/podcast/" # [1] while read -r item do # [2] pubDate="${item%;*}" # [3] pubDate="$( \date --date="${pubDate}" --universal +%FT%T )" # [4] url="${item#*;}" # [5] echo "${pubDate};${url}" done < <(curl --silent "${podcast}" | \ xmlstarlet sel --text --template --match 'rss/channel/item' \ --value-of 'concat(pubDate, ";", enclosure/@url)' --nl - ) | \ sort --numeric-sort --reverse | \ head -1 | \ cut -f2 -d';' | wget --quiet --input-file=- # [6] I have placed some comments in the script in the form of '# [1]' and I'll refer to these as I describe the changes in the following numbered list. Note: I checked, and the script will run with the comments, though they are only there to make it easier to refer to things. The format of the pipeline is different. It starts by defining a while loop, but the data which the read command receives comes from a process substitution of the form '<(statements)' (see the process substitution section of "hpr2045 :: Some other Bash tips" ). I have arranged the pipeline in this way because it's bad practice to place a while in a pipeline, as discussed in the show: hpr3985 :: Bash snippet - be careful when feeding data to loops . (I added -r to the read because shellcheck , which I run in the vim editor, nagged me!) The lines coming from the process substitution are from running curl to collect the feed, then using xmlstarlet to pick out the pubDate field of the item, and the url attribute of the enclosure field returning them as two strings separated by a semicolon ( ';' ). This is from Ken's original code. Each line is read into the variable item , and the first element (before the semicolon) is extracted with the Bash expression "${item%;*}" .…
Out of nowhere, my Firefox browser on my Mac mini started automatically adding every page I visited to my bookmarks. At first, I thought it was a bug after recent update —maybe a misconfigured setting or similar. But when I searched for a fix, Google suggested something alarming: Scan for malware. And guess what? The source of my trouble turned out to be an 4 SVG files hiding malicious code. That’s right—those innocent-looking vector graphics files we use every day for logos, icons, and web design? They can secretly carry malware. In my case those were the files, a logos of reputable delivery companies like deliveroo and JustEat which I have downloaded while I was updating a website for my client. Today, we’re breaking down how SVG files are being weaponized, why they’re so effective, and how to protect yourself. example of svg file <?xml version="1.0"?> <svg xmlns="http://www.w3.org/2000/svg" width="120" height="160" viewBox="0 0 120 160"> <!-- Animated Bodhi Leaf --> <path id="bodhi-leaf" d="M60 10 Q30 40 20 80 Q15 120 60 150 Q105 120 100 80 Q90 40 60 10 Z" stroke="#1E5631" stroke-width="2"> <animate attributeName="fill" values="white;#FFD700;#2E8B57;#4682B4;#FF0000;#800080;#808080;black;white" dur="8s" repeatCount="indefinite"/> </path> <!-- Static veins (contrast with leaf) --> <path d="M60 10 L60 150" stroke="#1E5631" stroke-width="1.5"/> <g stroke="#1E5631" stroke-width="1"> <path d="M60 30 Q45 35 40 50"/> <path d="M60 30 Q75 35 80 50"/> <path d="M60 60 Q40 70 35 90"/> <path d="M60 60 Q80 70 85 90"/> <path d="M60 90 Q50 100 45 120"/> <path d="M60 90 Q70 100 75 120"/> </g> </svg>…
H
Hacker Public Radio

This is about developing Visual Basic classes for a web application. The classes access an SQL Server database via Stored Procedures. Tests.vb Private Sub ResourceTypeTests() ResourceTypeAddTest() ResourceTypeGetTest() End Sub Private Sub ResourceTypeAddTest() Dim fake As New Fake Console.WriteLine("Adding resource type") Console.WriteLine() Dim objResourceType As New ResourceType With { .ResourceTypeID = 0, .ResourceTypeName = fake.Noun } OutputResourceType(objResourceType) Dim ResourceTypeID As Integer = objResourceType.Add() Console.WriteLine("Added Resource Type ID " & ResourceTypeID) Console.WriteLine() Console.WriteLine("Modifying resource type with ID " & ResourceTypeID) Console.WriteLine() fake = New Fake With objResourceType .ResourceTypeID = ResourceTypeID .ResourceTypeName = fake.Noun End With Console.WriteLine("Modification") OutputResourceType(objResourceType) Dim newResourceTypeID As Integer = objResourceType.Add() Console.WriteLine("Modified ResourceTypeID " & newResourceTypeID) Console.WriteLine() End Sub Private Sub ResourceTypeGetTest() Console.WriteLine("Fetching resource types") Console.WriteLine() Dim objResourceType As New ResourceType() Dim ResourceTypeList As List(Of ResourceType) = objResourceType.GetResourceTypes() For Each ResourceType As ResourceType In ResourceTypeList OutputResourceType(ResourceType) Next End Sub Private Sub OutputResourceType(ResourceType As ResourceType) Console.WriteLine("Resource Type ID " & ResourceType.ResourceTypeID) Console.WriteLine("Resource Type Name " & ResourceType.ResourceTypeName) Console.WriteLine() End Sub ResourceType.vb Public Class ResourceType Private m_ResourceTypeID As Integer Private m_ResourceTypeName As String Private ReadOnly dataFields As New List(Of String) From { "ResourceTypeID", "ResourceTypeName" } Private ReadOnly objFields = dataFields Dim objGlobals As New Globals Dim _ConnectionString As String = objGlobals.getConnectionString() Property ResourceTypeID As Integer Get ResourceTypeID = m_ResourceTypeID End Get Set(value As Int32) m_ResourceTypeID = value End Set End Property Property ResourceTypeName As String Get ResourceTypeName = m_ResourceTypeName End Get Set(value As String) m_ResourceTypeName = value End Set End Property Public Function Add() As Int32 Dim ReturnValue As Int32 Try ReturnValue = StoredProcOutInt( _ConnectionString, "dbo.ResourceType_Add", Me, dataFields, objFields, "NewResourceTypeID" ) Catch ex As Exception ErrorRecorder("Resource.Add", ex.Message, ex.Data.ToString) ReturnValue = 0 End Try Return ReturnValue End Function Public Function GetResourceTypes() As List(Of ResourceType) Dim ObjResourceTypes As New List(Of ResourceType) Try StoredProc(Of ResourceType)( _ConnectionString, "dbo.ResourceType_Get", dataFields, objFields, ObjResourceTypes ) Catch ex As Exception ErrorRecorder("ResourceType.GetResourceTypes", ex.Message, ex.Data.ToString) End Try Return ObjResourceTypes End Function End Class ResourceType_Add.sql SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROCEDURE [dbo].[ResourceType_Add] @ResourceTypeID INT, @Resou…
H
Hacker Public Radio

More Command line fun: downloading a podcast In the show hpr4398 :: Command line fun: downloading a podcast Kevie walked us through a command to download a podcast. He used some techniques here that I hadn't used before, and it's always great to see how other people approach the problem. Let's have a look at the script and walk through what it does, then we'll have a look at some "traps for young players" as the EEVBlog is fond of saying. Analysis of the Script wget `curl https://tuxjam.otherside.network/feed/podcast/ | grep -o 'https*://[^"]*ogg' | head -1` It chains four different commands together to "Save the latest file from a feed". Let's break it down so we can have checkpoints between each step. I often do this when writing a complex one liner - first do it as steps, and then combine it. The curl command gets https://tuxjam.otherside.network/feed/podcast/ . To do this ourselves we will call curl https://tuxjam.otherside.network/feed/podcast/ --output tuxjam.xml , as the default file name is index.html. This gives us a xml file, and we can confirm it's valid xml with the xmllint command. $ xmllint --format tuxjam.xml >/dev/null $ echo $? 0 Here the output of the command is ignored by redirecting it to /dev/null Then we check the error code the last command had. As it's 0 it completed sucessfully. Kevie then passes the output to the grep search command with the option -o and then looks for any string starting with https followed by anything then followed by two forward slashes, then -o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line We can do the same with. I was not aware that grep defaulted to regex, as I tend to add the --perl-regexp to explicitly add it. grep --only-matching 'https*://[^"]*ogg' tuxjam.xml http matches the characters http literally (case sensitive) s* matches the character s literally (case sensitive) Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] : matches the character : literally / matches the character / literally / matches the character / literally [^"]* match a single character not present in the list below Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] " a single character in the list " literally (case sensitive) ogg matches the characters ogg literally (case sensitive) When we run this ourselves we get the following $ grep --only-matching 'https*://[^"]*ogg' tuxjam.xml https://archive.org/download/tuxjam-121/tuxjam_121.ogg https://archive.org/download/tuxjam-120/TuxJam_120.ogg https://archive.org/download/tux-jam-119/TuxJam_119.ogg https://archive.org/download/tuxjam_118/tuxjam_118.ogg https://archive.org/download/tux-jam-117-uncut/TuxJam_117.ogg https://tuxjam.otherside.network/tuxjam-115-ogg https://archive.org/download/tuxjam_116/tuxjam_116.ogg https://tuxjam.otherside.network/tuxjam-115-ogg https://tuxjam.otherside.network/tuxjam-115-ogg https://t…
Get your own copy of the HPR database reset_hpr.sh systemctl start mariadb curl https://hackerpublicradio.org/hpr.sql > hpr.sql mariadb -e 'drop database hpr_hpr' mariadb -e 'create database hpr_hpr' mariadb hpr_hpr < hpr.sql mariadb -e 'select count(*) from eps' hpr_hpr mariadb -e 'select * from comments where comment_author_name="Torin Doyle" G' hpr_hpr…
ברוכים הבאים אל Player FM!
Player FM סורק את האינטרנט עבור פודקאסטים באיכות גבוהה בשבילכם כדי שתהנו מהם כרגע. זה יישום הפודקאסט הטוב ביותר והוא עובד על אנדרואיד, iPhone ואינטרנט. הירשמו לסנכרון מנויים במכשירים שונים.