(3398,'2021-08-11','Anacron',949,'Put down that crontab and get started with anacron','<h2>Setup</h2>\r\n\r\n<pre><code>\r\n$ mkdir -p ~/.local/etc/cron.daily ~/.var/spool/anacron\r\n</code></pre>\r\n\r\n\r\n<p>Create a file called <code>anacrontab</code>&#58;</p>\r\n\r\n<pre><code>\r\n$ touch /.local/etc/anacrontab\r\n</code></pre>\r\n\r\n<p>Set it up to trigger scripts in your <code>cron.daily</code> folder&#58;\r\n</p>\r\n\r\n<pre><code>\r\nSHELL=/bin/sh\r\nPATH=/sbin:/bin:/usr/sbin:/usr/bin\r\n1  0  cron.daily   run-parts $HOME/.local/etc/cron.daily/\r\n</code></pre>\r\n\r\n<p>\r\nValidate your anacrontab&#58;\r\n</p>\r\n\r\n<pre><code>\r\n$ anacron -T -t ~/.local/etc/anacrontab -S ~/.var/spool/anacron\r\n</code></pre>\r\n\r\n<p>Start anacron in a file that gets triggered at login, such as <code>~/.profile</code>&#58;\r\n</p>\r\n\r\n<pre><code>\r\nanacron -t $HOME/.local/etc/anacrontab -S $HOME/.var/spool/anacron\r\n</code></pre>\r\n\r\n<h2>Using</h2>\r\n\r\n<p>Now that everything is set up, just put scripts you want to run regularly in <code>cron.daily</code>, and make them executable.\r\n</p>\r\n\r\n<p>You can set up a weekly directory, too. Just set the time interval in your anacrontab to:\r\n</p>\r\n\r\n<pre><code>\r\nSHELL=/bin/sh\r\nPATH=/sbin:/bin:/usr/sbin:/usr/bin\r\n7  0  cron.weekly   run-parts $HOME/.local/etc/cron.weekly/\r\n</code></pre>',78,0,0,'CC-BY-SA','cron, linux, service, automation',0,0,1),
(3411,'2021-08-30','Dominion card game',1673,'Klaatu talks about the Dominion card game','<p>Dominion is a card game. Lots of fun. You should try it.</p>\r\n\r\n<p>You can even play online for free at <a href=\"https://dominion.games/\">dominion.games</a>\r\n</p>',78,95,0,'CC-BY-SA','card, game',0,0,1),
(3409,'2021-08-26','Linux Inlaws S01E37: All about Hacker Public Radio',5738,'An interview with Ken Fallon, Janitor at Hacker Public Radio','<p>\r\n    In this episode of our beloved open source podcast rapidly approaching its\r\n    zenith of popularity (with hopefully not an equally rapid decline afterwards)\r\n    our two elderly heroes pay tribute to Hacker Public Radio in general and\r\n    Ken Fallon in particular. Plus: a never-heard-of-before peek into Martin\'s\r\n    very own private life (we lift the veil and reveal it all - don\'t miss this!)\r\n</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Hacker Public Radio (HPR): <a href=\"https://hackerpublicradio.org\" target=_blank>https://hackerpublicradio.org</a></li>\r\n<li>HPR mailing list: <a href=\"https://hackerpublicradio.org/mailman/listinfo/hpr_hackerpublicradio.org\" target=_blank>https://hackerpublicradio.org/mailman/listinfo/hpr_hackerpublicradio.org</a></li>\r\n<li>Creative Commons Licenses: <a href=\"https://creativecommons.org\" target=_blank>https://creativecommons.org</a></li>\r\n<li>Static site generators: <a href=\"https://dev.to/oyetoket/which-is-the-best-static-site-generator-and-why-42e2\" target=_blank>https://dev.to/oyetoket/which-is-the-best-static-site-generator-and-why-42e2</a></li>\r\n<li>Richard Stallman issue: <a href=\"https://arstechnica.com/tech-policy/2019/09/richard-stallman-leaves-mit-after-controversial-remarks-on-rape\" target=_blank>https://arstechnica.com/tech-policy/2019/09/richard-stallman-leaves-mit-after-controversial-remarks-on-rape</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','HPR, cleaning, janitoring, having a good time, Richard M. Stallman, stats',0,0,1),
(3417,'2021-09-07','Ceph cluster hardware',729,'Looking into the hardware behind my ceph cluster ','<p>In this video I talk about 4 different computers that could be used in a ceph cluster and what I use and what could be good solutions. If you want to have a visual aid I\'ve created a youtube video talking about the same thing.</p>\r\n<ul>\r\n<li><a href=\"https://youtu.be/B6XXOVcLhzA\" class=\"uri\">https://youtu.be/B6XXOVcLhzA</a></li>\r\n</ul>\r\n',382,0,0,'CC-BY-SA','ceph, cluster, hardware',0,0,1),
(3437,'2021-10-05','The HTML document format',402,'Talking about my favorite document format.','<p>Klaatu asked us what document format we like and why, so this is a response to his podcast. In this podcast I talk about HTML and the importance of good document structure.</p>',382,0,0,'CC-BY-SA','html, document, css, javascript',0,0,1),
(3408,'2021-08-25','Composting',336,'Inspired by episode 3157, Rho`n describes his experience of learning to compost','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Welcome to another episode of Hacker Public Radio. This episode is inspired by HPR episode 3157 entitled Compost by Klaatu. During the early 2000\'s, I lived in a single family home which had a number of oak trees around it. Between the trees, other foliage, and grass, there was a large amount of yard waste. While my city (Baltimore, MD in the US) will pick up your yard waste if you put it in bags by the curb [1], I would use the oak leaves as mulch, and did have a mulch pile of leaves and other yard waste. At that time, I thought about composting food waste, but there is a big issue with rats in Baltimore, and I didn\'t look into ways to compost. I just knew I couldn\'t randomly mix it into my mulch pile.</p>\r\n<p>I am currently living in a different house, without any oak trees, and not as much yard waste (particularly since we hire someone to mow the grass every couple weeks). After listening to the Compost episode, I was inspired to look into the best way to do it given my current living situation. The first thing I did was to look and see if there are any laws against composting in Baltimore City. The rat problem is big enough that the City purchased and distributed a large green plastic trash bin to every physical mailing address in the city. This is the bin you are required to use when putting out your trash. Given the situation, I wasn\'t sure it would be legal to do composting in your back yard. Much to my surprise, it is not only legal, but the city website has a web page on how to compost [2] and just recently started a pilot program for food scrap drop off with seven locations around the city [3].</p>\r\n<h2 id=\"kitchen-compost-bin\">Kitchen Compost Bin</h2>\r\n<p>After determining I wasn\'t going to be a scofflaw, I went to the Internet to see what kind of bins are available for purchase. While Klaatu gives great suggestions for low cost composting bins, I wanted something that would look nice sitting out on a shelf for the small inside bin. I found the Utopia Kitchen Compost Bin [4]. The bin is made of stainless steel and has a volume of 1.3 gallons (4.9 liters). The lid is rounded and has a series of holes around the top. The inside of the lid holds a circular shaped charcoal filter. The combination of holes and charcoal filter capture any odors generated by the food scraps. It works amazingly well and even with onion scraps you need to stick your nose to the holes and inhale deep to smell anything when the lid is closed. It holds three to seven days worth of food scraps, most of which end up being coffee grinds. We have had this bin for 10 months, and the charcoal filter is still effective. There are replacement filters available for this bin, but you could also cut other charcoal filters to fit inside the lid.</p>\r\n<h2 id=\"outside-compost-bin\">Outside Compost Bin</h2>\r\n<p>Given the potential rat and other small critter issues, I wanted the main, outside composter to be fully enclosed, and preferably not sitting directly on the ground. A quick search brings up a number of options, both composters that sit on the ground and ones that are tumbler style, which hang on a frame. I went with a tumbler style compost bin. This provided the desired feature of not being on the ground, and has the added advantage of making it easy to turn the compost every second or third day by just rotating the bin slowly for three or four full turns. I purchased the FCMP Outdoor IM4000 Tumbling Composter [5]. The composter is octagonal shaped column with two chambers inside it. This allows you to fill one chamber while the other side is finishing the composting process. There are also aeration holes for each chamber which can be open to different levels to moderate the amount of moisture. The combined volume of the two chambers is approximately 37 gallons (140 liters).</p>\r\n<h2 id=\"my-composting-experience\">My Composting Experience</h2>\r\n<p>So far I have been very happy with this combination. I just emptied a chamber for the third time. I do have a bit of an issue with the compost being overly damp. I have mixed some drier yard waste in from time to time and that does help, but have had times when parts of it get a little slimy. I have also run into issues with flies and other bugs living in the chamber for a while, but generally I don\'t see them outside of the composter, just when I open the door to add more material. Not ideal, but not so bad that I did anything about it. I have also found certain things do take extra time to compost, and usually need some manual help to break down. Pits of mangoes and avocados in particular along with corn cobs take a long time to break down. They do start to compost, and are easy to crumble in your hands, but keep their basic shape for a long while. Egg shells don\'t really break down, as Klaatu mentioned, but they do become very brittle and I crumble them up manually along with the pits and corn cobs. Another issue I have found with damper compost, particularly in cooler months, it doesn\'t heat up enough to decompose the seeds of some plants. This ended up being a pleasant surprise this summer after mixing in the first batch of compost in our little herb garden during the spring. We now have a combination of plumb and medium sized tomato plants and some kind of squash plant growing in it. If you don\'t want random plants growing in your yard or flower beds, do be careful when composting plants with seeds [6].</p>\r\n<h2 id=\"conclusion\">Conclusion</h2>\r\n<p>While it takes a little extra effort, composting does reduce the amount of garbage you are sending to the dump, and does reduce the smell of your kitchen trash bin. It also gives a rewarding feeling as you watch the material break down into a rich dirt, and then mix it into your garden or yard. I recommend giving it a try, and posting your experience as another episode of Hacker Public Radio.</p>\r\n<h2 id=\"references\">References</h2>\r\n<ol>\r\n<li><a href=\"https://publicworks.baltimorecity.gov/pw-recycling/yard\">Baltimore City Department of Public Works-Yard Waste</a></li>\r\n<li><a href=\"https://publicworks.baltimorecity.gov/pw-bureaus/solid-waste/services\">Baltimore City Department of Public Works-Source Reduction</a></li>\r\n<li><a href=\"https://publicworks.baltimorecity.gov/foodscrapdrop-off\">Baltimore City Department of Public Works-Food Scrap Drop-Off Pilot Program</a></li>\r\n<li><a href=\"https://www.thespruceeats.com/utopia-kitchen-stainless-steel-compost-bin-review-4768116\">Utopia Kitchen Compost Bin</a></li>\r\n<li><a href=\"https://fcmponline.com/products/im4000-dual-chamber-tumbling-composter\">FCMP Outdoor IM4000 Tumbling Composter</a></li>\r\n<li><a href=\"https://www.gardeningknowhow.com/composting/ingredients/composting-tomato-plants.htm\">Composting Tomato Plants: When To Compost Tomatoes</a></li>\r\n</ol>\r\n',293,0,0,'CC-BY-SA','food,rubbish,landfill,gardening,compost,composting',0,0,1),
(3414,'2021-09-02','Critical Thinking may make You Critical of the Covid Crisis',645,'Some Science YOU can observe about covid fallacies, and some preventative medicine.','<hr />\r\n<h3>Counter Point</h3>\r\n<p>Counter points to this show are available:<br />\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3442\">hpr3442 :: What is this thing called science</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3445\">hpr3445 :: True critical thinking seems to be the key</a></li>\r\n</ol>\r\n</p>\r\n<hr />\r\n<p>The homeless weren\'t affected as much as other segments of the population. This Radiolab episode suggests that healthy vitamin D3 levels from being out in the sun often may be the reason.</p>\r\n<p><a href=\"https://www.wnycstudios.org/podcasts/radiolab/articles/invisible-allies\" class=\"uri\">https://www.wnycstudios.org/podcasts/radiolab/articles/invisible-allies</a></p>\r\n<p>A hospital in Spain did a double blind study, solid science. In this study, before any vaccines were available for covid, vitamin D3 made the difference between a 7.6% death rate due to covid, and a 0% death rate with vitamin D3. This YouTube video gets very technical, but tells the story.</p>\r\n<p><a href=\"https://www.youtube.com/watch?v=V8Ks9fUh2k8\" class=\"uri\">https://www.youtube.com/watch?v=V8Ks9fUh2k8</a></p>\r\n<p>Back in the 60s, body temperature\'s effect on fighting viruses was known, that knowledge was lost for a time because of scientists who spoke out, not knowing the whole story, but in 2003, in the aftermath of the previous covid outbreak, a doctor from China documented the need for body heat to fight off covid. Even so, medical professionals in New York set up a covid triage in Central Park during a season when the daytime temperature was in the 50s, and night time temperature was much colder. Just having a PhD behind your name doesn\'t make you right.</p>\r\n<p><a href=\"https://www.bmj.com/rapid-response/2011/10/29/coronavirus-may-be-killed-higher-body-temperature\" class=\"uri\">https://www.bmj.com/rapid-response/2011/10/29/coronavirus-may-be-killed-higher-body-temperature</a></p>\r\n',395,0,1,'CC-BY-SA','covid, vitamin D3, masks, viruses, lawyers',0,0,1),
(3404,'2021-08-19','Suse 15.3 Leap',652,'A short review of Suse 15.3','<p>Short review of Suse 15.3</p>\r\n',129,0,0,'CC-BY-SA','linux, suse, leap, vnc',0,0,1),
(3412,'2021-08-31','Reading a license: Creative Commons Attribution ShareAlike 3.0 Unported',2098,'We are using this license but we didn\'t publish it on HPR ... until now!','<p><em>This show and its notes are licensed under the Creative Commons Attribution 3.0 Unported license: <a href=\"https://creativecommons.org/licenses/by/3.0/\">https://creativecommons.org/licenses/by/3.0/</a></em></p>\r\n<p>The original work is by Creative Commons and has been slightly modified during reading. The text\r\nreproductions below have been modified for formatting, but not intentionally for content.\r\nMisspellings are from the original.</p>\r\n<ul>\r\n<li>The show <a href=\"https://hackerpublicradio.org/eps.php?id=3402\">https://hackerpublicradio.org/eps.php?id=3402</a> is licensed under the Creative Commons Attribution ShareAlike 4.0 International license.</li>\r\n<li>CC-by-SA 3.0 and other 3.0 licenses were released on 2007-02-23: <a href=\"https://creativecommons.org/2007/02/23/version-30-launched/\">https://creativecommons.org/2007/02/23/version-30-launched/</a></li>\r\n<li>The licenses were published on a site that was at the time CC-by 3.0: <a href=\"https://web.archive.org/web/20070225072754/https://creativecommons.org/\">https://web.archive.org/web/20070225072754/https://creativecommons.org/</a></li>\r\n</ul>\r\n<hr>\r\n<h1 id=\"creative-commons-license-deed\">Creative Commons License Deed</h1>\r\n<p>Original: <a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">https://creativecommons.org/licenses/by-sa/3.0/</a></p>\r\n<h2 id=\"attribution-sharealike-3-0-unported-cc-by-sa-3-0-\">Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)</h2>\r\n<p>This is a human-readable summary of (and not a substitute for) the <a href=\"#creative-commons-legal-code\">license</a>.</p>\r\n<h3 id=\"disclaimer\">Disclaimer</h3>\r\n<p>This deed highlights only some of the key features and terms of the actual license. It is not a\r\nlicense and has no legal value. You should carefully review all of the terms and conditions of the actual\r\nlicense before using the licensed material.</p>\r\n<p>Creative Commons is not a law firm and does not provide legal services. Distributing, displaying,\r\nor linking to this deed or the license that it summarizes does not create a lawyer-client or any other\r\nrelationship.</p>\r\n<h3 id=\"you-are-free-to-\">You are free to:</h3>\r\n<ul>\r\n<li><strong>Share</strong> - copy and redistribute the material in any medium or format</li>\r\n<li><strong>Adapt</strong> - remix, transform, and build upon the material for any purpose, even commercially.\r\nThe licensor cannot revoke these freedoms as long as you follow the license terms.</li>\r\n</ul>\r\n<h3 id=\"under-the-following-terms-\">Under the following terms:</h3>\r\n<ul>\r\n<li><strong>Attribution</strong> - You must give\r\n<a href=\"https://wiki.creativecommons.org/License_Versions#Detailed_attribution_comparison_chart\">appropriate credit</a>,\r\nprovide a link to the license, and\r\n<a href=\"https://wiki.creativecommons.org/License_Versions#Modifications_and_adaptations_must_be_marked_as_such\">indicate if changes were made</a>.\r\nYou may do so in any reasonable manner, but not in any way that suggests the licensor endorses\r\nyou or your use.</li>\r\n<li><strong>ShareAlike</strong> - If you remix, transform, or build upon the material, you must\r\ndistribute your contributions under the\r\n<a href=\"https://wiki.creativecommons.org/FAQ#If_I_derive_or_adapt_material_offered_under_a_Creative_Commons_license.2C_which_CC_license.28s.29_can_I_use.3F\">same license</a>\r\nas the original.</li>\r\n<li><strong>No additional restrictions</strong> - You may not apply legal terms or\r\n<a href=\"https://wiki.creativecommons.org/License_Versions#Application_of_effective_technological_measures_by_users_of_CC-licensed_works_prohibited\">technological measures</a>\r\nthat legally restrict others from doing anything the license permits.</li>\r\n</ul>\r\n<h3 id=\"notices-\">Notices:</h3>\r\n<p>You do not have to comply with the license for elements of the material in the public domain or\r\nwhere your use is permitted by an applicable\r\n<a href=\"https://wiki.creativecommons.org/Frequently_Asked_Questions#Do_Creative_Commons_licenses_affect_exceptions_and_limitations_to_copyright.2C_such_as_fair_dealing_and_fair_use.3F\">exception or limitation</a>.</p>\r\n<p>No warranties are given. The license may not give you all of the permissions necessary for your\r\nintended use. For example, other rights such as\r\n<a href=\"https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees\">publicity, privacy, or moral rights</a>\r\nmay limit how you use the material.</p>\r\n<hr>\r\n<h1 id=\"creative-commons-legal-code\">Creative Commons Legal Code</h1>\r\n<p>Original: <a href=\"https://creativecommons.org/licenses/by-sa/3.0/legalcode\">https://creativecommons.org/licenses/by-sa/3.0/legalcode</a></p>\r\n<p>For the rest of the text please see: <a href=\"https://hackerpublicradio.org/eps/hpr3412/\">https://hackerpublicradio.org/eps/hpr3412/</a></p>\r\n',311,0,0,'CC-BY','license, creative commons, recital, reading, legal',0,0,1),
(3407,'2021-08-24','Software Freedom Podcast',3407,'A sample episode of the Free Software Foundation Europe Podcast','<p>\r\nThe <a href=\"https://fsfe.org/news/podcast.en.html\">Free Software Foundation Europe have a podcast</a>, and this is a sample episode.\r\n</p>\r\n<ol>\r\n<li><a href=\"https://fsfe.org/news/podcast.en.html\">Web page: https://fsfe.org/news/podcast.en.html</a></li>\r\n<li><a href=\"https://fsfe.org/news/podcast-opus.en.rss\">Opus Feed: feed://fsfe.org/news/podcast-opus.en.rss</a></li>\r\n<li><a href=\"https://fsfe.org/news/podcast.en.rss\">MP3 Feed: feed://fsfe.org/news/podcast.en.rss</a></li>\r\n<li><a href=\"https://freeculturepodcasts.org/\">Free Culture Podcasts: https://freeculturepodcasts.org/</a></li>\r\n</ol>',30,75,0,'CC-BY-SA','FSFE,Podcast,freeculturepodcasts',0,0,1),
(3419,'2021-09-09','Linux Inlaws S01E38: Tiny kernels',3748,'All you ever wanted to hear and more about micro kernels and other operating system war stories','<p> This episode is dedicated to tiny kernels driving operating systems also\r\n    known as micro-kernels.  While discussing the last 100 years of operating\r\n    system design and implementation, our two aging heroes also shed some\r\n    light on operating systems in general and their recent history (like fifty\r\n    years). Unless you\'re a true OS nerd, you find the episode mildly\r\n    refreshing and educational on the layers of software underneath your\r\n    beloved applications controlling the hardware and other shenanigans. If\r\n    you\'re an OS nerd, this episode may have the potential of closing your few\r\n    remaining knowledge gaps (or something like this).  A fun show for\r\n    children of all ages and beyond.  </p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>IBM VM: <a href=\"https://en.wikipedia.org/wiki/Z/VM\" target=_blank>https://en.wikipedia.org/wiki/Z/VM</a></li>\r\n<li>Modern operating systems by Andy S. Tanenbaum: <a href=\"https://csc-knu.github.io/sys-prog/books/Andrew%20S.%20Tanenbaum%20-%20Modern%20Operating%20Systems.pdf\" target=_blank>https://csc-knu.github.io/sys-prog/books/Andrew%20S.%20Tanenbaum%20-%20Modern%20Operating%20Systems.pdf</a></li>\r\n<li>Short write-up on fashion (for the uninitiated): <a href=\"https://en.wikipedia.org/wiki/Fashion\" target=_blank>https://en.wikipedia.org/wiki/Fashion</a></li>\r\n<li>Multics: <a href=\"https://www.multicians.org\" target=_blank>https://www.multicians.org</a></li>\r\n<li>Unix: <a href=\"https://en.wikipedia.org/wiki/History_of_Unix\" target=_blank>https://en.wikipedia.org/wiki/History_of_Unix</a></li>\r\n<li>CCP/M-86: <a href=\"https://en.wikipedia.org/wiki/Multiuser_DOS#Concurrent_CP/M-86\" target=_blank>https://en.wikipedia.org/wiki/Multiuser_DOS#Concurrent_CP/M-86</a></li>\r\n<li>QDOS: <a href=\"https://en.wikipedia.org/wiki/86-DOS\" target=_blank>https://en.wikipedia.org/wiki/86-DOS</a></li>\r\n<li>VMS: <a href=\"https://vmssoftware.com\" target=_blank>https://vmssoftware.com</a></li>\r\n<li>Digital\'s VAX: <a href=\"https://en.wikipedia.org/wiki/VAX\" target=_blank>https://en.wikipedia.org/wiki/VAX</a></li>\r\n<li>Mach kernel: <a href=\"https://en.wikipedia.org/wiki/Mach_(kernel)\" target=_blank>https://en.wikipedia.org/wiki/Mach_(kernel)</a></li>\r\n<li>Android: <a href=\"https://en.wikipedia.org/wiki/Android_(operating_system)\" target=_blank>https://en.wikipedia.org/wiki/Android_(operating_system)</a></li>\r\n<li>Homebrew: <a href=\"https://brew.sh\" target=_blank>https://brew.sh</a></li>\r\n<li>MacPorts: <a href=\"https://www.macports.org\" target=_blank>https://www.macports.org</a></li>\r\n<li>Usenet war: <a href=\"https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_debate\" target=_blank>https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_debate</a></li>\r\n<li>Minix and TPM: <a href=\"https://www.zdnet.com/article/minix-intels-hidden-in-chip-operating-system\" target=_blank>https://www.zdnet.com/article/minix-intels-hidden-in-chip-operating-system</a></li>\r\n<li>Trusted Platform Module: <a href=\"https://link.springer.com/content/pdf/10.1007%2F978-1-4302-6584-9.pdf\" target=_blank>https://link.springer.com/content/pdf/10.1007%2F978-1-4302-6584-9.pdf</a></li>\r\n<li>Secure enclaves: <a href=\"https://software.intel.com/content/www/us/en/develop/topics/software-guard-extensions.html\" target=_blank>https://software.intel.com/content/www/us/en/develop/topics/software-guard-extensions.html</a></li>\r\n<li>The Sleepover: <a href=\"https://www.imdb.com/title/tt10888708/?ref_=fn_al_tt_1\" target=_blank>https://www.imdb.com/title/tt10888708/?ref_=fn_al_tt_1</a></li>\r\n<li>Python Init Podcast episode: <a href=\"https://www.pythonpodcast.com/tony-liu-python-venture-investing-episode-305\" target=_blank>https://www.pythonpodcast.com/tony-liu-python-venture-investing-episode-305</a></li>\r\n<li>Martin\'s trainspotters\' research paper: <a href=\"https://www.diva-portal.org/smash/get/diva2:1340183/FULLTEXT05\" target=_blank>https://www.diva-portal.org/smash/get/diva2:1340183/FULLTEXT05</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Operating systems, kernels, Usenet wars, Linus Torvalds, Andrew Tanenbaum, Minix, trainspotting',0,0,1),
(3421,'2021-09-13','BlacKernel\'s Journey Into Technology: Episode 1',967,'Learning about Assembly and Social Engineering before I could read','<ul>\r\n<li><p>Important Links</p>\r\n<ul>\r\n<li><a href=\"https://gnuworldorder.info/audiophile/gnuWorldOrder_379.ogg\">GNU World Order Episode 379</a></li>\r\n<li><a href=\"https://eater.net/\">Ben Eater\'s Website</a></li>\r\n</ul></li>\r\n<li><p>Wikipedia Pages</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Transistor\">Transistor Wikipedia article</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Logic_gate\">Logic Gates Wikipedia article</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Assembly_language\">Assembly Language Wikipedia article</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/KidDesk\">KidDesk Wikipedia article</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/K9_Web_Protection\">K9 Web Protection Wikipedia article</a></li>\r\n</ul></li>\r\n</ul>',396,0,0,'CC-BY-SA','technology, childhood, stories',0,0,1),
(3413,'2021-09-01','Bash snippet - using coproc with SQLite',2738,'Sending multiple queries to a running instance of sqlite3','<h2 id=\"introduction\">Introduction</h2>\n<p>I am in the process of rewriting some scripts I use to manage <a href=\"https://magnatune.com/\" title=\"Magnatune\">Magnatune</a> albums. I’m a lifetime Magnatune member and have access to the whole music collection. I wrote a script for downloading albums and placing them in my <code>~/Music</code> directory which I talked about in 2013 (show <a href=\"http://hackerpublicradio.org/eps/hpr1204\">1204</a>). The original scripts are still available on <a href=\"https://gitlab.com/davmo/magnatune-downloader\">GitLab</a> and I know of one other person who made use of them!</p>\n<p>Since 2013 I have written a few other support scripts, for example one to manage a queue of albums I want to buy and download, and one which summarises the state of this queue.</p>\n<p>It’s this <code>\'show_queue\'</code> script I am currently updating (called <a href=\"hpr3413_show_queue_orig\"><code>show_queue_orig</code></a>, and available in the resources to this show). The original version of this script took Magnatune album URLs from a file (acting as a queue of stuff I wanted to buy), parsed out a piece of the URL and used it to <code>grep</code> a pre-prepared summary in another file. This file of summaries had been made from a master XML file provided by Magnatune (see <code>update_albums</code> on GitLab).</p>\n<p>Magnatune has moved away from this master XML file to a SQLite database in recent years, so I want to perform a database lookup for each URL to list its details.</p>\n<p>The first version of the new script wasn’t difficult to write: just extract the search data as before and run a query on the database using this data. I have included this script which I call <a href=\"hpr3413_show_queue_db_1\"><code>show_queue_db_1</code></a> amongst the resources for this episode, so you can see what I’m talking about – and what I want to improve on. It felt bad to be performing multiple calls on the <code>sqlite3</code> command in a loop, so I looked around for an alternative way.</p>\n<p>In April 2019 <a href=\"https://hackerpublicradio.org/correspondents/0311.html\">clacke</a> did a show (number <a href=\"http://hackerpublicradio.org/eps/hpr2793\">2793</a>) about the Bash <code>coproc</code> command.</p>\n<p>This command creates a <em>subshell</em> running a command or group of commands which is connected to the calling (<em>parent</em>) process through two file descriptors (<em>FD</em>s). It’s possible for the calling shell to write to the input descriptor and read from the output one and thereby communicate with whatever is running in the subshell.</p>\n<p>I was vaguely aware of <code>coproc</code> at the time of clacke’s show but hadn’t looked into it. I found the show fascinating but didn’t have a use for the feature at the time.</p>\n<p>To solve my need to show my Magnatune queue of future purchases, it looked as if a <code>sqlite3</code> instance running in a subshell could be given queries one after the other and return the answers I needed. My journey to a Bash script using <code>coproc</code> then followed.</p>\n<h2 id=\"long-notes\">Long notes</h2>\n<p>Follow this link to <a href=\"hpr3413_full_shownotes.html\">read the detailed notes</a> associated with this episode.</p>\n<h2 id=\"links\">Links</h2>\n<ul>\n<li>Bash Reference Manual:\n<ul>\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Coprocesses\">3.2.6 Coprocesses</a></li>\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Duplicating-File-Descriptors\">3.6.8 Duplicating File Descriptors</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Stack Exchange:\n<ul>\n<li><a href=\"https://unix.stackexchange.com/questions/86270/how-do-you-use-the-command-coproc-in-various-shells\">How do you use the command coproc in various shells?</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Wikipedia:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Expect\">Wikipedia page on <code>expect</code></a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Other links:\n<ul>\n<li><a href=\"http://hackerpublicradio.org/eps/hpr1204\">hpr1204 :: My Magnatune Downloader</a></li>\n<li><a href=\"https://gitlab.com/davmo/magnatune-downloader\">GitLab repository: original magnatune-downloader</a></li>\n<li><a href=\"http://hackerpublicradio.org/eps/hpr2793\">hpr2793 :: bash coproc: the future (2009) is here</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Resources:\n<ul>\n<li>Example files:\n<ul>\n<li><a href=\"hpr3413_coproc_test.sh\">coproc_test.sh</a></li>\n<li><a href=\"hpr3413_coproc_test.awk\">coproc_test.awk</a></li>\n<li><a href=\"hpr3413_show_queue_orig\">show_queue_orig</a></li>\n<li><a href=\"hpr3413_show_queue_db_1\">show_queue_db_1</a></li>\n<li><a href=\"hpr3413_show_queue_db_2\">show_queue_db_2</a></li>\n<li><a href=\"hpr3413_show_queue.pl.zip\">show_queue.pl.zip</a></li>\n</ul></li>\n</ul></li>\n</ul>\n',225,42,1,'CC-BY-SA','Bash,coproc,subshell,coprocess,pipe,file descriptor',0,0,1),
(3431,'2021-09-27','Living in the Terminal',2763,'BlacKernel shows you some programs you\'ll need for living life without X org','<h1 id=\"talking-points\">Talking Points</h1>\r\n<h2 id=\"rational\">Rational</h2>\r\n<ul>\r\n<li>Sometimes, X.org just doesn\'t want to work</li>\r\n<li>Esspecially if you are a dumb n00b running Arch</li>\r\n<li>The terminal will always be there for you.</li>\r\n</ul>\r\n<h2 id=\"applications\">Applications:</h2>\r\n<h3 id=\"my-bashrc\">My .bashrc:</h3>\r\n<ul>\r\n<li>Environment Variables:</li>\r\n</ul>\r\n<pre class=\"bash\"><code>export EDITOR=nvim\r\nexport PAGER=most\r\nexport BROWSER=lynx\r\n\r\nexport XDG_DATA_HOME=&quot;$HOME/.local/share&quot;\r\nexport XDG_CONFIG_HOME=&quot;$HOME/.config&quot;\r\n</code></pre>\r\n<p>PS1: <font color=blue>user</font>@<font color=green>hostname</font>:~ (git_branch) $</p>\r\n<pre class=\"bash\"><code>if [[ $EUID == 0 ]]; then\r\n    export PS1=&quot;\\[e[1;31m\\]\\u\\[\\e[m\\]@\\[\\e[0;32m\\]\\h\\[\\e[m\\]:\\w\\$(__git_ps1) # &quot;\r\nelse\r\n    export PS1=&quot;\\[e[1;34m\\]\\u\\[\\e[m\\]@\\[\\e[0;32m\\]\\h\\[\\e[m\\]:\\w\\$(__git_ps1) $ &quot;\r\nfi\r\n</code></pre>\r\n<ul>\r\n<li>Aliases:\r\n<ul>\r\n<li><code>alias vim=nvim</code></li>\r\n<li><code>alias play=mpv</code></li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"productivity-window-manager-tmux\">Productivity (\"Window Manager\"): <a href=\"#show-notes\">tmux</a></h2>\r\n<ul>\r\n<li>Provides an easy way of splitting a tty into various panes</li>\r\n<li>Get multiple workspaces for free with CTL+ALT+F{1,2,3,4,5,6,7}</li>\r\n<li>All of the tiling window manager, none of the X-it</li>\r\n<li>Can set up <code>if [ -t 0 ] &amp;&amp; [[ -z $TMUX ]] &amp;&amp; [[ $- = *i* ]]; then exec tmux; fi</code> in .bashrc in order to have tmux start/stop with your terminal sessiion.</li>\r\n</ul>\r\n<h2 id=\"music-cmus\">Music: <a href=\"#show-notes\">cmus</a></h2>\r\n<ul>\r\n<li>Easy library and playlist management</li>\r\n<li>Dead simple to use (with cmus-tutorial)\r\n<ul>\r\n<li><code>y</code> to yank songs onto a playlist</li>\r\n<li><code>SPA</code> to select a playlist</li>\r\n<li><code>RET</code> to play a song/playlist</li>\r\n<li><code>TAB</code> to switch between panes</li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"pictures-fim\">Pictures: <a href=\"#show-notes\">fim</a></h2>\r\n<ul>\r\n<li>Requires user be in the <code>video</code> group for permission to use the Linux framebuffer</li>\r\n</ul>\r\n<h2 id=\"radiovideosingle-audio-files-mpv\">Radio/Video/single audio files: <a href=\"#show-notes\">mpv</a></h2>\r\n<ul>\r\n<li>Can display video in terminal (badly with libcaca)</li>\r\n<li>Can <em>actually</em> display video in linux framebuffer (with drm)</li>\r\n<li>Can handle all of your somafm files/web-video links</li>\r\n<li>Requires <a href=\"#show-notes\">youtube-dl</a> for video</li>\r\n</ul>\r\n<h2 id=\"podcastsrss-newsboatpodboat\">Podcasts/RSS: <a href=\"#show-notes\">newsboat/podboat</a></h2>\r\n<ul>\r\n<li>Orginizes all of your podcasts and RSS feeds into an easy-to-use ncurses interface</li>\r\n<li>Can be set up with <code>player \"mpv --save-position-on-quit\"</code> to save positions on podcasts</li>\r\n<li><em>Very</em> convinent for articles, less so for podcasts</li>\r\n<li>Really needs better integration with something like cmus</li>\r\n</ul>\r\n<h4 id=\"runner-up-podfox\">Runner Up: <a href=\"#show-notes\">podfox</a></h4>\r\n<ul>\r\n<li>Can be configured with JSON</li>\r\n<li>Has better directory structure than podboat, imo</li>\r\n<li>Tree based structure vs shove everything in ~ by default</li>\r\n</ul>\r\n<h2 id=\"text-editingword-processing-neovimgitx-flavored-markdownpandoc\">Text Editing/Word Processing: <a href=\"#show-notes\">neovim/GitX Flavored Markdown/pandoc</a></h2>\r\n<ul>\r\n<li>Clean modal editing</li>\r\n<li>Can export to whatever with pandoc</li>\r\n<li>Probably not as good as OrgMode if emacs wasn\'t the HFS+ of text editors</li>\r\n</ul>\r\n<h2 id=\"audio-recordingpost-processing-ffmpeg\">Audio Recording/Post-Processing: <a href=\"#show-notes\">ffmpeg</a></h2>\r\n<ul>\r\n<li>One alias and three scripts in my .bashrc\r\n<ul>\r\n<li>record: <code>alias record=\"ffmpeg -f alsa -channels 1 -i hw:1\"</code></li>\r\n<li>atrim, top-tail, and anorm: Allows me to quickly spin up a recording and run post processing</li>\r\n</ul></li>\r\n</ul>\r\n<pre class=\"bash\"><code>function atrim() {\r\n    if [ $1 ]; then\r\n        local in=&quot;$1&quot;\r\n    else\r\n        local in=&quot;-&quot;\r\n    fi\r\n\r\n    if [ $2 ]; then\r\n        local out=&quot;$2&quot;\r\n    else\r\n        local out=&quot;-f nut -&quot;\r\n    fi\r\n\r\n    if [[ $# &gt; 2 ]]; then\r\n        echo &quot;atrim: requires 2 or fewer arguments&quot;\r\n        return 1\r\n    fi\r\n\r\n    if [ $2 ]; then echo &quot;atrim: silencing $in and saving to $out...&quot;; fi\r\n    ffmpeg -i $in -af silenceremove=start_periods=1:stop_periods=-1:start_threshold=-50dB:stop_threshold=-50dB:stop_duration=0.75 $out \\\r\n        2&gt;/dev/null \\\r\n        #1&gt;/dev/null\r\n    if [ $2 ]; then echo &quot;atrim: done&quot;; fi\r\n}\r\n</code></pre>\r\n<pre class=\"bash\"><code>function top-tail() {\r\n    local top=&quot;$HOME/project/hpr-notes/template/intro-music-slick0-cc0.flac&quot;\r\n    local tail=&quot;$HOME/project/hpr-notes/template/outro-mixed-slick0-manon_fallon-cc0.flac&quot;\r\n\r\n    if [ $1 ]; then\r\n        local in=&quot;$1&quot;\r\n    else\r\n        local in=&quot;-&quot;\r\n    fi\r\n\r\n    if [ $2 ]; then\r\n        local out=&quot;$2&quot;\r\n    else\r\n        local out=&quot;-f nut -&quot;\r\n    fi\r\n\r\n    if [[ $# &gt; 2 ]]; then\r\n        echo &quot;hpr-top-tail: requres 2 or fewer arguments&quot;\r\n        return 1\r\n    fi\r\n\r\n    if [ $2 ]; then echo &quot;hpr-top-tail: Topping $in with $top and tailing with $tail...&quot;; fi\r\n    ffmpeg -i &quot;$top&quot; -i $in -i &quot;$tail&quot; -vn -filter_complex &quot;\r\n    [0][1]acrossfade=d=1:c1=tri:c2=tri[a01];\r\n    [a01][2]acrossfade=d=1:c1=tri:c2=tri&quot; \\\r\n    $out \\\r\n        2&gt; /dev/null \\\r\n        #1&gt; /dev/null\r\n    if [ $2 ]; then echo &quot;hpr-top-tail: done&quot;; fi\r\n}\r\n</code></pre>\r\n<pre class=\"bash\"><code>function anorm() {\r\n    if [ $1 ]; then\r\n        local in=&quot;$1&quot;\r\n    else\r\n        local in=&quot;-&quot;\r\n    fi\r\n\r\n    if [ $2 ]; then\r\n        local out=&quot;$2&quot;\r\n    else\r\n        local out=&quot;-f nut -&quot;\r\n    fi\r\n\r\n    if [[ $# &gt; 2 ]]; then\r\n        echo &quot;anorm: requires 2 or fewer arguments&quot;\r\n        return 1\r\n    fi\r\n\r\n    if [ $2 ]; then echo &quot;anorm: normalizing audio $in and saving to $out...&quot;; fi\r\n    ffmpeg -i $in $(ffmpeg-lh $in) $out \\\r\n        #2&gt; /dev/null \\\r\n        1&gt; /dev/null\r\n    if [ $2 ]; then echo &quot;anorm: done&quot;; fi\r\n\r\n}\r\n</code></pre>\r\n<h2 id=\"web-browsing-lynx\">Web Browsing: <a href=\"#show-notes\">lynx</a></h2>\r\n<ul>\r\n<li>Fast and easy text based web browsing</li>\r\n<li>Can leverage Web 4.0 technologies like Gopher!!</li>\r\n<li>Some sites break pretty bad...</li>\r\n</ul>\r\n<h2 id=\"email-mutt\">Email: <a href=\"#show-notes\">mutt*</a></h2>\r\n<ul>\r\n<li><p>I didn\'t really use email very much when I was living on the terminal and now, since I use protonmail, I don\'t really have an easy way not to use the webmail.</p></li>\r\n<li><p>Trying to find a fix to this. Let me know your thoughts!</p></li>\r\n<li><p>This is the mail client I\'ve heard the most good things about that isn\'t built into a text editor I can\'t use</p></li>\r\n</ul>\r\n<hr />\r\n<h1 id=\"show-notes\">Show Notes</h1>\r\n<h3 id=\"important-links\">Important Links:</h3>\r\n<ul>\r\n<li><a href=\"https://github.com/tmux/tmux\">tmux</a></li>\r\n<li><a href=\"https://cmus.github.io\">cmus</a></li>\r\n<li><a href=\"https://fatchancelester.bandcamp.com/album/napalm-lounge\">Napalm Lounge by Fat Chance Lester</a></li>\r\n<li><a href=\"https://www.nongnu.org/fbi-improved\">fim</a></li>\r\n<li><a href=\"https://mpv.io\">mpv</a></li>\r\n<li><a href=\"https://www.youtube-dl.org\">youtube-dl</a></li>\r\n<li><a href=\"https://www.newsboat.org\">newsboat/podboat</a></li>\r\n<li><a href=\"https://neovim.io\">neovim</a></li>\r\n<li><a href=\"https://commonmark.org\">CommonMark</a></li>\r\n<li><a href=\"https://pandoc.org\">pandoc</a></li>\r\n<li><a href=\"https://ffmpeg.org\">ffmpeg</a></li>\r\n<li><a href=\"https://lynx.browser.org\">lynx</a></li>\r\n<li><a href=\"https://mutt.org\">mutt</a></li>\r\n</ul>\r\n<h3 id=\"resources\">Resources:</h3>\r\n<ul>\r\n<li><a href=\"https://gitlab.com/BlacKernel/hpr/-/raw/main/hpr3431/atrim.sh\">atrim.sh</a></li>\r\n<li><a href=\"https://gitlab.com/BlacKernel/hpr/-/raw/main/hpr3431/top-tail.sh\">top-tail.sh</a></li>\r\n<li><a href=\"https://gitlab.com/BlacKernel/hpr/-/raw/main/hpr3431/anorm.sh\">anorm.sh</a></li>\r\n</ul>\r\n<hr />\r\n<h5 id=\"contact-me\">Contact Me</h5>\r\n<ul>\r\n<li><strong>Email</strong>: <a href=\"mailto:izzyleibowitz@pm.me\">izzy leibowitz at pm dot me</a></li>\r\n<li><strong>Mastodon</strong>: <a href=\"https://nixnet.social/BlacKernel\">at blackernel at nixnet dot social</a></li>\r\n</ul>\r\n',396,11,1,'CC-BY-SA','cli, terminal, nox, linux, technology, tty',0,0,1),
(3426,'2021-09-20','Rust 101: Episode 0 - What in Tarnishing?',1348,'BlacKernel teaches you what rust is and how it is different from Python or C.','<h1 id=\"Talking-Points\">Talking Points</h1>\r\n<ul>\r\n<li>What is Rust?\r\n<ul>\r\n<li>\" Garbage Collection \" - Resource Acquisition Is Initialization (RAII)</li>\r\n<li>Strict Typing with Type Inference</li>\r\n<li>Reference pointers</li>\r\n<li>Immutable by default</li>\r\n<li>Unsafe Mode</li>\r\n</ul></li>\r\n<li>Why use Rust over Python?\r\n<ul>\r\n<li>Speed</li>\r\n<li>Compiled\r\n<ol>\r\n<li>Help from compiler</li>\r\n<li>Smaller binary size</li>\r\n<li>Useful in high throughput/embedded applications</li>\r\n</ol></li>\r\n<li>Logically consistent</li>\r\n</ul></li>\r\n<li>Why use Rust over C?\r\n<ul>\r\n<li>Safe by default</li>\r\n<li>Easier to read</li>\r\n<li>Forces you to write good code</li>\r\n<li>Arrays without stupidity++ and built in vectors</li>\r\n<li>Option&lt;T&gt; and Result&lt;T&gt; or a match {} made in heaven</li>\r\n</ul></li>\r\n</ul>\r\n<hr />\r\n<h1 id=\"Show-Notes\">Show Notes</h1>\r\n<h2 id=\"Strict-Typing\">Strict Typing</h2>\r\n<pre><code>fn main() {\r\n\r\n    // Type declared with var: &lt;T&gt; syntax\r\n    let penguin_one: &amp;str = &quot;gentoo&quot;;\r\n    \r\n    // Type &amp;str is inherited from &quot;gentoo&quot;\r\n    let penguin_two = &quot;gentoo&quot;;\r\n    \r\n    // Will not panic if they are the same\r\n    assert_eq!(penguin_one, penguin_two);\r\n}</code></pre>\r\n<h2 id=\"Reference-Pointers\">Reference Pointers</h2>\r\n<p><span id=\"Wrong-Way:\"></span><strong>Wrong Way:</strong></p>\r\n<pre><code>fn print_u8_vector(vec: Vec&lt;u8&gt;) {\r\n    println!(&quot;{:?}&quot;, vec);\r\n}\r\n\r\nfn main() {\r\n    let penguin_ages: Vec&lt;u8&gt; = vec!(2, 4, 6);\r\n    print_u8_vector(penguin_ages);\r\n    \r\n    // This line will throw an error\r\n    println!(&quot;{}&quot;, penguin_ages[0]);\r\n}</code></pre>\r\n<p><span id=\"Correct-Way:\"></span><strong>Correct Way:</strong></p>\r\n<pre><code>fn print_u8_vector(vec: &amp;Vec&lt;u8&gt;) {\r\n    println!(&quot;{:?}&quot;, vec);\r\n}\r\n\r\nfn main() {\r\n    let penguin_ages: Vec&lt;u8&gt; = vec!(2, 4, 6);\r\n    print_u8_vector(&amp;penguin_ages);\r\n    \r\n    // This line will print &#39;2&#39;\r\n    println!(&quot;{}&quot;, penguin_ages[0]);\r\n}</code></pre>\r\n<h2 id=\"Immutable-By-Default\">Immutable By Default</h2>\r\n<p><span id=\"Wrong-Way:\"></span><strong>Wrong Way:</strong></p>\r\n<pre><code>fn main() {\r\n    let my_num = 2;\r\n    \r\n    // This line will throw an error\r\n    my_num = my_num + 1;\r\n    println!(&quot;{}&quot;, my_num);\r\n}</code></pre>\r\n<p><span id=\"Correct-Way:\"></span><strong>Correct Way:</strong></p>\r\n<pre><code>fn main() {\r\n    let mut my_num = 2;\r\n    my_num = my_num + 1;\r\n    \r\n    // This line will print &#39;3&#39;\r\n    println!(&quot;{}&quot;, my_num);\r\n}</code></pre>\r\n<h2 id=\"Unsafe-Code\">Unsafe Code</h2>\r\n<p><span id=\"Hello-World-Program-in-C-in-Rust:\"></span><strong>Hello World Program in C in Rust:</strong></p>\r\n<pre><code>extern &quot;C&quot; {\r\n    fn printf(input: &amp;str);\r\n}\r\n\r\nfn main() {\r\n    unsafe {\r\n        printf(&quot;Hello, World!&quot;);\r\n    }\r\n}</code></pre>\r\n<ul>\r\n<li><span id=\"Important-Links\"></span><strong>Important Links</strong>:\r\n<ul>\r\n<li><a href=\"https://www.rust-lang.org\">Rust Programming Language Homepage</a></li>\r\n<li><a href=\"https://play.rust-lang.org/\">Rust Playground</a></li>\r\n<li><a href=\"https://invidious.snopyta.org/watch?v=yOyaJXpAYZQ\">Ben Eater: Comparing C to machine language</a> &lt;WARNING: YouTube Hosted&gt;</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li><span id=\"Wikipedia-Pages\"></span><strong>Wikipedia Pages</strong>:\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Rust_(programming_language)\">Rust Programming Language Wikipedia article</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization\">Resource Acquisition Is Initialization (RAII)</a></li>\r\n</ul></li>\r\n</ul>\r\n<hr />\r\n<h4 id=\"Contact-Me\">Contact Me</h4>\r\n<p><span id=\"Email:\"></span><strong>Email:</strong> <a href=\"mailto:izzyleibowitz@pm.me\">izzyleibowitz at pm dot me</a></p>\r\n<p><span id=\"Mastodon:\"></span><strong>Mastodon:</strong> <a href=\"https://nixnet.social/BlacKernel\">at blackernel at nixnet dot social</a></p>',396,25,0,'CC-BY-SA','rust, programming, raii, python, c',0,0,1),
(3418,'2021-09-08','My gEeeky Experiment - Part 2',648,'Claudio talks about how he installed Haiku on an Asus Eee PC 900a received from a friend.','<ul>\r\n<li>Eee PC 900a: <a href=\"https://www.notebookcheck.net/Asus-Eee-PC-900A.11751.0.html\" class=\"uri\">https://www.notebookcheck.net/Asus-Eee-PC-900A.11751.0.html</a></li>\r\n</ul>\r\n<!-- . -->\r\n<ul>\r\n<li>Haiku (Wikipedia): <a href=\"https://en.wikipedia.org/wiki/Haiku_(operating_system)\" class=\"uri\">https://en.wikipedia.org/wiki/Haiku_(operating_system)</a></li>\r\n<li>Haiku website: <a href=\"https://www.haiku-os.org\" class=\"uri\">https://www.haiku-os.org</a></li>\r\n<li>Media Release - Haiku R1 Beta 3: <a href=\"https://www.haiku-os.org/news/2021-07-26_media_release_the_haiku_project_celebrates_the_release_of_beta_3\" class=\"uri\">https://www.haiku-os.org/news/2021-07-26_media_release_the_haiku_project_celebrates_the_release_of_beta_3</a></li>\r\n</ul>\r\n<!-- . -->\r\n<ul>\r\n<li>Be Operating System (BeOS): <a href=\"https://en.wikipedia.org/wiki/BeOS\" class=\"uri\">https://en.wikipedia.org/wiki/BeOS</a></li>\r\n<li>Be, Inc.: <a href=\"https://en.wikipedia.org/wiki/Be_Inc\" class=\"uri\">https://en.wikipedia.org/wiki/Be_Inc</a>.</li>\r\n<li>BeBox: <a href=\"https://en.wikipedia.org/wiki/BeBox\" class=\"uri\">https://en.wikipedia.org/wiki/BeBox</a></li>\r\n</ul>\r\n<!-- . -->\r\n<ul>\r\n<li>Motorola StarMax series of Power Macintosh clones: <a href=\"https://en.wikipedia.org/wiki/Motorola_StarMax\" class=\"uri\">https://en.wikipedia.org/wiki/Motorola_StarMax</a></li>\r\n<li>Video of my StarMax 4000/160: <a href=\"https://www.youtube.com/watch?v=zi5DwqqZfUQ\" class=\"uri\">https://www.youtube.com/watch?v=zi5DwqqZfUQ</a></li>\r\n</ul>\r\n<!-- . -->\r\n<ul>\r\n<li><p>Blog post: <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></p></li>\r\n<li><p>HP EliteBook 2170p: <a href=\"https://support.hp.com/ro-en/document/c03406489\" class=\"uri\">https://support.hp.com/ro-en/document/c03406489</a></p></li>\r\n</ul>\r\n',152,0,0,'CC-BY-SA','asus,eeepc,haiku,beos,starmax,bebox,motorola,be',0,0,1),
(3423,'2021-09-15','\"upg.sh\" my \"dump.txt\" to \"note.md\"',2278,'I upgraded my scripts.','<h1 id=\"upgsh-my-dumptxt-to-notemd\">upg.sh my dump.txt to note.md</h1>\r\n<p><strong>SYNOPSIS:</strong> <em>upg.sh</em></p>\r\n<ul>\r\n<li>Upgrade your system and store stdout into a markdown file.</li>\r\n</ul>\r\n<pre><code>#!/bin/bash\r\n# upg.sh\r\n\r\nFILENAME=sys-upgrade$(date +%m-%d-%Y).md\r\nDIRECTORY=&quot;${HOME}/Documents/&quot;\r\n\r\n# step 1: formatting.\r\necho -e &quot;# **System Upgrade:** $(date)\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;**Command:** \\`sudo apt-get update; sudo apt-get upgrade --yes\\`\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;**Command Breakdown:**&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;- \\`sudo\\`, Admin Privilages.&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;- \\`apt-get\\`, Package Manager.&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;- \\`update;\\`, Package Manager&#39;s task; update the system software repositories.&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;- \\`sudo apt-get upgrade\\`, Perform system upgrade with updated repositories.&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;- \\`--yes\\`, Answers yes to the prompt.&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\n# step 2: run commands with formatting.\r\necho -e &quot;\\n**Command std-output:**\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n    echo $(date) \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nsudo apt-get update \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\n# System update completed.\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nsudo apt-get upgrade --yes \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\n# System upgrade completed.\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\n# step 3: additional details with more formatting.\r\necho -e &quot;**Upgraded Package Details:**\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nPKGLIST=$(sed -n &quot;/The following packages will be upgraded:/,/^.. upgraded/p&quot; ${FILENAME} \\\r\n    | sed &#39;1d;$d&#39; | xargs -n 1 | sed &#39;/:i386$/d&#39;) \\\r\n\r\nPKGCACHE=$(echo -e &quot;${PKGLIST}\\n&quot; \\\r\n    | xargs -n1 -I _ apt-cache search _)\r\necho &quot;${PKGCACHE}&quot; &gt; ${DIRECTORY}delete.txt\r\n\r\necho &quot;${PKGLIST}&quot; \\\r\n    | xargs -n 1 -I _ echo &quot;sed -n &#39;/^_ /p&#39;&quot; &quot;${DIRECTORY}delete.txt&quot; \\\r\n    | bash | tee -a ${DIRECTORY}${FILENAME};\r\n\r\necho -e &quot;\\`\\`\\`&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nrm -v ${DIRECTORY}delete.txt;\r\nPKGLIST=\r\nPKGCACHE=\r\n\r\n# step 4: place EOF (end of file).\r\n    sed -i &#39;/EOF/d&#39; ${DIRECTORY}${FILENAME}\r\necho &quot;EOF&quot; &gt;&gt; ${DIRECTORY}${FILENAME}\r\n#EOF\r\n</code></pre>\r\n<p><strong>Script breakdown:</strong> <em>upg.sh</em></p>\r\n<ul>\r\n<li><p>First, we declare bash as our shell with <code>#!/bin/bash</code>. We could also use <code>#!/bin/sh</code> for a more portable script.</p></li>\r\n<li><p>I like to paste the name of the script we\'re working on into the script itself <code># upg.sh</code>.</p></li>\r\n<li><p>Setup a couple of variables to shorten the syntax.</p></li>\r\n</ul>\r\n<pre><code>FILENAME=sys-upgrade$(date +%m-%d-%Y).md\r\nDIRECTORY=&quot;${HOME}/Documents/&quot;\r\n</code></pre>\r\n<ul>\r\n<li><code># step 1: formatting.</code>\r\n<ul>\r\n<li>Build labels and a short breakdown of the update/upgrade commands used.</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>echo -e &quot;# **System Upgrade:** $(date)\\n&quot; \\                                                    &lt;-- formatting: label with date.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\necho -e &quot;**Command:** \\`sudo apt-get update; sudo apt-get upgrade --yes\\`\\n&quot; \\                 &lt;-- formatting: command label.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\necho -e &quot;**Command Breakdown:**&quot; \\                                                             &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\necho -e &quot;- \\`sudo\\`, Admin Privilages.&quot; \\                                                      &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\necho -e &quot;- \\`apt-get\\`, Package Manager.&quot; \\                                                    &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\necho -e &quot;- \\`update;\\`, Package Manager&#39;s task; update the system software repositories.&quot; \\    &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\necho -e &quot;- \\`sudo apt-get upgrade\\`, Perform system upgrade with updated repositories.&quot; \\      &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\necho -e &quot;- \\`--yes\\`, Answers yes to the prompt.&quot; \\                                            &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           &lt;-- path/to/file\r\n</code></pre>\r\n<ul>\r\n<li><code># step 2: run commands with formatting.</code>,\r\n<ul>\r\n<li>Setup labels and an area for the stdout to be store with markdown formatting.</li>\r\n<li>We place the time and date into the stdout area then run the commands.</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>echo -e &quot;\\n**Command std-output:**\\n&quot; \\                                                        &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`&quot; \\                                                                             &lt;-- formatting: markdown.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n    echo $(date) \\                                                                             &lt;-- command: date.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nsudo apt-get update \\                                                                          &lt;-- command: update.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\n# System update completed.\\n&quot; \\                                                     &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nsudo apt-get upgrade --yes \\                                                                   &lt;-- command: upgrade with &quot;--yes&quot; option.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\n# System upgrade completed.\\n&quot; \\                                                    &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`\\n&quot; \\                                                                           &lt;-- formatting: markdown.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n</code></pre>\r\n<ul>\r\n<li><code># step 3: additional details with more formatting.</code>,\r\n<ul>\r\n<li>List the packages that were upgraded with details from system cache.</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>echo -e &quot;**Upgraded Package Details:**\\n&quot; \\                                                    &lt;-- formatting: label.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`&quot; \\                                                                             &lt;-- formatting: markdown.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nPKGLIST=$(sed -n &quot;/The following packages will be upgraded:/,/^.. upgraded/p&quot; ${DIRECTORY}${FILENAME} \\  &lt;--| variable with list of packages within it.\r\n    | sed &#39;1d;$d&#39; | xargs -n 1 | sed &#39;/:i386$/d&#39;) \\                                            &lt;--| sed: filter the first and last lines then remove the :i386 duplicate packages.\r\n\r\nPKGCACHE=$(echo -e &quot;${PKGLIST}\\n&quot; \\                                                            &lt;--| variable with massive apt-cache search results.\r\n    | xargs -n1 -I _ apt-cache search _)                                                       &lt;--| xargs runs the PKGLIST (the _ is the value of PKGLIST) into the apt-cache search.\r\necho &quot;${PKGCACHE}&quot; &gt; ${DIRECTORY}delete.txt                                                    &lt;--| I had to put the PKGCACHE in a file. I couldn&#39;t get sed to filter a variable (yet).\r\n\r\necho &quot;${PKGLIST}&quot; \\                                                                            &lt;--| use that PKGLIST to create a few sed commands to filter the file called &quot;delete.txt&quot;.\r\n    | xargs -n 1 -I _ echo &quot;sed -n &#39;/^_ /p&#39;&quot; &quot;${DIRECTORY}delete.txt&quot; \\                        ^--| xargs is used to create the sed commands.\r\n    | bash | tee -a ${DIRECTORY}${FILENAME};                                                   &lt;--| run the sed commands through bash then store them.\r\n\r\necho -e &quot;\\`\\`\\`&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\nrm -v ${DIRECTORY}delete.txt;                                                                  &lt;--| use rm to delete the file called &quot;delete.txt&quot; it has the apt-cache search results in it.\r\nPKGLIST=                                                                                       &lt;--| empty the variable. why? why not!\r\nPKGCACHE=                                                                                      &lt;--| empty the variable. why? why not!\r\n</code></pre>\r\n<ul>\r\n<li><code># step 4: place EOF (end of file).</code>,\r\n<ul>\r\n<li>Add EOF (END OF FILE) to the end of the file. If one is already there, -</li>\r\n<li>it\'s removed then replaced in the correct position.</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>    sed -i &#39;/EOF/d&#39; ${DIRECTORY}${FILENAME}                                                    &lt;--| search for EOF then remove it. we don&#39;t want multiple EOF if we run the script multiple times in the same day.\r\necho &quot;EOF&quot; &gt;&gt; ${DIRECTORY}${FILENAME}                                                          ^--| adds the EOF (End Of File) at the end of the file.  I read it was a nice thing to do.\r\n#EOF                                                                                           &lt;--| Yep. it&#39;s there.\r\n\r\n</code></pre>\r\n<hr />\r\n<p><strong>SYNOPSIS:</strong> <em>note.sh</em> \"command\" \"filename\"</p>\r\n<ul>\r\n<li>example: note.sh \"ls -lhA\" \"basic-list\"</li>\r\n<li>make markdown notes of your commands.</li>\r\n</ul>\r\n<pre><code>#!/bin/bash\r\n# note.sh &quot;command&quot; &quot;filename&quot; no extentions.\r\n\r\n# variables\r\nFILENAME=$2$(date +%m-%d-%Y).md\r\nDIRECTORY=&quot;${HOME}/Documents/&quot;\r\n\r\n# step 1: create file with formatting.\r\necho -e &quot;# **Command:** \\` $1 \\`\\n&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;**Command Breakdown:**&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho &quot;$1&quot; | tr &quot; &quot; &#39;\\n&#39; \\\r\n    | awk &#39;{ print &quot;- `&quot; $0 &quot;`, info.&quot; }&#39; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\n# step 2: run command with more formatting.\r\necho -e &quot;\\n**Command std-output:**&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`\\n$(date)&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\necho $1 | bash \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\necho -e &quot;\\`\\`\\`&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\necho -ne &quot;\\n${FILENAME} has been updated $(date).&quot;\r\n\r\n# step 3: insert EOF (End Of File).\r\nsed -i &#39;/EOF/d&#39; ${DIRECTORY}${FILENAME}\r\necho EOF &gt;&gt; ${DIRECTORY}${FILENAME}\r\n</code></pre>\r\n<p><strong>Script breakdown:</strong> <em>upg.sh</em></p>\r\n<ul>\r\n<li><p>First, we declare bash as our shell with <code>#!/bin/bash</code>. We could also use <code>#!/bin/sh</code> for a more portable script.</p></li>\r\n<li><p>I like to paste the name of the script we\'re working on into the script itself <code># upg.sh</code>.</p></li>\r\n<li><p>Setup a couple of variables to shorten the syntax.</p></li>\r\n</ul>\r\n<pre><code>FILENAME=$2$(date +%m-%d-%Y).md                                                                &lt;--| the &quot;$2&quot; is the second user input (file name) from the commandline.\r\nDIRECTORY=&quot;${HOME}/Documents/&quot;\r\n</code></pre>\r\n<ul>\r\n<li><code># step 1: create file with formatting.</code>\r\n<ul>\r\n<li>Build labels for Command Name with a short breakdown of the command(s) used.</li>\r\n<li><strong>Note:</strong> the breakdown must be entered manually.</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>echo -e &quot;# **Command:** \\` $1 \\`\\n&quot; \\                                                          &lt;--| the &quot;$1&quot; is the first user input (the command) from the commandline.\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;**Command Breakdown:**&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho &quot;$1&quot; | tr &quot; &quot; &#39;\\n&#39; \\                                                                      &lt;--| This just breaks the command into parts then adds some markdown formatting for use to add -\r\n    | awk &#39;{ print &quot;- `&quot; $0 &quot;`, info.&quot; }&#39; \\                                                    ^--| details to later. I just added the word info so you know to provide info about the command. -\r\n    | tee -a ${DIRECTORY}${FILENAME}                                                           ^--| the formatting gets a bit crazy if you use something like: awk {&#39; print $1 $2 $3 &#39;} path/to/file;  each space becomes a newline with the markdown formatting.\r\n</code></pre>\r\n<ul>\r\n<li><code># step 2: run command with more formatting.</code>\r\n<ul>\r\n<li>Echo the Command into <em>bash</em> with markdown formatting for stdout.</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>echo -e &quot;\\n**Command std-output:**&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\necho -e &quot;\\`\\`\\`\\n$(date)&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\necho $1 | bash \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\necho -e &quot;\\`\\`\\`&quot; \\\r\n    | tee -a ${DIRECTORY}${FILENAME}\r\n\r\necho -ne &quot;\\n${FILENAME} has been updated $(date).&quot;\r\n</code></pre>\r\n<ul>\r\n<li><code># step 3: insert EOF (End Of File).</code>\r\n<ul>\r\n<li>Add EOF (END OF FILE) to the end of the file. If one is already there, -</li>\r\n<li>it\'s removed then replaced in the correct position.</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>sed -i &#39;/EOF/d&#39; ${DIRECTORY}${FILENAME}\r\necho EOF &gt;&gt; ${DIRECTORY}${FILENAME}\r\n</code></pre>\r\n<hr />\r\n<p><strong>Correspondent:</strong> <a href=\"https://hackerpublicradio.org/correspondents/0391.html\">Some Guy On The Internet.</a><br />\r\n<strong>Host ID:</strong> 391<br />\r\n<strong>E-mail:</strong> <a href=\"/tmp/.mount_Joplin1UDfeV/resources/app.asar/Lyunpaw@gmail.com\" title=\"Lyunpaw@gmail.com\">Lyunpaw.nospam@nospam.gmail.com</a></p>\r\n<ul>\r\n<li>use <strong>\"hpr391\"</strong> as the subject line for all emails to avoid the junk filter.</li>\r\n<li><a href=\"https://drive.google.com/file/d/1vaGWVv48IcPNXXBknDer8ZBsUvix6qp4/view?usp=sharing\">show notes markdown file</a> <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\"><img src=\"https://i.creativecommons.org/l/by-sa/4.0/88x31.png\" alt=\"Creative Commons License\" /></a> This work is licensed under a <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</li>\r\n</ul>\r\n',391,0,0,'CC-BY-SA','Bash Scripting, sed, awk, xargs, markdown, notes',0,0,1),
(3427,'2021-09-21','Ranger for the Win!',1096,'In this episode, I go over some typical use cases for the Ranger file manager','<h2 id=\"programs-referenced-in-this-episode\">Programs referenced in this episode</h2>\r\n<ul>\r\n<li>ranger</li>\r\n<li>caca-utils</li>\r\n<li>poppler-utils</li>\r\n<li>atool</li>\r\n<li>highlight</li>\r\n<li>trash-cli</li>\r\n<li>xlsx2csv</li>\r\n<li>docs2txt</li>\r\n<li>catdoc (for doc2txt and xls2csv)</li>\r\n<li>ods2tsv</li>\r\n</ul>\r\n',300,0,0,'CC-BY-SA','ranger,file manager,linux',0,0,1),
(3428,'2021-09-22','Bad disk rescue',1794,'Bad disk rescue - tragedy or happy ending?','<p>Here I tell the tale of a bad disk rescue. Is the rescue bad or just the disk? Well the disk is most certainly bad but please listen and tell me if the rescue was good or bad or could have been done better.</p>\r\n<p>Guest stars in this show include:</p>\r\n<ul>\r\n<li>dd</li>\r\n<li>ddrescue</li>\r\n<li>losetup</li>\r\n<li>mount</li>\r\n<li>badblocks</li>\r\n<li>smartctl</li>\r\n<li>The <a href=\"https://www.system-rescue.org\">System rescue distro</a></li>\r\n</ul>',268,0,0,'CC-BY-SA','linux,disk,windows,virtualbox',0,0,1),
(3422,'2021-09-14','Update about Phones and Devices',1341,'An Update about my New Phone and second one that is coming','<p>Small update about my new RedMi 10s and my new Monty Mint phone.</p>\r\n<ul>\r\n<li><a href=\"https://www.gsmarena.com/xiaomi_redmi_note_10s-10769.php\">https://www.gsmarena.com/xiaomi_redmi_note_10s-10769.php</a></li>\r\n<li><a href=\"https://ogadget.com/x/mony\">https://ogadget.com/x/mony</a></li>\r\n</ul>',129,0,0,'CC-BY-SA','Android, phone, Linux, Pine64, Smart Watch',0,0,1),
(3424,'2021-09-16','Infosec Podcasts Part 6 - Infosec Leadership',721,'Presenting my favorite information security leadership podcasts','<p>Inoffensive in every region of the world.</p>\r\n<p>Thank you to everyone who has listened to my previous episodes. This is the final episode in the Infosec Podcasts series.</p>\r\n<p>I listen to many, MANY podcasts. The vast majority of these are related to information security.</p>\r\n<p>Because there are so many podcasts to list, I have broken them down into 6 different episodes based on topics:</p>\r\n<ul>\r\n<li>Part 1 - News & Current Events - Episode 3324</li>\r\n<li>Part 2 - General Information Security - Episode 3334</li>\r\n<li>Part 3 - Career & Personal Development - Episode 3344</li>\r\n<li>Part 4 - Social Engineering - Episode 3368</li>\r\n<li>Part 5 - Episode 3387\r\n<ul>\r\n<li>Hacks & Attacks</li>\r\n<li>Technical Information & Learning</li>\r\n<li>Infosec Community / Social / History</li>\r\n<li>Part 6 - Infosec Leadership</li>\r\n</ul></li>\r\n</ul>\r\n<p><strong>Preamble</strong></p>\r\n<p>Term: CISO</p>\r\n<ul>\r\n<li>Pronounced SEE-so or SAI-so</li>\r\n<li>Chief Information Security Officer</li>\r\n<li>Sounds like executive leadership position, similar to Chief Executive Officer (CEO), Chief Financial Officer (CFO), etc but this is often not the case</li>\r\n</ul>\r\n<p>Security leadership is changing</p>\r\n<p>Old way:</p>\r\n<ul>\r\n<li>Experienced technologists (Usually old white guys) worked way up ranks</li>\r\n<li>Usually reported through IT (CIO/CTO)</li>\r\n<li>Department of \"No\" - Block everything bad</li>\r\n<li>Slows down business</li>\r\n</ul>\r\n<p>New way:</p>\r\n<ul>\r\n<li>Experienced business professionals with leadership skills and security understanding</li>\r\n<li>Can report through:\r\n<ul>\r\n<li>IT (CIO/CTO)</li>\r\n<li>Legal (For compliance reasons)</li>\r\n<li>Finance (CFO) for governance or compliance reasons</li>\r\n<li>Financial impacts of attacks</li>\r\n<li>Direct costs</li>\r\n<li>Fines</li>\r\n<li>CEO - Seat at the table with other C-level execs</li>\r\n<li>Direct to board</li>\r\n</ul></li>\r\n<li>Empowers the business to succeed in a secure way</li>\r\n<li>Can still slow down the business, but only when needed\r\n<ul>\r\n<li>Brakes on a race car</li>\r\n</ul></li>\r\n</ul>\r\n<p><strong>Infosec Leadership Podcasts</strong></p>\r\n<ul>\r\n<li>CISO Tradecraft - G Mark Hardy (Weekly)\r\n<ul>\r\n<li>Discussion of topics related to becoming a CISO or maturing as a CISO</li>\r\n<li><a href=\"https://www.cisotradecraft.com/\" class=\"uri\">https://www.cisotradecraft.com/</a></li>\r\n</ul></li>\r\n<li>CISO Vendor Relationship Podcast - David Spark & Guests (Weekly)\r\n<ul>\r\n<li>Weekly podcast addressing the challenges experienced by both security professionals and the vendors with whom they interact.</li>\r\n<li><a href=\"https://cisoseries.com/subscribe-podcast/\" class=\"uri\">https://cisoseries.com/subscribe-podcast/</a></li>\r\n</ul></li>\r\n<li>CISO Talks (Weekly)\r\n<ul>\r\n<li>The talk show series with discussions of current trends in the world of information security with CISOs on the front line.</li>\r\n<li><a href=\"https://www.lepide.com/ciso-talks.html\" class=\"uri\">https://www.lepide.com/ciso-talks.html</a></li>\r\n</ul></li>\r\n<li>CISO Talk - James Azar (Weekly)\r\n<ul>\r\n<li>Presents the CISO view on cybersecurity, talent development, technology, leadership and much more.</li>\r\n<li><a href=\"https://cisotalk.podbean.com/\" class=\"uri\">https://cisotalk.podbean.com/</a></li>\r\n</ul></li>\r\n<li>The Cyber Ranch Podcast - Allan Alford & Hacker Valley Studios (Weekly)\r\n<ul>\r\n<li>Interviews with security leaders discussing relevant topics</li>\r\n<li><a href=\"https://hackervalley.com/cyberranch/\" class=\"uri\">https://hackervalley.com/cyberranch/</a></li>\r\n</ul></li>\r\n<li>CISO\'s Secrets - Currently hosted by Grant Asplund and sponsored by Checkpoint\r\n<ul>\r\n<li>Interviews with security leaders across a wide range of industries</li>\r\n<li>Addresses real issues facing security professionals and businesses</li>\r\n<li><a href=\"https://cp.buzzsprout.com/\" class=\"uri\">https://cp.buzzsprout.com/</a></li>\r\n</ul></li>\r\n<li>CISO Stories - Hosted by Todd Fitzgerald and Sam Curry and part of the Security Weekly family of podcasts\r\n<ul>\r\n<li>Based originally on interviews with security leaders who contributed to the book \"CISO COMPASS: Navigating Cybersecurity Leadership Challenges with Insights from Pioneers\"</li>\r\n<li>Episodes are usually only about 20 minutes</li>\r\n<li><a href=\"https://securityweekly.com/category-shows/\">https://securityweekly.com/category-shows/the-ciso-stories-podcast/</a></li>\r\n</ul></li>\r\n<li>The New CISO - Hosted by Exabeam\'s Chief Security Strategist, Steve Moore and Sponsored by Exabeam\r\n<ul>\r\n<li>Interviews with industry leading and visionary security leaders</li>\r\n<li>How do lead security teams and business</li>\r\n<li>Interacting with business leaders</li>\r\n<li><a href=\"https://www.exabeam.com/fr/library-by-type/ciso-podcasts/\" class=\"uri\">https://www.exabeam.com/fr/library-by-type/ciso-podcasts/</a></li>\r\n</ul></li>\r\n</ul>\r\n<p>That wraps up this series. I welcome any feedback you might have in the comments section for this episode on the HPR site.</p>\r\n<p>Thank you very much for listening.</p>\r\n',394,75,0,'CC-BY-SA','infosec, podcasts, security, leadership',0,0,1),
(3429,'2021-09-23','Linux Inlaws S01E39: Ubuntu and the Community',5207,'All about your favourite Debian spin and IBM mainframes','<p>\r\n    In this episode, our two hosts host Rhys Davies, a developer advocate from Canonical. So all\r\n    beans will be spilled on one of the most popular Linux distros out there. Like its past, present\r\n    and future. Never mind how Canonical makes its moolah and where this goes... Plus an interesting\r\n    infomercial on old big iron (IBM, if you\'re listening: the mail address is sponsor@linuxinlaws.eu).\r\n</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Canonical: <a href=\"https://canonical.com\" target=_blank>https://canonical.com</a></li>\r\n<li>Ubuntu: <a href=\"https://ubuntu.com\" target=_blank>https://ubuntu.com</a></li>\r\n<li>Manjaro: <a href=\"https://manjaro.org\" target=_blank>https://manjaro.org</a></li>\r\n<li>WSL: <a href=\"https://wiki.ubuntu.com/WSL\" target=_blank>https://wiki.ubuntu.com/WSL</a></li>\r\n<li>Snapcraft: <a href=\"https://snapcraft.io\" target=_blank>https://snapcraft.io</a></li>\r\n<li>Ubuntu community reboot: <a href=\"https://ubuntu.com/blog/reintroducing-the-community-team\" target=_blank>https://ubuntu.com/blog/reintroducing-the-community-team</a></li>\r\n<li>Chromium as a snap: <a href=\"https://snapcraft.io/blog/chromium-in-ubuntu-deb-to-snap-transition\" target=_blank>https://snapcraft.io/blog/chromium-in-ubuntu-deb-to-snap-transition</a></li>\r\n<li>Ubuntu podcast episode on this issue: <a href=\"https://ubuntupodcast.org/2020/06/04/s13e11-inside-out-clothes\" target=_blank>https://ubuntupodcast.org/2020/06/04/s13e11-inside-out-clothes</a></li>\r\n<li>Canonical\'s transition from upstart to systemd: <a href=\"https://lists.ubuntu.com/archives/ubuntu-devel/2016-July/039465.html\" target=_blank>https://lists.ubuntu.com/archives/ubuntu-devel/2016-July/039465.html</a></li>\r\n<li>LinuxONE and Ubuntu: <a href=\"https://ubuntu.com/blog/tag/linuxone\" target=_blank>https://ubuntu.com/blog/tag/linuxone</a></li>\r\n<li>Rhys\' presentation at the Linux App Summit: <a href=\"https://conf.linuxappsummit.org/event/3/contributions/65\" target=_blank>https://conf.linuxappsummit.org/event/3/contributions/65</a></li>\r\n<li>Critical Role: <a href=\"https://critrole.com\" target=_blank>https://critrole.com</a></li>\r\n<li>Hazy Jane: <a href=\"https://www.brewdog.com/eu_de/hazy-jane-440-eu\" target=_blank>https://www.brewdog.com/eu_de/hazy-jane-440-eu</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Debian, Ubuntu, IBM, mainframes, snaps, Canonical',0,0,1),
(3451,'2021-10-25','Bricklink',837,'Custom 3rd Part Lego Shops','<ul>\r\n<li>beware shipping prices</li>\r\n<li>always use Instant Checkout</li>\r\n<li>be sure to check USA</li>\r\n<li>2-3x the cost of lego.com set</li>\r\n<li>paying 3-5 people via paypal ....</li>\r\n<li>no way to easy share wanted list ...</li>\r\n<li>LOST :( https://rmccurdy.com/.scripts/downloaded/CL4P-TP%20Claptrap%20Borderlands%20Bricklink.xml</li>\r\n<li>7 missing out of 216 on one shipment</li>\r\n</ul>\r\n<!-- Photo: -->\r\n<!-- https://drive.google.com/file/d/16r1dyJZzqbLRfx0iKB2orj0MdNC_8yXl/view?usp=sharing -->\r\n<p><em>Photo</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3451/hpr3451/20210829_212454.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3451/hpr3451/20210829_212454_thumbnail.jpg\" alt=\"Photo\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n',36,0,0,'CC-BY-SA','lego',0,0,1),
(3432,'2021-09-28','Reading a license: Creative Commons Attribution ShareAlike 4.0 International',1956,'We jump into the future of 2013 and see how content licensing has changed','<p>Previous episode: <a href=\"https://hackerpublicradio.org/eps.php?id=3412\">https://hackerpublicradio.org/eps.php?id=3412</a><br><em>hpr3412 :: Reading a license: Creative Commons Attribution ShareAlike 3.0 Unported</em></p>\r\n<p>Timeline</p>\r\n<ul>\r\n<li>2007-02-23 <a href=\"https://creativecommons.org/2007/02/23/version-30-launched/\">https://creativecommons.org/2007/02/23/version-30-launched/</a></li>\r\n<li>2007-09-26 <a href=\"https://www.gnu.org/licenses/gpl-3.0.html\">https://www.gnu.org/licenses/gpl-3.0.html</a></li>\r\n<li>2011-11-03 <a href=\"https://creativecommons.org/2011/11/03/copyright-experts-discuss-cc-license-version-4-0-at-the-global-summit/\">https://creativecommons.org/2011/11/03/copyright-experts-discuss-cc-license-version-4-0-at-the-global-summit/</a><ul>\r\n<li>Internationalization</li>\r\n<li>Interoperability</li>\r\n<li>Long-lasting</li>\r\n<li>Data/PSI (Public Sector Information?)/Science/Education</li>\r\n<li>Supporting Existing Adoption Models and Frameworks</li>\r\n</ul>\r\n</li>\r\n<li>2013-11-25 <a href=\"https://creativecommons.org/2013/11/25/ccs-next-generation-licenses-welcome-version-4-0/\">https://creativecommons.org/2013/11/25/ccs-next-generation-licenses-welcome-version-4-0/</a><ul>\r\n<li>30-day violation grace period<br><a href=\"https://creativecommons.org/faq/#how-can-i-lose-my-rights-under-a-creative-commons-license-if-that-happens-how-do-i-get-them-back\">https://creativecommons.org/faq/#how-can-i-lose-my-rights-under-a-creative-commons-license-if-that-happens-how-do-i-get-them-back</a></li>\r\n</ul>\r\n</li>\r\n<li>2013-12-06 16Z--18Z CC site moves to 4.0 -- last snapshot with 3.0 is <a href=\"https://web.archive.org/web/20131206155520/https://creativecommons.org/\">https://web.archive.org/web/20131206155520/https://creativecommons.org/</a></li>\r\n<li>2014-10-21 CC-by-SA 4.0 and Free Art License 1.3 defined as two-way compatible licenses<br><a href=\"https://creativecommons.org/2014/10/21/big-win-for-an-interoperable-commons-by-sa-and-fal-now-compatible/\">https://creativecommons.org/2014/10/21/big-win-for-an-interoperable-commons-by-sa-and-fal-now-compatible/</a></li>\r\n<li>2015-10-08 GPLv3 defined as a one-way compatible license for CC-by-SA 4.0<br><a href=\"https://creativecommons.org/2015/10/08/cc-by-sa-4-0-now-one-way-compatible-with-gplv3/\">https://creativecommons.org/2015/10/08/cc-by-sa-4-0-now-one-way-compatible-with-gplv3/</a></li>\r\n</ul>\r\n<p>Links to license and deed and links from within the texts</p>\r\n<ul>\r\n<li><a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">https://creativecommons.org/licenses/by-sa/4.0/</a></li>\r\n<li><a href=\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\">https://creativecommons.org/licenses/by-sa/4.0/legalcode</a><ul>\r\n<li><em>The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication.</em></li>\r\n</ul>\r\n</li>\r\n<li><a href=\"https://freedomdefined.org/\">https://freedomdefined.org/</a><br>Definition of <em>Free Cultural Works</em></li>\r\n<li><a href=\"https://wiki.creativecommons.org/License_Versions#Detailed_attribution_comparison_chart\">https://wiki.creativecommons.org/License_Versions#Detailed_attribution_comparison_chart</a><br>How to give credit</li>\r\n<li><a href=\"https://wiki.creativecommons.org/License_Versions#Modifications_and_adaptations_must_be_marked_as_such\">https://wiki.creativecommons.org/License_Versions#Modifications_and_adaptations_must_be_marked_as_such</a><br>How to mark a work as modified</li>\r\n<li><a href=\"https://wiki.creativecommons.org/FAQ#If_I_derive_or_adapt_material_offered_under_a_Creative_Commons_license.2C_which_CC_license.28s.29_can_I_use.3F\">https://wiki.creativecommons.org/FAQ#If_I_derive_or_adapt_material_offered_under_a_Creative_Commons_license.2C_which_CC_license.28s.29_can_I_use.3F</a><br>How and when you can relicense a work</li>\r\n<li><a href=\"https://wiki.creativecommons.org/License_Versions#Application_of_effective_technological_measures_by_users_of_CC-licensed_works_prohibited\">https://wiki.creativecommons.org/License_Versions#Application_of_effective_technological_measures_by_users_of_CC-licensed_works_prohibited</a><br>Definition of <em>effective technological measure</em></li>\r\n<li><a href=\"https://wiki.creativecommons.org/Frequently_Asked_Questions#Do_Creative_Commons_licenses_affect_exceptions_and_limitations_to_copyright.2C_such_as_fair_dealing_and_fair_use.3F\">https://wiki.creativecommons.org/Frequently_Asked_Questions#Do_Creative_Commons_licenses_affect_exceptions_and_limitations_to_copyright.2C_such_as_fair_dealing_and_fair_use.3F</a><br>When do you not need a license</li>\r\n<li><a href=\"https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees\">https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees</a><br>Limitations, scope, community practices and advice</li>\r\n<li><a href=\"https://wiki.creativecommons.org/FAQ\">https://wiki.creativecommons.org/FAQ</a></li>\r\n</ul>\r\n<p>Other links</p>\r\n<ul>\r\n<li>39 jurisdiction ports of by-SA 3.0 <a href=\"https://wiki.creativecommons.org/wiki/CC_Ports_by_Jurisdiction\">https://wiki.creativecommons.org/wiki/CC_Ports_by_Jurisdiction</a></li>\r\n<li>Next episode will be based on <a href=\"https://creativecommons.org/version4/\">https://creativecommons.org/version4/</a></li>\r\n</ul>\r\n<hr>\r\n<h2 id=\"creative-commons-license-deed\">Creative Commons License Deed</h2>\r\n<p>Original: <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">https://creativecommons.org/licenses/by-sa/4.0/</a></p>\r\n<p><em>The below is an Adaptation that has been reformatted for simplicity and focus on the text, removed graphical elements such as the Creative Commons Attribution and ShareAlike icons and has simple links to more info where there was originally a popup with a brief description and then a link.</em></p>\r\n<p><em>This Adaptation is released under CC-by 3.0: <a href=\"https://creativecommons.org/licenses/by/3.0/\">https://creativecommons.org/licenses/by/3.0/</a> </em></p>\r\n<h2 id=\"attribution-sharealike-4-0-international-cc-by-sa-4-0-\">Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</h2>\r\n<p>This is a human-readable summary of (and not a substitute for) the <a href=\"/eps/hpr3432/\">license</a>.</p>\r\n<h3 id=\"disclaimer\">Disclaimer</h3>\r\n<blockquote>\r\n<p>This deed highlights only some of the key features and\r\nterms of the actual license. It is not a license and\r\nhas no legal value. You should carefully review all of\r\nthe terms and conditions of the actual license before\r\nusing the licensed material.</p>\r\n<p>Creative Commons is not a law firm and does not\r\nprovide legal services. Distributing, displaying, or\r\nlinking to this deed or the license that it summarizes\r\ndoes not create a lawyer-client or any other\r\nrelationship.</p>\r\n</blockquote>\r\n<h3 id=\"you-are-free-to-\">You are free to:</h3>\r\n<ul>\r\n<li><strong>Share</strong> - copy and redistribute the material in any medium or format</li>\r\n<li><strong>Adapt</strong> - remix, transform, and build upon the material for any purpose, even commercially.</li>\r\n</ul>\r\n<p><a href=\"https://freedomdefined.org/\"><img src=\"https://creativecommons.org/images/deed/seal.png\" alt=\"This license is acceptable for Free Cultural Works.\"></a></p>\r\n<p>The licensor cannot revoke these freedoms as long as you follow the license terms.</p>\r\n<h3 id=\"under-the-following-terms-\">Under the following terms:</h3>\r\n<ul>\r\n<li><strong>Attribution</strong> - You must give <a href=\"https://wiki.creativecommons.org/License_Versions#Detailed_attribution_comparison_chart\">appropriate credit</a>, provide a link to the license, and <a href=\"https://wiki.creativecommons.org/License_Versions#Modifications_and_adaptations_must_be_marked_as_such\">indicate if changes were made</a>. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.</li>\r\n<li><strong>ShareAlike</strong> - If you remix, transform, or build upon the material, you must distribute your contributions under the <a href=\"https://wiki.creativecommons.org/FAQ#If_I_derive_or_adapt_material_offered_under_a_Creative_Commons_license.2C_which_CC_license.28s.29_can_I_use.3F\">same license</a> as the original.</li>\r\n<li><strong>No additional restrictions</strong> - You may not apply legal terms or <a href=\"https://wiki.creativecommons.org/License_Versions#Application_of_effective_technological_measures_by_users_of_CC-licensed_works_prohibited\">technological measures</a> that legally restrict others from doing anything the license permits.</li>\r\n</ul>\r\n<h3 id=\"notices-\">Notices:</h3>\r\n<ul>\r\n<li>You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable <a href=\"https://wiki.creativecommons.org/Frequently_Asked_Questions#Do_Creative_Commons_licenses_affect_exceptions_and_limitations_to_copyright.2C_such_as_fair_dealing_and_fair_use.3F\">exception or limitation</a>.</li>\r\n<li>No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as <a href=\"https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees\">publicity, privacy, or moral rights</a> may limit how you use the material.</li>\r\n</ul>\r\n<hr>\r\n<h2 id=\"creative-commons-legal-code\">Creative Commons Legal Code</h2>\r\n<p>Original: <a href=\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\">https://creativecommons.org/licenses/by-sa/4.0/legalcode</a>\r\nPlain Adaptation re-hosted on HPR: <a href=\"https://hackerpublicradio.org/eps/hpr3432/\">https://hackerpublicradio.org/eps/hpr3432/</a></p>\r\n',311,0,0,'CC-BY-SA','license, creative commons, recital, reading, legal',0,0,1),
(3433,'2021-09-29','A Squirrels thoughts about RMS',2565,'RMS and the subject of freedom','<hr />\r\n<p>\r\n<strong><em>\r\nThis podcast was provided by <a href=\"https://hackerpublicradio.org/correspondents/0377.html\">Zen_Floater2</a> in his personal capacity. The opinions expressed in this podcast are the author\'s own and do not reflect the view of Hacker Public Radio.<br />\r\n<small><a href=\"https://hackerpublicradio.org/stuff_you_need_to_know.php#not_moderated\">Shownotes Edited by Ken</a> on 2021-09-11T14:35:19Z to <a href=\"https://hackerpublicradio.org/stuff_you_need_to_know.php#explicit\">include disclaimer</a>.</small>\r\n</em></strong>\r\n</p>\r\n<hr />\r\n\r\n\r\n\r\n<p>\r\nA Squirrels thoughts about freedom and RMS.\r\n</p>\r\n<p>\r\nI also cover guns on aircraft. I cover smoking on aircraft.\r\n</p>\r\n<p>\r\nAnd I cover drinking beer on aircraft.\r\n</p>\r\n<p>\r\nAnd COBOL as well.\r\n</p>\r\n',377,0,1,'CC-BY-SA','RMS,Pedophilia,BEER',0,0,1),
(3434,'2021-09-30','From 0 to K8s in 30 minutes',1938,'Build a Kubernetes cluster, run a website, route traffic to website','<p><a href=\"https://people.centos.org/pgreco/\">Install CentOS</a> <a href=\"https://www.raspberrypi.org/software/\">or Debian</a> on a Raspberry Pi. I\'m using CentOS, but I\'ll admit that Debian is the easier option by far.</p>\r\n<p>Do this on 3 separate Pi units, each with the same specs.</p>\r\n<h2 id=\"set-hostnames\">Set hostnames</h2>\r\n<p>You must have unique hostnames for each Pi. Without unique hostnames, your cluster cannot function.</p>\r\n<p>There are several \"kinds\" of hostnames, so to avoid confusion I change all of them.</p>\r\n<p>I use a simple naming scheme: <code>k</code> for \"kubernetes\" + an integer, starting at 100 + <code>c</code> for \"cluster\":</p>\r\n<pre class=\"bash\"><code>$ sudo hostname k100c\r\n$ sudo sysctl kernel.hostname=k100c\r\n$ sudo hostnamectl set-hostname k100c\r\n$ sudo reboot\r\n</code></pre>\r\n<p>Do this for each Pi. At a minimum, you end up with Pi computers named k100c, k101c, and k102c.</p>\r\n<h2 id=\"set-verbose-prompts\">Set verbose prompts</h2>\r\n<p>When working with many different hosts, it\'s helpful to have a very verbose prompt as a constant reminder of which host you\'re connected to. Add this to the <code>~/.bashrc</code> of each Pi:</p>\r\n<pre><code>export PS1=\'\\[&#x005C;033[1;32m\\]\\! \\d \\t \\h:\\w \\n% \\[&#x005C;033[00m\\]\' \r\n</code></pre>\r\n<h2 id=\"install-a-pi-finder-script\">Install a Pi finder script</h2>\r\n<p>Install an LED blinker so you can find a specific Pi when you need one. This brilliant script is by Chris Collins for his article <a href=\"https://opensource.com/article/20/6/find-raspberry-pi\">Use this script to find a Raspberry Pi on your network</a>, which explains how to run it.</p>\r\n<pre class=\"bash\"><code>#!/bin/bash\r\n\r\nset -o errexit\r\nset -o nounset\r\n\r\ntrap quit INT TERM\r\n\r\nCOUNT=0\r\nLED=&quot;/sys/class/leds/led0&quot;\r\n\r\nif ! [ $(id -u) = 0 ]; then\r\n   echo &quot;Must be run as root.&quot;\r\n   exit 1\r\nfi\r\n\r\nif [[ ! -d $LED ]]\r\nthen\r\n  echo &quot;Could not find an LED at ${LED}&quot;\r\n  echo &quot;Perhaps try &#39;/sys/class/leds/ACT&#39;?&quot;\r\n  exit 1\r\nfi\r\n\r\nfunction quit() {\r\n  echo mmc0 &gt;&quot;${LED}/trigger&quot;\r\n}\r\n\r\necho -n &quot;Blinking Raspberry Pi&#39;s LED - press CTRL-C to quit&quot;\r\necho none &gt;&quot;${LED}/trigger&quot;\r\n\r\nwhile true\r\ndo\r\n  let &quot;COUNT=COUNT+1&quot;\r\n  if [[ $COUNT -lt 30 ]]\r\n  then\r\n    echo 1 &gt;&quot;${LED}/brightness&quot;\r\n    sleep 1\r\n    echo 0 &gt;&quot;${LED}/brightness&quot;\r\n    sleep 1\r\n  else\r\n    quit\r\n    break\r\n  fi\r\ndone\r\n</code></pre>\r\n<h2 id=\"install-k3s-on-your-control-plane\">Install K3s on your control plane</h2>\r\n<p>K3s is Kubernetes for IoT and Edge computing. It\'s the easiest, cleanest, and most serious method of getting Kubernetes on an ARM device. You can try other solutions (Microk8s, Minikube, OXD, and so on), but the best support comes from k3s.</p>\r\n<p>First, you must install k3s on one Pi. You can use any of your Pi units for this, but I use host k100c because it\'s the first in the sequence, so it feels logical.</p>\r\n<pre class=\"bash\"><code>[k100c]$ curl -sfL https://get.k3s.io -o install_k3s.sh\r\n[k100c]$ chmod 700 install_k3s.sh\r\n</code></pre>\r\n<p>Read the script to ensure that it seems to do what you expect, and then:</p>\r\n<pre class=\"bash\"><code>[k100c]$ ./install_k3s.sh\r\n</code></pre>\r\n<p>After installation, you\'re prompted to add some arguments to your bootloader. Open <code>/boot/cmdline.txt</code> in a text editor and add <code>cgroup_memory=1 cgroup_enable=memory</code> to the end of it.</p>\r\n<pre class=\"text\"><code>console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p3 rootfstype=ext4 elevator=deadline rootwait cgroup_memory=1 cgroup_enable=memory\r\n</code></pre>\r\n<p>Reboot:</p>\r\n<pre class=\"bash\"><code>[k100c]$ sudo reboot\r\n</code></pre>\r\n<p>Once the Pi is back up, verify that your node is ready:</p>\r\n<pre class=\"bash\"><code>[k100c]$ k3s kubectl get node\r\nNAME    STATUS  ROLES                  AGE\r\nk100c   Ready   control-plane,master   42s\r\n</code></pre>\r\n<p>This Pi is the \"control plane\", meaning it\'s the Pi that you use to administer your cluster.</p>\r\n<h2 id=\"get-the-node-token\">Get the node token</h2>\r\n<p>Obtain the control plane\'s node token. Thanks to k3s, this is autogenerated for you. If you not using k3s, then you must generate your own with the command <code>kubeadm token generate</code>.</p>\r\n<p>Assuming you\'re using k3s:</p>\r\n<pre class=\"bash\"><code>$ MYTOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)\r\n$ echo $MYTOKEN\r\nK76351a1c2497d907ba7a156028567e0ccc26b82d2174161c564152ab3add6cc3fb::server:808771e4e695e3e3465ed9a14a0581da\r\n</code></pre>\r\n<h2 id=\"add-your-control-plane-hostname-to-your-hosts-file\">Add your control plane hostname to your hosts file</h2>\r\n<p>If you know how to manage local DNS settings, then you can use a DNS service to identify the hosts in your cluster. Otherwise, the easy way to make your nodes know how to find your control plane is to add the control plane\'s hostname and IP address to the <code>/etc/hosts</code> file on each node. This also assumes that your control plane has a static local IP address. For example, this is the host file of k101c and k102c:</p>\r\n<pre class=\"text\"><code>127.0.0.1  localhost.localdomain localhost\r\n::1        localhost6.localdomain6 localhost6\r\n\r\n10.0.1.100 k100c\r\n</code></pre>\r\n<p>Verify that each host can find the control plane. For example:</p>\r\n<pre class=\"bash\"><code>[k101c]$ ping -c 1 k100c || echo &quot;fail&quot;\r\n[k101c]\r\n</code></pre>\r\n<h2 id=\"add-nodes-to-your-cluster\">Add nodes to your cluster</h2>\r\n<p>Now you can add the other Pi computers to your cluster. On each Pi you want to turn into a computer node, install k3s with the control plane and token as environment variables. On my second Pi, for instance, I run this command:</p>\r\n<pre class=\"bash\"><code>[k101c]$ curl -sfL https://get.k3s.io | K3S_URL=https://k100c:6443 K3S_TOKEN=&quot;${MYTOKEN}&quot; sh -\r\n</code></pre>\r\n<p>On my third and final Pi, I run the same command:</p>\r\n<pre class=\"bash\"><code>[k102c]$ curl -sfL https://get.k3s.io | K3S_URL=https://k100c:6443 K3S_TOKEN=&quot;${MYTOKEN}&quot; sh -\r\n</code></pre>\r\n<h2 id=\"verify-your-cluster\">Verify your cluster</h2>\r\n<p>On your control plane, verify that all nodes are active:</p>\r\n<pre class=\"bash\"><code>% k3s kubectl get nodes\r\nNAME        STATUS     ROLES                  AGE     VERSION\r\nk100c       Ready      control-plane,master   2d23h   v1.21.4+k3s1\r\nk102c       Ready      &lt;none&gt;                 21h     v1.21.4+k3s1\r\nk101c       Ready      &lt;none&gt;                 20h     v1.21.4+k3s1\r\n</code></pre>\r\n<p>It can take a few minutes for the control plane to discover all nodes, so wait a little while and try the command again if you don\'t see all nodes right away.</p>\r\n<p>You now have a Kubernetes cluster running. It isn\'t doing anything yet, but it\'s a functional Kubernetes cluster. That means you have a tiny Pi-based cloud entirely at your disposal. You can use it to learn about Kubernetes, cloud architecture, cloud-native development, and so on.</p>\r\n<h2 id=\"create-a-deployment-and-some-pods\">Create a deployment and some pods</h2>\r\n<p>Now that you have a Kubernetes cluster running, you can start running applications in containers. That\'s what Kubernetes does: it orchestrates and manages containers. You\'ve may have heard of containers. I did an episode about Docker containers in episode 1522 of HPR, you can go listen to that if you need to catch up. I\'ve also done an episode on LXC in episode 371 of my own show, GNU World Order.</p>\r\n<p>There\'s a sequence to launching containers within Kubernetes, a specific order you need to follow, because there are lots of moving parts and those parts have to reference each other. Generally, the hierarchy is this:</p>\r\n<ul>\r\n<li>namespaces are the \"project spaces\" of kubernetes. I cover this in great detail in my GNU World Order episode 13x39.</li>\r\n<li>create a deployment that manage pods.</li>\r\n<li>pods are groups of containers. it helps your cluster scale on demand.</li>\r\n<li>services are front-ends to deployments. A deployment can be running quietly in the background and it\'ll never see the light of day without a service pointing to it.</li>\r\n<li>traffic, or exposure. A service is only available to your cluster until you expose it to the outside world with an external IP address.</li>\r\n</ul>\r\n<p>First, create a namespace for your test application to use.</p>\r\n<pre class=\"bash\"><code>[k100c]$ k3s kubectl create namespace ktest\r\n</code></pre>\r\n<p>The Kubernetes project provides an <a href=\"https://k8s.io/examples/application/deployment.yaml\">example Nginx deployment definition</a>. Read through it to get an idea of what it does. It looks something like this:</p>\r\n<pre class=\"yaml\"><code>apiVersion: apps/v1\r\nkind: Deployment\r\nmetadata:\r\n  name: nginx-deployment\r\nspec:\r\n  selector:\r\n    matchLabels:\r\n      app: nginx\r\n  replicas: 2 # tells deployment to run 2 pods matching the template\r\n  template:\r\n    metadata:\r\n      labels:\r\n        app: nginx\r\n    spec:\r\n      containers:\r\n      - name: nginx\r\n        image: nginx:1.14.2\r\n        ports:\r\n        - containerPort: 80\r\n</code></pre>\r\n<p>This creates metadata named <code>nginx-deployment</code>. It also creates a label called <code>app</code>, and sets it to <code>nginx</code>. This metadata is used as <em>selectors</em> for pods and services later.</p>\r\n<p>For now, create a deployment using the example:</p>\r\n<pre class=\"bash\"><code>[k100c]$ k3s kubectl --namespace ktest \\\r\ncreate -f https://k8s.io/examples/application/deployment.yaml\r\n</code></pre>\r\n<p>Confirm that the deployment has generated and started new pods:</p>\r\n<pre class=\"bash\"><code>[k100c]$ k3s kubectl --namespace ktest get all\r\n3s kubectl --namespace ktest get all\r\nNAME                                  READY\r\npod/nginx-deployment-66b[...]   1/1   Running\r\npod/nginx-deployment-66b[...]   1/1   Running\r\n\r\nNAME                               READY\r\ndeployment.apps/nginx-deployment   2/2\r\n\r\nNAME\r\nreplicaset.apps/nginx-deployment-66b6c48dd5\r\n</code></pre>\r\n<p>See the pods labelled with <code>app: nginx</code>:</p>\r\n<pre class=\"bash\"><code>[k100c]$ k3s kubectl --namespace ktest \\\r\nget pods -l app=nginx\r\nNAME                                READY STATUS\r\nnginx-deployment-66b6c48dd5-9vgg8   1/1   Running\r\nnginx-deployment-66b6c48dd5-prgrf   1/1   Running\r\nnginx-deployment-66b6c48dd5-cqpgf   1/1   Running\r\n</code></pre>\r\n<h2 id=\"create-a-service\">Create a service</h2>\r\n<p>Now you must connect the Nginx instance with a Kubernetes Service.</p>\r\n<p>The <code>selector</code> element is set to <code>nginx</code> to match pods running the <code>nginx</code> application. Without this selector, there would be nothing to correlate your service with the pods running the application you want to serve.</p>\r\n<pre class=\"bash\"><code>[k100c]$ cat &lt;&lt; EOF | k3s kubectl \\\r\n--namespace ktest create -f -\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n  name: nginx-deployment\r\n  labels:\r\n    run: nginx-deployment\r\nspec:\r\n  ports:\r\n  - port: 80\r\n    protocol: TCP\r\n  selector:\r\n    app: nginx\r\nEOF\r\nservice/nginx-deployment created\r\n</code></pre>\r\n<p>Verify that the service exists:</p>\r\n<pre class=\"bash\"><code>[k100c]$ k3s kubectl --namespace ktest get svc nginx-deployment\r\nNAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE\r\nnginx-deployment   ClusterIP   10.43.32.89   &lt;none&gt;        80/TCP    58s\r\n</code></pre>\r\n<p>A Service is backed by a group of Pods. Pods are exposed through endpoints. A Service uses POST actions to populate Endpoints objects named <code>nginx-deployment</code>. Should a Pod die, it\'s removed from the endpoints, but new Pods matching the same selector are added to the endpoints. This is how Kubernetes ensures your application\'s uptime.</p>\r\n<p>To see more information:</p>\r\n<pre class=\"bash\"><code>[k100c]$ k3s kubectl \\\r\n--namespace ktest \\\r\ndescribe svc nginx-deployment\r\nName:              nginx-deployment\r\nNamespace:         ktest\r\nLabels:            run=nginx-deployment\r\nAnnotations:       &lt;none&gt;\r\nSelector:          app=nginx\r\nType:              ClusterIP\r\nIP Family Policy:  SingleStack\r\nIP Families:       IPv4\r\nIP:                10.43.251.104\r\nIPs:               10.43.251.104\r\nPort:              &lt;unset&gt;  80/TCP\r\nTargetPort:        80/TCP\r\nEndpoints:         10.42.2.8:80,10.42.2.9:80,10.42.3.7:80\r\nSession Affinity:  None\r\nEvents:            &lt;none&gt;\r\n</code></pre>\r\n<p>Notice that the <code>Endpoints</code> value is set to a series of IP addresses. This confirms that instances of Nginx are accessible. The IP of the service is set to 10.43.251.104, and it\'s running on port 80/TCP. That means you can log onto any of your nodes (referred to as \"inside the cluster\") to interact with your Nginx app. This does not work from your control plane, only from a node.</p>\r\n<pre class=\"bash\"><code>[k101c]$ curl https://10.43.251.104\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;title&gt;Welcome to nginx!&lt;/title&gt;\r\n&lt;/head&gt;\r\n&lt;body&gt;\r\n&lt;h1&gt;Welcome to nginx!&lt;/h1&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;\r\n</code></pre>\r\n<p>Nginx is accessible.</p>\r\n<p>The only thing left to do now is to route traffic from the outside world.</p>\r\n<h2 id=\"exposing-a-deployment\">Exposing a deployment</h2>\r\n<p>For a deployed application to be visible outside your cluster, you need to route network traffic to it. There are many tools that provide that functionality.</p>\r\n<p>Install metallb:</p>\r\n<pre class=\"bash\"><code>$ k3s kubectl apply \\\r\n-f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml\r\n$ k3s kubectl apply \\\r\n-f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml\r\n$ k3s kubectl create secret generic \\\r\n-n metallb-system memberlist \\\r\n--from-literal=secretkey=&quot;$(openssl rand -base64 128)&quot;\r\n</code></pre>\r\n<p>Determine what network range you want your cluster to use. This must not overlap with what your DHCP server is managing.</p>\r\n<pre class=\"bash\"><code>---\r\napiVersion: v1\r\nkind: ConfigMap\r\nmetadata:\r\n  namespace: metallb-system\r\n  name: config\r\ndata:\r\n  config: |\r\n    address-pools:\r\n    - name: address-pool-0\r\n      protocol: layer2\r\n      addresses:\r\n      - 10.0.1.1/26\r\n</code></pre>\r\n<p>Save this as <code>metallb.yaml</code> and apply the configuration:</p>\r\n<pre class=\"bash\"><code>$ k3s kubectl apply -f metallb.yaml\r\n</code></pre>\r\n<p>You now have a configmap for metallb, and metallb is running.</p>\r\n<p>Create a load balance service mapping your deployment\'s ports (port 80 in this case, which you can verify with <code>k3s kubectl -n ktest get all</code>). Save this as <code>loadbalance.yaml</code>:</p>\r\n<pre class=\"bash\"><code>---\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n  name: ktest-ext\r\n  namespace: ktest\r\nspec:\r\n  selector:\r\n    app: nginx\r\n  ports:\r\n    - protocol: TCP\r\n      port: 80\r\n      targetPort: 80\r\n  type: LoadBalancer\r\n</code></pre>\r\n<p>This service selects any deployment in the <code>ktest</code> namespace with an <code>app</code> name of <code>nginx</code>, and maps the container\'s port 80 to a port 80 for an IP address within your address range (in my example, that\'s 10.0.1.1/26, or 10.0.1.1-10.0.1.62).</p>\r\n<pre class=\"bash\"><code>$k3s kubectl apply -f loadbalance.yaml\r\n</code></pre>\r\n<p>Find out what external IP address it got:</p>\r\n<pre><code>$ k3s kubectl get service ktest-ext -n ktest\r\nNAME        TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)\r\nktest   LoadBalancer   10.43.138.91   10.0.1.3                  80:31790/TCP\r\n</code></pre>\r\n<p>Open a web browser and navigate to the external IP address listed (in this example, 10.0.1.3).</p>\r\n<p><img src=\"https://gnuworldorder.info/tank/nginx-welcome.webp\" alt=\"Nginx\" /></p>\r\n',78,61,0,'CC-BY-SA','network, kubernetes, cloud',0,0,1),
(3438,'2021-10-06','Ten privacy friendly Google search alternatives.',551,'Google search is monopolistic here are some alternatives','<p>Here are links to all the search engines and related stuff discussed during this podcast,</p>\r\n<ul>\r\n<li>Searx: <a href=\"https://www.searx.me/\" class=\"uri\">https://www.searx.me/</a>\r\n<ul>\r\n<li>Searx public instances: <a href=\"https://searx.space/\" class=\"uri\">https://searx.space/</a></li>\r\n</ul></li>\r\n<li>Whoogle: <a href=\"https://github.com/benbusby/whoogle-search\" class=\"uri\">https://github.com/benbusby/whoogle-search</a>\r\n<ul>\r\n<li>Whoogle public instances: <a href=\"https://github.com/benbusby/whoogle-search#public-instances\" class=\"uri\">https://github.com/benbusby/whoogle-search#public-instances</a></li>\r\n</ul></li>\r\n<li>MetaGer: <a href=\"https://metager.org/\" class=\"uri\">https://metager.org/</a>\r\n<ul>\r\n<li>MetaGer browser extensions: <a href=\"https://metager.org/plugin\" class=\"uri\">https://metager.org/plugin</a></li>\r\n<li>MetaGer mobile apps: <a href=\"https://metager.org/app\" class=\"uri\">https://metager.org/app</a></li>\r\n<li>MetaGer privacy policy: <a href=\"https://metager.org/datenschutz\" class=\"uri\">https://metager.org/datenschutz</a></li>\r\n</ul></li>\r\n<li>Gigablast: <a href=\"https://gigablast.com/\" class=\"uri\">https://gigablast.com/</a>\r\n<ul>\r\n<li>Gigablast privacy policy: <a href=\"https://gigablast.com/privacy.html\" class=\"uri\">https://gigablast.com/privacy.html</a></li>\r\n</ul></li>\r\n<li>Private.sh: <a href=\"https://private.sh/\" class=\"uri\">https://private.sh/</a>\r\n<ul>\r\n<li>Private.sh privacy policy: <a href=\"https://private.sh/extension.html\" class=\"uri\">https://private.sh/extension.html</a></li>\r\n</ul></li>\r\n<li>Ecosia: <a href=\"https://www.ecosia.org/\" class=\"uri\">https://www.ecosia.org/</a>\r\n<ul>\r\n<li>Ecosia mobile apps: <a href=\"https://info.ecosia.org/mobile\" class=\"uri\">https://info.ecosia.org/mobile</a></li>\r\n<li>Ecosia privacy policy: <a href=\"https://info.ecosia.org/privacy\" class=\"uri\">https://info.ecosia.org/privacy</a></li>\r\n</ul></li>\r\n<li>Startpage: <a href=\"https://www.startpage.com/\" class=\"uri\">https://www.startpage.com/</a>\r\n<ul>\r\n<li>Startpage privacy policy: <a href=\"https://www.startpage.com/en/search/privacy-policy.html\" class=\"uri\">https://www.startpage.com/en/search/privacy-policy.html</a></li>\r\n</ul></li>\r\n<li>Qwant: <a href=\"https://www.qwant.com/\" class=\"uri\">https://www.qwant.com/</a>\r\n<ul>\r\n<li>Qwant Junior: <a href=\"https://www.qwantjunior.com/\" class=\"uri\">https://www.qwantjunior.com/</a></li>\r\n<li>Qwant browser extensions: <a href=\"https://help.qwant.com/help/qwant-search/add-qwant-on-desktop/\" class=\"uri\">https://help.qwant.com/help/qwant-search/add-qwant-on-desktop/</a></li>\r\n<li>Qwant privacy policy: <a href=\"https://about.qwant.com/en/legal/confidentialite/\" class=\"uri\">https://about.qwant.com/en/legal/confidentialite/</a></li>\r\n</ul></li>\r\n<li>Brave Search: <a href=\"https://search.brave.com/\" class=\"uri\">https://search.brave.com/</a>\r\n<ul>\r\n<li>Brave Search privacy policy: <a href=\"https://search.brave.com/help/privacy-policy\" class=\"uri\">https://search.brave.com/help/privacy-policy</a></li>\r\n</ul></li>\r\n<li>DuckDuckGo: <a href=\"https://duckduckgo.com/\" class=\"uri\">https://duckduckgo.com/</a>\r\n<ul>\r\n<li>DuckDuckGo browser extensions &amp; apps: <a href=\"https://duckduckgo.com/app\" class=\"uri\">https://duckduckgo.com/app</a></li>\r\n<li>DuckDuckGo privacy policy: <a href=\"https://duckduckgo.com/privacy\" class=\"uri\">https://duckduckgo.com/privacy</a></li>\r\n</ul></li>\r\n</ul>\r\n<hr />\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=0773\">hpr0773 :: Interview with Gabriel Weinberg of DuckDuckGo</a></p>\r\n',397,74,0,'CC-BY-SA','searx, whoogle, metager, gigablast, private.sh, ecosia, startpage, qwant, brave, duckduckgo',0,0,1),
(3446,'2021-10-18','Speech To Text',1378,'I talk about converting HPR audio to text and tagging','<ul>\r\n<li><p>speech recognition</p></li>\r\n<li><p>machine_learning (ML)</p></li>\r\n<li><p>artificial_intelligence (AI)</p></li>\r\n<li><p>speech_recognition</p></li>\r\n<li><p>Natural Language Processing (NLP)</p></li>\r\n<li><p><a href=\"https://rmccurdy.com/stuff/NLP/\" class=\"uri\">https://rmccurdy.com/stuff/NLP/</a> ( example files )</p></li>\r\n<li><p>Some higher maf here that is above my head for now ...<br />\r\n<a href=\"https://towardsdatascience.com/using-keyword-extraction-for-unsupervised-text-classification-in-nlp-10433a1c0cf9\" class=\"uri\">https://towardsdatascience.com/using-keyword-extraction-for-unsupervised-text-classification-in-nlp-10433a1c0cf9</a></p></li>\r\n<li><p><a href=\"https://www.interviewquery.com/blog-keyword-extraction/\" class=\"uri\">https://www.interviewquery.com/blog-keyword-extraction/</a></p></li>\r\n</ul>\r\n',36,0,0,'CC-BY-SA','AI,ML,scripting,audio',0,0,1),
(3721,'2022-11-07','HPR Community News for October 2022',3248,'HPR Volunteers talk about shows released and comments posted in October 2022','<style>\ntable td.shrink {\n    white-space:nowrap\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/0411.html\" target=\"_blank\">Paul J</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0412.html\" target=\"_blank\">m0dese7en</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0413.html\" target=\"_blank\">CCHits.net Team</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.php?id=3696\" target=\"_blank\">3696</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-10-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3696\" target=\"_blank\">HPR Community News for September 2022</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.php?id=3697\" target=\"_blank\">3697</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-10-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3697\" target=\"_blank\">Mis-information, Dis-information, and Fake News. You are a product and target for all of it.</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.php?id=3698\" target=\"_blank\">3698</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-10-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3698\" target=\"_blank\">Spectrogram</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3699\" target=\"_blank\">3699</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-10-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3699\" target=\"_blank\">Old and new videogames/board games with guest binrc</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0407.html\" target=\"_blank\">Celeste</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3700\" target=\"_blank\">3700</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-10-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3700\" target=\"_blank\">Introduction to Batch Files</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.php?id=3701\" target=\"_blank\">3701</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-10-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3701\" target=\"_blank\">ReiserFS - the file system of the future</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0411.html\" target=\"_blank\">Paul J</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3702\" target=\"_blank\">3702</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-10-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3702\" target=\"_blank\">Easter Ogg</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.php?id=3703\" target=\"_blank\">3703</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-10-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3703\" target=\"_blank\">McCurdy House Tour</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.php?id=3704\" target=\"_blank\">3704</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-10-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3704\" target=\"_blank\">Follow up to hpr3685 :: Budget and an Android app</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.php?id=3705\" target=\"_blank\">3705</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-10-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3705\" target=\"_blank\">The Year of the FreeBSD Desktop</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3706\" target=\"_blank\">3706</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-10-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3706\" target=\"_blank\">The Future of Technology</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.php?id=3707\" target=\"_blank\">3707</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-10-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3707\" target=\"_blank\">Recovering a Massive 3.5 HP Electric Motor from a Treadmill</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0401.html\" target=\"_blank\">Mechatroniac</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3708\" target=\"_blank\">3708</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-10-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3708\" target=\"_blank\">Insomnia as a Hobby</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0389.html\" target=\"_blank\">TrumpetJohn</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3709\" target=\"_blank\">3709</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-10-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3709\" target=\"_blank\">Relationships to games and console generations</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0412.html\" target=\"_blank\">m0dese7en</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3710\" target=\"_blank\">3710</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-10-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3710\" target=\"_blank\">Changing Plans Again</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.php?id=3711\" target=\"_blank\">3711</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-10-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3711\" target=\"_blank\">Cars</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3712\" target=\"_blank\">3712</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-10-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3712\" target=\"_blank\">The last ever CCHits.net Show</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0413.html\" target=\"_blank\">CCHits.net Team</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3713\" target=\"_blank\">3713</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-10-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3713\" target=\"_blank\">Bash snippet - short-circuit evaluation in Bash Boolean expressions</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.php?id=3714\" target=\"_blank\">3714</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-10-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3714\" target=\"_blank\">The News with Some Guy On the Internet</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.php?id=3715\" target=\"_blank\">3715</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-10-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3715\" target=\"_blank\">Secret hat conversations, Part 2.</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.php?id=3716\" target=\"_blank\">3716</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-10-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3716\" target=\"_blank\">How I got in to Tech</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0405.html\" target=\"_blank\">Lurking Prion</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 34 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 5 comments on\n3 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3693#comments\" target=\"_blank\">hpr3693</a></strong>\n(2022-09-28) \"<em>Fixing the automatic cutoff mechanism to an electric mower</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0293.html\" target=\"_blank\">Rho`n</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3693#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-10-27:\n\"Thank you.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3694#comments\" target=\"_blank\">hpr3694</a></strong>\n(2022-09-29) \"<em>Robo Tripping Ravelords of the Apocalypse</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0401.html\" target=\"_blank\">Mechatroniac</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3694#6\" target=\"_blank\">Comment 6</a>:\nSome Guy On The Internet on 2022-10-27:\n\"Please continue.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3695#comments\" target=\"_blank\">hpr3695</a></strong>\n(2022-09-30) \"<em>How I watch youtube with newsboat</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3695#2\" target=\"_blank\">Comment 2</a>:\nbinrc on 2022-10-01:\n\"RSS THE PLANET\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3695#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2022-10-03:\n\"Great show, but I have questions\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3695#4\" target=\"_blank\">Comment 4</a>:\nNate on 2022-10-20:\n\"use an invidious instance to get the channel id\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 29 comments on 14 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3697#comments\" target=\"_blank\">hpr3697</a></strong>\n(2022-10-04) \"<em>Mis-information, Dis-information, and Fake News. You are a product and target for all of it.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0405.html\" target=\"_blank\">Lurking Prion</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3697#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-10-27:\n\"Bravo, Bravo!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3698#comments\" target=\"_blank\">hpr3698</a></strong>\n(2022-10-05) \"<em>Spectrogram</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3698#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-10-27:\n\"I gave it a go.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3701#comments\" target=\"_blank\">hpr3701</a></strong>\n(2022-10-10) \"<em>ReiserFS - the file system of the future</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0411.html\" target=\"_blank\">Paul J</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3701#1\" target=\"_blank\">Comment 1</a>:\nwynaut on 2022-10-11:\n\"Very interesting\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3701#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-10-11:\n\"Great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3701#3\" target=\"_blank\">Comment 3</a>:\nBeeza on 2022-10-11:\n\"Perfect First Show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3701#4\" target=\"_blank\">Comment 4</a>:\nWindigo on 2022-10-12:\n\"Excellent first episode!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3701#5\" target=\"_blank\">Comment 5</a>:\nbrian-in-ohio on 2022-10-13:\n\"great show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3702#comments\" target=\"_blank\">hpr3702</a></strong>\n(2022-10-11) \"<em>Easter Ogg</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3702#1\" target=\"_blank\">Comment 1</a>:\nKinghezy on 2022-10-12:\n\"Jerusalem\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3705#comments\" target=\"_blank\">hpr3705</a></strong>\n(2022-10-14) \"<em>The Year of the FreeBSD Desktop</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3705#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-10-18:\n\"Time running out on 2022\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3705#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-10-18:\n\"Great show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3706#comments\" target=\"_blank\">hpr3706</a></strong>\n(2022-10-17) \"<em>The Future of Technology</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0405.html\" target=\"_blank\">Lurking Prion</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3706#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-09-10:\n\"Wrong wrong wrong\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3706#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2022-10-18:\n\"Capitalism or technology\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3706#3\" target=\"_blank\">Comment 3</a>:\nWindigo on 2022-10-18:\n\"Relatable\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3707#comments\" target=\"_blank\">hpr3707</a></strong>\n(2022-10-18) \"<em>Recovering a Massive 3.5 HP Electric Motor from a Treadmill</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0401.html\" target=\"_blank\">Mechatroniac</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3707#1\" target=\"_blank\">Comment 1</a>:\none_of_spoons on 2022-10-18:\n\"gravity generator\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3707#2\" target=\"_blank\">Comment 2</a>:\nMechatroniac on 2022-10-23:\n\"electricity\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3707#3\" target=\"_blank\">Comment 3</a>:\nSome Guy On The Internet on 2022-10-27:\n\"Cool beans\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3708#comments\" target=\"_blank\">hpr3708</a></strong>\n(2022-10-19) \"<em>Insomnia as a Hobby</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0389.html\" target=\"_blank\">TrumpetJohn</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3708#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-10-22:\n\"Sleep with me\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3710#comments\" target=\"_blank\">hpr3710</a></strong>\n(2022-10-21) \"<em>Changing Plans Again</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.php?id=3710#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-10-25:\n\"Travelling\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3710#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-10-25:\n\"You are most welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3711#comments\" target=\"_blank\">hpr3711</a></strong>\n(2022-10-24) \"<em>Cars</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3711#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-10-27:\n\"Big Human = Big Vehicle\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3712#comments\" target=\"_blank\">hpr3712</a></strong>\n(2022-10-25) \"<em>The last ever CCHits.net Show</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0413.html\" target=\"_blank\">CCHits.net Team</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3712#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-10-27:\n\"I\'ve never heard of this site until now.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3712#2\" target=\"_blank\">Comment 2</a>:\nthelovebug on 2022-10-29:\n\"CCHits theme tune\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3713#comments\" target=\"_blank\">hpr3713</a></strong>\n(2022-10-26) \"<em>Bash snippet - short-circuit evaluation in Bash Boolean expressions</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3713#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-10-27:\n\"Great Show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3714#comments\" target=\"_blank\">hpr3714</a></strong>\n(2022-10-27) \"<em>The News with Some Guy On the Internet</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.php?id=3714#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2022-10-27:\n\"Great Episode!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3714#2\" target=\"_blank\">Comment 2</a>:\nZen_floater2 on 2022-10-27:\n\"OH NO!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3714#3\" target=\"_blank\">Comment 3</a>:\ndnt on 2022-10-28:\n\"This just in:\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3714#4\" target=\"_blank\">Comment 4</a>:\nKevin O&#39;Brien on 2022-10-29:\n\"Wonderful!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3715#comments\" target=\"_blank\">hpr3715</a></strong>\n(2022-10-28) \"<em>Secret hat conversations, Part 2.</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.php?id=3715#1\" target=\"_blank\">Comment 1</a>:\nThe hacker formerly known as Mr. Young on 2022-10-29:\n\"Tin foil hat engaged\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3715#2\" target=\"_blank\">Comment 2</a>:\none_of_spoons on 2022-10-31:\n\"Protonmail shopping for law enforcement.\"</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://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-October/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-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<h3 id=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on\narchive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to\nthe Internet Archive there are other tasks to perform. We are\nreprocessing and re-uploading shows in the range 871 to 2429 as\nexplained in the Community News show notes released in <a\nhref=\"http://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">May\n2022</a>. We are keeping a running total here to show progress:</p>\n<table>\n<tr>\n<th>\nMonth\n</th>\n<th>\nMonth count\n</th>\n<th>\nRunning total\n</th>\n<th>\nRemainder\n</th>\n</tr>\n<tr>\n<td>\n2022-04\n</td>\n<td>\n130\n</td>\n<td>\n130\n</td>\n<td>\n1428\n</td>\n</tr>\n<tr>\n<td>\n2022-05\n</td>\n<td>\n140\n</td>\n<td>\n270\n</td>\n<td>\n1288\n</td>\n</tr>\n<tr>\n<td>\n2022-06\n</td>\n<td>\n150\n</td>\n<td>\n420\n</td>\n<td>\n1138\n</td>\n</tr>\n<tr>\n<td>\n2022-07\n</td>\n<td>\n155\n</td>\n<td>\n575\n</td>\n<td>\n983\n</td>\n</tr>\n<tr>\n<td>\n2022-08\n</td>\n<td>\n155\n</td>\n<td>\n730\n</td>\n<td>\n828\n</td>\n</tr>\n<tr>\n<td>\n2022-09\n</td>\n<td>\n150\n</td>\n<td>\n880\n</td>\n<td>\n678\n</td>\n</tr>\n<tr>\n<td>\n2022-10\n</td>\n<td>\n155\n</td>\n<td>\n1035\n</td>\n<td>\n523\n</td>\n</tr>\n</table>\n\n<p><small><small>Updated: 2022-11-05 15:28:06</small></small></p>\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3439,'2021-10-07','Linux Inlaws S01E40: The One with the BSDs',5834,'The other One Operating System to Rule them all','<p>In this episode, Martin and Chris host an eclectic panel of contributors to\r\nthe *other* major FLOSS operating system family - you guessed it: the\r\nflavours of the Berkeley Software Distribution (aka BSD among friends).\r\nDisclaimer: you may be tempted to diverge from the Path of the\r\nRighteousness also known as Linux and give this alternative a spin. So\r\nthis episode is *not* for the faint-hearted - listen at your own\r\ndiscretion! Also: the true defective nature of our beloved (?) hosts\' past\r\nwill be revealed - an episode not be missed despite the caveat! Plus\r\na refresher on spaced-out operating system concepts including library\r\noperating systems and a rant on Android and friends. In addition to some\r\ncool BSD trolling...  </p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>OpenBSD: <a href=\"https://www.openbsd.org\" target=_blank>https://www.openbsd.org</a></li>\r\n<li>FeeBSD: <a href=\"https://www.freebsd.org\" target=_blank>https://www.freebsd.org</a></li>\r\n<li>NetBSD: <a href=\"https://www.netbsd.org\" target=_blank>https://www.netbsd.org</a></li>\r\n<li>DragonFlyBSD: <a href=\"https://www.dragonflybsd.org\" target=_blank>https://www.dragonflybsd.org</a></li>\r\n<li>386BSD: <a href=\"https://www.386bsd.org\" target=_blank>https://www.386bsd.org</a></li>\r\n<li>RUMP kernel: <a href=\"https://en.wikipedia.org/wiki/Rump_kernel\" target=_blank>https://en.wikipedia.org/wiki/Rump_kernel</a></li>\r\n<li>Library operating systems: <a href=\"https://www.sigarch.org/leave-your-os-at-home-the-rise-of-library-operating-systems\" target=_blank>https://www.sigarch.org/leave-your-os-at-home-the-rise-of-library-operating-systems</a></li>\r\n<li>Free BSD Linux Compatibility: <a href=\"https://docs.freebsd.org/en/books/handbook/linuxemu\" target=_blank>https://docs.freebsd.org/en/books/handbook/linuxemu</a></li>\r\n<li>BSD Jails (original paper): <a href=\"https://papers.freebsd.org/2000/phk-jails.files/sane2000-jail.pdf\" target=_blank>https://papers.freebsd.org/2000/phk-jails.files/sane2000-jail.pdf</a></li>\r\n<li>FeeBSD Ports: <a href=\"https://www.freebsd.org/ports\" target=_blank>https://www.freebsd.org/ports</a></li>\r\n<li>NetBSD pkgsrc: <a href=\"https://www.netbsd.org/docs/pkgsrc\" target=_blank>https://www.netbsd.org/docs/pkgsrc</a></li>\r\n<li>ZFS: <a href=\"https://en.wikipedia.org/wiki/ZFS\" target=_blank>https://en.wikipedia.org/wiki/ZFS</a></li>\r\n<li>BSD\'s pledge: <a href=\"https://unix.stackexchange.com/questions/410056/what-is-openbsds-pledge-in-short\" target=_blank>https://unix.stackexchange.com/questions/410056/what-is-openbsds-pledge-in-short</a></li>\r\n<li>FreeBSD and Netflix: <a href=\"https://papers.freebsd.org/2019/fosdem/looney-netflix_and_freebsd\" target=_blank>https://papers.freebsd.org/2019/fosdem/looney-netflix_and_freebsd</a></li>\r\n<li>BSD Firewalls: <a href=\"https://docs.freebsd.org/en/books/handbook/firewalls\" target=_blank>https://docs.freebsd.org/en/books/handbook/firewalls</a></li>\r\n<li>Michael W. Lucas\' \"Savaged by Systemd\": <a href=\"hhttps://www.goodreads.com/book/show/36190710-savaged-by-systemd\" target=_blank>hhttps://www.goodreads.com/book/show/36190710-savaged-by-systemd</a></li>\r\n<li>Linux vs. Minix: <a href=\"https://www.oreilly.com/openbook/opensources/book/appa.html\" target=_blank>https://www.oreilly.com/openbook/opensources/book/appa.html</a></li>\r\n<li>Pegasus spyware: <a href=\"https://en.wikipedia.org/wiki/Pegasus_(spyware)\" target=_blank>https://en.wikipedia.org/wiki/Pegasus_(spyware)</a></li>\r\n<li>BSD History presentation: <a href=\"https://www.youtube.com/watch?v=DEEr6dT-4uQ\" target=_blank>https://www.youtube.com/watch?v=DEEr6dT-4uQ</a></li>\r\n<li>The tragedy of systemd: <a href=\"https://www.youtube.com/watch?v=o_AIw9bGogo\" target=_blank>https://www.youtube.com/watch?v=o_AIw9bGogo</a></li>\r\n<li>The Rise and Fall of Copyleft: <a href=\"https://archive.org/download/OhioLinuxfest2013/24-Rob_Landley-The_Rise_and_Fall_of_Copyleft.mp3\" target=_blank>https://archive.org/download/OhioLinuxfest2013/24-Rob_Landley-The_Rise_and_Fall_of_Copyleft.mp3</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Berkeley Software Distribution, library operating systems, Android, Copyleft, BSD License, Usenet',0,0,1),
(3442,'2021-10-12','What is this thing called science',790,'Critical thinking is only part of the equation. Here\'s the other part.','<hr />\r\n<h3>Counter Point</h3>\r\n<p>This show is a counter point to: <a href=\"https://hackerpublicradio.org/eps.php?id=3414\">hpr3414 :: Critical Thinking may make You Critical of the Covid Crisis</a>\r\n</p>\r\n<hr />\r\n\r\n<p>Some time ago, I did some Hacker Public Radio episodes in which I ostensibly demonstrated how to create a PDF with Scribus. Secretly, I was actually demonstrating how unexpected payloads could be embedded into a PDF. Did the PDF I uploaded as part of that episode no longer contain a payload if the listener who downloaded it wasn\'t aware that the payload existed?</p>\r\n<p>I\'ve been diagnosed by educators as a \"life long learner,\" which as far as I can tell is a buzzword referring to someone who takes pleasure in learning new things. In our world of technology, dear listener, I think this term is just \"hacker.\" And that\'s appropriate, because this is Hacker Public Radio you\'re listening to now, and listeners of this show tend to be people who enjoy learning and exploring new ideas, taking apart gadgets to see what makes them tick, reverse engineering code and data to understand how it gets processed, and so on.</p>\r\n<p>The thing about being a hacker or a life-long learner is that there\'s a lot of stuff out there that wants to be hacked, or learnt. And it turns out that it\'s just not possible to learn everything. Sometimes, you\'re out of your depth. It can be tricky to recognize when you\'re out of your depth, and I think there\'s a certain learn-able skill to knowing that you don\'t know something. There\'s a lot of value to this skill, because when you can recognize you don\'t have expertise on something, you\'re able to look around you and find someone who has. That\'s significant because you can learn from someone with expertise.</p>\r\n<p>In my own humdrum life, before getting a full-time job at a tech company, I was commissioned on several occasions to build out infrastructure for a video game development project, an indie radio station, a few different multimedia projects, and so on. When I took on those roles, I became the resident expert. People turned to me for the authoritative word on what technological solutions should be used. When I told them, they were more or less obligated to listen, because that was the role I\'d been hired for. If they were to ask me what a workstation should run, and I said Linux, but they bought a Mac instead, then my role would be unarguably redundant. They could just as easily type the question into a search engine on the Internet, and ignore the result. Or they could roll a die, or whatever.</p>\r\n<p>In those cases, though, it\'s a question of my opinion compared to someone else\'s opinion. Both are valid. Because I was the architect, my opinion mattered more to the long-term plan, but if the long-term plan were to change from having a highly-available cluster for fast 3d model rendering to having workstations with a familiar desktop, then my opinion would be less valid.</p>\r\n<p>But there are some areas in life where opinions don\'t matter. Specifically, that area is science. But what is science, anyway? People talk about science a lot, but it took me a long time, especially as someone who largely came from an artistic background, to comprehend the significance of the term, much less how it worked.</p>\r\n<p>Forget about all the high school classes and pop dietitians and physicists. Science is a framework. It\'s a set of principles designed to help our human brains hack the world around us in a methodical and precise way. Instead of letting our opinions, which may or may not be relevant, influence conclusions and decisions we make, science looks at the results of controlled input and output. Wait a minute. \"Input and output\"? Those are words I understand. Those are computer terms!</p>\r\n<p>Yeah it turns out that computers are the product of science, and in fact building computers and programming computers is a form of Computer Science. Those are just words we made up, but they reveal a lot about what we computer hackers do all day. Computers don\'t understand the influence of opinion, or your force of will, or the power of faith. They just take input and produce output. They do this very reliably.</p>\r\n<p>I don\'t know whether you\'ve ever tried, but it\'s really hard to make a computer. Comprehending how a CPU processes rudimentary electrical pulses to transform them into complex instruction sets is mind-bending, at least to me. I\'ve sat down and thought about it critically. I\'ve set up a few experiments, too. There\'s one you can do with dominoes, believe it or not, that can somewhat help you design a logic circuit. There\'s a Turing Machine you can build with Magic The Gathering cards. And an electronics kit that\'ll help you <a href=\"https://eater.net/8bit\">build an 8bit CPU</a>. But even with all of those experiments, the open RISC-V CPU still eludes my comprehension.</p>\r\n<p>And just to be clear: back in 2008 or so, I was hired to stress test a RISC CPU to determine whether it was efficient at rendering massive amounts of video. I designed tests in an attempt to prove that a RISC CPU could not out-perform the latest Intel Core2duo, and could not achieve the goal (RISC is better, what can I say?) So my affinity for RISC is far from just a passing interest. But I can\'t build a RISC-V or even really explain how a CPU works.</p>\r\n<p>For that, I understand that there are experts. These aren\'t just people I call experts because they\'re labeled that way on their shirt pocket. They\'re experts because they\'re building the RISC-V, and it works. I met some of them back at OSS Con in 2019. I recognize their expertise, because they\'re proving their knowledge.</p>\r\n<p>Let\'s say I approached the RISC-V booth with the preconception that x86 was superior. After all, why would most consumer computers be running x86 if it weren\'t the best? I might be skeptical if I were told that RISC-V is superior for some tasks. Could they have ulterior motives? Could they have been paid off by Big Silicon to lie about RISC\'s performance in order to hurt x86\'s marketshare? Sure, it could happen. And that skepticism is important. It\'s arguably part of the scientific process. Look at the results of an experiment, replicate the input and ensure that the output is reliably the same.</p>\r\n<p>But you can\'t be sure until you\'ve duplicated the experiments that make the claim in the first place. Unfortunately, this often requires some pretty controlled environments, and possibly some pretty high end equipment.</p>\r\n<p>The bottom line is that I\'m never going to get around to doing that, I\'m never going to have access to those resources, and I\'m never going to have the understanding I\'d need to comprehend all the potential variables involved. In short, I just don\'t have the expertise. But I\'m willing to trust the expertise of a lot of people from all over the world working on this project. I\'m going to trust that because they all agree on similar findings, that what they\'re saying about the design and architecture of their CPU, that there\'s a high likelihood that their findings are correct.</p>\r\n<p>The same goes, as it turns out, for biological sciences. No matter how many one-off experiments discover that cigarette smoking is beneficial to your health, the wider scientific consensus is that it\'s harmful. No matter how man \"free-thinkers\" on the Internet discover that Covid-19 is actually no worse than the common cold, the worldwide scientific community asserts that it\'s actually harmful, and medical staffs across the globe assert that increased cases of Covid-19 cause bed and healthcare shortages for everyone else. Somebody online may assert that it\'s an impossibly unified globe-spanning political plot, but that relies on a bunch of untest-able opinions and interpretations of reality that fall well outside any scientific framework.</p>\r\n<p>It seems to me that this line of speculation makes about as much sense as asking whether your computer can really still add numbers accurately. Couldn\'t it occasionally be lying to you? The device you\'re using to listen to my voice right now not to scramble what I\'m saying and accurately play what I recorded in the first place is based on the same scientific principles used by those in biological sciences. We\'re feeding data into functions, whether the function is written in code, forged in silicon, or written on paper as a math formula, and we\'re observing the results. When every expert in their field, across the entire globe, agrees on the output, I think we do too. It\'s either that, or we\'d better all go build our own 8bit circuits out of chickens and batteries and just start to rebuild.</p>\r\n<p>So did the PDF I uploaded as part of the Scribus episode no longer contain a payload if the listener who downloaded it wasn\'t aware that the payload existed? Obviously not. If the listener lacked the foresight or expertise to investigate the PDF for a hidden file, then they could have posted an episode of their own about how my PDF was completely normal. They\'d have been confident in their findings. But you and I know that whatever experiments they might have used to come to the conclusion that Klaatu was NOT a liar was, in the end, insufficient. The payload did exist, but it was just outside this imaginary listener\'s detection or comprehension.</p>\r\n<p>Critical thinking is important. But at the same time, the scientific framework requires more than just critical thinking, just as building a RISC-V CPU requires more than just being a fan of reduced instruction sets. And solving the Covid-19 crisis takes a lot more than just critical thinking and a couple of backyard \"experiments.\" We\'re not in the Dark Ages any more, folks. Get vaccinated. Stay safe, and I\'ll talk to you next time.</p>\r\n',78,0,0,'CC-BY-SA','covid, science, risc-v, cpu',0,0,1),
(3443,'2021-10-13','Neuton battery replacement',593,'Rho`n describes replacing the battery in his Neuton EM 4.1 electric lawn mower','<h1 id=\"audio-notes\">Audio Notes</h1>\r\n<p>During the audio I repeatedly called it the Neutron mower instead of the Neuton mower. I was too lazy edit those mispronunciations.</p>\r\n<h1 id=\"introduction\">Introduction</h1>\r\n<p>After recently reclaiming my Neuton EM 4.1 electric lawn mower from my parents, I needed to replace the battery to make it operational. This mower was purchased in the early 2000s, and replacement batteries for it are no longer available from the manufacturer. Thankfully replacement 12V 10A batteries are available through third parties.</p>\r\n<h1 id=\"replacing-parts\">Replacing Parts</h1>\r\n<p>I faced two issues with finding replacement parts. The Neuton mowers run at 24V and need batteries that can provide 10 amps of current. They come with a battery case that holds two 12V 10A batteries connected in series. The case holds the batteries and provides a connector and circuitry for a 24V DC charger. When I received the mower back from my parents, it didn\'t have a battery case with it. While the <a href=\"https://www.neutonpower.com/\">Neuton website</a> is still online, and looks like you can order some accessories still, they no longer carry replacement battery cases or batteries. I was able to find just the case on EBay. I then found replacement batteries on Amazon.</p>\r\n<p>Installing the batteries in the case is simple. One side of the case has a lid. The lid is held in place by plastic notches on the bottom and two screws at the top. The screws have size 10 star heads. The batteries sit side by side in the case, with their terminals facing the lid. I connected the inner terminals (negative of one battery to positive of the other) with the jumper wire that came with the case. I then connected the outer terminals to the battery case terminal wires, slid the batteries all the way into case, closed, and fastened the lid.</p>\r\n<h1 id=\"conclusion\">Conclusion</h1>\r\n<p>The batteries are currently charging. The red charging light did come on when I plugged in the 24V DC charger, and nothing has exploded yet, so I am optimistic I will be able to use the mower again shortly.</p>\r\n<h1 id=\"references\">References</h1>\r\n<ul>\r\n<li>Neuton CE5.4 24 volt rechargeable battery CASE ONLY - <a href=\"https://www.ebay.com/itm/114952181341\">EBay item</a></li>\r\n<li>Mighty Max Battery 12V 10AH Replaces HE12V127 HGL1012 LCRB1210P NEUTON CE5 POWPS12100 Battery - 2 Pack Brand Product - <a href=\"https://www.amazon.com/gp/product/B00K9713L4/ref=ppx_od_dt_b_asin_title_s00?ie=UTF8&amp;psc=1\">Amazon item</a></li>\r\n</ul>\r\n<h1 id=\"attribution\">Attribution</h1>\r\n<p>The transition sound used between audio clips is found on <a href=\"https://freesound.org/\">freesound.org</a>:<br />\r\nName: <a href=\"https://freesound.org/people/DanJFilms/sounds/529064/\">Harp Transition Music Cue</a><br />\r\nAuthor: <a href=\"https://freesound.org/people/DanJFilms/\">DanJFilms</a><br />\r\nLicense: <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons Zero</a></p>\r\n',293,0,0,'CC-BY-SA','electric lawnmower,lawnmower,rechargeable battery',0,0,1),
(3445,'2021-10-15','True critical thinking seems to be the key',4328,'A response to HPR 3414','<hr>\n<h3>Counter Point</h3>\n<p>This show is a counter point to: <a href=\"http://hackerpublicradio.org/eps/hpr3414\">hpr3414 :: Critical Thinking may make You Critical of the Covid Crisis</a>\n</p>\n<hr />\n<h2 id=\"a-response-to-critical-thinking-may-make-you-critical-of-the-covid-crisis\">A response to <em>Critical Thinking may make You Critical of the Covid Crisis</em></h2>\n<p><strong>(HPR episode 3414, produced by CoGo and released on 2021-09-02)</strong></p>\n<h2 id=\"defining-terms\">Defining terms</h2>\n<ul>\n<li>What is <em>Critical Thinking</em>?\n<ul>\n<li>The Wikipedia definition begins: \"<em>Critical thinking is the analysis of facts to form a judgment.</em>\"</li>\n<li>It goes on to say: \"<em>The subject is complex, and several different definitions exist, which generally include the rational, skeptical, unbiased analysis, or evaluation of factual evidence.</em>\"</li>\n<li>See the references below.</li>\n</ul></li>\n</ul>\n<blockquote>\n<p>Note the use of the terms <strong>fact</strong>, <strong>factual evidence</strong> and <strong>unbiased analysis</strong>. It is my contention that HPR episode 3414 fails in these regards in several places.</p>\n</blockquote>\n<ul>\n<li>What is an \"<em>experiment</em>\"?\n<ul>\n<li>Wikipedia’s definition begins: \"<em>An experiment is a procedure carried out to support or refute a hypothesis. Experiments provide insight into cause-and-effect by demonstrating what outcome occurs when a particular factor is manipulated.</em>\"</li>\n</ul></li>\n</ul>\n<blockquote>\n<p>The term <strong>experiment</strong> is often used incorrectly in episode 3414. A better term would be <strong>observation</strong> or <strong>anecdote</strong></p>\n</blockquote>\n<ul>\n<li>The virus:\n<ul>\n<li>The virus is a <em>coronavirus</em>. There are many viruses classified in this way.</li>\n<li>The name of the virus is <em>SARS-CoV-2</em>. The <em>SARS</em> part stands for <em>Severe Acute Respiratory Syndrome</em>, the type of disease caused by the virus. <em>CoV</em> signifies that it is a <em>coronavirus</em> and the <em>2</em> means it’s the second SARS-type corona virus to have caused problems in the recent past. The other one, just called <em>SARS</em> occurred in 2003.</li>\n<li>The name of the disease caused by SARS-CoV-2 is <em>COVID-19</em>. The letters <em>COVID</em> define it as a coronavirus disease. The <em>19</em> part is because it was first discovered in 2019.</li>\n</ul></li>\n</ul>\n<ul>\n<li><strong>References</strong>:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Critical_thinking\" title=\"Wikipedia article: Critical thinking\">Wikipedia article on Critical Thinking</a></li>\n<li><a href=\"https://www.gre.ac.uk/articles/ils/critical-thinking\" title=\"University of Greenwich article. What is critical thinking?\">University of Greenwich: What is critical thinking?</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Experiment\" title=\"Wikipedia article: Experiment\">Wikipedia article on Experiments</a></li>\n</ul></li>\n</ul>\n<h2 id=\"long-notes\">Long notes</h2>\n<p>Follow this link to <a href=\"https://hackerpublicradio.org/eps/hpr3445/hpr3445/full_shownotes.html\">read the detailed notes</a> associated with this episode.</p>\n<h2 id=\"collected-references\">Collected references:</h2>\n<ol type=\"1\">\n<li>Wikipedia article: Critical thinking:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Critical_thinking\">https://en.wikipedia.org/wiki/Critical_thinking</a></li>\n</ul></li>\n<li>University of Greenwich article. What is critical thinking?:\n<ul>\n<li><a href=\"https://www.gre.ac.uk/articles/ils/critical-thinking\">https://www.gre.ac.uk/articles/ils/critical-thinking</a></li>\n</ul></li>\n<li>Wikipedia article: Experiment:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Experiment\">https://en.wikipedia.org/wiki/Experiment</a></li>\n</ul></li>\n<li>Where does the six-foot guideline for social distancing come from?:\n<ul>\n<li><a href=\"https://qz.com/1831100/where-does-the-six-feet-social-distancing-guideline-come-from/\">https://qz.com/1831100/where-does-the-six-feet-social-distancing-guideline-come-from/</a></li>\n</ul></li>\n<li>Wikipedia article: Social distancing:\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Social_distancing\">https://en.wikipedia.org/wiki/Social_distancing</a></li>\n</ul></li>\n<li>How effective is a mask in preventing COVID‐19 infection?:\n<ul>\n<li><a href=\"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7883189/\">https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7883189/</a></li>\n</ul></li>\n<li>Why Masks Work BETTER Than You’d Think:\n<ul>\n<li><a href=\"https://www.youtube.com/watch?v=Y47t9qLc9I4\">https://www.youtube.com/watch?v=Y47t9qLc9I4</a></li>\n</ul></li>\n<li>Coronavirus disease (COVID-19): Ventilation and air conditioning:\n<ul>\n<li><a href=\"https://www.who.int/news-room/q-a-detail/coronavirus-disease-covid-19-ventilation-and-air-conditioning\">https://www.who.int/news-room/q-a-detail/coronavirus-disease-covid-19-ventilation-and-air-conditioning</a></li>\n</ul></li>\n<li>Ventilation and air conditioning during the coronavirus (COVID-19) pandemic:\n<ul>\n<li><a href=\"https://www.hse.gov.uk/coronavirus/equipment-and-machinery/air-conditioning-and-ventilation/index.htm\">https://www.hse.gov.uk/coronavirus/equipment-and-machinery/air-conditioning-and-ventilation/index.htm</a></li>\n</ul></li>\n<li>False Perception of COVID-19’s Impact on the Homeless:\n<ul>\n<li><a href=\"https://www.factcheck.org/2020/05/false-perception-of-covid-19s-impact-on-the-homeless/\">https://www.factcheck.org/2020/05/false-perception-of-covid-19s-impact-on-the-homeless/</a></li>\n</ul></li>\n<li>Vitamin D3 as Potential Treatment Adjuncts for COVID-19:\n<ul>\n<li><a href=\"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7697253/\">https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7697253/</a></li>\n</ul></li>\n<li>Graphic Outbreak of severe acute respiratory syndrome in Hong Kong Special Administrative Region: case report:\n<ul>\n<li><a href=\"https://www.bmj.com/content/326/7394/850\">https://www.bmj.com/content/326/7394/850</a></li>\n</ul></li>\n<li>Response to - Graphic Outbreak of severe acute respiratory syndrome in Hong Kong Special Administrative Region: case report:\n<ul>\n<li><a href=\"https://www.bmj.com/rapid-response/2011/10/29/coronavirus-may-be-killed-higher-body-temperature\">https://www.bmj.com/rapid-response/2011/10/29/coronavirus-may-be-killed-higher-body-temperature</a></li>\n</ul></li>\n<li>Childhood Vaccination and the NHS:\n<ul>\n<li><a href=\"https://peopleshistorynhs.org/encyclopaedia/childhood-vaccination-and-the-nhs/\">https://peopleshistorynhs.org/encyclopaedia/childhood-vaccination-and-the-nhs/</a></li>\n</ul></li>\n<li>COVID-19 false dichotomies and a comprehensive review of the evidence regarding public health, COVID-19 symptomatology, SARS-CoV-2 transmission, mask wearing, and reinfection:\n<ul>\n<li><a href=\"https://bmcinfectdis.biomedcentral.com/articles/10.1186/s12879-021-06357-4\">https://bmcinfectdis.biomedcentral.com/articles/10.1186/s12879-021-06357-4</a></li>\n</ul></li>\n<li>Coronavirus (COVID-19) vaccines side effects and safety:\n<ul>\n<li><a href=\"https://www.nhs.uk/conditions/coronavirus-covid-19/coronavirus-vaccination/safety-and-side-effects/\">https://www.nhs.uk/conditions/coronavirus-covid-19/coronavirus-vaccination/safety-and-side-effects/</a></li>\n</ul></li>\n<li>TWiV 802: \"Another epitope with Shane Crotty\":\n<ul>\n<li><a href=\"https://www.youtube.com/watch?v=nEB4oxO9F1A\">https://www.youtube.com/watch?v=nEB4oxO9F1A</a></li>\n</ul></li>\n<li>UK parliament discussion on 2m rule.\n<ul>\n<li><a href=\"https://hansard.parliament.uk/Commons/2020-06-15/debates/AE7AB431-1668-4AAA-AA32-8A0B83124D30/details\">https://hansard.parliament.uk/Commons/2020-06-15/debates/AE7AB431-1668-4AAA-AA32-8A0B83124D30/details</a></li>\n</ul></li>\n<li>Government minister retracts mask claim.\n<ul>\n<li><a href=\"https://www.holyrood.com/news/view,john-swinney-apologises-for-sharing-covid-face-mask-graphic\">https://www.holyrood.com/news/view,john-swinney-apologises-for-sharing-covid-face-mask-graphic</a></li>\n</ul></li>\n<li>Nature paper on masks and aerosols.\n<ul>\n<li><a href=\"https://www.nature.com/articles/s41598-020-72798-7\">https://www.nature.com/articles/s41598-020-72798-7</a></li>\n</ul></li>\n<li>Our World in Data.\n<ul>\n<li><a href=\"https://ourworldindata.org/covid-cases\">https://ourworldindata.org/covid-cases</a></li>\n</ul></li>\n<li>Nature paper on COVID-19 and T cells.\n<ul>\n<li><a href=\"https://www.nature.com/articles/s41586-020-2550-z\">https://www.nature.com/articles/s41586-020-2550-z</a></li>\n</ul></li>\n<li>Antibody waning and COVID-19.\n<ul>\n<li><a href=\"https://www.ouh.nhs.uk/covid-19/news/article.aspx?id=1415\">https://www.ouh.nhs.uk/covid-19/news/article.aspx?id=1415</a></li>\n</ul></li>\n</ol>\n',225,100,1,'CC-BY-SA','COVID-19,social distancing,masks,aerosol,Vitamin D3,body temperature,vaccines',0,0,1),
(3444,'2021-10-14','The Psion series 5mx',1178,'A show where I talk about my experiences of the Psion 5mx, a portable computer from the late 90s','<p>The psion series 5mx is a portable computer from the late 90s, here\'s my episode talking about it.</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Series_5\" class=\"uri\">https://en.wikipedia.org/wiki/Psion_Series_5</a></li>\r\n<li>PLPTools (syncing with modern linux): <a href=\"https://github.com/rrthomas/plptools\" class=\"uri\">https://github.com/rrthomas/plptools</a></li>\r\n<li>Nconvert (file converter): <a href=\"https://web.archive.org/web/20161130192611/https://neuon.com/downloads/nconvert/\" class=\"uri\">https://web.archive.org/web/20161130192611/https://neuon.com/downloads/nconvert/</a></li>\r\n<li>Programming book: <a href=\"https://archive.org/details/book_20210531\" class=\"uri\">https://archive.org/details/book_20210531</a></li>\r\n<li>psion linux SDK: <a href=\"https://github.com/static-void/psion_cpp_sdk_linux.git\" class=\"uri\">https://github.com/static-void/psion_cpp_sdk_linux.git</a></li>\r\n<li>Eric Lindsey\'s site, with lots of psion software: <a href=\"https://ericlindsay.com/epoc/index.htm\" class=\"uri\">https://ericlindsay.com/epoc/index.htm</a></li>\r\n</ul>\r\n<p>Apologies for talking quickly!</p>',381,0,0,'CC-BY-SA','retro, psion, programming, pdas',0,0,1),
(3452,'2021-10-26','Neuton battery test',324,'Rho`n describes testing the battery in his Neuton EM 4.1 electric lawn mower','<h2 id=\"introduction\">Introduction</h2>\r\n<p>On today\'s show I test whether the battery replacement for my Neuton mower is a success. This is a follow up to <a href=\"https://hackerpublicradio.org/eps.php?id=3443\">episode 3443</a>. After some audio recording difficulties with the blue tooth headset I used with my phone, we hear if the replacement was successful. Before I could test the battery, I needed to replace the mower key. I think it would have been simple to just jump the terminals with a wire and maybe some alligator clips to hold the wire to the key terminals, but I was worried this would not guarantee the wire shaking loose as I moved. I looked on EBay and found a replacement key for about fifteen dollars US, and decided it was worth the cost and the wait before trying out the mower.</p>\r\n<h2 id=\"testing-the-mower\">Testing the mower</h2>\r\n<p>After putting the key in the mower, pulling and holding the safety levers, and then pressing the start button. The mower wouldn\'t start. I checked the key was set properly, and saw the green LED on the handle lit and indicating that power was available. I pulled the key and battery out, and then reseated both of them, checking once again that the power indicator was lit. After some fooling around with the safety levers and start button, I realized you had to push the start button and then pull and hold the safety levers for the mower to start. The mower runs well, and the cost of the batteries and key will even out over time from the savings on not paying for a lawn service.</p>\r\n<h2 id=\"references\">References</h2>\r\n<ul>\r\n<li>DR Neuton Cordless Walk Behind 14\" Lawn Mower CE2 CE3 CE5 Reset Security Key - <a href=\"https://www.ebay.com/itm/184176055409?ViewItem=&amp;item=184176055409\">EBay item</a></li>\r\n</ul>\r\n<h2 id=\"attribution\">Attribution</h2>\r\n<p>The transition sound used between audio clips is found on <a href=\"https://freesound.org/\">freesound.org</a>:<br />\r\nName: <a href=\"https://freesound.org/people/DanJFilms/sounds/529064/\">Harp Transition Music Cue</a><br />\r\nAuthor: <a href=\"https://freesound.org/people/DanJFilms/\">DanJFilms</a><br />\r\nLicense: <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons Zero</a></p>',293,0,0,'CC-BY-SA','electric lawnmower,lawnmower,rechargeable battery',0,0,1),
(3447,'2021-10-19','BlacKernel\'s Journey Into Technology: Episode 2',1249,'In which BlacKernel struggles to talk about Windows','<h2>Talking Points</h2>\r\n<ul>\r\n	<li>W*ndows Power User\r\n	<ul>\r\n		<li>Programmed a few Visual BASIC programs, but was underwhelmed with how BASIC the programming language was</li>\r\n		<li>Tried installing Python and Ruby to much frustration</li>\r\n		<li>Tried installing Cygw*n to make Python/Ruby easier to work with</li>\r\n		<li>Read on the Cygw*n site about something called <b><a href=\"#show-notes\">Linux</a></b></li>\r\n		<li>Started working with C and C++</li>\r\n	</ul></li>\r\n	<li>Customizing my deck\r\n	<ul>\r\n		<li>Tried to customize as much as I could about my W*ndows install</li>\r\n		<li>Utilized tools to change the boot logo, the start menu, the init scripts, etc.</li>\r\n		<li>Hit a few snags with problems boot-looping, not loading graphically, etc</li>\r\n		<li>Tried editing the W*ndows registry and realized that the programs I was using to edit the operating system necessarily break the security and stability of the OS</li>\r\n		<li>Didn\'t really know/care about open source, but was getting frustrated that I wasn\'t able to just reach in to my system\'s code to fix it.</li>\r\n	</ul></li>\r\n</ul>\r\n\r\n<hr>\r\n\r\n<h2 id=\"show-notes\">Show Notes</h2>\r\n<h4>Important Links:</h4>\r\n<ul>\r\n	<li>I couldn\'t really find any of the stuff that I used and, at this point, I\'m not super motivated to find them.</li>\r\n</ul>\r\n\r\n<h4>Wikipedia Articles:</h4>\r\n<ul>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Thomas_Hobbes\">https://en.wikipedia.org/wiki/Thomas_Hobbes</a></li>\r\n</ul>\r\n\r\n\r\n<hr>\r\n\r\n<i>Contact Me</i>\r\n<ul>\r\n<li><b>Email: </b><a href=\"mailto:izzyleibowitz@pm.me\">izzyleibowitz at pm dot me</a></li>\r\n<li><b>Mastodon: </b><a href=\"https://nixnet.social/BlacKernel\">at blackernel at nixnet dot social</a></li>\r\n</ul>\r\n\r\n',396,0,1,'CC-BY-SA','technology, windows, w*ndows, losedows, introductions, linux, dos',0,0,1),
(3449,'2021-10-21','Linux Inlaws S01E41: The Halloween Documents',3956,'The Halloween Documents','<p>In this infomercial on Microsoft, our hosts discuss the infamous Halloween\r\ndocuments (\'tis the season after all), a set of ancient scrolls dating back\r\nmore than twenty years and giving an overview of the behemoth\'s then strategy\r\non open source and how to possibly combat it. But fear not, ye of little faith\r\n:-), all is well now as the episode shows also the long way Microsoft has come\r\nsince then and its adoption (and giving back!) as an enterprise technology.</p>\r\n\r\n<p>Plus: How to increase your market cap by using FLOSS. And last but not least:\r\nThe Dark Side is back by popular demand!  With a special episode on the usual\r\nHalloween stuff including vampires, Transylvania, politicians, QAnon, Zoom,\r\nTeams and other horror topics (Ever wondered what happened to Angela Merkel\r\nafter she stepped down as Germany\'s chancelorette in 2021? Then don\'t miss out\r\non this episode!).</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Little Britain: <a href=\"https://www.bbc.co.uk/programmes/b006q2zd\" target=_blank>https://www.bbc.co.uk/programmes/b006q2zd</a></li>\r\n<li>SCO Group: <a href=\"https://en.wikipedia.org/wiki/SCO_Group\" target=_blank>https://en.wikipedia.org/wiki/SCO_Group</a></li>\r\n<li>SCO vs. IBM: <a href=\"https://en.wikipedia.org/wiki/SCO_Group,_Inc._v._International_Business_Machines_Corp.\" target=_blank>https://en.wikipedia.org/wiki/SCO_Group,_Inc._v._International_Business_Machines_Corp.</a></li>\r\n<li>Halloween documents: <a href=\"https://en.wikipedia.org/wiki/Halloween_documents\" target=_blank>https://en.wikipedia.org/wiki/Halloween_documents</a></li>\r\n<li>Microsoft and open source: <a href=\"https://en.wikipedia.org/wiki/Microsoft_and_open_source\" target=_blank>https://en.wikipedia.org/wiki/Microsoft_and_open_source</a></li>\r\n<li>Monsters of Man: <a href=\"https://www.imdb.com/title/tt6456326\" target=_blank>https://www.imdb.com/title/tt6456326</a></li>\r\n<li>Breeders: <a href=\"https://en.wikipedia.org/wiki/Breeders_(TV_series)\" target=_blank>https://en.wikipedia.org/wiki/Breeders_(TV_series)</a></li>\r\n<li>Permanent penis for the Welsh Dragon: <a href=\"https://www.dailymail.co.uk/news/article-9932657/Hilarious-campaigners-demand-famous-red-dragon-given-permanent-penis-Welsh-flags.html\" target=_blank>https://www.dailymail.co.uk/news/article-9932657/Hilarious-campaigners-demand-famous-red-dragon-given-permanent-penis-Welsh-flags.html</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Microsoft, Google, The Dark Side, Halloween, Transylvania, Carmesine-colored Soy Milk, vegan vampire',0,0,1),
(3471,'2021-11-22','The Sony Walkman WM-F41',531,'A quick talk about one of my favorite Legacy Audio devices, a genuine Sony FM/AM cassette Walkman.','<p>This episode is just a quick talk about one of my favorite legacy audio devices, my Sony FM/AM cassette Walkman, model WM-F41.</p>\r\n\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n<li><a href=\"https://retrospekt.com/products/sony-walkman-wm-f31-f41\">Sony Walkman WM-F41</a></li>\r\n<li><a href=\"https://www.behringer.com/product.html?modelCode=P0576\">Behringer Xenyx 502 Mixer</a></li>\r\n<li>Music is from Kimiko Ishizaka\'s <em>The Open Art of Fugue</em>: <a href=\"https://music.kimiko-piano.com/album/j-s-bach-the-art-of-the-fugue-kunst-der-fuge-bwv-1080\">https://music.kimiko-piano.com/album/j-s-bach-the-art-of-the-fugue-kunst-der-fuge-bwv-1080</a>, used by permission of its <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">CC0 1.0 Universal (CC0 1.0) Public Domain Dedication license</a>.</li>\r\n</ul>\r\n\r\n',238,0,0,'CC-BY-SA','audio, vintage audio, cassette tapes, tape players, portable stereos, audio repair',0,0,1),
(3468,'2021-11-17','Distro upgrade intervals on my Raspberry Pi',786,'In this episode I discuss Debian distro upgrade intervals for my raspberry Pi','<h2 id=\"a-discussion-about-debian-lts-distro-upgrade-intervals-on-my-raspberry-pi\">A discussion about Debian LTS distro upgrade intervals on my Raspberry Pi</h2>\r\n<h3 id=\"relevant-links-below\">Relevant links below</h3>\r\n<p><a href=\"https://wiki.debian.org/DebianReleases\">Debian release information</a></p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=3266\">My previous episode from last year where I covered the upgrade on my raspberry Pi from Debian Jessie 8 to Stretch 9</a></p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=2901\">A previous episode where I describe my raspberry Pi add-on board and what I use it for</a></p>\r\n',201,0,1,'CC-BY-SA','Linux, Distros, Raspberry Pi, Debian',0,0,1),
(3741,'2022-12-05','HPR Community News for November 2022',3276,'HPR Volunteers talk about shows released and comments posted in November 2022','<style>\ntable td.shrink {\n    white-space:nowrap\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/0414.html\" target=\"_blank\">Kinghezy</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.php?id=3717\" target=\"_blank\">3717</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-11-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3717\" target=\"_blank\">Video editing with Shotcut on a low end PC</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.php?id=3718\" target=\"_blank\">3718</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-11-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3718\" target=\"_blank\">Making Ansible playbooks to configure Single Sign On for popular open source applications</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3719\" target=\"_blank\">3719</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-11-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3719\" target=\"_blank\">HPR 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.php?id=3720\" target=\"_blank\">3720</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-11-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3720\" target=\"_blank\">Practicing Batch Files With ECHO</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.php?id=3721\" target=\"_blank\">3721</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-11-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3721\" target=\"_blank\">HPR Community News for October 2022</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.php?id=3722\" target=\"_blank\">3722</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-11-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3722\" target=\"_blank\">Bash snippet - plurals in messages</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.php?id=3723\" target=\"_blank\">3723</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-11-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3723\" target=\"_blank\">HPR 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.php?id=3724\" target=\"_blank\">3724</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-11-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3724\" target=\"_blank\">My top Android apps</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.php?id=3725\" target=\"_blank\">3725</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-11-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3725\" target=\"_blank\">How to use OSMAnd with Public Transport </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.php?id=3726\" target=\"_blank\">3726</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-11-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3726\" target=\"_blank\">Breaches ever reaching</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.php?id=3727\" target=\"_blank\">3727</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-11-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3727\" target=\"_blank\">Expanding your filesystem with LVM</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0293.html\" target=\"_blank\">Rho`n</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3728\" target=\"_blank\">3728</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-11-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3728\" target=\"_blank\">Pinebook Pro review</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3729\" target=\"_blank\">3729</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-11-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3729\" target=\"_blank\">Contributing to SuperTuxKart</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0407.html\" target=\"_blank\">Celeste</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3730\" target=\"_blank\">3730</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-11-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3730\" target=\"_blank\">Into Arizona</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.php?id=3731\" target=\"_blank\">3731</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-11-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3731\" target=\"_blank\">Speech recognition in Kdenlive</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.php?id=3732\" target=\"_blank\">3732</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-11-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3732\" target=\"_blank\">My experience owning an Atari Jaguar</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0412.html\" target=\"_blank\">m0dese7en</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3733\" target=\"_blank\">3733</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-11-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3733\" target=\"_blank\">Smite</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.php?id=3734\" target=\"_blank\">3734</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-11-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3734\" target=\"_blank\">Inetd: the internet super-server</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3735\" target=\"_blank\">3735</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-11-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3735\" target=\"_blank\">i3 Tiling Window Manager</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.php?id=3736\" target=\"_blank\">3736</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-11-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3736\" target=\"_blank\">Metasyntactic words</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3737\" target=\"_blank\">3737</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-11-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3737\" target=\"_blank\">Review of KOBO Libra H20 e-reader</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0293.html\" target=\"_blank\">Rho`n</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3738\" target=\"_blank\">3738</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-11-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3738\" target=\"_blank\">Intro to KMyMoney</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0414.html\" target=\"_blank\">Kinghezy</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 25 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 6 comments on\n5 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3698#comments\" target=\"_blank\">hpr3698</a></strong>\n(2022-10-05) \"<em>Spectrogram</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3698#2\" target=\"_blank\">Comment 2</a>:\nMrX on 2022-11-04:\n\"What a great tip\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3705#comments\" target=\"_blank\">hpr3705</a></strong>\n(2022-10-14) \"<em>The Year of the FreeBSD Desktop</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3705#3\" target=\"_blank\">Comment 3</a>:\nbinrc on 2022-11-03:\n\"additional links\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3711#comments\" target=\"_blank\">hpr3711</a></strong>\n(2022-10-24) \"<em>Cars</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3711#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2022-11-09:\n\"pedestrians and cyclists\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3714#comments\" target=\"_blank\">hpr3714</a></strong>\n(2022-10-27) \"<em>The News with Some Guy On the Internet</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3714#5\" target=\"_blank\">Comment 5</a>:\nDave Morriss on 2022-11-02:\n\"Beautifully done!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3715#comments\" target=\"_blank\">hpr3715</a></strong>\n(2022-10-28) \"<em>Secret hat conversations, Part 2.</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3715#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2022-11-02:\n\"A very interesting discussion\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3715#4\" target=\"_blank\">Comment 4</a>:\nDeepGeek on 2022-11-03:\n\"Phone, Tiling wm,\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 19 comments on 12 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3719#comments\" target=\"_blank\">hpr3719</a></strong>\n(2022-11-03) \"<em>HPR News</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.php?id=3719#1\" target=\"_blank\">Comment 1</a>:\nmike M. on 2022-11-04:\n\"Another form of typosquatting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3721#comments\" target=\"_blank\">hpr3721</a></strong>\n(2022-11-07) \"<em>HPR Community News for October 2022</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.php?id=3721#1\" target=\"_blank\">Comment 1</a>:\nArcher72 on 2022-11-07:\n\"Weirdos\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3722#comments\" target=\"_blank\">hpr3722</a></strong>\n(2022-11-08) \"<em>Bash snippet - plurals in messages</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3722#1\" target=\"_blank\">Comment 1</a>:\nrho`n on 2022-11-11:\n\"Great tip!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3722#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2022-11-16:\n\"Thanks rho`n\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3725#comments\" target=\"_blank\">hpr3725</a></strong>\n(2022-11-11) \"<em>How to use OSMAnd with Public Transport </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3725#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2022-11-14:\n\"Useful and timely\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3726#comments\" target=\"_blank\">hpr3726</a></strong>\n(2022-11-14) \"<em>Breaches ever reaching</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0405.html\" target=\"_blank\">Lurking Prion</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3726#1\" target=\"_blank\">Comment 1</a>:\nhammerron on 2022-11-15:\n\"Old LiveJournal\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3727#comments\" target=\"_blank\">hpr3727</a></strong>\n(2022-11-15) \"<em>Expanding your filesystem with LVM</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0293.html\" target=\"_blank\">Rho`n</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3727#1\" target=\"_blank\">Comment 1</a>:\nZen_floater2 on 2022-11-18:\n\"Love server problems\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3728#comments\" target=\"_blank\">hpr3728</a></strong>\n(2022-11-16) \"<em>Pinebook Pro review</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3728#1\" target=\"_blank\">Comment 1</a>:\nZen_floater2 on 2022-11-18:\n\"I liked this show.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3728#2\" target=\"_blank\">Comment 2</a>:\none_of_spoons on 2022-11-21:\n\"Programmable ROM.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3728#3\" target=\"_blank\">Comment 3</a>:\nb on 2022-11-24:\n\"rockchip\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3728#4\" target=\"_blank\">Comment 4</a>:\nsunzu on 2022-11-26:\n\"available distros\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3729#comments\" target=\"_blank\">hpr3729</a></strong>\n(2022-11-17) \"<em>Contributing to SuperTuxKart</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0407.html\" target=\"_blank\">Celeste</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3729#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-11-17:\n\"Car rambling\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3730#comments\" target=\"_blank\">hpr3730</a></strong>\n(2022-11-18) \"<em>Into Arizona</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.php?id=3730#1\" target=\"_blank\">Comment 1</a>:\nClinton Roy on 2022-11-19:\n\"Dam?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3731#comments\" target=\"_blank\">hpr3731</a></strong>\n(2022-11-21) \"<em>Speech recognition in Kdenlive</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.php?id=3731#1\" target=\"_blank\">Comment 1</a>:\nCeleste on 2022-11-21:\n\"didn\'t know the feature\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3731#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2022-11-22:\n\"re: both libre/opensource\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3733#comments\" target=\"_blank\">hpr3733</a></strong>\n(2022-11-23) \"<em>Smite</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.php?id=3733#1\" target=\"_blank\">Comment 1</a>:\nLurking Prion on 2022-11-23:\n\"Let\'s do a show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3733#2\" target=\"_blank\">Comment 2</a>:\nSome Guy On The Internet on 2022-11-24:\n\"Sure\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3734#comments\" target=\"_blank\">hpr3734</a></strong>\n(2022-11-24) \"<em>Inetd: the internet super-server</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0406.html\" target=\"_blank\">binrc</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3734#1\" target=\"_blank\">Comment 1</a>:\nsinza on 2022-11-24:\n\"Great show!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3734#2\" target=\"_blank\">Comment 2</a>:\nZen_floater2 on 2022-11-27:\n\"loved this\"</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://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-November/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-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=\"hpr-rss-feeds-and-https-links\">HPR RSS feeds and https\nlinks</h3>\n<p>A question came up in November regarding the HPR RSS feeds. All of\nthe URLs in these feeds use <code>\'http\'</code> as opposed to\n<code>\'https\'</code>.</p>\n<p>Although this may seem odd, this is a fairly common thing to do,\nbecause the RSS standard (such as it is) does not cater for\n<code>\'https\'</code> links. There is a concern that passing an RSS feed\nwith such links to a validator (such as the <a\nhref=\"https://validator.w3.org/feed/\">W3C Feed Validation Service</a>)\nwill result in it being marked as invalid.</p>\n<h3 id=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on\narchive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to\nthe Internet Archive there are other tasks to perform. We are\nreprocessing and re-uploading shows in the range 871 to 2429 as\nexplained in the Community News show notes released in <a\nhref=\"http://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">May\n2022</a>. We are keeping a running total here to show progress:</p>\n<!-- . -->\n<table>\n<tr>\n<th>\nMonth\n</th>\n<th>\nMonth count\n</th>\n<th>\nRunning total\n</th>\n<th>\nRemainder\n</th>\n</tr>\n<tr>\n<td>\n2022-04\n</td>\n<td>\n130\n</td>\n<td>\n130\n</td>\n<td>\n1428\n</td>\n</tr>\n<tr>\n<td>\n2022-05\n</td>\n<td>\n140\n</td>\n<td>\n270\n</td>\n<td>\n1288\n</td>\n</tr>\n<tr>\n<td>\n2022-06\n</td>\n<td>\n150\n</td>\n<td>\n420\n</td>\n<td>\n1138\n</td>\n</tr>\n<tr>\n<td>\n2022-07\n</td>\n<td>\n155\n</td>\n<td>\n575\n</td>\n<td>\n983\n</td>\n</tr>\n<tr>\n<td>\n2022-08\n</td>\n<td>\n155\n</td>\n<td>\n730\n</td>\n<td>\n828\n</td>\n</tr>\n<tr>\n<td>\n2022-09\n</td>\n<td>\n150\n</td>\n<td>\n880\n</td>\n<td>\n678\n</td>\n</tr>\n<tr>\n<td>\n2022-10\n</td>\n<td>\n155\n</td>\n<td>\n1035\n</td>\n<td>\n523\n</td>\n</tr>\n<tr>\n<td>\n2022-11\n</td>\n<td>\n230\n</td>\n<td>\n1265\n</td>\n<td>\n293\n</td>\n</tr>\n</table>\n\n<p><small><small>Updated: 2022-12-03 16:10:11</small></small></p>\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3464,'2021-11-11','Being irrational',777,'Being irrational is rational.','<p>When listening to <a href=\"https://hackerpublicradio.org/eps.php?id=3442\">HPR 3442</a> by Klaatu, which I recommend, some thoughts about how we think started rattling about in my head. In this show I riff on that and talk about the importance of our irrational mode of thought.</p>\r\n',268,0,0,'CC-BY-SA','philosophy,mathematics,science,chess,logic,music',0,0,1),
(3465,'2021-11-12','Walmart Onn 7 inch tablet gen 2',863,'Podcast about a new Android go Tablet I purchased ','<p>Just a basic podcast about a tablet.</p>\r\n<p><a href=\"https://www.walmart.com/ip/onn-7-Tablet/930669857\">https://www.walmart.com/ip/onn-7-Tablet/930669857</a></p>\r\n',129,0,0,'CC-BY-SA','Walmart, Android Go, Tablet',0,0,1),
(3466,'2021-11-15','Why HPR has less downloads',551,'A short summary on why podcast listening might be on decline.','<p>I did a show about why I do not listen to non-mainstream podcasts as much as I used to. For me two things happened: I switched from being in the car for 16 hours a week to being a remote sales person at home. So the 16 hours I listened to podcasts every week in the car went away. The second reason I reduced was that many of the podcasts I was listening to were presented by people who do not share my values. So I stopped listening to them. The third reason I listen less is the Army opened up the online book library to retired service members and I do a lot of audio books in the moment.</p>\r\n',129,0,0,'CC-BY-SA','podcasts, dowloads',0,0,1),
(3469,'2021-11-18','Linux Inlaws S01E43: The Great Battle or not',4138,'The Great Battle nor Not','<p>In this episode Martin and one of the Grumpies (as in Grumpy Old Coders)\r\nbattle it out: SQL or NoSQL - which technology is better? If you ever wondered\r\nwhy the Structured Query Language was invented in the first place and why the\r\nhipster abandoned ship for the latest (?) rage of the likes of the NoSQL\r\nvariety, this is for you. Plus: A whole family of never-heard-of sound effects\r\nmake their debut on this bumper of an episode.</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>SQL: <a href=\"https://www.iso.org/standard/63555.html\" target=_blank>https://www.iso.org/standard/63555.html</a></li>\r\n<li>NoSQL: <a href=\"https://en.wikipedia.org/wiki/NoSQL\" target=_blank>https://en.wikipedia.org/wiki/NoSQL</a></li>\r\n<li>NoSQL Geek: <a href=\"https://www.nosqlgeek.org\" target=_blank>https://www.nosqlgeek.org</a></li>\r\n<li>ACID compliance: <a href=\"https://en.wikipedia.org/wiki/ACID\" target=_blank>https://en.wikipedia.org/wiki/ACID</a></li>\r\n<li>redis: <a href=\"https://github.com/redis/redis\" target=_blank>https://github.com/redis/redis</a></li>\r\n<li>CAP theorem: <a href=\"https://en.wikipedia.org/wiki/CAP_theorem\" target=_blank>https://en.wikipedia.org/wiki/CAP_theorem</a></li>\r\n<li>TorroDB: <a href=\"https://github.com/gordol/torrodb-server\" target=_blank>https://github.com/gordol/torrodb-server</a></li>\r\n<li>Grumpy Old Coders episode on the Dark Side: <a href=\"https://soundcloud.com/user-498377588/grumpy-old-coders-ep-11-the-dark-side\" target=_blank>https://soundcloud.com/user-498377588/grumpy-old-coders-ep-11-the-dark-side</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','SQL, NoSQL, Grumpy Old Coders, Hipster databases, mainframes, Execution planners',0,0,1),
(3448,'2021-10-20','Installing GuixSD',2679,'Rho`n records installing GuixSD to an external USB drive to be run on a Mac Mini computer','<h2>Synopsis</h2>\r\n\r\n<p>In this episode Rho`n records his adventure in installing GuixSD on an external USB drive which will be run on a Mac Mini computer. After overcoming the initial difficulty of finding a keyboard that would connect wirelessly to the Mac Mini while using the Guix installer and some network difficulties, he describes the installation steps.</p>\r\n\r\n<p>Guix has a graphical text based installer. It is reminiscent of the mid to late 90s Debian installers. Even with its old school feel, the installer is very nice. It is well laid out, has good onscreen description for each step of the installation process, and provides ample configuration selections from language, to to key board layout, to desktop and software selection.</p>\r\n\r\n<h2>References</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://guix.gnu.org/\">Guix website</a></li>\r\n	<li><a href=\"https://guix.gnu.org/en/manual/en/html_node/System-Installation.html#System-Installation\">Instructions for installing Guix</a> as the main OS</li>\r\n	<li><a href=\"https://www.riitek.com/product/k12x.html\">Rii 2.4G Mini Wireless Keyboard with Touchpad Mouse</a>,Lightweight Portable Wireless Keyboard Controller with USB Receiver Remote Control for Windows/ Mac/ Android/ PC/Tablets/ TV/Xbox/ PS3. X1-Black - <a href=\"https://www.amazon.com/gp/product/B00I5SW8MC/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&th=1\">EBay item</a></li>\r\n</ul>\r\n\r\n<h2>Attribution</h2>\r\n\r\n<p>The transition sound used between audio clips is found on <a href=\"https://freesound.org/\">freesound.org</a>:<br>\r\nName: <a href=\"https://freesound.org/people/DanJFilms/sounds/529064/\">Harp Transition Music Cue</a><br>\r\nAuthor: <a href=\"https://freesound.org/people/DanJFilms/\">DanJFilms</a><br>\r\nLicense: <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons Zero</a></p>\r\n',293,0,0,'CC-BY-SA','Guix,GuixSD,installer,install,USB drive,Mac Mini,grub rescue',0,0,1),
(3461,'2021-11-08','Changes to HPR Branding',2441,'Rho\'n, Dave and Ken read the entire email thread related to changing the HPR theme','<p>\r\nWe didn\'t have time to tackle the discussion in last months community news so today we dedicate an entire show to reading out all the comments relating to the HPR Branding.\r\n<br />\r\nSee <a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-October/thread.html\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-October/thread.html</a>\r\n</p>\r\n<p>\r\nYour comments are appreciated !\r\n</p>',159,47,0,'CC-BY-SA','HPR, Branding, Intro, Outro',0,0,1),
(3453,'2021-10-27','Rust 101: Episode 1 - Hello, World!',1348,'In which BlacKernel introduces the cargo tool and goes into detail on the rust hello world program','<h2>Talking Points</h2>\r\n<ul>\r\n	<li>main.rs\r\n	<ul>\r\n		<li>Like main.cpp in C++ or main.c in C</li>\r\n		<li>Tells the compiler which file to start with</li>\r\n		<li>Can link to other \"<i>crates</i>\" and \"<i>modules</i>\"</li>\r\n	</ul></li>\r\n	<li>Cargo.toml\r\n	<ul>\r\n		<li>Keeps track of application metadata</li>\r\n		<li>This includes dependencies!</li>\r\n	</ul></li>\r\n	<li>Functions\r\n	<ul>\r\n		<li>Strictly typed, like everything in Rust</li>\r\n		<li>Declared by <code>fn</code></li>\r\n		<li>Argument typed with <code>argument: Type</code></li>\r\n		<li>Return typed with <code>-&gt; Type</code> otherwise assumed to return nothing</li>\r\n	</ul></li>\r\n	<li>The Main Function\r\n	<ul>\r\n		<li>Like the main functions in C and C++</li>\r\n		<li>Where the program starts within the main.rs file</li>\r\n		<li>CLI arguments handled by <code>std::env</code>, rather than <code>argv</code> and <code>argc</code> in C</li>\r\n		<li>Can return nothing or a <code>Result&lt;()&gt;</code></li>\r\n	</ul></li>\r\n	<li>Macros\r\n	<ul>\r\n		<li><i>Metafunctions</i> or functions for functions</li>\r\n		<li>More general than functions, having flexibility in the number of arguments, etc, but harder to write</li>\r\n	</ul></li>\r\n	<li>The println! Macro\r\n	<ul>\r\n		<li>Can take any number of arguments that implement the <code>display</code> trait</li>\r\n		<li>Usually things like strings or character literals</li>\r\n		<li>Will format them into a string and display it on the terminal</li>\r\n		<li>Similar to printf in C</li>\r\n	</ul></li>\r\n	<li>The Hello World program\r\n	<ul>\r\n		<li>Can be automagically generated with <code>cargo new</code> and then the name of your application</li>\r\n		<li>Located in <code>Name-Of-Application/src/main.rs</code></li>\r\n	</ul></li>\r\n\r\n</ul>\r\n\r\n<br>\r\n\r\n<pre>\r\nfn main() {\r\n&emsp;&emsp;println!(\"Hello, world!\");\r\n}\r\n</pre>\r\n\r\n<br>\r\n\r\n\r\n<hr>\r\n\r\n<h2 id=\"show-notes\">Show Notes</h2>\r\n<h4>Important Links:</h4>\r\n<ul>\r\n	<li><a href=\"https://gitlab.com/BlacKernel/rust-101\">Git repo for this miniseries</a></li>\r\n	<li><a href=\"https://doc.rust-lang.org/std/\">The Rust Standard Library</a></li>\r\n	<li><a href=\"https://doc.rust-lang.org/std/macro.format.html\">The format! macro</a></li>\r\n	<li><a href=\"https://doc.rust-lang.org/std/macro.println.html\">The println! macro</a></li>\r\n</ul>\r\n\r\n<h4>Wikipedia Articles:</h4>\r\n<ul>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Rust_(programming_language)\">The Rust Programming Language</a></li>\r\n</ul>\r\n\r\n<hr>\r\n\r\n<i>Contact Me</i>\r\n<ul>\r\n<li><b>Email: </b><a href=\"mailto:izzyleibowitz@pm.me\">izzyleibowitz at pm dot me</a></li>\r\n<li><b>Mastodon: </b><a href=\"https://nixnet.social/BlacKernel\">at blackernel at nixnet dot social</a></li>\r\n</ul>\r\n\r\n',396,25,1,'CC-BY-SA','rust, programming, hello world, macros, functions',0,0,1),
(3455,'2021-10-29','Podcast Recommendation: IBM and Quantum computing',193,'Highlights of a podcast from Moore\'s Lobby','<h2 id=\"moores-lobby\">Moore\'s Lobby</h2>\r\n<h3 id=\"ep.-34-the-latest-from-the-lab-how-ibm-research-is-inventing-whats-next\">Ep. 34 | The Latest from the Lab: How IBM Research Is Inventing What\'s Next</h3>\r\n<p><a href=\"https://www.allaboutcircuits.com/podcast/ep-34-the-latest-from-the-lab-how-ibm-research-is-inventing-whats-next\" class=\"uri\">https://www.allaboutcircuits.com/podcast/ep-34-the-latest-from-the-lab-how-ibm-research-is-inventing-whats-next</a></p>\r\n<ol type=\"1\">\r\n<li>Rss feed: <a href=\"https://eetech.libsyn.com/rss\" class=\"uri\">https://eetech.libsyn.com/rss</a></li>\r\n<li>Interview with Dr. Jeffrey Welser\r\n<ul>\r\n<li>VP of Exploratory Science at IBM Research</li>\r\n<li>IBM Release first 2nm chip this year</li>\r\n</ul></li>\r\n<li>Engineers vs Scientists and how they drive innovations</li>\r\n<li>Goal to replace the transistor when Moore\'s Law stops scaling</li>\r\n<li>Managing thermal loads</li>\r\n<li>Finding new structures and materials to control current</li>\r\n<li>Neural nets, image recognition and AI</li>\r\n<li>Quantum computing\r\n<ul>\r\n<li>Discussion starts at 34:35 into the podcast</li>\r\n<li>Richard Feynman, Early 80\'s\r\n<ul>\r\n<li><a href=\"https://www.feynman.com\" class=\"uri\">https://www.feynman.com</a></li>\r\n</ul></li>\r\n<li>qubits\r\n<ul>\r\n<li>superposition state</li>\r\n<li>\"Spooky action at a distance\"</li>\r\n</ul></li>\r\n<li>Encryption\r\n<ul>\r\n<li>Need millions of qubits to break current encryption\r\n<ul>\r\n<li>Only currently over 100 qubits</li>\r\n<li>At least a decade from having enough qubits</li>\r\n<li>Currently have classical systems that cannot be broken by quantum computers\r\n<ul>\r\n<li>The math does not map onto a quantum system</li>\r\n<li>Currently working with NIST to create quantum safe cryptography\r\n<ul>\r\n<li><a href=\"https://csrc.nist.gov/Projects/Cryptographic-Standards-and-Guidelines\" class=\"uri\">https://csrc.nist.gov/Projects/Cryptographic-Standards-and-Guidelines</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n<li>Quantum chemistry</li>\r\n<li>Quantum chip - cooling and superconducting\r\n<ul>\r\n<li>Dilution refrigerator\r\n<ul>\r\n<li>Low temperature and pressure</li>\r\n<li>Top is 4 Kelvin, bottom gets to 15 milli Kelvin</li>\r\n<li><a href=\"https://phys.org/news/2019-06-superconducting-quantum-refrigerator.html\" class=\"uri\">https://phys.org/news/2019-06-superconducting-quantum-refrigerator.html</a></li>\r\n<li><a href=\"https://www.nist.gov/si-redefinition/kelvin-introduction\" class=\"uri\">https://www.nist.gov/si-redefinition/kelvin-introduction</a></li>\r\n</ul></li>\r\n</ul></li>\r\n<li>Josephson junction\r\n<ul>\r\n<li>It is the reference Volt as defined by NIST</li>\r\n<li><a href=\"https://www.sciencedirect.com/topics/physics-and-astronomy/josephson-junctions\" class=\"uri\">https://www.sciencedirect.com/topics/physics-and-astronomy/josephson-junctions</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Josephson_voltage_standard\" class=\"uri\">https://en.wikipedia.org/wiki/Josephson_voltage_standard</a></li>\r\n</ul></li>\r\n<li>Use an IBM quantum computer online\r\n<ul>\r\n<li>May 2016 the first quantum computer was put on the \'Net\r\n<ul>\r\n<li><a href=\"https://quantum-computing.ibm.com\" class=\"uri\">https://quantum-computing.ibm.com</a></li>\r\n<li><a href=\"https://newsroom.ibm.com/2016-05-03-IBM-Makes-Quantum-Computing-Available-on-IBM-Cloud-to-Accelerate-Innovation\" class=\"uri\">https://newsroom.ibm.com/2016-05-03-IBM-Makes-Quantum-Computing-Available-on-IBM-Cloud-to-Accelerate-Innovation</a></li>\r\n<li>300,000 users</li>\r\n<li><a href=\"https://qiskit.org/documentation\" class=\"uri\">https://qiskit.org/documentation</a>\r\n<ul>\r\n<li>Qiskit is open-source software for working with quantum computers at the level of circuits, pulses, and algorithms.</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n</ol>\r\n',318,0,0,'CC-BY-SA','podcast, moore\'s law, quantum computing, qubits, encryption, cryptography, NIST, Josephson junction',0,0,1),
(3463,'2021-11-10','Clonezilla: A backup story',2046,'Rho`n walks through the process of backing  up his laptop with Clonezilla','<h2>Notes on the audio quality</h2>\r\n<p>I have been looking into the audio quality issues of my shows. I think I have found a solution to them. Unfortunately, this show was recorded before I discovered it.</p>\r\n<h2>Synopsis</h2>\r\n<p>In today\'s episode, I take the audience along my adventure in backing up my laptop\'s hard drives. During recent OS updates, the kernel updates started to fall. In my efforts to resolve the problem, I made things worse &ndash; to the point I decided it was time to reinstall the operating system. To prevent any data loss, I chose Clonezilla to image the drives.</p>\r\n\r\n<p>The Clonezilla Live edition lets you boot into a ncurses menu driven system that walks you through the process of either backing up your hard drives or restoring a Clonezilla backup. Clonezilla backups save space by imaging only the data on your drives (for those filesystems it recognizes &ndash; otherwise it uses <a href=\"#dd\">dd</a> to do a sector-by-sector copy)</p>\r\n\r\n<p>Overall the process was very smooth, and, at the end, I was confident to move forward with wiping my main hard drive and reinstalling the operating system knowing I had a way to restore any lost data.</p>\r\n\r\n<h2>References</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://clonezilla.org/\">Clonzilla website</a></li>\r\n	<li><a href=\"https://unetbootin.org/\">UNETBOOTIN website</a></li>\r\n	<li><a id=\"dd\" href=\"https://en.wikipedia.org/wiki/Dd_(Unix)\">dd</a>, command line utility for *nix like operating systems</li>\r\n</ul>\r\n\r\n<h2>Attribution</h2>\r\n\r\n<p>The transition sound used between audio clips is found on <a href=\"https://freesound.org/\">freesound.org</a>:<br>\r\nName: <a href=\"https://freesound.org/people/DanJFilms/sounds/529064/\">Harp Transition Music Cue</a><br>\r\nAuthor: <a href=\"https://freesound.org/people/DanJFilms/\">DanJFilms</a><br>\r\nLicense: <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons Zero</a></p>\r\n\r\n',293,0,0,'CC-BY-SA','Clonezilla,backup,backups,cloning,hard drives',0,0,1),
(3454,'2021-10-28','Engineering Notation',736,'Ken runs through the most common Engineering Notation used in HAM radio.','<h1 id=\"engineering-notation\">Engineering Notation</h1>\r\n<h3 id=\"learn-this-table\">Learn this table</h3>\r\n<pre>\r\n giga G 10<sup>9</sup>  1,000,000,000\r\n mega M 10<sup>6</sup>      1,000,000\r\n kilo k 10<sup>3</sup>          1,000\r\n                         1\r\nmilli m 10<sup>−3</sup>             0.001\r\nmicro μ 10<sup>−6</sup>             0.000,001\r\n nano n 10<sup>−9</sup>             0.000,000,001\r\n pico p 10<sup>−12</sup>            0.000,000,000,001\r\n</pre>\r\n<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Engineering_notation\">Engineering notation</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Metric_prefix#List_of_SI_prefixes\">List of International System of Units (SI)</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3087\">hpr3087 :: Phonetic alphabet</a></li>\r\n</ul>\r\n',30,43,0,'CC-BY-SA','giga,mega,kilo,milli,micro,nano,pico,SI, International System of Units',0,0,1),
(3457,'2021-11-02','Tables',2260,'How and why I convert tables to lists','<p>\nMobile devices don\'t display them nicely.\nMost tables can be converted into a list:\n</p>\n\n<table>\n  <tr>\n    <th>OS</th><th>Init</th><th>Pkg</th>\n  </tr>\n<tr>\n<td>Fedora</td><td>systemd</td><td>dnf</td>\n</tr>\n<tr>\n<td>Slackware</td><td>BSD-style</td><td>slackpkg</td>\n</tr>\n<tr>\n<td>Gentoo</td><td>OpenRC</td><td>emerge</td>\n</tr>\n</table>\n\n<p>Can be represented as a list. In YAML terms, this is a <em>sequence</em> of <em>mappings</em>.\n</p>\n\n<ul><li>Fedora\n<ul><li>Init system: systemd</li>\n<li>Package manager: dnf</li>\n</ul></li>\n<li>Slackware\n<ul>\n<li>Init system: BSD-style</li>\n<li>Package manager: slackpkg</li>\n</ul></li>\n\n<li>Gentoo\n<ul>\n<li>Init system: OpenRC</li>\n<li>Package manager: emerge</li>\n</ul></li>\n</ul>\n\n<p>A table doesn\'t always translate exactly to a list, but it probably can be restructured. </p>\n\n<table>\n<tr>\n<th>OS</th><th>Open source</th><th>Landed on Mars</th></tr>\n<tr>\n<td>Linux</td><td>Yes</td><td>Yes</td>\n</tr>\n<tr>\n<td>BSD</td><td>Yes</td><td>No</td>\n</tr>\n<tr>\n<td>macOS</td><td>No</td><td>No</td>\n</tr>\n</table>\n\n<p>Could be written like this instead:</p>\n\n<p>Linux and BSD are open source operating systems, while macOS is not. Of these POSIX-compliant systems, only Linux has landed on Mars so far.</p>\n\n<p>That\'s pretty casual and loses the visual impact of a table or a list. So alternately, you could summarize what\'s common and highlight differences:</p>\n\n<p>\nThere are a few Linux systems on Mars.\nNeither BSD or macOS have yet landed on Mars.\n</p>\n\n<ul>\n<li>Linux and BSD are both open source.</li>\n<li>macOS is based partially on open source and includes components from the BSD, KDE, GNU, and other projects.</li>\n</ul>\n',78,4,0,'CC-BY-SA','data,tables,communication',0,0,1),
(3458,'2021-11-03','Living in the Terminal 2: The Obligatory Sequel',3648,'A very tired BlacKernel tries to handle feedback from the previous episode','<h2>Talking Points</h2>\r\n<ul>\r\n	<li>Listener Feedback\r\n		<ul>\r\n			<li>Dave Morriss and the Markdown/HTML debacle\r\n				<ul>\r\n					<li>Using validate_html</li>\r\n					<li>Podcast logistics etc.</li>\r\n				</ul>\r\n			</li>\r\n			<li>hackerdefo\'s suggestions\r\n				<ul>\r\n					<li>.less_termcap:<br/>\r\n					<pre>\r\nexport LESS_TERMCAP_mb=$(tput bold; tput setaf 2)\r\nexport LESS_TERMCAP_md=$(tput bold; tput setaf 6)\r\nexport LESS_TERMCAP_me=$(tput sgr0)\r\nexport LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4)\r\nexport LESS_TERMCAP_se=$(tput rmso; tput sgr0)\r\nexport LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7)\r\nexport LESS_TERMCAP_ue=$(tput rmul; tput sgr0)\r\nexport LESS_TERMCAP_mr=$(tput rev)\r\nexport LESS_TERMCAP_mh=$(tput dim)\r\nexport LESS_TERMCAP_ZN=$(tput ssubm)\r\nexport LESS_TERMCAP_ZV=$(tput rsubm)\r\nexport LESS_TERMCAP_ZO=$(tput ssupm)\r\nexport LESS_TERMCAP_ZW=$(tput rsupm)\r\n					</pre><br/>\r\n					.bashrc:<br/>\r\n					<pre>\r\nif [ -f $HOME/.less_termcap ];then\r\n	. $HOME/.less_termcap\r\nfi\r\n					</pre></li>\r\n					<li>poca, castero, and gpodder cli</li>\r\n					<li>My opinion on Python and Java</li>\r\n					<li>ProtonMail Bridge with mutt</li>\r\n				</ul>\r\n			</li>\r\n			<li>Comments from the last episode\r\n				<ul>\r\n					<li>(Please go to the last episode to read the full comments)</li>\r\n					<li>NOTE: If you want a timely response, please email me or mention me on Mastodon</li>\r\n					<li>Operat0r: Kids these days! https://www.nethack.org/</li>\r\n					<li>Mr. Young: +1 for cnus</li>\r\n					<li>sesamemucho: The text</li>\r\n					<li>Dave Morriss: Very enjoyable</li>\r\n					<li>Gumnos: Using \"c\" to pause in cmus</li>\r\n				</ul>\r\n			</li>\r\n		</ul>\r\n	</li>\r\n	<li>New Talking Points\r\n		<ul>\r\n			<li>Here Documents\r\n				<pre>\r\ncat &gt; text.txt &lt;&lt;EOF\r\nHello, World!\r\nEOF\r\n				</pre>\r\n			</li>\r\n			<li>NetHack</li>\r\n		</ul>\r\n	</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h2>Show Notes</h2>\r\n<h4>Important Links:</h4>\r\n<ul>\r\n	<li><a href=\"https://hackerpublicradio.org/eps.php?id=3431\">HPR Episode 3431: Living in the Terminal by BlacKernel</a></li>\r\n	<li><a href=\"https://brian-thompson.medium.com/setting-up-the-mutt-mail-client-with-protonmail-49c042486b3\">ProtonMail Bridge with Mutt by Medium</a></li>\r\n	<li><a href=\"https://github.com/brokkr/poca/\">poca by brokkr</a></li>\r\n	<li><a href=\"https://github.com/xgi/castero\">castero by xgi</a></li>\r\n	<li><a href=\"https://gpodder.github.io/docs/user-manual.html#command-line-interface\">gpodder CLI interface</a></li>\r\n	<li><a href=\"https://www.nethack.org/\">NetHack (The best game ever)</a></li>\r\n</ul>\r\n\r\n<h4>Wikipedia Articles:</h4>\r\n<ul>\r\n	<li>None</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<i>Contact Me</i>\r\n<ul>\r\n<li><b>Email: </b><a href=\"mailto:izzyleibowitz@pm.me\">izzyleibowitz at pm dot me</a></li>\r\n<li><b>Mastodon: </b><a href=\"https://nixnet.social/BlacKernel\">at blackernel at nixnet dot social</a></li>\r\n</ul>\r\n',396,0,1,'CC-BY-SA','cli, linux, terminal, applications, picks, tired',0,0,1),
(3459,'2021-11-04','Linux Inlaws S01E42: The Open Source Initiative',4396,'The Open Source Initiative','<p>In this episode our two OAPs host Deb Nicholson, the general manager of the\r\nOpen Source Initiative (OSI). Apart from riveting insights into open source\r\nlicensing we discuss the greater FLOSS ecosystem and Deb\'s views on why\r\nwearing shoes is important in certain contexts, open source standards, law\r\nsuits and the differences between US and Europe among other things.</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>OSI: <a href=\"https://opensource.org\" target=_blank>https://opensource.org</a></li>\r\n<li>OSI\'s FLOSS definition: <a href=\"https://opensource.org/osd\" target=_blank>https://opensource.org/osd</a></li>\r\n<li>Commons Clause license: <a href=\"https://commonsclause.com\" target=_blank>https://commonsclause.com</a></li>\r\n<!-- <li>TerminusDB license change: <a href=\"https://blog.terminusdb.com/we-love-gplv3-but-are-switching-license-to-apache-2-0-terminusdb\" target=_blank>https://blog.terminusdb.com/we-love-gplv3-but-are-switching-license-to-apache-2-0-terminusdb</a></li> -->\r\n<li>TerminusDB license change: <a href=\"https://terminusdb.com/blog/we-love-gplv3-but-are-switching-license-to-apache-2-0-terminusdb/\" target=_blank>https://terminusdb.com/blog/we-love-gplv3-but-are-switching-license-to-apache-2-0-terminusdb/</a></li>\r\n<li>Open source licenses: <a href=\"https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licences\" target=_blank>https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licences</a></li>\r\n<li>Open Core model: <a href=\"https://en.wikipedia.org/wiki/Open-core_model\" target=_blank>https://en.wikipedia.org/wiki/Open-core_model</a></li>\r\n<li>Software Freedom Conservancy: <a href=\"https://sfconservancy.org\" target=_blank>https://sfconservancy.org</a></li>\r\n<li>Bruce Perens: <a href=\"https://en.wikipedia.org/wiki/Bruce_Perens\" target=_blank>https://en.wikipedia.org/wiki/Bruce_Perens</a></li>\r\n<li>Loki TV series: <a href=\"https://en.wikipedia.org/wiki/Loki_(TV_series)\" target=_blank>https://en.wikipedia.org/wiki/Loki_(TV_series)</a></li>\r\n<li>Luca movie: <a href=\"https://www.imdb.com/title/tt12801262/?ref_=fn_al_tt_1\" target=_blank>https://www.imdb.com/title/tt12801262/?ref_=fn_al_tt_1</a></li>\r\n<li>The Internet is made of cats: <a href=\"https://www.youtube.com/watch?v=zi8VTeDHjcM\" target=_blank>https://www.youtube.com/watch?v=zi8VTeDHjcM</a></li>\r\n<li>Gnome and systemd: <a href=\"https://blogs.gnome.org/benzea/2019/10/01/gnome-3-34-is-now-managed-using-systemd\" target=_blank>https://blogs.gnome.org/benzea/2019/10/01/gnome-3-34-is-now-managed-using-systemd</a></li>\r\n<li>Apparmor Profile: <a href=\"https://packages.debian.org/bullseye/apparmor-profiles\" target=_blank>https://packages.debian.org/bullseye/apparmor-profiles</a></li>\r\n<li>Apparmor Profile Extra: <a href=\"https://packages.debian.org/bullseye/apparmor-profiles-extra\" target=_blank>https://packages.debian.org/bullseye/apparmor-profiles-extra</a></li>\r\n</ul>\r\n\r\n<p><small><em>Editor\'s Note, 2021-12-09</em>: TerminusDB link changed as requested</small></p>\r\n',384,111,1,'CC-BY-SA','OSI, RMS, Open Core, the Cat Internet, Luca, Loki, open source licensing',0,0,1),
(3462,'2021-11-09','Metal marbles.',618,'Introduction of new host, with reference to semantic playgrounds.','<h2 id=\"title-metal-marbles.\">Title: Metal marbles.</h2>\r\n<h3 id=\"summary-introduction-of-host-with-reference-to-semantic-playgrounds.\">Summary: Introduction of host, with reference to semantic playgrounds.</h3>\r\n<p>Link to the rust converter recipe, which I found to be cheaper, and more sprayable than buckets of gel or paint-like substances which you might find elsewhere:</p>\r\n<p><a href=\"https://www.canada.ca/en/conservation-institute/services/conservation-preservation-publications/canadian-conservation-institute-notes/tannic-acid-rusted-iron-artifacts.html\" class=\"uri\">https://www.canada.ca/en/conservation-institute/services/conservation-preservation-publications/canadian-conservation-institute-notes/tannic-acid-rusted-iron-artifacts.html</a></p>\r\n<p>In case that link moves, search for tannic acid rust converters, then choose your buffers.</p>\r\n<p>Email:<br />\r\nhpr@spoons.one</p>\r\n<p>Mastodon, though very very rarely:<br />\r\n<span class=\"citation\" data-cites=\"one_of_spoons\">@one_of_spoons</span><span class=\"citation\" data-cites=\"hispagatos.space\">@hispagatos.space</span></p>',398,0,1,'CC-BY-SA','host zen',0,0,1),
(3472,'2021-11-23','consuming an AQI API',386,'just because the sky is clear, doesn\'t mean the air is safe to breathe','<h2>AQI</h2>\r\n<p>Air Quality Index - measures particles in the air</p>\r\n<ul>\r\n<li>\r\n<p>Ozone </p>\r\n<ul>\r\n<li>good at high altitudes</li>\r\n<li>bad on the earth surface <a href=\"https://en.wikipedia.org/wiki/Ozone#Low_level_ozone\">https://en.wikipedia.org/wiki/Ozone#Low_level_ozone</a></li>\r\n</ul>\r\n</li>\r\n<li>\r\n<p>PM2.5 </p>\r\n<ul>\r\n<li>Particulate Matter, 2.5 micrometers <a href=\"https://en.wikipedia.org/wiki/Particulates#Size,_shape_and_solubility_matter\">https://en.wikipedia.org/wiki/Particulates#Size,_shape_and_solubility_matter</a></li>\r\n</ul>\r\n</li>\r\n</ul>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Particulates#Wildfire_smoke_risk\">https://en.wikipedia.org/wiki/Particulates#Wildfire_smoke_risk</a></p>\r\n<h2>Getting AQI data</h2>\r\n<p>Determining air quality in my area is as simple as visiting <a href=\"https://www.airnow.gov\">https://www.airnow.gov</a> and entering my zip code. Although my zip code covers 139.56 square miles, the result is accurate enough for my needs. When my zip code was submitted, the web page did not refresh. This means that the client interface made an API call to the backend server. </p>\r\n<p>It sure would be nice if the AQI status was emailed to my phone every hour, if the AQI was above a certain threshold.  </p>\r\n<p>In order to get the data from the API, it is necessary to emulate the request made by the client to the API. This can be accomplished using Firefox.</p>\r\n<ul>\r\n<li>open Firefox</li>\r\n<li>go to <a href=\"https://www.airnow.gov\">https://www.airnow.gov</a></li>\r\n<li>open the Firefox developer tools, either through the menu or with CTRL+SHIFT+i</li>\r\n<li>in the dev tools, select the Network tab</li>\r\n<li>enter the zip code in the form and submit</li>\r\n<li>watch the Network tab for a POST request to https://airnowgovapi.com/reportingarea/get</li>\r\n<li>click on the request in the network tab</li>\r\n</ul>\r\n<p>Another set of tabs are now available to display various bits of information regarding the request. From this data, it is possible to recreate the query. \r\nHowever, I took an even easier route, and right-clicked on the query in the Network tab, and selected <code>Copy > Copy as cURL</code> to get the request as a curl command complete with all necessary arguments prefilled.  Since I didn\'t want to write my entire AQI fetching script in bash, I copied the curl command into a text file and ported the request to Ruby. </p>\r\n<h2>The Finished Script</h2>\r\n<pre><code>#!/usr/bin/env ruby\r\nrequire \'net/http\'\r\nrequire \'uri\'\r\nrequire \'json\'\r\n\r\nuri =\"https://airnowgovapi.com/reportingarea/get\"\r\nparsed_uri = URI.parse(uri)\r\npayload={latitude:39.88,longitude:-120.76,stateCode:\'CA\',maxDistance:50}\r\nresponse = Net::HTTP.post_form(parsed_uri, payload)\r\ndata = JSON.parse(response.body)[0]\r\naqi=data[\"aqi\"].to_i\r\ncategory=data[\'category\']\r\nparameter=data[\'parameter\']\r\n\r\noutput= \"#{parameter}: #{aqi} - #{category}\"\r\nputs output\r\n\r\n\r\n/opt/textjezra \"#{output}\"` if aqi > 70\r\n</code></pre>\r\n',243,25,0,'CC-BY-SA','ruby, api, programming',0,0,1),
(3473,'2021-11-24','My journey into Amateur Radio',616,'Dave explains his journey into Amateur Radio, initial setup and successes.','<h2 id=\"opening\">Opening</h2>\r\n<p>Hello, my name is Dave, and welcome to another exciting episode of Hacker Public Radio. It\'s been a couple of years since my last episode, and I know that HPR is running low on shows. As I have had this one in planning for some time now, I though this was the right time to get it finished.</p>\r\n<h2 id=\"main\">Main</h2>\r\n<p>At the time of recording this, I\'ve been an <a href=\"https://en.m.wikipedia.org/wiki/Amateur_radio\">Amateur Radio</a> licence holder for 6 months. I took the notion of studying and applying for my Foundation licence (the first of three stages to a Full licence) when I read a blog post by Jon Spriggs G7VRI, back in March, entitled <a href=\"https://jon.sprig.gs/blog/post/2184\">Might Amateur Radio be a hobby for you?</a> I saw a <a href=\"https://jon.sprig.gs/blog/post/slideshow/amateur-radio\">presentation</a> by Jon at OggCamp in 2018 in Sheffield where he gave a whistle-stop tour of what Amateur Radio actually is, and how easy it is to get involved in it.</p>\r\n<p>As a bit of background, I was quite involved in the <a href=\"https://en.m.wikipedia.org/wiki/Citizens_band_radio\">CB Radio</a> scene back in the late 80s and early 90s - I was introduced to CB by my dad, whose handle was \"Screwball\", in the 70s... he had a CB rig in his car since as far back as I can remember. I picked up the hobby from him, by actually liberating him of his rig when he stopped using it. Unfortunately it got stolen from my car. C\'est la vie. Yes, my handle back then was \"The Love Bug\" - in fact, it was whilst looking for an alternative to \"Kool Kat\" as a handle that I first used the moniker \"The Love Bug\" - probably in the mid-80s - and it just stuck.</p>\r\n<p>So, after reading Jon\'s blog post, and doing some research into Amateur Radio myself, a whole bunch of things happened at the same time: I bought my first radio - a <a href=\"https://www.baofengradio.com/products/uv-5rtp\">Baofeng UV-5RTP</a> [<a href=\"https://www.amazon.co.uk/dp/B07PWGMT13\">Amazon UK</a>], I joined the <a href=\"https://rsgb.org/\">Radio Society of Great Britain</a> (not a requirement, but I would recommend it), signed up for Essex Ham\'s <a href=\"https://www.essexham.co.uk/train/online-exams/\">Foundation Training Course</a> (not a requirement, but strongly recommended as it\'s geared around the examination, and it\'s free!)</p>\r\n<p>The training took 3 weeks (in my own time), and I applied for my exam as soon as the training was complete. The exam was an hour long, under as close to exam conditions as an online exam would allow, and I was told by the online system that I\'d passed as soon as I submitted my answers. It then took a few days to get the confirmation of passing (and a certificate) in the post, which then allowed me to apply to <a href=\"https://en.m.wikipedia.org/wiki/Ofcom\">Ofcom</a> (the authority for the radio spectrum here in the UK) for my licence and callsign. I was able to choose the suffix of my callsign, and - as BUG was taken - I opted for TLB (for The Love Bug), and thus my callsign is - currently - M7TLB (Mike Seven Tango Lima Bravo). I say \"currently\" - I\'m not allowed to change my callsign, however the callsign is specific not only to me but also to the fact that I\'m a Foundation Licence holder. Therefore, when I go for my Intermediate and then Full licence, I\'ll get new callsigns for each one, each superseding the previous.</p>\r\n<p>Anyhoo, once I got my Foundation licence, I went out that Sunday to log some contacts, or <a href=\"https://en.m.wikipedia.org/wiki/Contact_(amateur_radio)\">QSO</a>s. So I parked up at a high point near to here, put a small aerial on the roof of the car (so that I didn\'t warm up my head when transmitting), and started calling <a href=\"https://en.m.wikipedia.org/wiki/CQ_(call)\">CQ</a> - essentially a way of saying \"I want to talk to somebody\" - \"Seek You\". As part of the licence conditions, you are only permitted to make contact with other identifiable and identified amateurs... general broadcasts to whomever might be listening are prohibited. <em>Except</em> when calling CQ to initiate that contact.</p>\r\n<p>So I\'d call out something akin to \"CQ, CQ, this station Mike Seven Tango Lima Bravo, Mike Seven Tango Lima Bravo Portable, calling CQ.\" The \"Portable\" indicates that I\'m not at my home station location. It\'s also a good indication that my transmission might be variable due to the portable nature of the station.</p>\r\n<p>I was transmitting using 8 watts of power, two watts fewer than the limit of my license, but significantly lower than the 400 watts that I could be using as a Full licence holder, so my hopes weren\'t high. My first contact was with a chap just outside Caistor, Lincolnshire... about 38 miles direct from where I was based. He was also using a portable station, but with a directional beam antenna, meaning that both transmission and reception from his end was able to focus on my direction. So yeah, impressed!</p>\r\n<p>My second contact was also a portable station, located at a high-point by the Woodhead Pass, in Penistone, about 18 miles direct from where I was. This contact was the gift that kept on giving, as there were two other portable stations at the same location, so I got three contacts in the log for that one.</p>\r\n<p>Things went quiet after that one, so after a further 5 calls out, I figured that was my lot. Still, I was happy with four QSOs on my first day!</p>\r\n<p>Later the same day, I went out for my daily constitutional, so I figured I\'d take the radio - with the standard short rubber-duck antenna, and an earpiece - with me. At least that way, I wouldn\'t look too silly, or a target to be fair. My intention was just to bounce around the frequencies and listen to conversations, rather than put out any CQs myself... I was in a residential area, so I didn\'t want to draw attention to myself.</p>\r\n<p>Whilst listening, I heard someone calling CQ and inviting respondents to a different frequency, so I followed and listened. There were a couple of contacts already there that I couldn\'t hear, so I waited for the initial contact to finish working the first. When he put out a call for whomever originally responded, I jumped in with my callsign, thinking that there was no way he would hear me. Consider that I was walking around town, in a reasonably built-up area, with probably the worst antenna I could have chosen for distance, and he wasn\'t exactly coming through strong. He responded to me directly, asking me to standby whilst he worked the other station that responded. Well, I was shocked to hear him say to the other contact that he was in East Yorkshire, about 33 miles from here! He was using a directional beam antenna which was pointing due west... whereas I am south-west of his location, so when you consider the other things I mentioned, the fact that he was also not pointing his antenna directly at me I was completely amazed that I was able to hold this relatively decent quality conversation with someone that far away. Well pleased was I.</p>\r\n<p>Cost-wise, I should warn that Amateur Radio <em>can</em> be an expensive hobby, but it absolutely doesn\'t have to be. At a bare minimum, to get me \"on the air\" I bought the Baofeng (£42.99), and paid for my Foundation examination (£27.50), so a little over £70 overall. I actually bought a number of accessories for the radio, and joined the RSGB, but these are in no way required expenses. The standard radio on its own is more than sufficient to gain some decent contacts, as I hope I\'ve proven with the success from that Sunday.</p>\r\n<p>Since then, I have bought an HF (or High Frequency) radio from India, it\'s a low-power model (or QRP) which is unlikely to get very far, but there are transmission modes that I can use that are specifically intended for low-power operation. My next big thing is to get an antenna up in the back garden along with a decent tuner so that I can actually use that radio!!</p>\r\n<p>By the time this episode goes out, I will have started an intensive course with <a href=\"https://oarc.uk/\">OARC</a> (Online Amateur Radio Community) which is a UK-based club - a more fantastic bunch of people you are not likely to find - so I\'ll be able to change my callsign to one beginning 2E0 or 2E1, and be able to use up to 50W to transmit, even though I don\'t have any equipment capable to transmitting 50W - yet!</p>\r\n<p>I point you to the excellent <a href=\"https://hackerpublicradio.org/series/0043.html\">Ham radio, QSK</a> series on HPR where a number of correspondents have recorded shows about Amateur Radio that you may find interesting. I\'m putting this episode into the same series.</p>\r\n<h2 id=\"questions\">Questions</h2>\r\n<p>Are you an Amateur Radio operator? Let me know.</p>\r\n<h2 id=\"call-to-action\">Call to action</h2>\r\n<p>Drop me an email to <a href=\"mailto:hpr@thelovebug.org\">hpr@thelovebug.org</a>, I\'m on Facebook and Twitter as thelovebug, or leave a comment on this episode, or record your own episode in response.</p>\r\n<p>At the time of recording this, HPR is low on shows, if you have any shows in progress, or something burning in your mind, get it recorded. Find out more over at hackerpublicradio.org.</p>\r\n<h2 id=\"close\">Close</h2>\r\n<p>So, that\'s it for today... thanks for listening. <br />\r\nWherever you are in the world, stay safe. <br />\r\nCome back again tomorrow for another exciting episode on Hacker Public Radio.</p>\r\n<p>73 de M7TLB</p>\r\n',314,43,0,'CC-BY-SA','amateur radio, baofeng, rsgb, qso, cq, ham, ham radio, hf',0,0,1),
(3476,'2021-11-29','My mutt email setup',765,'My humble mutt email setup','\r\n<ol type=\"1\">\r\n<li>Get app password and enter it in a file call pass</li>\r\n</ol>\r\n<pre><code>    set my_gpass= &quot;MyAppPassword&quot;</code></pre>\r\n<ol start=\"2\" type=\"1\">\r\n<li><p>Encrypt pass file with <code>\'gpg -e pass\'</code></p></li>\r\n<li><p>Shred pass file with \'shred -uv pass\', which uses verbose mode</p></li>\r\n</ol>\r\n<pre><code>    shred - overwrite a file to hide its contents, and optionally delete it\r\n      -u deallocate and remove file after overwriting\r\n      -v, --verbose, show progress</code></pre>\r\n<ol start=\"4\" type=\"1\">\r\n<li><p>Use gpg encrypted key to open Gmail</p>\r\n<ul>\r\n<li>in .muttrc <code> source \"gpg -d ~/.mutt/pass.gpg |\" </code></li>\r\n</ul></li>\r\n<li><p>Source colors file: Custom color scheme</p></li>\r\n</ol>\r\n<pre><code>    ## Custom - Shows a gray line on tagged emails\r\n    color index yellow brightblack &quot;~T ~N | ~T&quot;</code></pre>\r\n<p><em>Tagged emails</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3476/hpr3476/tagged_emails.png\" alt=\"Tagged emails\" /></p>\r\n<ol start=\"6\" type=\"1\">\r\n<li>Source hooks file: Redirect default save path for email sorting</li>\r\n</ol>\r\n<pre><code>      ## Newsletters - Technology ##\r\n      save-hook &#39;~f lists.linuxjournal.com&#39; =&#39;Linux&#39;\r\n      save-hook &#39;~f arch-dev-public&#39;  =Newsletters\r\n      save-hook &#39;~f noreply@mmorpg.com&#39; =Newsletters\r\n      save-hook &#39;~f ocw@mit.edu&#39;|&#39;~b Opencourseware&#39; =Newsletters\r\n      save-hook &#39;~s Linux&#39;|&#39;~s Foundation&#39; =&#39;Newsletters&#39;\r\n      save-hook &#39;~f weekly@raspberrypi.org&#39; =Newsletters\r\n      save-hook &#39;~f hackspace@raspberrypi.org&#39; =Newsletters\r\n      save-hook &#39;~f @pragmaticbookshelf.com&#39; =Newsletters\r\n      save-hook &#39;~f comixology@e.comixology.com&#39; =Newsletters\r\n      save-hook &#39;~f mrgroove@groovypost.com&#39; =Newsletters\r\n      save-hook &#39;~f oreilly@post.oreilly.com&#39; =Newsletters\r\n      save-hook &#39;~f mark ~s arduino&#39; =Bookmarks/Arduino\r\n      save-hook &#39;~f smith@torproject.org&#39; =Newsletters/TorProject\r\n      save-hook &#39;~f info@torproject.org&#39; =Newsletters/TorProject\r\n      save-hook &#39;~f editor@eff.org&#39; =Newsletters.EFFdotOrg\r\n      save-hook &#39;~f contact@diyodemag.com&#39; =Newsletters/DIYODE-Magazine\r\n      save-hook &#39;~f weekly-update@allaboutcircuits.com&#39; =Newsletters/Circuits\r\n\r\n      ## Recipes ##\r\n      save-hook &#39;~f dora ~s Recipe | ~s Recipe | ~B recipe | ~B casserole | ~B bake | ~B &quot;omaha steaks&quot; &#39; =&#39;dabrat1972/Recipes&#39;</code></pre>\r\n<ol start=\"7\" type=\"1\">\r\n<li>Source aliases file: Frequently used contacts</li>\r\n</ol>\r\n<pre><code>      alias tags tags@hackerpublicradio.org\r\n      alias Dave_Morriss Dave Morriss &lt;perloid@autistici.org&gt;</code></pre>\r\n<ul>\r\n<li>HTML email\r\n<ul>\r\n<li>Install lynx</li>\r\n</ul></li>\r\n<li>Open URL\'s\r\n<ul>\r\n<li>Install urlscan</li>\r\n<li>Capital \'U\' open URL dialog</li>\r\n</ul></li>\r\n<li>Open pictures\r\n<ul>\r\n<li>Install feh</li>\r\n</ul></li>\r\n<li>PDF reader\r\n<ul>\r\n<li>Zathura\r\n<ul>\r\n<li><a href=\"https://bbs.archlinux.org/viewtopic.php?id=220572\" class=\"uri\">https://bbs.archlinux.org/viewtopic.php?id=220572</a></li>\r\n<li>Install zathura-pdf-mupdf and zathura-pdf-poppler\r\n<ul>\r\n<li>Just needed zathura-pdf-mupdf, zathura-pdf-poppler was included with zathura.</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>mailcap - metamail capabilities file\r\n\r\nDESCRIPTION\r\n         The mailcap file is read by the metamail program to determine how to display non-text at the local site.</code></pre>\r\n<pre><code>  image/*; feh %s; test=test -n &quot;$DISPLAY&quot;;\r\n  text/html; lynx -nonumbers -dump %s; copiousoutput; nametemplate=%s.html\r\n  application/pdf; zathura /dev/stdin</code></pre>\r\n<h2 id=\"more-reading\">More reading</h2>\r\n<ul>\r\n<li>Regex question\r\n<ul>\r\n<li><a href=\"https://www.techrepublic.com/article/10-helpful-tips-for-mutt-e-mail-client-power-users\" class=\"uri\">https://www.techrepublic.com/article/10-helpful-tips-for-mutt-e-mail-client-power-users</a></li>\r\n</ul></li>\r\n<li>Colors\r\n<ul>\r\n<li><a href=\"https://www.rdrop.com/docs/mutt/manual29.html\" class=\"uri\">https://www.rdrop.com/docs/mutt/manual29.html</a></li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"contact-me\">Contact me:</h2>\r\n<p>Email: ricemark20.nospam@nospam.gmail.com<br />\r\nMastodon: <a href=\"https://mastodon.sdf.org/@archer72\" class=\"uri\">https://mastodon.sdf.org/@archer72</a><br />\r\nMatrix: <span class=\"citation\" data-cites=\"archer72:matrix.org\">@archer72:matrix.org</span><br />\r\nHPR Matrix room: <a href=\"https://app.element.io/#/room/#hpr:matrix.org\" class=\"uri\">https://app.element.io/#/room/#hpr:matrix.org</a><br />\r\nOggcastplanet Matrix room: <a href=\"https://app.element.io/#/room/!oIafedhXUbEidMzeTt:libera.chat\" class=\"uri\">https://app.element.io/#/room/!oIafedhXUbEidMzeTt:libera.chat</a></p>\r\n<h2 id=\"links\">Links</h2>\r\nExample files:\r\n<ul>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3476/hpr3476/colors\">colors</a>\r\n</li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3476/hpr3476/gmail\">gmail</a>\r\n</li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3476/hpr3476/mailcap\">mailcap</a>\r\n</li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3476/hpr3476/muttrc\">muttrc</a>\r\n</li>\r\n</ul>\r\n',318,11,0,'CC-BY-SA','mutt,email, gpg,accessibility ',0,0,1),
(3485,'2021-12-10','50 years since the 1st Edition of Unix was published',747,'Ken (Fallon not Thompson) checks his unix like computer to see how many commands still exist.','<h1 id=\"top-ten-of-the-first-unix-commands\">top ten of the first unix commands</h1>\r\n<p>50 years after the 1st Edition of Unix was published, Ken (Fallon not Thompson) checks his unix like computer to see how many commands still exist (38) and how many are not installed by default (23).</p>\r\n<p>Thanks to <a href=\"https://twitter.com/bsdimp\">@bsdimp</a> on twitter for the post. Also to <a href=\"https://fosstodon.org/@atoponce/107219163009353638\">@atoponce@fosstodon.org</a> and <a href=\"https://mastodon.social/@obra/107217491430371868\">@obra@mastodon.social</a> for the tip.</p>\r\n<h3 id=\"packages-i-dont-have-installed\">Packages I don\'t have installed</h3>\r\n<p>Many are available under another name but I have not installed them. Seven of the of the twenty two relates to tapes.</p>\r\n<pre>\r\nB     -- language\r\nbas   -- basic\r\nbcd   -- binary coded decimal conversion\r\nboot  -- reboot system\r\nchdir -- change working directory\r\ncheck -- file system consistency check\r\ndb    -- debug\r\ndbppt -- dump binary paper tape\r\ndsw   -- delete interactively\r\ndtf   -- DECtape format\r\nfor   -- fortran\r\nform  -- form letter generator\r\nhup   -- hang up typewriter\r\nlbppt -- load binary paper tapes\r\nrew   -- rewind tape\r\nrkd   -- dump RK disk to tape\r\nrkf   -- format RKO3 disk pack\r\nrkl   -- reload RK disk from tape\r\nroff  -- format text\r\nsdate -- set date and time\r\ntap   -- manipulate DECtape\r\ntm    -- provide time information\r\nun    -- undefined symbols\r\n</pre>\r\n\r\n<h3 id=\"top-10-most-popular-50-year-old-commands-\">Top 10 most popular 50 year old commands !</h3>\r\n<pre>\r\n     1  10108 ls\r\n     2   2847 find\r\n     3   1985 rm\r\n     4   1482 mv\r\n     5    887 cat\r\n     6    649 for\r\n     7    544 mkdir\r\n     8    341 cp\r\n     9    280 rmdir\r\n    10    202 df\r\n</pre>\r\n',30,0,1,'CC-BY-SA','unix, unix commands',0,0,1),
(3474,'2021-11-25','H P R and Audio Fun',671,'Comments on show and audio processing ','<p><a href=\"https://matrix.to/#/#HPR:matrix.org\" class=\"uri\">https://matrix.to/#/#HPR:matrix.org</a></p>\r\n<ul>\r\n<li><p>media &gt; text &gt; keywords<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Bash/Stream_to_Text_with_Keywords.sh\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Bash/Stream_to_Text_with_Keywords.sh</a></p></li>\r\n<li><p>NICE !<br />\r\n<a href=\"https://hackerpublicradio.org/rss-future.php\" class=\"uri\">https://hackerpublicradio.org/rss-future.php</a></p></li>\r\n<li><p>broken ?<br />\r\n<a href=\"https://gitlab.anhonesthost.com/HPR/HPR_Public_Code/\" class=\"uri\">https://gitlab.anhonesthost.com/HPR/HPR_Public_Code/</a> ( broken ? )</p></li>\r\n<li><p>Donate!<br />\r\n<a href=\"https://secure.anhonesthost.com/store/hpr-hosting-cost-donations\" class=\"uri\">https://secure.anhonesthost.com/store/hpr-hosting-cost-donations</a></p></li>\r\n<li><p>android compressor / limiter<br />\r\n<a href=\"https://play.google.com/store/apps/details?id=io.github.kushiheim.glycox\" class=\"uri\">https://play.google.com/store/apps/details?id=io.github.kushiheim.glycox</a></p></li>\r\n<li><p>notes on Linux Audio<br />\r\n<a href=\"https://docs.google.com/document/d/1E1xAwWpq-C4vEh8LCRw7MD7jnaclX9Faf2L3dZWiqQY/edit#heading=h.wp1n4j8ybidv\" class=\"uri\">https://docs.google.com/document/d/1E1xAwWpq-C4vEh8LCRw7MD7jnaclX9Faf2L3dZWiqQY/edit#heading=h.wp1n4j8ybidv</a></p></li>\r\n<li><p>possible automated silence detection to be used for noise profile !!!! ( let\'s talk about it ! )<br />\r\n<a href=\"https://stackoverflow.com/questions/45526996/split-audio-files-using-silence-detection/46001755\" class=\"uri\">https://stackoverflow.com/questions/45526996/split-audio-files-using-silence-detection/46001755</a></p></li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','audio',0,0,1),
(3491,'2021-12-20','My Github and flickmetrix',1553,'Bear with me as I go though my github over the past year some real gems in here','<ul>\r\n<li><p>main github (other stuff one there like SC_BADGER etc)<br />\r\n<a href=\"https://github.com/freeload101\" class=\"uri\">https://github.com/freeload101</a></p></li>\r\n<li><p>flickmetrix script<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/7279338b610c914812169e107cbbea45e4ca5254/fu.txt#L102\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/7279338b610c914812169e107cbbea45e4ca5254/fu.txt#L102</a></p></li>\r\n<li><p>High_Contrast_Toggle_AutoHotkey.ahk<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/tree/master/AutoHotkey\" class=\"uri\">https://github.com/freeload101/SCRIPTS/tree/master/AutoHotkey</a></p></li>\r\n<li><p>smart nmap<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Bash/NMAP_SMART_FAST.sh\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Bash/NMAP_SMART_FAST.sh</a></p></li>\r\n<li><p>clean up script for media cool find regex here<br />\r\n<a href=\"https://raw.githubusercontent.com/freeload101/SCRIPTS/master/Bash/RMEMPTY.sh\" class=\"uri\">https://raw.githubusercontent.com/freeload101/SCRIPTS/master/Bash/RMEMPTY.sh</a></p></li>\r\n<li><p>good movies page<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Bash/flickmetrix_good_movies.sh\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Bash/flickmetrix_good_movies.sh</a></p></li>\r\n<li><p>mobile mass SSL depinning script<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/JS/universal-android-ssl-pinning-bypass-with-frida.js\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/JS/universal-android-ssl-pinning-bypass-with-frida.js</a></p></li>\r\n<li><p>android debloat and dump app names/ with file names<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Android_Debloat_N_Dump.bat\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Android_Debloat_N_Dump.bat</a></p></li>\r\n<li><p>help debug CPU hogging apps in android logs<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Android_logcat_cat.sh\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Android_logcat_cat.sh</a></p></li>\r\n<li><p>script that kills all processes and then cleans temp files etc<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/BleachBit_Quickkill.bat\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/BleachBit_Quickkill.bat</a></p></li>\r\n<li><p>Cool script that debloats,hardends,installs cygwin and chocolatey apps<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Chocolatey_Cygwin.cmd\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Chocolatey_Cygwin.cmd</a></p></li>\r\n<li><p>dump windows system info ,dxdiag info and battery info<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/DUMP_WINDOWS_INFO.bat\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/DUMP_WINDOWS_INFO.bat</a></p></li>\r\n<li><p>youtube downloader (now yt-dlp) script to mass download multi threaed media all at the same time.<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Youtube-dl-ffmpeg-aria2c-updater-downloader.bat\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/Windows_Batch/Youtube-dl-ffmpeg-aria2c-updater-downloader.bat</a></p></li>\r\n<li><p>bunch of \'old\' one liners etc<br />\r\n<a href=\"https://github.com/freeload101/SCRIPTS/blob/master/fu.txt\" class=\"uri\">https://github.com/freeload101/SCRIPTS/blob/master/fu.txt</a></p></li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','scripts,hacking,github,windows,linux',0,0,1),
(3467,'2021-11-16','Protonmail in the terminal',2262,'One way of doing Protonmail in the terminal.','<p>I use email in the terminal with a combination of:</p>\r\n<dl>\r\n<dt>protonmail-bridge-cli</dt>\r\n<dd>local IMAP server to fetch Protonmail mails\r\n</dd>\r\n<dt>tmux</dt>\r\n<dd>to run protonmail-bridge in\r\n</dd>\r\n<dt>isync (or offlineimap etc)</dt>\r\n<dd>to sync IMAP with maildirs\r\n</dd>\r\n<dt>notmuch</dt>\r\n<dd>to tag and search mails\r\n</dd>\r\n<dt>afew</dt>\r\n<dd>to move mails found by certain notmuch queries in certain maildirs\r\n</dd>\r\n<dt>alot</dt>\r\n<dd>to read, compose, search and tag mails\r\n</dd>\r\n<dt>msmtp</dt>\r\n<dd>to send mails\r\n</dd>\r\n<dt>w3m (or lynx etc)</dt>\r\n<dd>to read HTML mails in the terminal\r\n</dd>\r\n<dt>rsync</dt>\r\n<dd>to copy archived mails\r\n</dd>\r\n<dt>a shell function and an alias</dt>\r\n<dd>to make it all less ridiculous\r\n</dd>\r\n</dl>\r\n<p>To most, Thunderbird will be suitable, the target audience here is unreasonable people.</p>\r\n<h3>Complete Show Notes</h3>\r\n<p>\r\nFollow this link for the complete show notes: <a href=\"https://hackerpublicradio.org/eps/hpr3467/\">https://hackerpublicradio.org/eps/hpr3467/</a>\r\n</p>',399,0,1,'CC-BY-SA','email,protonmail,alot,afew,notmuch,mbsync',0,0,1),
(3475,'2021-11-26','How I Watch Everything Using Open Source Software',878,'Using Libreelec, Kodi, a tuner, and a Raspberry Pi to create a great media center','<p>I\'ve been using this setup or one similar for several years now and it has worked out very well.</p>\r\n<p>Hardware:</p>\r\n<ul>\r\n<li>Clearstream TV antenna</li>\r\n<li>Coax cable</li>\r\n<li>Hauppage WinTV-dual HD USB Dual Tuner</li>\r\n<li>Raspberry Pi 4 4GB</li>\r\n<li>1 TB SSD connected via USB 3</li>\r\n<li>HDMI cable</li>\r\n</ul>\r\n<p>Software:</p>\r\n<ul>\r\n<li>Libreelec OS</li>\r\n<li>Kodi</li>\r\n<li>TVheadend server</li>\r\n<li>TVheadend client</li>\r\n<li>Debrid addon media streamer</li>\r\n</ul>\r\n<p>Any questions or comments you can reach me at minnix at minnix dot dev</p>\r\n',375,0,0,'CC-BY-SA','libreelec,kodi,raspberry pi,tvheadend',0,0,1),
(3477,'2021-11-30','Picking a Forth',1313,'Available forths, old and new','<ul>\r\n<li><p>arduino as a sketch download pdf at <a href=\"https://wiki.forth-ev.de\">wiki.forth-ev.de</a>, then cut and paste $</p></li>\r\n<li><p>the arduino controlled by eforth, search for this ter$</p></li>\r\n<li><p>amforth<br />\r\n<a href=\"https://amforth.sourceforge.net\">amforth.sourceforge.net</a></p></li>\r\n<li><p>flashforth<br />\r\n<a href=\"https://flashforth.com\">flashforth.com</a></p></li>\r\n<li><p>resources<br />\r\n<a href=\"https://arduino-forth.com\">arduino-forth.com</a><br />\r\n<a href=\"https://forth.org\">forth.org</a><br />\r\n<a href=\"https://forth.org/eforth.html\">forth.org/eforth.html</a><br />\r\n</p></li>\r\n</ul>\r\n',326,0,0,'CC-BY-SA','forth, arduino, history',0,0,1),
(3478,'2021-12-01','Audio Wiring Hack on a Classroom Podium',1093,'Listen in while I hack the wiring on our classroom podium for custom audio routing.','<p>In this episode I take you along for the ride as I hack the wiring in a classroom podium so that I can show musical scores on the Elmo document camera while playing audio through the podium\'s laptop VGA audio source. Without this hack, the students could either see the score, or they could hear the music, but not both. This simple hack installing two jumper wires allows them to see the score and hear the music at the same time, which is important in my classes. I could already do this by using a PDF music score on my laptop while playing the audio file, but this allows me to use a paper score and audio from my laptop at once. It essentially acts as an audio splitter, sending the audio signal to two channels at once.</p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li>Music from Kimiko Ishizaka\'s <em>The Open Well-Tempered Clavier</em>: <a href=\"https://www.welltemperedclavier.org/\">https://www.welltemperedclavier.org/</a>, used by permission of its <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">CC0 1.0 Universal (CC0 1.0) Public Domain Dedication license</a>.</li>\r\n	<li><a href=\"https://www.flickr.com/gp/137675441@N05/0K3EVq\">Pictures of the <em>Podium Audio Wiring Hack</em></a></li>\r\n</ul>\r\n\r\n',238,0,0,'CC-BY-SA','audio, wiring, higher education',0,0,1),
(3484,'2021-12-09','My vim setup with GnuPG',501,'My vim setup with the GnuPG vim plugin','<h2 id=\"using-the-gnupg-vim-plugin-to-edit-encrypted-files.\">Using the GnuPG vim plugin to edit encrypted files.</h2>\r\n<ul>\r\n<li><p>See show hpr3476 My mutt email setup<br />\r\n<a href=\"https://www.hackerpublicradio.org/eps.php?id=3476\" class=\"uri\">https://www.hackerpublicradio.org/eps.php?id=3476</a></p></li>\r\n<li><p>GnuPG Vim Plugin on vim.org<br />\r\n<a href=\"https://www.vim.org/scripts/script.php?script_id=3645\" class=\"uri\">https://www.vim.org/scripts/script.php?script_id=3645</a></p></li>\r\n<li><p>GnuPG Vim Plugin on Github<br />\r\n<a href=\"https://github.com/vim-scripts/gnupg.vim\" class=\"uri\">https://github.com/vim-scripts/gnupg.vim</a></p></li>\r\n</ul>\r\n<p><em>Line to directly clone from github</em></p>\r\n<pre><code>  git clone https://github.com/vim-scripts/gnupg.vim</code></pre>\r\n<p>From <code>man 1 gpg-agent</code>:</p>\r\n<blockquote>\r\n<p>You should always add the following lines to your <code>.bashrc</code> or whatever initialization file is used for all shell invocations:</p>\r\n<pre><code>GPG_TTY=`tty`\r\nexport GPG_TTY</code></pre>\r\n<p>It is important that this environment variable always reflects the output of the tty command.</p>\r\n</blockquote>\r\n<p><em>.bashrc snippet</em></p>\r\n<pre><code>  ## GPG Vim\r\n  GPG_TTY=`tty`\r\n  export GPG_TTY\r\n  export EDITOR=vim</code></pre>\r\n<p><em>GnuPG folder structure</em></p>\r\n<pre><code>  [mark@fedora-lt ~]$ tree .vim\r\n  .vim\r\n  &#x251C;&#x2500;&#x2500; plugin\r\n  &#x2502;   &#x2514;&#x2500;&#x2500; vim-gnupg\r\n  &#x2502;       &#x251C;&#x2500;&#x2500; autoload\r\n  &#x2502;       &#x2502;   &#x2514;&#x2500;&#x2500; gnupg.vim\r\n  &#x2502;       &#x251C;&#x2500;&#x2500; doc\r\n  &#x2502;       &#x2502;   &#x2514;&#x2500;&#x2500; gnupg.txt\r\n  &#x2502;       &#x251C;&#x2500;&#x2500; plugin\r\n  &#x2502;       &#x2502;   &#x2514;&#x2500;&#x2500; gnupg.vim\r\n  &#x2502;       &#x2514;&#x2500;&#x2500; README.md\r\n  &#x2514;&#x2500;&#x2500; spell\r\n      &#x251C;&#x2500;&#x2500; en.utf-8.add\r\n      &#x2514;&#x2500;&#x2500; en.utf-8.add.spl</code></pre>\r\n<p><em>vimrc</em></p>\r\n<pre><code>set tabstop=2 softtabstop=0 expandtab shiftwidth=2 smarttab textwidth=80\r\nsyntax on\r\nautocmd BufRead,BufNewFile   *.log set filetype=logtalk\r\nset spell spelllang=en_us</code></pre>\r\n<p>Generate gpg full key<br />\r\n<code>gpg --full-generate-key</code></p>\r\n<p>or just a regular one, with less options<br />\r\n<code>gpg --gen-key</code></p>\r\n<p>Encrypt the file in question, with -r as the recipient<br />\r\nIn this case, I used part of the comment as the recipient</p>\r\n<p><em>Picture 1</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3484/hpr3484/picture001.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3484/hpr3484/picture001_thumbnail.png\" alt=\"Picture 1\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p>This is more like it.<br />\r\n<code>gpg -e -r test thisIsMyTestFile.txt</code></p>\r\n<p>Now test edit the file<br />\r\n<code>vim thisIsMyTestFile.txt.gpg</code></p>\r\n<p><em>Picture 2</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3484/hpr3484/picture002.png\" alt=\"Picture 2\" /></p>\r\n<p>It is a good idea to shred the original text file</p>\r\n<pre><code>      shred - overwrite a file to hide its contents, and optionally delete it\r\n      -u deallocate and remove file after overwriting\r\n      -v, --verbose, show progress</code></pre>\r\n<p>Example: <code>shred -u -v foo.txt</code></p>\r\n',318,11,0,'CC-BY-SA','vim, plugin, lightweight',0,0,1),
(3486,'2021-12-13','Unleash the true potential of GNU nano text editor',516,'Turn GNU nano text editor into a fancy, good looking & powerful editor','<p>Text editors are highly subjective and highly opinionated commodities. Everyone is aware of infamous rivalry between users of Emacs and Vi/Vim. Every single text editor has its own strengths and weaknesses. At the end of the day it\'s the question of your personal preferences and muscle memory when it comes to default key-bindings. Both Emacs and Vim have a learning curve. Steepness of that curve depends on the person\'s background and interests. Hey, but today I\'m not here to talk about Emacs and Vim. I\'m here to talk about a simple, easy to use and almost ever present text editor called <code>GNU nano</code>. So what exactly is this <code>nano</code> text editor? Well, according to documentation available on <code>GNU nano</code>\'s <a href=\"https://nano-editor.org/\">website</a>,</p>\r\n<blockquote>\r\n<p>GNU nano was designed to be a free replacement for the Pico text editor, part of the Pine email suite from The University of Washington. It aimed to \"emulate Pico as closely as is reasonable and then include extra functionality\".</p>\r\n</blockquote>\r\n<p>Pico and Pine email suites are still around so what was the need to create <code>nano</code> in the first place? The answer is license. Pico and Pine email suites nowadays are available under Apache-2.0 license but that always wasn\'t the case and this ambiguity in the original licensing terms of the Pico editor led to the creation of <code>nano</code>. It was first created in 1999 with the name TIP (an acronym for TIP Isn\'t Pico), by Chris Allegretta. The name was changed to <code>nano</code> on January 10th, 2000 to avoid a naming conflict with the existing Unix utility tip. The name comes from the system of SI prefixes, in which <code>nano</code> is 1000 times larger than pico. In February 2001, <code>nano</code> became a part of the GNU Project. BTW if you want to know more about SI prefixes, I\'d highly recommend you to listen to <a href=\"https://hackerpublicradio.org/eps.php?id=3454\">HPR episode 3453 - Engineering notation</a> by Ken Fallon.</p>\r\n<p><code>nano</code> is really small in footprint and is relatively easy to use compared to Emacs and Vim and perhaps this is the reason why you\'d invariably find it already installed on almost all GNU/Linux distributions. If you have ever used <code>nano</code> before you might have noticed that it looks kinda boring; there are no line-numbers nor there is any syntax highlighting and spell-checking also seems absent. But this is not true. <code>nano</code> has all of these features and even some more like regex searches, indentation, multiple buffers, available at its disposal. Then why does it come across as a plain Jane? The short answer is, I honestly don\'t know! For some unknown and obscure reasons many of <code>nano</code>\'s cool features are disabled by default. This results in <code>nano</code> coming across as a plain Jane little text editor that is uncool. And as I mentioned earlier, that is not true. But worry not! It is so darn easy to unleash the true potential of <code>nano</code> and make it shine. Are you ready? Great! Let\'s do it together then!</p>\r\n<p>First thing we need to to do is create a file with the name <code>.nanorc</code> in the <code>$HOME</code> directory. Open your terminal emulator and run,</p>\r\n<pre class=\"text\"><code>touch $HOME/.nanorc\r\n</code></pre>\r\n<p>We\'d also need to create a directory called <code>Nano_Backups</code> in our <code>Documents</code> directory. To do so run the following command,</p>\r\n<pre class=\"text\"><code>mkdir -p $HOME/Documents/Nano_Backups\r\n</code></pre>\r\n<p>Next open that <code>.nanorc</code> file and simply paste the following content in it,</p>\r\n<pre class=\"text\"><code>set atblanks\r\nset autoindent\r\nset backup\r\nset backupdir &quot;/home/USERNAME/Documents/Nano_Backups&quot;\r\nset boldtext\r\nset constantshow\r\nset cutfromcursor\r\nset indicator\r\nset linenumbers\r\nset magic\r\nset minibar\r\nset mouse\r\nset showcursor\r\nset softwrap\r\nset speller &quot;aspell -x -c&quot;\r\nset trimblanks\r\nset whitespace &quot;&#187;&middot;&quot;\r\nset zap\r\nset multibuffer\r\n\r\nset titlecolor bold,lightwhite,blue\r\nset promptcolor lightwhite,lightblack\r\nset statuscolor bold,lightwhite,green\r\nset errorcolor bold,lightwhite,red\r\nset spotlightcolor black,lime\r\nset selectedcolor lightwhite,magenta\r\nset stripecolor ,yellow\r\nset scrollercolor cyan\r\nset numbercolor cyan\r\nset keycolor cyan\r\nset functioncolor green\r\n\r\ninclude &quot;/usr/share/nano/*.nanorc&quot;\r\n\r\nbind ^Q exit all\r\nbind ^S savefile main\r\nbind ^W writeout main\r\nbind ^O insert main\r\nbind ^H help all\r\nbind ^H exit help\r\nbind ^F whereis all\r\nbind ^G findnext all\r\nbind ^B wherewas all\r\nbind ^D findprevious all\r\nbind ^R replace main\r\nbind ^X cut main\r\nbind ^C copy main\r\nbind ^V paste all\r\nbind ^P location main\r\nbind ^E execute main\r\nbind ^A mark main\r\nunbind ^K main\r\nunbind ^U all\r\nunbind ^N main\r\nunbind ^Y all\r\nunbind M-J main\r\nunbind M-T main\r\nbind ^T gotoline main\r\nbind ^T gotodir browser\r\nbind ^T cutrestoffile execute\r\nbind ^L linter execute\r\nbind M-U undo main\r\nbind M-R redo main\r\nbind ^Z undo main\r\nbind ^Y redo main\r\n</code></pre>\r\n<p>You\'ll have to replace <code>USERNAME</code> in the line number four, <code>set backupdir \"/home/USERNAME/Documents/Nano_Backups/\"</code> with your actual <code>username</code> and then save this file.</p>\r\n<p>Wouldn\'t it be nice if the colors in <code>nano</code> were different for a normal user and a root user? Yes, for sure. To do so create an empty <code>.nanorc</code> file in the root\'s directory,</p>\r\n<pre class=\"text\"><code>sudo touch /root/.nanorc\r\n</code></pre>\r\n<p>Next create the backup directory <code>Nano_Backups</code> in root\'s <code>Documents</code> directory. To do so run the following command,</p>\r\n<pre class=\"text\"><code>sudo mkdir -p /root/Documents/Nano_Backups\r\n</code></pre>\r\n<p>Open that <code>/root/.nanorc</code>file and paste this content in it and save the changes,</p>\r\n<pre class=\"text\"><code>set atblanks\r\nset autoindent\r\nset backup\r\nset backupdir &quot;/root/Documents/Nano_Backups/&quot;\r\nset boldtext\r\nset constantshow\r\nset cutfromcursor\r\nset indicator\r\nset linenumbers\r\nset magic\r\nset minibar\r\nset mouse\r\nset showcursor\r\nset softwrap\r\nset speller &quot;aspell -x -c&quot;\r\nset trimblanks\r\nset whitespace &quot;&#187;&middot;&quot;\r\nset zap\r\nset multibuffer\r\n\r\nset titlecolor bold,lightwhite,magenta\r\nset promptcolor black,yellow\r\nset statuscolor bold,lightwhite,magenta\r\nset errorcolor bold,lightwhite,red\r\nset spotlightcolor black,orange\r\nset selectedcolor lightwhite,cyan\r\nset stripecolor ,yellow\r\nset scrollercolor magenta\r\nset numbercolor magenta\r\nset keycolor lightmagenta\r\nset functioncolor magenta\r\n\r\ninclude &quot;/usr/share/nano/*.nanorc&quot;\r\n\r\nbind ^Q exit all\r\nbind ^S savefile main\r\nbind ^W writeout main\r\nbind ^O insert main\r\nbind ^H help all\r\nbind ^H exit help\r\nbind ^F whereis all\r\nbind ^G findnext all\r\nbind ^B wherewas all\r\nbind ^D findprevious all\r\nbind ^R replace main\r\nbind ^X cut main\r\nbind ^C copy main\r\nbind ^V paste all\r\nbind ^P location main\r\nbind ^E execute main\r\nbind ^A mark main\r\nunbind ^K main\r\nunbind ^U all\r\nunbind ^N main\r\nunbind ^Y all\r\nunbind M-J main\r\nunbind M-T main\r\nbind ^T gotoline main\r\nbind ^T gotodir browser\r\nbind ^T cutrestoffile execute\r\nbind ^L linter execute\r\nbind M-U undo main\r\nbind M-R redo main\r\nbind ^Z undo main\r\nbind ^Y redo main\r\n</code></pre>\r\n<p>What we have just done is, we have enabled some useful features of <code>nano</code> and changed the default keybindings to the more familiar ones like <code>Ctrl+C</code> for copying, <code>Ctrl+X</code> for cutting, <code>Ctrl+V</code> for pasting and a bunch of other key combinations. We\'ve also enabled automatic backing-up of documents. Backups will get saved in the user\'s <code>Documents/Nano_Backups</code> directory.</p>\r\n<p>Spell checker is enabled in <code>nano</code> via this configuration but to utilize it you\'ll have to install <code>aspell</code> and <code>aspell-dictionary</code> from your package manager.</p>\r\n<p>Kudos! We have turned a timid <code>GNU nano</code> into a powerful wildebeest. Try this configuration and if possible leave your feedback.</p>\r\n<p>A word of warning. Package maintainers often ship stripped down versions of <code>nano</code> so one of these features might not be present in your installation and in that case, <code>nano</code> will throw some errors and refuse to start. You have two choices in that scenario; first, disable that feature by deleting the corresponding line from <code>.nanorc</code> file. Your second option is to download the <code>nano</code> <a href=\"https://nano-editor.org/download.php\">source code</a> and compile it yourself with all the features intact. If I were you, I\'d go with the second option as compiling <code>nano</code> is really simple and straightforward. Only extra packages that you will need are <code>libncurses-dev</code> and <code>libmagic-dev</code>.</p>\r\n<p>I\'ll leave you guys with a quote from some wise man,</p>\r\n<blockquote>\r\n<p>Good Things Come in Small Packages.</p>\r\n</blockquote>\r\n',397,11,1,'CC-BY-SA','text-editor, terminal, linux, nano, pico, pine, nanorc',0,0,1),
(3488,'2021-12-15','Binaural 3d audio recording, please listen at normal speed with good head phones.',302,'recorded November 19 2021 quick storm.','<p>Recorded November 19 2021 quick storm. Please search Binaural on HPR for similar recordings and description of procedure, enjoy and have a glorious 2022.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=0785\">hpr0785 :: binaural recording</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=0792\">hpr0792 :: Binaural Recording</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2338\">hpr2338 :: Binaural recording 2 off to work</a></li>\r\n</ul>\r\n',110,101,0,'CC-BY-SA','Binaural, storm, thunder',0,0,1),
(3479,'2021-12-02','Linux Inlaws S01E49: Version Control Systems and why bother',3414,'Version Control Systems and why bother','<p>In this episode our two heroes contemplate the ins and outs of version\r\ncontrol systems (VCS) and how to maintain sanity using them. Particular focus\r\nis on the newer generation of such as git which enabled large-scale community\r\nprojects such as the Linux kernel, programming languages like Rust and Python\r\nand other shenanigans. Including a crash course on version control systems\r\n- you may credits at your local third-level education facility for listening\r\nto this episode. Just tell them the Inlaws sent you :-). Plus Martin reveals\r\nhis favourite Pay TV channel and his gun-buying habits being a minor. Don\'t\r\nmiss this episode if you\'re a minor and want to buy a gun in certain countries\r\n(details as part of the episode! :-).</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>V-Model: <a href=\"https://en.wikipedia.org/wiki/V-Model\" target=_blank>https://en.wikipedia.org/wiki/V-Model</a></li>\r\n<li>Mercurial: <a href=\"https://www.mercurial-scm.org\" target=_blank>https://www.mercurial-scm.org</a></li>\r\n<li>Concurrent Version Control System (CVS): <a href=\"https://cvs.nongnu.org\" target=_blank>https://cvs.nongnu.org</a></li>\r\n<li>Minix: <a href=\"https://www.minix3.org\" target=_blank>https://www.minix3.org</a></li>\r\n<li>Bazaar: <a href=\"https://bazaar.canonical.com/en\" target=_blank>https://bazaar.canonical.com/en</a></li>\r\n<li>Subversion (SVN): <a href=\"https://subversion.apache.org\" target=_blank>https://subversion.apache.org</a></li>\r\n<li>Git: <a href=\"https://git-scm.com\" target=_blank>https://git-scm.com</a></li>\r\n<li>Bitkeeper: <a href=\"https://www.bitkeeper.org\" target=_blank>https://www.bitkeeper.org</a></li>\r\n<li>IBM 390: <a href=\"https://www.ibm.com/ibm/history/exhibits/mainframe/mainframe_PP9000.html\" target=_blank>https://www.ibm.com/ibm/history/exhibits/mainframe/mainframe_PP9000.html</a></li>\r\n<li>gitea: <a href=\"https://gitea.io\" target=_blank>https://gitea.io</a></li>\r\n<li>Special K: <a href=\"https://en.wikipedia.org/wiki/Special_K\" target=_blank>https://en.wikipedia.org/wiki/Special_K</a></li>\r\n<li>Special K (song): <a href=\"https://en.wikipedia.org/wiki/Special_K_(song)\" target=_blank>https://en.wikipedia.org/wiki/Special_K_(song)</a></li>\r\n<li>Special K (former country, the Wikipedia page is slightly outdated): <a href=\"https://en.wikipedia.org/wiki/United_Kingdom\" target=_blank>https://en.wikipedia.org/wiki/United_Kingdom</a></li>\r\n<li>Imperium: <a href=\"https://www.imdb.com/title/tt4781612/?ref_=fn_al_tt_2\" target=_blank>https://www.imdb.com/title/tt4781612/?ref_=fn_al_tt_2</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Version control systems, git, subversion, mercurial, bazaar, how to buy guns as a minor in NL',0,0,1),
(3483,'2021-12-08','Pinephone64 review',563,'Sigflup got a pinephone and wants to talk about it. ','<p>ringtone location: <code>/usr/share/sounds/freedesktop/stereo</code></p>\r\n\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3483/hpr3483/hpr_pine.jpg\" /><br />\r\nGimp on a cellphone, for obvious reasons.</p>\r\n\r\n\r\n<h3>Links</h3>\r\n\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/PinePhone\">wikipedia: https://en.wikipedia.org/wiki/PinePhone</a></li>\r\n<li><a href=\"https://www.pine64.org/pinephone/\">Official website: https://www.pine64.org/pinephone/</a></li>\r\n<li><a href=\"https://wiki.pine64.org/index.php/PinePhone\">PinePhone Wiki: https://wiki.pine64.org/index.php/PinePhone</a></li>\r\n</ul>\r\n',115,0,0,'CC-BY-SA','linux,cellphone,pinephone,mobie phone',0,0,1),
(3505,'2022-01-07','A DX with Hotel Bravo 9 Hotel November Tango',2890,'Ken (PA7KEN) and Beni (HB9HNT) talk about getting your HAM ticket in Switzerland','<h3>HAM Radio Organizations</h3>\r\n<p>\r\nThe HAM Page of the  Swiss Federal Office of Communications, BAKOM: <a href=\"https://www.bakom.admin.ch/bakom/de/home/frequenzen-antennen/frequenznutzung-mit-oder-ohne-konzessionen/amateurfunk.html\">https://www.bakom.admin.ch/bakom/de/home/frequenzen-antennen/frequenznutzung-mit-oder-ohne-konzessionen/amateurfunk.html</a>\r\n</p>\r\n<p>\r\nUnion of Swiss Short Wave Amateurs, they manage the local associations and the use of the frequencies for relays and automated stations: <a href=\"https://www.uska.ch/en/\">https://www.uska.ch/en/</a>\r\n</p>\r\n\r\n<h3>Training</h3>\r\n\r\n<p>\r\nMost likely the best way to prepare for the exam is attending a preparation course from a local Association, of have a brother who did and forwarded all the background info and documents to me. ;) But apart from having a brother I did the following:\r\n</p>\r\n<p>\r\nThe online version of the books I read: <a href=\"https://www.darc.de/der-club/referate/ajw/darc-online-lehrgang/\">https://www.darc.de/der-club/referate/ajw/darc-online-lehrgang/</a> - again in German. They\'re mainly geared towards the German exams but the knowledge contained is useful for the Swiss exams, too.\r\n</p>\r\n<p>\r\nI mainly used the HamRadioTrainer to prepare for the exam. This is a Windows application which however works pretty well in wine. I was told that the Swiss questions are rather old, 2017ish.\r\n</p>\r\n<p>\r\nI was told that there are mobile apps with more recent questions but I couldn\'t be bothered to check whether they exist on F-Droid.\r\n</p>\r\n<p>\r\nThe BAKOM also has a site about the exams, containing PDFs with example questions, of course again everything in German: <a href=\"https://www.bakom.admin.ch/bakom/de/home/frequenzen-antennen/funkerpruefungen/amateurfunk-pruefungen.html\">https://www.bakom.admin.ch/bakom/de/home/frequenzen-antennen/funkerpruefungen/amateurfunk-pruefungen.html</a>\r\n</p>',288,43,0,'CC-BY-SA','Swiss,BAKOM,HamRadioTrainer,HB9',0,0,1),
(3482,'2021-12-07','Introduction to Post Apocalyptic Robotics Meta Technology',810,'Building robots from junk parts and tech prepping','<p><a href=\"https://solarbotics.net/bftgu/default.htm\" class=\"uri\">https://solarbotics.net/bftgu/default.htm</a><br />\r\n<a href=\"https://www.bitchute.com/video/jwD4sZhnXrEk/\" class=\"uri\">https://www.bitchute.com/video/jwD4sZhnXrEk/</a></p>\r\n<p>Hail to my Loyal Henchmen and fellow SuperVillains, welcome new recruits and greetings to the hackers of HPR.</p>\r\n<p>This is Mechatroniac the mechatronics maniac with the zeroth installment of Robot Warlords of the Apocalypse, where I will talk about post apocalyptic robotics and share my projects, philosophy and future ambitions.</p>\r\n<p>I am doing this podcast contribution for hacker public radio.</p>\r\n<p>hackerpublicradio.org</p>\r\n<p>After this has aired on HPR I will be adding video and to this presentation which will be uploaded to my channel at:</p>\r\n<p><a href=\"https://bitchute.com/channel/mechatroniac\" class=\"uri\">https://bitchute.com/channel/mechatroniac</a> point youtube-dl at it and download them all.</p>\r\n<p>Mechatronics is code, electronics and mechanics working together as a system. I am weak in all 3, but have built mini battlebot style robots completely from scratch, with every chassis part, every motor and wheel, and every circuit that drives them sourced for free from junk like discarded printers, dvds, tvs, computers and UPS.</p>\r\n<p>I am calling this ethos and the resultant aesthetic, Post Apocalyptic Robotics, that is robots that can be built by reclaiming existing post consumer products to create something new.</p>\r\n<p>Currently they are confined to smooth surfaces like battlebot arenas, but more rugged terrain bots are currently also being worked on, and I want to work towards autonomous and swarm robots as well.</p>\r\n<p>The recipes I release here, can be followed by anyone to build their own robots and devices, by simply gathering the required scrap units or similar as described; then disassembling, then finally reassembling into a new meta technological device.</p>\r\n<p>I hope that others will do the same, and come up with their own innovations and new recipes that can be added to our incipient swarms of meta-technological bots as they evolve ever more sophistication.</p>\r\n<p>Welcome to post apocalyptic robotics.</p>\r\n<p>Introduction to Post-Apocalypse Robotics Meta-technology</p>\r\n<p>Tech Prepping, Building a \'battlebot\' out of junk</p>\r\n<p>Meteors, asteroids, comets. Cataclysmic solar flares, massive volcanic eruptions and earthquakes triggering massive tsunamis, social unrest, runaway climate change, ransomware and EMPs attacks striking electric grids, deadly viral pandemics, mass hysteria, big boats blocking waterways, obscured malware in a systemd update, management engines at the heart of CPUs providing backdoors to Intel and AMD hardware at root -3 privilege... what could go wrong there?</p>\r\n<p>There are a large number of looming events which could collapse technological society as it is, wiping out most of the internet and shipping and transport and hopefully maybe even the government.</p>\r\n<p>Tech Prepping is more important than food prepping</p>\r\n<p>While most survivalist and prepper types concentrate on stacking cans of beans, seeds, fuel and ammo, the robot prepper will also be hoarding books on pdf, component datasheets, software libraries, breakout boards and every post EOL electronics product they can get their hands on.</p>\r\n<p>In a semi apocalyptic scenario where the trucks stop rolling, a lot of people who save seeds will be able to grow food in their communities, so food won\'t be such a big deal.</p>\r\n<p>There might even be some that figure out how to make petroleum from wood like mrteslonian channel on youtube.</p>\r\n<p>But a real crux will be analog, digital electronics technology, IT and mechatronics. Those communities with working electronics, mechatronics, and information technology infrastructure, will be at a distinct competitive advantage. They will be able to leverage this in such things as automation of agriculture, from watering schedules to weed pulling along with many other applications that will make the PAR communities ascendant. All else being equal, PAR will be a force multiplier vs hostile neighbours starved of their slaveslabs swiping because facebook no longer exists, or remnants of the tyrannical state coming out of their DUMB bunkers and thinking they still have the right to rule.</p>\r\n<p>It\'s a good thing then, that we have a boost up to a mechatronic technological society all around us in the electronic consumer devices that although they may be decrepit, soiled and/or dead, nonetheless contain a wealth of component parts -most of which are hardy enough to function for a very long time, components that can be reused in new applications.</p>\r\n<p>It\'s like there is a supply chain for robot factories all around us. It\'s not infinite but it is very plentiful at the moment. Sadly, our society is blind to the current and future worth of the technological legacy in our midst and the electronics recycling is electronics destruction.</p>\r\n<p>Meta technology</p>\r\n<p>Antecedents: BEAM, cyberpunk, road warrior</p>\r\n<p>Fellow Travellers/Parallels: Maker, Right to repair, hardware hacking(Valerio De Giampietro - Hardware Hacking Tutorial), CollapseOS</p>\r\n<p>One of this new meta technology\'s main antecedents is BEAM(Biology Evolution Aesthetics Mechanics) robotics, Mark Tilden\'s robot projects that eschewed microprocessors in favour of circuits built of discrete components that mimic biological nerves and can react to environmental stimuli. There is a nice archive of BEAM related documents on the solarbotics site.</p>\r\n<p>Mark Tilden even wrote a book called \'Junk Bots\', so must have had some of the same ideas I have... but where Mark uses transistors as the nerves and brains, I am using arduino since microprocessors are now very inexpensive.</p>\r\n<p>The use of arduino is the only thing keeping my projects from being completely PAR, but one day wish to have entirely PAR</p>\r\n<p>Thus right to repair and hardware hacking are thus two important aspects to utilizing the processors inside consumer products to run other operating systems for our use. Unless we hoard thousands of atmega328p chips, it will be difficult to find processors that we can use unless they have been liberated via techniques described by Valerio De Giampietro. Reusing processors from printers and other products is a goal for the future, but right now, let\'s have some fun.</p>\r\n<p>FUN and Education The first arduino PAR battlebot I built - the herald/interceptor; is powered by 5 18650 cells from trashed laptops, powertrain is a custom hybrid relay/MOSFET H-bridge, and it is driven by four electric motors and wheels harvested from PA printers. It has IR remote control and is very fast to the extent that I had to add rubber bumpers to it to keep it and others safe.</p>\r\n<p>I departed somewhat from the PAR ethos, with added front and rear ultrasonic sensors, and an mp3 player powering a tv speaker. Hence, it is the herald/interceptor</p>\r\n<p>I think it has an interesting road warrior cyberpunk aesthetic, with the grey steel, aluminum and black ABS parts, and but for the wheels; star wars for the bolted on look of it</p>\r\n<p>Can we set up PAR tournaments where we can bring our bots and battle it out? Cost is no longer a barrier.</p>\r\n<p>I could see a challenging new sport that is a cross between battlebots and junkyard wars, where contestants would have a set amount of time to build a bot from junk, and then compete in racing or sumo matches.</p>\r\n<p>Obviously you are going to learn a lot building a robot and the best way to learn is by doing.</p>\r\n<p>Alright, now that I have shown some of the important strategic and fun implications of PAR meta technology, by raiding trashed consumer electronics for their components: I hope at the very least that everyone hearing this never again take their post use electronics to one of those recycling centers where all those precious components are destroyed, instead of keeping it in your basement where it belongs. You\'d do better taking it to a landfill where perhaps some future wretched mutant can discover and make use of it, than take it to electronics recycling.</p>\r\n<p>Next episode I\'ll show you how to build your PAR laboratory and give you the ingredients to the herald/interceptor battlebot, but if you\'re already excited to get started you can order an arduino Uno or nano, or an arduino kit with a bunch of sensors like I did when I got started. You can also start gathering things like printers, tvs, dvds, UPS and other waste, and get a soldering station if you don\'t already have one.</p>\r\n<p>In the coming episodes I will share the detailed recipe for my first post apocalyptic battlebot style robot I built complete with arduino code, and will show you how to build your own robot for free except for the arduino*. I\'ll also do email tech support for anyone having problems.</p>\r\n<p>I also want to go further into other tech prepper archiving, in case all or large parts of the internet are no longer accessible, and this may be where you programming specialists might be able to help. They kind of gave me weird looks on the arduino forums when I asked for a way to download all the libraries but was finally able to beg a script that let me download a lot of them, if not all.</p>\r\n<p>Also, all the component datasheets would be handy... it seems it would be prudent to have datasheets on all the components and microprocessors that you possibly can, and to have all the software libraries it would be practical to archive.</p>\r\n<p>I\'ll also go into more aspects and implications of this exciting meta technology, and I hope you will join me in building post apocalypse robotics and mechatronics fun.</p>\r\n',401,0,1,'CC-BY-SA','beam,righttorepair,robots,mechatronics',0,0,1),
(3489,'2021-12-16','Equality of structured errors',776,'Tuula talks about equality in Haskell','<p>Equality of structured errors</p>\r\n<h2 id=\"background\">Background</h2>\r\n<p>In previous episode, I built a system where error codes weren\'t defined in one huge type. This made compilation times faster and maintenance quite a bit more easier.</p>\r\n<h2 id=\"problem\">Problem</h2>\r\n<p>I wanted to write a test to see that parameters passed to <code>validatePatchApiPersonR</code> are validated correctly. <code>patchApiPersonR</code> is used by client to do partial updates on a <code>Person</code> entity. There\'s three different cases I wanted to check:</p>\r\n<ul>\r\n<li>trying to change life focus too soon (there\'s 5 year cooldown)</li>\r\n<li>trying to select same life focus that has already been selected</li>\r\n<li>trying to modify somebody else\'s avatar</li>\r\n</ul>\r\n<p>Code is shown below and the last 2 lines are the interesting ones. There I\'m using equality to compare if a given error exists in a list of errors created by <code>validatePatchApiPersonR</code>.</p>\r\n<pre><code>spec :: Spec\r\nspec = do\r\n    describe &quot;people&quot; $ do\r\n        describe &quot;life focus&quot; $ do\r\n            describe &quot;Validating requests&quot; $ do\r\n                it &quot;All errors are reported&quot; $ do\r\n                    forAll anyCompletelyFaultyRequest $\r\n                        \\(userE, personE, msg, date) -&gt;\r\n                            let res = validatePatchApiPersonR (userE ^. entityKeyL, userE ^. entityValL, personE, msg, date)\r\n                                newFocus = msg ^? patchPersonRequestLifeFocus . _Just . _Just\r\n                            in\r\n                                case res of\r\n                                    V.Success _ -&gt;\r\n                                        expectationFailure &quot;Invalid request was not detected&quot;\r\n\r\n                                    V.Failure errs -&gt; do\r\n                                        errs `shouldSatisfy` (\\xs -&gt; any (\\x -&gt; &quot;CanNotChangeLifeFocusSoSoon&quot; `isInfixOf` (pack $ show x)) xs)\r\n                                        errs `shouldContain` [ canNotReselectSameLifeFocus newFocus ]\r\n                                        errs `shouldContain` [ insufficientRights ]\r\n</code></pre>\r\n<h2 id=\"detour-on-equality\">Detour on equality</h2>\r\n<p>Equality in Haskell works slightly differently compared to for example C#. There is no built in, default implementation that gets used when the programmer hasn\'t written their own. If you want to compare equality, there needs to be implementation specific to your data types. This is done by making an instance of type class <code>Eq</code> (<a href=\"https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-Eq.html\">https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-Eq.html</a>).</p>\r\n<pre><code>class Eq a where\r\n  (==) :: a -&gt; a -&gt; Bool\r\n  (/=) :: a -&gt; a -&gt; Bool\r\n</code></pre>\r\n<p>There\'s two functions: <code>==</code> for equality and <code>/=</code> for inequality. You need to implement either one.</p>\r\n<h2 id=\"back-to-problem\">Back to problem</h2>\r\n<p><code>ECode</code> is our structured error code type and defined as follows (this is short recap of previous episode):</p>\r\n<pre><code>data ECode where\r\n    ECode :: (ErrorCodeClass a, ToJSON a, Eq a, Show a) =&gt; a -&gt; ECode\r\n</code></pre>\r\n<p>It can wrap anything that has correct type class instances and you will always get <code>ECode</code> as a result. It hides the specific type of thing being wrapped and only functions defined in type classes are available.</p>\r\n<h2 id=\"first-try\">First try</h2>\r\n<p>Peel away <code>ECode</code> and compare what\'s inside and compare wrapped values:</p>\r\n<pre><code>instance Eq ECode where\r\n    ECode a == ECode b =\r\n        a == b\r\n</code></pre>\r\n<p>This will lead into a error \"Couldn\'t match expected type &#x2018;a&#x2019; with actual type &#x2018;a1&#x2019;. &#x2018;a1&#x2019; is a rigid type variable bound by a pattern with constructor...\". This is because <code>ECode</code> can wrap many different types, there is no quarantee that you\'re comparing values of same type. The whole error is show below for reference:</p>\r\n<pre><code>[35 of 76] Compiling Errors           ( src/Errors.hs, .stack-work/dist/x86_64-linux/Cabal-2.2.0.1/build/Errors.o )\r\n\r\n/home/tuula/programming/sky/src/Errors.hs:148:14: error:\r\n    &#x2022; Couldn&#39;t match expected type &#x2018;a&#x2019; with actual type &#x2018;a1&#x2019;\r\n      &#x2018;a1&#x2019; is a rigid type variable bound by\r\n        a pattern with constructor:\r\n          ECode :: forall a.\r\n                   (ErrorCodeClass a, ToJSON a, Eq a, Show a) =&gt;\r\n                   a -&gt; ECode,\r\n        in an equation for &#x2018;==&#x2019;\r\n        at src/Errors.hs:147:16-22\r\n      &#x2018;a&#x2019; is a rigid type variable bound by\r\n        a pattern with constructor:\r\n          ECode :: forall a.\r\n                   (ErrorCodeClass a, ToJSON a, Eq a, Show a) =&gt;\r\n                   a -&gt; ECode,\r\n        in an equation for &#x2018;==&#x2019;\r\n        at src/Errors.hs:147:5-11\r\n    &#x2022; In the second argument of &#x2018;(==)&#x2019;, namely &#x2018;b&#x2019;\r\n      In the expression: a == b\r\n      In an equation for &#x2018;==&#x2019;: ECode a == ECode b = a == b\r\n    &#x2022; Relevant bindings include\r\n        b :: a1 (bound at src/Errors.hs:147:22)\r\n        a :: a (bound at src/Errors.hs:147:11)\r\n    |\r\n148 |         a == b\r\n    |\r\n</code></pre>\r\n<h2 id=\"second-try\">Second try</h2>\r\n<p>We can use <code>Show</code> to turn <code>ECode</code> into string and compare them. This is what I did initially.</p>\r\n<pre><code>instance Eq ECode where\r\n    a == b = show a == show b\r\n</code></pre>\r\n<p>While this works, it feels hacky. It relies on string representations being different. If you accidentally write <code>Show</code> instance in a way that produces same string with two different values, the comparison breaks down.</p>\r\n<h2 id=\"third-time-is-a-charm\">Third time is a charm</h2>\r\n<p>After pondering a bit, I asked myself a question \"When are two <code>ECode</code> equal?\". The answer I arrived is \"When they have same http status code and description.\" Then I could write yet different take on equality:</p>\r\n<pre><code>instance Eq ECode where\r\n    a == b =\r\n        httpStatusCode a == httpStatusCode b\r\n        &amp;&amp;  description a == description b\r\n</code></pre>\r\n<p>This states that to two <code>ECode</code> values are equal, if they have same <code>httpStatusCode</code> and <code>description</code>.</p>\r\n<p>Thanks for listening, if you have any questions or comments, you can reach me via email or in fediverse, where I\'m <code>Tuula@tech.lgbt</code>. Or even better, you could record your own hacker public radio episode.</p>\r\n<p>Ad astra!</p>\r\n',364,107,1,'CC-BY-SA','haskell, eq',0,0,1),
(3487,'2021-12-14','Installing a cat door',1446,'Rho`n installs a cat door in his interior basement door','<h1>Synopsis</h1>\r\n<p>In today\'s episode, Rho`n installs a cat door in the basement door separating the finished side of the basement from the utility side. Follow along as he learns once again that it is best to read all the instructions before starting a project, and also learns that modern, inexpensive, interior doors are not made of wood.</p>\r\n\r\n<p>The following are the pictures taken during the project.</p>\r\n<style>\r\ndiv#figures {\r\n	display: flex;\r\n	flex-direction: row;\r\n	flex-wrap: wrap;\r\n	justify-content: center;\r\n}\r\ndiv#figures figure { max-width: 492px; }\r\ndiv#figures img { max-width: 50vw; padding-bottom: 0.15em }\r\n</style>\r\n<div id=\"figures\">\r\n<figure>\r\n	<a href=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/01.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/01-sm.jpg\"\r\n         alt=\"Basement door laid out on a table with the cat door template applied\"></a>\r\n    <figcaption>Basement door laid out on a table with the cat door template applied</figcaption>\r\n</figure>\r\n<figure>\r\n    <a href=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/02.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/02-sm.jpg\"\r\n								   alt=\"Basement door after cutting a hole through it. Showing the hole and the interior of the door.\"></a>\r\n    <figcaption>Basement door after cutting a hole through it. Showing the hole and the interior of the door.</figcaption>\r\n</figure>\r\n<figure>\r\n    <a href=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/03.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/03-sm.jpg\"\r\n								   alt=\"View from the finished side of the basement showing the installed cat door.\"></a>\r\n    <figcaption>View from the finished side of the basement showing the installed cat door.</figcaption>\r\n</figure>\r\n<figure>\r\n    <a href=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/04.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3487/hpr3487/04-sm.jpg\"\r\n								   alt=\"View from the utility side of the basement showing the installed cat door.\"></a>\r\n    <figcaption>View from the utility side of the basement showing the installed cat door.</figcaption>\r\n</figure>\r\n</div>\r\n<h1>Attribution</h1>\r\n\r\n<p>The transition sound used between audio clips is found on <a href=\"https://freesound.org/\">freesound.org</a>:<br>\r\nName: <a href=\"https://freesound.org/people/DanJFilms/sounds/529064/\">Harp Transition Music Cue</a><br>\r\nAuthor: <a href=\"https://freesound.org/people/DanJFilms/\">DanJFilms</a><br>\r\nLicense: <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons Zero</a></p>\r\n',293,0,0,'CC-BY-SA','Install, cat door',0,0,1),
(3492,'2021-12-21','Linux Inlaws S01E44: Pipewire Just another audio server Think again',3170,'Pipewire - Just another audio server? - Think again!','<p>In this episode - sadly missing Martin as he buggered off to do something\r\nelse - the remaining Inlaw hosts Wim Taymans, inventor and brain behind\r\nPipewire, a new approach to Linux audio. Don\'t miss out on this episode if\r\nyou\'re fed up with Pulseaudio (hello Martin :-) or find Jack just too\r\ncomplicated for every-day usage - you may see audio on Linux from a different\r\nperspective after this episode... Never mind those of you who are looking for\r\na crash-course on audio on Linux - this episode is for you!</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Pipewire: <a href=\"https://github.com/PipeWire/pipewire\" target=_blank>https://github.com/PipeWire/pipewire</a></li>\r\n<li>gstreamer: <a href=\"https://gstreamer.freedesktop.org\" target=_blank>https://gstreamer.freedesktop.org</a></li>\r\n<li>ALSA: <a href=\"https://alsa-project.org/wiki/Main_Page\" target=_blank>https://alsa-project.org/wiki/Main_Page</a></li>\r\n<li>PulseAudio: <a href=\"https://www.freedesktop.org/wiki/Software/PulseAudio\" target=_blank>https://www.freedesktop.org/wiki/Software/PulseAudio</a></li>\r\n<li>Jack: <a href=\"https://jackaudio.org\" target=_blank>https://jackaudio.org</a></li>\r\n<li>eventfd: <a href=\"https://man7.org/linux/man-pages/man2/eventfd.2.html\" target=_blank>https://man7.org/linux/man-pages/man2/eventfd.2.html</a></li>\r\n<li>Rubik\'s Cube: <a href=\"https://www.rubiks.com/en-us\" target=_blank>https://www.rubiks.com/en-us</a></li>\r\n<li>And how to solve this: <a href=\"https://ruwix.com/the-rubiks-cube/advanced-cfop-fridrich\" target=_blank>https://ruwix.com/the-rubiks-cube/advanced-cfop-fridrich</a></li>\r\n<li>How to make Kefir: <a href=\"https://www.twopeasandtheirpod.com/how-to-make-kefir\" target=_blank>https://www.twopeasandtheirpod.com/how-to-make-kefir</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Linux audio, Pipewire, PulseAudio, Jack, gstreamer, Rubik\'s Cube, Kefir',0,0,1),
(3499,'2021-12-30','Fixing a noisy blower motor',264,'I fix a noisy blower motor that I put off since last winter.','<p>A brief description of fixing a problem I put off from last winter, on the 2013 Hyundai Elantra.</p>\r\n<p><em>Motor with the electrical plug still attached</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211119_171709.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211119_171709_thumbnail.jpg\" alt=\"Motor with the electrical plug still attached\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>12 volt plug showing where to press the clip to remove it</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211120_134626.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211120_134626_thumbnail.jpg\" alt=\"12 volt plug showing where to press the clip to remove it\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Mess left by the lithium grease spray</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211119_172040.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211119_172040_thumbnail.jpg\" alt=\"Mess left by the lithium grease spray\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Broken clip: Don\'t try this</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211120_135727.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211120_135727_thumbnail.jpg\" alt=\"Broken clip: Don&#39;t try this\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Motor cage apart, showing the bearing</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211120_143842.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3499/hpr3499/20211120_143842_thumbnail.jpg\" alt=\"Motor cage apart, showing the bearing\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<!-- ![Motor with the electrical plug still attached.](20211119_171709.jpg) -->\r\n\r\n<!-- Motor with the electrical plug still attached. -->\r\n\r\n<!-- ![12 volt plug showing where to press the clip to remove it.](20211120_134626.jpg) -->\r\n\r\n<!-- 12 volt plug showing where to press the clip to remove it. -->\r\n\r\n<!-- ![Mess left by the lithium grease spray.](20211119_172040.jpg) -->\r\n\r\n<!-- Mess left by the lithium grease spray. -->\r\n\r\n<!-- ![Broken clip: Don\'t try this.](20211120_135727.jpg) -->\r\n\r\n<!-- Broken clip: Don\'t try this. -->\r\n\r\n<!-- ![Motor cage apart, showing the bearing.](20211120_143842.jpg) -->\r\n\r\n<!-- Motor cage apart, showing the bearing. -->\r\n\r\n<h2 id=\"attribution\">Attribution</h2>\r\n<p>The transition sound used between audio clips is found on <a href=\"https://freesound.org/\">freesound.org</a>:<br>\r\nName: <a href=\"https://freesound.org/people/juanto9889/sounds/414870\"> efectos de sonido cartoon &#xBB; transition </a><br>\r\nAuthor: <a href=\"https://freesound.org/people/juanto9889\">juanto9889</a><br>\r\nLicense: <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons Zero</a></p>\r\n',318,0,0,'CC-BY-SA','car,repair,maintenance,bearing',0,0,1),
(3508,'2022-01-12','Differences between C# and Haskell',1712,'Tuula talks about some of the differences between C# and Haskell','<p>This episode covers some of the differences between C# and Haskell. I\'m probably going to omit lot of things accidentally.</p>\r\n<ul>\r\n<li>Origin: practical language for solving real world problems vs. programming language research</li>\r\n<li>Main paradigm: object oriented vs purely functional</li>\r\n<li>Changing data: mutability vs. immutability</li>\r\n<li>Data structures: inheritance vs. composition</li>\r\n<li>Execution model: strict vs. nonstrict</li>\r\n<li>Side effects: anywhere vs. specifically marked areas in the code</li>\r\n</ul>\r\n<p>Thanks for listening, if you have any questions or comments, you can reach me via email or in fediverse, where I\'m <code>Tuula@tech.lgbt</code>. Or even better, you could record your own hacker public radio episode.</p>\r\n',364,107,0,'CC-BY-SA','haskell, c#, programming',0,0,1),
(3515,'2022-01-21','ADB and scrcpy',565,'Some useful tools for working with Android Devices','<h1 id=\"android-debugging\">Android Debugging</h1>\r\n<ul>\r\n<li><a href=\"https://developer.android.com/studio/command-line/adb\">Android Debug Bridge (adb) homepage</a></li>\r\n</ul>\r\n<h2 id=\"install-adb-tools\">Install ADB Tools</h2>\r\n<p>There are multiple guides online as to how to install, but I found <code>dnf install android-tools.x86_64 adb-enhanced.noarch</code> the easiest. Similar commands are available for the other distros. Use your package manager to search for <code>adb</code>.</p>\r\n<ul>\r\n<li><a href=\"https://www.xda-developers.com/install-adb-windows-macos-linux/\">https://www.xda-developers.com/install-adb-windows-macos-linux/</a></li>\r\n</ul>\r\n<h2 id=\"enable-developer-options\">Enable Developer options</h2>\r\n<p>Go to Settings. Usually via the pulldown menu from the top twice, and click the cog icon. Search for \'Build Number\', it\'s usually in Click on \'About Phone\' Click on \'Build Number\' seven times.</p>\r\n<p>Go back and then search for \'Developer options\' it\'s usually in the System section</p>\r\n<p>You\'ll need to turn on two features \'Android Debugging\' and \'ADB over network\'</p>\r\n<p>While we are at it, go back and then search for \'IP Address\' it\'s usually in the <code>About phone</code> section. You should see a IPv4 address eg: 192.168.1.100. Make note of the IP address as we\'ll use it later.</p>\r\n<h2 id=\"using-adb\">Using ADB</h2>\r\n<p>To get help use the command <code>adb help</code></p>\r\n<ul>\r\n<li>global options: Tell you how to connect to the phone</li>\r\n<li>general commands: Shows your devices, and gives help</li>\r\n<li>networking: Allows you to connect over the network but also to port forward and reverse traffic</li>\r\n<li>file transfer: The only reliable way to get files to and from your device.</li>\r\n<li>internal debugging: Shows how to control the server</li>\r\n</ul>\r\n<h3 id=\"usb\">USB</h3>\r\n<p>Plug your phone using a usb cable. There will be a notification and a popup to allow the connection.</p>\r\n<p>Run <code>adb shell</code> and all going well you should see your phone. Commands like <code>ls</code>, <code>cd</code>, and <code>find</code> work well. For example <code>find /storage/self/primary/</code>.</p>\r\n<h3 id=\"network\">Network</h3>\r\n<p>Unfortunately if you unplug your phone you no longer have a connection to it, but you can enable network access via tcp. Leave your phone connected to USB and then tell it to use a TCP/IP connection with the command <code>adb tcpip 5555</code>.</p>\r\n<p>Then connect to the phone using the phones IP address and port 5555, <code>adb connect 192.168.1.100:5555</code>. It should reply with a connected to message</p>\r\n<pre><code>$ adb connect 192.168.1.100:5555\r\nconnected to 192.168.1.100:5555</code></pre>\r\n<p>Now commands like <code>adb shell</code> should allow you to access the phone even if it\'s not physically connected via usb.</p>\r\n<h3 id=\"multiple-devices\">Multiple devices</h3>\r\n<p>Got multiple devices then you can connect them all in the same way as shown above. The only issue is you need to tell adb which one you want to address.</p>\r\n<p>The first thing you need to do is list the devices</p>\r\n<pre><code>$ adb devices -l\r\nList of devices attached\r\n192.168.1.100:5555   device product:XXXX model:XXXX device:XXXX transport_id:9\r\n192.168.1.101:5555   device product:YYYY:ZZZZ device:ZZZZ transport_id:14</code></pre>\r\n<p>The important bit is the <code>transport_id</code> at the end. You can then use the <code>adb</code> command as normal but specifying the <code>-t</code> option</p>\r\n<pre><code>-t: allocate a pty if on a tty (-tt: force pty allocation)</code></pre>\r\n<p>So for example <code>adb -t 14 shell</code> would connect to phone <em>YYYY</em></p>\r\n<p>So that\'s it for remote control from the shell, but what if you want to see and interact with the screen itself ?</p>\r\n<h2 id=\"remote-screen-sharing-with-scrcpy\">Remote screen sharing with <code>scrcpy</code></h2>\r\n<p>From <a href=\"https://en.wikipedia.org/wiki/scrcpy\">Wikipedia</a></p>\r\n<p><em>scrcpy is a free and open-source screen mirroring application that allows control of an Android device from a Windows, macOS, or Linux desktop computer. The software is currently developed by Genymobile, which also developed Genymotion, an Android emulator.</em></p>\r\n<p>The <a href=\"https://github.com/Genymobile/scrcpy\">source code is available on github</a>. It\'s available via <code>apt install scrcpy</code> on Ubuntu. In Fedora you\'ll need to enable it from the copr repo.</p>\r\n<pre><code>dnf copr enable zeno/scrcpy\r\ndnf install scrcpy</code></pre>\r\n<p>With only one phone connected you can just type <code>scrcpy</code> and the screen will appear. Remember right click is power, and the mouse is your finger ;-).</p>\r\n<p>If you have multiple devices connected you can connect using <code>scrcpy --tcpip=192.168.1.101:5555</code></p>\r\n<p>scrcpy is a wonderful tool that deserves a show in itself, but in short it lets you interact with your phone as if it was a VNC/Remote Desktop session. You can copy text <em>from</em> the phone as well.</p>\r\n<p>It allows for control of the screen, as well as screen recording.</p>\r\n',30,0,0,'CC-BY-SA','adb,scrcpy,android Debug Bridge',0,0,1),
(3493,'2021-12-22','My First Spanish HPR Episode',302,'A short Spanish episode inspired by discussions about non-English episodes on the HPR mailing list.','<ul>\r\n<li>Mendoza, Argentina - <a href=\"https://en.wikipedia.org/wiki/Mendoza,_Argentina\">https://en.wikipedia.org/wiki/Mendoza,_Argentina</a></li>\r\n<li>Spanish (Castilian/Castellano) Language - <a href=\"https://en.wikipedia.org/wiki/Spanish_language\" class=\"uri\">https://en.wikipedia.org/wiki/Spanish_language</a></li>\r\n<li>Texto-Plano - <a href=\"https://texto-plano.xyz\" class=\"uri\">https://texto-plano.xyz</a></li>\r\n<li>El Podcast de Texto-Plano - <a href=\"https://podcast.texto-plano.xyz/\" class=\"uri\">https://podcast.texto-plano.xyz/</a></li>\r\n<li>SDF - <a href=\"https://sdf.org\" class=\"uri\">https://sdf.org</a></li>\r\n</ul>\r\n',152,0,0,'CC-BY-SA','spanish,languages,castellano,espanol,pubnix,textoplano,podcast',0,0,1),
(3498,'2021-12-29','Linux Inlaws S01E45: The Big Xmas New Year bash with the Grumpies',8076,'the same as the title so I\'m not going to repeat it','<p>In this end of year episode / Xmas bumper our two aging heroes host the Grumpy Old Coders\r\nonce again. Apart from having lots of fun, our four eclectic panelists discuss the year in\r\nreview and some obscure predictions the Inlaws made at the end of last year in S01E20 to\r\nsee if these became true or not. Plus a seriously long commercial break on mainframes\r\ndone by our own Chris (Arvind / Jim / IBM: If you\'re listening: the sponsor mail address\r\nis ibm_sponsor@linuxinlaws.eu). Plus some juicy competitive knowledge about some hyperscalers.\r\nBeans spilled right from the inside... In addition to cloud nightmares. So if you\'re into\r\nhorror after never mind beyond Halloween this is your episode... There might be the odd open source\r\nangle to this episode but we are not sure and this of course is purely by accident - just find out for yourself! :-)\r\n</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Grumpy Old Coders (incuding the Darkside and Women in Tech episodes): <a href=\"https://grumpy-old-coders.org\" target=_blank>https://grumpy-old-coders.org</a></li>\r\n<li>Broken CentOS 8 promise: <a href=\"https://blog.centos.org/2020/12/future-is-centos-stream\" target=_blank>https://blog.centos.org/2020/12/future-is-centos-stream</a></li>\r\n<li>Mainframes and the cloud: <a href=\"https://www.forbes.com/sites/tomtaulli/2021/01/23/will-the-cloud-take-down-the-mainframe\" target=_blank>https://www.forbes.com/sites/tomtaulli/2021/01/23/will-the-cloud-take-down-the-mainframe</a></li>\r\n<li>Woman in the red dress: <a href=\"https://matrix.fandom.com/wiki/Woman_in_Red\" target=_blank>https://matrix.fandom.com/wiki/Woman_in_Red</a></li>\r\n<li>Goedel\'s theorems: <a href=\"https://en.wikipedia.org/wiki/G%C3%B6del%27s_incompleteness_theorems\" target=_blank>https://en.wikipedia.org/wiki/G%C3%B6del%27s_incompleteness_theorems</a></li>\r\n<li>Veritasium video on incompleteness: <a href=\"https://www.youtube.com/watch?v=HeQX2HjkcNo\" target=_blank>https://www.youtube.com/watch?v=HeQX2HjkcNo</a></li>\r\n<li>Bezos laughing after divorce: <a href=\"https://www.youtube.com/watch?v=MU8AyKO7qX4\" target=_blank>https://www.youtube.com/watch?v=MU8AyKO7qX4</a></li>\r\n<li>KGB (I): <a href=\"https://stackoverflow.com/questions/19904683/passing-a-kernel-global-buffer-to-a-local-function-in-opencl\" target=_blank>https://stackoverflow.com/questions/19904683/passing-a-kernel-global-buffer-to-a-local-function-in-opencl</a></li>\r\n<li>KGB (II): <a href=\"https://www.google.com/search?channel=fs&client=ubuntu&q=%22kellogs+greatest+beer%22\" target=_blank>https://www.google.com/search?channel=fs&client=ubuntu&q=%22kellogs+greatest+beer%22</a></li>\r\n<li>Shameless Zig plug (dedicated to Loris :-): <a href=\"https://ziglang.org\" target=_blank>https://ziglang.org</a></li>\r\n<li>TIOBE index: <a href=\"https://www.tiobe.com/tiobe-index\" target=_blank>https://www.tiobe.com/tiobe-index</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Mainframes, IBM, Hyperscaler secrets, Rust, old men, programming languages',0,0,1),
(3495,'2021-12-24','Podcast Recommendation: The Retroist',92,'Podcast Recommendation: The Retroist number 243 - Die Hard','<p>Retroist Podcast Episode 243 (Die Hard)</p>\r\n<ul>\r\n<li><a href=\"https://retroist.com/retroist-die-hard-podcast\" class=\"uri\">https://retroist.com/retroist-die-hard-podcast<a/></li>\r\n<li><a href=\"https://archive.org/details/retroist-podcast-episode-243-die-hard\" class=\"uri\">https://archive.org/details/retroist-podcast-episode-243-die-hard</a></li>\r\n</ul>\r\n<p>A nostalgic look at the action film Die Hard, released in 1988. Also a look at whether or not Die Hard is a Christmas movie.</p>\r\n<ul>\r\n<li>Comments to this subject are welcome.</li>\r\n<li>Based on the book, Nothing Lasts Forever\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Nothing_Lasts_Forever_(Thorp_novel)\" class=\"uri\">https://en.wikipedia.org/wiki/Nothing_Lasts_Forever_(Thorp_novel)</a></li>\r\n<li><a href=\"https://diehard.fandom.com/wiki/Nothing_Lasts_Forever\" class=\"uri\">https://diehard.fandom.com/wiki/Nothing_Lasts_Forever</a></li>\r\n</ul></li>\r\n<li>Bruce Willis was previously known for the TV Series, Moonlighting\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Moonlighting_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Moonlighting_(TV_series)</a></li>\r\n</ul></li>\r\n</ul>\r\n',318,75,0,'CC-BY-SA','retro,retroist,nostalgia,1988,die hard,bruce willis,podcast',0,0,1),
(3494,'2021-12-23','Recent Generator Repairs and Maintenance',1080,'I talk about my Generac 4000XL gasoline-powered generator and what I\'ve done to get it running right','<p>In this episode I talk about some work I\'ve done recently on my Generac 4000xl portable generator. Here are some images to accompany the episode. First a beefcake shot of the unit:</p>\r\n\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr3494/hpr3494/01Generac4000xl.jpeg\" /></p>\r\n\r\n\r\n<p>This is the power panel on the generator</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr3494/hpr3494/02PowerPanel.jpeg\" /></p>\r\n\r\n<p>Here\'s the receptacle for the fat cable with a 4-prong plug. This goes right into my main electrical panel.</p>\r\n\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr3494/hpr3494/04ReceptableGoingtoBox.jpeg\" /></p>\r\n\r\n<p>Here\'s the interlock switch on my panel, which allows you to plug the generator into your panel safely.</p>\r\n\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr3494/hpr3494/03Interlock.jpeg\" /></p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li>James Condon\'s YouTube Channel on small-engine repair (mostly generators) <a href=\"https://www.youtube.com/user/jcondon2007\">https://www.youtube.com/user/jcondon2007</a></li>\r\n	<li>Wikipedia article about <a href=\"https://en.wikipedia.org/wiki/Hydrolock\">hydrolock</a> in engines\r\n</ul>\r\n\r\n',238,0,0,'CC-BY-SA','Engine repair, generators, electricity, emergency preparedness',0,0,1),
(3509,'2022-01-13','Linux Inlaws S01E46: The Matrix Project (Without Neo)',4315,'The Matrix Project Without Neo','<p>In this episode, the Inlaws are hosting Neil Johnson, VP of Engineering at Element. But this is\r\nnot just about this popular Matrix graphical user interface but rather about this federated communication\r\nnetwork dubbed as the next big thing after Mastodon and Discord, soon to take over the world (pretty\r\nmuch like the Inlaws themselves - it\'s gonna get crowded... :-).</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>The Matrix Foundation: <a href=\"https://matrix.org/foundation\" target=_blank>https://matrix.org/foundation</a></li>\r\n<li>Element: <a href=\"https://github.com/vector-im/element-web\" target=_blank>https://github.com/vector-im/element-web</a></li>\r\n<li>Synapse (Matrix reference implementation in Python): <a href=\"https://github.com/matrix-org/synapse\" target=_blank>https://github.com/matrix-org/synapse</a></li>\r\n<li>Dendrite (Matrix implementation in Gloang): <a href=\"https://github.com/matrix-org/dendrite\" target=_blank>https://github.com/matrix-org/dendrite</a></li>\r\n<li>Conduit (Matrix implementation in Rust): <a href=\"https://github.com/timokoesters/conduit\" target=_blank>https://github.com/timokoesters/conduit</a></li>\r\n<li>EU interoperability: <a href=\"https://ec.europa.eu/isa2/sites/default/files/eif_brochure_final.pdf\" target=_blank>https://ec.europa.eu/isa2/sites/default/files/eif_brochure_final.pdf</a></li>\r\n<li>Terry Pratchett: <a href=\"https://en.wikipedia.org/wiki/Terry_Pratchett#Works\" target=_blank>https://en.wikipedia.org/wiki/Terry_Pratchett#Works</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Matrix, Element, federated social network, peer-to-peer communication',0,0,1),
(3496,'2021-12-27','How I record HPR Episodes',1707,'Some python to record short segments of audio.','<p><a href=\"https://gitlab.com/norrist/solocast\">https://gitlab.com/norrist/solocast</a></p>\r\n<h3 id=\"sample-scripttxt\">Sample script.txt</h3>\r\n<pre class=\"txt\"><code>This is a sample script for solocast.\r\nSeparate the segments with a blank line\r\n\r\nBulleted lists are OK, but keep the items together by not skipping a line\r\n- Item 1\r\n- Item 2\r\n\r\n### Markdown Formatting is OK\r\nBut the Formatting gets lost in the script\r\nso you can write show notes in loosely formatted markdown\r\n\r\nDon&#39;t have more than 1 blank line separating segments\r\n</code></pre>\r\n<h3 id=\"solocastpy\">solocast.py</h3>\r\n<pre class=\"python\"><code>#! /usr/bin/env python3\r\n\r\nimport click\r\nimport os\r\nfrom shutil import which\r\n\r\nscript_file = &quot;script.txt&quot;\r\nrecording_directory_name = &quot;Recordings&quot;\r\nrecording_format = &quot;wav&quot;\r\nscript_segments = {}\r\n\r\n\r\ndef test_sox_exists():\r\n    try:\r\n        assert which(&quot;sox&quot;)\r\n    except AssertionError:\r\n        print(&quot;Cant find sox.  Install sox somewhere in your path.&quot;)\r\n        exit(1)\r\n\r\n\r\ndef get_recording_file_name(slug):\r\n    return f&quot;{recording_directory_name}/{slug}.{recording_format}&quot;\r\n\r\n\r\ndef project_prep():\r\n    if not os.path.exists(recording_directory_name):\r\n        os.makedirs(recording_directory_name)\r\n    if not os.path.exists(f&quot;{recording_directory_name}/Archive&quot;):\r\n        os.makedirs(f&quot;{recording_directory_name}/Archive&quot;)\r\n\r\n\r\ndef wait_for_input():\r\n    click.echo(&quot;*&quot; * 40)\r\n    _ = input(&quot;Press ENTER to Continue&quot;)\r\n\r\n\r\ndef add_slug_text(slug, text):\r\n    script_segments[slug] = text\r\n\r\n\r\ndef recording_exists(slug):\r\n    if os.path.isfile(get_recording_file_name(slug)):\r\n        return True\r\n    return False\r\n\r\n\r\ndef noise_profile_missing():\r\n    if os.path.isfile(f&quot;{recording_directory_name}/noise.prof&quot;):\r\n        return False\r\n    return True\r\n\r\n\r\ndef truncate_audio(slug):\r\n    recording = get_recording_file_name(slug)\r\n    new_recording = f&quot;{recording_directory_name}/{slug}-truncated.{recording_format}&quot;\r\n    click.echo(f&quot;truncating {recording}&quot;)\r\n\r\n    SOX_CMD = (\r\n        f&quot;sox -V2 {recording}  {new_recording}   silence -l 1 0.1 .1% -1 1.0 .1%   stat&quot;\r\n    )\r\n    click.echo(SOX_CMD)\r\n    os.system(SOX_CMD)\r\n    os.system(\r\n        f&quot; mv -v {recording} {recording_directory_name}/Archive/{slug}.{recording_format}&quot;\r\n    )\r\n    os.rename(new_recording, recording)\r\n    review_audio(slug)\r\n\r\n\r\ndef play_audio(slug):\r\n    recording = get_recording_file_name(slug)\r\n    click.echo(f&quot;Playing {recording}&quot;)\r\n    os.system(f&quot;play {recording}&quot;)\r\n    review_audio(slug)\r\n\r\n\r\ndef delete_audio(slug):\r\n    recording = get_recording_file_name(slug)\r\n    os.remove(recording)\r\n\r\n\r\ndef review_audio(slug):\r\n    review_menu = [&quot;(p)lay&quot;, &quot;(a)ccept&quot;, &quot;(r)eccord again&quot;, &quot;(t)runcate&quot;]\r\n    click.echo(slug)\r\n    for i in review_menu:\r\n        click.echo(i)\r\n    menu_action = input(&quot;&gt;&gt; &quot;)\r\n    if menu_action == &quot;p&quot;:\r\n        play_audio(slug)\r\n    elif menu_action == &quot;a&quot;:\r\n        exit()\r\n    elif menu_action == &quot;r&quot;:\r\n        delete_audio(slug)\r\n        find_and_record_next()\r\n    elif menu_action == &quot;t&quot;:\r\n        truncate_audio(slug)\r\n    else:\r\n        review_audio(slug)\r\n\r\n\r\ndef record_audio(slug):\r\n    new_recording = get_recording_file_name(slug)\r\n    click.echo(f&quot;Creating {new_recording}&quot;)\r\n    click.echo(&quot;press Enter to start then CRTL-C to quit&quot;)\r\n    wait_for_input()\r\n    os.system(f&quot;rec {new_recording}&quot;)\r\n\r\n\r\ndef record_silent_audio():\r\n    silent_recording = f&quot;{recording_directory_name}/silence.{recording_format}&quot;\r\n    click.echo(&quot;RECORD 5 SECONDS OF SILENCE \\n&quot; * 5)\r\n    click.echo(&quot;press Enter to start&quot;)\r\n    wait_for_input()\r\n    os.system(f&quot;rec {silent_recording} trim 0 5&quot;)\r\n    os.system(\r\n        f&quot;sox {silent_recording} -n noiseprof {recording_directory_name}/noise.prof&quot;\r\n    )\r\n\r\n\r\ndef load_script():\r\n    linetext = &quot;&quot;\r\n    with open(script_file) as script_file_reader:\r\n        for line in script_file_reader.readlines():\r\n\r\n            if not line.strip():\r\n\r\n                slug = linetext[:40].title()\r\n                segment_name = &quot;&quot;.join(filter(str.isalnum, slug))\r\n                add_slug_text(segment_name, linetext)\r\n                linetext = &quot;&quot;\r\n\r\n            else:\r\n                linetext += f&quot;{line}  \\n&quot;\r\n\r\n\r\ndef combine_recordings_for_export():\r\n    recording_list = []\r\n    combined_recording = f&quot;{recording_directory_name}/combined.{recording_format}&quot;\r\n    for slug, text in script_segments.items():\r\n        recording = get_recording_file_name(slug)\r\n        recording_list.append(recording)\r\n    recording_list_string = &quot; &quot;.join(recording_list)\r\n    print(recording_list_string)\r\n    SOX_CMD = f&quot;sox -V3 {recording_list_string}  {combined_recording} noisered {recording_directory_name}/noise.prof 0.21 norm -10&quot;\r\n    click.echo(SOX_CMD)\r\n    os.system(SOX_CMD)\r\n\r\n\r\ndef find_and_record_next():\r\n    for slug, text in script_segments.items():\r\n        if recording_exists(slug):\r\n            continue\r\n        click.clear()\r\n        click.echo(slug)\r\n        click.echo(&quot;*&quot; * 40)\r\n        click.echo(text)\r\n        click.echo(&quot;*&quot; * 40)\r\n        record_audio(slug)\r\n        review_audio(slug)\r\n\r\n\r\n@click.group()\r\ndef cli():\r\n    test_sox_exists()\r\n    pass\r\n\r\n\r\n@cli.command()\r\ndef combine():\r\n    &quot;Combine Segments into single audio file&quot;\r\n    combine_recordings_for_export()\r\n\r\n\r\n@cli.command()\r\ndef record():\r\n    &quot;Record next unrecorded segment&quot;\r\n    if noise_profile_missing():\r\n        record_silent_audio()\r\n    find_and_record_next()\r\n\r\n\r\n@cli.command()\r\ndef silence():\r\n    &quot;Generate noise profile&quot;\r\n    record_silent_audio()\r\n\r\n\r\n\r\n@cli.command()\r\ndef review():\r\n    &quot;Print segments&quot;\r\n\r\n    for slug, text in script_segments.items():\r\n        click.clear()\r\n        click.echo(slug)\r\n        click.echo(&quot;*&quot; * 40)\r\n        click.echo()\r\n        click.echo(text)\r\n        wait_for_input()\r\n\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n    project_prep()\r\n    load_script()\r\n    cli()\r\n</code></pre>\r\n',342,0,0,'CC-BY-SA','python,sox',0,0,1),
(3518,'2022-01-26','Linux Inlaws S01E47: BigBlueButton and NAT',3272,'Our two OAPs discuss running conferencing systems like BigBlueButton behind NAT','<p>In this episode of your favourite FLOSS podcast our two OAPs discuss the challenges of running\r\nconferencing systems like BigBlueButton behind a network address translation\r\n(NAT) configuration, something that the Inlaws have been struggeling (?) with\r\nfor quite some time but now have arrived a solution which might just work :-).\r\nIf you face similar challenges or just want to refresh your knowledge about\r\nintricate network architectures never mind their pitfalls, stay tuned.  All\r\nwill be revealed (hopefully :-). But beware: This show is highly technical and\r\ngeek-only.  Which may come in handy if you\'re not technical but suffer from\r\ninsomnia or similar sleep disorders - this is your show!</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Network Address Translation (NAT): <a href=\"https://en.wikipedia.org/wiki/Network_address_translation\" target=_blank>https://en.wikipedia.org/wiki/Network_address_translation</a></li>\r\n<li>BigBlueButton (BBB): <a href=\"https://github.com/bigbluebutton/bigbluebutton\" target=_blank>https://github.com/bigbluebutton/bigbluebutton</a></li>\r\n<li>TURN server: <a href=\"https://gabrieltanner.org/blog/turn-server\" target=_blank>https://gabrieltanner.org/blog/turn-server</a></li>\r\n<li>STUN and more: <a href=\"https://en.wikipedia.org/wiki/STUN\" target=_blank>https://en.wikipedia.org/wiki/STUN</a></li>\r\n<li>Google TURN servers: <a href=\"https://gist.github.com/sagivo/3a4b2f2c7ac6e1b5267c2f1f59ac6c6b\" target=_blank>https://gist.github.com/sagivo/3a4b2f2c7ac6e1b5267c2f1f59ac6c6b</a></li>\r\n<li>Dehydrated: <a href=\"https://github.com/dehydrated-io/dehydrated\" target=_blank>https://github.com/dehydrated-io/dehydrated</a></li>\r\n<li>WebRTC: <a href=\"https://webrtc.org/getting-started/overview\" target=_blank>https://webrtc.org/getting-started/overview</a></li>\r\n<li>Parallels: <a href=\"https://www.imdb.com/title/tt3479316/?ref_=nv_sr_srsg_0\" target=_blank>https://www.imdb.com/title/tt3479316/?ref_=nv_sr_srsg_0</a></li>\r\n<li>Philip K. Dick\'s Vulcan Hammer: <a href=\"https://en.wikipedia.org/wiki/Vulcan%27s_Hammer\" target=_blank>https://en.wikipedia.org/wiki/Vulcan%27s_Hammer</a></li>\r\n<li>The Ice Road: <a href=\"https://www.imdb.com/title/tt3758814/?ref_=nm_flmg_act_7\" target=_blank>https://www.imdb.com/title/tt3758814/?ref_=nm_flmg_act_7</a></li>\r\n<li>Sorcerer: <a href=\"https://www.imdb.com/title/tt0076740/?ref_=fn_tt_tt_8\" target=_blank>https://www.imdb.com/title/tt0076740/?ref_=fn_tt_tt_8</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','BigBlueButton, Network Address Translation, TURN, STUN, WebRTC, Parallels, Vulcan\'s Hammer, The Ice ',0,0,1),
(3497,'2021-12-28','Jankilators.',1275,'Follow the wail of the janky scissor monster into the muddy flux of headtorch borderlands. ','<p>Three phase alternating current generated from an axial flux alternator.</p>\r\n<p>I did find plans which seem to describe themselves as open. I might get around to posting them at a web site, but that exists much less than other comprehensive banks of searchable information on the internet.</p>\r\n<p>Someone suggested some alternators constructed with as many wooden parts as possible, which makes the whole endeavour more accessible and energy efficient. Thank you HPR new year show, for that.</p>\r\n<p>Wind turbine towers are the difficult part, and obviously dangerous.</p>\r\n<p>Tiny generators are cool to cobble from discarded equipment junk.</p>\r\n<p>A solid axial alternator is easy and robust. They can channel a lot of power if the wires are thick enough. Gears exist.</p>\r\n<p>Pedal, and hang sacks.</p>\r\n',398,0,1,'CC-BY-SA','oscillators,complexity,flux,alternator,3phase,field,trees,sky',0,0,1),
(3502,'2022-01-04','New year Greetings and a short review of my new Juno PC',291,'I just ramble for a few minutes about my new Juno PC','<p>Hi to all HPR listeners this is a short show just to say Hi and a happy New Year to those in HPR land I may not have talked to over the Mumble marathon (and that is most of you). My main news is my new Juno PC which I got just before Christmas and It is a massive upgrade for me from my old Gen 3 i7 PC I was using. In real world tests it is about 5 times faster than my old PC and editing Audio and images is a breeze. I got the Brutus 5000 with a Ryzen 9 5900 CPU 32Gb RAM and a 1TB Nvme SSD. It came pre loaded with Ubuntu 20.04 but I installed Linux Mint 20.2 and after getting the details of the PPA for the Juno Drivers everything is working fine. Ports wise for a tiny PC it is OK but I have added a USB 3 powered Hub with 4 extra ports and in the new year will get one with a few more to help me tidy up the wiring snakes on the desk.</p>\r\n<p>For some reason it no longer sees any bootable USB drives at boot after pressing of the boot menu key so a bit of investigation is needed to get that to work again, but on the whole I am a happy camper.</p>\r\n<p>Well that\'s me for this show short as it was if you want more of my ramblings along with my fellow hosts Moss and Dale pop over to Distrohoppers\' Digest and see what we have been up to, we record a new show about once a month.</p>\r\n<ul>\r\n<li><p><a href=\"https://junocomputers.com/product/brutus-5000/\" class=\"uri\">https://junocomputers.com/product/brutus-5000/</a></p></li>\r\n<li><p><a href=\"https://distrohoppersdigest.blogspot.com/\" class=\"uri\">https://distrohoppersdigest.blogspot.com/</a></p></li>\r\n</ul>\r\n',338,0,0,'CC-BY-SA','Ubuntu, Linux Mint, Juno computers, Ryzen 5900, New Year Greetings',0,0,1),
(3503,'2022-01-05','Configuring Mumble',906,'In this episode we will show you how to connect to the HPR Community Room on Mumble.','<p>\r\nThe complete shownotes are available in <a href=\"/mumble-howto\">our mumble how-to</a>. \r\n</p>\r\n<p>\r\nWhen using Mumble <strong><em>you should always use a microphone and headset</em></strong> positioned close to your mouth but slightly off to the side.\r\n</p>\r\n<p>\r\nThe <a href=\"https://www.mumble.info/downloads/\">Mumble website offers download and install instructions</a> for different operating systems.\r\n</p>\r\n<p>\r\nOnce you have installed the client then connect to the <a href=\"mumble://chatter.skyehaven.net:64738/Hacker%20Public%20Radio?version=1.2.0\">HPR Room on Mumble</a>.\r\n<p>\r\nThere is a first run wizard that will step you through the process of configuring Mumble the first time. This will open up a series of configuration options.\r\n</p>\r\n<p>\r\nIt is <strong>very important</strong> that you set <strong>Push to Talk (PTT)</strong> and you <strong>Disable Text-To-Speech</strong>, as you will disturb the other people in the room if you select the other methods. It may seem to be working fine to you, but it <em>will</em> result in issues for the others.\r\n</p>\r\n<p>\r\nYou are expected to have a digital certificate when connecting to Mumble servers. An automatically created one is usually fine.\r\n</p>\r\n<p>\r\nOnce you have the Mumble client set up we can now start the process of connecting to the <a href=\"mumble://chatter.skyehaven.net:64738/Hacker%20Public%20Radio?version=1.2.0\">HPR Room on Mumble</a>.\r\n</p>\r\n<p>\r\nIf at any time you need to add the HPR server open mumble and press <strong>Server - Connect</strong>, press <strong>Add New...</strong>and enter the following information for the HPR server:\r\n</p>\r\n<ul>\r\n<li>Address: <strong>chatter.skyehaven.net</strong></li>\r\n<li>Port: 64738</li>\r\n<li>Username: <strong><em>Your Username</em></strong></li>\r\n<li>Label: chatter.skyehaven.net</li>\r\n</ul>\r\n<p>\r\nThink about your username a bit as if you register it on the server you will not be able to change it again.\r\n</p>\r\n<p>\r\nBefore connecting to any room it\'s good etiquette to make sure your audio is working correctly. The room <strong>Audio Test</strong> will allow you to speak and the <strong>OpieTheRepeatherBot</strong> will record your speech and after 10 seconds will play it back for you.\r\n</p>\r\n\r\n',30,0,0,'CC-BY-SA','mumble,hpr mumble, new year show',0,0,1),
(3761,'2023-01-02','HPR Community News for December 2022',2695,'HPR Volunteers talk about shows released and comments posted in December 2022','<style>\ntable td.shrink {\n    white-space:nowrap\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.php?id=3739\" target=\"_blank\">3739</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-12-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3739\" target=\"_blank\">Multipactors for the masses.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0398.html\" target=\"_blank\">one_of_spoons</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3740\" target=\"_blank\">3740</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-12-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3740\" target=\"_blank\">Batch File Variables; Nested Batch Files</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.php?id=3741\" target=\"_blank\">3741</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-12-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3741\" target=\"_blank\">HPR Community News for November 2022</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.php?id=3742\" target=\"_blank\">3742</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-12-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3742\" target=\"_blank\">Battery</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.php?id=3743\" target=\"_blank\">3743</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-12-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3743\" target=\"_blank\">HPR 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.php?id=3744\" target=\"_blank\">3744</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-12-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3744\" target=\"_blank\">Advent of code Day 1 - 4</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.php?id=3745\" target=\"_blank\">3745</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-12-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3745\" target=\"_blank\">Pinecil walkthrough</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.php?id=3746\" target=\"_blank\">3746</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-12-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3746\" target=\"_blank\">Cpuinfo</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3747\" target=\"_blank\">3747</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-12-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3747\" target=\"_blank\">Twitter and Dinner with the Humans</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3748\" target=\"_blank\">3748</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-12-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3748\" target=\"_blank\">The Squirrels gift to HPR</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3749\" target=\"_blank\">3749</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-12-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3749\" target=\"_blank\">Making your own parts</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.php?id=3750\" target=\"_blank\">3750</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-12-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3750\" target=\"_blank\">Southern Arizona</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.php?id=3751\" target=\"_blank\">3751</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-12-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3751\" target=\"_blank\">Using Noisetorch</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.php?id=3752\" target=\"_blank\">3752</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-12-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3752\" target=\"_blank\">It only took me 2 years to record using some \'new\' hardware</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0243.html\" target=\"_blank\">Jezra</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3753\" target=\"_blank\">3753</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-12-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3753\" target=\"_blank\">Some thoughts on \"Numeronyms\"</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.php?id=3754\" target=\"_blank\">3754</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-12-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3754\" target=\"_blank\">GOD probably will use a Chromebook</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3755\" target=\"_blank\">3755</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-12-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3755\" target=\"_blank\">Synergy over ssh</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.php?id=3756\" target=\"_blank\">3756</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-12-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3756\" target=\"_blank\">Verify yourself on Mastodon with PGP and Keyoxide</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3757\" target=\"_blank\">3757</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-12-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3757\" target=\"_blank\">Career changes.</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.php?id=3758\" target=\"_blank\">3758</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-12-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3758\" target=\"_blank\">First sysadmin job - war story</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0342.html\" target=\"_blank\">norrist</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3759\" target=\"_blank\">3759</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-12-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3759\" target=\"_blank\">Chatting with dnt.</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.php?id=3760\" target=\"_blank\">3760</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-12-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3760\" target=\"_blank\">Bookwyrm</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 14 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.php?id=3737#comments\" target=\"_blank\">hpr3737</a></strong>\n(2022-11-29) \"<em>Review of KOBO Libra H20 e-reader</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0293.html\" target=\"_blank\">Rho`n</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3737#1\" target=\"_blank\">Comment 1</a>:\nAaron Cocker on 2022-12-05:\n\"Kobo e-readers\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 13 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3740#comments\" target=\"_blank\">hpr3740</a></strong>\n(2022-12-02) \"<em>Batch File Variables; Nested Batch Files</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.php?id=3740#1\" target=\"_blank\">Comment 1</a>:\nHipernike on 2022-09-01:\n\"Forkbomb\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3740#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-09-01:\n\"You are most welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3741#comments\" target=\"_blank\">hpr3741</a></strong>\n(2022-12-05) \"<em>HPR Community News for November 2022</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.php?id=3741#1\" target=\"_blank\">Comment 1</a>:\nZen_floater2 on 2022-12-05:\n\"Freedom VS Free\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3744#comments\" target=\"_blank\">hpr3744</a></strong>\n(2022-12-08) \"<em>Advent of code Day 1 - 4</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.php?id=3744#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2022-12-08:\n\"Fun with Advent of Code (AoC)\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3746#comments\" target=\"_blank\">hpr3746</a></strong>\n(2022-12-12) \"<em>Cpuinfo</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3746#1\" target=\"_blank\">Comment 1</a>:\nzloster on 2022-12-12:\n\"A tool with very detailed information about the cache configuration of the CPUs\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3750#comments\" target=\"_blank\">hpr3750</a></strong>\n(2022-12-16) \"<em>Southern Arizona</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.php?id=3750#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-12-17:\n\"Ajo\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3750#2\" target=\"_blank\">Comment 2</a>:\nbrian-in-ohio on 2022-12-17:\n\"history\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3754#comments\" target=\"_blank\">hpr3754</a></strong>\n(2022-12-22) \"<em>GOD probably will use a Chromebook</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3754#1\" target=\"_blank\">Comment 1</a>:\nBill Dietrich on 2022-12-24:\n\"Twitter\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3756#comments\" target=\"_blank\">hpr3756</a></strong>\n(2022-12-26) \"<em>Verify yourself on Mastodon with PGP and Keyoxide</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">Klaatu</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3756#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-12-27:\n\"I have done this\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3756#2\" target=\"_blank\">Comment 2</a>:\nnorrist on 2022-12-27:\n\"Me too\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3757#comments\" target=\"_blank\">hpr3757</a></strong>\n(2022-12-27) \"<em>Career changes.</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.php?id=3757#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2022-12-27:\n\"Thanks for sharing.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3757#2\" target=\"_blank\">Comment 2</a>:\njanedoc on 2022-12-27:\n\"Thanks for an informative show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3757#3\" target=\"_blank\">Comment 3</a>:\nbinrc on 2022-12-28:\n\"binrc@protonmail.com\"</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://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-December/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-December/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=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on\narchive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to\nthe Internet Archive there are other tasks to perform. We are\nreprocessing and re-uploading shows in the range 871 to 2429 as\nexplained in the Community News show notes released in <a\nhref=\"http://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">May\n2022</a>. We are keeping a running total here to show progress:</p>\n<table>\n<tr>\n<th>\nMonth\n</th>\n<th>\nMonth count\n</th>\n<th>\nRunning total\n</th>\n<th>\nRemainder\n</th>\n</tr>\n<tr>\n<td>\n2022-04\n</td>\n<td>\n130\n</td>\n<td>\n130\n</td>\n<td>\n1429\n</td>\n</tr>\n<tr>\n<td>\n2022-05\n</td>\n<td>\n140\n</td>\n<td>\n270\n</td>\n<td>\n1289\n</td>\n</tr>\n<tr>\n<td>\n2022-06\n</td>\n<td>\n150\n</td>\n<td>\n420\n</td>\n<td>\n1139\n</td>\n</tr>\n<tr>\n<td>\n2022-07\n</td>\n<td>\n155\n</td>\n<td>\n575\n</td>\n<td>\n984\n</td>\n</tr>\n<tr>\n<td>\n2022-08\n</td>\n<td>\n155\n</td>\n<td>\n730\n</td>\n<td>\n829\n</td>\n</tr>\n<tr>\n<td>\n2022-09\n</td>\n<td>\n150\n</td>\n<td>\n880\n</td>\n<td>\n679\n</td>\n</tr>\n<tr>\n<td>\n2022-10\n</td>\n<td>\n155\n</td>\n<td>\n1035\n</td>\n<td>\n524\n</td>\n</tr>\n<tr>\n<td>\n2022-11\n</td>\n<td>\n230\n</td>\n<td>\n1265\n</td>\n<td>\n294\n</td>\n</tr>\n<tr>\n<td>\n2022-12\n</td>\n<td>\n294\n</td>\n<td>\n1559\n</td>\n<td>\n0\n</td>\n</tr>\n</table>\n<p>\n<small><small>Table updated: 2022-12-29 20:54:45</small></small>\n</p>\n<h3>\nThanks to all 51 HPR contributors in 2022!\n</h3>\n<p>\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/correspondents/0198.html\">Ahuka</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0268.html\">Andrew\nConway</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0300.html\">Mr. Young</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0246.html\">Beeza</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0288.html\">beni</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0406.html\">binrc</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0396.html\">BlacKernel</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0326.html\">Brian\nin Ohio</a>,\n</li>\n<li>\n<a href=\"https://hackerpublicradio.org/correspondents/0380.html\">Carl</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0413.html\">CCHits.net\nTeam</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0407.html\">Celeste</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0152.html\">Claudio\nMiranda</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0382.html\">Daniel\nPersson</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave\nMorriss</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0194.html\">Deltaray</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0399.html\">dnt</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0309.html\">folky</a>,\n</li>\n<li>\n<a href=\"https://hackerpublicradio.org/correspondents/0410.html\">Hipernike</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0269.html\">Honkeymagoo</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0159.html\">HPR\nVolunteers</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0369.html\">Jeroen\nBaten</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0243.html\">Jezra</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0129.html\">JWP</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken\nFallon</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0414.html\">Kinghezy</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0078.html\">Klaatu</a>,\n</li>\n<li>\n<a href=\"https://hackerpublicradio.org/correspondents/0111.html\">knightwise</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0403.html\">Lee</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0405.html\">Lurking\nPrion</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0412.html\">m0dese7en</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0401.html\">Mechatroniac</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0384.html\">monochromec</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0342.html\">norrist</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0398.html\">one_of_spoons</a>,\n</li>\n<li>\n<a href=\"https://hackerpublicradio.org/correspondents/0036.html\">operat0r</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0411.html\">Paul\nJ</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0128.html\">pokey</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0293.html\">Rho`n</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0404.html\">Sarah</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0391.html\">Some\nGuy On The Internet</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0408.html\">Stache_AF</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0402.html\">takov751</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0392.html\">timttmy</a>,\n</li>\n<li>\n<a href=\"https://hackerpublicradio.org/correspondents/0338.html\">Tony\nHughes AKA TonyH1212</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0394.html\">Trey</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0389.html\">TrumpetJohn</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0364.html\">Tuula</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0196.html\">Windigo</a>,\n<a href=\"https://hackerpublicradio.org/correspondents/0377.html\">Zen_Floater2</a>.\n</li>\n</ul>\n</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3504,'2022-01-06','James Webb Space Telescope',2718,'Andrew and Dave watch the launch of the JWST','<h2 id=\"overview\">Overview</h2>\r\n<p>On Christmas Day 2021 at 12:20 UTC the James Webb Space Telescope was launched. This is the largest telescope ever sent into space and the project has been delayed for many years. The entire astronomical community was very nervous about the launch and about the phase that will follow as the telescope is set up for use.</p>\r\n<p><a href=\"https://hackerpublicradio.org/correspondents/0268.html\" title=\"Andrew Conway\">Andrew Conway</a> was previously a professional Astronomer, and <a href=\"https://hackerpublicradio.org/correspondents/0225.html\" title=\"Dave Morriss\">Dave</a> is very interested in the subject as an amateur. They got together on Mumble to witness the launch, and the dialogue was recorded and is presented here.</p>\r\n<h2 id=\"the-jwst\">The JWST</h2>\r\n<p>Quote from <a href=\"https://en.wikipedia.org/wiki/James_Webb_Space_Telescope\" title=\"James Webb Space Telescope\">Wikipedia</a> (a page that is being updated as the project proceeds):</p>\r\n<blockquote>\r\n<p>The James Webb Space Telescope (JWST) is a space telescope developed by NASA with contributions from the European Space Agency (ESA), and the Canadian Space Agency (CSA). The telescope is named after James E. Webb, who was the administrator of NASA from 1961 to 1968 and played an integral role in the Apollo program. It is intended to succeed the Hubble Space Telescope as NASA’s flagship mission in astrophysics. JWST was launched 25 December 2021 on Ariane flight VA256. It is designed to provide improved infrared resolution and sensitivity over Hubble, and will enable a broad range of investigations across the fields of astronomy and cosmology, including observations of some of the most distant events and objects in the Universe such as the formation of the first galaxies, and allowing detailed atmospheric characterization of potentially habitable exoplanets.</p>\r\n<p>JWST’s primary mirror, the Optical Telescope Element, consists of 18 hexagonal mirror segments made of gold-plated beryllium which combine to create a 6.5 meter (21 ft 4 inch) diameter mirror – considerably larger than Hubble’s 2.4 m (7.9 ft) mirror. Unlike Hubble, which observes in the near ultraviolet, visible, and near infrared (0.1–1.0 μm) spectra, JWST will observe in a lower frequency range, from long-wavelength visible light (red) through mid-infrared (0.6–28.3 μm). This will enable it to observe high-redshift objects that are too old and too distant for Hubble. The telescope must be kept very cold to observe in the infrared without interference, so it will be deployed in space near the Sun–Earth L2 Lagrange point, about 1.5 million kilometers (930,000 mi) from Earth. A large sunshield made of silicon- and aluminum-coated Kapton will keep its mirror and instruments below 50 K (−223 °C; −370 °F).</p>\r\n<p>The NASA Goddard Space Flight Center (GSFC) in Maryland managed the development and the Space Telescope Science Institute is operating JWST. The prime contractor was Northrop Grumman.</p>\r\n<p>Development began in 1996 for a launch that was initially planned for 2007 with a US$500 million budget. There were many delays and cost overruns, including a major redesign in 2005, a ripped sunshield during a practice deployment, a recommendation from an independent review board, the COVID-19 pandemic, issues with the Ariane 5 rocket and the telescope itself, and communications issues between the telescope and the launch vehicle. Concerns among the involved scientists and engineers about the launch and deployment of the telescope have been well-described.</p>\r\n<p>Construction was completed in late 2016, when an extensive testing phase began. JWST was launched 12:20 UTC 25 December 2021 by an Ariane 5 launch vehicle from Kourou, French Guiana and was released from the upper stage 27 minutes later. The telescope was confirmed to be receiving power, and as of December 2021 is traveling to its target destination.</p>\r\n</blockquote>\r\n<h2 id=\"witnessing-the-launch\">Witnessing the launch</h2>\r\n<p>Andrew and Dave came up with the idea of watching the launch and talking about it on Mumble. Although this was not originally planned, the audio was recorded, and is included here.</p>\r\n<p><small>Note: Dave’s audio had a background hum which has been reduced a little with Audacity’s <em>notch filter</em>. Hopefully it’s not too distracting.</small></p>\r\n<p>We were puzzled that the altitude of the final stage of the rocket plus telescope decreased during launch. See the link below to a YouTube episode from Anton Petrov explaining what was going on.</p>\r\n<p>In the context of orbital mechanics, Dave spoke of another mission which is heading to Mercury but passing by inner planets to adjust speed. The name couldn’t be recalled at the time, but it was <a href=\"https://en.wikipedia.org/wiki/BepiColombo\" title=\"BeliColombo mission to Mercury\">BepiColombo</a> which is taking a 7-year path to its destination.</p>\r\n<h2 id=\"deployment-after-launch\">Deployment after launch</h2>\r\n<p>At the time of preparing these notes (2022-01-02) the JWST is en route to the (Sun-Earth) <a href=\"https://en.wikipedia.org/wiki/Lagrange_point\" title=\"Lagrange point\">L2</a> point, about 1 million miles (1.5 million kilometres) from Earth. Along the way it is preparing itself for use, deploying the features which were folded up or stowed away when it was being launched. See the <a href=\"https://www.jwst.nasa.gov/content/webbLaunch/deploymentExplorer.html\" title=\"JWST Deployment Explorer\"><em>deployment explorer</em></a> site for details of what is happening.</p>\r\n<p>There are enormous amounts of information about this project on the web, some examples of which are linked below. Searching with your favourite search engine will certainly reveal more.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Wikipedia article on the <a href=\"https://en.wikipedia.org/wiki/James_Webb_Space_Telescope\">James Webb Space Telescope</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=7nT7JGZMbtM\">James Webb Space Telescope Launch — Official NASA Broadcast</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=_abdV-HtEJQ\">YouTube video explaining why the JWST lost altitude during launch</a></li>\r\n<li>Wikipedia article on <a href=\"https://en.wikipedia.org/wiki/Lagrange_point\">Lagrange points</a></li>\r\n<li>NASA <a href=\"https://www.jwst.nasa.gov/content/webbLaunch/deploymentExplorer.html\">JWST Deployment Explorer</a></li>\r\n<li>Wikipedia article on <a href=\"https://en.wikipedia.org/wiki/BepiColombo\">BepiColombo mission</a></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','astronomy,telescope,rocket launch,JWST,NASA,ESA,CSA',0,0,1),
(3506,'2022-01-10','HPR CONTEST 2022 01',119,'I give away 50$ prize !','<h3 id=\"upload-today\">Upload today!</h3>\r\n<p><a href=\"https://hackerpublicradio.org/calendar.php\" class=\"uri\">https://hackerpublicradio.org/calendar.php</a></p>\r\n<h3 id=\"rules\">RULES:</h3>\r\n<ul>\r\n<li>only new host or existing host interviewing a 3rd party</li>\r\n<li>I pick the winner</li>\r\n<li>don\'t abuse the system to win the prize ;P</li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','contest',0,0,1),
(3529,'2022-02-10','Linux Inlaws S01E48: Year Two of the Five Year Plan',3127,'The two ageing heroes discuss the past year in review','<p>Right into the third year of the first five-year plan our two ageing heroes\r\ndiscuss the past year in review (blatantly stealing this concept from other\r\npopular podcasts), focussing on the hotter episodes of second year and\r\nprogress with increasing the number of active listeners from two to five and\r\nbeyond. Also, major fuck-ups and lessons learned from them are revealed\r\nincluding some ranting about badly designed and implemented software never\r\nmind documentation.</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Shameless self-promoting link to the Redis presentation at the 2021 MiniDebConf in Regensburg (among other things): <a href=\"https://meetings-archive.debian.net/pub/debian-meetings/2021/MiniDebConf-Regensburg\" target=_blank>https://meetings-archive.debian.net/pub/debian-meetings/2021/MiniDebConf-Regensburg</a></li>\r\n<li>Grumpy Old Coders: <a href=\"https://grumpy-old-coders.org\" target=_blank>https://grumpy-old-coders.org</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','2021, review, communism, five year plan, Grumpy Old Coders, MiniDebConf',0,0,1),
(3514,'2022-01-20','Hacking Stories: Soft Drink',1270,'I talk about old pentest stories','<p>Mass unlock/powershell</p>\r\n<p>Link to <a href=\"https://github.com/freeload101/SCRIPTS/blob/ab7f96678e488f7ac6209ac45d4cfe8ca090920b/Windows_Powershell_ps/NOTES.ps1#L175\">NOTES.ps1</a></p>\r\n',36,0,1,'CC-BY-SA','hacking stories',0,0,1),
(3535,'2022-02-18','template Haskell',2849,'turturto talks how she\'s using template Haskell to cut down amount of code she writes','<p>There\'s certain amount of boilerplate code in my game that keeps repeating time after time. I can\'t quite remove it, but I can hide it with template haskell.</p>\r\n<h2 id=\"newtype-recap\">newtype recap</h2>\r\n<p>I\'ll be using <code>PlanetName</code> as an example throughout the show. <code>newtype</code> is Haskell\'s way of defining a new type, that wraps around an old type. This lets us to give better meaning to the wrapped type. Instead of talking about <code>Text</code>, we can talk about <code>PlanetName</code> and we won\'t accidentally mix it up with <code>StarName</code> or <code>ContentsOfAlexandrianLibrary</code>. It comes with no performance cost at all, as the wrapping is removed during the compilation.</p>\r\n<p>Below is how our <code>PlanetName</code> is defined:</p>\r\n<pre><code>newtype PlanetName\r\n   = MkPlanetName {_unPlanetName :: Text}\r\n   deriving (Show, Read, Eq)\r\n</code></pre>\r\n<p>It has:</p>\r\n<ul>\r\n<li>type constructor <code>PlanetName</code></li>\r\n<li>data constructor <code>MkPlanetName</code></li>\r\n<li>single field <code>_unPlanetName</code></li>\r\n<li>type for that field <code>Text</code></li>\r\n<li>deriving clause, telling compiler to automatically generate <code>Show</code>, <code>Read</code> and <code>Eq</code> instances</li>\r\n</ul>\r\n<p>If it were wrapping a <code>Integer</code>, we would add <code>Ord</code> and <code>Num</code> instances too.</p>\r\n<p>These instances give us some basic functions that we can use to turn out value into <code>String</code> and back or compare two values to see if they\'re equal or not. <code>Ord</code> lets us compare their relative size and <code>Num</code> adds some basic arithmetics like addition and subtraction.</p>\r\n<p>Remember, type constructor is used when talking about the type (function signatures, declaring type of a value, etc.), while data constructor is used to create values of the type (\"Earth\", \"Mars\", etc.). <code>isPlanet :: PlanetName -&gt; Bool</code> states that <code>isPlanet</code> function takes one parameter of type <code>PlanetName</code> and returns value of type <code>Bool</code>. <code>planet = MkPlanetName \"Earth\"</code> creates a new value <code>planet</code>, that has type <code>PlanetName</code> and which value is <code>MkPlanetName \"Earth\"</code>.</p>\r\n<h2 id=\"boilerplate\">Boilerplate</h2>\r\n<p>When <code>PlanetName</code> is defined, I need to add some instances by hand: <code>IsString</code>, <code>ToJSON</code>, <code>FromJSON</code>, <code>PersistField</code> and <code>PersistFieldSql</code>.</p>\r\n<p><code>IsString</code> lets me use string literals in code, without having to call the data constructor. Compiler is smart enough to infer from context if string I typed should be <code>PlanetName</code> or something else.</p>\r\n<p><code>ToJSON</code> and <code>FromJSON</code> are used to turn value to and from json for transferring back and forth between client and server. In json our value is just simple string, but we still need to program that transformation.</p>\r\n<p><code>PersistFieldSql</code> tells Persistent (database layer I\'m using) what type of database field should be created to hold this data in database.</p>\r\n<p><code>PersistField</code> contains functions for serializing our value to database and loading it from there.</p>\r\n<p>Below is full code that I want to abstract out as much as I can:</p>\r\n<pre><code>newtype PlanetName\r\n   = MkPlanetName {_unPlanetName :: Text}\r\n   deriving (Show, Read, Eq)\r\n\r\ninstance IsString PlanetName where\r\n   fromString = (MkPlanetName . fromString)\r\n\r\ninstance ToJSON PlanetName where\r\n   toJSON = (toJSON . _unPlanetName)\r\n\r\ninstance FromJSON PlanetName where\r\n   parseJSON = (withText &quot;PlanetName&quot;) (return . MkPlanetName)\r\n\r\ninstance PersistField PlanetName where\r\n   toPersistValue (MkPlanetName s) = PersistText s\r\n   fromPersistValue (PersistText s) = (Right $ MkPlanetName s)\r\n   fromPersistValue _ = Left &quot;Failed to deserialize&quot;\r\n\r\ninstance PersistFieldSql PlanetName where\r\n   sqlType _ = SqlString\r\n</code></pre>\r\n<h2 id=\"template-haskell\">Template Haskell</h2>\r\n<p>Template Haskell is an extension that adds metaprogramming capabilities to Haskell. One can write function that generates Haskell code and call it in appropriate place in source file. During compilation the function gets executed and resulting code injected in source file. After this source file is compiled normally. If you have used lisp macros, this is the similar thing.</p>\r\n<h2 id=\"generating-the-code\">Generating the code</h2>\r\n<p>We want a function that can be called like <code>$(makeDomainType \"PlanetName\" \'\'Text)</code> and it will create all the boiler plate for us.</p>\r\n<p>The function is show below:</p>\r\n<pre><code>makeDomainType :: String -&gt; Name -&gt; Q [Dec]\r\nmakeDomainType name fType = do\r\n    tq &lt;- reify fType\r\n    case tq of\r\n        TyConI (DataD _ tName _ _ _ _) -&gt;\r\n            selectDomainType name tName\r\n        _ -&gt; do\r\n            Language.Haskell.TH.reportError &quot;Only simple types are supported&quot;\r\n            return []\r\n</code></pre>\r\n<p><code>reify</code> is interesting function. When called during compile time and given a name, it\'ll figure what the name refers to and construct datastructure that contains relevant information about the thing. If you were to give it name of a function, you would have access to code inside of the function and could introspect it.</p>\r\n<p>Here we\'re using <code>tq &lt;- reify fType</code> to find out what kind of type our code should wrap. Code uses pattern matching to match <code>TyConI (DataD _ tName _ _ _ _)</code>. This is referring to a type constructor. In all other cases (more complex types, functions and so on), code reports and error.</p>\r\n<p>Since code should support different types of types and the respective generated code differs, next there\'s check to find out what kind of code to generate:</p>\r\n<pre><code>selectDomainType :: String -&gt; Name -&gt; Q [Dec]\r\nselectDomainType name fType\r\n    | fType == &#39;&#39;Text = makeTextDomainType name\r\n    | fType == &#39;&#39;Int  = makeIntDomainType name\r\n    | otherwise = do\r\n                    Language.Haskell.TH.reportError &quot;Unsupported type&quot;\r\n                    return []\r\n</code></pre>\r\n<p>This uses guard clause to check if <code>fType</code> is <code>Text</code> or <code>Int</code> and call respective function to generate it. Again, if there\'s no match, code reports an error.</p>\r\n<p>I could have written a function that generates all the code, but that would have been pretty long and hard to maintain. Instead of that, I opted to split generation in parts. <code>makeTextDomainType</code> calls these functions, one at a time and combines the results together to form the final code to be generated.</p>\r\n<pre><code>makeTextDomainType :: String -&gt; Q [Dec]\r\nmakeTextDomainType name = do\r\n    td &lt;- makeNewTypeDefinition name &#39;&#39;Text\r\n    si &lt;- makeIsStringInstance name\r\n    tj &lt;- makeToJSONInstance name\r\n    fj &lt;- makeFromJSONInstanceForText name\r\n    mp &lt;- makePersistFieldInstanceForText name\r\n    mps &lt;- makePersistFieldSqlInstance name &#39;&#39;Text\r\n    return $ td ++ si ++ tj ++ fj ++ mp ++ mps\r\n</code></pre>\r\n<p>Some of the functions called are specific for <code>Text</code> type, while others are written to work with <code>Text</code> and <code>Int</code>. The latter ones have extra parameter passed in to indicate which type of code should be generated.</p>\r\n<h2 id=\"actual-code-generation\">Actual code generation</h2>\r\n<p>Now we\'re getting into actual code generation. First one is <code>makeNewTypeDefinition</code>, which generates code for <code>newtype</code>.</p>\r\n<pre><code>makeNewTypeDefinition :: String -&gt; Name -&gt; Q [Dec]\r\nmakeNewTypeDefinition name fType = do\r\n    deriv &lt;- derivClausForNewType fType\r\n    return $\r\n        [NewtypeD []\r\n                 (mkName name)\r\n                 []\r\n                 Nothing\r\n                 (RecC (mkName $ &quot;Mk&quot; ++ name)\r\n                       [(mkName $ &quot;_un&quot; ++ name, Bang NoSourceUnpackedness NoSourceStrictness, (ConT fType))])\r\n                 [ DerivClause Nothing deriv]]\r\n</code></pre>\r\n<p>First step is to call <code>derivClausForNewType</code> to create deriving clause (we\'ll look into that just in a bit). The major part of the code consist of generating newtype definition. There\'s two ways for code generation: quoting (which works very similar to lisp macros) and writing abstract syntax tree by hand. No matter what I tried, I couldn\'t get the quoting work for newtype, so I had to write the AST out by hand. And as you can see, it\'s not particularly pleasant experience. Constructor names are short and cryptic and there\'s plenty of them there. Some major parts:</p>\r\n<ul>\r\n<li><code>NewtypeD</code> starts definition for newtype</li>\r\n<li><code>(mkName name)</code> creates <code>Name</code> for the newtype, <code>PlanetName</code> in our example</li>\r\n<li><code>RecC</code> record constuctor. We have a single record in our newtype, remember?</li>\r\n<li><code>DerivClause</code> deriving clause, which istructs compiler to autogenerate some useful instances for us</li>\r\n</ul>\r\n<p>And <code>RecC</code> takes a bunch of parameters to guide what kind of record we\'re actually creating:</p>\r\n<ul>\r\n<li><code>(mkName $ \"Mk\" ++ name)</code> creates <code>Name</code> for our record constructor, <code>MkPlanetName</code> in our case</li>\r\n<li>then there\'s a list of tuples defining fields of constructor, which has only one element in our case</li>\r\n<li>first is name of the field <code>mkName $ \"_un\" ++ name</code>, which is <code>_unPlanetName</code> in our case</li>\r\n<li><code>Bang</code> controls source packedness (that I don\'t know what it really is) and strictness (when value should be computed)</li>\r\n<li>finally, <code>ConT fType</code> creates type constructor call, indicating type of the field: <code>Text</code> in our case</li>\r\n</ul>\r\n<p>That\'s quite lot to write and keep track of. It\'s especially tedious to come back to code and figure out what it is exactly doing.</p>\r\n<p>Lets not forget our deriving clause:</p>\r\n<pre><code>derivClausForNewType :: Name -&gt; Q [Type]\r\nderivClausForNewType fType\r\n    | fType == &#39;&#39;Text = return $ (ConT . mkName) &lt;$&gt; [ &quot;Show&quot;, &quot;Read&quot;, &quot;Eq&quot; ]\r\n    | fType == &#39;&#39;Int = return $ (ConT . mkName) &lt;$&gt; [ &quot;Show&quot;, &quot;Read&quot;, &quot;Eq&quot;, &quot;Ord&quot;, &quot;Num&quot; ]\r\n    | otherwise = do Language.Haskell.TH.reportError &quot;Unsupported type&quot;\r\n                     return []\r\n</code></pre>\r\n<p>Again we\'re using guard to check if we\'re working with <code>Text</code> or <code>Int</code> and in any other case signal an error. <code>&lt;$&gt;</code> is used to call <code>(ConT . mkName)</code> function to elements in list of strings, getting back a list of type constructors.</p>\r\n<p>Next step, we create <code>IsString</code> instance for turning string literals into our domain type.</p>\r\n<pre><code>makeIsStringInstance :: String -&gt; Q [Dec]\r\nmakeIsStringInstance name = do\r\n    [d|instance IsString $(conT $ mkName name) where\r\n            fromString = $(conE $ mkName $ &quot;Mk&quot; ++ name) . fromString|]\r\n</code></pre>\r\n<p>Here I could get quoting to work. In the example, everything inside of <code>[d| ... |]</code> is quoted literally, ie. I don\'t have to bother with AST, but can just write in plain Haskell what I want the result to be. <code>$</code> that is immediately followed with another symbol is used to unquote. <code>$(conT $ mkName name)</code> executes <code>conT $ mkName name</code> and splices result inside the quote. Because <code>name</code> is a <code>String</code>, we can create a new <code>String</code> by appending <code>\"Mk\"</code> at the start of it. This creates our data constructor <code>MkPlanetName</code>. Notice how we use <code>conT</code> when creating a type constructor and <code>conE</code> for applying data constructor.</p>\r\n<p>For transforming our domain type to and from json we need <code>ToJSON</code> and <code>FromJSON</code> instances. Generating them is very similar than generating <code>IsString</code> instance, but I have included them below for sake of completeness.</p>\r\n<pre><code>makeToJSONInstance :: String -&gt; Q [Dec]\r\nmakeToJSONInstance name = do\r\n    [d|instance ToJSON $(conT $ mkName name) where\r\n            toJSON = toJSON . $(varE $ mkName $ &quot;_un&quot; ++ name)|]\r\n\r\nmakeFromJSONInstanceForText :: String -&gt; Q [Dec]\r\nmakeFromJSONInstanceForText name = do\r\n    [d|instance FromJSON $(conT $ mkName name) where\r\n            parseJSON =\r\n                withText name\r\n                    (return . $(conE $ mkName $ &quot;Mk&quot; ++ name))|]\r\n</code></pre>\r\n<p>Next we\'ll take serializing to and from database. Since Persistent takes care of the details, it\'s enough that we have two instances that interface with Persistent. First one of them is <code>PersistField</code> as show below:</p>\r\n<pre><code>makePersistFieldInstanceForText :: String -&gt; Q [Dec]\r\nmakePersistFieldInstanceForText name = do\r\n    let constName = mkName $ &quot;Mk&quot; ++ name\r\n        constPatt = conP constName [varP $ mkName &quot;s&quot;]\r\n        pTextPatt = conP (mkName &quot;PersistText&quot;) [varP $ mkName &quot;s&quot;]\r\n    [d|instance PersistField $(conT $ mkName name) where\r\n            toPersistValue $constPatt =\r\n                PersistText s\r\n\r\n            fromPersistValue $pTextPatt =\r\n                Right $ $(conE constName) s\r\n\r\n            fromPersistValue _ =\r\n                Left &quot;Failed to deserialize&quot;|]\r\n</code></pre>\r\n<p>This has more code into it as the type class requires us to implement three functions. Imagine how tedious this would be to write out as plain AST. But thanks to quoting, we can write most of the code as it were regular Haskell and just splice in the parts that vary.</p>\r\n<p>First notable part in it is <code>constPatt = conP constName [varP $ mkName \"s\"]</code>, which creates a pattern used in pattern matching. When <code>toPersistValue</code> is called with <code>MkPlanetName s</code> as parameter, our pattern matches and we have access to <code>s</code>. When then call data constructor <code>PersistText s</code> and let Persistent to save this newly created value into database.</p>\r\n<p>Second pattern in the code is <code>conP (mkName \"PersistText\") [varP $ mkName \"s\"]</code> and we use it in <code>fromPersistValue</code> function. So when that function is called with <code>PersistText s</code>, our pattern matches and we have access to <code>s</code>. Which we then use to call <code>MkPlanetName s</code> to construct our domain type. If <code>fromPersistValue</code> would be called with something else, say numeric value from database, <code>fromPersistValue _</code> pattern matches and we\'ll report an error. This normally shouldn\'t happen, but it\'s good practice to always cover all patterns, otherwise we get a nasty runtime exception and whole program grinds to halt.</p>\r\n<p>Last piece in our long puzzle is <code>PersistFieldSql</code>, which tells Persistent the type of the backing field in database.</p>\r\n<pre><code>makePersistFieldSqlInstance :: String -&gt; Name -&gt; Q [Dec]\r\nmakePersistFieldSqlInstance name fType = do\r\n    let typeName = mkName name\r\n    let backingType = selectBackingSqlType fType\r\n    [d|instance PersistFieldSql $(conT typeName) where\r\n            sqlType _ = $backingType|]\r\n\r\nselectBackingSqlType :: Name -&gt; ExpQ\r\nselectBackingSqlType fType\r\n    | fType == &#39;&#39;Text = conE $ mkName &quot;SqlString&quot;\r\n    | fType == &#39;&#39;Int  = conE $ mkName &quot;SqlInt64&quot;\r\n    | otherwise = do Language.Haskell.TH.reportError &quot;Unsupported type&quot;\r\n                     return $ ConE $ mkName &quot;SqlString&quot;\r\n</code></pre>\r\n<p>This is probably starting to look familiar to you by now. We create instance of <code>PersistFieldSql</code> for our domain type. For <code>Text</code> we want to save data as <code>SqlString</code> and for <code>Int</code> we use <code>SqlInt64</code>. The actual, concrete and definite, column type is actually selected by Persistent based on this information. Persistent supports different kinds of databases, so it\'ll take care of mapping this information for the actual database product we\'re using.</p>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>Using template Haskell can cut down amount of boiler plate code. It also lets you create new abstractions that might not be possible with the tools offered by regular Haskell. All this is nice until things don\'t work as planned and you have to figure out why. Debugging complicated template Haskell, especially if written by somebody else, can be tedious.</p>\r\n<p>As usual, if you have any questions, comments or feedback, feel free to reach out for me via email or in fediverse where I\'m <code>Tuula@tech.lgbt</code>. Or even better, record your own episode telling us where you use template Haskell or why did you choose not to use it at all.</p>\r\n<p>ad astra!</p>\r\n',364,0,0,'CC-BY-SA','haskell, metaprogramming, template haskell',0,0,1),
(3516,'2022-01-24','Rant about RX',1303,'This is a rant mostly about prescriptions and health care','<p>It\'s a rant mostly about prescriptions and health care</p>\r\n',36,100,1,'CC-BY-SA','rant',0,0,1),
(3507,'2022-01-11','USB Turntable fix and sound journey',528,'USB Turntable fix and sound journey with arecord, asound and ffmpeg','<p>Partial list of albums</p>\r\n<ul>\r\n<li>Journey - Frontiers</li>\r\n<li>Journey - Evolution</li>\r\n<li>Journey - Greatest Hits</li>\r\n<li>Journey - Departure</li>\r\n<li>Chicago - 2 albums - unknown titles</li>\r\n<li>John Denver - Rocky Mountain Christmas</li>\r\n<li>Inside Star Trek (1976)\r\n<ul>\r\n<li>SIDE I Inside Star Trek Star Trek Theme William Shatner Meets Captain Kirk The Origin of Spock Sarek\'s Son Spock The Questor Affair</li>\r\n<li>SIDE II The Enterprise Runs Aground McCoy\'s Rx for Life The Star Trek Philosophy Asimov\'s World of Science Fiction A Letter From a Network Censor The Star Trek Dream Ballad I/Ballad II)*</li>\r\n</ul></li>\r\n</ul>\r\n<p><em>Inside Star Trek album: Cover</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_001.png\"><img\r\nsrc=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_001_thumbnail.png\"\r\nalt=\"Inside Star Trek album: Cover\" /></a> <br/><small><small><em>Click the\r\nthumbnail to see the full-sized image</em></small></small> -  -  </p>\r\n<p><em>Inside Star Trek album: Contents</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_002.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_002_thumbnail.png\" alt=\"Inside Star Trek album: Contents\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small> -  - </p>\r\n<p>I found a turntable at the thrift store, and the spindle ran, but the platter did not. The belt had slipped off, and here is the fix.</p>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/watch?app=desktop&amp;v=rXkOoaIVsvE\" class=\"uri\">https://www.youtube.com/watch?app=desktop&amp;v=rXkOoaIVsvE</a></li>\r\n</ul>\r\n<p><em>How to remove platter</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_003.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_003_thumbnail.png\" alt=\"How to remove platter\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small> -  - </p>\r\n<p><em>Belt placement</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_004.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3507/hpr3507/image_004_thumbnail.png\" alt=\"Belt placement\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small> -  - </p>\r\n<h2 id=\"routing-audio-from-a-usb-turntable-to-hdmi-using-a-raspberry-pi\">Routing Audio from a USB Turntable to HDMI using a Raspberry Pi</h2>\r\n<ul>\r\n<li><a href=\"https://www.rickmakes.com/routing-audVmmsio-from-a-usb-turntable-to-hdmi-using-a-raspberry-pi\" class=\"uri\">https://www.rickmakes.com/routing-audVmmsio-from-a-usb-turntable-to-hdmi-using-a-raspberry-pi</a></li>\r\n</ul>\r\n<p>Send input to output</p>\r\n<pre><code>alsaloop -t 500000 -C hw:CARD=CODEC,DEV=0 -P default:CARD=b1</code></pre>\r\n<h2 id=\"alsaloop-man-page\">alsaloop man page</h2>\r\n<ul>\r\n<li><p><a href=\"https://linux.die.net/man/1/alsaloop\" class=\"uri\">https://linux.die.net/man/1/alsaloop</a></p>\r\n<p>-t &lt;usec&gt; | --tlatency=&lt;usec&gt; Requested latency in usec (1/1000000sec).</p></li>\r\n</ul>\r\n<p>Parameter b1 is found by</p>\r\n<pre><code>pi@retropie:~ $ aplay -l\r\n**** List of PLAYBACK Hardware Devices ****\r\ncard 0: b1 [bcm2835 HDMI 1], device 0: bcm2835 HDMI 1 [bcm2835 HDMI 1]</code></pre>\r\n<h2 id=\"raspberry-pi-as-a-usb-audio-capture-device\">Raspberry Pi as a USB audio capture device</h2>\r\n<ul>\r\n<li><p><a href=\"https://scruss.com/blog/2012/11/20/raspberry-pi-as-a-usb-audio-capture-device\" class=\"uri\">https://scruss.com/blog/2012/11/20/raspberry-pi-as-a-usb-audio-capture-device</a></p>\r\n<p>arecord -D \'pulse\' -V stereo -c 2 -f dat -d 900 out.wav</p>\r\n<p>arecord -D \'hw:CARD=CODEC,DEV=0\' -V stereo -c 2 -f dat -d 900 out.wav</p></li>\r\n</ul>\r\n<p>Used <code>hw:CARD=CODEC,DEV=0</code> derived from \'arecord -L\'</p>\r\n<pre><code>hw:CARD=CODEC,DEV=0\r\nUSB Audio CODEC, USB Audio\r\nDirect hardware device without any conversions</code></pre>\r\n<h2 id=\"arecord-man-page\">arecord man page</h2>\r\n<ul>\r\n<li><a href=\"https://linux.die.net/man/1/arecord\" class=\"uri\">https://linux.die.net/man/1/arecord</a></li>\r\n</ul>\r\n<pre><code>   -D, --device=NAME\r\n    Select PCM by name\r\n    -V, --vumeter=TYPE\r\n    Specifies the VU-meter type, either stereo or mono. The stereo VU-meter is available only for 2-channel stereo samples with interleaved format.\r\n    -c, --channels=#\r\n    The number of channels. The default is one channel. Valid values are 1 through 32.\r\n    -f --format=FORMAT\r\n    Sample format\r\n    Recognized sample formats are: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM SPECIAL S24_3LE S24_3BE U24_3LE U24_3BE S20_3LE S20_3BE U20_3LE U20_3BE S18_3LE S18_3BE U18_3LE\r\n    Some of these may not be available on selected hardware\r\n    The available format shortcuts are:\r\n\r\n    -f cd (16 bit little endian, 44100, stereo) [-f S16_LE -c2 -r44100]\r\n    -f cdr (16 bit big endian, 44100, stereo) [-f S16_BE -c2 -f44100]\r\n    -f dat (16 bit little endian, 48000, stereo) [-f S16_LE -c2 -r48000]</code></pre>\r\n<h2 id=\"recording-to-flac\">Recording to FLAC</h2>\r\n<ul>\r\n<li><a href=\"https://unix.stackexchange.com/questions/583892/how-can-one-record-mic-audio-straight-to-a-flac-file\" class=\"uri\">https://unix.stackexchange.com/questions/583892/how-can-one-record-mic-audio-straight-to-a-flac-file</a></li>\r\n</ul>\r\n<p>How can one record mic audio straight to a FLAC file?</p>\r\n<pre><code>ffmpeg -f alsa -ar 48000 -ac 1 -i hw:0 testfile.flac</code></pre>\r\n<h3 id=\"took-out-the--ac-1-which-downmixed-the-input-to-mono\">Took out the \"-ac 1\", which downmixed the input to mono</h3>\r\n<p>Change hw:0 to hw:2 based on</p>\r\n<pre><code>pi@retropie:~/vinyl $ arecord -l\r\n**** List of CAPTURE Hardware Devices ****\r\ncard 2: USB20 [AV TO USB2.0], device 0: USB Audio [USB Audio]\r\nSubdevices: 1/1\r\nSubdevice #0: subdevice #0\r\n\r\nffmpeg -f alsa -ar 48000 -i hw:2 testfile_stereo.flac</code></pre>\r\n<h2 id=\"ffmpeg-audio-channel-manipulation\">FFmpeg Audio Channel Manipulation</h2>\r\n<ul>\r\n<li><a href=\"https://trac.ffmpeg.org/wiki/AudioChannelManipulation\" class=\"uri\">https://trac.ffmpeg.org/wiki/AudioChannelManipulation</a></li>\r\n</ul>\r\n',318,0,0,'CC-BY-SA','Vinyl, album, Vinyl album, record album, aplay, arecord, alsaloop, ffmpeg,retro, USB turntable',0,0,1),
(3511,'2022-01-17','Podman like Vagrant',1160,'This is how I use Podman on the desktop','<p>I used to use Vagrant to spin up minimal virtual machines when I needed to test code on a different distro than what I ran. Lately I\'ve switched to <a href=\"https://podman.io\" target=\"_blank\">Podman</a>.</p>\r\n\r\n<p>Install Podman with your distribution\'s package manager.</p>\r\n\r\n<p>Configure it:</p>\r\n\r\n<pre><code>\r\n$ sudo --add-subuids 200000-265536 \\\r\n--add-subgids 200000-265536 \\\r\n$USER\r\n</code></pre>\r\n\r\n<p>Create a directory to share data between your container and your localhost:</p>\r\n\r\n<pre><code>\r\n$ mkdir data\r\n</code></pre>\r\n\r\n<p>Run a container, with your <strong>.&#47;data</strong> directory mapped to <strong>&#47;storage</strong> in the container:</p>\r\n\r\n<pre><code>\r\n$ podman run -it --volume ./data:/storage:Z busybox\r\n</code></pre>\r\n\r\n\r\n',78,8,0,'CC-BY-SA','containers, podman, docker, vagrant',0,0,1),
(3512,'2022-01-18','Auld Acquaintance',659,'flappin gums aboot auld hardware and how I use it.','<p>Toshiba Satellite L455-S5000<br />\r\n<a href=\"https://www.ifixit.com/Device/Toshiba_Satellite_L455-S5975\" class=\"uri\">https://www.ifixit.com/Device/Toshiba_Satellite_L455-S5975</a></p>\r\n<p>The script!</p>\r\n<pre><code>#!/bin/bash\r\n\r\n# target dir is ~/Photos/YYYY-MM-DD_Hm\r\ntargetDir=&quot;/home/$USER/Photos/$(date +&quot;%F_%H%M&quot;)&quot;\r\n\r\n# create the dir\r\nmkdir $targetDir\r\n\r\n# cd to dir\r\ncd $targetDir\r\n\r\n# kill all gphoto stuff\r\npkill -f gphoto2\r\n\r\n# get the files\r\ngphoto2 --get-all-files\r\n\r\n# delete all files on camera recursively\r\ngphoto2 -DR</code></pre>\r\n',243,0,0,'CC-BY-SA','auld hardware, photography',0,0,1),
(3513,'2022-01-19','HB9HNT and PA7KEN on SOTA, Summits on the Air',2595,'Summits on the Air is the combination of mountain climbing and amateur radio','<h2 id=\"links\">Links</h2>\r\n<p>You\'ll find further information under the following links:</p>\r\n<ul>\r\n<li><a href=\"https://de.wikipedia.org/wiki/Summits_on_the_Air\">Summits on the Air on Wikipedia</a></li>\r\n<li><a href=\"https://www.sota.org.uk/\">The main SOTA website</a></li>\r\n<li><a href=\"https://sotawatch.sota.org.uk/en/\">SotaWatch 3</a> where you post spots and alerts</li>\r\n<li><a href=\"https://www.sotadata.org.uk/en/\">SotaData</a> where you post your activation and chaser reports to claim points</li>\r\n<li><a href=\"https://reflector.sota.org.uk/\">SOTA Reflector</a> the SOTA internet forums</li>\r\n<li><a href=\"https://sotl.as\">SOTLAS</a> a map of SOTA summits with activations and other info</li>\r\n</ul>\r\n',288,0,1,'CC-BY-SA','ham, ham radio, hamradio, sota',0,0,1),
(3521,'2022-01-31','Upgrades to Acer Aspire 5 Slim',344,'Upgrades to Aspire 5 Slim and Specs','<h3 id=\"upgrades-to-aspire-5-slim-a515-43-r19l\">Upgrades to Aspire 5 Slim A515-43-R19L</h3>\r\n<p>Replacement for the Acer Aspire 5750</p>\r\n<p>Aspire A515-43 How to Install an Additional Hard Drive<br />\r\n<a href=\"https://www.youtube.com/watch?v=XiadRhJ70Rs\" class=\"uri\">https://www.youtube.com/watch?v=XiadRhJ70Rs</a></p>\r\n<h4 id=\"specs\">Specs</h4>\r\n<pre><code>{\r\n CPU: AMD Ryzen 3 3200U\r\n    GPU: AMD Radeon RX Vega 3\r\n    Display: 15.6&#x201D;, Full HD (1920 x 1080), IPS\r\n    Storage: 128GB SSD, NMVE\r\n    RAM: 4GB DDR4, upgradeable to 32Gb\r\n    Weight: 1.90 kg (4.2 lbs)\r\n Ports and connectivity\r\n    2x USB Type-A 2.0\r\n    1x USB Type-A 3.2 Gen 1 (5 Gbps)\r\n    HDMI\r\n}</code></pre>\r\n<h4 id=\"why\">Why?</h4>\r\n<ul>\r\n<li>The system would randomly kick me out, back to the login screen.</li>\r\n<li>This was due to low RAM (4Gb) and high RAM usage from Firefox</li>\r\n</ul>\r\n<h4 id=\"what\">What?</h4>\r\n<ul>\r\n<li>RAM: 16Gb DDR4</li>\r\n<li>HD: 500Gb spinning drive</li>\r\n</ul>\r\n<h4 id=\"other-uses-for-the-upgrade\">Other uses for the upgrade</h4>\r\n<ul>\r\n<li>Room for Virtual Machines</li>\r\n</ul>\r\n<h4 id=\"future-upgrade\">Future upgrade</h4>\r\n<ul>\r\n<li>SSD</li>\r\n</ul>\r\n<p><em>Screw locations</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_001.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_001_thumbnail.png\" alt=\"Screw locations\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Inside the laptop</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_002.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_002_thumbnail.png\" alt=\"Inside the laptop\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Power/Battery plug location</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_003.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_003_thumbnail.png\" alt=\"Power/Battery plug location\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Legend for inside the laptop</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_004.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3521/hpr3521/image_004_thumbnail.png\" alt=\"Legend for inside the laptop\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n',318,57,0,'CC-BY-SA','laptop, hardware, hardware upgrades, RAM, hard drive',0,0,1),
(3517,'2022-01-25','Hp stream laptop with Lubuntu 20.04',2257,'Laptop update','<p>Just a simple check of an old laptop with update</p>\r\n',129,0,0,'CC-BY-SA','Hp stream,Lubuntu,geko,Linux,pine64',0,0,1),
(3519,'2022-01-27','Rust 101: Episode 2 - Rolling With the Errors',3234,'In this episode, BlacKernel helps you construct a simple dice rolling application in rust.','<p>GitLab Repository: <a href=\"https://gitlab.com/BlacKernel/rust-roller\">https://gitlab.com/BlacKernel/rust-roller</a></p>\r\n<h2 id=\"rust-roller-dice-roller-tutorial-application\">Rust-Roller Dice Roller Tutorial Application</h2>\r\n<p>This is a simple dice rolling application that follows along with my <a href=\"https://hackerpublicradio.org\">Hacker Public Radio</a> course on learning the <a href=\"https://rust-lang.org\">rust programming language</a>.</p>\r\n<p>I will attempt to make the commits follow the episodes pretty closely with one commit after every episode with the episode number in the commit message.</p>\r\n<h3 id=\"usage\">Usage:</h3>\r\n<p><code>rust-roller &lt;number-of-dice&gt; &lt;number-of-sides-per-die&gt;</code></p>\r\n<h3 id=\"output\">Output:</h3>\r\n<p><code>Dice: &lt;value-of-die-1&gt; &lt;value-of-die-2&gt; ...</code></p>\r\n<p><code>Total: &lt;sum-of-all-dice-values&gt;</code></p>\r\n<hr />\r\n<h2 id=\"list-of-episodes\">List of Episodes</h2>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=3426\">Rust 101: Episode 0 - What in Tarnishing?</a></p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=3453\">Rust 101: Episode 1 - Hello, World!</a></p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=3519\">Rust 101: Episode 2 - Rolling With the Errors</a></p>\r\n<hr />\r\n<p>Contact Info:</p>\r\n<p><a href=\"https://nixnet.social/BlacKernel\">at blackernel at nixnet dot social</a></p>\r\n<p><a href=\"mailto@izzyleibowitz@pm.me\">izzyleibowitz at pm dot me</a></p>\r\n',396,25,1,'CC-BY-SA','rust, programming, dice, learning',0,0,1),
(3522,'2022-02-01','Set up your Robot Building Lab and build a $0 Robot Platform',1580,'Ep 1 of Robot Warlords of the Apocalypse, build a free robot platform/crash buggy from old printers ','<h2 id=\"be-the-assimilator-not-the-assimilated\"><em>be the assimilator not the assimilated</em></h2>\r\n<h2 id=\"setting-up-your-robot-building-lab-and-building-your-first-platform-crash-buggy.\">Setting up your robot building lab and building your first platform/ crash buggy.</h2>\r\n<h3 id=\"getting-started\">Getting started</h3>\r\n<ol type=\"a\">\r\n<li>stuff to buy:<br />\r\n\r\n<ul>\r\n<li>order Arduino Uno or kit (recommended)<br />\r\nKit is highly recommended because you can work through projects for the various sensors and relays and gain experience using sensors. This makes it easier to integrate sensors into your robot, enabling it to more effectively interact with it\'s environment. Kit should come with a case, booklet, and have links to the code involved.</li>\r\n<li>order extra Arduinos (for when you blow up the first one)</li>\r\n<li>small machine screws of various lengths with nuts and washers</li>\r\n<li>18650 4 cell battery compartment</li>\r\n<li>2 18650 1 cell compartments*</li>\r\n<li>18650 chargers (wavgat) - these plug into a usb device</li>\r\n<li>solder/flux/solder sucker (tree sap)</li>\r\n<li>perfboard</li>\r\n<li>extra dupont wires (male to male)</li>\r\n<li>extra resistors</li>\r\n<li>optional\r\n<ul>\r\n<li>ultrasonic sensors (or hack out of something)</li>\r\n<li>mp3 module</li>\r\n</ul></li>\r\n<li>L298N h-bridge modules</li>\r\n</ul></li>\r\n<li>get tools and acc:\r\n<ul>\r\n<li>solder station</li>\r\n<li>computer with internet (raspberry pi works too) - should have listened...</li>\r\n<li>adruino.cc download and install arduino IDE</li>\r\n<li>various screwdrivers, pliers, straight airplane snips, drill with assorted bits. hacksaw, ruler, soldering station, multimeter,</li>\r\n<li>parts drawers for organizing small parts,</li>\r\n<li>several rubbermaid bins or cardboard boxes for cct boards, ABS pieces, etc.</li>\r\n</ul></li>\r\n<li>Collect and disassemble post apocalyptic scraps:\r\n<ul>\r\n<li><em>safety note</em>: Be careful when disassembling; use pliers rather than your fingers as much as possible. Printers and other products can sometimes be tricky to take apart. There may not be any visible screws to remove. The case cover may just snap into place and sometimes it feels like you are going to break the part before it unsnaps. Be aware that the ABS can snap if you force it past its breaking point, it is strong but when it breaks it can have sharp edges. Be especially careful when taking apart laptop batteries. Try not to short any circuits, and watch out because the metal strips that connect the 18650 cells are very sharp. Use pliers and metal cutters and remember not to create any circuits with your metal tools!</li>\r\n</ul></li>\r\n</ol>\r\n<h3 id=\"ingredients\">Ingredients</h3>\r\n<ul>\r\n<li><p>Printers are a great source of mechanical and chassis parts, including motors. The best are the ones with scanners built-in, which means an extra stepper motor.</p>\r\n<ul>\r\n<li>motors A mid sized printer will usually have two electric motors of the same size along with a few other smaller motors and stepper motors. Have two identical printers and you will have the 4 identical motors needed. It is OK to have 2 smaller and 2 larger motors and put one pair in front and one pair in back.</li>\r\n<li>steel rods, wheels with rubber tires, gears, specialty steel plates, reed switches, rotary encoders, ir switches</li>\r\n<li>ABS parts including a power supply cover that can hold Arduino.</li>\r\n<li>Glass panel can be repurposed as solar panel with cheap Chinese solar cells.</li>\r\n</ul></li>\r\n<li><p>UPS - for relays and opto isolators</p></li>\r\n<li><p>TVs - wire, speakers, optoisolators, lots of transistors and other components in older tvs.</p></li>\r\n<li><p>laptops, power tools, cell phones - lithium ion batteries</p></li>\r\n<li><p>books: libgen.is</p>\r\n<ul>\r\n<li><a href=\"https://designingelectronics.com/\" class=\"uri\">https://designingelectronics.com/</a></li>\r\n</ul></li>\r\n</ul>\r\n<p><em>Example of useful parts</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3522/hpr3522/20200715_184540.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3522/hpr3522/20200715_184540_thumbnail.jpg\" alt=\"Example of useful parts\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n',401,0,1,'CC-BY-SA','beam,righttorepair,robots,mechatronics,apocalypse',0,0,1),
(3545,'2022-03-04','How I make coffee',302,'Making coffee, and a podcast recommendation','<h4 id=\"coffeemaker\">Coffeemaker</h4>\r\n<ul>\r\n<li>Bunn model: Speedbrew</li>\r\n<li>Heats a reservoir to 200 &#x2109;</li>\r\n<li>Displaces a minimum of 4 cups for a fresh pot</li>\r\n</ul>\r\n<p><em>Bunn Coffeemaker and grinder</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3545/hpr3545/image_001.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3545/hpr3545/image_001_thumbnail.jpg\" alt=\"Bunn Coffeemaker and grinder\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small>  </p>\r\n<p><em>This was too coarse, but still had a good taste</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3545/hpr3545/image_002.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3545/hpr3545/image_002_thumbnail.jpg\" alt=\"This was too coarse, but still had a good taste\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small>  </p>\r\n<h4 id=\"coffee-of-the-day\">Coffee of the day</h4>\r\n<ul>\r\n<li>Door County Coffee and Tea Co.: Jingle Bell Java\r\n<ul>\r\n<li>Located in the U.S., in Sturgeon Bay, Wisconsin</li>\r\n</ul></li>\r\n</ul>\r\n<p><em>Jingle Bell Java</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3545/hpr3545/image_003.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3545/hpr3545/image_003_thumbnail.jpg\" alt=\"Jingle Bell Java\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small>  </p>\r\n<h4 id=\"ham-radio-crash-course\">Ham Radio Crash Course</h4>\r\n<ul>\r\n<li><p>Started by Josh Nass (KI6NAZ) as a YouTube channel,</p></li>\r\n<li><p>Ham Radio Crash Course (HRCC) has evolved into a rapidly growing community of radio enthusiasts that are excited to grow in the hobby, and help others grow as well.</p></li>\r\n<li><p><a href=\"https://www.qrz.com/db/ki6naz\" class=\"uri\">https://www.qrz.com/db/ki6naz</a></p></li>\r\n<li><p>RSS Feed</p>\r\n<ul>\r\n<li><a href=\"https://feed.podbean.com/hamradiocrashcourse/feed.xml\" class=\"uri\">https://feed.podbean.com/hamradiocrashcourse/feed.xml</a></li>\r\n</ul></li>\r\n<li><p>Youtube channel</p>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/channel/UChAu6Cof9KlfFxSbL9ytosQ\" class=\"uri\">https://www.youtube.com/channel/UChAu6Cof9KlfFxSbL9ytosQ</a></li>\r\n</ul></li>\r\n</ul>\r\n',318,88,0,'CC-BY-SA','coffee, podcast, ham radio',0,0,1),
(3538,'2022-02-23','Installing the Tenacity audio editor',272,'Installing Tenacity, and the reasons behind the fork.','<h4 id=\"audacity-vs.-tenacity\">Audacity vs. Tenacity</h4>\r\n<ul>\r\n<li><a href=\"https://www.engadget.com/audacity-privacy-policy-spyware-accusations-data-collection-210001803.html\" class=\"uri\">https://www.engadget.com/audacity-privacy-policy-spyware-accusations-data-collection-210001803.html</a></li>\r\n<li><a href=\"https://hackaday.com/2021/07/23/new-privacy-policy-gets-audacity-back-on-track\" class=\"uri\">https://hackaday.com/2021/07/23/new-privacy-policy-gets-audacity-back-on-track</a></li>\r\n</ul>\r\n<h4 id=\"tenacity-project-page\">Tenacity project page</h4>\r\n<ul>\r\n<li><a href=\"https://tenacityaudio.org\" class=\"uri\">https://tenacityaudio.org</a></li>\r\n</ul>\r\n<h5 id=\"reason-for-forking-the-audacity-project\">Reason for forking the Audacity project</h5>\r\n<p>Motivation</p>\r\n<p>Our project initially started as a fork of Audacity as a result of multiple controversies and public relation crises, which you can find out more about here:</p>\r\n<ul>\r\n<li><p><a href=\"https://github.com/audacity/audacity/issues/1213\">Privacy policy which may violate the original project\'s GPL license</a></p></li>\r\n<li><p><a href=\"https://github.com/audacity/audacity/discussions/932\">Contributor\'s License Agreement (CLA) which may violate the same GPL license</a></p></li>\r\n<li><p><a href=\"https://github.com/audacity/audacity/pull/835\">Attempts at adding telemetry using Google services for data collection</a></p></li>\r\n</ul>\r\n<p>Nevertheless, the goal of this project is to pick up what the original developers of Audacity the decades-long work by the original creators of Audacity and create an audio editor that is fresh, more modern, convenient and practical to use, with the help and the guidance of our users and our community.</p>\r\n<ul>\r\n<li><a href=\"https://github.com/tenacityteam/tenacity#motivation\" class=\"uri\">https://github.com/tenacityteam/tenacity#motivation</a></li>\r\n</ul>\r\n<h5 id=\"community-section\">Community section</h5>\r\n<ul>\r\n<li><a href=\"https://tenacityaudio.org/#community-buttons\" class=\"uri\">https://tenacityaudio.org/#community-buttons</a></li>\r\n</ul>\r\n<h5 id=\"flatpak-nightly-build\">Flatpak nightly build</h5>\r\n<ul>\r\n<li><a href=\"https://github.com/tenacityteam/tenacity-flatpak-nightly/blob/main/README.md\" class=\"uri\">https://github.com/tenacityteam/tenacity-flatpak-nightly/blob/main/README.md</a></li>\r\n</ul>\r\n<pre><code>flatpak remote-add tenacity oci+https://tenacityteam.github.io/tenacity-flatpak-nightly\r\nflatpak install tenacity org.tenacityaudio.Tenacity</code></pre>\r\n<ul>\r\n<li><h5 id=\"update-flatpak\">Update Flatpak</h5>\r\n<ul>\r\n<li><code>flatpak update tenacity org.tenacityaudio.Tenacity</code></li>\r\n</ul></li>\r\n</ul>\r\n<h4 id=\"build-instructions-for-cmake\">Build instructions for Cmake</h4>\r\n<ul>\r\n<li><a href=\"https://gist.github.com/ricemark20/17382125f04083b3cdcda3d8bed64e4a\" class=\"uri\">https://gist.github.com/ricemark20/17382125f04083b3cdcda3d8bed64e4a</a></li>\r\n</ul>\r\n<pre><code>Clone Tenacity from the Tenacity GitHub project.\r\n\r\n    $ git clone https://github.com/tenacityteam/tenacity/\r\n    $ cd tenacity\r\n\r\n    Configure Tenacity using CMake:\r\n\r\n    $ mkdir build &amp;&amp; cd build\r\n    $ cmake -G &quot;Unix Makefiles&quot; -Duse_ffmpeg=loaded ..\r\n\r\n    By default, Debug build will be configured. To change that, pass -DCMAKE_BUILD_TYPE=Release to CMake.\r\n\r\n    Build Tenacity:\r\n\r\n    $ make -j`nproc`\r\n\r\n    $ sudo make install</code></pre>\r\n<p><em>Current version:3.0.2-895-g0665614</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3538/hpr3538/inmage_001.png\" alt=\"Current version:3.0.2-895-g0665614\" /></p>\r\n',318,0,0,'CC-BY-SA','Tenacity, Audacity, Github, Cmake, make, audio editor, telemetry, Google, tracking',0,0,1),
(3523,'2022-02-02','The Compose key',406,'What is the compose key, and how to set it up on X, GNOME and Windows.','<p>The Compose key allows you to input any character or sequence of characters regardless what keyboard layout you use, by typing the Compose key followed by a sequence of other keys. To use it, you must activate it in your system and choose what key you want to serve as the Compose key.</p>\r\n<p>If on Windows, we don\'t judge, we understand it\'s because, like me, you have no choice, and that\'s OK, one day we\'ll all get to live the dream, until then we\'ll just make do... WinCompose enables the compose key on that wretched environment. It comes with a ton of additional sequences, plus a fancy GUI for creating your own.</p>\r\n<p>If you use X, I suggest looking at the ArchLinux Wiki: <a href=\"https://wiki.archlinux.org/title/Xorg/Keyboard_configuration#Configuring_compose_key\">https://wiki.archlinux.org/title/Xorg/Keyboard_configuration#Configuring_compose_key</a></p>\r\n<p>If you are a GNOME user, install GNOME Tweaks to activate the Compose key.</p>\r\n<p>$HOME/.XCompose</p>\r\n<pre><code>include &quot;%L&quot;\r\n&lt;Multi_key&gt; &lt;Multi_key&gt; &lt;braceleft&gt; : &quot;&amp;#123;&quot;\r\n&lt;Multi_key&gt; &lt;Multi_key&gt; &lt;braceright&gt; : &quot;&amp;#125;&quot;\r\n&lt;Multi_key&gt; &lt;Multi_key&gt; &lt;t&gt; &lt;f&gt; : &quot;(&#x256F;&#xB0;&#x25A1;&#xB0;&#xFF09;&#x256F;&#xFE35; &#x253B;&#x2501;&#x253B;&quot;\r\n&lt;Multi_key&gt; &lt;C&gt; &lt;C&gt; &lt;C&gt; &lt;P&gt; : &quot;&#x262D;&quot;\r\n</code></pre>\r\n<p>Note that that last one actually comes with X by default. In ArchLinux, all the default sequences can be found in <code>/usr/share/X11/locale/&lt;your-locale&gt;/Compose</code>. Also good to find out what to call your keys when writing your own sequences.</p>\r\n<p><code>/etc/X11/xorg.conf.d/00-keyboard.conf</code> is the file that makes the Compose key happen in X.</p>\r\n<pre><code>Section &quot;InputClass&quot;\r\n    Identifier &quot;system-keyoard&quot;\r\n    MatchIsKeyboard &quot;on&quot;\r\n    Option &quot;XkbLayout&quot; &quot;us&quot;\r\n    Option &quot;XkbModel&quot; &quot;acer_laptop&quot;\r\n    Option &quot;XkbOptions&quot; &quot;compose:ralt,ctrl:nocaps&quot;\r\nEndSection\r\n</code></pre>\r\n<p>Note that it is not recommended to edit the file above, but use <code>localectl</code> to edit it. I don\'t know why that is. To learn more about that, and all the many options available, start with <a href=\"https://wiki.archlinux.org/title/Xorg/Keyboard_configuration#Using_localectl\">https://wiki.archlinux.org/title/Xorg/Keyboard_configuration#Using_localectl</a></p>\r\n',399,0,0,'CC-BY-SA','Xorg,X11,compose,composekey',0,0,1),
(3524,'2022-02-03','Wheels Addendum - How to Reliably Attach Wheels to PAR Robot Platform',393,'The most difficult part of Post Apocalyptic Robotics - how to keep the wheels on','<p><a href=\"https://hackerpublicradio.org/eps.php?id=3522\">https://hackerpublicradio.org/eps.php?id=3522</a></p>\r\n<p>Video is already uploaded <a href=\"https://www.bitchute.com/video/HyT5Yz5bhjfS/\">https://www.bitchute.com/video/HyT5Yz5bhjfS/</a></p>\r\n<p><em>Picture 1</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114225.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114225_thumbnail.jpg\" alt=\"Picture 1\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 2</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114332.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114332_thumbnail.jpg\" alt=\"Picture 2\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 3</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114438.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114438_thumbnail.jpg\" alt=\"Picture 3\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 4</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114501.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114501_thumbnail.jpg\" alt=\"Picture 4\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 5</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114514.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114514_thumbnail.jpg\" alt=\"Picture 5\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 6</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114545.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114545_thumbnail.jpg\" alt=\"Picture 6\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 7</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114717.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114717_thumbnail.jpg\" alt=\"Picture 7\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 8</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114723.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114723_thumbnail.jpg\" alt=\"Picture 8\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 9</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114731.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114731_thumbnail.jpg\" alt=\"Picture 9\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 10</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114739.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114739_thumbnail.jpg\" alt=\"Picture 10\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 11</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114940.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_114940_thumbnail.jpg\" alt=\"Picture 11\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Picture 12</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_115057.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3524/hpr3524/IMG_20220121_115057_thumbnail.jpg\" alt=\"Picture 12\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n',401,0,0,'CC-BY-SA','beam,righttorepair,robots,mechatronics,apocalypse',0,0,1),
(3525,'2022-02-04','Battling with English - part 4',920,'Some confusion with English plurals; strange language changes','<h2 id=\"confusing-plurals\">Confusing plurals</h2>\n<p>In this episode, the fourth of this series, I’m looking at some words that have singular and plural forms that are very different. These lead to a lot of confusion as we’ll see.</p>\n<p>I also want to look at the way that English is evolving in some very strange and apparently senseless ways!</p>\n<p><small><b>Personal note:</b> I notice I started preparing this show in 2019; unfortunately, COVID messed up my productivity for the next two years, but I hope I can now begin to be productive again! </small></p>\n<h2 id=\"long-notes\">Long notes</h2>\n<p>I have provided detailed notes as usual for this episode, and these can be viewed by following <a href=\"hpr3525_full_shownotes.html\">the full notes link</a>.</p>\n<h2 id=\"links\">Links</h2>\n<ul>\n<li>Plural of <em>thesis</em>:\n<ul>\n<li><a href=\"https://www.grammar-monster.com/plurals/plural_of_thesis.htm\">Grammar Monster</a>\n<ul>\n<li>This link has some good advice for dealing with weird plurals, though some you just have to remember, there are no rules!</li>\n</ul></li>\n</ul></li>\n</ul>\n<ul>\n<li>Irregular plurals which end with <code>\"ae\"</code> (or <code>\"æ\"</code>):\n<ul>\n<li><a href=\"https://en.wiktionary.org/wiki/Category:English_irregular_plurals_ending_in_%22-ae%22\">Wiktionary</a>\n<ul>\n<li>This is a list of these plurals, 159 of them at the time of writing. Many of these are obsolete however.</li>\n</ul></li>\n</ul></li>\n</ul>\n<ul>\n<li>The “is is” problem:\n<ul>\n<li><a href=\"https://english.stackexchange.com/questions/36683/why-do-some-people-say-the-reason-is-is-that-with-is-twice-in-a-row\">StackExchange: <em>Why do some people say “the reason is is that,” with “is” twice in a row?</em></a></li>\n<li><a href=\"https://www.grammarbook.com/blog/effective-writing/what-is-is-is-is-exasperating/\">GrammarBook.com: What Is-Is Is, Is Exasperating</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Double_copula\">Wikipedia article on the <em>Double Copula</em></a></li>\n</ul></li>\n</ul>\n<ul>\n<li>“Honing in”:\n<ul>\n<li><a href=\"https://www.merriam-webster.com/dictionary/hone%20in\">Merriam-Webster: <em>hone in</em></a></li>\n<li><a href=\"https://www.youtube.com/watch?v=JZ07FbgQkqk\"><em>Me Ears Are Alight</em> old British advertisement</a></li>\n</ul></li>\n</ul>\n<ul>\n<li>Previous episodes in this series:\n<ul>\n<li><a href=\"http://hackerpublicradio.org/eps/hpr2558\">Battling with English - part 1</a></li>\n<li><a href=\"http://hackerpublicradio.org/eps/hpr2596\">Battling with English - part 2</a></li>\n<li><a href=\"http://hackerpublicradio.org/eps/hpr2751\">Battling with English - part 3</a></li>\n</ul></li>\n</ul>\n',225,120,1,'CC-BY-SA','grammar,spelling,plurals,word misuse,English,language evolution',0,0,1),
(3539,'2022-02-24','Linux Inlaws S01E50: The OpenSUSE Project',4079,'An interview with Doug DeMaio and Axel Braun from the OpenSUSE project','<p>In this episode of the Inlaws our two ageing heroes host Doug DeMaio and Axel Braun, both intimately\r\nassociated with and actively supporting the OpenSUSE project, the foundation of one of the popular Linux distros\r\napart from RedHat and Debian for companies of all sizes (yes, and Ubuntu before I get any hate mails\r\nfrom Mark Shuttleworth or Cannonical in general :-). Apologies for not mentioning Alma, CentOS or\r\nRocky Linux. Topics of discussion include the advantages of hipster concepts like rolling releases,\r\nthe year of the Linux desktop, other people\'s computers (aka Clouds) and philosophical things like\r\nIT security, all things cloud-native (well, almost) and Apple laptop users drinking fancy coffee\r\nderivatives. Never mind containers, edge-computing operating systems and live kernel patching.</p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>OpenSUSE: <a href=\"https://www.opensuse.org\" target=_blank>https://www.opensuse.org</a></li>\r\n<li>SUSE: <a href=\"https://www.suse.com\" target=_blank>https://www.suse.com</a></li>\r\n<li>openQA: <a href=\"https://open.qa\" target=_blank>https://open.qa</a></li>\r\n<li>Open Build Service: <a href=\"https://openbuildservice.org\" target=_blank>https://openbuildservice.org</a></li>\r\n<li>CentOS debacle: <a href=\"https://arstechnica.com/gadgets/2020/12/centos-shifts-from-red-hat-unbranded-to-red-hat-beta\" target=_blank>https://arstechnica.com/gadgets/2020/12/centos-shifts-from-red-hat-unbranded-to-red-hat-beta</a></li>\r\n<li>OpenSUSE conference: <a href=\"https://events.opensuse.org\" target=_blank>https://events.opensuse.org</a></li>\r\n<li>MicroOS: <a href=\"https://microos.opensuse.org\" target=_blank>https://microos.opensuse.org</a></li>\r\n<li>Kubic: <a href=\"https://kubic.opensuse.org\" target=_blank>https://kubic.opensuse.org</a></li>\r\n<li>Rancher: <a href=\"https://www.suse.com/products/rancher-kubernetes-engine\" target=_blank>https://www.suse.com/products/rancher-kubernetes-engine</a></li>\r\n<li>OpenSUSE mailing lists: <a href=\"https://lists.opensuse.org/archives\" target=_blank>https://lists.opensuse.org/archives</a></li>\r\n<li>OpenSUSE bar: <a href=\"https://meet.opensuse.org/bar\" target=_blank>https://meet.opensuse.org/bar</a></li>\r\n<li>OpenSUSE social media: <a href=\"https://en.opensuse.org/openSUSE:Social_media_contacts\" target=_blank>https://en.opensuse.org/openSUSE:Social_media_contacts</a></li>\r\n<li>OpenSUSE IRC: <a href=\"https://en.opensuse.org/openSUSE:IRC_list\" target=_blank>https://en.opensuse.org/openSUSE:IRC_list</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','OpenSUSE, Kubic, MicroOS, Clouds, Lattes, Desktops',0,0,1),
(3527,'2022-02-08','My gEeeky Experiment - Part 3',816,'Claudio talks about how he upgraded the SSD on his Asus Eee PC 901 netbook.','<ul>\r\n<li><p>hpr3383 :: My gEeeky Experiment - Part 1<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=3383\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3383</a></p></li>\r\n<li><p>hpr3418 :: My gEeeky Experiment - Part 2<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=3418\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3418</a></p></li>\r\n<li><p>Blog post: <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></p></li>\r\n</ul>\r\n<p>Contact: claudiom@bsd.network (Mastodon)<br />\r\nIRC: ClaudioM on #oggcastplanet (Libera.chat)</p>\r\n',152,0,0,'CC-BY-SA','openbsd,netbook,asus,eeepc,upgrades,ssd',0,0,1),
(3528,'2022-02-09','Slackware on a netbook',346,'A response show to HPR3512','<h3 id=\"installed-slackware-on-acer-aspire-one\">Installed Slackware on Acer Aspire One</h3>\r\n<ul>\r\n<li><p>4.4.14-smp #2 SMP Fri Jun 24 14:44:24 CDT 2016 i686 Intel(R) Atom(TM) CPU N270 @ 1.60GHz GenuineIntel GNU/Linux</p></li>\r\n<li><p>1 Gb ram</p>\r\n<pre><code>[mark@archer72:~ ] $ free total --mega\r\n    total    used  free  shared  buff/cache   available\r\nMem:           1009         172         376           0         459         692\r\nSwap:          1048           0        1048</code></pre></li>\r\n<li><p>Runs a little warm</p>\r\n<pre><code>[mark@archer72:~ ] $ sensors\r\n\r\ncoretemp-isa-0000\r\nAdapter: ISA adapter\r\nCore 0:       +45.0 &amp;#8451;  (crit = +90.0 &amp;#8451;)</code></pre></li>\r\n<li><p>Ignore lid switch</p>\r\n<p><code>echo on &gt;/sys/bus/acpi/drivers/button/$PLATFORM\\:00/power/control</code></p>\r\n<p>Or in this case</p>\r\n<p><code>echo on &gt; /bus/acpi/drivers/button/LNXPWRBN\\:00/power/control</code></p></li>\r\n<li><p>Clear screen in BASH</p>\r\n<ul>\r\n<li><p>Enter in ~/.bashrc the line:</p>\r\n<p><code>bind -x $\'\"\\C-l\":clear;\'</code></p></li>\r\n<li><p>Not working between reboots</p></li>\r\n</ul></li>\r\n</ul>\r\n<p><quote></p>\r\n<p>If you always want the content of your .bashrc file processed, you can add the following lines to your .bash_profile file, creating that file if it does not already exist:</p>\r\n<pre><code>if [ -f ~/.bashrc ]; then\r\n    . ~/.bashrc\r\nfi</code></pre>\r\n<p>Per its man page, bash \"[...] looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.\" Conventions and policies of your local system will determine which, if any, of these files already exist.</p>\r\n<p>A word of caution: be aware that creating a new .bash_profile in your home directory could have the unintended side-effect of preventing the reading and executing of commands in a .bash_login or .profile file already present, changing further the behavior of subsequent logins. </quote></p>\r\n<p><a href=\"https://stackoverflow.com/questions/18393521/bashrc-not-loading-until-run-bash-command\" class=\"uri\">https://stackoverflow.com/questions/18393521/bashrc-not-loading-until-run-bash-command</a></p>\r\n<ul>\r\n<li><p>Change lilo menu timeout to 5 seconds</p>\r\n<ul>\r\n<li><p>edit /etc/lilo.conf</p>\r\n<pre><code>.\r\n.\r\n# This is given in tenths of a second, so 600 for every minute:\r\n# timeout = 1200\r\ntimeout = 50\r\n.\r\n.</code></pre></li>\r\n</ul></li>\r\n<li><p>Add custom bash prompt.</p>\r\n<pre><code>  PS1=&quot;&quot;[\\d \\t \\u@\\h:\\w ]&quot; $ &quot;\r\n  [Sat Feb 05 18:11:15 mark@archer72:~ ] $</code></pre></li>\r\n<li><p>For a more concise prompt:</p>\r\n<pre><code>  PS1=&quot;[\\u@\\h:\\w ] $\r\n  [mark@archer72:~ ] $</code></pre></li>\r\n<li><p>Not authorized to control networking</p>\r\n<p><code>sudo usermod -G netdev -a yourusername</code></p>\r\n<ul>\r\n<li><a href=\"https://askubuntu.com/questions/304159/not-authorized-to-control-networking#304181\" class=\"uri\">https://askubuntu.com/questions/304159/not-authorized-to-control-networking#304181</a></li>\r\n</ul></li>\r\n</ul>\r\n',318,0,0,'CC-BY-SA','Slackware, Auld hardware, netbook',0,0,1),
(3531,'2022-02-14','Barrier: Software KVM',1039,'A brief inroduction to the Barrier software KVM','<p>This episode is a quick software recommendation/introduction to <a href=\"https://github.com/debauchee/barrier\">Barrier</a>. Barrier is a software KVM, forked from <a href=\"https://symless.com/synergy\">Synergy</a>. It sends your keystrokes and mouse input over the network, so that you can share your input devices between computers.</p>\r\n',196,0,0,'CC-BY-SA','kvm,Barrier,network,keyboard,mouse',0,0,1),
(3532,'2022-02-15','Self-hosting in small scale E0: Disclaimer and general idea',545,'This ep is just explanation of the general idea and introducing useful communities around the topic','<p>By the end of the series I would like to end up with an example repository on Github/Gitlab with scenarios and example configuration file which makes them easy to replicate and modify to your need. I am interested in your opinion what type of service would you fancy to self-host yourself. So don\'t hesitate to contact me on twitter, matrix.org or in email.</p>\r\n<p>Twitter: <span class=\"citation\" data-cites=\"takov751\">@takov751</span><br />\r\nmatrix: takov751:matrix.org<br />\r\nemail: takov751+hpr@protonmail.com</p>\r\n<p>Few interesting communities/project:</p>\r\n<ul>\r\n<li><p>Community around making a curated list of their own docker images and maintain them:<br />\r\n<a href=\"https://linuxserver.io\" class=\"uri\">https://linuxserver.io</a></p></li>\r\n<li><p>Open source project for home automation: <a href=\"https://www.home-assistant.io/\" class=\"uri\">https://www.home-assistant.io/</a></p></li>\r\n</ul>\r\n',402,0,0,'CC-BY-SA','self-host, devsecops, docker',0,0,1),
(3533,'2022-02-16','Porridge',1741,'A show about porridge','<p>This is a show about porridge.</p>\r\n<p>Episodes mentioned in this episode:</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3272\">hpr3272 :: In GNU/Linux, there is no \"diversity\", we\'re all just data. hosted by Some Guy On The Internet </a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3257\">hpr3257 :: Lack of diversity in Linux and other open source communities hosted by swift110 </a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3251\">hpr3251 :: Opposing Views on Alcohol hosted by Windigo </a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3247\">hpr3247 :: Saturday Morning Automotive Routine hosted by TrumpetJohn </a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3223\">hpr3223 :: My COVID year summary hosted by Mr. Young </a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3121\">hpr3121 :: Opposing Views on Tattoos hosted by Windigo </a></li>\r\n</ul>\r\n<p>Island mentioned in this episode: <a href=\"https://en.wikipedia.org/wiki/St_Kilda,_Scotland\">https://en.wikipedia.org/wiki/St_Kilda,_Scotland</a></p>\r\n<p>All the porridge: <a href=\"https://en.wikipedia.org/wiki/List_of_porridges\">https://en.wikipedia.org/wiki/List_of_porridges</a></p>\r\n',399,0,0,'CC-BY-SA','porridge',0,0,1),
(3534,'2022-02-17','Vernier caliper',519,'Ken recommends a very useful tool for measuring stuff','<p>\r\nIn today\'s show Ken recommends a fairly affordable tool for measuring all sorts of dimensions.\r\n</p>\r\n\r\n<img src=\"/eps/hpr3534/hpr3534/Vernier_caliper.svg.png\" alt=\"An image of a Vernier caliper\" />\r\n\r\n<p>\r\nFrom <a href=\"https://en.wikipedia.org/wiki/Calipers#Vernier_caliper\">Wikipedia</a>\r\n</p>\r\n\r\n<ol>\r\n\r\n<li>Outside large jaws: used to measure external diameter of an object (like a hollow cylinder) or width of an object (like a rod), diameter of an object (like a sphere).</li>\r\n<li>Inside small jaws: used to measure the internal diameter of an object (like a hollow cylinder or pipe).</li>\r\n<li>Depth probe/rod: used to measure depths of an object (like a small beaker) or a hole.</li>\r\n<li>Main scale (Metric): marked every millimeter and helps to measure length correct up to 1 mm.</li>\r\n<li>Main scale (Imperial): marked in inches and fractions.</li>\r\n<li>Vernier scale (Metric) gives interpolated measurements to 0.1 mm or better.</li>\r\n<li>Vernier scale (Imperial) gives interpolated measurements in fractions of an inch.</li>\r\n<li>Retainer: used to block movable part to allow the easy transferring of a measurement.</li>\r\n</ol>\r\n',30,0,0,'CC-BY-SA','Vernier Caliper,measurement',0,0,1),
(3565,'2022-04-01','Heavy Hacking down in the quarry. ',468,'How to adjust a toggle plate on a MOBICAT MC 120 PRO Jaw Crusher','<p>Another trip down the quarry with Marshall aka Timtimmy. Today he\'s changing the toggle plate on a MOBICAT MC 120 PRO Jaw Crusher. We\'ve already covered it before but there is a brief refresher about the hydraulic, and pneumatic systems before we get to changing the plate itself. As always be sure you follow the safety instructions provided by the manufacturer.</p>\r\n\r\n<p>\r\n<img width=\"70%\" src=\"/eps/hpr3565/hpr3565/IMG_20220328_165606.jpg\" alt=\"Photo of the MOBICAT MC 120 PRO Jaw Crusher\" />\r\n</p>\r\n<p>\r\n<img width=\"70%\" src=\"/eps/hpr3565/hpr3565/IMG_20220328_165709.jpg\" alt=\"Photo of the MOBICAT MC 120 PRO Jaw Crusher\" />\r\n</p>\r\n\r\n<h3>Links</h3><ul><li><a href=\"https://www.wirtgen-group.com/ocs/en-in/kleemann/mc-120-pro-138-p/\">MOBICAT MC 120 PRO Jaw Crusher</a></li><li><a href=\"https://www.terex.com/evoquip/en/product/bison/bison-120\">Bison 120 Jaw Crusher</a></li><li><a href=\"https://www.hse.gov.uk/pubns/books/l118.htm\">Health and safety at quarries. The Quarries Regulations 1999. Approved Code of Practice </a></li><li><a href=\"https://en.wikipedia.org/wiki/British_Standard_Whitworth\">British Standard Whitworth (BSW)</a></li></ul>\r\n',392,0,0,'CC-BY-SA','quarry,hacking,Health and Safety',0,0,1),
(3536,'2022-02-21','Laptop power problems',1398,'This is a story of a laptop with two power problems.','<p>This is a story of a laptop with two power problems.</p>\r\n<p>The first and less severe is that sometimes the charging of the battery will get stuck at a certain percentage. This is not simply due to the effect commonly found with aging batteries but a fault with the laptop\'s charging hardware. A full reset of the charging system can fix it, which for this ASUS Zenbook UX550vd laptop requires a long press &#x2014; meaning 40 seconds &#x2014; from its shutdown state.</p>\r\n<p>The second and more serious issue is that the laptop thinks that it is plugged into AC power even when it is running only on battery. I ruled out an operating system or software issue because the issue remains whether running GNU/linux or Windows. The problem is serious because the power management software, in my case in KDE, will not respond to critically low battery levels by suspending or gracefully shutting down. It may be that a sudden loss of power damaged the previous SSD in this laptop, which was the subject of <a href=\"https://hackerpublicradio.org/eps.php?id=3428\">HPR 3428</a>.</p>\r\n<p>My first attempt to fool KDE into seeing accurate battery information under <code>/sys/class/power_supply/BAT0</code> using an overlay filesystem failed presumably because KDE\'s power system is listening out for some kind of event rather than simply monitoring those files. My second and successful attempt involved writing my own bash scripts run by cron to monitor battery levels and initiate actions when they got too low. There were errors with comedic consequences along the way. In fact, while writing these shownotes after I finished recording the audio, the laptop suspended itself because of a bug in my script - I used <code>le</code> (less than or equal to) rather than <code>lt</code> (less than) in my test for a change in the battery charge leading to unintended and fun consequences when the battery was fully charged.</p>\r\n',268,0,0,'CC-BY-SA','laptop,linux,power',0,0,1),
(3647,'2022-07-26','Weekend projects',1004,'Rho`n rambles about some weekend projects','<h1>Synopsis</h1>\r\n\r\n<p>In this episode, Rho`n rambles about some recent weekend repair projects. The main focus of this episode is fixing a bent patio table umbrella pole, along with his attempts to fix a punctured basketball. There are some successes, some failures, and some side stories along the way.</p>\r\n<style>\r\ndiv#figures {\r\n	display: flex;\r\n	flex-direction: row;\r\n	flex-wrap: wrap;\r\n	justify-content: center;\r\n}\r\ndiv#figures figcaption { max-width: 490px; }\r\ndiv#figures img { max-width: 50vw; padding-bottom: 0.15em }\r\n</style>\r\n<div id=\"figures\">\r\n<figure>\r\n	<a href=\"./eps/hpr3647/hpr3647/01.jpg\"><img src=\"./eps/hpr3647/hpr3647/01-sm.jpg\"\r\n         alt=\"Initial fixed umbrella pole.\"></a>\r\n	<br>\r\n    <figcaption>Intial fix using 1.25\" dowel rod and wood screws.</figcaption>\r\n</figure>\r\n<figure>\r\n    <a href=\"./eps/hpr3647/hpr3647/02.jpg\"><img src=\"./eps/hpr3647/hpr3647/02-sm.jpg\"\r\n								   alt=\"Fixed pole with epoxy resin wrap\"></a>\r\n	<br>\r\n    <figcaption>Fixed pole with epoxy resin wrap.</figcaption>\r\n</figure>\r\n<figure>\r\n    <a href=\"./eps/hpr3647/hpr3647/03.jpg\"><img src=\"./eps/hpr3647/hpr3647/03-sm.jpg\"\r\n								   alt=\"Fixed pole in regular standing position\"></a>\r\n	<br>\r\n    <figcaption>Fixed pole in regular position.</figcaption>\r\n</figure>\r\n</div>\r\n',293,0,0,'CC-BY-SA','diy, repairs, umbrella, basketball',0,0,1),
(3858,'2023-05-17','The Oh No! News.',873,'Sgoti talks about Toyota\'s data leak and more, on the Oh No! News.','<h2 id=\"the-oh-no-news.\">The <em>Oh No!</em> news.</h2>\n<h2 id=\"oh-no-news-is-good-news.\"><em>Oh No!</em> News is Good\nNews.</h2>\n<ul>\n<li><p><strong>Threat analysis; your attack surface.</strong></p></li>\n<li><p><strong>Article:</strong> <a\nhref=\"https://www.ic3.gov/Media/Y2023/PSA230407\"\ntitle=\"...coerce sextortion victims into paying for their services.\">For-Profit\nCompanies Charging Sextortion Victims for Assistance and Using Deceptive\nTactics to Elicit Payments.</a><br />\n</p>\n<ul>\n<li><strong>Author:</strong> FBI Internet Crime Complaint Center. (2023,\nApr 7).<br />\n</li>\n<li>The companies use deceptive tactics&#x2014;including threats, manipulation,\nand providing false information&#x2014;to coerce sextortion victims into paying\nfor their services. Some of the services for which the companies charge\nfees, such as sending the perpetrators cease and desist orders, make\nvictims feel better but are not legally enforceable. The companies may\nalso attempt to discourage victims from reporting the sextortion to law\nenforcement. Limited reporting indicates the companies are directly or\nindirectly involved in the sextortion activity.<br />\n</li>\n</ul></li>\n<li><p><strong>Article:</strong> <a\nhref=\"https://www.bleepingcomputer.com/news/security/former-ubiquiti-dev-who-extorted-the-firm-gets-six-years-in-prison/\"\ntitle=\"Attempting to extort his employer.\">Former Ubiquiti dev who\nextorted the firm gets six years in prison.</a><br />\n</p>\n<ul>\n<li><strong>Author:</strong> <a\nhref=\"https://www.bleepingcomputer.com/author/bill-toulas/\"\ntitle=\"Technology writer and infosec news reporter.\">Bill Toulas</a>.\n(2023, May 11).<br />\n</li>\n<li>Nickolas Sharp, a former senior developer of Ubiquiti, was sentenced\nto six years in prison for stealing company data, attempting to extort\nhis employer, and aiding the publication of misleading news articles\nthat severely impacted the firm\'s market capitalization.<br />\n</li>\n</ul></li>\n<li><p><strong>Article:</strong> <a\nhref=\"https://www.bleepingcomputer.com/news/security/toyota-car-location-data-of-2-million-customers-exposed-for-ten-years/\"\ntitle=\"Misconfiguration of the cloud environment.\">Toyota: Car location\ndata of 2 million customers exposed for ten years.</a><br />\n</p>\n<ul>\n<li><strong>Author:</strong> <a\nhref=\"https://www.bleepingcomputer.com/author/bill-toulas/\"\ntitle=\"Technology writer and infosec news reporter.\">Bill Toulas</a>.\n(2023, May 12).<br />\n</li>\n<li>Toyota Motor Corporation disclosed a data breach on its cloud\nenvironment that exposed the car-location information of 2,150,000\ncustomers for ten years, between November 6, 2013, and April 17,\n2023.<br />\n</li>\n</ul></li>\n<li><p><strong>Article:</strong> <a\nhref=\"https://www.gov.uk/government/news/failure-to-comply-with-bus-open-data-regulations-leads-to-financial-penalty-for-operator\"\ntitle=\"Financial penalty under section 155 of the Transport Act 2000.\">Failure\nto comply with Bus Open Data regulations leads to financial penalty for\noperator.</a><br />\n</p>\n<ul>\n<li><strong>Author:</strong> Traffic Commissioners for Great Britain.\n(2023, May 4).<br />\n</li>\n<li>The Traffic Commissioner for the West Midlands, Miles Dorrington,\nimposed a financial penalty under section 155 of the Transport Act 2000\nof &#xA3;1500, based on a &#xA3;100 penalty for each of the vehicles authorised on\nthe operator&#x2019;s licence.<br />\n</li>\n</ul></li>\n<li><p><strong>Article:</strong> <a\nhref=\"https://www.ic3.gov/Media/Y2023/PSA230410\"\ntitle=\"The FBI warns of criminal actors posing as Chinese law enforcement.\">Criminals\nPose as Chinese Authorities to Target US-based Chinese\nCommunity.</a><br />\n</p>\n<ul>\n<li><strong>Author:</strong> FBI Internet Crime Complaint Center. (2023,\nApr 10).<br />\n</li>\n<li>The FBI warns of criminal actors posing as Chinese law enforcement\nofficials or prosecutors in financial fraud schemes targeting the\nUS-based Chinese community. Criminals tell victims they are suspects in\nfinancial crimes and threaten them with arrest or violence if they do\nnot pay the criminals. Criminals exploit widely publicized efforts by\nthe People&#x2019;s Republic of China government to harass and facilitate\nrepatriation of individuals living in the United States to build\nplausibility for their fraud. Criminals typically call victims,\nsometimes using spoofed numbers to appear as if the call is from the\nChinese Ministry of Public Security, one of its localized Public\nSecurity Bureaus, or a US-based Chinese Consulate. Criminals may also\ncommunicate through online applications.<br />\n</li>\n</ul></li>\n</ul>\n<hr />\n<ul>\n<li><p><strong>User space.</strong></p></li>\n<li><p><strong>Article:</strong> <a\nhref=\"https://www.bleepingcomputer.com/news/security/twitter-rolls-out-encrypted-dms-but-only-for-paying-accounts/\"\ntitle=\"End-to-end encrypted DMs on Twitter.\">Twitter rolls out encrypted\nDMs, but only for paying accounts.</a><br />\n</p>\n<ul>\n<li><strong>Author:</strong> <a\nhref=\"https://www.bleepingcomputer.com/author/bill-toulas/\"\ntitle=\"Technology writer and infosec news reporter.\">Bill Toulas</a>\n(2023, May 11).<br />\n</li>\n<li>Twitter has launched its \'Encrypted Direct Messages\' feature\nallowing paid Twitter Blue subscribers to send end-to-end encrypted\nmessages to other users on the platform.<br />\n</li>\n<li>The private decryption key is only stored on the sender\'s device and\nis not shared with anyone else. However, the public encryption key is\nshared with others who want to send you encrypted data.<br />\n</li>\n</ul></li>\n<li><p><strong>Article:</strong> <a\nhref=\"https://www.bleepingcomputer.com/news/security/discord-discloses-data-breach-after-support-agent-got-hacked/\"\ntitle=\"third-party support agent was compromised.\">Discord discloses\ndata breach after support agent got hacked.</a><br />\n</p>\n<ul>\n<li><strong>Author:</strong> <a\nhref=\"https://www.bleepingcomputer.com/author/sergiu-gatlan/\"\ntitle=\"Sergiu Gatlan has covered cybersecurity, technology, and other news beats for more than a decade.\">Sergiu\nGatlan</a>. (2023, May 12).<br />\n</li>\n<li>Discord is notifying users of a data breach that occurred after the\naccount of a third-party support agent was compromised.<br />\n</li>\n<li>The security breach exposed the agent\'s support ticket queue, which\ncontained user email addresses, messages exchanged with Discord support,\nand any attachments sent as part of the tickets.<br />\n</li>\n</ul></li>\n</ul>\n<hr />\n<ul>\n<li><strong>Additional Information.</strong>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Data_breach\"\ntitle=\"From Wikipedia, the free encyclopedia.\">What is a \"Data\nBreach\"?</a> A data breach is a security violation, in which sensitive,\nprotected or confidential data is copied, transmitted, viewed, stolen,\naltered or used by an individual unauthorized to do so.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Malware\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is \"Malware\"?</a>\nMalware (a <a href=\"https://en.wikipedia.org/wiki/Portmanteau\"\ntitle=\"From Wikipedia, the free encyclopedia\">portmanteau</a> for\nmalicious software) is any software intentionally designed to cause\ndisruption to a computer, server, client, or computer network, leak\nprivate information, gain unauthorized access to information or systems,\ndeprive access to information, or which unknowingly interferes with the\nuser\'s computer security and privacy.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Payload_(computing)\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is a \"Payload\"?</a>\nIn the context of a computer virus or worm, the payload is the portion\nof the malware which performs malicious action; deleting data, sending\nspam or encrypting data. In addition to the payload, such malware also\ntypically has overhead code aimed at simply spreading itself, or\navoiding detection.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Phishing\"\ntitle=\"From Wikipedia, the free encyclopedia.\">What is \"Phishing\"?</a>\nPhishing is a form of <a\nhref=\"https://en.wikipedia.org/wiki/Social_engineering_(security)\"\ntitle=\"From Wikipedia, the free encyclopedia\">social engineering</a>\nwhere attackers deceive people into revealing sensitive information or\ninstalling malware such as <a\nhref=\"https://en.wikipedia.org/wiki/Ransomware\"\ntitle=\"From Wikipedia, the free encyclopedia\">ransomware</a>. Phishing\nattacks have become increasingly sophisticated and often transparently\nmirror the site being targeted, allowing the attacker to observe\neverything while the victim is navigating the site, and transverse any\nadditional security boundaries with the victim.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Information_security\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is \"Information\nSecurity\" (InfoSec)?</a> Information security, sometimes shortened to\nInfoSec, is the practice of protecting information by mitigating <a\nhref=\"https://en.wikipedia.org/wiki/Information\"\ntitle=\"From Wikipedia, the free encyclopedia\">information</a> risks. It\nis part of <a\nhref=\"https://en.wikipedia.org/wiki/Risk_management_information_systems\"\ntitle=\"From Wikipedia, the free encyclopedia\">information risk\nmanagement</a>.\n<ul>\n<li><strong>Information Security Attributes:</strong> <a\nhref=\"https://en.wikipedia.org/wiki/Confidentiality\"\ntitle=\"From Wikipedia, the free encyclopedia\">Confidentiality</a>, <a\nhref=\"https://en.wikipedia.org/wiki/Data_integrity\"\ntitle=\"From Wikipedia, the free encyclopedia\">Integrity</a> and <a\nhref=\"https://en.wikipedia.org/wiki/Availability\"\ntitle=\"From Wikipedia, the free encyclopedia\">Availability</a> (C.I.A.).\nInformation Systems are composed in three main portions, hardware,\nsoftware and communications with the purpose to help identify and apply\ninformation security industry standards, as mechanisms of protection and\nprevention, at three levels or layers: physical, personal and\norganizational. Essentially, procedures or policies are implemented to\ntell administrators, users and operators how to use products to ensure\ninformation security within the organizations.<br />\n</li>\n</ul></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Risk_management\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is \"Risk\nmanagement\"?</a> Risk management is the identification, evaluation, and\nprioritization of risks followed by coordinated and economical\napplication of resources to minimize, monitor, and control the\nprobability or impact of unfortunate events or to maximize the\nrealization of opportunities.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Vulnerability_(computing)\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is a \"Vulnerability\"\n(computing)?</a> Vulnerabilities are flaws in a computer system that\nweaken the overall security of the device/system. Vulnerabilities can be\nweaknesses in either the hardware itself, or the software that runs on\nthe hardware.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Attack_surface\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is an \"Attack\nSurface\"?</a> The attack surface of a software environment is the sum of\nthe different points (for \"attack vectors\") where an unauthorized user\n(the \"attacker\") can try to enter data to or extract data from an\nenvironment. Keeping the attack surface as small as possible is a basic\nsecurity measure.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Attack_vector\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is an \"Attack\nVector\"?</a> In computer security, an attack vector is a specific path,\nmethod, or scenario that can be exploited to break into an IT system,\nthus compromising its security. The term was derived from the\ncorresponding notion of vector in biology. An attack vector may be\nexploited manually, automatically, or through a combination of manual\nand automatic activity.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Standardization\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is\n\"Standardization\"?</a> Standardization is the process of implementing\nand developing technical standards based on the consensus of different\nparties that include firms, users, interest groups, standards\norganizations and governments. Standardization can help maximize\ncompatibility, interoperability, safety, repeatability, or quality. It\ncan also facilitate a normalization of formerly custom processes.\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/List_of_computer_standards\"\ntitle=\"From Wikipedia, the free encyclopedia\">List of computer\nstandards.</a><br />\n</li>\n<li><a\nhref=\"https://en.wikipedia.org/wiki/List_of_technical_standard_organizations\"\ntitle=\"From Wikipedia, the free encyclopedia\">List of technical standard\norganizations.</a><br />\n</li>\n</ul></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Replay_attack\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is a \"Replay\nattack\"?</a> A replay attack is a form of network attack in which valid\ndata transmission is maliciously or fraudulently repeated or delayed.\nAnother way of describing such an attack is: \"an attack on a security\nprotocol using a replay of messages from a different context into the\nintended (or original and expected) context, thereby fooling the honest\nparticipant(s) into thinking they have successfully completed the\nprotocol run.\"<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Man-in-the-middle_attack\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is a\n\"Man-in-the-middle attack\"?</a> In cryptography and computer security, a\nman-in-the-middle, ..., attack is a cyberattack where the attacker\nsecretly relays and possibly alters the communications between two\nparties who believe that they are directly communicating with each\nother, as the attacker has inserted themselves between the two\nparties.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is \"Transport Layer\nSecurity\" (TLS)?</a> Transport Layer Security (TLS) is a cryptographic\nprotocol designed to provide communications security over a computer\nnetwork. The protocol is widely used in applications such as email,\ninstant messaging, and voice over IP, but its use in securing HTTPS\nremains the most publicly visible.<br />\n</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Handshake_(computing)\"\ntitle=\"From Wikipedia, the free encyclopedia\">What is a \"Handshake\"\n(computing)?</a>. In computing, a handshake is a signal between two\ndevices or programs, used to, e.g., authenticate, coordinate. An example\nis the handshaking between a hypervisor and an application in a guest\nvirtual machine.</li>\n</ul></li>\n</ul>\n<hr />\n<ul>\n<li><strong>License:</strong> <a\nhref=\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\">Creative\nCommons Attribution-ShareAlike 4.0 International</a><br />\n<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\"><img alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-sa/4.0/88x31.png\" /></a><br />This\nwork is licensed under a\n<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\">Creative\nCommons Attribution-ShareAlike 4.0 International License</a>.</li>\n</ul>\n',391,74,0,'CC-BY-SA','Ubiquiti dev, Toyota, Sextortion, Twitter, Discord',0,0,1),
(3549,'2022-03-10','Linux Inlaws S01E51: git and static site generators',3206,'git and static site generators','<p> Another fortnight, another episode of our beloved podcast called Linux\r\nInlaws :-). What starts as an episode on the history of Central Europe and the\r\nrole of the Netherlands and Germany in the greater scheme of things rapidly\r\nmoves sideways into a discussion of git-powered static HTML website generators\r\nin contrast to context management systems (CMSs) and their advantages,\r\ndisadvantages and why the hell even think about this.  Chris uses an innocent\r\n(?) Linux User Group (LUG) as an example for a successful site migration from\r\na Python-powered CMS to a version of the website based on a static site\r\ngenerator written in Go and called Hugo.  Even if you may find this boring to\r\ntears stay tuned as there may be an unexpected ending of this ditty in the\r\nshape of two interesting poxes...  </p>\r\n\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>CMS: <a href=\"https://en.wikipedia.org/wiki/Content_management_system\" target=_blank>https://en.wikipedia.org/wiki/Content_management_system</a></li>\r\n<li>Adam and Eve: <a href=\"https://www.adam-and-eve.org\" target=_blank>https://www.adam-and-eve.org</a></li>\r\n<li>MoinMoin: <a href=\"https://moinmo.in\" target=_blank>https://moinmo.in</a></li>\r\n<li>WordPress: <a href=\"https://wordpress.org\" target=_blank>https://wordpress.org</a></li>\r\n<li>PEP 404: <a href=\"https://www.python.org/dev/peps/pep-0404\" target=_blank>https://www.python.org/dev/peps/pep-0404</a></li>\r\n<li>Python Enhancement Proposals: <a href=\"https://www.python.org/dev/peps\" target=_blank>https://www.python.org/dev/peps</a></li>\r\n<li>Static site generators (overview): <a href=\"https://kinsta.com/blog/static-site-generator\" target=_blank>https://kinsta.com/blog/static-site-generator</a></li>\r\n<li>Linux User Group Frankfurt: <a href=\"https://lugfrankfurt.de/en/Home\" target=_blank>https://lugfrankfurt.de/en/Home</a></li>\r\n<li>Gitea: <a href=\"https://gitea.io/en-us\" target=_blank>https://gitea.io/en-us</a></li>\r\n<li>HUGO: <a href=\"https://gohugo.io\" target=_blank>https://gohugo.io</a></li>\r\n<li>HUGO source code: <a href=\"https://github.com/gohugoio/hugo\" target=_blank>https://github.com/gohugoio/hugo</a></li>\r\n<li>Git (web)hooks: <a href=\"https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks\" target=_blank>https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks</a></li>\r\n<li>Reacher: <a href=\"https://en.wikipedia.org/wiki/Reacher_(TV_series)\" target=_blank>https://en.wikipedia.org/wiki/Reacher_(TV_series)</a></li>\r\n<li>The Comeback Trail: <a href=\"https://www.imdb.com/title/tt5420210/?ref_=nv_sr_srsg_0\" target=_blank>https://www.imdb.com/title/tt5420210/?ref_=nv_sr_srsg_0</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','git, content management systems, MoinMoin, HUGO, static site generators, HPR, PEPs, gitea, Reacher',0,0,1),
(3543,'2022-03-02','Idle thoughts on web browsers',476,'and a call for your own on the same','<p>Mentioned in this episode were:</p>\r\n<p>Sweet Maria\'s Coffee: Personal Brewing Routines &amp; The Weirdness of Coffee Culture <br />\r\n<a href=\"https://sweetmarias.libsyn.com/personal-brewing-routines-the-weirdness-of-coffee-culture\">https://sweetmarias.libsyn.com/personal-brewing-routines-the-weirdness-of-coffee-culture</a></p>\r\n<p>Hacker Public Radio 3273: Embrace Firefox, by Some Guy On The Internet <br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=3273\">https://hackerpublicradio.org/eps.php?id=3273</a></p>\r\n<p>To contribute your own idle thoughts in voice message form, join #thoughtsonbrowsers:matrix.org and leave your voice message. Then join #hpr:matrix.org and say hello.</p>\r\n',399,0,1,'CC-BY-SA','browsers,firefox,qutebrowser,tridactyl',0,0,1),
(3537,'2022-02-22','getting to blinky with flashforth',1708,'making an arduino board useful','<ul>\r\n<li>intro <a href=\"https://www.paypal.com/donate/?item_name=Donation+to+FlashForth%3A+for+PIC+and+Atmega&amp;cmd=_donations&amp;business=mikael.nordman%40flashforth.com\">Donation link</a></li>\r\n<li>what you\'ll need\r\n<ul>\r\n<li>hardware\r\n<ul>\r\n<li>arduino uno or nano</li>\r\n<li>programmer<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2799\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2799</a></li>\r\n<li>cables</li>\r\n</ul></li>\r\n<li>software\r\n<ul>\r\n<li>flashforth <a href=\"https://www.sourceforge.net/projects/flashforth\" class=\"uri\">https://www.sourceforge.net/projects/flashforth</a></li>\r\n<li>avrdude <a href=\"https://www.nongnu.org/avrdude/\" class=\"uri\">https://www.nongnu.org/avrdude/</a></li>\r\n<li>terminal program<br />\r\nemacs: M-x serial-term</li>\r\n</ul></li>\r\n<li><a href=\"https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf\">datasheet</a></li>\r\n</ul></li>\r\n<li>the install\r\n<ul>\r\n<li>the guide <a href=\"https://flashforth.com/atmega.html\" class=\"uri\">https://flashforth.com/atmega.html</a></li>\r\n<li>did it work?\r\n<ul>\r\n<li>troubleshooting\r\n<ul>\r\n<li>check connections</li>\r\n<li>permission issues</li>\r\n<li>set fuses separately, one at a time</li>\r\n<li>double checkterminal baud rate</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n<li>hello-world</li>\r\n</ul>\r\n<pre><code>: hw1 .&quot; Hello, world!&quot; ;\r\n: led-on %00100000 PORTB mset ;\r\n: led-off %00100000 PORTB mclr ;\r\n: flash-led begin led-on #1000 ms led-off #1000 ms again ;</code></pre>\r\n',326,0,0,'CC-BY-SA','arduino, forth',0,0,1),
(3786,'2023-02-06','HPR Community News for January 2023',2881,'HPR Volunteers talk about shows released and comments posted in January 2023','<style>\ntable td.shrink {\n    white-space:nowrap\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/0415.html\" target=\"_blank\">enistello</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.php?id=3761\" target=\"_blank\">3761</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-01-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3761\" target=\"_blank\">HPR Community News for December 2022</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.php?id=3762\" target=\"_blank\">3762</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-01-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3762\" target=\"_blank\">Existence is pain</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.php?id=3763\" target=\"_blank\">3763</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-01-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3763\" target=\"_blank\">The Baader-Meinhof Phenomenon</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0282.html\" target=\"_blank\">Mike Ray</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3764\" target=\"_blank\">3764</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-01-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3764\" target=\"_blank\">My text-focused journey into tech</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0415.html\" target=\"_blank\">enistello</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3765\" target=\"_blank\">3765</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-01-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3765\" target=\"_blank\">Fixing clock events in GBA pokemon cartridges</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0407.html\" target=\"_blank\">Celeste</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3766\" target=\"_blank\">3766</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-01-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3766\" target=\"_blank\">ACER Nitro 5 laptop review</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0365.html\" target=\"_blank\">Bookewyrmm</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3767\" target=\"_blank\">3767</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-01-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3767\" target=\"_blank\">LP article from Wikipedia</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.php?id=3768\" target=\"_blank\">3768</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-01-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3768\" target=\"_blank\">Jeep Ignition Repair</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0408.html\" target=\"_blank\">Stache_AF</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3769\" target=\"_blank\">3769</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-01-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3769\" target=\"_blank\">Crouching laptop, hidden server (part 0).</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.php?id=3770\" target=\"_blank\">3770</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-01-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3770\" target=\"_blank\">Tucson</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.php?id=3771\" target=\"_blank\">3771</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-01-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3771\" target=\"_blank\">How I eliminated pain naturally</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0383.html\" target=\"_blank\">Paul Quirk</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3772\" target=\"_blank\">3772</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-01-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3772\" target=\"_blank\">Adventures with a small solar panel</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0268.html\" target=\"_blank\">Andrew Conway</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3773\" target=\"_blank\">3773</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-01-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3773\" target=\"_blank\">My Public Speaking Rules</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0282.html\" target=\"_blank\">Mike Ray</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3774\" target=\"_blank\">3774</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-01-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3774\" target=\"_blank\">Emergency Show posted in 2014. Chump Car Report</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0209.html\" target=\"_blank\">David Whitman</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3775\" target=\"_blank\">3775</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-01-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3775\" target=\"_blank\">Emergency Show posted in 2014. How to make a punch-card computer</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0282.html\" target=\"_blank\">Mike Ray</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3776\" target=\"_blank\">3776</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-01-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3776\" target=\"_blank\">A linux distro review</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0365.html\" target=\"_blank\">Bookewyrmm</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3777\" target=\"_blank\">3777</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-01-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3777\" target=\"_blank\">Running Haiku on Bhyve, the BSD Hypervisor</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.php?id=3778\" target=\"_blank\">3778</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2023-01-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3778\" target=\"_blank\">A Squirrel Beeing on Google Products and Google Security</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3779\" target=\"_blank\">3779</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2023-01-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3779\" target=\"_blank\">Just Because You Can Do a Thing... </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.php?id=3780\" target=\"_blank\">3780</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2023-01-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3780\" target=\"_blank\">Fediverse Update May 2022</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.php?id=3781\" target=\"_blank\">3781</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2023-01-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3781\" target=\"_blank\">The Joule Thief</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0268.html\" target=\"_blank\">Andrew Conway</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3782\" target=\"_blank\">3782</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2023-01-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3782\" target=\"_blank\">Content Format article from Wikipedia</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0318.html\" target=\"_blank\">Archer72</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 27 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 8 comments on\n6 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1240#comments\" target=\"_blank\">hpr1240</a></strong>\n(2013-05-03) \"<em>Doomsday Rule</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0229.html\" target=\"_blank\">Charles in NJ</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1240#1\" target=\"_blank\">Comment 1</a>:\nCharles in NJ on 2023-01-20:\n\"Doomsday Python Code\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3751#comments\" target=\"_blank\">hpr3751</a></strong>\n(2022-12-19) \"<em>Using Noisetorch</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3751#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2023-01-22:\n\"Wow this actually works\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3753#comments\" target=\"_blank\">hpr3753</a></strong>\n(2022-12-21) \"<em>Some thoughts on \"Numeronyms\"</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3753#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2023-01-16:\n\"Pure obscurantism\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3753#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2023-01-18:\n\"Thanks dnt\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3754#comments\" target=\"_blank\">hpr3754</a></strong>\n(2022-12-22) \"<em>GOD probably will use a Chromebook</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3754#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2023-01-18:\n\"Trippy as hell\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3758#comments\" target=\"_blank\">hpr3758</a></strong>\n(2022-12-28) \"<em>First sysadmin job - war story</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0342.html\" target=\"_blank\">norrist</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3758#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2023-01-12:\n\"What a \"whodunit\"!\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3758#2\" target=\"_blank\">Comment 2</a>:\nbrian-in-ohio on 2023-01-25:\n\"love the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3759#comments\" target=\"_blank\">hpr3759</a></strong>\n(2022-12-29) \"<em>Chatting with dnt.</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3759#1\" target=\"_blank\">Comment 1</a>:\none_of_spoons on 2023-01-28:\n\"RISC V emulators.\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 19 comments on 11 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3762#comments\" target=\"_blank\">hpr3762</a></strong>\n(2023-01-03) \"<em>Existence is pain</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.php?id=3762#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2023-01-03:\n\"Thanks for sharing.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3762#2\" target=\"_blank\">Comment 2</a>:\none_of_spoons on 2023-01-28:\n\"Character entry devices.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3763#comments\" target=\"_blank\">hpr3763</a></strong>\n(2023-01-04) \"<em>The Baader-Meinhof Phenomenon</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0282.html\" target=\"_blank\">Mike Ray</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3763#1\" target=\"_blank\">Comment 1</a>:\nViv on 2023-01-05:\n\"Meta Baader-Meinhof\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3763#2\" target=\"_blank\">Comment 2</a>:\nMike Ray on 2023-01-06:\n\"I rest my case\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3764#comments\" target=\"_blank\">hpr3764</a></strong>\n(2023-01-05) \"<em>My text-focused journey into tech</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0415.html\" target=\"_blank\">enistello</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3764#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2023-01-25:\n\"emacs rocks\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3766#comments\" target=\"_blank\">hpr3766</a></strong>\n(2023-01-09) \"<em>ACER Nitro 5 laptop review</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0365.html\" target=\"_blank\">Bookewyrmm</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3766#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2023-01-12:\n\"Good Review, but Still Avoiding Gaming Laptops\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3766#2\" target=\"_blank\">Comment 2</a>:\nbookeyrmm on 2023-01-13:\n\"reply to claudio\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3767#comments\" target=\"_blank\">hpr3767</a></strong>\n(2023-01-10) \"<em>LP article from Wikipedia</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0318.html\" target=\"_blank\">Archer72</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3767#1\" target=\"_blank\">Comment 1</a>:\nCeleste on 2023-01-10:\n\"Riaa curve and italian youtuber video\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3768#comments\" target=\"_blank\">hpr3768</a></strong>\n(2023-01-11) \"<em>Jeep Ignition Repair</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0408.html\" target=\"_blank\">Stache_AF</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3768#1\" target=\"_blank\">Comment 1</a>:\none_of_spoons on 2023-01-28:\n\"Ear pieces.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3771#comments\" target=\"_blank\">hpr3771</a></strong>\n(2023-01-16) \"<em>How I eliminated pain naturally</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0383.html\" target=\"_blank\">Paul Quirk</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3771#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2023-01-25:\n\"music\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3772#comments\" target=\"_blank\">hpr3772</a></strong>\n(2023-01-17) \"<em>Adventures with a small solar panel</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0268.html\" target=\"_blank\">Andrew Conway</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3772#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2023-01-25:\n\"good info\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3773#comments\" target=\"_blank\">hpr3773</a></strong>\n(2023-01-18) \"<em>My Public Speaking Rules</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0282.html\" target=\"_blank\">Mike Ray</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3773#1\" target=\"_blank\">Comment 1</a>:\nmpardo on 2023-01-18:\n\"A \"must listen\" to all who aspire to speak to an audience\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3773#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2023-01-18:\n\"Thanks for sharing.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3773#3\" target=\"_blank\">Comment 3</a>:\none_of_spoons on 2023-01-19:\n\"Professional demeanour.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3773#4\" target=\"_blank\">Comment 4</a>:\nMike Ray on 2023-01-20:\n\"Thanks very much to everybody. I listened back to this when it was published. I hope the Christmas b\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3773#5\" target=\"_blank\">Comment 5</a>:\nMike Ray on 2023-01-21:\n\"Messed up that last comment\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3776#comments\" target=\"_blank\">hpr3776</a></strong>\n(2023-01-23) \"<em>A linux distro review</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0365.html\" target=\"_blank\">Bookewyrmm</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3776#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2023-01-25:\n\"how to do it\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3778#comments\" target=\"_blank\">hpr3778</a></strong>\n(2023-01-25) \"<em>A Squirrel Beeing on Google Products and Google Security</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3778#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2023-01-25:\n\"2fa\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3778#2\" target=\"_blank\">Comment 2</a>:\nJohnnyLawrence on 2023-01-26:\n\"Whoafully misinformed\"</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://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2023-January/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2023-January/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=\"show-transcripts\">Show transcripts</h3>\n<p>Transcripts of audio have been generated for shows since December\n2022, using the <a\nhref=\"https://openai.com/blog/whisper/\"><code>Whisper</code></a> tool.\nKen Fallon has been working on this project, and has also been\ntranscribing the older shows from <code>hpr0001</code> to the present\nday. This part of the project is complete.</p>\n<p>The transcripts have been attached to each show on the HPR website,\nand are in the process of being added on archive.org.</p>\n<ul>\n<li><a href=\"https://github.com/openai/whisper\">Whisper on\nGitHub</a></li>\n</ul>\n<h3 id=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on\narchive.org, phase 2</h3>\n<p>This \"re-upload\" <a\nhref=\"http://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">project</a>\nis now ended. All shows from 871 to 2429 have been re-uploaded with all\naudio files and other assets.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
