(2419,'2017-11-09','Alien Brothers Podcast S1E01 - Introduction',7584,'Meet the Alien Brothers: Casper and Rutiger.  Two tech junkies that take nothing sacred','<p>This was an impromptu inaugural episode recorded in Bethany Beach, DE.</p>\r\n<p>Casper and Rutiger work in the tech field and enjoy video games and popular media. We discuss the enigma that is the Handmaid\'s Tale, Tim &amp; Eric Awesome Show Great Job!, the movie Kids, video games from paperboy to Quake to Fallout 4. We comedically discuss the disillusionment that one can incur working in the cubical jungle. We also discuss going back to minimum wage after enjoying a high paying tech industry.</p>\r\n<p>We also reference obscure and not well-known music like Slint.</p>\r\n<p>The sound quality is not great in this episode, as it was an impromptu recording. All future episodes will be produced at a much higher quality</p>',359,0,1,'CC-BY-SA','video games, video cards, first podcast',0,0,1),
(2421,'2017-11-13','Project Interest',518,'Lostnbronx wonders how some projects die for lack of interest.','<p>This is just a short &quot;episode&quot; wherein I ponder the nature of showmanship and razzle-dazzle regarding the success or failure of FOSS, and other projects that require collaboration. Your comments and opinions are ACTIVELY encouraged.</p>',107,0,0,'CC-BY-SA','foss,collaboration,writing,projects',0,0,1),
(2422,'2017-11-14','Kickstarter Post Mortem',2763,'Klaatu talks about his failed Kickstarter campaign','<p>Klaatu tried to fund art for a card game on Kickstarter. Missed the goal by 85%</p>\r\n<p>This is a post mortem of how the Kickstarter went and where he may have gone wrong. Possibly you can learn from his mistakes. Possibly he has misdiagnosed his mistakes, and you are being misled. Choose wisely.</p>',78,95,0,'CC-BY-SA','Crowd Funding,Kickstarter,Tabletop Gaming',0,0,1),
(2423,'2017-11-15','Open Source Gaming #2: Oolite',431,'Episode 2 is about the space travel simulator Oolite, which is an open source remake of Elite','<p>The game\'s website. If you\'re interested in playing, check it out. <a href=\"https://www.oolite.org/\" class=\"uri\">https://www.oolite.org/</a></p>\r\n<p>Also here\'s the forum I was looking up during the podcast to find out if Elite Dangerous was multiplayer or not. <a href=\"https://steamcommunity.com/app/359320/discussions/0/142260718945308887/\" class=\"uri\">https://steamcommunity.com/app/359320/discussions/0/142260718945308887/</a></p>\r\n',354,0,1,'CC-BY-SA','Gaming, Open Source',0,0,1),
(2426,'2017-11-20','Let\'s Talk About Addiction',655,'Lostnbronx shares some thoughts about the need to talk about addiction.','<p>I was partially inspired by Bitbox\'s really wonderful episode, \"hpr2413: personal health care\", to ramble on about the need for the HPR community to, maybe, start talking about a mental health crisis that touches pretty much everyone in the modern world: addiction.</p>\r\n<p>Personal Health Care<br />\r\nhosted by Bitbox:<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2413\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2413</a></p>\r\n',107,100,1,'CC-BY-SA','addiction,mental health',0,0,1),
(2430,'2017-11-24','Scanning books',740,'Ken explains how and why he is scanning school books','<p>\r\nI want to scan my Son\'s school books so that he doesn\'t get back problems lugging books to and from school. Something that for now at least remains <a href=\"https://en.wikipedia.org/wiki/Copyright_law_of_the_Netherlands#The_right_to_homecopy\">legal</a> in the Netherlands.\r\n</p>\r\n<h3>Steps involved</h3>\r\n<ol>\r\n<li>Scan all the images using the entire length of your scanner. I use <a href=\"https://hackerpublicradio.org/eps/hpr2430/scantoimage.bash\">scantoimage.bash</a></li>\r\n<li>Confirm that there are no missing pages, and that every other page is upright and then upside down etc. If they are scan them and rename them so the name fits in between the pages</li>\r\n<li>Back up all the scanned images</li>\r\n<li>Manually crop the areas of the scans outside the area of the page. Usually this is on the side and bottom of the flat bed. Save is as something like ~/x.jpg</li>\r\n<li>Use <a href=\"https://www.graphicsmagick.org/\">GraphicsMagick Image Processing System</a> to identify the dimensions of the cropped image. <br />\r\n<span style=\"font-family:\'Lucida Console\', monospace\">\r\ngm identify ~/x.jpg<br />\r\n/home/me/x.jpg JPEG 2477x2609+0+0 DirectClass 8-bit 3.2Mi 0.000u 0m:0.000002s</span>\r\n</li>\r\n<li>Crop all the images to that dimension <br />\r\n<span style=\"font-family:\'Lucida Console\', monospace\">gm mogrify -crop 2477x2609+0+0 *.jpg</span>\r\n</li>\r\n<li>Rotate every second image by 180 degrees. <a href=\"https://hackerpublicradio.org/eps/hpr2430/rotate-every-second-image.bash\">rotate-every-second-image.bash</a></li>\r\n<li>Create a directory for the book and in there create a subdirectory for each section of the book. Manually copy all the images to the sub directory for that section. </li>\r\n<li>Then go to the root where there are no files only subdirs and run the command <br />\r\n<span style=\"font-family:\'Lucida Console\', monospace\">for i in *;do echo $i;gm convert \"${i}/*.jpg\" \"${i}.pdf\"; done</span></li>\r\n</ol>\r\n<p>\r\nAt the end you will have a pdf file for each section of the book.\r\n</p>',30,0,1,'CC-BY-SA','book scanning',0,0,1),
(2424,'2017-11-16','Interface Zero RPG Play',3010,'Klaatu, Lobath, and Thaj play the Interface Zero RPG','<p>Klaatu, Lobath, and Thaj play a session of <a href=\"https://drivethrurpg.com/product/214863/Interface-Zero-Pathfinder-Edition\">Interface Zero</a>, a role playing game using the <a href=\"https://paizo.com/beginnerbox\">Pathfinder</a> rules.\r\n</p>\r\n<p>\r\nIf you\'re new to RPG and want to hear how it\'s done, or you\'re just bored and want to hear some nerds play through a cyberpunk adventure, this is for you! Also - for one lucky listener - we have an RPG starter kit. Listen for details.</p> ',78,95,0,'CC-BY-SA','Interface Zero,actual play,rpg,gaming,live play',0,0,1),
(2425,'2017-11-17','Intro to XSL',2502,'A brief introduction to XSL and xsltproc','<p>\r\nSure, you can use pandoc to process your Docbook XML, but why not learn a little XSL this weekend?\r\n</p>\r\n<p><strong>Requirements</strong></p>\r\n<p>\r\nYou must have <a href=\"https://xmlsoft.org/XSLT/xsltproc.html\" target=\"_blank\">xsltproc</a> installed. It\'s available from your software repository.\r\n</p>\r\n<p>\r\nHere is some sample XML for you:\r\n</p>\r\n<pre><code>\r\n&#60;xml version=\"1.0\">\r\n  &#60;para>\r\n    My name is &#60;author>Foo&#60;/author>.\r\n  &#60;/para>\r\n\r\n  &#60;para>\r\n    You&#39;re listening to &#60;emphasis role=\"bold\">Hacker Public\r\n    Radio&#60;/emphasis>.\r\n  &#60;/para>\r\n&#60;/xml>\r\n</code></pre>\r\n<p>\r\nAnd here\'s the complete XSL as demonstrated:\r\n</p>\r\n<pre><code>\r\n&#60;xsl:stylesheet xmlns:xsl=\"https://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\r\n\r\n  &#60;xsl:template match=\"para\">\r\n    &#60;p>&#60;span>&#60;xsl:apply-templates/>&#60;/span>&#60;/p>\r\n  &#60;/xsl:template>\r\n\r\n  &#60;xsl:template match=\"emphasis\">\r\n    &#60;em>&#60;xsl:apply-templates/>&#60;/em>\r\n  &#60;/xsl:template>\r\n\r\n  &#60;xsl:template match=\"emphasis[@role=\'bold\']\">\r\n    &#60;strong>&#60;xsl:apply-templates/>&#60;/strong>\r\n  &#60;/xsl:template>\r\n\r\n  &#60;xsl:template match=\"author\" name=\"host\">\r\n    &#60;xsl:choose>\r\n\r\n      &#60;xsl:when test=\"$host = \'Klaatu\'\">\r\n        &#60;xsl:text>Klaatu&#60;/xsl:text>\r\n      &#60;/xsl:when>\r\n\r\n      &#60;xsl:when test=\"$host = \'Gort\'\">\r\n        &#60;xsl:text>Gort&#60;/xsl:text>\r\n      &#60;/xsl:when>\r\n    &#60;/xsl:choose>\r\n  &#60;/xsl:template>\r\n&#60;/xsl:stylesheet>\r\n</code></pre>\r\n<p><strong>Links</strong></p>\r\n<ul>\r\n<li>\r\n<p>\r\n<a href=\"https://nwalsh.com/docs/tutorials/xsl/xsl/frames.html\" target=\"_blank\">Norm Walsh</a>\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\n<a href=\"https://dpawson.co.uk/xsl/\" target=\"_blank\">dpawson</a>\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\n<a href=\"https://shop.oreilly.com/product/9780596003555.do\" target=\"_blank\">O\'Reilly</a>\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\n<a href=\"https://gitlab.com/notklaatu/dmschema\" target=\"_blank\">DM Schema</a>\r\n</p>\r\n</li>\r\n</ul>\r\n',78,0,0,'CC-BY-SA','docbook,xml,xsl',0,0,1),
(2427,'2017-11-21','Server Basics 101',2590,'Klaatu endeavours to explain the basics of server administration.','<p>Klaatu covers the very very basics of servers: what they are, how to know one when you see one, what one ought to run, and why we have them.</p>',78,0,0,'CC-BY-SA','server,admin,sys admin,linux',0,0,1),
(2429,'2017-11-23','Interface Zero RPG Play',1902,'Klaatu, Lobath, and Thaj play the Interface Zero RPG part 2','<p>The second session of <a href=\"https://drivethrurpg.com/product/214863/Interface-Zero-Pathfinder-Edition\">Interface Zero</a> RPG live play with Klaatu, Lobath, and Thaj.</p>\r\n\r\n<p>This week, Chiawei and Syd reach Peter\'s apartment and do some quick detective work, and a little bit of minor bone-breaking.</p>\r\n\r\n<p>\r\nIf you\'re <em>really</em> keen to play, send Klaatu an email (Klaatu at the domain of this podcast, or member.fsf.org). The recording schedule is inflexible, Klaatu has oddly high standards for audio that he is inevitably compresses down to 64kbps, and the game has already started, but a new character or guest character is not out of the question!</p>\r\n\r\n<p>No give-away this week, but we\'ll be giving a (digital) <a href=\"https://paizo.com/beginnerbox\">Pathfinder</a> starter kit out next week.</p>',78,95,0,'CC-BY-SA','Interface Zero,actual play,rpg,gaming,live play',0,0,1),
(2435,'2017-12-01','Server Basics 102',2926,'Klaatu talks about SSH configuration on the server you set up in 101.','<p>Klaatu talks about SSH, changing SSH ports, and using SSH keys for the server you presumably set up after hearing Server Basics 101 in this series.</p>',78,0,0,'CC-BY-SA','server,admin,sys admin,linux',0,0,1),
(2441,'2017-12-11','Server Basics 103',1773,'Firewalls and fail2ban','<p>Klaatu walks you through installing, configuring, and running fail2ban, and discusses the basics about firewalls.</p>\r\n\r\n<ul>\r\n<li><p><a href=\"https://firewalld.org\" target=\"_blank\">firewalld</a>\r\n</p></li>\r\n<li><p><a href=\"https://www.fail2ban.org/wiki/index.php/Main_Page\" target=\"_blank\">fail2ban</a>\r\n</p></li>\r\n</ul>',78,0,0,'CC-BY-SA','server,admin,sys admin,linux',0,0,1),
(2433,'2017-11-29','You were right, I was wrong',519,'Ken eats humble pie','<p>\r\nKen puts the record straight after inaccurate comments during <a href=\"https://hackerpublicradio.org/eps.php?id=2416\">hpr2416 :: HPR Community News for October 2017</a> about \r\n <a href=\"https://hackerpublicradio.org/eps.php?id=2406\">hpr2406 :: Putting Ends onto CAT6 Ethernet Cables</a> by <a href=\"https://hackerpublicradio.org/correspondents/0250.html\">Shane Shennan</a>.</p>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2406\">hpr2406 :: Putting Ends onto CAT6 Ethernet Cables</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2416\">hpr2416 :: HPR Community News for October 2017</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2416#1\">Comment #1 posted on 2017-11-09T17:33:23Z by Windigo</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Twisted_pair#History\">Wikipedia Twisted pair History</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Ethernet_over_twisted_pair#Cabling\">Wikipedia Ethernet over twisted pair</a></li>\r\n<li><a href=\"https://freemusicarchive.org/music/Memphis_Five/\">Memphis Five - Who\'s Sorry Now?</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=7v31-qORXPY\">Balanced Audio Noise Rejection &amp; Differential Pairs</a></li>\r\n</ul>\r\n',30,0,0,'CC-BY-SA','Correction',0,0,1),
(2432,'2017-11-28','Living with the Nokia 6 – an update to HPR 2405',316,'An update to my show on the Nokia 6 phone','<h3 id=\"living-with-the-nokia-6-an-update-to-hpr-2405\">Living with the Nokia 6 – an update to HPR 2405</h3>\r\n<p>I’ve now been using the Nokia 6 for about 2 months and just wanted to update listeners to my thoughts on the phone.</p>\r\n<p>First a response to Dave who said on the Community News that as he had a OnePlus 1 he was surprised I found it inadequate. The One+1 is a great phone, my problem with it was it does not support O2’s 4G network although it supports EE’s and 3’s 4G networks here in the UK, as I use GiffGaff which runs on the O2 network I have not been able to benefit from their 4G offer and I don’t want to change provider. Also the One+1 was stuck on CyanogenMod 13.1 (Android 6) and no longer got updates, so this was the reason for the new phone purchase. I’ve now flashed Lineage OS onto the One+1 and have a secure backup phone or one I can pass on to my Wife at some stage.</p>\r\n<p>Back to the Nokia, now I’ve lived with the phone for a few weeks I can say I am more than happy with it, and some of the issues with battery life I have found are unfounded once you configure some of the settings to be more battery friendly, such as restricting background access to the net for most aps the battery life is well over a day\'s use. At night in stand by mode over 8 hours battery use is less than 1% so even with moderate to heavy use I can get a day out of the phone without any risk of running out. Also if the official charger and cable are used a 1 hour charge gives about a 30-40% battery capacity, so not as slow as the reviews I’ve read. Would I still buy it having used it for 2 months, I would say yes to that, and I also have no issues with recommending it as a large format phone at a budget price.</p>',338,57,0,'CC-BY-SA','Android, Nokia 6, Phones, New Kit, OnePlus1',0,0,1),
(2437,'2017-12-05','Interface Zero Play-through Part 3',2543,'Klaatu, Lobath, and Thaj play the Interface Zero RPG','<p>\r\nKlaatu, Lobath, and Thaj continue their play-through of the Interface Zero RPG, using the <strong>Job InSecurity</strong> adventure.\r\n</p>\r\n\r\n<p>\r\nLyphrygerator composed by William Kenlon, used with permission.\r\n</p>\r\n\r\n<p>\r\nAll other music by Klaatu.\r\n</p>\r\n\r\n<p>Some sounds from <a href=\"https://freesound.org\" target=\"_blank\">freesound.org</a> used for texture. Obligatory credits will appear in final episode.\r\n</p>',78,95,1,'CC-BY-SA','Interface Zero,cyberpunk,rpg,game',0,0,1),
(2428,'2017-11-22','git Blobs',1982,'Klaatu talks about git-media and git-annex','<p>How do you manage large binary blobs, like pictures or video or sounds, when using git?</p>\r\n\r\n<p>In this episode, Klaatu explains two popular options&#58;</p>\r\n\r\n<ul>\r\n<li>\r\n<p>\r\n<a href=\"https://github.com/alebedev/git-media\" target=\"_blank\">git-media</a>\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\n<a href=\"https://git-annex.branchable.com/walkthrough/\" target=\"_blank\">git-annex</a>\r\n</p>\r\n</li>\r\n</ul>\r\n\r\n<p>Thanks to CapsLok at <a href=\"https://freesound.org/people/CapsLok/sounds/184438/\" target=\"_blank\">freesound.org</a> for the sound effect.</p>\r\n',78,81,0,'CC-BY-SA','git',0,0,1),
(2444,'2017-12-14','Interface Zero Play-through Part 4',1927,'Klaatu, Lobath, and Thaj play the Interface Zero RPG','<p>The investigation continues!</p>\r\n<p>Guest voice in this and episode 3 by Gort.</p>',78,95,0,'CC-BY-SA','Interface Zero,rpg,game,play,pathfinder,dnd',0,0,1),
(2438,'2017-12-06','Gnu Awk - Part 8',1239,'More about loops','<h1 id=\"gnu-awk---part-8\">Gnu Awk - Part 8</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the eighth episode of the &quot;<a href=\"https://hackerpublicradio.org/series/0094.html\" title=\"Learning Awk\">Learning Awk</a>&quot; series that\r\n<a href=\"https://hackerpublicradio.org/correspondents/0300.html\" title=\"b-yeezi\">b-yeezi</a> and I are doing.</p>\r\n<h2 id=\"recap-of-the-last-episode\">Recap of the last episode</h2>\r\n<ul>\r\n<li><p>The <code>while</code> loop: tests a condition and performs commands <em>while</em> the test returns true</p></li>\r\n<li><p>The <code>do while</code> loop: performs commands after the <code>do</code>, then tests afterwards, repeating the commands <em>while</em> the test is true.</\r\np></li>\r\n<li><p>The <code>for</code> loop (type 1): initialises a variable, performs a test, and increments the variable all together, performing commands while the test is \r\ntrue.</p></li>\r\n<li><p>The <code>for</code> loop (type 2): sets a variable to successive indices of an array, preforming a collection of commands for each index.</p></li>\r\n</ul>\r\n<p>These types of loops were demonstrated by examples in the <a href=\"https://hackerpublicradio.org/eps.php?id=2330\" title=\"Awk Part 7\">last episode</a>.</p>\r\n<p>Note that the example for \'<code>do while</code>\' was an infinite loop (perhaps as a test of the alertness of the audience!):</p>\r\n<pre><code>#!/usr/bin/awk -f\r\nBEGIN {\r\n\r\n    i=2;\r\n    do {\r\n        print &quot;The square of &quot;, i, &quot; is &quot;, i*i;\r\n        i = i + 1\r\n    }\r\n    while (i != 2)\r\n\r\nexit;\r\n}</code></pre>\r\n<p>The condition in the <code>while</code> is always true:</p>\r\n<pre><code>The square of  2  is  4\r\nThe square of  3  is  9\r\nThe square of  4  is  16\r\nThe square of  5  is  25\r\nThe square of  6  is  36\r\nThe square of  7  is  49\r\nThe square of  8  is  64\r\nThe square of  9  is  81\r\nThe square of  10  is  100\r\n...\r\nThe square of  1269630  is  1611960336900\r\nThe square of  1269631  is  1611962876161\r\nThe square of  1269632  is  1611965415424\r\nThe square of  1269633  is  1611967954689\r\nThe square of  1269634  is  1611970493956\r\n...</code></pre>\r\n<p>The variable <code>i</code> is set to 2, the <code>print</code> is executed, then <code>i</code> is set to 3. The test &quot;<code>i != 2</code>&quot; is true and will be <em>ad infinitum</em>.</p>\r\n<h2 id=\"some-more-statements\">Some more statements</h2>\r\n<p>We will come back to loops later in this episode, but first this seems like a good point to describe another statement: the <code>switch</code> statement.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>The notes for rest of this episode are available <a href=\"https://hackerpublicradio.org/eps/hpr2438/full_shownotes.html\">here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/html_node/index.html\"><em>GNU Awk User\'s Guide</em></a></li>\r\n<li>Previous shows in this series on HPR:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2114\">&quot;<em>Gnu Awk - Part 1</em>&quot;</a> - episode 2114</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2129\">&quot;<em>Gnu Awk - Part 2</em>&quot;</a> - episode 2129</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2143\">&quot;<em>Gnu Awk - Part 3</em>&quot;</a> - episode 2143</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2163\">&quot;<em>Gnu Awk - Part 4</em>&quot;</a> - episode 2163</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2184\">&quot;<em>Gnu Awk - Part 5</em>&quot;</a> - episode 2184</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2238\">&quot;<em>Gnu Awk - Part 6</em>&quot;</a> - episode 2238</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2330\">&quot;<em>Gnu Awk - Part 7</em>&quot;</a> - episode 2330</li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2438/full_shownotes.epub\">ePub version of these notes</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2438/full_shownotes.pdf\">PDF version of these notes</a></li>\r\n<li>Demonstration of the <code>switch</code> statement:\r\n<ul>\r\n<li>Script: <a href=\"https://hackerpublicradio.org/eps/hpr2438/switch_example.awk\">switch_example.awk</a></li>\r\n<li>Output: <a href=\"https://hackerpublicradio.org/eps/hpr2438/switch_example.out\">switch_example.out</a></li>\r\n</ul></li>\r\n<li>Demonstration of the <code>break</code> statement:\r\n<ul>\r\n<li>Script: <a href=\"https://hackerpublicradio.org/eps/hpr2438/divisor.awk\">divisor.awk</a></li>\r\n<li>Output: <a href=\"https://hackerpublicradio.org/eps/hpr2438/divisor.out\">divisor.out</a></li>\r\n</ul></li>\r\n<li>Demonstration of the <code>continue</code> statement:\r\n<ul>\r\n<li>Script: <a href=\"https://hackerpublicradio.org/eps/hpr2438/continue_example.awk\">continue_example.awk</a></li>\r\n</ul></li>\r\n<li>Demonstration of the <code>next</code> statement:\r\n<ul>\r\n<li>Script: <a href=\"https://hackerpublicradio.org/eps/hpr2438/next_example.awk\">next_example.awk</a></li>\r\n<li>Output: <a href=\"https://hackerpublicradio.org/eps/hpr2438/next_example.out\">next_example.out</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n',225,94,1,'CC-BY-SA','Awk utility,Awk language,gawk,loops',0,0,1),
(2442,'2017-12-12','The sound of Woodbrook Quaker Study centre in the Spring',937,'I recorded the sound of bird song at Woodbrook Quaker study Centre in Birmingham UK in April 2017','<p>This is a recording I made at Woodbrook Quaker Study Centre in Birmingham UK while I was there in April 2017.</p>\r\n<p>I got the idea to release it as a show after listening to <em>hpr2354 :: Night Sounds in Rural Tennessee</em> hosted by Jon Kulp so here it is all 15 minutes of it.</p>\r\n<p>The centre is right by the busy A38 trunk road so hence the constant hum of traffic noise in the background.</p>\r\n<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://www.woodbrooke.org.uk/\" class=\"uri\">https://www.woodbrooke.org.uk/</a></li>\r\n</ul>',338,101,0,'CC-BY-SA','birdsong',0,0,1),
(2443,'2017-12-13','pdmenu',927,'I have been using this menu tool over the past year, and I really like it','<h1 id=\"pdmenu\">pdmenu</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p><a href=\"https://joeyh.name/code/pdmenu/\" title=\"Pdmenu\"><code>Pdmenu</code></a> is a tool written by <a href=\"https://joeyh.name/\" title=\"Joey Hess\">Joey Hess</a> which allows the creation of a simple menu in a terminal (console) window. It is in his list of less active projects, and the latest version is dated 2014, but it seems to be quite complete and useful as it is.</p>\r\n<p>I like simple menus. As a Sysadmin in my last job I used one on OpenVMS which helped me run the various periodic tasks I needed to run - especially the less frequent ones - without having to remember all of the details.</p>\r\n<p>I do the same on my various Linux systems, and find that <code>pdmenu</code> is ideal for the task.</p>\r\n<h2 id=\"installation\">Installation</h2>\r\n<p>I found <code>pdmenu</code> in the Debian repositories (I run Debian Testing), and it was very easily installed. The C source is available as a tarfile, though I\r\n haven\'t tried building it myself.</p>\r\n<h2 id=\"running-pdmenu\">Running <code>pdmenu</code></h2>\r\n<p>Simply typing <code>pdmenu</code> at a command prompt will invoke the utility. It uses the file <code>/etc/pdmenurc</code> as its default configuration file, and this generates a menu with a demonstration of some of its features.</p>\r\n<p>This is not particularly useful but it can be overridden by creating your own configuration, which by default is in <code>~/.pdmenurc</code>. The <code>pdmenu</code> command itself takes a configuration file as an argument, so there is plenty of flexibility.</p>\r\n<h2 id=\"full-notes-and-examples\">Full notes and examples</h2>\r\n<p>The full notes which describe the use of <code>pdmenu</code> with examples can be found <a href=\"https://hackerpublicradio.org/eps/hpr2443/full_shownotes.html\">here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://joeyh.name/code/pdmenu/\">Pdmenu wiki</a></li>\r\n<li><a href=\"https://joeyh.name/\">Joey Hess</a></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2443/full_shownotes.html\">Long notes for this episode</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','command line,menu,pdmenu,.pdmenurc',0,0,1),
(2451,'2017-12-25','Server Basics 105 OpenVPN Client',1931,'Klaatu walks you through installing and configuring an OpenVPN client','<p>In the previous episode of this series, you set up an OpenVPN server. In this episode, Klaatu walks you through:</p>\r\n\r\n<ol>\r\n<li><p>\r\nInstalling OpenVPN on a client machine.\r\n</p></li>\r\n<li><p>\r\nGenerating a key and certificate request.\r\n</p></li>\r\n<li><p>\r\nSigning a client cert from the server.\r\n</p></li>\r\n<li><p>\r\nConfiguring the client.conf file.\r\n</p></li>\r\n<li><p>\r\nConfiguring the client routing table to use the VPN subnet.\r\n</p></li>\r\n<li><p>\r\nPinging the server over VPN&#33;&#33;&#33;\r\n</p></li>\r\n</ol>\r\n\r\n<p>Where to go from here? \r\n</p>\r\n<p>Your next steps should be to investigate how your org wants to use VPN, how your clients actually want to join the VPN &#40;Network Manager has some nice features that makes joining a VPN fairly transparent&#41;. Have fun&#33;</p>',78,0,0,'CC-BY-SA','server,vpn,sys admin',0,0,1),
(2447,'2017-12-19','Server Basics 104 OpenVPN Server',2595,'Klaatu walks you through installing and configuring OpenVPN Server','<p>In this episode, Klaatu demonstrates how to:\r\n</p>\r\n\r\n<ol>\r\n<li><p>\r\nInstall OpenVPN\r\n</p></li>\r\n<li><p>\r\nGenerate certificates for your OpenVPN server\r\n</p></li>\r\n<li><p>\r\nGenerate a private key for your OpenVPN server\r\n</p></li>\r\n<li><p>\r\nConfigure the &#47;etc&#47;openvpn&#47;server.conf file\r\n</p></li>\r\n<li><p>\r\nStart the OpenVPN daemon\r\n</p></li>\r\n</ol>\r\n\r\n<p>In case it is not clear, you can follow along with Klaatu, using the exact same options and configuration values as he is using for a successful install. You do not need to change</p>\r\n<p>In the next episode, he will demonstrate how to do all of the above for OpenVPN clients.</p>\r\n\r\n<p>\r\nVPN is a <em>big</em> topic that warrants a whole miniseries unto itself, so this and the next episode concentrate on getting a VPN up and running, with clients connected and pinging back to the server on a dedicated subnet. Additional config options based on your specific use-case are left for you to explore on your own.\r\n</p>',78,0,0,'CC-BY-SA','server,vpn,sys admin',0,0,1),
(2448,'2017-12-20','Useful Bash functions - part 3',2033,'A few more possibly useful Bash functions are discussed','<h1 id=\"useful-bash-functions---part-3\">Useful Bash functions - part 3</h1>\r\n<h2 id=\"overview\">Overview</h2>\r\n<p>This is the third show about Bash functions. These are a little more advanced than in the earlier shows, and I thought I\'d share them in case they are useful to anyone.</p>\r\n<p>As before it would be interesting to receive feedback on these functions and would be great if other Bash users contributed ideas of their own.</p>\r\n<h2 id=\"full-notes\">Full Notes</h2>\r\n<p>Since the notes explaining this subject are long, they have been placed <a href=\"https://hackerpublicradio.org/eps/hpr2448/full_shownotes.html\">here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Previous HPR episodes in this group <em>Useful Bash functions</em>:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1757\">Part 1</a>: \'<code>pad</code>\' and \'<code>yes_no</code>\' functions</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2096\">Part 2</a>: \'<code>yes_no</code>\' revisited</li>\r\n</ul></li>\r\n<li>Download the <a href=\"https://hackerpublicradio.org/eps/hpr2448/read_value.sh\"><em>read_value</em></a>, <a href=\"https://hackerpublicradio.org/eps/hpr2448/check_value.sh\"><em>check_value</em></a> and <a href=\"https://hackerpublicradio.org/eps/hpr2448/read_and_check.sh\"><em>read_and_check</em></a> functions and the <a href=\"https://hackerpublicradio.org/eps/hpr2448/trace_of_read_value.txt\">trace of <em>read_value</em></a>.</li>\r\n</ul>',225,42,1,'CC-BY-SA','coding,Bash,script,function',0,0,1),
(2439,'2017-12-07','Internal Logic of Stories',1152,'Lostnbronx talks about stories and story consistency.','<p>Lostnbronx rambles on about the structure of stories, and how their internal logic can make or break them.</p>\r\n<ul>\r\n<li><p>Star Trek\'s warp drive, as described on the Memory Alpha wiki:<br />\r\n<a href=\"https://memory-alpha.wikia.com/wiki/Warp_drive\" class=\"uri\">https://memory-alpha.wikia.com/wiki/Warp_drive</a></p></li>\r\n<li><p>My own use of the starjump concept is probably best heard in Stardrifter Book 03: &quot;Risk Analysis&quot;<br />\r\n<a href=\"https://downloads.cavalcadeaudio.com/stardrifter-novels/03-risk-analysis/?p=home\" class=\"uri\">https://downloads.cavalcadeaudio.com/stardrifter-novels/03-risk-analysis/?p=home</a></p></li>\r\n</ul>',107,105,0,'CC-BY-SA','stories,storytelling,gaming,rpg,movies,writing,star trek,stardrifter,warp,starjump,lostnbronx',0,0,1),
(2446,'2017-12-18','Git server and git hooks',2430,'Klaatu talks about running git on a server, and explains git hooks.','<p>A sample post-receive git hook:</p>\r\n<pre><code>\r\n#!/usr/bin/tcsh\r\n\r\nforeach arg ( $< )\r\n  set argv = ( $arg )\r\n  set refname = $1\r\nend\r\n\r\nset branch = `git rev-parse --symbolic --abbrev-ref $refname`\r\necho $branch\r\n\r\n    if ( \"$branch\" == \"master\" ) then\r\n      echo \"Branch detected: master\"\r\n      echo \"Do some stuff here.\"\r\n    else if ( \"$branch\" == \"dev\" ) then\r\n      echo \"Branch detected: dev\"\r\n      echo \"Do something else here.\"\r\n      else\r\n        echo \"Do something entirely different here.\"\r\n    endif\r\n</code></pre>\r\n',78,81,0,'CC-BY-SA','git',0,0,1),
(2440,'2017-12-08','How to save bad beans or the French press',57,'how to hash tag coffee?','<h3>Memorial</h3>\r\n<p>\r\nWe take some time to remember our good friend and fellow host <a href=\"https://hackerpublicradio.org/correspondents/0024.html\">Lord Drachenblut</a> who passed away one year ago yesterday. <br />\r\nNow may be a good time to re listen to <a href=\"https://hackerpublicradio.org/eps.php?id=2201\">hpr2201 :: Matthew \"Lord Drachenblut\" Williams</a> HPR Community members remember the digital dragon.\r\n</p>\r\n\r\n<h3>Shownotes</h3>\r\n<p>I was driving in a place where I had no signal, so I recorded an episode about the first thing that popped into my mind.</p>\r\n<p>Recorded with lineageos recorder app through monster isport bluetooth headphones. I\'m amazed at the sound quality. I\'ll do this more. I promise</p>\r\n<p>(no I won\'t, I\'m lazy)</p>',126,88,1,'CC-BY-SA','driving, coffee',0,0,1),
(2445,'2017-12-15','Information Underground: Backwards Capitalism',2896,'Klaatu, Deepgeek, and Lostnbronx talk about markets, innovation, and opportunity.','<p>\r\nThe Info-Underground guys consider why capitalism does (or maybe doesn\'t) work, why people use it as a tool for a better life (or maybe don\'t), and what the source of ambition, commercial aspiration, and greed truly is (or maybe isn\'t).\r\n</p>',107,99,0,'CC-BY-SA','information underground,capitalism,klaatu,deepgeek,lostnbronx',0,0,1),
(2453,'2017-12-27','The power of GNU Readline - part 2',1165,'Various ways of deleting and undeleting on the command line with GNU Readline','<h1 id=\"the-power-of-gnu-readline---part-2\">The power of GNU Readline - part 2</h1>\r\n<p>In <a href=\"https://www.hackerpublicradio.org/eps.php?id=2073\" title=\"The power of GNU Readline - part 1\">part 1</a> we looked at some <code>Control</code> key and <code>Meta</code> key sequences as well as the <code>Backspace</code> and <code>DEL</code> keys in the context of GNU Readline.</p>\r\n<p>The full-length notes (available <a href=\"https://hackerpublicradio.org/eps/hpr2453/full_shownotes.html\">here</a>) contain a brief summary of what we covered and introduce <em>cutting</em> and <em>pasting</em> the GNU Readline way, with some examples.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.ibb.net/~anne/keyboard.html\">Consistent BackSpace and Delete Configuration</a></li>\r\n<li>Wikipedia article on <a href=\"https://en.wikipedia.org/wiki/GNU_Readline\"><em>GNU Readline</em></a></li>\r\n<li><em>GNU Readline</em> manual: <a href=\"https://tiswww.cwru.edu/php/chet/readline/rluserman.html\" class=\"uri\">https://tiswww.cwru.edu/php/chet/readline/rluserman.html</a> (Note that the widely advertised address https://cnswww.cns.cwru.edu/php/chet/readline/rltop.html seems not to work any more. This one, which I found through the main GNU site, seems OK though)</li>\r\n<li>Previous episode:\r\n<ul>\r\n<li><a href=\"https://www.hackerpublicradio.org/eps.php?id=2073\">The power of GNU Readline - part 1</a></li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2453/full_shownotes.html\">Detailed notes</a></li>\r\n</ul></li>\r\n</ul>',225,102,1,'CC-BY-SA','command line,cli,GNU Readline',0,0,1),
(2449,'2017-12-21','Org-mode mobile solution',578,'My search for taking org mode on the road','<h1 id=\"brief-introduction\">brief introduction</h1>\r\n<h2 id=\"myself\">myself</h2>\r\n<p>Hi, I\'m Brian in Ohio</p>\r\n<h2 id=\"inspiration-for-show\">inspiration for show</h2>\r\n<p>I wanted to tell a little about my trials and tribulations of finding a solution to taking org mode on the road. What\'s org mode? Listen to my last episode or do a duckduckgo to find out.</p>\r\n<h2 id=\"parameters\">parameters</h2>\r\n<p>After switching from using a bullet journal to using emacs-org-mode as my organizing device I immediately saw that lugging a laptop everywhere was not going to work for me. I wanted to be able to access org-mode, especially the agenda view, anywhere I might be. Laptops with limited battery life and a large physical presence were not going to work for me.</p>\r\n<h1 id=\"mobile-org-app\">mobile-org app</h1>\r\n<p>The first solution I tried, and the most obvious, was the mobile-org app. Its available for android or ios. I can only attest to the android version. Its an easy from the play store. This solution didn\'t work for me for a number of reasons. First, the documentation for the setup is terrible, and I became frustrated by the workflow and could not get useful results using the app. Mobile-org seems to be built around using dropox. In order to get around that I tried various methods of syncing my org files using onboard storage. Seeing this wasn\'t going to work I bit the bullet setup a dropbox account installed the clients, one on my slackware laptop and the other on my phone only to find dropbox doesn\'t support this application anymore. A little digging around and it seems the API used by mobile-org isn\'t up to snuff any more so, fail. I cut my loses and moved on to another possible solution.</p>\r\n<h1 id=\"pi-top\">pi-top</h1>\r\n<p>My next crack at solving the portable org mode problem was getting a pitop laptop <a href=\"https://pi-top.com/\">https://pi-top.com/</a>. Pitop is a laptop based on a raspberrypi. I won\'t go into the details of the device here but I\'ll say my idea for using this device was its advertised 8+ hour battery life. My old linux laptops rarely give me 2 hours of life So even though the pitop was physically larger than I wanted I gave it a whirl. Lets just say the battery does last 8+ hours, it just can\'t survive many recharges. 2 battery packs later I gave up on the pitop and went looking for something else.</p>\r\n<h1 id=\"pocketchip\">pocketchip</h1>\r\n<p>I heard klaatu mention a device called a pocketchip on his gnuworld order podcast <a href=\"https://gnuworldorder.info/\">https://gnuworldorder.info/</a>. I looked into it and here I thought might be a device that could work. Pocketchip <a href=\"https://getchip.com/pages/pocketchip\">https://getchip.com/pages/pocketchip</a> is a handheld linux computer. After ordering the device I began setting it up for my use case. There are plenty of tutorials on the pocketchip website on how to extend the usefulness of this product. The size of the device was good and the battery life was ok. Some people complain about the chicklet keyboard but I actually did not mind it to much. It took some fiddling to get the emacs keybindings I use to work on the odd keyboard layout, but its a linux computer so there\'s plenty of information out there. I used a thumb drive as a repository for my org files, wrote a couple of scripts to sync up the files with whatever device the drive was plugged into and wala a mobile org solution! Alas, the pocketchips demise was its build quality. The heart of the pocketchip, the system board\'s usb mini plug fell off, and then one system tweak later I bricked the device. I\'ll recover it eventually, you can program it through the gpio pins, but this was a quest for portable-org-mode, not fixing pocketchips, so onward.</p>\r\n<h1 id=\"raspberry-pi-tablet\">raspberry pi tablet</h1>\r\n<p>I saw a build of a raspberry pi tablet that looked very nice <a href=\"https://www.stefanv.com/electronics/a-compact-home-made-raspberry-pi-tablet.html\">https://www.stefanv.com/electronics/a-compact-home-made-raspberry-pi-tablet.html</a>. Always up for a challenge, I cobbled together a prototype and tried it out. The reason I eventually dropped this solution because the virtual keyboard didn\'t work well and I couldn\'t get the official raspberrypi lcd to rotate from portrait to landscape dynamically. Still a fun project and I\'ll get some use out of it sometime.</p>\r\n<h1 id=\"android-phone\">android phone</h1>\r\n<p>Well here\'s the solution I came up with. I was searching around on the internet and found a link telling about running emacs on an android phone. <a href=\"https://endlessparentheses.com/running-emacs-on-android.html\">https://endlessparentheses.com/running-emacs-on-android.html</a>. It involves installing the termux app, the hackers keyboard, both available in the google play store and apt-get installing emacs on the phone. After that I had full emacs running, all be it in a terminal so its slightly different then running on the desktop, and with emacs you get, drum roll please, org-mode. With this i have the device I always take with running org-mode. I sink my org files between my laptop and phone using the afore mentioned drop box account. The hackers keyboard works flawlessly and can digest any emacs keybinding I need. I also have a logitech bluetoothkeyboard that I can use if I have a lot of typing to do in org-mode on my phone, such as these shownotes!</p>\r\n<h1 id=\"conclusions\">conclusions</h1>\r\n<p>I find org-mode so useful that I want it available any where I go. And over the course of the last 8 months I went on a journey trying to find a solution to that desire. In the end, the solution was pretty obvious, these portable computers we carry around are amazing and thanks to the developers of termux and the hackers keyboard my phone is now infinitely more useful to me. Thanks for listening.</p>\r\n',326,0,0,'CC-BY-SA','emacs,org-mode,mobile,mobile-org app,pi-top,pocketchip,Android',0,0,1),
(2450,'2017-12-22','Android Audio with viper 4 android and magisk',609,'I go over some ways to help manage audio with android','<ul>\r\n<li><p>viper4android<br />\r\n<a href=\"https://vipersaudio.com/blog/?page_id=48\" class=\"uri\">https://vipersaudio.com/blog/?page_id=48</a></p></li>\r\n<li><p>magisk<br />\r\n<a href=\"https://forum.xda-developers.com/apps/magisk/official-magisk-v7-universal-systemless-t3473445\" class=\"uri\">https://forum.xda-developers.com/apps/magisk/official-magisk-v7-universal-systemless-t3473445</a></p></li>\r\n</ul>',36,0,1,'CC-BY-SA','audio,android',0,0,1),
(2452,'2017-12-26','Hydraulic Heavy Scale Project',1339,'Hydraulic Jack Mod, DIY, Travel Trailer Balance','<h2 id=\"hydraulic-heavy-scale-project\">Hydraulic Heavy Scale Project</h2>\r\n<h3 id=\"by-david-whitman\">by David Whitman</h3>\r\n<p>Why? - to weigh a heavy object yourself</p>\r\n<p>Not very difficult. Can be done in about 1/2 hour by someone who has experience doing this type of stuff. Lots longer for beginners.</p>\r\n<p>Things you will need: A drill motor, The right size bit for a small pilot hole and the right size bit for a fitting to connect the jack cylinder to the pressure gauge, A Thread TAP to make threads to connect the hydraulic 90 degree fitting to the jack, Some pipe dope is not a bad idea, A 90 degree appropriately sized fitting to connect a pressure gauge to the jack, a vise is nice, a wrench to dismantle the jack, A way to accurately measure the cylinder bore (best is a caliper) and some oil to refill the jack.</p>\r\n<p>This link is a youtube to help you visualize the steps. <a href=\"https://www.youtube.com/watch?v=ZBmxkWK_OFA\" class=\"uri\">https://www.youtube.com/watch?v=ZBmxkWK_OFA</a></p>\r\n<p>Hate this episode? No problem. Do a better one</p>',209,0,0,'CC-BY-SA','Hydraulic Jack Mod, DIY, Travel Trailer Balance',0,0,1),
(2454,'2017-12-28','The Alien Brothers Podcast - S01E02 - Strictly Hacking',6389,'Casper and Rutiger discuss the Uber hacks and the Intel ME known and unknown vulnerabilties','<p>Casper and Rutiger attempt to STAY ON TARGET by discussing hacking… which when you think about it is an utterly pretentious and vague goal for a podcast presented by Hacker Public Radio, especially when considering the end result. Shame on us!</p>\r\n<p>Other topics include Friendsgiving and giving thanks; probably the greatest gaming console of the 1970’s; early “hackings” (sic) committed by the hosts; &lt;&lt; &gt;&gt;</p>\r\n<h2 id=\"references\">References:</h2>\r\n<ol type=\"1\">\r\n<li>The link to the first chapter of Dief Minusky’s seminal the Nature of Systems is freely available here.<br />\r\n<a href=\"https://www.dropbox.com/s/or5vefjumde4qsk/TNOS%20E-I%20C1%2020030415.pdf?dl=0\">https://www.dropbox.com/s/or5vefjumde4qsk/TNOS%20E-I%20C1%2020030415.pdf?dl=0</a><br />\r\nAlthough we referred to the Chapter 8 material on system network security during the show, Rutiger decided it was better to release chapters, incrementally, in order let listeners gain a fuller appreciation for the work. Rutiger is also attempting to track down the original author, who never publicly released the work, to gain retroactive permission for this link, but for the moment Alien Brothers Podcast takes full responsibility for allowing access to this non-copyrighted work and we’ll just go ahead, you know, feel good about the possibility it will all turn out OK.</li>\r\n<li>Uber Data Breach (2017; CNN.com)</li>\r\n<li>How to Disable the Intel Management Engine Backdoor<br />\r\n<a href=\"https://beinglibertarian.com/disable-intel-management-engine-backdoor-courtesy-nsa/\" class=\"uri\">https://beinglibertarian.com/disable-intel-management-engine-backdoor-courtesy-nsa/</a></li>\r\n</ol>',359,0,1,'CC-BY-SA','Uber Hack, Intel ME, Alien Brothers',0,0,1),
(2455,'2017-12-29','Interface Zero RPG Part 5',5074,'Klaatu, Lobath, and Thaj play the Interface Zero RPG part 5','<p>An extra-long episode of the grand finale of the Interface Zero RPG play-through.</p>\r\n\r\n<p>Spoilers&#58; Chaiwei dies in combat and Syd runs off with Tina.</p>\r\n\r\n<p>\r\nAt the end of the show are all the credits containing sound effects and source materials. Here they are in text form.</p>\r\n\r\n<p>\r\nSound effects were taken from <a href=\"https://freesound.org\" target=\"_blank\">freesound.org</a>. Thanks to the following artists&#58;\r\n</p>\r\n\r\n<ul>\r\n<li>\r\n<p>\r\ninterfacezero/muzak/70891__spukkin__trumpetmetal.wav</p></li><li>\r\n<p>\r\ninterfacezero/muzak/212926__simongray__mojo-cafe-nr-wagamama.flac</p></li><li>\r\n<p>\r\ninterfacezero/muzak/243629__lebcraftlp__heavy-rain.flac</p></li><li>\r\n<p>\r\ninterfacezero/muzak/382735__schots__gun-shot.flac</p></li><li>\r\n<p>\r\ninterfacezero/muzak/186104__marcel-farres__elevator.flac</p></li><li>\r\n<p>\r\ninterfacezero/muzak/187866__theomegapixel__metal-grind.flac</p></li><li>\r\n<p>\r\ninterfacezero/muzak/66713__sunnysidesound__desk-pound.wav</p></li><li>\r\n<p>\r\ninterfacezero/muzak/367222__bluedelta__thunder-rain-low-frequencies-4-channel-48khz.wav</p></li><li>\r\n<p>\r\ninterfacezero/muzak/212678__fridobeck__firework-explosion-1.wav</p></li><li>\r\n<p>\r\ninterfacezero/muzak/213610__dpoggioli__laser-gun-explosion.wav</p></li><li>\r\n<p>\r\ninterfacezero/muzak/100772__cgeffex__huge-rocket-launcher.wav</p></li><li>\r\n<p>\r\ninterfacezero/muzak/336735__newagesoup__double-explosion-bright-dark.wav</p></li><li>\r\n<p>\r\ninterfacezero/ep2/329877__klavo1985__music-of-the-black-circus-the-very-best-by-kris-klavenes.flac</p></li><li>\r\n<p>\r\ninterfacezero/ep2/94914__pcaeldries__lakeside2.flac</p></li><li>\r\n<p>\r\ninterfacezero/ep2/153376__inchadney__the-bay.flac</p></li><li>\r\n<p>\r\ninterfacezero/ep3/152396__taavi55__big-smash.ogg</p></li><li>\r\n<p>\r\ninterfacezero/ep3/135465__joelaudio__quick-smash-001.wav</p></li><li>\r\n<p>\r\ninterfacezero/ep3/387177__pfranzen__smashing-a-glass.ogg</p></li>\r\n</ul>\r\n\r\n<p><strong>Music</strong></p>\r\n<ul>\r\n<li>\r\n<p>\r\n<strong>Lyphrygerator</strong> and <strong>Wood&#47;Water</strong> by <a href=\"https://williamkenlon.com\" target=\"_blank\">William Kenlon</a>, used with permission.\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nAll other music by Klaatu.\r\n</p>\r\n</li>\r\n</ul>\r\n\r\n<p><strong>Story</strong></p>\r\n\r\n<p>\r\nWant to play this game yourself?\r\n</p>\r\n\r\n<ul>\r\n<li>\r\n<p>\r\nPathfinder and Starfinder are by <a href=\"https://paizo.com\" target=\"_blank\">Paizo</a>\r\n</p>\r\n</li>\r\n<li><p>\r\n<strong>Interface Zero</strong> module available from <a href=\"https://drivethrurpg.com/product/214863/Interface-Zero-Pathfinder-Edition\" target=\"_blank\">driveThruRPG.com</a>\r\n</p></li>\r\n\r\n<li><p>\r\nAdventure path <strong>Job inSecurity</strong> is available from <a href=\"https://drivethrurpg.com\">driveThruRPG.com</a>.\r\n</p>\r\n</li>\r\n<li><p>The source of the story is available from <a href=\"https://www.drivethrurpg.com/product/229831/Job-inSecurity\">driveThruRPG.com</a></p></li>\r\n</ul>\r\n<p><small><small>Editor\'s note 2017-12-28: link added from comments.</small></small></p> \r\n',78,95,1,'CC-BY-SA','Interface Zero,game,gaming,tabletop,rpg',0,0,1),
(2457,'2018-01-02','Getting ready for my new Macbook Pro',1165,'Knightwise is about to order a new macbook pro and shares some tips and tricks','<p>I am about to buy a new macbook pro and talk about the things I do to install and protect it.</p>\r\n<ul>\r\n<li><p>The case<br />\r\n<a href=\"https://www.amazon.de/gp/product/B01MPYI8SA/ref=oh_aui_detailpage_o01_s00?ie=UTF8&amp;psc=1\" class=\"uri\">https://www.amazon.de/gp/product/B01MPYI8SA/ref=oh_aui_detailpage_o01_s00?ie=UTF8&amp;psc=1</a></p></li>\r\n<li><p>The Cables<br />\r\n<a href=\"https://www.amazon.de/gp/product/B06W53PXRB/ref=oh_aui_detailpage_o01_s00?ie=UTF8&amp;psc=1\" class=\"uri\">https://www.amazon.de/gp/product/B06W53PXRB/ref=oh_aui_detailpage_o01_s00?ie=UTF8&amp;psc=1</a><br />\r\n<a href=\"https://www.amazon.de/gp/product/B01COOQIKU/ref=oh_aui_detailpage_o01_s00?ie=UTF8&amp;psc=1\" class=\"uri\">https://www.amazon.de/gp/product/B01COOQIKU/ref=oh_aui_detailpage_o01_s00?ie=UTF8&amp;psc=1</a></p></li>\r\n<li><p>The Screen protector<br />\r\n<a href=\"https://www.appelhoes.nl/Moshi-iVisor-AG-screenprotector-MacBook-Pro-13-inch-2016-Touch-Bar?gclid=EAIaIQobChMImvLt9PCI2AIVyTLTCh2FuwXfEAQYAiABEgJY6_D_BwE\" class=\"uri\">https://www.appelhoes.nl/Moshi-iVisor-AG-screenprotector-MacBook-Pro-13-inch-2016-Touch-Bar?gclid=EAIaIQobChMImvLt9PCI2AIVyTLTCh2FuwXfEAQYAiABEgJY6_D_BwE</a></p></li>\r\n<li><p>Homebrew and Cask<br />\r\n<a href=\"https://brew.sh/\" class=\"uri\">https://brew.sh/</a><br />\r\n<a href=\"https://caskroom.github.io/\" class=\"uri\">https://caskroom.github.io/</a></p></li>\r\n</ul>\r\n',111,0,1,'CC-BY-SA','Macbook Pro, Homebrew, warranty, case, cables',0,0,1),
(2458,'2018-01-03','Chrome Plugins You Must Have',643,'I go over my current list of Chrome plugins and how I secure my browser','<p><a href=\"https://www.linkedin.com/pulse/block-more-ads-unlimited-cloud-storage-multi-threaded-robert-mccurdy\" class=\"uri\">https://www.linkedin.com/pulse/block-more-ads-unlimited-cloud-storage-multi-threaded-robert-mccurdy</a></p>\r\n',36,0,1,'CC-BY-SA','Chrome extensions',0,0,1),
(2465,'2018-01-12','TronScript where have you been all my life!',1669,'I take an initial look at TronScript and its features','<ul>\r\n<li><p><a href=\"https://www.reddit.com/r/TronScript/\" class=\"uri\">https://www.reddit.com/r/TronScript/</a></p></li>\r\n<li><p><a href=\"https://github.com/bmrf/tron/blob/master/README.md#full-tron-description\" class=\"uri\">https://github.com/bmrf/tron/blob/master/README.md#full-tron-description</a></p></li>\r\n</ul>',36,0,1,'CC-BY-SA','windows,scripting,batch files,antivirus,malware',0,0,1),
(2459,'2018-01-04','free software\'s long tail',436,'Response to hpr2443 :: pdmenu by pdmenu\'s author','<p>Surprised to see in my podcast feed <a href=\"https://hackerpublicradio.org/eps.php?id=2443\">an episode</a> about an <a href=\"https://joeyh.name/code/pdmenu/\">insignificant program which I\'d written two decades earlier</a>, I thought I\'d record a response with some thoughts on free software\'s long tail.</p>\r\n',360,0,0,'CC-BY-SA','pdmenu,free software',0,0,1),
(2461,'2018-01-08','Gitolite',1839,'Using Gitolite to administer your Git server.','<p>Gitolite provides an admin a centralised interface, in the form of a configuration file, to make managing users, user permissions, repos, and user and repo groups easy. It abstracts Git users from UNIX users by defining a user by public keys, and manages permissions down to the branch-level. And better yet, it is itself managed over Git.\r\n</p>\r\n<p> \r\nProper documentation is available on <a href=\"https://gitolite.com\">Gitolite.com</a></p>',78,81,0,'CC-BY-SA','git,server,admin,dev',0,0,1),
(2471,'2018-01-22','Tea Time!',379,'I go over where I am at with Tea','<ul>\r\n<li>Yerba Mate Pajarito Special Selection/ Seleccion Especial 1.1lb/500 Gr Pajarito</li>\r\n</ul>',36,0,1,'CC-BY-SA','Tea, Yerba Mate Pajarito',0,0,1),
(2462,'2018-01-09','AudioBookClub-14-Triplanetary-(First-in-the-Lensman-Series)',7030,'The HPR_AudioBookClub discusses Triplanetary: First in the Lensman Series by E. E. \"Doc\" Smith','<h3>SUMMARY</h3>\r\n<p>In this episode, the HPR_AudioBookClub discusses <strong>Triplanetary: First in the Lensman Series</strong> by E. E. \"Doc\" Smith.\r\n<br/><a href=\"https://librivox.org/triplanetary-first-in-the-lensman-series-by-e-e-doc-smith/\">https://librivox.org/triplanetary-first-in-the-lensman-series-by-e-e-doc-smith/</a></p>\r\n<h3>Non-Spoiler Thoughts</h3>\r\n<ul>\r\n <li>Like the last AudioBook, we all felt that there were quite a few cliches in the story, however this book is probably the source of most of the cliches it uses.</li>\r\n <li>If you want to see what Lensmen doesn\'t look like watch this: <a href=\"https://www.youtube.com/watch?v=-td8Jp0hJVA\">https://www.youtube.com/watch?v=-td8Jp0hJVA</a></li>\r\n</ul>\r\n<h3>BEVERAGE REVIEWS</h3>\r\n<p>As usual, the HPR_AudioBookClub took some time to review the beverages that each of us were drinking during the episode</p>\r\n<ul>\r\n <li>Thaj: Grapefuit Juice... Straight. Apparently NOT straight up</li>\r\n <li>x1101: <a href=\"https://www.gooseisland.com/beer/bourbon-county-stout.html?gclid=CIDivOaqusICFcxQ7AodcXEAKQ\">Goose Island Bourbon County Stout</a></li>\r\n <li>pokey: Smuttynose Winter Ale <a href=\"https://smuttynose.com/beer/winter-ale/\">https://smuttynose.com/beer/winter-ale/</a></li>\r\n</ul>\r\n<h3>Other Things We Talked About</h3>\r\n<ul>\r\n <li>Port knocking \r\n  <br/><a href=\"https://www.portknocking.org/\">https://www.portknocking.org/</a> \r\n  <br/><a href=\"https://en.wikipedia.org/wiki/Port_knocking\">https://en.wikipedia.org/wiki/Port_knocking</a></li>\r\n <li>John Williams \r\n  <br/><a href=\"https://en.wikipedia.org/wiki/John_Williams\">https://en.wikipedia.org/wiki/John_Williams</a> \r\n  <br/><a href=\"https://www.imdb.com/name/nm0002354/\">https://www.imdb.com/name/nm0002354/</a></li>\r\n <li>Danny Elfman \r\n  <br/><a href=\"https://en.wikipedia.org/wiki/Danny_Elfman\">https://en.wikipedia.org/wiki/Danny_Elfman</a> \r\n  <br/><a href=\"https://youtu.be/6SX8cWGcHJs\">https://youtu.be/6SX8cWGcHJs</a></li>\r\n <li>Stranger in a strange land \r\n  <br/><a href=\"https://en.wikipedia.org/wiki/Stranger_in_a_Strange_Land\">https://en.wikipedia.org/wiki/Stranger_in_a_Strange_Land</a></li>\r\n <li>Star Wars Extended Universe \r\n  <br/><a href=\"https://starwars.wikia.com/wiki/Star_Wars_Legends\">https://starwars.wikia.com/wiki/Star_Wars_Legends</a> \r\n  <br/><a href=\"https://en.wikipedia.org/wiki/Star_Wars_expanded_universe\">https://en.wikipedia.org/wiki/Star_Wars_expanded_universe</a></li>\r\n <li>Internet outages</li>\r\n</ul>\r\n<h3>OUR NEXT AUDIOBOOK</h3>\r\n<p><strong>City Of Masks</strong> by Mike Reeves-McMillan\r\n <br/><a href=\"https://scribl.com/books/PC439/city-of-masks\">https://scribl.com/books/PC439/city-of-masks</a></p>\r\n<h3>FURTHER RECOMMENDATIONS</h3>\r\n<p>The rest of the Lensman Series: <a href=\"https://en.wikipedia.org/wiki/Lensman_series\">https://en.wikipedia.org/wiki/Lensman_series</a></p>\r\n<p> What the new Star Wars movies should have been about: <a href=\"https://en.wikipedia.org/wiki/Thrawn_trilogy\">https://en.wikipedia.org/wiki/Thrawn_trilogy</a></p>\r\n<h3>FEEDBACK</h3>\r\n<p>Thank you very much for listening to this episode of the HPR_AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you\'ll consider joining us next time. Please leave a few words in the episode\'s comment section.\r\n <br/>As always; remember to visit the HPR contribution page HPR could really use your help right now.</p>\r\n<p><a href=\"https://hackerpublicradio.org/contribute.php\">https://hackerpublicradio.org/contribute.php</a></p>\r\n<p>Sincerely,\r\n <br/>The HPR_AudioBookClub</p>\r\n<p>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</p>\r\n <br/>\r\n<h3>OUR AUDIO</h3>\r\n<p>This episode was processed using Audacity <a href=\"https://audacity.sourceforge.net/\">https://audacity.sourceforge.net/</a>. We\'ve been making small adjustments to our audio mix each month in order to get the best possible sound. It\'s been especially challenging getting all of our voices relatively level, because everyone has their own unique setup. Mumble is great for bringing us all together, and for recording, but it\'s not good at making everyone\'s voice the same volume. We\'re pretty happy with the way this month\'s show turned out, so we\'d like to share our editing process and settings with you and our future selves (who, of course, will have forgotten all this by then).</p>\r\n<p>Mumble uses a sample rate of 48kHz, but HPR requires a sample rate of 44.1kHz so the first step in our audio process is to resample the file at 44.1kHz. Resampling can take a long time if you don\'t have a powerful computer, and sometimes even if you do. If you record late at night, like we do, you may want to start the task before you go to bed, and save it first thing in the morning, so that the file is ready to go the next time you are.</p>\r\n<p>Next we use the \"Compressor\" effect with the following settings:</P>\r\n <ul>\r\n <li>Threshold: -30db</li>\r\n <li>Noise Floor: -50db</li>\r\n <li>Ratio: 3:1</li>\r\n <li>Attack Time: 0.2sec</li>\r\n <li>Decay Time: 1.0 sec</li>\r\n <li>\"Make-up Gain for 0db after compressing\" and \"compress based on peaks\" were both left un-checked.</li>\r\n </ul>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from the file and save them in a separate file for possible use as outtakes after the closing music.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the .aup file to .FLAC so that we can paste a copy of the shownotes into the audio file\'s metadata. We use the \"Truncate Silence\" effect with it\'s default settings to minimize the silence between people speaking. When used with it\'s default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes a conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying \"uuuuummmm.\" Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too aggressively your audio may sound sped up and choppy.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can \"Mix and Render\" all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR FTP server.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being \"crashy\" but if you remember save after every major transform, you will wonder how it ever got that reputation.</p>\r\n',157,53,1,'CC-BY-SA','HPR AudioBookClub, Triplanetary, E. E. \"Doc\" Smith',0,0,1),
(2460,'2018-01-05','The Alien Brothers Podcast - S01E03 - Decline of American Empire',6830,'The Alien Brothers penetrate the Van Allen belt to tap in, and transmit an intergalactic podcast','<h1>Summary:</h1>\r\n<p>\r\nCasper and Rutiger opt for a time of ease and relaxation by discussing happy light topics: the <em>decline of American Empire</em> and <em>recent <a href=\"https://www.google.com/url?q=https://www.cnbc.com/2017/12/14/fcc-reverses-open-internet-order-governing-net-neutrality.html&amp;sa=D&amp;ust=1513926885706000&amp;usg=AFQjCNGZt2slIT3aeHGveiV4ZnXmZYOhnA\">reversal of Net Neutrality protections</a></em> [or the rollout of Net Neuterality -c] (December 2017).\r\n</p>\r\n<h1>Links and Notes:</h1>\r\n<p>\r\n<strong>Re: Empire</strong> - moral decline and massive wealth inequality, role in imperial decline <a href=\"https://www.google.com/url?q=https://www.businessinsider.com/2-overlooked-characteristics-of-an-empire-in-decline-2015-10&amp;sa=D&amp;ust=1513926885707000&amp;usg=AFQjCNFa_5D5Gx9clZpm-alySTAjKCl6Og\">[1]</a> -r<br/>\r\n<strong>Re: Empire</strong> - Noam Chomsky and Decline of American Empire <a href=\"https://www.google.com/url?q=https://www.youtube.com/watch?v%3DoLOUJ0C61O0&amp;sa=D&amp;ust=1513926885708000&amp;usg=AFQjCNHcdsaF1pzjhkcjc5KeYAw9ayBH8A\">[2]</a> -r<br/>\r\n<strong>Re: Empire</strong> - moral decline - death as sport (Onion spoof) <a href=\"https://www.google.com/url?q=https://www.youtube.com/watch?v%3DHyph_DZa_GQ&amp;sa=D&amp;ust=1513926885708000&amp;usg=AFQjCNHs7nXBhvmV4i82k-Jh-ooQmyUfgA\">[3]</a> -r<br/>\r\n<strong>Re: Net Neutrality</strong> - Rutiger apologies - to Casper, for completely derailing the conversation on Net Neutrality by believing that pay-for-bandwidth/capacity and limiting access to content are both legitimate elements of the Net Neutrality debate, but over-focusing on the infrastructure/de-emphasizing the content argument. See <a href=\"https://www.google.com/url?q=https://en.wikipedia.org/wiki/Net_neutrality%23Prevent_overuse_of_bandwidth&amp;sa=D&amp;ust=1513926885709000&amp;usg=AFQjCNG-cpGrTBMts6ZBnNe70pwsRmh4uQ\">Prevent Over-Use of Bandwidth</a> and <a href=\"https://www.google.com/url?q=https://en.wikipedia.org/wiki/Net_neutrality%23Pricing_models&amp;sa=D&amp;ust=1513926885709000&amp;usg=AFQjCNGLFZMwvku5aEIMc12xUp5B_2-Fmg\">Pricing Models</a> vs. <a href=\"https://www.google.com/url?q=https://en.wikipedia.org/wiki/Net_neutrality%23Data_discrimination&amp;sa=D&amp;ust=1513926885710000&amp;usg=AFQjCNE8FZmUnilxtALBwMA4myBkHNBcjg\">Data Discrimination</a> <a href=\"https://www.google.com/url?q=https://en.wikipedia.org/wiki/Net_neutrality&amp;sa=D&amp;ust=1513926885710000&amp;usg=AFQjCNG4ZUX2pOEnC0yPI0m50kdL42_n-g\">[4]</a> -r<br/>\r\n<strong>Re: Empire</strong> - consumption of human suffering as entertainment - modern Roman colosseum <a href=\"https://www.google.com/url?q=https://www.eonline.com/news/367020/lindsay-lohan-a-timeline-of-all-her-arrests-and-boy-there-are-a-lot-of-em&amp;sa=D&amp;ust=1513926885711000&amp;usg=AFQjCNGy09hpDmDL7x25vzJ31pm_LiqWuQ\">[5]</a> -r <br/>\r\n<strong>Re: Empire</strong> - the thought leaders over at Reddit on elements of declining empire <a href=\"https://www.google.com/url?q=https://www.reddit.com/r/AskHistorians/comments/34fnw9/what_are_the_characteristic_signs_of_a_declining/&amp;sa=D&amp;ust=1513926885711000&amp;usg=AFQjCNHQvIfniCHqgDstF7ZpYRmVmLz-MQ\">[6]</a> -r <br/>\r\n<strong>Re: Thoughts</strong> - Volume One Chapter Two of Diek Minusky&rsquo;s <strong>The Nature of Systems</strong> will be coming with&hellip; episode 4! Sorry folks. Hold&hellip; hold! -r<br/>\r\n<strong>Re: Getting Things Done</strong> - by David Allen [<a href=\"https://www.google.com/url?q=https://en.wikipedia.org/wiki/Getting_Things_Done?wprov%3Dsfti1&amp;sa=D&amp;ust=1513926885712000&amp;usg=AFQjCNGsprONTkDHQk_oZmnR8PIgrd29Sw\">7</a>]<br/>\r\n</p>\r\n<ul>\r\n<li>[1] <a href=\"https://www.google.com/url?q=https://www.businessinsider.com/2-overlooked-characteristics-of-an-empire-in-decline-2015-10&amp;sa=D&amp;ust=1513926885712000&amp;usg=AFQjCNGF7nnnemC3Su4IIF61on_6IjvAMA\">2 overlooked characteristics of an empire in decline - Business Insider</a>\r\n</li>\r\n<li>[2] <a href=\"https://www.google.com/url?q=https://www.youtube.com/watch?v%3DoLOUJ0C61O0&amp;sa=D&amp;ust=1513926885713000&amp;usg=AFQjCNHNRm0rZT9z0MxAMJFtjOTqErSJzg\">Noam Chomsky - on the Decline of the American Empire - YouTube</a> - Al Jazeera</li>\r\n<li>[3] <a href=\"https://www.google.com/url?q=https://www.youtube.com/watch?v%3DHyph_DZa_GQ&amp;sa=D&amp;ust=1513926885713000&amp;usg=AFQjCNGuCvf5Py4sStnR9uUtedTTXwFB9A\">Supreme Court: Death Penalty Is \'Totally Badass\' - YouTube</a> - The Onion News Network</li>\r\n<li>[4] <a href=\"https://www.google.com/url?q=https://en.wikipedia.org/wiki/Net_neutrality&amp;sa=D&amp;ust=1513926885714000&amp;usg=AFQjCNG6sTJOxSvBQ-Ywl-RVRgvUo6jCEw\">https://en.wikipedia.org/wiki/Net_neutrality</a> - Wikipedia</li>\r\n<li>[5] <a href=\"https://www.google.com/url?q=https://www.eonline.com/news/367020/lindsay-lohan-a-timeline-of-all-her-arrests-and-boy-there-are-a-lot-of-em&amp;sa=D&amp;ust=1513926885714000&amp;usg=AFQjCNEDcxEmes1tfmUS7fkQkH1bZD6LGw\">Lindsay Lohan: A Timeline of All Her Arrests (and Boy, There Are a Lot &hellip;</a> - E! Online</li>\r\n<li>[6] <a href=\"https://www.google.com/url?q=https://www.reddit.com/r/AskHistorians/comments/34fnw9/what_are_the_characteristic_signs_of_a_declining/&amp;sa=D&amp;ust=1513926885715000&amp;usg=AFQjCNG69NTgUj39KYE99_ESedlOq_UGQg\">What Are the Characteristic Signs of a Declining Empire/State?</a> - Reddit thread</li>\r\n<li>[7] <a href=\"https://www.google.com/url?q=https://en.wikipedia.org/wiki/Getting_Things_Done?wprov%3Dsfti1&amp;sa=D&amp;ust=1513926885716000&amp;usg=AFQjCNGewMgVm4qWoT51ut-gC8N8ZDBHww\">Getting Things Done</a> - Wikipedia </li>\r\n</ul>\r\n\r\n<h1>Timeline / Additional Links:</h1>\r\n<p>\r\n<strong>00:00:00 - 00:13:00 Settling in</strong> - Casper and Rutiger get acquainted after being off the air for a while. Skip this part if you don&rsquo;t care about the characters Casper and Rutiger and their degeneration&hellip;<br/>\r\n<strong>Begin Topic 1: Net Neuterality / Net Neutrality Rollback</strong><br/>\r\n<strong>00:14:00 - 00:30:00 The Deployment of Net Neuterality / Rollback of Net Neutrality</strong> - Casper attempts to boil this topic down nice and easy for Rutiger, yet Rutiger conflates this (see above), but that is OK as this is normal for pleebs. Members of HPR will understand.<br/>\r\n<strong>00:30:00 - 00:36:00 Fox &amp; Disney Merger</strong> - Coincidence or Conspiracy on timing w/ Net Neutrality rollback?<br/>\r\n<strong>00:36:00 - 00:40:30 How Should HPR Community Respond or Mitigate This? </strong> Credit goes to Rob Placone and Jimmy Dore for mentioning Municipality developed internet<br/>\r\n<a href=\"https://www.google.com/url?q=https://www.youtube.com/watch?v%3DmvJ93kjSXiQ&amp;sa=D&amp;ust=1513926885717000&amp;usg=AFQjCNFpG46IkPUOXpEqaYmyf3moojSKJg\">https://www.youtube.com/watch?v=mvJ93kjSXiQ</a><br/>\r\n<strong>00:40:30 - 00:48:00 Discussion on Availability of Access</strong><br/>\r\n<strong>00:48:00 - 00:52:00 Casper takes a sharp pivot off track</strong> - A satellite is mentioned and Casper brings up DMB unfortunately for the listener<br/>\r\n<strong>00:52:00 - 00:56:00 FREESTYLE JAM!@&amp;#%^</strong><br/>\r\n<strong>00:58:00 - Ron Swanson has words for Ajit Pai</strong><br/>\r\n<strong>01:00:00 - Rutiger Does Not Speak in Tribe Called Quest Protocol call and response</strong><br/>\r\n<strong>01:05:00 - 01:20:00 Casper and Rutiger give their distinct definition of Empire </strong> and expand upon this<br/>\r\n<strong>01:20:00 - 01:23:00 MUDs, OG Tech &amp; Being Alone Together</strong><br/>\r\n<strong>01:23:00 - Casper mentions 150 people own EVERYTHING </strong> as mentioned here by Chamath Palihapitiya <br/>\r\n<a href=\"https://www.google.com/url?q=https://www.youtube.com/watch?v%3DPMotykw0SIk&amp;sa=D&amp;ust=1513926885719000&amp;usg=AFQjCNEAP85KwhfeWzniBeU5OHqnn6D-fg\">https://www.youtube.com/watch?v=PMotykw0SIk</a><br/>\r\n&ldquo;During his View From The Top talk, Chamath Palihapitiya, founder and CEO of Social Capital, discussed how money is an instrument of change which should be used to make the world a better place&rdquo;<br/>\r\n<strong>01:27:00 - 01:30:00 - Being Alone Together</strong><br/>\r\n<strong>01:30:00 - 01:33:00 - Bullying and how Technology can Exponentiate this</strong><br/>\r\n<strong>01:33:00 - How to DEBUG&hellip; seriously</strong> <a href=\"https://www.google.com/url?q=https://conncounseling.weebly.com/stop--debug.html&amp;sa=D&amp;ust=1513926885720000&amp;usg=AFQjCNH7YekNtAfY_5y2VtHfKWNNwgBpbA\">https://conncounseling.weebly.com/stop--debug.html</a><br/>\r\n<strong>01:39:00 - Consumerism and the Decline of Empire</strong><br/>\r\n<strong>01:40:00 - DW Documentaries Casper said he would find</strong><br/>\r\n<strong>Greed - </strong> <a href=\"https://www.google.com/url?q=https://www.dw.com/en/tv/greed/s-32898&amp;sa=D&amp;ust=1513926885721000&amp;usg=AFQjCNFmmHny6Vc4IQSfB5r-khEB2cgn9Q\">https://www.dw.com/en/tv/greed/s-32898</a><br/>\r\n<strong>The Divide Part 1 - </strong> <a href=\"https://www.google.com/url?q=https://www.dw.com/en/the-divide-part-1/av-41378206&amp;sa=D&amp;ust=1513926885721000&amp;usg=AFQjCNE4pHIz46RsFouZeaiyZg-jKw8Y8w\">https://www.dw.com/en/the-divide-part-1/av-41378206</a><br/>\r\n<strong>The Divide Part 2 - </strong> <a href=\"https://www.google.com/url?q=https://www.dw.com/en/the-divide-2/av-41467377&amp;sa=D&amp;ust=1513926885722000&amp;usg=AFQjCNFV3vhgVvJh_gEncB08xFY3f0BKAA\">https://www.dw.com/en/the-divide-2/av-41467377</a><br/>\r\n<strong>01:42:00 - Immortality Through Consumerism?</strong><br/>\r\n<strong>01:43:00 - Where are we if Not Here?</strong><br/>\r\n<strong>01:45:00 - Self Destruction</strong><br/>\r\n<strong>01:46:00 - Celebrity Chefs and the Tie to the Roman Empire </strong> - Casper remembered post-cast that this was from The Four Horsemen Documentary as explained here:<br/>\r\n<a href=\"https://www.google.com/url?q=https://barnabyisright.com/2013/03/30/why-celebrity-chefs-herald-the-end-of-empire/&amp;sa=D&amp;ust=1513926885723000&amp;usg=AFQjCNH4L_nf_CuR7D3StEBRzgk8nJsNJw\">https://barnabyisright.com/2013/03/30/why-celebrity-chefs-herald-the-end-of-empire/</a><br/>\r\n<strong>01:47:00 - Casper (Mis)Quotes Frank Zappa - </strong> by saying &ldquo;Politics is the entertainment branch of the Military Industrial Complex&rdquo; <a href=\"https://www.google.com/url?q=https://www.reddit.com/r/Zappa/comments/2qxpnu/politics_is_the_entertainment_branch_of_industry/&amp;sa=D&amp;ust=1513926885724000&amp;usg=AFQjCNFLlMRo6XDStxLIdLZ_MCBCQaTpvw\">https://www.reddit.com/r/Zappa/comments/2qxpnu/politics_is_the_entertainment_branch_of_industry/</a><br/>\r\n<strong>01:48:00 - (S)Elections are becoming irrelevant</strong><br/>\r\n<strong>01:50:00 - Casper recommends International News Alternatives like BBC, RT, AlJazeera </strong> if you would like to know what is going on in the world<br/>\r\nAddendum - Not mentioned in Podcast, but worth a link regarding the state of our MSM in reporting false information on Russia and WikiLeaks from Glenn Greenwald:<br/>\r\n<a href=\"https://www.google.com/url?q=https://theintercept.com/2017/12/09/the-u-s-media-yesterday-suffered-its-most-humiliating-debacle-in-ages-now-refuses-all-transparency-over-what-happened/&amp;sa=D&amp;ust=1513926885725000&amp;usg=AFQjCNEw31HmdU99U-eAfEtOTFTP_Zuysw\">https://theintercept.com/2017/12/09/the-u-s-media-yesterday-suffered-its-most-humiliating-debacle-in-ages-now-refuses-all-transparency-over-what-happened/</a><br/>\r\n<strong>01:51:00 - Wrapping Up The Show &amp; ShoutOuts to Klaatu!</strong><br/>\r\n<strong>01:53:00 - Casper argues with Gerald to cut the recording</strong>\r\n</p>\r\n',359,0,1,'CC-BY-SA','Net Neutrality',0,0,1),
(2463,'2018-01-10','Setting up a 32 Bit Ubuntu Server',762,'Repurpose a 32 bit small form factor working station','<p>So what is the purpose - I had an old windows backup workstation at work that I did a lot backups with. It got to the point where it was just too slow and low spec to handle the windows 7 updates and with my company switching to the 365/sharepoint/one drive it was not needed anymore. So I wanted not to throw it away as I had sprung for 160GB hard drive a long time ago. “I know at work and purchasing a hard drive for work.” But it lasted more than 10 years doing my outlook backups and file shares.</p>\r\n<p>So my first problem was I was pretty sure I only had 32 bit.</p>\r\n<p>So no centos or suse in 32 bit. I could have went fedora but I wanted a really long time with support. So it came down to ubuntu 16.04, Debian or Net BSD with I386 repos I could use long term. I was more comfortable with Ubuntu and 16.04 has about 3 years support left on it.</p>\r\n<p>Its a small form factor computer so I carried it home for a few days. And got the ISO down loaded again no usb drive boot only DVD.</p>\r\n<p>So what is it. I did a uname -a and and looked at the proc cpu to see what the cpu was.<br />\r\n<a href=\"https://www.tecmint.com/find-out-linux-system-is-32-bit-or-64-bit/\" class=\"uri\">https://www.tecmint.com/find-out-linux-system-is-32-bit-or-64-bit/</a><br />\r\n<a href=\"https://www.computerhope.com/issues/ch001121.htm\" class=\"uri\">https://www.computerhope.com/issues/ch001121.htm</a><br />\r\nThe second linked worked best.</p>\r\n<p>I had a lot of trouble with lamp and own/next cloud with both snaps and straight install. I broke the install several times. In the end I said what do really know how do well with it right now. So I installed Open SSH server, tightVNC, A really thin xfce 4, ffmpeg and youtube-dl and uget. So I will play with snaps only in the future and keep this basic config.</p>\r\n<p><a href=\"https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-16-04\" class=\"uri\">https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-16-04</a></p>\r\n<p>Note I did not auto start VNC because I found in my creations of this server that it used too much RAM vs just starting it and killing it.</p>\r\n<p>It is the perfect video processing machine in the moment. If youtube-dl can’t get it I can use uget via vnc and that will then transcode if needed. Mostly for mp3.<br />\r\n<a href=\"https://rg3.github.io/youtube-dl/\" class=\"uri\">https://rg3.github.io/youtube-dl/</a> youtube-dl is a command-line program to download videos from YouTube.com and a few more sites. It requires the Python interpreter, version 2.6, 2.7, or 3.2+, and it is not platform specific. It should work on your Unix box, on Windows or on Mac OS X. It is released to the public domain, which means you can modify it, redistribute it or use it however you like.</p>\r\n<p>I will work on the nextcloud snap and other snaps as they are easy to install or remove without hurting the base system.</p>\r\n<p>Possible other projects - Owncloud or Storj<br />\r\n<a href=\"https://storj.io/share.html\" class=\"uri\">https://storj.io/share.html</a><br />\r\nOne you can make a little money with it :)</p>\r\n',129,0,0,'CC-BY-SA','32-bit server, Ubuntu',0,0,1),
(2464,'2018-01-11','The Alien Brothers Podcast - S01E04 - Digital Instruments',3906,'Casper and Rutiger Detail their Digital and Analog Sonic Setups in IOS and Android','<p>Casper and Rutiger are back with a very simple topic: Making music with various Digital Audio Workstations.</p>\r\n<p>Rutiger details his MacOS / iOS platform and the Apps he uses to create his noise:<br />\r\n<a href=\"https://soundcloud.com/fibrechannel\" class=\"uri\">https://soundcloud.com/fibrechannel</a></p>\r\n<p>Casper details his Windows setup with a relatively cheap DAW and various Analog and Digital transmissions he uses to create his noise:<br />\r\n<a href=\"https://soundcloud.com/user-393542827\" class=\"uri\">https://soundcloud.com/user-393542827</a></p>\r\n<p><span class=\"citation\" data-cites=\"alienbpc\">@alienbpc</span></p>\r\n',359,0,1,'CC-BY-SA','DAW, Sonic Voyages, iOS Music Apps, PreSonus Audiobox 22vsl, Logic Pro X, Studio One',0,0,1),
(2696,'2018-12-03','HPR Community News for November 2018',4317,'HPR Volunteers talk about shows released and comments posted in November 2018','\n\n<h2>New hosts</h2>\n<p>\nWelcome to our new host: <br />\n\n    <a href=\"https://hackerpublicradio.org/correspondents/0371.html\" target=\"_blank\">desearcher</a>.\n</p>\n\n<h2>Last Month\'s Shows</h2>\n<table id=\"t01\" summary=\"Last month\'s shows\">\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 valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2674\" target=\"_blank\">2674</a></strong></td>\n    <td>Thu</td>\n    <td>2018-11-01</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2674\" target=\"_blank\">Raspberry pi3 open media server</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2675\" target=\"_blank\">2675</a></strong></td>\n    <td>Fri</td>\n    <td>2018-11-02</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2675\" target=\"_blank\">YouTube Playlists</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2676\" target=\"_blank\">2676</a></strong></td>\n    <td>Mon</td>\n    <td>2018-11-05</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2676\" target=\"_blank\">HPR Community News for October 2018</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2677\" target=\"_blank\">2677</a></strong></td>\n    <td>Tue</td>\n    <td>2018-11-06</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2677\" target=\"_blank\">Thoughts on language learning part 4 - RPG.</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0151.html\" target=\"_blank\">dodddummy</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2678\" target=\"_blank\">2678</a></strong></td>\n    <td>Wed</td>\n    <td>2018-11-07</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2678\" target=\"_blank\">Explaining the controls on my Amateur HF Radio Part 4</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2679\" target=\"_blank\">2679</a></strong></td>\n    <td>Thu</td>\n    <td>2018-11-08</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2679\" target=\"_blank\">Extra ancillary Bash tips - 13</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2680\" target=\"_blank\">2680</a></strong></td>\n    <td>Fri</td>\n    <td>2018-11-09</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2680\" target=\"_blank\">Some Additional Talk About Characters -- 01</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2681\" target=\"_blank\">2681</a></strong></td>\n    <td>Mon</td>\n    <td>2018-11-12</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2681\" target=\"_blank\">DerbyCon Interview - Hackers for Charity</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0079.html\" target=\"_blank\">Xoke</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2682\" target=\"_blank\">2682</a></strong></td>\n    <td>Tue</td>\n    <td>2018-11-13</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2682\" target=\"_blank\">(NOT) All About Blender</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0325.html\" target=\"_blank\">m1rr0r5h4d35</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2683\" target=\"_blank\">2683</a></strong></td>\n    <td>Wed</td>\n    <td>2018-11-14</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2683\" target=\"_blank\">Using Open source tools to visualize the heartrate and blood oxygen saturation level of my stepchild</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2684\" target=\"_blank\">2684</a></strong></td>\n    <td>Thu</td>\n    <td>2018-11-15</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2684\" target=\"_blank\">Making a remote control visible</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2685\" target=\"_blank\">2685</a></strong></td>\n    <td>Fri</td>\n    <td>2018-11-16</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2685\" target=\"_blank\">Scientific and Medical Reports</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2686\" target=\"_blank\">2686</a></strong></td>\n    <td>Mon</td>\n    <td>2018-11-19</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2686\" target=\"_blank\">(NOT) All About Blender - Part the Second</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0325.html\" target=\"_blank\">m1rr0r5h4d35</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2687\" target=\"_blank\">2687</a></strong></td>\n    <td>Tue</td>\n    <td>2018-11-20</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2687\" target=\"_blank\">Some Additional Talk About Characters -- 02</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2688\" target=\"_blank\">2688</a></strong></td>\n    <td>Wed</td>\n    <td>2018-11-21</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2688\" target=\"_blank\">Explaining the controls on my Amateur HF Radio Part 5</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2689\" target=\"_blank\">2689</a></strong></td>\n    <td>Thu</td>\n    <td>2018-11-22</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2689\" target=\"_blank\">Bash Tips - 14</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2690\" target=\"_blank\">2690</a></strong></td>\n    <td>Fri</td>\n    <td>2018-11-23</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2690\" target=\"_blank\">A chat about the HiveMQ Broker</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2691\" target=\"_blank\">2691</a></strong></td>\n    <td>Mon</td>\n    <td>2018-11-26</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2691\" target=\"_blank\">DerbyCon Interview - John Strand</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0079.html\" target=\"_blank\">Xoke</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2692\" target=\"_blank\">2692</a></strong></td>\n    <td>Tue</td>\n    <td>2018-11-27</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2692\" target=\"_blank\">YouTube URL tricks</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0371.html\" target=\"_blank\">desearcher</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2693\" target=\"_blank\">2693</a></strong></td>\n    <td>Wed</td>\n    <td>2018-11-28</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2693\" target=\"_blank\">Getting started with web based game in Haskell and Elm</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2694\" target=\"_blank\">2694</a></strong></td>\n    <td>Thu</td>\n    <td>2018-11-29</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2694\" target=\"_blank\">Bandit Update</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2695\" target=\"_blank\">2695</a></strong></td>\n    <td>Fri</td>\n    <td>2018-11-30</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2695\" target=\"_blank\">Problems with Studies</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\nreleased during the month or to past shows.<br/>\nThere are 24 comments in total.</p>\n<p>There are 9 comments on\n7 previous shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2399#comments\" target=\"_blank\">hpr2399</a></strong>\n(2017-10-12) \"<em>Using Super Glue to create Landmarks on Keyboards</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0151.html\" target=\"_blank\">dodddummy</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2399#8\" target=\"_blank\">Comment 8</a>:\ndodddummy on 2018-11-23:\n\"There\'s nothing new under the sun.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2558#comments\" target=\"_blank\">hpr2558</a></strong>\n(2018-05-23) \"<em>Battling with English - part 1</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=2558#7\" target=\"_blank\">Comment 7</a>:\nFiftyOneFifty on 2018-11-05:\n\"You missed one\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2558#8\" target=\"_blank\">Comment 8</a>:\nDave Morriss on 2018-11-10:\n\"Re: You missed one\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2562#comments\" target=\"_blank\">hpr2562</a></strong>\n(2018-05-29) \"<em>I bought a laptop</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2562#2\" target=\"_blank\">Comment 2</a>:\nFiftyOneFifty on 2018-11-05:\n\"Getting paid in Cryptocurrency\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2629#comments\" target=\"_blank\">hpr2629</a></strong>\n(2018-08-30) \"<em>Thoughts on language learning part 3 - game/story mode.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0151.html\" target=\"_blank\">dodddummy</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2629#1\" target=\"_blank\">Comment 1</a>:\nJoel H. on 2018-10-31:\n\"Good ideas!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2665#comments\" target=\"_blank\">hpr2665</a></strong>\n(2018-10-19) \"<em>Exercise and Diet</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2665#1\" target=\"_blank\">Comment 1</a>:\ndodddummy on 2018-11-21:\n\"You\'ve convinced me.\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2665#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2018-11-28:\n\"It is about making a decision\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2668#comments\" target=\"_blank\">hpr2668</a></strong>\n(2018-10-24) \"<em>Explaining the controls on my Amateur HF Radio Part 3</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2668#2\" target=\"_blank\">Comment 2</a>:\nlostnbronx on 2018-11-01:\n\"Great Gear!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2672#comments\" target=\"_blank\">hpr2672</a></strong>\n(2018-10-30) \"<em>Porteus</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=2672#1\" target=\"_blank\">Comment 1</a>:\nAlison Chaiken on 2018-11-11:\n\"particularly informative episode\"</li></ul><br/>\n</li></ul>\n<p>There are 15 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2674#comments\" target=\"_blank\">hpr2674</a></strong>\n(2018-11-01) \"<em>Raspberry pi3 open media server</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2674#1\" target=\"_blank\">Comment 1</a>:\nJason Lewis on 2018-11-01:\n\"Volume\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2675#comments\" target=\"_blank\">hpr2675</a></strong>\n(2018-11-02) \"<em>YouTube Playlists</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=2675#1\" target=\"_blank\">Comment 1</a>:\nGus on 2018-11-05:\n\"Praise\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2675#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2018-11-05:\n\"MY pleasure\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2676#comments\" target=\"_blank\">hpr2676</a></strong>\n(2018-11-05) \"<em>HPR Community News for October 2018</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=2676#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2018-11-05:\n\"What were you going to say?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2676#2\" target=\"_blank\">Comment 2</a>:\ndodddummy on 2018-11-07:\n\"Smiling all the way to the end.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2676#3\" target=\"_blank\">Comment 3</a>:\ndodddummy on 2018-11-07:\n\"Ken\'s perfect example.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2676#4\" target=\"_blank\">Comment 4</a>:\nKen Fallon on 2018-11-22:\n\"we\'ll get back to that\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2677#comments\" target=\"_blank\">hpr2677</a></strong>\n(2018-11-06) \"<em>Thoughts on language learning part 4 - RPG.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0151.html\" target=\"_blank\">dodddummy</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2677#1\" target=\"_blank\">Comment 1</a>:\ndodddummy on 2018-10-22:\n\"Looks like I forgot to tuncate silence\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2679#comments\" target=\"_blank\">hpr2679</a></strong>\n(2018-11-08) \"<em>Extra ancillary Bash tips - 13</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=2679#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2018-11-24:\n\"Immediately useful\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2679#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2018-11-25:\n\"Thanks clacke!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2683#comments\" target=\"_blank\">hpr2683</a></strong>\n(2018-11-14) \"<em>Using Open source tools to visualize the heartrate and blood oxygen saturation level of my stepchild</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2683#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2018-11-15:\n\"Super Dad\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2683#2\" target=\"_blank\">Comment 2</a>:\nClinton Roy on 2018-11-17:\n\"Thank you.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2684#comments\" target=\"_blank\">hpr2684</a></strong>\n(2018-11-15) \"<em>Making a remote control visible</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=2684#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2018-11-15:\n\"LOL!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2684#2\" target=\"_blank\">Comment 2</a>:\npauleb on 2018-11-16:\n\"Great hack, great episode!!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2693#comments\" target=\"_blank\">hpr2693</a></strong>\n(2018-11-28) \"<em>Getting started with web based game in Haskell and Elm</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2693#1\" target=\"_blank\">Comment 1</a>:\nklaatu on 2018-11-30:\n\"Cool game idea, cool intro\"</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/2018-November/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2018-November/thread.html</a>\n\n\n<h2>Any other business</h2>\n<h3 id=\"hacker-public-radio-new-years-eve-show\">Hacker Public Radio New Year’s Eve Show</h3>\n<p><small><small><a href=\"https://www.linuxlugcast.com/category/news\">Edited from linuxlugcast.com</a></small></small></p>\n<p>Hey folks</p>\n<p>It’s that time of year again. Time for the Hacker Public Radio 24 hr (26 hr) New Years Eve Show.</p>\n<p>For those who don’t know on New Years Eve 2018-12-31 at 10:00 am UTC (5:00 am EST) we will have a recording going on the HPR Mumble server (at <b>ch1.teamspeak.cc</b> on port <b>64747</b>) for anyone to come on say “Happy New Year” and talk about what ever they want.</p>\n<p>We will leave the recording going until 2019-01-01 12:00 am UTC (7:00 am EST) or until the conversation stops.</p>\n<p>For those who have never used Mumble before, we have a guide over at linuxlugcast.com in our how to section explaining how to setup the desktop Mumble client, but Mumble isn’t only available for the desktop. It is also available for Android and IOS.</p>\n<p>We are also going to setup an etherpad for people to share links to things they are discussing.</p>\n<p>So please stop in. Say “Hi” and maybe join in the conversation with other HPR listeners and contributors. It’s always a good time.</p>\n<h3 id=\"new-podcast---libre-lounge\">New podcast - <code>Libre Lounge</code></h3>\n<p><a href=\"https://librelounge.org/\">Libre Lounge</a></p>\n<p>Quoted from the site:</p>\n<blockquote>\n<p>Libre Lounge is a podcast where we casually discuss various topics involving user freedom, crossing free software, free culture, network and hosting freedom, and libre hardware designs. We discuss everything from policy and licensing to deep dives on technical topics… whatever seems interesting that week. At some point we might even have guests!</p>\n</blockquote>\n<h3 id=\"internet-archive-funding-drive\">Internet Archive funding drive</h3>\n<p>As you know, HPR uploads all current episodes to the Internet Archive at <a href=\"https://archive.org\" class=\"uri\">https://archive.org</a>, and is in the process of uploading older shows, so we are particularly keen that this amazing service continues.</p>\n<p>The Internet Archive is currently fundraising. Donations are currently being matched by a generous supporter, so this will double your impact if you are able to donate.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Over the period tags and/or summaries have been added to 23 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2721,'2019-01-07','HPR Community News for December 2018',4247,'HPR Volunteers talk about shows released and comments posted in December 2018','\n\n<h2>New hosts</h2>\n<p>\nWelcome to our new host: <br />\n\n    <a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a>.\n</p>\n\n<h2>Last Month\'s Shows</h2>\n<table id=\"t01\" summary=\"Last month\'s shows\">\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 valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2696\" target=\"_blank\">2696</a></strong></td>\n    <td>Mon</td>\n    <td>2018-12-03</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2696\" target=\"_blank\">HPR Community News for November 2018</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2697\" target=\"_blank\">2697</a></strong></td>\n    <td>Tue</td>\n    <td>2018-12-04</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2697\" target=\"_blank\">The Linux Shutdown Command Explained</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2698\" target=\"_blank\">2698</a></strong></td>\n    <td>Wed</td>\n    <td>2018-12-05</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2698\" target=\"_blank\">XSV for fast CSV manipulations - Part 1</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2699\" target=\"_blank\">2699</a></strong></td>\n    <td>Thu</td>\n    <td>2018-12-06</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2699\" target=\"_blank\">Bash Tips - 15</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2700\" target=\"_blank\">2700</a></strong></td>\n    <td>Fri</td>\n    <td>2018-12-07</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2700\" target=\"_blank\">Episode 3000</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2701\" target=\"_blank\">2701</a></strong></td>\n    <td>Mon</td>\n    <td>2018-12-10</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2701\" target=\"_blank\">First impressions of the Odroid-go</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0151.html\" target=\"_blank\">dodddummy</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2702\" target=\"_blank\">2702</a></strong></td>\n    <td>Tue</td>\n    <td>2018-12-11</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2702\" target=\"_blank\">Audacity set up and response to episode 2658</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2703\" target=\"_blank\">2703</a></strong></td>\n    <td>Wed</td>\n    <td>2018-12-12</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2703\" target=\"_blank\">Fog of war in Yesod based game</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2704\" target=\"_blank\">2704</a></strong></td>\n    <td>Thu</td>\n    <td>2018-12-13</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2704\" target=\"_blank\">Intro to Scribus</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2705\" target=\"_blank\">2705</a></strong></td>\n    <td>Fri</td>\n    <td>2018-12-14</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2705\" target=\"_blank\">Evidence-based Medicine</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2706\" target=\"_blank\">2706</a></strong></td>\n    <td>Mon</td>\n    <td>2018-12-17</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2706\" target=\"_blank\">Why I love the IBM AS/400 computer systems</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2707\" target=\"_blank\">2707</a></strong></td>\n    <td>Tue</td>\n    <td>2018-12-18</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2707\" target=\"_blank\">Steganalysis 101</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2708\" target=\"_blank\">2708</a></strong></td>\n    <td>Wed</td>\n    <td>2018-12-19</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2708\" target=\"_blank\">Ghostscript</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2709\" target=\"_blank\">2709</a></strong></td>\n    <td>Thu</td>\n    <td>2018-12-20</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2709\" target=\"_blank\">Bash Tips - 16</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2710\" target=\"_blank\">2710</a></strong></td>\n    <td>Fri</td>\n    <td>2018-12-21</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2710\" target=\"_blank\">Youtube downloader for channels</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2711\" target=\"_blank\">2711</a></strong></td>\n    <td>Mon</td>\n    <td>2018-12-24</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2711\" target=\"_blank\">Raspberry Pi 3A+ Review</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick the french guy from Switzerland</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2712\" target=\"_blank\">2712</a></strong></td>\n    <td>Tue</td>\n    <td>2018-12-25</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2712\" target=\"_blank\">Steganography</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2713\" target=\"_blank\">2713</a></strong></td>\n    <td>Wed</td>\n    <td>2018-12-26</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2713\" target=\"_blank\">Resources in 4x game</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2714\" target=\"_blank\">2714</a></strong></td>\n    <td>Thu</td>\n    <td>2018-12-27</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2714\" target=\"_blank\">Airplane stalls and Angle of Attack</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2715\" target=\"_blank\">2715</a></strong></td>\n    <td>Fri</td>\n    <td>2018-12-28</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2715\" target=\"_blank\">About ONAP</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2716\" target=\"_blank\">2716</a></strong></td>\n    <td>Mon</td>\n    <td>2018-12-31</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2716\" target=\"_blank\">Really Simple YouTube</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</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\nreleased during the month or to past shows.<br/>\nThere are 34 comments in total.</p>\n<p>There are 15 comments on\n11 previous shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1536#comments\" target=\"_blank\">hpr1536</a></strong>\n(2014-06-23) \"<em>The 150-in-1 Electronic Project Kit</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0252.html\" target=\"_blank\">Curtis Adkins (CPrompt^)</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1536#9\" target=\"_blank\">Comment 9</a>:\nRichard Harris on 2018-12-16:\n\"Consultant, Licensed technical instructor\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2378#comments\" target=\"_blank\">hpr2378</a></strong>\n(2017-09-13) \"<em>Why Docbook?</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=2378#10\" target=\"_blank\">Comment 10</a>:\nKlaatu on 2018-12-22:\n\"docbook rocks\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2562#comments\" target=\"_blank\">hpr2562</a></strong>\n(2018-05-29) \"<em>I bought a laptop</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2562#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2018-12-05:\n\"This is an episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2619#comments\" target=\"_blank\">hpr2619</a></strong>\n(2018-08-16) \"<em>A Gentle Introduction to Quilt</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0357.html\" target=\"_blank\">bjb</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2619#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2018-12-22:\n\"can\'t wait to try it\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2635#comments\" target=\"_blank\">hpr2635</a></strong>\n(2018-09-07) \"<em>Running your own mainframe on Linux (for fun and profit)</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2635#4\" target=\"_blank\">Comment 4</a>:\nKlaatu on 2018-12-22:\n\"Best explanation of what a mainframe is\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2661#comments\" target=\"_blank\">hpr2661</a></strong>\n(2018-10-15) \"<em>My Music Production Setup</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2661#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2018-12-22:\n\"Nice look behind the scenes\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2666#comments\" target=\"_blank\">hpr2666</a></strong>\n(2018-10-22) \"<em>Slackware Post-Install</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0325.html\" target=\"_blank\">m1rr0r5h4d35</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2666#3\" target=\"_blank\">Comment 3</a>:\nKlaatu on 2018-12-22:\n\"shameless self promotion\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2672#comments\" target=\"_blank\">hpr2672</a></strong>\n(2018-10-30) \"<em>Porteus</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=2672#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2018-12-03:\n\"Late response better than no response\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2693#comments\" target=\"_blank\">hpr2693</a></strong>\n(2018-11-28) \"<em>Getting started with web based game in Haskell and Elm</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2693#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2018-12-01:\n\"thanks\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2694#comments\" target=\"_blank\">hpr2694</a></strong>\n(2018-11-29) \"<em>Bandit Update</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2694#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2018-12-03:\n\"Use the website\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2694#2\" target=\"_blank\">Comment 2</a>:\nNYbill on 2018-12-03:\n\"Huh?\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2694#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2018-12-04:\n\"I took it to be a hacking challange\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2694#4\" target=\"_blank\">Comment 4</a>:\nNYbill on 2018-12-04:\n\"Webpage\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2695#comments\" target=\"_blank\">hpr2695</a></strong>\n(2018-11-30) \"<em>Problems with Studies</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2695#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2018-12-20:\n\"Required listening\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2695#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2018-12-21:\n\"Finding truth\"</li></ul><br/>\n</li></ul>\n<p>There are 19 comments on 10 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2697#comments\" target=\"_blank\">hpr2697</a></strong>\n(2018-12-04) \"<em>The Linux Shutdown Command Explained</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2697#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2018-12-04:\n\"shutdown on BSDs\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2697#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2018-12-20:\n\"another great jwp episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2697#3\" target=\"_blank\">Comment 3</a>:\nKlaatu on 2018-12-20:\n\"episode 2725\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2698#comments\" target=\"_blank\">hpr2698</a></strong>\n(2018-12-05) \"<em>XSV for fast CSV manipulations - Part 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2698#1\" target=\"_blank\">Comment 1</a>:\nMike Ray on 2018-12-05:\n\"Good timing\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2698#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2018-12-16:\n\"This is a great bit of software\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2698#3\" target=\"_blank\">Comment 3</a>:\nKlaatu on 2018-12-20:\n\"Neato\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2701#comments\" target=\"_blank\">hpr2701</a></strong>\n(2018-12-10) \"<em>First impressions of the Odroid-go</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0151.html\" target=\"_blank\">dodddummy</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2701#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2018-12-10:\n\"Particularly interesting\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2701#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2018-12-20:\n\"Particularly interesting +1\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2704#comments\" target=\"_blank\">hpr2704</a></strong>\n(2018-12-13) \"<em>Intro to Scribus</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=2704#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2018-12-15:\n\"Excellent show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2705#comments\" target=\"_blank\">hpr2705</a></strong>\n(2018-12-14) \"<em>Evidence-based Medicine</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=2705#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2018-12-20:\n\"smart\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2705#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2018-12-21:\n\"Follow your bliss\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2706#comments\" target=\"_blank\">hpr2706</a></strong>\n(2018-12-17) \"<em>Why I love the IBM AS/400 computer systems</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2706#1\" target=\"_blank\">Comment 1</a>:\nBob on 2018-12-18:\n\"Novell not AS400\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2706#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2018-12-20:\n\"Intro music\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2706#3\" target=\"_blank\">Comment 3</a>:\nWindigo on 2018-12-31:\n\"Certainly piqued my interest\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2707#comments\" target=\"_blank\">hpr2707</a></strong>\n(2018-12-18) \"<em>Steganalysis 101</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2707#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2018-12-18:\n\"Great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2707#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2018-12-19:\n\"Great intro\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2710#comments\" target=\"_blank\">hpr2710</a></strong>\n(2018-12-21) \"<em>Youtube downloader for channels</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=2710#1\" target=\"_blank\">Comment 1</a>:\nGustaf on 2018-12-21:\n\"Thank you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2712#comments\" target=\"_blank\">hpr2712</a></strong>\n(2018-12-25) \"<em>Steganography</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=2712#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2018-12-28:\n\"Did anyone win ?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2716#comments\" target=\"_blank\">hpr2716</a></strong>\n(2018-12-31) \"<em>Really Simple YouTube</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2716#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2018-12-31:\n\"Already put to use\"</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/2018-December/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2018-December/thread.html</a>\n\n\n<h2>Any other business</h2>\n<h2>\nThanks to all HPR contributors in 2018!\n</h2>\n<p>\n<a href=\"https://hackerpublicradio.org/correspondents/0361.html\">Aaressaar</a>, <a href=\"https://hackerpublicradio.org/correspondents/0198.html\">Ahuka</a>, <a href=\"https://hackerpublicradio.org/correspondents/0290.html\">Al</a>, <a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0300.html\">b-yeezi</a>, <a href=\"https://hackerpublicradio.org/correspondents/0357.html\">bjb</a>, <a href=\"https://hackerpublicradio.org/correspondents/0365.html\">bookewyrmm</a>, <a href=\"https://hackerpublicradio.org/correspondents/0326.html\">Brian in Ohio</a>, <a href=\"https://hackerpublicradio.org/correspondents/0311.html\">clacke</a>, <a href=\"https://hackerpublicradio.org/correspondents/0152.html\">Claudio Miranda</a>, <a href=\"https://hackerpublicradio.org/correspondents/0315.html\">Clinton Roy</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a>, <a href=\"https://hackerpublicradio.org/correspondents/0209.html\">David Whitman</a>, <a href=\"https://hackerpublicradio.org/correspondents/0371.html\">desearcher</a>, <a href=\"https://hackerpublicradio.org/correspondents/0151.html\">dodddummy</a>, <a href=\"https://hackerpublicradio.org/correspondents/0372.html\">Edward Miro / c1ph0r</a>, <a href=\"https://hackerpublicradio.org/correspondents/0085.html\">finux</a>, <a href=\"https://hackerpublicradio.org/correspondents/0309.html\">folky</a>, <a href=\"https://hackerpublicradio.org/correspondents/0269.html\">Honkeymagoo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0159.html\">HPR Volunteers</a>, <a href=\"https://hackerpublicradio.org/correspondents/0157.html\">HPR_AudioBookClub</a>, <a href=\"https://hackerpublicradio.org/correspondents/0369.html\">Jeroen Baten</a>, <a href=\"https://hackerpublicradio.org/correspondents/0360.html\">Joey Hess</a>, <a href=\"https://hackerpublicradio.org/correspondents/0238.html\">Jon Kulp</a>, <a href=\"https://hackerpublicradio.org/correspondents/0129.html\">JWP</a>, <a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken Fallon</a>, <a href=\"https://hackerpublicradio.org/correspondents/0078.html\">klaatu</a>, <a href=\"https://hackerpublicradio.org/correspondents/0111.html\">knightwise</a>, <a href=\"https://hackerpublicradio.org/correspondents/0107.html\">lostnbronx</a>, <a href=\"https://hackerpublicradio.org/correspondents/0325.html\">m1rr0r5h4d35</a>, <a href=\"https://hackerpublicradio.org/correspondents/0362.html\">MPardo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a>, <a href=\"https://hackerpublicradio.org/correspondents/0235.html\">NYbill</a>, <a href=\"https://hackerpublicradio.org/correspondents/0036.html\">operat0r</a>, <a href=\"https://hackerpublicradio.org/correspondents/0366.html\">Philip</a>, <a href=\"https://hackerpublicradio.org/correspondents/0110.html\">Quvmoh</a>, <a href=\"https://hackerpublicradio.org/correspondents/0250.html\">Shane Shennan</a>, <a href=\"https://hackerpublicradio.org/correspondents/0115.html\">sigflup</a>, <a href=\"https://hackerpublicradio.org/correspondents/0334.html\">Steve Saner</a>, <a href=\"https://hackerpublicradio.org/correspondents/0297.html\">swift110</a>, <a href=\"https://hackerpublicradio.org/correspondents/0270.html\">Thaj Sara</a>, <a href=\"https://hackerpublicradio.org/correspondents/0359.html\">The Alien Brothers Podcast (ABP)</a>, <a href=\"https://hackerpublicradio.org/correspondents/0363.html\">the_remora</a>, <a href=\"https://hackerpublicradio.org/correspondents/0354.html\">TheDUDE</a>, <a href=\"https://hackerpublicradio.org/correspondents/0314.html\">thelovebug</a>, <a href=\"https://hackerpublicradio.org/correspondents/0273.html\">ToeJet</a>, <a href=\"https://hackerpublicradio.org/correspondents/0338.html\">Tony Hughes AKA TonyH1212</a>, <a href=\"https://hackerpublicradio.org/correspondents/0364.html\">Tuula</a>, <a href=\"https://hackerpublicradio.org/correspondents/0158.html\">Various Creative Commons Works</a>, <a href=\"https://hackerpublicradio.org/correspondents/0109.html\">Various Hosts</a>, <a href=\"https://hackerpublicradio.org/correspondents/0079.html\">Xoke</a>, <a href=\"https://hackerpublicradio.org/correspondents/0368.html\">Xtrato</a>, <a href=\"https://hackerpublicradio.org/correspondents/0370.html\">Yannick the french guy from Switzerland</a>.\n</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2741,'2019-02-04','HPR Community News for January 2019',4598,'Yannick Dave and Ken talk about shows released and comments posted in January 2019','\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\" summary=\"Last month\'s shows\">\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 valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2717\" target=\"_blank\">2717</a></strong></td>\n    <td>Tue</td>\n    <td>2019-01-01</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2717\" target=\"_blank\">Mobile Device Security</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2718\" target=\"_blank\">2718</a></strong></td>\n    <td>Wed</td>\n    <td>2019-01-02</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2718\" target=\"_blank\">Genre In Storytelling</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2719\" target=\"_blank\">2719</a></strong></td>\n    <td>Thu</td>\n    <td>2019-01-03</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2719\" target=\"_blank\">Bash Tips - 17</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2720\" target=\"_blank\">2720</a></strong></td>\n    <td>Fri</td>\n    <td>2019-01-04</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2720\" target=\"_blank\">Download youtube channels using the rss feeds</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2721\" target=\"_blank\">2721</a></strong></td>\n    <td>Mon</td>\n    <td>2019-01-07</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2721\" target=\"_blank\">HPR Community News for December 2018</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2722\" target=\"_blank\">2722</a></strong></td>\n    <td>Tue</td>\n    <td>2019-01-08</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2722\" target=\"_blank\">RAID 6 a short description</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2723\" target=\"_blank\">2723</a></strong></td>\n    <td>Wed</td>\n    <td>2019-01-09</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2723\" target=\"_blank\">Using Elm in context of 4X game client</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2724\" target=\"_blank\">2724</a></strong></td>\n    <td>Thu</td>\n    <td>2019-01-10</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2724\" target=\"_blank\">Using a DIN Rail to mount a Raspberry Pi</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2725\" target=\"_blank\">2725</a></strong></td>\n    <td>Fri</td>\n    <td>2019-01-11</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2725\" target=\"_blank\">The Illumos Shutdown Command Explained</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2726\" target=\"_blank\">2726</a></strong></td>\n    <td>Mon</td>\n    <td>2019-01-14</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2726\" target=\"_blank\">Home Theater - Part 2 Software (High Level)</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2727\" target=\"_blank\">2727</a></strong></td>\n    <td>Tue</td>\n    <td>2019-01-15</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2727\" target=\"_blank\">Passwords</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2728\" target=\"_blank\">2728</a></strong></td>\n    <td>Wed</td>\n    <td>2019-01-16</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2728\" target=\"_blank\">The Unreliable Narrator In Storytelling</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2729\" target=\"_blank\">2729</a></strong></td>\n    <td>Thu</td>\n    <td>2019-01-17</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2729\" target=\"_blank\">Bash Tips - 18</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2730\" target=\"_blank\">2730</a></strong></td>\n    <td>Fri</td>\n    <td>2019-01-18</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2730\" target=\"_blank\">Resizing images for vcard on Android</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2731\" target=\"_blank\">2731</a></strong></td>\n    <td>Mon</td>\n    <td>2019-01-21</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2731\" target=\"_blank\">My 8 bit Christmas</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0268.html\" target=\"_blank\">Andrew Conway</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2732\" target=\"_blank\">2732</a></strong></td>\n    <td>Tue</td>\n    <td>2019-01-22</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2732\" target=\"_blank\">Storytelling formula compliance</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2733\" target=\"_blank\">2733</a></strong></td>\n    <td>Wed</td>\n    <td>2019-01-23</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2733\" target=\"_blank\">Writing Web Game in Haskell - News and Notifications</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2734\" target=\"_blank\">2734</a></strong></td>\n    <td>Thu</td>\n    <td>2019-01-24</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2734\" target=\"_blank\">Mashpodder</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2735\" target=\"_blank\">2735</a></strong></td>\n    <td>Fri</td>\n    <td>2019-01-25</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2735\" target=\"_blank\">Soffritto</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2736\" target=\"_blank\">2736</a></strong></td>\n    <td>Mon</td>\n    <td>2019-01-28</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2736\" target=\"_blank\">Response to show 2720</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2737\" target=\"_blank\">2737</a></strong></td>\n    <td>Tue</td>\n    <td>2019-01-29</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2737\" target=\"_blank\">My Pioneer RT-707 Reel-to-Reel Tape Deck</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2738\" target=\"_blank\">2738</a></strong></td>\n    <td>Wed</td>\n    <td>2019-01-30</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2738\" target=\"_blank\">My Applications</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2739\" target=\"_blank\">2739</a></strong></td>\n    <td>Thu</td>\n    <td>2019-01-31</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2739\" target=\"_blank\">Bash Tips - 19</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</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\nreleased during the month or to past shows.<br/>\nThere are 29 comments in total.</p>\n<p>There are 8 comments on\n4 previous shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2629#comments\" target=\"_blank\">hpr2629</a></strong>\n(2018-08-30) \"<em>Thoughts on language learning part 3 - game/story mode.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0151.html\" target=\"_blank\">dodddummy</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2629#2\" target=\"_blank\">Comment 2</a>:\ndodddummy on 2019-01-08:\n\"The Stanley Parable\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2668#comments\" target=\"_blank\">hpr2668</a></strong>\n(2018-10-24) \"<em>Explaining the controls on my Amateur HF Radio Part 3</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2668#3\" target=\"_blank\">Comment 3</a>:\nMrX on 2019-01-10:\n\"Re Comment 1 from Michael\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2668#4\" target=\"_blank\">Comment 4</a>:\nMrX on 2019-01-10:\n\"Re Comment 2 from lostnbronx\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2709#comments\" target=\"_blank\">hpr2709</a></strong>\n(2018-12-20) \"<em>Bash Tips - 16</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=2709#1\" target=\"_blank\">Comment 1</a>:\ndodddummy on 2019-01-08:\n\"In case you are worried Dave will run out of material\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2709#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2019-01-08:\n\"Bash-5.0\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2712#comments\" target=\"_blank\">hpr2712</a></strong>\n(2018-12-25) \"<em>Steganography</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=2712#2\" target=\"_blank\">Comment 2</a>:\nShortFatBaldGuy on 2019-01-04:\n\"Great episode/series\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2712#3\" target=\"_blank\">Comment 3</a>:\nKlaatu on 2019-01-07:\n\"no lucky winners\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2712#4\" target=\"_blank\">Comment 4</a>:\nKlaatu on 2019-01-07:\n\"Thanks Scott\"</li></ul><br/>\n</li></ul>\n<p>There are 21 comments on 9 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2717#comments\" target=\"_blank\">hpr2717</a></strong>\n(2019-01-01) \"<em>Mobile Device Security</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2717#1\" target=\"_blank\">Comment 1</a>:\nrtsn on 2019-01-25:\n\"!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2719#comments\" target=\"_blank\">hpr2719</a></strong>\n(2019-01-03) \"<em>Bash Tips - 17</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=2719#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-01-07:\n\"Things I didn\'t know\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2719#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2019-01-07:\n\"Substring manipulation\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2721#comments\" target=\"_blank\">hpr2721</a></strong>\n(2019-01-07) \"<em>HPR Community News for December 2018</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=2721#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2019-01-15:\n\"Very nice show!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2721#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2019-01-16:\n\"Listening through the back catalog\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2725#comments\" target=\"_blank\">hpr2725</a></strong>\n(2019-01-11) \"<em>The Illumos Shutdown Command Explained</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=2725#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2019-01-11:\n\"Quite a Different Shutdown\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2726#comments\" target=\"_blank\">hpr2726</a></strong>\n(2019-01-14) \"<em>Home Theater - Part 2 Software (High Level)</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=2726#1\" target=\"_blank\">Comment 1</a>:\nrtsn on 2019-01-25:\n\"!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2728#comments\" target=\"_blank\">hpr2728</a></strong>\n(2019-01-16) \"<em>The Unreliable Narrator In Storytelling</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2728#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-01-17:\n\"As a means for telling two stories at once ?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2731#comments\" target=\"_blank\">hpr2731</a></strong>\n(2019-01-21) \"<em>My 8 bit Christmas</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=2731#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-01-23:\n\"amazing memories\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2731#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2019-01-23:\n\"This was a real treat\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2731#3\" target=\"_blank\">Comment 3</a>:\nJon Kulp on 2019-01-23:\n\"I love legacy hardware\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2731#4\" target=\"_blank\">Comment 4</a>:\ntimttmy on 2019-01-23:\n\"first contact\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2731#5\" target=\"_blank\">Comment 5</a>:\nrtsn on 2019-01-25:\n\"c0mment\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2731#6\" target=\"_blank\">Comment 6</a>:\nMike Ray on 2019-01-25:\n\"Jealous\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2734#comments\" target=\"_blank\">hpr2734</a></strong>\n(2019-01-24) \"<em>Mashpodder</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2734#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2019-01-17:\n\"Coincidentally...\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2734#2\" target=\"_blank\">Comment 2</a>:\nMrX on 2019-01-20:\n\"Re Coincidentally...\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2737#comments\" target=\"_blank\">hpr2737</a></strong>\n(2019-01-29) \"<em>My Pioneer RT-707 Reel-to-Reel Tape Deck</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2737#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2019-01-29:\n\"Tape counter is functioning now\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2737#2\" target=\"_blank\">Comment 2</a>:\nBookewyrmm on 2019-01-29:\n\"ancient media\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2737#3\" target=\"_blank\">Comment 3</a>:\nJon Kulp on 2019-01-29:\n\"Victrola episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2737#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2019-01-29:\n\"Wow! What a beautiful tape deck!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2737#5\" target=\"_blank\">Comment 5</a>:\nJon Kulp on 2019-01-29:\n\"I want one!\"</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/2019-January/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-January/thread.html</a>\n\n\n<h2>Any other business</h2>\n<ul>\n<li><p>Google+ is going away on April 2nd. Everything is going to be deleted so backup your files before then.</p></li>\n<li><p>Mad Sweeney wrote to inform us about <a href=\"https://dnsflagday.net/\" class=\"uri\">https://dnsflagday.net/</a> Some <em>“DNS software and service providers […] have agreed to coordinate removing accommodations for non-compliant DNS implementations from their software or services, on or around February 1st 2019”</em></p></li>\n</ul>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Over the period tags and/or summaries have been added to 11 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1);
INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hostid`, `series`, `explicit`, `license`, `tags`, `version`, `downloads`, `valid`) VALUES (3959,'2023-10-05','Download any HPR series with english file names',165,'A dir with the series name will be created and all shows will be renamed to ShowTitle.mp3 inside it','<p>Hello all. This is gemlog from Terrace, bc, canada just up near the\nalaska panhandle.</p>\n<p>Some of you may know me from in COM chat on sdf dot org or as a\nfedizen on the tilde dot zone instance of mastodon.</p>\n<p>Now, the other day I finally got around to checking out HPR properly,\neven though my masto-pal claw-dio-m turned me on to it a couple of years\nago.</p>\n<p>Recently, on a friday night in irc on tilde radio, I noticed there\nwere whole series on hpr and not only single shows and that got me kind\nof excited.<br />\nI guess I\'m easily excitable.</p>\n<p>Anyhow, something I could listen to at work or while driving. Still,\nI managed to forget about it until /just/ before I was leaving the house\nfor work on Monday morning. I rushed to copy over a few shows - nearly\nat random onto my phone and headed out to work.</p>\n<p>After I got my morning sorted at work, I told VLC to play-all and\nenjoyed a couple of shows. I noticed that each show I had chosen had a\nbeg post at the beginning. I figured I could make one on at least\nsomething from my messy gemlog/bin dir.</p>\n<p>However, after a break, I came back and couldn\'t remember which 4\ndigit numbered dot mp3 I had finished up on, which mildly irked me.\nWell, as we all know, irk becomes itch and I put my sad regex skills to\nthe test scraping the hpr website with a custom bash script later when I\ngot home.</p>\n<p>A very custom bash script. Like all scrapers, if any of the guys at\nhpr even breathe the wrong way, it will probably break horribly. On the\nother hand, I\'ve had scrapers that looked just as sad running for many\nyears against a canadian government site. So. Who knows?</p>\n<p>All the script uses are some built-ins from bash along with sed and\nwget for the actual getting. My local instance of searX N G was left\nsmoking as scrambled for sed incantations to string together. I\'m not a\nsed guy.</p>\n<p>Usage is simple, as the script only accepts one argument: ... the\nfour digit series number of the show you want to download. It will\ncreate a dir with the series name and download every mp3 it finds,\nrenaming each show to the show title.</p>\n<p>I was tempted to doll it up with some niceties like options for\ndownload dir, a selector for a series with a dialog of some kind... yada\nyada yada.</p>\n<p>But... we all know what happens when you stretch a quick hack with a\nbash script too far for the scripting language: hours of misery wishing\nyou\'d started with some other language.</p>\n<p>So far, I\'ve used the script to download 8 series. DU dash S H tells\nme they add up to 2 dot 2 gig, so it seems to work well enough.</p>\n<p>It comes with the same iron clad warranty as everything I write:</p>\n<p>If it breaks, you get to keep all the pieces. Thanks for\nlistening.</p>\n<pre><code>#!/bin/bash\n# gemlog@gemlog.ca 2023-08-26\n# License: CC BY-SA 4.0.\n# not proud of my continuing lack of regex foo frankly...\n\nif [ $# -lt 1 ]; then\n  echo 1&gt;&amp;2 &quot;$0: You need to enter the HPR Series Number to download as 4 digits&quot;\n  echo &quot;The full list of HPR Series is at https://hackerpublicradio.org/series/index.html&quot;\n  exit 2\nfi\n\nsnumber=$1\nre=&#39;^[[:digit:]]{4}$&#39;\nif [[ $snumber =~ $re ]]; then\n    wget https://hackerpublicradio.org/series/$snumber.html -q -O /tmp/$snumber.html\n    content=$(&lt;/tmp/$snumber.html)\n    declare -a shows\n    shows=$(grep -P &#39;^(?=.*h3)(?=.*title)&#39; /tmp/$snumber.html)\nelse\n    echo &quot;&#39;$snumber&#39; is not exactly 4 digits like an HPR series number&quot;\n    exit 2\nfi\n\nseries=$(echo $content | sed -e :a -e &#39;s/&lt;[^&gt;]*&gt;//g;/&lt;/N;//ba&#39; | grep -o -P -m1 &#39;(?&lt;=In-Depth Series:).*(?=Number)&#39; | sed &#39;s/[ t]*$//&#39; )\nseries=$(echo ${series// /_} | cut -b 2-50 | sed &#39;s/_*$//&#39; | sed &#39;s/^_*//&#39; | sed s/[^A-Za-z0-9_.]/_/g)\n\n#outdir=&quot;/home/gemlog/Music/Audio/HPR/$series-Se$snumber/&quot;\noutdir=~/&quot;Downloads/HPR/$series-Se$snumber/&quot;\nmkdir -p &quot;$outdir&quot;\necho &quot;Files for the series &quot;$series&quot; will be saved in $outdir&quot;\n\ndeclare -a shows\ndeclare -a url_array\nshows=$(grep -P &#39;^(?=.*h3)(?=.*title)&#39; /tmp/$snumber.html)\nIFS=$&#39;n&#39;\n\nfor line in $shows\n  do\n    f=$((f+1))\ndone\necho\necho\necho &quot;Downloading $f mp3 files&quot;\n\n\nfor line in $shows\n  do\n    i=$((i+1))\n    title=$(echo $line | sed -e :a -e &#39;s/&lt;[^&gt;]*&gt;//g;/&lt;/N;//ba&#39; | grep -o -P &#39;(?&lt;=::).*(&#39;host&#39;)&#39;  | sed &#39;s/host//&#39; | sed &#39;s/[ t]*$//&#39; | sed s/[^A-Za-z0-9_.]/_/g | sed &#39;s/ /_/g&#39; | sed &#39;s/^_*//&#39; )\n    enumber=$(echo $line | sed -e :a -e &#39;s/&lt;[^&gt;]*&gt;//g;/&lt;/N;//ba&#39; | grep -o -P &#39;(?&lt;=hpr).*(&#39;::&#39;)&#39; | sed &#39;s/:://&#39;)\n    enumber=$(printf &quot;%04d&quot; $((enumber)) )\n    outfile=$outdir$title-Ep$enumber.mp3\n    url=&quot;https://www.hackerpublicradio.org/eps/hpr$enumber.mp3&quot;\n    echo &quot;Downloading file $i: $title&quot;\n    wget --verbose --max-redirect 2 $url -O $outfile\n    sleep 2\n  done\n\n\necho\nttlfiles=$(ls -1 $outdir | wc -l)\necho &quot;$ttlfiles files for the series &quot;$series&quot; were saved in $outdir&quot;\n\nexit 0</code></pre>\n',425,42,1,'CC-BY-SA','Bash, sed, grep, wget, scraper',0,0,1),
(2761,'2019-03-04','HPR Community News for February 2019',4022,'HPR Volunteers talk about shows released and comments posted in February 2019','\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\" summary=\"Last month\'s shows\">\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 valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2740\" target=\"_blank\">2740</a></strong></td>\n    <td>Fri</td>\n    <td>2019-02-01</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2740\" target=\"_blank\">Pop!_OS 18.10 (quick) review</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick the french guy from Switzerland</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2741\" target=\"_blank\">2741</a></strong></td>\n    <td>Mon</td>\n    <td>2019-02-04</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2741\" target=\"_blank\">HPR Community News for January 2019</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2742\" target=\"_blank\">2742</a></strong></td>\n    <td>Tue</td>\n    <td>2019-02-05</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2742\" target=\"_blank\">SAP Hana Certification Directory</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2743\" target=\"_blank\">2743</a></strong></td>\n    <td>Wed</td>\n    <td>2019-02-06</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2743\" target=\"_blank\">Character build in the d20 system</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2744\" target=\"_blank\">2744</a></strong></td>\n    <td>Thu</td>\n    <td>2019-02-07</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2744\" target=\"_blank\">Yet Another Rambling Drive Into Work</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2745\" target=\"_blank\">2745</a></strong></td>\n    <td>Fri</td>\n    <td>2019-02-08</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2745\" target=\"_blank\">My YouTube Subscriptions #1</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2746\" target=\"_blank\">2746</a></strong></td>\n    <td>Mon</td>\n    <td>2019-02-11</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2746\" target=\"_blank\">My software part 2</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2747\" target=\"_blank\">2747</a></strong></td>\n    <td>Tue</td>\n    <td>2019-02-12</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2747\" target=\"_blank\">checking oil</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0329.html\" target=\"_blank\">brian</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2748\" target=\"_blank\">2748</a></strong></td>\n    <td>Wed</td>\n    <td>2019-02-13</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2748\" target=\"_blank\">Writing Web Game in Haskell - Special events</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2749\" target=\"_blank\">2749</a></strong></td>\n    <td>Thu</td>\n    <td>2019-02-14</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2749\" target=\"_blank\">Lostnbronx and Klaatu commentary from episode 2743</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2750\" target=\"_blank\">2750</a></strong></td>\n    <td>Fri</td>\n    <td>2019-02-15</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2750\" target=\"_blank\">Windmill is on the Fritz</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2751\" target=\"_blank\">2751</a></strong></td>\n    <td>Mon</td>\n    <td>2019-02-18</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2751\" target=\"_blank\">Battling with English - part 3</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2752\" target=\"_blank\">2752</a></strong></td>\n    <td>Tue</td>\n    <td>2019-02-19</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2752\" target=\"_blank\">XSV for fast CSV manipulations - Part 2</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2753\" target=\"_blank\">2753</a></strong></td>\n    <td>Wed</td>\n    <td>2019-02-20</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2753\" target=\"_blank\">Specific Settings In Storytelling</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2754\" target=\"_blank\">2754</a></strong></td>\n    <td>Thu</td>\n    <td>2019-02-21</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2754\" target=\"_blank\">Craigslist Scam Catch</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2755\" target=\"_blank\">2755</a></strong></td>\n    <td>Fri</td>\n    <td>2019-02-22</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2755\" target=\"_blank\">My YouTube Subscriptions #2</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2756\" target=\"_blank\">2756</a></strong></td>\n    <td>Mon</td>\n    <td>2019-02-25</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2756\" target=\"_blank\">Bash Tips - 20</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2757\" target=\"_blank\">2757</a></strong></td>\n    <td>Tue</td>\n    <td>2019-02-26</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2757\" target=\"_blank\">How to DM</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2758\" target=\"_blank\">2758</a></strong></td>\n    <td>Wed</td>\n    <td>2019-02-27</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2758\" target=\"_blank\">Haskell - Data types and database actions</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n    </tr>\n    <tr valign=\"top\">\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2759\" target=\"_blank\">2759</a></strong></td>\n    <td>Thu</td>\n    <td>2019-02-28</td>\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2759\" target=\"_blank\">Cleaning the Potentiometers on a Peavey Bandit 65</a></td>\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</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\nreleased during the month or to past shows.<br/>\nThere are 10 comments in total.</p>\n<p>There are 6 comments on\n5 previous shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2672#comments\" target=\"_blank\">hpr2672</a></strong>\n(2018-10-30) \"<em>Porteus</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=2672#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2019-02-26:\n\"Re: Test-driving Linux in computer stores\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2706#comments\" target=\"_blank\">hpr2706</a></strong>\n(2018-12-17) \"<em>Why I love the IBM AS/400 computer systems</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2706#4\" target=\"_blank\">Comment 4</a>:\nRob on 2019-02-27:\n\"hpr2706 - episode about AS/400\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2707#comments\" target=\"_blank\">hpr2707</a></strong>\n(2018-12-18) \"<em>Steganalysis 101</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2707#3\" target=\"_blank\">Comment 3</a>:\nrtsn on 2019-02-05:\n\"!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2708#comments\" target=\"_blank\">hpr2708</a></strong>\n(2018-12-19) \"<em>Ghostscript</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=2708#1\" target=\"_blank\">Comment 1</a>:\nSteve on 2019-02-07:\n\"Just what I needed\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2737#comments\" target=\"_blank\">hpr2737</a></strong>\n(2019-01-29) \"<em>My Pioneer RT-707 Reel-to-Reel Tape Deck</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2737#6\" target=\"_blank\">Comment 6</a>:\nVulcanRidr on 2019-02-06:\n\"Excellent!\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2737#7\" target=\"_blank\">Comment 7</a>:\nJon Kulp on 2019-02-06:\n\"the RT-909\"</li></ul><br/>\n</li></ul>\n<p>There are 4 comments on 4 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2741#comments\" target=\"_blank\">hpr2741</a></strong>\n(2019-02-04) \"<em>HPR Community News for January 2019</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=2741#1\" target=\"_blank\">Comment 1</a>:\nBrian in Ohio on 2019-02-06:\n\"show notes\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2743#comments\" target=\"_blank\">hpr2743</a></strong>\n(2019-02-06) \"<em>Character build in the d20 system</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=2743#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-02-06:\n\"Pleasure to listen to\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2754#comments\" target=\"_blank\">hpr2754</a></strong>\n(2019-02-21) \"<em>Craigslist Scam Catch</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0372.html\" target=\"_blank\">Edward Miro / c1ph0r</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2754#1\" target=\"_blank\">Comment 1</a>:\nklaatu on 2019-02-27:\n\"this episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2759#comments\" target=\"_blank\">hpr2759</a></strong>\n(2019-02-28) \"<em>Cleaning the Potentiometers on a Peavey Bandit 65</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2759#1\" target=\"_blank\">Comment 1</a>:\nNYbill on 2019-02-28:\n\"Stepping on toes!\"</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/2019-February/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-February/thread.html</a>\n\n\n<h2>Any other business</h2>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 24 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2466,'2018-01-15','ShareX is awesome',447,'ShareX, for all your screenshot needs and more','<p>Find it at <a href=\"https://getsharex.com/\" class=\"uri\">https://getsharex.com/</a></p>',79,0,0,'CC-BY-SA','Windows, Screenshot, documentation',0,0,1),
(2468,'2018-01-17','THE WELL',408,'I record a video with audio on my fathers well setup in the sticks','<p>I record a video with audio on my fathers well setup in the sticks</p>\r\n<p><a href=\"https://rmccurdy.com/scripts/videos/rmccurdy_com/THE_WELL.mp4\" class=\"uri\">https://rmccurdy.com/scripts/videos/rmccurdy_com/THE_WELL.mp4</a></p>',36,0,1,'CC-BY-SA','well, pump, troubleshooting',0,0,1),
(2469,'2018-01-18','A flight itinerary in Bash',1065,'Working out dates and times in a Bash script','<h1 id=\"a-flight-itinerary-in-bash\">A flight itinerary in Bash</h1>\r\n<p>My daughter flew out to New Zealand before Christmas 2017 to spend some time with her brother, who had been there with his girlfriend since November. I saw her flight itinerary from the airline, but had no idea of how the times related to time back home, so I wrote a little Bash script to calculate times in UTC (my local timezone).</p>\r\n<p>Both of my children have travelled a fair bit in the past few years. I like to keep track of where they are and how they are progressing through their journeys because otherwise I tend to worry. This one was a reasonably simple journey, two flights via Doha in Qatar, with not too long a wait between them. The overall journey was <em>long</em> of course.</p>\r\n<p>When my daughter flew out to Indonesia in 2015 (4 flights and a boat trip, over 38 hours travel time) I built a spreadsheet. Just whatever provides a good distraction!</p>\r\n<p>The rest of the notes, including details of the <code>date</code> command and the script I wrote can be found <a href=\"https://hackerpublicradio.org/eps/hpr2469/full_shownotes.html\">here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>GNU documentation for <a href=\"https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html#date-invocation\"><code>date</code></a> (You can also use <code>man date</code> or <code>info date</code> for the full details. I prefer the HTML version because I don\'t like the <code>info</code> tool very much).</li>\r\n<li>The <a href=\"https://www.gnu.org/software/bash/manual/bash.html\">GNU Bash Reference Manual</a></li>\r\n<li>Dann Wasko\'s <em>&quot;Linux in the Shell&quot;</em> episode <a href=\"https://hackerpublicradio.org/eps.php?id=1182\"><em>hpr1182 :: LiTS 023: Date</em></a>, which is full of useful information.</li>\r\n<li>Resources:\r\n<ul>\r\n<li>The script I wrote, called <a href=\"https://hackerpublicradio.org/eps/hpr2469/edi_akl\"><code>edi_akl</code></a> (named to denote the starting and ending airports).</li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,date,ISO 8601,epoch',0,0,1),
(2470,'2018-01-19','Obamacare Update At The End Of 2017',798,'Where is US Health Care policy as we head into 2018?','<p>In 2017 Obamacare was the subject of a great deal of political jockeying, and yet by the end of the year almost nothing changed. So what happened, and why?</p>\r\n<ul>\r\n<li><a href=\"https://www.theguardian.com/us-news/2017/jun/26/koch-network-piggy-banks-closed-republicans-healthcare-tax-reform\" class=\"uri\">https://www.theguardian.com/us-news/2017/jun/26/koch-network-piggy-banks-closed-republicans-healthcare-tax-reform</a></li>\r\n<li><a href=\"https://www.foxbusiness.com/politics/2017/06/26/gop-donors-close-checkbooks-frustrated-with-lack-progress-on-taxes-health-care.html\" class=\"uri\">https://www.foxbusiness.com/politics/2017/06/26/gop-donors-close-checkbooks-frustrated-with-lack-progress-on-taxes-health-care.html</a></li>\r\n<li><a href=\"https://fortune.com/2017/12/21/obamacare-enrollment-surge-despite-trump/\" class=\"uri\">https://fortune.com/2017/12/21/obamacare-enrollment-surge-despite-trump/</a></li>\r\n<li><a href=\"https://www.washingtonpost.com/blogs/plum-line/wp/2017/12/27/republicans-failure-on-health-care-is-even-greater-than-they-realize/\" class=\"uri\">https://www.washingtonpost.com/blogs/plum-line/wp/2017/12/27/republicans-failure-on-health-care-is-even-greater-than-they-realize/</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=325\" class=\"uri\">https://www.palain.com/?page_id=325</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health Insurance, Health Policy, Insurance Marketplace, Obamacare',0,0,1),
(2479,'2018-02-01','Intergraph workstation',1725,'My rebuild of my Intergraph workstation','<p>Been going through my old work servers.</p>\r\n<p>They typically run until I can\'t update them anymore and then sit not used until I have a bit of free time. So I have an old intergraph box in it that I new pentium 4 motherboard from about 8 years back. I had the receipt taped to the inside of the box. And the Expense statement from work. I had centos 6.0 on it try as it must It got no more updates and repros. It also has a weak PSU as I had to remove the DVD and graphics card to get to work.</p>\r\n<p>About intergraph:</p>\r\n<blockquote>\r\n<p>Intergraph Corporation is an American software development and services company. It provides enterprise engineering and geospatially powered software to businesses, governments, and organizations around the world. Intergraph operates through three divisions: Hexagon PPM, Hexagon Safety &amp; Infrastructure, and Hexagon Geospatial. The company\'s headquarters is in Huntsville, Alabama, USA. In 2008, Intergraph was one of the 100 largest software companies in the world. In 2010, Intergraph was acquired by Hexagon AB. Intergraph was founded in 1969 as M&amp;S Computing, Inc., by former IBM engineers who had been working with NASA and the U.S. Army in developing systems that would apply digital computing to real-time missile guidance. The company was later renamed to Intergraph Corporation in 1980. In 2000, Intergraph exited the hardware business and became purely a software company. On July 21, 2000, it sold its Intense3D graphics accelerator division to 3Dlabs, and its workstation and server division to Silicon Graphics. The companies incorporated SmartSketch, a drawing program used previously for the PenPoint OS and EO tablet computer. When Pen computing did not take off, SmartSketch was ported to the Windows and Macintosh platforms. <a href=\"https://www.cnet.com/news/intergraph-delivers-cheap-workstations/\" class=\"uri\">https://www.cnet.com/news/intergraph-delivers-cheap-workstations/</a></p>\r\n</blockquote>\r\n<p>The new TD-300 and TD-400 &quot;Personal Workstations&quot; offer 3D graphics capabilities equal to or below the prices of PCs configured as 3D workstations, the company said. The TD-300 and TD-400 Personal Workstations are available immediately, with prices starting at $5,495. <a href=\"https://www.intergraph.com/about_us/history_90s.aspx\" class=\"uri\">https://www.intergraph.com/about_us/history_90s.aspx</a></p>\r\n<p>So the box now has a Pentium 4 dual core in it which is 64 bit. This chip is 2004-2007. <a href=\"https://en.wikipedia.org/wiki/Pentium_4\" class=\"uri\">https://en.wikipedia.org/wiki/Pentium_4</a></p>\r\n<p>So I have the ubuntu 32 bit work. And Suse Enterprise 12, tumbleweed and leap on hyperV. I had my Transmeta box on Debian I386 32 bit. So I need a redhat flavor. Since its 64 bit I picked CentOS. <a href=\"https://www.centos.org/\" class=\"uri\">https://www.centos.org/</a></p>\r\n<p>What is CentOS?</p>\r\n<blockquote>\r\n<p>CentOS (/ˈsɛntɒs/, from Community Enterprise Operating System) is a Linux distribution that attempts to provide a free, enterprise-class, community-supported computing platform functionally compatible with its upstream source, Red Hat Enterprise Linux (RHEL). In January 2014, CentOS announced the official joining with Red Hat while staying independent from RHEL, under a new CentOS governing board. In July 2010, CentOS overtook Debian to become the most popular Linux distribution for web servers, with almost 30% of all Linux web servers using it. Debian retook the lead in January 2012.</p>\r\n<p>In January 2014, Red Hat announced that it would sponsor the CentOS project, &quot;helping to establish a platform well-suited to the needs of open source developers that integrate technologies in and around the operating system&quot;. As a result of these changes, ownership of CentOS trademarks was transferred to Red Hat, which now employs most of the CentOS head developers; however, they work as part of Red Hat\'s Open Source and Standards team, which operates separately from the Red Hat Enterprise Linux team. A new CentOS governing board was also established.</p>\r\n<p>CentOS developers use Red Hat\'s source code to create a final product very similar to RHEL. Red Hat\'s branding and logos are changed because Red Hat does not allow them to be redistributed. CentOS is available free of charge. Technical support is primarily provided by the community via official mailing lists, web forums, and chat rooms. CentOS version numbers for releases older than 7.0 have two parts, a major version and a minor version, which correspond to the major version and update set of Red Hat Enterprise Linux (RHEL) used to build a particular CentOS release. For example, CentOS 6.5 is built from the source packages of RHEL 6 update 5 (also known as RHEL version 6.5), which is a so-called &quot;point release&quot; of RHEL 6.</p>\r\n<p>Starting with version 7.0, CentOS version numbers also include a third part that indicates the monthstamp of the source code the release is based on. For example, version number 7.0-1406 still maps this CentOS release to the zeroth update set of RHEL 7, while &quot;1406&quot; indicates that the source code this release is based on dates from June 2014. Using the monthstamp allows installation images to be reissued for (as of July 2014) oncoming container and cloud releases, while maintaining a connection to the related base release version.</p>\r\n<p>Since mid-2006 and starting with RHEL version 4.4, which is formally known as Red Hat Enterprise Linux 4.0 update 4, Red Hat has adopted a version-naming convention identical to that used by CentOS (for example, RHEL 4.5 or RHEL 6.5). AltArch releases are released by the Alternative Architecture Special Interest Group (AltArch SIG) to supporThere are three primary CentOS repositories (also known as channels), containing software packages that make up the main CentOS distribution: base - contains packages that form CentOS point releases, and gets updated when the actual point release is formally made available in form of ISO images. updates - contains packages that serve as security, bugfix or enhancement updates, issued between the regular update sets for point releases. Bugfix and enhancement updates released this way are only those unsuitable to be released through the CentOS-Fasttrack repository described below. addons - provides packages required for building the packages that make up the main CentOS distribution, but are not provided by the upstream. The CentOS project provides several additional repositories that contain software packages not provided by the default base and updates repositories. Those repositories include the following: CentOS Extras - contains packages that provide additional functionality to CentOS without breaking its upstream compatibility or updating the base components. CentOSPlus - contains packages that actually upgrade certain base CentOS components, changing CentOS so that it is not exactly like the upstream provider\'s content. CentOS-Testing - serves as a proving ground for packages on their way to CentOSPlus and CentOS Extras. Offered packages may or may not replace core CentOS packages, and are not guaranteed to work properly. CentOS-Fasttrack - contains bugfix and enhancement updates issued from time to time, between the regular update sets for point releases. The packages released this way serve as close candidates for the inclusion into the next point release. This repository does not provide security updates, and does not contain packages unsuitable for uncertain inclusion into point releases. CR (Continuous Release) - makes generally available packages that will appear in the next point release of CentOS. The packages are made available on a testing and hotfix basis, until the actual point release is formally released in form of ISO images. debuginfo - contains packages with debugging symbols generated when the primary packages were built contrib - contains packages contributed by CentOS users that do not overlap with any of the core distribution packages Software Collections - provides versions of software newer than those provided by the base distribution, see above for more details</p>\r\n</blockquote>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/CentOS\" class=\"uri\">https://en.wikipedia.org/wiki/CentOS</a></li>\r\n<li><a href=\"https://wiki.centos.org/FrontPage\" class=\"uri\">https://wiki.centos.org/FrontPage</a></li>\r\n</ul>\r\n<p>The end of support on my box is currently 2024. During my setup I let the centos do something with LVM the drive had two WD 320GB disks. One was very hot so I moved it so it have some more air.</p>\r\n<p>LVM:</p>\r\n<blockquote>\r\n<p>In Linux, Logical Volume Manager (LVM) is a device mapper target that provides logical volume management for the Linux kernel. Most modern Linux distributions are LVM-aware to the point of being able to have their root file systems on a logical volume.</p>\r\n<p>Heinz Mauelshagen wrote the original LVM code in 1998, taking its primary design guidelines from the HP-UX\'s volume manager. LVM is used for the following purposes: Creating single logical volumes of multiple physical volumes or entire hard disks (somewhat similar to RAID 0, but more similar to JBOD), allowing for dynamic volume resizing. Managing large hard disk farms by allowing disks to be added and replaced without downtime or service disruption, in combination with hot swapping. On small systems (like a desktop), instead of having to estimate at installation time how big a partition might need to be, LVM allows filesystems to be easily resized as needed. Performing consistent backups by taking snapshots of the logical volumes. LVM can be considered as a thin layer of continuity and ease-of-use for managing hard drive replacement, repartitioning and backup. software layer on top of the hard disks and partitions, which creates an abstraction Basic functionality Volume groups (VGs) can be resized online by absorbing new physical volumes (PVs) or ejecting existing ones. Logical volumes (LVs) can be resized online by concatenating extents onto them or truncating extents from them. LVs can be moved between PVs. Creation of read-only snapshots of logical volumes (LVM1), or read-write snapshots (LVM2). VGs can be split or merged in situ as long as no LVs span the split. This can be useful when migrating whole LVs to or from offline storage. LVM objects can be tagged for administrative convenience. VGs and LVs can be made active as the underlying devices become available through use of the lvmetad daemon.</p>\r\n</blockquote>\r\n<p>Setup with CentOS is not as simple as linux mint or ubuntu and very different than debian. You have to click and know a little about what you doing. For me with the basic 500GB install disk I got only a bare server with ssh. The machine was having power issues and would not boot from a usb stick so I had to go through 4 different DVD drives until I found one that worked with the DVD-R format. I had to use another deskop and power the DVD threw the other desk up connecting only the sata port the IDE drive was not working well either on this old board.</p>\r\n<p>I had to remove the old centos 6 from the drives using Gparted. There were errors with the gparted but the centos installer worked great after I removed ext4 part of the lvms.</p>\r\n<p>GParted is a free partition editor for graphically managing your disk partitions.</p>\r\n<p>With GParted you can resize, copy, and move partitions without data loss,</p>\r\n<p>Getting the mirrors working and getting it to work through a fire wall was pretty hard I had to make two config changes to the yum.conf one with the proxy address and the other to allow http cache. I also used <code>export_proxy=</code> to get it work globally. I had really trouble finding a fast mirror but I did not give up hope after a while it found fast mirrors that I got over 2MB per second from.</p>\r\n<p>So I installed Gnome and made boot up at startup I will install x2go or vncserver on it also just in case I need it.</p>\r\n<p>After some time of playing with it I was able to get it to fully update.</p>\r\n<p>I then moved to the server room, got the IP address and connected it it from putty. I think the advantage of this box is that I will always have a Redhat 7 install ready to demo or learn something without having to setup a lot of things.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Intergraph\" class=\"uri\">https://en.wikipedia.org/wiki/Intergraph</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/CentOS\" class=\"uri\">https://en.wikipedia.org/wiki/CentOS</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)\" class=\"uri\">https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)</a></li>\r\n</ul>\r\n',129,0,0,'CC-BY-SA','Intergraph Corporation, Pentium 4, CentOS, Logical Volume Manager',0,0,1),
(2480,'2018-02-02','What\'s In My Podcatcher 1',1067,'A current report, with descriptions, of the podcasts I enjoy','<p>I listen to many podcasts as my primary form of audio entertainment, and because Hacker Public Radio listeners also tend to be podcast listeners (pretty much by definition) I am sharing my finds with the community. Besides, Ken made me do it.</p>\r\n<p>Links:</p>\r\n<ul>\r\n<li><a href=\"https://www.alphabeatical.com/\" class=\"uri\">https://www.alphabeatical.com/</a></li>\r\n<li><a href=\"https://altonbrown.com/tag/podcast/\" class=\"uri\">https://altonbrown.com/tag/podcast/</a></li>\r\n<li><a href=\"https://www.astronomycast.com/\" class=\"uri\">https://www.astronomycast.com/</a></li>\r\n<li><a href=\"https://www.benfranklinsworld.com/\" class=\"uri\">https://www.benfranklinsworld.com/</a></li>\r\n<li><a href=\"https://www.bigfinish.com/podcasts\" class=\"uri\">https://www.bigfinish.com/podcasts</a></li>\r\n<li><a href=\"https://theensembleproject.com/cadence/\" class=\"uri\">https://theensembleproject.com/cadence/</a></li>\r\n<li><a href=\"https://thecommandline.net/\" class=\"uri\">https://thecommandline.net/</a></li>\r\n<li><a href=\"https://www.dancarlin.com/common-sense-home-landing-page/\" class=\"uri\">https://www.dancarlin.com/common-sense-home-landing-page/</a></li>\r\n<li><a href=\"https://www.sneakydragon.com/category/podcast/compleatly-beatles/\" class=\"uri\">https://www.sneakydragon.com/category/podcast/compleatly-beatles/</a></li>\r\n<li><a href=\"https://www.dancarlin.com/hardcore-history-60-the-celtic-holocaust/\" class=\"uri\">https://www.dancarlin.com/hardcore-history-60-the-celtic-holocaust/</a></li>\r\n<li><a href=\"https://www.fab4free4all.com/\" class=\"uri\">https://www.fab4free4all.com/</a></li>\r\n<li><a href=\"https://soundcloud.com/fabcast-870039074\" class=\"uri\">https://soundcloud.com/fabcast-870039074</a></li>\r\n<li><a href=\"https://fivethirtyeight.com/tag/politics-podcast/\" class=\"uri\">https://fivethirtyeight.com/tag/politics-podcast/</a></li>\r\n<li><a href=\"https://www.palain.com\" class=\"uri\">https://www.palain.com</a></li>\r\n</ul>\r\n',198,75,0,'CC-BY-SA','Podcasts',0,0,1),
(2490,'2018-02-16','What\'s In My Podcatcher 2',959,'A current report, with descriptions, of the podcasts I enjoy','<p>I listen to many podcasts as my primary form of audio entertainment, and because Hacker Public Radio listeners also tend to be podcast listeners (pretty much by definition) I am sharing my finds with the community. Besides, Ken made me do it.</p>\r\n<p>Links:</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org\" class=\"uri\">https://hackerpublicradio.org</a></li>\r\n<li><a href=\"https://soundcloud.com/healthcaretriage\" class=\"uri\">https://soundcloud.com/healthcaretriage</a></li>\r\n<li><a href=\"https://thehistoryofrome.typepad.com/\" class=\"uri\">https://thehistoryofrome.typepad.com/</a></li>\r\n<li><a href=\"https://www.ihearofsherlock.com/\" class=\"uri\">https://www.ihearofsherlock.com/</a></li>\r\n<li><a href=\"https://www.bbc.co.uk/programmes/b00snr0w/episodes/downloads\" class=\"uri\">https://www.bbc.co.uk/programmes/b00snr0w/episodes/downloads</a></li>\r\n<li><a href=\"https://inquiring.show/\" class=\"uri\">https://inquiring.show/</a></li>\r\n<li><a href=\"https://imagination.ucsd.edu/_wp/feed/podcast/\" class=\"uri\">https://imagination.ucsd.edu/_wp/feed/podcast/</a></li>\r\n<li><a href=\"https://www.katebushnews.com/index.php/category/www-katebushnews-com/kate-bush-fan-podcast/\" class=\"uri\">https://www.katebushnews.com/index.php/category/www-katebushnews-com/kate-bush-fan-podcast/</a></li>\r\n<li><a href=\"https://podnutz.com/category/linux-for-the-rest-of-us/\" class=\"uri\">https://podnutz.com/category/linux-for-the-rest-of-us/</a></li>\r\n<li><a href=\"https://www.linuxvoice.com/category/podcasts/\" class=\"uri\">https://www.linuxvoice.com/category/podcasts/</a></li>\r\n<li><a href=\"https://mugglecast.com/\" class=\"uri\">https://mugglecast.com/</a></li>\r\n<li><a href=\"https://www.nature.com/nature/podcast/index.html\" class=\"uri\">https://www.nature.com/nature/podcast/index.html</a></li>\r\n<li><a href=\"https://www.palain.com\" class=\"uri\">https://www.palain.com</a></li>\r\n</ul>\r\n',198,75,0,'CC-BY-SA','Podcasts',0,0,1),
(2467,'2018-01-16','I randomly talk about my laptops',574,'Random talk about my laptops and the linux distros that are on them','<p>Just decided to start talking about my laptops after I installed Ubuntu Mate 16.04 to my x60.</p>',297,0,0,'CC-BY-SA','laptop, linux, fun, computers',0,0,1),
(2472,'2018-01-23','Forum Failure',1000,'Lostnbronx talks about his recent experiment in running a forum.','<p>In 2017 I created a forum over at Proboards dedicated to my audio work and writing. It didn\'t attract a user base, and I deleted it when 2018 rolled around.</p>\r\n<p>These are just some thoughts about why I wanted it to begin with, and why I think it failed.</p>\r\n<p>I still believe Proboards is a good way to jump into forums and using forum software, and still recommend it for that reason:</p>\r\n<p><a href=\"https://proboards.com/\" class=\"uri\">https://proboards.com/</a></p>\r\n<p>Here are some of my projects mentioned briefly in this episode:</p>\r\n<ul>\r\n<li><a href=\"https://www.cavalcadeaudio.com/\" class=\"uri\">https://www.cavalcadeaudio.com/</a></li>\r\n<li><a href=\"https://downloads.cavalcadeaudio.com/lnbsaudiodiary/?p=home\" class=\"uri\">https://downloads.cavalcadeaudio.com/lnbsaudiodiary/?p=home</a></li>\r\n</ul>\r\n',107,0,0,'CC-BY-SA','forum,lostnbronx,platform,community',0,0,1),
(2473,'2018-01-24','Frotz - A Portable Z-Machine Interpreter',608,'How to use Frotz to play those old Infocom text adventure games from the 80s.','<p>Frotz is an interpreter for Infocom games (like Zork) and other Z-machine games. You can install it via your respective package manager or download the source code from the URLs below.</p>\r\n<ul>\r\n<li>Website: <a href=\"https://frotz.sourceforge.net\" class=\"uri\">https://frotz.sourceforge.net</a></li>\r\n<li>Github: <a href=\"https://github.com/DavidGriffith/frotz/\" class=\"uri\">https://github.com/DavidGriffith/frotz/</a></li>\r\n</ul>\r\n',152,0,0,'CC-BY-SA','Frotz,Z-code,Z-machine,Interactive Fiction',0,0,1),
(2474,'2018-01-25','Open Source Gaming #3 The Atari Jaguar',832,'Episode 3 is about the Atari Jaguar which has been open source since 1999','<a href=\"https://www.atariage.com/Jaguar/archives/HasbroRights.html\">https://www.atariage.com/Jaguar/archives/HasbroRights.html</a>\r\n\r\n<pre>\r\nHasbro Releases Jaguar Publishing Rights\r\nFOR IMMEDIATE RELEASE:\r\nCONTACTS:\r\nDana Henry\r\nHasbro Interactive\r\n978-921-3759\r\ndhenry@hasbro.com\r\n\r\nBeverly, MA (May 14, 1999) - Leading entertainment software publisher, \r\nHasbro Interactive announced today it has released all rights that it \r\nmay have to the vintage Atari hardware platform, the Jaguar.\r\n\r\nHasbro Interactive acquired rights to many Atari properties, including \r\nthe legendary Centipede, Missile Command, and Pong games, in a March \r\n1998 acquisition from JTS Corporation.\r\n\r\nThis announcement will allow software developers to create and publish \r\nsoftware for the Jaguar system without having to obtain a licensing \r\nagreement with Hasbro Interactive for such platform development. \r\nHasbro Interactive cautioned, however, that the developers should not \r\nuse the Atari trademark or logo in connection with their games or \r\npresent the games as authorized or approved by Hasbro Interactive.\r\n\r\n\"Hasbro Interactive is strictly focused on developing and publishing \r\nentertainment software for the PC and the next generation game \r\nconsoles,\" said Richard Cleveland, Head of Marketing for Hasbro \r\nInteractive\'s Atari Business Unit. \"We realize there is a passionate \r\naudience of diehard Atari fans who want to keep the Jaguar system alive, \r\nand we don\'t want to prevent them from doing that. We will not interfere \r\nwith the efforts of software developers to create software for the \r\nJaguar system.\"\r\n\r\nHasbro Interactive, Inc. is a leading all-family interactive games \r\npublisher, formed in 1995 to bring to life on the computer the deep \r\nlibrary of toy and board games of parent company, Hasbro, Inc. (ASE:HAS). \r\nHasbro Interactive has expanded its charter to include original and \r\nlicensed games for the PC, the Playstation(R) and Nintendo(R) 64 game \r\nconsoles and for multi-player gaming over the internet. Headquartered \r\nin Beverly, Massachusetts, Hasbro Interactive has offices in the U.K., \r\nFrance, Germany, Japan and Canada. For more information, visit the \r\nHasbro Interactive Web site at https://www.hasbro-interactive.com.\r\n</pre>',354,0,1,'CC-BY-SA','Atari Corporation, Atari Jaguar',0,0,1),
(2475,'2018-01-26','Information Underground -- Sex, Drugs, and Rock-n-Roll',2601,'The IU guys examine the first Sexual Revolution in America, back during Prohibition.','<p>Deepgeek, Klaatu, and Lostnbronx look back at the flappers and speakeasies of the 1920\'s and 30\'s, and attempt to draw a line from the newly independent women of that era, up through the Playboy Bunnies of the 1950\'s, all the way to today.</p>\r\n<p>Are things better or worse? Is what we &quot;know&quot; about history really important? And do the Info-Underground boys have any clue what they\'re even talking about?</p>',107,99,1,'CC-0','sex,alcohol,women,prohibition,freedom,history,pornography,oppression,playboy,hugh hefner',0,0,1),
(2483,'2018-02-07','Useful Bash functions - part 4',2386,'A Bash function for parsing lists of numbers and ranges','<h1 id=\"useful-bash-functions---part-4\">Useful Bash functions - part 4</h1>\r\n<h2 id=\"overview\">Overview</h2>\r\n<p>This is the fourth show about the Bash functions I use, and it may be the last unless I come up with something else that I think might be of general interest.</p>\r\n<p>There is only one function to look at this time, but it\'s fairly complex so needs an entire episode devoted to it.</p>\r\n<p>As before it would be interesting to receive feedback on this function and would be great if other Bash users contributed ideas of their own.</p>\r\n<h2 id=\"full-notes\">Full Notes</h2>\r\n<p>Since the notes explaining this subject are long, they have been placed <a href=\"https://hackerpublicradio.org/eps/hpr2483/full_shownotes.html\">here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>The <a href=\"https://www.gnu.org/software/bash/manual/bash.html\">GNU Bash Reference Manual</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#ANSI_002dC-Quoting\">ANSI-C Quoting</a> section</li>\r\n</ul></li>\r\n<li>Previous HPR episodes in this group <em>Useful Bash functions</em>:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1757\">Part 1</a>: \'<code>pad</code>\' and \'<code>yes_no</code>\' functions</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2096\">Part 2</a>: \'<code>yes_no</code>\' revisited</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2448\">Part 3</a>: \'<code>read_value</code>\', \'<code>check_value</code>\' and \'<code>read_and_check</code>\'</li>\r\n</ul></li>\r\n<li>Download the <a href=\"https://hackerpublicradio.org/eps/hpr2483/range_parse.sh\"><em>range_parse</em></a> function and the <a href=\"https://hackerpublicradio.org/eps/hpr2483/range_demo.sh\"><em>range_demo.sh</em></a> test script.</li>\r\n</ul>',225,42,1,'CC-BY-SA','coding,Bash,script,function',0,0,1),
(2500,'2018-03-02','What\'s In My Podcatcher 3',1272,'A current report, with descriptions, of the podcasts I enjoy','<p>I listen to many podcasts as my primary form of audio entertainment, and because Hacker Public Radio listeners also tend to be podcast listeners (pretty much by definition) I am sharing my finds with the community. Besides, Ken made me do it.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://soundcloud.com/guitar-player-magazine\" class=\"uri\">https://soundcloud.com/guitar-player-magazine</a></li>\r\n<li><a href=\"https://www.planetary.org/multimedia/planetary-radio/\" class=\"uri\">https://www.planetary.org/multimedia/planetary-radio/</a></li>\r\n<li><a href=\"https://revisionisthistory.com/\" class=\"uri\">https://revisionisthistory.com/</a></li>\r\n<li><a href=\"https://www.revolutionspodcast.com/\" class=\"uri\">https://www.revolutionspodcast.com/</a></li>\r\n<li><a href=\"https://www.sciencefriday.com/podcast/\" class=\"uri\">https://www.sciencefriday.com/podcast/</a></li>\r\n<li><a href=\"https://www.scientificamerican.com/podcast/science-talk/\" class=\"uri\">https://www.scientificamerican.com/podcast/science-talk/</a></li>\r\n<li><a href=\"https://www.scientificamerican.com/podcast/60-second-science/\" class=\"uri\">https://www.scientificamerican.com/podcast/60-second-science/</a></li>\r\n<li><a href=\"https://twit.tv/shows/security-now\" class=\"uri\">https://twit.tv/shows/security-now</a></li>\r\n<li><a href=\"https://www.sherlockholmespodcast.com/\" class=\"uri\">https://www.sherlockholmespodcast.com/</a></li>\r\n<li><a href=\"https://somethingaboutthebeatles.com/\" class=\"uri\">https://somethingaboutthebeatles.com/</a></li>\r\n<li><a href=\"https://nakedsecurity.sophos.com/category/audio-and-video/podcast/\" class=\"uri\">https://nakedsecurity.sophos.com/category/audio-and-video/podcast/</a></li>\r\n<li><a href=\"https://www.startalkradio.net/\" class=\"uri\">https://www.startalkradio.net/</a></li>\r\n<li><a href=\"https://swingingthroughthesixties.com/\" class=\"uri\">https://swingingthroughthesixties.com/</a></li>\r\n<li><a href=\"https://beatlesexaminer.podbean.com/\" class=\"uri\">https://beatlesexaminer.podbean.com/</a></li>\r\n<li><a href=\"https://twit.tv/shows/this-week-in-google\" class=\"uri\">https://twit.tv/shows/this-week-in-google</a></li>\r\n<li><a href=\"https://twit.tv/shows/this-week-in-tech\" class=\"uri\">https://twit.tv/shows/this-week-in-tech</a></li>\r\n<li><a href=\"https://twit.tv/shows/triangulation\" class=\"uri\">https://twit.tv/shows/triangulation</a></li>\r\n<li><a href=\"https://www.undiscoveredpodcast.org/\" class=\"uri\">https://www.undiscoveredpodcast.org/</a></li>\r\n<li><a href=\"https://www.welcometonightvale.com/\" class=\"uri\">https://www.welcometonightvale.com/</a></li>\r\n<li><a href=\"https://smlr.us/\" class=\"uri\">https://smlr.us/</a></li>\r\n<li><a href=\"https://www.palain.com\" class=\"uri\">https://www.palain.com</a></li>\r\n</ul>\r\n',198,75,1,'CC-BY-SA','Podcasts',0,0,1),
(2510,'2018-03-16','26 - Diffie-Hellman-Merkle Key Exchange',1231,'A basic explanation of how Diffie-Hellman-Merkle Key Exchange works','<p>Diffie-Hellman Key Exchange is based on work initially done by Ralph Merkle, and remains one of the key developments in secure communication over the Internet. In this episode I try to explain just how this works, with an example of a calculated key exchange.</p>\r\n<p>For more go to <a href=\"https://www.zwilnik.com/?page_id=955\" class=\"uri\">https://www.zwilnik.com/?page_id=955</a></p>\r\n<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://ee.stanford.edu/~hellman/publications/24.pdf\" class=\"uri\">https://ee.stanford.edu/~hellman/publications/24.pdf</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Modular_arithmetic\" class=\"uri\">https://en.wikipedia.org/wiki/Modular_arithmetic</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Discrete_logarithm\" class=\"uri\">https://en.wikipedia.org/wiki/Discrete_logarithm</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Man-in-the-middle_attack\" class=\"uri\">https://en.wikipedia.org/wiki/Man-in-the-middle_attack</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=955\" class=\"uri\">https://www.zwilnik.com/?page_id=955</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','Diffie-Hellman, Encryption',0,0,1),
(2476,'2018-01-29','Gnu Awk - Part 9',1956,'In part 9 of the series, we discuss the printf function','<h1 id=\"awk-series-part-9---printf\">Awk Series Part 9 - printf</h1>\n<p>The <code>printf</code> function allows for greater control over the output, in comparison to <code>print</code>.</p>\n<p>To follow along, you can either use these show notes or refer to <a href=\"https://www.gnu.org/software/gawk/manual/gawk.html\">the gawk manual</a>.</p>\n<p>There are 3 main areas to cover:</p>\n<ul>\n<li>Basic <code>printf</code> syntax</li>\n<li>Format Control letters</li>\n<li>Format modifiers</li>\n</ul>\n<h2 id=\"syntax\">Syntax</h2>\n<pre><code>printf format, item1, item2, …</code></pre>\n<p>The big difference in the syntax of printf statements is the <em>format</em> argument. It allows you to use complex formatting and layouts for outputs. Unlike <code>print</code>, <code>printf</code> does not automatically start a new line after the function. This can be useful when you want to print all of the items in a column on a single line.</p>\n<p>For example, remember the example file, file1.csv:</p>\n<pre><code>name,color,amount\napple,red,4\nbanana,yellow,6\nstrawberry,red,3\ngrape,purple,10\napple,green,8\nplum,purple,2\nkiwi,brown,4\npotato,brown,9\npineapple,yellow,5</code></pre>\n<p>Look at the difference between the following outputs:</p>\n<pre><code>awk -F, &#39;NR!=1{print &quot;Color&quot;, $2, &quot;has&quot;, $3}&#39; file1.csv</code></pre>\n<p>and</p>\n<pre><code>awk -F, &#39;NR!=1{printf &quot;Color %s has %s. &quot;, $2, $3}&#39; file1.csv</code></pre>\n<h2 id=\"control-letters\">Control Letters</h2>\n<p>Control letters control or cast the output to specific types. Use it as a way to convert ints to floats, ints to chars, etc.</p>\n<p><code>%c</code> = to char. <code>printf &quot;%c&quot;, 65</code> prints a<br />\n<code>%i</code>, <code>%d</code> = to int. <code>printf &quot;%i&quot;, 3.4</code> prints 3<br />\n<code>%f</code> = to float. <code>printf &quot;%c&quot;, 65</code> prints 65.000000<br />\n<code>%e</code>, <code>%E</code> = to scientific notation. <code>printf &quot;%e&quot;, 65</code> prints 6.500000e+01. If you use <code>%E</code> will use a capital E instead of e.<br />\n<code>%g</code> = to either scientific notation or int. <code>printf &quot;%.2g&quot;, 65</code> prints 65, while <code>printf &quot;%.1g&quot;, 65</code> prints 6e+01<br />\n<code>%s</code> = to string. <code>printf &quot;%s&quot;, 65</code> prints 65<br />\n<code>%u</code> = to unsigned int. <code>printf &quot;%u&quot;, -6</code> prints 18446744073709551610</p>\n<p>There are others. See documentation.</p>\n<h2 id=\"formatting\">Formatting</h2>\n<p><code>N$</code> = positional specifier. <code>printf &quot;%2$s %1$s&quot;, &quot;second&quot;, &quot;first&quot;</code><br />\n<code>n</code> = spaces to the left of the string.<br />\n<code>-n</code> = spaces to the right of string.<br />\n<code>space</code> = prefix positive numbers with a space, negative numbers with a -<br />\n<code>+</code> = prefix all numbers with a sign (either + or -)<br />\n<code>0n</code> = leading 0\'s before input. <code>printf &quot;%03i&quot;, 65</code> prints 065.<br />\n<code>\'</code> = comma place holder for thousands. <code>printf &quot;%\'i&quot;, 6500</code> prints 6,500</p>\n<p>Below is an (crude) illustration of how I like to think when formatting output:</p>\n<pre><code>          7          2\n├──────┼───────┼────┼──┤\n Color: RedXXXX Sum: X6</code></pre>\n<pre><code>       18            3\n├──────────────────╂───┤\n Total Sum:XXXXXXXX X34</code></pre>\n<p>See the following awk file</p>\n<pre><code>BEGIN {\n    FS=&quot;,&quot;;\n}\nNR != 1 {\n    a[$2]+=$3;\n    c+=$3;\n    d+=1;\n}\nEND {\n    for (b in a) {\n        printf &quot;Color: %-7s Sum: %2i\\n&quot;, b, a[b];\n    }\n    print &quot;----------------------&quot;\n    printf &quot;%-18s %3i\\n&quot;, &quot;Total Sum:&quot;, c;\n    printf &quot;%-18s %3i\\n&quot;, &quot;Total Count:&quot;, d;\n    printf &quot;%-18s %3.1f\\n&quot;, &quot;Mean:&quot;, c / d;\n}</code></pre>\n<p>This gives the following output:</p>\n<pre><code>Color: brown   Sum: 13\nColor: purple  Sum: 12\nColor: red     Sum:  7\nColor: yellow  Sum: 11\nColor: green   Sum:  8\n----------------------\nTotal Sum:          51\nTotal Count:         9\nMean:              5.7</code></pre>\n<h1 id=\"resources\">Resources</h1>\n<ol type=\"1\">\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Printf\" class=\"uri\">https://www.gnu.org/software/gawk/manual/gawk.html#Printf</a></li>\n<li><a href=\"https://www.grymoire.com/Unix/Awk.html\" class=\"uri\">https://www.grymoire.com/Unix/Awk.html</a></li>\n<li><a href=\"https://datascienceatthecommandline.com/\" class=\"uri\">https://datascienceatthecommandline.com/</a></li>\n</ol>\n',300,94,1,'CC-BY-SA','awk,bash,Linux,command line',0,0,1),
(2477,'2018-01-30','Reading Audio Books While Distracted',610,'My attempt to solve the problem of listening to audio books when you can\'t fully concentrate. ','<p>Just a quick and dirty episode on my attempt to solve the problem of listening to audio books at work or anytime you can\'t fully concentrate on the important thing, the audio book, of course.</p>\r\n<h3 id=\"problem\">Problem</h3>\r\n<p>I have more time to listen to books than to read them. I have no issues listening to audio books on my commute or when taking walks. The problem occurs at work. I have about 4 hours a day I could be listening to audio books. Over the years I\'ve tried countless times, all with the same result. I get distracted by work and find I\'ve missed key parts of the story and end up listening to music or podcasts I don\'t mind missing instead.</p>\r\n<p>There\'s nothing wrong with music or podcasts I don\'t mind missing but that doesn\'t help with my growing list of books I want to \'read\'.</p>\r\n<p>I decided to treat this like a regular problem and break it down to see if I can find a solution to this problem.</p>\r\n<p>Here are the variable I have to play with. These might be different for you.</p>\r\n<ul>\r\n<li>Book in one file or broken into chapters</li>\r\n<li>Listening speed</li>\r\n</ul>\r\n<h3 id=\"design-goals\">Design goals</h3>\r\n<p>Be able to listen to an audio book and have reasonable comprehension. Super Simple. I can\'t be seen as messing around with my player more than whatever it is that\'s keeping me from my player :)</p>\r\n<p>Normally I listen to books in one large file because at one point in time it was easier for me to keep track of them in my player and bookmarking was easier for my little brain to handle. But I got to thinking this might solve the problem of wasted time when needing to repeat sections of the book. If the book were broken into pieces, I wouldn\'t need to repeat as often. I tried listening to 3 chapters at a time and had two issues. The first is that 3 chapters is still quite a bit of time and I was repeating sections I didn\'t need to repeat. For example, I might have been able to follow along with chapter 1 but not chapters 2 and 3. This meant repeating chapter 1 or messing around to manually skip chapter 1 when I repeat. Not good.</p>\r\n<p>The second issue I had when listening to 3 chapter chunks was spoilers. If I got distracted during chapter 1 but not chapter 3, chapter 3 would contain spoilers for chapter 1 and chapter 1 would be spoiled on the re-listen :)</p>\r\n<h3 id=\"solution\">Solution</h3>\r\n<p>As it turns out listening in 1 chapter chunks solved both of these issues. So now I play one chapter on a loop until I feel I comprehend it well enough and then move to the next. This reduces the time when I need to re-listen because I was distracted and is simple because I only need to mess with the player when I\'m ready to move to the next chapter.</p>\r\n<p>It also reduces the spoiler issue. While there are still spoilers, they are limited to spoiling the same chapter. A good enough compromise for me.</p>\r\n<p>As far as playback speed goes, I like to speed audio up when I can concentrate on the audio but prefer to listen at normal speed when I can\'t.</p>\r\n<h3 id=\"other-considerations\">Other considerations</h3>\r\n<p>Some content might lend itself more to being broken into chunks by time rather than chapters. After all, not all chapters are the same length and podcasts don\'t usually have chapters. Assuming I decide to stick with this approach, I\'ll probably try running podcasts which require one to pay attention through a script that splits them up into chunks based on duration and treat those chunks as chapters in books.</p>\r\n<p>If you try this and find it useful and/or have modifications, by all means, share.</p>\r\n<p>Also, if this is a well known technique, feel free to make fun of me. It\'ll be fun listening to the comments being read on the community news show.</p>\r\n',151,0,0,'CC-0','Audio book, reading',0,0,1),
(2478,'2018-01-31','City Of Masks - HPR_AudioBookClub',5187,'The HPR Audiobook Club reviews City Of Masks with author Mike Reeves-McMillan','<h3>SUMMARY</h3>\r\n<p>In this episode, the HPR_AudioBookClub discusses City Of Masks by Mike Reeves-Mc-Millian</p>\r\n<p>It\'s available from Scribl <a href=\"https://scribl.com/books/PC439/city-of-masks/\">https://scribl.com/books/PC439/city-of-masks/</a></p>\r\n<p>It is also available as a paperback or an ebook. https://www.amazon.com/City-Of-Masks-Mike-Reeves-Mcmillan/dp/0473122138</p>\r\n<h3>Non-Spoiler Thoughts</h3>\r\n<p> Pokey loved this AudioBook! It\'s one of his all time favorites. It ranks up there with Lester Del Ray\'s Badge of Infamy</p>\r\n<h3>BEVERAGE REVIEWS</h3>\r\n<p>As usual, the HPR_AudioBookClub took some time to review the beverages that each of us were drinking during the episode</p>\r\n<ul>\r\n<li>Thaj: No liquids.....can\'t pee......send help!</li>\r\n<li>x1101: <a href=\"https://www.beeradvocate.com/beer/profile/147/38470/\">Stone Sublimely Self-Righteous Ale</a></li>\r\n<li>pokey: Kentucky Bourbon Barrel Stout <a href=\"https://www.kentuckyale.com/kentucky-bourbon-barrel-stout\">https://www.kentuckyale.com/kentucky-bourbon-barrel-stout</a></li>\r\n<li>Mike Reeves-Mcmillan: Water. Tasty Shire water.</li>\r\n<li>Semioticrobotic: Tea</li>\r\n</ul>\r\n<h3>Things We Talked About</h3>\r\n<p>https://gplus.to/mikerm  will link to everything else. It\'s also where I hang out the most. I  post samples of whatever I\'m working on at the moment on G+ most  Saturdays, as part of the #saturdayscenes group.\r\n<br/>\r\nhttps://csidemedia.com/gryphonclerks is my blog. There\'s a signup link for the mailing list in the sidebar, or the direct link is: \r\n<br/>\r\nhttps://eepurl.com/vB-t5\r\n<br/>\r\nThere\'s  some member-only content for mailing list members, and I\'m planning to  release another piece of content for them soon (a 12,000-word novelette  in my Gryphon Clerks setting).</p>\r\n<p>Mike\'s G+ Page: https://gplus.to/mikerm </p>\r\n<h3>OUR NEXT AUDIOBOOK</h3>\r\n<p><strong><a href=\'https://scribl.com/books/PDB66/matcher-rules\'>Matcher Rules</a></strong> by Mary Holland</p>\r\n<h3>NEXT RECORDING</h3>\r\n<p>Our next book club recording will be 2015/02/10T23:00:00+00:00. <a href=\"https://en.wikipedia.org/wiki/ISO_8601#Times\">https://en.wikipedia.org/wiki/ISO_8601#Times</a>. If you\'d like a Google calendar invite, or if you\'d like to be on the HPR_AudioBookClub mailing list, please get in contact with us on  the HPR mailing list \'hpr at hackerpublicradio dot org\'</p>\r\n<h3>FURTHER RECOMMENDATIONS</h3>\r\n<h3>Other mostly unrelated points</h3>\r\n<p>Port knocking: https://www.portknocking.org/ </p>\r\n<p>Cask of Amontillado https://en.wikipedia.org/wiki/The_Cask_of_Amontillado </p>\r\n<p>NetSplits https://en.wikipedia.org/wiki/Netsplit </p>\r\n<p>Valerian Root https://www.subzin.com/quotes/M145312bbc/Fight+Club/Chew+some+Valerian+root+and+get+more+exercise </p>\r\n<h3>FEEDBACK</h3>\r\n<p>Thank you very much for listening to this episode of the HPR_AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you\'ll consider joining us next time. Please  leave a few words in the episode\'s comment section.\r\n <br/>As always; remember to visit the HPR contribution page HPR could really use your help right now.</p>\r\n<p><a href=\"https://hackerpublicradio.org/contribute.php\">https://hackerpublicradio.org/contribute.php</a></p>\r\n<p>Sincerely,\r\n <br/>The HPR_AudioBookClub</p>\r\n<p>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</p>\r\n<h3>OUR AUDIO</h3>\r\n<p>This episode was processed using Audacity <a href=\"https://audacity.sourceforge.net/\">https://audacity.sourceforge.net/</a>. We\'ve been making small adjustments to our audio mix each month in order to get the best possible sound. It\'s been especially  challenging getting all of our voices relatively level, because  everyone has  their   own unique setup. Mumble is great for bringing us  all together, and for recording, but it\'s not good at making  everyone\'s voice the  same  volume.  We\'re pretty happy with the way  this month\'s show turned  out, so we\'d like to share our editing  process and settings with you  and our  future  selves (who, of course,  will have forgotten all this  by  then).</p>\r\n<p>Mumble uses a sample rate of 48kHz, but HPR requires a sample rate of   44.1kHz   so the first step in our audio process is to resample the  file  at   44.1kHz. Resampling can take a long time if you don\'t have  a  powerful   computer, and sometimes even if you do. If you record late  at  night,   like we do, you may want to start the task before you go  to  bed, and   save it first thing in the morning, so that the file is  ready  to go the   next time you are.</p>\r\n<p>Next we use the \"Compressor\" effect with the following settings:</P>\r\n <ul>\r\n  <li>Threshold: -30db</li>\r\n  <li>Noise Floor: -50db</li>\r\n  <li>Ratio: 3:1</li>\r\n  <li>Attack Time: 0.2sec</li>\r\n  <li>Decay Time: 1.0 sec</li>\r\n  <li>\"Make-up Gain for 0db after compressing\" and \"compress based on peaks\" were both left un-checked.</li>\r\n </ul>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from     the file and save them in a separate file for possible use as  outtakes  after the closing music.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the .aup file to .FLAC so that we can paste a copy of the shownotes into the audio file\'s metadata. We use the \"Truncate Silence\" effect with its default settings to minimize the silence between people speaking. When used with its default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes a conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying \"uuuuummmm.\" Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too aggressively your audio may sound sped up and choppy.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can \"Mix and Render\" all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR FTP server.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being \"crashy\" but if you remember save after every major transform, you will wonder how it ever got that reputation.</p>\r\n',157,53,1,'CC-BY-SA','Audiobooks, City of Masks, Mike Reeves-McMillan',0,0,1),
(2482,'2018-02-06','lca2018: Katie McLaughlin',1368,'An interview with Katie McLaughlin at linux.conf.au 2018','<p>Clinton interviews Katie McLaughlin at linux.conf.au 2018 on her role with the conference as community liaison and as the lead organiser of PyCon Australia.</p>\r\n<p><small><small><em>Editor\'s Note: Corrected audio now available</em></small></small></p>\r\n',315,0,1,'CC-BY-SA','lca2018',0,0,1),
(2485,'2018-02-09','The Alien Brothers Podcast - S01E05 - I Saw the Invisible Man',4629,'Casper and Rutiger discuss the now-old-by-internet-standards news of New York Times piece about real','<p>Recorded December 23 2017</p>\r\n<p>All links are external.</p>\r\n<p><a href=\"https://www.goldminemag.com/articles/engineer-andy-johns-discusses-the-making-of-the-rolling-stones-exile-on-main-street\"><u>Real mobile recording platform</u></a>(recording <em>Exile on Main Street)</em></p>\r\n<p><a href=\"https://www.youtube.com/watch?v=NqUrl2N4GE4\"><u>&ldquo;</u><u>Let Me Drown&rdquo; by Soundgarden</u></a></p>\r\n<p><a href=\"https://www.accuradio.com/\"><u>T-Mobile AccuRadio Online</u></a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Slint\"><u>Slint</u></a>(band)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Sonic_Youth\"><u>Sonic Youth</u></a>(band)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Thurston_Moore\"><u>Thurston Moore&rsquo;s other bands</u></a></p>\r\n<p>&ldquo;<a href=\"https://www.nytimes.com/2017/12/16/us/politics/pentagon-program-ufo-harry-reid.html\"><u>Glowing Aura&rsquo;s and Black Money&rdquo; (the New York Times)</u></a></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Robert_Bigelow\"><u>Robert Bigelow</u></a>(wikipedia)</p>\r\n<p><a href=\"https://consequenceofsound.net/2017/10/tom-delonges-new-ufo-academy-is-crowdfunding-a-spaceship/\"><u>Tom DeLonge&rsquo;s UFO Academy</u></a>(consequence of sound)</p>\r\n<p><a href=\"https://www.youtube.com/watch?v=-h8zs898lr4\"><u>Big Audio Dynamite &ldquo;Rush&rdquo;</u></a>(YouTube)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Mick_Jones_(The_Clash_guitarist)\"><u>Mick Jones</u></a>(wikipedia)</p>\r\n<p><a href=\"https://www.amazon.com/Bass-Guitar-Tuning-Keys/b?ie=UTF8&amp;node=11968171\"><u>Buy tuning machines!</u></a>(amazon)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Ministry_(band)\"><u>Ministry (band) </u></a>(wikipedia)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/The_Elf_on_the_Shelf\"><u>The truth behind the Elf on the Shelf</u></a>(wikipedia)</p>\r\n<p><a href=\"https://twitter.com/LeeCamp?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor\"><u>Redacted </u></a>(twitter)</p>\r\n<p><a href=\"https://www.nationalreview.com/article/314025/how-did-harry-reid-get-rich-betsy-woodruff\"><u>How Did Harry Reid Get Rich?</u></a>(national review)</p>\r\n<p><a href=\"https://www.youtube.com/watch?v=ky_mhbKIe3M\"><u>Mr Show - &ldquo;Praying Machines&rdquo;</u></a>(youtube)</p>\r\n<p><a href=\"https://www.youtube.com/watch?v=KZkxR7x6qiM\"><u>The Firm (film)</u></a>(youtube)</p>\r\n<p><a href=\"https://www.loomisbros.com/lint-collectors.html\"><u>Link collector</u></a>(Loomis Bros)</p>\r\n<p><a href=\"https://knowyourmeme.com/memes/miracles-fucking-magnets-how-do-they-work\"><u>Magnets and how they work</u></a>(know your meme)</p>\r\n<p><a href=\"https://www.youtube.com/watch?v=SJcshY5ywro\"><u>Mechanical Man</u></a>(Devo) (youtube)</p>\r\n<p><a href=\"https://www.hometips.com/repair-fix/dryer-open.html\"><u>How to take apart a dryer</u></a>(hometips.com)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Electrical_injury\"><u>Electrocution</u></a>(wikipedia)</p>\r\n<p><a href=\"https://www.characterweb.com/maytag.html\"><u>Maytag Repair Man</u></a>(Characterweb)</p>\r\n<p><a href=\"https://www.sweetwater.com/c929--Extra_Heavy_1_5mm_Guitar_Picks\"><u>Extra heavy guitar picks</u></a>(sweetwater sound)</p>\r\n<p><a href=\"https://www.zzounds.com/item--BEHMS8000?siid=196478&amp;-qDTBRD-ARIsAJ_10yKMqEyjWNkpIcfI37J1TzCewBIzORjqfoTduPwPE9NrnIbJXuI-vpMaAuXCEALw_wcB=\"><u>Headphone splitter</u></a>(zsounds)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Man_in_the_Moon\"><u>The man in the moon</u></a>(wikipedia)</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Buddhism\"><u>Buddhism</u></a></p>\r\n',359,0,1,'CC-BY-SA','parties,fun,x-files,aliens,harry reid,martial law, star chamber,greetings,belated',0,0,1),
(2486,'2018-02-12','Some stuff I bought at a recent amateur radio rally',968,'In this episode I talk about some stuff I bought at a recent amateur radio rally.','<p>Links to the stuff I bought at a recent amateur radio rally I attended.</p>\r\n<ul>\r\n<li><p>Kindle 4<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Amazon_Kindle#Kindle_4\" class=\"uri\">https://en.wikipedia.org/wiki/Amazon_Kindle#Kindle_4</a></p></li>\r\n<li><p>Powerex Maha WizardOne MH-C9000 Battery Charger<br />\r\n<a href=\"https://www.amazon.co.uk/WizardOne-MH-C9000-Analyser-Rechargeable-Batteries/dp/B00E8F7T1G/ref=sr_1_1?ie=UTF8&amp;qid=1503175924&amp;sr=8-1&amp;keywords=mh-c9000\" class=\"uri\">https://www.amazon.co.uk/WizardOne-MH-C9000-Analyser-Rechargeable-Batteries/dp/B00E8F7T1G/ref=sr_1_1?ie=UTF8&amp;qid=1503175924&amp;sr=8-1&amp;keywords=mh-c9000</a></p></li>\r\n<li><p>Frequency Counter, Watson FC-130 Example<br />\r\n<a href=\"https://www.amazon.co.uk/WATSON-FC-130-FREQUENCY-COUNTER/dp/B00877AZY4\" class=\"uri\">https://www.amazon.co.uk/WATSON-FC-130-FREQUENCY-COUNTER/dp/B00877AZY4</a></p></li>\r\n<li><p>Frequency Counter, Watson FC-130 (User Manual)<br />\r\n<a href=\"https://my.rs-online.com/webdocs/002d/0900766b8002d721.pdf\" class=\"uri\">https://my.rs-online.com/webdocs/002d/0900766b8002d721.pdf</a></p></li>\r\n<li><p>Roll Example unfortunately with no egg inside<br />\r\n<img src=\"https://i39.tinypic.com/sdfhv4.jpg\" alt=\"https://i39.tinypic.com/sdfhv4.jpg\" /></p></li>\r\n<li><p>Cake Example<br />\r\n<a href=\"https://www.bbc.co.uk/food/recipes/millionaires_shortbread_76712\" class=\"uri\">https://www.bbc.co.uk/food/recipes/millionaires_shortbread_76712</a></p></li>\r\n<li><p>Drink Example<br />\r\n<img src=\"https://eliquidleicester.co.uk/wp-content/uploads/2013/07/IRON-BREW2-300x300.jpg\" alt=\"https://eliquidleicester.co.uk/wp-content/uploads/2013/07/IRON-BREW2-300x300.jpg\" /></p></li>\r\n</ul>\r\n',201,43,1,'CC-BY-SA','Amateur Radio, Ham Radio',0,0,1),
(2484,'2018-02-08','The Big Idea',1164,'A breezy look at what a \"big idea\" means in storytelling.','<p>\r\nLostnbronx looks at the concept of the \"big idea\" in storytelling and various genres, arguing that such a creative tool may not actually be all that necessary to tell a compelling tale.\r\n</p>',107,105,0,'CC-BY-SA','writing,storytelling,lostnbronx, science fiction,fantasy,history,historical romance, story structure',0,0,1),
(2487,'2018-02-13','Simple LibreOffice Repo for Fedora',185,'Simple LibreOffice Repo for Fedora','<p>Simple LibreOffice Repo for Fedora</p>\r\n\r\n<p>My setup: You can look at the real setup. Hosted at home on a DLS connection so real usage is discouraged. https://home.toebesacademy.com/libreoffice/</p>\r\n\r\n<p>Actual Script <a href=\"https://home.toebesacademy.com/libreoffice/LOrepo\">https://home.toebesacademy.com/libreoffice/LOrepo</a></p>\r\n\r\n<p>Repo file to put in /etc/yum.repo.d <a href=\"https://home.toebesacademy.com/libreoffice/home.toebesacademy.com.repo\">https://home.toebesacademy.com/libreoffice/home.toebesacademy.com.repo</a></p>\r\n\r\n<p>Cron Entry.  Should be run as web user, not root.</p>\r\n<pre>\r\n# m h d m w\r\n# * * * * * command to be executed\r\n# - - - - -\r\n# | | | | |\r\n# | | | | +----- day of week (0 - 6) (Sunday=0)\r\n# | | | +------- month (1 - 12)\r\n# | | +--------- day of month (1 - 31)\r\n# | +----------- hour (0 - 23)\r\n# +------------- min (0 - 59)\r\n# m     h    dom mon dow command\r\n0       3    *   *   *    /var/www/html/libreoffice/LOrepo\r\n</pre>\r\n',273,0,0,'CC-BY-SA','LibreOffice,Fedora,repository',0,0,1),
(2488,'2018-02-14','Psychology of Love',792,'A look at some of the neuroscience and psychology behind love','<ul>\r\n<li><p>Love and the Brain:<br />\r\n<a href=\"https://neuro.hms.harvard.edu/harvard-mahoney-neuroscience-institute/brain-newsletter/and-brain-series/love-and-brain\" class=\"uri\">https://neuro.hms.harvard.edu/harvard-mahoney-neuroscience-institute/brain-newsletter/and-brain-series/love-and-brain</a></p></li>\r\n<li><p>The Neuroscience of Love:<br />\r\n<a href=\"https://sites.tufts.edu/emotiononthebrain/2014/12/08/the-neuroscience-of-love/\" class=\"uri\">https://sites.tufts.edu/emotiononthebrain/2014/12/08/the-neuroscience-of-love/</a></p></li>\r\n<li><p>On selfless love:<br />\r\n<a href=\"https://news.yale.edu/2014/02/11/meditation-helps-pinpoint-neurological-differences-between-two-types-love\" class=\"uri\">https://news.yale.edu/2014/02/11/meditation-helps-pinpoint-neurological-differences-between-two-types-love</a></p></li>\r\n<li><p>The Five Love Languages<br />\r\n<a href=\"https://en.wikipedia.org/wiki/The_Five_Love_Languages\" class=\"uri\">https://en.wikipedia.org/wiki/The_Five_Love_Languages</a></p></li>\r\n<li><p>\'Askers\' vs. \'Guessers\'<br />\r\n<a href=\"https://www.theatlantic.com/national/archive/2010/05/askers-vs-guessers/340891/\" class=\"uri\">https://www.theatlantic.com/national/archive/2010/05/askers-vs-guessers/340891/</a></p></li>\r\n</ul>\r\n',361,0,1,'CC-BY-SA','psychology, relationships, neuroscience, love',0,0,1),
(2489,'2018-02-15','CONTEXT IS EVERYTHING',1634,'Lostnbronx creates a tiny video, from a large audio file.','<h2 id=\"context-is-everything\">CONTEXT IS EVERYTHING</h2>\r\n<h4 id=\"hosted-by-lostnbronx\">hosted by Lostnbronx</h4>\r\n<p>Turning a large audio file into a tiny video file for a very specific use case.</p>\r\n<p>This solution probably won\'t work for you, because none of the ones I found on the Internet worked for me. Trial and error led me here, and it\'s probably the only guide you\'ll have as well.</p>\r\n<p>Start with as high a quality audio file as you can manage. .wav is good, but it\'s big. Let\'s convert it to .flac. If you already have a .flac file, skip this part.</p>\r\n<p>1.) Convert .wav to .flac.</p>\r\n<pre><code>sox INPUT.wav OUTPUT.flac</code></pre>\r\n<p>2.) Convert the .flac to a very small mono .opus. Bitrate can be even smaller. I went down to 14.</p>\r\n<pre><code>opusenc --bitrate 18 --downmix-mono INPUT.flac OUTPUT.opus</code></pre>\r\n<p>3.) Combine the .opus file with a single static image, and output to a .webm video. This should not be very much bigger in file size than the .opus and .jpg combined. The smaller the image file, the better. (I tried using a .gif, but it was actually bigger than the .jpg I ended up with.)</p>\r\n<pre><code>ffmpeg -i INPUT.opus -r 1 -loop 1 -i INPUT.jpg -c:v libvpx -tune stillimage -shortest -y -c:a copy OUTPUT.webm</code></pre>\r\n<p>The final file. It doesn\'t sound great, but it\'s listenable, which is all that was desired.</p>\r\n<p><a href=\"https://social.nasqueron.org/media/pEXqQotxC5P4GNJpf9U\" class=\"uri\">https://social.nasqueron.org/media/pEXqQotxC5P4GNJpf9U</a></p>\r\n<p>Here\'s a better quality version of the audiobook.</p>\r\n<p><a href=\"https://downloads.cavalcadeaudio.com/stardrifter-novels/01-motherload/?p=home\" class=\"uri\">https://downloads.cavalcadeaudio.com/stardrifter-novels/01-motherload/?p=home</a></p>\r\n<p>The process and final result can be improved upon by people smarter than I, without doubt, but this works for now.</p>\r\n<p>SPECIAL THANKS to the Urandom guys (X1101, Thaj, and Pokey), Monsterjavaguns (Jason van Gumster), and the ever-fabulous Klaatu, for their suggestions and encouragement. I would not have found a solution to this, nor even thought to do an episode of HPR, without them!</p>\r\n<p><small><small>Editor\'s Note 2018-02-15: The wrong audio was accidentally released with this show. It has been corrected and should be re-uploaded by your podcatcher.</small></small></p>\r\n',107,0,1,'CC-BY-SA','opus,opusenc,ffmpeg,avconv,webm,lostnbronx',1,0,1),
(2493,'2018-02-21','YouTube Subscriptions - update',885,'Some of the YouTube channels I have subscribed to in the last year','<h1 id=\"youtube-subscriptions---update\">YouTube Subscriptions - update</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>I reported on some of my YouTube subscriptions in show <a href=\"https://hackerpublicradio.org/eps.php?id=2202\" title=\"Makers on YouTube\">2202</a>, where I concentrated on the various <em>Maker</em> channels I subscribe to.</p>\r\n<p>Since then I have added a few more such channels, but this time I also want to talk about some of the others I subscribe to.</p>\r\n<h2 id=\"youtube-channels\">YouTube Channels</h2>\r\n<ol type=\"1\">\r\n<li><a href=\"https://www.youtube.com/channel/UCCkFJmUgzrZdkeHl_qPItsA\"><em>Anne of All Trades</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCtM5z2gkrGRuWd0JQMx76qA\"><em>bigclivedotcom</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA\"><em>Computerphile</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCcapFP3gxL1aJiC8RdwxqRA\"><em>David Waelder</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCUuMYw2l2UeWyTGYixYfRCA\"><em>EvanAndKatelyn</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCbiGcwDWZjz05njNPrJU7jA\"><em>ExplainingComputers</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UC6pdMJwtkbCNoQRwbaNt77A\"><em>HomeMadeModern</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCO39zTYpvWL5jx2q15Ma_Hw\"><em>izzy swan</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCaI4Tib6te88f_P9r8w5Tmw\"><em>Jackman Works</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCRVruzlQF5cqpw9jQgIgNdw\"><em>mugumogu</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCNyGbxoEo6CQvaRVEvItxkA\"><em>Pask Makes</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCIhkgdWrCmPTCRSNQaeTDOg\"><em>Phil Pinsky Productions</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UC8NjHgDV5nHEfQGj7JNfp9Q\"><em>RetroWeld</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCb8Rde3uRL1ohROUVg46h1A\"><em>Thomas Sanladerer</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UC3CvHbiVAaYiMY2DMd1fcEQ\"><em>tim sway</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCzM1HPpclXyriKNAvr5m5qA\"><em>Unemployed Redneck Hillbilly Creations</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCG756ycwVyBKwttHLtF_OVQ\"><em>William Lutes</em></a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCcXhhVwCT6_WqjkEniejRJQ\"><em>Wintergatan</em></a></li>\r\n</ol>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have another version of the above channel list in the <a href=\"https://hackerpublicradio.org/eps/hpr2493/full_shownotes.html\">long notes</a> with more details and with some of my observations.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>HPR show 2202: <a href=\"https://hackerpublicradio.org/eps.php?id=2202\"><em>Makers on YouTube</em></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2493/full_shownotes.html\">Long notes for this episode</a></li>\r\n</ul>',225,0,1,'CC-BY-SA','YouTube,channel',0,0,1),
(2491,'2018-02-19','Some news with Finux',1061,'Just a short little podcast on some recent(ish) security related news stories','<p>The 3 stories covered in this episode</p>\r\n<ul>\r\n<li><p>So firstly Clownflares... i mean cloudstrike!!! and scihub<br />\r\n<a href=\"https://torrentfreak.com/cloudflare-terminates-service-to-sci-hub-domain-names-180205/\" class=\"uri\">https://torrentfreak.com/cloudflare-terminates-service-to-sci-hub-domain-names-180205/</a></p></li>\r\n<li><p>Meltdown and Spectre 139 pieces of (seemingly nonfunctional) malware are now circulating in the wild<br />\r\n<a href=\"https://boingboing.net/2018/02/04/active-probing.html\" class=\"uri\">https://boingboing.net/2018/02/04/active-probing.html</a></p></li>\r\n<li><p>Equifax and no bloody justice<br />\r\n<a href=\"https://mobile.reuters.com/article/amp/idUSKBN1FP0IZ\" class=\"uri\">https://mobile.reuters.com/article/amp/idUSKBN1FP0IZ</a></p></li>\r\n</ul>\r\n',85,0,1,'CC-BY-SA','security, hacking, news',0,0,1),
(2492,'2018-02-20','An Evening Subway Ride',1945,'An evening subway ride on the Toronto subway from College Station to Sheppard/Yonge Station','<p>\r\nAn experiment in background noise.\r\n</p>\r\n<p>\r\nHaving seen so many people fall asleep on subway trains, I wonder if the sound only would also be somniferous.\r\n</p>\r\n<p>\r\nUsing my cellphone I recorded the ride (including boarding and alighting) on the Toronto subway (line 1) from College Station, north to Sheppard/Yonge Station.  There was always at least one person sleeping (or at least appearing to be asleep) during the ride.\r\n</p>\r\n<p>\r\nGoogle Maps - <a href=\"https://goo.gl/aq97jR\">goo.gl/aq97jR</a>\r\n</p>\r\n<p>\r\nSo far, listening to the recording has not put me to sleep. \r\n</p>\r\n',362,101,0,'CC-0','sound, Toronto, transit, subway, crowds, train',0,0,1),
(2495,'2018-02-23','10 Years of Xoke',723,'Tomorrow marks 10 years since his first episode, and Xoke talks a bit about HPR','<p>HPR 40, on the 24th Feb 2008, was when a (slightly) younger Xoke debuted</p>',79,0,0,'CC-BY-SA','Anniversary',0,0,1),
(2494,'2018-02-22','linux.conf.au 2018: Nicolas Steenhout',1205,'Clinton interviews Nicolas Steenhout, who ran an accessibility workshop','<p>\r\nClinton interviews Nicolas Steenhout about his accessibility workshop, covering the different areas that automated and manual testing can cover. We also talk about the conference in general, and on the different ways that conference get feedback about their speakers.\r\n</p>',315,78,0,'CC-BY-SA','lca2018',0,0,1),
(2496,'2018-02-26','Making a Raspberry Pi inventory',670,'How to collect identifying information about RPi devices','<h1 id=\"making-a-raspberry-pi-inventory\">Making a Raspberry Pi inventory</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>I have a number of Raspberry Pis -- possibly too many -- and I sometimes lose track of which is which, what model, size, name, address each one is. I wanted to be able to keep an inventory of them all, and to this end I wrote myself a little script that can be run on any Pi which will report useful information about it.</p>\r\n<p>Every Pi has a unique serial number. Actually it\'s randomly generated so there may be a few collisions but it\'s close to unique! It also contains a revision number which encodes various items of information about it such as release date, model, PCB revision and memory. My script decodes this revision number for you based on a published table.</p>\r\n<p>I run a Wikimedia instance on a Pi and have used this script to record details of my Pis there as well as what they are being used for and any planned projects. I now feel more organised!</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>The full-length notes (available <a href=\"https://hackerpublicradio.org/eps/hpr2496/full_shownotes.html\">here</a>) contain a listing of the script, a brief description of it, and some example output.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>GitLab repository: <a href=\"https://gitlab.com/davmo/what_pi\" class=\"uri\">https://gitlab.com/davmo/what_pi</a></li>\r\n<li>Resources to download:\r\n<ul>\r\n<li>The script <em><a href=\"https://hackerpublicradio.org/eps/hpr2496/what_pi\">what_pi</a></em></li>\r\n<li>Example output <em><a href=\"https://hackerpublicradio.org/eps/hpr2496/example_output.txt\">example_output.txt</a></em></li>\r\n</ul></li>\r\n</ul>',225,42,1,'CC-BY-SA','Raspberry Pi, RPi',0,0,1),
(2503,'2018-03-07','My journey into podcasting',868,'Dave takes us on his journey into 10 years of podcasting','<h1 id=\"how-i-got-into-podcasting\">How I Got Into Podcasting</h1>\r\n<h2 id=\"the-background\">The Background</h2>\r\n<p>Audio production has always been an interest of mine: my late grandfather was an audiophile, my dad ran an AV studio in Woking (the one where the Spice Girls were formed - my dad got mentioned in a couple of their autobiographies) and now runs his own AV consultancy business, and my cousin also runs an AV consultancy... so there’s a definite family history in there.</p>\r\n<p>I dabbled briefly with hospital radio (as a technician, rather than a presenter) in the late 80’s, and I was a technician and presenter on College Radio in the early 90’s where I hosted a show called “The Barry Manilow Fan Club” on Friday lunchtimes.</p>\r\n<p>Yes, I am a huge fan of <a href=\"https://en.wikipedia.org/wiki/Barry_Manilow\">Barry Manilow</a> - he’s given me a lot of inspiration as a musician - no, I didn’t play any Barry on the College Radio show.</p>\r\n<p>I’d also had a few people say that I had a good radio voice. Others say a good radio face, but I don’t like them anymore.</p>\r\n<h2 id=\"the-catalyst\">The Catalyst</h2>\r\n<p>In 2007, I discovered this podcasting lark through a couple of friends who had their own podcasts. One was The Random Three: a personal musical journey where Mark - the host - would play three seemingly-random pieces of music from his own collection (thus, not <a href=\"https://en.wikipedia.org/wiki/Podsafe\">podsafe</a>) and explain the reasons why he chose them. Most of the time, these seemingly-random tracks actually had a theme, but it didn’t necessarily become apparent until after the second track. It was a great show - now sadly defunct - and I really miss it. I even submitted my own music choices for Mark to present.</p>\r\n<p>The other was <a href=\"https://ddlpodcast.blogspot.co.uk/\">Dumbed Down Life</a>: three chaps nattering about “stuff” and playing some music along with it. Another great show, which - although it still exists - currently releases episodes every year or so.</p>\r\n<p>What drew me to these shows - apart from being friends, was the fact that these were regular guys, not professionals.</p>\r\n<p>That led me to think “I can do that”, so I set about proving - to myself, mostly - that I could.</p>\r\n<h2 id=\"the-start\">The Start</h2>\r\n<p>One Thursday in early March 2008, when the wife had gone to the gym for a couple of hours, I grabbed my Logitech headset, my Linux laptop, a handful of tracks from the Podsafe Music Network, and a piece of software called <a href=\"https://idjc.sourceforge.net\">IDJC</a>, and recorded the <a href=\"https://thebugcast.org/show/1\">first ever episode</a> of <a href=\"https://thebugcast.org/\">The Bugcast</a>. It was just over 22 minutes long, and it was dire. Utterly dire. Every so often, I go back to it and listen and cringe and marvel at how much better the show is now!</p>\r\n<p>The music back then wasn’t strictly <a href=\"https://en.wikipedia.org/wiki/Podsafe\">podsafe</a> either: the first track I played was Moloko’s Sing It Back… but I didn’t worry about it then, as I got the track from a source that gave implicit permission for use in podcasts.</p>\r\n<p>I did do a show - <a href=\"https://thebugcast.org/show/20\">episode 20</a> - which was a nostalgic trip back to my college years, where I played tracks by Chad Jackson, Japan, and Dream Warriors. This was a complete and intentional violation of copyright on my part, which led me to pull the show only a few weeks later. I did rerelease the show two years after that, but with the offending tracks removed. However, there is a story to the show, so I would recommend you go listen.</p>\r\n<p>Back then, it was just me and a small listener-base of friends, their family, their families’ servants; their families’ servants’ tennis partners, and some chap I bumped into in the mess the other day called Bernard. But as time went on and I got more experience, I was really enjoying what I was doing, and started to experiment.</p>\r\n<p>One thing I did discover by about episode 16 is that I wasn’t editing my shows in post, aside from topping and tailing silence. This made it so much easier for me as I was recording the shows as-live from the very beginning, but taking out the vocal gaps, gaffes and the like. So there was really only one place to go from there...</p>\r\n<h2 id=\"going-live\">Going live</h2>\r\n<p>So in August 2008, on <a href=\"https://thebugcast.org/show/24\">episode 24</a>, to an audience of about 10 people, I streamed the first LIVE episode of the podcast. Wow, that was such a buzz! It was a major turning point in the show as I committed myself to do a regular show at a set time each week... turning a fun hobby into something a little step beyond amateur. There were a couple of non-live shows that I had to put together using the wife’s Windows machine when my laptop went bang and had to be repaired, but I hated doing that because I didn’t like the piecemeal sticky-tape method of production. There was little flow, and my spoken links between the music sounded very much like a bad Radio 4 anchor.</p>\r\n<p>In late September 2008, I was accepted as a member of the now-defunct <a href=\"https://musicpodcasting.org/\">Association of Music Podcasting</a>. This was another major step for me. All member of the Association were peer-reviewed as part of the criteria for membership. This meant that my podcast was sufficiently good to be accepted. That meant so much to me, and made me take things so much more seriously (and was the main reason why I pulled episode 20 just prior)</p>\r\n<p>It also meant that the show was becoming more music-oriented - something I really did not have a problem with! Particularly as I was starting to strike up good relationships with some of the artists that I was featuring on the show. This led to me prerecording an interview with one of the bands in January 2009, and then again with another artist in March.</p>\r\n<p>Having registered a proper domain for the podcast (rather than piggybacking my own personal domain) and then celebrated the first anniversary of the show... you could say that the show was fuelling its own progression. And I was enjoying that journey immensely!</p>\r\n<p>Over the next 6 months, I joined the <a href=\"https://madeintheukshow.co.uk/\">Made In The UK Show</a> collective, interviewed an artist LIVE on the show, had the show syndicated on an internet radio station in the UK, and launched a new, independent chatroom for the website.</p>\r\n<h2 id=\"the-major-change\">The Major Change</h2>\r\n<p>And then, in September of 2009, the 18 month anniversary of the show, and two days before my birthday, something happened to totally turn the show upside down.</p>\r\n<p>I decided that I wanted to improve the show. Bearing in mind that I was still using my Logitech headset, my Linux laptop, and a piece of software called IDJC to record and stream the show, I felt it was time for a change. So I spent a small fortune on a mixer, microphones, stands, audio interface, and cables.</p>\r\n<p>Yes, microphones. Plural.</p>\r\n<p>Up to this point my wife, Caroline, had progressed from occasional listener, to regular distraction (I don’t think details are appropriate!), to researcher. So I asked her a question... if I bought two microphones, would you join the show as a permanent co-host? She said yes.</p>\r\n<p>That really changed things. The dynamic of me talking to an imaginary audience (bar the activity in the live chatroom) changing to me bouncing off someone in the same room was electric! The show was totally transformed by that fairly simple change. Our listener figures jumped up, the music on the show was more varied, existing listeners enjoyed the show more... it was amazing.</p>\r\n<p>There have been occasions where Caroline hasn’t been able to join the show (illness, kids, etc) and the listeners (and I) have really noticed her absence.</p>\r\n<h2 id=\"since-then\">Since Then</h2>\r\n<ul>\r\n<li>we’ve launched an OGG feed, which comprises approximately 20% of the downloads from the site</li>\r\n<li>at one point we were syndicated on 4 internet radio stations around the world</li>\r\n<li>we’re major contributors to cchits.net</li>\r\n<li>in 2013 we were awarded the <a href=\"https://thebugcast.org/2013/03/25/european-podcast-award-2012-uk-personality/\">European Podcast Award for UK Personality</a></li>\r\n<li>we’ve just celebrated 10 years of podcasting, producing over 500 regular episodes</li>\r\n</ul>\r\n<p>So there’s a potted history of how I got into podcasting.</p>\r\n<h2 id=\"beyond-the-bugcast\">Beyond The Bugcast</h2>\r\n<p>Outside the realms of The Bugcast, which is still my primary podcast:</p>\r\n<ul>\r\n<li>I’m a contributor to <a href=\"https://ccjam.otherside.network/\">CCJam</a> - a short-form community podcast which focuses on music</li>\r\n<li>I’m one of the co-hosts of <a href=\"https://tuxjam.otherside.network/\">TuxJam</a> - Linux news with Creative Commons music</li>\r\n<li>I’m one of the co-hosts of the <a href=\"https://duffercast.org/\">Duffercast</a></li>\r\n<li>I’m an irregular contributor to HPR, as you’ll probably already know</li>\r\n<li>I’m just become the producer of the <a href=\"https://www.adminadminpodcast.co.uk/\">Admin Admin podcast</a> - my first producer-only gig</li>\r\n</ul>\r\n<p>Also ran:</p>\r\n<ul>\r\n<li>I’m the “owner” (if you like) of the <a href=\"https://madeintheukshow.co.uk/\">Made In The UK Show</a> - currently on haitus</li>\r\n<li>I’m one of the co-hosts of <a href=\"https://crivins.otherside.network/\">Crivins</a> - currently on haitus</li>\r\n</ul>\r\n<p>I’m always happy to answer any questions or provide help with regard to podcasting, you can find various ways to find me over at my <a href=\"https://thelovebug.org/contact\">Contact page</a></p>\r\n<p>Thanks for listening! :-)</p>\r\n',314,0,0,'CC-BY-SA','podcasting, anniversary, history, journey',0,0,1),
(2498,'2018-02-28','Life without Google',266,'Quvmoh goes a month without G apps on his phone','<ul>\r\n<li><p>Zenphone 2 <a href=\"https://forum.xda-developers.com/zenfone2/general/guide-brick-soft-hard-bricked-zenfone-2-t3284256\" class=\"uri\">https://forum.xda-developers.com/zenfone2/general/guide-brick-soft-hard-bricked-zenfone-2-t3284256</a></p></li>\r\n<li><p>Magic Device Tool <a href=\"https://github.com/MariusQuabeck/magic-device-tool\" class=\"uri\">https://github.com/MariusQuabeck/magic-device-tool</a></p></li>\r\n<li><p>F-Droid <a href=\"https://f-droid.org/en/\" class=\"uri\">https://f-droid.org/en/</a></p></li>\r\n<li><p>K-9 Mail <a href=\"https://f-droid.org/packages/com.fsck.k9/\" class=\"uri\">https://f-droid.org/packages/com.fsck.k9/</a></p></li>\r\n<li><p>Protonmail <a href=\"https://protonmail.com/\" class=\"uri\">https://protonmail.com/</a></p></li>\r\n<li><p>Signal <a href=\"https://signal.org/\" class=\"uri\">https://signal.org/</a></p></li>\r\n<li><p>Syncthing <a href=\"https://syncthing.net/\" class=\"uri\">https://syncthing.net/</a></p></li>\r\n</ul>',110,0,0,'CC-BY-SA','google free, F-droid, LineageOS, magic device tool',0,0,1),
(2499,'2018-03-01','Tuning around the HF 40Mtr band',767,'In this episode I give an example of what sort of things you can expect hear on the HF band','<h2 id=\"tuning-around-the-band\">Tuning around the band</h2>\r\n<p>In this episode I tune around a small portion of the HF (High Frequency) band in the 40 Meters section which in the UK covers 7 to 7.2Mhz.</p>\r\n<h3 id=\"equipment-details\">Equipment details</h3>\r\n<p>The mode being used was mostly LSB (Lower Side Band)<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Sideband\" class=\"uri\">https://en.wikipedia.org/wiki/Sideband</a></p>\r\n<p>At the end of the recording I briefly switch mode to to listen to a commercial station on AM (Amplitude modulation).<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Amplitude_modulation\" class=\"uri\">https://en.wikipedia.org/wiki/Amplitude_modulation</a></p>\r\n<p>The radio being used is my trusty and much loved Kenwood TS 940S<br />\r\n<a href=\"https://www.universal-radio.com/catalog/hamhf/ts940s.html\" class=\"uri\">https://www.universal-radio.com/catalog/hamhf/ts940s.html</a></p>\r\n<p>The antenna used is a dipole tuned for the 40 Meter band.<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Dipole_antenna\" class=\"uri\">https://en.wikipedia.org/wiki/Dipole_antenna</a></p>\r\n<p>I used my trusty Dictaphone and internal microphone to do the recording<br />\r\n<a href=\"https://www.amazon.co.uk/HccToo-Multifunctional-Rechargeable-Dictaphone-Conversation/dp/B015H9JP6S/ref=sr_1_1?ie=UTF8&amp;qid=1502381150&amp;sr=8-1&amp;keywords=dictation+machines\" class=\"uri\">https://www.amazon.co.uk/HccToo-Multifunctional-Rechargeable-Dictaphone-Conversation/dp/B015H9JP6S/ref=sr_1_1?ie=UTF8&amp;qid=1502381150&amp;sr=8-1&amp;keywords=dictation+machines</a></p>\r\n<p>If you want to hold private conversations with another party over radio then perhaps amateur radio is not for you as this goes against the whole principle of Amateur Radio.</p>\r\n<p>Listening to amateur radio broadcasts is actively encouraged, and in the UK a licence is not required for listening.</p>\r\n<p>A simple receiver capable of listening to sideband broadcasts and odd bit of long wire is all that\'s required.</p>\r\n<p>In the past it was common to hear an Amateur operator saying goodbye to any short wave listeners at the end of their conversation. If you listen carefully at about 10 minutes in the station DF2BO says goodbye to anybody still listening.</p>\r\n<h3 id=\"stations-received\">Stations received</h3>\r\n<ul>\r\n<li><p>DF2BO speaking to Peter VK4ZP in Brisbane Queensland, on 7.16209 MHz</p></li>\r\n<li><p>CW station calling CQ on 7.00994 MHz, I don\'t know the callsign or details of the station as I can\'t read Morse code however I did recognise the distinctive rhythm of the letters C and Q.</p></li>\r\n<li><p>Transmitting the letters CQ on a particular radio frequency is used as an invitation for any operators listening on that frequency to respond. It is widely used in amateur radio.</p></li>\r\n<li><p>German station unidentified on 7.15794 MHz</p></li>\r\n<li><p>DF2BO name, Tom, near Stuttgart speaking to Rob VK2XZ who I can\'t hear on 7.16200 MHz, then speaking briefly with Chris VK2SR who I can\'t hear</p></li>\r\n<li><p>Another brief bit of morse code</p></li>\r\n<li><p>An unknown commercial station broadcasting on 7.35520 on AM</p></li>\r\n</ul>\r\n',201,43,1,'CC-BY-SA','ham radio, amateur radio, radio, hf',0,0,1),
(2502,'2018-03-06','Volume Of Thought',440,'Lostnbronx attempts to measure the \"volume\" of his own thoughts.','<p>Lostnbronx measures how loud his own thoughts are -- or rather, how loud outside noise has to be before they are disrupted.</p>\r\n<p>It turns out that unwanted music in his ears at -30 dB is when his train of thought starts to derail.</p>',107,0,0,'CC-BY-SA','lostnbronx,thinking,thoughts,volume,noise,music,confusion',0,0,1),
(2504,'2018-03-08','Intro to Git with pen and paper',2205,'Klaatu introduces Git using pen and paper.','<pre><code>git add\r\n\r\ngit commit -m &quot;some useful message&quot;\r\n\r\ngit push origin HEAD</code></pre>\r\n',78,104,0,'CC-BY-SA','git',0,0,1),
(2497,'2018-02-27','2017-2018 New Years Eve show part 1',13200,'Part one of the sixth annual HPR New Year Show.','<h2 id=\"hpr-nye-2017---1\">HPR NYE 2017 - 1</h2>\r\n<ul>\r\n<li><p>Ken and Casper chat about the new year show and space</p></li>\r\n<li><p>Pirate drops in and Casper gets a new job</p></li>\r\n<li><p>Amazon\'s Giant Glass Balls<br />\r\n<a href=\"https://www.google.com/search?q=bezos+giant+glass+balls&amp;tbm=isch&amp;source=iu&amp;ictx=1&amp;fir=EW1kjYgk7lISlM%253A%252CTgFNxH0jr8vQLM%252C_&amp;usg=__XtnxMzguAWZinVFgvLoiwvN7qvg%3D&amp;sa=X&amp;ved=0ahUKEwiXr6n2grTYAhUJx2MKHTugBL0Q9QEIKzAA#imgrc=EW1kjYgk7lISlM\">https://www.google.com/search?q=bezos+giant+glass+balls&amp;tbm=isch&amp;source=iu&amp;ictx=1&amp;fir=EW1kjYgk7lISlM%253A%252CTgFNxH0jr8vQLM%252C_&amp;usg=__XtnxMzguAWZinVFgvLoiwvN7qvg%3D&amp;sa=X&amp;ved=0ahUKEwiXr6n2grTYAhUJx2MKHTugBL0Q9QEIKzAA#imgrc=EW1kjYgk7lISlM</a></p></li>\r\n<li><p>ExplicitNess, and ratings and stuff</p></li>\r\n<li><p>Ken is tidying his room</p></li>\r\n<li><p>Microcenter</p></li>\r\n<li><p>SS Virgina5 - pirate makes the boat go. Do not ride!!!!</p></li>\r\n<li>Built as a passenger ferry in 1922<br />\r\n<a href=\"https://www.virginiav.org/\" class=\"uri\">https://www.virginiav.org/</a>\r\n<ul>\r\n<li>400hp 200rpm 3cylinder engine</li>\r\n<li>Steam mechanics explained 45 manual lubrication points</li>\r\n<li>powered by diesel not unlike tar</li>\r\n<li>pirate talks through lighting a plant off</li>\r\n<li>$150 for a 5 gallon bucket</li>\r\n</ul></li>\r\n<li><p>Ken Tweets <a href=\"https://twitter.com/HPR/status/947415023500001280\" class=\"uri\">https://twitter.com/HPR/status/947415023500001280</a></p></li>\r\n<li><p>NetMiner</p></li>\r\n<li><p>Old Time Steam Powered Machine Shop: <a href=\"https://www.youtube.com/watch?v=9WXHNBMLZZM\" class=\"uri\">https://www.youtube.com/watch?v=9WXHNBMLZZM</a></p></li>\r\n<li><p>FDroid</p></li>\r\n<li><p>Copy APKs for your kids</p></li>\r\n<li><p>Ken replaces battery in OMRON EAR MC 510 - THERMOMETER</p></li>\r\n<li><p>Cool pcb ruler from Adafruit<br/><a href=\"https://www.adafruit.com/product/1554\" class=\"uri\">https://www.adafruit.com/product/1554</a></p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/List_of_battery_sizes\" class=\"uri\">https://en.wikipedia.org/wiki/List_of_battery_sizes</a></p></li>\r\n<li><p>SparkyLinux - supports 32bit architecture, web browsers, Debian based, one old P4</p></li>\r\n<li><p>Bootsteap - sparky command line installer, small package. Will allow you to install a desktop, can bootstrap to whatever you want.</p></li>\r\n<li><p>GNU - DOS</p></li>\r\n<li><p><a href=\"https://linuxlugcast.com/\" class=\"uri\">https://linuxlugcast.com/</a></p></li>\r\n<li><p><a href=\"https://razor1911.com/\" class=\"uri\">https://razor1911.com/</a></p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Motorola_68000\" class=\"uri\">https://en.wikipedia.org/wiki/Motorola_68000</a></p></li>\r\n<li><p><a href=\"https://www.youtube.com/watch?v=cMVt0eUDYhY\" class=\"uri\">https://www.youtube.com/watch?v=cMVt0eUDYhY</a></p></li>\r\n<li><p><a href=\"https://www.youtube.com/results?search_query=amiga+documentary\" class=\"uri\">https://www.youtube.com/results?search_query=amiga+documentary</a></p></li>\r\n<li><p>xKlaatu signs on</p></li>\r\n<li><p>Discuss New Years in New Zealand!!!!</p></li>\r\n<li><p>Gun Control</p></li>\r\n<li><p>SHOW NOTES ARE(NOT?) Important</p></li>\r\n<li><p>xklaatu does not like shownotes</p></li>\r\n<li><p>Ken encourages them</p></li>\r\n<li><p>HoneyMagoo REALLY joins</p></li>\r\n<li><p>Markdown vs. non-markdown HTML5,</p></li>\r\n<li><p>Heated topic - trigger point discovered</p></li>\r\n<li><p>xklaatu owes ken a show on Git</p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Hercules_Computer_Technology\" class=\"uri\">https://en.wikipedia.org/wiki/Hercules_Computer_Technology</a></p></li>\r\n<li><p>Why 36 bits? Because all letters were upper case, which only required 6 bits, 6*6</p></li>\r\n<li><p>Casper\'s first graphics card was a rendition vérité</p></li>\r\n<li><p>Casper gets kicked off due to Van Allen Belt interference</p></li>\r\n<li><p>Fascism</p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Saul_Goodman\" class=\"uri\">https://en.wikipedia.org/wiki/Saul_Goodman</a></p></li>\r\n<li><p>Late night programming in the states<br />\r\n<a href=\"https://youtu.be/58mhPaUL3Uc?t=6m45s\" class=\"uri\">https://youtu.be/58mhPaUL3Uc?t=6m45s</a></p></li>\r\n<li><p>Android MTP / KDEConnect</p></li>\r\n<li><p>Use a protocol that works like SFTP</p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/LulzSec\" class=\"uri\">https://en.wikipedia.org/wiki/LulzSec</a></p></li>\r\n<li><p>Back to shownote discussion</p></li>\r\n<li><p><a href=\"https://www.reddit.com/r/WhereIsAssange/\" class=\"uri\">https://www.reddit.com/r/WhereIsAssange/</a></p></li>\r\n<li><p>Russia Discussion</p></li>\r\n<li><p><a href=\"https://www.infowars.com/media-completely-ignores-bombshell-seymour-hersh-revelations-on-seth-rich/\" class=\"uri\">https://www.infowars.com/media-completely-ignores-bombshell-seymour-hersh-revelations-on-seth-rich/</a></p></li>\r\n<li><p><a href=\"https://jackpineradicals.com/boards/topic/seymour-hersch-audio-says-seth-rich-was-wikileaks-source/\" class=\"uri\">https://jackpineradicals.com/boards/topic/seymour-hersch-audio-says-seth-rich-was-wikileaks-source/</a></p></li>\r\n<li><p>American music New Zealand</p></li>\r\n<li><p><a href=\"https://www.dailydot.com/debug/tesla-south-australia-battery/\" class=\"uri\">https://www.dailydot.com/debug/tesla-south-australia-battery/</a></p></li>\r\n<li><p><a href=\"https://www.youtube.com/watch?v=xHrhqtY2khc\" class=\"uri\">https://www.youtube.com/watch?v=xHrhqtY2khc</a></p></li>\r\n<li><p>The pirate bay AFK</p></li>\r\n<li><p>Proposal: rename &quot;smart phone&quot; to Smart Bugs</p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Terminal_velocity\" class=\"uri\">https://en.wikipedia.org/wiki/Terminal_velocity</a></p></li>\r\n<li><p>Cryptonomicon</p></li>\r\n<li><p>Quantum Computing / Encryption / Reality</p></li>\r\n<li><p><a href=\"https://savannahnow.com/opinion/column/2017-12-23/mark-murphy-sixth-extinction-how-will-we-address-plague-man\" class=\"uri\">https://savannahnow.com/opinion/column/2017-12-23/mark-murphy-sixth-extinction-how-will-we-address-plague-man</a></p></li>\r\n<li><p><a href=\"https://www.thomhartmann.com/forum/2013/10/6th-mass-extinction\" class=\"uri\">https://www.thomhartmann.com/forum/2013/10/6th-mass-extinction</a></p></li>\r\n<li><p><a href=\"https://frontalot.com\" class=\"uri\">https://frontalot.com</a></p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR new year show 2017',0,0,1),
(2505,'2018-03-09','The power of GNU Readline - part 3',1631,'More useful key combinations','<h1 id=\"the-power-of-gnu-readline---part-3\">The power of GNU Readline - part 3</h1>\r\n<p>In part 2 we looked at deleting text in various ways and pasting it back, using GNU Readline key sequences.</p>\r\n<p>The full-length notes (available <a href=\"https://hackerpublicradio.org/eps/hpr2505/full_shownotes.html\">here</a>) contain some new terms and features of GNU Readline, and introduce some further ways of manipulating text, with some examples.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Wikipedia article on <a href=\"https://en.wikipedia.org/wiki/GNU_Readline\"><em>GNU Readline</em></a></li>\r\n<li><a href=\"https://tiswww.cwru.edu/php/chet/readline/rluserman.html\"><em>GNU Readline</em> manual</a></li>\r\n<li>Previous episodes:\r\n<ul>\r\n<li><a href=\"https://www.hackerpublicradio.org/eps.php?id=2073\">The power of GNU Readline - part 1</a></li>\r\n<li><a href=\"https://www.hackerpublicradio.org/eps.php?id=2453\">The power of GNU Readline - part 2</a></li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2505/full_shownotes.html\">Detailed notes</a></li>\r\n</ul></li>\r\n</ul>',225,102,1,'CC-BY-SA','command line,cli,GNU Readline',0,0,1),
(2506,'2018-03-12','Build Your Own Lisp (A Book Review)',544,'Learn C programming while building a LISP','<h2 id=\"build-your-own-lisp\">Build Your Own Lisp</h2>\r\n<ol type=\"1\">\r\n<li><p><a href=\"https://www.buildyourownlisp.com/\" class=\"uri\">https://www.buildyourownlisp.com/</a></p></li>\r\n<li><p><a href=\"https://github.com/orangeduck/BuildYourOwnLisp\" class=\"uri\">https://github.com/orangeduck/BuildYourOwnLisp</a></p></li>\r\n<li><p>Daniel Holden links:<br />\r\n<a href=\"https://github.com/orangeduck\" class=\"uri\">https://github.com/orangeduck</a><br />\r\n<a href=\"https://www.theorangeduck.com/\" class=\"uri\">https://www.theorangeduck.com/</a></p></li>\r\n</ol>',326,0,0,'CC-BY-SA','programming,C,Lisp,book review',0,0,1),
(2507,'2018-03-13','Racket, Nix, Fractalide and the sounds of a Hong Kong New Town',1127,'It\'s a triple whammy! It\'s functional programming, functional package management and soundscape!','<p>Listen to me walk through five shopping malls and one bicycle tunnel, as I rant about how flow-based programming microservices and functional package management will save the future of programming and software reuse, and usher in a new era of software quality and productivity!</p>\r\n<p>If it sounds like I\'m a bit down about working alone on <code>racket2nix</code>, you\'re interpreting me wrong! I didn\'t expect any feedback at all from the small to non-existent racket/nix intersection, but it turns out the intersection is larger than I thought, and I\'m grateful for any words of encouragement, and feedback in any form on what the community needs.</p>\r\n<p>Links:</p>\r\n<ul>\r\n<li><a href=\"https://github.com/clacke/racket2nix-clacke\">racket2nix</a></li>\r\n<li><a href=\"https://racket-lang.org/\">racket</a></li>\r\n<li><a href=\"https://nixos.org/nix/\">nix</a></li>\r\n<li><a href=\"https://fractalide.com/\">fractalide</a></li>\r\n</ul>\r\n<p>Nix is the mother of Guix:</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2198\">hpr2198 :: How awesome is Guix and why will it take over the world</a></li>\r\n</ul>\r\n',311,0,0,'CC-BY-SA','racket, nix, racket2nix, fractalide, soundscape, hongkong',0,0,1),
(2508,'2018-03-14','False Prophets',550,'Lostnbronx considers how a cult-of-personality may affect space exploration.','<p>Lostnbronx considers the effect that Elon Musk and SpaceX are having on the latest push for the exploitation and exploration of space, and the danger of pegging the future of the human race upon the showmanship of one man.</p>',107,0,1,'CC-BY-SA','space,spacex,elon musk,tesla,electric cars,cult-of-personality,lostnbronx',0,0,1),
(2509,'2018-03-15','AudioBookClub 16 Matcher Rules',7171,'The HPR Audiobook Club reviews Matcher Rules by Mary Holland','<h2 id=\"summary\">SUMMARY</h2>\r\n<p>In this episode, the HPR_AudioBookClub discusses Matcher Rules by Mary Holland <a href=\"https://scribl.com/books/PDB66/matcher-rules\" class=\"uri\">https://scribl.com/books/PDB66/matcher-rules</a></p>\r\n<h2 id=\"non-spoiler-thoughts\">NON-SPOILER THOUGHTS</h2>\r\n<ul>\r\n<li>pokey: An enjoyable story, but not really for me.</li>\r\n<li>FiftyOneFifty: It\'s not about orgies...</li>\r\n<li>x1101: Liked it. A little slow.</li>\r\n<li>Thaj: It surprised me, I didn\'t expect to like it as much as I did.</li>\r\n</ul>\r\n<h2 id=\"beverage-reviews\">BEVERAGE REVIEWS</h2>\r\n<p><em>As usual, the HPR_AudioBookClub took some time to review the beverages that each of us were drinking during the episode</em></p>\r\n<ul>\r\n<li>Thaj: Voice fading fast. Need a boost. With a little lemon and some local honey <a href=\"https://www.traditionalmedicinals.com/products/throat-coat/\" class=\"uri\">https://www.traditionalmedicinals.com/products/throat-coat/</a></li>\r\n<li>x1101: Harpoon IPA - <a href=\"https://www.harpoonbrewery.com/beer/1/harpoon-ipa\" class=\"uri\">https://www.harpoonbrewery.com/beer/1/harpoon-ipa</a></li>\r\n<li>pokey: &quot;my beer is a knife&quot; Smuttynose Robust Porter <a href=\"https://smuttynose.com/beer/robust-porter/\" class=\"uri\">https://smuttynose.com/beer/robust-porter/</a>. I sharpen it with a Spyderco Triangle Sharpmaker <a href=\"https://www.spyderco.com/catalog/details.php?product=77\" class=\"uri\">https://www.spyderco.com/catalog/details.php?product=77</a>. It is awesome.</li>\r\n<li>FiftyOneFifty: Junior Johnson\'s Midnight Moonshine</li>\r\n</ul>\r\n<h2 id=\"things-we-talked-about\">THINGS WE TALKED ABOUT</h2>\r\n<p>We discuss the upsides and downsides of affinity groups. Pokey wonders why terminology for simple things are changed in sci-fi stories. How exactly do population and economics work together?</p>\r\n<h2 id=\"our-next-audiobook\">OUR NEXT AUDIOBOOK</h2>\r\n<p>Blood Witness by David Hitt - <a href=\"https://scribl.com/books/PA513/blood-witness\" class=\"uri\">https://scribl.com/books/PA513/blood-witness</a></p>\r\n<h2 id=\"next-recording\">NEXT RECORDING</h2>\r\n<p>We are currently working through a backlog of pre-recorded episodes. Once this is completed we will restart the Audiobook Club again. If you want to be notified when this happens please let us know via the HPR Mailing List \'hpr at hackerpublicradio dot org\'.</p>\r\n<h2 id=\"further-recommendations\">FURTHER RECOMMENDATIONS</h2>\r\n<p>Nothing this time, well except for the typical Star Wars reference...and Star Trek, and comics.</p>\r\n<h2 id=\"feedback\">FEEDBACK</h2>\r\n<p>Thank you very much for listening to this episode of the HPR_AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you\'ll consider joining us next time. Please leave a few words in the episode\'s comment section. As always; remember to visit the HPR contribution page HPR could really use your help right now. <a href=\"https://hackerpublicradio.org/contribute.php\" class=\"uri\">https://hackerpublicradio.org/contribute.php</a></p>\r\n<p><em>Sincerely,</em><br />\r\n<em>The HPR_AudioBookClub</em></p>\r\n<p>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</p>\r\n<h2 id=\"our-audio\">OUR AUDIO</h2>\r\n<p>This episode was processed using Audacity <a href=\"https://audacity.sourceforge.net\" class=\"uri\">https://audacity.sourceforge.net</a>. We\'ve been making small adjustments to our audio mix each month in order to get the best possible sound. It has been especially challenging getting all of our voices relatively level, because everyone has their own unique setup. Mumble is great for bringing us all together, and for recording, but it\'s not good at making everyone\'s voice the same volume. We\'re pretty happy with the way this month\'s show turned out, so we\'d like to share our editing process and settings with you and our future selves (who, of course, will have forgotten all this by then).</p>\r\n<p>Mumble uses a sample rate of 48kHz, but HPR requires a sample rate of 44.1kHz so the first step in our audio process is to resample the file at 44.1kHz. Resampling can take a long time if you don\'t have a powerful computer, and sometimes even if you do. If you record late at night, like we do, you may want to start the task before you go to bed, and save it first thing in the morning, so that the file is ready to go the next time you are.</p>\r\n<p>Next we use the &quot;Compressor&quot; effect with the following settings:</p>\r\n<p>Threshold: -30db<br />\r\nNoise Floor: -50db<br />\r\nRatio: 3:1<br />\r\nAttack Time: 0.2sec<br />\r\nDecay Time: 1.0 sec<br />\r\nMake-up Gain for 0db after compressing&quot; and &quot;compress based on peaks&quot; were both left un-checked.</p>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from the file and save them in a separate file for possible use as outtakes after the closing music.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the .aup file to .FLAC so that we can paste a copy of the shownotes into the audio file\'s metadata. We use the &quot;Truncate Silence&quot; effect with its default settings to minimize the silence between people speaking. When used with its default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying &quot;uuuuummmm.&quot; Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too agressively your audio may sound sped up and choppy.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can &quot;Mix and Render&quot; all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR server.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being &quot;crashy&quot; but if you remember save after every major transform, you will wonder how it even got that reputation.</p>\r\n',157,53,1,'CC-BY-SA','HPR Audiobook Club, Audiobooks, Podiobooks, Science Fiction ',0,0,1),
(2520,'2018-03-30','Diffie-Hellman and Forward Secrecy',1061,'Using Diffie-Hellman Key Exchange to implement Forward Secrecy','<p>Diffie-Hellman Key Exchange is used in a security technique called Forward Secrecy that aims to secure your encrypted communications from future decryption by unauthorized entities. While it does provide additional security it is not absolutely bullet-proof. So while we explain how it works and provides security, we will also discuss how it can go wrong. For more go to <a href=\"https://www.zwilnik.com/?page_id=957\" class=\"uri\">https://www.zwilnik.com/?page_id=957</a></p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://www.eff.org/https-everywhere\" class=\"uri\">https://www.eff.org/https-everywhere</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/POODLE\" class=\"uri\">https://en.wikipedia.org/wiki/POODLE</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=686\" class=\"uri\">https://www.zwilnik.com/?page_id=686</a></li>\r\n<li><a href=\"https://security.googleblog.com/2011/11/protecting-data-for-long-term-with.html\" class=\"uri\">https://security.googleblog.com/2011/11/protecting-data-for-long-term-with.html</a></li>\r\n<li><a href=\"https://blog.twitter.com/engineering/en_us/a/2013/forward-secrecy-at-twitter.html\" class=\"uri\">https://blog.twitter.com/engineering/en_us/a/2013/forward-secrecy-at-twitter.html</a></li>\r\n<li><a href=\"https://www.khanacademy.org/math/applied-math/cryptography/modern-crypt/v/discrete-logarithm-problem\" class=\"uri\">https://www.khanacademy.org/math/applied-math/cryptography/modern-crypt/v/discrete-logarithm-problem</a></li>\r\n<li><a href=\"https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html#some-benchmarks\" class=\"uri\">https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html#some-benchmarks</a></li>\r\n<li><a href=\"https://www.thesslstore.com/blog/apple-will-require-use-ats-2017/\" class=\"uri\">https://www.thesslstore.com/blog/apple-will-require-use-ats-2017/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=957\" class=\"uri\">https://www.zwilnik.com/?page_id=957</a></li>\r\n</ul>\r\n',198,74,1,'CC-BY-SA','Diffie-Hellman, Encryption, Forward Secrecy',0,0,1),
(2530,'2018-04-13','Introduction to Health',719,'This is the Introduction to a series on health and taking care of yourself','<p>On our refrigerator we have a note card that says &quot;If you don\'t take care of your body, where will you live?&quot; This is a very pertinent question that can open up a discussion of how to achieve a better level of health and age gracefully. This show will kick off a series that will explore various topics in how to get good medical information and improve your health.</p>\r\n<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://www.webmd.com/\" class=\"uri\">https://www.webmd.com/</a></li>\r\n<li><a href=\"https://www.hopkinsmedicine.org/johns_hopkins_bayview/patient_visitor_amenities/community_health_library/finding_reliable_health_information_online.html\" class=\"uri\">https://www.hopkinsmedicine.org/johns_hopkins_bayview/patient_visitor_amenities/community_health_library/finding_reliable_health_information_online.html</a></li>\r\n<li><a href=\"https://medlineplus.gov/evaluatinghealthinformation.html\" class=\"uri\">https://medlineplus.gov/evaluatinghealthinformation.html</a></li>\r\n<li><a href=\"https://medlineplus.gov/understandingmedicalresearch.html\" class=\"uri\">https://medlineplus.gov/understandingmedicalresearch.html</a></li>\r\n<li><a href=\"https://www.youtube.com/user/thehealthcaretriage\" class=\"uri\">https://www.youtube.com/user/thehealthcaretriage</a></li>\r\n<li><a href=\"https://theincidentaleconomist.com/wordpress/about/about-aaron/\" class=\"uri\">https://theincidentaleconomist.com/wordpress/about/about-aaron/</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=256\" class=\"uri\">https://www.palain.com/?page_id=256</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health, Medicine',0,0,1),
(2515,'2018-03-23','2017-2018 New Years Eve show part 2',10169,'Part two of the sixth annual HPR New Year Show.','<h2 id=\"hpr-nye-2017---2\">HPR NYE 2017 - 2</h2>\r\n<ul>\r\n<li><p>To tab or not to tab</p></li>\r\n<li><p>Bitcoin</p></li>\r\n<li><p>Michael Keaton<br />\r\n<a href=\"https://en.m.wikipedia.org/wiki/Michael_Keaton\" class=\"uri\">https://en.m.wikipedia.org/wiki/Michael_Keaton</a></p></li>\r\n<li><p><a href=\"https://seclists.org/fulldisclosure/\" class=\"uri\">https://seclists.org/fulldisclosure/</a></p></li>\r\n<li>Redacted Tonight</li>\r\n<li><p>Phillip DeFranco</p></li>\r\n<li><p>Will robots take our jobs</p></li>\r\n<li><p><a href=\"https://www.eugdpr.org/\" class=\"uri\">https://www.eugdpr.org/</a></p></li>\r\n<li><p><a href=\"https://www.privacycompany.eu/files/DPbD_Framework.pdf\" class=\"uri\">https://www.privacycompany.eu/files/DPbD_Framework.pdf</a></p></li>\r\n<li><p><a href=\"https://www.privacycompany.eu/files/factsheet_GDPR.pdf\" class=\"uri\">https://www.privacycompany.eu/files/factsheet_GDPR.pdf</a></p></li>\r\n<li><p>Gerald is happy to hear someone with his native tounge #perlist - Gerald grew up in Staines, UK<br />\r\n<a href=\"https://www.telegraph.co.uk/news/uknews/1389349/Staines-names-Ali-G-as-its-ambassador.html\" class=\"uri\">https://www.telegraph.co.uk/news/uknews/1389349/Staines-names-Ali-G-as-its-ambassador.html</a></p></li>\r\n<li><p>Aliens needed for notes</p></li>\r\n<li><p>Perl 5 vs Perl 6</p></li>\r\n<li><p>Xmlstarlet<br />\r\n<a href=\"https://xmlstar.sourceforge.net\" class=\"uri\">https://xmlstar.sourceforge.net</a></p></li>\r\n<li><p>Jq<br />\r\n<a href=\"https://github.com/stedolan/jq\" class=\"uri\">https://github.com/stedolan/jq</a></p></li>\r\n<li><p>cmhobs and ken chat about pen testing</p></li>\r\n<li><p>Ferro Rod Fire Starter for Survival<br />\r\n<a href=\"https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA\" class=\"uri\">https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA</a><br />\r\n<a href=\"https://primitivetechnology.wordpress.com/\" class=\"uri\">https://primitivetechnology.wordpress.com/</a></p></li>\r\n<li><p>Casper checks back into the pod as we had dead air - bad music check to make sure anyone is out there</p></li>\r\n<li>3 license types for a HAM\r\n<ul>\r\n<li>Technician Class - Entry Level License (Written Multiple Choice Test)</li>\r\n<li>General Class - Adds HF privs (Written Multiple Choice Test)</li>\r\n<li>Extra Class - Adds more HF privs (Written Multiple Choice Test)</li>\r\n</ul></li>\r\n<li>WB6NOA Gordon West</li>\r\n<li>KB6NU No-Nonsense Study Guides</li>\r\n<li><p>NE4RD gives us a run-down and disoroentation on what it means to be a HAM</p></li>\r\n<li>Why be a HAM?\r\n<ul>\r\n<li>Emergency Communications - Walk-A-Thons, Natural Disaster Support, etc</li>\r\n<li>GIFs</li>\r\n<li>Messing About</li>\r\n<li>Digital modes</li>\r\n<li>Digital texting, experimenting with low power</li>\r\n<li>GREAT Breakdown of all the ins and outs and HAMS</li>\r\n</ul></li>\r\n</ul>',159,121,1,'CC-BY-SA','HPR new year show 2017',0,0,1),
(2525,'2018-04-06','2017-2018 New Years Eve show part 3',10932,'Part three of the sixth annual HPR New Year Show.','<h2 id=\"hpr-nye-2017---3\">HPR NYE 2017 - 3</h2>\r\n<ul>\r\n<li><p>How much does it cost to go to the movies?<br />\r\n<a href=\"https://www.slashfilm.com/new-moviepass-prices/\" class=\"uri\">https://www.slashfilm.com/new-moviepass-prices/</a></p></li>\r\n<li><p><a href=\"https://edition.cnn.com/2016/08/23/health/epipen-price-mylan-prescription-drugs-increase/index.html\" class=\"uri\">https://edition.cnn.com/2016/08/23/health/epipen-price-mylan-prescription-drugs-increase/index.html</a></p></li>\r\n<li><p>Military acquisitions</p></li>\r\n<li><p><a href=\"https://time.com/money/4310099/f-35-budget-pay-free-college-student-loans/\" class=\"uri\">https://time.com/money/4310099/f-35-budget-pay-free-college-student-loans/</a></p></li>\r\n<li><p>F35 vs. F18 etc....</p></li>\r\n<li><p>Cost of printing materials</p></li>\r\n<li><p>PiHole &amp; web browser ad blocking</p></li>\r\n<li><p>Pine64 discussion</p></li>\r\n<li><p>Pocket Chip</p></li>\r\n<li><p><a href=\"https://urandom-podcast.info/\" class=\"uri\">https://urandom-podcast.info/</a></p></li>\r\n<li><p>Plumble - <a href=\"https://play.google.com/store/apps/details?id=com.morlunk.mumbleclient.free&amp;hl=en\" class=\"uri\">https://play.google.com/store/apps/details?id=com.morlunk.mumbleclient.free&amp;hl=en</a></p></li>\r\n<li><p>Google Home<br />\r\n<a href=\"https://www.amazon.com/GOOGLEAIY-V1-Google-AIY-Voice/dp/B075SFLWKX/ref=sr_1_1?ie=UTF8&amp;qid=1514748803&amp;sr=8-1&amp;keywords=aiy+voice+kit+google\" class=\"uri\">https://www.amazon.com/GOOGLEAIY-V1-Google-AIY-Voice/dp/B075SFLWKX/ref=sr_1_1?ie=UTF8&amp;qid=1514748803&amp;sr=8-1&amp;keywords=aiy+voice+kit+google</a></p></li>\r\n<li><p>Rpi Google Home kit - <a href=\"https://www.wired.com/story/cardboard-google-home/\" class=\"uri\">https://www.wired.com/story/cardboard-google-home/</a></p></li>\r\n<li><p><a href=\"https://www.google.com/url?sa=t&amp;source=web&amp;rct=j&amp;url=https://www.amazon.com/GOOGLEAIY-V1-Google-AIY-Voice/dp/B075SFLWKX&amp;ved=2ahUKEwjjhb6plpDZAhWo6YMKHYn3DvMQFjAAegQIERAB&amp;usg=AOvVaw1g60WEaYUMjg0bUsrnkaXI\" class=\"uri\">https://www.google.com/url?sa=t&amp;source=web&amp;rct=j&amp;url=https://www.amazon.com/GOOGLEAIY-V1-Google-AIY-Voice/dp/B075SFLWKX&amp;ved=2ahUKEwjjhb6plpDZAhWo6YMKHYn3DvMQFjAAegQIERAB&amp;usg=AOvVaw1g60WEaYUMjg0bUsrnkaXI</a></p></li>\r\n<li><p><a href=\"https://www.cabinfeverexpo.com/\" class=\"uri\">https://www.cabinfeverexpo.com/</a></p></li>\r\n<li><p>TimeZone discussion</p></li>\r\n<li><p>Pinebook images again</p></li>\r\n<li><p>Travelling Tech</p></li>\r\n<li><p>Remix Tablet broken</p></li>\r\n<li><p>Casper provides some dead air musings &amp; tunes :)</p></li>\r\n<li><p>Apple iOS battery shenanigans</p></li>\r\n<li><p>Pokey finally joins us</p></li>\r\n<li><p>Push-To-Talk - <a href=\"https://linuxlugcast.com/wp-content/uploads/2014/02/SkyeHaven_Mumble_How-To.pdf\" class=\"uri\">https://linuxlugcast.com/wp-content/uploads/2014/02/SkyeHaven_Mumble_How-To.pdf</a></p></li>\r\n<li><p>Late-diagnosed autism - Gordon discusses his revelation</p></li>\r\n<li><p>Speaking about Autism, Spectrums, Apologizing, etc. DO NOT OVER APOLOGIZE... sorry aboot that....</p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR new year show 2017',0,0,1),
(2511,'2018-03-19','Response to episode 2496',419,'How I am using the Raspberry Pi script discussed Episode 2496','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2496\">Dave\'s show</a></li>\r\n<li><a href=\"https://gitlab.com/davmo/what_pi/blob/master/what_pi\">Dave\'s script</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/forums/viewtopic.php?f=28&amp;t=164985\">Raspberry Pi forum page</a></li>\r\n<li><a href=\"https://github.com/raspberrypi/userland\">Raspberry Pi tools GitHub page</a></li>\r\n</ul>\r\n<h2 id=\"command\">Command</h2>\r\n<p>This is written for fish shell</p>\r\n<pre><code>for pi in pi1 pi2 pi3 pi4; cat what_pi &#124; ssh &quot;$pi&quot; bash -; done</code></pre>',300,0,0,'CC-BY-SA','Raspberry Pi, RPi',0,0,1),
(2512,'2018-03-20','Intro to git remote',1590,'All about git remote','<p>\r\nInstantiate a git repo&#58;\r\n</p>\r\n\r\n<pre><code>\r\n$ mkdir alice\r\n$ cd !$\r\n$ git init\r\n</code></pre>\r\n\r\n<p>\r\nAdd a remote&#58;\r\n</p>\r\n\r\n<pre><code>\r\n$ git remote add origin URI_OF_REMOTE\r\n</code></pre>\r\n\r\n<p>\r\nChange a remote&#58;\r\n</p>\r\n\r\n<pre><code>\r\n$ git remote set-url origin NEW_URI\r\n</code></pre>\r\n\r\n<p>\r\nA remote can be a server, it can be a local directory, an NFS share, pretty much whatever you want.\r\n</p>\r\n<p>\r\nIt is a Git convention that the primary remote is called <code>origin</code>. You don&#39;t have to call it that, but it&#39;s pretty common.\r\n</p>\r\n',78,104,0,'CC-BY-SA','git, remote, server',0,0,1),
(2513,'2018-03-21','Why I choose Aperture first',723,'David Whitman encourages you to choose Aperture as the most important setting in setting up your cam','<p>David Whitman encourages you to choose Aperture as the most important setting in setting up your camera.</p>\r\n<p>Understanding Exposure, 3rd Edition by Bryan Peterson - a good book that is great for learning photography. Duck Duck Go can connect you with a place to buy this book.</p>\r\n<p>David\'s cache of BAD Photos mostly of Hunt Dogs (some cute girls with dogs too) <a href=\"https://drive.google.com/open?id=0B0VQmm3RmAmeTVVQdUhuaGVkTVU\" class=\"uri\">https://drive.google.com/open?id=0B0VQmm3RmAmeTVVQdUhuaGVkTVU</a></p>\r\n<ul>\r\n<li>Aperture - <a href=\"https://en.wikipedia.org/wiki/Aperture\" class=\"uri\">https://en.wikipedia.org/wiki/Aperture</a></li>\r\n<li>ISO - <a href=\"https://en.wikipedia.org/wiki/Film_speed\" class=\"uri\">https://en.wikipedia.org/wiki/Film_speed</a></li>\r\n<li>Shutter Speed - <a href=\"https://en.wikipedia.org/wiki/Film_speed\" class=\"uri\">https://en.wikipedia.org/wiki/Film_speed</a></li>\r\n</ul>\r\n<p>Have some fun. Take some photos and do a HPR episode.</p>',209,0,0,'CC-BY-SA','Photography, Cameras, ISO, Aperture, Shutter Speed',0,0,1),
(2514,'2018-03-22','Electronics Calculator Kit',2006,'NYbill talks about building a $16 electronics calculator kit.','<p>\r\nNYbill talks about building a $16 electronics calculator kit.\r\n</p>\r\n<p>\r\nKkmoon DIY Calculator Kit: <a href=\"https://tinyurl.com/yc9z92pc\">https://tinyurl.com/yc9z92pc</a>\r\n</p>\r\n<p>\r\nPics for the episode: <a href=\"https://media.gunmonkeynet.net/u/nybill/collection/electronics-calculator-kit/\">https://media.gunmonkeynet.net/u/nybill/collection/electronics-calculator-kit/</a>\r\n</p>\r\n<p>Just to save anyone from searching for some secret mode on their\r\ncalculators, I misspoke. I mention using my TI calculator in “Degree Mode”.\r\nI meant to say “Normal Mode”. It just happens to say DEG on the screen in tiny\r\nletters. What can I say, I’m easily distra</p>\r\n<p>Oh look at that!</p>\r\n \r\n',235,103,0,'CC-BY-SA','Electronics, Kits, Soldering, DIY',0,0,1),
(2516,'2018-03-26','Intro to git branch',2635,'Intro to git branch','<p>\r\nThese are all the commands covered in this episode. <em>This is not a sequence</em>, it\'s just all the commands in the episode, listed one after another.\r\n</p>\r\n\r\n<p>\r\nGet changes from the remote repo&#58;\r\n</p>\r\n<pre><code>\r\n$ git fetch\r\n</code></pre>\r\n\r\n<p>\r\nSee all branches&#58;\r\n</p>\r\n<pre><code>\r\n$ git branch --all\r\n</code></pre>\r\n\r\n<p>\r\nView a remote branch after you have fetched it&#58;\r\n</p>\r\n<pre><code>\r\n$ git checkout origin/dev\r\n</code></pre>\r\n\r\n<p>\r\nCreate a copy of a fetched remote branch in your local repo&#58;\r\n</p>\r\n<pre><code>\r\n$ git checkout dev\r\n</code></pre>\r\n\r\n<p>\r\nMerge changes from remote origin&#47;master into your local master branch&#58;\r\n</p>\r\n<pre><code>\r\n$ git merge master origin/master\r\n</code></pre>\r\n\r\n<p>\r\nFetch and merge automatically&#58;\r\n</p>\r\n<pre><code>\r\n$ git pull\r\n</code></pre>\r\n\r\n<p>\r\nCreate a new branch, and change to it&#58;\r\n</p>\r\n<pre><code>\r\n$ git checkout -b dev\r\n</code></pre>\r\n\r\n<p>\r\nMerge dev into master&#58;\r\n</p>\r\n<pre><code>\r\n$ git checkout master\r\n$ git merge master dev\r\n</code></pre>\r\n\r\n<p>\r\nMerge master into dev\r\n</p>\r\n<pre><code>\r\n$ git checkout dev\r\n$ git merge dev master\r\n</code></pre>\r\n\r\n<p>\r\nDelete the dev branch&#58;\r\n</p>\r\n<pre><code>\r\n$ git branch -d dev\r\n</code></pre>\r\n',78,104,0,'CC-BY-SA','git, branch, server',0,0,1),
(2518,'2018-03-28','Converting My Laptop to Dual Boot',1440,'Converting a Linux only laptop to dual boot using information from a previous HPR episode.','<h2 id=\"converting-my-laptop-to-dual-boot\">Converting My Laptop to Dual Boot</h2>\r\n<h3 id=\"summary\">Summary</h3>\r\n<p>In this episode I describe how I converted my Linux-only laptop to dual-boot with Windows 10. Specifically, using information from a previous HPR episode.</p>\r\n<h3 id=\"reference\">Reference</h3>\r\n<p>The procedure used in this project drew heavily from the information presented in HPR episode <a href=\"https://hackerpublicradio.org/eps.php?id=2305\">2305</a> by Mongo.</p>\r\n<h3 id=\"target-laptop\">Target Laptop</h3>\r\n<ul>\r\n<li>Lenovo Thinkpad T550</li>\r\n<li>Intel i7-5600U Dual-Core</li>\r\n<li>8GB RAM</li>\r\n<li>256GB SSD</li>\r\n</ul>\r\n<p>Laptop was purchased in Jan 2016 as a factory refurb unit from an Ebay seller. The model was about 1 year old at the time. As soon as I got it, I summarily removed any trace of Windows, with prejudice, and installed Linux.</p>\r\n<h3 id=\"the-problem\">The Problem</h3>\r\n<p>I am needing to run some Windows software that doesn\'t work in either Wine or a virtual machine environment. Specifically Autodesk Fusion 360.</p>\r\n<h3 id=\"some-challenges\">Some Challenges</h3>\r\n<ul>\r\n<li><p>No longer have Windows install media. I was able to download a Lenovo recovery USB image.</p>\r\n<p><a href=\"https://support.lenovo.com/us/en/solutions/ht103653\" class=\"uri\">https://support.lenovo.com/us/en/solutions/ht103653</a></p></li>\r\n<li><p>I didn\'t think that a 256GB drive would be big enough for both Linux and Windows. I purchased a 512GB SSD drive.</p></li>\r\n<li><p>I was happy with my Xubuntu setup and configuration and didn\'t want to have to start all over on that. I hoped that restoring my home directory would take care of that.</p></li>\r\n</ul>\r\n<h3 id=\"the-procedure\">The Procedure</h3>\r\n<ol type=\"1\">\r\n<li><p>Backed up my home directory, just in case.</p></li>\r\n<li><p>Replaced the hard drive.</p></li>\r\n<li><p>Tried to boot from Lenovo Windows thumb drive.</p></li>\r\n<li><p>Found that the BIOS was set to legacy mode, so reset BIOS to factory.</p></li>\r\n<li><p>Told the installer to use the entire drive.</p></li>\r\n<li><p>Went through the entire Windows install and update process.</p></li>\r\n<li><p>Used the instructions provided by Mongo to resize Windows filesystem size.</p></li>\r\n<li><p>Used the instructions provided by Mongo to turn of fast boot.</p></li>\r\n<li><p>Used the instructions provided by Mongo to turn of Secure Boot in BIOS.</p></li>\r\n<li><p>Booted from Xubuntu 16.04 thumb drive.</p></li>\r\n<li><p>Did Xubuntu install as normal, choosing the install type of installing along side Windows Boot Manager.</p></li>\r\n<li><p>Installed all of the updates.</p></li>\r\n<li><p>Mounted the old hard drive with a USB drive enclosure, which was a bit of a challenge because that drive was encrypted. The drive has 2 partitions. A small boot partition and then a large LUKS encrypted partition.</p>\r\n<p>This is a procedure that can be used to mount such a partition.</p>\r\n<ul>\r\n<li><p>First you must decrypt the partition and map it to a device. This can be done with the following command (assuming the partition mount point is /dev/sdb2):</p>\r\n<pre><code>cryptsetup luksOpen /dev/sdb2 cryptdrive</code></pre>\r\n<p>This command will map the partition to the following device:</p>\r\n<pre><code>/dev/mapper/cryptdrive</code></pre></li>\r\n<li><p>Normally you could then mount the filesystem as follows:</p>\r\n<pre><code>mount /dev/mapper/cryptdrive /mnt</code></pre></li>\r\n<li><p>However, in this case the encrypted filesystem is actually an LVM volume that contains two volume groups that made up the partitions of the previous Linux install, so you can\'t directly mount it.</p></li>\r\n<li><p>I had to first install the LVM tools, which had not been installed by default.</p>\r\n<pre><code>apt-get install lvm</code></pre></li>\r\n<li><p>Then I had to issue the following command to activate the LVM volume groups.</p>\r\n<pre><code>vgchange -ay</code></pre>\r\n<p>That resulted in two more devices being created.</p>\r\n<pre><code>/dev/xubuntu-vg/swap\r\n/dev/xubuntu-vg/root</code></pre></li>\r\n<li><p>I could then finally mount the old root filesystem with:</p>\r\n<pre><code>mount /dev/xubuntu-vg/root /mnt</code></pre></li>\r\n</ul></li>\r\n<li><p>Copied by entire home directory from the old hard drive to the new install.</p>\r\n<pre><code>cd /home\r\ncp -rp /mnt/home/username .</code></pre></li>\r\n<li><p>Rebooted computer and Xubuntu came up will all of my desktop settings intact. Just need to install non-default packages.</p></li>\r\n</ol>\r\n<h3 id=\"result\">Result</h3>\r\n<p>This ended up being a totally successful process. The computer is now dual-boot. It boots into Xubuntu by default, but you can choose Windows. Xubuntu system is mostly restored back to the way it was.</p>\r\n',334,0,1,'CC-BY-SA','Linux, Windows, Dual Boot, Laptop, Lenovo, Xubuntu',0,0,1),
(2517,'2018-03-27','DIY CCTV Security System',940,'I go over my Home CCTV setup','<h2 id=\"cctv-security-system\">CCTV Security System</h2>\r\n<ul>\r\n<li>$80 Reolink IP PoE Security Camera 4MP Super HD 2560x1440 with SD Card &amp; Audio Outdoor Indoor Bullet IR Night Vision Motion Detection RLC-410S</li>\r\n<li>65$ RLC-410 ( No SD CARD )</li>\r\n<li>$150 Linksys Business LGS116P 16-Port Desktop Gigabit Ethernet PoE+ Unmanaged Network Switch I Metal Enclosure $150</li>\r\n<li>Ispy to start</li>\r\n<li><a href=\"https://forums.zoneminder.com/viewtopic.php?f=36&amp;t=26906\" class=\"uri\">https://forums.zoneminder.com/viewtopic.php?f=36&amp;t=26906</a> 115 lines of bash</li>\r\n<li>When event ends on ZM yolo is run on a random 10 images for that event (Person Dog Cat Car)</li>\r\n<li>if an object is detected we look to see if two Android phones via MAC on network</li>\r\n<li>if they are on the network it means somebody is home so events are throttled to 1/1hr max</li>\r\n<li>if nobody is home then original image/object detected from event is sent to email</li>\r\n<li>zones</li>\r\n<li>zones preclusion</li>\r\n<li>Video <a href=\"https://rmccurdy.com/scripts/videos/rmccurdy_com/ZoneMinder_Yolo_Yolov2_Darknet_Script_Plugin.mp4\" class=\"uri\">https://rmccurdy.com/scripts/videos/rmccurdy_com/ZoneMinder_Yolo_Yolov2_Darknet_Script_Plugin.mp4</a></li>\r\n</ul>\r\n<h3 id=\"issues\">Issues:</h3>\r\n<ul>\r\n<li>rain, spiderwebs, shadows, Car lights (preclusion zones)</li>\r\n<li>full motion capture is -6hrs 16gig</li>\r\n<li>smearing ( lower FPS on cam and make sure ZM has higher framerate then the cam make sure not to use Source Type:ffmpeg and use remote or try both)</li>\r\n<li><code>journalctl -f -t DARKNET.service</code> (shows nothing...@#%ing systemd)</li>\r\n<li>night time</li>\r\n</ul>\r\n<h2 id=\"more-notes\">More Notes:</h2>\r\n<p>Start with one zone at a time and raise/test sensitive KISS...don\'t setup like 4 zones and expect to trouble shoot anything. I used my Android to do a lot of tweaking. I also want to sort out &quot;night&quot; mode config so after night mode kicks in a different config is automatically applied.</p>\r\n<p>Use low quality for motion detection and drop frame rate of cam to lower than max of ZM for little to no smearing and I also set &quot;Alarm Frame Count to 2&quot; and &quot;overload ignore frame count to 4&quot; but I think it\'s more about Alarm Frame Count..I can\'t be sure..</p>\r\n<p>Explanation of overload ignore frame count<br />\r\nReport this post Quote<br />\r\nPost by bb99 » Thu May 10, 2012 5:22 pm</p>\r\n<p>For sudden changes to the environment, no better tool then Overload Frame Ignore Count. Your fps determines these settings but at 10 fps with Overload Frame Ignore Count set to 4, it only ignores .4 seconds. In other words if a drastic change to the lighting (such as a car with headlights on in darkness) passes within the monitors view it will ignore the number of frames you specify before processing for motion detection.</p>\r\n<h3 id=\"alarm-frame-count\">Alarm Frame Count</h3>\r\n<p>This option allows you to specify how many consecutive alarm frames must occur before an alarm event is generated. The usual, and default, value is 1 which implies that any alarm frame will cause or participate in an event. You can enter any value up to 16 here to eliminate bogus events caused perhaps by screen flickers or other transients. Values over 3 or 4 are unlikely to be useful however. Please note that if you have statistics recording enabled then currently statistics are not recorded for the first ‘Alarm Frame Count’-1 frames of an event. So if you set this value to 5 then the first 4 frames will be missing statistics whereas the more usual value of 1 will ensure that all alarm frames have statistics recorded.</p>\r\n<p><a href=\"https://forums.zoneminder.com/viewtopic.php?f=36&amp;t=26222\" class=\"uri\">https://forums.zoneminder.com/viewtopic.php?f=36&amp;t=26222</a></p>\r\n<p>Windows software to get basic idea ( install face plugin )<br />\r\n<a href=\"https://www.ispyconnect.com/plugins.aspx\" class=\"uri\">https://www.ispyconnect.com/plugins.aspx</a></p>\r\n<h2 id=\"videos\">Videos</h2>\r\n<ul>\r\n<li><a href=\"https://www.reddit.com/r/DIY/comments/713eka/heres_how_to_build_your_own_smart_security_camera/\" class=\"uri\">https://www.reddit.com/r/DIY/comments/713eka/heres_how_to_build_your_own_smart_security_camera/</a></li>\r\n<li><a href=\"https://www.hackster.io/hackerhouse/raspberry-pi-motion-tracking-gun-turret-77fb0b\" class=\"uri\">https://www.hackster.io/hackerhouse/raspberry-pi-motion-tracking-gun-turret-77fb0b</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=QfNvhPx5Px8\" class=\"uri\">https://www.youtube.com/watch?v=QfNvhPx5Px8</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=4eIBisqx9_g&amp;t=11m10s\" class=\"uri\">https://www.youtube.com/watch?v=4eIBisqx9_g&amp;t=11m10s</a></li>\r\n</ul>\r\n<h2 id=\"eazy-getting-started\">eazy getting started</h2>\r\n<ul>\r\n<li><a href=\"https://pjreddie.com/darknet/yolo/#small\" class=\"uri\">https://pjreddie.com/darknet/yolo/#small</a></li>\r\n</ul>\r\n<h3 id=\"getting-started-with-gpu\">getting started with GPU</h3>\r\n<p>you need 4gig+ GPU and new nvidia or old GCC4.9 /GCC4_NEEDED_FOR_DARKNET$ ls cpp-4.9_4.9.2-10_amd64.deb gcc-4.9_4.9.2-10_amd64.deb libasan1_4.9.2-10_amd64.deb libcloog-isl-dev_0.18.2-1+b2_amd64.deb libisl10_0.12.2-2_amd64.deb g++-4.9_4.9.2-10_amd64.deb gcc-4.9-base_4.9.2-10_amd64.deb libcloog-isl4_0.18.2-1+b2_amd64.deb libgcc-4.9-dev_4.9.2-10_amd64.deb libstdc++-4.9-dev_4.9.2-10_amd64.deb https://github.com/dasGringuen/debian9-install</p>\r\n<h3 id=\"gpu-memory-talk\">GPU memory talk</h3>\r\n<p><a href=\"https://groups.google.com/forum/#!msg/darknet/ZRAEvMmKzFc/iVZgibJiJQAJ\" class=\"uri\">https://groups.google.com/forum/#!msg/darknet/ZRAEvMmKzFc/iVZgibJiJQAJ</a></p>\r\n<h3 id=\"trying-to-gpu-prep-..\">trying to GPU prep ..</h3>\r\n<pre><code>apt-get remove --purge nvidia-cuda-toolkit libcudnn*\r\ndpkg -i libcudnn7_7.0.5.15-1+cuda9.1_amd64.deb\r\ndpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.1_amd64.deb\r\ndpkg -i cuda-repo-ubuntu1704-9-1-local_9.1.85-1_amd64\r\n\r\nsudo dpkg -i cuda-repo-ubuntu1704-9-1-local_9.1.85-1_amd64.deb\r\nsudo apt-key add /var/cuda-repo-9-1-local/7fa2af80.pub\r\nsudo apt-get update\r\nsudo apt-get install cuda\r\n\r\napt install libopencv-dev</code></pre>\r\n<h3 id=\"more-code-references\">more code/ references</h3>\r\n<ul>\r\n<li><a href=\"https://machinethink.net/blog/object-detection-with-yolo/\" class=\"uri\">https://machinethink.net/blog/object-detection-with-yolo/</a></li>\r\n<li><a href=\"https://ozone.network/apidocs/starter__example_8cpp_source.html\" class=\"uri\">https://ozone.network/apidocs/starter__example_8cpp_source.html</a></li>\r\n</ul>\r\n<h3 id=\"yolov2-training\">yolov2 training</h3>\r\n<ul>\r\n<li><a href=\"https://www.yuthon.com/2016/12/03/Train-YOLOv2-on-my-own-dataset/\" class=\"uri\">https://www.yuthon.com/2016/12/03/Train-YOLOv2-on-my-own-dataset/</a></li>\r\n</ul>\r\n<h3 id=\"dump-reolink-using-gpu-nvidia\">dump reolink using GPU nvidia</h3>\r\n<pre><code>ffmpeg -c:v h264_vdpau -rtsp_transport tcp -i &quot;rtsp://admin:@25.0.0.238/h264Preview_01_main&quot; -f segment -segment_time 60 -segment_format mp4  -reset_timestamps 1 -strftime 1 -c copy -map 0 dauphine-%Y%m%d-%H%M%S.mp4\r\n\r\nffmpeg -hwaccel vdpau -i rtsp://admin:@25.0.0.238/h264Preview_01_main -an -f rawvideo -y /dev/null</code></pre>\r\n<h3 id=\"complicated-zoneminder-plugins-and-bits-of-code\">complicated zoneminder plugins and bits of code :(</h3>\r\n<ul>\r\n<li><a href=\"https://gist.github.com/pliablepixels/34b484cca1c23ae9493c5d2e57f0bde8\" class=\"uri\">https://gist.github.com/pliablepixels/34b484cca1c23ae9493c5d2e57f0bde8</a></li>\r\n<li><a href=\"https://forums.zoneminder.com/viewtopic.php?f=36&amp;t=26222\" class=\"uri\">https://forums.zoneminder.com/viewtopic.php?f=36&amp;t=26222</a></li>\r\n<li><a href=\"https://through-the-interface.typepad.com/through_the_interface/2012/09/creating-a-face-recognising-security-cam-with-a-raspberry-pi-part-1.html\" class=\"uri\">https://through-the-interface.typepad.com/through_the_interface/2012/09/creating-a-face-recognising-security-cam-with-a-raspberry-pi-part-1.html</a></li>\r\n</ul>\r\n<h3 id=\"cheap-cams-720p-max\">cheap cams 720p max</h3>\r\n<ul>\r\n<li><a href=\"https://www.zmododirect.com/\" class=\"uri\">https://www.zmododirect.com/</a></li>\r\n</ul>\r\n<h3 id=\"save-as-video\">Save as video</h3>\r\n<p>By default ZoneMinder saves events as a sequence of images. It is however possible to save an event as a video file. Caution is advised when converting events to video as it is very strenuous on the ZoneMinder machine, however once you have converted an event it can be viewed/downloaded any time without additional stress on the server.</p>\r\n<p>First, make sure you have <code>OPT_FFMPEG</code> under Options -&gt; Images set to yes (checked).</p>\r\n<p>If necessary, set the proper full path for the ffmpeg executable in <code>PATH_FFMPEG</code> (ex.: <code>/usr/bin/ffmpeg</code>)</p>\r\n<p>Open up the default view for an event and Click the video link located in the top left corner</p>\r\n<p>Choose a video export file type and click generate.</p>\r\n<p>Download the video to your machine. If video files have already been generated you will see them listed at the bottom of the page.</p>\r\n<p>When an event gets a video file encoded for it you can choose to automatically include that event with any future exports. For a more detailed explanation on how to select and export events investigate How to export download and view events</p>\r\n',36,0,0,'CC-BY-SA','CCTV,Security Camera System,YOLO,Object Recognition',0,0,1),
(2535,'2018-04-20','2017-2018 New Years Eve show part 4',12357,'Part four of the sixth annual HPR New Year Show.','<h2 id=\"hpr-nye-2017---4\">HPR NYE 2017 - 4</h2>\r\n<ul>\r\n<li><p>Ken Fallon is testing booger sized components<br />\r\n<a href=\"https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity\" class=\"uri\">https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity</a></p></li>\r\n<li><p>urandom-podcast.info mentioned - AGAIN</p></li>\r\n<li>Pi &amp; SBC discussion</li>\r\n<li>Google &amp; Amazon privacy concerns</li>\r\n<li>Mrs Xoxe joins in</li>\r\n<li>We speak about Autism some more, Death of Salesman. Selling yourself to get interviews. Unemployment. Those who are resistant to change are doomed to perish</li>\r\n<li>Babylon Berlin, BFFs, Black Mirror</li>\r\n<li>Senior citizens &amp; technology</li>\r\n<li>Keeping current with software &amp; O/S\'s</li>\r\n<li><p><a href=\"https://www.youtube.com/results?search_query=the+mighty+boosh+the+moon+\" class=\"uri\">https://www.youtube.com/results?search_query=the+mighty+boosh+the+moon+</a></p></li>\r\n<li>Robot vaccuum sweepers</li>\r\n<li>Children make amazing pets</li>\r\n<li><p>RoomBAAAS</p></li>\r\n<li>Joe Ress asks for Linux 2018 predictions</li>\r\n<li>Is the traditional PC market fading?</li>\r\n<li><p>Linux &amp; mobile devices<br />\r\n<a href=\"https://ubports.com/\" class=\"uri\">https://ubports.com/</a></p></li>\r\n<li>What will it take for an opensource mobile device to gain market share?</li>\r\n<li><p>Librem5 - <a href=\"https://puri.sm/shop/librem-5/\" class=\"uri\">https://puri.sm/shop/librem-5/</a></p></li>\r\n<li><p>More opensource mobile device discussion</p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR new year show 2017',0,0,1),
(2519,'2018-03-29','the_remora Builds a character in Edge of the Empire',1330,'I Sit down and Build a Character for Edge of the Empire using Oggdudes Character Generator','<ul>\r\n<li><p>Link to the <a href=\"https://db4sgowjqfwig.cloudfront.net/campaigns/155068/assets/835617/KombarConall-Human-BountyHunter.pdf?1520193790\">Character Sheet</a></p></li>\r\n<li>Link to Edge of the Empire by Fantasy Flight Games: <a href=\"https://www.fantasyflightgames.com/en/products/star-wars-edge-of-the-empire/\" class=\"uri\">https://www.fantasyflightgames.com/en/products/star-wars-edge-of-the-empire/</a></li>\r\n<li><p>Link to the Tool I used to Build this character: <a href=\"https://www.legendsofthegalaxy.com/Oggdude/\" class=\"uri\">https://www.legendsofthegalaxy.com/Oggdude/</a>. I recommend using the web installer.</p></li>\r\n<li><p>Unofficial Organized play similar to D&amp;D Adventurers League: <a href=\"https://www.legendsofthegalaxy.com/\" class=\"uri\">https://www.legendsofthegalaxy.com/</a></p></li>\r\n</ul>\r\n<p>Thanks and sorry the Audio was so bad, I was forced to use Bluetooth headphones because Audacity would not take audio from my USB headset.</p>',363,95,1,'CC-BY-SA','Roleplaying',0,0,1),
(2545,'2018-05-04','2017-2018 New Years Eve show part 5',8433,'Part five of the sixth annual HPR New Year Show.','<h2 id=\"hpr-nye-2017---5\">HPR NYE 2017 - 5</h2>\r\n<ul>\r\n<li><p>Guitar Talk, Les Pauls, Strats, etc. SG, Flying V, Squire ... etc.</p></li>\r\n<li><p>Social media discussion, Twitter, Mastodon, G+</p></li>\r\n<li><p>Opensource licenses</p></li>\r\n<li><p>More autism discussion</p></li>\r\n<li><p>New drugs that make you live longer</p></li>\r\n<li><p>notalion participated in <a href=\"https://www.holidayhackchallenge.com/2017/\" class=\"uri\">https://www.holidayhackchallenge.com/2017/</a></p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR new year show 2017',0,0,1),
(2555,'2018-05-18','2017-2018 New Years Eve show part 6',11722,'Part six of the sixth annual HPR New Year Show.','<h2 id=\"hpr-nye-2017---6\">HPR NYE 2017 - 6</h2>\r\n<ul>\r\n<li><p>Using Ubuntu with snaps or just using Debian for a home server</p></li>\r\n<li><p>Building a home firewall</p></li>\r\n<li><p>What is the best firewall distro</p></li>\r\n<li><p>Maybe just learn ip tables</p></li>\r\n<li><p>Fun with virtualization</p></li>\r\n<li><p><a href=\"https://riscv.org/\" class=\"uri\">https://riscv.org/</a><br />\r\nA completely Free Hardware CPU that is gaining press</p></li>\r\n<li><p><a href=\"https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html\" class=\"uri\">https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html</a><br />\r\nAn ARM processor with built-in FPGA</p></li>\r\n<li><p>Western Digital moving to RISC-V:<br />\r\n<a href=\"https://www.forbes.com/sites/tiriasresearch/2017/12/06/western-digital-gives-a-billion-unit-boost-to-open-source-risc-v-cpu/\" class=\"uri\">https://www.forbes.com/sites/tiriasresearch/2017/12/06/western-digital-gives-a-billion-unit-boost-to-open-source-risc-v-cpu/</a></p></li>\r\n<li><p><a href=\"https://www.youtube.com/watch?v=ATZls4lbwmM&amp;t=20m27s\" class=\"uri\">https://www.youtube.com/watch?v=ATZls4lbwmM&amp;t=20m27s</a><br />\r\nWD CEO announces their ambition to switch fully to RISC-V</p></li>\r\n<li><p><a href=\"https://www.heropunch.io/\" class=\"uri\">https://www.heropunch.io/</a><br />\r\nCreating free hardware for decentralized communications, mobile applications and mesh networks</p></li>\r\n<li><p><a href=\"https://www.scuttlebutt.nz/\" class=\"uri\">https://www.scuttlebutt.nz/</a><br />\r\nSecure Scuttlebutt, or SSB, is built for intermittent networks and drop points</p></li>\r\n<li><p>A little bit about <a href=\"https://ipfs.io/\" class=\"uri\">https://ipfs.io/</a></p></li>\r\n<li><p>Content-Addressable Networks are important if you\'re in intermittent or high-latency mesh networks</p></li>\r\n<li><p>And in passing: <a href=\"https://twister.net.co/\" class=\"uri\">https://twister.net.co/</a></p></li>\r\n<li><p>BitTorrent + blockchain + DHT social networking, not entirely dissimilar to SSB<br />\r\n<a href=\"https://www.bitmessage.org/\" class=\"uri\">https://www.bitmessage.org/</a></p></li>\r\n<li><p>clacke was wrong, it doesn\'t store messages in a blockchain</p></li>\r\n<li>3D printers: <a href=\"https://podnutz.com/category/themakerz/\" class=\"uri\">https://podnutz.com/category/themakerz/</a>\r\n<ul>\r\n<li>podcast <a href=\"https://www.tinkercad.com/\" class=\"uri\">https://www.tinkercad.com/</a></li>\r\n<li>cloud CAD <a href=\"https://www.autodesk.com/products/fusion-360/overview\" class=\"uri\">https://www.autodesk.com/products/fusion-360/overview</a></li>\r\n<li>cloud CAD <a href=\"https://www.onshape.com/\" class=\"uri\">https://www.onshape.com/</a></li>\r\n<li>cloud CAD <a href=\"https://www.thingiverse.com/\" class=\"uri\">https://www.thingiverse.com/</a></li>\r\n<li>&quot;the Facebook of 3D model sharing&quot; <a href=\"https://cults3d.com/\" class=\"uri\">https://cults3d.com/</a></li>\r\n<li>3D model sharing<br />\r\n<a href=\"https://www.cnx-software.com/2017/05/25/melon-s3-fpga-arduino-raspberry-pi-compatible-board-is-programmable-over-wifi-using-esp8266-wisoc/\" class=\"uri\">https://www.cnx-software.com/2017/05/25/melon-s3-fpga-arduino-raspberry-pi-compatible-board-is-programmable-over-wifi-using-esp8266-wisoc/</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://www.cnx-software.com/2015/11/24/fleafpga-uno-board-combines-a-lattice-fpga-arduino-uno-form-factor-hdmi-output-and-an-esp8266-wifi-module/\" class=\"uri\">https://www.cnx-software.com/2015/11/24/fleafpga-uno-board-combines-a-lattice-fpga-arduino-uno-form-factor-hdmi-output-and-an-esp8266-wifi-module/</a></p></li>\r\n<li><p>Amiga and <a href=\"https://www.morphos-team.net/\" class=\"uri\">https://www.morphos-team.net/</a><br />\r\nMorphOS is a proprietary implementation of AmigaOS for PowerPC, but uses free software components from e.g. AROS</p></li>\r\n<li><p><a href=\"https://c64upgra.de/c-one/\" class=\"uri\">https://c64upgra.de/c-one/</a><br />\r\nA C64 reimplementation project that turned into an FPGA platform that can even act as an Amiga</p></li>\r\n<li><p>Ken is awake and is going to solder</p></li>\r\n<li><p>Netminer mentions <a href=\"https://www.youtube.com/channel/UCu4uiUtALy1ILAxNh7TGsmQ\" class=\"uri\">https://www.youtube.com/channel/UCu4uiUtALy1ILAxNh7TGsmQ</a></p></li>\r\n<li><p><a href=\"https://www.youtube.com/watch?v=NHthWtKWXJE\" class=\"uri\">https://www.youtube.com/watch?v=NHthWtKWXJE</a></p></li>\r\n<li><p>The kit ken is making  <a href=\"https://www.bitscope.com/product/BS05/\" class=\"uri\">https://www.bitscope.com/product/BS05/</a></p></li>\r\n<li><p>Ken suggest a show on Bitscope + Raspberry Pi + aurduino tutorial series</p></li>\r\n<li><p>The PCB <a href=\"https://kenfallon.com/files/pcb.jpg\" class=\"uri\">https://kenfallon.com/files/pcb.jpg</a></p></li>\r\n<li><p><a href=\"https://www.ebay.com/p/40w-Co2-Laser-Engraving-Cutting-Machine-Engraver-Cutter-USB-Port/18011066781?iid=322496119440\" class=\"uri\">https://www.ebay.com/p/40w-Co2-Laser-Engraving-Cutting-Machine-Engraver-Cutter-USB-Port/18011066781?iid=322496119440</a></p></li>\r\n<li><p><a href=\"https://www.hobby-hour.com/electronics/resistorcalculator.php\" class=\"uri\">https://www.hobby-hour.com/electronics/resistorcalculator.php</a></p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR new year show 2017',0,0,1),
(2565,'2018-06-01','2017-2018 New Years Eve show part 7',10683,'Part seven of the sixth annual HPR New Year Show. This is the last one.','<h2 id=\"hpr-nye-2017---7\">HPR NYE 2017 - 7</h2>\r\n<ul>\r\n<li><p><a href=\"https://www.youtube.com/channel/UCuiDNTaTdPTGZZzHm0iriGQ\" class=\"uri\">https://www.youtube.com/channel/UCuiDNTaTdPTGZZzHm0iriGQ</a></p></li>\r\n<li><p><a href=\"https://www.imdb.com/title/tt0460681/\" class=\"uri\">https://www.imdb.com/title/tt0460681/</a></p></li>\r\n<li><p><a href=\"https://www.youtube.com/channel/UCggHoXaj8BQHIiPmOxezeWA\" class=\"uri\">https://www.youtube.com/channel/UCggHoXaj8BQHIiPmOxezeWA</a></p></li>\r\n<li><p>history buffs</p></li>\r\n<li><p><a href=\"https://www.indiegogo.com/projects/gpd-pocket-7-0-umpc-laptop-ubuntu-or-win-10-os-laptop--2#/\" class=\"uri\">https://www.indiegogo.com/projects/gpd-pocket-7-0-umpc-laptop-ubuntu-or-win-10-os-laptop--2#/</a></p></li>\r\n<li><p>Why are they killing off the 32 bit distros?</p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Year_2038_problem\" class=\"uri\">https://en.wikipedia.org/wiki/Year_2038_problem</a></p></li>\r\n<li><p><a href=\"https://archive.org/details/hpr1037\" class=\"uri\">https://archive.org/details/hpr1037</a></p></li>\r\n<li><p>Ken Fallon the fastest solderer in the West. Able to solder a component tester in a single show...</p></li>\r\n</ul>',159,121,1,'CC-BY-SA','HPR new year show 2017',0,0,1),
(2781,'2019-04-01','HPR Community News for March 2019',3564,'HPR Volunteers talk about shows released and comments posted in March 2019','\r\n<h2>Spoiler</h2>\r\n<p>Dave has not left and HPR has not sold out</p>\r\n<h2>New hosts</h2>\r\n<p>\r\nWelcome to our new hosts: <br />\r\n\r\n    <a href=\"https://hackerpublicradio.org/correspondents/0373.html\" target=\"_blank\">Floyd C Poynter</a>, \r\n    <a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a>, \r\n    <a href=\"https://hackerpublicradio.org/correspondents/0375.html\" target=\"_blank\">minnix</a>.\r\n</p>\r\n\r\n<h2>Last Month\'s Shows</h2>\r\n<table id=\"t01\" summary=\"Last month\'s shows\">\r\n    <tr>\r\n    <th>Id</th>\r\n    <th>Day</th>\r\n    <th>Date</th>\r\n    <th>Title</th>\r\n    <th>Host</th>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2760\" target=\"_blank\">2760</a></strong></td>\r\n    <td>Fri</td>\r\n    <td>2019-03-01</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2760\" target=\"_blank\">What is VNF</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2761\" target=\"_blank\">2761</a></strong></td>\r\n    <td>Mon</td>\r\n    <td>2019-03-04</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2761\" target=\"_blank\">HPR Community News for February 2019</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2762\" target=\"_blank\">2762</a></strong></td>\r\n    <td>Tue</td>\r\n    <td>2019-03-05</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2762\" target=\"_blank\">What You Really Are</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2763\" target=\"_blank\">2763</a></strong></td>\r\n    <td>Wed</td>\r\n    <td>2019-03-06</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2763\" target=\"_blank\">Deepgeek explains SPF records</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2764\" target=\"_blank\">2764</a></strong></td>\r\n    <td>Thu</td>\r\n    <td>2019-03-07</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2764\" target=\"_blank\">Personal password algorithms</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2765\" target=\"_blank\">2765</a></strong></td>\r\n    <td>Fri</td>\r\n    <td>2019-03-08</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2765\" target=\"_blank\">My YouTube Subscriptions #3</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2766\" target=\"_blank\">2766</a></strong></td>\r\n    <td>Mon</td>\r\n    <td>2019-03-11</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2766\" target=\"_blank\">Disk enumeration on Linux</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2767\" target=\"_blank\">2767</a></strong></td>\r\n    <td>Tue</td>\r\n    <td>2019-03-12</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2767\" target=\"_blank\">Djvu and other paperless document formats</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2768\" target=\"_blank\">2768</a></strong></td>\r\n    <td>Wed</td>\r\n    <td>2019-03-13</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2768\" target=\"_blank\">Writing Web Game in Haskell - Planetary statuses</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2769\" target=\"_blank\">2769</a></strong></td>\r\n    <td>Thu</td>\r\n    <td>2019-03-14</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2769\" target=\"_blank\">Quick Review of the AstroAI WH5000A Multimeter</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2770\" target=\"_blank\">2770</a></strong></td>\r\n    <td>Fri</td>\r\n    <td>2019-03-15</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2770\" target=\"_blank\">Navigating the maze of RPG books</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2771\" target=\"_blank\">2771</a></strong></td>\r\n    <td>Mon</td>\r\n    <td>2019-03-18</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2771\" target=\"_blank\">Embedding hidden text in Djvu files</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2772\" target=\"_blank\">2772</a></strong></td>\r\n    <td>Tue</td>\r\n    <td>2019-03-19</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2772\" target=\"_blank\">My applications and software part 3</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2773\" target=\"_blank\">2773</a></strong></td>\r\n    <td>Wed</td>\r\n    <td>2019-03-20</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2773\" target=\"_blank\">Lead/Acid Battery Maintenance and Calcium Charge Voltage</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0373.html\" target=\"_blank\">Floyd C Poynter</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2774\" target=\"_blank\">2774</a></strong></td>\r\n    <td>Thu</td>\r\n    <td>2019-03-21</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2774\" target=\"_blank\">CJDNS and Yggdrasil</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2775\" target=\"_blank\">2775</a></strong></td>\r\n    <td>Fri</td>\r\n    <td>2019-03-22</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2775\" target=\"_blank\">My YouTube Subscriptions #4</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2776\" target=\"_blank\">2776</a></strong></td>\r\n    <td>Mon</td>\r\n    <td>2019-03-25</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2776\" target=\"_blank\">Sub-Plots In Storytelling</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2777\" target=\"_blank\">2777</a></strong></td>\r\n    <td>Tue</td>\r\n    <td>2019-03-26</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2777\" target=\"_blank\">The quest for the perfect laptop.</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2778\" target=\"_blank\">2778</a></strong></td>\r\n    <td>Wed</td>\r\n    <td>2019-03-27</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2778\" target=\"_blank\">Functor and applicative in Haskell</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2779\" target=\"_blank\">2779</a></strong></td>\r\n    <td>Thu</td>\r\n    <td>2019-03-28</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2779\" target=\"_blank\">HTTP, IPFS, and torrents</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a></td>\r\n    </tr>\r\n    <tr valign=\"top\">\r\n    <td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2780\" target=\"_blank\">2780</a></strong></td>\r\n    <td>Fri</td>\r\n    <td>2019-03-29</td>\r\n    <td><a href=\"https://hackerpublicradio.org/eps.php?id=2780\" target=\"_blank\">My SBC Nextcloud Install Pt. 1 - Hardware</a></td>\r\n    <td><a href=\"https://hackerpublicradio.org/correspondents/0375.html\" target=\"_blank\">minnix</a></td>\r\n    </tr>\r\n</table>\r\n\r\n<h2>Comments this month</h2>\r\n\r\n<p>These are comments which have been made during the past month, either to shows\r\nreleased during the month or to past shows.<br/>\r\nThere are 24 comments in total.</p>\r\n<p>There are 3 comments on\r\n3 previous shows:</p>\r\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2708#comments\" target=\"_blank\">hpr2708</a></strong>\r\n(2018-12-19) \"<em>Ghostscript</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2708#2\" target=\"_blank\">Comment 2</a>:\r\nKlaatu on 2019-03-07:\r\n\"You\'re welcome\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2749#comments\" target=\"_blank\">hpr2749</a></strong>\r\n(2019-02-14) \"<em>Lostnbronx and Klaatu commentary from episode 2743</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2749#1\" target=\"_blank\">Comment 1</a>:\r\nKlaatu on 2019-03-07:\r\n\"We are stupid\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2759#comments\" target=\"_blank\">hpr2759</a></strong>\r\n(2019-02-28) \"<em>Cleaning the Potentiometers on a Peavey Bandit 65</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2759#2\" target=\"_blank\">Comment 2</a>:\r\nJon Kulp on 2019-03-02:\r\n\"Never too much about 80s gear\"</li></ul><br/>\r\n</li></ul>\r\n<p>There are 21 comments on 12 of this month\'s shows:</p>\r\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2761#comments\" target=\"_blank\">hpr2761</a></strong>\r\n(2019-03-04) \"<em>HPR Community News for February 2019</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2761#1\" target=\"_blank\">Comment 1</a>:\r\nMike Ray on 2019-03-04:\r\n\"Media embedded show notes\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2762#comments\" target=\"_blank\">hpr2762</a></strong>\r\n(2019-03-05) \"<em>What You Really Are</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2762#1\" target=\"_blank\">Comment 1</a>:\r\nTuula on 2019-03-05:\r\n\"oh, wow\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2763#comments\" target=\"_blank\">hpr2763</a></strong>\r\n(2019-03-06) \"<em>Deepgeek explains SPF records</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2763#1\" target=\"_blank\">Comment 1</a>:\r\nb-yeezi on 2019-03-09:\r\n\"Thanks for the help\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2763#2\" target=\"_blank\">Comment 2</a>:\r\npauleb on 2019-03-11:\r\n\"Great explanation!\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2764#comments\" target=\"_blank\">hpr2764</a></strong>\r\n(2019-03-07) \"<em>Personal password algorithms</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2764#1\" target=\"_blank\">Comment 1</a>:\r\nSteve on 2019-03-12:\r\n\"LessPass\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2766#comments\" target=\"_blank\">hpr2766</a></strong>\r\n(2019-03-11) \"<em>Disk enumeration on Linux</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2766#1\" target=\"_blank\">Comment 1</a>:\r\nJoel D on 2019-03-12:\r\n\"The Letters C and F\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2766#2\" target=\"_blank\">Comment 2</a>:\r\nKlaatu on 2019-03-13:\r\n\"Thanks for the info Joel\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2766#3\" target=\"_blank\">Comment 3</a>:\r\nAhuka on 2019-03-14:\r\n\"Old drive letters\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2768#comments\" target=\"_blank\">hpr2768</a></strong>\r\n(2019-03-13) \"<em>Writing Web Game in Haskell - Planetary statuses</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2768#1\" target=\"_blank\">Comment 1</a>:\r\nKlaatu on 2019-03-15:\r\n\"Agog and aghast\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2768#2\" target=\"_blank\">Comment 2</a>:\r\nTuula on 2019-03-15:\r\n\"this made my week\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2773#comments\" target=\"_blank\">hpr2773</a></strong>\r\n(2019-03-20) \"<em>Lead/Acid Battery Maintenance and Calcium Charge Voltage</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0373.html\" target=\"_blank\">Floyd C Poynter</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2773#1\" target=\"_blank\">Comment 1</a>:\r\nTuula on 2019-03-20:\r\n\"Good to know\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2773#2\" target=\"_blank\">Comment 2</a>:\r\nNybill on 2019-03-20:\r\n\"Good Info\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2774#comments\" target=\"_blank\">hpr2774</a></strong>\r\n(2019-03-21) \"<em>CJDNS and Yggdrasil</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2774#1\" target=\"_blank\">Comment 1</a>:\r\nTuula on 2019-03-21:\r\n\"fascinating\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2774#2\" target=\"_blank\">Comment 2</a>:\r\nBrian-in-Ohio on 2019-03-21:\r\n\"more shows\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2774#3\" target=\"_blank\">Comment 3</a>:\r\nnorrist on 2019-03-21:\r\n\"gentoo\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2774#4\" target=\"_blank\">Comment 4</a>:\r\nGavtres on 2019-03-25:\r\n\"IPv6 end to end encryption\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2776#comments\" target=\"_blank\">hpr2776</a></strong>\r\n(2019-03-25) \"<em>Sub-Plots In Storytelling</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2776#1\" target=\"_blank\">Comment 1</a>:\r\noperat0r on 2019-03-25:\r\n\"fun stuff\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2777#comments\" target=\"_blank\">hpr2777</a></strong>\r\n(2019-03-26) \"<em>The quest for the perfect laptop.</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2777#1\" target=\"_blank\">Comment 1</a>:\r\nBeeza on 2019-03-29:\r\n\"Computer Requirements Specification\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2778#comments\" target=\"_blank\">hpr2778</a></strong>\r\n(2019-03-27) \"<em>Functor and applicative in Haskell</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2778#1\" target=\"_blank\">Comment 1</a>:\r\nBeeza on 2019-03-28:\r\n\"Intuitiveness Of Haskell\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2778#2\" target=\"_blank\">Comment 2</a>:\r\nTuula on 2019-03-29:\r\n\"thanks and great idea\"</li></ul><br/>\r\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2779#comments\" target=\"_blank\">hpr2779</a></strong>\r\n(2019-03-28) \"<em>HTTP, IPFS, and torrents</em>\"\r\nby <a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a>.</li>\r\n<li style=\"list-style: none; display: inline\">\r\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2779#1\" target=\"_blank\">Comment 1</a>:\r\nHipstre on 2019-03-31:\r\n\"Enjoyed it, sounded great\"</li></ul><br/>\r\n</li></ul>\r\n\r\n<h2>Mailing List discussions</h2>\r\n<p>\r\nPolicy decisions surrounding HPR are taken by the community as a whole. This\r\ndiscussion takes place on the <a href=\"https://hackerpublicradio.org/maillist\"\r\ntarget=\"_blank\">Mail List</a> which is open to all HPR listeners and\r\ncontributors. The discussions are open and available on the HPR server under\r\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/\">Mailman</a>.\r\n</p>\r\n<p>The threaded discussions this month can be found here:</p>\r\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-March/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-March/thread.html</a>\r\n\r\n\r\n<h2>Any other business</h2>\r\n<h3 id=\"mintcast\">Mint Cast</h3>\r\n<p>\r\nDid we mention the <a href=\"https://mintcast.org/\">The Mint Cast</a> ?\r\n</p>\r\n<h3 id=\"sorry-yannick\">Sorry Yannick!</h3>\r\n<p>There was a misunderstanding about Yannick’s show 2740 when it was discussed on the February Community News. The show was about <code>Pop_OS!</code>, a subject Yannick had also spoken about previously on an edition of the <em>TuxJam</em> podcast.</p>\r\n<p>The misunderstanding was that we thought this might have gone against guidelines on <a href=\"https://hackerpublicradio.org/stuff_you_need_to_know.php#syndication\">syndication</a>, where in fact it did not. It was merely a case of the same subject being spoken about by the same person on two different podcasts.</p>\r\n<h3 id=\"change-to-the-host-page\">Change to the host page</h3>\r\n<p>The page for each host:</p>\r\n<pre><code>https://hackerpublicradio.org/correspondents/NNNN.html</code></pre>\r\n<p>which used to contain a list of all shows contributed by that host, with the show notes, has been made more compact. It now displays only the title, release date, duration, series (if applicable), tags and the show summary. Clicking on the title takes you to the show itself. Note that the host id number <em>NNNN</em> must be 4 digits with leading zeroes.</p>\r\n<p>The list of all hosts in alphabetic order can be seen at <a href=\"https://hackerpublicradio.org/correspondents/index.html\" class=\"uri\">https://hackerpublicradio.org/correspondents/index.html</a> (navigate with the top menu bar: <em>Home</em>→<em>About</em>→<em>Hosts</em>). From there clicking on the host number takes you to the page for that host. There’s also a link to the host page from the page for each show.</p>\r\n<h3 id=\"community-news-calendar\">Community News Calendar</h3>\r\n<p>An iCal calendar has been prepared which holds the next 12 recording dates for the Community News. This calendar can be downloaded and opened by suitable clients such as the Thunderbird mail client or Google Calendar. The file is linked from <a href=\"https://hackerpublicradio.org/about.php\" class=\"uri\">https://hackerpublicradio.org/about.php</a> and may be downloaded from <a href=\"https://www.hackerpublicradio.org/HPR_Community_News_schedule.ics\" class=\"uri\">https://www.hackerpublicradio.org/HPR_Community_News_schedule.ics</a>.</p>\r\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\r\n<p>Thanks to the following contributors for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken Fallon</a>, <a href=\"https://hackerpublicradio.org/correspondents/0235.html\">NYbill</a>, <a href=\"https://hackerpublicradio.org/correspondents/0215.html\">windigo</a></b></p>\r\n<p>Over the period tags and/or summaries have been added to 32 shows which were without them.</p>\r\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\r\n',159,83,1,'CC-BY-SA','Community News',0,0,1),
(2806,'2019-05-06','HPR Community News for April 2019',6840,'HPR Volunteers talk about shows released and comments posted in April 2019','\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<small><table id=\"t01\" summary=\"Last month\'s shows\">\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 valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2781\" target=\"_blank\">2781</a></strong></td>\n<td>Mon</td>\n<td>2019-04-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2781\" target=\"_blank\">HPR Community News for March 2019</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0159.html\" target=\"_blank\">HPR Volunteers</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2782\" target=\"_blank\">2782</a></strong></td>\n<td>Tue</td>\n<td>2019-04-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2782\" target=\"_blank\">Never stop gaming</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2783\" target=\"_blank\">2783</a></strong></td>\n<td>Wed</td>\n<td>2019-04-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2783\" target=\"_blank\">The Windows \"Shutdown.exe\" Command Explained</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2784\" target=\"_blank\">2784</a></strong></td>\n<td>Thu</td>\n<td>2019-04-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2784\" target=\"_blank\">The Yamaha Disklavier</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2785\" target=\"_blank\">2785</a></strong></td>\n<td>Fri</td>\n<td>2019-04-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2785\" target=\"_blank\">What is uCPE</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2786\" target=\"_blank\">2786</a></strong></td>\n<td>Mon</td>\n<td>2019-04-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2786\" target=\"_blank\">My YouTube Channels</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2787\" target=\"_blank\">2787</a></strong></td>\n<td>Tue</td>\n<td>2019-04-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2787\" target=\"_blank\">NodeJS Part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2788\" target=\"_blank\">2788</a></strong></td>\n<td>Wed</td>\n<td>2019-04-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2788\" target=\"_blank\">Looping in Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2789\" target=\"_blank\">2789</a></strong></td>\n<td>Thu</td>\n<td>2019-04-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2789\" target=\"_blank\">Pacing In Storytelling</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2790\" target=\"_blank\">2790</a></strong></td>\n<td>Fri</td>\n<td>2019-04-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2790\" target=\"_blank\">My YouTube Subscriptions #5</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2791\" target=\"_blank\">2791</a></strong></td>\n<td>Mon</td>\n<td>2019-04-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2791\" target=\"_blank\">LUKS like truecrypt</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2792\" target=\"_blank\">2792</a></strong></td>\n<td>Tue</td>\n<td>2019-04-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2792\" target=\"_blank\">Playing around with text to speech synthesis on Linux</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2793\" target=\"_blank\">2793</a></strong></td>\n<td>Wed</td>\n<td>2019-04-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2793\" target=\"_blank\">bash coproc: the future (2009) is here</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2794\" target=\"_blank\">2794</a></strong></td>\n<td>Thu</td>\n<td>2019-04-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2794\" target=\"_blank\">Interview with Martin Wimpress</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick the french guy from Switzerland</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2795\" target=\"_blank\">2795</a></strong></td>\n<td>Fri</td>\n<td>2019-04-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2795\" target=\"_blank\">Dead Earth</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2796\" target=\"_blank\">2796</a></strong></td>\n<td>Mon</td>\n<td>2019-04-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2796\" target=\"_blank\">IRS,Credit Freezes and Junk Mail Ohh My!</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2797\" target=\"_blank\">2797</a></strong></td>\n<td>Tue</td>\n<td>2019-04-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2797\" target=\"_blank\">Writing Web Game in Haskell - Simulation at high level</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2798\" target=\"_blank\">2798</a></strong></td>\n<td>Wed</td>\n<td>2019-04-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2798\" target=\"_blank\">Should Podcasters be Pirates ?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2799\" target=\"_blank\">2799</a></strong></td>\n<td>Thu</td>\n<td>2019-04-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2799\" target=\"_blank\">building an arduino programmer</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2800\" target=\"_blank\">2800</a></strong></td>\n<td>Fri</td>\n<td>2019-04-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2800\" target=\"_blank\">My YouTube Subscriptions #6</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2801\" target=\"_blank\">2801</a></strong></td>\n<td>Mon</td>\n<td>2019-04-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2801\" target=\"_blank\">Guitar Set Up Part 1.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a></td>\n</tr>\n<tr valign=\"top\">\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2802\" target=\"_blank\">2802</a></strong></td>\n<td>Tue</td>\n<td>2019-04-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2802\" target=\"_blank\">Mid-life (?) assessment</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n</table></small>\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 23 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 4 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2457#comments\" target=\"_blank\">hpr2457</a></strong>\n(2018-01-02) \"<em>Getting ready for my new Macbook Pro</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2457#1\" target=\"_blank\">Comment 1</a>:\nBart on 2019-04-25:\n\"aren\'t you forgetting a hub?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2739#comments\" target=\"_blank\">hpr2739</a></strong>\n(2019-01-31) \"<em>Bash Tips - 19</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=2739#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2019-04-01:\n\"local\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2774#comments\" target=\"_blank\">hpr2774</a></strong>\n(2019-03-21) \"<em>CJDNS and Yggdrasil</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2774#5\" target=\"_blank\">Comment 5</a>:\nclacke on 2019-04-01:\n\"Yggdrasil pronunciation\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2779#comments\" target=\"_blank\">hpr2779</a></strong>\n(2019-03-28) \"<em>HTTP, IPFS, and torrents</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2779#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2019-04-01:\n\"audio quality\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 19 comments on 7 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2783#comments\" target=\"_blank\">hpr2783</a></strong>\n(2019-04-03) \"<em>The Windows \"Shutdown.exe\" Command Explained</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2783#1\" target=\"_blank\">Comment 1</a>:\nBubba on 2019-04-04:\n\"Shutdown.exe command\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2783#2\" target=\"_blank\">Comment 2</a>:\nClaudioM on 2019-04-06:\n\"Also Useful with PsExec from Sysinternals Suite\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2784#comments\" target=\"_blank\">hpr2784</a></strong>\n(2019-04-04) \"<em>The Yamaha Disklavier</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-04-04:\n\"music to ears\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#2\" target=\"_blank\">Comment 2</a>:\nJan on 2019-04-04:\n\"Translations\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#3\" target=\"_blank\">Comment 3</a>:\nJon Kulp on 2019-04-04:\n\"Ok but it wasn\'t the \"Well-Tempered Piano\"\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#4\" target=\"_blank\">Comment 4</a>:\nGavtres on 2019-04-05:\n\"So cool!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#5\" target=\"_blank\">Comment 5</a>:\nDave Morriss on 2019-04-05:\n\"What a wonderful device!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#6\" target=\"_blank\">Comment 6</a>:\nGuy on 2019-04-06:\n\"How far away are you?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#7\" target=\"_blank\">Comment 7</a>:\nJon Kulp on 2019-04-06:\n\"\"or\" not \"of\"\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#8\" target=\"_blank\">Comment 8</a>:\nWindigo on 2019-04-14:\n\"Library of Congress\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#9\" target=\"_blank\">Comment 9</a>:\nJon Kulp on 2019-04-15:\n\"A great summer job\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2784#10\" target=\"_blank\">Comment 10</a>:\nJon Kulp on 2019-04-18:\n\"Older near-perfect player pianos\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2787#comments\" target=\"_blank\">hpr2787</a></strong>\n(2019-04-09) \"<em>NodeJS Part 1</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=2787#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-04-10:\n\"looking for more\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2789#comments\" target=\"_blank\">hpr2789</a></strong>\n(2019-04-11) \"<em>Pacing In Storytelling</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2789#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-04-11:\n\"what about non-fictional stories\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2793#comments\" target=\"_blank\">hpr2793</a></strong>\n(2019-04-17) \"<em>bash coproc: the future (2009) is here</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2793#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2019-04-22:\n\"I really enjoyed this!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2796#comments\" target=\"_blank\">hpr2796</a></strong>\n(2019-04-22) \"<em>IRS,Credit Freezes and Junk Mail Ohh My!</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=2796#1\" target=\"_blank\">Comment 1</a>:\ncogoman on 2019-04-25:\n\"Credit card security\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2798#comments\" target=\"_blank\">hpr2798</a></strong>\n(2019-04-24) \"<em>Should Podcasters be Pirates ?</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2798#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-04-24:\n\"Yarrr, record me episodes\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2798#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2019-04-27:\n\"Memories of early podcasts and pirate radio\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2798#3\" target=\"_blank\">Comment 3</a>:\nDudeNamedBen on 2019-04-29:\n\"Da Podfather, Adam Curry\"</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/2019-April/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-April/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-on-wikipedia\">HPR on Wikipedia</h3>\n<p>Please see the draft at <a href=\"https://en.wikipedia.org/w/index.php?title=Draft:Hacker_Public_Radio\" class=\"uri\">https://en.wikipedia.org/w/index.php?title=Draft:Hacker_Public_Radio</a></p>\n<p>If you are not already a host, then please help improve the site.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0338.html\">Tony Hughes</a></b></p>\n<p>Over the period tags and/or summaries have been added to 36 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2522,'2018-04-03','Flashbacks In Storytelling',656,'Lostnbronx takes a breezy look at the narrative technique of the flashback.','<p>Lostnbronx looks at flashbacks, flashforwards, plays-within-plays, and dream sequences as techniques of both good and bad storytelling.</p>',107,105,0,'CC-0','storytelling,flashback,lostnbronx',0,0,1),
(2523,'2018-04-04','Run Linux on a Windows Box',809,'HP Stream book with windows 10','<p>A short show about running Debian on windows.<br />\r\nYes it really works.</p>\r\n<p>What you have do first<br />\r\n<a href=\"https://askubuntu.com/questions/966184/new-installation-of-windows-10-and-ubuntu-from-windows-store-error/966214\" class=\"uri\">https://askubuntu.com/questions/966184/new-installation-of-windows-10-and-ubuntu-from-windows-store-error/966214</a></p>\r\n<p>and here<br />\r\n<a href=\"https://www.bing.com/search?q=how+to+run+windows+powershell+as+adminstrator&amp;form=EDGTCT&amp;qs=PF&amp;cvid=75a5d473a2d140ea841cb0457e42026f&amp;refig=ba953cbaebae48c8b5d1c46080dafd1a&amp;cc=DE&amp;setlang=en-US\" class=\"uri\">https://www.bing.com/search?q=how+to+run+windows+powershell+as+adminstrator&amp;form=EDGTCT&amp;qs=PF&amp;cvid=75a5d473a2d140ea841cb0457e42026f&amp;refig=ba953cbaebae48c8b5d1c46080dafd1a&amp;cc=DE&amp;setlang=en-US</a></p>',129,0,1,'CC-BY-SA','Windows Subsystem for Linux,WSL,Debian,PowerShell',0,0,1),
(2524,'2018-04-05','General problem solver',1088,'Brief look into general problem solver system and how to use it solve simple problems','<ul>\r\n<li><p>Building Problem Solvers by Kenneth D. Forbus and Johan de Kleer: <a href=\"https://www.qrg.northwestern.edu/BPS/readme.html\" class=\"uri\">https://www.qrg.northwestern.edu/BPS/readme.html</a></p></li>\r\n<li><p>Paradigms of Artificial Intelligence Programming by Peter Norvig: <a href=\"https://github.com/norvig/paip-lisp\" class=\"uri\">https://github.com/norvig/paip-lisp</a></p></li>\r\n<li><p>Engineer\'s Journey, Tuula\'s blog: <a href=\"https://engineersjourney.wordpress.com/\" class=\"uri\">https://engineersjourney.wordpress.com/</a></p></li>\r\n<li><p>Blog entry about solving n-queens puzzle with general problem solver: <a href=\"https://engineersjourney.wordpress.com/2018/03/09/n-queens-puzzle-solved-in-hy-and-cps/\" class=\"uri\">https://engineersjourney.wordpress.com/2018/03/09/n-queens-puzzle-solved-in-hy-and-cps/</a></p></li>\r\n</ul>',364,0,0,'CC-BY-SA','lisp, artificial intelligence, problem solving',0,0,1),
(2526,'2018-04-09','Gnu Awk - Part 10',2535,'More about arrays in Gnu Awk','<h1 id=\"gnu-awk---part-10\">Gnu Awk - Part 10</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the tenth episode of the &quot;<a href=\"https://hackerpublicradio.org/series/0094.html\" title=\"Learning Awk\">Learning Awk</a>&quot; series which is being produced by <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" title=\"b-yeezi\">b-yeezi</a> and myself.</p>\r\n<p>In this episode I want to talk more about the use of arrays in GNU Awk and then I want to examine some real-world examples of the use of <code>awk</code>.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>The notes for rest of this episode are available <a href=\"https://hackerpublicradio.org/eps/hpr2526/full_shownotes.html\">here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/html_node/index.html\"><em>GNU Awk User\'s Guide</em></a></li>\r\n<li>Previous shows in this series on HPR:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2114\">&quot;<em>Gnu Awk - Part 1</em>&quot;</a> - episode 2114</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2129\">&quot;<em>Gnu Awk - Part 2</em>&quot;</a> - episode 2129</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2143\">&quot;<em>Gnu Awk - Part 3</em>&quot;</a> - episode 2143</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2163\">&quot;<em>Gnu Awk - Part 4</em>&quot;</a> - episode 2163</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2184\">&quot;<em>Gnu Awk - Part 5</em>&quot;</a> - episode 2184</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2238\">&quot;<em>Gnu Awk - Part 6</em>&quot;</a> - episode 2238</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2330\">&quot;<em>Gnu Awk - Part 7</em>&quot;</a> - episode 2330</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2438\">&quot;<em>Gnu Awk - Part 8</em>&quot;</a> - episode 2438</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2476\">&quot;<em>Gnu Awk - Part 9</em>&quot;</a> - episode 2476</li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2526/full_shownotes.epub\">ePub version of these notes</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2526/full_shownotes.pdf\">PDF version of these notes</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2526/awk10_ex1.awk\">awk10_ex1.awk</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2526/awk10_ex2.awk\">awk10_ex2.awk</a></li>\r\n</ul></li>\r\n</ul>',225,94,1,'CC-BY-SA','Awk utility,Awk language,gawk,arrays',0,0,1),
(2527,'2018-04-10','Reviews Vs. Critiques',839,'Lostnbronx contrasts \"reviews\" with \"critiques\", which are not the same things.','<p>Lostnbronx takes a quick look at what it is that constitutes &quot;reviews&quot; of stories (be they books, films, TV shows, audio dramas, whatever) as opposed to &quot;critiques&quot; of them.</p>\r\n<p>How do these two things differ, and what are their purposes? Is one more important than the other? Why does it even matter?</p>',107,105,0,'CC-BY-SA','storytelling,review,critique,lostnbronx,film,writing,audio drama,tv',0,0,1),
(2528,'2018-04-11','CCTV with DARKNET',863,'I got over my current setup for CCTV with Darknet and YOLO','<p>Twitter: @operat0r</p>\r\n<p>DERP SHELL CODE <a href=\"https://rmccurdy.com/scripts/DARKNET\" class=\"uri\">https://rmccurdy.com/scripts/DARKNET</a></p>\r\n',36,0,1,'CC-BY-SA','CCTV,Darknet,YOLO',0,0,1),
(2531,'2018-04-16','Plot And Story',866,'Lostnbronx shares some thoughts about the nature of plot and story in storytelling.','<p>Lostnbronx talks about plot and story, as well as characters and backgrounds, in storytelling of all types. These things are closely tied together, and a problem with one can easily be a problem with all.</p>',107,105,0,'CC-0','storytelling,plot,story,character,background,lostnbronx',0,0,1),
(2529,'2018-04-12','What\'s in my podcatcher',592,'listing of podcasts I listen to ','<p>List of podcasts as read directly from my podcast player/catcher -- sorry, no official notes (I will do better next time, I promise).</p>',365,75,1,'CC-BY-SA','podcasts,feed',0,0,1),
(2532,'2018-04-17','Podcrawl Glasgow 2018',1584,'The TuxJam guys introduce and invite the HPR community to join them at Podcrawl Glasgow in July 2018','<h1 id=\"hpr-podcrawl-2018\">HPR Podcrawl 2018</h1>\r\n<p><a href=\"https://twitter.com/thelovebug\"><strong>Dave</strong></a>, <a href=\"https://twitter.com/kevie49\"><strong>Kevie</strong></a>, and <a href=\"https://twitter.com/mcnalu\"><strong>Andrew</strong></a> - hosts of <a href=\"https://tuxjam.otherside.network/\"><strong>TuxJam</strong></a> - take you via a slightly elongated route to an upcoming event.</p>\r\n<h2 id=\"the-event\">The event</h2>\r\n<p><a href=\"https://kmacphail.blogspot.co.uk/2018/02/podcrawl-glasgow-2018.html\"><strong>Podcrawl Glasgow 2018</strong></a> <strong>Saturday 28 July 2018 from 18:00</strong> <strong>starting at The State Bar, Holland Street, G2 4NG</strong></p>\r\n<h2 id=\"daves-mistake\">Dave\'s mistake</h2>\r\n<p>A minor review of the 2017 event leaves a bitter taste in the mouth of the Big Jessie.</p>\r\n<h2 id=\"who-is-the-event-for\">Who is the event for?</h2>\r\n<p>Kevie lists various groups of people who might be interested in going. Dave adds a couple more. So does Andrew. The upshot is: anyone human. Oh, and guide dogs. But probably not children after 19:00 (it\'s a Scottish pubs/licensing thing).</p>\r\n<h2 id=\"audio-from-the-event\">Audio from the event</h2>\r\n<p>Andrew suggests that we may be able to record or even stream audio from the Podcrawl. Dave apparently is an expert in such things, and tries to impress the others with science. Kevie suggests we wait towards the end of the event when it\'s quieter.</p>\r\n<h2 id=\"tactical-chunder\">Tactical chunder</h2>\r\n<p>Dave is reminded - for a second time - about his mishap. Andrew decides to go into nauseating (pardon the pun) detail.</p>\r\n<h2 id=\"how-will-you-find-us\">How will you find us?</h2>\r\n<p>Some of us will be wearing Podcrawl t-shirts, although the company that originally produced the t-shirts sadly has gone out of business.</p>\r\n<p>Andrew keeps Ken Fallon happy by suggesting that listeners record a response to this show with any suggestions about recording at live events.</p>\r\n<p>Kevie tells us where the event will be (see the top of the notes)</p>\r\n<p>We\'ll be posting through the event on Twitter/GNUsocial/Diaspora with the hashtag #PodcrawlGlasgow. Use any one of these to find out where we\'ll be at any time.</p>\r\n<p>Non-techy people are welcome. Cigars will be provided.</p>\r\n<p>If you\'re in a band, come along as well... we have plenty of opportunity for promotion of your music!</p>\r\n<p>Andrew reminds us that this is the fifth Podcrawl in Glasgow.</p>\r\n<p>Kevie says that if you\'re coming into Glasgow <strong>before</strong> 18:00, we\'d love to meet up with you beforehand. We believe that all three of us (plus Dave\'s good lady) will be there from early/mid afternoon.</p>\r\n<h2 id=\"contact-us\">Contact Us</h2>\r\n<p>You can contact all three of us at the same time via tuxjam@otherside.network - let us know you\'re coming!</p>\r\n<h3 id=\"kevie\">Kevie</h3>\r\n<p>Twitter: <a href=\"https://twitter.com/kevie49\">@kevie49</a><br />\r\nDiaspora: <a href=\"https://diaspora.microdata.co.uk/u/kevie\">kevie@diaspora.microdata.co.uk</a><br />\r\nFediverse: <a href=\"https://community.highlandarrow.com/kevie\">kevie@community.highlandarrow.com</a></p>\r\n<h3 id=\"andrew\">Andrew</h3>\r\n<p>Fediverse: <a href=\"https://mastodon.me.uk/@mcnalu\">mcnalu@mastodon.me.uk</a><br />\r\nTwitter: <a href=\"https://twitter.com/mcnalu\">@mcnalu</a></p>\r\n<h3 id=\"dave\">Dave</h3>\r\n<p>Twitter: <a href=\"https://twitter.com/thelovebug\">@thelovebug</a><br />\r\nFediverse: <a href=\"https://s.wefamlee.be/thelovebug\">thelovebug@s.wefamlee.be</a></p>\r\n<h2 id=\"other-podcasts\">Other podcasts?</h2>\r\n<p>Dave asks Andrew about a podcast featuring three guys talking about Creative Commons and Linux: <a href=\"https://tuxjam.otherside.network/\"><strong>TuxJam</strong></a></p>\r\n<p>Dave asks Kevie about a short-form music podcast featuring a couple of pieces of music from a single artist: <a href=\"https://ccjam.otherside.network/\"><strong>CCJam</strong></a></p>\r\n<p>Andrew asks Dave about a husband and wife podcast with a live show that goes out every Friday night from South Yorkshire in England: <a href=\"https:://thebugcast.org/\"><strong>The Bugcast</strong></a> - it\'s award-winning, has a <a href=\"https://thebugcast.org/live\">live chatroom</a>, and is 10-years old!</p>\r\n<h2 id=\"thanks-for-listening\">Thanks for listening!</h2>\r\n<p>Thanks to <a href=\"https://www.torridonlive.com/\"><strong>Torriden</strong></a> for allowing us to play their track Drinking Away. We hope to see you at Podcrawl in July for a beer or malt (or two)!</p>\r\n\r\n',314,0,0,'CC-BY-SA','podcrawl, event, beer, whisky, cigars, Creative Commons, music, Linux, tech, chunder',0,0,1),
(2533,'2018-04-18','Burp Suite / ABCMouse Game',1504,'I got over my approach for most mobile/web app pentesting','<p><a href=\"https://rmccurdy.com/scripts/videos/rmccurdy_com/HPR_ABC.mp4\" class=\"uri\">https://rmccurdy.com/scripts/videos/rmccurdy_com/HPR_ABC.mp4</a></p>\r\n<p>more burp/android videos:</p>\r\n<ul>\r\n<li><p><a href=\"https://rmccurdy.com/scripts/videos/rmccurdy_com/Star%20Wars%20Galaxy%20of%20Heroes%20Hacking%20Failsause.mp4\">https://rmccurdy.com/scripts/videos/rmccurdy_com/Star%20Wars%20Galaxy%20of%20Heroes%20Hacking%20Failsause.mp4</a></p></li>\r\n<li><p><a href=\"https://rmccurdy.com/scripts/videos/rmccurdy_com/Burp%20Suite%20SSL%20ProxyDroid%20Android%20Hacking%20Games%202017.mp4\">https://rmccurdy.com/scripts/videos/rmccurdy_com/Burp%20Suite%20SSL%20ProxyDroid%20Android%20Hacking%20Games%202017.mp4</a></p></li>\r\n</ul>',36,0,0,'CC-BY-SA','burp suite,android,pentesting',0,0,1),
(2536,'2018-04-23','Lostnbronx examines points-of-view and tenses in storytelling.',1013,'Lostnbronx examines points-of-view and tenses in storytelling.','<p>Lostnbronx takes a breezy look at narrative points-of-view, as well as temporal tenses in storytelling. What are they, how do they differ, and why might one be better than another in a particular situation?</p>',107,105,0,'CC-0','storytelling,stories,pov,tense,writing,lostnbronx',0,0,1),
(2534,'2018-04-19','Moving to Office 365 (and painting the ceiling)',1888,'Knightwise talks about moving his company email to Office 365','<p>A couple of weeks ago we moved to a new house and I had some time on my hands to talk to you guys while painting the ceiling. Moving was very much on the forefront of my mind since I also recently moved my company\'s Email platform to Office 365. As a cross platform slider with a foot in each major operating system I decided to give you my first impressions of the new platform (and upset the GNU-purists) with my review.</p>',111,0,0,'CC-BY-SA','office, microsoft, windows, 365, move, Migrate, google, Gmail',0,0,1),
(2537,'2018-04-24','Recording HPR on the fly Part II',208,'In which I update the recommendation from HPR 1877: Just use Audio Recorder!','<p>This is an update to <a href=\"https://hackerpublicradio.org/eps.php?id=1877\">hpr1877 :: Recording HPR on the fly on your Android phone</a>. I thought that was two years ago, but wow it\'s even two and a half years ago, back in late 2015.</p>\r\n<p>Updated recommendation! Back in #1877 I said that you could go with this app because it has these nice functions, or with that app because it has these other things. Well, there\'s no longer any need for trade-offs. Just go to f-droid, install \r\n<a href=\"https://f-droid.org/packages/com.github.axet.audiorecorder/\">Audio Recorder</a> and you\'re good to go!</p>\r\n<p>I installed it in two minutes, recorded a two-minute episode on how great it seems to be, and then I recorded another three episodes and I can confirm that it\'s pretty great. You\'ve got the record/pause control available on the lock screen, it can save in FLAC, you can define the naming pattern it should use for the files, and you can tell it where to store its files.</p>\r\n<p>Some apps just insist on saving everything in internal storage, and that can run out pretty quick. Meanwhile I\'ve got 30 GB left on my SD card that I\'m struggling to make apps make use of.</p>\r\n<p>And finally, it also has a rename function (unlike my previous recommendation uRecord!), so you can conveniently, right in the app without finding the files through some other means, change the file name to reflect what it was that you were recording, so that you\'re not in the situation where one month later you\'re looking at a dozen files with just dates and times and need to listen to all of them to figure out which one it is you want.</p>\r\n<p>It even has an automatic skip silence function, but that\'s pretty useless for the places I record in. :-D</p>\r\n<p>When I said \"cool waveform\" I meant that it\'s displaying the recorded waveform on the screen as it records. Not that useful, but it\'s just part of the overall really nice polish of the app.</p>',311,0,0,'CC-BY-SA','android, recording, hpr',0,0,1),
(2538,'2018-04-25','My geeky plans for the new house.',1613,'Knightwise talks about the new geek infrastructure in his house','<p>Moving house gives you plenty of possibilities. While painting the Living room I talk about the geeky infrastructure of my new house and how I plan to set it up.</p>',111,0,1,'CC-BY-SA','ubiquity, wifi, network, firewall, server',0,0,1),
(2542,'2018-05-01','How I helped my dad run a static website using SparkleShare',728,'In which I describe my setup of SparkleShare and GitLab Pages to maintain a static website','<p>My <a href=\"https://social.heldscal.la/clacke/tag/hprep\">#hprep</a> tag up on Heldscalla serves as inspiration for times like this, when I should just record something while I have the chance. Suggest more topics for me to orate about and I\'ll put them up there!</p>\r\n<p>In this episode I\'m talking about how I\'ve set up <a href=\"https://www.sparkleshare.org/\">SparkleShare</a> (web site currently down, try the <a href=\"https://web.archive.org/web/20180320114552/https://www.sparkleshare.org/\">archived site</a> if it\'s still down when you\'re reading this) and <a href=\"https://about.gitlab.com/features/pages/\">GitLab Pages</a> to allow my dad to tinker with a static web site locally on his machine and automatically get the changes up on the official URL without having to bother with any manual steps (at least on the happy path).</p>\r\n<p>Errata: Oops, I said Jekyll uses Python. It uses Ruby.</p>\r\n<p>TL;DL: We have two directories, two git repos. He doesn\'t have to know about git. He plays around in the staging directory first, looks at the test site how it turned out, when he\'s happy he just copies the files over to the production directory and they go live. SparkleShare automatically pushes to <a href=\"https://gitlab.com/\">gitlab.com</a> (I didn\'t say it outright in the episode, but yeah, I\'m using the hosted service -- that\'s basically the point of this mode of doing things, minimal setup, responsibility and maintenance for me), and GitLab CI runs <a href=\"https://jekyllrb.com/\">Jekyll</a>  (use the static site generator of your choice) to copy files over for deploying, and finally  GitLab Pages deploys the new site.</p>\r\n<p>I believe all of this took me less than two hours to set up, effective time, once I got around to it (and was in the same time zone as my dad\'s computer). Don\'t forget to add your verification TXT record in the DNS.</p>',311,0,0,'CC-BY-SA','sparkleshare, static website, gitlab pages',0,0,1),
(2547,'2018-05-08','MSYS2',657,'In which I talk briefly about the history of MSYS2 and Cygwin and why you might want MSYS2','<p>In the beginning there was <a href=\"https://cygwin.com/\">Cygwin</a>, by <a href=\"https://en.wikipedia.org/wiki/Cygnus_Solutions\">Cygnus Solutions</a> (later acquired by Red Hat), then came <a href=\"https://mingw.org/wiki/msys\">msys</a>, a lightweight derivative with no package manager, no fancy integration tools, just the bare minimum necessary to support a gcc compiler and the GNU autotools.</p>\r\n<p><a href=\"https://www.msys2.org/\">msys2</a> is cygwin minus the package manager plus an adaptation of the <a href=\"https://www.archlinux.org/pacman/\">pacman</a> package manager from <a href=\"https://www.archlinux.org/\">Arch</a>, and a big archive of packages of all kinds. It offers a friendlier command-line experience than Cygwin does.</p>\r\n<p>I failed to mention here that msys was explicitly made to support the <a href=\"https://mingw.org/\">MinGW</a> (Minimalist GNU for Windows) flavor of GCC, which is intended for building native Windows applications. GCC for Windows has two types of output, <code>cygwin</code> or <code>mingw</code>, where <code>cygwin</code> is for source code that expects POSIX-y facilities and <code>mingw</code> is for code that should compile (possibly with some minor adjustments for C dialect) equally well under GCC and Microsoft Visual C, and should produce about the same output.</p>',311,0,0,'CC-BY-SA','msys2, cygwin, windows, command-line, pacman, package manager',0,0,1),
(2552,'2018-05-15','What is stow?',721,'How does stow work, why would you want it and what are its limitations?','<p><a href=\"https://www.gnu.org/software/stow/\">stow</a> was perfected in 2002 with stow 1.3.3. Then it was silent for 9 years, and in 2011 stow 2.1.0 came out. It received a few updates until stow 2.2.2 in 2015, but don\'t worry. It\'s still relevant, and it won\'t eat your homework. I don\'t even know what these 2.x versions are about. You still just <code>stow mything</code>, <code>stow -R mything</code> and <code>stow -D mything</code> like you always did.</p>\r\n<p>If stow is too limiting to you, listen to <a href=\"https://hackerpublicradio.org/eps.php?id=2198\">hpr2198 :: How awesome is Guix and why will it take over the world</a> about its big brother, which has all of the advantages of stow except radical simplicity, and none of the drawbacks.</p>\r\n<p>For a shorter and more practical episode on Guix, see <a href=\"https://hackerpublicradio.org/eps.php?id=2308\">hpr2308 :: Everyday package operations in Guix</a>.</p>\r\n',311,0,0,'CC-BY-SA','stow, package manager',0,0,1),
(2539,'2018-04-26','Interview - Austin Lee',2739,'operat0r Interviews Austin Lee','<p><a href=\"https://www.youtube.com/watch?v=ktbiNmxFuZs\" class=\"uri\">https://www.youtube.com/watch?v=ktbiNmxFuZs</a></p>\r\n<p>RAW:<br />\r\n<a href=\"https://rmccurdy.com/stuff/Austen_Lee.zip\" class=\"uri\">https://rmccurdy.com/stuff/Austen_Lee.zip</a></p>\r\n',36,78,1,'CC-BY-SA','interview',0,0,1),
(2540,'2018-04-27','28 - TLS 1.3',1122,'TLS 1.3 is the newest protocol standard for secure communications on the Web.','<p>TLS 1.3 was just adopted, and it provides improved security for all Web communications. We take a look at what the protocol says and look at the controversies around its adoption. <a href=\"https://www.zwilnik.com/?page_id=980\" class=\"uri\">https://www.zwilnik.com/?page_id=980</a></p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://www.theregister.co.uk/2017/02/27/blue_coat_chokes_on_chrome_encryption_update/\" class=\"uri\">https://www.theregister.co.uk/2017/02/27/blue_coat_chokes_on_chrome_encryption_update/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/POODLE\" class=\"uri\">https://en.wikipedia.org/wiki/POODLE</a></li>\r\n<li><a href=\"https://www.cyberscoop.com/tls-1-3-weakness-financial-industry-ietf/\" class=\"uri\">https://www.cyberscoop.com/tls-1-3-weakness-financial-industry-ietf/</a></li>\r\n<li><a href=\"https://tlseminar.github.io/tls-13/\" class=\"uri\">https://tlseminar.github.io/tls-13/</a></li>\r\n<li><a href=\"https://twit.tv/shows/security-now\" class=\"uri\">https://twit.tv/shows/security-now</a></li>\r\n<li><a href=\"https://www.sophos.com/en-us/company/podcasts.aspx\" class=\"uri\">https://www.sophos.com/en-us/company/podcasts.aspx</a></li>\r\n<li><a href=\"https://www.schneier.com\" class=\"uri\">https://www.schneier.com</a></li>\r\n<li><a href=\"https://blog.cryptographyengineering.com\" class=\"uri\">https://blog.cryptographyengineering.com</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=980\" class=\"uri\">https://www.zwilnik.com/?page_id=980</a></li>\r\n</ul>',198,74,0,'CC-BY-SA','Ephemeral Diffie-Hellman, Encryption, TLS',0,0,1),
(2541,'2018-04-30','Microphone Wind Screen Demo',384,'Lostnbronx demonstrates the effectiveness of his new microphone wind screen.','<p>This is just a quick demo of my new microphone wind screen muff. Though you can still hear some wind noise getting through when especially sharp gusts roll by, I think you\'ll agree the difference with and without the screen is dramatic.</p>\r\n<p>The Movo is not perfect, and will not stop all wind noise on a very blustery day, but this kind of screen is essential for outdoor recording. The only editing I did on this track was a fade-in and out, and transcoding it from wav to flac (which was then transcoded at HPR into other formats).</p>\r\n<hr />\r\n<ul>\r\n<li><p>RECORDER: Tascam DR-40 Digital Recorder<br />\r\n<a href=\"https://tascam.com/product/dr-40/\" class=\"uri\">https://tascam.com/product/dr-40/</a></p></li>\r\n<li><p>WIND SCREEN: Movo WS9 Furry Outdoor Microphone Windscreen Muff (Portable Digital Recorders)<br />\r\n<a href=\"https://www.movophoto.com/products/movo-ws9-furry-outdoor-microphone-windscreen-portable-recorders\" class=\"uri\">https://www.movophoto.com/products/movo-ws9-furry-outdoor-microphone-windscreen-portable-recorders</a></p></li>\r\n</ul>',107,0,0,'CC-BY-SA','recording,wind screen,muff,outdoors,lostnbronx',0,0,1),
(2557,'2018-05-22','Styx -- The Purely Functional Static Site Generator',832,'For the Fractalide web site, we are using Styx as a site generator. Here\'s a bit of how and why.','<p>I switched phones, and complained about the microphone. It probably made a greater difference that I was recording in 16 kHz Vorbis, because I was on a fresh install of Audio Recorder. Always double-check your settings, and apologies for the quality.</p>\r\n\r\n<hr/>\r\n<p>I am currently in the process of converting <a href=\"https://github.com/fractalide/fractalide-website-styx/\" target=\"_blank\">our website</a> from <a href=\"https://gohugo.io/\" target=\"_blank\">Hugo</a> to Styx.</p>\r\n\r\n<p><a href=\"https://styx-static.github.io/styx-site/\" target=\"_blank\">Styx</a> is s static site generator written entirely in the <a href=\"https://nixos.org/nix/\" target=\"_blank\">Nix</a> language. It is able to figure out exactly what pages need to be rebuilt depending on what you changed in your page source and data sources, and all intermediate results are stored in the Nix store.</p>\r\n\r\n<p>The parsing of <a href=\"https://www.methods.co.nz/asciidoc/\" target=\"_blank\">AsciiDoc</a> and <a href=\"https://fletcherpenney.net/multimarkdown/\">(multi)Markdown</a> is done by external tools, but the templating and layouts is all Nix.</p>\r\n\r\n<p>I thought I may have dreamed the bit about <a href=\"https://nest.pijul.com/pmeunier/nix-rust\" target=\"_blank\">carnix</a> or <a href=\"https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/rust/default.nix\" target=\"_blank\">buildRustPackage</a> parsing TOML within Nix, because I couldn’t find any evidence of them ever having done that. But then I discovered it was in <a href=\"https://github.com/mozilla/nixpkgs-mozilla/blob/master/lib/parseTOML.nix\" target=\"_blank\">nixpkgs-mozilla</a> I had seen it! That’s Mozilla’s overlay for nixpkgs, which makes Rust Nightly always available in Nix, so it’s kind of Nix’s <a href=\"https://www.rustup.rs/\" target=\"_blank\">rustup</a> equivalent. So yeah, I guess I had dreamed who did it, but not that <em>somebody</em> did it. :-)</p>\r\n',311,0,0,'CC-BY-SA','nix, styx, static site generator',0,0,1),
(2543,'2018-05-02','Home Theater - Part 1 Hardware',530,'I go over my Home Theater / Media setup starting with Hardware','<ul>\r\n<li><p>Onkyo TX-NR575 7.2 Channel Network A/V Receiver<br />\r\n<a href=\"https://www.amazon.com/Onkyo-TX-NR575-Channel-Network-Receiver/dp/B06XVFY3M8\" class=\"uri\">https://www.amazon.com/Onkyo-TX-NR575-Channel-Network-Receiver/dp/B06XVFY3M8</a></p></li>\r\n<li>Onkyo Android App<br />\r\n</li>\r\n<li><p>Zoomtak 2.4G Wireless Mini Keyboard Multifunctional Backlit with Infrared Remote Learning for Android Tv Box, IPTV,HTPC, PS3, Xbox 360, Windows, MAC, Linux OS<br />\r\n<a href=\"https://www.amazon.com/gp/product/B06VW7XFQZ\" class=\"uri\">https://www.amazon.com/gp/product/B06VW7XFQZ</a></p></li>\r\n<li><p>CyberPower CP1500AVRLCD Intelligent LCD UPS System, 1500VA/900W, 12 Outlets, AVR, Mini-Tower<br />\r\n<a href=\"https://smile.amazon.com/gp/product/B000FBK3QK\" class=\"uri\">https://smile.amazon.com/gp/product/B000FBK3QK</a></p></li>\r\n<li><p>PowerPanel Conf file:</p></li>\r\n</ul>\r\n<pre><code>cat /etc/pwrstatd.conf\r\npowerfail-delay = 60\r\npowerfail-active = yes\r\npowerfail-cmd-path = /usr/local/bin/pwrstatd-powerfail.sh\r\npowerfail-duration = 0\r\npowerfail-shutdown = no\r\n\r\nlowbatt-delay = 30\r\nlowbatt-active = yes\r\nlowbatt-cmd-path = /usr/local/bin/pwrstatd-lowbatt.sh\r\nlowbatt-duration = 0\r\nlowbatt-shutdown = yes\r\nenable-alarm = yes\r\nshutdown-sustain = 60\r\nturn-ups-off = yes\r\nlowbatt-threshold = 15\r\n\r\nups-polling-rate = 1\r\nups-retry-rate = 10\r\nprohibit-client-access = no</code></pre>\r\n<ul>\r\n<li><p>Bluetooth Receiver Transmitter, Keedox V4.0 Bluetooth Music Receiver Transmitter Wireless Audio Receiver Stereo Transmitter with aptx for Headphones Car TV<br />\r\n<a href=\"https://smile.amazon.com/gp/product/B00VJTIMIS/\" class=\"uri\">https://smile.amazon.com/gp/product/B00VJTIMIS/</a></p></li>\r\n<li><p>iRunzo NFC Foldable On Ear Wireless Bluetooth Headset Sports Headphones with Microphone Bass Stereo CSR4.1 180 Days Standby Gym Pedometer APP 3.5mm AUX Cable for iPhone Mac iPad Black<br />\r\n<a href=\"https://smile.amazon.com/gp/product/B01JU59W3Q\" class=\"uri\">https://smile.amazon.com/gp/product/B01JU59W3Q</a></p></li>\r\n</ul>',36,0,0,'CC-BY-SA','Home Theater',0,0,1),
(2544,'2018-05-03','How I prepared episode 2493: YouTube Subscriptions - update',1978,'In show 2493 I listed some of my YT subscriptions - here\'s how','<h1 id=\"how-i-prepared-episode-2493-youtube-subscriptions---update\">How I prepared episode 2493: YouTube Subscriptions - update</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>In show <a href=\"https://hackerpublicradio.org/eps.php?id=2493\" title=\"YouTube Subscriptions - update\">2493</a> I listed a number of the YouTube channels I watch. Some of what I did to prepare the notes was to cut and paste information from YouTube pages, but the basic list itself was generated programmatically. I thought the process I used might be of interest to somebody so I am describing it here.</p>\r\n<h2 id=\"components\">Components</h2>\r\n<p>I needed four components to achieve what I wanted:</p>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/subscription_manager\" title=\"YouTube Subscription Manager page\">YouTube subscription list</a> (only available in OPML format as far as I know)</li>\r\n<li>The <a href=\"https://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html\" title=\"xmlstarlet documentation\"><code>xmlstarlet</code></a> tool to parse the OPML</li>\r\n<li><a href=\"https://www.template-toolkit.org/\" title=\"Template Toolkit\">Template Toolkit</a> which I used to generate Markdown</li>\r\n<li>The <code>pandoc</code> document converter tool to generate HTML</li>\r\n</ul>\r\n<p>I will talk a little about the first three components in this episode in order to provide an overview.</p>\r\n<h2 id=\"full-length-notes\">Full-length notes</h2>\r\n<p>The full-length notes (available <a href=\"https://hackerpublicradio.org/eps/hpr2544/full_shownotes.html\">here</a>) contain details of the processes involved in building the list of channels.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>YouTube <a href=\"https://www.youtube.com/subscription_manager\"><em>Subscription Manager</em></a> page</li>\r\n<li>The <a href=\"https://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html\"><code>xmlstarlet</code></a> manual (HTML, single page)</li>\r\n<li><a href=\"https://www.template-toolkit.org/\"><em>Template Toolkit</em></a>\r\n<ul>\r\n<li><a href=\"https://www.template-toolkit.org/docs/manual/Plugins.html#section_Datafile\"><code>Template::Plugin::Datafile</code></a></li>\r\n<li><a href=\"https://www.template-toolkit.org/docs/manual/VMethods.html#method_replace\">Template Toolkit <code>replace</code> virtual method</a></li>\r\n</ul></li>\r\n<li>The <a href=\"https://pandoc.org/\"><code>pandoc</code></a> document converter</li>\r\n<li>Previous HPR shows referred to:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2202\"><em>hpr2202 :: Makers on YouTube</em></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2493\"><em>hpr2493 :: YouTube Subscriptions - update</em></a></li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2544/full_shownotes.html\">Detailed notes</a></li>\r\n<li>Example template file: <a href=\"https://hackerpublicradio.org/eps/hpr2544/yt_template.tpl\">yt_template.tpl</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','YouTube,OPML,XML,xmlstarlet,Template Toolkit',0,0,1),
(2548,'2018-05-09','Single Vs Multiple Characters',1050,'Lostnbronx looks at why single or multiple main characters are better in stories.','<p>Lostnbronx goes over the narrative technique of using one main character to tell a story, as opposed to using multiple characters. What advantage, if any, does so-called &quot;head-hopping&quot; have, over focusing on a single character at a time? Why is it sometimes better to do the opposite? And how can these different construction elements impact the story as a whole?</p>\r\n',107,105,0,'CC-BY-SA','storytelling,writing,characters,lostnbronx',0,0,1),
(2549,'2018-05-10','DVD ripping using old hardware',314,'How I put an older machine and a little cash to repurpose it.','<ol type=\"1\">\r\n<li>Had a tower with a bad motherboard.</li>\r\n<li>Wife found one at the Savers (Goodwill) for $8</li>\r\n<li>Board worked, but had no video</li>\r\n<li>Bought a 8mb video card for $10</li>\r\n<li>Power supply fan seized, $10,\r\n<ul>\r\n<li>Got a warning about danger of opening up a power supply.</li>\r\n</ul></li>\r\n<li>Distro should be on a USB key, and run headless\r\n<ul>\r\n<li>Easy way to back up the system</li>\r\n</ul></li>\r\n<li>Had Arch installed, no 32 bit support after end of 2017</li>\r\n<li>Installed Slackware, only working distribution for my hardware\r\n<ul>\r\n<li>Found it useful to have a script to chroot from the install media to the Slackware install.</li>\r\n<li>Added a boot delay to mkinitrc for usb, otherwise it would boot with a message about not finding <code>/mnt</code> in <code>/etc/fstab</code></li>\r\n</ul></li>\r\n<li>Set up ssh with alternative port</li>\r\n<li>Installed mplayer and tmux, and ripit with sbopkg\r\n<ul>\r\n<li>Mplayer to rip streams for movies and shows</li>\r\n<li>Tmux is my favorite for resuming from a different PC or mobile</li>\r\n</ul></li>\r\n<li>Needed a way to rip any media regardless of encryption\r\n<ul>\r\n<li>Only need libdvdcss to read</li>\r\n<li>Includes Disney (Star Wars, Tron)</li>\r\n</ul></li>\r\n<li>CD ripping was a bonus\r\n<ul>\r\n<li>Ripit to rip CDs</li>\r\n</ul></li>\r\n<li>Scripts are on Github</li>\r\n</ol>\r\n<p><a href=\"https://github.com/ricemark20/CD-DVD-ripping-on-Slackware\" class=\"uri\">https://github.com/ricemark20/CD-DVD-ripping-on-Slackware</a></p>\r\n<ol start=\"14\" type=\"1\">\r\n<li>Happy ripping!</li>\r\n</ol>',318,0,0,'CC-BY-SA','ripping, movies, hardware, repurpose',0,0,1),
(2550,'2018-05-11','Howto get started playing RPGs',1519,'Lostnbronx and Klaatu tag-team an intro to tabletop role-playing games [RPG]','<p>\r\nHave you ever wanted to start playing a tabletop RPG, but weren&#39;t sure where to start? In this one-hour episode, Lostnbronx and Klaatu introduce you to role-playing games, including what you need to have in order to get started, how to build a character, what a game session is like, and how to find other people to play with.\r\n</p>\r\n\r\n<p>\r\nSome resources mentioned in this episode:\r\n</p>\r\n\r\n<ul>\r\n<li>\r\n<p>The easy way in&#58; <strong>Dungeons &#38; Dragons</strong> 5th Edition <a href=\"https://dnd.wizards.com/products/tabletop-games/rpg-products/rpg_playershandbook\" target=\"_blank\">Player&#39;s Handbook</a></p>\r\n</li>\r\n<li>\r\n<p>A collection of free RPG systems <a href=\"https://brentnewhall.com/games/doku.php?id=start\" target=\"_blank\">Brent P. Newhall&#39;s Musæum of Fantastic Wonders</a>\r\n</p>\r\n</li>\r\n\r\n<li>\r\n<p>\r\nThe <a href=\"https://opend6.wikidot.com/d6-system-book\" target=\"_blank\">OpenD6</a> system is a free and open and very flexible game using only standard 6-sided die</p>\r\n</li>\r\n\r\n<li><p>\r\n<a href=\"https://www.dmsguild.com/product/175358/Caves-of-Shadow-30\" target=\"_blank\"> </a> is a good, albeit dated, introduction to RPG modules and gameplay in general. It won\'t exactly fit anything you play, but reading it through might clarify how a typical game works &#40;and actually it&#39;s pretty easy to adapt into a modern game like <a href=\"https://paizo.com\" target=\"_blank\">Pathfinder</a> or D&#38;D, if you want.&#41;.\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nKlaatu has a weekly podcast called <a href=\"https://mixedsignals.ml/cnc\">Chronicles &#38; Commons</a>, wherein he talks about fantasy &#91;Creative Commons and public domain&#93; folklore in the context of RPG gaming &#40;which in turn is discussed in context of storytelling&#41;.</p>\r\n</li> \r\n</ul>\r\n',78,95,0,'CC-BY-SA','rpg,intro,howto,tutorial,dnd,pathfinder,opend6,ogl',0,0,1),
(2551,'2018-05-14','Calibrating Calibration',1519,'NYbill talks about calibration issues with the Siglent SDS1202X-E oscilloscope','<p>NYbill talks about the Siglent SDS1202X-E oscilloscope and the calibration pitfalls of the BA model over the newer BB model.</p>\r\n<p>Pics for the episode:</p>\r\n<p><a href=\"https://media.gunmonkeynet.net/u/nybill/collection/siglent-sds1202x-e/\" class=\"uri\">https://media.gunmonkeynet.net/u/nybill/collection/siglent-sds1202x-e/</a></p>',235,0,0,'CC-BY-SA','test gear, electronics, oscilloscope',0,0,1),
(2553,'2018-05-16','Get ahead with git HEAD',2802,'Klaatu helps you understand git HEAD','<p>This episode is light on actual commands, and mostly a narrative analysis of what git HEAD is and why it matters to you.</p>\r\n<p>Some commands you can try:</p>\r\n<pre><code>$ cat ~/path/to/git/repo/.git/HEAD</code></pre>\r\n<p>and</p>\r\n<pre><code>$ ls ~/path/to/git/repo/.git/refs\r\n$ cat ~/path/to/git/repo/.git/refs/master</code></pre>\r\n',78,104,0,'CC-BY-SA','git, HEAD, branch, refs',0,0,1),
(2556,'2018-05-21','Building trust',2549,'Quasi-philosophical musing about how trust is built both online and in real life','<p>\r\nWhat is trust? How do you get it? How can you exploit it? How can you keep from being exploited?\r\n</p>\r\n',78,74,0,'CC-BY-SA','trust,social engineering,gpg,pgp,community',0,0,1),
(2572,'2018-06-12','What\'s in my tool kit',342,'Listing of items I carry for daily use','<ul>\r\n<li>The bag is a <a href=\"https://www.ebay.com/itm/Dell-Laptop-Backpack/253469390106?hash=item3b03f3f51a:g:RL8AAOSw8GFanVvM\">Dell backpack laptop carrier</a>\r\n<ul>\r\n<li>has 5 pockets\r\n<ul>\r\n<li>2 small side pockets</li>\r\n<li>small front accessory pockets</li>\r\n<li>medium middle tool pockets</li>\r\n<li>large main pocket with interior zippered pocket the padded laptop section is well padded and roomy enough for 2 slim 15&quot; laptops</li>\r\n</ul></li>\r\n</ul></li>\r\n<li><a href=\"https://www.ebay.com/itm/Asus-Z45C-Laptop/142330164679?hash=item212389f5c7:g:5O4AAOSwCU1Y3AAz\">Asus Z54C (W/ 120Gb SSD/ 4Gb Ram ) laptop running Sabayon linux</a></li>\r\n<li><a href=\"https://www.ebay.com/itm/Dell-Latitude-E5570-Intel-Core-i5-2-4Ghz-8GB-Ram-500GB-HDD-Laptop/263560830328?hash=item3d5d731d78:g:jnkAAOSwC2JasSjw\">Dell 5570 laptop for work-sometimes running Win 10 enterprise/pro</a> chargers for both,</li>\r\n<li><p><a href=\"https://www.ebay.com/itm/Sony-MDR-ZX110NC-Noise-Cancelling-Headphones/252814825699?epid=17011373240&amp;hash=item3adcf018e3:g:pgkAAOSw4shYAQgD\">Sony noise cancelling headphones</a></p></li>\r\n<li>Logitech wireless mouse</li>\r\n<li>maglite led flash light</li>\r\n<li><p><a href=\"https://www.tools-plus.com/lutz-2-in-1y.html?gclid=Cj0KCQjwqM3VBRCwARIsAKcekb0tCh30lJCOGwOzGFfqfckcc6QEk1PxKiPyuSnDs9iAQlIJC-e1Fn8aAgHpEALw_wcB\">multi tip screwdriver 1 philips, 1 flat head</a></p></li>\r\n<li><a href=\"https://www.ebay.com/itm/Stanley-Screwdriver-6-Tips-Set-Torque-6-In-1-Tool-Ratchet-1-2-Phillips-Multi-Bit/162915167799?_trkparms=aid%3D111001%26algo%3DREC.SEED%26ao%3D1%26asc%3D50426%26meid%3D375bb4c6758d42d0b94838e831253e4d%26pid%3D100675%26rk%3D5%26rkt%3D15%26sd%3D183131337955%26itm%3D162915167799&amp;_trksid=p2481888.c100675.m4236&amp;_trkparms=pageci%3A07d9a40b-2e08-11e8-b1de-74dbd180ae05%7Cparentrq%3A4f348a1f1620aa479d83a59cffffe77d%7Ciid%3A1\">6 tip screwdriver 2x philips 2x flat head 2x nut drivers</a></li>\r\n<li><a href=\"https://www.ebay.com/itm/Impact-punch-down-tool-blade-110-66-network-wire-punch-down-cable-cat5e-cat6/121654946839?hash=item1c53332c17:g:7usAAOSwAYtWQI75\">punchdown tool</a></li>\r\n<li>shammy cloth</li>\r\n<li>folder for paperwork/ current tasks</li>\r\n<li>one subject notebook</li>\r\n<li>asstd pens &amp; mechanical pencils</li>\r\n<li>wall wart phone charger</li>\r\n<li>micro USB cable</li>\r\n<li>Lightning USB cable</li>\r\n<li>2 6&quot; velcro tie straps</li>\r\n<li>15\' ethernet patch cable,</li>\r\n<li>10\' ethernet patch cable</li>\r\n<li>7\' ethernet patch cable</li>\r\n<li>5\' ethernet patch cable</li>\r\n<li>2x 3\' ethernet patch cable</li>\r\n<li>6&quot; ethernet patch cable</li>\r\n<li>laptop lock cable</li>\r\n<li>USB to ethernet adapter</li>\r\n<li>6\' HDMI cable</li>\r\n<li>Display port to DVI-D adapter</li>\r\n<li>digital voice recorder</li>\r\n<li>portable powerpack/charger (gimmie from Wired Mag)</li>\r\n<li>2x 16GB usb thumb drives\r\n<ul>\r\n<li>1 blank</li>\r\n<li>1 portable apps tools including libre office, and wireshark</li>\r\n</ul></li>\r\n<li><p>6\' power strip/ surge protector</p></li>\r\n<li>Reading glasses</li>\r\n<li>alcohol prep wipes</li>\r\n<li>latex gloves</li>\r\n<li>Band aids</li>\r\n<li><p>Excedrin bottle and migraine meds 1/2 dose for emergencies</p></li>\r\n</ul>\r\n<p>If I expand the definition of tool kit to include the tool box on my pickup truck, I also have...</p>\r\n<ul>\r\n<li>10\' telephone cord</li>\r\n<li>analogue telephone (princes style) for testing</li>\r\n<li>3 spare usb keyboards 1 spare ps/2 keyboards</li>\r\n<li>2 usb mice</li>\r\n<li>2x 6\' dvi-d cables</li>\r\n<li>adjustable wrench</li>\r\n<li>pliers</li>\r\n<li>needle nose pliers</li>\r\n<li>craftsman precision screwdriver set</li>\r\n<li><p>X-acto knife set</p></li>\r\n<li>socket set</li>\r\n<li>Ratchet straps</li>\r\n<li>50\' cotton bond rope 1/2&quot; diameter</li>\r\n<li>50\' nylon 1/2&quot; rope</li>\r\n<li>7\'x 8\' medium weight tarp</li>\r\n<li>Fluke #117 multimeter</li>\r\n<li>Fluke Link runner AT 1000</li>\r\n<li>and toner probe</li>\r\n<li>machete</li>\r\n<li>jumper cables</li>\r\n<li><p>analog linemans handset/ butt set (harris TS30)</p></li>\r\n</ul>\r\n',365,23,1,'CC-BY-SA','daily carry, toolkit',0,0,1),
(2554,'2018-05-17','Gnu Awk - Part 11',1686,'In part 11 of the series, we string and number built-in functions','<h1>Awk Part 11</h1>\r\n\r\n<p>Gnu Awk Documentation: <a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#String-Functions\">https://www.gnu.org/software/gawk/manual/gawk.html#String-Functions</a></p>\r\n\r\n<h2>Numerical functions</h2>\r\n\r\n<ul>\r\n<li>atan2: arctangent of y / x in randians</li>\r\n<li>cos: cosine of x in radians</li>\r\n<li>exp: e<sup>x</sup></li>\r\n<li>int: floor float to int</li>\r\n<li>log: natrual log</li>\r\n<li>randn: (pseudo) random number between 0 and 1</li>\r\n<li>sin: sine of x in radians</li>\r\n<li>sqrt: square root</li>\r\n<li>srand: (pseudo) random between 0 and 1, manually setting the seed</li>\r\n</ul>\r\n\r\n\r\n<h2>String functions</h2>\r\n\r\n<ul>\r\n<li>asort: array sort. Returns array with the values sorted</li>\r\n<li>asori: array sort. Returns array with the keys (index) sorted</li>\r\n<li>gensub: Search the target string target for matches of the regular expression regexp. Returns string with substituted text.</li>\r\n<li>gsub: Search target for all of the longest, leftmost, nonoverlapping matching substrings it can find and replace them with replacement.   Returns string with substituted text.</li>\r\n<li>sub: Search target, which is treated as a string, for the leftmost, longest substring matched by the regular expression regexp. Returns string with substituted text.</li>\r\n<li>index: Search the string in for the first occurrence of the string find. Returns the position where that occurence begins</li>\r\n<li>length: returns length of string</li>\r\n<li>match: Search string for the longest, leftmost substring matched by the regular expression regexp and return the character position (index) at which that substring begins.</li>\r\n<li>split: Divide string into pieces delimted by field separator. Returns an array of strings</li>\r\n<li>sprintf: Allows you to store the a string in the that would have been the output of printf into a variable</li>\r\n<li>strtonum: Turn octal representation to number</li>\r\n<li>substr: Substring starting at position x for length of y. Returns string</li>\r\n<li>tolower: Lower-case the string</li>\r\n<li>toupper: Upper-case the string</li>\r\n</ul>\r\n\r\n\r\n<h2>References</h2>\r\n\r\n<ul>\r\n<li>Trigonometric functions: <a href=\"https://en.wikipedia.org/wiki/Trigonometric_functions\">https://en.wikipedia.org/wiki/Trigonometric_functions</a></li>\r\n<li>Psuedo random number seed: <a href=\"https://en.wikipedia.org/wiki/Random_seed\">https://en.wikipedia.org/wiki/Random_seed</a></li>\r\n<li>Natural log to log 10: <a href=\"https://math.stackexchange.com/questions/107574/from-natural-log-to-log-base-10#107576\">https://math.stackexchange.com/questions/107574/from-natural-log-to-log-base-10#107576</a></li>\r\n</ul>',300,94,0,'CC-BY-SA','bash, linux, awk',0,0,1),
(2826,'2019-06-03','HPR Community News for May 2019',3497,'HPR Volunteers talk about shows released and comments posted in May 2019','<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/0376.html\" target=\"_blank\">Joel D</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0377.html\" target=\"_blank\">Zen_Floater2</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=2803\" target=\"_blank\">2803</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-05-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2803\" target=\"_blank\">Update on my Raspi 3 B OpenMedia Vault and Next Cloud instances</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2804\" target=\"_blank\">2804</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-05-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2804\" target=\"_blank\">Awk Part 13: Fix-Width Field Processing</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2805\" target=\"_blank\">2805</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-05-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2805\" target=\"_blank\">My 50th Show</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2806\" target=\"_blank\">2806</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-05-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2806\" target=\"_blank\">HPR Community News for April 2019</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=2807\" target=\"_blank\">2807</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-05-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2807\" target=\"_blank\">Are bash local variables local?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2808\" target=\"_blank\">2808</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-05-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2808\" target=\"_blank\">Haskell function types</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2809\" target=\"_blank\">2809</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-05-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2809\" target=\"_blank\">The Blue Oak Model License and Its One Big Gotcha</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0376.html\" target=\"_blank\">Joel D</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2810\" target=\"_blank\">2810</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-05-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2810\" target=\"_blank\">Wi-Fi on Android</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=2811\" target=\"_blank\">2811</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-05-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2811\" target=\"_blank\">Interview with Alan Pope</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2812\" target=\"_blank\">2812</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-05-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2812\" target=\"_blank\">Is 5G mobile data a danger to your health?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2813\" target=\"_blank\">2813</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-05-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2813\" target=\"_blank\">Should we dump the linux Desktop.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2814\" target=\"_blank\">2814</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-05-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2814\" target=\"_blank\">Spectre and Meltdown and OpenBSD and our future</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=2815\" target=\"_blank\">2815</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-05-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2815\" target=\"_blank\">Copy pasta</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=2816\" target=\"_blank\">2816</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-05-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2816\" target=\"_blank\">Gnu Awk - Part 14</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=2817\" target=\"_blank\">2817</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-05-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2817\" target=\"_blank\">Are you successful? Click to find out more!</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2818\" target=\"_blank\">2818</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-05-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2818\" target=\"_blank\">Writing Web Game in Haskell - Science, part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2819\" target=\"_blank\">2819</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-05-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2819\" target=\"_blank\">Reply to Knightwise - podcasts</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=2820\" target=\"_blank\">2820</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-05-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2820\" target=\"_blank\">29 - CERT Home Security Tips</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=2821\" target=\"_blank\">2821</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-05-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2821\" target=\"_blank\">Interviewing some exhibitors at the 2019 vcfe.org event</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=2822\" target=\"_blank\">2822</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-05-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2822\" target=\"_blank\">What\'s in the Box! Part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2823\" target=\"_blank\">2823</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-05-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2823\" target=\"_blank\">Gentoo and why I use it</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2824\" target=\"_blank\">2824</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-05-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2824\" target=\"_blank\">Gnu Awk - Part 15</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=2825\" target=\"_blank\">2825</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-05-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2825\" target=\"_blank\">More text to speech trials</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</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 16 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 6 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2504#comments\" target=\"_blank\">hpr2504</a></strong>\n(2018-03-08) \"<em>Intro to Git with pen and paper</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=2504#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-05-23:\n\"This needs to be a video\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2793#comments\" target=\"_blank\">hpr2793</a></strong>\n(2019-04-17) \"<em>bash coproc: the future (2009) is here</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2793#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2019-05-04:\n\"Re: backquotes vs dollar-paren\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2793#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2019-05-09:\n\"Re: awk coprocesses\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2793#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2019-05-09:\n\"Regarding awk coprocesses\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2794#comments\" target=\"_blank\">hpr2794</a></strong>\n(2019-04-18) \"<em>Interview with Martin Wimpress</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2794#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2019-05-26:\n\"Great interview\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2798#comments\" target=\"_blank\">hpr2798</a></strong>\n(2019-04-24) \"<em>Should Podcasters be Pirates ?</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2798#4\" target=\"_blank\">Comment 4</a>:\nKlaatu on 2019-05-07:\n\"This is one of those episodes...\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 10 comments on 4 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2806#comments\" target=\"_blank\">hpr2806</a></strong>\n(2019-05-06) \"<em>HPR Community News for April 2019</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=2806#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2019-05-09:\n\"Yggdrasil and Hollywood\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2806#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2019-05-09:\n\"HKOSCON2019\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2809#comments\" target=\"_blank\">hpr2809</a></strong>\n(2019-05-09) \"<em>The Blue Oak Model License and Its One Big Gotcha</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0376.html\" target=\"_blank\">Joel D</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2809#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2019-05-09:\n\"The show _was_ fun\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2809#2\" target=\"_blank\">Comment 2</a>:\nJoel D on 2019-05-16:\n\"re: norrist\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2813#comments\" target=\"_blank\">hpr2813</a></strong>\n(2019-05-15) \"<em>Should we dump the linux Desktop.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2813#1\" target=\"_blank\">Comment 1</a>:\nYannick on 2019-05-15:\n\"Should we dump Windows?\n\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2813#2\" target=\"_blank\">Comment 2</a>:\nHipstre on 2019-05-15:\n\"Do We Need Linux?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2813#3\" target=\"_blank\">Comment 3</a>:\nDV on 2019-05-16:\n\"Response to knightwise\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2813#4\" target=\"_blank\">Comment 4</a>:\nDeepGeek on 2019-05-17:\n\"Desktop is Dead\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2813#5\" target=\"_blank\">Comment 5</a>:\nSnapdeus on 2019-05-17:\n\"Linux desktop\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2814#comments\" target=\"_blank\">hpr2814</a></strong>\n(2019-05-16) \"<em>Spectre and Meltdown and OpenBSD and our future</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=2814#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2019-05-17:\n\"Hello, Fellow Puffy Disciple!\"</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/2019-May/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-May/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=\"links\">Links</h3>\n<ul>\n<li><a href=\"https://ohshitgit.com/\" class=\"uri\">https://ohshitgit.com/</a></li>\n<li><a href=\"https://www.nporadio1.nl/podcasts/hallo-hier-hilversum\" class=\"uri\">https://www.nporadio1.nl/podcasts/hallo-hier-hilversum</a></li>\n</ul>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Over the period tags and/or summaries have been added to 10 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2846,'2019-07-01','HPR Community News for June 2019',3364,'HPR Volunteers talk about shows released and comments posted in June 2019','<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/0378.html\" target=\"_blank\">Shannon Wright</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=2826\" target=\"_blank\">2826</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-06-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2826\" target=\"_blank\">HPR Community News for May 2019</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=2827\" target=\"_blank\">2827</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-06-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2827\" target=\"_blank\">Unscripted ramblings from my garage about my first CTF event</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2828\" target=\"_blank\">2828</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-06-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2828\" target=\"_blank\">Writing Web Game in Haskell - Science, part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2829\" target=\"_blank\">2829</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-06-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2829\" target=\"_blank\">Discussion around fair use clips on HPR</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0109.html\" target=\"_blank\">Various Hosts</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2830\" target=\"_blank\">2830</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-06-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2830\" target=\"_blank\">HPR NYE Show 2018-2019 part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2831\" target=\"_blank\">2831</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-06-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2831\" target=\"_blank\">Interview with Robbie Ferguson</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2832\" target=\"_blank\">2832</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-06-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2832\" target=\"_blank\">How I got started in Linux</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0378.html\" target=\"_blank\">Shannon Wright</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2833\" target=\"_blank\">2833</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-06-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2833\" target=\"_blank\">Jeroen chats with Joep Piscaer</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=2834\" target=\"_blank\">2834</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-06-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2834\" target=\"_blank\">My favorite desktop and android applications</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2835\" target=\"_blank\">2835</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-06-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2835\" target=\"_blank\">HPR NYE Show 2018-2019 part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2836\" target=\"_blank\">2836</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-06-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2836\" target=\"_blank\">Interview with Wendy Hill</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2837\" target=\"_blank\">2837</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-06-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2837\" target=\"_blank\">parallax live desktops in android</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=2838\" target=\"_blank\">2838</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-06-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2838\" target=\"_blank\">Why Haskell?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2839\" target=\"_blank\">2839</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-06-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2839\" target=\"_blank\">Sample episode of the Distrohoppers Digest podcast</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=2840\" target=\"_blank\">2840</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-06-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2840\" target=\"_blank\">HPR NYE Show 2018-2019 part 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2841\" target=\"_blank\">2841</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-06-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2841\" target=\"_blank\">How I got into Linux (and then some...)</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2842\" target=\"_blank\">2842</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-06-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2842\" target=\"_blank\">What\'s in my Bag an update to hpr2065</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2843\" target=\"_blank\">2843</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-06-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2843\" target=\"_blank\">Afrikan Tähti (or Star of Africa)</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2844\" target=\"_blank\">2844</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-06-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2844\" target=\"_blank\">The Sony TC-222-A Portable Reel-To-Reel Tape Recorder</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2845\" target=\"_blank\">2845</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-06-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2845\" target=\"_blank\">HPR NYE Show 2018-2019 part 4</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</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 19 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=2807#comments\" target=\"_blank\">hpr2807</a></strong>\n(2019-05-07) \"<em>Are bash local variables local?</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2807#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2019-06-06:\n\"Thanks for this\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 18 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2827#comments\" target=\"_blank\">hpr2827</a></strong>\n(2019-06-04) \"<em>Unscripted ramblings from my garage about my first CTF event</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2827#1\" target=\"_blank\">Comment 1</a>:\nChristopher M. Hobbs on 2019-05-30:\n\"event cancellation\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2827#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2019-06-04:\n\"sorry to hear about cancellation\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2829#comments\" target=\"_blank\">hpr2829</a></strong>\n(2019-06-06) \"<em>Discussion around fair use clips on HPR</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0109.html\" target=\"_blank\">Various Hosts</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2829#1\" target=\"_blank\">Comment 1</a>:\nJoel D on 2019-06-06:\n\"Fair Use\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2829#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2019-06-07:\n\"We don\'t know\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2830#comments\" target=\"_blank\">hpr2830</a></strong>\n(2019-06-07) \"<em>HPR NYE Show 2018-2019 part 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2830#1\" target=\"_blank\">Comment 1</a>:\nfolky on 2019-06-10:\n\"plumble is better than I thought.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2830#2\" target=\"_blank\">Comment 2</a>:\nfolky on 2019-06-10:\n\"More %\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2830#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2019-06-10:\n\"Missing \'%\' in date command\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2831#comments\" target=\"_blank\">hpr2831</a></strong>\n(2019-06-10) \"<em>Interview with Robbie Ferguson</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0370.html\" target=\"_blank\">Yannick</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2831#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2019-06-10:\n\"Just what I was looking for\n\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2832#comments\" target=\"_blank\">hpr2832</a></strong>\n(2019-06-11) \"<em>How I got started in Linux</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0378.html\" target=\"_blank\">Shannon Wright</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2832#1\" target=\"_blank\">Comment 1</a>:\nNYbill on 2019-06-11:\n\"Welcome!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2833#comments\" target=\"_blank\">hpr2833</a></strong>\n(2019-06-12) \"<em>Jeroen chats with Joep Piscaer</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2833#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2019-06-14:\n\"Great show!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2837#comments\" target=\"_blank\">hpr2837</a></strong>\n(2019-06-18) \"<em>parallax live desktops in android</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=2837#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2019-06-18:\n\"I like this kind of episode.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2839#comments\" target=\"_blank\">hpr2839</a></strong>\n(2019-06-20) \"<em>Sample episode of the Distrohoppers Digest podcast</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=2839#1\" target=\"_blank\">Comment 1</a>:\nMike Ray on 2019-06-20:\n\"Accessibility\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2839#2\" target=\"_blank\">Comment 2</a>:\nBob on 2019-06-20:\n\"reply to Mike\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2839#3\" target=\"_blank\">Comment 3</a>:\nMike Ray on 2019-06-20:\n\"Accessibility and non-English character sets\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2839#4\" target=\"_blank\">Comment 4</a>:\nTony Hughes on 2019-06-21:\n\"Responce to Mike and Bob\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2839#5\" target=\"_blank\">Comment 5</a>:\nBob on 2019-06-23:\n\"I wasn\'t serious\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2839#6\" target=\"_blank\">Comment 6</a>:\nMike Ray on 2019-06-25:\n\"Accessibility\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2839#7\" target=\"_blank\">Comment 7</a>:\nTonyH1212 on 2019-06-29:\n\"Further responce to Mike and Bob\"</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/2019-June/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-June/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=\"issue-with-advanced-rss-settings\">Issue with advanced RSS settings</h3>\n<p>The page at <a href=\"https://www.hackerpublicradio.org/advanced_rss_settings.php\" class=\"uri\">https://www.hackerpublicradio.org/advanced_rss_settings.php</a> describes a series of features that allow the specification of a tailored RSS feed.</p>\n<p>One of the features is <code>\'gomax=1\'</code> which includes shows in the queue scheduled for the future. For example, the following URL requests 30 OGG format shows including those scheduled for the future:</p>\n<pre><code>https://hackerpublicradio.org/rss.php?format=ogg&amp;gomax=1&amp;limit=30</code></pre>\n<p>However, there is a problem with this, caused by the way we direct downloads to <code>archive.org</code>. We usually upload the next week’s shows to <code>archive.org</code>, but not all future shows as they arrive. This means that the links to some future shows returned by the feed point to currently non-existent episodes.</p>\n<p>This has been the case ever since we moved to using <code>archive.org</code> in this way, in late 2017. We have not received any comments or complaints about it in that time, so the question is:</p>\n<blockquote>\n<p><b>Does anyone use <code>\'gomax=1\'</code>?</b></p>\n</blockquote>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0338.html\">Tony Hughes</a></b></p>\n<p>Over the period tags and/or summaries have been added to 6 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2558,'2018-05-23','Battling with English - part 1',678,'Misunderstandings about English grammar, spelling, punctuation, etc.','<h1 id=\"battling-with-english---part-1\">Battling with English - part 1</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the first episode of a series about the English language. In it I want to look at some of the problems people (including myself) have with it. I plan to do several episodes and I want to keep them short.</p>\r\n<p>The English language is old and has changed – evolved – in many ways over the years. It has come from a multitude of sources, and it\'s difficult to say what is <strong>correct</strong> in an absolute way.</p>\r\n<p>For example, when I was at school we were taught that &quot;<em>nice</em>&quot; should not be used in written material. At that time it was becoming common to see phrases like &quot;<em>I had a nice time</em>&quot; meaning <em>pleasant</em> (in a bland sort of way). In my &quot;<em>Concise Oxford Dictionary</em>&quot; from 1976 the 6th definition, &quot;<em>agreeable</em>&quot; is marked &quot;<em>colloquialism</em>&quot;, whereas today this is a common usage.</p>\r\n<p>However, it\'s easy to use the wrong word in the wrong context. You might choose one that sounds similar for example. You might also have problems with the spelling of a chosen word. Spelling in English is not always logical. You might also find yourself confused about the use of punctuation – the correct use of apostrophes can be challenging for example.</p>\r\n<p>In this series I want to examine some of the problem areas and try to give you the means of remembering the <strong>right</strong> way.</p>\r\n<p><strong>Note</strong>: I\'m not an authority on this stuff, but I have tried to teach myself not to make these mistakes over the years. I just wanted to share what I have learnt<a href=\"#fn1\" class=\"footnoteRef\" id=\"fnref1\"><sup>1</sup></a> with some links to higher authorities.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2558/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Then:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/then\">Definition of &quot;then&quot;</a></li>\r\n<li><a href=\"https://www.etymonline.com/word/then\">Online Etymology Dictionary</a></li>\r\n</ul></li>\r\n<li>Than:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/than\">Definition of &quot;than&quot;</a></li>\r\n<li><a href=\"https://www.etymonline.com/word/than\">Online Etymology Dictionary</a></li>\r\n</ul></li>\r\n<li>Then versus Than\r\n<ul>\r\n<li>Writing Explained: <a href=\"https://writingexplained.org/then-vs-than-difference\">Then vs. Than: What’s the Difference?</a></li>\r\n<li>Grammarist: <a href=\"https://grammarist.com/usage/than-then/\">Than vs. then</a></li>\r\n<li>Merriam-Webster: <a href=\"https://www.merriam-webster.com/words-at-play/when-to-use-then-and-than\">When To Use Then and Than</a></li>\r\n</ul></li>\r\n<li>There:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/there\">Definition of &quot;there&quot;</a></li>\r\n<li><a href=\"https://www.etymonline.com/word/there\">Online Etymology Dictionary</a></li>\r\n</ul></li>\r\n<li>Their:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/their\">Definition of &quot;their&quot;</a></li>\r\n<li><a href=\"https://www.etymonline.com/word/their\">Online Etymology Dictionary</a></li>\r\n</ul></li>\r\n<li>They\'re:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/they%27re\">Definition of &quot;they\'re&quot;</a></li>\r\n</ul></li>\r\n<li>Tenet:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/tenet\">Definition of &quot;tenet&quot;</a></li>\r\n<li><a href=\"https://www.etymonline.com/word/tenet\">Online Etymology Dictionary</a></li>\r\n</ul></li>\r\n<li>Tenant:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/tenant\">Definition of &quot;tenant&quot;</a></li>\r\n<li><a href=\"https://www.etymonline.com/word/tenant\">Online Etymology Dictionary</a></li>\r\n</ul></li>\r\n<li>Tenet versus Tenant:\r\n<ul>\r\n<li>Quick and Dirty Tips: <a href=\"https://www.quickanddirtytips.com/education/grammar/tenet-versus-tenant\">Grammar Girl</a></li>\r\n</ul></li>\r\n</ul>\r\n<section class=\"footnotes\">\r\n<hr />\r\n<ol>\r\n<li id=\"fn1\"><p>One thing I have <em>learnt</em> is that &quot;<em>learned</em>&quot; and &quot;<em>learnt</em>&quot; are both correct and mean the same. However, &quot;<em>learnt</em>&quot; is more common in the UK, whereas &quot;<em>learned</em>&quot; is used both in the UK and the USA.<a href=\"#fnref1\">↩</a></p></li>\r\n</ol>\r\n</section>',225,120,1,'CC-BY-SA','grammar,spelling,punctuation,word misuse,English',0,0,1),
(2562,'2018-05-29','I bought a laptop',1292,'... in which clacke takes months (or years?) to buy a laptop, but comes out pretty pleased','<p>After months (or years?) of waffling and false starts I finally bought an <a href=\"https://www.asus.com/Laptops/ASUS-VivoBook-15-X542UA/\">ASUS X542U</a>. The advertised specs say &quot;up to&quot;, but I don’t have the &quot;up to&quot;, I have the baseline 7th gen i3, 128GB SSD, 4 GB RAM.</p>\r\n<p>Here’s the rambling story of a laptop purchase and its various side quests.</p>\r\n<p>Some details that may or may not have made it in to the show (and the show has some that aren’t there) available on the Fediverse at <a href=\"https://pleroma.heldscal.la/notice/7204988\" class=\"uri\">https://pleroma.heldscal.la/notice/7204988</a> .</p>\r\n<p>Side quest to the side quest of making an episode about side quests:</p>\r\n<p>Why spend five minutes writing a simple Makefile when you can spend half an afternoon writing a <a href=\"https://gitlab.com/clacke/hpr/blob/master/default.nix\">simple default.nix</a> instead?</p>',311,0,0,'CC-BY-SA','laptop, linux, ubuntu, nix, cryptocurrency',0,0,1),
(2559,'2018-05-24','My Favourite Browser extension',1117,'In this episode I cover my favourite browser Add-on','<p>My contribution to List of requested shows “Your favourite browser extensions”</p>\r\n<ul>\r\n<li><p>OneTab Homepage<br />\r\n<a href=\"https://www.one-tab.com/\" class=\"uri\">https://www.one-tab.com/</a></p></li>\r\n<li><p>Firefox add-on link<br />\r\n<a href=\"https://addons.mozilla.org/en-US/firefox/addon/onetab/\" class=\"uri\">https://addons.mozilla.org/en-US/firefox/addon/onetab/</a></p></li>\r\n</ul>\r\n<p>On Android, I\'m lazy and just seem to have fallen into using the chrome browser. The Add-on I\'m going to talk about unfortunately isn\'t available for the Android operating system.</p>\r\n<p>On the Linux desktop, I use Firefox</p>\r\n<p>In the past, I\'ve dabbled with various browser add-ons but until very recently I\'ve been using no browser add-ons on the desktop.</p>\r\n<p>A browser add-on I did use and did miss was Tab groups</p>\r\n<p>Tab Groups was originally a feature built into Mozilla Firefox</p>\r\n<p>The feature was removed but maintained as an add-on until it was broken by changes in Firefox 57</p>\r\n<ul>\r\n<li><a href=\"https://addons.mozilla.org/en-GB/firefox/addon/tab-groups-panorama/\" class=\"uri\">https://addons.mozilla.org/en-GB/firefox/addon/tab-groups-panorama/</a></li>\r\n</ul>\r\n<p>A colleague at work brought the One-Tab add-on to my attention https://www.one-tab.com/</p>\r\n<p>It\'s available for both the Chrome browser and Firefox</p>\r\n<p>No sign-up or registration required</p>\r\n<p>With Tab-group I found myself spending a lot of time arranging groups getting the size right naming them etc.</p>\r\n<p>One tab philosophy is a bit different and perhaps maybe not so intuitive, though I think now after some use I prefer it as it gets out of the way and can be used with the minimal of fuss.</p>\r\n<p>I highly recommend one-tab if you regularly find yourself dealing with a lot of open tabs in your browser.</p>\r\n',201,0,1,'CC-BY-SA','Internet, Research, Browser, Firefox, Plug-in, Add-On',0,0,1),
(2560,'2018-05-25','General Data Protection Regulation (GDPR)',1117,'The GDPR becomes enforceable today and Ken gives an overview on what it is and how it effects you.','<p>Been getting a lot of updated policy changes lately ? Here\'s why !</p>\r\n\r\n<h3>From Wikipedia</h3>\r\n<quote>\r\nThe <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">General Data Protection Regulation (GDPR) (EU) 2016/679</a> is a regulation in EU law on data protection and privacy for all individuals within the European Union. It also addresses the export of personal data outside the EU. The GDPR aims primarily to give control to citizens and residents over their personal data and to simplify the regulatory environment for international business by unifying the regulation within the EU. It was adopted on 14 April 2016, and after a two-year transition period, becomes enforceable on 25 May 2018.\r\n</quote>\r\n\r\n<p>The following information is taken from the <a href=\"https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/\">Guide to the General Data Protection\r\nRegulation (GDPR)</a> from the Information Commissioners Office in the UK, which is released under a <a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\">Open Government Licence v3.0.</a></p>\r\n\r\n<h2>Principles of the GDPR</h2>\r\n<p>Under the GDPR, the data protection principles set out the main responsibilities for organisations.<br />\r\nArticle 5 of the GDPR requires that personal data shall be:</p>\r\n<dl>\r\n<dt>a) processed lawfully, fairly and in a transparent manner in relation to individuals;</dt>\r\n<dt>b) collected for specified, explicit and legitimate purposes and not further processed in a manner that is incompatible with those purposes; further processing for archiving purposes in the public interest, scientific or historical research purposes or statistical purposes shall not be considered to be incompatible with the initial purposes;</dt>\r\n<dt>c) adequate, relevant and limited to what is necessary in relation to the purposes for which they are processed;</dt>\r\n<dt>d) accurate and, where necessary, kept up to date; every reasonable step must be taken to ensure that personal data that are inaccurate, having regard to the purposes for which they are processed, are erased or rectified without delay;</dt>\r\n<dt>e) kept in a form which permits identification of data subjects for no longer than is necessary for the purposes for which the personal data are processed; personal data may be stored for longer periods insofar as the personal data will be processed solely for archiving purposes in the public interest, scientific or historical research purposes or statistical purposes subject to implementation of the appropriate technical and organisational measures required by the GDPR in order to safeguard the rights and freedoms of individuals; and</dt>\r\n<dt>f) processed in a manner that ensures appropriate security of the personal data, including protection against unauthorised or unlawful processing and against accidental loss, destruction or damage, using appropriate technical or organisational measures.</dt>\r\n</dl>\r\nArticle 5(2) requires that:\r\n<dl>\r\n<dt>the controller shall be responsible for, and be able to demonstrate, compliance with the principles.</dt>\r\n</dl>\r\n\r\n<h2>What information does the GDPR apply to?</h2>\r\n\r\n<h3>Personal data</h3>\r\n<p>The GDPR applies to ‘personal data’ meaning any information relating to an identifiable person who can be directly or indirectly identified in particular by reference to an identifier.</p>\r\n\r\n<h3>Sensitive personal data</h3>\r\n<p>Special category data is personal data which the GDPR says is more sensitive, and so needs more protection.</p>\r\n<ul>\r\n  <li>race</li>\r\n  <li>ethnic origin</li>\r\n  <li>politics</li>\r\n  <li>religion</li>\r\n  <li>trade union membership</li>\r\n  <li>genetics</li>\r\n  <li>biometrics (where used for ID purposes)</li>\r\n  <li>health</li>\r\n  <li>sex life</li>\r\n  <li>sexual orientation</li>\r\n</ul>\r\n\r\n<h3>Criminal offence data</h3>\r\n<p>The Data Protection Bill deals with this type of data in a similar way to special category data, and sets out specific conditions providing lawful authority for processing it.</p>\r\n\r\n<h2>What are the lawful bases for processing?</h2>\r\n<p>You can only process personal information if you have:</p>\r\n<ol>\r\n  <li>Consent: the individual has given clear consent for you to process their personal data for a specific purpose.\r\n  <li>Contract: the processing is necessary for a contract you have with the individual, or because they have asked you to take specific steps before entering into a contract.\r\n  <li>Legal obligation: the processing is necessary for you to comply with the law (not including contractual obligations).\r\n  <li>Vital interests: the processing is necessary to protect someone’s life.\r\n  <li>Public task: the processing is necessary for you to perform a task in the public interest or for your official functions, and the task or function has a clear basis in law.\r\n  <li>Legitimate interests: the processing is necessary for your legitimate interests or the legitimate interests of a third party unless there is a good reason to protect the individual’s personal data which overrides those legitimate interests. (This cannot apply if you are a public authority processing data to perform your official tasks.)\r\n</ol>\r\n\r\n<h3>Individual rights</h3>\r\n<ol>\r\n  <li>The right of access</li>\r\n  <li>The right to rectification</li>\r\n  <li>The right to erasure</li>\r\n  <li>The right to restrict processing</li>\r\n  <li>The right to data portability</li>\r\n  <li>The right to object</li>\r\n  <li>Rights in relation to automated decision making and profiling.</li>\r\n</ol>\r\n\r\n<h3>Other Considerations</h3>\r\n<ul>\r\n  <li>Accountability and governance</li>\r\n  <li>Contracts</li>\r\n  <li>Documentation</li>\r\n  <li>Data protection by design and default</li>\r\n  <li>Data protection officers</li>\r\n  <li>Codes of conduct and certification</li>\r\n  <li>Guide to the data protection fee</li>\r\n  <li>Security</li>\r\n  <li>International transfers</li>\r\n  <li>Exemptions</li>\r\n  <li>Children</li>\r\n</ul>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2560/regulation_oj_en.pdf\">REGULATION (EU) 2016/679 OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL</a> \r\nof 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, \r\nand repealing Directive 95/46/EC (General Data Protection Regulation). Published under the terms of \r\n<a href=\"https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32011D0833&qid=1495026738506&from=EN\">COMMISSION DECISION of 12 December 2011 on the reuse of Commission documents (2011/833/EU)</a></li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2560/guide-to-the-general-data-protection-regulation-gdpr-1-0.pdf\">Guide to the General Data Protection Regulation (GDPR)</a>  from the \r\n<a href=\"https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/\">Information Commissioners Office</a> in the UK, which is released under a \r\n<a href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\">Open Government Licence v3.0.</a></li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2560/preparing-for-the-gdpr-12-steps.pdf\">Preparing for the General Data Protection Regulation (GDPR)</a>.</li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2560/DPbD_Framework.pdf\">Data Protection by Design Framework</a>. Published under Creative Commons 4.0 Attribution - NoDerivs CC BY - ND license. The most recent version of the Data Protection by Design Framework is available on \r\n<a href=\"https://www.privacycompany.eu/en/\">www.privacycompany.eu</a>.</li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2560/factsheet_GDPR.pdf\">Overview of the EU General Data Protection Regulation (GDPR)</a>. Published under Creative Commons 4.0 Attribution - NoDerivs CC BY - ND license. The most recent version of the Data Protection by Design Framework is available on \r\n<a href=\"https://www.privacycompany.eu/en/\">www.privacycompany.eu</a>.</li>\r\n<li>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2560/wp242_rev01_enpdf.pdf\">Guidelines on the right to data portability</a>16/EN WP 242 rev.01 ARTICLE 29 DATA PROTECTION WORKING PARTY. Published under the terms of \r\n<a href=\"https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32011D0833&qid=1495026738506&from=EN\">COMMISSION DECISION of 12 December 2011 on the reuse of Commission documents (2011/833/EU)</a></li>\r\n</ul>\r\n',30,74,0,'CC-BY-SA','GDPR,General Data Protection Regulation',0,0,1),
(2561,'2018-05-28','A reluctant dog walk',1472,'A reluctant dog walk after some hand stripping','<p>An explanation of hand stripping <a href=\"https://www.petguide.com/petcare/dog/grooming-basics-all-about-hand-stripping/\" class=\"uri\">https://www.petguide.com/petcare/dog/grooming-basics-all-about-hand-stripping/</a></p>\r\n<p>I chopped the recording down a bit as it was originally over an hour long I thought it would just be too monotonous.</p>\r\n<p>Listening back to the recording I can\'t believe it took me so long to get organised and get out the door.</p>\r\n<p>With all the rhythmic clinking sounds it sounds more like I\'m riding a horse than walking the dog, I think the supplied clip-on Dictaphone microphone is a bit on the sensitive side.</p>\r\n<p>As a responsible dog walker, one of the most important pieces of equipment I take with me on every dog walk is the “Toley Bone” mentioned around one minute point.</p>\r\n<p>Toley is a fine Scottish word, you can look it up if you are unfamiliar with it <a href=\"https://www.firstfoot.com/dictionary/t.html\" class=\"uri\">https://www.firstfoot.com/dictionary/t.html</a> or alternatively just do a simple google search to be enlightened.</p>\r\n<p>An example can be found here. <a href=\"https://www.amazon.co.uk/Plastic-Holder-Dispenser-Carrying-Walking/dp/B01IW0YSM0/ref=sr_1_8?ie=UTF8&amp;qid=1509280608&amp;sr=8-8&amp;keywords=dog+bag+bone\" class=\"uri\">https://www.amazon.co.uk/Plastic-Holder-Dispenser-Carrying-Walking/dp/B01IW0YSM0/ref=sr_1_8?ie=UTF8&amp;qid=1509280608&amp;sr=8-8&amp;keywords=dog+bag+bone</a></p>\r\n<p>Listen out for the crinkling sound around the halfway point where it is put to good use.</p>\r\n<p>The second most important piece of kit is a sweet, consumed around the 3 minute point.</p>\r\n<p>The main part of the walk was fairly uneventful and consisted of traffic noise, passing by the local bus terminus where the bus turns at the end of its route, a rather noisy motorbike and a brief encounter with a fellow dog walker on route.</p>\r\n<p>Finally ending with a treat and some light refreshment.</p>\r\n<p>Oh, and in case you\'re wondering yes the the scones mentioned near the end of the podcast made by Mrs X were wonderful.</p>\r\n<p>Oh and one final thing on listening back to the recording one more time I just realised that for some unknown reason just after the bus noise I started whistling very softly to myself, I don\'t remember doing that at all, I must have been doing it subconsciously. I could be wrong but it sounds to me like I\'m whistling the tune “The animals march in two by two” I guess it was just the right tempo to help me round my one hour walk.</p>\r\n',201,101,1,'CC-BY-SA','dog, walking',0,0,1),
(2563,'2018-05-30','Action In Storytelling',1065,'Lostnbronx looks at different uses of action in storytelling.','<p>Lostnbronx contrasts what he calls &quot;static action&quot; with &quot;story action&quot;, and looks at the functions of these techniques for storytelling in various media.</p>\r\n<p>A car chase is action-filled, but so might be a quiet Victorian drawing room, where, at least on the surface of it, nothing is happening.</p>\r\n<p>What actually constitutes action? What purpose does it serve? And how much of it do you really need?</p>',107,105,0,'CC-0','storytelling,action',0,0,1),
(2564,'2018-05-31','Intro to Fossil',1991,'Klaatu talks about the Fossil version control system','<p>Some shownotes for fossil</p>\r\n\r\n<p>\r\nCreate a new fossil repository&#58;\r\n</p>\r\n\r\n<pre><code>  $ fossil new shownotes\r\n</code></pre>\r\n\r\n<p>\r\n  Add your work to the repository&#58;\r\n</p>\r\n\r\n<pre><code>  $ fossil add shownotes.html\r\n</code></pre>\r\n\r\n<p>\r\n  Commit your work&#58;\r\n</p>\r\n\r\n<pre><code>  $ fossil commit --comment \"added shownote HTML file\"\r\n</code></pre>\r\n\r\n<p>\r\n  As a fun exercise, destroy your work.\r\n</p>\r\n\r\n<pre><code>  $ echo \"klaatu said this was perfectly safe\" &gt; shownotes.html\r\n  $ cat shownotes.html\r\n  klaatu said this was perfectly safe\r\n</code></pre>\r\n\r\n<p>\r\n  And now revert it back to the\r\n  last known good version&#58;\r\n</p>\r\n\r\n<pre><code>  $ fossil revert shownotes.html\r\n  REVERT shownotes.html\r\n  $ head -n1 shownotes.html\r\n  &lt;p&gt;Some shownotes for fossil&lt;p&gt;\r\n</code></pre>\r\n\r\n<p>\r\n  Did you accidentally revert? You can undo that.\r\n</p>\r\n\r\n<pre><code>  $ fossil undo shownotes.html\r\n</code></pre>\r\n\r\n<p>\r\n  And then revert again.\r\n</p>\r\n\r\n<pre><code>  $ fossil revert shownotes.html\r\n  REVERT shownotes.html\r\n  $ head -n1 shownotes.html\r\n  &lt;p&gt;Some shownotes for fossil&lt;p&gt;\r\n</code></pre>\r\n\r\n<p>\r\nCheck your remote&#58;\r\n</p>\r\n<pre><code>  $ fossil remote-url\r\n</code></pre>\r\n\r\n<p>\r\nClose a fossil repo&#58;\r\n</p>\r\n\r\n<pre><code>  $ fossil close\r\n</code></pre>\r\n\r\n<p>\r\nSee the fancy browser-based UI of your repo&#58;\r\n</p>\r\n<pre><code>  $ fossil ui\r\n</code></pre>\r\n\r\n',78,0,0,'CC-BY-SA','fossil,sqlite,svn,git,scm',0,0,1),
(2567,'2018-06-05','Son of Hunky Punk',269,'I follow-up on my Frotz episode by covering Son of Hunky Punk, a Z-machine interpreter for Android.','<p>I follow-up on my Frotz episode by covering Son of Hunky Punk, a Z-machine interpreter for Android. I also test my copy of ZORK I to see if it works as well as it did on Frotz.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><p>Son of Hunky Punk - IFWiki<br />\r\n<a href=\"https://ifwiki.org/index.php/Son_of_Hunky_Punk\" class=\"uri\">https://ifwiki.org/index.php/Son_of_Hunky_Punk</a></p></li>\r\n<li><p>Github: <a href=\"https://github.com/retrobits/son_of_hunkypunk\" class=\"uri\">https://github.com/retrobits/son_of_hunkypunk</a></p></li>\r\n<li><p>Google Play: <a href=\"https://play.google.com/store/apps/details?id=org.andglkmod.hunkypunk&amp;hl=en_US\" class=\"uri\">https://play.google.com/store/apps/details?id=org.andglkmod.hunkypunk&amp;hl=en_US</a></p></li>\r\n<li><p>F-Droid: <a href=\"https://f-droid.org/packages/org.andglkmod.hunkypunk/\" class=\"uri\">https://f-droid.org/packages/org.andglkmod.hunkypunk/</a></p></li>\r\n<li><p>Hunky Punk (the original)<br />\r\n<a href=\"https://hunkypunk.sourceforge.net/\" class=\"uri\">https://hunkypunk.sourceforge.net/</a></p></li>\r\n</ul>\r\n<h3 id=\"contact\">Contact:</h3>\r\n<ul>\r\n<li>IRC: claudiom (#oggcastplanet on Freenode)</li>\r\n<li>E-mail: claudio (at) linuxbasement (dot) com</li>\r\n</ul>\r\n',152,0,0,'CC-BY-SA','Interactive Fiction,interpreter,Android,Son of Hunky Punk,Hunky Punk',0,0,1),
(2568,'2018-06-06','Personal finance',3282,'How to manage personal finances.','<h2 id=\"personal-finances\">Personal finances</h2>\r\n<h3 id=\"problem\">Problem</h3>\r\n<p>People need to save for retirement. But how do we do that?</p>\r\n<p>Conventional wisdom in the USA says that Social Security is your retirement fund.</p>\r\n<p>There\'s no guarantee that will still be around when you retire, and it\'s entirely out of your hands. It maybe a good bonus, but possibly it isn\'t something to rely on.</p>\r\n<p>So how do we do it?</p>\r\n<h3 id=\"they-dont-teach-you-this-stuff-in-school\">They don\'t teach you this stuff in school</h3>\r\n<p>People say you should save for retirement, but they forget to say <em>how</em>.</p>\r\n<p>Currently, there are two de facto methods of funding retirement in the USA:</p>\r\n<ul>\r\n<li>social security: abstract, not guaranteed. Assumes you start contributing to ssn early</li>\r\n<li>401k. abstract, indirect unless you take active role in tracking it. best if you start early.</li>\r\n</ul>\r\n<p>In other countries, there may be significant alternatives. For instance, Kiwisaver in New Zealand.</p>\r\n<p>These methods are OK, but difficult for you to interact with directly.</p>\r\n<h3 id=\"there-are-two-direct-levels-of-investment\">There are two direct levels of investment:</h3>\r\n<ol start=\"0\" type=\"1\">\r\n<li>At your bank: CDs and mutual funds</li>\r\n</ol>\r\n<ul>\r\n<li>Go to your bank, ask to invest in a mutual fund or Certificate of Deposit (CD)</li>\r\n</ul>\r\n<ol type=\"1\">\r\n<li>Stock market: your local market and the US market</li>\r\n</ol>\r\n<ul>\r\n<li>what: direct investment in &quot;publically traded&quot; (whatever that means) companies</li>\r\n<li>how: <a href=\"https://etrade.com\" class=\"uri\">https://etrade.com</a> or <a href=\"https://fidelity.com\" class=\"uri\">https://fidelity.com</a></li>\r\n<li>In other countries, look for brokers who will invest your money in local or international markets</li>\r\n</ul>\r\n',78,0,0,'CC-BY-SA','money, finance, life',0,0,1),
(2569,'2018-06-07','Pandemic: Reign of Cthulu board game review',1140,'Klaatu reviews a board game','<p><a href=\"https://boardgamegeek.com/boardgame/192153/pandemic-reign-cthulhu\" target=\"_blank\">Pandemic Reign of Cthulu</a>\r\n</p><p>\r\n<a href=\"https://boardgamegeek.com/boardgame/30549/pandemic\" target=\"_blank\">Pandemic</a> original edition\r\n</p>\r\n<p>Mods can be found online. For instance: <a href=\"https://www.fractuslearning.com/pandemic-board-game/\" target=\"_blank\">fractuslearning.com&#47;pandemic-board-game</a></p>\r\n\r\n',78,95,0,'CC-BY-SA','game,tabletop',0,0,1),
(2571,'2018-06-11','Kill Dr. Lucky',1168,'Klaatu reviews a board game','<p>Details about <a href=\"https://paizo.com/products/btpy9ijp?Kill-Doctor-Lucky\" target=\"_blank\">Kill Doctor Lucky</a> on Paizo.com.</p>',78,95,0,'CC-BY-SA','game,tabletop',0,0,1),
(2570,'2018-06-08','Penguicon 2018 Report',987,'Penguicon 2018 took place on May 4-6, 2018 in Southfield, Michigan','<p>Penguicon 2018 is a combined technology and science fiction convention in Southfield, Michigan, a suburb of Detroit, and presents over 500 hours of programming over the entire weekend. Of this, around 100 hours are open source, tech-related. In this episode I tell you about my own personal experience at Penguicon this year.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://2018.penguicon.org/\" class=\"uri\">https://2018.penguicon.org/</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCZFipeZtQM5CKUjx6grh54g\" class=\"uri\">https://www.youtube.com/channel/UCZFipeZtQM5CKUjx6grh54g</a></li>\r\n<li><a href=\"https://www.michaelwlucas.com/\" class=\"uri\">https://www.michaelwlucas.com/</a></li>\r\n<li><a href=\"https://www.physics.ccsu.edu/larsen/\" class=\"uri\">https://www.physics.ccsu.edu/larsen/</a></li>\r\n<li><a href=\"https://solarsystem1.jpl.nasa.gov/ssa/home.cfm\" class=\"uri\">https://solarsystem1.jpl.nasa.gov/ssa/home.cfm</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCHkYOD-3fZbuGhwsADBd9ZQ\" class=\"uri\">https://www.youtube.com/channel/UCHkYOD-3fZbuGhwsADBd9ZQ</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2510\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2510</a></li>\r\n<li><a href=\"https://www.zwilnik.com\" class=\"uri\">https://www.zwilnik.com</a></li>\r\n</ul>\r\n',198,96,0,'CC-BY-SA','Penguicon 2018',0,0,1),
(2573,'2018-06-13','Foundations of git rebase',1229,'Klaatu talks about git rebase','<p>A git rebase is like a git merge done through rose-coloured glasses.</p>\r\n\r\n<p>\r\nYou can see it for yourself by doing this little experiment. Assuming the <code>alice</code> directory is a valid git repository&#58;\r\n</p>\r\n\r\n<pre><code>$ cd alice\r\n$ echo \"foo\" &gt;&gt; rebase.episode\r\n$ git add rebase.episode ; git commit -m \'begin rebase episode\'\r\n$ git checkout -b monsters\r\n\r\n$ git branch\r\n* monsters\r\nmaster\r\n$ echo \"ghoul\" &gt;&gt; ghoul.txt\r\n$ git add ghoul.txt ; git commit -m \'ghoul\'\r\n$ git checkout master\r\n$ echo \"rogue\" &gt;&gt; rogue.txt\r\n$ git add rogue.txt ; git commit -m \'rogue\'\r\n\r\n$ git checkout monsters\r\n$ echo \"dragon\" &gt;&gt; dragon.txt\r\n$ git add dragon.txt ; git commit -m \'dragon\'\r\n\r\n$ git checkout master\r\n$ echo \"paladin\" &gt;&gt; paladin.txt\r\n$ git add paladin.txt ; git commit -m \'paladin\'\r\n</code></pre>\r\n\r\n<p>\r\nYou have now emulated a bunch of activity on two separate branches of a git repository.\r\nCreate a copy of the repo so that you can perform two separate git actions.\r\n</p>\r\n\r\n<pre><code>$ cd ..\r\n$ cp -r alice alice-merge\r\n$ cp -r alice alice-base\r\n</code></pre>\r\n\r\n<p>\r\nDo an honest merge&#58;\r\n</p>\r\n\r\n<pre><code>$ cd alice-merge\r\n$ git checkout master\r\n$ git merge monsters\r\n</code></pre>\r\n\r\n<p>\r\nThe log shows you an accurate representation what got merged, and how all those changes came to be&#58;\r\n</p>\r\n\r\n<pre><code>$ git log --oneline\r\n123456 Merged monsters into master\r\n789101 paladin\r\n112131 dragon\r\n415161 rogue\r\n718191 ghoul\r\n7ef217 begin rebase episode\r\n</code></pre>\r\n\r\n<p>\r\nNow perform a rebase.\r\n</p>\r\n\r\n<pre><code>$ cd ../alice-base\r\n$ git checkout master\r\n$ git rebase monsters\r\n</code></pre>\r\n\r\n<p>\r\nThe log displays a different story than what really happened.\r\n</p>\r\n\r\n<pre><code>123456 Merged monsters into master\r\n8e9122 paladin\r\n21d163 rogue\r\n912a3f dragon\r\n51c098 ghoul\r\n7ef217 begin rebase episode\r\n</code></pre>\r\n\r\n<p>\r\nBetter? Worse? YOU DECIDE&#33;\r\n</p>\r\n\r\n',78,81,0,'CC-BY-SA','git,rebase,merge',0,0,1),
(2580,'2018-06-22','Diabetes',841,'This is the story of how I became diabetic and what I did about it.','<p>For the last 15 years or so Diabetes has been a central fact in my life, and I needed to learn what to do about it. I think I discovered a way I can live with it and still have a good quality of life</p>\r\n<ul>\r\n<li><a href=\"https://www.webmd.com/diabetes/default.htm\" class=\"uri\">https://www.webmd.com/diabetes/default.htm</a></li>\r\n<li><a href=\"https://www.aao.org/eye-health/diseases/what-is-diabetic-retinopathy\" class=\"uri\">https://www.aao.org/eye-health/diseases/what-is-diabetic-retinopathy</a></li>\r\n<li><a href=\"https://www.mayoclinic.org/diseases-conditions/diabetic-neuropathy/symptoms-causes/syc-20371580\" class=\"uri\">https://www.mayoclinic.org/diseases-conditions/diabetic-neuropathy/symptoms-causes/syc-20371580</a></li>\r\n<li><a href=\"https://www.webmd.com/diabetes/tc/diabetic-nephropathy-topic-overview#1\" class=\"uri\">https://www.webmd.com/diabetes/tc/diabetic-nephropathy-topic-overview#1</a></li>\r\n<li><a href=\"https://www.diabetes-book.com/\" class=\"uri\">https://www.diabetes-book.com/</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=338\" class=\"uri\">https://www.palain.com/?page_id=338</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health, Medicine, Diabetes',0,0,1),
(2574,'2018-06-14','Personal cash-only finance',1800,'Klaatu discusses the advantages and disadvantages of going [mostly] cash-only','<p>Klaatu discusses the advantages and disadvantages of going [mostly] cash-only</p>\r\n',78,0,0,'CC-BY-SA','money, finance, life',0,0,1),
(2579,'2018-06-21','Ubuntu 18.04 Mate',620,'This is a short show on installing the latest Ubuntu 18.04 onto a laptop and desktop PC','<h2 id=\"ubuntu-mate-18.04\">Ubuntu Mate 18.04</h2>\r\n<p>Good day to all you HPR Listers. Sorry that its been a while since I recorded a show, but as they say life has got in the way over the last few months, and I\'ve spent quite a bit of it away from the home front.</p>\r\n<p>As it happens on one of those trips away my laptop running Mint Mate 18.3 LTS, based on Ubuntu 16.04LTS decided that it wouldn\'t boot as it didn\'t recognise my account, and as I had not created a Root account I could not sign in and fix the issue, which was a corrupted configuration file in the users folder.</p>\r\n<p>As luck would have it I had just downloaded the latest Ubuntu Mate 18.04 .iso to try it as a live disc, so I had a boot disc that I could use to boot the laptop and access the data to rescue all my important information which was mainly all my emails and my browser settings and bookmarks, as this is one of my travelling laptops not much of importance is permanently stored on it, so it didn\'t take long and I was ready to reinstall the OS to the PC. Just in case I had missed some important data on the current SSD, as I had a spare SSD with me in the bag, yes I\'m geeky enough to carry a spare SSD or 2 in the bag. So I dug it out and installed it into the PC, which by the way is a Dell Latitude E6540 with an i5 dual core mobile chip with hyper-threading. It\'s currently running 4Gig DDR3 RAM but can run up to 16Gig in the 2 slots it has.</p>\r\n<p>So I booted the laptop with the USB boot disc I had created and as with all recent Ubuntu releases you get a screen asking if you want to try or install the OS, as I needed a working PC I went straight to the install option. For those not familiar with Linux or Ubuntu, the installer is a joy to use and very friendly to new users. As this was a first install to this SSD the only option I had was a full install which I chose, then was asked if I wanted to do the default install which partitions the drive and installs the bootloader automatically without any further need for intervention or did I want to do a custom partition arrangement. As the default is adequate for my needs I chose this and clicked continue. During this process you also get the option of a minimal or full installation, the minimal installation gets you a running PC with the basic utilities and leaves you to chose what to install later, but as I use the software that would be omitted I chose the full install. You get asked a final time if you are sure you want to install, with a warning that all current data on the disc will be wiped, as I was happy I clicked proceed. At this point the install starts and you are taken through setting up your PC configuration for language, keyboard, and user account. By the time I had completed this, the install was half completed and the whole process took less than 15 minutes.</p>\r\n<p>After the install is complete you get the message to reboot the PC and eject the boot media to reboot into the new install, on first boot you will either be presented with the login screen or go straight to the desktop depending on the choices you made during the install. Once you are at the desktop for the first time you are presented with a wallpaper of the Ubuntu Mate logo and 2 panels one at the top and one at the bottom of the screen. The top one has for those more traditional Linux and Windows users all the information you would expect on the lower panel, such as the menu, notification area etc. As I\'m more traditional in my use of a PC I quickly set up the lower panel with the Advanced Mate Menu and other notification apps such as network, clock and calendar and then deleted the other panel, but obviously this is a personal preference - go with what you find comfortable.</p>\r\n<p>The next step after connecting to the local WiFi was to install any updates, which despite this release only being a few days old there were a few, but this didn\'t take long and in less than an hour, which included backing up and swapping out the SSD I had a fully working laptop running Ubuntu 18.04 Mate.</p>\r\n<p>So there are a few bits of software not included by default in Ubuntu which I use regularly, one of which is synaptic so I opened the terminal and a <code>sudo apt install synaptic</code> later I had the package manager on the PC. You may ask why, but the software Boutique doesn\'t seem to have all the software available in the repositories and I don\'t always know the appropriate name of software I\'m looking for to use the terminal all the time, so synaptic is a tool I use a lot. The next software that gets installed is Audacity as I use this for editing audio and sometimes extracting the audio stream from videos of the internet, most importantly for HPR listeners it is what I use to record and edit my HPR shows.</p>\r\n<p>So back to Ubuntu 18.04 Mate, I\'ve been running it for a month on the laptop and about 3 weeks on my main box and as you would expect from a LTS (long term support until 2023) it\'s very solid and stable, I had a glitch transferring my e mails into Thunderbird on my main box, it had worked flawlessly on the laptop, so I ended up having to reinstall from scratch and on the second install it went perfectly, I think it was down to the way I set up Thunderbird which screwed things up, not the OS, but it\'s all fine now and I didn\'t lose anything in the process. For me coming from Mint there are a couple of utilities the Mint developers have implemented that are not available in Ubuntu, but nothing I can\'t work around. Saying that, if there are any Ubuntu developers out there, the Mint USB drive formatter and USB boot disc creation utilities are nice and simple to use but not available in the Ubuntu repositories.</p>\r\n<p>Obviously I\'ve only had limited time to get to use the new OS but so far it doesn\'t seem too bad coming back to the mother ship so to speak from several years of using Mint Mate, virtually since its inception, but as I record this there has been nothing that has made me feel I need to rush and reinstall Mint, so I\'ll continue with Ubuntu Mate 18.04 at least until the new Mint19 based on this Ubuntu release comes out.</p>\r\n<p><a href=\"https://ubuntu-mate.org/download/\" class=\"uri\">https://ubuntu-mate.org/download/</a></p>\r\n',338,57,0,'CC-BY-SA','Linux, Ubuntu',0,0,1),
(2576,'2018-06-18','My swedish and german podcasts part 1',335,'I\'m recommending 6 podcasts in swedish and german','<ul>\r\n<li><strong>P1 Språket</strong> <a href=\"https://api.sr.se/api/rss/pod/4012\" class=\"uri\">https://api.sr.se/api/rss/pod/4012</a></li>\r\n<li><strong>P1 Vetenskapsradion Historia</strong> <a href=\"https://api.sr.se/api/rss/pod/4020\" class=\"uri\">https://api.sr.se/api/rss/pod/4020</a></li>\r\n<li><strong>Medierna i P1</strong> <a href=\"https://api.sr.se/api/rss/pod/3951\" class=\"uri\">https://api.sr.se/api/rss/pod/3951</a></li>\r\n<li><strong>@mediasres</strong> <a href=\"https://www.deutschlandfunk.de/podcast-mediasres.762.de.podcast\" class=\"uri\">https://www.deutschlandfunk.de/podcast-mediasres.762.de.podcast</a></li>\r\n<li><strong>Europa heute</strong> <a href=\"https://www.deutschlandfunk.de/podcast-europa-heute.796.de.podcast\" class=\"uri\">https://www.deutschlandfunk.de/podcast-europa-heute.796.de.podcast</a></li>\r\n<li><strong>Computer und Kommunikation</strong> <a href=\"https://www.deutschlandfunk.de/podcast-computer-und-kommunikation.685.de.podcast\" class=\"uri\">https://www.deutschlandfunk.de/podcast-computer-und-kommunikation.685.de.podcast</a></li>\r\n</ul>',309,75,0,'CC-BY-SA','podcasts,swedish,german,language,media,europe',0,0,1),
(2577,'2018-06-19','Emigration',1855,'Howto emigrate','<p>Confused about leaving your homeland for &#60;strike&#62;greener&#60;&#47;strike&#62; pastures? Maybe this episode will shed some light on the subject.</p>\r\n\r\n<p>Public domain music from <a href=\"https://archive.org/details/Americasnationalanthem\" target=\"_blank\">archive.org</a>. Can you find your national anthem? Do you know all the words to your national anthem? Either way, you should be ashamed of yourself.</p>',78,0,0,'CC-BY-SA','Emigration,visa,permanent residency,citizenship',0,0,1),
(2575,'2018-06-15','Quick Tips June 2018',826,'I go over a few quick tips for June','<ul>\r\n<li>sites that required two factor tips</li>\r\n<li>Referb your can opener</li>\r\n<li>Referb your powerwheels</li>\r\n<li>Humidifier filter DIY</li>\r\n<li>free anonymous email over TOR</li>\r\n</ul>',36,0,1,'CC-BY-SA','QuickTips',0,0,1),
(2578,'2018-06-20','LinuxLUGcast 102 the lost episode',13976,'LinuxLUGcast episode 102. The lost episode.','<p>\r\nThis was episode 102 of the LinuxLUGcast.\r\n<br/>\r\nSo the LinuxLUGcast is an open podcast/LUG that meets every first and third friday of the month using mumble. This method of running a podcast leaves it open to anyone showing up (which is what we want because it gets difficult for fiftyonefifty and I to come up with topics all the time). We have also gotten the reputation of being a safe for work podcast. This is why episode 102 is being posted here. Between the not safe for work language and the fact that after a few drinks during the podcast I get a little rambly we thought it best not to publish it on the regular LinuxLUGcast feed, but I thought there was some good conversation here that would be lost if it did not go somewhere. After some discussion we at the LinuxLUGcast decided that we would publish it here so that it could be heard by the HPR community.\r\n<br/>\r\nWe have also done some website remodeling which has screwed up the .ogg feed, and wanted to let people know that we are still podcasting and to please check out\r\n<a href=\"https://www.linuxlugcast.com/\">https://www.linuxlugcast.com/</a> for the new .ogg feed.\r\n<br/>\r\nEnjoy\r\n</p>\r\n<p>\r\np.s. please forgive my rambling\r\n</p>\r\n',269,0,1,'CC-BY-SA','linux, computing',0,0,1),
(2585,'2018-06-29','Check to see if a Remote Control is working',99,'Yet another amazing life hack from Ken','<p>\r\nEver have a remote control that didn\'t seem to be working ? With this AMAZING LIFE HACK you can see the unseen</p>\r\n<p>\r\n<small>\r\nOK all it is is looking at the remote using your camera - but still...\r\n</small>\r\n</p>\r\n',30,0,1,'CC-BY-SA','remote control, life hack',0,0,1),
(2581,'2018-06-25','My new 3D printer - impressions of the Creality Ender 3',1239,'I bought a Creality Ender 3 3D printer in June 2018. Here are my first impressions of it','<h1 id=\"my-new-3d-printer---impressions-of-the-creality-ender-3\">My new 3D printer - impressions of the Creality Ender 3</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>I have been thinking of buying a 3D printer for a year or so. I had thought of getting a <a href=\"https://www.prusaprinters.org/prusa-i3/\" title=\"Prusa i3 MK3\">Prusa i3 MK3</a> in kit form, but although it\'s cheaper than the built form this printer is not cheap, and I doubted my ability to build it. I was also unsure whether there was a real need for the capabilities of a 3D printer in my life, and whether such a purchase was justified.</p>\r\n<p>I had noticed the Chinese <a href=\"https://www.creality3d.cn/creality-cr-10-3d-printer-p00096p1.html\" title=\"Creality CR10\">Creality CR10</a> printer in the recent past, and wondered about buying one of these at about half the price of the Prusa. This is a good-sized printer which comes fully-assembled as I understand, and it has had many good reviews.</p>\r\n<p>When the <a href=\"https://www.creality3d.cn/creality-ender-3-3d-printer-p00095p1.html\" title=\"Creality Ender 3\">Creality Ender 3</a> was released in April 2018 for around half the price of the CR10 it looked worth the risk to see if I really needed a 3D printer. So I bought one (from Amazon) in June.</p>\r\n<p>As I write this (2018-06-10) it\'s been less than a week since it was delivered, so this is a very preliminary look at the printer.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>For the rest of the notes for this episode <a href=\"https://hackerpublicradio.org/eps/hpr2581/full_shownotes.html\">look here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/3D_printing\">Wikipedia definition of 3D printing</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Bowden_extruder\">Wikipedia article on the <em>Bowden extruder</em></a></li>\r\n<li>Printers mentioned:\r\n<ul>\r\n<li><a href=\"https://www.prusaprinters.org/prusa-i3/\">Prusa i3 MK3</a></li>\r\n<li>Creality CR10\r\n<ul>\r\n<li><a href=\"https://www.creality3d.cn/creality-cr-10-3d-printer-p00096p1.html\">Website</a></li>\r\n<li><a href=\"https://www.banggood.com/DIY-Creality-CR-10-3D-Printer-300300400mm-Printing-Size-1_75mm-0_4mm-Nozzle-p-1085645.html?cur_warehouse=USA\">Buy on Banggood</a></li>\r\n</ul></li>\r\n<li>Creality Ender 3\r\n<ul>\r\n<li><a href=\"https://www.creality3d.cn/creality-ender-3-3d-printer-p00095p1.html\">Website</a></li>\r\n<li><a href=\"https://www.banggood.com/Creality-3D-Ender-3-V-slot-Prusa-I3-DIY-3D-Printer-Kit-220x220x250mm-Printing-Size-p-1278399.html?cur_warehouse=CN\">Buy on Banggood</a></li>\r\n<li><a href=\"https://all3dp.com/1/creality-ender-3-3d-printer-review/\">All3DP Review</a></li>\r\n</ul></li>\r\n</ul></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/DIN_rail\">Wikipedia article on DIN Rails</a></li>\r\n<li>Thingiverse items:\r\n<ul>\r\n<li><a href=\"https://www.thingiverse.com/thing:2874536\">Ender 3 bed levelling GCode</a></li>\r\n<li><a href=\"https://www.thingiverse.com/thing:2610621/files\">DIN Rail fittings</a></li>\r\n<li><a href=\"https://www.thingiverse.com/3DMakerFun/collections/creality-3d-ender-3-upgrades\">Printable upgrades for the Ender 3</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','3D printer',0,0,1),
(2582,'2018-06-26','3 Contribution case studies',2699,'How easy is it for your potential contributors to contribute?','<p><em>How easy is it for your potential contributors to contribute?\r\nKlaatu looks at three open source and open culture projects to determine how easy they make it for your potential contributors to contribute?\r\n</em></p> ',78,0,0,'CC-BY-SA','FLOSS contributions',0,0,1),
(2590,'2018-07-06','Blowing a PC Power Supply',229,'Just a short show on how I managed to blow the power supply on my desktop PC','<p>Greetings Hacker Public Radio listeners, Tony Hughes again coming all the way from Blackpool in the North West of the UK. Originally this show was going to be about some new kit that I have recently bought at my favourite computer auction. However as luck or actually bad luck should have it I fried the power supply on my Desktop machine yesterday as I was setting it up again after moving back to my office.</p>\r\n<p>The PC is a HP Compaq Elite 8300 micro Desk top tower with a i7 3rd generation 3770 3.4Ghz CPU and since upgrades now has 16Gig Ram and a Primary 256Gig SSD. This is my daily driver and I\'ve been running it for a couple of years since I bought it at the said auction. It is the best PC I\'ve ever owned; the full specifications are here:</p>\r\n<p><a href=\"https://www.cnet.com/products/hp-compaq-elite-8300-cmt-core-i7-3770-3-4-ghz-4-gb-1-tb-b2d12utaba/specs/\" class=\"uri\">https://www.cnet.com/products/hp-compaq-elite-8300-cmt-core-i7-3770-3-4-ghz-4-gb-1-tb-b2d12utaba/specs/</a></p>\r\n<p>As I said I was re setting up my full rig after moving it back to the office upstairs after a temporary move while we had a house guest. As I was plugging in the power cable there was a flash and crack, and a few expletives were uttered, sure enough when I switched of the power at the plug and reconnected the power cable and then tried to power on the PC, it was dead. I was hoping that it was the power supply that had blown and as I had a spare I was not too concerned. However on investigation HP have done the dirty with the design of the motherboard and power supply and neither are standard ATX configuration, yes propriety hardware for this baby.</p>\r\n<p>I was lucky as a few months ago I had picked up a i3 HP using the same case, so I pulled out the power supply from this and fitted it into the i7 PC and luckily that did turn out to be the issue, and the PC sprang into life when I hit the power button. I’m now left with a PC that works, but another one that unless I can find a power supply to match is next to useless except for spares.</p>\r\n<p>Lessons learned, never connect the power cable when the socket is live, if your plug socket doesn\'t have a switch connect the kettle end to the PC first to reduce the risk of a short like mine. Also never assume that 2nd hand PC’s are standard case/motherboard format as you may have a problem sourcing spares if anything goes wrong as in my case. It’s not the first PC disaster I\'ve had over the years and I can as in this case usually get round them, although not when I bricked the BIOS on a Lenovo x200 one time trying to clear a BIOS password, again I was left with a box of spares which actually came in very handy.</p>\r\n<p>Well that\'s the end of my tale of woe. I’ll do another episode on the recent trip to the auction and my new laptops shortly. This is Tony Hughes for Hacker Public Radio signing off for now.</p>\r\n',338,57,0,'CC-BY-SA','Computers, Repair, safety',0,0,1),
(2595,'2018-07-13','New laptop bargain?',252,'This is a short show about another trip to the computer auction and one of my purchases','<p>Greetings HPR listeners this is Tony Hughes again coming from Blackpool in the UK. Well, as you heard on my last episode I recently visited the computer auction I frequent here in the UK. If you want to drool over the catalogue at any time their website is here:</p>\r\n<p><a href=\"https://www.realnorth.co.uk/\" class=\"uri\">https://www.realnorth.co.uk/</a></p>\r\n<p>So at the sale in June they had some really good 3-4 year old laptops for sale so I decided to take a trip and see if I could liberate a few bargains, and one of the items I came away with was 3 Toshiba Z30a Ultra Books of the i5 4th generation. The basic specs are:</p>\r\n<ul>\r\n<li>i5-4300U CPU</li>\r\n<li>128GB mSATA solid state drive</li>\r\n<li>13.3 inch display</li>\r\n<li>8Gig DDR Ram</li>\r\n<li>3 x USB3 ports</li>\r\n<li>VGA and HDMI video out</li>\r\n<li>Full Ethernet Port</li>\r\n<li>Combined Audio in/out jack</li>\r\n<li>SD card reader</li>\r\n<li>Mobile Intel ® HD Graphics with up to 1792MB dynamically allocated</li>\r\n<li>shared graphics memory.</li>\r\n</ul>\r\n<p>There will be a link in the show notes to the full specifications</p>\r\n<p><a href=\"https://www.toshiba.co.uk/discontinued-products/portege-z30-a-1fd/\" class=\"uri\">https://www.toshiba.co.uk/discontinued-products/portege-z30-a-1fd/</a></p>\r\n<p>I had also picked up some 240Gig SSD\'s and had planned to upgrade the storage but this is not possible with a 2.5 inch drive as it doesn\'t have a bay for this format. However it does support up to 128Gig High capacity SD cards so this could be an option if you don\'t want to go to the expense of upgrading the mSATA drive, however as luck would have it one of my other purchases had a 256Gig mSATA drive in a 2.5 inch caddy so that was quickly swapped out and both laptops got an upgrade. More of that in another show.</p>\r\n<p>So after doing the hardware upgrade I proceeded to install Ubuntu 18.04 MATE onto the PC. The install worked flawlessly and after completion and configuring the machine to my liking everything seems to be working just fine. The battery condition for a 4 year old laptop is excellent at over 90%, however a replacement can be had on Ebay for around £30 if needed and I always factor this into any second hand laptops I buy.</p>\r\n<p>Since I got it running I\'ve installed Windows 7 in a Virtual Machine, in this case Virtual Box as I have a preconfigured Virtual Box HDD image that makes it less of a hassle to install as I don’t have to spend days waiting for all the updates to come through. When this is running in the background it doesn\'t over tax the host machine, and for Linux users it does mean you have access to that occasional bit of light weight MS software that you may need without the need to lug around 2 PC\'s.</p>\r\n<p>So did I bag a bargain, well 4 years ago on release these laptops went for £1100+ in the UK and even today they fetch £160 in good order on the likes of Ebay for a model with the specification as I originally purchased it. I would never have been in the market to spend £1000+ on a laptop now or then so the only way I can enjoy these types of machines is after they have been pre loved by someone else. Lets just say £160 is quite a bit more than I paid but with the upgrade to 256Gig mSATA drive I have a better machine for a little less than that, I personally think I bagged a bargain which will do me good service in the coming months/years.</p>\r\n',338,57,0,'CC-BY-SA','computer auction,laptop',0,0,1),
(2584,'2018-06-28','Plot Twists In Storytelling',719,'Lostnbronx examines plot twists, including the different types, and how they can be used.','<p>Plot twists come in several varieties, and can produce different effects in stories. They can be powerful tools, done correctly, but quickly become trite and predictable if over-used, or used poorly. What\'s the best way to include them? And when might it be a mistake to even try?</p>',107,105,0,'CC-0','storytelling,plot twists,lostnbronx',0,0,1),
(2587,'2018-07-03','Cleaning out your Digital Gutters',1519,'Knightwise talks about being a geek and his quest to curate the library of his mind','<p>While cleaning out the gutters, Knightwise talks about cleaning out the digital gutters of his information consumption and looking for geeky ways to get his information fix.</p>\r\n',111,0,1,'CC-BY-SA','geek, life, lifestyle',0,0,1),
(2588,'2018-07-04','Miniature painting',1740,'Tuula rambles about how to paint miniatures while painting some toy soldiers','<p>Tuula rambles about miniature painting while painting some ancient British units (horses for chariots to be specific) for De Bellis Antiquitatis.</p>\r\n<ul>\r\n<li><p>De Bellis Antiquitatis is a quick to learn, quick to play war game for ancient period (and a bit more) - <a href=\"https://en.wikipedia.org/wiki/De_Bellis_Antiquitatis\" class=\"uri\">https://en.wikipedia.org/wiki/De_Bellis_Antiquitatis</a></p></li>\r\n<li><p>Army Painter is paint, brush and basing manufacturer - <a href=\"https://www.thearmypainter.com/\" class=\"uri\">https://www.thearmypainter.com/</a></p></li>\r\n<li><p>Osprey Publishing specializes in publishing books on modeling and history - <a href=\"https://ospreypublishing.com/\" class=\"uri\">https://ospreypublishing.com/</a></p></li>\r\n</ul>',364,114,0,'CC-BY-SA','miniatures painting',0,0,1),
(2583,'2018-06-27','Random Rant',917,'Rant on how US sound recordings copyright laws are weird & how I miss Juiced Penguin','<h3 id=\"citations\">Citations</h3>\r\n<ul>\r\n<li><a href=\"https://www.copyright.gov/docs/sound/\" class=\"uri\">https://www.copyright.gov/docs/sound/</a></li>\r\n<li><a href=\"https://www.infotoday.com/searcher/sep12/Hirtle--When-Is-1923-Going-to-Arrive-and-Other-Complications-of-the-U.S.-Public-Domain.shtml\" class=\"uri\">https://www.infotoday.com/searcher/sep12/Hirtle--When-Is-1923-Going-to-Arrive-and-Other-Complications-of-the-U.S.-Public-Domain.shtml</a></li>\r\n</ul>\r\n',354,0,1,'CC-BY-SA','Juiced Penguin,copyright,public domain',0,0,1),
(2599,'2018-07-19','Fitting a 3.5mm adapter to a bluetooth receiver.',489,'Ken cobbles together a bluetooth adapter for any 3.5mm headphone','<p>\r\nThere was a time when the perfect lightweight podcast listening station was a <a href=\"https://en.wikipedia.org/wiki/SanDisk_Sansa#Sansa_Clip\">sansa clip</a> running <a href=\"https://www.rockbox.org/\">Rockbox</a> connected to a set of <a href=\"https://www.download.p4c.philips.com/files/s/she3600_97/she3600_97_pss_aenid.pdf\">SHE3600/97 Philips In-Ear Headphones</a>.</p>\r\n<p>\r\nAlas Philips stopped producing the SHE3600/97. SanDisk reduced the specs of the clips, so Rockbox is no longer supported. We\'re left without a flexible option to listening to podcasts.\r\n</p>\r\n<p>\r\nOn the other hand the price of Android phones have fallen to sub €50 range, and <a href=\"https://www.hema.nl/winkel/vrije-tijd-kantoor/school-kantoor/media-computer/elektronica-accessoires/bluetooth-sport-oortelefoon-(39620015)?variant=39620015\">blue tooth headsets</a> can be had for €25, there is a possibility to have the portability while keeping the cost low.\r\n</p>\r\n<p>\r\nI set out to convert the bluetooth headset to a accept generic 3.5mm sockets.\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2599/hema-earbud-before-and-during.jpg\" /><br />\r\nA new ear bud set with crappy in ear buds, and the hacked set.\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2599/bluetooth-enabled-philips-shp2500.jpg\" /><br />\r\nPlays fine with large over ear headphones.\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2599/bluetooth-with-patent-pending-earbuds.jpg\" /><br />\r\nAlso with small in ear buds, complete with <a href=\"https://hackerpublicradio.org/eps.php?id=1801\">Patent Pending</a> ear identifier\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2599/motherload.jpg\" /><br />\r\nSomething to read <a href=\"https://www.amazon.com/dp/1549676938?tag=viglink20248-20\">Motherload</a>\r\n</p>\r\n',30,0,1,'CC-BY-SA','life hack, earphone, bluetooth',0,0,1),
(2589,'2018-07-05','Saving Money: a response to Klaatu\'s Personal Finance Series',867,'A response to Klaatu\'s very nice series about personal finance.','<h2>Links</h2>\r\n\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/403(b)\">403(b) Tax-Sheltered Annuity Plans</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/United_States_Savings_Bonds\">United States Savings Bonds</a></li>\r\n<li><a href=\"https://www.classicguitar.com/robert-ruck-usarobert-ruck-usa/\">Guitar Maker Robert Ruck</a></li>\r\n</ul>\r\n',238,0,0,'CC-BY-SA','personal finance, money, saving, retirement',0,0,1),
(2593,'2018-07-11','Intro to De Bellis Antiquitatis',1648,'Short intro to tabletop wargame called DBA','<p>In this episode Tuula paints rambles about De Bellis Antiquitatis while painting more toy soldiers, so expect long pauses and missing thoughts as he tries to do two things at the same time.</p>\r\n<p>De Bellis Antiquitatis (or DBA for short): <a href=\"https://en.wikipedia.org/wiki/De_Bellis_Antiquitatis\" class=\"uri\">https://en.wikipedia.org/wiki/De_Bellis_Antiquitatis</a></p>\r\n<p>While the original site seems to be gone, WADBAG unofficial guide to DBA can be found at: <a href=\"https://www.wargames-romania.ro/wordpress/wargames/de-bellis-antiquitatis-dba/the-unofficial-guide-to-dba/\" class=\"uri\">https://www.wargames-romania.ro/wordpress/wargames/de-bellis-antiquitatis-dba/the-unofficial-guide-to-dba/</a></p>\r\n',364,95,0,'CC-BY-SA','tabletop gaming',0,0,1),
(2591,'2018-07-09','International Troubleshooting',1815,'﻿NYbill troubleshoots a DIY kit of Ken Fallon’s.','<p>NYbill troubleshoots a DIY kit of Ken Fallon\'s.</p>\r\n<p>The new toy:</p>\r\n<p>AmScope SE400-Z<br />\r\n(The microscope has a nice working height underneath it so you can get your hands and tools in there.)</p>\r\n<p>The offending chip:</p>\r\n<p><a href=\"https://www.mccsemi.com/up_pdf/SRV05-4L(SOT23-6L).pdf\" class=\"uri\">https://www.mccsemi.com/up_pdf/SRV05-4L(SOT23-6L).pdf</a></p>\r\n<p>Pics for the episode:</p>\r\n<p><a href=\"https://media.gunmonkeynet.net/u/nybill/collection/international-troubleshooting/\" class=\"uri\">https://media.gunmonkeynet.net/u/nybill/collection/international-troubleshooting/</a></p>\r\n',235,103,0,'CC-BY-SA','DIY, Kit, Electronics, Troubleshooting',0,0,1),
(2605,'2018-07-27','The Eyes Have It',599,'My history with vision issues and how I have dealt with them.','<p>My history with vision issues started when I was 3 years old, and I am still dealing with some issues. Fortunately, things are well-controlled and I am doing well.</p>\r\n<ul>\r\n<li><a href=\"https://www.mayoclinic.org/diseases-conditions/diabetic-retinopathy/symptoms-causes/syc-20371611\" class=\"uri\">https://www.mayoclinic.org/diseases-conditions/diabetic-retinopathy/symptoms-causes/syc-20371611</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=338\" class=\"uri\">https://www.palain.com/?page_id=338</a></li>\r\n<li><a href=\"https://www.webmd.com/eye-health/tc/posterior-vitreous-detachment-topic-overview\" class=\"uri\">https://www.webmd.com/eye-health/tc/posterior-vitreous-detachment-topic-overview</a></li>\r\n<li><a href=\"https://nei.nih.gov/health/maculardegen/armd_facts\" class=\"uri\">https://nei.nih.gov/health/maculardegen/armd_facts</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=340\" class=\"uri\">https://www.palain.com/?page_id=340</a></li>\r\n</ul>',198,100,0,'CC-BY-SA','Health, Medicine, Eye Care, Vision',0,0,1),
(2592,'2018-07-10','Tech Talk With Allison',3010,'This is a talk with Allison about webites, ruby, os design and other such things. ','<p>\r\n<img src=\"https://theadesilva.com/hpr_allison.jpg\"/><br/><br/>\r\n\r\nCome join us and listen to Allison talk about her tech!!!  This talk includes subjects like websites, ruby, os design and other such things.<br/>\r\n</p>\r\n<p>Allison\'s email address: <a href=\"mailto:allison@isams.net\" target=\"_top\">allison@isams.net</a></p>\r\n',115,0,0,'CC-BY-SA','os, ruby, webdev',0,0,1),
(2615,'2018-08-10','Cancer',1043,'My history with cancer and how I have dealt with it.','<p>I had surgery for cancer in 2010, and family history of cancer, which means certain things have had to be done.</p>\r\n<ul>\r\n<li><a href=\"https://www.palain.com/?page_id=338\" class=\"uri\">https://www.palain.com/?page_id=338</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Gleason_grading_system\" class=\"uri\">https://en.wikipedia.org/wiki/Gleason_grading_system</a></li>\r\n<li><a href=\"https://www.cancer.org/cancer/prostate-cancer/treating.html\" class=\"uri\">https://www.cancer.org/cancer/prostate-cancer/treating.html</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=344\" class=\"uri\">https://www.palain.com/?page_id=344</a></li>\r\n</ul>',198,100,0,'CC-BY-SA','Health, Medicine, Cancer, Prostate, Colon, Lungs',0,0,1),
(2598,'2018-07-18','Calculating planetary orbits in Haskell',1711,'Tuula talks about calculating planetary orbits','<p>Function signatures (it might or might not be helpful to have these at hand while listening):</p>\r\n<ul>\r\n<li>Helpers:</li>\r\n</ul>\r\n<pre><code>    radToDeg :: Floating a =&gt; a -&gt; a\r\n    degToRad :: Floating a =&gt; a -&gt; a\r\n    clamp :: Float -&gt; Float</code></pre>\r\n<ul>\r\n<li><p>Time:</p></li>\r\n</ul>\r\n<pre><code>    day :: Int -&gt; Int -&gt; Int -&gt; Float -&gt; Day Float</code></pre>\r\n<ul>\r\n<li>Orbital parameters:</li>\r\n</ul>\r\n<pre><code>    longitudeOfAscendingNode :: Orbit body center =&gt; body -&gt; center -&gt; Day d -&gt; LongAscNode body center\r\n    inclinationToEcliptic :: Orbit body center =&gt; body -&gt; center -&gt; Day d -&gt; InclToEcl body center\r\n    argumentOfPeriapsis :: Orbit body center =&gt; body -&gt; center -&gt; Day d -&gt; ArgPeri body center\r\n    semiMajorAxis :: Orbit body center =&gt; body -&gt; center -&gt; Day d -&gt; SemiMajor body center\r\n    eccentricity :: Orbit body center =&gt; body -&gt; center -&gt; Day d -&gt; Ecc body center\r\n    meanAnomaly :: Orbit body center =&gt; body -&gt; center -&gt; Day d -&gt; MeanAno body center</code></pre>\r\n<ul>\r\n<li>Calculating location on orbital plane:</li>\r\n</ul>\r\n<pre><code>    eccAnomaly :: MeanAno a b -&gt; Ecc a b -&gt; EccAnomaly a b\r\n    trueAnomaly :: EccAnomaly a b -&gt; Ecc a b -&gt; TrueAnomaly a b\r\n    dist :: EccAnomaly a b -&gt; Ecc a b -&gt; SemiMajor a b -&gt; Distance a b</code></pre>\r\n<ul>\r\n<li>Translating between coordinate systems:</li>\r\n</ul>\r\n<pre><code>    toEclCoord :: TrueAnomaly a b -&gt; Distance a b -&gt; LongAscNode a b -&gt; ArgPeri a b -&gt; InclToEcl a b -&gt; EclCoord a b\r\n    toEqCoordinates :: EclCoord body Earth -&gt; Day Float -&gt; EqCoord body</code></pre>\r\n<p>Some helpful links:</p>\r\n<ul>\r\n<li>Guide by Paul Schlyter - <a href=\"https://www.stjarnhimlen.se/comp/ppcomp.html\" class=\"uri\">https://www.stjarnhimlen.se/comp/ppcomp.html</a></li>\r\n<li>Sample calculations by Paul Schlyter - <a href=\"https://www.stjarnhimlen.se/comp/tutorial.html\" class=\"uri\">https://www.stjarnhimlen.se/comp/tutorial.html</a></li>\r\n<li>Tuula\'s blog post - <a href=\"https://engineersjourney.wordpress.com/2018/06/29/planetary-orbits-and-haskell/\" class=\"uri\">https://engineersjourney.wordpress.com/2018/06/29/planetary-orbits-and-haskell/</a></li>\r\n<li>Definition of orbital elements in Wikipedia - <a href=\"https://en.wikipedia.org/wiki/Orbital_elements\" class=\"uri\">https://en.wikipedia.org/wiki/Orbital_elements</a></li>\r\n<li>Units of angle in Wikipedia - <a href=\"https://en.wikipedia.org/wiki/Degree_(angle)\" class=\"uri\">https://en.wikipedia.org/wiki/Degree_(angle)</a> and <a href=\"https://en.wikipedia.org/wiki/Radian\" class=\"uri\">https://en.wikipedia.org/wiki/Radian</a></li>\r\n</ul>\r\n',364,107,0,'CC-BY-SA','haskell,astronomy',0,0,1),
(2601,'2018-07-23','Liverpool Makerfest 2018',634,'This is an interview with Chris Dell','<p>This is the first in a series of interviews carried out at Liverpool Makefest 2018</p>\r\n<p>This first interview is with Chris Dell about EduBlocks</p>\r\n<ul>\r\n<li><p><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></p></li>\r\n<li><p><a href=\"https://edublocks.org/\" class=\"uri\">https://edublocks.org/</a></p></li>\r\n</ul>\r\n',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, EduBlocks',0,0,1),
(2606,'2018-07-30','Liverpool Makefest 2018 - interview with Dan Lynch',520,'This is an interview with Dan Lynch one of this year\'s Makefest organisers','<p>Another interview from Liverpool Makefest 2018 this time with Dan Lynch of Linux Outlaws and Floss Weekly</p>\r\n<ul>\r\n<li><p><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></p></li>\r\n<li><p><a href=\"https://makefest.podfactory.org/\" class=\"uri\">https://makefest.podfactory.org/</a></p></li>\r\n<li><p><a href=\"https://twit.tv/shows/floss-weekly\" class=\"uri\">https://twit.tv/shows/floss-weekly</a></p></li>\r\n<li><p><a href=\"https://sixgun.org/linuxoutlaws/\" class=\"uri\">https://sixgun.org/linuxoutlaws/</a></p></li>\r\n</ul>\r\n',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, Dan Lynch, Linux Outlaws, Floss Weekly',0,0,1),
(2871,'2019-08-05','HPR Community News for July 2019',3794,'HPR Volunteers talk about shows released and comments posted in July 2019','<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/0379.html\" target=\"_blank\">mightbemike</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=2846\" target=\"_blank\">2846</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-07-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2846\" target=\"_blank\">HPR Community News for June 2019</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=2847\" target=\"_blank\">2847</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-07-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2847\" target=\"_blank\">earbuds</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=2848\" target=\"_blank\">2848</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-07-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2848\" target=\"_blank\">Random numbers in Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2849\" target=\"_blank\">2849</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-07-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2849\" target=\"_blank\">HPR NYE Show 2018-2019 part 5</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2850\" target=\"_blank\">2850</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-07-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2850\" target=\"_blank\">NIST Cybersecurity Framework</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=2851\" target=\"_blank\">2851</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-07-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2851\" target=\"_blank\">An introduction to the work of fire fighters</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=2852\" target=\"_blank\">2852</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-07-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2852\" target=\"_blank\">Gnu Awk - Part 16</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=2853\" target=\"_blank\">2853</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-07-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2853\" target=\"_blank\">Feeding the beast</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0309.html\" target=\"_blank\">folky</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2854\" target=\"_blank\">2854</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-07-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2854\" target=\"_blank\">Telling myself something In The Morning</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=2855\" target=\"_blank\">2855</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-07-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2855\" target=\"_blank\">HPR NYE Show 2018-2019 part 6</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2856\" target=\"_blank\">2856</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-07-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2856\" target=\"_blank\">Mint Mobile Security Rant</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=2857\" target=\"_blank\">2857</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-07-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2857\" target=\"_blank\">Creating CounterParty Collectible Tokens for the Bitcorn Game</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0379.html\" target=\"_blank\">mightbemike</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2858\" target=\"_blank\">2858</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-07-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2858\" target=\"_blank\">Vehicle designer for a space game</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2859\" target=\"_blank\">2859</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-07-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2859\" target=\"_blank\">HPR NYE Show 2018-2019 part 7</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2860\" target=\"_blank\">2860</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-07-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2860\" target=\"_blank\">Encryption and Quantum Computing</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=2861\" target=\"_blank\">2861</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-07-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2861\" target=\"_blank\">Safety Razors</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=2862\" target=\"_blank\">2862</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-07-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2862\" target=\"_blank\">Art vs. Commerce In Storytelling</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2863\" target=\"_blank\">2863</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-07-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2863\" target=\"_blank\">Simplified application architectures for improved security</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0246.html\" target=\"_blank\">Beeza</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2864\" target=\"_blank\">2864</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-07-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2864\" target=\"_blank\">One weird trick to add a --help option to your awk scripts</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=2865\" target=\"_blank\">2865</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-07-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2865\" target=\"_blank\">The YouTube channels I really like</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=2866\" target=\"_blank\">2866</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-07-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2866\" target=\"_blank\">Intro to Bitcoin for techies</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0379.html\" target=\"_blank\">mightbemike</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2867\" target=\"_blank\">2867</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-07-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2867\" target=\"_blank\">The Kenwood TS940S Automatic Tuning Unit</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=2868\" target=\"_blank\">2868</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-07-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2868\" target=\"_blank\">Custom data with Persistent</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 13 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2787#comments\" target=\"_blank\">hpr2787</a></strong>\n(2019-04-09) \"<em>NodeJS Part 1</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2787#2\" target=\"_blank\">Comment 2</a>:\noperat0r on 2019-07-09:\n\"Part2 ?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=438#comments\" target=\"_blank\">hpr438</a></strong>\n(2009-09-05) \"<em>Podcasts I Listen To</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0077.html\" target=\"_blank\">Dave Yates</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=438#1\" target=\"_blank\">Comment 1</a>:\nViper on 2019-07-03:\n\"Archive of podcasts\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 11 comments on 4 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2851#comments\" target=\"_blank\">hpr2851</a></strong>\n(2019-07-08) \"<em>An introduction to the work of fire fighters</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2851#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-07-08:\n\"Cars parked over the put\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2851#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2019-07-08:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2852#comments\" target=\"_blank\">hpr2852</a></strong>\n(2019-07-09) \"<em>Gnu Awk - Part 16</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=2852#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-07-09:\n\"thanks\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2852#2\" target=\"_blank\">Comment 2</a>:\nHipstre on 2019-07-09:\n\"Thank You!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2852#3\" target=\"_blank\">Comment 3</a>:\nnorrist on 2019-07-09:\n\"HPR Epic\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2852#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2019-07-13:\n\"Many thanks for the kind words\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2854#comments\" target=\"_blank\">hpr2854</a></strong>\n(2019-07-11) \"<em>Telling myself something In The Morning</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0243.html\" target=\"_blank\">Jezra</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2854#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-07-11:\n\"Bagpipes for the win!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2854#2\" target=\"_blank\">Comment 2</a>:\nDave Beck on 2019-07-18:\n\"Rusted Pipes\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2854#3\" target=\"_blank\">Comment 3</a>:\njezra on 2019-07-18:\n\"pipes up!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2859#comments\" target=\"_blank\">hpr2859</a></strong>\n(2019-07-18) \"<em>HPR NYE Show 2018-2019 part 7</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2859#1\" target=\"_blank\">Comment 1</a>:\ndodddummy on 2019-07-29:\n\"I disagree with just about all the opinions expressed in this episode.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2859#2\" target=\"_blank\">Comment 2</a>:\ndodddummy on 2019-07-29:\n\"1st hour, that is.\"</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/2019-July/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-July/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=\"ohio-linuxfest-conference-cfp\">Ohio LinuxFest Conference CFP</h3>\n<p>From Susan Rose, Social Media Manager for OLF:</p>\n<blockquote>\n<p>Dear Open Source Fans, Students and Professionals:</p>\n<p>The 2019 Ohio LinuxFest is looking for presentations on Friday and Saturday, November 1 and 2. Please visit the CFP page <a href=\"https://ohiolinux.org/call-for-presentations/\" class=\"uri\">https://ohiolinux.org/call-for-presentations/</a> for full details about submitting a proposal. The deadline is Friday, August 17, but the sooner you can submit a talk, the better.</p>\n<p>Started in 2003, the Ohio LinuxFest <a href=\"https://ohiolinux.org/\" class=\"uri\">https://ohiolinux.org/</a> is an annual grassroots conference in Columbus, Ohio dedicated to open access for all. Presentations relating to any free and open source software, not just Linux, are welcome. Areas where we’ve had talks in the past include networking, system administration, development, and community building. A preliminary pdf brochure is attached.</p>\n<p>Our audience consists of people at all skill levels. Prior speaking experience is a plus, although we do try to provide opportunities for first-time speakers. If you have any questions, please contact us at <a href=\"mailto:speakers@ohiolinux.org\">speakers@ohiolinux.org</a>. We look forward to hearing from you! Thank you for your kind attention and for sharing.</p>\n</blockquote>\n<p>The PDF Brochure mentioned is available at <a href=\"https://hackerpublicradio.org/eps/hpr2871/olf2019.pdf\" class=\"uri\">https://hackerpublicradio.org/eps/hpr2871/olf2019.pdf</a>.</p>\n<h3 id=\"problem-with-show-2855\">Problem with show 2855</h3>\n<p>We upload all HPR shows to the Internet Archive (archive.org). Shows downloaded via the HPR RSS feeds actually come from there, though they are also available on the HPR site.</p>\n<p>Unfortunately, on Friday July 12<sup>th</sup> the archive.org copy of the show <em>hpr2855 :: HPR NYE Show 2018-2019 part 6</em> was found to have been truncated and to consist only of the introduction and final part; no actual content.</p>\n<p>The problem was detected during the morning of Friday and was rectified during the afternoon (UK time). The RSS feeds were adjusted to ensure the show was re-downloaded and all <em>podcatchers</em> should have received the correct version the next time they checked the feed.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 11 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3991,'2023-11-20','YOU ARE A PIRATE ',1539,'I rant I think about piracy ','<h2 id=\"xgp-save-extractor\">XGP-save-extractor</h2>\n<p>Python script to extract/backup savefiles out of Xbox Game Pass for\nPC games.</p>\n<p>When run, the script produces a ZIP file for each supported game save\nfound in the system.</p>\n<p>In most cases the files in the ZIP can be copied to the save\ndirectory of the Steam/Epic version of the game. To find out the save\nfile location, check <a\nhref=\"https://www.pcgamingwiki.com/\">PCGamingWiki</a>.</p>\n<p><a href=\"https://github.com/Z1ni/XGP-save-extractor/releases\"\nclass=\"uri\">https://github.com/Z1ni/XGP-save-extractor/releases</a></p>\n',36,0,1,'CC-BY-SA','hacking, piracy ',0,0,1),
(2891,'2019-09-02','HPR Community News for August 2019',2224,'HPR Volunteers talk about shows released and comments posted in August 2019','<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=2869\" target=\"_blank\">2869</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-08-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2869\" target=\"_blank\">building a bike, following in John Kulp\'s footsteps</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2870\" target=\"_blank\">2870</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-08-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2870\" target=\"_blank\">Hierarchy of Evidence</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=2871\" target=\"_blank\">2871</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-08-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2871\" target=\"_blank\">HPR Community News for July 2019</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=2872\" target=\"_blank\">2872</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-08-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2872\" target=\"_blank\">Shoe Lace Tips</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=2873\" target=\"_blank\">2873</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-08-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2873\" target=\"_blank\">Death Angel - Card game</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2874\" target=\"_blank\">2874</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-08-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2874\" target=\"_blank\">Repair of G.E. Variable Speed Cassette Recorder</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2875\" target=\"_blank\">2875</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-08-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2875\" target=\"_blank\">cutting up the frames</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2876\" target=\"_blank\">2876</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-08-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2876\" target=\"_blank\">Sausage Orzotto</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0215.html\" target=\"_blank\">Windigo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2877\" target=\"_blank\">2877</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-08-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2877\" target=\"_blank\">Using Zenity with Pdmenu</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=2878\" target=\"_blank\">2878</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-08-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2878\" target=\"_blank\">Type classes in Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2879\" target=\"_blank\">2879</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-08-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2879\" target=\"_blank\">Describing how I listen to podcasts PART 1</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=2880\" target=\"_blank\">2880</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-08-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2880\" target=\"_blank\">Evaluating a Study</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=2881\" target=\"_blank\">2881</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-08-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2881\" target=\"_blank\">Automatically split album into tracks in Audacity</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=2882\" target=\"_blank\">2882</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-08-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2882\" target=\"_blank\">ONICS Part 1:  Basic Commands</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2883\" target=\"_blank\">2883</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-08-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2883\" target=\"_blank\">Pass the pigs</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2884\" target=\"_blank\">2884</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-08-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2884\" target=\"_blank\">TASCAM Porta 02 MiniStudio 4-Track Cassette Recorder Demonstration</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2885\" target=\"_blank\">2885</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-08-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2885\" target=\"_blank\">ONICS Part 2: Filtering and Extraction</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2886\" target=\"_blank\">2886</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-08-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2886\" target=\"_blank\">INFOSECOND</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=2887\" target=\"_blank\">2887</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-08-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2887\" target=\"_blank\">Stardrifter RPG Playtest Part 01</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2888\" target=\"_blank\">2888</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-08-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2888\" target=\"_blank\">Pattern matching in Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2889\" target=\"_blank\">2889</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-08-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2889\" target=\"_blank\">Describing how I listen to podcasts PART 2</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=2890\" target=\"_blank\">2890</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-08-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2890\" target=\"_blank\">Penguicon 2019 Report</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 24 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 7 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2859#comments\" target=\"_blank\">hpr2859</a></strong>\n(2019-07-18) \"<em>HPR NYE Show 2018-2019 part 7</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2859#3\" target=\"_blank\">Comment 3</a>:\nMike Ray on 2019-08-05:\n\"First hour\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2859#4\" target=\"_blank\">Comment 4</a>:\nMrsXoke on 2019-08-05:\n\"To Mike Ray\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2859#5\" target=\"_blank\">Comment 5</a>:\nMike Ray on 2019-08-06:\n\"To Mike Ray\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2859#6\" target=\"_blank\">Comment 6</a>:\nMike Ray on 2019-08-06:\n\"Active shooter drills\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2859#7\" target=\"_blank\">Comment 7</a>:\nMike Ray on 2019-08-06:\n\"Faith and values\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2859#8\" target=\"_blank\">Comment 8</a>:\nfolky on 2019-08-08:\n\"You can fastforward\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2863#comments\" target=\"_blank\">hpr2863</a></strong>\n(2019-07-24) \"<em>Simplified application architectures for improved security</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0246.html\" target=\"_blank\">Beeza</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2863#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2019-08-14:\n\"Dynamic vs static linking doesn\'t matter\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 17 comments on 7 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2869#comments\" target=\"_blank\">hpr2869</a></strong>\n(2019-08-01) \"<em>building a bike, following in John Kulp\'s footsteps</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2869#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2019-08-01:\n\"Recycled Recumbents\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2876#comments\" target=\"_blank\">hpr2876</a></strong>\n(2019-08-12) \"<em>Sausage Orzotto</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0215.html\" target=\"_blank\">Windigo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2876#1\" target=\"_blank\">Comment 1</a>:\nBookewyrmm on 2019-08-12:\n\"Salt\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2876#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2019-08-17:\n\"Re: Salt\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2876#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2019-08-20:\n\"Loved this. I was right there with you in the kitchen\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2881#comments\" target=\"_blank\">hpr2881</a></strong>\n(2019-08-19) \"<em>Automatically split album into tracks in Audacity</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=2881#1\" target=\"_blank\">Comment 1</a>:\nJonathan Kulp on 2019-08-22:\n\"Automation is nice\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2882#comments\" target=\"_blank\">hpr2882</a></strong>\n(2019-08-20) \"<em>ONICS Part 1:  Basic Commands</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2882#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2019-08-22:\n\"Great project and excellent show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2882#2\" target=\"_blank\">Comment 2</a>:\nGabriel Evenfire on 2019-08-25:\n\"Good to hear\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2884#comments\" target=\"_blank\">hpr2884</a></strong>\n(2019-08-22) \"<em>TASCAM Porta 02 MiniStudio 4-Track Cassette Recorder Demonstration</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2884#1\" target=\"_blank\">Comment 1</a>:\nClinton Roy on 2019-08-22:\n\"fantastic\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2884#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2019-08-22:\n\"awesome\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2884#3\" target=\"_blank\">Comment 3</a>:\njezra on 2019-08-22:\n\"super fun!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2884#4\" target=\"_blank\">Comment 4</a>:\nJon Kulp on 2019-08-22:\n\"By ear\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2884#5\" target=\"_blank\">Comment 5</a>:\nmcnalu on 2019-08-24:\n\"4tracks4TW\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2884#6\" target=\"_blank\">Comment 6</a>:\nJon Kulp on 2019-08-24:\n\"Can&rsquo;t bounce\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2884#7\" target=\"_blank\">Comment 7</a>:\njohanv on 2019-08-29:\n\"great show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2887#comments\" target=\"_blank\">hpr2887</a></strong>\n(2019-08-27) \"<em>Stardrifter RPG Playtest Part 01</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2887#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-08-27:\n\"Eagerly waiting for more\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2887#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2019-08-28:\n\"A future podcast in the future feed\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2890#comments\" target=\"_blank\">hpr2890</a></strong>\n(2019-08-30) \"<em>Penguicon 2019 Report</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=2890#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2019-08-31:\n\"solder/\"sodder\"/souder\"</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/2019-August/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-August/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 10 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2612,'2018-08-07','Liverpool Makefest 2018 - interview with Joe aka Concrete Dog',353,'An interview with Joe from Liverpool makefest','<p>In this episode I talk to Joe aka Concrete dog about amateur Rocketry</p>\r\n<ul>\r\n<li><p><a href=\"https://concretedog.blogspot.com/2018/\" class=\"uri\">https://concretedog.blogspot.com/2018/</a></p></li>\r\n<li><p><a href=\"https://twitter.com/concreted0g\" class=\"uri\">https://twitter.com/concreted0g</a></p></li>\r\n</ul>\r\n\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2612/hpr2612_IMG_20180630_094936.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2612/hpr2612_IMG_20180630_094936_small.jpg\" /></a><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2612/hpr2612_IMG_20180630_095644.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2612/hpr2612_IMG_20180630_095644_small.jpg\" /></a><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2612/hpr2612_IMG_20180630_100342.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2612/hpr2612_IMG_20180630_100342_small.jpg\" /></a><br />\r\n</p>\r\n',338,78,0,'CC-BY-SA','Liverpool Makefest 2018',0,0,1),
(2616,'2018-08-13','Liverpool Makefest 2018 - interview with Josh - A.K.A - All About Code',310,'An interview with Josh recorded at Liverpool makefest','<p>This is another short interview recorded at this year\'s Liverpool Makefest, this time with Josh who developed EduBlocks.</p>\r\n<ul>\r\n<li><p><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></p></li>\r\n<li><p><a href=\"https://edublocks.org/\" class=\"uri\">https://edublocks.org/</a></p></li>\r\n<li><p><a href=\"https://allaboutcode.co.uk/\" class=\"uri\">https://allaboutcode.co.uk/</a></p></li>\r\n<li><p><a href=\"https://github.com/AllAboutCode\" class=\"uri\">https://github.com/AllAboutCode</a></p></li>\r\n<li><p><a href=\"https://twitter.com/all_about_code?lang=en\" class=\"uri\">https://twitter.com/all_about_code?lang=en</a></p></li>\r\n</ul>',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, EduBlocks, computing, young coders',0,0,1),
(2621,'2018-08-20','Liverpool Makefest 2018 - Chan\'nel Thomas a.k.a little pink maker',293,'In this episode I talk to Chan\'nel Thomas aka little pink maker','<p>In this episode recorded at Liverpool Makefest 2018 I talk to Chan\'nel Thomas aka little pink maker. Chan\'nel has an amazing web site; the link is below. I was going to include a couple of pictures taken on the day but they don\'t do her work the justice it deserves.</p>\r\n<ul>\r\n<li><p><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></p></li>\r\n<li><p><a href=\"https://www.littlepinkmaker.com/about\" class=\"uri\">https://www.littlepinkmaker.com/about</a></p></li>\r\n<li><p>Mail: <a href=\"mailto:makeit@littlepinkmaker.com\">makeit@littlepinkmaker.com</a></p></li>\r\n</ul>',338,78,0,'CC-BY-SA','Liverpool Makefest 2018,Making, hacking, creativity, inventions',0,0,1),
(2626,'2018-08-27','Liverpool Makefest 2018 - interviews with Helen and Chris',510,'Interviews about Manchester Hackspace and Wirral Code Club','<p>In this episode I talk to Helen from Manchester Hackspace and Chris from Wirral Code Club</p>\r\n<ul>\r\n<li><p><a href=\"https://lpoolmakefest.org\" class=\"uri\">https://lpoolmakefest.org</a></p></li>\r\n<li><p><a href=\"https://hacman.org.uk/\" class=\"uri\">https://hacman.org.uk/</a></p></li>\r\n<li><p><a href=\"https://www.wirralcodeclub.org/\" class=\"uri\">https://www.wirralcodeclub.org/</a></p></li>\r\n</ul>',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, computing, young coders, hackers, makers, crafts',0,0,1),
(2632,'2018-09-04','Liverpool Makefest 2018 - interviews with Robert and Carl',376,'In this episode I talk to Robert from Roberts Workshop and Carl from Edgehill University','<p>In this episode I talk to Robert from Roberts Workshop and Carl from Edgehill University</p>\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2632/D2632.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2632/D2632_small.jpg\" /></a>\r\n</p>\r\n<ul>\r\n<li><p><a href=\"https://www.robertsworkshop.co.uk/contact\" class=\"uri\">https://www.robertsworkshop.co.uk/contact</a></p></li>\r\n<li><p><a href=\"https://www.edgehill.ac.uk/\" class=\"uri\">https://www.edgehill.ac.uk/</a></p></li>\r\n</ul>\r\n',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, computing, young coders, hackers, makers, crafts',0,0,1),
(2636,'2018-09-10','Liverpool Makefest 2018 - interviews with Noel from JMU FabLab',603,'In this episode I talk to Noel Baker from the JMU FabLab.','<p>In this episode I talk to Noel Baker from the JMU FabLab.</p>\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2636/Cila2636.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2636/Cila2636_small.jpg\" /></a>\r\n</p>\r\n<ul>\r\n<li><a href=\"https://buyonline.ljmu.ac.uk/product-catalogue/ljmu/art-materials/digital-fabrication-lab\" class=\"uri\">https://buyonline.ljmu.ac.uk/product-catalogue/ljmu/art-materials/digital-fabrication-lab</a></li>\r\n<li><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></li>\r\n</ul>\r\n',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, Making, hacking, creativity',0,0,1),
(2594,'2018-07-12','Using nmtui, the Network Manager Terminal User interface',638,'A use case for nmtui and general discussion about how to use it','<p>This is my first show and I am happy to be here!</p>\r\n<p><code>nmtui</code>\'s documentation can be found <a href=\"https://developer.gnome.org/NetworkManager/stable/nmtui.html\">here</a>.</p>\r\n<p>You can reach me on the freenode irc network at <code>blu3r4d0n</code>.</p>',366,0,0,'CC-BY-SA','nmtui, networkmanager, linux',0,0,1),
(2596,'2018-07-16','Battling with English - part 2',1282,'Misunderstandings about English grammar, spelling, punctuation, etc.','<h1 id=\"battling-with-english---part-2\">Battling with English - part 2</h1>\r\n<h2 id=\"further-notes-about-then-and-than\">Further notes about <code>\'then\'</code> and <code>\'than\'</code></h2>\r\n<p>In the last episode I mentioned the confusion between <b><em>then</em></b> and <b><em>than</em></b>. I referred to the etymology of the two words, but I didn\'t go into detail.</p>\r\n<p>Reading the <em>Online Etymology Dictionary</em>, one interesting point in the <a href=\"https://www.etymonline.com/word/than\" title=\"Online Etymology Dictionary: \'than\'\">page about <b><em>than</em></b></a> is that it was:</p>\r\n<blockquote>\r\n<p>Developed from the adverb <em>then</em>, and not distinguished from it by spelling until c. 1700.</p>\r\n</blockquote>\r\n<p>So, it would seem that the two words are related and historically were the same! However, I\'d guess that it is unlikely that people using them interchangeably now are making reference to usage in the 1700\'s.</p>\r\n<hr />\r\n<h2 id=\"problems-with-apostrophes\">Problems with apostrophes</h2>\r\n<p>Let us now examine the apostrophe, which is a punctuation mark. It is used for:</p>\r\n<ul>\r\n<li><p>Indicating that letters have been omitted, such as in a contracted form of words. For example when the phrase <b><em>they are</em></b> is contracted to <b><em>they\'re</em></b>.</p></li>\r\n<li><p>Turning a word into a possessive form such as in <b><em>the cat\'s paw</em></b></p></li>\r\n<li><p>When the plural of <u>a single letter</u> (or digit) is required such as in <b><em>dot your i\'s and cross your t\'s</em></b>.</p></li>\r\n</ul>\r\n<p>There are other uses but you can look at the <a href=\"https://en.wikipedia.org/wiki/Apostrophe\" title=\"Wikipedia article on the Apostrophe\">Wikipedia</a> article for them if you want to dig deeper. I may well revisit this topic in a later show in this series.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2596/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Apostrophe\r\n<ul>\r\n<li>Wikipedia page: <a href=\"https://en.wikipedia.org/wiki/Apostrophe\">Apostrophe</a></li>\r\n<li>Cambridge Dictionary: <a href=\"https://dictionary.cambridge.org/grammar/british-grammar/determiners/possession-john-s-car-a-friend-of-mine\">Possession</a></li>\r\n</ul></li>\r\n<li>Grammar Girl\'s items on apostrophes:\r\n<ul>\r\n<li><a href=\"https://www.quickanddirtytips.com/education/grammar/apostrophe-catastrophe-part-one\">Apostrophe Catastrophe (Part One)</a></li>\r\n<li><a href=\"https://www.quickanddirtytips.com/education/grammar/apostrophe-catastrophe-part-two\">Apostrophe Catastrophe (Part Two)</a></li>\r\n</ul></li>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/cant\">Definition of \'cant\'</a></li>\r\n<li>Grammar Monster:\r\n<ul>\r\n<li><a href=\"https://www.grammar-monster.com/punctuation/using_apostrophes.htm\">Using Apostrophes</a></li>\r\n<li><a href=\"https://www.grammar-monster.com/plurals/plural_of_amoeba.htm\">Plural of amoeba</a></li>\r\n</ul></li>\r\n<li>Grammarbook.com:\r\n<ul>\r\n<li><a href=\"https://data.grammarbook.com/blog/pronouns/1-grammar-error/\">Its vs It\'s</a></li>\r\n</ul></li>\r\n<li>Previous episode in this series:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2558\">Battling with English - part 1</a></li>\r\n</ul></li>\r\n</ul>',225,120,1,'CC-BY-SA','grammar,spelling,punctuation,word misuse,English,apostrophe',0,0,1),
(2641,'2018-09-17','Liverpool Makefest 2018 - interview with Rachel from the MicroBit Foundation',564,'This is a short interview recorded at this years Liverpool Makefest with Rachel from MicroBit','<p>In this episode I talk to Rachel Lancaster from the Micro:Bit foundation.</p>\r\n<ul>\r\n<li><p><a href=\"https://microbit.org/\" class=\"uri\">https://microbit.org/</a></p></li>\r\n<li><p><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></p></li>\r\n</ul>',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, computing, young coders, hackers, makers, crafts, microbit',0,0,1),
(2646,'2018-09-24','Liverpool Makefest 2018 - Interview with Steve and Gerrard from the Liverpool Astronomical society.',355,'In this Episode I talk to Steve and Gerrard from the Liverpool Astronomical society.','<p>In this episode I talk to Steve and Gerard from the Liverpool Astronomical society.</p>\r\n<ul>\r\n<li><p><a href=\"https://liverpoolas.org/event/weekly-public-meeting-at-the-leighton-observatory-pex-hill-4/2018-09-26/\" class=\"uri\">https://liverpoolas.org/event/weekly-public-meeting-at-the-leighton-observatory-pex-hill-4/2018-09-26/</a></p></li>\r\n<li><p><a href=\"https://liverpoolas.org/\" class=\"uri\">https://liverpoolas.org/</a></p></li>\r\n<li><p><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></p></li>\r\n</ul>\r\n',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, Astronomy, History, Science',0,0,1),
(2597,'2018-07-17','How to Fix a Remote with Buttons that Don\'t Work',392,'A response to Ken Fallon\'s episode about how to check whether your remote is working or not.','<p>After listening to Ken Fallon’s episode about how to check whether your remote is working or not, I checked one of our remotes that had been giving us problems and found that only a couple of the buttons produced the light. Then I found a video on YouTube showing how to fix non-working buttons and this is my report.</p>',238,0,0,'CC-BY-SA','Repairs, Remote Controls, Fixing things, Cleaning',0,0,1),
(2602,'2018-07-24','HPR Quick Tips July 2018',1474,'SpiderOAK Backup and Trekking the AT','<p>Don’t use GOOGLE DRIVE ! They flag personal content and backups as malware and will not let you download or share your own backups!!!!!</p>\r\n',36,0,1,'CC-BY-SA','SpiderOAK,Backups,DR,Trekking,Hiking',0,0,1),
(2604,'2018-07-26','Restoration of a Fasco L55A Hassock Fan',1074,'I talk about my recent restoration project of a mid-century modern hassock fan','<h2>The Fasco L55A Hassock Fan</h2>\r\n\r\n<p>Click the image to view my Flickr slideshow of the restoration process.</p>\r\n\r\n<p><a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/137675441@N05/albums/72157697860079274\" title=\"Fasco L55A Hassock Fan Restoration\"><img src=\"https://farm1.staticflickr.com/883/42280247534_18fd9bd408_c.jpg\" width=\"800\" height=\"450\" alt=\"Fasco L55A Hassock Fan Restoration\"/></a></p>\r\n\r\n<p>A video showing my restored fan in action!</p>\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/K_N0bjR3EwU\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen></iframe>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n<li><a href=\"https://www.google.com/search?q=hassock+fan&hs=Qy7&tbm=isch&tbo=u&source=univ&sa=X&ved=0ahUKEwji0cLju4rcAhUB4IMKHYCKA9cQsAQInwI&biw=1600&bih=761\" target=\"_blank\">Hassock Fans on Google image search</a></li>\r\n<li><a href=\"https://www.flickr.com/photos/137675441@N05/albums/72157697860079274\" title=\"Fasco L55A Hassock Fan Restoration\">Flickr photographs</a></li>\r\n<li><a href=\"https://www.youtube.com/embed/K_N0bjR3EwU\" target=\"_blank\">YouTube video</a></li>\r\n\r\n</ul>\r\n',238,0,0,'CC-BY-SA','Fans, vintage stuff, restoration, staying cool, mid-century modern',0,0,1),
(2608,'2018-08-01','BattleTech',1108,'Quick introduction to BattleTech tabletop game by Tuula','<p>Following links might help you to get more familiar with the game.</p>\r\n<ul>\r\n<li><p>Manufacturer’s website: <a href=\"https://bg.battletech.com/\" class=\"uri\">https://bg.battletech.com/</a></p></li>\r\n<li><p>Forums, where fans have discussions about the game: <a href=\"https://bg.battletech.com/forums/\" class=\"uri\">https://bg.battletech.com/forums/</a></p></li>\r\n<li><p>Sarna, extensive wiki: <a href=\"https://www.sarna.net/wiki/Main_Page\" class=\"uri\">https://www.sarna.net/wiki/Main_Page</a></p></li>\r\n</ul>\r\n',364,95,0,'CC-BY-SA','BattleTech',0,0,1),
(2600,'2018-07-20','Special episode on 2600, Blue Boxes, Phreaking',3173,'We celebrate the history of hackers, with a nod to the old skool phreak community.','<p>\r\n2600 Hz is a frequency in hertz (cycles per second) that was used by AT&amp;T as a steady signal to mark currently unused long-distance telephone lines.<br />\r\nA blue box is an electronic device that generates the in-band signaling audio tones formerly used to control long-distance telephone exchanges.<br />\r\nPhreaking is a slang term coined to describe the activity of a culture of people who study, experiment with, or explore telecommunication systems, such as equipment and systems connected to public telephone networks. The term phreak is a sensational spelling of the word freak with the ph- from phone, and may also refer to the use of various audio frequencies to manipulate a phone system. Phreak, phreaker, or phone phreak are names used for and by individuals who participate in phreaking.<br />\r\n</p>\r\n<h3>Radio FreeK America 1</h3>\r\n<p>\r\n02/20/02 - Trashing live, dual was \"slammed,\" trouble with Qwest, Qwest releasing customer info then backing off, Rax discusses VOMIT and subsequent fun, start your own telco or isp, Onebox.com, Slingshot pre-paid Internet access, Kondor\'s Trios tribulations, fun with the phone, and more.\r\n</p>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/2600_hertz\">https://en.wikipedia.org/wiki/2600_hertz</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Blue_box\">https://en.wikipedia.org/wiki/Blue_box</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Phreaking\">https://en.wikipedia.org/wiki/Phreaking</a></li>\r\n<li><a href=\"https://oldskoolphreak.com/\">https://oldskoolphreak.com/</a></li>\r\n<li><a href=\"https://oldskoolphreak.com/radio.html\">https://oldskoolphreak.com/radio.html</a></li>\r\n</ul>\r\n',30,0,1,'CC-BY-SA','2600, Blue Box, Phreaking, Radio FreeK America',0,0,1),
(2603,'2018-07-25','Dummy shares a tip and a tip/rant about asking and answering questions',1503,'Those blasted rubber coffee mug seals and \"Let me Google that for you.\"','<p>A quick tip on using paper towel or dish rag to easily remove stubborn travel coffee mug rubber seals followed by a semi ranty discussion on asking and responding to questions in the context of “Let me google that for you.”</p>\r\n<p>As a bonus, this is part of a series-ish set of shows I’m going to do recording with different equipment to give you the feel of the quality of shows possible with low cost equipment by someone who doesn’t know how to edit audio or speak to audiences.</p>\r\n',151,0,1,'CC-BY-SA','travel mug seal,asking questions',0,0,1),
(2607,'2018-07-31','Processing',1777,'Klaatu introduces Processing, a Java subset and IDE suitable for graphical programming projects','<p>Get Processing from <a href=\"https://processing.org\">processing.org</a>. Download, extract, and launch. On Linux, just click the <code>processing</code> file.</p>\r\n<p>Processing requires that <em>either</em> OpenJDK or Java to be installed.</p>\r\n<p>Processing requires a <code>void setup()</code> function, which is a function that Processing expects whenever an application is launched. If you don\'t have a <code>setup</code> function, your application still launches, but with basic Processing defaults. Try this to start with:</p>\r\n<pre><code>void setup() {\r\n    size(480,720);\r\n}</code></pre>\r\n<p>Click the <strong>Run</strong> button in the top left corner to launch your [very simple] application: an empty window that is 480 pixels wide and 720 pixels tall.</p>\r\n<p>Draw a rectangle on your canvas by invoking Processing\'s <code>void draw()</code> function:</p>\r\n<pre><code>void draw() {\r\n    rect(10,10,80,80);\r\n}</code></pre>\r\n<p>Click the <strong>Run</strong> button in the top left corner to launch your application.</p>\r\n<p>Add some colour to your rectangle:</p>\r\n<pre><code>void draw() {\r\n    fill(8,120,90);\r\n    rect(10,10,80,80);\r\n}</code></pre>\r\n<p>Click the <strong>Run</strong> button in the top left corner to launch your application.</p>\r\n<p>Make a simple painting app:</p>\r\n<pre><code>void setup() {\r\n    size(480,720);\r\n}\r\n\r\nvoid draw() {\r\n    if (mousePressed) {\r\n        fill(20,120,90);\r\n        ellipse(mouseX,mouseY,25,25);\r\n    } else {\r\n        fill(random(10,120),random(10,80),random(20,200));\r\n    }\r\n}</code></pre>\r\n<p>More Processing tricks: you can export your application as a standalone Java app, or as an Android <code>.apk</code> as long as you have the Android SDK installed.</p>\r\n<p>Processing\'s <a href=\"https://processing.org/reference\">documentation</a> is excellent. It has examples for all functions, <em>with pictures</em>.</p>\r\n',78,25,0,'CC-BY-SA','java,processing',0,0,1),
(2609,'2018-08-02','SparkleShare',1460,'Klaatu demonstrates SparkleShare','<p>\r\nClacke mentioned SparkleShare in <a href=\"https://hackerpublicradio.org/eps.php?id=2542\" target=\"_blank\">episode 2542</a>, and it occurred to me that not everyone knows what Sparkleshare is. So here&#39;s a show about it.\r\n</p>\r\n\r\n<p>\r\nTo setup SparkleShare, refer to <a href=\"https://sparkleshare.org\" target=\"_blank\">SparkleShare.org</a>. It\'s available for Linux, Windows, and Mac; great for cross-platform collaboration.\r\n</p>\r\n\r\n<p>\r\nThe Linux installer uses <a href=\"https://flatpak.org\" target=\"_blank\">FlatPak</a>, so you do need to install that.\r\n</p>\r\n\r\n<p>\r\nOnce installed, launch SparkleShare in the usual way. If you have no usual way, you can use this command&#58;</p>\r\n\r\n<pre>\r\n$ flatpak run org.sparkleshare.SparkleShare\r\n</pre>\r\n\r\n<p>\r\nThe first screen asks for your name and email. This doesn&#39;t have to be your real name and email, but it is what SparkleShare will use when making commits on your behalf. This name and email will be visible to anyone who can see your online Git repository.\r\n</p>\r\n\r\n<p>\r\nThe next screen displays the <strong>Sync Remote Project</strong> screen. You use this screen any time you want to add another share to your sparkle.\r\n</p>\r\n\r\n<img src=\"https://slackermedia.info/host/setup1.png\" alt=\"image showing the Sync Remote Project window of SparkleShare\" />\r\n\r\n<p>\r\nIn this episode, I set up two projects&#58; one brand new one using my home server as host, and one that mirrors an existing project on Gitlab.com.\r\n</p>\r\n\r\n<p><strong>Adding a project from Gitlab</strong></p>\r\n\r\n<p>\r\nThe first thing you must do is give SparkleShare permission to access Gitlab. To do this, click on the SparkleShare icon in your system tray &#62; SparkleShare &#62; Client ID and copy your ID to your clipboard.\r\n</p>\r\n\r\n<img src=\"https://slackermedia.info/host/clientid.png\" alt=\"image describing the menu selection as listed in the above text\" />\r\n\r\n<p>\r\nNow go to your online Git host and add this &#34;Client ID&#34; to your approved SSH Keys. Where this is located depends on your Git host, but in Gitlab, it&#39;s located in the left column of the <strong>Settings</strong> screen. When your SSH Key has been added, Gitlab displays a key fingerprint &#40;actually just a string of numbers&#41; as confirmation.\r\n</p>\r\n\r\n<p>\r\nThe path to your remote Git repository is the part of an URL after the host. It usually starts with your username. For example, if I have a project on Gitlab located at <code>gitlab.com/notklaatu/foo.git</code> then the path that SparkleShare needs is <code>notklaatu/foo.git</code>\r\n</p>\r\n\r\n<p>\r\nClick the <strong>Add</strong> button to add the project to your local SparkleShare folder.\r\n</p>\r\n\r\n\r\n<p><strong>Adding a project hosted on your own server</strong></p>\r\n\r\n<p>\r\nThere are a lot more variables if you&#39;re hosting a Git repository on your own server. These are the things that you may need to account for&#58;\r\n</p>\r\n\r\n<ul>\r\n<li><p>Is your local .ssh/config file setting some &#34;invisible&#34; defaults for when you SSH to your server? If so, you may need to modify or add an entry for SparkleShare.</p></li>\r\n<li><p>Your SparkleShare auto-generated &#34;Client ID&#34; is located in <code>$HOME/.config/org.sparkleshare.SparkleShare/ssh</code></p></li>\r\n<li><p>Is your SparkleShare SSH key &#40;the &#34;Client ID&#34; in SparkleShare lingo&#41; in your authorized_hosts file?\r\n</p></li>\r\n<li><p>Does a Git repository exist on your remote server in the location you think it exists?</p></li>\r\n</ul>\r\n\r\n<p><strong>Using SparkleShare</strong></p>\r\n\r\n<p>\r\nUse SparkleShare exactly as you would DropBox or the <a href=\"https://nextcloud.com/\" target=\"_blank\">NextCloud Desktop Client</a>&#58; drag-and-drop a file to add it, drag it to the Trash to delete it. All SparkleShare folders sync\'d with any given project syncs automatically through the magickalfulness of Git hooks.\r\n</p>\r\n\r\n\r\n\r\n',78,104,0,'CC-BY-SA','git,sparkleshare',0,0,1),
(2613,'2018-08-08','Quick Awk Tip',459,'This is a tip about awk scripts.','<p>\r\nThis is obvious, but it tripped me up a few times after listening to the excellent Awk series by Dave and B-yeezi, so I though I\'d share it here to save others the trouble.\r\n</p>\r\n\r\n<p>\r\nWhen moving from simple awk commands to proper awk scripts, you put a shebang line at the top of your script. It\'s pretty common to many of us, because we do it for Python and Bash all the time.\r\n</p>\r\n\r\n<p>\r\nBut if you just put:\r\n</p>\r\n\r\n<pre>\r\n#!/usr/bin/awk\r\n</pre>\r\n<p>\r\nThen your awk script won\'t work the way you expect.</p>\r\n\r\n<p>\r\nYou must provide the <code>-f</code> flag:\r\n</p>\r\n<pre>\r\n#!/usr/bin/awk -f\r\n</pre>\r\n\r\n<p>\r\nNow you can pipe things to your awk script as expected. \r\n</p>\r\n\r\n\r\n',78,94,0,'CC-BY-SA','tip,awk,shebang',0,0,1),
(2614,'2018-08-09','My 1948 Truetone D1835 Tube Radio',657,'I talk about my \"new\" 1948 D1835 Tube-powered radio.','<h2>The 1948 Truetone D1835 Tube Radio</h2>\r\n\r\n<p>I recently bought a vintage tube powered radio at an estate sale and in this episode I talk about it and let you hear it. Click the image to view my Flickr pictures.</p>\r\n\r\n<p><a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/137675441@N05/albums/72157699014674225\" title=\"1948 Truetone Tube Radio\"><img src=\"https://farm1.staticflickr.com/836/28515366987_03ca2d6a84_c.jpg\" width=\"450\" height=\"800\" alt=\"1948 Truetone Tube Radio\"/></a></p>\r\n\r\n<p>Watch <a href=\"https://youtu.be/-I8GEjiBf0g\">A video showing the radio in action</a>!</p>\r\n',238,0,0,'CC-BY-SA','Vintage audio, legacy technology, radio, antiques',0,0,1),
(2610,'2018-08-03','Gnu Awk - Part 12',2050,'Advanced use of arrays','<h1 id=\"gnu-awk---part-12\">Gnu Awk - Part 12</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the twelfth episode of the “<a href=\"https://hackerpublicradio.org/series/0094.html\" title=\"Learning Awk\">Learning Awk</a>” series which is being produced by <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" title=\"b-yeezi\">b-yeezi</a> and myself.</p>\r\n<p>In this episode I want to continue with the subject I started in episode 10, an advanced-level look at arrays in Awk. This episode covers <code>patsplit</code> which can split a string into an array, the built-in array <code>PROCINFO</code> which can be used to control how <code>awk</code> sorts arrays, as well as <code>asort</code> and <code>asorti</code>, built-in functions for sorting arrays.</p>\r\n<p>In case it might be of interest I have also included a section describing a recent use I made of <code>awk</code> to solve a problem.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2610/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/html_node/index.html\"><em>GNU Awk User’s Guide</em></a></li>\r\n<li>Previous shows in this series on HPR:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2114\">“<em>Gnu Awk - Part 1</em>”</a> - episode 2114</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2129\">“<em>Gnu Awk - Part 2</em>”</a> - episode 2129</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2143\">“<em>Gnu Awk - Part 3</em>”</a> - episode 2143</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2163\">“<em>Gnu Awk - Part 4</em>”</a> - episode 2163</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2184\">“<em>Gnu Awk - Part 5</em>”</a> - episode 2184</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2238\">“<em>Gnu Awk - Part 6</em>”</a> - episode 2238</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2330\">“<em>Gnu Awk - Part 7</em>”</a> - episode 2330</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2438\">“<em>Gnu Awk - Part 8</em>”</a> - episode 2438</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2476\">“<em>Gnu Awk - Part 9</em>”</a> - episode 2476</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2526\">“<em>Gnu Awk - Part 10</em>”</a> - episode 2526</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2554\">“<em>Gnu Awk - Part 11</em>”</a> - episode 2554</li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2610/full_shownotes.epub\">ePub version of these notes</a></li>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex1.awk\">awk12_ex1.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex2.awk\">awk12_ex2.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex3.awk\">awk12_ex3.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex4.awk\">awk12_ex4.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex5.awk\">awk12_ex5.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex6.awk\">awk12_ex6.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex7.awk\">awk12_ex7.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex8.awk\">awk12_ex8.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex9.awk\">awk12_ex9.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_ex10.awk\">awk12_ex10.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2610/awk12_extra.awk\">awk12_extra.awk</a></li>\r\n</ul></li>\r\n</ul>',225,94,1,'CC-BY-SA','Awk utility, Awk Language, gawk, arrays, sorting',0,0,1),
(2617,'2018-08-14','Exposing a Raspberry Pi database through a REST API',1219,'In this episode, I discuss how I used python to make my speedtest data available across my network','<h2>Links from the episode</h2>\r\n\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Representational_state_transfer\">Wikipedia - REST API</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface\">Wikipedia - WSGI</a></li>\r\n<li><a href=\"https://bottlepy.org/docs/dev/\">Bottle Framework</a></li>\r\n<li><a href=\"https://sqlite.org/index.html\">SQLite</a></li>\r\n</ul>\r\n',300,0,0,'CC-BY-SA','python,development',0,0,1),
(2618,'2018-08-15','Yesod - First Impressions',1385,'Tuula talking about their first impressions of Yesod web framework','<p>First place to start is probably Yesod’s web site at: <a href=\"https://www.yesodweb.com/\" class=\"uri\">https://www.yesodweb.com/</a></p>\r\n<p>Often recommended environment for developing Haskell programs is Stack: <a href=\"https://docs.haskellstack.org/en/stable/README/\" class=\"uri\">https://docs.haskellstack.org/en/stable/README/</a></p>\r\n<p>My road to Haskell started with Learn You a Haskell for Great Good: <a href=\"https://learnyouahaskell.com/\" class=\"uri\">https://learnyouahaskell.com/</a> and going through lecture notes of CIS 194: <a href=\"https://www.seas.upenn.edu/%7Ecis194/spring13/lectures.html\">https://www.seas.upenn.edu/%7Ecis194/spring13/lectures.html</a></p>\r\n',364,107,0,'CC-BY-SA','haskell,yesod,web',0,0,1),
(2619,'2018-08-16','A Gentle Introduction to Quilt',1225,'Quilt - the patch manager.  Introduction and tutorial.','<h1 id=\"a-gentle-introduction-to-quilt\">A gentle introduction to quilt</h1>\r\n<p>Or, patch management for software.</p>\r\n<h2 id=\"speaker-intro\">Speaker Intro</h2>\r\n<p>Hi, I\'m bjb. I\'m a programmer.</p>\r\n<h2 id=\"motivation-and-topic-intro\">Motivation and topic intro</h2>\r\n<p>I needed to learn how to use the software tool &quot;quilt&quot;, so you get to listen to my podcast about an introduction to quilt.</p>\r\n<p>People collaborating on a project must edit the same set of source files. After one person commits some changes, then the other people must rebase their own changes on the new version of the shared files before they can push their changes.</p>\r\n<p>A minor fix for some old typo should not be in the same patch as a new feature; a comment correction should also be in its own patch. Essentially, two new features and some bug fixes should not all be smushed together in one patch. Each feature should be in its own patch (or patch series), and each bug fix should be in its own patch. This allows others to be able to review the proposed changes easily, and even lets them pick and choose which patches they want to apply. It becomes a chore to manage all these patches. That\'s where quilt comes in.</p>\r\n<p>Sadly, I hadn\'t learned quilt till this weekend ... well one way to ensure I learn it fairly well is to write a HPR episode about it! Here goes.</p>\r\n<p>I have written this episode to be understandable by anyone - you don\'t have to be a coder. You could use this tool to keep track of any plain-text files - recipes, todo lists, html, hpr show notes, poetry, what-have-you.</p>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>First let\'s describe what a patch is. No, first let\'s describe what source code looks like. Source code is a plain text file full of computer instructions. It is a plain text file, as opposed to a word processing file. Plain text files do not have any formatting codes or styles in them (such as which font should be used, or what colour, and so on). They just contain the characters that make up words of the content.</p>\r\n<p>A key feature of these source code files is that a new section of the file starts on a new line. The source code is almost never &quot;reflowed&quot; like prose might be. It is sort of like poetry - the more formal poetry, not prose poetry. There are a lot of really small sections in source code files (called &quot;statements&quot; and &quot;expressions&quot;). Most of these sections fit on one line. This is useful for the tools we\'re going to discuss because when one line changes it does not affect the following lines, as it might when text is reflowed after a change.</p>\r\n<p>People have been coding with plain text files in various languages for decades. Thus a large set of tooling has grown around this format. One of those tools is called &quot;diff&quot; and another one is called &quot;patch&quot;.</p>\r\n<p>Diff is a way to compare two text files. Typically it would be used to compare the &quot;before&quot; and &quot;after&quot; of a source code file undergoing changes. So you could find out what was done to the source code file by running diff on the before and after versions of that file.</p>\r\n<p>A diff file is a series of excerpts from the original and changed files. There are various kinds of diffs. Some of them show only the changed lines. Some of them show a few lines before and a few lines after in addition to the changed lines themselves. That second kind is called a &quot;context diff&quot; and helps the automated machinery (and humans too) find the correct part of the file to which the change must be applied.</p>\r\n<p>By default there are 3 lines of context before and after the changed lines.</p>\r\n<p>The changed part is represented by including the old AND new line. In order to distinguish which lines are old and which are the replacements, all the lines (context lines, removed lines and added lines) are shifted over to the right by one character. The context lines start with a space in the extra left-most character, the original removed lines have a minus sign in the left-most character and the new added lines have a plus sign.</p>\r\n<p>Thus if any character on a line in the source file has changed, been added or removed, then the whole line will be replaced with a new line in the new file. The diff will show both the removed line and the new one.</p>\r\n<p>The patch utility takes the &quot;diff&quot; output and applies it to the original file to produce the later version of that file. You can apply it in reverse mode to the later version to get the original version. So patch is also a really useful program, and these two tools, diff and patch, are the basis of most of the version control systems out there. It is the existence of these text-based diff and patch tools that makes revision control systems work really well on plain-text files that are naturally structured in a line-by-line format.</p>\r\n<p>A note about terminology: the diff program produces a diff. This diff is also called a patch. The patch program takes the diff (aka patch) and applies it to the original file to produce the changed file.</p>\r\n<p>So if you have a timeline of adding a few features and making a few fixes on a code-base, it can be fully described by the original file plus a set of patches that had been produced with diff. You can get the final source code by taking the original file, applying the patches one by one, and voila, the final version of the file has been recreated.</p>\r\n<p>Now we know enough to give a concise description of quilt:</p>\r\n<p>Quilt lets you work with patches, creating them, applying them, un-applying them, and moving some things from one patch to another with a minimum of effort.</p>\r\n<h2 id=\"how-to-use-quilt\">How to use quilt</h2>\r\n<p>Now a tutorial on how to get started using quilt.</p>\r\n<p>This tutorial will start with a buggy program, create a few bad patches, and fix them up into good patches. I make no claims as to the quality of the final code though. The reason for starting with bad code and patches is to illustrate how to use quilt.</p>\r\n<h3 id=\"starting-to-use-quilt-on-a-project\">Starting to use quilt on a project</h3>\r\n<p>To start using quilt, create a directory called &quot;patches&quot; at the top of your code or just above.</p>\r\n<pre class=\"sourceCode \"><code>$ mkdir patches</code></pre>\r\n<p>If you don\'t do this, quilt will create it for you. However, first it will look for a directory called &quot;patches&quot; in the current working directory, its parent, and all the way up ... if it finds one, it will use it. If not, it will create one in the current directory.</p>\r\n<p>So, to keep it from finding some unrelated directory with the name &quot;patches&quot;, just create a patches directory yourself in the right place.</p>\r\n<h3 id=\"quilt-first-patch-including-a-new-file\">Quilt first patch, including a new file!</h3>\r\n<p>You must tell quilt before you make any changes to your source code. Then it can store the original versions of the files that will change, so it can produce the diffs that will become that patch once you change the files.</p>\r\n<p>Create a directory called example, and create a file in it like this, called hello.c (don\'t fix the errors):</p>\r\n<pre class=\"sourceCode \"><code>#include &quot;stdio.h&quot;\r\n\r\nint main (int argc, char *argv[], char *env[])\r\n{\r\n    print (&quot;Hello, world!n&quot;)\r\n    return 0;\r\n}</code></pre>\r\n<p>Now create a new patch - that is, give it a name - before you change any code. This will create (or find) a couple of directories, &quot;patches&quot; and &quot;.pc&quot;, and populate them with some files to start.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt new fix-typo</code></pre>\r\n<p>And now you can fix the typo and generate the patch. First start by telling quilt that you want hello.c to be in the patch. Quilt saves a copy of it aside for comparing with the later versions:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt add hello.c</code></pre>\r\n<p>You can get quilt to tell you what files it knows about:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt files</code></pre>\r\n<p>Edit the file - add a semicolon at the end of the print line, and change the double-quotes on the #include line to angle brackets:</p>\r\n<pre class=\"sourceCode \"><code>#include &lt;stdio.h&gt;\r\nprint (&quot;Hello, world!n&quot;);</code></pre>\r\n<p>Save the file and exit the editor. Next generate the patch:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt refresh</code></pre>\r\n<p>The oddly named &quot;refresh&quot; command creates the patch itself. It is called &quot;refresh&quot; because it can also be used to update the patch.</p>\r\n<p>Now you can see the current set of patches by giving the command:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt series</code></pre>\r\n<p>The single patch is called fix-typo, and its name in the list is coloured brownish. That is because it is the &quot;current&quot; patch, and it is the one that will be updated if you &quot;quilt refresh&quot; again with more changes.</p>\r\n<p>One thing I did not find in the quilt documentation is how to add a new file. When adding a new file, there is no existing file that you can name in the quilt add command. Of course, the very first patch I wanted to manage with quilt, I had introduced a new file. It turns out that the quilt edit command can be used to add a file to the patch, even if the file does not yet exist:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt edit header.h</code></pre>\r\n<p>Add content to header.h (see below) using the plain-text editor that quilt has started up for you. Save the file.</p>\r\n<pre class=\"sourceCode \"><code>#ifndef HEADER_HH__\r\n#define HEADER_HH__\r\n\r\n#define NAME &quot;bjb&quot;\r\n\r\n#endif</code></pre>\r\n<p>Regenerate the patch with the new changes:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt refresh</code></pre>\r\n<p>Now you can list the patch series again with quilt series. So far there is one patch. You can see what the patch consists of with the</p>\r\n<pre class=\"sourceCode \"><code>$ quilt diff</code></pre>\r\n<p>command.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt diff\r\nIndex: hello/hello.c\r\n===================================================================\r\n--- hello.orig/hello.c\r\n+++ hello/hello.c\r\n@@ -1,8 +1,8 @@\r\n-#include &quot;stdio.h&quot;\r\n+#include &lt;stdio.h&gt;\r\n\r\n int main (int argc, char *argv[], *env[])\r\n {\r\n-    print (&quot;Hello, world!n&quot;)\r\n+    print (&quot;Hello, world!n&quot;);\r\n     return 0;\r\n }\r\n\r\nIndex: hello/header.h\r\n===================================================================\r\n--- /dev/null\r\n+++ hello/header.h\r\n@@ -0,0 +1,7 @@\r\n+#ifndef HEADER_HH__\r\n+#define HEADER_HH__\r\n+\r\n+#define NAME &quot;bjb\r\n+\r\n+#endif\r\n+\r\n$</code></pre>\r\n<h3 id=\"quilt-second-patch\">Quilt second patch</h3>\r\n<p>Now it is time to make a second patch. First we tell quilt we are moving to a new patch:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt new prototype\r\n$ quilt edit header.h</code></pre>\r\n<p>Edit this file again - add a function prototype.</p>\r\n<pre class=\"sourceCode \"><code>int do_output(const char *name);</code></pre>\r\n<p>Create the patch and look at the list of patches:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt refresh\r\n$ quilt series</code></pre>\r\n<p>Now when we give the quilt series command, we see two patches. The first one is green, meaning it has been applied, and the second one is brown, meaning this is the one that quilt refresh will change if you call it.</p>\r\n<p>Again you can see what latest diff looks like by giving the quilt diff command.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt diff</code></pre>\r\n<p>Now let\'s unapply the latest diff:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt pop\r\n$ quilt series</code></pre>\r\n<p>We see that the list of patches has the same patches in it, but now the second patch is white (meaning unapplied) and the first patch is brown (meaning it is the one that would change if we edited a file and typed quilt refresh.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt files</code></pre>\r\n<p>That first patch has two files in it, hello.c and header.h.</p>\r\n<p>Now unapply the first diff:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt pop\r\n$ quilt series</code></pre>\r\n<p>Both patches are listed, and both are shown as white.</p>\r\n<p>We can see what files quilt knows about before any patches are applied:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt files</code></pre>\r\n<p>No files.</p>\r\n<p>Apply all the patches at once:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt push -a\r\n$ quilt series</code></pre>\r\n<p>And look at what files quilt knows about:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt files</code></pre>\r\n<p>Now quilt reports on only one file, while in the first patch it knew about two files. You must be careful to &quot;add&quot; each file to each patch, or it will not put the changes in those files into the patch. Luckily, quilt edit will put the files in the patch for you, so if you always start your editor with quilt edit fname, then you will have your changed files added to your patches without having to take any other action. But, if you are adding an existing file to the patch, you can add it without having to open your editor with the quilt add command:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt add fname</code></pre>\r\n<p>In order to avoid forgetting to add a file in a patch as I was editing, I just added all the files in the directory each time I created a new patch, whether I edited them or not.</p>\r\n<h3 id=\"split-a-patch-in-two-parts\">Split a patch in two parts</h3>\r\n<p>We are going to split the first patch in two parts. We had fixed a typo and added a new file in one patch. They should be two separate patches.</p>\r\n<p>First make the first patch current:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt pop</code></pre>\r\n<p>Then make a copy of that patch:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt fork</code></pre>\r\n<p>This makes a copy of the first patch called fix-typo-2. But, it removes the first patch fix-typo and puts fix-typo-2 in the series. We need to put the first patch back, and then edit each of the two fix-typo patches so each one contains one part of the original patch.</p>\r\n<pre class=\"sourceCode \"><code># edit patches/series file and put the first patch back\r\n# The file should contain:\r\n\r\nfix-typo\r\nfix-typo-2\r\nprototype</code></pre>\r\n<p>Now edit the first patch using a plain-text editor. It is in patches/fix-typo. Remove the part about the new file, header.h. It should now look like:</p>\r\n<pre class=\"sourceCode \"><code>Index: hello/hello.c\r\n===================================================================\r\n--- hello.orig/hello.c\r\n+++ hello/hello.c\r\n@@ -1,4 +1,4 @@\r\n-#include &quot;stdio.h&quot;\r\n+#include &lt;stdio.h&gt;\r\n\r\n int main (int argc, char *argv[], *env[])\r\n {</code></pre>\r\n<p>Save this file. Now edit the second patch patches/fix-typo-2 using a plain-text editor. Remove the part about the file hello.c. It should now look like:</p>\r\n<pre class=\"sourceCode \"><code>Index: hello/header.h\r\n===================================================================\r\n--- /dev/null\r\n+++ hello/header.h\r\n@@ -0,0 +1,7 @@\r\n+#ifndef HEADER_HH__\r\n+#define HEADER_HH__\r\n+\r\n+#define NAME &quot;bjb\r\n+\r\n+#endif\r\n+</code></pre>\r\n<p>If you give a quilt series command now, you will see that fix-typo-2 is the current patch and quilt thinks fix-typo has been applied.</p>\r\n<p>We have to fix up quilts idea of reality.</p>\r\n<p>Pop the current patch. Things have changed under quilts feet so we have to force this with the -f option:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt pop -f</code></pre>\r\n<p>Now, because quilt thought the original state of fix-typo-2 is the unchanged file, quilt shows the series as being completely un-applied.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt series\r\npatches/fix-typo\r\npatches/fix-typo-2\r\npatches/prototype</code></pre>\r\n<p>Now we can push the patches:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt push -a</code></pre>\r\n<h3 id=\"rename-a-patch\">Rename a patch</h3>\r\n<p>Here we rename a patch from fix-typo-2 to add-header. The quilt rename command acts on the current patch, so make fix-typo-2 current first:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt pop fix-typo-2\r\n$ quilt rename add-header\r\n$ quilt series\r\n$ quilt push -a</code></pre>\r\n<h3 id=\"reorder-the-patch-series\">Reorder the patch series</h3>\r\n<p>We will make a new patch, then move it earlier in the series:</p>\r\n<p>First make the new patch:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt new printf\r\n$ quilt edit hello.c</code></pre>\r\n<p>And change the print statement to:</p>\r\n<pre class=\"sourceCode \"><code>printf(&quot;Hello, world!n&quot;);</code></pre>\r\n<p>Save the patch:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt refresh</code></pre>\r\n<p>Now to demonstrate the reordering.</p>\r\n<p>Unapply all the patches, edit the patches series file patches/series so the patches are in the order you like, and then re-apply the patches. If you are lucky, they will re-apply with no conflicts.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt pop -a\r\n$ vi patches/series\r\n# move &quot;printf&quot; between fix-typo and add-header.\r\n# now all the bug-fixes are at the beginning of the series\r\n$ quilt push -a</code></pre>\r\n<h3 id=\"merge-two-patches-into-one\">Merge two patches into one</h3>\r\n<p>Make another new patch:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt new output-function\r\n$ quilt edit hello.c</code></pre>\r\n<p>Change the c file to this:</p>\r\n<pre class=\"sourceCode \"><code>#include &lt;stdio.h&gt;\r\n\r\nint do_output(const char *name)\r\n{\r\n    return printf(&quot;Hello, %s!n&quot;, name);\r\n}\r\n\r\nint main (int argc, char *argv[], char *env[])\r\n{\r\n    /* ignoring the return code for do_output */\r\n    do_output(NAME);\r\n    return 0;\r\n}</code></pre>\r\n<pre class=\"sourceCode \"><code>$ quilt refresh</code></pre>\r\n<p>Now, to merge two patches into one:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt pop prototype\r\n$ quilt fold &lt; patches/output-function</code></pre>\r\n<p>We have merged the prototype and output-function patches, because they describe a related change.</p>\r\n<p>Save the patch.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt refresh</code></pre>\r\n<h3 id=\"throw-away-a-patch\">Throw away a patch</h3>\r\n<p>Now we no longer need the last patch, output-function, as it has been included into the prototype patch. But we might want to rename the prototype patch.</p>\r\n<pre class=\"sourceCode \"><code>$ quilt delete output-function\r\n# we have to clean up a bit for quilt or the rename won&#39;t work\r\n$ rm patches/output-function\r\n$ quilt rename output-function</code></pre>\r\n<p>Deleting will not work on a patch that has been applied before the current patch.</p>\r\n<p>You are ready to contribute your patches ... go forth and code.</p>\r\n<h2 id=\"summary\">Summary</h2>\r\n<p>We have seen that quilt can help you manage your contributions to any project that is written in plain-text files. It can generate patch files (usually needed for contributions to open source projects) and can help you manage and update them as the tip of the development branch moves forward with other peoples\' contributions.</p>\r\n<p>To use quilt successfully, you need to remember to add files to each patch with quilt add/or quilt edit before editing, and to generate the patch with quilt refresh once all the editing of each patch is done. The rest is easy.</p>\r\n<p>Commands that edit the patches:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt new patch-name\r\n$ quilt add fname\r\n$ quilt edit fname\r\n$ quilt refresh\r\n$ quilt pop [-a]\r\n$ quilt push [-a]\r\n$ quilt rename [-P oldname] newname\r\n$ quilt delete [-P patchname]\r\n$ quilt fold &lt; patch_to_merge</code></pre>\r\n<p>Commands that view the state of the patches:</p>\r\n<pre class=\"sourceCode \"><code>$ quilt series\r\n$ quilt files\r\n$ quilt diff [-P patchname]\r\n$ quilt graph [--all]\r\n$ quilt patches fname\r\n$ quilt annotate fname\r\n$ quilt applied\r\n$ quilt unapplied</code></pre>\r\n<h2 id=\"hpr-exhortation\">HPR exhortation</h2>\r\n<p>You\'ve been listening to Hacker Public Radio. Anyone can make a show -if I can do it, so can you.</p>\r\n',357,0,0,'CC-BY-SA','quilt, patch, diff, plain-text, editor',0,0,1),
(2627,'2018-08-28','Home Phone Setup!!',1402,'This episode we set up a small phone system.','<p>I’m not sure what the echoing is about. It could be picked up from my cell phone’s speaker. Also, I call ftp “tiny ftp” It actually stands for “trivial ftp”</p>\r\n<p><img src=\"https://theadesilva.com/hpr_phone1.jpg\" alt=\"https://theadesilva.com/hpr_phone1.jpg\" /> <img src=\"https://theadesilva.com/hpr_phone2.jpg\" alt=\"https://theadesilva.com/hpr_phone2.jpg\" /> <img src=\"https://theadesilva.com/hpr_phone3.jpg\" alt=\"https://theadesilva.com/hpr_phone3.jpg\" /> <img src=\"https://theadesilva.com/hpr_phone4.jpg\" alt=\"https://theadesilva.com/hpr_phone4.jpg\" /></p>\r\n<p>tftp file for xinetd:</p>\r\n<pre><code>service tftp\r\n{\r\n protocol = udp\r\n port = 69\r\n socket_type = dgram\r\n wait = yes\r\n user = nobody\r\n server = /usr/sbin/in.tftpd\r\n server_args = /tftpboot\r\n disable = no\r\n per_source = 11\r\n cps = 100 2\r\n flags = IPv4\r\n}</code></pre>\r\n<p>voipbuster config files look like this:</p>\r\n<pre><code>SIPDefault.cnf:\r\n  nat_enable: 1\r\n\r\nSIP&lt;mac address&gt;.cnf:\r\nproxy1_address: sip.voipbuster.com\r\nline1_name: outside\r\nline1_authname: &lt;user&gt;\r\nline1_displayname: outside\r\nline1_password: &lt;password&gt;</code></pre>\r\n<p>github projects:</p>\r\n<ul>\r\n<li><p>SIP_Pi: <code>github.com/fabianhu/SIP_Pi (PjSIP: https://www.pjsip.org/release/2.1/pjproject-2.1.tar.bz2 )</code></p></li>\r\n<li><p>Messenger-CLI: <code>github.com/AstroCB/Messenger-CLI</code></p></li>\r\n</ul>\r\n<p>scripts:</p>\r\n<pre><code>=============================\r\nconst login = require(&quot;facebook-chat-api&quot;);\r\n\r\nlogin({email: &quot;FB_EMAIL&quot;, password &quot;FB_PASSWORD&quot;}, (err, api) =&gt;\r\n{\r\n  if(err) return console.error(err);\r\n  api.listen((err,message) =&gt; {\r\n   api.sendMessage(message.body, message.threadID);\r\n  });\r\n});\r\n\r\n=============================\r\n\r\n#!/bin/sh\r\nlame &quot;$2&quot; -o &quot;$2&quot;.mp3\r\n\r\nscp &quot;$2.mp3&quot; planetearth.us:\r\nssh planetearth.us ./runner &quot;&quot;$2.mp3&quot;&quot;\r\n\r\n==============================\r\n\r\n#!/bin/sh\r\n\r\necho &quot;$@&quot; | sed -e s/ /_/g &gt; runner_tmp\r\ndoas mv &quot;$1&quot; /var/www/theadesilva.com/html/$cat runner_tmp)\r\nnode ./oo.js\r\n\r\n==============================\r\n\r\nfs= require(&#39;fs&#39;);\r\nlogin = require(&#39;facebook-chat-api&#39;);\r\n\r\nfs.readFile(&#39;runner_tmp&#39;, &#39;utf8&#39;, function (err, data) {\r\n login({email: &quot;FB_EMAIL&quot;, password: &quot;FB_PASSWORD&quot;}) =&gt; {\r\n  if(err) return console.error(err);\r\n\r\n  api.sendMessage(&quot;New voicemail at 1109&#39;s front door &quot;https://theadesilva.com/&quot; + data + &quot;&quot;&quot; , THREAD_ID);\r\n });\r\n});\r\n\r\n===============================</code></pre>\r\n',115,0,0,'CC-BY-SA','sip kamailio ',0,0,1),
(2637,'2018-09-11','Convert it to Text',981,'This episode will make you want to TXT all the things.','<h2 id=\"why-use-plain-text\">Why use plain text?</h2>\n<ul>\n<li>Portability</li>\n<li>Use with Unix tools</li>\n<li>Use with Ranger</li>\n</ul>\n<h2 id=\"ranger-for-the-win\">Ranger for the win</h2>\n<ul>\n<li><a href=\"https://savannah.nongnu.org/projects/ranger\">Ranger</a> is a free console file manager that gives you greater flexibility and a good overview of your files without having to leave your *nix console. It visualizes the directory tree in two dimensions: the directory hierarchy on one, lists of files on the other, with a preview to the right so you know where you’ll be going.</li>\n<li>The scope functionality is where converting to text pays off. Located at <code>$HOME/.config/ranger/scope.sh</code>, scope is the feature that allows for file preview from inside the console. Text files are highlighted based on their file extension, for non-text files, different converters can be used to coerce the file into a text representation. Some items are available out of the box, but the configuration is written in such a way that any text can be presented in the preview screen.</li>\n<li>The basic format of the scope switch statement is as follows:</li>\n</ul>\n<pre><code>case &quot;$extension&quot; in\n    odt|odp)\n        try odt2txt &quot;$path&quot; &amp;&amp; { dump | trim | fmt -s -w $width; exit 0; };;</code></pre>\n<h2 id=\"tools-in-the-toolset\">Tools in the toolset</h2>\n<ul>\n<li>atool</li>\n<li>caca-utils</li>\n<li>poppler-utils</li>\n<li>catdoc</li>\n<li>catppt</li>\n<li>odt2txt</li>\n<li>ods2tsv</li>\n<li>docx2txt</li>\n<li>xlsx2csv</li>\n<li>mediainfo</li>\n<li>lynx/w3m/elinks</li>\n<li>highlight</li>\n</ul>\n<h2 id=\"bonus-tools\">Bonus tools</h2>\n<ul>\n<li>q</li>\n<li>jq</li>\n<li>xmlstarlet</li>\n</ul>\n',300,0,0,'CC-BY-SA','Unix,text,portability,ranger',0,0,1),
(2628,'2018-08-29','UK Telephone Network Exploration',589,'I describe the process of finding interesting phone numbers on the UK telephone network.','<p>If you have any questions regarding the show. Please leave them on the show page, or email me at <a href=\"mailto:james@jamesdotcom.com\">james@jamesdotcom.com</a> or twitter <code>@Xtrato</code>.</p>\r\n<p>My PGP key can be found here: <a href=\"https://jamesdotcom.com/pub.txt\" class=\"uri\">https://jamesdotcom.com/pub.txt</a></p>\r\n',368,0,0,'CC-BY-SA','UK telephone network,British Telecom,BT',0,0,1),
(2630,'2018-08-31','Open Source Gaming: Revisiting Meridian 59',229,'Discussing the  steam release of Meridian 59 (recorded before release)','<ul>\r\n<li><p>The game’s steam page<br />\r\n<a href=\"https://store.steampowered.com/app/893390/Meridian_59/\" class=\"uri\">https://store.steampowered.com/app/893390/Meridian_59/</a></p></li>\r\n<li><p>Community group on steam<br />\r\n<a href=\"https://steamcommunity.com/groups/m59\" class=\"uri\">https://steamcommunity.com/groups/m59</a></p></li>\r\n<li><p>Game website and source code<br />\r\n<a href=\"https://www.meridian59.com/\" class=\"uri\">https://www.meridian59.com/</a></p></li>\r\n<li><p>Article on the steam launch<br />\r\n<a href=\"https://www.mmobomb.com/news/meridian-59-game-launched-90s-finally-decides-hop-steam/\" class=\"uri\">https://www.mmobomb.com/news/meridian-59-game-launched-90s-finally-decides-hop-steam/</a></p></li>\r\n<li><p>Meridian 59 facebook group<br />\r\n<a href=\"https://www.facebook.com/groups/40338181227/?ref=br_rs\" class=\"uri\">https://www.facebook.com/groups/40338181227/?ref=br_rs</a></p></li>\r\n</ul>\r\n',354,0,1,'CC-BY-SA','Meridian 59,Steam',0,0,1),
(2633,'2018-09-05','Elm - First Impressions',1819,'My first impressions on Elm programming language','<ul>\r\n<li>Official site: <a href=\"https://elm-lang.org/\" class=\"uri\">https://elm-lang.org/</a></li>\r\n<li>Online package repository: <a href=\"https://package.elm-lang.org/\" class=\"uri\">https://package.elm-lang.org/</a></li>\r\n<li>please-focus (package for writing lenses): <a href=\"https://package.elm-lang.org/packages/SwiftsNamesake/please-focus/latest\" class=\"uri\">https://package.elm-lang.org/packages/SwiftsNamesake/please-focus/latest</a></li>\r\n<li>json-extra (for working with json): <a href=\"https://package.elm-lang.org/packages/elm-community/json-extra/latest\" class=\"uri\">https://package.elm-lang.org/packages/elm-community/json-extra/latest</a></li>\r\n<li>elm-decode-pipeline (another library for decoding json): <a href=\"https://package.elm-lang.org/packages/NoRedInk/elm-decode-pipeline/latest\" class=\"uri\">https://package.elm-lang.org/packages/NoRedInk/elm-decode-pipeline/latest</a></li>\r\n</ul>\r\n',364,0,1,'CC-BY-SA','elm, first impressions, programming language',0,0,1),
(2634,'2018-09-06','Git tag and metadata',1149,'An intro to git tags and how to view metadata about your Git repository.','<p>Tag a commit:</p>\r\n\r\n<pre>\r\n$ git tag 0.1\r\n$ git tag\r\n0.1\r\n</pre>\r\n\r\n<p>\r\nDelete a tag:\r\n</p>\r\n\r\n<pre>\r\n$ git tag -d 0.1\r\n</pre>\r\n\r\n<p>\r\nGet the latest commit hash:\r\n</p>\r\n\r\n<pre>\r\n$ git rev-list --tags --max-count=1\r\n94c5715694c5715687a962008dd71191460fc4e32370425a\r\n</pre>\r\n\r\n<p>\r\nGet any tag on a commit:\r\n</p>\r\n\r\n<pre>\r\n$ git describe --tags 94c5715\r\n0.1\r\n</pre>\r\n\r\n',78,104,0,'CC-BY-SA','git',0,0,1),
(2635,'2018-09-07','Running your own mainframe on Linux (for fun and profit)',3321,'This talk is about running your own mainframe on your own hardware.','<p>Yes, this talk is about running your own mainframe on your own hardware. Mainframes are old, yes, but they are still very much alive. New hardware is still being developed and there are a lot of fresh jobs in this area too. A lot of mainframes run COBOL workloads. COBOL is far from a dead language. It processes an estimated 85% of all business transactions, and 5 billion lines of new COBOL code are written every year. In this session the speaker will help you in take your first steps towards running your own mainframe. If you like then after this session you can continue to build your knowledge of mainframe systems using the links provided during the talk. Come on in and learn the basics of a completely different computer system! And it will take you less than an hour to do that!</p>',369,0,0,'CC-BY-SA','hercules,linux',0,0,1),
(2660,'2018-10-12','Installing a bootloader on an Arduino',399,'Ken uses a Arduino Uno to load a bootloader on an Arduino Nano','<p>\r\nIn this show you will learn how to install a bootloader on an Arduino using another Arduino via In-Circuit Serial Programming (ICSP)\r\n</p>\r\n\r\n<p>\r\nAll credit goes to <a href=\"https://www.sparkfun.com/users/150033\">M-SHORT</a> over at <a href=\"https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader\">SparkFun</a> for the excellent tutorial.\r\n</p>\r\n\r\n<ol>\r\n<li>Arduino IDE &gt; File &gt; Examples &gt; 11.ArduinoISP &gt; ArduinoISP</li>\r\n<li>Tools &gt; Board &gt; {your board}</li>\r\n<li>Tools &gt; Programmer &gt; Arduino as ISP</li>\r\n<li>Tools &gt; Burn Bootloader</li>\r\n</ol>',30,0,1,'CC-BY-SA','Arduino, Boot Loader, ISP, ICSP',0,0,1),
(2620,'2018-08-17','Thoughts on language learning part 1',1471,'My thoughts on an approach to language learning which makes sense to me.','<p>This is the first part of a 3 part series in which I ramble on about my thoughts on language learning. I’m no expert and I barely know one language well. In a nutshell:</p>\r\n<ol type=\"1\">\r\n<li>Teach as much as possible in the new language, focusing on vocabulary.</li>\r\n<li>Rather than starting with baby books, which might not be a bad idea, try to use a similar approach but assume the learners know a bit about how the world works.</li>\r\n<li>The goal is to get to about age 5-6 level in vocabulary so the learner can then switch to language books in the new language which already exist.</li>\r\n</ol>',151,0,0,'CC-0','spoken language learning',0,0,1),
(2622,'2018-08-21','Raspberry Pi Temperaturator',272,'I invite my 6 year-old daughter on to discuss how we setup a temperature monitor on her pi','<h2>Items used</h2>\r\n<ul>\r\n<li>Raspberry pi 3 B</li>\r\n<li>0.25 watt resistors</li>\r\n<li>Reusable breadboard</li>\r\n<li>One Wire thermal probe</li>\r\n<li>Various jump wires</li>\r\n</ul>\r\n',300,103,1,'CC-BY-SA','raspberry pi',0,0,1),
(2625,'2018-08-24','My thoughts on language learning communication applications.',980,'I discuss some of my thoughts regarding using chat programs in language learning','<p>This is the second in the series of my thoughts on language learning. In this episode I talk about it might be useful to modify existing chat programs to use two spell checking databases, one for the native language and one for the new language and have words removed from the native language dictionary as the learner advances.</p>\r\n<p>I did forget to mention that something similar might be done with the grammar checkers, too.</p>\r\n',151,0,0,'CC-0','spoken language learning',0,0,1),
(2647,'2018-09-25','More Quick Tips',1010,'More Quick Tips For July - Only Key and Nerf Guns','<p><a href=\"https://onlykey.io/collections/all/products/onlykey-color-secure-password-manager-and-2-factor-token-u2f-yubikey-otp-google-auth-make-password-hacking-obsolete?variant=469626486828\" class=\"uri\">https://onlykey.io/collections/all/products/onlykey-color-secure-password-manager-and-2-factor-token-u2f-yubikey-otp-google-auth-make-password-hacking-obsolete?variant=469626486828</a></p>\r\n<p>Nerf</p>\r\n<ul>\r\n<li><a href=\"https://smile.amazon.com/gp/product/B00BXM6KFS\" class=\"uri\">https://smile.amazon.com/gp/product/B00BXM6KFS</a></li>\r\n<li><a href=\"https://smile.amazon.com/gp/product/B00DW1JT5G\" class=\"uri\">https://smile.amazon.com/gp/product/B00DW1JT5G</a></li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','Nerf gun,dart,OnlyKey,password',0,0,1),
(2652,'2018-10-02','Liverpool Makefest 2018 - Interview with Caroline and John',440,'This is the final interview from this years Liverpool Makefest','<p>This is the final interview from this years Makefest in Liverpool. In this interview I interview one of the founder members of Makefest, Caroline Keep, and the Head Teacher of the school where she works, John Carling.</p>\r\n<p><a href=\"https://lpoolmakefest.org/\" class=\"uri\">https://lpoolmakefest.org/</a></p>\r\n',338,78,0,'CC-BY-SA','Liverpool Makefest 2018, computing, young coders, hackers, makers, crafts',0,0,1),
(2629,'2018-08-30','Thoughts on language learning part 3 - game/story mode.',1564,'I discuss some of my thoughts on how games might help in language learning.','<p>This is the last of 3 parts on my thoughts on language learning. This one introduces my thoughts on how games might be used in language learning. More or less the same concepts from the first two episodes only applied to game/story design.</p>\r\n<p>NOTE: I’m not a game designer.</p>\r\n<p>On the off chance this sounds interesting to you, hpr2620 and hpr2625 are the other two.</p>',151,0,0,'CC-BY-SA','spoken language learning',0,0,1),
(2623,'2018-08-22','Actors and Agents, Sprites and Fractals',3426,'In which I sit down with cwebber and try to keep it short, but end up with an hour of tangents','<p>Plugs:</p>\r\n<ul>\r\n<li><p>Chris works on <a href=\"https://w3c-ccg.github.io/ocap-ld/\">Object Capabilities for Linked Data</a> (OCAP-LD) and other things for a living, at <a href=\"https://digitalbazaar.com/\" class=\"uri\">https://digitalbazaar.com/</a> .</p></li>\r\n<li><p>clacke works at <a href=\"https://fractalide.com/\" class=\"uri\">https://fractalide.com/</a> making better tools for future programmers.</p></li>\r\n<li><p>We’re both fortunate enough to have the chance to get paid for creating all Free Software.</p></li>\r\n<li><p>Christopher Lemmer Webber and Morgan Lemmer Webber will be speaking at <a href=\"https://con.racket-lang.org/\">RacketCon 2018</a> on the topic <em>Racket for Everyone (Else)</em>, how non-programmers can do &quot;programmable publishing&quot; using Scribble when writing humanities papers, and how Racket could better target not just beginner programmers and hard-core language theorists, but also the huge space in between.</p></li>\r\n</ul>\r\n<p>More information on the topics covered:</p>\r\n<ul>\r\n<li><p>For my last show with Chris, see <a href=\"https://hackerpublicradio.org/eps.php?id=2198\">hpr2198 :: How awesome is Guix and why will it take over the world</a></p></li>\r\n<li><p>His Actors library for Guile Scheme is <a href=\"https://www.gnu.org/software/8sync/\">8sync</a>. A video of him playing in front of an audience with the Multi-User Dungeon (MUD) on top of 8sync is available on the front page.</p></li>\r\n<li><p>Spritely, the media sharing platform that may or may not be the next MediaGoblin, is currently vaporware, but the underlying <a href=\"https://gitlab.com/spritely/goblins/\">Goblins</a> Actors library for Racket is real and works.</p></li>\r\n<li><p>Wikipedia has more on the <a href=\"https://en.wikipedia.org/wiki/Actor_model\">Actor Model</a>, <a href=\"https://en.wikipedia.org/wiki/Flow-based_programming\">Flow-Based Programming</a> and <a href=\"https://en.wikipedia.org/wiki/Object-capability_model\">Object Capabilities</a> (OCap).</p></li>\r\n<li><p>We also mentioned in passing <a href=\"https://en.wikipedia.org/wiki/Communicating_sequential_processes\">Communicating Sequential Processes</a>.</p></li>\r\n<li><p>I knew that OCap grew up in the context of <a href=\"https://en.wikipedia.org/wiki/E_(programming_language)\">E</a>, but I didn’t know that E itself actually grew out of the needs of a form of MUD, built by Electric Communities (EC). I’m guessing this is the graphical MMORPG <a href=\"https://en.wikipedia.org/wiki/Habitat_(video_game)\">Habitat</a> that EC built for Lucasfilm back in 1986, for the Commodore 64. Some writing about EC and the philosophy and experience around what they did is collected at <a href=\"https://www.crockford.com/ec/\" class=\"uri\">https://www.crockford.com/ec/</a>.</p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Language-oriented_programming\">Language-oriented programming</a> (LOP) is an old LISP methodology: Understand the problem, write a language for describing and solving the problem, write the solution in that language. Racket (itself a LISP) is heavily focused on this, and comes with a whole slew of languages out of the box. The Racket slogan on <a href=\"https://racket-lang.org/\" class=\"uri\">https://racket-lang.org/</a> is &quot;solve problems — make languages&quot;.</p></li>\r\n<li><p><a href=\"https://cacm.acm.org/magazines/2018/3/225475-a-programmable-programming-language/fulltext\">A recent ACM article</a> describes in depth what the challenges of good LOP are, and how Racket helps the programmer work with it.</p></li>\r\n</ul>\r\n',311,0,0,'CC-BY-SA','flow-based, actors, fractalide, racket, ocap, mud, programming',0,0,1),
(2624,'2018-08-23','Cycling through Brussels',1327,'On a hot day Knightwise rides his bike through Brussels.','<h2 id=\"cycling-through-brussels\">Cycling Through Brussels</h2>\r\n<ul>\r\n<li><p>Apple Store at the Guldenvlieslaan: <a href=\"https://www.apple.com/benl/retail/brussels/\" class=\"uri\">https://www.apple.com/benl/retail/brussels/</a></p></li>\r\n<li><p>Matonge District: <a href=\"https://en.wikipedia.org/wiki/Ixelles#Matong%C3%A9\">https://en.wikipedia.org/wiki/Ixelles#Matong%C3%A9</a></p></li>\r\n<li><p>René Magritte: <a href=\"https://en.wikipedia.org/wiki/Ren%C3%A9_Magritte\">https://en.wikipedia.org/wiki/Ren%C3%A9_Magritte</a></p></li>\r\n<li><p>Musee des Instruments: <img src=\"https://brusselsmuseums.imgix.net/covers/MIM-Hofberg_pano_170522_110758.jpg?w=730&amp;h=496&amp;fit=crop&amp;q=40&amp;auto=format%2Cenhance%2Ccompress\" alt=\"https://brusselsmuseums.imgix.net/covers/MIM-Hofberg_pano_170522_110758.jpg?w=730&amp;h=496&amp;fit=crop&amp;q=40&amp;auto=format%2Cenhance%2Ccompress\" /></p></li>\r\n<!-- <li><p>Musee des Instruments: <img src=\"https://brusselsmuseums.imgix.net/covers/MIM-Hofberg_pano_170522_110758.jpg\" width=\"730\" height=\"496\" alt=\"https://brusselsmuseums.imgix.net/covers/MIM-Hofberg_pano_170522_110758.jpg?w=730&amp;h=496&amp;fit=crop&amp;q=40&amp;auto=format%2Cenhance%2Ccompress\" /></p></li> -->\r\n<li><p>Victor Horta: <a href=\"https://en.wikipedia.org/wiki/Victor_Horta\" class=\"uri\">https://en.wikipedia.org/wiki/Victor_Horta</a></p></li>\r\n<li><p>Belgian Waffles: 2 kinds: <a href=\"https://www.ottsworld.com/blogs/a-tale-of-two-waffles/\" class=\"uri\">https://www.ottsworld.com/blogs/a-tale-of-two-waffles/</a></p></li>\r\n<li><p>He who saves the world in Shindlers list: <a href=\"https://www.youtube.com/watch?v=49aQb7VZ6F8\" class=\"uri\">https://www.youtube.com/watch?v=49aQb7VZ6F8</a></p></li>\r\n<li><p>Central Station<br />\r\n<a href=\"https://www.google.be/maps?rlz=1C1GCEA_enBE808BE808&amp;q=brussels+central+station&amp;um=1&amp;ie=UTF-8&amp;sa=X&amp;ved=0ahUKEwiP7Z7WodDcAhXOyKQKHTgZC0QQ_AUICigB\" class=\"uri\">https://www.google.be/maps?rlz=1C1GCEA_enBE808BE808&amp;q=brussels+central+station&amp;um=1&amp;ie=UTF-8&amp;sa=X&amp;ved=0ahUKEwiP7Z7WodDcAhXOyKQKHTgZC0QQ_AUICigB</a></p></li>\r\n</ul>\r\n',111,0,1,'CC-BY-SA','cycling,Brussels',0,0,1),
(2638,'2018-09-12','Dirt cheap Magic',2410,'Magic the Gathering for cheapskates','<p>In this episode, Klaatu talks about playing <strong>Magic: The Gathering</strong> for cheap.\r\n</p>\r\n\r\n<p>\r\nSee <a href=\"https://rpggeek.com/thread/532036/how-build-deck-magic-gathering\" target=\"_blank\">rpggeek.com&#47;thread&#47;532036&#47;how-build-deck-magic-gathering</a> by Eric Jome for a good deck building formula.\r\n</p>',78,95,0,'CC-BY-SA','magic,mtg',0,0,1),
(2639,'2018-09-13','Some ancillary Bash tips - 9',1305,'Making decisions in Bash (part 1)','<h1 id=\"some-ancillary-bash-tips---9\">Some ancillary Bash tips - 9</h1>\r\n<h2 id=\"making-decisions-in-bash\">Making decisions in Bash</h2>\r\n<p>This is my ninth contribution to the <a href=\"https://hackerpublicradio.org/series/0042.html\" title=\"*Bash Scripting* series\"><em>Bash Scripting</em></a> series under the heading of <em>Bash Tips</em>. The previous episodes are listed below in the <a href=\"#links\">Links</a> section.</p>\r\n<p>It seems to me that it would be worthwhile looking at how Bash can be used to make decisions, such as how many times a loop should cycle (<em>looping constructs</em>) or to choose between multiple choices (<em>conditional constructs</em>). Of course we need to look at some of the expressions used in conjunction with the commands that do these tasks – the tests themselves – and we’ll do this in this episode.</p>\r\n<p>This is a complex area which I had some trouble with when I first started using Bash, and there is a lot to say about it all. I have prepared a group of HPR shows about this subject, in order to do it justice, and this is the first of the group.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2639/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bash-Conditional-Expressions\">“Bash Conditional Expressions”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“Bourne Shell Builtins”</a></li>\r\n</ul></li>\r\n<li><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n</ol></li>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2639/bash9_ex1.sh\">bash9_ex1.sh</a></li>\r\n</ul></li>\r\n</ul>',225,42,1,'CC-BY-SA','Bash,test,true,false',0,0,1),
(2649,'2018-09-27','More ancillary Bash tips - 10',1372,'Making decisions in Bash (part 2)','<h1 id=\"more-ancillary-bash-tips---10\">More ancillary Bash tips - 10</h1>\r\n<h2 id=\"making-decisions-in-bash\">Making decisions in Bash</h2>\r\n<p>This is my tenth contribution to the <a href=\"https://hackerpublicradio.org/series/0042.html\" title=\"*Bash Scripting* series\"><em>Bash Scripting</em></a> series under the heading of <em>Bash Tips</em>. The previous episodes are listed below in the <a href=\"#links\">Links</a> section.</p>\r\n<p>We are currently looking at decision making in Bash, and in the last episode we examined the tests themselves. In this episode we’ll look at the constructs that use these tests: looping constructs, conditional constructs and lists of commands.</p>\r\n<p><strong>Note</strong>: this episode and the preceding one were originally recorded as a single episode, but because it was so long it was split into two. As a consequence the audio contains references to examples such as <code>bash9_ex2.sh</code> where the true name is <code>bash10_ex1.sh</code>. The notes have been updated as necessary but not the audio.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2649/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Looping-Constructs\">“Bash Looping Constructs”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs\">“Bash Conditional Constructs”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“Bourne Shell Builtins”</a></li>\r\n</ul></li>\r\n<li><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n</ol></li>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2649/bash10_ex1.sh\">bash10_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2649/bash10_ex2.sh\">bash10_ex2.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2649/bash10_ex3.sh\">bash10_ex3.sh</a></li>\r\n</ul></li>\r\n</ul>',225,42,1,'CC-BY-SA','Bash,test,while,until,if,case',0,0,1),
(2659,'2018-10-11','Further ancillary Bash tips - 11',1702,'Making decisions in Bash (part 3)','<h1 id=\"further-ancillary-bash-tips---11\">Further ancillary Bash tips - 11</h1>\r\n<p>This is the eleventh episode in the <em>Bash Tips</em> sub-series. It is the third of a group of shows about making decisions in Bash.</p>\r\n<p>In the last two episodes we saw the types of test Bash provides, and we looked briefly at some of the commands that use these tests. Now we want to start examining the expressions that can be used in these tests, and how to combine them. We will also start looking at string comparisons in extended tests.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2659/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs\">“Bash Conditional Constructs”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bash-Conditional-Expressions\">“Bash Conditional Expressions”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“Bourne Shell Builtins”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin\">“The <code>set</code> Builtin”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching\">“Bash Pattern Matching”</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html\">“<em>POSIX Shell Command Language</em>”</a> - documentation of all of the POSIX features mentioned in this series.</p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n</ol></li>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2659/bash11_ex1.sh\">bash11_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2659/bash11_ex2.sh\">bash11_ex2.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2659/bash11_ex3.sh\">bash11_ex3.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2659/bash11_ex4.sh\">bash11_ex4.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2659/bash11_ex5.sh\">bash11_ex5.sh</a></li>\r\n</ul></li>\r\n</ul>',225,42,1,'CC-BY-SA','Bash,test,conditional expression,string comparison,pattern',0,0,1),
(2645,'2018-09-21','Blinking LED',1390,'In this live show, Ken sees if he can follow simple instructions','<p>\r\nDuring the New Year Show Ken soldered a component tester. Unfortunately this did not work. \r\n</p>\r\n<p>\r\nNYBill offered to fix it and he succeeded in his show <a href=\"https://hackerpublicradio.org/eps.php?id=2591\">hpr2591 :: International Troubleshooting</a>. When he shipped it back he included two 555 timers with the message: <em>Now, figure out how to make LED\'s blink\r\nwith those 555\'s! </em> \r\n</p>\r\n<p>\r\n\r\nIn this show Ken uses the online guide <a href=\"https://www.instructables.com/id/Flashing-LED-using-555-Timer/\">FLASHING L.E.D. USING 555 TIMER</a> By <a href=\"https://www.instructables.com/member/Trilesto/\">Trilesto</a> to do this. \r\n</p>',30,103,1,'CC-BY-NC-SA','555, NYBill, pico, nano',0,0,1),
(2640,'2018-09-14','Another Rambling Drive Into Work',835,'An second attempt at making a show on the way into work','<p>It’s been a while since I posted my first attempt at recording a show in my car, this attempt was recorded not that long after that but I’d forgotten to post it, hopefully, it’s not too boring.</p>\r\n<p>This is the previously mentioned dictation device I used<br />\r\n<a href=\"https://www.amazon.co.uk/HccToo-Multifunctional-Rechargeable-Dictaphone-Conversation/dp/B015H9JP6S/ref=sr_1_1?ie=UTF8&amp;qid=1502381150&amp;sr=8-1&amp;keywords=dictation+machines\" class=\"uri\">https://www.amazon.co.uk/HccToo-Multifunctional-Rechargeable-Dictaphone-Conversation/dp/B015H9JP6S/ref=sr_1_1?ie=UTF8&amp;qid=1502381150&amp;sr=8-1&amp;keywords=dictation+machines</a></p>\r\n<p>An article that explains how to remove noise using Audacity, which was what dodddummy was talking about when he commented on my first show on <a href=\"https://hackerpublicradio.org/eps.php?id=2377\">HPR2377</a> <a href=\"https://www.podfeet.com/blog/recording/how-to-remove-noise-with-audacity/\" class=\"uri\">https://www.podfeet.com/blog/recording/how-to-remove-noise-with-audacity/</a></p>\r\n<p>Link to Dave’s (<code>thelovebug</code>) page and the original John Kulp’s $2 microphone show that kicked all this off. Looking forward to getting a chance to catch up with Dave’s drive into work show. Refer to Dave’s episode <a href=\"https://hackerpublicradio.org/eps.php?id=2400\">HPR2400</a> and John Kulp’s original $2 microphone show <a href=\"https://hackerpublicradio.org/eps.php?id=1812\">HPR1812</a></p>\r\n<p>Link to the microphone originally recommended By John Kulp<br />\r\n<a href=\"https://www.amazon.co.uk/Neewer-3-5mm-Hands-Computer-Microphone/dp/B005DOTSM4/\" class=\"uri\">https://www.amazon.co.uk/Neewer-3-5mm-Hands-Computer-Microphone/dp/B005DOTSM4/</a></p>\r\n<p>A link from StackExchange that details the wiring diagram for Kenwood style microphone used in many portable Amateur radios<br />\r\n<a href=\"https://ham.stackexchange.com/questions/1891/whats-the-pinout-for-kenwood-2-5mm-trs-3-5-mm-trs-connector\" class=\"uri\">https://ham.stackexchange.com/questions/1891/whats-the-pinout-for-kenwood-2-5mm-trs-3-5-mm-trs-connector</a></p>\r\n<p>This is a small article in Wikipedia that covers the Electret Microphone which is the type used in the microphone recommended by John Kulp, Dave (<code>thelovebug</code>) and now me.<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Electret_microphone\" class=\"uri\">https://en.wikipedia.org/wiki/Electret_microphone</a></p>\r\n',201,0,1,'CC-BY-SA','recording, podcasting, audio, microphone, car, Audacity',0,0,1),
(2642,'2018-09-18','My swedish and german Podcasts Part 2',318,'I talk about 6 more podcasts in swedish and german. This time no radio network involved.','<ul>\r\n<li><strong>Helt sant</strong> <a href=\"https://api.sr.se/api/rss/pod/20447\" class=\"uri\">https://api.sr.se/api/rss/pod/20447</a></li>\r\n<li><strong>Brysselbubblan</strong> <a href=\"https://brysselbubblan.libsyn.com/rss\" class=\"uri\">https://brysselbubblan.libsyn.com/rss</a></li>\r\n<li><strong>Fri tanke podcast</strong> <a href=\"https://fritanke.podbean.com/feed/\" class=\"uri\">https://fritanke.podbean.com/feed/</a></li>\r\n<li><strong>Chaosradio</strong> <a href=\"https://chaosradio.ccc.de/chaosradio-latest.rss\" class=\"uri\">https://chaosradio.ccc.de/chaosradio-latest.rss</a></li>\r\n<li><strong>Radio Tux</strong> <a href=\"https://radiotux.de/podcast/rss/radiotux-all_ogg.xml\" class=\"uri\">https://radiotux.de/podcast/rss/radiotux-all_ogg.xml</a></li>\r\n<li><strong>Heiseshow</strong> <a href=\"https://www.heise.de/heiseshow.rss\" class=\"uri\">https://www.heise.de/heiseshow.rss</a></li>\r\n</ul>\r\n',309,75,1,'CC-BY-SA','podcast,swedish,german,ccc',0,0,1),
(2916,'2019-10-07','HPR Community News for September 2019',4081,'HPR Volunteers talk about shows released and comments posted in September 2019','<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=2891\" target=\"_blank\">2891</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-09-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2891\" target=\"_blank\">HPR Community News for August 2019</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=2892\" target=\"_blank\">2892</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-09-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2892\" target=\"_blank\">Stardrifter RPG Playtest Part 02</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2893\" target=\"_blank\">2893</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-09-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2893\" target=\"_blank\">Whats in the box! Part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2894\" target=\"_blank\">2894</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-09-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2894\" target=\"_blank\">Repairing a Musical Instrument Case</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2895\" target=\"_blank\">2895</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-09-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2895\" target=\"_blank\">The work of fire fighters, part 2</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=2896\" target=\"_blank\">2896</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-09-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2896\" target=\"_blank\">Orange PI Zero LTS version</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2897\" target=\"_blank\">2897</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-09-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2897\" target=\"_blank\">Stardrifter RPG Playtest Part 03</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2898\" target=\"_blank\">2898</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-09-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2898\" target=\"_blank\">Modeling people in space game</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2899\" target=\"_blank\">2899</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-09-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2899\" target=\"_blank\">Endeavour OS</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2900\" target=\"_blank\">2900</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-09-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2900\" target=\"_blank\">Better Social Media 01 - Introduction</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=2901\" target=\"_blank\">2901</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-09-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2901\" target=\"_blank\">Describing how I listen to podcasts PART 3</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=2902\" target=\"_blank\">2902</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-09-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2902\" target=\"_blank\">Stardrifter RPG Playtest Part 04</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2903\" target=\"_blank\">2903</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-09-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2903\" target=\"_blank\">What is PMEM</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2904\" target=\"_blank\">2904</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-09-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2904\" target=\"_blank\">DIY URL shortening</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=2905\" target=\"_blank\">2905</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-09-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2905\" target=\"_blank\">Two HPR hosts living in the same region finally meet up!</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=2906\" target=\"_blank\">2906</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-09-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2906\" target=\"_blank\">Feature Engineering for Data-Driven Decision Making</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2907\" target=\"_blank\">2907</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-09-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2907\" target=\"_blank\">Stardrifter RPG Playtest Part 05</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2908\" target=\"_blank\">2908</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-09-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2908\" target=\"_blank\">Modeling opinions in space game</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2909\" target=\"_blank\">2909</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-09-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2909\" target=\"_blank\">ONICS Basics Part 3:  Networking Fundamentals</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2910\" target=\"_blank\">2910</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-09-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2910\" target=\"_blank\">Better Social Media 02 - Pluspora</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=2911\" target=\"_blank\">2911</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-09-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2911\" target=\"_blank\">my internet connection</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0243.html\" target=\"_blank\">Jezra</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 17 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 3 comments on\n3 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1328#comments\" target=\"_blank\">hpr1328</a></strong>\n(2013-09-04) \"<em>A Hacker\'s Perspective On Schizophrenia </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0115.html\" target=\"_blank\">sigflup</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1328#6\" target=\"_blank\">Comment 6</a>:\nVegewurst on 2019-09-06:\n\"Insightful\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2844#comments\" target=\"_blank\">hpr2844</a></strong>\n(2019-06-27) \"<em>The Sony TC-222-A Portable Reel-To-Reel Tape Recorder</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2844#1\" target=\"_blank\">Comment 1</a>:\nMichael on 2019-09-29:\n\"Muffled sound because of low path filtering.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2881#comments\" target=\"_blank\">hpr2881</a></strong>\n(2019-08-19) \"<em>Automatically split album into tracks in Audacity</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2881#2\" target=\"_blank\">Comment 2</a>:\nHipstre on 2019-09-01:\n\"2881 - Audacity: Split Album into Tracks\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 14 comments on 9 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2891#comments\" target=\"_blank\">hpr2891</a></strong>\n(2019-09-02) \"<em>HPR Community News for August 2019</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=2891#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-09-02:\n\"Where was Ken ?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2891#2\" target=\"_blank\">Comment 2</a>:\nJon Kulp on 2019-09-03:\n\"Heroic effort!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2891#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2019-09-04:\n\"Thanks Jon\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2893#comments\" target=\"_blank\">hpr2893</a></strong>\n(2019-09-04) \"<em>Whats in the box! Part 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2893#1\" target=\"_blank\">Comment 1</a>:\ntimttmy on 2019-09-05:\n\"Trem pedal\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2893#2\" target=\"_blank\">Comment 2</a>:\nJon Kulp on 2019-09-06:\n\"No delay\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2893#3\" target=\"_blank\">Comment 3</a>:\nNYbill on 2019-09-07:\n\"Hit and Miss\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2895#comments\" target=\"_blank\">hpr2895</a></strong>\n(2019-09-06) \"<em>The work of fire fighters, part 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2895#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-09-06:\n\"Very dissapointed\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2895#2\" target=\"_blank\">Comment 2</a>:\nSteve on 2019-09-10:\n\"Volunteer Firefighters\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2903#comments\" target=\"_blank\">hpr2903</a></strong>\n(2019-09-18) \"<em>What is PMEM</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2903#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2019-09-27:\n\"Awesome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2904#comments\" target=\"_blank\">hpr2904</a></strong>\n(2019-09-19) \"<em>DIY URL shortening</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=2904#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-09-23:\n\"clever\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2906#comments\" target=\"_blank\">hpr2906</a></strong>\n(2019-09-23) \"<em>Feature Engineering for Data-Driven Decision Making</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2906#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2019-09-27:\n\"Nice show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2907#comments\" target=\"_blank\">hpr2907</a></strong>\n(2019-09-24) \"<em>Stardrifter RPG Playtest Part 05</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2907#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2019-09-27:\n\"Nice series\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2909#comments\" target=\"_blank\">hpr2909</a></strong>\n(2019-09-26) \"<em>ONICS Basics Part 3:  Networking Fundamentals</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2909#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2019-09-27:\n\"Interesting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2910#comments\" target=\"_blank\">hpr2910</a></strong>\n(2019-09-27) \"<em>Better Social Media 02 - Pluspora</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=2910#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2019-09-27:\n\"Nice show\"</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/2019-September/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-September/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 1 show which was without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n<h3 id=\"change-to-the-missing-tags-document\">Change to the Missing Tags document</h3>\n<p>The section of this document which lists all of the tags currently in the system has been made more accessible. If you know of a tag in the system and you want to find out how many instances there are and which shows use them you can construct a query of the form:</p>\n<pre><code>https://hackerpublicradio.org/report_missing_tags.php#vim</code></pre>\n<p>This would look for the tag <code>\'vim\'</code> and position the page at the relevant place.</p>\n<p>If the tag you are looking for contains spaces, you need to replace them with underscores. So to look for the tag <code>\'vietnamese stringed instruments\'</code> your query would have to be:</p>\n<pre><code>https://hackerpublicradio.org/report_missing_tags.php#vietnamese_stringed_instruments</code></pre>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2936,'2019-11-04','HPR Community News for October 2019',2514,'Ken discusses last months shows and talks about OggCamp, FLOSS Weekly, FOSDEM, and Star Wars.','<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/0380.html\" target=\"_blank\">Carl</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=2912\" target=\"_blank\">2912</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-10-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2912\" target=\"_blank\">Stardrifter RPG Playtest Part 06</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2913\" target=\"_blank\">2913</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-10-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2913\" target=\"_blank\">Windows, SDN, and Firewalls</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0231.html\" target=\"_blank\">Beto</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2914\" target=\"_blank\">2914</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-10-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2914\" target=\"_blank\">Describing how I listen to podcasts PART 4</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=2915\" target=\"_blank\">2915</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-10-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2915\" target=\"_blank\">Intro - My Recording Setup</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0380.html\" target=\"_blank\">Carl</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2916\" target=\"_blank\">2916</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-10-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2916\" target=\"_blank\">HPR Community News for September 2019</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=2917\" target=\"_blank\">2917</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-10-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2917\" target=\"_blank\">Stardrifter RPG Playtest Part 07</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2918\" target=\"_blank\">2918</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-10-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2918\" target=\"_blank\">Selecting random item from weighted list</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2919\" target=\"_blank\">2919</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-10-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2919\" target=\"_blank\">hosting software in HPR show notes</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=2920\" target=\"_blank\">2920</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-10-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2920\" target=\"_blank\">Better Social Media 03 - MeWe</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=2921\" target=\"_blank\">2921</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-10-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2921\" target=\"_blank\">Geocaching with the family</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0314.html\" target=\"_blank\">thelovebug</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2922\" target=\"_blank\">2922</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-10-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2922\" target=\"_blank\">Stardrifter RPG Playtest Part 08</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2923\" target=\"_blank\">2923</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-10-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2923\" target=\"_blank\">Describing how I listen to podcasts PART 5</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=2924\" target=\"_blank\">2924</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-10-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2924\" target=\"_blank\">Hacking an Alarm Clock to Make it Quieter</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2925\" target=\"_blank\">2925</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-10-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2925\" target=\"_blank\">LinuxLugCast\'s Memorial for FiftyOneFifty </a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2926\" target=\"_blank\">2926</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-10-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2926\" target=\"_blank\">Full Circle Magazine</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2927\" target=\"_blank\">2927</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-10-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2927\" target=\"_blank\">Stardrifter RPG Playtest Part 09</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2928\" target=\"_blank\">2928</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-10-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2928\" target=\"_blank\">Building markov chains with Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2929\" target=\"_blank\">2929</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-10-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2929\" target=\"_blank\">Recovering Files from a Dead MacBook Air</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2930\" target=\"_blank\">2930</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-10-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2930\" target=\"_blank\">Better Social Media 04 - Diaspora</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=2931\" target=\"_blank\">2931</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-10-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2931\" target=\"_blank\">Wallabag for on premises article aggregation</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2932\" target=\"_blank\">2932</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-10-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2932\" target=\"_blank\">Stardrifter RPG Playtest Part 10</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2933\" target=\"_blank\">2933</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-10-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2933\" target=\"_blank\">A walk through my PifaceCAD Python code – Part 1</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=2934\" target=\"_blank\">2934</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-10-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2934\" target=\"_blank\">Server Basics 106: Namespaces and containers</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</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 are 7 comments on\n5 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2895#comments\" target=\"_blank\">hpr2895</a></strong>\n(2019-09-06) \"<em>The work of fire fighters, part 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2895#3\" target=\"_blank\">Comment 3</a>:\nDon on 2019-10-20:\n\"great podcast\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2900#comments\" target=\"_blank\">hpr2900</a></strong>\n(2019-09-13) \"<em>Better Social Media 01 - Introduction</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2900#1\" target=\"_blank\">Comment 1</a>:\nJeroen baten on 2019-10-05:\n\"Hope you will find time to discuss Okuna\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2900#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2019-10-05:\n\"No plans for now\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2906#comments\" target=\"_blank\">hpr2906</a></strong>\n(2019-09-23) \"<em>Feature Engineering for Data-Driven Decision Making</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2906#2\" target=\"_blank\">Comment 2</a>:\nGabriel Evenfire on 2019-10-08:\n\"Love the idea here...\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2909#comments\" target=\"_blank\">hpr2909</a></strong>\n(2019-09-26) \"<em>ONICS Basics Part 3:  Networking Fundamentals</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2909#2\" target=\"_blank\">Comment 2</a>:\nGabriel Evenfire on 2019-10-08:\n\"Thanks for the feedback\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2909#3\" target=\"_blank\">Comment 3</a>:\ngerryk on 2019-10-17:\n\"Yet another top episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2911#comments\" target=\"_blank\">hpr2911</a></strong>\n(2019-09-30) \"<em>my internet connection</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0243.html\" target=\"_blank\">Jezra</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2911#1\" target=\"_blank\">Comment 1</a>:\nBeeza on 2019-10-05:\n\"HPR 2911\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 7 comments on 5 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2913#comments\" target=\"_blank\">hpr2913</a></strong>\n(2019-10-02) \"<em>Windows, SDN, and Firewalls</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0231.html\" target=\"_blank\">Beto</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2913#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2019-10-02:\n\"+1 on Chocolatey Recommendation\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2915#comments\" target=\"_blank\">hpr2915</a></strong>\n(2019-10-04) \"<em>Intro - My Recording Setup</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0380.html\" target=\"_blank\">Carl</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2915#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-10-04:\n\"More shows on ....\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2921#comments\" target=\"_blank\">hpr2921</a></strong>\n(2019-10-14) \"<em>Geocaching with the family</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0314.html\" target=\"_blank\">thelovebug</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2921#1\" target=\"_blank\">Comment 1</a>:\njezra on 2019-10-17:\n\"what a fun adventure\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2921#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2019-10-17:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2925#comments\" target=\"_blank\">hpr2925</a></strong>\n(2019-10-18) \"<em>LinuxLugCast\'s Memorial for FiftyOneFifty </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2925#1\" target=\"_blank\">Comment 1</a>:\nlostnbronx on 2019-10-19:\n\"I Never Met Fifty, But I Knew Him\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2928#comments\" target=\"_blank\">hpr2928</a></strong>\n(2019-10-23) \"<em>Building markov chains with Haskell</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2928#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2019-10-29:\n\"Thanks for this episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2928#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2019-10-31:\n\"thanks for the feedback!\"</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/2019-October/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-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=\"floss-weekly\">FLOSS Weekly</h3>\n<p><a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken Fallon</a> and <a href=\"https://hackerpublicradio.org/correspondents/0198.html\">Ahuka</a> appeared on FLOSS Weekly <a href=\"https://twit.tv/shows/floss-weekly/episodes/553?autostart=false\">Episode 553</a> on October 30<sup>th</sup> 2019 to talk about Hacker Public Radio.</p>\n<h3 id=\"oggcamp-2019\">OggCamp 2019</h3>\n<p>There was an HPR presence at OggCamp 2019. This was held at The Manchester Conference Centre during the weekend of October 19<sup>th</sup> and 20<sup>th</sup> 2019. We had an HPR table, which was manned by many HPR hosts and received many visitors. Ken recorded interviews which will be released later in November.</p>\n<h3 id=\"fosdem-2020\">FOSDEM 2020</h3>\n<p>A request has been made to get a Podcasters table at FOSDEM 2020.</p>\n<h3 id=\"hpr-on-podcast-networks\">HPR on podcast networks</h3>\n<p>We need some help getting HPR on Google Podcasts, Stitcher, Soundcloud, etc.</p>\n<h3 id=\"ken-versus-espeak\">Ken versus <em>espeak</em></h3>\n<p>Which is preferable, the <em>espeak</em> show summary or Ken’s new reading of the information?</p>\n<h3 id=\"watching-star-wars-for-the-first-time\">Watching Star Wars for the first time</h3>\n<p>A question: should it be watched in Episode or Production Order?</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>There were no tag or summary updates in the past month.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2643,'2018-09-19','The Payoff In Storytelling',677,'A brief look at the emotional structure of story endings.','<p>Lostnbronx takes a quick look at how story endings need to be structured in order to be satisfying. Lots of endings are possible, but they don’t all require the same treatment. Some can be abrupt, some can be sad, but all of them need to meet certain emotional expectations.</p>\r\n',107,105,0,'CC-0','stories,storytelling,endings,lostnbronx',0,0,1),
(2644,'2018-09-20','Error on show 2642',59,'Error error','<p>The right podcast is:</p>\r\n<ul>\r\n<li><strong>Kvalificerat Hemligt</strong> <a href=\"https://feeds.soundcloud.com/users/soundcloud:users:167287536/sounds.rss\" class=\"uri\">https://feeds.soundcloud.com/users/soundcloud:users:167287536/sounds.rss</a></li>\r\n</ul>',309,75,0,'CC-BY-SA','podcast, swedish, correction',0,0,1),
(2648,'2018-09-26','Explaining the controls on my Amateur HF Radio Part 1',1646,'I attempt to explain the controls on my Kenwood TS940S HF Amateur Radio.','<p>In this episode, I cover the transmit section controls.</p>\r\n<h2 id=\"related-links-for-the-ts940s-amateur-hf-radio\">Related links for the TS940S Amateur HF Radio</h2>\r\n<ul>\r\n<li><p>TS940 Overview<br />\r\n<a href=\"https://www.universal-radio.com/catalog/hamhf/ts940s.html\" class=\"uri\">https://www.universal-radio.com/catalog/hamhf/ts940s.html</a></p></li>\r\n<li><p>TS940 Review<br />\r\n<a href=\"https://www.eham.net/reviews/detail/239\" class=\"uri\">https://www.eham.net/reviews/detail/239</a></p></li>\r\n<li><p>TS940 User Manual<br />\r\n<a href=\"https://www.radiomanual.info/schemi/TS940_user.pdf\" class=\"uri\">https://www.radiomanual.info/schemi/TS940_user.pdf</a></p></li>\r\n</ul>\r\n<h3 id=\"further-info-and-clarification\">Further info and clarification</h3>\r\n<p>Below I’ll cover some of the items I missed or didn’t understand when I recorded my off the cuff episode. If I miss something you may find it in the user manual link above.</p>\r\n<p>Full and Semi break-in mode is used when operating in CW mode (Morse Code). In full break-in mode the radio jumps back into receive the moment the mores key is released this way you can hear if the station is trying to contact in-between each press of the key. This is very demanding on the radio as it must switch very quickly back into receive mode it can also be distracting for the operator hearing hissing noise between each dot and dash. Semi break-in mode is a bit like using VOX mode in speech the radio goes silent between each dot and dash but will return to receive after the mores key is released for a predetermined time interval.</p>\r\n<p>The digital display used on the main display of the TS940S is apparently a Vacuum Fluorescent Display not the more usual LED of the time.</p>\r\n<p>The TS 940S was manufactured around 1986, so unbelievably that means my wonderful radio that to me looks fairly modern is around 30 years Old! I believe this HF radio was top of the line for Kenwood back then.</p>\r\n<p>The Auto and thru button is used to connect the auto tuner in line with the antenna. When AUTO is selected the radio is connected to the Auto internal tuner and then to the antenna. In THRU the radio bypasses the auto tuner and connects the radio directly to the antenna.</p>\r\n<h3 id=\"the-speech-compressor\">The Speech Compressor</h3>\r\n<p>During SSB operation it is desirable to increase the relative “talk power” of the transceiver by using speech processor circuitry. The speech processor control is set by using the in and out rotary control. The in control level is set by putting the meter into Comp and adjusting the in control to no more than 10 dB of compression. The out control level is set by putting the meter into ALC and adjusting the out control to ensure the meter stays within the ALC section of the meter.</p>\r\n<p>IC meter position indicates the power transistor collector current</p>\r\n<p>VC meter position indicates the power transistor collector voltage</p>\r\n<p>Noise Blanker 1 (NB1)<br />\r\nFor pulse type noise, such as generated by automatic ignition systems.</p>\r\n<p>Noise Blanker 2 (NB2)<br />\r\nFor long duration pulse noise, like the Russian woodpecker.</p>',201,43,1,'CC-BY-SA','Amateur, Radio, Ham',0,0,1),
(2650,'2018-09-28','My Pocket Knife',505,'Shane talks about his pocket knife for a few minutes.','<p>\r\nThe pocket knife Shane talks about is the Number 6 knife made by the French company Opinel, It costs about $20 (Canadian). This version has a walnut handle.\r\n</p>\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2650.jpg\">\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2650-small.jpg\" alt=\"Opinel pocket knife with ham and cheese sandwich\"/>\r\n</a>\r\n</p>\r\n',250,23,0,'CC-BY-SA','lock knife,Opinel knife',0,0,1),
(2653,'2018-10-03','Using the EXACT Function in Excel',199,'Shane explains that he just learned a simple and useful Excel function.','<p>The function looks like <code>=EXACT(A1,D1)</code> and its purpose is to tell you if <code>A1</code> contains the exact same value as <code>D1</code> or not.</p>\r\n',250,0,0,'CC-BY-SA','Excel',0,0,1),
(2654,'2018-10-04','Making Crepes',767,'Shane makes crepes from a simple recipe. ','<h2 id=\"crepe-recipe\">Crepe Recipe:</h2>\r\n<ul>\r\n<li>1 cup of flour</li>\r\n<li>1 cup of milk</li>\r\n<li>1 egg</li>\r\n<li>1 pinch of salt</li>\r\n</ul>\r\n<h3 id=\"cinnamon-sugar-mixture-recipe\">Cinnamon Sugar Mixture Recipe:</h3>\r\n<ul>\r\n<li>1 part cinnamon (or less)</li>\r\n<li>8 parts sugar</li>\r\n</ul>\r\n',250,93,0,'CC-BY-SA','crepes, cooking, parenting',0,0,1),
(2655,'2018-10-05','Sleep Apnea and Afib',705,'How Sleep Apnea and Atrial Fibrillation entered my life','<p>The last of my personal health issue shows covers two related issues, Sleep Apnea and Atrial Fibrillation. They are related because Sleep Apnea is a cause of Atrial Fibrillation. Fortunately both can be controlled if you follow medical directions.</p>\r\n<ul>\r\n<li><a href=\"https://www.mayoclinic.org/diseases-conditions/sleep-apnea/symptoms-causes/syc-20377631\" class=\"uri\">https://www.mayoclinic.org/diseases-conditions/sleep-apnea/symptoms-causes/syc-20377631</a></li>\r\n<li><a href=\"https://www.heart.org/en/health-topics/atrial-fibrillation/what-is-atrial-fibrillation-afib-or-af\" class=\"uri\">https://www.heart.org/en/health-topics/atrial-fibrillation/what-is-atrial-fibrillation-afib-or-af</a></li>\r\n<li><a href=\"https://www.mayoclinic.org/diseases-conditions/sleep-apnea/symptoms-causes/syc-20377631\" class=\"uri\">https://www.mayoclinic.org/diseases-conditions/sleep-apnea/symptoms-causes/syc-20377631</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=352\" class=\"uri\">https://www.palain.com/?page_id=352</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health, Medicine, Apnea, Heart, Afib, Atrial Fibrillation',0,0,1),
(2656,'2018-10-08','Explaining the controls on my Amateur HF Radio Part 2',844,'In this episode I cover the mode and frequency selection controls of my Kenwood TS 940S','<h2 id=\"radio-mode-and-frequency-controls-on-amateur-hf-radio-ts940s\">Radio Mode and frequency controls on Amateur HF Radio TS940S</h2>\r\n<ul>\r\n<li><p>UK HF band plan information<br />\r\n<a href=\"https://rsgb.org/main/operating/band-plans/hf/\" class=\"uri\">https://rsgb.org/main/operating/band-plans/hf/</a></p></li>\r\n<li><p>Morse code (CW), Carrier Wave<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Morse_code\" class=\"uri\">https://en.wikipedia.org/wiki/Morse_code</a></p></li>\r\n<li><p>Article about Sideband, including Lower Side Band (LSB) and Upper Side Band (USB)<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Sideband\" class=\"uri\">https://en.wikipedia.org/wiki/Sideband</a></p></li>\r\n<li><p>Amplitude Modulation (AM)<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Amplitude_modulation\" class=\"uri\">https://en.wikipedia.org/wiki/Amplitude_modulation</a></p></li>\r\n<li><p>Frequency Modulation (FM)<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Frequency_modulation\" class=\"uri\">https://en.wikipedia.org/wiki/Frequency_modulation</a></p></li>\r\n<li><p>Frequency Shift Keying (FSK)<br />\r\nNote the CW ident di da dit or dot dash dot is not as I thought the letter “K” in Morse code, silly me, it’s actually the letter “R”. Told you I wasn’t great at Morse.<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Frequency-shift_keying\" class=\"uri\">https://en.wikipedia.org/wiki/Frequency-shift_keying</a></p></li>\r\n</ul>\r\n<p>The “T-F Set” button is used to set the Transmit frequency when working in split mode. In split mode, you can set the radio to transmits on one frequency and receives on a different frequency.</p>',201,43,1,'CC-BY-SA','Amateur, Radio, Ham',0,0,1),
(2665,'2018-10-19','Exercise and Diet',1041,'Exercise and Diet are primary to health','<p>The best things you can do to maximize your health are to watch what you eat and make sure you get exercise. These are some of the primary tools in my kit for staying healthy and living a long life.</p>\r\n<ul>\r\n<li><a href=\"https://www.amazon.com/Dr-Bernsteins-Diabetes-Solution-Achieving-ebook/dp/B004QZ9PC4/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1483459301&amp;sr=1-1&amp;keywords=dr+bernstein+diabetes+solution\" class=\"uri\">https://www.amazon.com/Dr-Bernsteins-Diabetes-Solution-Achieving-ebook/dp/B004QZ9PC4/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1483459301&amp;sr=1-1&amp;keywords=dr+bernstein+diabetes+solution</a></li>\r\n<li><a href=\"https://www.diabetes-book.com/\" class=\"uri\">https://www.diabetes-book.com/</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=354\" class=\"uri\">https://www.palain.com/?page_id=354</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health, Medicine, Exercise, Diet',0,0,1),
(2675,'2018-11-02','YouTube Playlists',767,'How to solve a problem with following YouTube channels','<p>I am subscribed to a number of YouTube channels, and I found a need to be able to watch all of the videos in order for certain channels. This describes how to do it.</p>\r\n<ul>\r\n<li><a href=\"https://chrome.google.com/webstore/detail/iridium-for-youtube/gbjmgndncjkjfcnpfhgidhbgokofegbl?hl=en\" class=\"uri\">https://chrome.google.com/webstore/detail/iridium-for-youtube/gbjmgndncjkjfcnpfhgidhbgokofegbl?hl=en</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=372\" class=\"uri\">https://www.palain.com/?page_id=372</a></li>\r\n</ul>\r\n',198,0,0,'CC-BY-SA','YouTube, Channels, Playlists',0,0,1),
(2685,'2018-11-16','Scientific and Medical Reports',854,'We need to be careful about evaluating news reports about medical studies','<p>We get bombarded with breathless news stories about medical breakthroughs that may not be as reliable as they are presented. This begins our look at what is reliable and what you need to watch out for.</p>\r\n<ul>\r\n<li><a href=\"https://journalistsresource.org/studies/society/news-media/health-research-misinformation-tips\" class=\"uri\">https://journalistsresource.org/studies/society/news-media/health-research-misinformation-tips</a></li>\r\n<li><a href=\"https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0196346\" class=\"uri\">https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0196346</a></li>\r\n<li><a href=\"https://journals.plos.org/\" class=\"uri\">https://journals.plos.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ArXiv\" class=\"uri\">https://en.wikipedia.org/wiki/ArXiv</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=356\" class=\"uri\">https://www.palain.com/?page_id=356</a></li>\r\n</ul>',198,100,0,'CC-BY-SA','Health, Medicine, Medical Studies, News Reports',0,0,1),
(2695,'2018-11-30','Problems with Studies',798,'Some principles for evaluating medical studies','<p>All medical studies are not alike. Some are of higher quality than others, and the conclusions they reach need to be evaluated based on some principles of good research. Here we take a look at some warning signs of bad or unreliable studies.</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Replication_crisis\" class=\"uri\">https://en.wikipedia.org/wiki/Replication_crisis</a></li>\r\n<li><a href=\"https://www.wired.com/story/social-science-reproducibility\" class=\"uri\">https://www.wired.com/story/social-science-reproducibility</a></li>\r\n<li><a href=\"https://www.sciencemag.org/news/2017/01/rigorous-replication-effort-succeeds-just-two-five-cancer-papers\" class=\"uri\">https://www.sciencemag.org/news/2017/01/rigorous-replication-effort-succeeds-just-two-five-cancer-papers</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Andrew_Wakefield\" class=\"uri\">https://en.wikipedia.org/wiki/Andrew_Wakefield</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Hwang_Woo-suk#Controversies\" class=\"uri\">https://en.wikipedia.org/wiki/Hwang_Woo-suk#Controversies</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Yoshiki_Sasai\" class=\"uri\">https://en.wikipedia.org/wiki/Yoshiki_Sasai</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Data_dredging\" class=\"uri\">https://en.wikipedia.org/wiki/Data_dredging</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=Gx0fAjNHb1M\" class=\"uri\">https://www.youtube.com/watch?v=Gx0fAjNHb1M</a></li>\r\n<li><a href=\"https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1002106\" class=\"uri\">https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1002106</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=358\" class=\"uri\">https://www.palain.com/?page_id=358</a></li>\r\n</ul>',198,100,0,'CC-BY-SA','Health, Medicine, Medical Studies, Evaluating Studies',0,0,1),
(2705,'2018-12-14','Evidence-based Medicine',1013,'Medicine should be based on objective scientific evidence','<p>Basing medical care and treatment on the scientific evidence should be the norm, but frequently it is not. Doctors may treat based on how they have always done it, or how other doctors do it (i.e. best practices), but there is a movement now to reorient medicine to follow the best scientific guidelines.</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Evidence-based_medicine\" class=\"uri\">https://en.wikipedia.org/wiki/Evidence-based_medicine</a></li>\r\n<li><a href=\"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3789163/\" class=\"uri\">https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3789163/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/N_ray\" class=\"uri\">https://en.wikipedia.org/wiki/N_ray</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=360\" class=\"uri\">https://www.palain.com/?page_id=360</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health, Medicine, Evidence, Science',0,0,1),
(2669,'2018-10-25','Additional ancillary Bash tips - 12',1702,'Making decisions in Bash (part 4)','<h1 id=\"additional-ancillary-bash-tips---12\">Additional ancillary Bash tips - 12</h1>\r\n<h2 id=\"making-decisions-in-bash\">Making decisions in Bash</h2>\r\n<p>This is the twelfth episode in the <em>Bash Tips</em> sub-series. It is the fourth of a group of shows about making decisions in Bash.</p>\r\n<p>In the last three episodes we saw the types of test Bash provides, and we looked briefly at some of the commands that use these tests. We looked at conditional expressions and all of the operators Bash provides to do this. We concentrated particularly on string comparisons which use <em>glob</em> and <em>extended glob</em> patterns.</p>\r\n<p>Now we want to look at the other form of string comparison, using <em>regular expressions</em>.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2669/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs\">“Bash Conditional Constructs”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bash-Conditional-Expressions\">“Bash Conditional Expressions”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“Bourne Shell Builtins”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching\">“Bash Pattern Matching”</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html\">“<em>POSIX Shell Command Language</em>”</a> - documentation of all of the POSIX features mentioned in this series.</p></li>\r\n<li><a href=\"https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04\">“Extended Regular Expressions”</a></li>\r\n<li><p><a href=\"https://tldp.org/LDP/abs/html/x17129.html\">“A Brief Introduction to Regular Expressions”</a></p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n</ol></li>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2669/bash12_ex1.sh\">bash12_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2669/bash12_ex2.sh\">bash12_ex2.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2669/bash12_ex3.sh\">bash12_ex3.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2669/bash12_ex4.sh\">bash12_ex4.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2669/bash12_ex5.sh\">bash12_ex5.sh</a></li>\r\n</ul></li>\r\n</ul>',225,42,1,'CC-BY-SA','Bash,test,regular expression',0,0,1),
(2657,'2018-10-09','Why we are all going to shit in 30 years due to computers',1555,'Some thoughts about the increasing impact of automation','<p>Now, this is not a doom and gloom lecture.</p>\r\n<p>Actually it is a talk about what is going to happen in the next 30 years.</p>\r\n<p>It is a talk about what is called “postcapitalism”.</p>\r\n<p>It is a talk about how almost all jobs are going to disappear due to automation. But also how we are going to think about this this and come up with solutions.</p>\r\n<p>It talks about the three big challenges we need to face.</p>\r\n<p>And yes, this involves you as well!</p>\r\n',369,0,1,'CC-BY-SA','prediction,post-capitalism',0,0,1),
(2658,'2018-10-10','Questions on podcast production',2784,'Al asks Dave questions about podcast production','<h1>HPR Chat with Al</h1>\r\n<p>Al asks Dave a number of questions about podcast audio recording and post-production.</p>\r\n<h2>Al is thinking of doing National Podcast Post Month in November</h2>\r\n<p>National Podcast Post Month (or <a href=\"https://napodpomo.org/\">NaPodPoMo</a>) is a challenge in a similar vein to National Novel Writing Month (or <a href=\"https://nanowrimo.org/\">NaNoWriMo</a>) in which participants are challenged to produce and publish a piece of audio as a podcast, every day for the month of November.</p>\r\n<h2>Bad podcast audio</h2>\r\n<p>Audio quality is as important as the content that\'s being presented. Bad audio is going to be what causes new podcasters the most damage in subscriber numbers. An example of good audio is the true crime podcast, <a href=\"https://oneeyeopen.podbean.com/\">One Eye Open</a>, which Dave started listening to a couple of weeks ago. He also picked up a couple of other true crime podcasts as a result of listening to One Eye Open where the audio quality is so bad, that they can\'t be heard!</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Loudness\">Loudness</a> is a measurement of how loud something is perceived to be. Levelling is a process of ensuring that individual tracks in a podcasts are an an equivalent level, but also the podcast overall is at an equivalent level to other podcasts that have been levelled the same way.</p>\r\n<h2>Our setups</h2>\r\n<p>Al and Dave have a very similar microphone setup.</p>\r\n<ul>\r\n<li><a href=\"https://www.amazon.co.uk/Samson-SAQ2U-Microphone-Recording-Pack/dp/B001R747SG/\">Samson Q2U</a> - XLR and USB capable microphone</li>\r\n<li>Pop filters and wind screens</li>\r\n<li>Boom arm</li>\r\n<li>Shock mount</li>\r\n</ul>\r\n<h2>What is a compressor</h2>\r\n<p>The non-technical definition is that it brings up the quiet bits and brings down the louder bits so that your voice has less of a variance if you shout or whisper.</p>\r\n<h2>Different microphone types</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Microphone#Cardioid\">Cardioid</a> - focuses on sounds coming from in front of the mic</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Microphone#Omnidirectional\">Omnidirectional</a> - can theoretically pick up sound from all directions</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Microphone#Dynamic_microphone\">Dynamic</a> - well suited for vocal use</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Microphone#Condenser_microphone\">Condenser</a> - overall better quality sound than dynamic, but more susceptible to background noise, so requires a really quiet studio environment</li>\r\n</ul>\r\n<h2>Your level</h2>\r\n<p>You can measure your own level in <a href=\"https://www.audacityteam.org/\">Audacity</a> - make sure you stay in the green! If you stray into yellow or even red, either lower your level or move slightly away from the mic.</p>\r\n<h2>Other people\'s levels</h2>\r\n<p>Concentrate on your own, get others to manage theirs. If you\'re recording multiple tracks, it <em>can</em> be managed in post-production, but once it\'s been merged into a single track it\'s virtually impossible.</p>\r\n<h2>File formats</h2>\r\n<ul>\r\n<li>FLAC/ALAC - <a href=\"https://en.wikipedia.org/wiki/Lossless_compression#Audio\">lossless</a> formats</li>\r\n<li>MP3/OGG/M4A - <a href=\"https://en.wikipedia.org/wiki/Data_compression#Audio\">lossy</a> formats</li>\r\n</ul>\r\n<p>Record in a lossless format, and do your edits and post-production in a lossless format. Only <a href=\"https://en.wikipedia.org/wiki/Transcoding\">transcode</a> to a lossy format once you\'re ready to publish your final file.</p>\r\n<h2>Monitoring</h2>\r\n<p>If you\'re recording yourself, and you don\'t want to hear yourself through headphones, take the headphones off.</p>\r\n<p>If you\'re recording with someone else who is not in the same room, you are better off hearing yourself through your headphones at the same level as the person you\'re talking to.</p>\r\n<h2>Post-production</h2>\r\n<ul>\r\n<li>Use <a href=\"https://www.audacityteam.org/\">Audacity</a> to:\r\n<ul>\r\n<li>align the tracks so that everyone is in the right place</li>\r\n<li>convert coughs, sneezes, burps, keyboard sounds, mouse clicks, etc to silence</li>\r\n</ul></li>\r\n<li>Use <a href=\"https://auphonic.com\">Auphonic</a> to:\r\n<ul>\r\n<li>level the individual tracks so that everyone sounds as &quot;<a href=\"https://en.wikipedia.org/wiki/Loudness\">loud</a>&quot; as anyone else</li>\r\n<li>merge the individual tracks into a single output file (a Multitrack production)</li>\r\n</ul></li>\r\n<li>Dave also gives a specific use case for adding music into the final mix.</li>\r\n</ul>\r\n<h2>NaPodPoMo revisited</h2>\r\n<p>This will be Al\'s first attempt at NaPodPoMo, but not for Dave. Dave wants to make sure that he plans for this year, so he doesn\'t run out of material on day 7!!</p>\r\n<p>Dave will interview another NaPodPoMo participant at least once a week during November. Looks like Al will be one of them!</p>\r\n<ul>\r\n<li>Al\'s NaPodPoMo <a href=\"https://al.christman.co.uk/\">website</a> and <a href=\"https://al.christman.co.uk/feed/mp3/\">RSS feed</a></li>\r\n<li>Dave\'s NaPodPoMo <a href=\"https://thelovebug.org/napodpomo-2018/\">website</a> and <a href=\"https://thelovebug.org/feed/podcast/napodpomo-2018\">RSS feed</a></li>\r\n</ul>\r\n<h2>Dave\'s final thought</h2>\r\n<p>Podcasting isn\'t rocket science. You don\'t need lots of expensive equipment to produce a podcast. You just need something to record into (e.g. a mobile phone or portable recorder) and somewhere to host it. You can host on your own website or on one of a number of free services, like <a href=\"https://anchor.fm\">Anchor</a>, <a href=\"https://audioboom.com/\">AudioBoom</a>, or indeed <a href=\"https://hackerpublicradio.org\">Hacker Public Radio</a>!</p>\r\n<h2>The obligatory podcast plug</h2>\r\n<ul>\r\n<li><a href=\"https://www.adminadminpodcast.co.uk\">Admin Admin Podcast</a></li>\r\n<li><a href=\"https://thebugcast.org\">The Bugcast</a></li>\r\n</ul>\r\n<h2>Errata</h2>\r\n<ul>\r\n<li>Dave originally said that the pickup pattern that picks up 360 degrees was &quot;unidirectional&quot; - it should have been &quot;omnidirectional&quot; and has been fixed in the edit, but it sounds like it was added in afterwards... which, of course, it was!!</li>\r\n</ul>\r\n',290,0,0,'CC-BY-SA','Admin Admin Podcast',0,0,1),
(2661,'2018-10-15','My Music Production Setup',679,'ClaudioM shares his music production setup.','<h2 id=\"previous-music-production-setup\">Previous Music Production Setup</h2>\r\n<ul>\r\n<li>Master Tracks Pro: <a href=\"https://en.wikipedia.org/wiki/Master_Tracks_Pro\" class=\"uri\">https://en.wikipedia.org/wiki/Master_Tracks_Pro</a></li>\r\n<li>Kawai K4 synthesizer: <a href=\"https://www.polynominal.com/site/studio/gear/synth/kawai-k4/kawai-k4.html\" class=\"uri\">https://www.polynominal.com/site/studio/gear/synth/kawai-k4/kawai-k4.html</a></li>\r\n<li>Apple GarageBand: <a href=\"https://en.wikipedia.org/wiki/GarageBand\" class=\"uri\">https://en.wikipedia.org/wiki/GarageBand</a></li>\r\n</ul>\r\n<h2 id=\"current-music-production-setup\">Current Music Production Setup</h2>\r\n<ul>\r\n<li>Qtractor: <a href=\"https://en.wikipedia.org/wiki/Qtractor\" class=\"uri\">https://en.wikipedia.org/wiki/Qtractor</a></li>\r\n<li>JACK: <a href=\"https://en.wikipedia.org/wiki/JACK_Audio_Connection_Kit\" class=\"uri\">https://en.wikipedia.org/wiki/JACK_Audio_Connection_Kit</a></li>\r\n<li>QJackCtl: <a href=\"https://en.wikipedia.org/wiki/Qjackctl\" class=\"uri\">https://en.wikipedia.org/wiki/Qjackctl</a></li>\r\n<li>Hydrogen Drum Machine: <a href=\"https://en.wikipedia.org/wiki/Hydrogen_(software)\" class=\"uri\">https://en.wikipedia.org/wiki/Hydrogen_(software)</a></li>\r\n<li>Yoshimi: <a href=\"https://en.wikipedia.org/wiki/Yoshimi_(synthesizer)\" class=\"uri\">https://en.wikipedia.org/wiki/Yoshimi_(synthesizer)</a></li>\r\n<li>Amsynth: <a href=\"https://en.wikipedia.org/wiki/Amsynth\" class=\"uri\">https://en.wikipedia.org/wiki/Amsynth</a></li>\r\n<li>Fluidsynth: <a href=\"https://en.wikipedia.org/wiki/FluidSynth\" class=\"uri\">https://en.wikipedia.org/wiki/FluidSynth</a></li>\r\n<li>WhySynth: <a href=\"https://linuxsynths.com/WhySynthBanksDemos/whysynth.html\" class=\"uri\">https://linuxsynths.com/WhySynthBanksDemos/whysynth.html</a></li>\r\n<li>QMidiArp: <a href=\"https://qmidiarp.sourceforge.net/\" class=\"uri\">https://qmidiarp.sourceforge.net/</a></li>\r\n<li>Hexter: <a href=\"https://linuxsynths.com/HexterPatchesDemos/hexter.html\" class=\"uri\">https://linuxsynths.com/HexterPatchesDemos/hexter.html</a></li>\r\n<li>Calf Plugins: <a href=\"https://en.wikipedia.org/wiki/Calf_Studio_Gear\" class=\"uri\">https://en.wikipedia.org/wiki/Calf_Studio_Gear</a></li>\r\n<li>Audacity: <a href=\"https://en.wikipedia.org/wiki/Audacity_(audio_editor)\" class=\"uri\">https://en.wikipedia.org/wiki/Audacity_(audio_editor)</a></li>\r\n</ul>\r\n<h2 id=\"notable-mentions\">Notable Mentions</h2>\r\n<ul>\r\n<li>LMMS: <a href=\"https://en.wikipedia.org/wiki/LMMS\" class=\"uri\">https://en.wikipedia.org/wiki/LMMS</a></li>\r\n</ul>\r\n<h2 id=\"linux-oriented-links\">Linux-oriented Links</h2>\r\n<ul>\r\n<li>Debian Ports page: <a href=\"https://www.ports.debian.org\" class=\"uri\">https://www.ports.debian.org</a></li>\r\n<li>Debian Ports PowerPC64: <a href=\"https://wiki.debian.org/PPC64\" class=\"uri\">https://wiki.debian.org/PPC64</a></li>\r\n<li>Fedora: <a href=\"https://getfedora.org\" class=\"uri\">https://getfedora.org</a></li>\r\n</ul>\r\n',152,0,0,'CC-BY-SA','music, multimedia, audio, linux, musicproduction, foss, floss',0,0,1),
(2679,'2018-11-08','Extra ancillary Bash tips - 13',2202,'Making decisions in Bash (part 5)','<h1 id=\"extra-ancillary-bash-tips---13\">Extra ancillary Bash tips - 13</h1>\r\n<h2 id=\"making-decisions-in-bash\">Making decisions in Bash</h2>\r\n<p>This is the thirteenth episode in the <em>Bash Tips</em> sub-series. It is the fifth and final of a group of shows about making decisions in Bash.</p>\r\n<p>In the last four episodes we saw the types of test Bash provides, and we looked briefly at some of the commands that use these tests. We looked at conditional expressions and all of the operators Bash provides to do this. We concentrated particularly on string comparisons which use <em>glob</em> and <em>extended glob</em> patterns then we devoted an episode to Bash <em>regular expressions</em>.</p>\r\n<p>Now we want to look at the final topic within regular expressions, the use of <em>capture groups</em>.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2679/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs\">“Bash Conditional Constructs”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bash-Conditional-Expressions\">“Bash Conditional Expressions”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“Bourne Shell Builtins”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin\">“The <code>set</code> Builtin”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching\">“Bash Pattern Matching”</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html\">“<em>POSIX Shell Command Language</em>”</a> - documentation of all of the POSIX features mentioned in this series.</p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n</ol></li>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2679/bash13_ex1.sh\">bash13_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2679/bash13_ex2.sh\">bash13_ex2.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2679/bash13_ex3.sh\">bash13_ex3.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2679/bash13_ex4.sh\">bash13_ex4.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2679/bash13_ex4.txt\">bash13_ex4.txt</a></li>\r\n</ul></li>\r\n</ul>',225,42,1,'CC-BY-SA','Bash,extended test,regular expression,capture group,BASH_REMATCH,back reference',0,0,1),
(2690,'2018-11-23','A chat about the HiveMQ Broker',425,'Ken talks with Florian Raschbichler and Anja Helmbrecht-Schaar about HiveMQ','<p>\r\nI had the opportunity to chat with Florian Raschbichler and Anja Helmbrecht-Schaar from the company <a href=\"https://www.dc-square.de/en/\">dc-square GmbH</a>, who are developers of the <a href=\"https://www.hivemq.com/\">HiveMQ</a> Broker.\r\n</p>\r\n<p>\r\nIf you are new to <a href=\"https://en.wikipedia.org/wiki/MQTT\">MQTT</a> they have <a href=\"https://www.hivemq.com/blog/mqtt-essentials/page/2/\">the ultimate kickstart for MQTT beginners</a>. They also maintain an <a href=\"https://www.hivemq.com/mqtt-client-library-encyclopedia\">MQTT Client Library Encyclopedia</a>\r\n</p>\r\n\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://www.hivemq.com/\">https://www.hivemq.com/</a></li>\r\n<li><a href=\"https://www.dc-square.de/en/\">https://www.dc-square.de/en/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Comparison_of_MQTT_Implementations\">https://en.wikipedia.org/wiki/Comparison_of_MQTT_Implementations</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/MQTT\">https://en.wikipedia.org/wiki/MQTT</a></li>\r\n<li><a href=\"https://www.hivemq.com/blog/mqtt-essentials/page/2/\">https://www.hivemq.com/blog/mqtt-essentials/page/2/</a></li>\r\n<li><a href=\"https://github.com/hivemq\">https://github.com/hivemq</a></li>\r\n<li><a href=\"https://www.hivemq.com/mqtt-client-library-encyclopedia\">https://www.hivemq.com/mqtt-client-library-encyclopedia</a></li>\r\n</ul>',30,78,0,'CC-BY-SA','MQTT, HiveMQ, dc-square GmbH',0,0,1),
(2662,'2018-10-16','Repairing a motherboard',196,'I repair a motherboard and get a old tower working again.','<h2 id=\"continued-from-hpr2549-dvd-ripping-using-old-hardware\">Continued from hpr2549 :: DVD ripping using old hardware</h2>\r\n<p>Acquired new user tower, replaced old tower with blown caps<br />\r\nDell Pentium 4 CPU 3.20GHz, 2Gb RAM</p>\r\n<pre><code>sudo shred -n 5 -vz /dev/sdX\r\n\r\n  -n, --iterations=N \r\n  -v, --verbose\r\n    show progress \r\n  -z, --zero\r\n    add a final overwrite with zeros to hide shredding</code></pre>\r\n<p>Used same Slackware USB from old tower</p>\r\n<p>Used soldering iron from Amazon - Weller WLC100 40-Watt Soldering Station<br />\r\n<a href=\"https://www.amazon.com/gp/product/B000AS28UC/ref=oh_aui_detailpage_o02_s00?ie=UTF8&amp;psc=1\" class=\"uri\">https://www.amazon.com/gp/product/B000AS28UC/ref=oh_aui_detailpage_o02_s00?ie=UTF8&amp;psc=1</a></p>\r\n<p><a href=\"https://photos.app.goo.gl/VpRxvZLBy49PCo5DA\" class=\"uri\">https://photos.app.goo.gl/VpRxvZLBy49PCo5DA</a></p>\r\n',318,0,1,'CC-BY-SA','hardware, circuit board, repair',0,0,1),
(2663,'2018-10-17','Short review on a 2.5 inch SSD/HDD caddy',202,'Tony reviews a Short review on a 2.5 inch SSD/HDD caddy from ebay','<p>Well Ken made another call for shows and as my recent interview series has come to an end by the time you listen to this here is a short review of a USB3 2.5inch HDD/SSD caddy I got from E-bay a few weeks ago.</p>\r\n<p>As many of you who have listened to my previous ramblings know I frequent a local Computer auction and recently they have had some cheap 128Gig SSD’s for sale and I managed to pick several up at a good price. After using some to upgrade some desktop PC’s to SSD I had a couple of these spare and as I have USB3 on my main laptop thought it would be good to be able to use one or two of these as portable storage or even for boot drives to test out odd Linux distro or 2.</p>\r\n<p>So I purchased a caddy off that font of all things techie E-bay for £5.50, link here:<br />\r\n<a href=\"https://www.ebay.co.uk/itm/USB-3-0-to-SATA-Hard-Drive-Enclosure-Caddy-Case-For-2-5-Inch-HDD-SSD-External/282930148654?ssPageName=STRK%3AMEBIDX%3AIT&amp;_trksid=p2057872.m2749.l2648\">https://www.ebay.co.uk/itm/USB-3-0-to-SATA-Hard-Drive-Enclosure-Caddy-Case-For-2-5-Inch-HDD-SSD-External/282930148654?ssPageName=STRK%3AMEBIDX%3AIT&amp;_trksid=p2057872.m2749.l2648</a></p>\r\n<p>So after it arrived I plugged in one of the drives and tested it out. The first thing to notice is that SSD’s being 7mm in depth flop about a bit in the case but this is easily resolved by a bit of card under the drive to help it fit snug in the case and it does mean that the case will support the larger 9mm 2.5inch spinners if needed. I’ve not tested a larger older spinner but I suspect they will not fit as 9mm ones are very snug in the case.</p>\r\n<p>Anyway the drive was detected by the PC/Laptop and works flawlessly and as it is so quick to swap drives in the caddy means I can carry large data files and my music and video library when on the move with the advantage that it is less likely to be damaged if accidentally dropped or knocked off a surface, which is quite likely with a portable spinner HDD.</p>\r\n<p>I am very happy with this purchase and it has already become a regular part of my travelling tool kit/laptop bag.</p>\r\n',338,23,0,'CC-BY-SA','Computers, Tool Bag',0,0,1),
(2668,'2018-10-24','Explaining the controls on my Amateur HF Radio Part 3',1090,'In this episode I cover the Main / sub displays meter memory and band keys of the TS940S.','<ul>\r\n<li><p>Main display is a fluorescent display<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Vacuum_fluorescent_display\" class=\"uri\">https://en.wikipedia.org/wiki/Vacuum_fluorescent_display</a></p></li>\r\n<li><p>Hertz and Kilohertz<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Hertz\" class=\"uri\">https://en.wikipedia.org/wiki/Hertz</a></p></li>\r\n<li><p>Example of an old type tuning dial with moving needle display.<br />\r\n<img src=\"https://i.ytimg.com/vi/YBCuNkdP4M0/maxresdefault.jpg\" alt=\"https://i.ytimg.com/vi/YBCuNkdP4M0/maxresdefault.jpg\" /></p></li>\r\n<li><p>Example of AVO meter<br />\r\n<img src=\"https://www.richardsradios.co.uk/AVO/AVO8mk2.jpg\" alt=\"https://www.richardsradios.co.uk/AVO/AVO8mk2.jpg\" /></p></li>\r\n<li><p>Standing Wave Ration Scale<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Standing_wave_ratio\" class=\"uri\">https://en.wikipedia.org/wiki/Standing_wave_ratio</a></p></li>\r\n<li><p>Explanation of Auto Limiter Control (ALC)<br />\r\n<a href=\"https://www.robkalmeijer.nl/techniek/electronica/radiotechniek/hambladen/radcom/1995/07/page61/index.html\" class=\"uri\">https://www.robkalmeijer.nl/techniek/electronica/radiotechniek/hambladen/radcom/1995/07/page61/index.html</a></p></li>\r\n</ul>\r\n<h3 id=\"sub-display\">Sub Display</h3>\r\n<p>Used either to display the time or in graph mode gives a representation of the receiver bandwidth setting when using CW or SSB.</p>\r\n<h3 id=\"memories-and-band-keys\">Memories and band keys</h3>\r\n<p>Ten memory and band keys to switch either between ten stored memories or to switch between the ten pre-set amateur HF bands when in VFO mode. Up / Down step keys jumps in 1Mhz step.</p>\r\n<h3 id=\"antenna-tuner\">Antenna Tuner</h3>\r\n<p>I tried and failed to find a simple explanation of an antenna tuner it’s a complicated topic, I can at least have a go at explaining how to use a simple manual antenna tuner, hope this makes some sense.</p>\r\n<p>A typical manual Antenna Tuner has two rotatable knobs both interact with each other. The Tuner is used to match a badly tuned antenna to your transmitter. The Tuner is placed in-between the transmitter and antenna. To use it you typically hold down the transmit key while looking at the VSWR meter and rotating one knob at a time in turn repeating this operation until the minimum VSWR is achieved.</p>\r\n<p>If you really want to dive into more detail feel free to follow this link in wikipedia. <a href=\"https://en.wikipedia.org/wiki/Antenna_tuner\" class=\"uri\">https://en.wikipedia.org/wiki/Antenna_tuner</a></p>\r\n',201,43,1,'CC-BY-SA','HF, Ham, Amateur Radio',0,0,1),
(2674,'2018-11-01','Raspberry pi3 open media server',616,'JWP emails in this episode','<ul>\r\n<li>Use Gparted for the SD card</li>\r\n<li>Use <a href=\"https://etcher.io/\">Etcher</a> from Resin.Io</li>\r\n<li>Use the normal external hard drive file os.</li>\r\n</ul>\r\n',129,0,1,'CC-BY-SA','Raspberry Pi,open media,Etcher',0,0,1),
(2664,'2018-10-18','My git workflow',495,'In this episode I talk about the workflow I use to contribute to opensource project using git','<h2 id=\"my-git-workflow\">My git workflow</h2>\r\n<p>In this episode of HPR I present the workflow I use to contribute to opensource projects using git. I have no idea if this workflow is something that is commonly used, but it is working for me, so I thought I’d share it with the HPR community.</p>\r\n<p>The first thing I do is fork the project I want to contribute to. This is done on github most of the time, although this workflow can work on gitlab, bitbucket, or even some self hosted git platform.</p>\r\n<p>Once the project is forked, I clone it on my machine :</p>\r\n<pre><code>$ git clone git://server/path/to/myproject.git</code></pre>\r\n<p>Git automatically names my remote project <code>origin</code>.</p>\r\n<p>Then I add a reference to the original project :</p>\r\n<pre><code>$ git remote add upstream https://server/path/to/originalproject.git</code></pre>\r\n<p>Now my local repository references my fork under the name <code>origin</code> and the original project under the name <code>upstream</code>.</p>\r\n<p>In this workflow, I never work on the master branch. So, when I need to fix a bug for example, I create a new branch :</p>\r\n<pre><code>$ git checkout -b bugfix</code></pre>\r\n<p>I can then make changes, test my code, make sure everything is ok, stage and commit my changes :</p>\r\n<pre><code>$ git add .\r\n$ git commit -m &quot;commit message&quot;</code></pre>\r\n<p>Now I need to push this local branch to my repository on github :</p>\r\n<pre><code>$ git push -u origin bugfix</code></pre>\r\n<p>Since I forked the original project, github knows that <code>origin</code> and <code>upstream</code> are linked. If there are no conflicts, github will show me a big green button to create a pull request. Once the pull request is created, I just have to wait for the maintainer to merge it in <code>upstream</code>’s master branch. Then, I need to sync both my local copy and my fork on github with the original project. In order to do that, on my local copy, I checkout my master branch, fetch <code>upstream</code>’s changes, and merge them :</p>\r\n<pre><code>$ git checkout master\r\n$ git fetch upstream\r\n$ git merge upstream/master</code></pre>\r\n<p>Now my local master branch is ahead of <code>origin</code>’s master branch, so I push those changes to github :</p>\r\n<pre><code>$ git push</code></pre>\r\n<p>I don’t need the <code>bugfix</code> branches (the local one and the github one), so I can delete those :</p>\r\n<pre><code>$ git branch -d bugfix\r\n$ git push origin -d bugfix</code></pre>\r\n<p>And now, my local repository is even with both <code>origin</code> and <code>upstream</code>, and I can start again.</p>\r\n<p>To summarize, here’s the complete workflow :</p>\r\n<pre><code>$ git checkout -b myawesomefeature\r\n$ git add .\r\n$ git commit -m &quot;Awesome commit message&quot;\r\n$ git push -u origin myawesomefeature</code></pre>\r\n<p>Create a pull request, wait for the maintainer to merge it.</p>\r\n<pre><code>$ git checkout master\r\n$ git fetch upstream\r\n$ git merge upstream/master\r\n$ git push\r\n$ git branch -d myawesomefeature\r\n$ git push origin -d myawesomefeature</code></pre>\r\n',370,104,0,'CC-0','git,github,workflow',0,0,1),
(2689,'2018-11-22','Bash Tips - 14',1688,'More about loops - the \'for\' loop, \'break\' and \'continue\'','<h1 id=\"bash-tips---14\">Bash Tips - 14 <small><small>(Some auxiliary Bash tips)</small></small></h1>\r\n<h2 id=\"more-about-loops\">More about loops</h2>\r\n<p>This is the fourteenth episode covering useful tips about using Bash. Episodes 9-13 covered <em>Making Decisions in Bash</em> and in these episodes we looked at <code>while</code> and <code>until</code> loops, but not <code>for</code> loops. This episode is making good this deficiency, and is also looking at <code>break</code> and <code>continue</code> which are very useful when using loops.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2689/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Looping-Constructs\">“Bash Looping Constructs”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Shell-Arithmetic\">“Bash Shell Arithmetic”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“Bourne Shell Builtins”</a></li>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Brace-Expansion\">“Bash Brace Expansion”</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 “<em>Extra ancillary Bash tips - 13</em>”</a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2689/bash14_ex1.sh\">bash14_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2689/bash14_ex2.sh\">bash14_ex2.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2689/bash14_ex3.sh\">bash14_ex3.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2689/bash14_ex4.sh\">bash14_ex4.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2689/bash14_ex5.sh\">bash14_ex5.sh</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,loop,for,break,continue',0,0,1),
(2666,'2018-10-22','Slackware Post-Install',1826,'A quick and dirty guide to getting Slack up and running after it\'s installed.','<p>This episode started out as just some thoughts on why I decided to move back to Slackware after having been away from it for a few years, and wound up being a short set of notes on the post install configuration of Slackware 14.2</p>\r\n<p>This is by no means a definitive or exhaustive in its scope. It’s just a few thoughts and tips on the post-install process that might not be completely clear to a new user.</p>\r\n<ul>\r\n<li>Website - <a href=\"https://www.slackware.com/\" class=\"uri\">https://www.slackware.com/</a></li>\r\n<li>Slackware Install Guide - <a href=\"https://docs.slackware.com/slackware:install\" class=\"uri\">https://docs.slackware.com/slackware:install</a></li>\r\n<li>Slackware Post Install Beginner’s Guide - <a href=\"https://docs.slackware.com/slackware:beginners_guide\" class=\"uri\">https://docs.slackware.com/slackware:beginners_guide</a></li>\r\n<li>Wikipedia Slackware Page - <a href=\"https://en.wikipedia.org/wiki/Slackware\" class=\"uri\">https://en.wikipedia.org/wiki/Slackware</a></li>\r\n</ul>\r\n',325,0,1,'CC-BY-SA','Slackware, Slackware post-install',0,0,1),
(2671,'2018-10-29','Algae farming with Desearcher',2379,'Desearcher edumacates us all on the benefits of algae farming.','<p>Apologies for the sound quality. We recorded in a small apartment with only one mic. :-</p>\r\n<ul>\r\n<li><p>Wikipedia Articles - <a href=\"https://en.m.wikipedia.org/wiki/Nannochloropsis\" class=\"uri\">https://en.m.wikipedia.org/wiki/Nannochloropsis</a><br />\r\n<a href=\"https://en.m.wikipedia.org/wiki/Phytoplankton\" class=\"uri\">https://en.m.wikipedia.org/wiki/Phytoplankton</a></p></li>\r\n<li><p>Amazon - <a href=\"https://www.amazon.com/nannochloropsis/s?page=1&amp;rh=i%3Aaps%2Ck%3Anannochloropsis\">https://www.amazon.com/nannochloropsis/s?page=1&amp;rh=i%3Aaps%2Ck%3Anannochloropsis</a></p></li>\r\n<li><p>Algae Research Supply - <a href=\"https://algaeresearchsupply.com/pages/f-2-media\" class=\"uri\">https://algaeresearchsupply.com/pages/f-2-media</a></p></li>\r\n<li><p>Blogs - <a href=\"https://www.nannochloropsis.org/blog/\" class=\"uri\">https://www.nannochloropsis.org/blog/</a></p></li>\r\n<li><p>Album of Desearcher’s setup - <a href=\"https://imgur.com/a/Cwqd7m9\" class=\"uri\">https://imgur.com/a/Cwqd7m9</a></p></li>\r\n</ul>\r\n',325,0,1,'CC-BY-SA','Phytoplankton,algae,Nannochloropsis',0,0,1),
(2678,'2018-11-07','Explaining the controls on my Amateur HF Radio Part 4',984,'In this episode I cover the first four Receiver section controls of the TS940S','<h2 id=\"the-three-dual-function-controls-covered-are\">The three dual function controls covered are</h2>\r\n<h3 id=\"squelchnotch\">Squelch/Notch</h3>\r\n<ul>\r\n<li>(1A) Squelch <a href=\"https://en.wikipedia.org/wiki/Squelch\" class=\"uri\">https://en.wikipedia.org/wiki/Squelch</a></li>\r\n<li>(1B) Notch filter <a href=\"https://en.wikipedia.org/wiki/Band-stop_filter\" class=\"uri\">https://en.wikipedia.org/wiki/Band-stop_filter</a></li>\r\n</ul>\r\n<h3 id=\"pitchaf-tune\">Pitch/AF Tune</h3>\r\n<ul>\r\n<li><p>(2A) Pitch (From the Kenwood manual)<br />\r\nThe CW PITCH control is provided so that you may adjust the pitch or tone of the incoming CW signal so that the tone is pleasing to you. The TS-940S accomplishes this without shifting the actual transmitter or receiver frequency, by shifting the 100kHz IF frequency, just prior to Product detection.</p></li>\r\n<li><p>(2B) AF Tune (From the Kenwood manual)<br />\r\nThe AF TUNE circuit is just the opposite of the NOTCH circuit. With this control, it is possible to accentuate the desired signal by providing additional rejection of noise and interfering signals whose pitch (tone) falls outside the audio passband. Turn the AF TUNE switch ON and adjust the AF TUNE control to peak the desired signal.</p></li>\r\n</ul>\r\n<h3 id=\"ritxit\">RIT/XIT</h3>\r\n<ul>\r\n<li><p>(3A) RIT – Receiver incremental Tune<br />\r\nThe RIT control allows shifting the receive frequency without effecting the transmit frequency</p></li>\r\n<li><p>(3B) XIT – Transmitter incremental Tune<br />\r\nThe XIT control allows shifting the transmit frequency without effecting the receive frequency</p></li>\r\n</ul>',201,43,1,'CC-BY-SA','HF, Ham, Amateur Radio',0,0,1),
(2667,'2018-10-23','Create PDF bookmarks with Pdftk',1313,'Basic intro to a few pdftk functions','<p>\r\nPdftk is a command that lets you manipulate PDFs outside of a GUI PDF creation tool.\r\nThere are several GUI tools you can use to create PDFs with valid bookmarks and other fancy features, but pdftk is often more convenient.\r\n</p>\r\n\r\n<p>\r\nExtract pages 1 through 2, and pages 5-21, and page 261 from a big PDF into a new PDF:\r\n</p>\r\n<pre><code>\r\n$ pdftk big.pdf cat 1-2 5-21 261 output small.pdf\r\n</code></pre>\r\n\r\n<p>\r\nExtract bookmarks from original PDF:\r\n</p>\r\n\r\n<pre><code>\r\n$ pdftk big.pdf dump_data output book.mark\r\n</code></pre>\r\n\r\n<p>\r\nHere is what a bookmark file looks like:\r\n</p>\r\n\r\n<pre><code>\r\nInfoBegin\r\nInfoKey: ModDate\r\nInfoValue: D:20181010181951-05\'00\'\r\nInfoBegin\r\nInfoKey: CreationDate\r\nInfoValue: D:20181010181934-05\'00\'\r\nInfoBegin\r\nInfoKey: Creator\r\nInfoValue: pdftk (Linux)\r\nInfoBegin\r\nInfoKey: Producer\r\nInfoValue: pdftk 2.02-x86_64\r\nPdfID0: d8deadbeeff34211ba60d80fda7611da\r\nPdfID1: 39186170c6134566884b79c0ffee7d59\r\nNumberOfPages: 261\r\nBookmarkBegin\r\nBookmarkTitle: Cover\r\nBookmarkLevel: 1\r\nBookmarkPageNumber: 1\r\nBookmarkBegin\r\nBookmarkTitle: Credits\r\nBookmarkLevel: 1\r\nBookmarkPageNumber: 2\r\nBookmarkBegin\r\nBookmarkTitle: Chapter One\r\nBookmarkLevel: 1\r\nBookmarkPageNumber: 3\r\nBookmarkBegin\r\nBookmarkTitle: Foo Section\r\nBookmarkLevel: 2\r\nBookmarkPageNumber: 5\r\nBookmarkBegin\r\nBookmarkTitle: Bar Baz\r\nBookmarkLevel: 3\r\nBookmarkPageNumber: 7\r\nBookmarkBegin\r\nBookmarkTitle: Back cover\r\nBookmarkLevel: 1\r\nBookmarkPageNumber: 19\r\n</code></pre>\r\n\r\n<p>\r\nApply the bookmark data back to the PDF:\r\n</p>\r\n\r\n<pre><code>\r\n$ pdftk small.pdf update_info book.mark output final.pdf\r\n</code></pre>\r\n\r\n',78,0,0,'CC-BY-SA','pdf',0,0,1),
(2670,'2018-10-26','Character Arcs In Storytelling',893,'Lostnbronx looks character arcs, and their role in storytelling.','<p>Characters are intrinsic to stories of all types, and they often have journeys, referred to as arcs. What, exactly is the character arc? Does everybody in a tale have one? Do they even need one? How do arcs affect the plot, and vice-versa? Lostnbronx shares some off-the-cuff thoughts about this often misunderstood aspect of storytelling.</p>\r\n',107,105,0,'CC-BY-SA','stories,storytelling,character arcs,lostnbronx',0,0,1),
(2672,'2018-10-30','Porteus',3477,'Installing Porteus and the cool things you can do with thumbdrive installation','<p><a href=\"https://porteus.org\" target=\"_blank\">Porteus</a> is a portable Live Linux distro, based on Slackware, intended for use on thumbdrives or optical media.  It is, more or less, the new <a href=\"https://hackerpublicradio.org/eps.php?id=0055\" target=\"_blank\">Slax</a>, now that Slax has switched to Debian.</p>\r\n\r\n<h2>Install</h2>\r\n\r\n<p>The official means of installation is to burn Porteus to disc, and then (optionally) install Porteus onto a thumbdrive from within Porteus. To install Porteus to a thumbdrive, you need a thumbdrive with an EXT4 partition. You can try other filesystems and partition schemes, but EXT4 definitely works well.</p>\r\n<p>\r\nFrom either Porteus or Slackware (you can try other distros, but results <em>will</em> vary), you can do a manual install, and here are the correct commands (as of this writing, the docs on porteus.org are not accurate). Assuming you have discovered, using <code>lsblk</code>, that your target device (the thumbdrive) is <code>/dev/sdx</code>:\r\n</p>\r\n\r\n<pre><code>$ sudo bash\r\n# mkdir -p /mnt/loop /mnt/drive\r\n# mount --options loop /path/to/Porteus*iso /mnt/loop\r\n# mount /dev/sdx1 /mnt/drive\r\n# rsync -av /mnt/loop/ /mnt/drive/\r\n# cd /mnt/drive/boot\r\n# chmod +x Porteus-installer-for-Linux.com\r\n# ./Porteus*com\r\n</code></pre>\r\n\r\n<p>\r\nAlternately, you can use Porteus from a virtual machine and install to a thumbdrive, as long as your virtualisation software redirects USB. I have used <a href=\"https://virt-manager.org/\" target=\"_blank\">virt-manager</a> running on Fedora successfully for this.\r\n</p>\r\n\r\n<p>The other alternative, of course, is to run Porteus off of an optical disc. That means your system is unwritable, so nothing you do is persistent across reboots, but you can save your work to a thumbdrive. I\'ve worked with Slax this way before, and it\'s quite manageable.</p>\r\n\r\n<h2>Boot</h2>\r\n\r\n<p>\r\nBooting to Porteus depends a lot on the firmware of the computer you\'re booting. Almost every Linux distro in existence has accurate docs on the changes you may or may not need to make to your BIOS or [U]EFI in order to boot to Linux, so you can find more detail on this if you need. Here\'s some text I borrowed from Linux Mint:\r\n</p>\r\n\r\n<p> Insert your USB stick (or DVD) into the computer.</p>\r\n<p>Restart the computer.</p>\r\n<p>Before your computer boots your current operating system (Windows, Mac, Linux) you should see your BIOS or UEFI loading screen. Check the screen or your computer’s documentation to know which key to press and instruct your computer to boot on USB (or DVD). Most BIOS or UEFI have a special key you can press to select the boot device and all of them have a special key to enter a configuration screen (from which you can define the boot order). Depending on the firmware, these special keys can be Escape, F1, F2, F8, F10, F11, F12, or Delete. That information is usually briefly displayed on screen during the boot sequence.\r\n</p>\r\n<p>\r\nOn Macs, keep your finger pressed on the Alt or Option key after hearing the boot sound.\r\n</p>\r\n\r\n<h2>Boot modes</h2>\r\n\r\n<p>Porteus can boot to its default persistent modes: graphical or text. Both of these modes auto load any Porteus modules you\'ve installed and also read any changes you made since the previous boot.\r\n</p>\r\n<p>It can also boot to ephemeral modes: Copy to RAM and Always Fresh. These modes act as if you\'ve never booted into Porteus before, loading a completely fresh version of the file system. They also do not load Porteus modules automatically.</p>\r\n\r\n<h2>Installing software</h2>\r\n\r\n<p>Porteus modules are Slackware packages converted to .xzm files, a highly-compressed SquashFS filesystem. When a Porteus module is activated, the application and other files contained in the module appear in your environment. You can think of it as a layered filesystem.</p>\r\n\r\n<p>\r\nTo install software, you must sync up your package manager with upstream repositories:</p>\r\n\r\n<pre><code>$ sudo usm -u all\r\n</code></pre>\r\n\r\n<p>\r\nOnce everything is updated, you can search for packages using the <code>-k</code> (for keyword) option&#58;</p>\r\n\r\n<pre><code>$ sudo usm -k foo\r\n</code></pre>\r\n\r\n<p>\r\nAnd then install it&#58;</p>\r\n\r\n<pre><code>$ sudo usm -g foo\r\n</code></pre>\r\n\r\n<p>\r\nYou are prompted to either install or download the module. If you install it, then it becomes part of the filesystem. However, since changes to the filesystem are NOT read by the Copy to RAM or Always Fresh modes, this is probably not what you want. Instead, download the module so that you can have Porteus load it dynamically regardless of what mode you\'re running.</p>\r\n\r\n<p>\r\nModules are downloaded, by default, to /tmp/usm/ and then converted from their native format of .t?z to .xzm files. You can copy the .xzm files to an external device if you\'re running off of optical media, or into a persistent area on the thumbdrive running Porteus. Modules can be made permanently available in the /mnt/sdx1/porteus/modules or /mnt/sdx1/porteus/optianal directories.\r\n</p>\r\n\r\n<p>Modules in the ../modules path are loaded at boot in the Graphical and Text modes, and are available to load manually in the Copy to RAM and Always Fresh modes.</p><p>Modules in the ../optional path are never auto loaded.</p>\r\n\r\n<p>Modules can be activated or deactivated with this command&#58;</p>\r\n\r\n<pre><code>$ sudo activate foo\r\n</code></pre>\r\n\r\n<h2>Miscellany</h2>\r\n\r\n<p><a href=\"https://flatpak.org/\" target=\"_blank\">Flatpak</a> works on Porteus, too. I have found this to be convenient for applications like GIMP and Inkscape and Kdenlive and many others that are complex enough to warrant special attention.\r\n</p>\r\n\r\n<p>\r\nFlatpak does require the <code>glib-networking</code> package. You will not be warned about this, because all upstream Slackware repositories assume a full install of Slackware (and glib-networking is included on Slackware, but not on Porteus). Once you install glib-networking, you can use flatpak as described, for instance, on the GIMP downloads page.\r\n</p>\r\n\r\n<p>\r\nOver-customizing the \"hard-coded\" parts of Porteus is unwise. For instance, keep the default user (guest), don\'t try to change the UID (I tried and failed), and so on. Treat the system, more or less, as if though you were a guest on someone else\'s multi-user system. Install and customise stuff locally and through modules when possible. That\'s what Porteus expects, and things can break if you try to treat it too much like a traditional Linux system.\r\n</p>\r\n',78,0,0,'CC-BY-SA','porteus,slax,installation,howto,tutorial,usbdrive,thumbdrive',0,0,1),
(2673,'2018-10-31','Urandom - Ohio Linux Fest 2-18 Podcaster Roundtable',2043,'The Urandom crew gathers the podcasters at Ohio Linux Fest for a chat.','<p>Hosts: Lyle, Thaj, Kevin O’Brian (Ahuka), Tony Beamus, FiftyOneFifty</p>\r\n<ul>\r\n<li><a href=\"https://asciinema.org/\" class=\"uri\">https://asciinema.org/</a></li>\r\n<li>HPR saves lives</li>\r\n<li>Green scooters, but not on fire</li>\r\n<li>North Market <a href=\"https://www.northmarket.com/\" class=\"uri\">https://www.northmarket.com/</a></li>\r\n<li>LIKE SHARE SUBSCRIBE!</li>\r\n<li>Urandom <a href=\"https://urandom-podcast.info\" class=\"uri\">https://urandom-podcast.info</a></li>\r\n<li>SMLR <a href=\"https://smlr.us/\" class=\"uri\">https://smlr.us/</a></li>\r\n<li>LinuxLugcast <a href=\"https://www.linuxlugcast.com/\" class=\"uri\">https://www.linuxlugcast.com/</a></li>\r\n<li>HPR <a href=\"https://hackerpublicradio.org/\" class=\"uri\">https://hackerpublicradio.org/</a></li>\r\n</ul>\r\n<p>** Record Scratch audio sample <a href=\"https://freesound.org/people/luffy/sounds/3536/\" class=\"uri\">https://freesound.org/people/luffy/sounds/3536/</a></p>\r\n',270,0,1,'CC-BY-SA','Ohio Linux Fest,Urandom,Sunday Morning Linux Review,Linux Lug Cast',0,0,1),
(2677,'2018-11-06','Thoughts on language learning part 4 - RPG.',1090,'I ponder the idea of an RPG with players not speaking the same language.','<p>I thought I was done with this topic, but got to thinking about bringing a game to life it occurred to me it was a lot of work. So I thought about it some more and hit upon the idea of an RPG probably mostly played online where a key point of the game is that the players needn’t know the same language.</p>\r\n<p>At first this seems like an odd thing for an RPG because the talking to each other is sort of a requirement. By now you’ve guessed that what I mean is that the game could be designed so that it assumes the players will have limited ability to communicate. And that drives how the game progresses.</p>\r\n<p>I see two kinds of approaches. One is that players sort of team up by the their native languages so you might have people knowing different native languages working in smaller teams while the whole game has the goal of everyone learning the new language.</p>\r\n<p>The other is that everyone could know a different native language and many or may nor cooperate with others but the goal of the game is everyone learning the same new language.</p>\r\n<p>Submitting this show mostly because I’m curious what the community thinks of the idea.</p>\r\n',151,0,1,'CC-0','spoken language learning',0,0,1),
(2681,'2018-11-12','DerbyCon Interview - Hackers for Charity',273,'Xoke interviews the amazing Hackers for Charity people','<p><a href=\"https://www.hackersforcharity.org/\" class=\"uri\">https://www.hackersforcharity.org/</a></p>',79,78,0,'CC-0','DerbyCon, Charity, Interview',0,0,1),
(2684,'2018-11-15','Making a remote control visible',77,'Yet another amazing life hack !!!','<h2>The problem</h2>\r\n<p>\r\nA black remote control on a black couch.\r\n</p>\r\n<h2>The solution</h2>\r\n<p>\r\nCover it in Earth <a href=\"https://en.wikipedia.org/wiki/Electrical_tape\">Insulating Tape</a>.\r\n</p>\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2684_front.jpg\">\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2684_front_small.jpg\" alt=\"Remote control front\"/>\r\n</a>\r\n</p>\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2684_back.jpg\">\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2684_back_small.jpg\" alt=\"Remote control rear\"/>\r\n</a>\r\n</p>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Electrical_tape\">https://en.wikipedia.org/wiki/Electrical_tape</a></li>\r\n</ul>\r\n',30,0,1,'CC-BY-SA','Life hacks',0,0,1),
(2680,'2018-11-09','Some Additional Talk About Characters -- 01',746,'Lostnbronx takes a look at what sorts of characters work best for certain types of tales. Part 01.','<p>Some characters are simple, some are complex, and some are entirely unknowable. What sorts of characters work best for grand, sweeping good vs. evil tales? Which types work best for simple character dramas? And how do characters interact with the setting and story? Lostnbronx offers some off-the-cuff observations.</p>\r\n',107,105,0,'CC-0','stories,storytelling,characters,lostnbronx',0,0,1),
(2682,'2018-11-13','(NOT) All About Blender',2753,'A meandering conversation to sooth the nerves, and warm the soul.','<p>The first part of what began a serious attempt to sit down and discuss Blender, a free and open-source piece of awesome, that slowly (rapidly) devolved into a meandering discussion. Mostly about video games.</p>\r\n<ul>\r\n<li><a href=\"https://openmw.org/en/\" class=\"uri\">https://openmw.org/en/</a></li>\r\n<li><a href=\"https://www.blender.org/\" class=\"uri\">https://www.blender.org/</a></li>\r\n<li><a href=\"https://www.blender.org/support/tutorials/\" class=\"uri\">https://www.blender.org/support/tutorials/</a></li>\r\n<li><a href=\"https://danielpocock.com/quick-start-blender-video-editing\" class=\"uri\">https://danielpocock.com/quick-start-blender-video-editing</a></li>\r\n<li><a href=\"https://m.youtube.com/user/BlenderFoundation\" class=\"uri\">https://m.youtube.com/user/BlenderFoundation</a></li>\r\n<li><a href=\"https://m.youtube.com/watch?v=_lGfeS050Xw\" class=\"uri\">https://m.youtube.com/watch?v=_lGfeS050Xw</a></li>\r\n<li><a href=\"https://zombiemud.org/\" class=\"uri\">https://zombiemud.org/</a></li>\r\n</ul>\r\n<h3 id=\"bloodpong\">BloodPong</h3>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/watch?v=GHrg48sa4ZA\" class=\"uri\">https://www.youtube.com/watch?v=GHrg48sa4ZA</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=vqZQFbKxkxg\" class=\"uri\">https://www.youtube.com/watch?v=vqZQFbKxkxg</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=VCYrErmTIjA\" class=\"uri\">https://www.youtube.com/watch?v=VCYrErmTIjA</a></li>\r\n</ul>\r\n',325,0,1,'CC-BY-SA','Blender',0,0,1),
(2686,'2018-11-19','(NOT) All About Blender - Part the Second',2413,'A meandering conversation to sooth the nerves, and warm the soul - part 2!!','<p>The second part of what began as a serious attempt to sit down and discuss Blender, a free and open-source piece of awesome, that slowly (rapidly) devolved into a meandering discussion. Mostly about video games.</p>\r\n<ul>\r\n<li><a href=\"https://openmw.org/en/\" class=\"uri\">https://openmw.org/en/</a></li>\r\n<li><a href=\"https://www.blender.org/\" class=\"uri\">https://www.blender.org/</a></li>\r\n<li><a href=\"https://www.blender.org/support/tutorials/\" class=\"uri\">https://www.blender.org/support/tutorials/</a></li>\r\n<li><a href=\"https://danielpocock.com/quick-start-blender-video-editing\" class=\"uri\">https://danielpocock.com/quick-start-blender-video-editing</a></li>\r\n<li><a href=\"https://m.youtube.com/user/BlenderFoundation\" class=\"uri\">https://m.youtube.com/user/BlenderFoundation</a></li>\r\n<li><a href=\"https://m.youtube.com/watch?v=_lGfeS050Xw\" class=\"uri\">https://m.youtube.com/watch?v=_lGfeS050Xw</a></li>\r\n<li><a href=\"https://zombiemud.org/\" class=\"uri\">https://zombiemud.org/</a></li>\r\n</ul>\r\n<h3 id=\"bloodpong\">BloodPong</h3>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/watch?v=GHrg48sa4ZA\" class=\"uri\">https://www.youtube.com/watch?v=GHrg48sa4ZA</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=vqZQFbKxkxg\" class=\"uri\">https://www.youtube.com/watch?v=vqZQFbKxkxg</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=VCYrErmTIjA\" class=\"uri\">https://www.youtube.com/watch?v=VCYrErmTIjA</a></li>\r\n</ul>',325,0,1,'CC-BY-SA','Blender',0,0,1),
(2688,'2018-11-21','Explaining the controls on my Amateur HF Radio Part 5',1039,'In this episode I cover the remaining Receiver section controls of the TS940S.','<ul>\r\n<li><p>The controls covered are</p>\r\n<ul>\r\n<li>AF / RF gain\r\n<ul>\r\n<li>(1A) AF, Audio frequency gain control (Volume)<br />\r\nTurns the volume up and down</li>\r\n<li>(1B) RF, Radiofrequency gain control (From the Kenwood manual)<br />\r\nRF GAIN is controlled by changing the AGC (Auto Gain Control) threshold voltage. Adjusting the RF GAIN so that the S-meter reading increases to a point just lower than speech peaks. This also reduces noise during reception. For normal operation, this control should be turned fully clockwise for maximum sensitivity.</li>\r\n</ul></li>\r\n<li>CW VBT (From the Kenwood manual)\r\n<ul>\r\n<li>Carrier Wave Variable Bandwidth Tuning Control<br />\r\nThis control is very similar to the SSB Slope tuning controls. However, with the CW VBT control, both sides of the IF passband are narrowed at the same time.</li>\r\n</ul></li>\r\n<li>SSB Slope Tune (High pass low pass audio filter)\r\n<ul>\r\n<li>High pass filter<br />\r\n<a href=\"https://en.wikipedia.org/wiki/High-pass_filter\" class=\"uri\">https://en.wikipedia.org/wiki/High-pass_filter</a></li>\r\n<li>Low-pass filter<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Low-pass_filter\" class=\"uri\">https://en.wikipedia.org/wiki/Low-pass_filter</a></li>\r\n</ul></li>\r\n</ul></li>\r\n<li><p>I mention that the radio uses phase locked loop technologies.<br />\r\nBelow is an article in Wikipedia about PLL (Phase locked loop)<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Phase-locked_loop\" class=\"uri\">https://en.wikipedia.org/wiki/Phase-locked_loop</a></p></li>\r\n<li><p>I mention that the radio doesn’t use valves.<br />\r\nBelow is an article in Wikipedia about valves (Vacuum tubes)<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Vacuum_tube\" class=\"uri\">https://en.wikipedia.org/wiki/Vacuum_tube</a></p></li>\r\n<li><p>Dry joint<br />\r\nI mention that the radio developed a dry joint<br />\r\nBelow is an article in Wikipedia about soldering that covers dry joints<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Soldering#Dry_joint\" class=\"uri\">https://en.wikipedia.org/wiki/Soldering#Dry_joint</a></p></li>\r\n</ul>\r\n',201,43,1,'CC-BY-SA','HF, Ham, Amateur Radio',0,0,1),
(2683,'2018-11-14','Using Open source tools to visualize the heartrate and blood oxygen saturation level of my stepchild',1911,'Using Open source tools to visualize the heartrate and blood oxygen saturation level of my stepchild','<h2 id=\"using-python-php-jquery-and-linux-to-visualize-the-heartrate-and-blood-oxygen-saturation-level-of-my-stepdaughter.\">Using Python, PHP, JQuery and Linux to visualize the heartrate and blood oxygen saturation level of my stepdaughter.</h2>\r\n<p>Jeroen Baten talks about how he used his knowledge of a couple of open source tools to visualize the heartrate and oxygen saturation in the blood of one of his children and how this aided a pediatrician at the Wilhelmina childrens hospital to come to the right conclusion and treatment. This talk is a mix of tech and 43 surgery sessions on one single human being.</p>\r\n<h2>Links</h2>\r\n<ul><li>Details, including source code, graphs and all can be found\r\nhere:<br/>\r\n<a href=\"https://www.jeroenbaten.nl/cardio-oxygen-saturation-monitoring-home/\">https://www.jeroenbaten.nl/cardio-oxygen-saturation-monitoring-home/</a></li></ul>\r\n\r\n<p>\r\n<small><small><b>Editor\'s Note</b><br/>\r\nJeroen\'s link above was added after the show had been aired.</small></small>\r\n</p>\r\n',369,0,0,'CC-BY-SA','python, php, jquery, linux',0,0,1),
(2687,'2018-11-20','Some Additional Talk About Characters -- 02',750,'Lostnbronx takes a look at what sorts of characters work best for certain types of tales. Part 02.','<p>What are some typical ways to create characters in your stories? Should you create the plot first, or the characters first? Should we think of characters in terms of heroes and villains, or protagonists and antagonists? What is the value of character depth, and is it the same as the character arc? Lostnbronx offers up even more off-the-cuff thoughts about this complicated subject.</p>\r\n',107,105,0,'CC-0','stories,storytelling,characters,lostnbronx',0,0,1),
(2956,'2019-12-02','HPR Community News for November 2019',5211,'Dave, Jeroen and Ken talk about shows released and comments posted in November 2019','<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/0381.html\" target=\"_blank\">Nihilazo</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</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=2935\" target=\"_blank\">2935</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-11-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2935\" target=\"_blank\">The work of fire fighters, part 3</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=2936\" target=\"_blank\">2936</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-11-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2936\" target=\"_blank\">HPR Community News for October 2019</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=2937\" target=\"_blank\">2937</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-11-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2937\" target=\"_blank\">Lord D\'s Film Reviews: His Girl Friday</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2938\" target=\"_blank\">2938</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-11-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2938\" target=\"_blank\">Naming pets in space game</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2939\" target=\"_blank\">2939</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-11-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2939\" target=\"_blank\">Submit a show to Hacker Public Radio in 10 easy steps</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2940\" target=\"_blank\">2940</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-11-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2940\" target=\"_blank\">Better Social Media 05 - Mastodon</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=2941\" target=\"_blank\">2941</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-11-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2941\" target=\"_blank\">Server Basics 107: Minishift and container management</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=2942\" target=\"_blank\">2942</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-11-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2942\" target=\"_blank\">Why I love lisps</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0381.html\" target=\"_blank\">Nihilazo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2943\" target=\"_blank\">2943</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-11-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2943\" target=\"_blank\">Music as Life</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0329.html\" target=\"_blank\">brian</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2944\" target=\"_blank\">2944</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-11-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2944\" target=\"_blank\">ONICS Basics Part 4: Network Flows and Connections</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2945\" target=\"_blank\">2945</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-11-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2945\" target=\"_blank\">Saturday at OggCamp Manchester 2019</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=2946\" target=\"_blank\">2946</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-11-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2946\" target=\"_blank\">Sunday at OggCamp Manchester 2019</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=2947\" target=\"_blank\">2947</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-11-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2947\" target=\"_blank\">The Mimblewimble Protocol</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0379.html\" target=\"_blank\">mightbemike</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2948\" target=\"_blank\">2948</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-11-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2948\" target=\"_blank\">Testing with Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2949\" target=\"_blank\">2949</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-11-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2949\" target=\"_blank\">Grin and Beam: The 2 major mimblewimble blockchains</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0379.html\" target=\"_blank\">mightbemike</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2950\" target=\"_blank\">2950</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-11-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2950\" target=\"_blank\">NotPetya and Maersk: An Object Lesson</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=2951\" target=\"_blank\">2951</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-11-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2951\" target=\"_blank\">A walk through my PifaceCAD Python code – Part 2</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=2952\" target=\"_blank\">2952</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-11-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2952\" target=\"_blank\">Publishing your book using open source tools</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=2953\" target=\"_blank\">2953</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-11-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2953\" target=\"_blank\">How I got started in Linux</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=2954\" target=\"_blank\">2954</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-11-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2954\" target=\"_blank\">Wrestling As You Like It episode 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0354.html\" target=\"_blank\">TheDUDE</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2955\" target=\"_blank\">2955</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-11-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2955\" target=\"_blank\">Machine Learning / Data Analysis Basics</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 16 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 2 comments on\n1 previous show:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1585#comments\" target=\"_blank\">hpr1585</a></strong>\n(2014-08-29) \"<em>36 - LibreOffice Calc - Financial Functions - Loan Payments</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1585#1\" target=\"_blank\">Comment 1</a>:\ntimttmy on 2019-11-30:\n\"Thanks\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1585#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2019-11-30:\n\"I\'m glad it helped\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 14 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2935#comments\" target=\"_blank\">hpr2935</a></strong>\n(2019-11-01) \"<em>The work of fire fighters, part 3</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2935#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-11-05:\n\"That sucks\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2935#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2019-11-05:\n\"That blows\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2935#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2019-11-05:\n\"You\'re Fired\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2936#comments\" target=\"_blank\">hpr2936</a></strong>\n(2019-11-04) \"<em>HPR Community News for October 2019</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=2936#1\" target=\"_blank\">Comment 1</a>:\nlostnbronx on 2019-11-04:\n\"Ken\'s Voice Is Better Than espeak\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2936#2\" target=\"_blank\">Comment 2</a>:\nJon Kulp on 2019-11-05:\n\"Pots\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2936#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2019-11-19:\n\"Release order or episode order?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2939#comments\" target=\"_blank\">hpr2939</a></strong>\n(2019-11-07) \"<em>Submit a show to Hacker Public Radio in 10 easy steps</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2939#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-11-07:\n\"Clarification\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2940#comments\" target=\"_blank\">hpr2940</a></strong>\n(2019-11-08) \"<em>Better Social Media 05 - Mastodon</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=2940#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2019-11-08:\n\"Simple Mastodon Timeline View Option\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2942#comments\" target=\"_blank\">hpr2942</a></strong>\n(2019-11-12) \"<em>Why I love lisps</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0381.html\" target=\"_blank\">Nihilazo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2942#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2019-11-12:\n\"welcome\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2942#2\" target=\"_blank\">Comment 2</a>:\nCarl on 2019-11-21:\n\"Well Done\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2942#3\" target=\"_blank\">Comment 3</a>:\ngerryk on 2019-11-22:\n\"loved it\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2943#comments\" target=\"_blank\">hpr2943</a></strong>\n(2019-11-13) \"<em>Music as Life</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0329.html\" target=\"_blank\">brian</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2943#1\" target=\"_blank\">Comment 1</a>:\nCarl on 2019-11-21:\n\"Interesting Episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2944#comments\" target=\"_blank\">hpr2944</a></strong>\n(2019-11-14) \"<em>ONICS Basics Part 4: Network Flows and Connections</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2944#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2019-11-27:\n\"This is wonderful\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2955#comments\" target=\"_blank\">hpr2955</a></strong>\n(2019-11-29) \"<em>Machine Learning / Data Analysis Basics</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=2955#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2019-11-29:\n\"Great first episode\"</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/2019-November/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-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=\"stand-at-fosdem\">Stand at FOSDEM</h3>\n<p>Our proposal for a “Free Culture Podcasts” stand at FOSDEM was accepted for the Sunday 2nd February. This is fantastic news as this is the largest FLOSS event in Europe and is absolutely thronged the whole day.</p>\n<p><a href=\"https://fosdem.org/2020/news/2019-11-19-accepted-stands/\" class=\"uri\">https://fosdem.org/2020/news/2019-11-19-accepted-stands/</a></p>\n<p>Anyone going to FOSDEM, and who would like to help staff the booth on Sunday please get in touch.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 5 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2981,'2020-01-06','HPR Community News for December 2019',4671,'HPR Volunteers talk about shows released and comments posted in December 2019','<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/0383.html\" target=\"_blank\">Paul Quirk</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=2956\" target=\"_blank\">2956</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-12-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2956\" target=\"_blank\">HPR Community News for November 2019</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=2957\" target=\"_blank\">2957</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-12-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2957\" target=\"_blank\">Lord D\'s Film Reviews: Ever</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2958\" target=\"_blank\">2958</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-12-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2958\" target=\"_blank\">Haskell modules</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2959\" target=\"_blank\">2959</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-12-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2959\" target=\"_blank\">Interview with Josh Clements about gpodder.net </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=2960\" target=\"_blank\">2960</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-12-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2960\" target=\"_blank\">Dehydrated Foods</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=2961\" target=\"_blank\">2961</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-12-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2961\" target=\"_blank\">Kubernetics / Cloud - Terminology</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=2962\" target=\"_blank\">2962</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-12-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2962\" target=\"_blank\">Bespoke bike building</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2963\" target=\"_blank\">2963</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-12-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2963\" target=\"_blank\">A walk through my PifaceCAD Python code – Part 3</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=2964\" target=\"_blank\">2964</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-12-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2964\" target=\"_blank\">Bolos and Bowties: Neckwear for Nerds</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2965\" target=\"_blank\">2965</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-12-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2965\" target=\"_blank\">instant feedback for students in maths</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0288.html\" target=\"_blank\">beni</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2966\" target=\"_blank\">2966</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-12-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2966\" target=\"_blank\">World of Commodore 2019 Episode 1: The Interviews</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=2967\" target=\"_blank\">2967</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-12-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2967\" target=\"_blank\">Wrestling As You Like It Episode 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0354.html\" target=\"_blank\">TheDUDE</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2968\" target=\"_blank\">2968</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-12-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2968\" target=\"_blank\">Life and Times of a Geek part 3</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=2969\" target=\"_blank\">2969</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-12-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2969\" target=\"_blank\">Crewing a spaceship in Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2970\" target=\"_blank\">2970</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-12-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2970\" target=\"_blank\">The Fediverse</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=2971\" target=\"_blank\">2971</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-12-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2971\" target=\"_blank\">World of Commodore 2019 Episode 2: Hacking GeckOS</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=2972\" target=\"_blank\">2972</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-12-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2972\" target=\"_blank\">The foot of the ski slope</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=2973\" target=\"_blank\">2973</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2019-12-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2973\" target=\"_blank\">Introduction to Advent of Code</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=2974\" target=\"_blank\">2974</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2019-12-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2974\" target=\"_blank\">Guitar Setup pt. 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2975\" target=\"_blank\">2975</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2019-12-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2975\" target=\"_blank\">SimpleScreenRecorder and Vidcutter</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=2976\" target=\"_blank\">2976</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2019-12-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2976\" target=\"_blank\">A walk through my PifaceCAD Python code – Part 4</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=2977\" target=\"_blank\">2977</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2019-12-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2977\" target=\"_blank\">World of Commodore 2019 Episode 3: Life after Commodore</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0383.html\" target=\"_blank\">Paul Quirk</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 22 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 6 comments on\n6 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2924#comments\" target=\"_blank\">hpr2924</a></strong>\n(2019-10-17) \"<em>Hacking an Alarm Clock to Make it Quieter</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2924#1\" target=\"_blank\">Comment 1</a>:\nGabriel Evenfire on 2019-12-24:\n\"Fun to listen to as always\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2932#comments\" target=\"_blank\">hpr2932</a></strong>\n(2019-10-29) \"<em>Stardrifter RPG Playtest Part 10</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2932#1\" target=\"_blank\">Comment 1</a>:\nGabriel Evenfire on 2019-12-24:\n\"Loved the series\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2942#comments\" target=\"_blank\">hpr2942</a></strong>\n(2019-11-12) \"<em>Why I love lisps</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0381.html\" target=\"_blank\">Nihilazo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2942#4\" target=\"_blank\">Comment 4</a>:\nGabriel Evenfire on 2019-12-24:\n\"Great first episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2944#comments\" target=\"_blank\">hpr2944</a></strong>\n(2019-11-14) \"<em>ONICS Basics Part 4: Network Flows and Connections</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0259.html\" target=\"_blank\">Gabriel Evenfire</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2944#2\" target=\"_blank\">Comment 2</a>:\nGabriel Evenfire on 2019-12-23:\n\"Glad you liked it!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2947#comments\" target=\"_blank\">hpr2947</a></strong>\n(2019-11-19) \"<em>The Mimblewimble Protocol</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0379.html\" target=\"_blank\">mightbemike</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2947#1\" target=\"_blank\">Comment 1</a>:\nGabriel Evenfire on 2019-12-24:\n\"Enjoying this series\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2955#comments\" target=\"_blank\">hpr2955</a></strong>\n(2019-11-29) \"<em>Machine Learning / Data Analysis Basics</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2955#2\" target=\"_blank\">Comment 2</a>:\ngerryk on 2019-12-06:\n\"great! clear and informational\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 16 comments on 10 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2956#comments\" target=\"_blank\">hpr2956</a></strong>\n(2019-12-02) \"<em>HPR Community News for November 2019</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=2956#1\" target=\"_blank\">Comment 1</a>:\njezra on 2019-12-10:\n\"No more postcards?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2957#comments\" target=\"_blank\">hpr2957</a></strong>\n(2019-12-03) \"<em>Lord D\'s Film Reviews: Ever</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2957#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-12-03:\n\"Great series but ...\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2957#2\" target=\"_blank\">Comment 2</a>:\nlostnbronx on 2019-12-04:\n\"Links\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2957#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2019-12-04:\n\"Good point\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2959#comments\" target=\"_blank\">hpr2959</a></strong>\n(2019-12-05) \"<em>Interview with Josh Clements about gpodder.net </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=2959#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2019-12-05:\n\"No problem. I\'ll do it\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2962#comments\" target=\"_blank\">hpr2962</a></strong>\n(2019-12-10) \"<em>Bespoke bike building</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2962#1\" target=\"_blank\">Comment 1</a>:\npetard on 2019-12-11:\n\"I really enjoyed this\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2962#2\" target=\"_blank\">Comment 2</a>:\nJon Kulp on 2019-12-12:\n\"Excellent progress\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2963#comments\" target=\"_blank\">hpr2963</a></strong>\n(2019-12-11) \"<em>A walk through my PifaceCAD Python code – Part 3</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2963#1\" target=\"_blank\">Comment 1</a>:\nGabriel Evenfire on 2019-12-24:\n\"Great series\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2963#2\" target=\"_blank\">Comment 2</a>:\nMrX on 2019-12-27:\n\"Re: Great series\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2964#comments\" target=\"_blank\">hpr2964</a></strong>\n(2019-12-12) \"<em>Bolos and Bowties: Neckwear for Nerds</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2964#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2019-12-12:\n\"Yes it is of interest to Hackers\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2964#2\" target=\"_blank\">Comment 2</a>:\nJon Kulp on 2019-12-12:\n\"the model\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2965#comments\" target=\"_blank\">hpr2965</a></strong>\n(2019-12-13) \"<em>instant feedback for students in maths</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0288.html\" target=\"_blank\">beni</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2965#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2019-12-19:\n\"Cool project!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2966#comments\" target=\"_blank\">hpr2966</a></strong>\n(2019-12-16) \"<em>World of Commodore 2019 Episode 1: The Interviews</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=2966#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2019-12-19:\n\"Legacy Tech\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2966#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2019-12-19:\n\"Great show!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2967#comments\" target=\"_blank\">hpr2967</a></strong>\n(2019-12-17) \"<em>Wrestling As You Like It Episode 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0354.html\" target=\"_blank\">TheDUDE</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2967#1\" target=\"_blank\">Comment 1</a>:\nBRonaldo on 2019-12-17:\n\"WWE\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2974#comments\" target=\"_blank\">hpr2974</a></strong>\n(2019-12-26) \"<em>Guitar Setup pt. 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0235.html\" target=\"_blank\">NYbill</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2974#1\" target=\"_blank\">Comment 1</a>:\nNYbill on 2019-12-26:\n\"Heh, editing...\"</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/2019-December/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>There were no tag or summary updates in the past month.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2691,'2018-11-26','DerbyCon Interview - John Strand',160,'John Strand talks about behavoural analytics and blockchain','<p>John Strand (<a href=\"https://twitter.com/strandjs\" class=\"uri\">https://twitter.com/strandjs</a>) from Black Hills Information Security (<a href=\"https://www.blackhillsinfosec.com/\" class=\"uri\">https://www.blackhillsinfosec.com/</a>)</p>\r\n<p>Download RITA (it’s free!) - Real Intelligence Threat Analytics - <a href=\"https://www.blackhillsinfosec.com/projects/rita/\" class=\"uri\">https://www.blackhillsinfosec.com/projects/rita/</a></p>',79,78,0,'CC-BY-SA','DerbyCon, Interview, Blockchain',0,0,1),
(2699,'2018-12-06','Bash Tips - 15',1794,'Some of the pitfalls when using loops in Bash','<h1 id=\"bash-tips---15\">Bash Tips - 15 <small><small>(More auxiliary Bash tips)</small></small></h1>\r\n<h2 id=\"pitfalls-for-the-unwary-bash-loop-user\">Pitfalls for the unwary Bash loop user</h2>\r\n<p>This is the fifteenth episode covering useful tips for Bash users. In the last episode we looked at the <code>\'for\'</code> loop, and prior to that we looked at <code>\'while\'</code> and <code>\'until\'</code> loops. In this one I want to look at some of the loop-related issues that can trip up the unwary user.</p>\r\n<p>Loops in Bash are extremely useful, and they are not at all difficult to use in their basic forms. However, there are some perhaps less than obvious issues that can result in unexpected behaviour.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2699/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution\">“Bash Process Substitution”</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://www.gnu.org/software/findutils/manual/html_mono/find.html\">“<em>GNU Findutils</em>”</a></p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 “<em>Extra ancillary Bash tips - 13</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2689\">HPR episode 2689 “<em>Bash Tips - 14 (Some auxiliary Bash tips)</em>”</a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2699/bash15_ex1.sh\">bash15_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2699/bash15_ex2.sh\">bash15_ex2.sh</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,loop,ls,pipe,pipeline,find,extglob',0,0,1),
(2710,'2018-12-21','Youtube downloader for channels',844,'A followup to hpr2675 how you can download an entire youtube channel for local playout','<p>\r\nI had a very similar problem to Ahuka aka Kevin, in <a href=\"https://hackerpublicradio.org/eps.php?id=2675\">hpr2675 :: YouTube Playlists</a>. I wanted to be able to download an entire youtube channel and store them so that I could play them in the order that they were posted.\r\n</p>\r\n<p>\r\nAdd the url\'s to a file called <em>subscriptions.txt</em>.\r\n</p>\r\n<pre>\r\n#LASTRUN: 20181030\r\n# /home/ken/sourcecode/personal/bestofyoutube/youtube-channel-watcher.bash\r\n#\r\n# Big Clive \r\nhttps://www.youtube.com/channel/UCtM5z2gkrGRuWd0JQMx76qA	20181030\r\n# Essential Craftsman\r\nhttps://www.youtube.com/channel/UCzr30osBdTmuFUS8IfXtXmg\r\n</pre>\r\n<p>\r\nThen run the script\r\n</p>\r\n<pre>\r\n#!/bin/bash\r\n# Downloads videos from youtube based on selection from https://thebestofyoutube.com\r\n# (c) Ken Fallon https://kenfallon.com\r\n# Released under the CC-0\r\n\r\nsavepath=\"/mnt/media/Videos/channels\"\r\nsubscriptions=\"${savepath}/subscriptions.txt\"\r\nYOUNGERTHAN=\"20010101\"\r\nRUNDATE=$(date +%Y%m%d)\r\nyoutubedl=\"/home/ken/sourcecode/youtube-dl/youtube-dl\"\r\n#DRYRUN=\"echo DEBUG: \"\r\n\r\nif [ ! -e \"${subscriptions}\" ]\r\nthen\r\n	echo \"Cannot find subscription file \"${subscriptions}\"\"\r\n	exit 1\r\nfi\r\n\r\nif [ \"$(grep \"#LASTRUN: \" \"${subscriptions}\" | wc -l )\" -eq 0 ]\r\nthen\r\n	sed --follow-symlinks \'1s/^/#LASTRUN: n/\' -i \"${subscriptions}\"\r\nfi\r\n\r\n# Read the subscriptions\r\ncat \"${subscriptions}\" | grep -v \'#\' | while read channel_info\r\ndo\r\n	if [ \"$(echo \"${channel_info}\" | grep -P \'t\' | wc -l )\" -eq 0 ]\r\n	then\r\n		DATEAFTER=\"--dateafter ${YOUNGERTHAN}\"\r\n	else\r\n		DATEAFTER=\"--dateafter $(echo \"${channel_info}\" | awk \'{print $NF}\' )\"\r\n	fi\r\n	channel=\"$(echo \"${channel_info}\" | awk \'{print $1}\' )\"\r\n	echo \"Processing Channel \"${channel}\" since ${DATEAFTER}\"\r\n	${DRYRUN} ${youtubedl} ${DATEAFTER} --ignore-errors --no-mtime --restrict-filenames --format mp4 -o ${savepath}\'/%(uploader)s/%(upload_date)s-%(title)s⋄%(id)s.%(ext)s\' ${channel}\r\n	${DRYRUN} sed --follow-symlinks \"s,${channel}.*$,${channel}t${RUNDATE},g\" -i \"${subscriptions}\"\r\ndone\r\n\r\n${DRYRUN} sed --follow-symlinks \"s/#LASTRUN: .*$/#LASTRUN: ${RUNDATE}/\" -i \"${subscriptions}\"\r\n</pre>\r\n',30,0,1,'CC-BY-SA','youtube, youtube-dl',0,0,1),
(2720,'2019-01-04','Download youtube channels using the rss feeds',1447,'Ken shares a script that will allow you to quickly keep up to date on your youtube subscriptions','<p>\r\nI had a very similar problem to Ahuka aka Kevin, in <a href=\"https://hackerpublicradio.org/eps.php?id=2675\">hpr2675 :: YouTube Playlists</a>. I wanted to be able to download an entire youtube channel and store them so that I could play them in the order that they were posted.<br />\r\nSee previous episode <a href=\"https://hackerpublicradio.org/eps.php?id=2710\">hpr2710 :: Youtube downloader for channels</a>.\r\n</p>\r\n<p>\r\nThe problem with the original script is that it needs to download and check each video in each channel and it can crawl to a halt on large channels like <a href=\"https://www.eevblog.com/\">EEEVblog</a>.\r\n</p>\r\n<p>\r\nThe solution was given in <a href=\"https://hackerpublicradio.org/eps.php?id=2544\">hpr2544 :: How I prepared episode 2493: YouTube Subscriptions - update</a> with more details in the <a href=\"https://hackerpublicradio.org/eps/hpr2544/full_shownotes.html\">full-length</a> notes.\r\n</p>\r\n\r\n<ol>\r\n<li>Subscribe:<br />Subscriptions are the currency of YouTube creators so don\'t be afraid to create an account to subscribe to the creators. Here is my current <a href=\"https://hackerpublicradio.org/eps/hpr2720/subscription_manager.opml\">subscription_manager.opml</a> to give you some ideas.</li>\r\n<li>Export:<br />Login to <a href=\"https://www.youtube.com/subscription_manager\">https://www.youtube.com/subscription_manager</a> and at the bottom you will see the option to <strong>Export subscriptions</strong>. Save the file and alter the script to point to it.</li>\r\n<li>Download: Run the script <a href=\"https://hackerpublicradio.org/eps/hpr2720/youtube-rss.bash\">youtube-rss.bash</a></li>\r\n</ol>\r\n\r\n<h3>How it works</h3>\r\n<p>\r\nThe first part allows you to define where you want to save your files. It also allows you to set what videos to skip based on length and strings in their titles.\r\n</p>\r\n<pre>\r\nsavepath=\"/mnt/media/Videos/channels\"\r\nsubscriptions=\"${savepath}/subscription_manager.opml\"\r\nlogfile=\"${savepath}/log/downloaded.log\"\r\nyoutubedl=\"/mnt/media/Videos/youtube-dl/youtube-dl\"\r\nDRYRUN=\"echo DEBUG: \"\r\nmaxlength=7200 # two hours\r\nskipcrap=\"fail |react |live |Best Pets|BLOOPERS|Kids Try\"\r\n</pre>\r\n\r\n<p>\r\nAfter some checks and cleanup, we can then parse the <a href=\"https://en.wikipedia.org/wiki/OPML\">opml</a> file. This is an example of the top of mine.\r\n</p>\r\n<pre>\r\n&lt;?xml version=\"1.0\"?&gt;\r\n&lt;opml version=\"1.1\"&gt;\r\n  &lt;body&gt;\r\n    &lt;outline text=\"YouTube Subscriptions\" title=\"YouTube Subscriptions\"&gt;\r\n      &lt;outline text=\"Wintergatan\" title=\"Wintergatan\" type=\"rss\" xmlUrl=\"https://www.youtube.com/feeds/videos.xml?channel_id=UCcXhhVwCT6_WqjkEniejRJQ\"/&gt;\r\n      &lt;outline text=\"Primitive Technology\" title=\"Primitive Technology\" type=\"rss\" xmlUrl=\"https://www.youtube.com/feeds/videos.xml?channel_id=UCAL3JXZSzSm8AlZyD3nQdBA\"/&gt;\r\n      &lt;outline text=\"John Ward\" title=\"John Ward\" type=\"rss\" xmlUrl=\"https://www.youtube.com/feeds/videos.xml?channel_id=UC2uFFhnMKyF82UY2TbXRaNg\"/&gt;\r\n</pre>\r\n\r\n<p>\r\nNow we use the xmlstarlet tool to extract each of the urls and also the title. The title is just used to give some feedback, while the url needs to be stored for later. Now we have a complete list of all the current urls, in all the feeds. \r\n</p>\r\n<pre>\r\nxmlstarlet sel -T -t -m \'/opml/body/outline/outline\' -v \'concat( @xmlUrl, \" \", @title)\' -n \"${subscriptions}\" | while read subscription title\r\ndo\r\n  echo \"Getting \"${title}\"\"\r\n  wget -q \"${subscription}\" -O - | xmlstarlet sel -T -t -m \'/_:feed/_:entry/media:group/media:content\' -v \'@url\' -n - | awk -F \'?\' \'{print $1}\'  >> \"${logfile}_getlist\"\r\ndone\r\n</pre>\r\n\r\n<p>\r\nThe main part of the script then counts the total so we can have some feedback while we are running it. It then pumps the list from the previous step into a loop which first checks to make sure we have not already downloaded it.\r\n</p>\r\n<pre>\r\ncount=1\r\ntotal=$( sort \"${logfile}_getlist\" | uniq | wc -l )\r\n\r\nsort \"${logfile}_getlist\" | uniq | while read thisvideo\r\ndo \r\n  if [ \"$( grep \"${thisvideo}\" \"${logfile}\" | wc -l )\" -eq 0 ];\r\n  then\r\n</pre>\r\n<p>\r\nThe next part takes advantage of the <strong>youtube-dl --dump-json</strong> command which downloads all sorts of information about the video which we store to query later.\r\n</p>\r\n<pre>\r\n    metadata=\"$( ${youtubedl} --dump-json ${thisvideo} )\"\r\n    uploader=\"$( echo $metadata | jq \'.uploader\' | awk -F \'\"\' \'{print $2}\' )\"\r\n    title=\"$( echo $metadata | jq \'.title\' | awk -F \'\"\' \'{print $2}\' )\"\r\n    upload_date=\"$( echo $metadata | jq \'.upload_date\' | awk -F \'\"\' \'{print $2}\' )\"\r\n    id=\"$( echo $metadata | jq \'.id\' | awk -F \'\"\' \'{print $2}\' )\"\r\n    duration=\"$( echo $metadata | jq \'.duration\' )\"\r\n</pre>\r\n<p>\r\nHaving the duration, we can skip long episodes.\r\n</p>\r\n<pre>\r\n\r\n    if [[ -z ${duration} || ${duration} -le 0 ]]\r\n    then\r\n      echo -e \"nError: The duration \"${length}\" is strange. \"${thisvideo}\".\"\r\n      continue\r\n    elif [[ ${duration} -ge ${maxlength} ]]\r\n    then\r\n      echo -e \"nFilter: You told me not to download titles over ${maxlength} seconds long \"${title}\", \"${thisvideo}\"\"\r\n      continue\r\n    fi\r\n</pre>\r\n<p>\r\nOr videos that don\'t interest us.\r\n</p>\r\n<pre>\r\n\r\n    if [[ ! -z \"${skipcrap}\" &amp;&amp; $( echo ${title} | egrep -i \"${skipcrap}\" | wc -l ) -ne 0 ]]\r\n    then\r\n      echo -e \"nSkipping: You told me not to download this stuff. ${uploader}: \"${title}\", \"${thisvideo}\"\"\r\n      continue\r\n    else\r\n      echo -e \"n${uploader}: \"${title}\", \"${thisvideo}\"\"\r\n    fi\r\n</pre>\r\n<p>\r\nNow we have a filtered list of urls we do want to keep. These we also save the description in a text file with the video id if we want to refer to it later. \r\n</p>\r\n<pre>\r\n    echo ${thisvideo} &gt;&gt; \"${logfile}_todo\"\r\n    echo -e $( echo $metadata | jq \'.description\' ) &gt; \"${savepath}/description/${id}.txt\"\r\n  else\r\n    echo -ne \"rProcessing ${count} of ${total}\"\r\n  fi\r\n  count=$((count+1))\r\ndone\r\necho \"\"\r\n</pre>\r\n<p>\r\nAnd finally we download the actual videos saving each channel in its own directory. The file names is first an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO8601</a> date, then the title stored as ASCII with no space or ampersands. I then use a \"⋄\" as a delimiter before the video id.\r\n</p>\r\n<pre>\r\n\r\n# Download the list\r\nif [ -e \"${logfile}_todo\" ];\r\nthen\r\n  cat \"${logfile}_todo\" | ${youtubedl} --batch-file - --ignore-errors --no-mtime --restrict-filenames --format mp4 -o \"${savepath}\"\'/%(uploader)s/%(upload_date)s-%(title)s⋄%(id)s.%(ext)s\'\r\n  cat \"${logfile}_todo\" &gt;&gt; ${logfile}\r\nfi\r\n</pre>\r\n<p>\r\nNow you have a fast script that keeps you up to date with your feeds.\r\n</p>\r\n',30,0,1,'CC-BY-SA','youtube, youtube-dl, channels, playlists, xmlstarlet',0,0,1),
(2693,'2018-11-28','Getting started with web based game in Haskell and Elm',1146,'First steps in writing 4x space exploration game','<p>Haskell Stack: <a href=\"https://docs.haskellstack.org/en/stable/README/\">https://docs.haskellstack.org/en/stable/README/</a></p>\r\n<p>Stack is a build tool for Haskell with focus on reproducible build plans, multi-package projects, and a consistent, easy-to-learn interface. With stack, one can create new project: <kbd>stack new my-project yesod-sqlite</kbd> (more in the quick start guide: <a href=\"https://www.yesodweb.com/page/quickstart\">https://www.yesodweb.com/page/quickstart</a>)</p>\r\n\r\n<p><a href=\"https://github.com/Tuula/deep-sky/blob/baa0807dd36b61fd02174b17c10013862af4ec18/config/models\">models</a> is used to define shape of the data and Yesod uses it to generate datatypes and database for you. For example, to define a Star that has name, spectral type, luminosity class and link to StarSystem, one can write:</p>\r\n\r\n<pre><code>\r\nStar json\r\n    name Text\r\n    starSystemId StarSystemId\r\n    spectralType SpectralType\r\n    luminosityClass LuminosityClass\r\n</code></pre>\r\n\r\n<p>Custom types, like LuminosityClass, need mapping between datatype and database. In simple cases like this, Yesod can do that:\r\n\r\n<pre><code>\r\ndata LuminosityClass = Iap | Ia | Iab | Ib | II | III | IV | V | VI | VII\r\n    deriving (Show, Read, Eq)\r\nderivePersistField \"LuminosityClass\"\r\n</code></pre>\r\n\r\n<p>The \"derivePersistField\" part is template haskell call that will generate mapping needed.</p>\r\n\r\n<p>For those interested seeing some code, source is available at <a href=\"https://github.com/Tuula/deep-sky/\">https://github.com/Tuula/deep-sky/</a> (<a href=\"https://github.com/Tuula/deep-sky/tree/baa0807dd36b61fd02174b17c10013862af4ec18\">https://github.com/Tuula/deep-sky/tree/baa0807dd36b61fd02174b17c10013862af4ec18</a> is situation before lots of Elm related changes that I mentioned in passing in the episode)</p>\r\n\r\n',364,107,0,'CC-BY-SA','haskell, yesod',0,0,1),
(2703,'2018-12-12','Fog of war in Yesod based game',1515,'How to implement fog of war system in turn based web game','<p>Duality of the universe: there\'s true state of the universe used in simulation and there\'s state the the players perceive. These most likely will always be in conflict. One possible solution is to separate these completely. Perform simulation in one system and record what players see in other.</p>\r\n\r\n<p>For every type of entity in the game, there\'s two sets of data: real and reported. Reports are tied to time and faction. Examples are given for planets. Thus, we have <em>Planet</em>, <em>PlanetReport</em> and <em>CollatedPlanetReport</em>. First is the real entity, second is report of that entity tied in time and faction. Third one is aggregated information a faction has of given entity. In database two first ones are:</p>\r\n\r\n<pre><code>\r\nPlanet json\r\n    name Text\r\n    position Int\r\n    starSystemId StarSystemId\r\n    ownerId FactionId Maybe\r\n    gravity Double\r\n    SystemPosition starSystemId position\r\n    deriving Show\r\n\r\nPlanetReport json\r\n    planetId PlanetId\r\n    ownerId  FactionId Maybe\r\n    starSystemId StarSystemId\r\n    name Text Maybe\r\n    position Int Maybe\r\n    gravity Double Maybe\r\n    factionId FactionId\r\n    date Int\r\n    deriving Show\r\n</code></pre>\r\n<p>Third one is defined as a datatype:</p>\r\n\r\n<pre><code>\r\ndata CollatedPlanetReport = CollatedPlanetReport\r\n    { cprPlanetId :: Key Planet\r\n    , cprSystemId :: Key StarSystem\r\n    , cprOwnerId  :: Maybe (Key Faction)\r\n    , cprName     :: Maybe Text\r\n    , cprPosition :: Maybe Int\r\n    , cprGravity  :: Maybe Double\r\n    , cprDate     :: Int\r\n    } deriving Show\r\n</code></pre>\r\n\r\n<p>Data from database need to be transformed before working on it. Usually it\'s 1:1 mapping, but sometimes it makes sense to enrich it (turning IDs into names for example). For this we use <em>ReportTransform</em> type class:</p>\r\n\r\n<pre><code>\r\n-- | Class to transform a report stored in db to respective collated report\r\nclass ReportTransform a b where\r\n    fromReport :: a -&gt; b\r\n\r\ninstance ReportTransform PlanetReport CollatedPlanetReport where\r\n    fromReport report =\r\n	CollatedPlanetReport (planetReportPlanetId report)\r\n			     (planetReportStarSystemId report)\r\n			     (planetReportOwnerId report)\r\n			     (planetReportName report)\r\n			     (planetReportPosition report)\r\n			     (planetReportGravity report)\r\n			     (planetReportDate report)\r\n</code></pre>\r\n\r\n<p>To easily combine bunch of collated reports together, we define instances\r\n    of <em>semigroup</em> and <em>monoid</em> for collated report data.\r\n    Semigroup defines an associative binary operation (&lt;&gt;) and monoid defines a zero or empty item (mempty). My explanation about Monoid and Semigroup were a bit rambling, so maybe have a look at <a href=\"https://wiki.haskell.org/Monoid\">https://wiki.haskell.org/Monoid</a> which explains it in detail.</p>\r\n\r\n<pre><code>\r\ninstance Semigroup CollatedPlanetReport where\r\n    (&lt;&gt;) a b = CollatedPlanetReport (cprPlanetId a)\r\n				    (cprSystemId a)\r\n				    (cprOwnerId a &lt;|&gt; cprOwnerId b)\r\n				    (cprName a &lt;|&gt; cprName b)\r\n				    (cprPosition a &lt;|&gt; cprPosition b)\r\n				    (cprGravity a &lt;|&gt; cprGravity b)\r\n				    (max (cprDate a) (cprDate b))\r\n\r\ninstance Monoid CollatedPlanetReport where\r\n    mempty = CollatedPlanetReport (toSqlKey 0) (toSqlKey 0) Nothing Nothing Nothing Nothing 0\r\n</code></pre>\r\n\r\n<p>In some cases there might be a list of collated reports that are about different entities of same type (several reports for every planet in solar system). For those cases, we need a way to tell what reports belong together:</p>\r\n\r\n<pre><code>\r\n-- | Class to indicate if two reports are about same entity\r\nclass Grouped a where\r\n    sameGroup :: a -&gt; a -&gt; Bool\r\n\r\ninstance Grouped PlanetReport where\r\n    sameGroup a b =\r\n	planetReportPlanetId a == planetReportPlanetId b\r\n</code></pre>\r\n\r\n<p>After this, processing a list of reports for same entity is short amount of very general code:</p>\r\n\r\n<pre><code>\r\n-- | Combine list of reports and form a single collated report\r\n--   Resulting report will have facts from the possibly partially empty reports\r\n--   If a fact is not present for a given field, Nothing is left there\r\ncollateReport :: (Monoid a, ReportTransform b a) =&gt; [b] -&gt; a\r\ncollateReport reports = mconcat (map fromReport reports)\r\n</code></pre>\r\n\r\n<p>For reports of multiple entities is bit more complex, as they need to be sorted first, but the code is similarly general:</p>\r\n\r\n<pre><code>\r\n-- | Combine list of reports and form a list of collated reports\r\n--   Each reported entity is given their own report\r\ncollateReports :: (Grouped b, Monoid a, ReportTransform b a) =&gt; [b] -&gt; [a]\r\ncollateReports [] = []\r\ncollateReports s@(x:_) = collateReport itemsOfKind : collateReports restOfItems\r\n    where split = span (sameGroup x) s\r\n	  itemsOfKind = fst split\r\n	  restOfItems = snd split\r\n</code></pre>\r\n\r\n<p>Final step is to either render reports as HTML or send them as JSON back to client. For JSON case we need one more type class instance (ToJSON) that can be automatically generated. After that handler function can be defined. After authenticating the user and checking that they are member of a faction, reports of specific planet (defined by its primary key) are retrieved from database, collated, turned into JSON and sent back to client:</p>\r\n\r\n<pre><code>\r\n$(deriveJSON defaultOptions {fieldLabelModifier = drop 3} \'\'CollatedPlanetReport)\r\n\r\ngetApiPlanetR :: Key Planet -&gt; Handler Value\r\ngetApiPlanetR planetId = do\r\n    (_, _, fId) &lt;- apiRequireFaction\r\n    loadedPlanetReports &lt;- runDB $ selectList [ PlanetReportPlanetId ==. planetId\r\n					      , PlanetReportFactionId ==. fId ] [ Asc PlanetReportDate ]\r\n    let planetReport = collateReport $ map entityVal loadedPlanetReports :: CollatedPlanetReport\r\n    return $ toJSON planetReport\r\n</code></pre>\r\n\r\n<p>For those interested seeing some code, source is available at <a href=\"https://github.com/Tuula/deep-sky/\">https://github.com/Tuula/deep-sky/</a> (<a href=\"https://github.com/Tuula/deep-sky/tree/baa0807dd36b61fd02174b17c10013862af4ec18\">https://github.com/Tuula/deep-sky/tree/baa0807dd36b61fd02174b17c10013862af4ec18</a> is situation before lots of Elm related changes that I mentioned in passing in the previous episode)</p>\r\n\r\n',364,107,0,'CC-BY-SA','haskell, yesod',0,0,1),
(2692,'2018-11-27','YouTube URL tricks',436,'URL tricks for YouTube to enhance viewing experience and an overview of my viewing methodology','<h2>YouTube URL Tricks by Desearcher</h2>\r\n<br/><table><tr><th>Recommended Episode</th></tr><tr><td><a href=\"https://hackerpublicradio.org/eps.php?id=2675\">YouTube Playlists</a> by <a href=\"https://hackerpublicradio.org/correspondents/0198.html\">Ahuka</a></td></tr></table>\r\n<br/><table><tr><th colspan=\"2\">User Upload playlist</th></tr><tr><td>BEFORE</td><td><code>https://www.youtube.com/channel/UCAL3JXZSzSm8AlZyD3nQdBA</code></td></tr><tr><td>AFTER</td><td><code>https://www.youtube.com/playlist?list=UUAL3JXZSzSm8AlZyD3nQdBA</code></td></tr></table>\r\n<br/><table><tr><th colspan=\"2\">Embeded Player</th></tr><tr><td>BEFORE</td><td><code>https://www.youtube.com/playlist?list=UUAL3JXZSzSm8AlZyD3nQdBA</code></td></tr><tr><td>AFTER</td><td><code>https://www.youtube.com/embed?list=UUAL3JXZSzSm8AlZyD3nQdBA</code></td></tr></table>\r\n<br/><table><tr><th colspan=\"2\">Watch Later</th></tr><tr><td>NORMAL</td><td><code>https://www.youtube.com/playlist?list=WL</code></td></tr><tr><td>EMBED</td><td><code>https://www.youtube.com/embed?list=WL</code></td></tr></table>\r\n<br/><table><tr><th>Show \"Remove Watched\" Button in Watch Later queue</th></tr><tr><td><code>https://www.youtube.com/playlist?list=WL&amp;disable_polymer=true</code></td></tr></table>\r\n<br/><table><tr><th colspan=\"2\">Chrome App trick to maximize viewing area</th></tr><tr><td>Watch Later</td><td><code>chrome -app=\"https://www.youtube.com/embed?list=WL\"</code></td></tr><tr><td>Playlist</td><td><code>chrome -app=\"https://www.youtube.com/embed?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr\"</code></td></tr></table>\r\n<br/><table><tr><th>Play On TV</th></tr><tr><td><code>https://www.youtube.com/pair</code></td></tr></table>\r\n<br/><table><tr><th>TCL Roku TV</th></tr><tr><td><a href=\"https://www.roku.com/products/finder/roku-tv\">Roku Product List</a></td></tr></table>\r\n',371,0,0,'CC-BY-SA','YouTube,URL,Chrome,Roku,Smart TV',0,0,1),
(2709,'2018-12-20','Bash Tips - 16',1440,'Arrays in Bash (part 1)','<h1 id=\"bash-tips---16\">Bash Tips - 16 <small><small>(Further auxiliary Bash tips)</small></small></h1>\r\n<h2 id=\"arrays-in-bash\">Arrays in Bash</h2>\r\n<p>This is the first of a small group of shows on the subject of arrays in Bash. It is also the sixteenth show in the <em>Bash Tips</em> sub-series.</p>\r\n<p>We have encountered Bash arrays at various points throughout this sub-series, and have even seen a number of examples, but the subject has never been examined in detail. This group of shows intends to make good this deficiency.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2709/full_shownotes.html\">viewed here</a>.</p>\r\n<h2>Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Arrays\">“Bash Arrays”</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Linux Documentation Project: <a href=\"https://www.tldp.org/LDP/abs/html/index.html\">Advanced Bash-Scripting Guide</a>\r\n<ul>\r\n<li><a href=\"https://www.tldp.org/LDP/abs/html/arrays.html\">Chapter 27: Arrays</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 “<em>Extra ancillary Bash tips - 13</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2689\">HPR episode 2689 “<em>Bash Tips - 14 (Some auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2699\">HPR episode 2699 “<em>Bash Tips - 15 (More auxiliary Bash tips)</em>”</a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2709/bash16_ex1.sh\">bash16_ex1.sh</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,array,indexed array,associative array',0,0,1),
(2713,'2018-12-26','Resources in 4x game',1252,'One way to implement data types for raw resources in Haskell','<p>Raw resources are integral part for most 4x games. Here’s one way of modeling them in Haskell. I wanted a system that is easy to use, doesn’t require too much typing and is type safe.</p>\r\n<p>RawResource is basic building block:</p>\r\n<pre><code>newtype RawResource a = RawResource { unRawResource :: Int }\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>It can be parametrised with anything, but I’m using three different types:</p>\r\n<pre><code>data Biological = Biological\r\ndata Mechanical = Mechanical\r\ndata Chemical = Chemical</code></pre>\r\n<p>Example of defining harvest being 100 units of biological raw resources:</p>\r\n<pre><code>  harvest :: RawResource Biological\r\n  harvest = RawResource 100</code></pre>\r\n<p>Raw resources are often manipulated (added and subtracted mostly). Defining Num instance allows us to use them as numbers:</p>\r\n<pre><code>instance Num (RawResource t) where\r\n    (+) (RawResource a) (RawResource b) = RawResource $ a + b\r\n    (-) (RawResource a) (RawResource b) = RawResource $ a - b\r\n    (*) (RawResource a) (RawResource b) = RawResource $ a * b\r\n    abs (RawResource a) = RawResource $ abs a\r\n    signum (RawResource a) = RawResource $ signum a\r\n    fromInteger a = RawResource $ fromInteger a</code></pre>\r\n<p>For example, adding harvest to stock pile:</p>\r\n<pre><code>  stock :: RawResource Biological\r\n  stock = RawResource 1000\r\n\r\n  harvest :: RawResource Biological\r\n  harvest = RawResource 100\r\n\r\n  newStock = stock + harvest</code></pre>\r\n<p>Comparing size of two resource piles is common operation. Ord instance has methods we need for comparing:</p>\r\n<pre><code>instance Ord (RawResource t) where\r\n    (&lt;=) (RawResource a) (RawResource b) = a &lt;= b</code></pre>\r\n<p>One function is enough, as rest is defined in terms of it. Sometimes (usually for reasons of optimization), one might want to define other functions too.</p>\r\n<p>Another way to add bunch of resources of same type together is defining Monoid instance:</p>\r\n<pre><code>instance Semigroup (RawResource t) where\r\n    (&lt;&gt;) a b = a + b\r\n\r\ninstance Monoid (RawResource t) where\r\n    mempty = RawResource 0</code></pre>\r\n<p>For example, combining harvests of many fields can be achieved as:</p>\r\n<pre><code>  harvests :: [RawResource Biological]\r\n  harvests = [RawResource 20, RawResource 50, RawResource 25]\r\n\r\n  total :: RawResource Biological\r\n  total = mappend harvests</code></pre>\r\n<p>All these functions keep track of type of resources being manipulated. Compiler will emit an error if two different types of resources are being mixed together.</p>\r\n<p>Raw resources are often grouped together for specific purpose. This again uses phantom types to keep track the intended usage:</p>\r\n<pre><code>data RawResources a = RawResources\r\n    { ccdMechanicalCost :: RawResource Mechanical\r\n    , ccdBiologicalCost :: RawResource Biological\r\n    , ccdChemicalCost :: RawResource Chemical\r\n    } deriving (Show, Read, Eq)\r\n\r\ndata ResourceCost = ResourceCost\r\ndata ConstructionSpeed = ConstructionSpeed\r\ndata ConstructionLeft = ConstructionLeft\r\ndata ConstructionDone = ConstructionDone\r\ndata ResourcesAvailable = ResourcesAvailable</code></pre>\r\n<p>And in order to be able to combine piles of RawResources, we’ll define Semigroup and Monoid instances. Notice how both instances make use of Semigroup and Monoid instances of RawResource:</p>\r\n<pre><code>instance Semigroup (RawResources t) where\r\n    (&lt;&gt;) a b = RawResources\r\n        { ccdMechanicalCost = ccdMechanicalCost a &lt;&gt; ccdMechanicalCost b\r\n        , ccdBiologicalCost = ccdBiologicalCost a &lt;&gt; ccdBiologicalCost b\r\n        , ccdChemicalCost = ccdChemicalCost a &lt;&gt; ccdChemicalCost b\r\n        }\r\n\r\ninstance Monoid (RawResources t) where\r\n    mempty = RawResources\r\n        { ccdMechanicalCost = mempty\r\n        , ccdBiologicalCost = mempty\r\n        , ccdChemicalCost = mempty\r\n        }</code></pre>\r\n<p>For those interested seeing some code, source is available at <a href=\"https://github.com/Tuula/deep-sky/\" class=\"uri\">https://github.com/Tuula/deep-sky/</a> (<a href=\"https://github.com/Tuula/deep-sky/tree/baa0807dd36b61fd02174b17c10013862af4ec18\" class=\"uri\">https://github.com/Tuula/deep-sky/tree/baa0807dd36b61fd02174b17c10013862af4ec18</a> is situation before lots of Elm related changes that I mentioned in passing in the previous episode)</p>\r\n',364,107,0,'CC-BY-SA','haskell',0,0,1),
(2719,'2019-01-03','Bash Tips - 17',2056,'Arrays in Bash (part 2)','<h1 id=\"bash-tips---17\">Bash Tips - 17 <small><small>(Additional auxiliary Bash tips)</small></small></h1>\r\n<h2 id=\"arrays-in-bash\">Arrays in Bash</h2>\r\n<p>This is the second of a small group of shows on the subject of arrays in Bash. It is also the seventeenth show in the <em>Bash Tips</em> sub-series.</p>\r\n<p>In the last show we saw the two types of arrays, and learned about the multiple ways of creating them and populating them. We also looked at how array elements and entire arrays are accessed.</p>\r\n<p>Now we want to continue looking at array access and some of the various parameter expansion operations available.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2719/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Arrays\">“Bash Arrays”</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Linux Documentation Project: <a href=\"https://www.tldp.org/LDP/abs/html/index.html\">Advanced Bash-Scripting Guide</a>\r\n<ul>\r\n<li><a href=\"https://www.tldp.org/LDP/abs/html/arrays.html\">Chapter 27: Arrays</a></li>\r\n</ul></li>\r\n<li><p>Wikipedia article entitled <a href=\"https://en.wikipedia.org/wiki/Fibonacci_number\">“<em>Fibonacci Number</em>”</a></p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 “<em>Extra ancillary Bash tips - 13</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2689\">HPR episode 2689 “<em>Bash Tips - 14 (Some auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2699\">HPR episode 2699 “<em>Bash Tips - 15 (More auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2709\">HPR episode 2709 “<em>Bash Tips - 16 (Further auxiliary Bash tips)</em>”</a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2719/bash17_ex1.sh\">bash17_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2719/bash17_ex2.sh\">bash17_ex2.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2719/bash17_ex3.sh\">bash17_ex3.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2719/bash17_ex4.sh\">bash17_ex4.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2719/bash17_ex5.sh\">bash17_ex5.sh</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,array,indexed array,associative array',0,0,1),
(2694,'2018-11-29','Bandit Update',699,'NYbill does a quick episode to mention there are new Over the Wire, Bandit levels out.','<p>(No Spoilers)</p>\r\n<p>NYbill does a quick episode to mention there are new Over the Wire, Bandit levels out.</p>\r\n<p><a href=\"https://overthewire.org/wargames/bandit/bandit0.html\" class=\"uri\">https://overthewire.org/wargames/bandit/bandit0.html</a></p>\r\n<p>Original Episode:</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=2138\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2138</a></p>\r\n',235,0,0,'CC-BY-SA','Hacking, War games, Linux',0,0,1),
(2697,'2018-12-04','The Linux Shutdown Command Explained',402,'A short pod cast about the linux shutdown command','<p>\r\nA short podcast about the shutdown command \r\n</p>\r\n<p>\r\n<a href=\"https://linuxhandbook.com/linux-shutdown-command/\">https://linuxhandbook.com/linux-shutdown-command/</a>\r\n</p>',129,0,0,'CC-BY-SA','Linux,shutdown',0,0,1),
(2698,'2018-12-05','XSV for fast CSV manipulations - Part 1',1837,'Written in Rust, xsv is my new favorite tool for manipulating csv files','<h1 id=\"xsv-for-fast-csv-manipulations---part-1-basic-usage\">XSV for fast CSV manipulations - Part 1: Basic Usage</h1>\r\n<blockquote>\r\n<p><a href=\"https://github.com/BurntSushi/xsv\" class=\"uri\">https://github.com/BurntSushi/xsv</a></p>\r\n</blockquote>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>xsv is a command line program for indexing, slicing, analyzing, splitting and joining CSV files. Commands should be simple, fast and composable:</p>\r\n<ol>\r\n<li>Simple tasks should be easy.</li>\r\n<li>Performance trade offs should be exposed in the CLI interface.</li>\r\n<li>Composition should not come at the expense of performance.</li>\r\n</ol>\r\n<p>We will be using the CSV file provided in the <a href=\"https://burntsushi.net/stuff/worldcitiespop.csv\">documentation</a>.</p>\r\n<h2 id=\"commands-covered-in-this-episode\">Commands covered in this episode</h2>\r\n<ul>\r\n<li>count - Count the rows of CSV data</li>\r\n<li>headers - Show the headers of CSV data, or show the intersection of all headers between many CSV files</li>\r\n<li>index - Create an index for a CSV file. This is very quick and provides constant time indexing into the CSV file.</li>\r\n<li>frequency - Build frequency tables of each column in CSV data.</li>\r\n<li>stats - Show basic types and statistics of each column in the CSV file. (i.e., mean, standard deviation, median, range, etc.)</li>\r\n<li>sort - Sort CSV data</li>\r\n<li>select - Select or re-order columns from CSV data.</li>\r\n<li>slice - Slice rows from any part of a CSV file. When an index is present, this only has to parse the rows in the slice (instead of all rows leading up to the start of the slice).</li>\r\n<li>search - Run a regex over CSV data. Applies the regex to each field individually and shows only matching rows.</li>\r\n<li>table - Show aligned output of any CSV data using elastic tabstops.</li>\r\n<li>flatten - A flattened view of CSV records. Useful for viewing one record at a time.</li>\r\n</ul>\r\n',300,0,0,'CC-BY-SA','CSV,XSV',0,0,1),
(2700,'2018-12-07','Episode 3000',26830,'We commemorate the 300 Today with a Techie and 2700 Hacker Public Radio shows','<p>\r\nOn the 19th of September 2005 a group of individuals got together to release their first show on the podcast network \"Today with a Techie\".\r\n</p>\r\n<p>\r\nThe idea was to share knowledge through podcasting. Now 13 years, 2 months, 19 days later the project is still going strong, and you dear listener are a part of it.\r\n</p>\r\n<p>\r\nToday marks the 2700th episode of \"Hacker Public Radio\" and coupled with the 300 shows from \"Today with a Techie\", marks the 3000th episode of this project.\r\n</p>\r\n<p>\r\nA big thanks goes out to all 354 individual hosts who together contributed 1452 hours of shows to the archive. \r\n</p>\r\n<p>\r\nThere is about 50 giga bytes of mp3 files alone. \r\n</p>\r\n<p>\r\nWhich played back to back gives 60 days 11 hours 40 minutes 21 seconds of continuous play. \r\n</p>\r\n<p>\r\nIf you started listening today and played the shows 24 x 7 you wouldn\'t be finished listening until Monday, February 5th, 2019.\r\n</p>\r\n<p>\r\nOf course by then there would be 39 additional shows released, so you still wouldn\'t be finished.\r\n</p>\r\n<p>\r\nDespite all this we still don\'t have a wikipedia page. If you can, please take the time to create one for us. There is plenty of supporting information in the \"In the Press\" section of our about page.\r\n</p>\r\n<p>\r\nSo to mark the 3000th episode we are going to do nothing more than list the shows, host and summary where available.\r\n</p>\r\n<p>\r\nJust doing that alone creates a whopping 7 and a half hour episode. \r\n</p>\r\n<p>\r\nAre you l33t enough to listen to it all ?\r\n</p>\r\n<p>\r\nLet\'s go.\r\n</p>',30,0,0,'CC-BY-SA','TWaT, HPR, 3000',0,0,1),
(2701,'2018-12-10','First impressions of the Odroid-go',1926,'I ramble on about my first impressions of the odroid-go','<p>I ramble on about my impressions of the Odroid-go, a 32 USD handheld system similar to a gameboy built to run game system emulators and various other free software. It’s also built to be harcked.</p>\r\n<p><a href=\"https://wiki.odroid.com/odroid_go/odroid_go\" class=\"uri\">https://wiki.odroid.com/odroid_go/odroid_go</a></p>\r\n<p>The summary is this is an easy to put together kit requiring no soldering, and runs classic console emulators pretty well. Well worth the 32 USD plus shipping in my opinion. Claims 10 hours of game play and that seems about right so far for me.</p>\r\n<p>The systems emulated out of the box are:</p>\r\n<p>NES, Game Gear, Gameboy, Gameboy Color, Sega Master System, ColecoVision. Other systems of similar or earlier vintages have emulators that you have to install separately and boot into to run. I don’t think it will emulate newer systems. No Gameboy Advance emulator and I don’t see a Mame emulator. However, I do think this ‘might’ support Mame for some of the early arcade games like Asteroids and Space Invaders.</p>',151,103,0,'CC-0','Odroid-go',0,0,1),
(2702,'2018-12-11','Audacity set up and response to episode 2658',107,'Just a quick response to Ep2658','<p>Hi Guys and Girls in HPR land.</p>\r\n<p>This is Tony Hughes in Blackpool in the UK back for another show. I normally talk about my own stuff but while it is related to what I have been doing lately this is a response to Al’s interview with Dave in Episode 2658 and how to setup Audacity to record and edit audio for best sound quality when podcasting.</p>\r\n<p>I’ve recently joined the mintCast podcast team and have been editing and doing the post production of the audio recording for the last couple of episodes. The information that Dave provided during the show was invaluable in helping me in this task, I also have to give a shout out to Rob the previous host who also spent an hour and a half giving a tutorial on his post production work flow, but the additional information given by Dave in this show was also a big help.</p>\r\n<p>I’ve now purchased a boom arm and pop filter for my mic to reduce any artefacts in the recording although as it is still attached to my desk I think I may need to invest in a shock mount although I’m not sure how it will attach to my current Boom arm. Ah well that’s a problem for another day.</p>\r\n<p>As I said this was just a shout out to Al and Dave to say thanks for the show and I will save it for another day to do a show on my new post production work flow on the mintCast audio.</p>\r\n<p>This is Tony Hughes saying goodbye for now.</p>\r\n<p><a href=\"https://mintcast.org/about-the-authors/tonyh/\" class=\"uri\">https://mintcast.org/about-the-authors/tonyh/</a><br />\r\n<a href=\"mailto:th@mintcast.org\">th@mintcast.org</a></p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=2658\">https://hackerpublicradio.org/eps.php?id=2658</a></p>',338,0,0,'CC-BY-SA','audio,Audacity',0,0,1),
(2715,'2018-12-28','About ONAP',618,'The Linux foundations ONAP project all about it','<p>So I went to the open networking trade show sponsored by the Linux Foundation with Ken Fallon’s help.</p>\r\n<p>The first thing they talked about was ONAP.</p>\r\n<p><a href=\"https://www.onap.org/\" class=\"uri\">https://www.onap.org/</a><br />\r\n<a href=\"https://en.wikipedia.org/wiki/ONAP\" class=\"uri\">https://en.wikipedia.org/wiki/ONAP</a></p>\r\n',129,61,1,'CC-BY-SA','Networking,ONAP,Open Networking Automation Platform',0,0,1),
(2722,'2019-01-08','RAID 6 a short description',150,'How Raid 6 works','<p>Raid 6 is a take of raid 5 but with support for 2 drive protection.</p>',129,0,1,'CC-BY-SA','Raid6',0,0,1),
(2742,'2019-02-05','SAP Hana Certification Directory',1085,'How the SAP Hana certification works','<p>SAP Hana certification is a long and hard process covered at<br />\r\n<a href=\"https://www.sap.com/dmc/exp/2014-09-02-hana-hardware/enEN/index.html\" class=\"uri\">https://www.sap.com/dmc/exp/2014-09-02-hana-hardware/enEN/index.html</a></p>',129,0,0,'CC-BY-SA','SAP HANA,certification',0,0,1),
(3001,'2020-02-03','HPR Community News for January 2020',2649,'HPR Volunteers Dave and Ken talk about shows released and comments posted in January 2020','<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=2978\" target=\"_blank\">2978</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-01-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2978\" target=\"_blank\">GARAGE DOOR</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=2979\" target=\"_blank\">2979</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-01-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2979\" target=\"_blank\">Bicycle Freewheel Maintenance</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2980\" target=\"_blank\">2980</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-01-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2980\" target=\"_blank\">FLOSS Weekly 553 - Hacker Public Radio</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=2981\" target=\"_blank\">2981</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-01-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2981\" target=\"_blank\">HPR Community News for December 2019</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=2982\" target=\"_blank\">2982</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-01-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2982\" target=\"_blank\">World of Commodore 2019 Episode 4: Bare metal c64 Emulation on Raspberry Pi</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=2983\" target=\"_blank\">2983</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-01-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2983\" target=\"_blank\">my phone</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=2984\" target=\"_blank\">2984</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-01-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2984\" target=\"_blank\">RHEL 8 Workstation first looks </a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2985\" target=\"_blank\">2985</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-01-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2985\" target=\"_blank\">Firefox Update</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=2986\" target=\"_blank\">2986</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-01-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2986\" target=\"_blank\">Onlykey Updated</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=2987\" target=\"_blank\">2987</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-01-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2987\" target=\"_blank\">World of Commodore 2019 Episode 5: New games from Double Sided Games</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=2988\" target=\"_blank\">2988</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-01-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2988\" target=\"_blank\">A tale of two hackers in the same system</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0115.html\" target=\"_blank\">sigflup</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2989\" target=\"_blank\">2989</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-01-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2989\" target=\"_blank\">Hacker Public Radio 2019-20 New Year Show Episode 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2990\" target=\"_blank\">2990</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-01-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2990\" target=\"_blank\">JDK14 - Wrap up edition</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=2991\" target=\"_blank\">2991</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-01-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2991\" target=\"_blank\">Fix yer fog machine</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=2992\" target=\"_blank\">2992</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-01-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2992\" target=\"_blank\">World of Commodore 2019 Episode 6: Introduction to C64 OS</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=2993\" target=\"_blank\">2993</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-01-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2993\" target=\"_blank\">Hacker Public Radio 2019-20 New Year Show Episode 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2994\" target=\"_blank\">2994</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-01-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2994\" target=\"_blank\">Wrestling As You Like It Episode 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0354.html\" target=\"_blank\">TheDUDE</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2995\" target=\"_blank\">2995</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-01-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2995\" target=\"_blank\">ActivityPub Conference 2019 - ActivityPub: past, present, future</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=2996\" target=\"_blank\">2996</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-01-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2996\" target=\"_blank\">Spideroak Update</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=2997\" target=\"_blank\">2997</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-01-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2997\" target=\"_blank\">World of Commodore 2019 Episode 7: Video Playback with 1541 Ultimate</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=2998\" target=\"_blank\">2998</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-01-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2998\" target=\"_blank\">Hacker Public Radio 2019-20 New Year Show Episode 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2999\" target=\"_blank\">2999</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-01-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=2999\" target=\"_blank\">SQRL - Secure Quick Reliable Login</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=3000\" target=\"_blank\">3000</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-01-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3000\" target=\"_blank\">Chopin Free project</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0383.html\" target=\"_blank\">Paul Quirk</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 9 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=95#comments\" target=\"_blank\">hpr95</a></strong>\n(2008-05-12) \"<em>Security Wow!</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0086.html\" target=\"_blank\">rowinggolfer</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=95#1\" target=\"_blank\">Comment 1</a>:\npokey on 2020-01-01:\n\"A long overdue thank you.\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 8 comments on 6 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2979#comments\" target=\"_blank\">hpr2979</a></strong>\n(2020-01-02) \"<em>Bicycle Freewheel Maintenance</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2979#1\" target=\"_blank\">Comment 1</a>:\nDave on 2020-01-02:\n\"Like the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2988#comments\" target=\"_blank\">hpr2988</a></strong>\n(2020-01-15) \"<em>A tale of two hackers in the same system</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0115.html\" target=\"_blank\">sigflup</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2988#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2020-01-15:\n\"Welcome Back!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2988#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2020-01-20:\n\"Condolences on behalf of HPR\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2989#comments\" target=\"_blank\">hpr2989</a></strong>\n(2020-01-16) \"<em>Hacker Public Radio 2019-20 New Year Show Episode 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=2989#1\" target=\"_blank\">Comment 1</a>:\nbeian on 2020-01-18:\n\"silence?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=2989#2\" target=\"_blank\">Comment 2</a>:\nbrian on 2020-01-18:\n\"oops\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2991#comments\" target=\"_blank\">hpr2991</a></strong>\n(2020-01-20) \"<em>Fix yer fog machine</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=2991#1\" target=\"_blank\">Comment 1</a>:\nKen on 2020-01-20:\n\"Bigclive\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2992#comments\" target=\"_blank\">hpr2992</a></strong>\n(2020-01-21) \"<em>World of Commodore 2019 Episode 6: Introduction to C64 OS</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=2992#1\" target=\"_blank\">Comment 1</a>:\nGreg Nacu on 2020-01-29:\n\"Thanks for the episode!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3000#comments\" target=\"_blank\">hpr3000</a></strong>\n(2020-01-31) \"<em>Chopin Free project</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=3000#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2020-01-31:\n\"Wow...just, WOW!\"</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/2020-January/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month: <b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 9 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3021,'2020-03-02','HPR Community News for February 2020',3272,'Call for shows is open. Ken and eventually Dave discuss the shows, media and development plans.','<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/0384.html\" target=\"_blank\">monochromec</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=3001\" target=\"_blank\">3001</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-02-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3001\" target=\"_blank\">HPR Community News for January 2020</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=3002\" target=\"_blank\">3002</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-02-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3002\" target=\"_blank\">World of Commodore 2019 Episode 8: Vote of thanks</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=3003\" target=\"_blank\">3003</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-02-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3003\" target=\"_blank\">Hacker Public Radio 2019 2020 New Year Show Episode 4</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3004\" target=\"_blank\">3004</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-02-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3004\" target=\"_blank\">Fixing simple audio problems with Audacity</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=3005\" target=\"_blank\">3005</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-02-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3005\" target=\"_blank\">Is ActivityPub Paving The Way to Web 3.0?</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=3006\" target=\"_blank\">3006</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-02-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3006\" target=\"_blank\">Hijack Auxiliary Input of your car!</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=3007\" target=\"_blank\">3007</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-02-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3007\" target=\"_blank\">Photography 101</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=3008\" target=\"_blank\">3008</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-02-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3008\" target=\"_blank\">Hacker Public Radio 2019-20 New Year Show Episode 5</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3009\" target=\"_blank\">3009</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-02-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3009\" target=\"_blank\">Linux Inlaws S01 E01</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3010\" target=\"_blank\">3010</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-02-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3010\" target=\"_blank\">FOSDEM first impressions</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=3011\" target=\"_blank\">3011</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-02-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3011\" target=\"_blank\">Linux is HARD rant with Intel graphics</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=3012\" target=\"_blank\">3012</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-02-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3012\" target=\"_blank\">Sample episode from Wikipediapodden</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=3013\" target=\"_blank\">3013</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-02-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3013\" target=\"_blank\">Bash Tips - 21</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=3014\" target=\"_blank\">3014</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-02-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3014\" target=\"_blank\">A Headless Raspberry Pi Streaming Radio</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3015\" target=\"_blank\">3015</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-02-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3015\" target=\"_blank\">ActivityPub Conference 2019 - The Semantic Social Network</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=3016\" target=\"_blank\">3016</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-02-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3016\" target=\"_blank\">Nixie tube clock and friends!</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=3017\" target=\"_blank\">3017</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-02-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3017\" target=\"_blank\">Developing Black and White Film</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=3018\" target=\"_blank\">3018</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-02-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3018\" target=\"_blank\">Encrypted edit</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=3019\" target=\"_blank\">3019</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-02-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3019\" target=\"_blank\">Linux Inlaws S01E02 FOSDEM shenanigans</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3020\" target=\"_blank\">3020</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-02-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3020\" target=\"_blank\">Validating data in Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 16 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 3 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2999#comments\" target=\"_blank\">hpr2999</a></strong>\n(2020-01-30) \"<em>SQRL - Secure Quick Reliable Login</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2999#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2020-02-06:\n\"Great show!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3000#comments\" target=\"_blank\">hpr3000</a></strong>\n(2020-01-31) \"<em>Chopin Free project</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3000#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-02-02:\n\"Great show!\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3000#3\" target=\"_blank\">Comment 3</a>:\nmcnalu on 2020-02-02:\n\"Great!\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 13 comments on 6 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3002#comments\" target=\"_blank\">hpr3002</a></strong>\n(2020-02-04) \"<em>World of Commodore 2019 Episode 8: Vote of thanks</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=3002#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2020-02-18:\n\"Thanks for the series\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3003#comments\" target=\"_blank\">hpr3003</a></strong>\n(2020-02-05) \"<em>Hacker Public Radio 2019 2020 New Year Show Episode 4</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3003#1\" target=\"_blank\">Comment 1</a>:\nfolky on 2020-02-20:\n\"Dark reader\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3008#comments\" target=\"_blank\">hpr3008</a></strong>\n(2020-02-12) \"<em>Hacker Public Radio 2019-20 New Year Show Episode 5</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0265.html\" target=\"_blank\">Kevin Wisher</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3008#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2020-02-26:\n\"These 2 guys should get together more often\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3009#comments\" target=\"_blank\">hpr3009</a></strong>\n(2020-02-13) \"<em>Linux Inlaws S01 E01</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3009#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2020-02-15:\n\"Mailing list Discussion\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3009#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2020-02-15:\n\"Murmer/Mumble\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3009#3\" target=\"_blank\">Comment 3</a>:\nPeter Mortensen on 2020-02-19:\n\"The predecessor?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3009#4\" target=\"_blank\">Comment 4</a>:\nChris on 2020-02-19:\n\"LinuxInlaws\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3013#comments\" target=\"_blank\">hpr3013</a></strong>\n(2020-02-19) \"<em>Bash Tips - 21</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=3013#1\" target=\"_blank\">Comment 1</a>:\ncrvs on 2020-02-24:\n\"So that\'s how you use shebangs!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3013#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2020-02-24:\n\"Writing awk scripts\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3014#comments\" target=\"_blank\">hpr3014</a></strong>\n(2020-02-20) \"<em>A Headless Raspberry Pi Streaming Radio</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3014#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2020-02-20:\n\"Trying this tonight\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3014#2\" target=\"_blank\">Comment 2</a>:\nJon Kulp on 2020-02-20:\n\"Still Streaming with URL Update\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3014#3\" target=\"_blank\">Comment 3</a>:\nb-yeezi on 2020-02-20:\n\"Issue with mpg123\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3014#4\" target=\"_blank\">Comment 4</a>:\nJon Kulp on 2020-02-21:\n\"HTTP not HTTPS\"</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/2020-February/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-February/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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0152.html\">Claudio Miranda</a>, <a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 16 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2707,'2018-12-18','Steganalysis 101',864,'Steganalysis is the process of identifying the presence of, and decrypting, steganography.','<h3 id=\"introduction\">1. Introduction</h3>\r\n<p>Hello and welcome to Hacker Public Radio, I’m Edward Miro and I’ve been a fan of HPR for a while now and really love its collaborative and random nature. It’s always been important for me to support the hacking community. I always take any opportunity to give back to this community who have given me so much throughout the years. I’ve also always subscribed to the idea that the best way to learn something is by teaching and I hope to do a good job for all you listeners. This talk is on mystical art of steganalysis which is the process of identifying the presence of and decrypting (hopefully) steganography.</p>\r\n<h3 id=\"what-is-steganography\">2. What is steganography?</h3>\r\n<p>I’m into hacking, but I’m not a professional hacker. Usually I call myself a hobbyist. I like CTFs, crypto challenges, lots of stuff from Vulnhub or OverTheWire, things like that. I’ll provide some links in the end if anyone is interested, but for those who aren’t familiar a CTF, or Capture The Flag, it’s a kind of game that helps you get better at hacking. These days there are tons of VMs that are setup to be intentionally vulnerable to different techniques or attacks. You load the VM and pretend it’s a server you want to attack and follow your standard hacking protocols. Some are setup to be boot to root challenges where you ‘win’ when you get root and some are setup with flags that you can find hidden in the target worth points. There are in person and online CTFs and they’ve gotten pretty popular with the National Cyber League being a major competition. Some are easy, some are really hard and most have really good write-ups that can teach you so much about INFOSEC, penetration testing and actually let you practice the techniques in a relatively easy and legal way.</p>\r\n<p>Where steganography comes in to this discussion is that it’s an element you sometimes see used in the kinds of challenges I mentioned previously and also in alternate reality games, online recruitment challenges by national agencies/big tech companies and militarys. They are even used in real world espionage and intelligence work or super spooky secret challenges like Cicada 3301.</p>\r\n<p>Simply put steganography (and I’m pasting this straight out of Wikipedia): “is the practice of concealing a file, message, image, or video within another file, message, image, or video”. Steganography is used to hide secrets in plain sight. It’s a way to send a message, without anyone detecting that a message is even being sent.</p>\r\n<p>I’ll give you more examples in the next section, but imagine a letter that has a secret written in invisible ink. Only the sender and receiver should know about the invisible ink and any eavesdroppers should be none the wiser. This simple example has been used by countless prisoners whose mail is routinely read and examined. Terrorists and spies the world over also use steganography and are known to embed messages in an image and post it online. With how many image hosting sites there are, with millions of people posting to them billions of images day in and day out, you can see why steganography can be such a challenge to combat. Before I move on to some more specific examples I want to stress again that I’m not an expert on cryptography or steganography. While researching for this podcast it’s overwhelmingly clear that you could spend your whole career focused on only steganography. This talk is just a primer on the subject and only the tip of the iceberg.</p>\r\n<h3 id=\"examples-also-from-wikipedia-the-great-repository-of-all-knowledge\">3. Examples (also from Wikipedia, the great repository of all knowledge)</h3>\r\n<ul>\r\n<li>Analog:\r\n<ul>\r\n<li>Head shaving</li>\r\n<li>Invisible ink</li>\r\n<li>Knots tied into ropes</li>\r\n<li>Messages hidden under stamps on envelopes</li>\r\n<li>Mixed typeface</li>\r\n<li>Using a grille cipher</li>\r\n<li>Sending messages via newspaper classifieds</li>\r\n</ul></li>\r\n<li>Digital:\r\n<ul>\r\n<li>Noise in images or sound files</li>\r\n<li>Text commented out in source html or other code</li>\r\n<li>Using different color text</li>\r\n<li>Fractionalized comments</li>\r\n<li>Audio signals/spectro</li>\r\n<li>Hidden control characters and non printing Unicode</li>\r\n</ul></li>\r\n</ul>\r\n<p>The possibilities are almost endless for how this technique can be applied.</p>\r\n<h3 id=\"why-should-we-care\">4. Why should we care?</h3>\r\n<p>When we are doing a CTF or crypto challenge and are presented with an image or media file we are pretty well assured there’s something in there, though not every image you find while doing a challenge or CTF will utilize steganography so don’t overanalyze. I’ve known people who are really into alternate reality games spending 100s of hours doing spectrographic analysis and for our purpose(and the scope of this podcast), there should be some clue that steganography is being used. The challenge then becomes how we direct our work flow as to not waste any time and be the most efficient in cracking that particular part the puzzle. There are MANY stego tools out there, some of them homebrewed, and unless the designer of the challenge puts in a clue, you might spend hours trying different algorithms or tools. And even if you do, there’s no guarantee you’ll get anything at all. A lot of the tools that will be mentioned in the next section rely on fingerprinting how known algorithms process data. This is not only a big problem for hackers like us with our CTFs and games, but even more so for governments who are charged with keeping us safe. So if you’re looking at possible steganography, you need to build a good workflow and I noticed a post on Reddit a few weeks ago with a user asking about image forensics. There was a comment posted that was so good I forwarded it to my hacking friends and it inspired me to do this podcast. I’m using the comment as a potential framework for my own personal work with images and steganography. It helped me to develop my own protocol and I wanted to share it with you all and if anyone wants to expand on it or improve it please do so. Thank you /u/Alexeyan!</p>\r\n<h3 id=\"proposed-work-flow\">5. Proposed work flow</h3>\r\n<p>This is coming straight out of the post on Reddit. I thought about rewriting it, but it didn’t seem necessary and I will be giving the author full credit. I add a couple more tools on at the bottom and a few closing thoughts:</p>\r\n<ul>\r\n<li><p>First: Look at the image. Maybe it tells you something important.</p></li>\r\n<li><p>Use binwalk to check for other file type signatures in the image file.</p></li>\r\n<li><p>Use Exiftool to check for any interesting exif-metadata.</p></li>\r\n<li><p>Use stegsolve and switch through the layers and look for abnormalities.</p></li>\r\n<li><p>Maybe the Flag is painted in the LSB image, or some QR-Code.</p></li>\r\n<li><p>Maybe there are random pixels that look strange in a certain layer, that’s a hint for Bit-Stego.</p></li>\r\n<li><p>Use zsteg to automatically test the most common bitstegos and sort by %ascii-in-results. (This one auto-solves about 50% of all image stego challenges)</p></li>\r\n<li><p>If the file is a png, you can check if the IDAT chunks are all correct and correctly ordered.</p></li>\r\n<li><p>Check with the strings tool for parts of the flag. If you found for example “CTF{W” in a chunk, check what is on that position in other IDAT chunks.</p></li>\r\n<li><p>The harder ones can be a lot more tricky though.. JPG coefficiency manipulation, Frequency analysis, …</p></li>\r\n<li><p>But usually those are frowned upon, because they require a lot of guessing (if no hiding tool is provided)</p></li>\r\n</ul>\r\n<p>Some other go to tools not mentioned above:</p>\r\n<ul>\r\n<li>Stegdetect</li>\r\n<li>DIIT(Digital Invisible Ink Toolkit )</li>\r\n<li>StegSecret</li>\r\n<li>ILook Investigator (for law enforcement)</li>\r\n</ul>\r\n<p>Detecting steganography is hard work. There are computer scientists who do only this. While we aren’t at that level for the information being presented here, it will require a lot of digging and trying different tools. Hopefully following these steps will help identify the more common techniques in an easier way than trial and error.</p>\r\n<p>One last thing I want to mention is that part of how I see detecting steganography in CTFs or cyptochallenges is having a certain mindset and always looking at things in various layers. I try to look at everything within the challenge as if there could be something right in front of my eyes. I mentally flip through different layers and see the codes within the codes. And remember if you’re playing an alternate reality game, a CTF or a crypto challenge, generally speaking, the designers want you to play through the game. They will leave clues if you need them. They want the players to get to the end. Don’t overthink things.</p>\r\n<p>Well that’s all I’ve got for today. I hope you enjoyed this podcast and got something useful out of it. Like I said in the introduction, I’m Edward Miro. Have fun, and good luck!</p>\r\n<h3 id=\"sources\">6. Sources</h3>\r\n<ul>\r\n<li>Steganography basics:\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Steganography\" class=\"uri\">https://en.wikipedia.org/wiki/Steganography</a></li>\r\n<li><a href=\"https://www.wired.com/story/steganography-hacker-lexicon/\" class=\"uri\">https://www.wired.com/story/steganography-hacker-lexicon/</a></li>\r\n<li><a href=\"https://null-byte.wonderhowto.com/how-to/steganography-hide-secret-data-inside-image-audio-file-seconds-0180936/\" class=\"uri\">https://null-byte.wonderhowto.com/how-to/steganography-hide-secret-data-inside-image-audio-file-seconds-0180936/</a></li>\r\n</ul></li>\r\n<li>CTFs\r\n<ul>\r\n<li><a href=\"https://www.nationalcyberleague.org/\" class=\"uri\">https://www.nationalcyberleague.org/</a></li>\r\n<li><a href=\"https://www.vulnhub.com/\" class=\"uri\">https://www.vulnhub.com/</a></li>\r\n<li><a href=\"https://ctf365.com/\" class=\"uri\">https://ctf365.com/</a></li>\r\n</ul></li>\r\n<li>Tools\r\n<ul>\r\n<li><a href=\"https://github.com/ReFirmLabs/binwalk\" class=\"uri\">https://github.com/ReFirmLabs/binwalk</a></li>\r\n<li><a href=\"https://www.sno.phy.queensu.ca/~phil/exiftool/\" class=\"uri\">https://www.sno.phy.queensu.ca/~phil/exiftool/</a></li>\r\n<li><a href=\"https://github.com/zardus/ctf-tools/tree/master/stegsolve\" class=\"uri\">https://github.com/zardus/ctf-tools/tree/master/stegsolve</a></li>\r\n<li><a href=\"https://github.com/zed-0xff/zsteg\" class=\"uri\">https://github.com/zed-0xff/zsteg</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Strings_(Unix)\" class=\"uri\">https://en.wikipedia.org/wiki/Strings_(Unix)</a></li>\r\n<li><a href=\"https://github.com/abeluck/stegdetect\" class=\"uri\">https://github.com/abeluck/stegdetect</a></li>\r\n<li><a href=\"https://diit.sourceforge.net/\" class=\"uri\">https://diit.sourceforge.net/</a></li>\r\n<li><a href=\"https://stegsecret.sourceforge.net/\" class=\"uri\">https://stegsecret.sourceforge.net/</a></li>\r\n<li><a href=\"https://www.ilook-forensics.org/\" class=\"uri\">https://www.ilook-forensics.org/</a></li>\r\n</ul></li>\r\n<li>Detection\r\n<ul>\r\n<li><a href=\"https://web.cs.ucdavis.edu/~davidson/Publications/IAAI103.pdf\" class=\"uri\">https://web.cs.ucdavis.edu/~davidson/Publications/IAAI103.pdf</a></li>\r\n<li><a href=\"https://www.sans.org/reading-room/whitepapers/stenganography/steganalysis-detecting-hidden-information-computer-forensic-analysis-1014\" class=\"uri\">https://www.sans.org/reading-room/whitepapers/stenganography/steganalysis-detecting-hidden-information-computer-forensic-analysis-1014</a></li>\r\n</ul></li>\r\n</ul>\r\n',372,0,0,'CC-BY-SA','Steganalysis, steganography',0,0,1),
(2704,'2018-12-13','Intro to Scribus',2380,'Klaatu provides an overview of Scribus in part 1 of a mini-series about steganography','<p>Scribus is a page layout application. If you are familiar with common publishing industry tools, then Scribus will be very familiar to you, but if you\'re used to word processors or graphic applications, then Scribus will probably confuse you. In this episode, Klaatu talks about the workflow of page layout, and how to do some basic tasks in Scribus.\r\n</p>\r\n\r\n<p>The example files Klaatu produces in Scribus are available at <a href=\"https://slackermedia.info/tank/scribus-by-example.tar.gz\" target=\"_blank\">https://slackermedia.info/tank/scribus-by-example.tar.gz</a></p>\r\n\r\n<p>Fair warning: this episode is actually \"about\" steganography. The key you need is <strong>OGG</strong>.</p>',78,74,0,'CC-BY-SA','design, steganography, scribus, layout',0,0,1),
(2706,'2018-12-17','Why I love the IBM AS/400 computer systems',1714,'A short talk about how I came to love the IBM As/400 systems and why.','<p>This is a talk about my love for the IBM family of AS/400 computer systems.</p>\r\n<p>Although it’s a very hacker unfriendly system there is still much to admire and love.</p>\r\n<p>It’s completely different from anything else which makes it nice but also very likely to disappear in few years from now. To prevent that piece of computing history to vanish I started a small initiative called <a href=\"https://www.as400museum.org/\" class=\"uri\">https://www.as400museum.org/</a>. It’s just me, but it does show my intention with the system.</p>\r\n',369,0,1,'CC-BY-SA','as400, ibm, computing, midrange',0,0,1),
(2708,'2018-12-19','Ghostscript',1351,'Klaatu talks about manipulating PDFs with gs and pdf-stapler','<p>\r\nGhostscript is the open source implementation of Postscript. You can read its <a href=\"https://www.ghostscript.com/doc/current/Use.htm\" target=\"_blank\">docs</a> online.\r\n</p>\r\n\r\n<p>\r\nTo compress a big PDF into something possibly smaller:\r\n</p>\r\n\r\n<pre><code>\r\n$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dBATCH -sOutputFile=output.pdf example.pdf\r\n</code></pre>\r\n\r\n<p>\r\nThat renders basically the same PDF with all images down-res\'d to 72 DPI. Other valid setting profiles are <strong>ebook</strong>, <strong>printer</strong>, and <strong>prepress</strong>.\r\n</p>\r\n\r\n<p>\r\nTo render a version of a PDF without any raster images in it, making it cheaper and faster to print:\r\n</p>\r\n\r\n<pre><code>\r\ngs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dBATCH -dFILTERIMAGE -sOutputFile=output.pdf example.pdf\r\n</code></pre>\r\n\r\n<p>\r\nThe FILTERIMAGE option drops raster images from the file. The <strong>FILTERVECTOR</strong> option filters vector images, and <strong>FILTERTEXT</strong> filters text.\r\n</p>\r\n\r\n<p>\r\nIf <a href=\"https://hackerpublicradio.org/eps.php?id=2667\" target=\"_blank\">pdftk</a> is not available for your OS, you can use <a href=\"https://github.com/hellerbarde/stapler\" target=\"_blank\">pdf-stapler</a> instead for cutting and concatenating PDF files. It doesn\'t deal with metadata as well as pdftk does, however.</p><p>It\'s worth noting that pdftk is available as a snap package <a href=\"https://snapcraft.io/pdftk\" target=\"_blank\">https://snapcraft.io/pdftk</a>.\r\n</p>\r\n\r\n<p>\r\nIt\'s also worth noting that this is actually episode 2 in a series about steganography.</p>\r\n\r\n',78,74,0,'CC-BY-SA','pdf, ebook, bloat, print',0,0,1),
(2711,'2018-12-24','Raspberry Pi 3A+ Review',336,'In this episode of HPR, I will do a quick review of the Raspberry Pi 3A+.','<h1 id=\"raspberry-pi-3a-review\">Raspberry Pi 3A+ review</h1>\r\n<p>In this episode of HPR, I will do a quick review of the Raspberry Pi 3A+, the latest release of the Raspberry Pi foundation.</p>\r\n<p><img src=\"https://frenchguy.ch/assets/img_1710_800.jpg\" title=\"Raspberry Pi 3A+\" alt=\"Raspberry Pi 3A+\" /> <img src=\"https://frenchguy.ch/assets/img_1711_800.jpg\" title=\"Raspberry Pi 3A+\" alt=\"Raspberry Pi 3A+\" /></p>\r\n<p><strong>Specs</strong><br />\r\nThe Raspberry Pi 3A+ has almost the same hardware as its big brother/sister the 3B+ :</p>\r\n<ul>\r\n<li>BCM2837 BO SOC (system on chip), a quad core 64-bit ARM v8 processor, running at 1.4 GHz</li>\r\n<li>On board wireless :\r\n<ul>\r\n<li>WiFi : 2.4 and 5 GHz 802.11 c/y/n/ac</li>\r\n<li>Bluetooth : 4.2 and BLE</li>\r\n</ul></li>\r\n<li>MicroSD card for storing the operating system and the data</li>\r\n<li>Full size HDMI connector</li>\r\n<li>3.5 mm jack connector for audio and composite video output</li>\r\n<li>MicroUSB connector for the power supply</li>\r\n<li>40-pin header with the same pinout as every other Raspberry Pi</li>\r\n</ul>\r\n<p>The differences are :</p>\r\n<ul>\r\n<li>Only one full size USB connector, instead of four on the 3B+</li>\r\n<li>No ethernet connector</li>\r\n<li>Only 512 MB or SDRAM instead of 1 GB on the 3B+</li>\r\n</ul>\r\n<p><strong>Size</strong><br />\r\nThe Raspberry Pi 3A+ is 6.7 x 5.6 cm (2.6 x 2.2 in) and 11 mm high (.45 in). But if you plug a ribbon in the header, then it takes a lot of space.</p>\r\n<p><img src=\"https://frenchguy.ch/assets/img_1713_800.jpg\" title=\"Raspberry Pi 3A+\" alt=\"Raspberry Pi 3A+\" /></p>\r\n<p>In this case, it’s probably better to unsolder the header, and solder a right angle header in place, so the pins are pointing to the side of the board and not upwards</p>\r\n<p><img src=\"https://frenchguy.ch/assets/img_1716_800.jpg\" title=\"Raspberry Pi 3A+\" alt=\"Raspberry Pi 3A+\" /> <img src=\"https://frenchguy.ch/assets/img_1717_800.jpg\" title=\"Raspberry Pi 3A+\" alt=\"Raspberry Pi 3A+\" /></p>\r\n<p>With a bit of caution and the help of some desoldering wick, it’s not a complex operation, because there is no component near the GPIO header.</p>\r\n<p>Of course if you plan on using a HAT, then you’re better off using the straight header. The Raspberry Pi 3A+ is actually the same size than a standard HAT.</p>\r\n<p><img src=\"https://frenchguy.ch/assets/img_1718_800.jpg\" title=\"Raspberry Pi 3A+\" alt=\"Raspberry Pi 3A+\" /> <img src=\"https://frenchguy.ch/assets/img_1719_800.jpg\" title=\"Raspberry Pi 3A+\" alt=\"Raspberry Pi 3A+\" /></p>\r\n<p><strong>Use case</strong><br />\r\n</p>\r\n<p>Since the Raspberry Pi 3A+ doesn’t have an ethernet port, I think I will not use it for server stuff like <a href=\"https://mosquitto.org/\">Mosquitto</a> or <a href=\"https://pi-hole.net/\">Pi-Hole</a>, for which a good network connection is required. Also, those servers sometimes need a keyboard and a mouse, and with only one USB port, that’s not too practical.</p>\r\n<p>For me, the A+ will be used to upgrade projects currently using a Raspberry Pi ZeroW, and for which I need a little more power. The on board WiFi and the small form factor, combined with the extra power, makes the 3A+ an ideal replacement for the ZeroW.</p>\r\n<p><strong>Credits</strong><br />\r\n</p>\r\n<p>The sound used for the opening and closing sequence is <a href=\"https://www.jamendo.com/track/1405949/speaker-x-clash-jingle\">Speaker X-Clash</a> by Daniel H, and is released under a CC-BY-NC license.</p>\r\n',370,0,0,'CC-BY-SA','raspberry pi, review',0,0,1),
(2712,'2018-12-25','Steganography',1290,'Klaatu wraps up his miniseries about steganography.','<p>Did you find the hidden message contained in Klaatu\'s previous two episodes?</p>\r\n<p>If not, Klaatu reveals how to find it in this one, how to duplicate it, and what makes good steganography.</p>',78,0,0,'CC-BY-SA','steganography,message,secret decoder ring',0,0,1),
(2714,'2018-12-27','Airplane stalls and Angle of Attack',995,'A primer on why airplanes quit flying','<h1 id=\"stalls-a-primer-on-why-aircraft-fly-and-dont-fly\">stalls, a primer on why aircraft fly, and don’t fly</h1>\r\n<h2 id=\"youtube-video-of-stall-with-narration-35-seconds\">YouTube video of stall with narration (35 seconds)</h2>\r\n<p><a href=\"https://www.youtube.com/watch?v=SiOiVHUEYao\" class=\"uri\">https://www.youtube.com/watch?v=SiOiVHUEYao</a></p>\r\n<h2 id=\"aoa-gauge-from-t-38-manual\">AoA gauge from T-38 manual</h2>\r\n<p><a href=\"https://goo.gl/images/ZH5UYx\" class=\"uri\">https://goo.gl/images/ZH5UYx</a></p>\r\n<h2 id=\"some-definitions\">Some definitions</h2>\r\n<ul>\r\n<li><p>chord - an imaginary line from the front of the wing to the back</p></li>\r\n<li><p>relative wind - movement of air relative to the chord</p></li>\r\n<li><p>angle of attack - the angle of the chord of the wing to the relative wind</p></li>\r\n<li><p>stall - a condition where the air on the top of the wing is not flowing smoothly over the wing</p></li>\r\n<li><p>critical angle of attack - the angle that the wing becomes stalled</p></li>\r\n<li><p>fun - stalling and spinning and aircraft when its safe to do so</p></li>\r\n<li><p>scary - stalling and spinning and aircraft when you don’t want to</p></li>\r\n</ul>\r\n<h2 id=\"things-not-mentioned\">Things not mentioned</h2>\r\n<p>This discussion pertained to subsonic speeds, super sonic flight introduces a whole other realm of issues.</p>\r\n<p>The wings of aircraft do not stall all at once. They are designed (usually) to stall from the wing root (where the wing is attached to the fuselage) towards the tips. This ensures good roll control at slow speed and into the stall. This stalling characteristic is achieved by designing twist in the wing (washout) allowing different parts of the wing to hit the critical angle of attack at different times.</p>\r\n<p>The most dangerous situation that you can find yourself in is a low altitude situation where one wing is stalled more than the other. The airplane then enters a spin. The dangerous part is the low altitude. Spins are fun, and the plane is still controllable, but you need altitude to recover. A wise man told me when turning low to the ground keep your nose down and speed up.</p>\r\n<p>Most light aircraft will shudder or buffet as you approach the critical angle of attack this happens because of the disturbed airflow hitting the aircraft’s fuselage or tail. In larger aircraft no (i.e. airliners) no feel is given naturally as the plane approaches a stalled condition so systems like stick shakers vibrate the control artificially as you approach the critical angle of attack as measured by the AoA sensors. <a href=\"https://goo.gl/images/7xv5A5\">DC-9 stick shaker, a big cell phone vibrator</a> artificial stall warning is mandatory in fly-by-wire aircraft (i.e. Airbus, f-16) as well as pure hydraulic controls (i.e. Boeing 757)</p>\r\n<p>Author: Brian<br />\r\nCreated: 2018-12-01 Sat 07:34<br />\r\nEmacs 25.3.1 (Org mode 8.2.10)</p>\r\n',326,0,0,'CC-BY-SA','aircraft,flight,stall',0,0,1),
(2760,'2019-03-01','What is VNF',445,'A topic from the Open Networking conference in Amsterdam','<p>A short basic info about VNF</p>\r\n<p><a href=\"https://searchsdn.techtarget.com/definition/virtual-network-functions\" class=\"uri\">https://searchsdn.techtarget.com/definition/virtual-network-functions</a></p>',129,61,0,'CC-BY-SA','Virtual network function,VNF,network functions virtualization,NFV',0,0,1),
(2785,'2019-04-05','What is uCPE',399,'A short talk on telco networking standards','<ul>\r\n<li><a href=\"https://blog.advaoptical.com/en/what-is-universal-cpe\" class=\"uri\">https://blog.advaoptical.com/en/what-is-universal-cpe</a></li>\r\n<li><a href=\"https://www.audiocodes.com/solutions-products/solutions/network-function-virtualization-nfv/universal-cpe-ucpe\" class=\"uri\">https://www.audiocodes.com/solutions-products/solutions/network-function-virtualization-nfv/universal-cpe-ucpe</a></li>\r\n<li><a href=\"https://netmanias.com/en/post/blog/12703/sdn-nfv-ucpe/what-is-universal-cpe-updated-at-may-2018\" class=\"uri\">https://netmanias.com/en/post/blog/12703/sdn-nfv-ucpe/what-is-universal-cpe-updated-at-may-2018</a></li>\r\n<li><a href=\"https://www.walkerfirst.com/uploads/files/literature/Skinny_Wire_17S.pdf?as_url_id=AAAAAAWx6lVCrvi0cYObNZzKbTqds3zxZOTme09iW_1bgRwXnxj5xBhDUZFsrEovlR-8QzYp5bjEFX-8gUDCSfEtxk2YBSqlqDxvUktl5hrlcCW3RFsY5EZqzULvKHnRBTv51vleaWM2y0uBOkqJjueTHAIu\" class=\"uri\">https://www.walkerfirst.com/uploads/files/literature/Skinny_Wire_17S.pdf?as_url_id=AAAAAAWx6lVCrvi0cYObNZzKbTqds3zxZOTme09iW_1bgRwXnxj5xBhDUZFsrEovlR-8QzYp5bjEFX-8gUDCSfEtxk2YBSqlqDxvUktl5hrlcCW3RFsY5EZqzULvKHnRBTv51vleaWM2y0uBOkqJjueTHAIu</a></li>\r\n</ul>',129,0,1,'CC-BY-SA','Network Function Virtualization,NFV,Universal customer premises equipment,uCPE',0,0,1),
(2729,'2019-01-17','Bash Tips - 18',1898,'Arrays in Bash (part 3)','<h1 id=\"bash-tips---18\">Bash Tips - 18 <small><small>(Extra auxiliary Bash tips)</small></small></h1>\r\n<h2 id=\"arrays-in-bash\">Arrays in Bash</h2>\r\n<p>This is the third of a small group of shows on the subject of arrays in Bash. It is also the eighteenth show in the <em>Bash Tips</em> sub-series.</p>\r\n<p>In the last show we looked at ways of accessing elements with negative indices and how to concatenate arrays. We then launched into parameter expansion in the context of arrays.</p>\r\n<p>There are a few more parameter expansion operations to look at in this episode, then in the next episode we will look in more depth at the <code>declare</code> built in command and at some of the commands that assist with loading data into arrays.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2729/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Arrays\">“Bash Arrays”</a></li>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion\">“Shell Parameter Expansion”</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Linux Documentation Project: <a href=\"https://www.tldp.org/LDP/abs/html/index.html\">Advanced Bash-Scripting Guide</a>\r\n<ul>\r\n<li><a href=\"https://www.tldp.org/LDP/abs/html/arrays.html\">Chapter 27: Arrays</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 “<em>Extra ancillary Bash tips - 13</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2689\">HPR episode 2689 “<em>Bash Tips - 14 (Some auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2699\">HPR episode 2699 “<em>Bash Tips - 15 (More auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2709\">HPR episode 2709 “<em>Bash Tips - 16 (Further auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2719\">HPR episode 2719 “<em>Bash Tips - 17 (Additional auxiliary Bash tips)</em>”</a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2729/bash18_ex1.sh\">bash18_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2729/bash18_ex2.sh\">bash18_ex2.sh</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,array,indexed array,associative array,parameter expansion',0,0,1),
(2724,'2019-01-10','Using a DIN Rail to mount a Raspberry Pi',549,'I created DIN rail fittings for attaching my RPi 3B+ and an SSD disk','<h2 id=\"overview\">Overview</h2>\r\n<p>A <em>DIN Rail</em> is a metal rail for mounting pieces of electrical equipment inside an equipment rack, for performing tasks in a building, in a machine, and so forth. It’s common to see DIN rails holding circuit breakers for example.</p>\r\n<p>See the <a href=\"https://en.wikipedia.org/wiki/DIN_rail\" title=\"Wikipedia article on the DIN Rail\">Wikipedia article</a> on the subject for full details.</p>\r\n<p>A number of people in the Maker Community have made use of these rails, and there are a number of freely available designs for stands that can be 3D printed on which you can mount these rails. There are also designs for mounts onto which devices like Raspberry Pis and disks can be fitted and attached to a rail.</p>\r\n<p>This show will recount my experiences with creating a compact mounting system for one of my Raspberry Pi systems. I had the help of my son and his girlfriend in 3D printing the parts for this project.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes and pictures for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2724/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><p>Wikipedia article <a href=\"https://en.wikipedia.org/wiki/DIN_rail\"><em>DIN Rail</em></a></p></li>\r\n<li>Thingiverse designs used:\r\n<ul>\r\n<li><a href=\"https://www.thingiverse.com/thing:2610621\">DIN Mounts: Pi, Arduino and disks</a> by <a href=\"https://www.thingiverse.com/imstrng\">imstrng</a></li>\r\n<li><a href=\"https://www.thingiverse.com/thing:2068383\">DIN Rail Stand</a> by <a href=\"https://www.thingiverse.com/RedWraith\">RedWraith</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Other Thingiverse DIN Rail-related items:\r\n<ul>\r\n<li><a href=\"https://www.thingiverse.com/thing:2144527\">DIN Rail Stand v2</a> by <a href=\"https://www.thingiverse.com/philklaus\">philklaus</a></li>\r\n<li><a href=\"https://www.thingiverse.com/thing:2415721\">Raspberry Pi Zero Vertical Edge-Mounted DIN Mount</a> by <a href=\"https://www.thingiverse.com/coffeenut\">coffeenut</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','3D printing,DIN rail,Raspberry Pi',0,0,1),
(2723,'2019-01-09','Using Elm in context of 4X game client',2671,'Tuula talks their decisions on structuring Elm application','<p>Original idea I had with my toy game project was to have Yesod render most of the user interface as static HTML and have as little client side scripting as possible. Later I realized that there would be parts with significant amount of client side code and it might be better if whole site was written in Elm.</p>\r\n<p>Couple goals I had in my mind when I started this:</p>\r\n<ul>\r\n<li>easy to work with</li>\r\n<li>type safe</li>\r\n<li>extensible</li>\r\n<li>user authorization\r\n<ul>\r\n<li>regular player</li>\r\n<li>administrator</li>\r\n</ul></li>\r\n</ul>\r\n<p>Backend is written in Haskell and front end in Elm. Communication between them is via REST interface and most of the data is in JSON. All JSON encoding / decoding is centralized (more or less), same with initiating requests to server.</p>\r\n<h2 id=\"api-endpoints\">API Endpoints</h2>\r\n<p>End points used for REST calls are defined in single data type that captures their name and parameters. These are used when initiating requests, meaning there’s smaller chance of typo slipping through.</p>\r\n<pre><code>type Endpoint\r\n    = ApiStarDate\r\n    | ApiResources\r\n    | ApiStarSystem\r\n    | ApiStar\r\n    | ApiPlanet\r\n    | ApiPopulation PlanetId\r\n    | ApiBuilding PlanetId\r\n    | ApiConstructionQueue PlanetId\r\n    | ApiConstruction Construction\r\n    | ApiBuildingConstruction\r\n    | ApiAvailableBuildings</code></pre>\r\n<p>For example, sending a GET request to retrieve all construction projects on a planet is done as:</p>\r\n<pre><code>Http.send (ApiMsgCompleted &lt;&lt; ConstructionsReceived) (get (ApiConstructionQueue planetId) (list constructionDecoder))</code></pre>\r\n<p>GET Request is sent to ApiConstructionQueue endpoint and it has planetId as parameter. When server sends response, our program will parse content of it will be a list that is parsed with constructionDecoder and create “ApiMsgCompleted ConstructionsReceived” message with result of the parsing. Update function will process this and store list of constructions somewhere safe for further use.</p>\r\n<h2 id=\"update-function\">Update function</h2>\r\n<p>Update function is in charge of reacting to messages (mouse clicks, page changes, responses from server). In a large program update function will quickly get big and unwieldy. Breaking it into smaller pieces (per page for example), will make maintenance easier. This way each page has their own message type and own update function to handle it. In addition there’s few extra ones (cleaning error display, processing API messages and reacting to page changes).</p>\r\n<p>Same way as API end points are encoded in a type, pages are too:</p>\r\n<pre><code>type Route\r\n    = HomeR\r\n    | ProfileR\r\n    | StarSystemsR\r\n    | StarSystemR StarSystemId\r\n    | PlanetR StarSystemId PlanetId\r\n    | BasesR\r\n    | FleetR\r\n    | DesignerR\r\n    | ConstructionR\r\n    | MessagesR\r\n    | AdminR\r\n    | LogoutR\r\n    | ResearchR</code></pre>\r\n<p>routeToString function is used to map Route into String, that can be placed in hyperlink. Below is an excerp:</p>\r\n<pre><code>routeToString : Route -&gt; String\r\nrouteToString route =\r\n    case route of\r\n        HomeR -&gt;\r\n            &quot;/home&quot;\r\n\r\n        StarSystemR (StarSystemId sId) -&gt;\r\n            &quot;/starsystem/&quot; ++ String.fromInt sId\r\n\r\n        PlanetR (StarSystemId sId) (PlanetId pId) -&gt;\r\n            &quot;/starsystem/&quot; ++ String.fromInt sId ++ &quot;/&quot; ++ String.fromInt pId</code></pre>\r\n<p>Because mapping needs to be bi-directional (Route used to define content of a href and string from a href used to define Route), there’s mapping to other direction too:</p>\r\n<pre><code>routes : Parser (Route -&gt; a) a\r\nroutes =\r\n    oneOf\r\n        [ map HomeR top\r\n        , map ProfileR (s &quot;profile&quot;)\r\n        , map ResearchR (s &quot;research&quot;)\r\n        , map StarSystemsR (s &quot;starsystem&quot;)\r\n        , map StarSystemR (s &quot;starsystem&quot; &lt;/&gt; starSystemId)\r\n        , map PlanetR (s &quot;starsystem&quot; &lt;/&gt; starSystemId &lt;/&gt; planetId)\r\n        , map BasesR (s &quot;base&quot;)\r\n        , map FleetR (s &quot;fleet&quot;)\r\n        , map DesignerR (s &quot;designer&quot;)\r\n        , map ConstructionR (s &quot;construction&quot;)\r\n        , map MessagesR (s &quot;message&quot;)\r\n        , map AdminR (s &quot;admin&quot;)\r\n        , map LogoutR (s &quot;logout&quot;)\r\n]</code></pre>\r\n<p>Result of parsing is Maybe Route, meaning that failure will return Nothing. Detecting and handling this is responsibility of the calling code, usually I just default to HomeR.</p>\r\n<h2 id=\"breadcrumbs\">Breadcrumbs</h2>\r\n<p>Borrowing from Yesod, client uses recursive function to define breadcrumb path. This is hierarchical view of current location in the application, allowing user to quickly navigate backwards where they came.</p>\r\n<p>Breadcrumb path consists of segments that are tuple of (String, Maybe Route). String tells text to display and Route is possible parent route of the segment. This allows hierarchical definition: “Home / Star systems / Sol / Earth”. Because route has only (for example) PlanetId, we need to pass Model too, so that the data retrieved from server can be used to figure out what name such a planet has.</p>\r\n<pre><code>{-| Build complete breadcrumb path and wrap it in enclosing HTML\r\n-}\r\nbreadcrumbPath : Model -&gt; Html Msg\r\n\r\n{-| Recursively build list of breadcrumbs from segments\r\nLast one is plain text, while parents of it are links\r\n-}\r\nbreadcrumb : Model -&gt; Bool -&gt; Route -&gt; List (Html Msg)\r\n\r\n{-| Get segment of given route in form of ( String, Maybe Route )\r\nString denotes text describing the segment, Maybe Route is possible parent\r\n-}\r\nsegment : Model -&gt; Route -&gt; ( String, Maybe Route )</code></pre>\r\n',364,0,0,'CC-BY-SA','elm',0,0,1),
(2803,'2019-05-01','Update on my Raspi 3 B OpenMedia Vault and Next Cloud instances',449,'A short podcast on how my little home servers are working or not','<ul>\r\n<li><p><a href=\"https://nextcloud.com/box/\" class=\"uri\">https://nextcloud.com/box/</a><br />\r\nThis link was the first product and it is not available any more.</p></li>\r\n<li><p><a href=\"https://ownyourbits.com/nextcloudpi/\" class=\"uri\">https://ownyourbits.com/nextcloudpi/</a><br />\r\nThis link tells you about all the different ways to do next cloud.</p></li>\r\n<li><p><a href=\"https://github.com/nextcloud/nextcloudpi/wiki/How-to-install-NextCloudPi\" class=\"uri\">https://github.com/nextcloud/nextcloudpi/wiki/How-to-install-NextCloudPi</a><br />\r\nThe link above is what worked exactly for me.</p></li>\r\n<li><p><a href=\"https://www.openmediavault.org/about.html\" class=\"uri\">https://www.openmediavault.org/about.html</a><br />\r\nThe link above is about what OMV is.</p></li>\r\n<li><p><a href=\"https://sourceforge.net/projects/openmediavault/files/Raspberry%20Pi%20images/\">https://sourceforge.net/projects/openmediavault/files/Raspberry%20Pi%20images/</a><br />\r\nIs were I got my image.</p></li>\r\n</ul>\r\n<p>I use a Toshiba 4TB non-powered drive external usb 3 drive.</p>\r\n',129,0,1,'CC-BY-SA','Raspberry Pi,NextCloud,openmediavault',0,0,1),
(2716,'2018-12-31','Really Simple YouTube',441,'Thaj explains how he makes YouTube come to him using RSS feeds','<p>Here are the two links I mentioned that let you pull RSS feeds out of YouTube</p>\r\n<ul>\r\n<li><a href=\"https://danielmiessler.com/blog/rss-feed-youtube-channel/\" class=\"uri\">https://danielmiessler.com/blog/rss-feed-youtube-channel/</a></li>\r\n<li><a href=\"https://support.google.com/youtube/answer/6224202?hl=en\" class=\"uri\">https://support.google.com/youtube/answer/6224202?hl=en</a></li>\r\n</ul>\r\n',270,0,0,'CC-BY-SA','RSS, YouTube, PeerTube, TInyTinyRSS, Internet Video',0,0,1),
(2739,'2019-01-31','Bash Tips - 19',1553,'Arrays in Bash (part 4)','<h2 id=\"arrays-in-bash\">Arrays in Bash <small><small>(Supplemental auxiliary Bash tips)</small></small></h2>\r\n<p>This is the fourth and last of a small group of shows on the subject of arrays in Bash. It is also the nineteenth show in the <em>Bash Tips</em> sub-series.</p>\r\n<p>In the last show we continued with the subject of parameter expansion in the context of arrays. There are other aspects of this that could be looked at, but we’ll leave it for the moment and may revisit it in the future.</p>\r\n<p>In this episode we will look in more depth at the <code>declare</code> (<code>typeset</code>) built in command and at some commands that are related (<code>readonly</code> and <code>local</code>), We will also look at the commands that assist with loading data into arrays: <code>mapfile</code> (<code>readarray</code>) and <code>read</code>.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>As usual I have provided detailed notes and examples for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2739/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Arrays\">“Bash Arrays”</a></li>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Shell-Builtin-Commands\">“4 Shell Builtin Commands”</a>\r\n<ul>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“4.1 Bourne Shell Builtins”</a></li>\r\n<li>Section on <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins\">“4.2 Bash Builtin Commands”</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Linux Documentation Project: <a href=\"https://www.tldp.org/LDP/abs/html/index.html\">Advanced Bash-Scripting Guide</a>\r\n<ul>\r\n<li><a href=\"https://www.tldp.org/LDP/abs/html/arrays.html\">Chapter 27: Arrays</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 “<em>Extra ancillary Bash tips - 13</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2689\">HPR episode 2689 “<em>Bash Tips - 14 (Some auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2699\">HPR episode 2699 “<em>Bash Tips - 15 (More auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2709\">HPR episode 2709 “<em>Bash Tips - 16 (Further auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2719\">HPR episode 2719 “<em>Bash Tips - 17 (Additional auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2729\">HPR episode 2729 “<em>Bash Tips - 18 (Extra auxiliary Bash tips)</em>”</a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2739/bash19_ex1.sh\">bash19_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2739/bash19_ex2.sh\">bash19_ex2.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2739/bash19_ex3.sh\">bash19_ex3.sh</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,array,declare,typeset,local,readonly,read,mapfile,readarray',0,0,1),
(2717,'2019-01-01','Mobile Device Security',621,'Cell phone cyber security 101','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Hello and welcome to Hacker Public Radio, I’m Edward Miro and for this episode I decided to address mobile device security. As with most of the research and articles I’ve written in the past, these are geared toward standard users in a business setting and are meant to be a jumping off point for further research and to be a foundation for cyber security 101 level training classes. If you like what I do, and want to have me come speak to your team, feel free to email me.</p>\r\n<p>As an information security researcher, I have noticed a trend in what potential clients lately have been interested in: cell phones. Almost everyone I have consulted for in the area of private investigations make this area their main priority. This makes sense as users have started to transition to using mobile devices more and more. Not only do cell phones represent the main conduit to the internet for a huge chunk of people, but many use them for work also. Many companies have smartly presented policies against this, but there are still many organizations that allow bring-your-own-device style implementations. In the following podcast I will try to define the threats, defense and considerations in very broad strokes.</p>\r\n<p>Cell phones differ from a standard hacking target in a few ways. For the most part, many of the same vectors are still valid. Remote code execution however is more rare, but not out of the question. I’m going to attempt to present these different vectors in an ascending list of what is most likely to be used as an attack, in my humble (and possibly ignorant) opinion.</p>\r\n<h3 id=\"passive-surveillance\">1. Passive Surveillance</h3>\r\n<p>This vector is one many in the hacking world will already be familiar with and it is a major concern for mobile devices as well. Attackers can monitor an access point where the mobile device is connected and collect packets in all the usual ways. Open public WiFi is a treasure trove and tons of data that’s being sent in the clear can be collected, analyzed and leveraged by attackers.</p>\r\n<p>Defense here is a bit more complicated for the general user, but shouldn’t be too intrusive for most:</p>\r\n<ol type=\"1\">\r\n<li>Use a VPN on your mobile devices.</li>\r\n<li>Switch to a DNS provider that provides secure DNSSEC.</li>\r\n<li>Implement proper encryption on access points.</li>\r\n</ol>\r\n<h3 id=\"spyware\">2. Spyware</h3>\r\n<p>Many commercial spyware applications are readily available on both of the main app stores. The challenges for attackers lie in either gaining physical access to the unlocked device to install the spyware, or tricking the user into installing it themselves. Most often the target’s spouse or close contact does this. Some of these apps can be disguised to look like innocuous applications as a feature, but with devices that are rooted/jailbroken, they can be completely hidden from the user. I found a few surveys that state the average smart phone user has about 30 apps installed. I don’t think it’s unreasonable to suspect the average person wouldn’t notice a second calculator or calendar app. These apps feature the full gamut of what you’d expect from a spyware app.</p>\r\n<p>Defense against spyware is pretty simple:</p>\r\n<ol type=\"1\">\r\n<li>Don’t allow unsupervised access to your device.</li>\r\n<li>Use a strong passcode or biometric lock.</li>\r\n<li>Remove unused applications and be aware of new apps that may pop up.</li>\r\n<li>Don’t root or jailbreak your device.</li>\r\n</ol>\r\n<h3 id=\"social-engineering\">3. Social Engineering</h3>\r\n<p>The tried and true vector that has always worked and will continue to work is social engineering. It doesn’t matter what kind of device a target is using if you can get them to click a malicious link, open a malicious attachment, or disclose their password to the attackers. With a user’s password you can conduct a vast amount of surveillance through their Google or Apple account. Not to mention leverage their password into all their other accounts as most users still use the same password for everything. We can also callback to the previous section on spyware by mentioning that many users are already familiar with enabling the installation of 3rd party applications and can be tricked into installing a cleverly disguised spyware application.</p>\r\n<p>Basic OPSEC recommendations are applicable here:</p>\r\n<ol type=\"1\">\r\n<li>Don’t click strange or unsolicited links or attachments on your devices.</li>\r\n<li>Never disclose your password to anyone through a text message or voice call.</li>\r\n<li>Don’t install 3rd party applications. I’ll extend this to say not to install any shady or questionable apps, even ones hosted by the app stores. There have been instances of vetted apps being malicious.</li>\r\n</ol>\r\n<h3 id=\"imsi-catchersfemtocells\">4. IMSI catchers/Femtocells</h3>\r\n<p>I refer to these as DIY Stingrays. Stingrays are devices used by law enforcement to track and surveil cell phone traffic. These devices emulate a cell tower or boost cell phone signals when used in a legitimate way. Mobile phones are designed to prefer using stations that are the closest and strongest. Any technically proficient attacker can DIY one of these devices for not a lot of money. When an attacker deploys one of these devices, the target’s phone usually has no idea that the device isn’t an official cell tower and happily connects and passes traffic through it. The rogue stations can then be configured to pass the traffic on to an authentic tower and the user will have no idea. These rogue towers can not only collect identifying information about the mobile device that can be used to track or mark a target, they can also monitor voice calls, data, and SMS, as well as perform man-in-the-middle attacks. Often they can disable the native encryption of the target’s phone as well.</p>\r\n<p>Defense against this vector is a bit more complicated:</p>\r\n<ol type=\"1\">\r\n<li>As before, use a VPN.</li>\r\n<li>Use Signal or other encrypted communication apps.</li>\r\n<li>Avoid disclosing sensitive information during voice calls.</li>\r\n<li>There is software that has been developed to detect and notify the user when a rogue station has been detected, but this is not going to be super helpful for standard users. There are also maps online of known cell towers and it is possible to use software to identify your connected tower.</li>\r\n</ol>\r\n<h3 id=\"exploits\">5. Exploits</h3>\r\n<p>Speaking very generally, this attack vector is for the most part less of a concern (depending on your particular threat level), but we all know that the chance of this happening in the wild is probably remote for most people. The technical implementations of exploits such as Rowhammer, Stagefright, and Blueborne are well outside the scope of this particular talk, but we would be incorrect to not mention them and what can be done to protect against them. And we should also pay special attention to more and more exploits being developed to attack mobile devices as attackers have started putting a lot of attention in this area. Even though many of these vulnerabilities are being patched, we all know many users are still using old versions of Android and iOS, and many devices are simply outside the support period offered by the manufacturers and will never be updated past a certain point. Couple that with the general idea that mobile devices (or any device running a non Windows based OS) are “safer” because less exploits exist for them is currently a very poor assumption. This will probably get worse as the cost of keeping up with new devices now being over $1000 and many users won’t be able to get devices that are constantly being patched.</p>\r\n<p>What we can do:</p>\r\n<ol type=\"1\">\r\n<li>Keep your mobile devices updated with most current OS updates and carrier settings. Also keep applications updated. I don’t know how many times I’ve noticed friends or family with devices that are ready to be updated, but the notifications go ignored.</li>\r\n<li>If it’s possible, replace devices when they are outside the support period.</li>\r\n<li>Be paranoid, if it applies to you. What this means is when you use any computer or device, always remember that zero day exploits can exist for years before being disclosed. You could follow ALL the best OPSEC practices, and you could still be vulnerable to exploits that haven’t been disclosed and/or patched. This might not matter if you’re just a general user, but if you work for the government or do intelligence work, act as if.</li>\r\n</ol>\r\n<p>Well, thank you for taking the time to listen to my basic introduction to cell phone cyber defense. I know most of the information I provided is only the tip of the iceberg and if current trends hold up, this will only get worse in the future. If you want to add to or correct any mistakes I may have made, like I stated in the introduction, feel free to email me and let’s have a conversation. I don’t claim to know all there is to know and love feedback and any opportunities to learn more or collaborate with others in the field.</p>\r\n<p>Thanks again, and have a great 2019!</p>\r\n',372,0,1,'CC-BY-SA','Mobile Device Security',0,0,1),
(2718,'2019-01-02','Genre In Storytelling',750,'Lostnbronx takes a look at the importance of genre in storytelling.','<p>Many people see genres as being largely interchangeable, but are they really? Why can some stories only be told in a particular genre? When are genre stories truly alike? And when are setting, character, and plot more important than genre? Lostnbronx takes a quick, rambling look at this complicated subject.</p>\r\n',107,105,0,'CC-BY-SA','stories,storytelling,genre,lostnbronx',1,0,1),
(2725,'2019-01-11','The Illumos Shutdown Command Explained',812,'A short pod cast about the Illumos shutdown command','<p>In response to JWP\'s <a href=\"https://hackerpublicradio.org/eps.php?id=2697\" target=\"_blank\">episode 2697</a> and <a href=\"https://hackerpublicradio.org/eps.php?id=2697#comments\" target=\"_blank\">ClaudioM\'s comment</a>, this show covers the <code>shutdown</code> command as it appeared in Sun Solaris and OpenSolaris, and currently appears in both Oracle Solaris and <a href=\"https://openindiana.org\" target=\"_blank\">OpenIndiana</a>.\r\n\r\n<p>\r\nThe quick version&#58;\r\n</p>\r\n\r\n<ul>\r\n<li><code>shutdown</code></li>\r\n<li><code>-i</code> sets the destination init state (5 to shutdown, 6 to reboot, and so on; see <code>man init</code> for more)</li>\r\n<li><code>-y</code> to answer \"yes\" to the safeguard prompt asking you whether you really want to shutdown</li>\r\n<li><code>-g</code> to set how many seconds until shutdown. Default is 60.\r\n</li>\r\n</ul>\r\n\r\n<p>In practise, I don\'t even use the shutdown command. I use <code>poweroff</code>, which does a shutdown and poweroff.</p>\r\n\r\n<p>\r\nBoth shutdown and poweroff require root permission. On OpenIndiana, you can either use <code>sudo bash</code> or <code>pfexec bash</code> to get a root prompt.\r\n</p>\r\n\r\n<p>Some links&#58;</p>\r\n<p><a href=\"https://docs.openindiana.org/handbook/common-tasks/#system-shutdown-reboot\" target=\"_blank\">OpenIndiana handbook</a></p>\r\n<p><a href=\"https://docs.oracle.com/cd/E23824_01/html/821-1451/gldpm.html\" target=\"_blank\">Sun Microsystem docs</a> (with Oracle branding on it)</p>\r\n\r\n\r\n',78,0,0,'CC-BY-SA','sys admin,systems,unix,illumos',0,0,1),
(2733,'2019-01-23','Writing Web Game in Haskell - News and Notifications',2837,'Tuula talks about the game they\'re writing in Haskell and convoluted news system they made.','<h2 id=\"intro\">Intro</h2>\r\n<p>News and notifications are used in the game to let the players know something noteworthy has happened. It could be discovery of a new planet or construction project finally finishing.</p>\r\n<p>All relevant information in the news is hyperlinked. If news mentions a planet, player can click the link and view current information of that planet.</p>\r\n<h2 id=\"server-interface\">Server interface</h2>\r\n<p>Server has three resources for news, although we’re concentrating only one here:</p>\r\n<pre><code>/api/message           ApiMessageR      GET POST\r\n/api/message/#NewsId   ApiMessageIdR    DELETE\r\n/api/icon              ApiMessageIcons  GET</code></pre>\r\n<p>First one is for retrieving all messages and posting a new one. Second one is for marking one read and third one is for retrieving all icons that players can attach to messages written by them.</p>\r\n<h2 id=\"database\">Database</h2>\r\n<p>Database is defined in /config/models file. For news, there’s only one table:</p>\r\n<pre><code>News json\r\n    content Text\r\n    factionId FactionId\r\n    date Int\r\n    dismissed Bool\r\nderiving Show Read Eq</code></pre>\r\n<p>Content field contains the actual news article data as serialized JSON. This allows storing complex data, without having to have lots of columns or multiple tables.</p>\r\n<h2 id=\"domain-objects\">Domain objects</h2>\r\n<p>There are many kinds of messages that players might see, but we’ll concentrate on one about discovering a new planet</p>\r\n<p>All different kinds of articles are of same type: NewsArticle. Each different kind of article has their own value constructor (PlanetFound in this particular case). And each of those value constructors has single parameter of a specific type that holds information particular to that certain article (PlanetFoundNews in this case). Adding a new article means adding a new value constructor and record to hold the data.</p>\r\n<pre><code>data NewsArticle =\r\n    StarFound StarFoundNews\r\n    | PlanetFound PlanetFoundNews\r\n    | UserWritten UserWrittenNews\r\n    | DesignCreated DesignCreatedNews\r\n    | ConstructionFinished ConstructionFinishedNews\r\n\r\n\r\ndata PlanetFoundNews = PlanetFoundNews\r\n    { planetFoundNewsPlanetName :: Text\r\n    , planetFoundNewsSystemName :: Text\r\n    , planetFoundNewsSystemId   :: Key StarSystem\r\n    , planetFoundNewsPlanetId   :: Key Planet\r\n    , planetFoundNewsDate       :: Int\r\n    }</code></pre>\r\n<p>Given a News object, we can turn it into NewsArticle. These are much nicer to deal with that densely packed News that is stored in database:</p>\r\n<pre><code>parseNews :: News -&gt; Maybe NewsArticle\r\nparseNews =\r\n    decode . toLazyByteString . encodeUtf8Builder . newsContent</code></pre>\r\n<p>Because parsing arbitrary JSON might fail, we get Maybe NewsArticle, instead of NewsArticle. It is possible to write the same code in longer way:</p>\r\n<pre><code>parseNews news =\r\n    let\r\n        content = newsContent news\r\n        utf8Encoded = encodeUtf8Builder content\r\n        byteString = toLazyByteString utf8Encoded\r\n    in\r\n        decode byteString</code></pre>\r\n<p>Similarly there’s two other functions for dealing with Entities (primary key, data - pair really) and list of Entities. Note that parseNewsEntities filters out all News that it didn’t manage to turn into NewsArticle. They have following signatures:</p>\r\n<pre><code>parseNewsEntity :: Entity News -&gt; (Key News, Maybe NewsArticle)\r\n\r\nparseNewsEntities :: [Entity News] -&gt; [(Key News, NewsArticle)]</code></pre>\r\n<p>Writing JSON encoding and decoding is tedious, template Haskell can help us here:</p>\r\n<pre><code>$(deriveJSON defaultOptions &#39;&#39;PlanetFoundNews)\r\n$(deriveJSON defaultOptions &#39;&#39;NewsArticle)</code></pre>\r\n<h2 id=\"turning-articles-into-json\">Turning Articles into JSON</h2>\r\n<p>News articles aren’t much use if they stay on the server, we need to send them to clients too. We can’t have multiple declarations of same typeclass for any type, so we declare complete new type and copy data there before turning it into JSON and sending to client (this is one way of doing this).</p>\r\n<p>First step, define our types (concentrating on planet found news here):</p>\r\n<pre><code>data NewsArticleDto =\r\n    StarFoundDto StarFoundNewsDto\r\n    | PlanetFoundDto PlanetFoundNewsDto\r\n    | UserWrittenDto UserWrittenNewsDto\r\n    | DesignCreatedDto DesignCreatedNewsDto\r\n    | ConstructionFinishedDto ConstructionFinishedNewsDto\r\n    deriving (Show, Read, Eq)\r\n\r\ndata PlanetFoundNewsDto = PlanetFoundNewsDto\r\n    { planetFoundNewsDtoPlanetName :: Text\r\n    , planetFoundNewsDtoSystemName :: Text\r\n    , planetFoundNewsDtoSystemId   :: Key StarSystem\r\n    , planetFoundNewsDtoPlanetId   :: Key Planet\r\n    , planetFoundNewsDtoDate       :: Int\r\n    }\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>We need way to move data into dto and thus define a type class for that operation:</p>\r\n<pre><code>class (ToJSON d) =&gt; ToDto c d | c -&gt; d where\r\n    toDto :: c -&gt; d</code></pre>\r\n<p>For more information about functional dependencies, check following links: <a href=\"https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#extension-FunctionalDependencies\" class=\"uri\">https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#extension-FunctionalDependencies</a> and <a href=\"https://wiki.haskell.org/Functional_dependencies\" class=\"uri\">https://wiki.haskell.org/Functional_dependencies</a></p>\r\n<p>Writing instances for our type class:</p>\r\n<pre><code>instance ToDto PlanetFoundNews PlanetFoundNewsDto where\r\n    toDto news =\r\n        PlanetFoundNewsDto { planetFoundNewsDtoPlanetName = planetFoundNewsPlanetName news\r\n                           , planetFoundNewsDtoSystemName = planetFoundNewsSystemName news\r\n                           , planetFoundNewsDtoSystemId = planetFoundNewsSystemId news\r\n                           , planetFoundNewsDtoPlanetId = planetFoundNewsPlanetId news\r\n                           , planetFoundNewsDtoDate = planetFoundNewsDate news\r\n                           }\r\n\r\ninstance ToDto NewsArticle NewsArticleDto where\r\n    toDto news =\r\n        case news of\r\n            (StarFound x) -&gt; StarFoundDto $ toDto x\r\n            (PlanetFound x) -&gt; PlanetFoundDto $ toDto x\r\n            (UserWritten x) -&gt; UserWrittenDto $ toDto x\r\n            (DesignCreated x) -&gt; DesignCreatedDto $ toDto x\r\n            (ConstructionFinished x) -&gt; ConstructionFinishedDto $ toDto x</code></pre>\r\n<p>Finally, we want to wrap our news into something that has all the common info (id and link to icon to show)</p>\r\n<pre><code>data NewsDto = NewsDto\r\n    { newsDtoId    :: Key News\r\n    , newsContents :: NewsArticleDto\r\n    , newsIcon     :: Text\r\n    }\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>IconMapper knows how to turn NewsArticleDto (in this case) to corresponding link to the icon. Notice how our ToDto instance includes IconMapper in addition to Key and NewsArticle:</p>\r\n<pre><code>instance ToDto ((Key News, NewsArticle), (IconMapper NewsArticleDto)) NewsDto where\r\n    toDto ((nId, article), icons) =\r\n        let\r\n            content = toDto article\r\n        in\r\n        NewsDto { newsDtoId = nId\r\n                , newsContents = content\r\n                , newsIcon = runIconMapper icons content\r\n                }</code></pre>\r\n<h2 id=\"sideshow-iconmapper\">Sideshow: IconMapper</h2>\r\n<p>IconMapper is a function that knows how to retrieve url to icon that matches the given parameter (for example NewsArticleDto in this case):</p>\r\n<pre><code>newtype IconMapper a =\r\n    IconMapper { runIconMapper :: a -&gt; Text }</code></pre>\r\n<p>One possible implementation that knows how to deal with NewsArticleDto. We have two levels of hierarchicy here, because UserNewsDto has special rules for figuring out which icon to use:</p>\r\n<pre><code>iconMapper :: (Route App -&gt; Text) -&gt; IconMapper UserNewsIconDto -&gt; IconMapper NewsArticleDto\r\niconMapper render userIconMapper =\r\n    IconMapper $ article -&gt;\r\n        case article of\r\n            PlanetFoundDto _-&gt;\r\n                render $ StaticR images_news_planet_png\r\n\r\n            UserWrittenDto details -&gt;\r\n                runIconMapper userIconMapper $ userWrittenNewsDtoIcon details\r\n    ...</code></pre>\r\n<h2 id=\"back-to-json\">Back to JSON</h2>\r\n<p>I wrote ToJSON and FromJSON instances by hand, because I wanted full control on how the resulting JSON looks like. It’s possible to configure how template Haskell names fields for example, but I think that writing these out couple of times is good practice and makes sure that I understand what’s going on behind the scenes if I use template Haskell later.</p>\r\n<pre><code>instance ToJSON NewsDto where\r\n    toJSON (NewsDto { newsDtoId = nId\r\n                    , newsContents = contents\r\n                    , newsIcon = icon }) =\r\n        object [ &quot;id&quot; .= nId\r\n               , &quot;contents&quot; .= contents\r\n               , &quot;tag&quot; .= jsonTag contents\r\n               , &quot;icon&quot; .= icon\r\n               , &quot;starDate&quot; .= newsStarDate contents\r\n               ]\r\n\r\ninstance ToJSON PlanetFoundNewsDto where\r\n    toJSON (PlanetFoundNewsDto { planetFoundNewsDtoPlanetName = pName\r\n                               , planetFoundNewsDtoSystemId = sId\r\n                               , planetFoundNewsDtoPlanetId = pId\r\n                               , planetFoundNewsDtoSystemName = sName\r\n                               }) =\r\n        object [ &quot;planetName&quot; .= pName\r\n               , &quot;systemName&quot; .= sName\r\n               , &quot;planetId&quot; .= pId\r\n               , &quot;systemId&quot; .= sId\r\n               ]</code></pre>\r\n<h2 id=\"time-to-put-it-all-together\">Time to put it all together</h2>\r\n<p>Handler function authenticates user, check they’re member of a faction and then loads all the news:</p>\r\n<pre><code>getApiMessageR :: Handler Value\r\ngetApiMessageR = do\r\n    (_, _, fId) &lt;- apiRequireFaction\r\n    loadAllMessages fId</code></pre>\r\n<p>Loading messages involves multiple steps:</p>\r\n<ul>\r\n<li>retrieve News from database\r\n<ul>\r\n<li>correct faction, not dismissed, sort by date</li>\r\n</ul></li>\r\n<li>parse them into ( Key News, NewsArticle )</li>\r\n<li>get Url render function</li>\r\n<li>create mapper for user icons</li>\r\n<li>map all NewsArticles into ( NewsArticleDto, IconMapper )</li>\r\n<li>turn them into JSON and return that to client</li>\r\n</ul>\r\n<pre><code>loadAllMessages :: Key Faction -&gt; HandlerFor App Value\r\nloadAllMessages fId = do\r\n    loadedMessages &lt;- runDB $ selectList [ NewsFactionId ==. fId\r\n                                         , NewsDismissed ==. False ] [ Desc NewsDate ]\r\n    let parsedMessages = parseNewsEntities loadedMessages\r\n    render &lt;- getUrlRender\r\n    let userIcons = userNewsIconMapper render\r\n    return $ toJSON $ map (toDto . (flip (,) (iconMapper render userIcons))) parsedMessages</code></pre>\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr2733/hpr2733.png\"><img src=\"https://hackerpublicradio.org/eps/hpr2733/hpr2733-small.png\" /></a>\r\n</p>\r\n',364,107,0,'CC-BY-SA','haskell, yesod',0,0,1),
(2726,'2019-01-14','Home Theater - Part 2 Software (High Level)',1249,'I go over a high level of my notes for the software on my Media box as it relates to TV/Movies/Music','<p><a href=\"https://docs.google.com/document/d/1E1xAwWpq-C4vEh8LCRw7MD7jnaclX9Faf2L3dZWiqQY\" class=\"uri\">https://docs.google.com/document/d/1E1xAwWpq-C4vEh8LCRw7MD7jnaclX9Faf2L3dZWiqQY</a></p>\r\n<ul>\r\n<li>Future Eps for Series:\r\n<ul>\r\n<li>Sonarr / Filename Fixes</li>\r\n<li>SABnzbd</li>\r\n<li>Subsonic / orpheus.network /Audio Fixes</li>\r\n</ul></li>\r\n</ul>\r\n\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2726.pdf\">Local copy of the shownotes</a></p>',36,0,0,'CC-BY-SA','kodi, deluge,Sonarr,Plex,Subsonic,SpiderOakONE,Zoneminder,Borg Backup,rclone,Redshift,Audacity',0,0,1),
(2727,'2019-01-15','Passwords',467,'How to do passwords better. ','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Hello and welcome to Hacker Public Radio, I’m Edward Miro and for this episode I decided to record an episode on the importance of good passwords. This will be part one in a series of podcasts I’m going to call “Information Security for Everyone”. As with most of the content I create in the world of infosec, my goal is to present the information in a way that a majority of people can get value from it and anyone can play this for a friend, colleague or family member and make it easy for the non-hackers in our lives to understand.</p>\r\n<h2 id=\"passwords\">Passwords</h2>\r\n<p>One of the first things most people think about when it comes to online safety is their password. We all know that passwords are to our online accounts what keys are for our locks. Would you use the same key for your house, your car, your office and your safety deposit box? Of course not. And if you did, what would happen if a bad guy could get a copy of just that one key? They’d have access to everything. With so much of our personal, confidential, financial and medical information accessible from our various online accounts, what can we do to make things as safe as possible?</p>\r\n<p>For me personally I employ and advise a three faceted approach:</p>\r\n<ol type=\"1\">\r\n<li>Complex passwords</li>\r\n<li>Unique passwords</li>\r\n<li>Two-factor authentication (where available)</li>\r\n</ol>\r\n<p>Clearly the solution is to use a unique password for each account and make them complicated enough that an attacker couldn’t guess it or crack it in an amount of time that would be actionable. One problem this presents to general users is the inconvenience and difficulty in remembering these passwords or storing them in a secure way. This leads into my first bit of advice:</p>\r\n<h2 id=\"password-managers\">Password Managers</h2>\r\n<p>My recommendation is to use a password manager. I’m going to make references to managers such as LastPass because that’s the one I’ve always used, but I’m not saying it’s the best or would be the best for you. There are many great options and I would rather people use the one that works the best for them and not merely the one I like best. Anyways. Applications like LastPass give you the ability to store all passwords in your encrypted “vault” and then request them through browser add-ons or standalone applications. They also have built in features that allow you to generate secure passwords at any length or complexity.</p>\r\n<p>When using a password manager, all you have to remember is your ONE master password. When you sign in, the manager can then decrypt all your saved passwords and let you use them. When I sign up for a website, I use LastPass to generate the longest and most complex password supported by the site and it gets stored in my vault safely for later use.</p>\r\n<p>There are various options online to choose from and I suggest you do some research and try a few different ones to see what is comfortable for you. One thing to consider when using a password manager is that the master password is your single point of failure and should be a long and complex password that you don’t use ANYWHERE else.</p>\r\n<p>If you’re wondering how to come up with a secure password that you can remember there are various strategies online, but I follow this:</p>\r\n<p>Take a poem, song lyrics or phrase that is easy for you to remember. For this example I’ll use the phrase:</p>\r\n<pre><code>&quot;The stars at night are big and bright. Deep in the heart of Texas.&quot;</code></pre>\r\n<p>Then I take the first letters from each word and that gives me:</p>\r\n<pre><code>TsanababdithoT.</code></pre>\r\n<p>Then I swap out the vowels for some numbers/special characters. And that gives me:</p>\r\n<pre><code>T5@n@b@bd1th0T</code></pre>\r\n<p>I checked that password on Dashlane’s Password Strength Checker, and got the following results:</p>\r\n<pre><code>It would take a computer about 204 million years to crack your password</code></pre>\r\n<p>And that’s just an example of a very secure password that I thought up in just a few seconds that I probably won’t ever be able to forget it.</p>\r\n<h2 id=\"fa-two-factor-authentication\">2FA (two-factor authentication)</h2>\r\n<p>Another very important recommendation I want to touch on in this episode is using two-step authentication. I use it for all accounts that offer it and it’s very easy to set-up and use. It works in tandem with an application on my mobile device called Google Authenticator(though there are others and like LastPass this is just the one I use) and it’s available for Android and iOS. After you install the app, you access the security settings for the account you want to protect and register it with your device.</p>\r\n<p>What it does is provide a “second” password when logging it that is only used one time. When you log in, the site will prompt for the two-step authentication code, you then open the Google Authenticator app and the code for the session will be listed. The codes are only available for a short time and are constantly changing. This makes someone gaining unauthorized access to your account VERY difficult.</p>\r\n<h2 id=\"a-few-closing-thoughts\">A few closing thoughts</h2>\r\n<p>Some information security professionals see a password manager as insecure due to it being a single point of failure. I can understand this and would respond that although this might be true, having a complex master password and using the manager in conjunction with two-step authentication makes it a pretty safe and solid system. And even if there is a breach, none of my passwords are the same and changing them is incredibly fast and easy with a manager.</p>\r\n<p>Also, I usually don’t recommend keeping hard copies of passwords, but if you can guarantee the physical security of your password list, this in my opinion is preferable to using the same, insecure password for all your accounts.</p>\r\n<p>Please remember, if you’re like most people on the internet and you use an easy to crack password or the same password on all your sites, all it takes is one compromised account to give bad guys access to everything.</p>\r\n<p>I’m also including a list of links in the bottom of the show notes to everything I mentioned and also a link to the site <em>Have I Been Pwned</em>. This is a service that collects accounts that have been involved in hacks and lets anyone search for their email address and see if their information is already compromised. If it is, do this NOW:</p>\r\n<ol type=\"1\">\r\n<li>Setup a password manager with a strong master password.</li>\r\n<li>Change all your passwords using the built in password generator in your password manager and save them in your vault as you go.</li>\r\n<li>In the future when breaches happen, it’s incredibly easy to change your password and you’ll also rest easy knowing that the password obtained can’t get them into anything else.</li>\r\n</ol>\r\n<p>I know this will take a long time. But it’s worth it. Then, you only have to remember one master password and you will be exponentially safer online.</p>\r\n<p>I also linked SplashData’s “The Top 100 Worst Passwords of 2018”. PLEASE don’t use anything on this list.</p>\r\n<p>Well, thank you for taking the time to listen to my basic introduction to passwords. I hope this will help any non-hackers in your life and like I say in all my podcasts, I don’t claim to know all there is to know and love feedback and any opportunities to learn more or collaborate with others in the field. As with most of the research and articles I’ve written in the past, these are geared toward standard users in a business setting and are meant to be a jumping off point for further research and to be a foundation for cyber security 101 level training classes. If you like what I do, and want to have me come speak to your team, or just wanna chat, feel free to email me.</p>\r\n<p>Thank you and have a safe 2019!</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.lastpass.com/\" class=\"uri\">https://www.lastpass.com/</a> - My favorite password manager.</li>\r\n<li><a href=\"https://howsecureismypassword.net/\" class=\"uri\">https://howsecureismypassword.net/</a> - Check if your password is strong enough.</li>\r\n<li><a href=\"https://twofactorauth.org/\" class=\"uri\">https://twofactorauth.org/</a> - Setup 2FA on all the accounts you can.</li>\r\n<li><a href=\"https://haveibeenpwned.com/\" class=\"uri\">https://haveibeenpwned.com/</a> - See if your email/accounts have been compromised already.</li>\r\n<li><a href=\"https://www.teamsid.com/100-worst-passwords/\" class=\"uri\">https://www.teamsid.com/100-worst-passwords/</a> - Top 100 Worst Passwords of 2018.</li>\r\n</ul>\r\n',372,74,0,'CC-BY-SA','Information Security for Everyone',0,0,1),
(2730,'2019-01-18','Resizing images for vcard on Android',688,'Automating the steps needed to get images formatted for VCard import into Android phones','<p>I have had problems importing vcards onto my Android phone. After a lot of troubleshooting, I tracked it down to embedded images in the card. The PHOTO;VALUE field to be precise.</p>\r\n\r\n<p>Some images worked and some didn\'t, and looking at the properties some that worked were larger than others that didn\'t. In the end I tracked down a post on <a href=\"https://stackoverflow.com/questions/17834815/how-to-find-the-max-image-size-supported-for-contacts-images\">stackoverflow</a> that hinted that the aspect ratio was important. And sure enough it was.</p>\r\n\r\n<blockquote class=\"wp-block-quote\">\r\n<p>starting with jelly bean (4.1), android now supports contact images that are 720x720.<br />before, starting with ICS (4.0), android has supported contact images that are 256x256.<br />and before that, contact photos had just a size of a thumbnail - 96x96.</p>\r\n<cite><a href=\"https://stackoverflow.com/users/878126/android-developer\">Stack exchange</a> </cite>\r\n</blockquote>\r\n\r\n\r\n<p>I tried a 720x720 on a few phones but decided to settle on 256x256 for now. </p>\r\n\r\n\r\n<p>To do image manipulation, I tend to use the <a href=\"https://www.graphicsmagick.org/\">GraphicsMagick</a> tools instead of the more popular <a href=\"https://www.imagemagick.org/script/index.php\">ImageMagick</a> suite. You should be able to achieve the same result in either.</p>\r\n\r\n\r\n<p>My requirements were:</p>\r\n<ul>\r\n<li>The images should be scaled so that the maximum height/width shrinks to 256, maintaining the aspect ratio.</li>\r\n<li>The images should always be 256x256 in size.</li>\r\n<li>Scaled images should be padded and centered on a white background.</li>\r\n<li>All color profile information should be removed.</li>\r\n</ul>\r\n\r\n\r\n<p>To use an example I took the following image and saved it as Linus_Torvalds.jpg</p>\r\n\r\n\r\n<p>By <a title=\"User:Krd\" href=\"//commons.wikimedia.org/wiki/User:Krd\">Krd</a> (photo)<a class=\"new\" title=\"User:Von Sprat (page does not exist)\" href=\"//commons.wikimedia.org/w/index.php?title=User:Von_Sprat&amp;action=edit&amp;redlink=1\">Von Sprat</a> (crop/extraction) - <a title=\"File:LinuxCon Europe Linus Torvalds 03.jpg\" href=\"//commons.wikimedia.org/wiki/File:LinuxCon_Europe_Linus_Torvalds_03.jpg\">File:LinuxCon Europe Linus Torvalds 03.jpg</a>, <a title=\"Creative Commons Attribution-Share Alike 4.0\" href=\"https://creativecommons.org/licenses/by-sa/4.0\">CC BY-SA 4.0</a>, <a href=\"https://commons.wikimedia.org/w/index.php?curid=54706023\">Link</a></p>\r\n\r\n\r\n<p>Step one is to use the <a href=\"https://href=&quot;https://www.graphicsmagick.org/GraphicsMagick.html#details-size\">-size</a> 256x256 option which you would think would do the scaling, but in fact it only reduces the file to 366x509 which is not what I expected.</p>\r\n\r\n<pre><code>$ gm convert -size 256x256 \"Linus_Torvalds.jpg\" Linus_Torvalds_1.jpg<br />$ gm identify Linus_Torvalds_1.jpg\r\nLinus_Torvalds_1.jpg JPEG 366x509+0+0 DirectClass 8-bit 56.1Ki 0.000u 0m:0.000002</code></pre>\r\n\r\n\r\n<p><img style=\"border-style: solid;\" src=\"https://hackerpublicradio.org/eps/hpr2730/Linus_Torvalds_1.jpg\" /></p>\r\n\r\n\r\n<p>However it appears that the option is used when creating new files, and is also used by the processor to determine the intended target size. Which is why I left it in. So what we actually need is the <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-resize\">-resize</a> option.</p>\r\n\r\n<pre><code>\r\n$ gm convert -size 256x256 \"Linus_Torvalds.jpg\" -resize 256x256 Linus_Torvalds_2.jpg\r\n$ gm identify Linus_Torvalds_2.jpg\r\nLinus_Torvalds_2.jpg JPEG 184x256+0+0 DirectClass 8-bit 47.7Ki 0.000u 0m:0.000001s</code><code>\r\n</code></pre>\r\n\r\n<p><img style=\"border-style: solid;\" src=\"https://hackerpublicradio.org/eps/hpr2730/Linus_Torvalds_2.jpg\" /></p>\r\n\r\n<p>So this has done a good job at scaling the image down. It\'s now scaled correctly so that the biggest edge is scaled down to 256. In this case it was the height but the width is now shorter than what we need. We do want to maintain the aspect ratio so that we don\'t distort the image but 184x256 is not 1:1 aspect ratio nor is it the needed dimensions of 256x256.</p>\r\n\r\n<p>The solution to this is to use the <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-extent\">-extent</a> command.</p>\r\n\r\n<pre><code>$ gm convert -size 256x256 \"Linus_Torvalds.jpg\" -resize 256x256 -extent 256x256 Linus_Torvalds_3.jpg\r\n$ gm identify Linus_Torvalds_3.jpg\r\nLinus_Torvalds_3.jpg JPEG 256x256+0+0 DirectClass 8-bit 48.0Ki 0.000u 0m:0.000001s</code></pre>\r\n\r\n\r\n<p><img style=\"border-style: solid;\" src=\"https://hackerpublicradio.org/eps/hpr2730/Linus_Torvalds_3.jpg\" /></p>\r\n\r\n\r\n<p>This gives us the correct size and a 1:1 aspect ratio, but the image is left justified. To fix this we need to use the <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-gravity\">-gravity</a> command. That needs to be the first argument of the command. Finding the correct order of the commands took some trial and error.</p>\r\n\r\n<pre><code>$ gm convert -gravity center -size 256x256 \"Linus_Torvalds.jpg\" -resize 256x256 -extent 256x256 Linus_Torvalds_4.jpg\r\n$ gm identify Linus_Torvalds_4.jpg\r\nLinus_Torvalds_4.jpg JPEG 256x256+0+0 DirectClass 8-bit 48.5Ki 0.000u 0m:0.000001s</code></pre>\r\n\r\n<p><img style=\"border-style: solid;\" src=\"https://hackerpublicradio.org/eps/hpr2730/Linus_Torvalds_4.jpg\" /></p>\r\n\r\n<p>Finally we remove all profile information using <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-profile\">+profile</a> which should make the image more generic.</p>\r\n\r\n<pre><code>$ gm convert -gravity center -size 256x256 \"Linus_Torvalds.jpg\" -resize 256x256 -extent 256x256 +profile \"*\" Linus_Torvalds_5.jpg\r\n$ gm identify Linus_Torvalds_5.jpg\r\nLinus_Torvalds_5.jpg JPEG 256x256+0+0 DirectClass 8-bit 5.7Ki 0.000u 0m:0.000001s</code></pre>\r\n\r\n<p>Putting it all together we get.</p>\r\n\r\n<pre><code>gm convert <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-gravity\">-gravity</a> center <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-size\">-size</a> 256x256 \"big-image.jpg\" <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-resize\">-resize</a> 256x256 <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-extent\">-extent</a> 256x256 <a href=\"https://www.graphicsmagick.org/GraphicsMagick.html#details-profile\">+profile</a> \"*\" \"256x256_image.jpg\"\r\n</code></pre>\r\n\r\n<p><img style=\"border-style: solid;\" src=\"https://hackerpublicradio.org/eps/hpr2730/Linus_Torvalds_5.jpg\" /></p>\r\n\r\n<p>You should now be able to add these images to vcards without any problem.</p>\r\n\r\n<p>Here is a one liner to create 96x96 256x256 and 720x720 thumbnails of all the jpg images in a directory.</p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<pre><code>for image in *jpg;do for size in 96x96 256x256 720x720; do gm convert -gravity center -size ${size} \"${image}\" -resize ${size} -extent ${size} +profile \"*\" \"thumbnail-${size}-${image}\";done;done</code></pre>\r\n\r\n<p>Also available <a href=\"https://kenfallon.com/resizing-images-for-vcard-on-android/\">here</a></p>\r\n',30,0,1,'CC-BY-SA','GraphicsMagick, ImageMagick, VCard, Android, LinageOS',0,0,1),
(2728,'2019-01-16','The Unreliable Narrator In Storytelling',814,'Lostnbronx looks at unreliable narrators and narrative techniques in stories.','<p>In some stories, the narrator or dominating character can’t be trusted by the audience, creating opportunities for various storytelling effects. What makes for an unreliable narrator? What are some of the strengths and weaknesses of this technique? How can the underlying structure of a tale be similar to an unreliable narrator, even if the story doesn’t actually have one? Lostnbronx takes a rambling, off-the-cuff look at this interesting literary tool</p>\r\n',107,105,0,'CC-BY-SA','stories,storytelling,narration,lostnbronx',0,0,1),
(2731,'2019-01-21','My 8 bit Christmas',1579,'I got a new, old computer for Christmas - an Acorn BBC microcomputer model B.','<p>For Christmas 2018 Santa – well, Mrs mcnalu – gave me a <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Model B</a> which was my first computer back in the early 1980s. This request was heavily implied in <a href=\"https://tuxjam.otherside.network/?p=382\">TuxJam 70 - Gift for Geeks</a>.</p>\r\n<p>I can highly <a href=\"https://www.ebay.co.uk/usr/retrofix-uk?_trksid=p2047675.l2559\">recommend the seller</a> who, as you will hear, was extremely helpful when this 36 year old bundle of 8 bit loveliness became very poorly on Boxing Day. It came with a Turbo MMC installed and you can see it in action on <a href=\"https://www.youtube.com/watch?v=FunVINQS0Rw\">another BBC Model B in this video</a>.</p>\r\n<p>The noise you hear at the start - the beeeeee BEEP - is the sound of me turning on the BBC. I mention in the show that mode 0 of the Beeb, as it is affectionately known, has 80 columns and 40 rows. This isn’t quite right, there are only 32 rows in mode 0.</p>\r\n',268,0,0,'CC-BY-SA','retro,BBC,8-bit,assembler',0,0,1),
(2734,'2019-01-24','Mashpodder',1139,'A poor rushed attempt at covering the excellent podcast client mashppoder','<p>After I recorded this episode I had a little look on the HPR site I found that Ken Fallon had already covered mashpodder, no doubt he did a better job than me as this was done in a bit of a rush.</p>\r\n<p>Hopefully somebody will find this of some use</p>\r\n<p>Related links below:-</p>\r\n<ul>\r\n<li><p>HPR episode by Ken Fallon covering Mashpodder<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=0481\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=0481</a></p></li>\r\n<li><p>HPR episode where I talk about my Compaq Ipaq home server<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2112\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2112</a></p></li>\r\n<li><p>HPR episode where I cover my previous pocast client Hpodder<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2106\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2106</a></p></li>\r\n<li><p>Bashpodder homepage<br />\r\n<a href=\"https://lincgeek.org/bashpodder/\" class=\"uri\">https://lincgeek.org/bashpodder/</a></p></li>\r\n<li><p>Mashpodder homepage<br />\r\n<a href=\"https://github.com/chessgriffin/mashpodder\" class=\"uri\">https://github.com/chessgriffin/mashpodder</a> The original link to mashpodder on google code is dead, currently now on github</p></li>\r\n<li><p>Link to the original Linux reality also now dead, but found a link archive to the shows on podbay<br />\r\n<a href=\"https://podbay.fm/show/125849458\" class=\"uri\">https://podbay.fm/show/125849458</a></p></li>\r\n<li><p>Link to the excellent GNU world order by Klaatu, I think it was this episode that he mentioned the great Chess Griffin from Linux reality. Apologies if this is the wrong episode.<br />\r\n<a href=\"https://gnuworldorder.info/audiophile/gnuWorldOrder_12x24.ogg\" class=\"uri\">https://gnuworldorder.info/audiophile/gnuWorldOrder_12x24.ogg</a></p></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Podcast, ncurses, command-line',0,0,1),
(2750,'2019-02-15','Windmill is on the Fritz',270,'Using Fritzing to help reverse engineer a circuit in a winter model village windmill','<p>\r\nIn this episode Ken uses <a href=\"https://fritzing.org/\">Fritzing</a> tool to keep track of how a winter model village windmill is wired together. Leading to identifying the problem component.\r\n</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2750/xmas-mill.fzz\"><img src=\"https://hackerpublicradio.org/eps/hpr2750/xmas-mill_schem.jpg\" /></a></p>\r\n\r\n<p>\r\nFritzing is an open-source initiative to develop amateur or hobby CAD software for the design of electronics hardware, to support designers and artists ready to move from experimenting with a prototype to building a more permanent circuit. It was developed at the University of Applied Sciences of Potsdam.\r\n<br />\r\nFrom <a href=\"https://en.wikipedia.org/wiki/Fritzing\">https://en.wikipedia.org/wiki/Fritzing</a></p>',30,103,0,'CC-BY-SA','Fritzing, Reverse Engineering, LED',0,0,1),
(2732,'2019-01-22','Storytelling formula compliance',1692,'Telling a story? want a reaction? USE THE FORMULA','<p>\r\nStorytelling has had a formula for yearsAndYears. Some people speak of it in disdain (\"it was too formulaïc\") and others (creative writing and intro film teachers, mostly) praise it. Everybody else (us) is a sucker for it.\r\n</p>\r\n\r\n<p>\r\nHere is the literal formula, in pseudo code:\r\n</p>\r\n\r\n<pre><code>{A} \r\n{A} Reinforced\r\n\r\n{Z}\r\n\r\n{A} Returned\r\n\r\n{B...Y}\r\n\r\n{Z} Returned\r\n</code></pre>\r\n\r\n<p>\r\nYou can (and should, because it\'s free and you can throw out your work if you don\'t like it) practise this formula by plugging in events to represent A and Z, where A and Z are polar opposites.\r\n</p>\r\n\r\n<p>\r\nReally obvious examples are any given romantic comedy:\r\n</p>\r\n\r\n<pre><code>{A} Jack is A=\"single and free\"\r\n{A} Scene to reinforce that Jack is in relationships with no strings attached. Jack is {A}.\r\n\r\n{Z} Jack meets Jill, realises she makes him happy. He decides he\'s had enough of being {A} and want to be {Z=married}\r\n\r\n{A} Reunion with old school mate makes Jack question his resolve. He leaves Jill so he can be {A}\r\n\r\n{B...Y} Plot happens. Jack does stuff, Jill does stuff. Funny? Tragic? You decide!\r\n\r\n{Z} Jack realizes at last that he\'s only happy with Jill, and that being {Z} with Jill is the only way to be truly free.\r\n</code></pre>\r\n\r\n<p>\r\nYou can also try it with the old Evil Empire plot line.\r\n</p>\r\n\r\n<pre><code>{A} Jill is an {A=obedient citizen}. Loves her mama, loves Jesus and America, too.\r\n{A} Scene in which Jill witnesses a Rebel being mistreated unjustly, but does nothing to stand up for what is right, because she is {A}.\r\n\r\n{Z} Jill meets Jack, an outlaw and rebel against the Empire. He\'s in trouble, so she helps him evade the police.\r\n\r\n{A} Jill, horrified at her own rebellion, conforms all the more. She is dedicated to the Empire, and works diligently to hunt down Jack and his rag tag band of rebels.\r\n\r\n{B...Y} Plot happens. Action, laser guns, laser swords, nationalism, motorcycle gangs.\r\n\r\n{Z} Jill, seeing the devastation her allegiance has caused, realises that the Empire is actually Evil. She joins the rebels to fight for freedom.\r\n</code></pre>\r\n\r\n<p>\r\nNow go practice this. Soon you will be telling stories, jokes, and anecdotes that have a clear beginning, a clear conflict, and a clear ending.\r\n</p>\r\n\r\n',78,99,1,'CC-BY-SA','story, character, plot, writing',0,0,1),
(2735,'2019-01-25','Soffritto',138,'A short episode on a common cookery technique','<p>Hello and a belated Happy New Year to you all in HPR land, Ken has recently made a call for more shows as the queue is a little light at the moment so I was pondering what to waffle on about.</p>\r\n<p>You may know from a couple of my previous shows that as well as being into tech and Linux I’m also a keen Cook, and try and prepare as much of the food we eat at home from scratch as possible.</p>\r\n<p>One of the keys to good dishes is a base of sweated vegetables such as onion, celery carrot and garlic which when cooked in olive oil, is called a <em>Soffritto</em> in Italian cookery. In other parts of the Mediterranean and Latin America where Europeans settled this base to dishes may include other vegetables such as peppers, tomatoes and mushrooms, and have other names such as <em>mirepoix</em> (/mɪərˈpwɑː/ meer-PWAH); but the idea is the same to give a base flavour to soups, sauces, risotto and stew type dishes.</p>\r\n<p>Although not called the same thing this is also replicated in Asian cookery where spices and other aromatics are included such as ginger, lemon grass, chillies, cumin and coriander seeds.</p>\r\n<p>While it is not obligatory to start dishes in such a way if you do use a base of flavours like this when cooking you will find that the finished dish has a more complex and deep flavour at the end, so if you don’t do this give it a try.</p>\r\n<p>A simple starter is to make a tomato sauce for pasta using a base of finely chopped onion, celery, carrot and garlic soften all the vegetables in a pan with some olive oil, add a tin of tomatoes or jar of passata (sieved tomatoes) reduce for 10-15 minutes until all the flavours combine and use as a sauce over pasta with grated cheese.</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Sofrito\" class=\"uri\">https://en.wikipedia.org/wiki/Sofrito</a></p>\r\n',338,93,0,'CC-BY-SA','Food, cookery, how to, food preparation',0,0,1),
(2736,'2019-01-28','Response to show 2720',1104,'Some suggestions on how to improve a Bash script','<h2 id=\"introduction\">Introduction</h2>\r\n<p>On January 4<sup>th</sup> 2019 Ken Fallon did a great show entitled <a href=\"https://hackerpublicradio.org/eps.php?id=2720\" title=\"Download youtube channels using the rss feeds\"><em>hpr2720 :: Download youtube channels using the rss feeds</em></a> where he presented a Bash script called <a href=\"https://hackerpublicradio.org/eps/hpr2720/youtube-rss.bash\" title=\"youtube-rss.bash\"><code>youtube-rss.bash</code></a> for managing YouTube downloads through RSS feeds.</p>\r\n<p>Ken said he welcomed constructive feedback <font size=\"+3\">☺</font></p>\r\n<p>When I see a Bash script these days I usually find myself looking for ways to rewrite it to make it fit in with what I have been learning while doing my <em>Bash Tips</em> sub-series. Either that or I find it’s got some better ideas than I’ve been using which I have to find out about.</p>\r\n<p>I also spend time going over my own old scripts (I was writing them in the 1990’s in some cases) and trying to incorporate newer Bash features.</p>\r\n<p>Suffice it to say that I spotted some areas for improvement in Ken’s script and thought this might be the way to share my thoughts about them. We’re low on shows as I write this, so that gave me more motivation to make a show rather than add a comment or send Ken an email.</p>\r\n<p><small><b>Apology:</b> I’m still suffering from the aftermath of some flu-like illness so have had to edit coughing fits out of the audio at various points. If you detect any remnants then I’m sorry!</small></p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2736/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2720\">HPR episode 2720 “<em>hpr2720 :: Download youtube channels using the rss feeds</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2720/youtube-rss.bash\"><code>youtube-rss.bash</code></a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Cat_(Unix)\">Wikipedia article on <code>cat</code></a>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Cat_(Unix)#Useless_use_of_cat\">Useless use of <code>cat</code></a></li>\r\n</ul></li>\r\n</ul>',225,42,1,'CC-BY-SA','Bash,ShellCheck',0,0,1),
(2737,'2019-01-29','My Pioneer RT-707 Reel-to-Reel Tape Deck',1381,'An intro to more of my legacy audio equipment.','<p>I\'ve had this Pioneer RT-707 reel-to-reel tape deck for something like 10 years, but only recently started using it with enthusiasm. In this episode I talk about the tape deck, about the technology, and about my memories of using this kind of audio tape as a kid. I demonstrate playback of one of my parents\' mix tapes, and I also used this machine to record the last few minutes of the podcast onto a reel to reel tape, which of course I then had to transfer back to digital before submitting the show.</p>\r\n\r\n<p>Click image below to see a photo album relating to the tape deck.</p>\r\n\r\n<a href=\"https://www.flickr.com/photos/137675441@N05/albums/72157705976621534\" title=\"Pioneer Reel-to-Reel Tape Deck\"><img src=\"https://hackerpublicradio.org/eps/hpr2737_46803567611_7e1583f534_z.jpg\" alt=\"Pioneer Reel-to-Reel Tape Deck\"></a>\r\n\r\n<p>Tape deck in action (video)</p>\r\n\r\n<p>\r\n<a href=\"https://www.youtube.com/embed/VezOKPwhZgg\"><img src=\"https://hackerpublicradio.org/eps/hpr2737_maxresdefault.jpg\" />\r\n</p>',238,0,0,'CC-BY-SA','audio, vintage audio, stereo components, audio tape, recording',0,0,1),
(3046,'2020-04-06','HPR Community News for March 2020',4545,'HPR Volunteers talk about shows released and comments posted in March 2020','<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/0385.html\" target=\"_blank\">crvs</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=3021\" target=\"_blank\">3021</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-03-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3021\" target=\"_blank\">HPR Community News for February 2020</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=3022\" target=\"_blank\">3022</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-03-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3022\" target=\"_blank\">FOSDEM 2020 Stand Interviews</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=3023\" target=\"_blank\">3023</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-03-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3023\" target=\"_blank\">Critique My Script, Episode 1 - Qots-Crew-Gen</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0380.html\" target=\"_blank\">Carl</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3024\" target=\"_blank\">3024</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-03-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3024\" target=\"_blank\">A funny thing happened the other day</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=3025\" target=\"_blank\">3025</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-03-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3025\" target=\"_blank\">Keep unwanted messages off the Fediverse</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=3026\" target=\"_blank\">3026</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-03-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3026\" target=\"_blank\">Hex Bug and Battle Bots</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=3027\" target=\"_blank\">3027</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-03-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3027\" target=\"_blank\">What is quantum computing and why should we care?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0379.html\" target=\"_blank\">mightbemike</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3028\" target=\"_blank\">3028</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-03-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3028\" target=\"_blank\">Monads and Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0385.html\" target=\"_blank\">crvs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3029\" target=\"_blank\">3029</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-03-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3029\" target=\"_blank\">At Union Station with a train delay</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=3030\" target=\"_blank\">3030</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-03-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3030\" target=\"_blank\">My new Samsung tablet</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=3031\" target=\"_blank\">3031</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-03-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3031\" target=\"_blank\">Daniel Persson - Me? Me!</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=3032\" target=\"_blank\">3032</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-03-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3032\" target=\"_blank\">piCore on a Raspberry Pi 1 Model B</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=3033\" target=\"_blank\">3033</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-03-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3033\" target=\"_blank\">32 Bit Time Travel</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3034\" target=\"_blank\">3034</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-03-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3034\" target=\"_blank\">How to bridge Freenode IRC rooms to Matrix.org</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3035\" target=\"_blank\">3035</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-03-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3035\" target=\"_blank\">Decentralised Hashtag Search and Subscription in Federated Social Networks</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=3036\" target=\"_blank\">3036</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-03-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3036\" target=\"_blank\">WiiU is dead long live WiiU!</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=3037\" target=\"_blank\">3037</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-03-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3037\" target=\"_blank\">Ambient recording at Union Station</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=3038\" target=\"_blank\">3038</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-03-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3038\" target=\"_blank\">Solo Magic</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=3039\" target=\"_blank\">3039</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-03-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3039\" target=\"_blank\">Making a Raspberry Pi status display</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=3040\" target=\"_blank\">3040</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-03-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3040\" target=\"_blank\">Why use GNU Autotools</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=3041\" target=\"_blank\">3041</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-03-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3041\" target=\"_blank\">How to use GNU Autotools</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=3042\" target=\"_blank\">3042</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-03-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3042\" target=\"_blank\">The COVID-19 Work From Home Stream - Day 0</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</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 23 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3009#comments\" target=\"_blank\">hpr3009</a></strong>\n(2020-02-13) \"<em>Linux Inlaws S01 E01</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3009#5\" target=\"_blank\">Comment 5</a>:\nbittin on 2020-03-05:\n\"yay\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3019#comments\" target=\"_blank\">hpr3019</a></strong>\n(2020-02-27) \"<em>Linux Inlaws S01E02 FOSDEM shenanigans</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3019#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2020-03-05:\n\"FLOSS Weekly #568\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 21 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3023#comments\" target=\"_blank\">hpr3023</a></strong>\n(2020-03-04) \"<em>Critique My Script, Episode 1 - Qots-Crew-Gen</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0380.html\" target=\"_blank\">Carl</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2020-03-04:\n\"Bash arithmetic\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2020-03-04:\n\"Another Bash-ism that might be useful\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#3\" target=\"_blank\">Comment 3</a>:\nnobody on 2020-03-04:\n\"There must be an easier way\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#4\" target=\"_blank\">Comment 4</a>:\nnobody on 2020-03-04:\n\"Little correction to my comment\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#5\" target=\"_blank\">Comment 5</a>:\nCarl on 2020-03-05:\n\"Thanks for the comments\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#6\" target=\"_blank\">Comment 6</a>:\nCarl on 2020-03-05:\n\"Thanks for the comments\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#7\" target=\"_blank\">Comment 7</a>:\nnobody on 2020-03-05:\n\"Re: Re:\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#8\" target=\"_blank\">Comment 8</a>:\nnobody on 2020-03-05:\n\"Standalone increment in ash\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#9\" target=\"_blank\">Comment 9</a>:\nCarl on 2020-03-05:\n\"Neat\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#10\" target=\"_blank\">Comment 10</a>:\nnobody on 2020-03-05:\n\"$(())\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3023#11\" target=\"_blank\">Comment 11</a>:\nCarl on 2020-03-05:\n\"Version 3\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3024#comments\" target=\"_blank\">hpr3024</a></strong>\n(2020-03-05) \"<em>A funny thing happened the other day</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3024#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2020-03-05:\n\"great storytelling\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3024#2\" target=\"_blank\">Comment 2</a>:\nMrX on 2020-03-07:\n\"Re great storytelling\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3025#comments\" target=\"_blank\">hpr3025</a></strong>\n(2020-03-06) \"<em>Keep unwanted messages off the Fediverse</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=3025#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2020-03-09:\n\"I disagree\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3025#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-03-09:\n\"Further discussion\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3026#comments\" target=\"_blank\">hpr3026</a></strong>\n(2020-03-09) \"<em>Hex Bug and Battle Bots</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=3026#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2020-03-25:\n\"Great episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3028#comments\" target=\"_blank\">hpr3028</a></strong>\n(2020-03-11) \"<em>Monads and Haskell</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0385.html\" target=\"_blank\">crvs</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3028#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2020-03-11:\n\"welcome!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3028#2\" target=\"_blank\">Comment 2</a>:\ncrvs on 2020-03-11:\n\"Re: welcome!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3031#comments\" target=\"_blank\">hpr3031</a></strong>\n(2020-03-16) \"<em>Daniel Persson - Me? Me!</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=3031#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2020-03-22:\n\"History\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3032#comments\" target=\"_blank\">hpr3032</a></strong>\n(2020-03-17) \"<em>piCore on a Raspberry Pi 1 Model B</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3032#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2020-03-26:\n\"Minimal distros are the best\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3034#comments\" target=\"_blank\">hpr3034</a></strong>\n(2020-03-19) \"<em>How to bridge Freenode IRC rooms to Matrix.org</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3034#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2020-03-22:\n\"Did not know 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/2020-March/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-March/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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0385.html\">crvs</a>, <a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 28 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2745,'2019-02-08','My YouTube Subscriptions #1',1262,'Part one of my list of subscribed channels','<p>I am subscribed to a number of YouTube channels, and I am sharing them with you</p>\r\n<ul>\r\n<li>Deep Look - <a href=\"https://www.youtube.com/channel/UC-3SbfTPJsL8fJAPKiVqBLg\" class=\"uri\">https://www.youtube.com/channel/UC-3SbfTPJsL8fJAPKiVqBLg</a></li>\r\n<li>Axanar - <a href=\"https://www.youtube.com/channel/UCxRrQIpejUXUi8i4mAbzSlg\" class=\"uri\">https://www.youtube.com/channel/UCxRrQIpejUXUi8i4mAbzSlg</a></li>\r\n<li>Lawrence Systems - <a href=\"https://www.youtube.com/channel/UCHkYOD-3fZbuGhwsADBd9ZQ\" class=\"uri\">https://www.youtube.com/channel/UCHkYOD-3fZbuGhwsADBd9ZQ</a></li>\r\n<li>Rick Beato - <a href=\"https://www.youtube.com/channel/UCJquYOG5EL82sKTfH9aMA9Q\" class=\"uri\">https://www.youtube.com/channel/UCJquYOG5EL82sKTfH9aMA9Q</a></li>\r\n<li>Wolters’ World - <a href=\"https://www.youtube.com/channel/UCFr3sz2t3bDp6Cux08B93KQ\" class=\"uri\">https://www.youtube.com/channel/UCFr3sz2t3bDp6Cux08B93KQ</a></li>\r\n<li>Fab Four Archivist - <a href=\"https://www.youtube.com/channel/UCxWFyPG8Qgj-1BVqC_r6rLg\" class=\"uri\">https://www.youtube.com/channel/UCxWFyPG8Qgj-1BVqC_r6rLg</a></li>\r\n<li>Fraser Cain - <a href=\"https://www.youtube.com/channel/UCogrSQkBJn1KF0N9I4oM7eQ\" class=\"uri\">https://www.youtube.com/channel/UCogrSQkBJn1KF0N9I4oM7eQ</a></li>\r\n<li>Science and Futurism with Isaac Arthur - <a href=\"https://www.youtube.com/channel/UCZFipeZtQM5CKUjx6grh54g\" class=\"uri\">https://www.youtube.com/channel/UCZFipeZtQM5CKUjx6grh54g</a></li>\r\n<li>Creativity RV - <a href=\"https://www.youtube.com/channel/UCigPwB_DERbV5BlwV4OY9mw\" class=\"uri\">https://www.youtube.com/channel/UCigPwB_DERbV5BlwV4OY9mw</a></li>\r\n<li>Drivin’ and Vibin’ - <a href=\"https://www.youtube.com/channel/UClkhrrakVty75SWLJIbcxDA\" class=\"uri\">https://www.youtube.com/channel/UClkhrrakVty75SWLJIbcxDA</a></li>\r\n<li>Hebard’s Travels - <a href=\"https://www.youtube.com/channel/UCQ5BTuWY7B0hTaa9zK0JKNg\" class=\"uri\">https://www.youtube.com/channel/UCQ5BTuWY7B0hTaa9zK0JKNg</a></li>\r\n<li>RV Roof Installation - <a href=\"https://www.youtube.com/channel/UCPbqiR5gZQukf6uk8waWcoA\" class=\"uri\">https://www.youtube.com/channel/UCPbqiR5gZQukf6uk8waWcoA</a></li>\r\n<li>Enjoy the Journey.Life - <a href=\"https://www.youtube.com/channel/UCuhIeTBsCysER-73DnGEegQ\" class=\"uri\">https://www.youtube.com/channel/UCuhIeTBsCysER-73DnGEegQ</a></li>\r\n<li>Geeks on Tour - <a href=\"https://www.youtube.com/channel/UCLM_wnCtDaGBWkYGQS4T6Bw\" class=\"uri\">https://www.youtube.com/channel/UCLM_wnCtDaGBWkYGQS4T6Bw</a></li>\r\n<li>History with Hilbert - <a href=\"https://www.youtube.com/channel/UC1Zc6_BhPXiCWZlrZP4EsEg\" class=\"uri\">https://www.youtube.com/channel/UC1Zc6_BhPXiCWZlrZP4EsEg</a></li>\r\n<li>Keep Your Daydream - <a href=\"https://www.youtube.com/channel/UCEhJLsShZt8McryMf_DHLZQ\" class=\"uri\">https://www.youtube.com/channel/UCEhJLsShZt8McryMf_DHLZQ</a></li>\r\n<li>Living Free Forever - <a href=\"https://www.youtube.com/channel/UCozdfxd0Z7EwZFnZpBkl9Pw\" class=\"uri\">https://www.youtube.com/channel/UCozdfxd0Z7EwZFnZpBkl9Pw</a></li>\r\n<li>Mike Lux Media - <a href=\"https://www.youtube.com/channel/UCBEHEEUFV6IFY7gF2xhyPYw\" class=\"uri\">https://www.youtube.com/channel/UCBEHEEUFV6IFY7gF2xhyPYw</a></li>\r\n<li>RV Love - <a href=\"https://www.youtube.com/channel/UCsjA83xRW2iaqPox8IbDLKQ\" class=\"uri\">https://www.youtube.com/channel/UCsjA83xRW2iaqPox8IbDLKQ</a></li>\r\n<li>Shadiversity - <a href=\"https://www.youtube.com/channel/UCkmMACUKpQeIxN9D9ARli1Q\" class=\"uri\">https://www.youtube.com/channel/UCkmMACUKpQeIxN9D9ARli1Q</a></li>\r\n<li>The Fit RV - <a href=\"https://www.youtube.com/channel/UCxPSwn42fcQlQdp8DTQGRUA\" class=\"uri\">https://www.youtube.com/channel/UCxPSwn42fcQlQdp8DTQGRUA</a></li>\r\n<li>The More We Explore - <a href=\"https://www.youtube.com/channel/UC33Loj6OxDXepBuc3ry0rMg\" class=\"uri\">https://www.youtube.com/channel/UC33Loj6OxDXepBuc3ry0rMg</a></li>\r\n<li>All About RVs - <a href=\"https://www.youtube.com/channel/UCAxGFcQGIzzyS9OdHijsaLg\" class=\"uri\">https://www.youtube.com/channel/UCAxGFcQGIzzyS9OdHijsaLg</a></li>\r\n<li><a href=\"https://www.palain.com/\" class=\"uri\">https://www.palain.com/</a></li>\r\n</ul>\r\n',198,106,0,'CC-BY-SA','YouTube, Channels, Subscriptions',0,0,1),
(2755,'2019-02-22','My YouTube Subscriptions #2',1329,'Part two of my list of subscribed channels','<p>I am subscribed to a number of YouTube channels, and I am sharing them with you</p>\r\n<ul>\r\n<li>Anthony Robustelli - <a href=\"https://www.youtube.com/channel/UCxgAH7EcmKhC9bLm7xQ971g\" class=\"uri\">https://www.youtube.com/channel/UCxgAH7EcmKhC9bLm7xQ971g</a></li>\r\n<li>Apple Scruff Radio - <a href=\"https://www.youtube.com/channel/UCGAFIXNYCwA7mJWMY5zFxzw\" class=\"uri\">https://www.youtube.com/channel/UCGAFIXNYCwA7mJWMY5zFxzw</a></li>\r\n<li>Arthur C Clarke Center for Human Imagination - <a href=\"https://www.youtube.com/channel/UCigIJEygfuAhNEc9kavK2QA\" class=\"uri\">https://www.youtube.com/channel/UCigIJEygfuAhNEc9kavK2QA</a></li>\r\n<li>Baker Street - <a href=\"https://www.youtube.com/channel/UC8IaZ7-169c2vl3GOehxa6w\" class=\"uri\">https://www.youtube.com/channel/UC8IaZ7-169c2vl3GOehxa6w</a></li>\r\n<li>BBC Earth Unplugged - <a href=\"https://www.youtube.com/channel/UCbwp5B-uDBy-fS4bDA0TEaw\" class=\"uri\">https://www.youtube.com/channel/UCbwp5B-uDBy-fS4bDA0TEaw</a></li>\r\n<li>Brain Stuff - <a href=\"https://www.youtube.com/channel/UCiefLm_nIz_gOH7XHbgpdCQ\" class=\"uri\">https://www.youtube.com/channel/UCiefLm_nIz_gOH7XHbgpdCQ</a></li>\r\n<li>Candyrat Records - <a href=\"https://www.youtube.com/channel/UCMJecdKUslHToOEpeuRGwXg\" class=\"uri\">https://www.youtube.com/channel/UCMJecdKUslHToOEpeuRGwXg</a></li>\r\n<li>Cheryl Brin - <a href=\"https://www.youtube.com/channel/UCtbMXq5siIn3l-u_HKbAmrw\" class=\"uri\">https://www.youtube.com/channel/UCtbMXq5siIn3l-u_HKbAmrw</a></li>\r\n<li>Colonial Airstream - <a href=\"https://www.youtube.com/channel/UCaZKKtI5caSI6-WO4zm3VGQ\" class=\"uri\">https://www.youtube.com/channel/UCaZKKtI5caSI6-WO4zm3VGQ</a></li>\r\n<li>Computerphile - <a href=\"https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA\" class=\"uri\">https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA</a></li>\r\n<li>Couch’s RV Nation - <a href=\"https://www.youtube.com/channel/UCvAONLxaOn8oc7PS33KN22Q\" class=\"uri\">https://www.youtube.com/channel/UCvAONLxaOn8oc7PS33KN22Q</a></li>\r\n<li>Darren Kitchen - <a href=\"https://www.youtube.com/channel/UCTkpeicFNBuHJCvp4LZEuvw\" class=\"uri\">https://www.youtube.com/channel/UCTkpeicFNBuHJCvp4LZEuvw</a></li>\r\n<li>Don Ross - <a href=\"https://www.youtube.com/channel/UCRd5EO6FvhIrqQnk0cscSDA\" class=\"uri\">https://www.youtube.com/channel/UCRd5EO6FvhIrqQnk0cscSDA</a></li>\r\n<li>Geeks on Tour - <a href=\"https://www.youtube.com/channel/UCLM_wnCtDaGBWkYGQS4T6Bw\" class=\"uri\">https://www.youtube.com/channel/UCLM_wnCtDaGBWkYGQS4T6Bw</a></li>\r\n<li>Duet Justus - <a href=\"https://www.youtube.com/channel/UCIeTn13FYQI1YL4InzvuWuQ\" class=\"uri\">https://www.youtube.com/channel/UCIeTn13FYQI1YL4InzvuWuQ</a></li>\r\n<li>Firesign Theatre - <a href=\"https://www.youtube.com/channel/UCXdhVqpbttKSvBWGWHSBkgw\" class=\"uri\">https://www.youtube.com/channel/UCXdhVqpbttKSvBWGWHSBkgw</a></li>\r\n<li>Hana Malhas - <a href=\"https://www.youtube.com/channel/UCpoMVaoVRf3Xvf10_EIZKrg\" class=\"uri\">https://www.youtube.com/channel/UCpoMVaoVRf3Xvf10_EIZKrg</a></li>\r\n<li>Healthcare Triage - <a href=\"https://www.youtube.com/channel/UCabaQPYxxKepWUsEVQMT4Kw\" class=\"uri\">https://www.youtube.com/channel/UCabaQPYxxKepWUsEVQMT4Kw</a></li>\r\n<li>How Stuff Works - <a href=\"https://www.youtube.com/channel/UCa35qyNpnlZ_u8n9qoAZbMQ\" class=\"uri\">https://www.youtube.com/channel/UCa35qyNpnlZ_u8n9qoAZbMQ</a></li>\r\n<li>Jeff Pevar - <a href=\"https://www.youtube.com/channel/UCGd3v3LEwBJOsXkN-RZgFzQ\" class=\"uri\">https://www.youtube.com/channel/UCGd3v3LEwBJOsXkN-RZgFzQ</a></li>\r\n<li><a href=\"https://www.palain.com/\" class=\"uri\">https://www.palain.com/</a></li>\r\n</ul>\r\n',198,106,0,'CC-BY-SA','YouTube, Channels, Subscriptions',0,0,1),
(2765,'2019-03-08','My YouTube Subscriptions #3',1329,'Part three of my list of subscribed channels','<p>I am subscribed to a number of YouTube channels, and I am sharing them with you</p>\r\n<ul>\r\n<li>Jennie Breeden - <a href=\"https://www.youtube.com/channel/UCMwWHArL7o7n-So1r-T_u3w\" class=\"uri\">https://www.youtube.com/channel/UCMwWHArL7o7n-So1r-T_u3w</a></li>\r\n<li>Kate Techtonics - <a href=\"https://www.youtube.com/channel/UC4uxJvPa2nGe1ItPJsz2ORg\" class=\"uri\">https://www.youtube.com/channel/UC4uxJvPa2nGe1ItPJsz2ORg</a></li>\r\n<li>Lydian Collective - <a href=\"https://www.youtube.com/channel/UCGFAwyexOW5Vi24zvYOSc-A\" class=\"uri\">https://www.youtube.com/channel/UCGFAwyexOW5Vi24zvYOSc-A</a></li>\r\n<li>Metropole Orkest - <a href=\"https://www.youtube.com/channel/UClOuC_V57_bW5sZ5yuh2IKw\" class=\"uri\">https://www.youtube.com/channel/UClOuC_V57_bW5sZ5yuh2IKw</a></li>\r\n<li>Mike Pachelli - <a href=\"https://www.youtube.com/channel/UCHnZrxYdMc0lNk8kEZVUoTA\" class=\"uri\">https://www.youtube.com/channel/UCHnZrxYdMc0lNk8kEZVUoTA</a></li>\r\n<li>Mortons on the Move - <a href=\"https://www.youtube.com/channel/UCirNI5XV3xZZApeIe0a5-6Q\" class=\"uri\">https://www.youtube.com/channel/UCirNI5XV3xZZApeIe0a5-6Q</a></li>\r\n<li>Nixie Pixel - <a href=\"https://www.youtube.com/channel/UCBE-FO9JUOghSysV9gjTeHw\" class=\"uri\">https://www.youtube.com/channel/UCBE-FO9JUOghSysV9gjTeHw</a></li>\r\n<li>Numberphile - <a href=\"https://www.youtube.com/channel/UCoxcjq-8xIDTYp3uz647V5A\" class=\"uri\">https://www.youtube.com/channel/UCoxcjq-8xIDTYp3uz647V5A</a></li>\r\n<li>Nature Video - <a href=\"https://www.youtube.com/channel/UC7c8mE90qCtu11z47U0KErg\" class=\"uri\">https://www.youtube.com/channel/UC7c8mE90qCtu11z47U0KErg</a></li>\r\n<li>Ohio LinuxFest - <a href=\"https://www.youtube.com/channel/UCpbGjYCdBwaenhnN2OKXmRg\" class=\"uri\">https://www.youtube.com/channel/UCpbGjYCdBwaenhnN2OKXmRg</a></li>\r\n<li>Piled Higher and Deeper - <a href=\"https://www.youtube.com/channel/UCUL-pmhmDcZDwsA4cX2HO5w\" class=\"uri\">https://www.youtube.com/channel/UCUL-pmhmDcZDwsA4cX2HO5w</a></li>\r\n<li>Postmodern Jukebox - <a href=\"https://www.youtube.com/channel/UCORIeT1hk6tYBuntEXsguLg\" class=\"uri\">https://www.youtube.com/channel/UCORIeT1hk6tYBuntEXsguLg</a></li>\r\n<li>RV Geeks - <a href=\"https://www.youtube.com/channel/UC2EOriLgUuwQn-uCHl58m_Q\" class=\"uri\">https://www.youtube.com/channel/UC2EOriLgUuwQn-uCHl58m_Q</a></li>\r\n<li>RVtravel - <a href=\"https://www.youtube.com/channel/UCARpsGWj6MJ7JE78OcfWKWw\" class=\"uri\">https://www.youtube.com/channel/UCARpsGWj6MJ7JE78OcfWKWw</a></li>\r\n<li>Science News - <a href=\"https://www.youtube.com/channel/UCBX5er6E37_yWB3gCM32p3g\" class=\"uri\">https://www.youtube.com/channel/UCBX5er6E37_yWB3gCM32p3g</a></li>\r\n<li>SciShow - <a href=\"https://www.youtube.com/channel/UCZYTClx2T1of7BRZ86-8fow\" class=\"uri\">https://www.youtube.com/channel/UCZYTClx2T1of7BRZ86-8fow</a></li>\r\n<li>SciShow Space - <a href=\"https://www.youtube.com/channel/UCrMePiHCWG4Vwqv3t7W9EFg\" class=\"uri\">https://www.youtube.com/channel/UCrMePiHCWG4Vwqv3t7W9EFg</a></li>\r\n<li>Sophie Alloway - <a href=\"https://www.youtube.com/channel/UCCwcpSK-9Zbo8QDsPWdM1Bg\" class=\"uri\">https://www.youtube.com/channel/UCCwcpSK-9Zbo8QDsPWdM1Bg</a></li>\r\n<li>Ten Minute History - <a href=\"https://www.youtube.com/channel/UC22BdTgxefuvUivrjesETjg\" class=\"uri\">https://www.youtube.com/channel/UC22BdTgxefuvUivrjesETjg</a></li>\r\n<li>The Fab Faux - <a href=\"https://www.youtube.com/channel/UCsU8AeRj_497u2IMxVA6OcQ\" class=\"uri\">https://www.youtube.com/channel/UCsU8AeRj_497u2IMxVA6OcQ</a></li>\r\n<li><a href=\"https://www.palain.com/\" class=\"uri\">https://www.palain.com/</a></li>\r\n</ul>\r\n',198,106,0,'CC-BY-SA','YouTube, Channels, Subscriptions',0,0,1),
(2775,'2019-03-22','My YouTube Subscriptions #4',1198,'Part four of my list of subscribed channels','<p>I am subscribed to a number of YouTube channels, and I am sharing them with you</p>\r\n<ul>\r\n<li>The HollyHobs - <a href=\"https://www.youtube.com/channel/UCkhSH-DB2xK4BIJZoql9djQ\" class=\"uri\">https://www.youtube.com/channel/UCkhSH-DB2xK4BIJZoql9djQ</a></li>\r\n<li>Adam Neely - <a href=\"https://www.youtube.com/channel/UCnkp4xDOwqqJD7sSM3xdUiQ\" class=\"uri\">https://www.youtube.com/channel/UCnkp4xDOwqqJD7sSM3xdUiQ</a></li>\r\n<li>Airstream of Scottsdale - <a href=\"https://www.youtube.com/channel/UChNNDq91qW6zDkUXM2IuIYQ\" class=\"uri\">https://www.youtube.com/channel/UChNNDq91qW6zDkUXM2IuIYQ</a></li>\r\n<li>Alternate History Hub - <a href=\"https://www.youtube.com/channel/UClfEht64_NrzHf8Y0slKEjw\" class=\"uri\">https://www.youtube.com/channel/UClfEht64_NrzHf8Y0slKEjw</a></li>\r\n<li>Alton Brown - <a href=\"https://www.youtube.com/channel/UCfDNi1aEljAQ17mUrfUjkvg\" class=\"uri\">https://www.youtube.com/channel/UCfDNi1aEljAQ17mUrfUjkvg</a></li>\r\n<li>Apartment Sessions - <a href=\"https://www.youtube.com/channel/UCpU_PAsVFl2fO649QF6Zj0Q\" class=\"uri\">https://www.youtube.com/channel/UCpU_PAsVFl2fO649QF6Zj0Q</a></li>\r\n<li>AStreaminLife - <a href=\"https://www.youtube.com/channel/UCtrZvxP1SQkBJ8kZLsslimw\" class=\"uri\">https://www.youtube.com/channel/UCtrZvxP1SQkBJ8kZLsslimw</a></li>\r\n<li>Big Truck Big RV - <a href=\"https://www.youtube.com/channel/UCaX2-JkluLd8aG0DXp0L2Xw\" class=\"uri\">https://www.youtube.com/channel/UCaX2-JkluLd8aG0DXp0L2Xw</a></li>\r\n<li>Bill Holbrook - <a href=\"https://www.youtube.com/channel/UChE4ujkOdzJ02k-F9ZqwpMw\" class=\"uri\">https://www.youtube.com/channel/UChE4ujkOdzJ02k-F9ZqwpMw</a></li>\r\n<li>CGP Grey - <a href=\"https://www.youtube.com/channel/UC2C_jShtL725hvbm1arSV9w\" class=\"uri\">https://www.youtube.com/channel/UC2C_jShtL725hvbm1arSV9w</a></li>\r\n<li>Crash Course - <a href=\"https://www.youtube.com/channel/UCX6b17PVsYBQ0ip5gyeme-Q\" class=\"uri\">https://www.youtube.com/channel/UCX6b17PVsYBQ0ip5gyeme-Q</a></li>\r\n<li>Deep Sky Videos - <a href=\"https://www.youtube.com/channel/UCo-3ThNQmPmQSQL_L6Lx1_w\" class=\"uri\">https://www.youtube.com/channel/UCo-3ThNQmPmQSQL_L6Lx1_w</a></li>\r\n<li>Doctor Who - <a href=\"https://www.youtube.com/channel/UCcOkA2Xmk1valTOWSyKyp4g\" class=\"uri\">https://www.youtube.com/channel/UCcOkA2Xmk1valTOWSyKyp4g</a></li>\r\n<li>Emperor Tigerstar - <a href=\"https://www.youtube.com/channel/UCUXqYwTCR6R3Wr-FkLTD4AQ\" class=\"uri\">https://www.youtube.com/channel/UCUXqYwTCR6R3Wr-FkLTD4AQ</a></li>\r\n<li>Fastway Trailer - <a href=\"https://www.youtube.com/channel/UCDKtrIOnj4IvatnpJkh2aXA\" class=\"uri\">https://www.youtube.com/channel/UCDKtrIOnj4IvatnpJkh2aXA</a></li>\r\n<li>fyfluiddynamics - <a href=\"https://www.youtube.com/channel/UCxuET3jfy0v8EJa7TKNiI2g\" class=\"uri\">https://www.youtube.com/channel/UCxuET3jfy0v8EJa7TKNiI2g</a></li>\r\n<li>Haylett RV - <a href=\"https://www.youtube.com/channel/UCRS9u1f7074u0Rrgu05K9Wg\" class=\"uri\">https://www.youtube.com/channel/UCRS9u1f7074u0Rrgu05K9Wg</a></li>\r\n<li>It’s OK To Be Smart - <a href=\"https://www.youtube.com/channel/UCH4BNI0-FOK2dMXoFtViWHw\" class=\"uri\">https://www.youtube.com/channel/UCH4BNI0-FOK2dMXoFtViWHw</a></li>\r\n<li>Less Junk, More Journey - <a href=\"https://www.youtube.com/channel/UC2IENUorXc6kRtIiAGPRKZA\" class=\"uri\">https://www.youtube.com/channel/UC2IENUorXc6kRtIiAGPRKZA</a></li>\r\n<li>Long, Long Honeymoon - <a href=\"https://www.youtube.com/channel/UCw5WYtMXQ799GErKpvR_5Rw\" class=\"uri\">https://www.youtube.com/channel/UCw5WYtMXQ799GErKpvR_5Rw</a></li>\r\n<li>Matt’s RV Reviews - <a href=\"https://www.youtube.com/channel/UCBHww2yk8soPJ9IcbZ0n_Uw\" class=\"uri\">https://www.youtube.com/channel/UCBHww2yk8soPJ9IcbZ0n_Uw</a></li>\r\n<li><a href=\"https://www.palain.com/\" class=\"uri\">https://www.palain.com/</a></li>\r\n</ul>\r\n',198,106,0,'CC-BY-SA','YouTube, Channels, Subscriptions',0,0,1),
(2790,'2019-04-12','My YouTube Subscriptions #5',1206,'Part five of my list of subscribed channels','<p>I am subscribed to a number of YouTube channels, and I am sharing them with you</p>\r\n<ul>\r\n<li>Mental Floss - <a href=\"https://www.youtube.com/channel/UCpZ5qUqpW4hW4zdfuBxMSJA\" class=\"uri\">https://www.youtube.com/channel/UCpZ5qUqpW4hW4zdfuBxMSJA</a></li>\r\n<li>Minute Earth - <a href=\"https://www.youtube.com/channel/UCeiYXex_fwgYDonaTcSIk6w\" class=\"uri\">https://www.youtube.com/channel/UCeiYXex_fwgYDonaTcSIk6w</a></li>\r\n<li>Minute Physics - <a href=\"https://www.youtube.com/channel/UCUHW94eEFW7hkUMVaZz4eDg\" class=\"uri\">https://www.youtube.com/channel/UCUHW94eEFW7hkUMVaZz4eDg</a></li>\r\n<li>Mona Lisa Twins - <a href=\"https://www.youtube.com/channel/UCWK_fTtt5p1nBw__P_V_qBw\" class=\"uri\">https://www.youtube.com/channel/UCWK_fTtt5p1nBw__P_V_qBw</a></li>\r\n<li>Monty Python - <a href=\"https://www.youtube.com/channel/UCGm3CO6LPcN-Y7HIuyE0Rew\" class=\"uri\">https://www.youtube.com/channel/UCGm3CO6LPcN-Y7HIuyE0Rew</a></li>\r\n<li>Objectivity - <a href=\"https://www.youtube.com/channel/UCtwKon9qMt5YLVgQt1tvJKg\" class=\"uri\">https://www.youtube.com/channel/UCtwKon9qMt5YLVgQt1tvJKg</a></li>\r\n<li>OfficialGoRVing - <a href=\"https://www.youtube.com/channel/UC8nwC2SO4k6AF-E2liOiSQQ\" class=\"uri\">https://www.youtube.com/channel/UC8nwC2SO4k6AF-E2liOiSQQ</a></li>\r\n<li>PBS Eons - <a href=\"https://www.youtube.com/channel/UCzR-rom72PHN9Zg7RML9EbA\" class=\"uri\">https://www.youtube.com/channel/UCzR-rom72PHN9Zg7RML9EbA</a></li>\r\n<li>PBS SpaceTime - <a href=\"https://www.youtube.com/channel/UC7_gcs09iThXybpVgjHZ_7g\" class=\"uri\">https://www.youtube.com/channel/UC7_gcs09iThXybpVgjHZ_7g</a></li>\r\n<li>Periodic Videos - <a href=\"https://www.youtube.com/channel/UCtESv1e7ntJaLJYKIO1FoYw\" class=\"uri\">https://www.youtube.com/channel/UCtESv1e7ntJaLJYKIO1FoYw</a></li>\r\n<li>Physics Girl - <a href=\"https://www.youtube.com/channel/UC7DdEm33SyaTDtWYGO2CwdA\" class=\"uri\">https://www.youtube.com/channel/UC7DdEm33SyaTDtWYGO2CwdA</a></li>\r\n<li>Rollin’ On TV - <a href=\"https://www.youtube.com/channel/UCAfquicUYGba3nuzQ-n0tnw\" class=\"uri\">https://www.youtube.com/channel/UCAfquicUYGba3nuzQ-n0tnw</a></li>\r\n<li>RV Education 101 - <a href=\"https://www.youtube.com/channel/UCQNg-4bXbDGS61casEa5LyQ\" class=\"uri\">https://www.youtube.com/channel/UCQNg-4bXbDGS61casEa5LyQ</a></li>\r\n<li>RV to Freedom - <a href=\"https://www.youtube.com/channel/UCJxweRfyWOMcbwxpK4FnsyA\" class=\"uri\">https://www.youtube.com/channel/UCJxweRfyWOMcbwxpK4FnsyA</a></li>\r\n<li>Sciencium - <a href=\"https://www.youtube.com/channel/UCGRB1ZjIqAiaGwt-XLq9CnA\" class=\"uri\">https://www.youtube.com/channel/UCGRB1ZjIqAiaGwt-XLq9CnA</a></li>\r\n<li>SciFri - <a href=\"https://www.youtube.com/channel/UCDjGU4DP3b-eGxrsipCvoVQ\" class=\"uri\">https://www.youtube.com/channel/UCDjGU4DP3b-eGxrsipCvoVQ</a></li>\r\n<li>SciShow Psych - <a href=\"https://www.youtube.com/channel/UCUdettijNYvLAm4AixZv4RA\" class=\"uri\">https://www.youtube.com/channel/UCUdettijNYvLAm4AixZv4RA</a></li>\r\n<li><a href=\"https://www.palain.com/\" class=\"uri\">https://www.palain.com/</a></li>\r\n</ul>\r\n',198,106,0,'CC-BY-SA','YouTube, Channels, Subscriptions',0,0,1),
(2800,'2019-04-26','My YouTube Subscriptions #6',1169,'Part six of my list of subscribed channels','<p>I am subscribed to a number of YouTube channels, and I am sharing them with you</p>\r\n<ul>\r\n<li>SgtPepper Channel - <a href=\"https://www.youtube.com/channel/UCAZZwDyOoSG32tIpMjQ-EKA\" class=\"uri\">https://www.youtube.com/channel/UCAZZwDyOoSG32tIpMjQ-EKA</a></li>\r\n<li>Sid Meier’s Civilization - <a href=\"https://www.youtube.com/channel/UCWj7XnnfbKHGVnZ8iSoETSQ\" class=\"uri\">https://www.youtube.com/channel/UCWj7XnnfbKHGVnZ8iSoETSQ</a></li>\r\n<li>Sixty Symbols - <a href=\"https://www.youtube.com/channel/UCvBqzzvUBLCs8Y7Axb-jZew\" class=\"uri\">https://www.youtube.com/channel/UCvBqzzvUBLCs8Y7Axb-jZew</a></li>\r\n<li>Smarter Every Day - <a href=\"https://www.youtube.com/channel/UC6107grRI4m0o2-emgoDnAA\" class=\"uri\">https://www.youtube.com/channel/UC6107grRI4m0o2-emgoDnAA</a></li>\r\n<li>Space Frontier Foundation - <a href=\"https://www.youtube.com/channel/UCe_aC8RselByR6B2UMnprQA\" class=\"uri\">https://www.youtube.com/channel/UCe_aC8RselByR6B2UMnprQA</a></li>\r\n<li>Streamin’ Freedom - <a href=\"https://www.youtube.com/channel/UCEl_3AAj2pA-GvkxTS7-mxg\" class=\"uri\">https://www.youtube.com/channel/UCEl_3AAj2pA-GvkxTS7-mxg</a></li>\r\n<li>Suibhne - <a href=\"https://www.youtube.com/channel/UCQD-0MjUbDBwm2UTVYr0Dag\" class=\"uri\">https://www.youtube.com/channel/UCQD-0MjUbDBwm2UTVYr0Dag</a></li>\r\n<li>Talk More Talk - <a href=\"https://www.youtube.com/channel/UC7rNO8_kPBH-caQH9vzNe8A\" class=\"uri\">https://www.youtube.com/channel/UC7rNO8_kPBH-caQH9vzNe8A</a></li>\r\n<li>The Beatles - <a href=\"https://www.youtube.com/channel/UCc4K7bAqpdBP8jh1j9XZAww\" class=\"uri\">https://www.youtube.com/channel/UCc4K7bAqpdBP8jh1j9XZAww</a></li>\r\n<li>The Economist - <a href=\"https://www.youtube.com/channel/UC0p5jTq6Xx_DosDFxVXnWaQ\" class=\"uri\">https://www.youtube.com/channel/UC0p5jTq6Xx_DosDFxVXnWaQ</a></li>\r\n<li>The Extraordinary Universe - <a href=\"https://www.youtube.com/channel/UC_2MM6tCMKWCj-AnvjIhJtw\" class=\"uri\">https://www.youtube.com/channel/UC_2MM6tCMKWCj-AnvjIhJtw</a></li>\r\n<li>The Great War - <a href=\"https://www.youtube.com/channel/UCUcyEsEjhPEDf69RRVhRh4A\" class=\"uri\">https://www.youtube.com/channel/UCUcyEsEjhPEDf69RRVhRh4A</a></li>\r\n<li>The Planetary Society - <a href=\"https://www.youtube.com/channel/UCi0TZmFfgS4oQPcRQ6-KRXg\" class=\"uri\">https://www.youtube.com/channel/UCi0TZmFfgS4oQPcRQ6-KRXg</a></li>\r\n<li>The Saxy Gamer - <a href=\"https://www.youtube.com/channel/UCJCY4j5zSuV1TFN2VQGeD0Q\" class=\"uri\">https://www.youtube.com/channel/UCJCY4j5zSuV1TFN2VQGeD0Q</a></li>\r\n<li>Totally Trailer - <a href=\"https://www.youtube.com/channel/UCuMYtpUa2kaPaG4tBlJAZOA\" class=\"uri\">https://www.youtube.com/channel/UCuMYtpUa2kaPaG4tBlJAZOA</a></li>\r\n<li>Trailer Life DIY - <a href=\"https://www.youtube.com/channel/UCMmzjxJREn4kDK-ypq9oA7w\" class=\"uri\">https://www.youtube.com/channel/UCMmzjxJREn4kDK-ypq9oA7w</a></li>\r\n<li>Veritasium - <a href=\"https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA\" class=\"uri\">https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</a></li>\r\n<li>Vintage space - <a href=\"https://www.youtube.com/channel/UCw95T_TgbGHhTml4xZ9yIqg\" class=\"uri\">https://www.youtube.com/channel/UCw95T_TgbGHhTml4xZ9yIqg</a></li>\r\n<li>Vlogbrothers - <a href=\"https://www.youtube.com/channel/UCGaVdbSav8xWuFWTadK6loA\" class=\"uri\">https://www.youtube.com/channel/UCGaVdbSav8xWuFWTadK6loA</a></li>\r\n<li><a href=\"https://www.palain.com/\" class=\"uri\">https://www.palain.com/</a></li>\r\n</ul>\r\n',198,106,0,'CC-BY-SA','YouTube, Channels, Subscriptions',0,0,1),
(2738,'2019-01-30','My Applications',229,'just a short show on the applications I use on my Linux Mint Box','<p>Hi again, this is Tony Hughes from Blackpool in the UK. Ken is still short of shows so here is another quick show to help out with the queue.</p>\r\n<p>This one is going to be about the applications I use on my Linux Mint 19.1 install. I’ve been using Linux for over 10 years now and during that time have never felt that there was anything that was lacking in the software department for day to day productivity and general day to day use, so this is just a list of some of the things that I, and I suspect most computer users, need to make electronic life a reality.</p>\r\n<p>So for internet browsing I use Firefox, I’ve been using this since my Windows days and it was just natural that, as this is the default web browser in Linux Mint, that this is what I would continue to use when I moved over to Linux.</p>\r\n<p>Email – I have several web based accounts which means these are operating system agnostic, but for my Internet Service provider account I use Thunderbird to download and store my e-mail onto my main desktop PC. I can also use this to access my web based accounts and store emails for these off line as well if needed.</p>\r\n<p>Office productivity is provided for with LibreOffice which is a very mature and comprehensive office suite comprising of all the main tools needed such as a word processor, spreadsheet and presentation software. It also has a Database and drawing package, and for maths geeks an advanced maths formula creating program which I have never used, but could be very useful for students and scientists.</p>\r\n<p>For audio and video playback I use VLC which again is something I first used back in my windows days, it works with all the audio and video codecs you can throw at it, and if you have the Libdvdcss codecs installed will play proprietary DVD’s.</p>\r\n<p>For recording and editing audio including this podcast I use Audacity, which is again a cross platform programme and a very powerful piece of software, as myself and many others that use it will be able to tell you</p>\r\n<p>So that is a short list of the programmes that I use on a day to day basis. I hope you found it useful, if not it doesn’t matter as Ken still got a show out of me.</p>\r\n<p>Well that’s it for this one. This is Tony Hughes signing off for now.</p>\r\n',338,0,0,'CC-BY-SA','productivity software',0,0,1),
(2740,'2019-02-01','Pop!_OS 18.10 (quick) review',438,'In this episode, Yannick does a quick review of Pop OS 18.10','<p>This episode is a re-edition of the review of Pop_OS! I did for <a href=\"https://tuxjam.otherside.network/?p=391\">TuxJam</a> back in December 2018. Pop_OS! is published by <a href=\"https://system76.com/pop\">System76</a>.</p>\r\n',370,0,0,'CC-BY-SA','linux,distro,distribution,pop_os,system76,ubuntu',0,0,1),
(2744,'2019-02-07','Yet Another Rambling Drive Into Work',2022,'Yet another rambling attempt at making a show on the way into work','<p>I came across this show sitting in my digital recorder I recorded it back in November 2017 but never posted it, my thoughts on some of the things I mention in this show have since evolved, I’ll stick these changed thoughts at the end of these notes and may also stick in an extra recorded section at the end of the show.</p>\r\n<ul>\r\n<li><p>Previous Ford Focus<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Ford_Focus#First_generation_(1998%E2%80%932004)\">https://en.wikipedia.org/wiki/Ford_Focus#First_generation_(1998%E2%80%932004)</a></p></li>\r\n<li><p>Renault 19, 16V<br />\r\nMine was not a a soft top<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Renault_19#16S\" class=\"uri\">https://en.wikipedia.org/wiki/Renault_19#16S</a><br />\r\n<img src=\"https://upload.wikimedia.org/wikipedia/commons/d/d8/Ren1916vcabph1b.jpg\" alt=\"https://upload.wikimedia.org/wikipedia/commons/d/d8/Ren1916vcabph1b.jpg\" /></p></li>\r\n<li><p>Current Ford Focus<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Ford_Focus#Second_generation_(2004%E2%80%932011)\">https://en.wikipedia.org/wiki/Ford_Focus#Second_generation_(2004%E2%80%932011)</a></p></li>\r\n<li><p>Nissan Leaf 24kw<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Nissan_Leaf#2014/15_model_year\" class=\"uri\">https://en.wikipedia.org/wiki/Nissan_Leaf#2014/15_model_year</a></p></li>\r\n<li><p>Nissan Leaf 30Kw<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Nissan_Leaf#2016_model_year\" class=\"uri\">https://en.wikipedia.org/wiki/Nissan_Leaf#2016_model_year</a></p></li>\r\n<li><p>Nissan leaf 40Kw<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Nissan_Leaf#Second_generation_(2017%E2%80%93present)\">https://en.wikipedia.org/wiki/Nissan_Leaf#Second_generation_(2017%E2%80%93present)</a></p></li>\r\n<li><p>Kilts<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Kilt\" class=\"uri\">https://en.wikipedia.org/wiki/Kilt</a></p></li>\r\n<li><p>Bagpipes<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Bagpipes\" class=\"uri\">https://en.wikipedia.org/wiki/Bagpipes</a></p></li>\r\n<li><p>Accordion<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Accordion\" class=\"uri\">https://en.wikipedia.org/wiki/Accordion</a></p></li>\r\n<li><p>Squeeze Box<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Squeezebox\" class=\"uri\">https://en.wikipedia.org/wiki/Squeezebox</a></p></li>\r\n<li><p>Haggis<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Haggis\" class=\"uri\">https://en.wikipedia.org/wiki/Haggis</a></p></li>\r\n<li><p>Co-op<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Cooperative\" class=\"uri\">https://en.wikipedia.org/wiki/Cooperative</a></p></li>\r\n<li><p>Example of a Haggis Pizza, though not from the Co-op<br />\r\n<a href=\"https://www.sainsburys.co.uk/webapp/wcs/stores/servlet/gb/groceries/cosmo-haggis-pizza-450g?langId=44&amp;storeId=10151&amp;krypto=9555DKfWSs9%2FPZXDDPtNmunNVefFVynanbSeQICSqvaqFAqsHBIPIKiSBqw2aq4oL2g8H8Mht9FuPj%2FYvtWLegub3%2F9KqGLI16COGk2qTEwkFeo9zgw2ELE4DtGbDzzRldgf51yrZVaYL9WXmfOvDS%2FiJx9pqI12OIXlHwmPkmc%3D&amp;ddkey=https%3Agb%2Fgroceries%2Fcosmo-haggis-pizza-450g\">https://www.sainsburys.co.uk/webapp/wcs/stores/servlet/gb/groceries/cosmo-haggis-pizza-450g?langId=44&amp;storeId=10151&amp;krypto=9555DKfWSs9%2FPZXDDPtNmunNVefFVynanbSeQICSqvaqFAqsHBIPIKiSBqw2aq4oL2g8H8Mht9FuPj%2FYvtWLegub3%2F9KqGLI16COGk2qTEwkFeo9zgw2ELE4DtGbDzzRldgf51yrZVaYL9WXmfOvDS%2FiJx9pqI12OIXlHwmPkmc%3D&amp;ddkey=https%3Agb%2Fgroceries%2Fcosmo-haggis-pizza-450g</a></p></li>\r\n<li><p>Nissan Leaf Phone App to remotely control heating system<br />\r\n<a href=\"https://youplus.nissan.co.uk/GB/en/YouPlus/ConnectedServices.html\" class=\"uri\">https://youplus.nissan.co.uk/GB/en/YouPlus/ConnectedServices.html</a></p></li>\r\n<li><p>Citroen BX, Hydraulic suspension<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Citro%C3%ABn_BX\">https://en.wikipedia.org/wiki/Citro%C3%ABn_BX</a></p></li>\r\n<li><p>Reversing sensors, and camera<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Parking_sensor\" class=\"uri\">https://en.wikipedia.org/wiki/Parking_sensor</a></p></li>\r\n</ul>\r\n<p>Here are the changes since I recorded this show in November 2017, it is now October 2018.</p>\r\n<p>Think there was a £4,500 pound grant on new EV cars however it has been announced that this grant will in the near future will be cut to £3500.</p>\r\n<p>I think the Government and Nissan together had a £2000 contribution scheme when you traded in an old car for a 2nd hand leaf I think this is no longer available now that the leaf is more popular.</p>\r\n<p>Fuel costs have gone up and I may have miscalculated I think my true annual fuel bill is nearer to £2,000</p>\r\n<p>Nissan leaf road tax is free</p>\r\n<p>Because of supply and demand the depreciation situation has completely changed had I bought this leaf in November 2017 it would now be worth more today in October 2018. Only time will tell how it all pans out, things are changing rapidly.</p>\r\n<p>After further investigation it looks like battery degradation is less than I first thought and would likely still be in pretty good condition at 6 years old, particularly in a cooler country like here in the UK in Scotland.</p>\r\n<p>There has been some controversy about the new 40kw leaf which may also impact in the older leaf making the older leaf’s more appealing contributing further to the high demand for the older 30kw and 24kw leafs.<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Nissan_Leaf#Criticism\" class=\"uri\">https://en.wikipedia.org/wiki/Nissan_Leaf#Criticism</a><br />\r\n<a href=\"https://www.greencarreports.com/news/1116139_2018-nissan-leaf-electric-car-is-there-a-fast-charging-problem\" class=\"uri\">https://www.greencarreports.com/news/1116139_2018-nissan-leaf-electric-car-is-there-a-fast-charging-problem</a></p>\r\n<p>With the increased popularity of the older 24 and 30Kw leafs Nissan may no longer be so keen to give you a no quibble test drive.</p>\r\n<p>I think it’s looking increasingly like I made the wrong decision.</p>\r\n',201,0,1,'CC-BY-SA','Podcast, Cars',0,0,1),
(2746,'2019-02-11','My software part 2',326,'More about the software I use regularly on Linux ','<p>Good day to all in HPR land, this is Tony Hughes coming to you from Blackpool in the UK again. This is a second instalment about some of the software I use on Linux Mint 19.1, on a regular basis. So without further ado lets get on with the show.</p>\r\n<ul>\r\n<li><p>USB Image writer</p></li>\r\n<li><p>VirtualBox – Virtualisation software to virtualise x86 and AMD64 bit PC’s</p></li>\r\n<li><p>OBS – Open Broadcast software</p></li>\r\n<li><p>Brasero/XFburn – CD/DVD writing software</p></li>\r\n<li><p>GIMP – GNU Image manipulation Program</p></li>\r\n</ul>\r\n<p>So that’s it for this episode. I’ll be back to talk about some of the utilities I use on Mint on another show. This is Tony Hughes signing off for now.</p>\r\n',338,0,0,'CC-BY-SA','Linux Mint 19.1,utilities',0,0,1),
(2747,'2019-02-12','checking oil',317,'checking your oil may not be so simple','<blockquote>\r\n<p>a 914 shows up…<br />\r\nit has a 911 engine…<br />\r\ni check the oil…<br />\r\nthe car lives…</p>\r\n</blockquote>\r\n',329,0,1,'CC-BY-SA','automotive',0,0,1),
(2748,'2019-02-13','Writing Web Game in Haskell - Special events',2645,'Tuula walks through implementation of special events in web based game','<h2 id=\"intro\">Intro</h2>\r\n<p>I was tasked to write kragii worms in the game and informed that they’re small (10cm / 4 inches) long worms that burrow in ground and are drawn to farming fields and people. They’re dangerous and might eat harvest or people.</p>\r\n<p>Special events build on top of the new system I explained in <a href=\"https://hackerpublicradio.org/eps.php?id=2733\">episode 2733</a>. They are read from same API as regular news and need same <code>ToJSON</code>, <code>FromJSON</code>, <code>ToDto</code> and <code>FromDto</code> instances as regular news (for translating them data transfer objects and then into JSON for sending to client).</p>\r\n<h2 id=\"loading\">Loading</h2>\r\n<p>Starting from the API interface, the first real difference is when JSON stored into database is turned into <code>NewsArticle</code>. Two cases, where special news have available options added to them and regular news are left unchanged. These options tell player what choices they have when dealing with the situation and evaluated every time special event is loaded, because situation might have changed since special event got stored into database and available options might have changed.</p>\r\n<pre><code>addOptions (key, article) = case article of\r\n                                Special news -&gt;\r\n                                    (key, Special $ availableOptions news)\r\n                                _ -&gt;\r\n                                    (key, article)\r\n\r\navailableOptions :: SpecialNews -&gt; SpecialNews\r\navailableOptions x =\r\n    case x of\r\n        KragiiWorms event _ choice -&gt;\r\n            KragiiWorms event (eventOptions event) choice</code></pre>\r\n<p><code>eventOptions</code> is one of the events defined in <code>SpecialEvent</code> type class that specifies two functions every special event has to have. <code>eventOptions</code> lists what options the event has currently available and <code>resolveEvent</code> resolves the event according to choice user might have made (hence <code>Maybe</code> in it).</p>\r\n<p>Type class is parametrized with three types (imaginatively named to <code>a</code>, <code>b</code> and <code>c</code>). First is data type that holds information about special event (where it’s happening and to who for example), second one is one that tells all possible choices player has and third one lists various results that might occur when resolving the event. In this example they’re <code>KragiiWormsEvent</code>, <code>KragiiWormsChoice</code> and <code>KragiiResults</code>.</p>\r\n<pre><code>data KragiiWormsEvent = KragiiWormsEvent\r\n    { kragiiWormsPlanetId   :: Key Planet\r\n    , kragiiWormsPlanetName :: Text\r\n    , kragiiWormsSystemId   :: Key StarSystem\r\n    , kragiiWormsSystemName :: Text\r\n    , kragiiWormsDate       :: Int\r\n    }\r\n\r\ndata KragiiWormsChoice =\r\n    EvadeWorms\r\n    | AttackWorms\r\n    | TameWorms\r\n\r\ndata KragiiResults =\r\n    WormsStillPresent\r\n    | WormsRemoved\r\n    | WormsTamed\r\n    | CropsDestroyed (RawResource Biological)\r\n    | FarmersInjured</code></pre>\r\n<p>Definition of the <code>SpecialEvent</code> type class is shown below. Type signature of <code>resolveEvent</code> is gnarly because it’s reading and writing database.</p>\r\n<pre><code>class SpecialEvent a b c | a -&gt; b, a -&gt; c where\r\n    eventOptions :: a -&gt; [UserOption b]\r\n    resolveEvent :: ( PersistQueryRead backend, PersistQueryWrite backend\r\n                    , MonadIO m, BaseBackend backend ~ SqlBackend ) =&gt;\r\n                    (Key News, a) -&gt; Maybe b -&gt; ReaderT backend m (Maybe EventRemoval, [c])</code></pre>\r\n<p>One more piece we need is <code>UserOption</code>. This records options in a format that is useful in the client side. Each option player has are given title and explanation that are shown on UI.</p>\r\n<pre><code>data UserOption a =\r\n    UserOption { userOptionTitle :: Text\r\n               , userOptionExplanation :: [Text]\r\n               , userOptionChoice :: a\r\n               }</code></pre>\r\n<p>Current implementation of <code>eventOptions</code> doesn’t allow database access, but I’m planning on adding that at the point where I need it. Example doesn’t show all different options, as they all have same structure. Only first option in the list is shown:</p>\r\n<pre><code>eventOptions _ = [ UserOption { userOptionTitle = &quot;Avoid the worms&quot;\r\n                              , userOptionExplanation = [ &quot;Keep using fields, while avoiding the worms and hope they&#39;ll eventually leave.&quot;\r\n                                                        , &quot;50 units of biologicals lost&quot;\r\n                                                        , &quot;25% chance of worms leaving&quot;\r\n                                                        ]\r\n                              , userOptionChoice = EvadeWorms\r\n                            }\r\n                   , ...\r\n                   ]</code></pre>\r\n<h2 id=\"making-choice\">Making choice</h2>\r\n<p><code>putApiMessageIdR</code> handles updating news with <code>HTTP PUT</code> messages. First steps is to check that caller has autenticated and retrieve id of their faction. News article that is transferred in body as JSON is parsed and checked for type. Updating regular news articles isn’t supported and is signaled with <code>HTTP 403</code> status code. One more check to perform is to check that news article being edited actually belong to the faction player is member of. If that’s not the case <code>HTTP 404</code> message is returned.</p>\r\n<p>If we got this far, news article is updated with the content sent by client (that also contains possible choice made by user). There’s no check that type of news article doesn’t change or that the option selected doesn’t change (I need to add these at later point). In the end, list of all messages is returned back to the client.</p>\r\n<pre><code>putApiMessageIdR :: Key News -&gt; Handler Value\r\nputApiMessageIdR mId = do\r\n    (_, _, fId) &lt;- apiRequireFaction\r\n    msg &lt;- requireJsonBody\r\n    let article = fromDto msg\r\n    _ &lt;- if isSpecialEvent article\r\n            then do\r\n                loadedMessages &lt;- runDB $ selectList [ NewsId ==. mId\r\n                                                     , NewsFactionId ==. fId ] [ Asc NewsDate ]\r\n                if length loadedMessages == 0\r\n                    then apiNotFound\r\n                    else runDB $ update mId [ NewsContent =. (toStrict $ encodeToLazyText article) ]\r\n            else apiForbidden &quot;unsupported article type&quot;\r\n    loadAllMessages fId</code></pre>\r\n<h2 id=\"resolving-event\">Resolving event</h2>\r\n<p>Special event occured, user made (or did not) a choice. Now it’s time to simulate what happens. Below is <code>resolveEvent</code> for kragii attack.</p>\r\n<pre><code>resolveEvent keyEventPair (Just choice) =\r\n    runWriterT . runMaybeT $\r\n        case choice of\r\n                EvadeWorms -&gt;\r\n                    chooseToAvoid keyEventPair\r\n\r\n                AttackWorms -&gt;\r\n                    chooseToAttack keyEventPair\r\n\r\n                TameWorms -&gt;\r\n                    chooseToTame keyEventPair\r\n\r\nresolveEvent keyEventPair Nothing =\r\n    runWriterT . runMaybeT $ noChoice keyEventPair</code></pre>\r\n<p><code>runWriterT</code> and <code>runMaybeT</code> are used as code being called uses monad transformers to add some extra handling. <code>WriterT</code> adds ability to record data (<code>KragiiResult</code> in this case) and <code>MaybeT</code> adds ability to stop computation early if one of the steps return <code>Nothing</code> value.</p>\r\n<p>Let’s walk through what happens when user has chosen to avoid kragii worms and keep working only part of the fields. First step is to load faction information. If faction couldn’t be found, we abort. Next amount of biological matter consumed and how much is left is calculated. Again, if calculation isn’t possible, we’ll abort. This step reaches into database and updates amount of biological matter stored by the faction (again, possibility to stop early). Final step is to check if kragii leave or not (again, chance of abort).</p>\r\n<pre><code>chooseToAvoid :: ( MonadIO m, PersistQueryWrite backend\r\n                 , BaseBackend backend ~ SqlBackend ) =&gt;\r\n                 (Key News, KragiiWormsEvent)\r\n                 -&gt; MaybeT (WriterT [KragiiResults] (ReaderT backend m)) EventRemoval\r\nchooseToAvoid (_, event) = do\r\n    faction &lt;- getFaction event\r\n    (cost, bioLeft) &lt;- calculateNewBio (RawResource 50) (entityVal faction)\r\n    _ &lt;- destroyCrops faction cost bioLeft\r\n    removeNews $ PercentileChance 25</code></pre>\r\n<p>Loading faction has several step. Id is stored in the event is used to load planet. Planet might or might have an owner faction, depending on if it has been settled. This faction id is used to load faction data. Loading might fail if corresponding record has been removed from database and planet might not be settled at the given time. Any of these cases will result <code>Nothing</code> be returned and whole event resolution being aborted. I’m starting to really like that I don’t have to write separate <code>if</code> statements to take care of these special cases.</p>\r\n<pre><code>getFaction :: ( MonadIO m, PersistStoreRead backend\r\n              , BaseBackend backend ~ SqlBackend ) =&gt;\r\n              KragiiWormsEvent\r\n              -&gt; MaybeT (WriterT [KragiiResults] (ReaderT backend m)) (Entity Faction)\r\ngetFaction event = MaybeT $ do\r\n    planet &lt;- lift $ get $ kragiiWormsPlanetId event\r\n    let owner = join $ fmap planetOwnerId planet\r\n    res &lt;- lift $ mapM getEntity owner\r\n    return $ join res</code></pre>\r\n<p>Amount of biological matter in store is stored in faction information. If it’s zero or less, <code>Nothing</code> is returned as there’s nothing to do really. In other cases, amount of biological matter left is calculated and result returned in form of <code>( cost, biological matter left )</code>. I’m carrying around the cost, as it’s later needed for reporting how much matter was removed.</p>\r\n<pre><code>calculateNewBio :: Monad m =&gt;\r\n                RawResource Biological -&gt; Faction\r\n                -&gt; MaybeT (WriterT [KragiiResults] m) ((RawResource Biological), (RawResource Biological))\r\ncalculateNewBio cost faction = MaybeT $ do\r\n    let currentBio = factionBiologicals faction\r\n    return $ if currentBio &gt; 0\r\n                then Just $ ( cost\r\n                            , RawResource $ max 0 (currentBio - unRawResource cost))\r\n                else Nothing</code></pre>\r\n<p><code>destroyCrops</code> updates database with new amount of biological matter in store for the faction and records amount of destruction in <code>CropsDestroyed</code>. <code>tell</code> requires that we have <code>Writer</code> at our disposal and makes recording information nice and easy.</p>\r\n<pre><code>destroyCrops :: ( MonadIO m, PersistQueryWrite backend, BaseBackend backend ~ SqlBackend ) =&gt;\r\n                Entity Faction -&gt; RawResource Biological\r\n                -&gt; RawResource Biological -&gt; MaybeT (WriterT [KragiiResults] (ReaderT backend m)) ()\r\ndestroyCrops faction cost bioLeft = MaybeT $ do\r\n    _ &lt;- lift $ updateWhere [ FactionId ==. entityKey faction ]\r\n                            [ FactionBiologicals =. unRawResource bioLeft ]\r\n    tell [ CropsDestroyed cost ]\r\n    return $ Just ()</code></pre>\r\n<p>Final step is to roll a percentile die against given odds and see what happens. In case of <code>Success</code>, we record that worms were removed and value of function will be <code>Just RemoveOriginalEvent</code>. If we didn’t beat the odds, <code>WormsStillPresent</code> gets recorded and value of function is <code>Just KeepOriginalEvent</code>. Return value will then be used later to mark special event handled.</p>\r\n<pre><code>removeNews :: ( PersistStoreWrite backend, MonadIO m, BaseBackend backend ~ SqlBackend ) =&gt;\r\n              PercentileChance -&gt; MaybeT (WriterT [KragiiResults] (ReaderT backend m)) EventRemoval\r\nremoveNews odds = MaybeT $ do\r\nres &lt;- liftIO $ roll odds\r\n    case res of\r\n        Success -&gt; do\r\n            _ &lt;- tell [ WormsRemoved ]\r\n            return $ Just RemoveOriginalEvent\r\n        Failure -&gt; do\r\n            _ &lt;- tell [ WormsStillPresent ]\r\n            return $ Just KeepOriginalEvent</code></pre>\r\n<p>So result of this whole matter is:</p>\r\n<pre><code>( [KragiiResults], Maybe EventRemoval )</code></pre>\r\n<p>and whole lot of database activity.</p>\r\n<h2 id=\"handling-events-during-simulation\">Handling events during simulation</h2>\r\n<p>Pieces are now in place, time to put things in motion. When handling special events for a faction, first step is to load all unhandled ones and then call <code>handleSpecialEvent</code> for each of them.</p>\r\n<pre><code>handleFactionEvents :: (BaseBackend backend ~ SqlBackend\r\n                       , PersistStoreWrite backend, PersistQueryRead backend\r\n                       , PersistQueryWrite backend, MonadIO m) =&gt;\r\n                       Time -&gt; Entity Faction -&gt; ReaderT backend m [Key News]\r\nhandleFactionEvents date faction = do\r\n    loadedMessages &lt;- selectList [ NewsFactionId ==. (entityKey faction)\r\n                                 , NewsSpecialEvent ==. UnhandledSpecialEvent ] [ Desc NewsDate ]\r\n    let specials = mapMaybe extractSpecialNews $ parseNewsEntities loadedMessages\r\n    mapM (handleSpecialEvent (entityKey faction) date) specials</code></pre>\r\n<p><code>resolveEvent</code> resolves event based on choice user maybe made (this is what we explored earlier in the episode). Depending on the result of <code>resolveEvent</code>, event gets marked to handled and dismissed. In any case, a news article spelling out what happend is created and saved.</p>\r\n<pre><code>handleSpecialEvent :: (PersistQueryWrite backend, MonadIO m\r\n                      , BaseBackend backend ~ SqlBackend) =&gt;\r\n                      Key Faction -&gt; Time -&gt; (Key News, SpecialNews) -&gt; ReaderT backend m (Key News)\r\nhandleSpecialEvent fId date (nId, (KragiiWorms event _ choice)) = do\r\n    (removal, results) &lt;- resolveEvent (nId, event) choice\r\n    _ &lt;- when (removal /= Just KeepOriginalEvent) $\r\n                    updateWhere [ NewsId ==. nId ]\r\n                                [ NewsSpecialEvent =. HandledSpecialEvent\r\n                                , NewsDismissed =. True ]\r\n    insert $ report fId date event choice results</code></pre>\r\n<p>Result article creation is abstracted by <code>ResultReport</code> type class. It has single function <code>report</code> that takes parameters: database key of the faction the event concerns of, current time, special event that was processed, choice that was made and list of records telling what happened during resolution. It will return <code>News</code> that is ready to be saved into database.</p>\r\n<pre><code>class ResultsReport a b c | a -&gt; b, a -&gt; c where\r\nreport :: Key Faction -&gt; Time -&gt; a -&gt; Maybe b -&gt; [c] -&gt; News</code></pre>\r\n<ul>\r\n<li>quite long and verbose instance</li>\r\n<li>essentially take event, choice and results and build a string explaining what actually happened</li>\r\n<li>&lt;&gt; is monoid operation for combining things, here used for text</li>\r\n</ul>\r\n<p>Instance declaration is pretty long, because there’s many different cases to account for and by definition they’re all pretty verbose. I have included it in its entirity below, as it might be interesting to glance over and see different kinds of combinations that resolution might create.</p>\r\n<pre><code>instance ResultsReport KragiiWormsEvent KragiiWormsChoice KragiiResults where\r\n    report fId date event choice results =\r\n        let\r\n            content = KragiiNews { kragiiNewsPlanetId = kragiiWormsPlanetId event\r\n                                 , kragiiNewsPlanetName = kragiiWormsPlanetName event\r\n                                 , kragiiNewsSystemId = kragiiWormsSystemId event\r\n                                 , kragiiNewsSystemName = kragiiWormsSystemName event\r\n                                 , kragiiNewsExplanation = repText\r\n                                 , kragiiNewsDate = timeCurrentTime date\r\n                                 }\r\n        in\r\n            mkNews fId date $ KragiiResolution content\r\n        where\r\n            repText = header choice &lt;&gt; &quot; &quot; &lt;&gt; removed choice (WormsRemoved `elem` results) &lt;&gt; &quot; &quot; &lt;&gt; injury &lt;&gt; &quot; &quot; &lt;&gt; destruction &lt;&gt; &quot; &quot;\r\n\r\n            header (Just EvadeWorms) = &quot;Local farmers had chosen to work on their fields, while avoiding the kragii worms.&quot;\r\n            header (Just AttackWorms) = &quot;Local farmers had decided to attack the worms with chemicals and burning.&quot;\r\n            header (Just TameWorms) = &quot;Decision to try and tame the kragii had been taken.&quot;\r\n            header Nothing = &quot;No decision what to do about worms had been taken.&quot;\r\n\r\n            removed (Just EvadeWorms) True = &quot;After some time, there has been no new kragii sightings and it seems that the threat is now over.&quot;\r\n            removed (Just AttackWorms) True = &quot;Attacks seem to have worked and there has been no new kragii sightings.&quot;\r\n            removed (Just TameWorms) True = &quot;Kragii has been tamed and put into use of improving soil quality.&quot;\r\n            removed Nothing True = &quot;Despite farmers doing nothing at all about the situation, kragii worms disappeared eventually.&quot;\r\n            removed (Just EvadeWorms) False = &quot;Kragii are still present on the planet and hamper farming operations considerability.&quot;\r\n            removed (Just AttackWorms) False = &quot;Despite the best efforts of farmers, kragii threat is still present.&quot;\r\n            removed (Just TameWorms) False = &quot;Taming of the worms was much harder than anticipated and they remain wild.&quot;\r\n            removed Nothing False = &quot;While farmers were debating best course of action, kragii reigned free and destroyed crops.&quot;\r\n\r\n            injury = if FarmersInjured `elem` results\r\n                        then &quot;Some of the personnel involved in the event were seriously injured.&quot;\r\n                        else &quot;There are no known reports of personnel injuries.&quot;\r\n\r\n            totalDestroyed = mconcat $ map (x -&gt; case x of\r\n                                                    CropsDestroyed n -&gt; n\r\n                                                    _ -&gt; mempty) results\r\n            destruction = if totalDestroyed &gt; RawResource 0\r\n                            then &quot;In the end, &quot; &lt;&gt; pack (show (unRawResource totalDestroyed)) &lt;&gt; &quot; units of harvest was destroyed.&quot;\r\n                            else &quot;Despite of all this, no harvest was destroyed.&quot;</code></pre>\r\n<p>While there are still pieces left that need a bit work or are completely missing, the overall structure is in place. While this one took quite a bit of work to get working, I’m hoping that the next special event will be a lot easier to implement. Thanks for listening the episode.</p>\r\n<p>Easiest way to catch me nowdays is either via email or on fediverse where I’m Tuula@mastodon.social</p>\r\n',364,107,0,'CC-BY-SA','haskell, yesod',0,0,1),
(2743,'2019-02-06','Character build in the d20 system',3949,'Klaatu and Lostnbronx build an RPG character in the d20 system of Starfinder','<p>Klaatu and Lostnbronx spend an hour building an RPG character at a leisurely, and hopefully informative, pace. While the build process here is technically specific to the sci-fi (or science fantasy, really) game Starfinder, the idea is to convey the generic process of stepping through a character build instruction, cross-referencing important rules, and generally learning how to build a character in an unfamiliar system.\r\n</p>',78,99,0,'CC-BY-SA','Starfinder,RPG,character,build',0,0,1),
(2749,'2019-02-14','Lostnbronx and Klaatu commentary from episode 2743',890,'Thoughts about RPG character building, modern RPG play style compared to the Old School, and more','<p>\r\nOut-takes from episode 2743. This is commentary about modern RPG play style, the character build process, Starfinder as a system, and more.\r\n</p>\r\n<p>\r\nDid you know that Lostnbronx and Klaatu have a gaming blog? We do! You should go subscribe to it at <a href=\"https://mixedsignals.ml\" target=\"_blank\">mixedsignals.ml</a></p>\r\n\r\n<p>The blog features commentary about gaming, tech, geek culture, a podcast or two, and lots more.</p>',78,0,0,'CC-BY-SA','rpg, game, gaming',0,0,1),
(2751,'2019-02-18','Battling with English - part 3',822,'Misunderstandings about English grammar, spelling, punctuation, etc.','<h1 id=\"battling-with-english---part-3\">Battling with English - part 3</h1>\r\n<h2 id=\"some-word-confusions\">Some word confusions</h2>\r\n<p>In this episode, the third of this series, I’m looking at some words that are sometimes used in the wrong places, often being confused one with another. These words are often particularly difficult to differentiate by people for whom <a href=\"https://www.englishpractice.com/common-mistakes\" title=\"English Practice - Common Mistakes\">English is not their first language</a>.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>As usual I have provided detailed notes and examples for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2751/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Been:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/been\">Definition of “been”</a></li>\r\n<li>Online Etymology Dictionary: <a href=\"https://www.etymonline.com/word/been\">“been”</a></li>\r\n</ul></li>\r\n<li>Being:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/being\">Definition of “being”</a></li>\r\n<li>Online Etymology Dictionary: <a href=\"https://www.etymonline.com/word/being\">“being”</a></li>\r\n</ul></li>\r\n<li>Been versus Being\r\n<ul>\r\n<li><a href=\"https://www.englishpractice.com/common-mistakes/difference-9/\">English Practice - Difference between being and been</a></li>\r\n</ul></li>\r\n<li>Examples of the use of Being:\r\n<ul>\r\n<li><a href=\"https://sentence.yourdictionary.com/being\">Example sentences using <em>being</em></a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Weather:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/weather\">Definition of “weather”</a></li>\r\n<li>Online Etymology Dictionary: <a href=\"https://www.etymonline.com/word/weather\">“weather”</a></li>\r\n</ul></li>\r\n<li>Wether:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/wether\">Definition of “wether”</a></li>\r\n<li>Online Etymology Dictionary: <a href=\"https://www.etymonline.com/word/wether\">“wether”</a></li>\r\n</ul></li>\r\n<li>Whether:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/whether\">Definition of “whether”</a></li>\r\n<li>Online Etymology Dictionary: <a href=\"https://www.etymonline.com/word/whether\">“whether”</a></li>\r\n</ul></li>\r\n<li>Wither:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/wither\">Definition of “wither”</a></li>\r\n<li>Online Etymology Dictionary: <a href=\"https://www.etymonline.com/word/wither\">“wither”</a></li>\r\n</ul></li>\r\n<li>Whither:\r\n<ul>\r\n<li>Oxford Dictionaries: <a href=\"https://en.oxforddictionaries.com/definition/whither\">Definition of “whither”</a></li>\r\n<li>Online Etymology Dictionary: <a href=\"https://www.etymonline.com/word/whither\">“whither”</a></li>\r\n</ul></li>\r\n<li>Weather, wether, and the rest:\r\n<ul>\r\n<li><a href=\"https://grammarist.com/usage/wither-whither/\">Grammarist</a></li>\r\n<li><a href=\"https://www.grammar-monster.com/easily_confused/weather_whether_wether.htm\">Grammar Monster</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Previous episodes in this series:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2558\">Battling with English - part 1</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2596\">Battling with English - part 2</a></li>\r\n</ul></li>\r\n</ul>',225,120,1,'CC-BY-SA','grammar,spelling,punctuation,word misuse,English',0,0,1),
(3857,'2023-05-16','Yesterday I saw a solar flare',668,'An account of the first time I saw a solar flare with my own eyes.','<p>A solar flare is a huge release of energy at and near the surface of the Sun in the form of electromagnetic radiation and fast particles. On 19 January 2023 at around 11:00 UTC I was lucky enough to see a solar flare with my own eyes using a <a href=\"https://www.meadeuk.com/Coronado-Personal-Solar-Telescope-PST.html\">Coronado PST Solar Telescope</a> that belongs to the <a href=\"https://theasg.org.uk/\">Astronomical Society of Glasgow</a>.</p>\n\n<p>This audio was recorded the day after I had seen it so the details remained fresh in my mind.</p>\n\n<p>A view of how the Sun appears through the Coronado PST H&alpha; telescope taken with the main camera of Samsung Galaxy S9+ phone at the eyepiece, after much trial and error! This was taken on 20 January 2023 at 13:08 UTC the day after the flare. The enormous sun spot is still visible.</p>\n<p><a href=\"https://hackerpublicradio.org/eps/hpr3857/20230120_111458_1.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3857/20230120_111458_1_thumbnail.jpg\" title=\"The enormous sun spot is still visible on 20 January 2023 at 13:08 UTC.\" alt=\"Sunspot\" /></a></p>\n<!-- INSERT 20230120_111458_1.jpg -->\n\n<p>The X-ray flux from the Sun measured by the <a href=\"https://www.swpc.noaa.gov/products/goes-x-ray-flux\">GOES satellite(s)</a>.</p>\n<p><a href=\"https://hackerpublicradio.org/eps/hpr3857/goes_190123.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3857/goes_190123_thumbnail.png\" title=\"The X-ray flux from the Sun\" alt=\"X-ray flux\" /></a></p>\n<!-- INSERT goes_190123.png -->\n\n<p>A short movie of images covering the period from 10:01 UTC to 11:21 UTC  observed by the <a href=\"https://sdo.gsfc.nasa.gov/data/\">SDO satellite\'s AIA instrument</a>.</p>\n<video controls width=\"800\">\n<source src=\"https://hackerpublicradio.org/eps/hpr3857/2023_01_19_10_01_17_2023_01_19_11_21_41_AIA_304-hq.mp4\" type=\"video/mp4\">\nYour browser does not support the video tag.\n</video>\n<!-- INSERT  2023_01_19_10_01_17_2023_01_19_11_21_41_AIA_304-hq.mp4 -->\n',268,0,0,'CC-BY-SA','solar,astronomy,telescopes,planes',0,0,1),
(2752,'2019-02-19','XSV for fast CSV manipulations - Part 2',1359,'Part 2 of my introduction to the XSV tool','<h1 id=\"xsv-for-fast-csv-manipulations---part-1-basic-usage\">XSV for fast CSV manipulations - Part 1: Basic Usage</h1>\r\n<blockquote>\r\n<p><a href=\"https://github.com/BurntSushi/xsv\" class=\"uri\">https://github.com/BurntSushi/xsv</a></p>\r\n</blockquote>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>xsv is a command line program for indexing, slicing, analyzing, splitting and joining CSV files. Commands should be simple, fast and composable:</p>\r\n<ol>\r\n<li>Simple tasks should be easy.</li>\r\n<li>Performance trade offs should be exposed in the CLI interface.</li>\r\n<li>Composition should not come at the expense of performance.</li>\r\n</ol>\r\n<p>We will be using the CSV file provided in the <a href=\"https://burntsushi.net/stuff/worldcitiespop.csv\">documentation</a>.</p>\r\n<h2 id=\"commands-covered-in-this-episode\">Commands covered in this episode</h2>\r\n<ul>\r\n<li><strong>fixedlengths</strong> - Force a CSV file to have same-length records by either padding or truncating them.</li>\r\n<li><strong>fmt</strong> - Reformat CSV data with different delimiters, record terminators or quoting rules. (Supports ASCII delimited data.)</li>\r\n<li><strong>input</strong> - Read CSV data with exotic quoting/escaping rules.</li>\r\n<li><strong>partition</strong> - Partition CSV data based on a column value.</li>\r\n<li><strong>split</strong> - Split one CSV file into many CSV files of N chunks.</li>\r\n<li><strong>sample</strong> - Randomly draw rows from CSV data using reservoir sampling (i.e., use memory proportional to the size of the sample).</li>\r\n<li><strong>cat</strong> - Concatenate CSV files by row or by column.</li>\r\n</ul>\r\n',300,0,0,'CC-BY-SA','csv,command-line,data',0,0,1),
(2759,'2019-02-28','Cleaning the Potentiometers on a Peavey Bandit 65',1244,'I disassemble and clean the pots on my Peavey Bandit 65 to fix static in the knobs.','<p>Since my daughter has been learning a bit of guitar in the last several months, I\'ve actually gotten my old electric guitar and amplifier back out again after many years in the closet. The amp is a Peavey Bandit 65, which was a an affordable solid-state workhorse kind of amp back in the mid-80s and I\'ve had it since it was new. In this episode I talk through the process of removing the brains of the amp and cleaning the potentiometers to try to get rid of some of the static that\'s happening when I turn the knobs. I also discover belatedly that the reason I was not getting any distortion when I turned the saturation up was that the amp was stuck on the clean channel — shows how long it\'s been since I used the amp, I kind of forgot how the thing works!</p>\r\n\r\n<p>Click image below to view photo gallery</p>\r\n\r\n<p><a href=\"https://www.flickr.com/photos/137675441@N05/albums/72157706214884694\" title=\"Peavey Bandit 65 Cleaning\" target=\"_blank\"><img src=\"https://hackerpublicradio.org/eps/hpr2759.jpg\" alt=\"Peavey Bandit 65 Cleaning\"></a></p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://peavey.com/\">Peavey Electronics Corporation</a></li>\r\n	<li><a href=\"https://www.fender.com/products/electric-guitars/stratocaster\">The Fender Stratocaster</a></li>\r\n</ul>\r\n\r\n<h2>Credits</h2>\r\n\r\n<ul>\r\n	<li>Music bumpers are from Kimiko Ishizaka\'s <em>The Open Goldberg Variations</em>: <a href=\"https://www.opengoldbergvariations.org/\">https://www.opengoldbergvariations.org/</a>, used by permission of their <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>',238,0,0,'CC-BY-SA','Guitars, electronics, amplifiers, maintenance, repair',0,0,1),
(2753,'2019-02-20','Specific Settings In Storytelling',1027,'Lostnbronx looks at why you might choose specific settings for your tales.','<p>How does setting interact with plot or character? Why would you choose one type of setting over another? And how do certain specific settings become intrinsic aspects of the story itself?</p>\r\n<p>Lostnbronx takes a breezy, mostly incoherent stab at this rather complicated topic.</p>\r\n',107,105,0,'CC-BY-SA','stories, storytelling, setting, lostnbronx',0,0,1),
(2758,'2019-02-27','Haskell - Data types and database actions',2566,'Brief summary of how to declare your own datatypes in Haskell and how to store data in database','<h2 id=\"intro\">Intro</h2>\r\n<p>I have been doing series about web programming in Haskell and realized that I might have skipped over some very basic details. Better later than never, I’ll go over some of them briefly (data types and database actions). Hopefully things will make more sense after this (like with my friend, whose last programming course was programming 101 and they said afterwards that now all that 3d and game programming is suddenly making sense).</p>\r\n<h2 id=\"data-types\">Data types</h2>\r\n<p>Data here has nothing to do with databases (yet). This is how you can declare your own data types in Haskell. They’re declared with keyword <code>data</code> followed with type name, equals sign and one or more value constructors. Type name and value constructors have to start with uppercase letter.</p>\r\n<p>Simplest type is following:</p>\r\n<pre><code>data Simple = One</code></pre>\r\n<p>This declares a type called <code>Simple</code> that has single possible value: <code>One</code>.</p>\r\n<p>More interesting type is shown below. <code>Colour</code> has three possible values: <code>Red</code>, <code>Green</code> and <code>Blue</code>.</p>\r\n<pre><code>data Colour =\r\n    Red\r\n    | Green\r\n    | Blue</code></pre>\r\n<p>It’s possible to have parameters in value constructor. Following is <code>Payment</code> type that could be used to indicate how payment was done. In case of <code>Cash</code> amount is stored. In case of <code>IOU</code> free text is recorded.</p>\r\n<pre><code>data Payment =\r\n    Cash Double\r\n    | IOU Text</code></pre>\r\n<p>Fictional usage of the <code>Payment</code> is shown below. Function <code>paymentExplanation</code> takes a <code>Payment</code> as parameter and returns <code>Text</code> describing the payment. In case of cash payment, brief explanation of how much was paid is returned. In case of IOU slip the function returns explanation stored in <code>IOU</code> value.</p>\r\n<p><code>paymentExplanation :: Payment -&gt; Text</code> part is type declaration. It states that <code>paymentExplanation</code> takes argument of type <code>Payment</code> and returns result as <code>Text</code>.</p>\r\n<pre><code>paymentExplanation :: Payment -&gt; Text\r\npaymentExplanation payment =\r\n    case payment of\r\n        Cash amount -&gt;\r\n            &quot;Cash payment of &quot; &lt;&gt; (show amount) &lt;&gt; &quot; euros&quot;\r\n        IOU explanation -&gt;\r\n            explanation</code></pre>\r\n<p>Parameters don’t have to be hard coded in the type definition. Parametrized types allows creating more general code. <code>Maybe</code> is very useful data type that is often used for data that might or might not be present. It can have two values: <code>Nothing</code> indicating that there isn’t value and <code>Just a</code> indicating that value is present.</p>\r\n<pre><code>data Maybe a =\r\n    Nothing\r\n    | Just a</code></pre>\r\n<p><code>a</code> is type parameter that is filled in when declaring type. Below is a function that takes <code>Maybe Payment</code> as a parameter and if value of <code>payment</code> parameter is <code>Just</code> returns explanation of it (reusing the function we declared earlier). In case of <code>Nothing</code> <code>&quot;No payment to handle&quot;</code> is returned.</p>\r\n<pre><code>invoice :: Maybe Payment -&gt; Text\r\ninvoice payment =\r\n    case payment of\r\n        Just x -&gt;\r\n            paymentExplanation x\r\n        Nothing -&gt;\r\n            &quot;No payment to handle&quot;</code></pre>\r\n<p>Alternatively one can omit <code>case</code> expression as shown below and write different value constructors directly as parameters. In both cases, compiler will check that programmer has covered all cases and emit a warning if that’s not the case.</p>\r\n<pre><code>invoice :: Maybe Payment -&gt; Text\r\ninvoice (Just payment) =\r\n    paymentExplanation payment\r\n\r\ninvoice Nothing =\r\n    &quot;No payment to handle&quot;</code></pre>\r\n<p>Having several parameters gets soon unwieldy, so lets introduce records. With them, fields have names that can be used when referring to them (either when creating or when accessing the data). Below is <code>Person</code> record with two fields. <code>personName</code> is of type <code>Text</code> and <code>personAge</code> of type <code>Age</code> (that we’ll define in the next step).</p>\r\n<pre><code>data Person = Person\r\n    { personName :: Text\r\n    , personAge :: Age\r\n    }</code></pre>\r\n<p>To access data in a record, just use field as a function (there’s a bug, I’m turning 40, this month (today even, to be specific, didn’t realize this until I was about to upload the episode), but forgot such a minor detail when recording the episode):</p>\r\n<pre><code>me = Person { personName = &quot;Tuukka&quot;, personAge = 37 }\r\nmyAge = personAge me\r\nmyName = personName me</code></pre>\r\n<p>New type is special type of record that can has only one field. It is often used to make sure one doesn’t mix similar data types (shoe size and age can both be Ints and thus mixed if programmer isn’t being careful). Compiler will optimize new types away during compilation, after checking that they’re being used correctly. This offers a tiny performance boost and makes sure one doesn’t accidentally mix different things that happen to look similar.</p>\r\n<pre><code>newtype Age = { getAge :: Int }</code></pre>\r\n<p>One can instruct compiler to derive some common functions for the data types. There are quite many of these, but the most common ones I’m using are <code>Show</code> (for turning data into text), <code>Read</code> (turning text into data) and <code>Eq</code> (comparing equality).</p>\r\n<pre><code>data Payment =\r\n    Cash Double\r\n    | IOU Text\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<h2 id=\"database\">Database</h2>\r\n<p>In case of Yesod and Persistent, database structure is defined in models file that usually located in config directory. It is read during compile time and used to generate data types that match the database. When the program starts up, it can check structure of the database and update it to match the models file, if migrations are turned on. While this is handy for development, I wouldn’t dare to use it for production data.</p>\r\n<p>Following definitions are lifted from the models file of the game I’m working.</p>\r\n<pre><code>StarSystem\r\n    name Text\r\n    coordX Int\r\n    coordY Int\r\n    deriving Show Read Eq</code></pre>\r\n<p>This defines a table <code>star_system</code> with columns <code>id</code>, <code>name</code>, <code>coord_x</code>, <code>coord_y</code>. All columns have <code>NOT NULL</code> constraint on them. It also defines record <code>StarSystem</code> with fields <code>starSystemName</code>, <code>starSystemCoordX</code> and <code>starSystemCoordY</code>.</p>\r\n<pre><code>Star\r\n    name Text\r\n    starSystemId StarSystemId\r\n    spectralType SpectralType\r\n    luminosityClass LuminosityClass\r\n    deriving Show Read Eq</code></pre>\r\n<p>This works in the same way and defines table <code>star</code> and record <code>Star</code>. New here is column <code>star_system_id</code> that has foreign key constraint linking it to <code>star_system</code> table. <code>Star</code> record has field <code>starStarSystemId</code> (silly name, I know, but that’s how the generated names go), which has type <code>Key StarSystem</code>.</p>\r\n<p><code>spectral_type</code> and <code>luminosity_class</code> columns in the database are textual (I think <code>VARCHAR</code>), but in the code they’re represented with <code>SpectralType</code> and <code>LuminosityClass</code> data types. In order this to work, we have to define them as normal data types and use <code>derivePersistField</code> that generates extra code needed to store them as text in database:</p>\r\n<pre><code>data SpectralType = O | B | A | F | G | K | M | L | T\r\n    deriving (Show, Read, Eq)\r\nderivePersistField &quot;SpectralType&quot;\r\n\r\ndata LuminosityClass = Iap | Ia | Iab | Ib | II | III | IV | V | VI | VII\r\n    deriving (Show, Read, Eq)\r\nderivePersistField &quot;LuminosityClass&quot;</code></pre>\r\n<p>Final piece in the example is <code>Planet</code>:</p>\r\n<pre><code>Planet\r\n    name Text\r\n    position Int\r\n    starSystemId StarSystemId\r\n    ownerId FactionId Maybe\r\n    gravity Double\r\n    SystemPosition starSystemId position\r\n    deriving Show Read Eq</code></pre>\r\n<p>This introduces two new things: <code>ownerId FactionId Maybe</code> removes <code>NOT NULL</code> constraint for this column in the database, allowing us to omit storing a value there. It also changes type of <code>planetOwnerId</code> into <code>Maybe (Key Faction)</code>. Thus, planet might or might not have an owner, but if it has, database ensures that the link between <code>planet</code> and <code>faction</code> (not shown here) is always valid.</p>\r\n<p>Second new thing is <code>SystemPosition starSystemId position</code> that creates unique index on columns <code>star_system_id</code> and <code>position</code>. Now only one planet can exists on any given position in a star system.</p>\r\n<p>Database isn’t any good, if we can’t insert any data into it. We can do that with a function shown below, that create a solar system with a single planet:</p>\r\n<pre><code>createSolarSystem = do\r\n    systemId &lt;- insert $ StarSystem &quot;Solar system&quot; 0 0\r\n    starId &lt;- insert $ Star &quot;Sol&quot; systemId G V\r\n    planetId &lt;- insert $ Planet &quot;Terra&quot; 3 systemId Nothing 1.0\r\n    return (systemId, starId, planetId)</code></pre>\r\n<p>To use the function, we have to use <code>runDB</code> function that handles the database transaction:</p>\r\n<pre><code>res &lt;- runDB createSolarSystem</code></pre>\r\n<p>There are various ways of loading data from database. For loading a list of them, <code>selectList</code> is used. Here we’re loading all planets that have gravity exactly 1.0 and ordering results by the primary key in ascending order:</p>\r\n<pre><code>planets &lt;- runDB $ selectList [ PlanetGravity ==. 1.0 ] [ Asc PlanetId ]</code></pre>\r\n<p>Loading by primary key is done with <code>get</code>. It returns <code>Maybe</code>, because data might or might be present that match the primary key. Programmer then has to account both cases when handling the result:</p>\r\n<pre><code>planet &lt;- runDB $ get planetId</code></pre>\r\n<p>Updating a specific row is done with <code>update</code> function (<code>updateWhere</code> is for multiple rows):</p>\r\n<pre><code>_ &lt;- runDB $ update planetId [ PlanetName =. &quot;Earth&quot; ]</code></pre>\r\n<p>Finally, sometimes it’s nice to be able to delete the data:</p>\r\n<pre><code>_ &lt;- runDB $ delete planetId\r\n_ &lt;- runDB $ deleteWhere [ PlanetGravity &gt;. 2 ]</code></pre>\r\n<p>While persistent is relatively easy to use after you get used to it, it lacks ability to do joins. In such cases one can use library called Esqueleto, that is more powerful and has somewhat more complex API.</p>\r\n<h2 id=\"extra\">Extra</h2>\r\n<p>Because functions are values in Haskell, nothing prevents storing them in data types:</p>\r\n<pre><code>data Handler =\r\n    Simple (Int -&gt; Boolean)\r\n    | Complex (Int -&gt; Int -&gt; Int)</code></pre>\r\n<p><code>Handler</code> type has two possible values: <code>Simple</code> has a function that turns <code>Int</code> into <code>Boolean</code> (for example <code>odd</code> used to check if given number is odd) and <code>Complex</code> that takes two values of type <code>Int</code> and returns <code>Int</code> (basic arithmetic for example, adding and subtracting).</p>\r\n<p>Hopefully this helps you to follow along as I work on the game.</p>\r\n<p>Easiest way to catch me nowadays is either via email or on fediverse where I’m Tuula@mastodon.social</p>\r\n',364,107,0,'CC-BY-SA','haskell, database',0,0,1),
(2754,'2019-02-21','Craigslist Scam Catch',460,'Helped a client avoid being scammed on Craigslist and wanted to share some tips to HPR.','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Hello and welcome to Hacker Public Radio, I’m Edward Miro and for this episode I decided to record on a personal experience I had recently helping a client catch a Craigslist Scam. This will be part two in my series I’m calling “Information Security for Everyone”. As with most of the content I publish in the world of INFOSEC, my goal is to present the information in a way that a majority of people can get value from and anyone can play this for a friend, colleague or family member and make it easy for the non-hackers in our lives to understand. This particular episode shows a powerful way social-engineering can be implemented to steal money from unsuspecting victims and I will break down a few main points and red flags to look out for at the end.</p>\r\n<p>A couple weeks ago I was sitting with a client when she asked me offhandedly if I’d ever sent a Moneygram before. I told her I had and ask curiously why she wanted to know. She explained that she was very excited to be adopting a puppy from online and she needed to send $350 USD to the service that ships pets across the country. This immediately caused my hacker-sense to start tingling so I probed a bit more about the transaction.</p>\r\n<p>I asked if she had spoken to the seller on the phone, and she said she hadn’t. I said that seemed weird, but she assured me that the seller said it had to do with her religion. I wasn’t aware of any religious prohibitions to speaking on the phone that also allowed using Craigslist, but okay. I told her that that seemed a bit fishy to me. She asserted that she thought it did too at first, but she knew it was legit because she wasn’t sending the money to the seller, it was being sent to a third party pet transportation company that the seller had had contact her. She even showed the website of the company on her cell phone, which to be blunt, to my eyes looked extremely janky. I asked her if we could sit down for a few minutes and take a look at a few details before she sends anyone any money. She reluctantly agreed and really wanted this puppy.</p>\r\n<p>The first thing I asked to look at was the emails back and forth from the seller. I checked Google and all other major social media sites for the sellers name. No matches. Couldn’t Google the sellers email address due to the Craigslist email relay system. This in and of itself might be okay, we all use pseudonyms online sometimes and Craigslist is a site you might not wanna use your real name. Fine.</p>\r\n<p>She then showed me the email thread with the shipping company.</p>\r\n<p>The first strange thing I noticed from the emails was the link to the pet shipping company. The name didn’t match the URL in the link. You’d think a business would be able to get their own name right. I also saw that if you Googled the name given by the shipper, it’s extremely similar to a legitimate pet shipping company and indeed that legit company comes up as the first site found due to Google “fixing” our query. When you go to the link in the email however, the site itself was terrible to my eyes, but not to my client who is not as seasoned as I am at catching scams. I also showed her that the “company” didn’t have any social media presence. At all. No Facebook, Twitter, anything. Also the email address that was contacting her was <code>reallylongcompanyname@outlook.com</code></p>\r\n<p>She also told me she had spoken to the shippers on the phone and I asked if she still had their number. She did, but she told me she couldn’t ever get through when she called them and they’d always have to call her back. I asked for the number and called it on my phone. It was a Google Voice number! Not only that it was set to screening mode. She also told me when he did call her, he was rude and tried to get her to hurry up and send the money. I told her I was 100% confident this was a scam and I advised her to not go through with the deal.</p>\r\n<p>At this point she was extremely unhappy, but felt it was still a legitimate transaction because she had pictures sent to her of not only the puppy, but of the puppy in the shipping crate at the shipping company waiting for payment to be shipped. She explained that it’s not like it was a person trying to sell dogs or from a puppy mill. It was a lady giving it away for free and the money was for was the shipping. She just didn’t see why a scammer would go to the trouble of doing that and felt the pictures were authentic. I asked her to save all the images to her device and then showed her a site she could use to do reverse image searches. Before she did it, I asked her if she agreed that if this wasn’t a scam those pictures wouldn’t exist anywhere on the internet. She agreed and each of the pictures was found at least 9 other places online. Her heart sank and she didn’t have any further rebuttals to my concerns. She knew it was a scam and I just saved her from losing at least $350 USD. Not to mention that the scammer would have also asked for more money later for “shots” and “insurance”. Who knows how far they might have gotten.</p>\r\n<p>So here are the main red flags:</p>\r\n<ul>\r\n<li>Seller wouldn’t talk on phone</li>\r\n<li>Seller name didn’t seem legitimate</li>\r\n<li>Name of shipping company didn’t match URL in email</li>\r\n<li>Googling company name shows close match with legitimate company</li>\r\n<li>Company website very poorly designed and implemented</li>\r\n<li>Company has no social media presence</li>\r\n<li>Email address of contact at company using generic email address and not a legit domain</li>\r\n<li>Contact at company could only call her and she was never able to make inbound calls</li>\r\n<li>Phone number of company was Google Voice number</li>\r\n<li>Reverse image searches showed “proof” photos unoriginal</li>\r\n</ul>\r\n<p>A few of the tricks used by the scammers in this scam to make it more successful:</p>\r\n<ul>\r\n<li>Listed as adoption versus a sale to alleviate concern</li>\r\n<li>Handed off to “second party” to build legitimacy</li>\r\n<li>Use cute puppy pictures to appeal to emotion and overrule suspicion</li>\r\n<li>Counted on target not paying attention to detail</li>\r\n<li>Shipper established a sense of urgency</li>\r\n</ul>\r\n<p>She was very thankful and I told her to be very careful when anyone from online ever asks her to send money. I told her in all likelihood this was probably one person the whole time, hence why the person adopting out the dog “couldn’t talk on the phone”. They were also probably not even in this country as we know many of these scams aren’t. She did say that the shippers English wasn’t good. I also told her to make she shares this experience with all her friends and family. I always feel the best way to handle someone getting caught in a scam is to be on their side and never shame them. We are all susceptible to scams and social engineering and the best way to proceed is to empower them to share what they’ve learned. I also sent her a link to an article on the BBB site about these very types of scams that I’ll also link below. She was shocked how similar her experience was to the ones explained on the article.</p>\r\n<p>Well, thank you for taking the time to listen to my experience helping a client avoid getting caught in the all too common Craigslist scam. I hope this will help any non-hackers in your life and like I say in all my podcasts, I don’t claim to know all there is to know and love feedback and any opportunities to learn more or collaborate with others in the field. As with most of the research and articles I’ve written in the past, these are geared toward standard users in a business setting and are meant to be a jumping off point for further research and to be a foundation for cyber security 101 level training classes. If you like what I do, and want to have me come speak to your team, or just wanna chat, feel free to email me.</p>\r\n<p>Thank you and have a great day!</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<p><a href=\"https://www.bbb.org/article/investigations/14214-puppy-scams-how-fake-online-pet-sellers-steal-from-unsuspecting-pet-buyers-a-bbb-study\" class=\"uri\">https://www.bbb.org/article/investigations/14214-puppy-scams-how-fake-online-pet-sellers-steal-from-unsuspecting-pet-buyers-a-bbb-study</a></p>\r\n<p><a href=\"https://www.rover.com/blog/internet-dog-puppy-scams/\" class=\"uri\">https://www.rover.com/blog/internet-dog-puppy-scams/</a></p>\r\n',372,74,1,'CC-BY-SA','craigslist,scam,con,social engineering,puppy,dog,money,moneygram,infosec,cyber-security 101',0,0,1),
(2756,'2019-02-25','Bash Tips - 20',1955,'Deleting arrays; positional and special parameters in Bash','<h2 id=\"tidying-loose-ends-some-collateral-bash-tips\">Tidying loose ends <small><small>(Some collateral Bash tips)</small></small></h2>\r\n<h3 id=\"deleting-arrays\">Deleting arrays</h3>\r\n<p>I forgot to cover one thing on my list when doing the last show: I forgot to explain how to delete arrays and array elements. I’ll cover that topic in this episode.</p>\r\n<h3 id=\"positional-and-special-parameters\">Positional and Special parameters</h3>\r\n<p>I have also avoided talking much about the positional and special parameters in Bash: <code>\'$1\'</code>, <code>\'$2\'</code>, <code>\'$#\'</code> and the rest. I will cover (some of) these in this episode.</p>\r\n<h3 id=\"silly-titles\">Silly titles</h3>\r\n<p>I stopped doing the weird episode titles by episode 14 because I thought the joke was getting tired. However, I think a few people missed them (and a certain HPR colleague was found <em>vandalising my new titles as they were being posted</em> ;-), so I have added them inside the notes on the older shows and am adding one here – as a homage to silliness.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2756/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li>Section <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion\">“3.4 Shell Parameters”</a></li>\r\n<li>Section <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Shell-Builtin-Commands\">“4 Shell Builtin Commands”</a>\r\n<ul>\r\n<li>Section <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins\">“4.1 Bourne Shell Builtins”</a></li>\r\n<li>Section <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins\">“4.2 Bash Builtin Commands”</a></li>\r\n</ul></li>\r\n<li>Section <a href=\"https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin\">“4.3.1 The Set Builtin”</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li><p>POSIX Shell Command Language: <a href=\"https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#unset\"><em>unset</em></a></p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 “<em>Bash parameter manipulation</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 “<em>Some Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 “<em>Some more Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 “<em>Some further Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 “<em>Some additional Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 “<em>Some other Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 “<em>Some supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 “<em>More supplementary Bash tips</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 “<em>Some ancillary Bash tips - 9</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 “<em>More ancillary Bash tips - 10</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 “<em>Further ancillary Bash tips - 11</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 “<em>Additional ancillary Bash tips - 12</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 “<em>Extra ancillary Bash tips - 13</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2689\">HPR episode 2689 “<em>Bash Tips - 14 (Some auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2699\">HPR episode 2699 “<em>Bash Tips - 15 (More auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2709\">HPR episode 2709 “<em>Bash Tips - 16 (Further auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2719\">HPR episode 2719 “<em>Bash Tips - 17 (Additional auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2729\">HPR episode 2729 “<em>Bash Tips - 18 (Extra auxiliary Bash tips)</em>”</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2739\">HPR episode 2739 “<em>Bash Tips - 19 (Supplemental auxiliary Bash tips)</em>”</a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2756/bash20_ex1.sh\">bash20_ex1.sh</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2756/bash20_ex2.sh\">bash20_ex2.sh</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,array,delete,positional parameters',0,0,1),
(2757,'2019-02-26','How to DM',2694,'Klaatu explains how to DM an RPG, and Lostnbronx demonstrates, step by step, how to build a dungeon','<h2>Klaatu</h2>\r\n<p>\r\nI\'ve gotten a lot of great feedback on the Interface Zero play-through and the episode about getting started with RPGs I did with Lostnbronx.\r\nPeople have told me that one of the biggest blockers to getting started is knowing what to do as GM.</p><p>\r\nNow, I\'ve read lots of rulebooks and GM guides, and it seems to me that most of them assume you\'ve either played an RPG before, and so you\'ve seen an example of a Game Master at play, or you\'ve seen one on Youtube or Twitch. It\'s a safe assumption, but it\'s easy to forget all of those great examples under pressure.\r\nSo in this episode, Lostnbronx and I are going to provide you with some clear and direct instructions on what exactly a GM does.\r\n</p><p>\r\nThe short version is this:</p>\r\n<ol><li><p>\r\nTell the players where they are and what they see around them.\r\n</p></li><li><p>\r\nListen to the players when they tell you what they want to do.\r\n</p></li><li><p>\r\nTell the players the outcome, based on your privileged knowledge of the game world or on a roll of the dice, of their actions.\r\n</p></li></ol>\r\n<p>\r\nYou loop over that sequence, and you\'re game mastering!\r\n</p><p>\r\nBut that makes for a short episode, and anyway, there are details about the process that we can talk about to make you feel more comfortable with the prospect of deciphering a game world with your friends.\r\n</p><p>\r\nTo that end, Lostnbronx and I have started a <a href=\"https://mixedsignals.ml\" target=\"_blank\">website dedicated to gaming</a>&#33; You should check it out, subscribe to our feed. We discuss everything game-related there, plus a little tech and all manner of topics of interest to geeks.\r\n</p>\r\n\r\n<h2>Lostnbronx</h2>\r\n<p>\r\nRight off the bat, it\'s important to understand that every GM is different. No two styles of running a game match completely, nor should they. And while there\'s no one correct way to run a game, there are plenty of ways to do it poorly. The GM wears many hats, but in my opinion, the most important job is to make sure that everyone has a good time. Your players are giving you an evening out of their lives. Next week they\'ll probably give you another. It\'s your job to make sure that time isn\'t wasted.\r\n</p><p>\r\nBy definition, games, even role-playing games, are a form of entertainment -- like reading a book, watching a movie, or enjoying the circus. When you go to that, the GM is the ringmaster, presenting the show; while the players are both the audience, and the main attraction. The GM controls the world, the people, the monsters, the history, even the weather. The GM controls everything, in fact...except for the player characters. A game master presents the situation, but it\'s the players who decide what to do with that information.\r\n</p><p>\r\nNow, this is all pretty vague, and describing RPG\'s is far less informative than playing them. Considering this is a podcast, I encourage you to go back and listen to Klaatu\'s aforementioned \"Interface Zero\" episodes. These are excellent examples of actual game play. If you\'re having a hard time imagining how RPG\'s are presented and experienced, you\'ll appreciate those shows.\r\n</p><p>\r\nNow then, almost all games are divided into genre types: sword and sorcery; space opera; spies; super-heroes; and pretty much everything else. And I mean everything! If there\'s a genre of fiction and storytelling that you enjoy, chances are there\'s a game or game setting for it somewhere. The most popular style of RPG\'s out there are fantasy. Think \"Lord of the Rings\". Think \"Harry Potter\". Think of anything, in fact, because all of it is possible.\r\n</p><p>\r\nA staple of the high fantasy genre of gaming is the dungeon. Now, that term has two meanings in this sort of game: first, the usual meaning, of what amounts to the basement of a castle, with jails, interrogation rooms, storage rooms, and more. The other meaning refers specifically to a type of adventuring environment. Both of these are usually found underground, but an adventuring dungeon may have nothing to do with any castle. It might be a lost crypt, a cave system, an abandoned gold mine, or the lair of some dreaded beast that\'s been terrorizing the countryside. In the dungeon might be enemies, monsters, and treasure protected by deadly traps. Magic abounds. There might be puzzles, dark secrets, or a kidnapped prince to rescue.\r\n</p><p>\r\nAs a new GM, you can start off any way you want, but in my experience, the best way to get used to how the game works, and how the whole process of providing an evening\'s entertainment to your friends or family works in this context, is to create a dungeon and run your players through it.\r\n</p><p>\r\nDungeons generally require set-up time; that is to say, you have to design it in advance. Now, Klaatu and I are currently working on ways to ease that burden, with the ultimate goal of eliminating the pre-work entirely. But for now, let\'s talk about the traditional way to approach all this. What follows is a step-by-step process, but understand, it\'s only one of an infinite possible number of them.\r\n</p><p>\r\nSTEP 01 -- CREATE THE COUNTRYSIDE\r\nSome GM\'s say creating the world is the first step. Some say creating the godly pantheons of the world is the first. Some say it\'s the history, or the fantasy races. They\'re not wrong, but trust me, when you\'re just starting out, none of that stuff matters. In this example, you\'ll be running the players through a dungeon. That dungeon is out in the country, within the middle of a large forest.\r\n</p><p>\r\nNow, it will make the beginning and end of the adventure easier if you have a small village nearby where the player characters all live. We\'ll call it Forestdale for the lack of anything better. In Forestdale, there\'s an inn or tavern. This is where people get together, tell tall tales, and become inspired to go adventuring, so let\'s give it a name as well: \"The Prancing Unicorn\". That\'s home base. Every player character knows this place, and everyone in it knows them.\r\n</p><p>\r\nOne of the stories being swapped at \"The Unicorn\" lately is about a tribe of dangerous creatures living in an underground lair somewhere within the forest. They are led by an evil wizard, or so the tales go. They have been attacking farmers and merchants who travel through the roads and foot paths of the woods in order to sell their goods in Forestdale. One of the merchants says he saw them travel down the Western path near the Old Bridge. Something must be done, but who would be brave or foolhardy enough to even try?\r\n</p><p>\r\nAnd that\'s all you need to create for the world right now. Remember, this stuff is new; no one needs large amounts of detail just yet, least of all you. You\'ll have enough to juggle.\r\n</p><p>\r\n\r\n\r\nSTEP 02 -- CREATE THE DUNGEON FLOOR PLAN\r\nOne of the rumors to be heard at \"The Prancing Unicorn\" is that there\'s an underground cave system or labyrinth somewhere in the forest. Some say it\'s a myth, others say their cousin\'s uncle\'s sister\'s best friend came across it once. Either way, its existence is shrouded in mystery, and people are said to go in, but not always come out.\r\n</p><p>\r\nThis is your first dungeon. You don\'t want to do more work than you need to. Let\'s make this dungeon a single level. Later, you can add a secret panel somewhere that can reveal a set of stairs down to a second level (and from there, a third, fourth, tenth, or more). Right now, it\'s one level, hidden below the forest. It\'s dark, it\'s dangerous. It\'s plenty.\r\n</p><p>\r\nPutting a dungeon together can be difficult, but it doesn\'t have to be. The traditional way to create one of these is to use graph or hex paper and draw out the floor map. Each square of the graph paper is equal to ten feet, or, say, three meters. You make note of all rooms, caves, doors, hallways, stairs up or down, floor traps, hidden doors, and anything else you want in there. Be sure to put a set of stone stairs that lead from the forest above, down to this dank and gloomy dungeon.\r\n</p><p>\r\nThere are no standard symbols for the different things on the map, despite what anyone might tell you, but for now, let\'s turn the paper landscape style, and at the top of the page, now held that way, outline one square of the graph paper with a pencil. Inside the square, draw three or four small lines at an angle. This will represent a set of stairs. Next to the stairs, write the letter \"U\". This is the way to get to the forest above. Granted, it\'s how the player characters will come down here to begin with, but once they are here, they have to go up to leave, hence the \"U\". If that\'s confusing, you can write, \"To The Forest Above\", next to this square, maybe with a little arrow. You can write anything you want, but this is how the player characters will get in and out of your dungeon.\r\n</p>\r\n<img src=\"https://mixedsignals.ml/games/blog/user/pages/_img/01-stairs-down-600x337.jpg\" />\r\n<p>\r\nWe\'re going to draw the floor plan from the top of the page down. The entire dungeon map will be on this one side of the paper. In the corner, draw an arrow pointing up, and put a letter \"N\" there. That\'s North. We\'ll be using compass directions from now on. Granted that when underground, it\'s hard to get your bearings without a compass, but for this first dungeon, we won\'t worry about that. North, South, East, West. It makes life easy.\r\n</p><p>\r\nOn the bottom of the page, to the South, draw a box in the middle of the page that\'s ten by ten squares in size. This is where the dungeon tunnels all will be leading, and where we\'ll have the biggest fight of the adventure. We\'re setting that up now, so we always know where we\'re heading. Now go back to the stairs at the top of the page.\r\n</p><p>\r\nDraw a long line from the lower edge of the stairs going West. Stop the line a square or two from the edge of the paper. Now do the same thing going East. Next, move down one square, and draw another line parallel to both of these, going entirely from one side of the page to the other, East to West. You\'ve just created a place for the players to explore, so imagine it for a moment: they come down some broken, forgotten stairs. Let\'s say they travel at least a hundred feet down, tripping over tree roots and walking through cobwebs, until the stairs deposit them in the middle of a dark tunnel, ten feet wide. It stretches to either side, running East and West out of sight (you know that it goes hundreds of feet in both directions, but you\'ll let them discover that for themselves). They listen, and can hear nothing but the scurrying of unseen vermin. At least, they hope that\'s what it is. Not a bad start.\r\n</p>\r\n<img src=\"https://mixedsignals.ml/games/blog/user/pages/_img/02-first-tunnel-600x337.jpg\" />\r\n<p>\r\nAlong this hallway, you\'ll draw little rectangles, like black bars, on random squares along the Southern side of the tunnel. Not too many, just a few here and there, with generous space in between. These are heavy wooden doors. Some may be locked. That\'s your choice. If they are, put a little symbol near them. It could be as simple as the letter \"L\", so let\'s go with that. Now you know where the all doors are in this particular tunnel, and you know which of them will be a challenge for the player characters to open.\r\n</p><p>\r\nThis is just the first tunnel of a larger complex. This complex can be as big or as small as you\'d like. Let\'s say it\'s moderately sized. Before we draw more tunnels, let\'s draw the rooms behind those doors. This will tell us how much map space we\'ll have for further tunnels. Some GM\'s like to draw all the tunnels first, and then fit in the rooms. You can do it however way you want later on; right now, let\'s just use this method. Pick a door. Draw a box behind it, three or four squares in size. That\'s the room. Do the same behind the other doors. Make the rooms different shapes and sizes, but not too big. Let the big room at the bottom be the star. When you\'re done, you have a huge tunnel, with several mysterious doors, behind which are some good-sized rooms.\r\n</p><p>\r\nOn the part of the tunnel that ends on the West side, draw a connecting tunnel South for five squares, and then turn the direction back to the East. Draw this tunnel going that way for ten squares. Put a door or two along here, and draw some rooms for them. Turn the tunnel South again, and go five or six squares, and turn it East again for four squares. Draw a door and room. Maybe it\'s locked, maybe not. Continue with this meandering, jagged floor plan, wandering East and then West, but always moving South. Add occasional doors and rooms as you go, until your tunnel finally ends on the Western side of the large ten by ten square room at the bottom of the page. Draw a door to get in there.\r\n</p>\r\n<img src=\"https://mixedsignals.ml/games/blog/user/pages/_img/03-west-side-600x337.jpg\" />\r\n<p>\r\nNow go back up to the long tunnel at the top, and repeat this whole process on the Eastern side, eventually bringing that part of the tunnel to the Eastern edge of the big room at the bottom. Put a door there.\r\n</p>\r\n<img src=\"https://mixedsignals.ml/games/blog/user/pages/_img/04-east-side-600x337.jpg\" />\r\n<p>\r\nNow, number your rooms on the map, starting at at the top, and working your way down, until you\'ve marked each one. Room numbers are essential, because you\'ll be keeping track of each one.\r\n</p>\r\n<img src=\"https://mixedsignals.ml/games/blog/user/pages/_img/05-numbered-rooms-600x337.jpg\" />\r\n<p>\r\nThe floor plan to your first dungeon is complete. Now you need to put interesting things in it.\r\n</p><p>\r\n\r\nSTEP 03 -- POPULATE YOUR DUNGEON\r\nOkay, on a separate piece of paper, list the rooms of your dungeon. Start at #1, and go down. Beside the room number, you put in a brief description, along with any monsters, treasure, or other points of interest. You\'ll be consulting this list throughout the game, so write down everything you need to know, in order to minimize the amount of time you\'ll inevitably have your nose in the rulebook while playing. Monster statistics, including their weapons, and and the damage they do, should all be on this list, though there are ways to simplify the process, once of which I\'ll go into in a moment.\r\n</p>\r\n<img src=\"https://mixedsignals.ml/games/blog/user/pages/_img/06-room-list-pg1-pg2-600x533.jpg\" />\r\n<p>\r\nWhen putting creatures and things into your dungeon, the first thing to remember is to not overload it. Each room does not need a monster. Not every room needs treasure. It might be helpful to think in terms of what you\'d like to see in the dungeon as a whole. Remember the stories of evil creatures, and possibly a wizard, which you heard at \"The Dancing Unicorn\"? We\'ll use that as our springboard. This is a starting dungeon, not just for you, but also for the player characters. Starting dungeons mean low-level monsters, so let\'s go with goblins.\r\n</p><p>\r\nGoblins are generally quite impressed with magic, so we\'re going to assume a wizard of dubious character has bullied a small tribe of them into being his thugs. They\'ve been waylaying passing merchants and farmers, stealing their wares, and carrying off food (along with the occasional peasant worker, as goblins love the taste of human flesh). Stupid, but dreadful creatures, they have displayed a level of tactical organization that\'s not normal for them. This, of course, is because the wizard\'s in charge. Look up the statistics for goblins, and understand what they\'re like. For this adventure, we\'re not going to worry about goblin captains, or goblin chiefs, both of which are tougher than your average goblin. No, all the creatures for this adventure have the same statistics. Don\'t drive yourself crazy writing them down, over and over. Write them once at the bottom of the room description page, and every time the player characters run into a goblin, consult them.\r\n</p><p>\r\nLet\'s say there are a total of fifteen goblins in this dungeon. They won\'t all be together; the player characters will encounter a few of them here and there, in various rooms, or maybe ust wandering the tunnels. The rooms themselves will have the spoils of all their raids, including barrels of wine, hams and sides of beef; furs, and a few copper, silver, and gold coins. If there\'s wine in one of the rooms, maybe the goblins there are drunk, fighting at a penalty to hit and damage. And remember, not all rooms need things in them. Maybe this was once a temple, and there\'s just broken furniture, and rotting religious robes in some of the rooms. In one, there might also be a tapestry against the wall, depicting a miracle of whatever god this place was once dedicated to. What you might not tell the player characters up front is that the tapestry could fetch a fair amount of gold coins in the market back in Forestdale. Too big to carry while exploring the dungeon, such a thing could always be rolled up and fetched on their way out. Not all treasure is found in wooden chests.\r\n</p><p>\r\nThen again, a lot of it is, so why not put one in the big room to the South? Of course, you have to defeat the evil wizard and his goblin cohorts, wh are hanging out in there. As a rule of thumb, you might want to sprinkle half the goblins throughout the dungeon, leaving the other half here, for the final fight. Stealth matters. Approaching the big room noisily, and kicking open one of the doors, is not stealthy. The player characters might be able to catch the wizard and his minions off-guard, if they move quietly.\r\n</p><p>\r\nIn order to be a credible threat to the player characters, this wizard should be of a slightly higher level, say 2nd or 3rd. He\'ll have some aggressive spells, and he\'ll have his goblins handy. You\'ll roll up the wizard the same way the players rolled up their characters, only you\'ll make him more experienced, and with more spells at his command. Maybe he even has a magic item of some sort. Should the players defeat this guy, this magic item will be part of the treasure; until then, it\'s something the wizard will use against them. Don\'t make it too tough. Maybe don\'t make it tough at all: a +1 Ring of Protection, maybe. Or perhaps, a +1 dagger. That might not sound like much, but it\'s more than the player character\'s have when they start.\r\n</p><p>\r\nNot enough excitement, maybe? Just add in a couple of giant rats in one of the rooms. Maybe some large spiders in another. Don\'t forget to put their statistics down in the room description. Judging how tough or easy a dungeon needs to be comes with experience. My suggestion is to err on the side of toughness, to put more challenges in there than maybe you feel comfortable with. If the player characters are looking depleted and injured, you can say the room is empty, instead of filled with spiders. Also, it doesn\'t hurt at all to remind the players now and then that it\'s okay to retreat. They can always come back another day when they\'re rested, and have made plans based on the knowledge they gained the first time around. It sets up a grudge match...the heroes vs. the evil wizard and his goblin hoard. You, as the GM, just repopulate the goblins, move them around a bit, so they\'re not all in the same rooms as before (though the big room should still be for the final fight), and //voila//! You\'ve just provided your players with two night\'s worth of entertainment, for the effort of only one.\r\n</p><p>\r\nAnd there you have it: a stocked dungeon that dovetails into the local lore of the countryside, ready for your players to explore.\r\n</p><p>\r\n\r\n\r\nSTEP 04 -- ROLLING UP CHARACTERS\r\nSome GM\'s will want a whole night just for this process. Others will just have the players arrive at the game with their characters ready to go, especially if they are experienced with the game. I won\'t go over the character creation process here, because each game is different, and some are VERY different. I mention this now, though, because the players need characters, and creating them comes before the adventure starts. If the game is as new to them as it is to you, take that whole night to help them create their characters. It\'s fun all on its own, and it allow\'s everyone to be familiar with the other characters -- something vital to party survival.\r\n</p><p>\r\nI\'m not going to go into detail about the process of rolling up characters, because, like you, Klaatu and I have dedicated an evening just to this process. In a previous episode in this mini-series, the two of us created a character from the ground up, so you can hear what\'s involved, and how you might want to approach the process with your own players.\r\n</p>\r\n<h2>Klaatu</h2>\r\n<p>\r\nIf designing your own custom dungeon seems intimidating to you, there is another way. And it\'s a time-honoured, legitimate way to play, and it\'s quite often the way I play: you go find an adventure that someone else has already written.\r\n</p><p>\r\nAn adventure is the scenario you and your players experience when you sit down at the table to play. It\'s arguably the *game* (the rulebooks are the game engine, or the mechanics). Wizards of the Coast, Paizo, Catalyst, Kobold Press, Frog God, and many others publish adventures (sometimes called \"modules\", \"scenarios\", or \"adventure paths\") written by professional game designers. Published adventures provide the story framework for your game.\r\n</p><p>\r\nNot all systems publish adventures, though, or you may choose not to use one. If that\'s the case, spend some time developing a story. Writing a good game is part science, part craft, and part magic, but if you and your players are up to the challenge, then running blindly through a story that\'s mostly being created spontaneously on the spot can be a lot of fun. If that sounds overwhelming, though, get a published adventure!\r\n</p><p>\r\nQuick tip: Free, small, or introductory adventures are often available from https://drivethrurpg.com, https://dmsguild.com, and https://www.opengamingstore.com\r\n</p><p>\r\nMany adventures have text blocks that provide you with introductory text for each part of the game, they explain clearly what the goal of the players is during that segment, and give you guidance on what players will find in the area and how those discoveries lead to the next plot point.\r\n</p><p>\r\nBroadly speaking, there are two types of published adventures: there are \"one-shots\" and there are \"modules\" or \"adventure paths\".\r\n</p><p>\r\nA one-shot adventure is analogous to a quest in a video game: it\'s a single, clearly-defined task with a very obvious and immediate result; for example, goblins are terrorizing the hapless citizens of the local village, so go to their cave and clear it out: if you do, you\'ll relieve the villagers of the horrors, and you get to keep any gold or weapons you find.\r\n</p><p>\r\nThe advantage is that it\'s designed to be a quick, one-time game session, so it\'s perfect for playing with friends you only see once in a while, or with someone who\'s never played before and just isn\'t sure if it\'s something they want to commit to. Don\'t be fooled by the page count of these small adventures: it may only be 5 to 10 pages long, sometimes less, but you\'ll be surprised at how long players can spend exploring a boundless world existing only in their imagination.\r\n</p><p>\r\nAdventure paths or modules or campaigns are bigger stories with\r\nloftier goals. You can think of them as lots of little one-shots\r\nstrung together so that once players accomplish all the tasks and\r\nsolve all the mysteries over the course of 200 pages, they have a\r\nfinal showdown with some Big Bad, and win themselves a place in the\r\nlegends of the game world. It\'s an epic poem instead of a short\r\nstory. It feels grander, it feels important. The losses along the way\r\nare more profound, and the victories sweeter. These campaigns take\r\nmonths to play through and usually expect a gaming group to meet\r\nweekly or fortnightly or at least monthtly to work their way through\r\nthe tale.\r\n</p><p>\r\nI should mention one more kind of book you might stumble across, and\r\nthose are source books. I mention this because I\'ve had friends go and\r\nbuy books more or less blindly, and then they bring them back home\r\ndisappointed that instead of a book of lore about dark elves, they\r\nbought an adventure set in the underdark. Or the other way round: they\r\nwanted an adventure and ended up with a rule book.\r\n</p><p>\r\nThis happens with the bigger systems that produce a lot of media, like\r\n{D&amp;D, Shadowrun, Pathfinder, Warhammer}, so get clarity on what you\'re\r\nbuying before you make a purchase. If you come across a cool ShadowRun\r\nbook called RUN FASTER expecting a campaign to run with your friends,\r\nyou\'ll be surprised to find that you\'ve purchased a source book full\r\nof metatypes, expanded rules, and alternate character creation\r\nmethods: sort of a Shadowrun Core Rulebook part 2. Same goes for, say,\r\nVolo\'s Guide with D&amp;D, or Ultimate Campaign in Pathfinder. It can be\r\noverwhelming and they\'re not aways labelled clearly (or if they are,\r\nthe label gets lost in the word cloud of RPG jargon that you\'re not\r\nused to yet), so do a little research first.\r\n</p><p>\r\nI\'ve played through dungeons that a GM created over his lunch break, and I\'ve played through adventures written by clever game designers, and I can confidently say that they\'re both great ways to RPG. But as a GM, if you feel overwhelmed by the idea of designing a dungeon, a published adventure is a great way to start. Aside from reading a chapter ahead before each game night, all the prep work is done for you, and there\'s very little thinking required.\r\n</p><p>\r\nAnother part of being GM is deciding when a die roll is necessary. Die rolls represent the chance of success or failure when a specific action is taken, but the confusing thing is: if you think hard enough about anything in the world you can find a chance of success or failure. As a GM, it\'s up to you to decide what\'s \"important\" enough for a roll. Strictly speaking, that\'s determined by the rules. The rules told you what requires a roll, and you\'re expected to know the rules well enough to make the call.\r\n</p><p>\r\nIn practise, however, you have a lot of stuff to track in you head, and remembering what requires a die roll, or deciding to request a die roll even though it may not be strictly required, can feel overwhelming for a new GM.\r\n</p><p>\r\nGood news: Players intuitively know when to roll dice. A player knows their character\'s skills (because they built the character and wrote it down on their character sheet), so sometimes the actions they choose to take are chosen because it falls within a category of a skill they happen to have. A thief probably wouldn\'t ever think to *look* for hidden door if the thief were a fighter (who would more likely think to pound on the wall rather than to slyly look for a hidden door). So if your player reaches for dice, let them roll because they\'re probably right.\r\n</p><p>\r\nI\'m sure it\'s possible to take it too far, but people like to roll dice. It\'s part of the fun of an RPG, the uncertainty of subjecting yourself to the whims of fate. So when in doubt, either make your players roll dice, or roll dice yourself. I use dice rolls to help me decide everything from NPC reactions to weather conditions. It\'s usually safe to default to rolling.\r\n</p><p>\r\nWorst case scenario is that die are only picked up for fights and a literal interpretation of skills: and that works because those are the rules as written.\r\n</p><h2>Klaatu</h2>\r\n<p>\r\nPlayers drive the story. In video game or movie terminology, they control the \"camera\". When players are exploring or investigating, let them ask questions or take actions (\"I look in the closet\"), and answer them as you see fit (\"You open the closest and see an array of fine garments.\")\r\n</p><p>\r\n\"I\'ll move the clothes aside and examine the walls, and the floor. I\'m looking for trap doors or hidden compartments, or anything suspicious.\"\r\n</p><p>\r\nAnd so on. Players can choose to investigate and explore for as much as they want. That\'s the beauty of a pen-and-paper RPG: the world is infinite. That said, you\'re the GM and you owe it to your players to keep the game moving. You don\'t to let your players spend 3 real hours searching a room that, in the end, has no bearing upon the plot whatsoever.    That can be a delicate matter, because the nature of the game means that you know things that the other players don\'t, meaning much of the puzzle for players is what they don\'t know.\r\n</p><p>\r\nUsually I let players explore a space on their own until I feel that they\'ve explored the obvious parts of it, and then I remind them where the exits are, or I remind them how many other rooms there are to explore, or some subtle clue to say, without saying, that they\'ve secured an area.\r\n</p><p>\r\nIf players are especially suspicious of something, though, you certainly have the power to generate a subplot, and often times you should do that. It\'s fun for you and rewarding to players. For instance, if a player is convinced that there\'s a secret panel in a closet and spends a lot of time investigating, then you might decide that there IS a secret panel in the closet, and then roll on a random table to determine what could possible inside that compartment. Or you could leave the compartment empty, thereby creating a story hook to return to later...what used to be in that compartment? who took it, and why? What were the implications?\r\n</p><p>\r\nKeeping the gaming moving is an inexact, unscientific process, but usually it comes pretty naturally. When you start to get bored of the players exploring, you can bet that they\'re probably getting bored too, and that\'s when you know to urge them forward. If all else fails, you can always have something lure them from one space to another: a mysterious sound, an oncoming threat, or a supernatural or divine instinct.\r\n</p>\r\n',78,95,0,'CC-BY-SA','rpg,dm,gm,game master,dungeon master,dnd',0,0,1),
(2762,'2019-03-05','What You Really Are',996,'Lostnbronx looks back at his early gaming days.','<p>I got into Dungeons &amp; Dragons back in the 1970s. This is my memory of that time and that gaming group, and especially, of the guy who taught me how to play.</p>',107,95,0,'CC-BY-SA','gaming, D&D, lostnbronx',0,0,1),
(2763,'2019-03-06','Deepgeek explains SPF records',849,'Confused about SPF? Klaatu was. Here\'s Deepgeek\'s explanation.','<p>\r\nKlaatu reads a <a href=\"https://gopher.info-underground.net:70/scottphlog/9997-SPF-Intro.txt\" target=\"_blog\">phlog &#40;gopher&#41; post</a> by Deepgeek explaining the practical uses of SPF records.\r\n</p>',78,99,0,'CC-BY-SA','email,spf,mx,postfix,smtp',0,0,1),
(2770,'2019-03-15','Navigating the maze of RPG books',1873,'There are so many kinds of RPG books out there, where do you start? Klaatu tells all!','<p>\r\nTaxonomy of RPG-related books:\r\n</p>\r\n\r\n<ol>\r\n<li><p>\r\nRulebooks tell you how to play the game.\r\n</p></li>\r\n<li><p>\r\nOptional books of rules add modular components to the base game. They add nuance to specific actions (for example, a book might add rules on owning and managing a castle in a fantasy world, or it might add rules on hacking in a sci fi game; these are things you can do without rules in the game, but if you want added stakes, then these books are ones you would want to obtain).\r\n</p></li>\r\n<li><p>\r\nAdventures (formerly called \"modules\") provide game plots and locations, in the event that you have no interest in designing your own.\r\n</p></li>\r\n<li><p>\r\nSource books or \"settings\" provide additional information on the setting of a game, sometimes even providing an alternate game universe with additional rules.\r\n</p></li>\r\n<li><p>\r\nExtra media, like novels, comics, movies, and video games, provide more information (sometimes in canon, sometimes not) about the game universe in which you are playing. Rarely do these have impact on the rules of the game, but they may provide a common language and shared experience for the players.\r\n</p></li>\r\n</ol>\r\n\r\n<p>\r\nThe only essential purchase is the rulebook. Everything else can be generated by gamers. Purchasing additional material is optional, and can either be seen as a great way to support a company providing your entertainment, or as an insidious plot by greedy corporations to rope you into a perpetual cycle of capitalism.  However, RPG is a pretty healthy (and often open) system, so free and open content abounds.\r\n</p>\r\n\r\n\r\n',78,95,0,'CC-BY-SA','book,rpg,game',0,0,1),
(2782,'2019-04-02','Never stop gaming',1277,'Ways to feed the gaming impulse, even when you can\'t game','<p>\r\nShownotes are on <a href=\"https://mixedsignals.ml/games/blog/blog/blog_lifestyle-gamer\" target=\"_blank\">mixedsignals.ml</a>\r\n</p>',78,95,0,'CC-BY-SA','rpg,dm,gm,game master,dungeon master,dnd',0,0,1),
(2795,'2019-04-19','Dead Earth',2210,'A review of a 20-year old, GNU Free Documentation Licensed, RPG about post-apocalyptic turmoil','<p>\r\nFull shownotes are on <a href=\"https://mixedsignals.ml/games/blog/blog/blog_dead-earth\" target=\"_blank\">mixedsignals.ml</a>\r\n</p>\r\n\r\n<p>\r\nYou can download Klaatu\'s update revision of the game materials here: <a href=\"https://mixedsignals.ml/download/deadearth-bundle-gfdl.7z\">https://mixedsignals.ml/download/deadearth-bundle-gfdl.7z</a>\r\n</p>',78,95,0,'CC-BY-SA','RPG,Tabletop Game,Dead Earth',0,0,1),
(2768,'2019-03-13','Writing Web Game in Haskell - Planetary statuses',1122,'Tuula describes system for recording planetary statuses in their game','<h2 id=\"intro\">Intro</h2>\r\n<p>In episode hpr2748 Writing Web Game in Haskell - Special events, I talked about how to add special events in the game. One drawback with the system presented there was that the kragii worms might attack planet that already had kragii worms present. This time we’ll look into how to prevent this. As a nice bonus, we also come up with system that can be used to record when a planet has particularly good harvest season.</p>\r\n<h2 id=\"data-types-and-database\">Data types and Database</h2>\r\n<p>We need a way to represent different kinds of statuses that a planet might have. These will include things like on going kragii attack or a particularly good harvest season. And since these are will be stored in database, we are also going to use derivePersistField to generate code needed for that.</p>\r\n<pre><code>data PlanetaryStatus =\r\n    GoodHarvest\r\n    | PoorHarvest\r\n    | GoodMechanicals\r\n    | PoorMechanicals\r\n    | GoodChemicals\r\n    | PoorChemicals\r\n    | KragiiAttack\r\n\r\nderivePersistField &quot;PlanetaryStatus&quot;</code></pre>\r\n<p>We could have recorded statuses as strings, but declaring a separate data type means that compiler can catch typos for us. It also makes code easier to read as <code>PlanetaryStatus</code> is much more informative than <code>String</code> or <code>Text</code>.</p>\r\n<p>For database, we use following definition shown below in models file. It creates database table <code>planet_status</code> and respective Haskell data type <code>PlanetStatus</code>. There will be one row in database for each status that a planet has. I could have stored all statuses in a list and store that in database, effectively having one row for any planet. Now there’s one row for any planet + status combination. Choice wasn’t really based on any deep analysis, but merely a gut feeling that this feels like a good idea.</p>\r\n<pre><code>PlanetStatus json\r\n    planetId PlanetId\r\n    status PlanetaryStatus\r\n    expiration Int Maybe\r\n    deriving Show Read Eq</code></pre>\r\n<p><code>expiration</code> column doesn’t have <code>NOT NULL</code> constraint like all other columns in the table. This is reflected in <code>PlanetStatus</code> record where data type of <code>planetStatusExpiration</code> is <code>Maybe Int</code> instead of <code>Int</code>. So some statuses will have expiration time, while others might not. I originally chose to represent time as <code>Int</code> instead of own data type, but I have been recently wondering if that was really a good decision.</p>\r\n<h2 id=\"kragii-attack-redux\">Kragii attack, redux</h2>\r\n<p>Code that does actual database query looks pretty scary on a first glance and it’s rather long. First part of the code is there to query database and join several tables into the query. Second part of the code deals with counting and grouping data and eventually returning <code>[Entity Planet]</code> data that contains all planets that match the criteria.</p>\r\n<pre><code>-- | Load planets that are kragii attack candidates\r\nkragiiTargetPlanets :: (MonadIO m, BackendCompatible SqlBackend backend\r\n                           , PersistQueryRead backend, PersistUniqueRead backend) =&gt;\r\n                           Int -&gt; Int -&gt; Key Faction -&gt; ReaderT backend m [Entity Planet]\r\nkragiiTargetPlanets pop farms fId = do\r\n    planets &lt;- E.select $\r\n        E.from $ (planet `E.LeftOuterJoin` population `E.LeftOuterJoin` building `E.LeftOuterJoin` status) -&gt; do\r\n            E.on (status E.?. PlanetStatusPlanetId E.==. E.just (planet E.^. PlanetId)\r\n                  E.&amp;&amp;. status E.?. PlanetStatusStatus E.==. E.val (Just KragiiAttack))\r\n            E.on (building E.?. BuildingPlanetId E.==. E.just (planet E.^. PlanetId))\r\n            E.on (population E.?. PlanetPopulationPlanetId E.==. E.just (planet E.^. PlanetId))\r\n            E.where_ (planet E.^. PlanetOwnerId E.==. E.val (Just fId)\r\n                      E.&amp;&amp;. building E.?. BuildingType E.==. E.val (Just Farm)\r\n                      E.&amp;&amp;. E.isNothing (status E.?. PlanetStatusStatus))\r\n            E.orderBy [ E.asc (planet E.^. PlanetId) ]\r\n            return (planet, population, building)\r\n    let grouped = groupBy ((a, _, _) (b, _, _) -&gt; entityKey a == entityKey b) planets\r\n    let counted = catMaybes $ fmap farmAndPopCount grouped\r\n    let filtered = filter ((_, p, f) -&gt;\r\n                                p &gt;= pop\r\n                                || f &gt;= farms) counted\r\n    let mapped = fmap ((ent, _, _) -&gt; ent) filtered\r\n    return mapped</code></pre>\r\n<p>In any case, when we’re querying for possible kragii attack candidates, the query selects all planets that are owned by a given faction and have population of at least 10 (left outer join to <code>planet_population</code> table), have at least 5 farming complex (left outer join to <code>building</code> table) and don’t have on going kragii attack (left outer join to <code>planet_status</code> table). This is encapsulated in <code>kragiiTargetPlanets 10 5</code> function in the <code>kragiiAttack</code> function shown below.</p>\r\n<p>Rest of the code deals with selecting a random planet from candidates, inserting a new <code>planet_status</code> row to record that kragii are attacking the planet and creating special event so player is informed about the situation and can react accordingly.</p>\r\n<pre><code>kragiiAttack date faction = do\r\n    planets &lt;- kragiiTargetPlanets 10 5 $ entityKey faction\r\n    if length planets == 0\r\n        then return Nothing\r\n        else do\r\n            n &lt;- liftIO $ randomRIO (0, length planets - 1)\r\n            let planet = maybeGet n planets\r\n            let statusRec = PlanetStatus &lt;$&gt; fmap entityKey planet\r\n                                         &lt;*&gt; Just KragiiAttack\r\n                                         &lt;*&gt; Just Nothing\r\n            _ &lt;- mapM insert statusRec\r\n            starSystem &lt;- mapM (getEntity . planetStarSystemId . entityVal) planet\r\n            let event = join $ kragiiWormsEvent &lt;$&gt; planet &lt;*&gt; join starSystem &lt;*&gt; Just date\r\n            mapM insert event</code></pre>\r\n<p>Second piece to the puzzle is status removal. In can happen manually or automatically when the prerecorded date has passed. Former method is useful for special events and latter for kind of seasonal things (good harvest for example).</p>\r\n<p>For example, in case of removing kragii attack status, code below serves as an example. The interesting part is <code>deleteWhere</code> that does actual database activity and removes all <code>KragiiAttack</code> statuses from given planet.</p>\r\n<pre><code>removeNews event odds = MaybeT $ do\r\n    res &lt;- liftIO $ roll odds\r\n    case res of\r\n        Success -&gt; do\r\n            _ &lt;- lift $ deleteWhere [ PlanetStatusPlanetId ==. kragiiWormsPlanetId event\r\n                                    , PlanetStatusStatus ==. KragiiAttack\r\n                                    ]\r\n            _ &lt;- tell [ WormsRemoved ]\r\n            return $ Just RemoveOriginalEvent\r\n        Failure -&gt; do\r\n            _ &lt;- tell [ WormsStillPresent ]\r\n    return $ Just KeepOriginalEvent</code></pre>\r\n<p>Removal of expired statuses is done based on the date, by using <code>&lt;=.</code> operator to compare <code>expiration</code> column to given date.</p>\r\n<pre><code>_ &lt;- deleteWhere [ PlanetStatusExpiration &lt;=. Just date]</code></pre>\r\n<h2 id=\"other-uses-and-further-plans\">Other uses and further plans</h2>\r\n<p>Like mentioned before, planet statuses can be used for variety of things. One such application is recording particularly good (or poor) harvest season. When such thing occurs, new <code>planet_status</code> record is inserted into database with <code>expiration</code> to set some suitable point in future. System will then automatically remove the status after that date is reached.</p>\r\n<p>In the meantime, every time food production is calculated, we have to check for possible statuses that might affect it and take them into account (as form of small bonus or malus).</p>\r\n<p>While this system is for planet statuses only, similar systems can be build for other uses (like statuses that affect a single ship or whole star system).</p>\r\n<p>Easiest way to catch me nowadays is either via email or on fediverse where I’m Tuula@mastodon.social</p>\r\n',364,107,0,'CC-BY-SA','haskell',0,0,1),
(2764,'2019-03-07','Personal password algorithms',2444,'Is it possible to generate a unique password for every site? Klaatu tries.','<p>\r\nHere is a bash script to generate an org-mode word list matrix.\r\nIt requires at least one file ending in <code>.list</code> to be used as a source of words or strings.\r\n</p>\r\n\r\n<pre><code>\r\n#!/bin/bash\r\n\r\nif [ -z $1 ]; then\r\n    DEST=matrix.org\r\nelse\r\n    DEST=$1\r\nfi\r\n\r\ncat &gt;&gt; \"${DEST}\" &lt;&lt;EOF\r\n| | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | ? |\r\n|-+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\r\nEOF\r\n\r\nVERT=(a b c d e f g h i j k l m n o p q r s t u v w x y z ?)\r\n\r\ncat *list &gt; tmp || exit\r\n\r\nBIG=`wc -l tmp | cut -f1 -d\' \'`\r\n\r\nc=\"0\"\r\n\r\nwhile [ \"$c\" -lt \"27\" ]; do\r\n    # horizontal row across\r\n    n=\"0\"\r\n    v=`echo ${VERT[$c]}`\r\n    printf \"| $v |\" &gt;&gt; \"${DEST}\"\r\n    while [ \"$n\" -lt \"27\" ]; do\r\n	i=`echo $((1 + RANDOM % $BIG))`\r\n	w=`awk \"FNR==$i\" tmp`\r\n	#reduce chance of empty cell\r\n	if [[ -z $w ]]; then\r\n	    i=`echo $((1 + RANDOM % $BIG))`\r\n	    w=`awk \"FNR==$i\" tmp`\r\n	    echo \"blank cell found\"\r\n	fi\r\n	printf \"$w | \" &gt;&gt; \"${DEST}\"\r\n	n=$[$n+1]\r\n    done\r\n    echo \" \" &gt;&gt; \"${DEST}\"\r\n    c=$[$c+1]\r\ndone\r\n\r\n/usr/bin/rm tmp\r\n</code></pre>\r\n\r\n<p>\r\nWhen you open the resulting file (matrix.org by default) in emacs, use the fill-paragraph (m-x fill-paragraph) function to align the cells into a pretty table.\r\n</p>\r\n\r\n<p>\r\nInvent your own key, and generate some test passwords.\r\nDo this 6 or 8 times, and then try to reverse the key using the passwords and the table.\r\nIf the logic to reverse the key is too simple, then try using values relying on the metadata, rather than data, of the table (for instance, the number of letters in the first word in the table starting with the same letter as the site name, or whatever).\r\n</p>\r\n\r\n<p>\r\nDo you have analogue methods of generating passwords?\r\nPost ideas to either the comments or, better yet, as an HPR episode!\r\n</p>\r\n\r\n<p>\r\n    Here is a word list for testing:<br/>\r\n    <a href=\"https://hackerpublicradio.org/eps/hpr2764_wordlist.html\">https://hackerpublicradio.org/eps/hpr2764_wordlist.html</a>\r\n</p>\r\n',78,99,0,'CC-BY-SA','password,security,algorithm,puzzle,cipher',0,0,1),
(2766,'2019-03-11','Disk enumeration on Linux',1443,'Klaatu reviews the various commands used to enumerate drives on Linux','<p>\r\nThe old way:\r\n</p>\r\n\r\n<pre><code>\r\n$ ls /dev/sd*\r\n</code></pre>\r\n\r\n<p>\r\nAnother old way:\r\n</p>\r\n\r\n<pre><code>\r\n$ fdisk --list\r\n</code></pre>\r\n\r\n<p>\r\nAn old way to see what you just plugged in:\r\n</p>\r\n\r\n<pre><code>\r\n$ sudo dmesg | tail\r\n</code></pre>\r\n\r\n<p>\r\nSome new tricks:\r\n</p>\r\n<pre><code>\r\n$ lsblk\r\nNAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT\r\nsda      8:0    0   2.7T  0 disk \r\n├─sda1   8:1    0  23.3G  0 part \r\n└─sda2   8:2    0   2.7T  0 part \r\nsdb      8:16   0   3.9G  0 disk \r\nsdc      8:32   0 111.8G  0 disk \r\n├─sdc1   8:33   0   100M  0 part /boot/efi\r\n└─sdc2   8:34   0 111.7G  0 part /\r\nsdd      8:48   0   1.8T  0 disk \r\n├─sdd1   8:49   0   120G  0 part /var\r\n├─sdd2   8:50   0   120G  0 part /tmp\r\n├─sdd3   8:51   0    60G  0 part /opt\r\n└─sdd4   8:52   0   1.5T  0 part /home\r\nsde      8:64   0 298.1G  0 disk \r\n├─sde1   8:65   0   500M  0 part \r\n├─sde2   8:66   0 296.8G  0 part \r\n└─sde3   8:67   0   826M  0 part \r\nsdf      8:80   0 931.5G  0 disk \r\n└─sdf1   8:81   0 931.5G  0 part \r\nsdg      8:96   1   7.5G  0 disk \r\n└─sdg1   8:97   1   7.5G  0 part \r\n</code></pre>\r\n\r\n<p>\r\nUser-friendly udisks:\r\n</p>\r\n\r\n<pre><code>\r\n$ udisks --monitor /dev\r\nCtrl-c\r\n$ udisk --enumerate | sort\r\n/org/freedesktop/UDisks/devices/sda\r\n/org/freedesktop/UDisks/devices/sda1\r\n/org/freedesktop/UDisks/devices/sda2\r\n/org/freedesktop/UDisks/devices/sdb\r\n/org/freedesktop/UDisks/devices/sdc\r\n/org/freedesktop/UDisks/devices/sdc1\r\n[...]\r\n$ udisks --mount /dev/sdc1\r\nMounted /dev/sdc1 on /media/mythumbdrive\r\n$ udisks --unmount /dev/sdc1\r\n</code></pre>\r\n',78,0,0,'CC-BY-SA','fdisk,dmesg,lsblk,udisks',0,0,1),
(2767,'2019-03-12','Djvu and other paperless document formats',1935,'A tutorial on how to read and generate djvu files','<p>\r\nDjVu is a digital document format with advanced compression technology. \r\nDjVu allows for the distribution of very high resolution images of scanned documents, digital documents, and photographs. \r\nDjVu viewers are available for the <a href=\"https://github.com/RussCoder/djvujs\" target=\"_blank\">web browser</a> (search for djvujs in Firefox for an extension), the desktop ( <a href=\"https://wiki.gnome.org/Apps/Evince\" target=\"_blank\">Evince</a>,  <a href=\"https://okular.kde.org/\" target=\"_blank\">Okular</a> an BSD/Linux, and <a href=\"https://djvu.sourceforge.net/djview4.html\" target=\"_blank\">djview</a> on BSD/Linux/Windows/Mac), and <a href=\"https://f-droid.org/en/packages/org.sufficientlysecure.viewer/\" target=\"_blank\">mobile</a> devices.\r\n</p>\r\n\r\n<p>\r\nThe toolchain for encoding and decoding DjVu is \r\n<a href=\"https://djvu.sourceforge.net/\" target=\"_blank\">djvulibre</a>\r\n</p>\r\n<p>\r\n<a href=\"https://djvu.js.org/\" target=\"_blank\">djvu.js</a> is a Javascript library useful for online viewing.\r\n</p>\r\n\r\n<p>\r\n<a href=\"https://djvu.org/\" target=\"_blank\">djvu.org</a> contains sample documents and specification documents.</p>\r\n\r\n<h2>Creating a djvu file</h2>\r\n\r\n<p>\r\nThe tool you use to convert something to the .djvu format depends on your requirements. If you\'re converting a basic, black-and-white document, then <code>cjb2</code> (part of the djvulibre distribution) works:\r\n</p>\r\n\r\n<pre><code>\r\n$ cjb2 -dpi 300 foo.tiff\r\n$ ls\r\nfoo.tiff\r\nfoo.djvu\r\n</code></pre>\r\n\r\n<p>\r\nIf you want to convert something more complex, then use <code>c44</code> (also a part of the djvulibre distribution):\r\n</p>\r\n\r\n<pre><code>\r\n$ c44 -dpi 300 bar.jpg bar.djvu\r\n$ ls\r\nbar.jpg\r\nbar.djvu\r\n</code></pre>\r\n\r\n<p>\r\nTo put both of these files in a single DjVu container:\r\n</p>\r\n\r\n<pre><code>\r\n$ djvm -c baz.djvu foo.djvu bar.djvu\r\n$ ls\r\nbar.djvu\r\nbaz.djvu\r\nfoo.djvu\r\n</code></pre>\r\n\r\n<p>\r\nYou can add bookmarks, too.\r\nOpen a text file called <code>book.marks</code> (or any name you prefer) and enter:\r\n<p/>\r\n\r\n<pre><code>\r\n(bookmarks\r\n(\"Foo\" \"#1\")\r\n(\"Bar\" \"#2\")\r\n)\r\n</code></pre>\r\n\r\n<p>\r\nAnd then apply it to your DjVu file:\r\n</p>\r\n\r\n<pre><code>\r\n$ djvused -e \'set-outline book.marks\' -s baz.djvu\r\n</code></pre>\r\n\r\n<p>\r\nThere\'s more you can do with DjVu, but this has been an overview of how I use it.\r\n</p>\r\n',78,0,0,'CC-BY-SA','pdf, ebook, bloat, djvu',0,0,1),
(2773,'2019-03-20','Lead/Acid Battery Maintenance and Calcium Charge Voltage',1869,'Discussion on installing new Calcium battery into older vehicle and resulting maintenance issues.','<p>Although Lead/Acid batteries are old tech, the use of Calcium as an alloy metal has been a more modern development. Unfortunately many people do not realize this causes an incompatibility with older vehicles due to charging voltage. This episode discusses the use of smart chargers for long term battery maintenance.</p>',373,0,0,'CC-BY-SA','automotive, battery, maintenance, charger',0,0,1),
(2769,'2019-03-14','Quick Review of the AstroAI WH5000A Multimeter',1455,'NYbill reviews, yet another, inexpensive multimeter.','<p>NYbill does <b>yet another</b> inexpensive multimeter review. This time the AstroAI WH5000A. (Its time for a multimeter intervention!)</p>\r\n<p>The meter:</p>\r\n<ul>\r\n<li><a href=\"https://www.astroai.com/portfolio-items/astroai-digital-multimeter-trms-6000-counts-multimeters/\" class=\"uri\">https://www.astroai.com/portfolio-items/astroai-digital-multimeter-trms-6000-counts-multimeters/</a></li>\r\n</ul>\r\n<p>Pics for the episode:</p>\r\n<ul>\r\n<li><a href=\"https://media.gunmonkeynet.net/u/nybill/collection/astroai-wh5000a-dmm/\" class=\"uri\">https://media.gunmonkeynet.net/u/nybill/collection/astroai-wh5000a-dmm/</a></li>\r\n</ul>',235,0,0,'CC-BY-SA','multimeter, electronics, test equipment, hardware review',0,0,1),
(2771,'2019-03-18','Embedding hidden text in Djvu files',2476,'Part 2 of Klaatu\'s Djvu mini series','<p>\r\nTo embed text into a Djvu file, you must create a <code>djvused</code> script detailing the page and bitmap location of one of: character, word, line, paragraph, or region.\r\n</p>\r\n\r\n<p>\r\nFor good measure, you should first list the contents of your Djvu bundle:\r\n</p>\r\n\r\n<pre><code>$ djvused -e \'select; ls\' test.djvu\r\n   1 P   177062  p0001.djvu\r\n   2 P   199144  p0002.djvu\r\n   3 P    12323  p0003.djvu\r\n   4 P    57059  p0004.djvu\r\n   5 P    96725  p0005.djvu\r\n   6 P    53868  p0006.djvu\r\n</code></pre>\r\n\r\n<p>\r\nThen define the location of text in a file called, for instance, <code>content.dsed</code>. Assume that my page is 1000 px by 1000 px&#58;\r\n</p>\r\n\r\n<pre><code>select; remove-ant; remove-txt\r\n\r\nselect \"p0004.djvu\" # page 4\r\nset-txt\r\n(page 0 0 1000 1000\r\n (word 100 600 450 800 \"Hello\" )\r\n (word 100 600 450 800 \"world\" ))\r\n\r\n.\r\n\r\nselect \"p0005.djvu\"\r\nset-txt\r\n(page 0 0 1000 1000\r\n (line 100 400 900 600 \"Hacker Puppy Radio\"))\r\n</code></pre>\r\n\r\n<p>\r\nApply this script to your Djvu file with <code>dvjused</code>&#58;\r\n</p>\r\n\r\n<pre><code>djvused -f ./content.dsed -s test.djvu\r\n</code></pre>\r\n\r\n<h2>Converting from PDF to Djvu</h2>\r\n\r\n<p>\r\nYou can convert PDF files to Djvu with the <code>djvudigital</code> command. Due to license incompatibility, it does require you to compile a Ghostscript plugin, but it\'s an easy build. Get the <a href=\"https://sourceforge.net/projects/djvu/files/GSDjVu/1.10\" target=\"_blank\">gsdjvu</a> code, and then follow its README instructions.\r\n</p>\r\n\r\n<p>\r\nOnce you\'ve built the Ghostscript driver, you can convert PDF to Djvu:\r\n</p>\r\n\r\n<pre><code>djvudigital --words foo.pdf foo.djvu\r\n</code></pre>\r\n',78,0,0,'CC-BY-SA','pdf, ebook, bloat, djvu',0,0,1),
(2772,'2019-03-19','My applications and software part 3',585,'A short show about the software I use in Linux Mint','<p>Hallo HPR listeners – in my recent episodes hpr2738 and hpr2746 I talked about some of the applications and software I regularly use as part of my day to day use of Linux Mint. This follow up show will continue with a few more of the same.</p>\r\n<ul>\r\n<li><p>CUPS – Common Unix Printing Software; printing in Linux with this utility is fairly well supported, if you don’t have a very recent printer it’s a good chance that CUPS will be able to find a driver for your printer if a Linux one has not been supplied when you bought it or through the manufacturers support site. In the menu just search for print and it will bring up the application for adding a new printer.</p></li>\r\n<li><p>Gparted – fully featured disc management tool for formatting and partitioning discs</p></li>\r\n<li><p>Document viewer – generic pdf viewer</p></li>\r\n<li><p>Software manager</p>\r\n<ul>\r\n<li>Synaptic package manager</li>\r\n</ul></li>\r\n<li><p>Terminal – apt command for updating the system and installing new software</p></li>\r\n<li><p>get_iplayer</p></li>\r\n</ul>\r\n',338,0,0,'CC-BY-SA','Software, applications, utilities',0,0,1),
(2774,'2019-03-21','CJDNS and Yggdrasil',629,'A summary of the things I like about CJDNS and Yggdrasil, and the places I think they could improve.','<p>This is my first time doing this sort of thing, so I’m sorry if it’s not very good.</p>\r\n<ul>\r\n<li><a href=\"https://github.com/cjdelisle/cjdns/\">https://github.com/cjdelisle/cjdns/</a></li>\r\n<li><a href=\"https://yggdrasil-network.github.io/\">https://yggdrasil-network.github.io/</a></li>\r\n</ul>',374,0,0,'CC-BY-SA','CJDNS,Yggdrasil',0,0,1),
(2776,'2019-03-25','Sub-Plots In Storytelling',1093,'Lostnbronx looks at the importance of tightly-structured subplots in storytelling.','<p>What makes for strong subplots? Why can some subplots be chopped out of a tale without harming it? Why can some be chopped out, and it actually makes the tale stronger? Is this modular approach the best way to bring in subplots, or is there another method that might be better?</p>\r\n<p>Story construction is a complicated topic; Lostnbronx tries (and largely fails) to make sense of this small part of it.</p>\r\n',107,105,0,'CC-BY-SA','stories, storytelling, sub-plots, lostnbronx',0,0,1),
(2777,'2019-03-26','The quest for the perfect laptop.',1867,'Knightwise is out looking for a new laptop and describes what he is looking for and why.','<p>Looking for a new laptop.</p>\r\n<p>Candidates</p>\r\n<ul>\r\n<li>HP Envy x360</li>\r\n<li>Lenovo X280</li>\r\n<li>Lenovo X380</li>\r\n<li>Lenovo X380 Yoga</li>\r\n<li>Lenovo X1</li>\r\n<li>Lenovo X1 Yoga</li>\r\n</ul>\r\n',111,0,0,'CC-BY-SA','computer, hardware, geek, buy',0,0,1),
(2786,'2019-04-08','My YouTube Channels',423,'A short show about some of my YouTube channels inspired by Ahuka','<p>Hallo HPR listeners this is Tony Hughes again coming from Blackpool in the UK.</p>\r\n<p>Recently Ahuka started a series on the YouTube channels that he subscribes to and this seems like a good topic to share some of my favourite YouTube channels. This time I’ll share some of the tech and Linux based channels I watch.</p>\r\n<ul>\r\n<li><p>bigclive.com – Clive strips down and tests equipment particularly cheap Chinese electronics - <a href=\"https://www.youtube.com/user/bigclivedotcom/videos\" class=\"uri\">https://www.youtube.com/user/bigclivedotcom/videos</a></p></li>\r\n<li><p>Category5 Technology TV – A general technology based show with a large focus on Linux and open source software. <a href=\"https://www.youtube.com/user/category5tv\" class=\"uri\">https://www.youtube.com/user/category5tv</a></p></li>\r\n<li><p>Explaining Computers – Exactly what it says on the tin, they review new computer hardware and computer related tech, including single board Computers such as the Raspberry Pi and Pine 64. <a href=\"https://www.youtube.com/user/explainingcomputers\" class=\"uri\">https://www.youtube.com/user/explainingcomputers</a></p></li>\r\n<li><p>DASGeek – Ryan is a fairly new person to Linux and is part of the Destination Linux podcast crew - <a href=\"https://destinationlinux.org/\" class=\"uri\">https://destinationlinux.org/</a> Ryan is an avid gamer and as well as reviewing Linux he will often look at the latest games and how well they will work on a Linux PC. <a href=\"https://www.youtube.com/channel/UCIme1suHyN7cAGrTy8RBdhQ\" class=\"uri\">https://www.youtube.com/channel/UCIme1suHyN7cAGrTy8RBdhQ</a></p></li>\r\n<li><p>Big Daddy Linux – A new video LUG which have a new episode every week at 8pm EST or you can watch a recording of the show later. <a href=\"https://www.youtube.com/channel/UCtZRKfyvx7GUEi-Lr7f4Nxg/videos\" class=\"uri\">https://www.youtube.com/channel/UCtZRKfyvx7GUEi-Lr7f4Nxg/videos</a></p></li>\r\n<li><p>Raspberry Pi – Videos from the Foundation and community contributors. <a href=\"https://www.youtube.com/channel/UCFIjVWFZ__KhtTXHDJ7vgng/videos\" class=\"uri\">https://www.youtube.com/channel/UCFIjVWFZ__KhtTXHDJ7vgng/videos</a></p></li>\r\n<li><p>Free Audacity Tutorials – Very handy for those of us that regularly record and edit audio with Audacity, for learning more about how to do various things with this software. <a href=\"https://www.youtube.com/user/FreeAudacityTutorial/videos\" class=\"uri\">https://www.youtube.com/user/FreeAudacityTutorial/videos</a></p></li>\r\n</ul>\r\n<p>And finally for this episode</p>\r\n<ul>\r\n<li>Linus Tech Tips – Another Computer review show all about tips and tricks relating to all stuff geeky. Be aware that this show is heavily sponsored although Linus does seem to be very fair with both praise and criticism for what he is reviewing. <a href=\"https://www.youtube.com/user/LinusTechTips/videos\" class=\"uri\">https://www.youtube.com/user/LinusTechTips/videos</a></li>\r\n</ul>\r\n',338,106,0,'CC-BY-SA','Linux, Computers, YouTube, Gaming, Electronics, Audacity',0,0,1),
(2778,'2019-03-27','Functor and applicative in Haskell',1841,'Brief introduction on functor and applicative patterns in Haskell and where they can be used','<p>Two common patterns that I seem to run all the time while working on my 4x space game are functor and applicative. This episode explains them briefly.</p>\r\n<h2 id=\"functor\">Functor</h2>\r\n<p>Functor is a way to apply function over a structure we don’t want to alter. Type of the structure stays same, but values inside of it can change. One of the most common one is list, but there are many others.</p>\r\n<p>Functor type class is defined below. There’s one function <code>fmap</code> that takes two parameters: a function from <code>a</code> to <code>b</code> and structure <code>f a</code>. Result will be structure <code>f b</code>.</p>\r\n<pre><code>class Functor f where\r\n    fmap :: (a -&gt; b) -&gt; f a -&gt; f b</code></pre>\r\n<p>This is fairly abstract, so couple example might help. First we define a little helper function that raises it’s argument to 2nd power (in the episode I talk about doubling the value, my mistake there).</p>\r\n<pre><code>-- | this really raises x to 2nd power and doesn&#39;t double it\r\ndouble x = x * x</code></pre>\r\n<p>Given a list of <code>Int</code> we can raise them to power of two by using <code>fmap</code>:</p>\r\n<pre><code>&gt; fmap double [1, 2, 3, 4, 5]\r\n[1, 4, 9, 16, 25]</code></pre>\r\n<p>Since function being applied to structure is type of <code>(a -&gt; b)</code>, we can change type of the value inside of the structure. Below is example of turning list of <code>Int</code> to list of <code>Text</code>.</p>\r\n<pre><code>&gt; fmap show [1, 2, 3, 4, 5]\r\n[&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;]</code></pre>\r\n<p>This pattern isn’t limited to list and there are many others. You can even define your own ones, if you’re so inclined. The pattern stays the same. One function, <code>fmap</code>, that takes function of type <code>(a -&gt; b)</code> and structure <code>f a</code> and turns it into structure of <code>f b</code>. Details how this is actually done depend on the specific functor.</p>\r\n<p>Other common functor is <code>Maybe</code> that is often used in cases where data might or might not be present. <code>Maybe a</code> has two possible values <code>Just a</code> indicating that value <code>a</code> is present and <code>Nothing</code> indicating that there is no value present. When <code>fmap</code> is used in this context, <code>Just a</code> will turn to <code>Just b</code> and <code>Nothing</code> will stay as <code>Nothing</code>.</p>\r\n<pre><code>&gt; fmap (x -&gt; x * x) $ Just 2\r\nJust 4\r\n&gt; fmap (x -&gt; x * x) Nothing\r\nNothing</code></pre>\r\n<p><code>Either a b</code> is sometimes used for value that can be correct or an error. It has two value constructors <code>Right b</code> indicates that value is correct, <code>Left a</code> indicates an error case. <code>a</code> and <code>b</code> don’t have to be of same type (and usually aren’t). For example, if we have <code>Either Text Int</code>, then we have value where error case is <code>Text</code> and correct value is <code>Int</code>.</p>\r\n<pre><code>&gt; fmap double $ Right 5\r\nRight 25\r\n&gt; fmap double $ Left &quot;distance calculation failed because of flux-capacitor malfunction&quot;\r\nLeft &quot;distance calculation failed because of flux-capacitor malfunction&quot;</code></pre>\r\n<p>Functors can be placed inside of functors. The only difference is that you have to reach through multiple layers. Simplest way of doing that is to compose multiple <code>fmap</code> functions together like in the example below. Pay attention to in which order nested functors are defined as <code>Maybe [Int]</code> and <code>[Maybe Int]</code> are different things. Former is for case where list of <code>Int</code> might or might not be present. Latter is for case where there’s always list, but single element inside of the list might or might not be present.</p>\r\n<pre><code>&gt; (fmap . fmap) double (Just [1, 2, 3, 4])\r\nJust [1, 4, 9, 16]\r\n&gt; (fmap . fmap) double Nothing :: Maybe Int\r\nNothing\r\n&gt; (fmap . fmap) double [Just 1, Just 2, Nothing, Just 3]\r\n[Just 1, Just 4, Nothing, Just 9]</code></pre>\r\n<p>There’s also infix operator, that does exactly same thing as <code>fmap</code>, called <code>&lt;$&gt;</code>. The choice which one to use is often either personal or depends on the surrounding code (because Haskell doesn’t use parenthesis in function application, so sometimes it’s easier to use <code>fmap</code> and sometimes <code>&lt;$&gt;</code>).</p>\r\n<pre><code>&gt; fmap show [1, 2, 3, 4, 5]\r\n[&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;]\r\n\r\n&gt; show &lt;$&gt; [1, 2, 3, 4, 5]\r\n[&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;]</code></pre>\r\n<p>There are many more functors, one place to check them is: <a href=\"https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Functor.html\" class=\"uri\">https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Functor.html</a></p>\r\n<h2 id=\"applicative\">Applicative</h2>\r\n<p>While functor works fine when function applied has only one parameter, we need applicative in cases of multiparameter functions. Calling <code>fmap (+) [1, 2]</code> will produce list of functions waiting for second parameter. While it would be possible to handle these cases manually, we like to abstract it to more general solution.</p>\r\n<pre><code>class Functor f =&gt; Applicative f where\r\n    pure :: a -&gt; f a\r\n    (&lt;*&gt;) :: f (a -&gt; b) -&gt; f a -&gt; f b</code></pre>\r\n<p>Applicative is similar to functor. The big difference is that function being applied is now embedded inside of same type of structure. While functor has <code>(a -&gt; b)</code>, applicative has <code>f (a -&gt; b)</code>.</p>\r\n<p>Below is an example of using list applicative to calculate all possible ways of summing two lists of <code>Int</code>.</p>\r\n<pre><code>&gt; (+) &lt;$&gt; [1, 2, 3] &lt;*&gt; [4, 5, 6]\r\n[5,6,7,6,7,8,7,8,9]</code></pre>\r\n<p><code>Maybe Int</code> works with the same pattern. First we use <code>&lt;$&gt;</code> to get started, this results <code>Maybe</code> containing a function that is waiting for second parameter. Then we use <code>&lt;*&gt;</code> to apply the second parameter so we get the result.</p>\r\n<pre><code>&gt; (+) &lt;$&gt; Just 2 &lt;*&gt; Just 5\r\nJust 7\r\n&gt; (+) &lt;$&gt; Just 2 &lt;*&gt; Nothing\r\nNothing</code></pre>\r\n<p>As long as there’s only <code>Just a</code> in play, result is <code>Just</code>, but as soon as there’s even single <code>Nothing</code> the end result will be nothing.</p>\r\n<p>If you have questions or comments, I would be delighted to hear about them. You can catch me on fediverse, where I’m <code>Tuula@mastodon.social</code>. Even better, you could record your own HPR episode.</p>\r\n<p>Ad astra!</p>\r\n',364,107,0,'CC-BY-SA','haskell, functor, applicative',0,0,1),
(2779,'2019-03-28','HTTP, IPFS, and torrents',711,'Replacing the web with new, decentralized protocols','<p>Some ramblings about how we might replace HTTP with more robust, decentralized protocols.</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/InterPlanetary_File_System\">https://en.wikipedia.org/wiki/InterPlanetary_File_System</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol\">https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol</a></li>\r\n</ul>',374,0,0,'CC-BY-SA','HTTP, IPFS, torrents',0,0,1),
(2780,'2019-03-29','My SBC Nextcloud Install Pt. 1 - Hardware',1375,'How I built my self-enclosed Nextcloud server using a single board computer and a RAID enclosure','<p>I explain the build process for my home Nextcloud server using a single board computer and a 4 bay RAID enclosure. This is part 1 of a 3 part series.</p>\r\n<p>My parts list for the server build:</p>\r\n<ul>\r\n<li><p>Rockpro64<br />\r\n<a href=\"https://www.pine64.org/?product=rockpro64-4gb-single-board-computer\" class=\"uri\">https://www.pine64.org/?product=rockpro64-4gb-single-board-computer</a></p></li>\r\n<li><p>eMMC module<br />\r\n<a href=\"https://www.pine64.org/?product=16gb-emmc\" class=\"uri\">https://www.pine64.org/?product=16gb-emmc</a></p></li>\r\n<li><p>USB Adapter for eMMC module<br />\r\n<a href=\"https://www.pine64.org/?product=usb-adapter-for-emmc-module\" class=\"uri\">https://www.pine64.org/?product=usb-adapter-for-emmc-module</a></p></li>\r\n<li><p>Power supply<br />\r\n<a href=\"https://www.pine64.org/?product=rockpro64-12v-5a-us-power-supply\" class=\"uri\">https://www.pine64.org/?product=rockpro64-12v-5a-us-power-supply</a></p></li>\r\n<li><p>Heatsink<br />\r\n<a href=\"https://www.pine64.org/?product=rockpro64-20mm-mid-profile-heatsink\" class=\"uri\">https://www.pine64.org/?product=rockpro64-20mm-mid-profile-heatsink</a></p></li>\r\n<li><p>90˚ male to female USB extension<br />\r\n<a href=\"https://www.amazon.com/wawpi-Cable-Extension-Degree-Female/dp/B01EDOGO4E\" class=\"uri\">https://www.amazon.com/wawpi-Cable-Extension-Degree-Female/dp/B01EDOGO4E</a></p></li>\r\n<li><p>4 bay RAID enclosure<br />\r\n<a href=\"https://www.mediasonic.ca/product.php?id=1358153144\" class=\"uri\">https://www.mediasonic.ca/product.php?id=1358153144</a></p></li>\r\n<li><p>HDDs<br />\r\nThe 4TB HDDs were ones I already had but you can use any ones, just make sure they are the same brand/model/size/etc to minimize any complications.</p></li>\r\n</ul>\r\n<p>minnix at uymail dot com for help, questions, or just general chatter</p>\r\n',375,0,0,'CC-BY-SA','nextcloud,single board computer,home server,sbc,arm',0,0,1),
(2783,'2019-04-03','The Windows \"Shutdown.exe\" Command Explained',923,'A rundown of the Windows \"shutdown.exe\" command.','<h3>Shutdown.exe</h3>\r\n<ul>\r\n<li>Introduced in Windows 2000 as a way to shutdown the PC via the command prompt.</li>\r\n<li>Included in all versions since Windows 2000 all the way to Windows 10 and Windows Server 2019.</li>\r\n<li>ReactOS, the open source binary-compatible clone of Windows, also includes the shutdown.exe command and the commands are the same.</li>\r\n<li>Located in %windir%\\System32. The variable %windir% is usually c:\\windows. In ReactOS, the variable is usually c:\\reactos (failed to mention this in the recording).\r\n</li>\r\n</ul>\r\n<p>Links: </p>\r\n<ul>\r\n<li><a href=\"https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Shutdown.exe.html\">https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Shutdown.exe.html</a></li>\r\n<li><a href=\"https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/shutdown\">https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/shutdown</a></li>\r\n<li><a href=\"https://ss64.com/nt/shutdown.html\">https://ss64.com/nt/shutdown.html</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Shutdown_(computing)#Windows_and_ReactOS\">https://en.wikipedia.org/wiki/Shutdown_(computing)#Windows_and_ReactOS</a></li>\r\n</li>\r\n</ul>\r\n',152,0,0,'CC-BY-SA','shutdown, windows, commandprompt, cmd',0,0,1),
(2805,'2019-05-03','My 50th Show',1064,'This is a review of the other 49 shows I\'ve posted in the last 3 years','<p>Hallo this is again Tony Hughes for HPR. This is an auspicious show for me as it’s my 50th show that I have recorded and released on HPR in my own right. However prior to my 1st show in my own right I did guest on 2 shows.</p>\r\n<p>The first of these was:</p>\r\n<ul>\r\n<li>hpr0844 :: The Flying Handbag hosted by HPR Volunteers<br />\r\nReleased: 2011-10-26</li>\r\n</ul>\r\n<p>Which was a show that was recorded at Barcamp Blackpool in 2011, when a group of us got together to record a podcast, the hilarious thing was that the only place we could find to record was a stairwell which happened to be next to the toilets, definitely not family friendly but if you want a laugh have a listen.</p>\r\n<p>The next show I appeared on was an interview I did with Ken Fallon at my first OggCamp in the same year.</p>\r\n<ul>\r\n<li>hpr0863 :: Tony Hughes Free Cycle hosted by Ken Fallon<br />\r\nReleased: 2011-11-22.</li>\r\n</ul>\r\n<p>Ken was as usual trying to recruit new hosts and interviewed me with the hope that I would become one. Well I did but it took another 5 years before I finally recorded my first show in my own right.</p>\r\n<p>First just to say the idea for this show comes from hpr2700 in which Ken created a script to automate the bot voice reading a list of every show that has been released on HPR, so to celebrate my 50th Show I thought I would list my shows but with me running through them and do a brief summary of the show where appropriate.</p>\r\n<ol type=\"1\">\r\n<li><p>hpr2051 :: My Linux Journey<br />\r\nReleased on 2016-06-13<br />\r\nin this episode I talked about my journey in computing and starting to use Linux</p></li>\r\n<li><p>hpr2056 :: Interview with a young hacker<br />\r\nReleased on 2016-06-20<br />\r\nThis was my first of several interviews with <span class=\"citation\" data-cites=\"All_about_Code\">@All_about_Code</span> at my local Raspberry Jam</p></li>\r\n<li><p>hpr2065 :: Whats in My Bag<br />\r\nReleased on 2016-07-01<br />\r\nLooking at this show so tells me I have to redo this show as my bag is very different these days</p></li>\r\n<li><p>hpr2076 :: What Magazines I read Part 1<br />\r\nReleased on 2016-07-18<br />\r\njust what the title said, I talked about the magazines I was reading at that point in time.</p></li>\r\n<li><p>hpr2087 :: Magazines I read Part 2<br />\r\nReleased on 2016-08-02<br />\r\nThis was a follow up of the last show</p></li>\r\n<li><p>hpr2097 :: New Toys<br />\r\nReleased on 2016-08-16<br />\r\nI talked about my hardware journey over the last 30 odd years and talked about the i7 system I had just bought 2nd hand</p></li>\r\n<li><p>hpr2101 :: What’s on my podcatcher<br />\r\nReleased on 2016-08-22<br />\r\nA show about the podcasts I listen to.</p></li>\r\n<li><p>hpr2144 :: An Interview with All About Code at Manchester BarCamp<br />\r\nReleased on 2016-10-20<br />\r\na follow up interview with Josh</p></li>\r\n<li><p>hpr2151 :: BarCamp Manchester part 2<br />\r\nReleased on 2016-10-31<br />\r\nAn interview with Claire, the organiser of BarCamp Manchester.</p></li>\r\n<li><p>hpr2157 :: BarCamp Manchester part 3<br />\r\nReleased on 2016-11-08<br />\r\nThis was an interview with Alan O’Donohoe who had started the Raspberry Jam movement</p></li>\r\n<li><p>hpr2257 :: Watt OS<br />\r\nReleased on 2017-03-28<br />\r\nAcer Aspire One Netbook – Review</p></li>\r\n<li><p>hpr2265 :: WattOS on Lenovo X61s<br />\r\nReleased on 2017<br />\r\nLenovo X61s – Review</p></li>\r\n<li><p>hpr2271 :: Raspberry Pi Zero W<br />\r\nReleased on 2017-04-17<br />\r\nReview Episode on the then New Pi Zero W</p></li>\r\n<li><p>hpr2280 :: Lenovo X61s Part 2<br />\r\nReleased on 2017-04-28<br />\r\nFollow up review after a SSD upgrade and using Linux Lite</p></li>\r\n<li><p>hpr2286 :: Surviving a Stroke<br />\r\nReleased on 2017-05-08<br />\r\nA very personal episode about my surviving a Stroke in February 2017</p></li>\r\n<li><p>hpr2295 :: MX Linux<br />\r\nReleased on 2017-05-19<br />\r\nA review episode using this OS on a Lenovo X230i after a hardware boot issue with Linux Mint and an SSD</p></li>\r\n<li><p>hpr2331 :: Liverpool Makefest 2017 Show 1<br />\r\nReleased on 2017-07-10<br />\r\nThe first of a number of interview shows from the 2017 Liverpool Makefest</p></li>\r\n<li><p>hpr2336 :: Liverpool Makefest 2017 Show 2<br />\r\nReleased on 2017-07-17</p></li>\r\n<li><p>hpr2341 :: Liverpool Makefest 2017 Show 3<br />\r\nReleased on 2017-07-24</p></li>\r\n<li><p>hpr2346 :: Liverpool Makefest 2017 Show 4<br />\r\nReleased on 2017-07-31</p></li>\r\n<li><p>hpr2352 :: Liverpool Makefest 2017 Show 5<br />\r\nReleased on 2017-08-08</p></li>\r\n<li><p>hpr2362 :: Raspbian X86 on Lenovo x61s<br />\r\nReleased on 2017-08-22<br />\r\nReview of Raspbian X86 on a Lenovo X61s</p></li>\r\n<li><p>hpr2366 :: Making Bramble Jelly<br />\r\nReleased on 2017-08-28<br />\r\nJust what it says on the tin I talk about making Bramble jelly,</p></li>\r\n<li><p>hpr2374 :: How to Make Sauerkraut<br />\r\nReleased on 2017-09-07<br />\r\nAnother food show on how to make Sauerkraut</p></li>\r\n<li><p>hpr2380 :: Raspbian X86 on P4 Tower<br />\r\nReleased on 2017-09-15<br />\r\nFollow up this time running Raspbian X86 on an old P4 Tower</p></li>\r\n<li><p>hpr2405 :: Nokia 6 Review<br />\r\nReleased on 2017-10-20<br />\r\nI reviewed my new phone</p></li>\r\n<li><p>hpr2432 :: Living with the Nokia 6 – an update to HPR 2405<br />\r\nReleased on 2017-11-28<br />\r\nFollow up update show having lived with the phone for a couple of months.</p></li>\r\n<li><p>hpr2442 :: The sound of Woodbrooke Quaker Study centre in the Spring<br />\r\nReleased on 2017-12-12<br />\r\nThis was a soundscape recording I made at Woodbrooke Quaker Study Centre in Birmingham UK while I was there in April 2017.</p></li>\r\n<li><p>hpr2579 :: Ubuntu 18.04 Mate<br />\r\nReleased on 2018-06-21<br />\r\nA review of the recently released Ubuntu 18.04 Mate</p></li>\r\n<li><p>hpr2590 :: Blowing a PC Power Supply<br />\r\nReleased on 2018-07-06<br />\r\nA show about how not to blow your PC power supply</p></li>\r\n<li><p>hpr2595 :: New laptop bargain?<br />\r\nReleased on 2018-07-13<br />\r\nA review on my recently purchased secondhand Toshiba Z30 laptop</p></li>\r\n<li><p>hpr2601 :: Liverpool Makerfest 2018<br />\r\nReleased on 2018-07-23<br />\r\nChris Dell</p></li>\r\n<li><p>hpr2606 :: Liverpool Makefest 2018 - interview with Dan Lynch<br />\r\nReleased on 2018-07-30<br />\r\nA podcast Legend</p></li>\r\n<li><p>hpr2612 :: Liverpool Makefest 2018 - interview with Joe aka Concrete Dog<br />\r\nReleased on 2018-08-07<br />\r\nAbout Rocketry</p></li>\r\n<li><p>hpr2616 :: Liverpool Makefest 2018 - interview with Josh - A.K.A - All About Code<br />\r\nReleased on 2018-08-13.<br />\r\nThis is another short interview recorded at Liverpool Makefest, with Josh talking about EduBlocks.</p></li>\r\n<li><p>hpr2621 :: Liverpool Makefest 2018 - Chan’nel Thomas a.k.a little pink maker<br />\r\nReleased on 2018-08-20<br />\r\nI talk to Chan’nel Thomas aka little pink maker.</p></li>\r\n<li><p>hpr2626 :: Liverpool Makefest 2018 - interviews with Helen and Chris<br />\r\nReleased on 2018-08-27<br />\r\nIn this episode I talk to Helen from Manchester Hackspace and Chris from Wirral Code Club</p></li>\r\n<li><p>hpr2632 :: Liverpool Makefest 2018 - interviews with Robert and Carl<br />\r\nReleased on 2018-09-04<br />\r\nIn this episode I talk to Robert from Roberts Workshop and Carl from Edgehill University</p></li>\r\n<li><p>hpr2636 :: Liverpool Makefest 2018 - interviews with Noel from JMU FabLab<br />\r\nReleased on 2018-09-10</p></li>\r\n<li><p>hpr2641 :: Liverpool Makefest 2018 - interview with Rachel from the MicroBit Foundation<br />\r\nReleased on 2018-09-17</p></li>\r\n<li><p>hpr2646 :: Liverpool Makefest 2018 - Interview with Steve and Gerrard from the Liverpool Astronomical society.<br />\r\nReleased on 2018-09-24</p></li>\r\n<li><p>hpr2652 :: Liverpool Makefest 2018 - Interview with Caroline and John<br />\r\nReleased on 2018-10-02 under a CC-BY-SA license.<br />\r\nThis was the final interview from Makefest 2018 in Liverpool. In this interview I interview one of the founder members of Makefest, Caroline Keep, and the Head Teacher of the school where she works, John Carling.</p></li>\r\n<li><p>hpr2663 :: Short review on a 2.5 inch SSD/HDD caddy<br />\r\nReleased on 2018-10-17<br />\r\nQuick hardware review</p></li>\r\n<li><p>hpr2702 :: Audacity set up and response to episode 2658<br />\r\nReleased on 2018-12-11<br />\r\nI post my response to show 2658 by Dave and Al</p></li>\r\n<li><p>hpr2735 :: Soffritto<br />\r\nReleased on 2019-01-25<br />\r\nAnother food show</p></li>\r\n<li><p>hpr2738 :: My Applications<br />\r\nReleased on 2019-01-30<br />\r\nThis and my 47th episode were about the applications I use in Linux</p></li>\r\n<li><p>hpr2746 :: My software part 2<br />\r\nReleased on 2019-02-11</p></li>\r\n<li><p>hpr2772 :: My applications and software part 3<br />\r\nA short show about the software I use in Linux Mint</p></li>\r\n<li><p>hpr2786 :: My YouTube Channels<br />\r\nA short show about some of my YouTube channels inspired by Ahuka</p></li>\r\n</ol>\r\n<p><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" class=\"uri\">https://hackerpublicradio.org/correspondents/0338.html</a></p>\r\n',338,0,0,'CC-BY-SA','HPR, Linacityux, podcasting, Audacity',0,0,1),
(2784,'2019-04-04','The Yamaha Disklavier',1440,'I talk about the Yamaha Disklavier DKC500RW that\'s in my office at work','<p>In this episode I talk about the <a href=\"https://en.wikipedia.org/wiki/Disklavier\" target=\"_blank\">Yamaha Disklavier</a> DKC500RW that\'s in my office at work. This is a very high-tech player piano and one of the coolest pieces of music gear I\'ve ever seen.</p>\r\n\r\n<h3>Photo Album (click image)</h3>\r\n\r\n<p><a data-flickr-embed=\"true\"  href=\"https://www.flickr.com/photos/137675441@N05/albums/72157707383776874\" title=\"Yamaha Disklavier\" target=\"_blank\"><img src=\"https://farm8.staticflickr.com/7862/33424303208_c9f831fce7.jpg\" width=\"500\" height=\"375\" alt=\"Yamaha Disklavier\"></a></p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n<li>Website showing how to determine which model disklavier you have: <a href=\"https://yamahaden.com/news/disklavier-tips/item/276-how-to-determine-your-disklavier-model/276-how-to-determine-your-disklavier-model\" target=\"_blank\">Yamahaden</a></li>\r\n<li><a href=\"https://www.kuhmann.com/Yamaha.htm\" target=\"_blank\">DisklavierTM  World</a>: This is a privately operated, Public Service (non-profit) webpage. 10,781 piano-music files in \'FIL\' (e-SEQ) & MIDI format & Software for the Yamaha Disklavier. PUBLIC-DOMAIN / \'Live\' MIDI-Performances / FREE Sequences</li>\r\n<li>Video: Jonathan Kulp, <em>Three Easy Pieces for Piano Four-Hands</em>: <a href=\"https://www.youtube.com/watch?v=y4loSIApjPA\" target=\"_blank\">Video of premiere performance</a></li>\r\n<li>Video: <a href=\"https://youtu.be/_hNzz_DubCo\" target=\"_blank\">Disklavier in action</a></li>\r\n</ul>',238,0,1,'CC-BY-SA','Music, Piano, Keyboard, Musical Instruments, Player Pianos, Recording Devices',0,0,1),
(2810,'2019-05-10','Wi-Fi on Android',462,'Ken fixes an Android Firewalled Wi-Fi connection that reports no Internet and won’t connect','<h3>Background</h3>\r\n<p>\r\nYou\'re running a firewall on your work and home networks right, so of course you\'re running one on your Smart Phone. Given this device holds more information about you than you probably know yourself, it would be only prudent to make sure that you are protecting what gets in but also what gets out.\r\n</p>\r\n<p>\r\nI run <a href=\"https://f-droid.org/en/packages/dev.ukanth.ufirewall/\">AFWall+</a> which is available from the <a href=\"https://f-droid.org/\">F-Droid</a> app store. It runs fine on <a href=\"https://www.lineageos.org/\">LineageOS</a>.\r\n</p>\r\n<p>\r\nI then set it on the children\'s phone so that no application is allowed to use mobile data, and then only applications that need Internet get Internet Access. This works well as it\'s a normal use case for mobile applications to have intermittent access to the Internet.\r\n</p>\r\n<p>\r\nI see no reason why the Linux Kernel should need unfettered access to the Internet, so it\'s not allowed out. One issue you may come across is that even though you know that there is a Connection your phone doesn\'t, and so it will display the <em>Wi-Fi Connected, no Internet</em> message. \r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2810_1.png\" />\r\n</p>\r\n<p>\r\nI\'m not sure how this check is done but <a href=\"https://android.stackexchange.com/users/53535/abqnm\">abqnm</a> suggests at in the StackExchange question <a href=\"https://android.stackexchange.com/questions/63481/how-does-android-determine-if-it-has-an-internet-connection\">How does Android determine if it has an Internet connection?</a> that it may be related to Google Cloud Messaging.\r\n</p>\r\n\r\n<quote>\r\n... this means that the device is unable to receive a response from GCM (Google Cloud Messaging, the framework that handles push notifications). This traffic is sent through ports 5228, 5229, and 5230. If the AP is blocking or interfering with traffic on those ports, push notifications won\'t work ... \r\n<quote>\r\n<p>\r\nI do indeed see blocked attempts by Google Play Services on my own phone, but not on the other phones that have no google services installed. The only entry I see in the logs is an ICMP attempt to \"Comcast Cable Communications, Inc\". If you know more please record a show for <a href=\"https://hackerpublicradio.org\">Hacker Public Radio</a> about it.\r\n</p>\r\n\r\n<h3>Giving Access</h3>\r\n<p>\r\nNormally you will get a message saying that the Wi-Fi has no Internet access. \r\n</p>\r\n<p>\r\n<img alt=\"Android System. Wi-Fi has no Internet access. Tap for options\" src=\"https://hackerpublicradio.org/eps/hpr2810_2.png\" />\r\n</p>\r\n<p>\r\nIf you tap the message a popup will allow you to stay connected and will let you remember the choice.\r\n</p>\r\n<p>\r\n<img alt=\"OpenWireless.Org. This network has no Internet access. Stay connected? [] Don\'t ask again for this network NO YES\" src=\"https://hackerpublicradio.org/eps/hpr2810_3.png\" />\r\n</p>\r\n<p>\r\nIn some cases the router helpfully resets the connection before you can reply to the message meaning it goes into a loop continually popping up the message but not reacting to it.\r\n</p>\r\n<p>\r\nIn this case we can use <a href=\"https://f-droid.org/en/packages/com.termux/\">Termux</a> a Android Terminal emulator, to drop to a shell and fix the problem.\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2810_4.png\" />\r\n</p>\r\n\r\n<p>\r\nI used <em>su</em> to get root access but you could also change to the user <em>wifi</em>.\r\n</p>\r\n<p>\r\nThe file you need to edit is <strong>/data/misc/wifi/wpa_supplicant.conf</strong>. It\'s probably best to edit this file with the wifi off.\r\n</p>\r\n<pre>\r\nnetwork={\r\n	ssid=\"OpenWireless.Org\"\r\n	key_mgmt=NONE\r\n	priority=15\r\n	id_str=\"{snip}\"\r\n}\r\n</pre>\r\n<p>\r\nScroll down to the network that is giving you trouble and add <strong>disabled=1</strong>\r\n</p>\r\n<pre>\r\nnetwork={\r\n	ssid=\"OpenWireless.Org\"\r\n	key_mgmt=NONE\r\n	priority=15\r\n	disabled=1\r\n	id_str=\"{snip}\"\r\n}\r\n</pre>\r\n<p>\r\nI ended up copying the file to the sdcard, and editing it there. I then copied it back as su and used <strong>chown wifi:wifi /data/misc/wifi/wpa_supplicant.conf</strong> to fix the permissions.\r\n</p>\r\n\r\n<p>\r\nOnce that\'s done you can reboot the phone and connect to the network without a problem. You should also consider putting up an <a href=\"https://openwireless.org/\">Open Wireless</a> access point yourself.\r\n</p>\r\n',30,0,1,'CC-BY-SA','Android, fdroid, lineageos, AFWall+, Wi-Fi, wpa_supplicant.conf, termux',0,0,1),
(2787,'2019-04-09','NodeJS Part 1',613,'I don\'t know Javascript do ?','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://github.com/crazy-max/nodejs-portable\" class=\"uri\">https://github.com/crazy-max/nodejs-portable</a></li>\r\n<li><a href=\"https://github.com/GoogleChrome/puppeteer\" class=\"uri\">https://github.com/GoogleChrome/puppeteer</a></li>\r\n</ul>\r\n',36,0,0,'CC-BY-SA','NodeJS,puppeteer,programming,Javascript',0,0,1),
(2796,'2019-04-22','IRS,Credit Freezes and Junk Mail Ohh My!',746,'IRS Credit Freezes and Junk Mail','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><p><a href=\"https://darknetdiaries.com/episode/26/\" class=\"uri\">https://darknetdiaries.com/episode/26/</a></p></li>\r\n<li><a href=\"https://clark.com/personal-finance-credit/credit-freeze-and-thaw-guide/\" class=\"uri\">https://clark.com/personal-finance-credit/credit-freeze-and-thaw-guide/</a></li>\r\n<li><a href=\"https://clark.com/personal-finance-credit/free-credit-freezes/\" class=\"uri\">https://clark.com/personal-finance-credit/free-credit-freezes/</a></li>\r\n<li><p><a href=\"https://clark.com/consumer-issues-id-theft/opting-out-of-assorted-junk-mailings/\" class=\"uri\">https://clark.com/consumer-issues-id-theft/opting-out-of-assorted-junk-mailings/</a></p></li>\r\n<li><p><a href=\"https://www.youtube.com/watch?v=zWVoyrzqRbU\" class=\"uri\">https://www.youtube.com/watch?v=zWVoyrzqRbU</a> DROP HOE!</p></li>\r\n</ul>\r\n',36,0,0,'CC-BY-SA','IRS,Credit Freeze,Junk Mail,hacking',0,0,1),
(2788,'2019-04-10','Looping in Haskell',2848,'Tuula describes some loop-like constructs in Haskell','<p>Haskell is functional language where data is immutable. This means that regular for-loops don’t really exist. Looping however is very common pattern in programs in general. Here are some patterns how to do that in Haskell.</p>\r\n<h2 id=\"recursion\">Recursion</h2>\r\n<p>Calculating Fibonacci numbers is common example (sort of like hello world in Haskell). There’s many different implementations at https://wiki.haskell.org/The_Fibonacci_sequence if you’re interested on having a look.</p>\r\n<p>Simple recursive definition:</p>\r\n<pre><code>fibs :: Integer -&gt; Integer\r\nfibs 0 = 0\r\nfibs 1 = 1\r\nfibs n = fibs (n-1) + fibs (n-2)</code></pre>\r\n<p>When called with <code>0</code> result is <code>0</code>. When called with <code>1</code> result is <code>1</code>. For all other cases, <code>fibs</code> is called with values <code>n-1</code> and <code>n-1</code> and the results are summed together. This works fine when <code>n</code> is small, but calculation gets slow really quickly with bigger values.</p>\r\n<p>Another way is to define list of all Fibonacci numbers recursively:</p>\r\n<pre><code>allFibs :: [Integer]\r\nallFibs = 0 : 1 : zipWith (+) allFibs (tail allFibs)</code></pre>\r\n<p>Here a list is constructed. First element is <code>0</code>, second element is <code>1</code> and rest of the list is obtained by summing the list with its tail (everything but the first element of the list). Definition is recursive and defines all Fibonacci numbers. However, Haskell doesn’t evaluate whole list, but only as much of it as is required.</p>\r\n<p>Common pattern of processing elements in a list, producing a new list:</p>\r\n<pre><code>addOne :: [Integer] -&gt; [Integer]\r\naddOne [] = []\r\naddOne (x:xs) = x + 1 : addOne xs</code></pre>\r\n<p>Two cases, when called with an empty list <code>[]</code>, result is empty list. For all other cases, list is taken apart <code>(x:xs)</code>, <code>x</code> contains first element of the list and <code>xs</code> is rest of the list. Body of the function creates a new list where head is <code>x + 1</code> and tail is <code>addOne xs</code>. This processes whole list of <code>Integer</code> by adding one to each value. It also reverses the list.</p>\r\n<p>Second common pattern is processing a list and reducing it to a single value:</p>\r\n<pre><code>sumAll :: Integer -&gt; [Integer] -&gt; Integer\r\nsumAll n [] = n\r\nsumAll n (x:xs) = sumAll (n + x) xs</code></pre>\r\n<p>If given list is empty (the terminal case), result is <code>n</code>. Second case again takes list apart <code>(x:xs)</code>, adds <code>x</code> and <code>n</code> together and recursive call <code>sumAll</code> with tail of the list.</p>\r\n<p>This common pattern is discarding some elements of a list:</p>\r\n<pre><code>evenOnly :: [Integer] -&gt; [Integer]\r\nevenOnly [] = []\r\nevenOnly (x:xs) = \r\n    if even x\r\n        then x : evenOnly xs\r\n        else evenOnly xs</code></pre>\r\n<p>Again, result of empty list is just empty list. In all other cases we first check if <code>x</code> is even. If so, new list is constructed where head is <code>x</code> and tail is <code>evenOnly xs</code>. If <code>x</code> isn’t even, it’s discarded and <code>evenOnly</code> is called recursively with tail of the list.</p>\r\n<h2 id=\"more-tools\">More tools</h2>\r\n<p>Writing recursion by hand gets tedious and sometimes confusing (if you listened to the show, you probably noticed how I got confused and had to check that <code>evenOnly</code> actually works as I thought it would). For that reason, there are tools that abstract these common patterns and given them names.</p>\r\n<p>First is <code>map</code>. It applies given function to each element of a list, thus producing a new list:</p>\r\n<pre><code>&gt; map (+1) [1..10]\r\n[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\r\n&gt; map odd [1..10]\r\n[True, False, True, False, True, False, True, False, True, False]</code></pre>\r\n<p>Second is <code>fold</code>. There is good article at https://wiki.haskell.org/Foldr_Foldl_Foldl%27 that talks about differences between different folds.</p>\r\n<p>The basic idea behind each fold is the same, they take a function and initial value and then apply them to first element of list, producing a value. This value is then applied with the function to the second element of the list and so on, until whole list has been reduced to a single value. Calculating a sum of list is so common operation that there’s specific function for that: <code>sum</code>.</p>\r\n<pre><code>&gt; foldr (+) 0 [1..10]\r\n55\r\n&gt; foldl (+) 0 [1..10]\r\n55\r\n&gt; sum [1..10]\r\n55</code></pre>\r\n<p><code>scan</code> is similar to <code>fold</code>, except for returning only the final value, it also returns intermediate ones. Here it’s easier to observe how <code>scanr</code> and <code>scanl</code> differ from each other:</p>\r\n<pre><code>&gt; scanr (+) 0 [1..10]\r\n[55,54,52,49,45,40,34,27,19,10,0]\r\n&gt; scanl (+) 0 [1..10]\r\n[0,1,3,6,10,15,21,28,36,45,55]</code></pre>\r\n<p>Last of the trifecta is <code>filter</code> that is used to select some of the elements in a list based on a supplied function.</p>\r\n<pre><code>&gt; filter odd [1..10]\r\n[1, 3, 5, 7, 9]\r\n&gt; filter even [1..]\r\n[2, 4, 6, 8, 10, 12, 14, 16...]\r\n&gt; take 5 $ filter even [1..] \r\n[2, 4, 6, 8, 10]</code></pre>\r\n<h2 id=\"even-more-tools\">Even more tools</h2>\r\n<p>There are even more tools at our disposal. Prelude is basic library of Haskell and browsing online documentation at https://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html might yield interesting information.</p>\r\n<p>For example, constructing some lists:</p>\r\n<ul>\r\n<li><code>iterate :: (a -&gt; a) -&gt; a -&gt; [a]</code> For list where function is applied repeatedly.</li>\r\n<li><code>repeat :: a -&gt; [a]</code> for a list that contains infinite amount of <code>a</code>.</li>\r\n<li><code>replicate :: Int -&gt; a -&gt; [a]</code> For a list that contains finite amount of <code>a</code>.</li>\r\n<li><code>cycle :: [a] -&gt; [a]</code> For a infinite list that repeats same list over and over again.</li>\r\n</ul>\r\n<h2 id=\"finding-tools\">Finding tools</h2>\r\n<p>It’s all about knowing the right tools and finding them when needed. Luckily, you don’t have to memorize big stack of notes, but can turn to https://hoogle.haskell.org/ which is Haskell API search engine. It can search based on name or type signature. I often use it to find out if somebody has already written a function that I’m thinking of writing myself.</p>\r\n<p>If you want to send questions or comments, I can be reached with email or at fediverse where I’m Tuula@mastodon.social. This episode is direct result of feedback that I got from previous one. If there’s Haskell topic you would love to hear more, drop me line or even better, research it by yourself and make a cool Hacker Public Radio episode.</p>\r\n',364,107,0,'CC-BY-SA','haskell, programming',0,0,1),
(2789,'2019-04-11','Pacing In Storytelling',998,'Lostnbronx takes a stab at explaining why the pace of your story matters.','<p>Some stories, that are otherwise cookie-cutter in form, possessing familiar situations and clichéd characters, seem to nonetheless stand out. Other tales that might have great ideas, intriguing plots, and vivid characters, seem to hit the ground with a thud. The determining value here may lie with the pacing of the story.</p>\r\n<p>How does pacing (that is, timing) affect your story? Why does it matter? Can you make improvements in the pace by moving things around? What’s the best approach for creating it to begin with?</p>\r\n<p>Lostnbronx meanders for a while, often losing his way, and rarely making a coherent point regarding this complicated topic.</p>',107,105,0,'CC-0','stories, storytelling, pacing, lostnbronx',0,0,1),
(2791,'2019-04-15','LUKS like truecrypt',1523,'Klaatu demonstrates how to use LVM and cryptsetup to create and use portable encrypted filesystems','<p>\r\nCreate an empty file of a predetermined size:\r\n</p>\r\n\r\n<pre><code>$ fallocate --length 512M foo.img\r\n</code></pre>\r\n<p>Create a LUKS container on it:</p>\r\n<pre><code>$ cryptsetup --verify-passphrase luksFormat foo.img\r\n</code></pre>\r\n<p>Set it up:</p>\r\n<pre><code>$ sudo cryptsetup luksOpen foo.img foo\r\n$ ls /dev/mapper\r\nfoo\r\n$\r\n</code></pre>\r\n<p>Make a file system on it:</p>\r\n<pre><code>$ sudo mkfs.ext2 /dev/mapper/foo\r\n</code></pre>\r\n<p>If you don\'t need it for anything now, you can close it:\r\n</p>\r\n<pre><code>$ sudo cryptsetup luksClose foo\r\n$ ls /dev/mapper\r\n$\r\n</code></pre>\r\n<p>Mount it as a usable filesystem:</p>\r\n<pre><code>$ sudo mkdir /crypt\r\n$ sudo mount /dev/mapper/foo /crypt\r\n</code></pre>\r\n<p>\r\nDepending on your system configuration, you may need to set up reasonable permissions:\r\n</p>\r\n<pre><code>$ sudo mkdir /crypt/mystuff\r\n$ sudo chown klaatu:users /crypt/mystuff\r\n$ sudo chmod 770 /crypt/mystuff\r\n$ echo \"hello world\" &gt;&gt; /crypt/mystuff/file.txt\r\n</code></pre>\r\n<p>\r\nWhen you\'re finished using your encrypted vault, unmount and close it:\r\n</p>\r\n<pre><code>$ sudo umount /crypt\r\n$ sudo cryptsetup luksClose foo\r\n</code></pre>\r\n\r\n',78,74,0,'CC-BY-SA','encryption',0,0,1),
(2793,'2019-04-17','bash coproc: the future (2009) is here',1276,'clacke discovers bash\'s coproc keyword and explains some toy examples','<p>If you want the full manuscript, that’s at <a href=\"https://gitlab.com/clacke/hpr/blob/master/hpr2793_bash_coproc_manuscript.adoc\">gitlab: hpr2793_bash_coproc_manuscript.adoc</a>. It’s almost a transcript, but I added spontaneous commentary while reading the examples, so that’s not in the manuscript.</p>\r\n<p>Episode errata:</p>\r\n<ul>\r\n<li><p>Command substitution with <code>$()</code> is perfectly valid according to POSIX, and is accepted both by <code>dash</code> and by <code>bash --posix</code>. It’s not to be considered a bashism.</p></li>\r\n<li><p>I fumbled the pronunciation of the <code>printf</code> format string in one place and said &quot;parenthesis&quot; instead of &quot;percentage sign&quot;.</p></li>\r\n<li><p>I tried to say &quot;space&quot; every time there’s a space, but I know I forgot it in a few places. But you probably need to look at the show notes to really make sense of the commands anyway.</p></li>\r\n</ul>\r\n<p>Example #1:</p>\r\n<div class=\"sourceCode\" id=\"cb1\"><pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><a class=\"sourceLine\" id=\"cb1-1\" data-line-number=\"1\">$ <span class=\"bu\">echo</span> <span class=\"va\">$(</span><span class=\"bu\">echo</span> hacker public radio<span class=\"va\">)</span></a>\r\n<a class=\"sourceLine\" id=\"cb1-2\" data-line-number=\"2\"><span class=\"ex\">hacker</span> public radio</a>\r\n<a class=\"sourceLine\" id=\"cb1-3\" data-line-number=\"3\">$ <span class=\"va\">$(</span><span class=\"bu\">echo</span> echo hacker public radio<span class=\"va\">)</span>  # <span class=\"ex\">It</span> can even supply the command itself, not just parameters. Note the word splitting.</a>\r\n<a class=\"sourceLine\" id=\"cb1-4\" data-line-number=\"4\"><span class=\"ex\">hacker</span> public radio</a>\r\n<a class=\"sourceLine\" id=\"cb1-5\" data-line-number=\"5\">$ <span class=\"st\">&quot;</span><span class=\"va\">$(</span><span class=\"bu\">echo</span> echo hacker public radio<span class=\"va\">)</span><span class=\"st\">&quot;</span>  # <span class=\"ex\">Counteract</span> word splitting by putting the command substitution in quotes.</a>\r\n<a class=\"sourceLine\" id=\"cb1-6\" data-line-number=\"6\"><span class=\"ex\">bash</span>: echo hacker public radio: command not found</a>\r\n<a class=\"sourceLine\" id=\"cb1-7\" data-line-number=\"7\">$ <span class=\"kw\">`</span><span class=\"bu\">echo</span> echo hacker public radio<span class=\"kw\">`</span>  # <span class=\"ex\">Old-style</span> command substitution</a>\r\n<a class=\"sourceLine\" id=\"cb1-8\" data-line-number=\"8\"><span class=\"ex\">hacker</span> public radio</a></code></pre></div>\r\n<p>More on command substitution in Dave’s <a href=\"https://hackerpublicradio.org/eps.php?id=1903\">hpr1903: Some further Bash tips</a>.</p>\r\n<p>Example #2:</p>\r\n<div class=\"sourceCode\" id=\"cb2\"><pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><a class=\"sourceLine\" id=\"cb2-1\" data-line-number=\"1\">$ <span class=\"bu\">echo</span> <span class=\"op\">&lt;(</span><span class=\"bu\">echo</span> hacker public radio<span class=\"op\">)</span></a>\r\n<a class=\"sourceLine\" id=\"cb2-2\" data-line-number=\"2\"><span class=\"ex\">/dev/fd/63</span></a>\r\n<a class=\"sourceLine\" id=\"cb2-3\" data-line-number=\"3\">$ <span class=\"fu\">cat</span> <span class=\"op\">&lt;(</span><span class=\"bu\">echo</span> hacker public radio<span class=\"op\">)</span></a>\r\n<a class=\"sourceLine\" id=\"cb2-4\" data-line-number=\"4\"><span class=\"ex\">hacker</span> public radio</a></code></pre></div>\r\n<p>You can also combine process substitution with redirection.</p>\r\n<p>Example #3:</p>\r\n<div class=\"sourceCode\" id=\"cb3\"><pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><a class=\"sourceLine\" id=\"cb3-1\" data-line-number=\"1\">$ <span class=\"bu\">echo</span> hacker public radio <span class=\"op\">&gt;</span> <span class=\"op\">&gt;(</span><span class=\"fu\">sed</span> -e <span class=\"st\">&#39;s/$/!/&#39;</span><span class=\"op\">)</span>  # You need the space between the greater-thans here!</a>\r\n<a class=\"sourceLine\" id=\"cb3-2\" data-line-number=\"2\"><span class=\"ex\">hacker</span> public radio!</a></code></pre></div>\r\n<p>More on process substitution in Dave’s <a href=\"https://hackerpublicradio.org/eps.php?id=2045\">hpr2045: Some other Bash tips</a>.</p>\r\n<p>For a description of a hack for creating bidirectional anonymous pipes in bash, see <a href=\"https://libranet.de/display/0b6b25a8-135c-83e5-1f4b-82a136800329\">my Fediverse post on this</a>, and I owe you a show.</p>\r\n<p>A coprocess in bash is a subshell to which you have access to two file descriptors: Its stdin and its stdout.</p>\r\n<p>The two file descriptors will be put in a bash array. To learn more about arrays, check out Dave’s series within the bash series, a whopping five-part quadrology including <a href=\"https://hackerpublicradio.org/eps.php?id=2709\">hpr2709</a>, <a href=\"https://hackerpublicradio.org/eps.php?id=2719\">hpr2719</a>, <a href=\"https://hackerpublicradio.org/eps.php?id=2729\">hpr2729</a>, <a href=\"https://hackerpublicradio.org/eps.php?id=2739\">hpr2739</a> and <a href=\"https://hackerpublicradio.org/eps.php?id=2756\">hpr2756</a>.</p>\r\n<p>You create a coprocess using the <code>coproc</code> keyword, brand spanking new since bash 4 from 2009. I am filing issues to <a href=\"https://bitbucket.org/birkenfeld/pygments-main/issues\">pygments</a> and <a href=\"https://savannah.gnu.org/bugs/?group=src-highlite\">GNU src-highlite</a> to support it.</p>\r\n<p>There are two ways to call coproc. The first way is to give <code>coproc</code> a <em>simple command</em>.</p>\r\n<p>Example #4:</p>\r\n<div class=\"sourceCode\" id=\"cb4\"><pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><a class=\"sourceLine\" id=\"cb4-1\" data-line-number=\"1\">$ <span class=\"ex\">coproc</span> :<span class=\"kw\">;</span> <span class=\"bu\">declare</span> -p <span class=\"va\">COPROC</span></a>\r\n<a class=\"sourceLine\" id=\"cb4-2\" data-line-number=\"2\">[<span class=\"ex\">1</span>] 25155</a>\r\n<a class=\"sourceLine\" id=\"cb4-3\" data-line-number=\"3\"><span class=\"bu\">declare</span> -a <span class=\"va\">COPROC=([0]=</span><span class=\"st\">&quot;63&quot;</span> <span class=\"va\">[1]=</span><span class=\"st\">&quot;60&quot;</span><span class=\"va\">)</span></a>\r\n<a class=\"sourceLine\" id=\"cb4-4\" data-line-number=\"4\">[<span class=\"ex\">1</span>]+  Done                    coproc COPROC :</a></code></pre></div>\r\n<p>The other way is to give <code>coproc</code> an explicit name and a <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Command-Grouping\">Command Grouping</a>.</p>\r\n<p>Example #5:</p>\r\n<div class=\"sourceCode\" id=\"cb5\"><pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><a class=\"sourceLine\" id=\"cb5-1\" data-line-number=\"1\">$ <span class=\"ex\">coproc</span> HPR (:); <span class=\"bu\">declare</span> -p <span class=\"va\">HPR</span></a>\r\n<a class=\"sourceLine\" id=\"cb5-2\" data-line-number=\"2\">[<span class=\"ex\">1</span>] 25469</a>\r\n<a class=\"sourceLine\" id=\"cb5-3\" data-line-number=\"3\"><span class=\"bu\">declare</span> -a <span class=\"va\">HPR=([0]=</span><span class=\"st\">&quot;63&quot;</span> <span class=\"va\">[1]=</span><span class=\"st\">&quot;60&quot;</span><span class=\"va\">)</span></a>\r\n<a class=\"sourceLine\" id=\"cb5-4\" data-line-number=\"4\">[<span class=\"ex\">1</span>]+  Done                    coproc HPR ( : )</a></code></pre></div>\r\n<p>Slightly less contrived example #6:</p>\r\n<pre><code>$ coproc GREP (grep --line-buffered pub); printf &#39;%s\\n&#39; hacker public radio &gt;&amp;${GREP[1]}; cat &lt;&amp;${GREP[0]}\r\n[1] 25627\r\npublic\r\n^C\r\n$ kill %1\r\n[1]+  Terminated              coproc GREP ( grep --color=auto --line-buffered pub )</code></pre>\r\n<p>Here grep and cat wait forever for more input, so we have to kill them to continue our lesson.</p>\r\n<p>But we know that <code>GREP</code> will only return one line, so we can just read that one line. And when we are done feeding it lines, we can close our side of its stdin, and it will notice this and exit gracefully.</p>\r\n<p>I’m glad I stumbled over that <code>{YOURVARIABLE}&gt;&amp;-</code> syntax for having a dereferenced variable as the left FD of a redirection. Originally I used an ugly <code>eval</code>.</p>\r\n<p>Example #7:</p>\r\n<pre><code>$ coproc GREP (grep --line-buffered pub); printf &#39;%s\\n&#39; hacker public radio &gt;&amp;${GREP[1]}; head -n1 &lt;&amp;${GREP[0]}; exec {GREP[1]}&gt;&amp;-\r\n[1] 25706\r\npublic\r\n[1]+  Done                    coproc GREP ( grep --color=auto --line-buffered pub )</code></pre>\r\n<p>There we go! Not the most brilliant example, but it shows all the relevant moving parts, and we covered a couple of caveats.</p>\r\n<p>Now go out and play with this and come back with an example on how this is actually useful in the real world, and submit a show!</p>\r\n\r\n',311,42,0,'CC-BY-SA','bash, coproc, subshell',0,0,1),
(2797,'2019-04-23','Writing Web Game in Haskell - Simulation at high level',1547,'Tuula gives overview of simulation in their 4x game','<p>So far we have been concentrating on separate pieces of the game. Now it’s time to put some of them together as a simulation.</p>\n<h2 id=\"overview-of-simulation\">Overview of simulation</h2>\n<p>Simulation is done in discrete steps. Each step is roughly 1 earth month (completely arbitrary decision). Shorter than that and there might not be enough happening during turns to keep things interesting. Much longer than that and player might not have enough control on how to react things.</p>\n<p>In any case, current time is stored in database in table <code>time</code>. There should be only one row in that table at any given time. And that row has only one value, current time. Time is stored as integer as I didn’t want to deal with problems that you get when adding fractions to a float time after time. So current time (March 2019) would be <code>2019.3</code> in game terms and stored as <code>20193</code> in database.</p>\n<p>Main processing is done in function called <code>processTurn</code> that is shown below. It advances time for one decimal month, removes all expired statuses as explained in <a href=\"https://hackerpublicradio.org/eps.php?id=2768\">episode 2768</a> and then loads all factions.</p>\n<p>After that, various steps of the simulation are carried out for all loaded factions. These include handling special events as explained in <a href=\"https://hackerpublicradio.org/eps.php?id=2748\">episode 2748</a> and doing observations and report writing in manner described <a href=\"https://hackerpublicradio.org/eps.php?id=2703\">episode 2703</a>.</p>\n<pre><code>processTurn :: (BaseBackend backend ~ SqlBackend,\n    BackendCompatible SqlBackend backend, PersistUniqueRead backend,\n    PersistQueryWrite backend,\n    PersistQueryRead backend, PersistStoreWrite backend, MonadIO m) =&gt;\n    ReaderT backend m Time\nprocessTurn = do\n    newTime &lt;- advanceTime\n    _ &lt;- removeExpiredStatuses newTime\n    factions &lt;- selectList [] [ Asc FactionId ]\n    _ &lt;- mapM (handleFactionEvents newTime) factions\n    mapM_ handleFactionFood factions\n    mapM_ (handleFactionConstruction newTime) factions\n    _ &lt;- mapM (addSpecialEvents newTime) factions\n    -- Doing observations should always be done last to ensure players have\n    -- recent reports of property they have full control, ie. planets.\n    -- Otherwise it&#39;s possible that they&#39;ll receive reports that are one\n    -- turn out of sync.\n    mapM_ (handleFactionObservations newTime) factions\n    return newTime</code></pre>\n<h2 id=\"more-mapping\">More mapping</h2>\n<p>Remember <code>map</code> and <code>fmap</code> that are used to run a function to each element in a list or general structure? <code>mapM</code> works in a similar way, but is used in monadic context. In <code>processTurn</code> function, we’re dealing with input and output and have IO monad present to allow us to do that (<code>MonadIO m</code> part of the type signature).</p>\n<p>If you step back a bit and squint a bit, then <code>map :: (a -&gt; b) -&gt; [a] -&gt; [b]</code> and <code>fmap :: (a -&gt; b) -&gt; f a -&gt; f b</code> and <code>mapM :: Monad m =&gt; (a -&gt; m b) -&gt; t a -&gt; m (t b)</code> look pretty similar. Each take a function, structure and produce a new structure which values were created by running the given function for each element of the original structure.</p>\n<p>The difference is that <code>map</code> works only for lists, <code>fmap</code> works for functors (that were covered in <a href=\"https://hackerpublicradio.org/eps.php?id=2778\">episode 2778</a>) and <code>mapM</code> works for structures in monadic context.</p>\n<p>Best way to contact me nowadays is either by email or through fediverse where I’m Tuula@mastodon.social.</p>\n',364,107,0,'CC-BY-SA','haskell, persistent',0,0,1),
(2798,'2019-04-24','Should Podcasters be Pirates ?',725,'Knightwise waxes nostalgically on the early days of podcasting and wonders if we all sold out?','<p>In a car rant I think back to the early days of podcasting and how the ambience and vision of podcasting was far from the mainstream media approach from today. Have we all sold out ?</p>\r\n',111,0,1,'CC-BY-SA','podcast,pirate radio,decentralisation',0,0,1),
(2802,'2019-04-30','Mid-life (?) assessment',991,'It seems life goes faster and faster and then turns around and goes slower and slower','<p>At 40, I’m at the middle of the mean life expectancy in most parts of the world. What’s happened so far, and where do I go from here?</p>\r\n<p>I look at my life’s past in increasingly smaller chunks of years, and then at my life’s future in increasingly larger chunks of years, and speculate about those 80 years — or perhaps many more? — of expected lifetime.</p>\r\n<p>I’m saying mostly the things I wrote at <a href=\"https://loadaverage.org/conversation/10689347\" class=\"uri\">https://loadaverage.org/conversation/10689347</a> but with some small updates from the last 9 months.</p>\r\n',311,0,0,'CC-BY-SA','life, kids, work, medicine, future',0,0,1),
(2792,'2019-04-16','Playing around with text to speech synthesis on Linux',1203,'Playing around with different text to speech programs to see what is possible.','<p>Below the script I used to generate a bunch of wav files with different text to speech applications.</p>\r\n<pre><code>#!/bin/bash\r\n\r\nstring=&quot;This is HPR episode 2792 entitled \\&quot;Playing around with text to speech synthesis on Linux\\&quot; and is part of the series \\&quot;Sound Scapes\\&quot;. It is hosted by Yeroon Bahten and is about 20 minutes long and carries a clean flag.&quot;\r\necho &quot;${string}&quot; &gt; text.txt\r\n\r\nespeak -w espeak.wav &quot;${string}&quot; \r\nespeak -w espeak-ng-v-mb-us1.wav -v mb-us1 &quot;${string}&quot;\r\nespeak -w espeak-ng-v-mb-us2.wav -v mb-us2 &quot;${string}&quot;\r\nespeak -w espeak-ng-v-mb-us3.wav  -v mb-us3 &quot;${string}&quot;\r\nespeak-ng &quot;${string}&quot;\r\nespeak-ng -v en-gb &quot;${string}&quot;\r\nespeak-ng -w espeak-ng-en-gb-scotland.wav -v en-gb-scotland &quot;${string}&quot;\r\nespeak-ng -w espeak-ng-en-us.wav  -v en-us &quot;${string}&quot;\r\n\r\nflite -o flite-voice-cmu_us_slt.wav -voice cmu_us_slt  &quot;${string}&quot;\r\n\r\necho &quot;${string}&quot;| festival --language english --tts # same as next line\r\necho &quot;${string}&quot;| text2wave --language british_english --tts -o festival_british_english.wav\r\ntext2wave -o festival_british_english.wav  text.txt\r\n\r\nfor voice in don_diphone kal_diphone ked_diphone rab_diphone\r\ndo\r\n  text2wave -o festival_voice_${voice}.wav -eval &quot;(voice_${voice} )&quot;  text.txt\r\ndone\r\n\r\n# Gnustep say, recorded with audio recorder.\r\nsay &quot;${string}&quot;\r\n\r\ntext2wave -o festival_voice_cmu_us_slt_arctic_hts.wav -eval &quot;(voice_cmu_us_slt_arctic_hts )&quot; text.txt\r\n\r\n# merlin https://github.com/CSTR-Edinburgh/merlin\r\n\r\n# marytts: https://github.com/marytts</code></pre>\r\n',369,101,0,'CC-BY-SA','speech synthesis linux',0,0,1),
(2794,'2019-04-18','Interview with Martin Wimpress',2412,'In this episode, Yannick talks with Martin Wimpress about the Ubuntu MATE project','<p>Ubuntu, MATE.</p>\r\n<p>Two words which, taken separately, refer to great products.</p>\r\n<p>On one side, Ubuntu, one of the most popular, if not <em>the</em> most popular, linux distribution.</p>\r\n<p>On the other side, the MATE desktop environment, also very popular.</p>\r\n<p>One person took those two elements and combined them together to make Ubuntu MATE. That person is Martin Wimpress, and he joined me on the 21st of March to talk about the past, present, and future of the project.</p>\r\n',370,78,0,'CC-BY-SA','ubuntu, mate, ubuntu mate, martin wimpress, raspberry pi, desktop environment, linux',0,0,1),
(2808,'2019-05-08','Haskell function types',1469,'Tuula gives overview of function types in Haskell','<p>Haskell is statically typed language, meaning that during compilation, programs are checked for type correctness. This means that you won’t accidentally mix for example text and numbers. Haskell does type inference. The compiler will try and figure out what kind of types would make your program to be valid in terms of types. Programmer could completely omit types, but it’s often helpful to write type signatures for at least top level definitions. These will be helpful for both the programmers and compilers.</p>\r\n<h2 id=\"concrete-types\">concrete types</h2>\r\n<p>Simplest case is where types are spelled out definitely. Function <code>add</code> below takes two <code>Integer</code> parameters and produces <code>Integer</code> value. Note that types are written in upper case.</p>\r\n<p><code>add :: Integer -&gt; Integer -&gt; Integer</code></p>\r\n<p>It’s possible to not use concrete types. In following example <code>a</code> (note the lower case) can be anything. So function takes two values of <code>a</code>, a <code>Boolea</code> and produces <code>a</code>. This is useful technique for writing very general functions.</p>\r\n<p><code>choose :: a -&gt; a -&gt; Boolean -&gt; a</code></p>\r\n<h2 id=\"ad-hoc-polymorphism\">ad hoc polymorphism</h2>\r\n<p>In previous example, we wouldn’t be able to do much at all with <code>a</code> as we don’t know its type. Sometimes we need to know a bit more about type, without specifically declaring its type. For those cases type constraints are useful.</p>\r\n<p><code>add :: (Num a) =&gt; a -&gt; a -&gt; a</code></p>\r\n<p>This version of <code>add</code> again takes two parameters, both being type <code>a</code> and produces value <code>a</code>. But <code>(Num a) =&gt;</code> part in the signature constraints <code>a</code> to be instance of <code>Num</code>. This type class (I’ll talk about these some other time) defines that each instance of it will have set of functions: <code>+</code>, <code>-</code>, <code>*</code>, <code>negate</code>, <code>abs</code>, <code>signum</code> and <code>fromInteger</code>. So now our <code>add</code> function can use those functions, regardless of what specific type <code>a</code> is.</p>\r\n<h2 id=\"parametrized-functions\">parametrized functions</h2>\r\n<p>Types used in function signature can be parametrized. If we wanted a function that returns a first element of any list, we could have following signature: <code>first :: [a] -&gt; Maybe a</code></p>\r\n<p><code>first</code> takes single parameter, list of <code>a</code> and returns <code>Maybe a</code>. <code>Maybe</code> is a type that is used to signify a value that might or might not be present and has following definition:</p>\r\n<pre><code>data Maybe a =\r\n     Nothing\r\n     | Just a</code></pre>\r\n<p>So our function would return <code>Nothing</code> when given an empty list and <code>Just a</code> when given a list of at least one element.</p>\r\n<h2 id=\"using-functions\">using functions</h2>\r\n<p>Function application in Haskell doesn’t require parentheses around arguments. Calling our <code>add</code> function is just <code>add 1 2</code>. If one of the values is result of another function call, we need to tell which parameters belong to which function. Using <code>$</code> is one option: <code>add 1 $ add 2 3</code>, another option is to use parentheses: <code>add 1 (add 2 3)</code>.</p>\r\n<p>When function is called with less parameters than it expect, instead of run time error you’ll going to receive a function. In following example <code>addLots 5</code> will produce same value as <code>add 1000 5</code>:</p>\r\n<pre><code>addLots = add 1000\r\naddLots 5</code></pre>\r\n<p>Another contrived example of partial application:</p>\r\n<pre><code>findPodcasts :: [Podcast] -&gt; Text -&gt; [Podcast]\r\nsearch = findPodcasts loadedPodcasts\r\nmyPodcasts = search &quot;Tuula&quot;</code></pre>\r\n<h2 id=\"functions-as-types\">functions as types</h2>\r\n<p>Functions have type (that’s what the signature is for after all) and functions can be used as values. You can return function from another function or you can pass in a function as a parameter.</p>\r\n<p>Common example is <code>filter</code>, which has following signature: <code>filter :: (a -&gt; Bool) -&gt; [a] -&gt; [a]</code></p>\r\n<p>It takes two parameters, first one is function that has type <code>a -&gt; Bool</code> and second one is list of <code>a</code>. Return value is list of <code>a</code>. You can produce a list of odd numbers between 1 and 10 with <code>filter odd [1..10]</code>.</p>\r\n<h2 id=\"anonymous-functions\">anonymous functions</h2>\r\n<p>Sometimes you need a function to pass in as a parameter, but the function is so small that you don’t want to give it a name. For those cases, anonymous function are good. If you wanted to produce a list of odd numbers that are greater that 5 in range from 1 10, you could write it as: <code>filter (\\x -&gt; odd x &amp;&amp; x &gt; 5) [1..10]</code>. If you squint hard enough <code>\\</code> looks almost like a lowercase greek letter λ.</p>\r\n<p>Easiest way to catch me is either email or fediverse where I’m Tuula@mastodon.social</p>\r\n',364,107,0,'CC-BY-SA','haskell',0,0,1);
INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hostid`, `series`, `explicit`, `license`, `tags`, `version`, `downloads`, `valid`) VALUES (2799,'2019-04-25','building an arduino programmer',1212,'turn an arduino nano into a programmer','<ol type=\"1\">\r\n<li>intro</li>\r\n</ol>\r\n<p>1.1 brian in ohio</p>\r\n<p>1.2 out from under my rock</p>\r\n<ol start=\"2\" type=\"1\">\r\n<li>motivation</li>\r\n</ol>\r\n<p>2.1 ken fallon bootloader episode</p>\r\n<ul>\r\n<li>hpr 2660</li>\r\n<li>burned many bootloaders</li>\r\n<li>used usbtiny programmer</li>\r\n<li>putting together a programmer would be a good learning experience</li>\r\n</ul>\r\n<p>2.2 still use arduino</p>\r\n<ul>\r\n<li>easy to check out a new piece of hardware</li>\r\n<li>boards are cheap and easy to find</li>\r\n<li>boards are robust</li>\r\n</ul>\r\n<p>2.3 need to run an arduino board at lower frequency</p>\r\n<ul>\r\n<li>developing a data logger</li>\r\n<li>write code in c using the avr open source tool chain</li>\r\n<li>prototype on arduino board</li>\r\n</ul>\r\n<ol start=\"3\" type=\"1\">\r\n<li>needed supplies</li>\r\n</ol>\r\n<p>3.1 arduino ide</p>\r\n<ul>\r\n<li>get from your distro’s repository</li>\r\n<li>slackbuilds i used the version that repackages the binaries, the little a arduino</li>\r\n<li>read this good information<br />\r\n<a href=\"https://www.arduino.cc/en/Tutorial/ArduinoISP\" class=\"uri\">https://www.arduino.cc/en/Tutorial/ArduinoISP</a></li>\r\n</ul>\r\n<p>3.2 avrdude</p>\r\n<ul>\r\n<li>use it to test the programmer outside of the arduino environment</li>\r\n<li>part of the gnu avr toolchain</li>\r\n</ul>\r\n<p>3.3 arduino nano clone - un assembled</p>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-bare-nano.jpg\" alt=\"hpr2799-bare-nano.jpg\" /></p>\r\n<ul>\r\n<li>look for the boards that have the unpoplated icsp header</li>\r\n<li>make sure its a nano and not a pro-mini</li>\r\n</ul>\r\n<p>3.4 3 leds 3mm or smaller</p>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-led.jpg\" alt=\"hpr2799-led.jpg\" /></p>\r\n<ul>\r\n<li>optional but are useful, especially the heartbeat led</li>\r\n</ul>\r\n<p>3.5 3 resistors 200 ohm - small</p>\r\n<ul>\r\n<li>if you install the led’s</li>\r\n</ul>\r\n<p>3.6 1 5-10 uF electrolytic capacitor</p>\r\n<p>3.7 3-4 inch long jumper wire</p>\r\n<p>3.8 2x3 female header</p>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-2x3header.jpg\" alt=\"hpr2799-2x3header.jpg\" /></p>\r\n<p>3.9 some way to cut wire</p>\r\n<p>3.10 soldering supplies</p>\r\n<ol start=\"4\" type=\"1\">\r\n<li>howto</li>\r\n</ol>\r\n<p>4.1 upload arduino isp sketch to nano</p>\r\n<p>File→Examples→11.ArduinoISP→ArduinoISP</p>\r\n<ul>\r\n<li>i modified the sketch changing where the led’s are placed</li>\r\n<li><p>i put the led’s at digital 9, 7, and 5 for spacing</p>\r\n<pre><code>#define RESET 10 // Use pin 10 to reset the target rather than SS\r\n#define LED_HB 9 // No change define LED_ERR 7 // changed define\r\n#LED_PMODE 5 // changed</code></pre></li>\r\n<li><p>upload the sketch</p></li>\r\n</ul>\r\n<p>4.2 solder on led’s</p>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-led-on-board.jpg\" alt=\"hpr2799-led-on-board.jpg\" /></p>\r\n<ul>\r\n<li>solder the anode leg to the apropriate digital pin on the board</li>\r\n<li>add a resistor to the cathode leg of the led (usually the shorter leg)</li>\r\n<li>solder the resistor attached to the cathode to ground pin of the board</li>\r\n<li>i started with pin 9</li>\r\n<li>you can test each led before moving on to the next led</li>\r\n<li>my soldering ended up messy but it gets the job done</li>\r\n</ul>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-leds-done.jpg\" alt=\"hpr2799-leds-done.jpg\" /></p>\r\n<p>4.3 modify sketch and test leds</p>\r\n<ul>\r\n<li>you can modify the sketch</li>\r\n<li>change the heartbeat pin to whatever led you just soldered</li>\r\n<li>upload the modified sketch</li>\r\n<li>the led you just soldered should pulse</li>\r\n</ul>\r\n<p>4.4 clip jumper wire and attach</p>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-reset-wire.jpg\" alt=\"hpr2799-reset-wire.jpg\" /></p>\r\n<ul>\r\n<li>pin 10</li>\r\n<li>used the hole on the end of the board as strain relief</li>\r\n</ul>\r\n<p>4.5 add capacitor</p>\r\n<ul>\r\n<li>watch polarity</li>\r\n<li>no more auto reset</li>\r\n<li>if you want to program with arduino ide, you need to push the reset button</li>\r\n</ul>\r\n<p>4.6 2x3 header</p>\r\n<pre class=\"___\"><code>                         MISO -|o o|-+Vcc\r\n                          SCK -|o o|-MOSI\r\n Do not attach-Reset-|o o|-Gnd\r\n                                     -----</code></pre>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-header-mod.jpg\" alt=\"hpr2799-header-mod.jpg\" /></p>\r\n<ul>\r\n<li>remove reset connecter south-west connector</li>\r\n<li>solder the remaining 5 pins</li>\r\n<li>the header is soldered on the bottom of the board</li>\r\n</ul>\r\n<p><img src=\"https://www.hackerpublicradio.org/eps/hpr2799-header-soldered.jpg\" alt=\"hpr2799-header-soldered.jpg\" /></p>\r\n<ol start=\"5\" type=\"1\">\r\n<li>how to use</li>\r\n</ol>\r\n<p>5.1 plug usb cable into programmer and your computer</p>\r\n<p>5.2 start the arduino ide</p>\r\n<p>5.3 plug programmer onto target board remember to plug the wire into the reset pin of the target</p>\r\n<p>5.4 in the tools folder of the ide make sure your usb port is selected</p>\r\n<p>Tools→Port<code>&quot;/dev/ttyUSBx&quot;</code>→<code>/dev/ttyUSBx</code></p>\r\n<p>5.5 and that in the programmer section you select arduino as isp not arduinoisp</p>\r\n<p>Tools→Programmer→Arduino as ISP</p>\r\n<p>5.6 at this point you can burn a bootloader as Ken described</p>\r\n<p>5.7 upload a program</p>\r\n<p>5.7.1 bring up the blink example sketch</p>\r\n<p>5.7.2 under tools make sure your target board type is selected</p>\r\n<p>Tools→Boards</p>\r\n<p>5.7.3 under the sketch menu you’ll see upload using a programmer</p>\r\n<p>Sketch→Upload Using Programer</p>\r\n<p>5.7.4 when you select that the blink sketch will be compiled and uploaded</p>\r\n<ol start=\"6\" type=\"1\">\r\n<li>at the command line</li>\r\n</ol>\r\n<p>6.1 check functionallity</p>\r\n<pre><code>bash-4.3$ avrdude -p m328p -c arduino -P /dev/ttyUSB0 -b 19200</code></pre>\r\n<p>6.2 output</p>\r\n<pre><code>  avrdude: AVR device initialized and ready to accept instructions\r\n\r\n  Reading | ################################################## | 100%\r\n  0.01s\r\n\r\n  avrdude: Device signature = 0x1e950f (probably m328p)\r\n\r\n  avrdude: safemode: Fuses OK (E:FD, H:DE, L:FF)\r\n\r\n  avrdude done.  Thank you.</code></pre>\r\n<ol start=\"7\" type=\"1\">\r\n<li>things to look out for</li>\r\n</ol>\r\n<p>7.1 permissions issues - arch wiki gentoo</p>\r\n<p>7.2 when you upload this way you overwrite bootloader</p>\r\n<p>7.3 arduino ide boards.txt has some fuse errors</p>\r\n<p>7.4 avrdude version 6.2 will not work</p>\r\n<p>7.5 baud rate using avrdude command line</p>\r\n<p>7.6 capacitor is non-optional, but makes uploading to that board non-trivial</p>\r\n<ol start=\"8\" type=\"1\">\r\n<li>conclusion</li>\r\n</ol>\r\n<p>8.1 upload via icsp vs usb serial</p>\r\n<p>8.2 do you need a bootloader?</p>\r\n<p>8.3 challenge to max out any 8bit microcontroller</p>\r\n<ul>\r\n<li>if you need to do one or two things use a microcontroller i.e. arduino</li>\r\n<li>if you need to do many things use a linux single board computer i.e. raspberry pi</li>\r\n</ul>\r\n',326,91,0,'CC-BY-SA','Arduino,ArduinoISP',0,0,1),
(2801,'2019-04-29','Guitar Set Up Part 1.',1724,'NYbill talks about setting up a guitar.','<p>NYbill talks about setting up a guitar.</p>\r\n<p>Pics for the episode:</p>\r\n<p><a href=\"https://media.gunmonkeynet.net/u/nybill/collection/guitar-set-up/\" class=\"uri\">https://media.gunmonkeynet.net/u/nybill/collection/guitar-set-up/</a></p>\r\n',235,0,0,'CC-BY-SA','Guitar, DIY',0,0,1),
(2804,'2019-05-02','Awk Part 13: Fix-Width Field Processing',381,'In this episode, I discuss how to deal with fix-width field text files using Awk','<h1 id=\"basic-usage\">Basic usage</h1>\r\n<p>Use the <code>FIELDWIDTHS = &quot;n1 n2 n3 ...&quot;</code> annotation in the <code>BEGIN</code> section of an awk command to specify the widths of the fields.</p>\r\n<p>For instance, the following file has widths of 20, 10, and 12 characters.</p>\r\n<pre><code>NAME                STATE     TELEPHONE\r\nJohn Smith          WA        418-311-4111\r\nMary Hartford       CA        319-219-4341\r\nEvan Nolan          IL        219-532-5301\r\nBoris Ratinski      NC        201-553-5555\r\n</code></pre>\r\n<p>Below is an example of processing such a file:</p>\r\n<pre><code>BEGIN  { FIELDWIDTHS = &quot;20 10 12&quot; }\r\nNR &gt; 1 {\r\n    name = $1\r\n    state = $2\r\n    phone = $3\r\n    sub(/ +$/, &quot;&quot;, name)\r\n    sub(/ +$/, &quot;&quot;, state)\r\n    sub(/ +$/, &quot;&quot;, phone)\r\n    printf(&quot;%s lives in %s. The phone number is %s.\\n&quot;, name, state, phone)\r\n}\r\n</code></pre>\r\n<p>Then you can run the command:</p>\r\n<pre><code>awk -f process_fixed_width.awk fixed_width.txt\r\n</code></pre>\r\n',300,94,1,'CC-BY-SA','bash,linux,cli,command-line,awk',0,0,1),
(2807,'2019-05-07','Are bash local variables local?',661,'A lesson on dynamic scope vs lexical scope','<p><a href=\"https://en.wikipedia.org/wiki/Scope_%28computer_science%29\">https://en.wikipedia.org/wiki/Scope_%28computer_science%29</a></p>\r\n<p>In <a href=\"https://hackerpublicradio.org/eps.php?id=2739\">hpr2739</a>, Dave talked briefly about local variables. But what are they?</p>\r\n<p>In most modern languages, especially in compiled languages, &quot;local&quot; means that the value of a variable cannot be directly known, by looking up the name, outside the bounds of that function, but that’s not how it works in bash.</p>\r\n<p>Languages like C and Python have <em>lexical scope</em>. Lexical scope means local variables are local in the <em>text</em>. The names are local.</p>\r\n<p>If I’m writing code that is textually located outside the function, I cannot even describe how to access the variables within the function, because <code>myvariable</code> in my function is not the same variable, not the same place, as <code>myvariable</code> in your function.</p>\r\n<p>Languages like Bash and Elisp have <em>dynamic scope</em>. That means local variables are local in <em>time</em>. The names are global.</p>\r\n<p>What happens when you declare a variable <code>local</code> in bash is that the existing value of that variable is stowed away, to be brought back when your function exits.</p>\r\n<pre><code>#!/usr/bin/env bash\r\nfunction sayscope() {\r\n    echo The scope is $whatsmyscope\r\n}\r\n\r\nfunction globalscope() {\r\n    whatsmyscope=global\r\n}\r\n\r\nfunction dynamicscope() {\r\n    whatsmyscope=dynamic\r\n}\r\n\r\nfunction localscope() {\r\n    local whatsmyscope=local\r\n    sayscope\r\n    dynamicscope\r\n    sayscope\r\n}\r\n\r\nglobalscope\r\nsayscope\r\nlocalscope\r\nsayscope</code></pre>\r\n<pre><code>The scope is global\r\nThe scope is local\r\nThe scope is dynamic\r\nThe scope is global</code></pre>\r\n<p>Perl has both, and it calls them <code>local</code> (dynamic scope, like bash) and <code>my</code> (lexical scope):</p>\r\n<pre><code>#!/usr/bin/env perl\r\nuse v5.10;\r\n\r\nsub sayscope {\r\n    say &quot;Dynamic scope is $whatsmyscope&quot;;\r\n}\r\n\r\nsub globalscope {\r\n    $whatsmyscope=&quot;global&quot;;\r\n}\r\n\r\nsub dynamicscope {\r\n    $whatsmyscope=&quot;dynamic&quot;;\r\n}\r\n\r\nsub lexicalscope {\r\n    my $whatsmyscope=&quot;lexical&quot;;\r\n    say &quot;Lexical scope is $whatsmyscope&quot;;\r\n    sayscope;\r\n}\r\n\r\nsub localscope {\r\n    local $whatsmyscope=&quot;local&quot;;\r\n    sayscope;\r\n    dynamicscope;\r\n    sayscope;\r\n    lexicalscope;\r\n}\r\n\r\nglobalscope;\r\nsayscope;\r\nlocalscope;\r\nsayscope;</code></pre>\r\n<pre><code>Dynamic scope is global\r\nDynamic scope is local\r\nDynamic scope is dynamic\r\nLexical scope is lexical\r\nDynamic scope is dynamic\r\nDynamic scope is global</code></pre>\r\n<p>You almost never want to use <code>local</code> in Perl, it’s mostly there for historical reasons — lexical scope is a Perl 5 feature. <a href=\"https://perl.plover.com/local.html\" class=\"uri\">https://perl.plover.com/local.html</a> covers well the remaining few and narrow exceptions where <code>local</code> might be useful.</p>\r\n<p>As dynamic scope has <em>some</em> valid use, it’s available in some otherwise lexically scoped languages. For example, Common LISP has the <em>special</em> form, and several Schemes and Racket have <em>parameter objects</em>:</p>\r\n<ul>\r\n<li><p><a href=\"https://www.lispworks.com/documentation/HyperSpec/Body/d_specia.htm\" class=\"uri\">https://www.lispworks.com/documentation/HyperSpec/Body/d_specia.htm</a></p></li>\r\n<li><p><a href=\"https://srfi.schemers.org/srfi-39/srfi-39.html\" class=\"uri\">https://srfi.schemers.org/srfi-39/srfi-39.html</a></p></li>\r\n<li><p><a href=\"https://docs.racket-lang.org/reference/parameters.html\" class=\"uri\">https://docs.racket-lang.org/reference/parameters.html</a></p></li>\r\n</ul>\r\n<p>To dig fully into the history and flora of dynamic and lexical scope merits another episode.</p>\r\n\r\n\r\n',311,42,0,'CC-BY-SA','bash, perl, scope, dynamic scope, lexical scope',0,0,1),
(2822,'2019-05-28','What\'s in the Box! Part 1',1265,'NYbill opens a mystery box he found in the mail box.','<p>NYbill opens a mystery box that arrived in the mail.</p>\r\n<p>No spoilers. But, it involves soldering…</p>\r\n<p>Pics for the episode:</p>\r\n<p><a href=\"https://media.gunmonkeynet.net/u/nybill/collection/what-s-in-the-box/\" class=\"uri\">https://media.gunmonkeynet.net/u/nybill/collection/what-s-in-the-box/</a></p>',235,103,0,'CC-BY-SA','DIY, Soldering, Guitar, electronics',0,0,1),
(2823,'2019-05-29','Gentoo and why I use it',748,'I talk about what Gentoo is, and why I love it so much.','<p>Thanks to <a href=\"https://hackerpublicradio.org/correspondents/0342.html\">norrist</a> for suggesting I do this episode!</p>\r\n<ul>\r\n<li><a href=\"https://gentoo.org/\" class=\"uri\">https://gentoo.org/</a></li>\r\n</ul>\r\n',374,0,0,'CC-BY-SA','Gentoo',0,0,1),
(2824,'2019-05-30','Gnu Awk - Part 15',1916,'Redirection of input and output - part 2','<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the fifteenth episode of the “<a href=\"https://hackerpublicradio.org/series/0094.html\" title=\"Learning Awk\">Learning Awk</a>” series which is being produced by <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" title=\"b-yeezi\">b-yeezi</a> and myself.</p>\r\n<p>This is the second of a pair of episodes looking at <em>redirection</em> in Awk scripts.</p>\r\n<p>In this episode I will spend some time looking at the <code>getline</code> command used for <em>explicit input</em> (as opposed to the usual <em>implicit</em> sort), often with redirection. The <code>getline</code> command is a complex subject which I will cover only relatively briefly. You are directed to the <a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Getline\" title=\"Explicit Input with getline\"><code>getline</code> section</a> of the GNU Awk User’s Guide for the full details.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2824/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/html_node/index.html\"><em>GNU Awk User’s Guide</em></a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Getline\">Explicit Input with <code>getline</code></a></li>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Plain-Getline\">Using <code>getline</code> with No Arguments</a></li>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Getline_002fCoprocess\">Using <code>getline</code> with a <em>coprocess</em></a></li>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Getline-Notes\">Getline notes</a></li>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Two_002dway-I_002fO\">Two-way I/O</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Previous shows in this series on HPR:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2114\">“<em>Gnu Awk - Part 1</em>”</a> - episode 2114</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2129\">“<em>Gnu Awk - Part 2</em>”</a> - episode 2129</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2143\">“<em>Gnu Awk - Part 3</em>”</a> - episode 2143</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2163\">“<em>Gnu Awk - Part 4</em>”</a> - episode 2163</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2184\">“<em>Gnu Awk - Part 5</em>”</a> - episode 2184</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2238\">“<em>Gnu Awk - Part 6</em>”</a> - episode 2238</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2330\">“<em>Gnu Awk - Part 7</em>”</a> - episode 2330</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2438\">“<em>Gnu Awk - Part 8</em>”</a> - episode 2438</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2476\">“<em>Gnu Awk - Part 9</em>”</a> - episode 2476</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2526\">“<em>Gnu Awk - Part 10</em>”</a> - episode 2526</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2554\">“<em>Gnu Awk - Part 11</em>”</a> - episode 2554</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2610\">“<em>Gnu Awk - Part 12</em>”</a> - episode 2610</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2804\">“<em>Gnu Awk - Part 13</em>”</a> - episode 2804</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2816\">“<em>Gnu Awk - Part 14</em>”</a> - episode 2816</li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2824/full_shownotes.epub\">ePub version of these notes</a></li>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_testdata1\">awk15_testdata1</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_ex1.awk\">awk15_ex1.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_ex2.awk\">awk15_ex2.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_testdata2\">awk15_testdata2</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_ex3.awk\">awk15_ex3.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_ex4.awk\">awk15_ex4.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_ex5.awk\">awk15_ex5.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_ex6.awk\">awk15_ex6.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2824/awk15_ex7.awk\">awk15_ex7.awk</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,94,1,'CC-BY-SA','Awk utility, Awk Language, gawk, redirection',0,0,1),
(2809,'2019-05-09','The Blue Oak Model License and Its One Big Gotcha',1268,'Introducing and examining a new and elegant permissive software license.','<p>The Blue Oak Model License 1.0.0 was just released this month. In this episode I read the license, explain where it sits in among other software licenses, and enumerate some of the problems it purports to solve.</p>\r\n<p>I’m no legal expert, so take all of this as sort of a rough introduction to the license.</p>\r\n<p>Overall, if you are looking at permissive (vs copyleft) licenses, I would strongly suggest you consider this license! It’s concise, robust, it was developed by credible people, and gives your users future-proof safety from a number of common legal traps.</p>\r\n<p>However: just note that it has a feature, some would say bug, that <em>might</em> be a big deciding factor in whether you feel comfortable with it (listen for details)</p>\r\n<p>Nevertheless, I believe this license, or at least its style of language, will soon become extremely common.</p>\r\n<p>Further links:</p>\r\n<ul>\r\n<li><a href=\"https://blueoakcouncil.org/license/1.0.0\">The Blue Oak Model License 1.0.0</a> — the license itself. You may also wish to read <a href=\"https://blueoakcouncil.org/2019/03/06/model.html\">the group’s statement</a> about their methodology and how the license came to be.</li>\r\n<li><a href=\"https://writing.kemitchell.com/2019/03/09/Deprecation-Notice.html\"><em>Deprecation Notice: MIT and BSD</em></a> — the blog post I mention in the recording, by Blue Oak council member, developer and IP lawyer Kyle Mitchell. He explains some problems he sees with the MIT and BSD licenses and how the BOML addresses them.</li>\r\n<li><a href=\"https://news.ycombinator.com/item?id=19347797\">Discussion on Hacker News</a> — This was a pretty good discussion. Kyle Mitchell also chimed in here to respond to some criticisms and tire-kicking of this license (you can recognize him by his handle <code>kemitchell</code>).</li>\r\n</ul>\r\n<p>Not mentioned in the recording: One thing that caused me a bit of confusion at first was the term “attribution”. Kyle and the Blue Oak folks use this term mainly to talk about <em>license terms</em>, not <em>authorship</em> or <em>credit</em>. So for them an attribution requirement is a requirement to include the <em>license terms</em> with any distributed copies, not a requirement to give authorship credit to people.</p>\r\n<p>If you want to use this license as a starting point for your own “bespoke” license, you can! As I mention in the recording, I created my own variant of the Blue Oak license for one of my own projects. My main change was a strong requirement for downstream users to give credit to upstream contributors—not just when redistributing source code, but in all published software, books and websites created with the software!</p>\r\n<ul>\r\n<li><a href=\"https://thelocalyarn.com/cgi-bin/yarncode/doc/licensing/LICENSE.md\">The Local Yarn License 1.0.0</a> — This is the license as it currently sits in an experimental branch in my project’s Fossil repository</li>\r\n<li><a href=\"https://thelocalyarn.com/cgi-bin/yarncode/technote/8dfa234a1779782be090b36a6b1bcccfabd95b20\">Notes about my customizations</a> — Another tech note from the Fossil repo.</li>\r\n</ul>\r\n<p>Of course, when you make your own changes, you had better think hard about them, and if possible, get the advice of an Actual Lawyer who can discuss your particular situation.</p>\r\n',376,0,0,'CC-BY-SA','legal, licensing',0,0,1),
(2812,'2019-05-14','Is 5G mobile data a danger to your health?',484,'Apply Betteridge’s Law of Headlines to find out the answer','<p>This is mostly verbatim from my Fediverse post <a href=\"https://libranet.de/display/0b6b25a8-165c-9c7f-b55d-c7a077813050\" class=\"uri\">https://libranet.de/display/0b6b25a8-165c-9c7f-b55d-c7a077813050</a>, with a few minor edits.</p>\r\n<p>The anti-5G campaign has been cooking for many years now, and at the epicenter of it all are two men, Lennart Hardell and Rainer Nyberg. It’s a Swedish-Finnish phenomenon that is now really making the rounds and spreading internationally, as actual commercial deployment of 5G networks draws nearer.</p>\r\n<p>As a Swede, I apologize. These two do not represent the Swedish or Finnish cancer or radiation research community, and our media have given them far more space in the public discourse than their work merits.</p>\r\n<p>They are heavily quoted in networks of pseudoscience, including anti-vaccine sites, right-wing &quot;alternative facts&quot; sites and Strålskyddsstiftelsen (&quot;Swedish Radiation Protection Foundation&quot;), a private foundation created in 2012 with a deceptive name meant to invoke authority, which has had to be corrected on multiple occasions by the actual Swedish Radiation Safety Authority, Strålskyddsmyndigheten.</p>\r\n<p>Strålskyddsstiftelsen received the 2013 &quot;Misleader of the Year&quot; award from the main Swedish scientific skeptics\' society, Vetenskap och Folkbildning (&quot;Science and Public Education&quot;) for &quot;[their fearmongering propaganda and biased reporting on the health effects of mobile telephony use and wireless networks]&quot;.</p>\r\n<p><a href=\"https://www.vof.se/utmarkelser/tidigare-utmarkelser/aretas-forvillare-2013/\" class=\"uri\">https://www.vof.se/utmarkelser/tidigare-utmarkelser/aretas-forvillare-2013/</a> (in Swedish)</p>\r\n<p>These networks are part of a feedback loop where they get media attention, politicians pick up on their claims and use them to invoke the precautionary principle and get precautionary regulation in place, or judges rule based on the claims, which then gets quoted by these entities as evidence that they were right all along.</p>\r\n<p>They make it very hard to find factual information on whether millimeter-wavelength radiation actually has any different effect from the centimeter-wavelength radiation that we have been using for over two decades without any documented harmful effects, because wherever you look you just find these sites claiming that we have definitely had adverse health effects for the last two decades and the new frequency bands will definitely be far worse.</p>\r\n<p>When you dig deeper into the claims on these sites you find a handful of cherry-picked articles, leading back to the two men mentioned at the top, to studies with flawed methodology like self-reported surveys on mobile telephony use among cancer patients, or to the pseudoscience/media/politics/law feedback loop. And it’s all about centimeter waves, which simply have shown no conclusive sign of increasing brain cancers or any other adverse health effect related to the radiation. For every positive report made you can find one that reports brain cancer fell as we introduced mobile phones. There is a massive body of data, and if the signal were there, we would have seen it by now.</p>\r\n<p>I’m no cancer researcher, but neither is Rainer Nyberg, he’s a retired professor in pedagogy. He’s a concerned citizen. <a href=\"https://en.wikipedia.org/wiki/Lennart_Hardell\" class=\"uri\">https://en.wikipedia.org/wiki/Lennart_Hardell</a> is an actual oncologist and professor who has studied carcinogens, but his research results on the wireless/cancer connection have been dismissed as &quot;non-informative&quot;, &quot;post hoc&quot;, &quot;barely statistically significant&quot; and &quot;flawed&quot; by his peers. There is nothing there.</p>\r\n<p>We know that high-voltage 16.7 Hz fields increase the risk for leukemia in train drivers, but we don’t know why. I am open to the possibility that 20-50 GHz waves have different consequences from 2 GHz waves, but I’d have to hear it from a credible source.</p>\r\n<p>Straight up DNA mutation is out the window, and that’s one of the centerpoints of these campaigns. This is still frequencies below visual light, it’s not ionizing radiation. No plausible mechanism has been suggested, and there is no clear data on any adverse effects.</p>\r\n<p>We use millimeter waves for the full body scans in US airports. Surely the effects of those have been studied? The top search results go to truthaboutcancer and infowars and similar names I won’t even bother to click. I don’t want to read another article about how all cancer research after 1950 has been wrong, we should all just eat chalk to balance our acidity, and cancer is a fungus.</p>\r\n<p>Apart from the pseudoscience sites I found one paper on the first search results page, concluding that X-ray backscatter scanners have well-known risks, but radiation levels are far below safety standards, both for passengers and for security staff, and also below the background radiation exposure while flying, and millimeter-wave scanners, while an &quot;alarmingly small amount of information about its potential health effects&quot; is available, &quot;The established health effects associated with non-ionizing radiation are limited to thermal effects&quot; and &quot;these scanners operate at outputs well below those required to produce tissue heating&quot;, that is, we currently don’t know of a way millimeter waves might be harmful: <a href=\"https://www.sciencedirect.com/science/article/pii/S1687850714000168\" class=\"uri\">https://www.sciencedirect.com/science/article/pii/S1687850714000168</a> (<a href=\"https://doi.org/10.1016/j.jrras.2014.02.005\" class=\"uri\">https://doi.org/10.1016/j.jrras.2014.02.005</a>)</p>\r\n<p>For a guide on how to spot pseudoscience and how to read scientific papers, see ahuka’s excellent <a href=\"https://hackerpublicradio.org/eps.php?id=2695\">hpr2695: Problems with Studies</a>.</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Betteridge%27s_Law_of_Headlines\">https://en.wikipedia.org/wiki/Betteridge%27s_Law_of_Headlines</a></p>',311,0,0,'CC-BY-SA','5g, health, radiation, pseudoscience',0,0,1),
(2818,'2019-05-22','Writing Web Game in Haskell - Science, part 1',2606,'Tuula explains types and data they used to model science in their Haskell game','<h2 id=\"background\">Background</h2>\r\n<p>This is rather large topic, so I split it in two episodes. Next one should follow in two weeks if everything goes as planned. First part is about modeling research, while second part concentrates on how things change over time.</p>\r\n<p>There’s three types of research: engineering, natural sciences and social sciences. Research costs points that are produced by various buildings.</p>\r\n<h2 id=\"implementation\">Implementation</h2>\r\n<p>There’s three database tables, which are defined below:</p>\r\n<pre><code>CurrentResearch\r\n    type Technology\r\n    progress Int\r\n    factionId FactionId\r\n\r\nAvailableResearch\r\n    type Technology\r\n    category TopResearchCategory\r\n    factionId FactionId\r\n\r\nCompletedResearch\r\n    type Technology\r\n    level Int\r\n    factionId FactionId\r\n    date Int</code></pre>\r\n<h2 id=\"data-types\">Data types</h2>\r\n<p><code>Technology</code> is enumeration of all possible technologies. Knowing these enable player to build specific buildings and space ships, enact various laws and so on. In the end this will be (hopefully) large list of technologies.</p>\r\n<pre><code>data Technology =\r\n    HighSensitivitySensors\r\n    | SideChannelSensors\r\n    | HighTensileMaterials\r\n    | SatelliteTechnology\r\n    | BawleyHulls\r\n    | SchoonerHulls\r\n    | CaravelHulls\r\n    ...\r\n    deriving (Show, Read, Eq, Enum, Bounded, Ord)</code></pre>\r\n<p>All research belong to one of the top categories that are shown below:</p>\r\n<pre><code>data TopResearchCategory =\r\n    Eng\r\n    | NatSci\r\n    | SocSci\r\n    deriving (Show, Read, Eq, Ord)</code></pre>\r\n<p><code>ResearchCategory</code> is more fine grained division of research. Each of the categories is further divided into sub-categories. Only <code>EngineeringSubField</code> is shown below, but other two are similarly divided.</p>\r\n<pre><code>data ResearchCategory =\r\n    Engineering EngineeringSubField\r\n    | NaturalScience NaturalScienceSubField\r\n    | SocialScience SocialScienceSubField\r\n    deriving (Show, Read, Eq)\r\n\r\ndata EngineeringSubField =\r\n    Industry\r\n    | Materials\r\n    | Propulsion\r\n    | FieldManipulation\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p><code>ResearchScore</code> is measure of how big some research is. It has type parameter <code>a</code> that is used to further quantify what kind of <code>ResearchScore</code> we’re talking about.</p>\r\n<pre><code>newtype ResearchScore a = ResearchScore { unResearchScore :: Int }\r\n    deriving (Show, Read, Eq, Ord, Num)</code></pre>\r\n<p><code>TotalResearchScore</code> is record of three different types of researches. I’m not sure if I should keep it as a record of three fields or if I should change it so that only one of those values can be present at any given time.</p>\r\n<pre><code>data TotalResearchScore a = TotalResearchScore\r\n    { totalResearchScoreEngineering :: ResearchScore EngineeringCost\r\n    , totalResearchScoreNatural :: ResearchScore NaturalScienceCost\r\n    , totalResearchScoreSocial :: ResearchScore SocialScienceCost\r\n    }\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>Following singleton values are used with <code>ResearchScore</code> and <code>TotalResearchScore</code> to quantify what kind of value we’re talking about.</p>\r\n<pre><code>data EngineeringCost = EngineeringCost\r\n    deriving (Show, Read, Eq)\r\n\r\ndata NaturalScienceCost = NaturalScienceCost\r\n    deriving (Show, Read, Eq)\r\n\r\ndata SocialScienceCost = SocialScienceCost\r\n    deriving (Show, Read, Eq)\r\n\r\ndata ResearchCost = ResearchCost\r\n    deriving (Show, Read, Eq)\r\n\r\ndata ResearchProduction = ResearchProduction\r\n    deriving (Show, Read, Eq)\r\n\r\ndata ResearchLeft = ResearchLeft\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>Finally there’s <code>Research</code>, which is a record that uses many of the types introduced earlier. It describes what <code>Technology</code> is unlocked upon completion, what’s the cost is and if there are any technologies that have to have been researched before this research can start. The tier of research isn’t currently used for anything, but I have vague plans what to do about it in the future.</p>\r\n<pre><code>data Research = Research\r\n    { researchName :: Text\r\n    , researchType :: Technology\r\n    , researchCategory :: ResearchCategory\r\n    , researchAntecedents :: [Technology]\r\n    , researchCost :: TotalResearchScore ResearchCost\r\n    , researchTier :: ResearchTier\r\n    }\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<h2 id=\"tech-tree\">Tech tree</h2>\r\n<p>Putting all this together, we can define a list of <code>Research</code>. Since finding an entry from this list based on research type of it is such a common operation, we also define another data structure for this specific purpose. <code>Map</code> in other programming languages is often known as dictionary, associative array or hash map. It stores key-value - pairs. In our case <code>Technology</code> is used as key and <code>Research</code> as value. We define it based on the list previously defined:</p>\r\n<pre><code>techMap :: Map.Map Technology Research\r\ntechMap = Map.fromList $ (\\x -&gt; (researchType x, x)) &lt;$&gt; unTechTree techTree</code></pre>\r\n<p>Next time we’ll look into how to actually use all these types and data that were defined.</p>\r\n',364,107,0,'CC-BY-SA','Haskell',0,0,1),
(2811,'2019-05-13','Interview with Alan Pope',5387,'In this episode, Yannick talks with Alan Pope about snaps, snapcraft and all things related','<p>A few years ago, when you wanted to install a package on your Linux system, you had to grab the source code, and the nightmare began. But nowadays, this is over. You have deb files, and snaps, and flatpacks, and many other package formats available. On this episode, I was joined by Alan Pope, from Canonical, to talk about one of them in particular : snaps.</p>',370,78,0,'CC-BY-SA','ubuntu, snap, snapcraft, flatpack, linux, appimage, alan pope, popey',0,0,1),
(3066,'2020-05-04','HPR Community News for April 2020',2508,'Dave talks about shows released and comments posted in April 2020','<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/0386.html\" target=\"_blank\">DanNixon</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=3043\" target=\"_blank\">3043</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-04-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3043\" target=\"_blank\">How I record for HPR</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=3044\" target=\"_blank\">3044</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-04-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3044\" target=\"_blank\">mocp snooze tip</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=3045\" target=\"_blank\">3045</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-04-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3045\" target=\"_blank\">OSS compliance with privacy by default and design</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=3046\" target=\"_blank\">3046</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-04-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3046\" target=\"_blank\">HPR Community News for March 2020</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=3047\" target=\"_blank\">3047</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-04-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3047\" target=\"_blank\">The COVID-19 Work From Home Stream - Day 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3048\" target=\"_blank\">3048</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-04-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3048\" target=\"_blank\">Alternatives to toilet paper</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=3049\" target=\"_blank\">3049</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-04-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3049\" target=\"_blank\">What computers taught me about reality</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=3050\" target=\"_blank\">3050</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-04-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3050\" target=\"_blank\">Linux Inlaws S01E04 What\'s in a name</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3051\" target=\"_blank\">3051</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-04-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3051\" target=\"_blank\">The COVID-19 Work From Home Stream - Day 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3052\" target=\"_blank\">3052</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-04-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3052\" target=\"_blank\">Locating computers on a network</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=3053\" target=\"_blank\">3053</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-04-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3053\" target=\"_blank\">AudioBookClub 17 - Blood Witness</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3054\" target=\"_blank\">3054</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-04-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3054\" target=\"_blank\">Coronavirus Thoughts</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=3055\" target=\"_blank\">3055</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-04-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3055\" target=\"_blank\">Advice to new Fediverse administrators and developers</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=3056\" target=\"_blank\">3056</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-04-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3056\" target=\"_blank\">Jitsi</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=3057\" target=\"_blank\">3057</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-04-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3057\" target=\"_blank\">Formal verification with Coq</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3058\" target=\"_blank\">3058</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-04-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3058\" target=\"_blank\">The COVID-19 Work From Home Stream - Day 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3059\" target=\"_blank\">3059</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-04-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3059\" target=\"_blank\">A quick intro to Snapcast</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0386.html\" target=\"_blank\">DanNixon</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3060\" target=\"_blank\">3060</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-04-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3060\" target=\"_blank\">Running a local imap server</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=3061\" target=\"_blank\">3061</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-04-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3061\" target=\"_blank\">Parental Controls With Mike Ivy</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=3062\" target=\"_blank\">3062</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-04-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3062\" target=\"_blank\">Vassal: How to play board games while remote</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3063\" target=\"_blank\">3063</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-04-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3063\" target=\"_blank\">Pens, pencils, paper and ink - 1</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=3064\" target=\"_blank\">3064</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-04-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3064\" target=\"_blank\">How I got started in Electronics</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 24 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 4 comments on\n3 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3027#comments\" target=\"_blank\">hpr3027</a></strong>\n(2020-03-10) \"<em>What is quantum computing and why should we care?</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0379.html\" target=\"_blank\">mightbemike</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3027#1\" target=\"_blank\">Comment 1</a>:\nMongo on 2020-04-04:\n\"very interesting talk\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3032#comments\" target=\"_blank\">hpr3032</a></strong>\n(2020-03-17) \"<em>piCore on a Raspberry Pi 1 Model B</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3032#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2020-04-15:\n\"Re: Tiny Core maintainer name\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3032#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2020-04-18:\n\"Ridiculously tiny really\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3034#comments\" target=\"_blank\">hpr3034</a></strong>\n(2020-03-19) \"<em>How to bridge Freenode IRC rooms to Matrix.org</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3034#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2020-04-12:\n\"appservice-irc\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 20 comments on 9 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3043#comments\" target=\"_blank\">hpr3043</a></strong>\n(2020-04-01) \"<em>How I record for HPR</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=3043#1\" target=\"_blank\">Comment 1</a>:\nthelovebug on 2020-04-02:\n\"Bass and Treble\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3046#comments\" target=\"_blank\">hpr3046</a></strong>\n(2020-04-06) \"<em>HPR Community News for March 2020</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=3046#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2020-04-17:\n\"First-class ranting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3048#comments\" target=\"_blank\">hpr3048</a></strong>\n(2020-04-08) \"<em>Alternatives to toilet paper</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=3048#1\" target=\"_blank\">Comment 1</a>:\nmcnalu on 2020-04-08:\n\"The affected episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3048#2\" target=\"_blank\">Comment 2</a>:\nBookewyrmm on 2020-04-09:\n\"A word of caution\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3048#3\" target=\"_blank\">Comment 3</a>:\nTuula on 2020-04-21:\n\"Speaking of romans\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3050#comments\" target=\"_blank\">hpr3050</a></strong>\n(2020-04-10) \"<em>Linux Inlaws S01E04 What\'s in a name</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3050#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2020-04-10:\n\"Great sketch!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3051#comments\" target=\"_blank\">hpr3051</a></strong>\n(2020-04-13) \"<em>The COVID-19 Work From Home Stream - Day 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3051#1\" target=\"_blank\">Comment 1</a>:\nbrian in ohio on 2020-04-14:\n\"electoral college\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3052#comments\" target=\"_blank\">hpr3052</a></strong>\n(2020-04-14) \"<em>Locating computers on a network</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=3052#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2020-04-22:\n\"Very useful, thanks\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3053#comments\" target=\"_blank\">hpr3053</a></strong>\n(2020-04-15) \"<em>AudioBookClub 17 - Blood Witness</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3053#1\" target=\"_blank\">Comment 1</a>:\nlostnbronx on 2020-04-08:\n\"Welcom back to the Audio Book Club!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3054#comments\" target=\"_blank\">hpr3054</a></strong>\n(2020-04-16) \"<em>Coronavirus Thoughts</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=3054#1\" target=\"_blank\">Comment 1</a>:\nbrian in ohio on 2020-04-18:\n\"politics\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3054#2\" target=\"_blank\">Comment 2</a>:\nTelford Tendys on 2020-04-23:\n\"Freedom, Governance and Pandemic\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3054#3\" target=\"_blank\">Comment 3</a>:\nbrian in ohio on 2020-04-24:\n\"clarification\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3054#4\" target=\"_blank\">Comment 4</a>:\nAhuka on 2020-04-24:\n\"Herd immunity\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3056#comments\" target=\"_blank\">hpr3056</a></strong>\n(2020-04-20) \"<em>Jitsi</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=3056#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2020-04-20:\n\"Very timely\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3056#2\" target=\"_blank\">Comment 2</a>:\nharvhat on 2020-04-21:\n\"Why talk about Jitsi\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3056#3\" target=\"_blank\">Comment 3</a>:\njustme on 2020-04-21:\n\"I really enjoyed this episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3056#4\" target=\"_blank\">Comment 4</a>:\nMike Ray on 2020-04-21:\n\"Re: Why talk about jitsi?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3056#5\" target=\"_blank\">Comment 5</a>:\nAhuka on 2020-04-23:\n\"Why listen?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3056#6\" target=\"_blank\">Comment 6</a>:\nMike Ray on 2020-04-23:\n\"Re: Why listen?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3056#7\" target=\"_blank\">Comment 7</a>:\ncrvs on 2020-04-30:\n\"Re: Why listen?\"</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/2020-April/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-April/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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a>, <a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 17 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3086,'2020-06-01','HPR Community News for May 2020',3253,'Dave and Ken talk about shows released and comments posted in May 2020','<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=3065\" target=\"_blank\">3065</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-05-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3065\" target=\"_blank\">The case for the unattributed message</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=3066\" target=\"_blank\">3066</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-05-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3066\" target=\"_blank\">HPR Community News for April 2020</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=3067\" target=\"_blank\">3067</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-05-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3067\" target=\"_blank\">Getting my Python3 code working in Python2</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=3068\" target=\"_blank\">3068</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-05-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3068\" target=\"_blank\">Keeping track of downloads in Elm</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3069\" target=\"_blank\">3069</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-05-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3069\" target=\"_blank\">Linux Inlaws S01E05 Porn and Skynet</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3070\" target=\"_blank\">3070</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-05-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3070\" target=\"_blank\">making vim xdg compatible</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0385.html\" target=\"_blank\">crvs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3071\" target=\"_blank\">3071</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-05-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3071\" target=\"_blank\">Bash snippet - quotes inside quoted strings</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=3072\" target=\"_blank\">3072</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-05-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3072\" target=\"_blank\">The joy of pip-tools and pyenv-virtualenv</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3073\" target=\"_blank\">3073</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-05-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3073\" target=\"_blank\">Matchbox and Diecast Restoration</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3074\" target=\"_blank\">3074</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-05-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3074\" target=\"_blank\">For your consideration - Escape Pod</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=3075\" target=\"_blank\">3075</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-05-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3075\" target=\"_blank\">Federated Blogging with WriteFreely</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=3076\" target=\"_blank\">3076</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-05-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3076\" target=\"_blank\">Keep calm and Virion</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=3077\" target=\"_blank\">3077</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-05-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3077\" target=\"_blank\">Video conference Push to Talk</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0386.html\" target=\"_blank\">DanNixon</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3078\" target=\"_blank\">3078</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-05-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3078\" target=\"_blank\">Coronavirus Update 2020-05-07</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=3079\" target=\"_blank\">3079</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-05-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3079\" target=\"_blank\">Linux Inlaws S01E06 Porn and Trump</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3080\" target=\"_blank\">3080</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-05-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3080\" target=\"_blank\">Ansible ping</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=3081\" target=\"_blank\">3081</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-05-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3081\" target=\"_blank\">Why do formal verification?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3082\" target=\"_blank\">3082</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-05-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3082\" target=\"_blank\">RFC 5005 Part 1 – Paged and archived feeds? Who cares?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3083\" target=\"_blank\">3083</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-05-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3083\" target=\"_blank\">Mumbling while on lockdown</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=3084\" target=\"_blank\">3084</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-05-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3084\" target=\"_blank\">AudioBookClub 18 - Star Trek: The Continuing Mission</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3085\" target=\"_blank\">3085</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-05-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3085\" target=\"_blank\">Architectures of Robust Openness</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 29 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 8 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3013#comments\" target=\"_blank\">hpr3013</a></strong>\n(2020-02-19) \"<em>Bash Tips - 21</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=3013#3\" target=\"_blank\">Comment 3</a>:\nnobody on 2020-05-22:\n\"awk\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3013#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2020-05-22:\n\"Response to \'nobody\' re awk\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3053#comments\" target=\"_blank\">hpr3053</a></strong>\n(2020-04-15) \"<em>AudioBookClub 17 - Blood Witness</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3053#2\" target=\"_blank\">Comment 2</a>:\nmordancy on 2020-05-28:\n\"Blood Witness\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3059#comments\" target=\"_blank\">hpr3059</a></strong>\n(2020-04-23) \"<em>A quick intro to Snapcast</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0386.html\" target=\"_blank\">DanNixon</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3059#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2020-05-01:\n\"Thanks for the introduction\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3063#comments\" target=\"_blank\">hpr3063</a></strong>\n(2020-04-29) \"<em>Pens, pencils, paper and ink - 1</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=3063#1\" target=\"_blank\">Comment 1</a>:\nArcher72 on 2020-05-05:\n\"Fountain pens\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3063#2\" target=\"_blank\">Comment 2</a>:\nBookewyrmm on 2020-05-07:\n\"Pens, ink and paper\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3063#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2020-05-07:\n\"To Archer72\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3063#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2020-05-07:\n\"To Bookewyrmm\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 21 comments on 11 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3065#comments\" target=\"_blank\">hpr3065</a></strong>\n(2020-05-01) \"<em>The case for the unattributed message</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=3065#1\" target=\"_blank\">Comment 1</a>:\nbrian in ohio on 2020-05-01:\n\"enemies\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3066#comments\" target=\"_blank\">hpr3066</a></strong>\n(2020-05-04) \"<em>HPR Community News for April 2020</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=3066#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2020-05-04:\n\"Thanks\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3066#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2020-05-05:\n\"No problem\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3066#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2020-05-06:\n\"Blood type distribution\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3066#4\" target=\"_blank\">Comment 4</a>:\nAhuka on 2020-05-06:\n\"I loved the show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3066#5\" target=\"_blank\">Comment 5</a>:\nDave Morriss on 2020-05-06:\n\"Re: Blood type distribution\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3066#6\" target=\"_blank\">Comment 6</a>:\nDave Morriss on 2020-05-06:\n\"Thanks Ahuka\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3069#comments\" target=\"_blank\">hpr3069</a></strong>\n(2020-05-07) \"<em>Linux Inlaws S01E05 Porn and Skynet</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3069#1\" target=\"_blank\">Comment 1</a>:\nBendy on 2020-05-12:\n\"skynet\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3071#comments\" target=\"_blank\">hpr3071</a></strong>\n(2020-05-11) \"<em>Bash snippet - quotes inside quoted strings</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=3071#1\" target=\"_blank\">Comment 1</a>:\nnobody on 2020-05-22:\n\"Further simplifying\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3071#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2020-05-22:\n\"To \'nobody\' re ANSI-C quoting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3072#comments\" target=\"_blank\">hpr3072</a></strong>\n(2020-05-12) \"<em>The joy of pip-tools and pyenv-virtualenv</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3072#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2020-04-30:\n\"Errata: Ubuntu Python virtualenv works just fine\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3072#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2020-05-12:\n\"Interesting and insightful\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3073#comments\" target=\"_blank\">hpr3073</a></strong>\n(2020-05-13) \"<em>Matchbox and Diecast Restoration</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3073#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2020-05-13:\n\"sounds good\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3073#2\" target=\"_blank\">Comment 2</a>:\nTony Hughes on 2020-05-14:\n\"Feedback from Tuula\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3075#comments\" target=\"_blank\">hpr3075</a></strong>\n(2020-05-15) \"<em>Federated Blogging with WriteFreely</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=3075#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2020-05-01:\n\"Federated link for talk on federated things\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3077#comments\" target=\"_blank\">hpr3077</a></strong>\n(2020-05-19) \"<em>Video conference Push to Talk</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0386.html\" target=\"_blank\">DanNixon</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3077#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2020-05-19:\n\"Brilliant Idea\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3077#2\" target=\"_blank\">Comment 2</a>:\njezra on 2020-05-19:\n\"an amazing mix of custom hardware and software\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3078#comments\" target=\"_blank\">hpr3078</a></strong>\n(2020-05-20) \"<em>Coronavirus Update 2020-05-07</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=3078#1\" target=\"_blank\">Comment 1</a>:\nZen_floater2 on 2020-05-22:\n\"my magical forrest Atheist comments.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3083#comments\" target=\"_blank\">hpr3083</a></strong>\n(2020-05-27) \"<em>Mumbling while on lockdown</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=3083#1\" target=\"_blank\">Comment 1</a>:\nDanNixon on 2020-05-29:\n\"Groove based tape format\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3083#2\" target=\"_blank\">Comment 2</a>:\nMrX on 2020-05-31:\n\"Re Groove based tape format\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3084#comments\" target=\"_blank\">hpr3084</a></strong>\n(2020-05-28) \"<em>AudioBookClub 18 - Star Trek: The Continuing Mission</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3084#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2020-05-28:\n\"Missing Fifty\"</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/2020-May/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-May/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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 9 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2813,'2019-05-15','Should we dump the linux Desktop.',1229,'Knightwise wonders if we should let go of the linux desktop environments and focus on cross-platform','<p>Knightwise wonders if we should let go of the linux desktop environments and focus on cross-platform applications instead. Please bring your torches and pitchforks.</p>',111,0,1,'CC-BY-SA','linux, desktop, rant',0,0,1),
(2814,'2019-05-16','Spectre and Meltdown and OpenBSD and our future',1251,'A discussion about CPU\'s and our future with them, where are we going?','<p>I discuss the entire Spectre and Meltdown issues and where we might go post an Intel world. My objective is to encourage others to leave Speculative processing backed by management engine based chips. SCATTER HUMANS!!! WE MUST LEAVE!!!!</p>\r\n',377,0,0,'CC-BY-SA','SCATTER HUMANS!!!',0,0,1),
(2815,'2019-05-17','Copy pasta',2300,'Copying and pasting on Linux: X selections, xsel, clipboard managers, GPM, screen, and more','<p>\r\nYou can copy and paste on Linux the same way you do on any other OS: Ctrl+C to copy and Ctrl+V to paste (or use the Edit menu, or a right-click menu).\r\n</p>\r\n\r\n<p>\r\nHowever, Linux doesn\'t limit you to just that.\r\nThe primary GUI environment of Linux (at the time of this recording) is X, and the <a href=\"https://www.x.org/releases/X11R7.7/doc/xorg-docs/icccm/icccm.html\">Inter-Client Communication Conventions Manual</a> defines three <strong>X Selection</strong> states&#58; Primary, Secondary, and Clipboard.\r\nThe Secondary is rarely (if ever?) used, so I don\'t cover it here.\r\n</p>\r\n\r\n<h2>Primary</h2>\r\n\r\n<p>\r\nThe primary X Selection is anything literally selected at any given moment.\r\nIf you highlight a word in Firefox with your mouse, for instance, then it becomes the Primary Selection, and it is owned by Firefox.\r\nIf you press the Middle Mouse Button in any application, then that application asks the owner (Firefox, in this example) for the data contained in the Primary Selection.\r\nFirefox sends the data to that application so that it can paste it for you.\r\n</p>\r\n\r\n<p>\r\nA Primary selection remains the Primary Selection until it is overwritten by a new Primary Selection.\r\nIn other words, text needn\'t be highlighted to be retained in the Primary Selection slot.\r\n</p>\r\n\r\n\r\n<h2>Clipboard</h2>\r\n\r\n<p>\r\nThe Clipboard Selection is data that has explicitly been sent to the clipboard by a copy action.\r\nThis is usually a right-click &#62; Copy or a selection of Edit &#62; Copy.\r\nWhen another application is told to paste from the clipboard, it pastes data from the Clipboard Selection.\r\n</p>\r\n\r\n<h2>Both</h2>\r\n\r\n<p>\r\nYou can (and often do) have both a Primary Selection and a Clipboard selection.\r\nIf you press Ctrl+V, you get the contents of the Clipboard Selection.\r\nIf you press the middle mouse button, then you get the contents of the Primary Selection.\r\n</p>\r\n\r\n<h2>xsel</h2>\r\n\r\n<p>\r\nThe <code>xsel</code> command allows you to retrieve the contents of an X Selection.\r\n</p>\r\n\r\n<pre><code>\r\n$ xsel --primary\r\ndungeons\r\n$ xsel --clipboard\r\ndragons\r\n</code></pre>\r\n\r\n<h2>Clipboard managers</h2>\r\n\r\nClipboard managers such as Klipper, CopyQ, <a href=\"https://parcellite.sourceforge.net/\" target=\"_blank\">Parcellite</a>, and so on, provide a history for your clipboard.\r\nThey track the latest 10 (or so) items you have copied or selected.\r\nThey can be a little confusing, because they do tend to blur the line between the Primary Selection and the Clipboard Selection, but now that you know the technical difference, it shouldn\'t confuse you to see them both listed by a clipboard manager designed to conflate them.\r\n</p>\r\n\r\n<h2>GPM</h2>\r\n\r\n<p>\r\nGPM is a daemon allowing you to use your mouse without a GUI.\r\nAmong its features, it permits you to select text in a text console (TTY) and then paste it with the middle mouse button.\r\n</p>\r\n\r\n<h2>GNU Screen and Tmux</h2>\r\n\r\n<p>\r\nScreen and tmux are &#34;window managers for text consoles&#34;.\r\nI don\'t tend to use tmux as often as I should, having learnt GNU Screen long ago, so I\'m not familiar with the process of copying and pasting with tmux.\r\nFor Screen, you can copy text in this way:\r\n</p>\r\n\r\n<ol>\r\n<li><p>\r\nPress Ctrl+A to get out of insert mode.\r\n</p></li>\r\n<li><p>\r\nPress left-square_bracket to enter copy-mode\r\n</p></li>\r\n<li><p>\r\nMove your text to the position you want to start selecting and press Enter or Return\r\n</p></li>\r\n<li><p>\r\nArrow to the position at which you want to end your selection and press Enter or Return again\r\n</p></li>\r\n</ol>\r\n\r\n<p>\r\nTo paste your selection:\r\n</p>\r\n\r\n<ol>\r\n<li><p>\r\nPress Ctrl+A to get out of insert mode.\r\n</p></li>\r\n<li><p>\r\nPress right-square_bracket to paste\r\n</p></li>\r\n</ol>\r\n\r\n\r\n\r\n',78,0,0,'CC-BY-SA','copy,paste,xsel',0,0,1),
(2816,'2019-05-20','Gnu Awk - Part 14',1357,'Redirection of input and output - part 1','<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the fourteenth episode of the “<a href=\"https://hackerpublicradio.org/series/0094.html\" title=\"Learning Awk\">Learning Awk</a>” series which is being produced by <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" title=\"b-yeezi\">b-yeezi</a> and myself.</p>\r\n<p>In this episode and the next I want to start looking at <em>redirection</em> within Awk programs. I had originally intended to cover the subject in one episode, but there is just too much.</p>\r\n<p>So, in the first episode I will be starting with <a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Redirection\" title=\"Redirecting output of `print` and `printf`\">output redirection</a> and then in the next episode will spend some time looking at the <code>getline</code> command used for <em>explicit input</em>, often with redirection.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2816/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/html_node/index.html\"><em>GNU Awk User’s Guide</em></a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Redirection\">Redirecting output of <code>print</code> and <code>printf</code></a></li>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Special-FD\">Special Files for Standard Preopened Data Streams</a></li>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Special-Files\">Special File names in gawk</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Previous shows in this series on HPR:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2114\">“<em>Gnu Awk - Part 1</em>”</a> - episode 2114</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2129\">“<em>Gnu Awk - Part 2</em>”</a> - episode 2129</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2143\">“<em>Gnu Awk - Part 3</em>”</a> - episode 2143</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2163\">“<em>Gnu Awk - Part 4</em>”</a> - episode 2163</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2184\">“<em>Gnu Awk - Part 5</em>”</a> - episode 2184</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2238\">“<em>Gnu Awk - Part 6</em>”</a> - episode 2238</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2330\">“<em>Gnu Awk - Part 7</em>”</a> - episode 2330</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2438\">“<em>Gnu Awk - Part 8</em>”</a> - episode 2438</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2476\">“<em>Gnu Awk - Part 9</em>”</a> - episode 2476</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2526\">“<em>Gnu Awk - Part 10</em>”</a> - episode 2526</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2554\">“<em>Gnu Awk - Part 11</em>”</a> - episode 2554</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2610\">“<em>Gnu Awk - Part 12</em>”</a> - episode 2610</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2804\">“<em>Gnu Awk - Part 13</em>”</a> - episode 2804</li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2816/full_shownotes.epub\">ePub version of these notes</a></li>\r\n<li>Examples: <a href=\"https://hackerpublicradio.org/eps/hpr2816/awk14_fruit_data.txt\">awk14_fruit_data.txt</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2816/awk14_ex1.awk\">awk14_ex1.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2816/awk14_ex2.awk\">awk14_ex2.awk</a>, <a href=\"https://hackerpublicradio.org/eps/hpr2816/awk14_ex3.awk\">awk14_ex3.awk</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,94,1,'CC-BY-SA','Awk utility, Awk Language, gawk,redirection',0,0,1),
(2830,'2019-06-07','2018-2019 New Years Eve show part 1',12194,'The HPR community comes together to say happy new year and chat','<h2>Hacker Public Radio New Years Show episode 1</h2>\r\n<p>Welcome to the 7th Annual Hacker Public Radio show. It is December the 31st 2018 and the time is 10 hundred hours UTC.</p>\r\n<ul>\r\n<li>Ken introduces the New year show, gives some history and thanks Kevin Wisher and HonkeyMagoo for organising this.</li>\r\n<li>Wondering where Klaatu is,</li>\r\n<li>Fifty one fifty talks about his new isp<br /><a href=\"https://www.blazinghog.com\">https://www.blazinghog.com</a></li>\r\n<li>Ken GETS STUCK IN CAPS LOCK<br /> <a href=\"https://wiki.archlinux.org/index.php/Xorg/Keyboard_configuration\">https://wiki.archlinux.org/index.php/Xorg/Keyboard_configuration</a></li>\r\n<li>ISO8601 YYYY-MM-DD <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">https://en.wikipedia.org/wiki/ISO_8601</a></li>\r\n<li><a href=\"https://www.hostelworld.com/hosteldetails.php/STF-IYHF-af-Chapman/Stockholm/32555\">https://www.hostelworld.com/hosteldetails.php/STF-IYHF-af-Chapman/Stockholm/32555</a></li>\r\n<li>Honkey is on his way to work</li>\r\n<li><pre>$ alias utc=\'/bin/date -u +%Y-%m-%d_%H-%M-%S%Z_%A\'</pre></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=9PfdQod8HTw\">https://www.youtube.com/watch?v=9PfdQod8HTw</a> History Buffs: Tora! Tora! Tora!</li>\r\n<li>klaatu joins us, career at Red Hat, IBM takeover, teaching Linux to non-tech people<br /><a href=\"https://en.wikipedia.org/wiki/Dalton_Plan\">https://en.wikipedia.org/wiki/Dalton_Plan</a></li>\r\n<li>Computer musems<br /><a href=\"https://vonhagen.org/collection.html\">https://vonhagen.org/collection.html</a></li>\r\n<li>barcamp (yes related to foo)<br /><a href=\"https://en.wikipedia.org/wiki/BarCamp\">https://en.wikipedia.org/wiki/BarCamp</a></li>\r\n<li>Oggcamp<br /><a href=\"https://oggcamp.org/\">https://oggcamp.org/</a></li>\r\n<li>Mint Cast Podcast<br /><a href=\"https://mintcast.org/\">https://mintcast.org/</a></li>\r\n<li>Brexit<br /><a href=\"https://en.wikipedia.org/wiki/Brexit\">https://en.wikipedia.org/wiki/Brexit</a></li>\r\n</ul>\r\n<p>\"we should have bought stock\"</p>\r\n\r\n',159,121,1,'CC-BY-SA','hpr nye, new years eve, community',0,0,1),
(2817,'2019-05-21','Are you successful? Click to find out more!',281,'The answer may surprise you!','<p>Based on <a href=\"https://libranet.de/display/0b6b25a8-125c-a71f-c7ae-f1a686792961\" class=\"uri\">https://libranet.de/display/0b6b25a8-125c-a71f-c7ae-f1a686792961</a>.</p>\r\n<p>It’s pretty short, less than 4 minutes, but I think it’s important.</p>\r\n<p>Who defines whether you are successful, or whether your project is successful, and does it matter?</p>',311,0,0,'CC-BY-SA','success, self-care',0,0,1),
(2828,'2019-06-05','Writing Web Game in Haskell - Science, part 2',2734,'Tuula continues their explanation on simulating science in a game written in Haskell','<h2 id=\"intro\">Intro</h2>\r\n<p>Last time we looked how to model technology and research. This time we’ll do some actual research. I’m skipping over some of the details as the episode is long enough as it is. Hopefully it’s still possible to follow with the show notes.</p>\r\n<p>Main concepts that I’m mentioning: Technology allows usage of specific buildings, ship components and such. Research unlock technologies and may have antecedents that has to be completed before the research can be started. Research cost is measure of how expensive a research is in terms of research points, which are produced by different buildings.</p>\r\n<p>Earlier I modeled tech tree as Map that had Technology as keys and Research as values. I realized that this is suboptimal and will replace it at some point in the future.</p>\r\n<h2 id=\"server-api\">Server API</h2>\r\n<p>There’s three resources that client can connect to. First one is for retrieving list of available research, second one for manipulating current research and last one for retrieving info on how much research points is being produced.</p>\r\n<pre><code>/api/research/available     ApiAvailableResearchR       GET\r\n/api/research/current       ApiCurrentResearchR         GET POST DELETE\r\n/api/research/production    ApiResearchProductionR      GET</code></pre>\r\n<h2 id=\"simulation\">Simulation</h2>\r\n<p>Simulation of research is done by <code>handleFactionResearch</code>, which does simulation for one faction for a given date. After calculating current research point production and retrieving list of current research, function calculates progress of current researches. Unfinished ones are written back to database, while completed are moved into <code>completed_research</code> table. Final step is updating what research will be available in the next turn.</p>\r\n<pre><code>handleFactionResearch date faction = do\r\n    production &lt;- totalProduction $ entityKey faction\r\n    current &lt;- selectList [ CurrentResearchFactionId ==. entityKey faction ] []\r\n    let updated = updateProgress production &lt;$&gt; current\r\n    _ &lt;- updateUnfinished updated\r\n    _ &lt;- handleCompleted date updated $ entityKey faction\r\n    _ &lt;- updateAvailableResearch $ entityKey faction\r\n    return ()</code></pre>\r\n<h2 id=\"research-point-production\">Research point production</h2>\r\n<p>Research points are produced by buildings. So first step is to load all planets owned by the faction and buildings on those planets. Applying <code>researchOutput</code> function to each building yields a list of <code>TotalResearchScore</code>, which is then summed up by <code>mconcat</code>. We can use <code>mconcat</code> as <code>TotalResearchScore</code> is a monoid (I talked about these couple episodes ago).</p>\r\n<pre><code>totalProduction fId = do\r\n    pnbs &lt;- factionBuildings fId\r\n    let buildings = join $ fmap snd pnbs\r\n    return $ mconcat $ researchOutput . entityVal &lt;$&gt; buildings</code></pre>\r\n<p><code>researchOutput</code> function below uses pattern matching. Instead of writing one function definition and case expression inside of it, we’re writing multiple definitions. Each of them matches building of different type. First example is definition that is used for <code>ResearchComplex</code>, while second one is for <code>ParticleAccelerator</code>. Final case uses underscore to match anything and indicate that we’re not even interested on the particular value being matched. <code>mempty</code> is again from our monoid definition. It is empty or unit value of monoid, which in case of <code>TotalResearchScore</code> is zero points in all research categories.</p>\r\n<pre><code>researchOutput Building { buildingType = ResearchComplex } =\r\n    TotalResearchScore\r\n    { totalResearchScoreEngineering = ResearchScore 10\r\n    , totalResearchScoreNatural = ResearchScore 10\r\n    , totalResearchScoreSocial = ResearchScore 10\r\n    }\r\n\r\nresearchOutput Building { buildingType = ParticleAccelerator } =\r\n    TotalResearchScore\r\n    { totalResearchScoreEngineering = ResearchScore 15\r\n    , totalResearchScoreNatural = ResearchScore 15\r\n    , totalResearchScoreSocial = ResearchScore 0\r\n    }\r\n\r\nresearchOutput _ = mempty</code></pre>\r\n<h2 id=\"updating-progress\">Updating progress</h2>\r\n<p>Moving research forward is more complex looking function. There’s bunch of filtering and case expressions going on, but the idea is hopefully clear after a bit of explanation.</p>\r\n<p><code>updateProgress</code> takes two parameters, total production of research points and current research that is being modified. This assumes that there are only one of each categories of research going on at any given time. If there were more, we would have to divide research points between them by some logic. Function calculates effect of research points on current research and produces a new current research that is the end result.</p>\r\n<p>Perhaps the most interesting part is use of lenses. For example, line <code>entityValL . currentResearchProgressL +~ engResearch $ curr</code> means that <code>curr</code> (which is <code>Entity CurrentResearch</code>) is used as starting point. First we reach to data part of <code>Entity</code> and then we focus on <code>currentResearchProgress</code> and add <code>engResearch</code> to it. This results a completely new <code>Entity CurrentResearch</code> being constructed, which is otherwise identical with the original, but the <code>currentResearchProgress</code> has been modified. Without lenses we would have to do this destructuring and restructuring manually.</p>\r\n<pre><code>updateProgress :: TotalResearchScore ResearchProduction -&gt; Entity CurrentResearch -&gt; Entity CurrentResearch\r\nupdateProgress prod curr =\r\n    case researchCategory &lt;$&gt; research of\r\n        Just (Engineering _) -&gt;\r\n            entityValL . currentResearchProgressL +~ engResearch $ curr\r\n\r\n        Just (NaturalScience _) -&gt;\r\n            entityValL . currentResearchProgressL +~ natResearch $ curr\r\n\r\n        Just (SocialScience _) -&gt;\r\n            entityValL . currentResearchProgressL +~ socResearch $ curr\r\n\r\n        Nothing -&gt;\r\n            curr\r\n    where\r\n        research = Map.lookup (currentResearchType . entityVal $ curr) techMap\r\n        engResearch = unResearchScore $ totalResearchScoreEngineering prod\r\n        natResearch = unResearchScore $ totalResearchScoreNatural prod\r\n        socResearch = unResearchScore $ totalResearchScoreSocial prod</code></pre>\r\n<p>Writing unfinished research back to database is short function. First we find ones that hasn’t been finished by filtering with <code>(not . researchReady . entityVal)</code> and then we apply <code>replace</code> to write them back one by one.</p>\r\n<pre><code>updateUnfinished updated = do\r\n    let unfinished = filter (not . researchReady . entityVal) updated\r\n    mapM (\\x -&gt; replace (entityKey x) (entityVal x)) unfinished</code></pre>\r\n<p>Handling finished research starts by finding out which ones were actually completed by filtering with <code>(researchReady . entityVal)</code> and their research type with <code>currentResearchType . entityVal</code>. Rest of the function is all about database actions: creating entries into <code>completed_research</code> and adding news entries for each completed research, then removing entries from <code>current_research</code> and <code>available_research</code>.</p>\r\n<pre><code>handleCompleted date updated fId = do\r\n    let finished = filter (researchReady . entityVal) updated\r\n    let finishedTech = currentResearchType . entityVal &lt;$&gt; finished\r\n    insertMany_ $ currentToCompleted date . entityVal &lt;$&gt; finished\r\n    insertMany_ $ researchCompleted date fId . (currentResearchType . entityVal) &lt;$&gt; finished\r\n    deleteWhere [ CurrentResearchId &lt;-. fmap entityKey finished ]\r\n    deleteWhere [ AvailableResearchType &lt;-. finishedTech\r\n                , AvailableResearchFactionId ==. fId ]</code></pre>\r\n<h2 id=\"available-research\">Available research</h2>\r\n<p>Figuring out what researches will be available for the next turn takes several steps. I won’t be covering random numbers in detail, they’re interesting enough for an episode on their own. It’s enough to know that <code>g &lt;- liftIO getStdGen</code> gets us a new random number generator that is seeded by current time.</p>\r\n<p><code>updateAvailableResearch</code> starts by loading available research and current research for the faction and initializing a new random number generator. <code>g</code> can be used multiple times, but it’ll always return same sequence of numbers. Here it doesn’t matter, but in some cases it might. <code>getR</code> is helper function I wrote that uses random number generator to pick <code>n</code> entries from a given list. <code>n</code> in our case is hard coded to 3, but later on I’ll add possibility for player to research technologies that raise this limit. <code>newAvailableResearch</code> (we’ll look into its implementation closer just in a bit) produces a list of available research for specific research category. These lists are combined with <code>&lt;&gt;</code> operator and written into database with <code>rewriteAvailableResearch</code>.</p>\r\n<pre><code>updateAvailableResearch fId = do\r\n    available &lt;- selectList [ AvailableResearchFactionId ==. fId ] []\r\n    completed &lt;- selectList [ CompletedResearchFactionId ==. fId ] []\r\n    g &lt;- liftIO getStdGen\r\n    let maxAvailable = ResearchLimit 3\r\n    -- reusing same g should not have adverse effect here\r\n    let engCand = getR g (unResearchLimit maxAvailable) $ newAvailableResearch isEngineering maxAvailable available completed\r\n    let natCand = getR g (unResearchLimit maxAvailable) $ newAvailableResearch isNaturalScience maxAvailable available completed\r\n    let socCand = getR g (unResearchLimit maxAvailable) $ newAvailableResearch isSocialScience maxAvailable available completed\r\n    rewriteAvailableResearch fId $ engCand &lt;&gt; natCand &lt;&gt; socCand</code></pre>\r\n<p><code>newAvailableResearch</code> is in charge of figuring out what, if any, new research should be available in the next turn. In case where amount of currently available research is same or greater than research limit, empty list is returned, otherwise function calculates candidates and returns them. Logic for that is following:</p>\r\n<ul>\r\n<li>candidates are research of specific category of those that has been unlock and unresearched</li>\r\n<li>unlocked and unresearched are unlocked ones that are in list of known technology</li>\r\n<li>unlocked research are ones with antecedents available in tech tree</li>\r\n<li>known technology are ones in list of completed research</li>\r\n</ul>\r\n<p>and complete definition of the function is shown below:</p>\r\n<pre><code>newAvailableResearch selector limit available completed =\r\n    if ResearchLimit (length specificCategory) &gt;= limit\r\n        then []\r\n        else candidates\r\n    where\r\n        specificCategory = filter (availableResearchFilter selector) available\r\n        candidates = filter (selector . researchCategory) unlockedAndUnresearched\r\n        unlockedAndUnresearched = filter (\\x -&gt; researchType x `notElem` knownTech) unlockedResearch\r\n        unlockedResearch = filter (antecedentsAvailable knownTech) $ unTechTree techTree\r\n        knownTech = completedResearchType . entityVal &lt;$&gt; completed\r\n\r\n\r\navailableResearchFilter f x =\r\n    maybe False (f . researchCategory) res\r\n    where\r\n        res = Map.lookup (availableResearchType $ entityVal x) techMap</code></pre>\r\n<p>Final step of the simulation of research is to update database with new available research. <code>mkUniq</code> is helper function that removes duplicate elements from a list. It’s used in <code>rewriteAvailableResearch</code> function to make a list that contains all unique top research categories (engineering, natural sciences and social sciences). If the resulting list isn’t empty, we’ll use it to remove all available research for those top categories and insert new available research.</p>\r\n<pre><code>rewriteAvailableResearch fId res = do\r\n    let cats = mkUniq $ fmap (topCategory . researchCategory) res\r\n    unless (null cats) $ do\r\n        deleteWhere [ AvailableResearchFactionId ==. fId\r\n                    , AvailableResearchCategory &lt;-. cats ]\r\n        insertMany_ $ researchToAvailable fId &lt;$&gt; res</code></pre>\r\n<p>Now everything is ready for next round of simulation.</p>\r\n',364,107,0,'CC-BY-SA','haskell',0,0,1),
(2838,'2019-06-19','Why Haskell?',1900,'Tuula tries to answer Beeza\'s question on why would someone want to use Haskell','<p>I got really good comment on episode <a href=\"https://hackerpublicradio.org/eps.php?id=2778\">2778 - Functor and applicative in Haskell</a> from Beeza that I’m including below:</p>\r\n<blockquote>\r\n<p>I’ve been writing software for over 30 years but I find the syntax of Haskell anything but intuitive - in fact less so than any other programming language I have looked at. Thanks to your excellent show notes I can make sense of it but I have to say I would not like to have to develop a project using this language.</p>\r\n</blockquote>\r\n<blockquote>\r\n<p>Obviously I am missing the point as nobody would design a language with the intention of its being difficult to use. Perhaps you could produce another episode addressing the question “Why Haskell?”</p>\r\n</blockquote>\r\n<p>In this episode, I’m trying to answer to that from my point of view.</p>\r\n',364,107,0,'CC-BY-SA','haskell, response',0,0,1),
(2835,'2019-06-14','2018-2019 New Years Eve show part 2',9088,'The HPR community comes together to say happy new year and chat','<h2>Hacker Public Radio New Years Show episode 2</h2>\r\n<ul>\r\n<li>Claudio talks about doing IT for a school</li>\r\n<li>Pinebook discussion - complaints about keyboard, speakers, trackpad<br />\r\n<a href=\"https://www.pine64.org\">https://www.pine64.org</a></li>\r\n<li>Scanning photo negatives</li>\r\n<li>Camera discussion</li>\r\n<li>Firefly<br />\r\n<a href=\"https://www.imdb.com/title/tt0303461\">https://www.imdb.com/title/tt0303461</a></li>\r\n<li>Serenity<br />\r\n<a href=\"https://www.imdb.com/title/tt0379786\">https://www.imdb.com/title/tt0379786</a></li>\r\n<li>Babylon 5<br />\r\n<a href=\"https://www.imdb.com/title/tt0105946\">https://www.imdb.com/title/tt0105946</a></li>\r\n<li>POLYBIUS - The Video Game That Doesn\'t Exist<br />\r\n<a href=\"https://www.youtube.com/watch?v=_7X6Yeydgyg\">https://www.youtube.com/watch?v=_7X6Yeydgyg</a><br />\r\n<a href=\"https://en.wikipedia.org/wiki/Polybius\">https://en.wikipedia.org/wiki/Polybius</a></li>\r\n<li>Cicada 3301<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Cicada_3301\">https://en.wikipedia.org/wiki/Cicada_3301</a></li>\r\n<li>Ahoy you channel<br />\r\n<a href=\"https://www.youtube.com/channel/UCE1jXbVAGJQEORz9nZqb5bQ\">https://www.youtube.com/channel/UCE1jXbVAGJQEORz9nZqb5bQ</a></li>\r\n<li>Resilo Sync<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Resilio_Sync\">https://en.wikipedia.org/wiki/Resilio_Sync</a></li>\r\n<li>Mintcast<br />\r\n<a href=\"https://mintcast.org/\">https://mintcast.org/</a></li>\r\n<li>Zoom H2<br />\r\n<a href=\"https://www.zoom-na.com/products/field-video-recording/field-recording/h2-handy-recorder\">https://www.zoom-na.com/products/field-video-recording/field-recording/h2-handy-recorder</a></li>\r\n<li>LG Tone headsets<br />\r\n<a href=\"https://www.lg.com/us/bluetooth-headsets-headphones\">https://www.lg.com/us/bluetooth-headsets-headphones</a></li>\r\n<li>Urbanite XL<br />\r\n<a href=\"https://en-us.sennheiser.com/urbanite-xl\">https://en-us.sennheiser.com/urbanite-xl</a></li>\r\n<li>cmhobbs joins and asks for episode input.  will record winter field day 2019 from northwest arkansas.</li>\r\n\r\n<li>Book & audiobook</li>\r\n<li>Recommendations for books:<br />\r\n<ol>\r\n<li>Daemon by Daniel Suarez, <a href=\"https://daniel-suarez.com/\">https://daniel-suarez.com/</a></li>\r\n<li>Skyward by Brandon Sanderson, <a href=\"https://brandonsanderson.com/books/skyward/skyward/\">https://brandonsanderson.com/books/skyward/skyward/</a></li>\r\n</ol>\r\n</li>\r\n<li>Audiobook reading tips:<br />\r\n<ol>\r\n<li>To get into audiobooks, try listening to a book you\'ve read before</li>\r\n<li>Try increasing or decreasing the speed of the book</li>\r\n<li>Use the TTS feature of your eBook reader to create your own audiobooks</li>\r\n<li>Oddity of TTS mispronouncing words can be fun or frustrating</li>\r\n</ol>\r\n<li>Linux desktop upgrade fun</li>\r\n<li>MX Linux<br />\r\n<a href=\"https://mxlinux.org/\">https://mxlinux.org/</a></li>\r\n<li>AntiX Linux<br />\r\n<a href=\"https://antixlinux.com/\">https://antixlinux.com/</a></li>\r\n<li>exwm<br />\r\n<a href=\"https://github.com/ch11ng/exwm\">https://github.com/ch11ng/exwm</a></li>\r\n<li>ZFS on Linux<br />\r\n<a href=\"https://zfsonlinux.org/\">https://zfsonlinux.org/</a></li>\r\n<li>Dell venue 11 pro<br />\r\n<a href=-\"https://www.dell.com/en-us/work/shop/cty/venue-11-pro/spd/dell-venue-11-pro\">https://www.dell.com/en-us/work/shop/cty/venue-11-pro/spd/dell-venue-11-pro</a></li>\r\n<li>Acer aspire 1<br />\r\n<a href=\"https://www.acer.com/ac/en/US/content/series/aspire1\">https://www.acer.com/ac/en/US/content/series/aspire1</a></li>\r\n</ul>\r\n',159,121,0,'CC-BY-SA','HPR new years show, new years, community',0,0,1),
(2840,'2019-06-21','2018-2019 New Years Eve show part 3',7293,'The HPR community comes together to say happy new year and chat','<h2>Hacker Public Radio New Years Show episode 3</h2>\r\n<p>Welcome to the 7th Annual Hacker Public Radio New Years Show. 2018-2019</p>\r\n<ul>\r\n<li>Gaming PC vs Console</li>\r\n<li>Steam<br />\r\n<a href=\"https://store.steampowered.com/\">https://store.steampowered.com/</a></li>\r\n<li>Gaming on Linux with Proton<br />\r\n<a href=\"https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561\">https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561</a></li>\r\n<li>Good ol Games<br />\r\n<a href=\"https://www.gog.com/\">https://www.gog.com/</a></li>\r\n<li>Humble Bundle<br />\r\n<a href=\"https://www.humblebundle.com/\">https://www.humblebundle.com/</a></li>\r\n<li>God of War<br />\r\n<a href=\"https://godofwar.playstation.com/\">https://godofwar.playstation.com/</a></li>\r\n<li>The Witcher<br />\r\n<a href=\"https://thewitcher.com/en/\">https://thewitcher.com/en/</a></li>\r\n<li>Ghost of Tsushima<br />\r\n<a href=\"https://www.suckerpunch.com/category/games/ghost-of-tsushima/\">https://www.suckerpunch.com/category/games/ghost-of-tsushima/</a></li>\r\n<li>Plumble<br />\r\n<a href=\"https://play.google.com/store/apps/details?id=com.morlunk.mumbleclient.free&hl=en_US\">https://play.google.com/store/apps/details?id=com.morlunk.mumbleclient.free&hl=en_US</a></li>\r\n<li>mint cast<br />\r\n<a href=\"https://mintcast.org/\">https://mintcast.org/</a></li>\r\n<li>Free DOS<br />\r\n<a href=\"https://www.freedos.org/\">https://www.freedos.org/</a></li>\r\n<li>Compact flash<br />\r\n<a href=\"https://en.wikipedia.org/wiki/CompactFlash\">https://en.wikipedia.org/wiki/CompactFlash</a></li>\r\n<li>rtl-sdr<br />\r\n<a href=\"https://www.amazon.com/RTL-SDR-Blog-RTL2832U-Software-Defined/dp/B0129EBDS2\">https://www.amazon.com/RTL-SDR-Blog-RTL2832U-Software-Defined/dp/B0129EBDS2</a></li>\r\n<li>Cigarettes</li>\r\n<li>Taxing</li>\r\n<li>Alcohol</li>\r\n<li>Old Speckled Hen beer<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Old_Speckled_Hen\">https://en.wikipedia.org/wiki/Old_Speckled_Hen</a></li>\r\n<li>Motorcycles</li>\r\n<li>Harley Davidson<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Harley-Davidson\">https://en.wikipedia.org/wiki/Harley-Davidson</a></li>\r\n<li>Electric Cars</li>\r\n</ul>\r\n',159,121,0,'CC-BY-SA','HPR new years show, new years, community',0,0,1),
(2845,'2019-06-28','2018-2019 New Years Eve show part 4',10265,'The HPR community comes together to say happy new year and chat','<h2>Hacker Public Radio New Years Show episode 4</h2>\r\n<p>Welcome to the 7th Annual Hacker Public Radio New Years Show. 2018-2019</p>\r\n<ul>\r\n<li>3D Printing</li>\r\n<li>OSMC<br />\r\n<a href=\"https://osmc.tv/\">https://osmc.tv/</a></li>\r\n<li>Anet A8<br />\r\n<a href=\"https://3dprint.wiki/reprap/anet/a8\">https://3dprint.wiki/reprap/anet/a8</a></li>\r\n<li>Dell Venue 11 pro 7130<br />\r\n<ol>\r\n<li><a href=\"https://www.cnet.com/products/dell-venue-11-pro/specs/\">https://www.cnet.com/products/dell-venue-11-pro/specs/</a></li>\r\n<li><a href=\"https://www.studioteabag.com/science/dell-venue-pro-linux/DV11P/\">https://www.studioteabag.com/science/dell-venue-pro-linux/DV11P/</a></li>\r\n</ol>\r\n</li>\r\n<li>Drag vape<br />\r\n<a href=\"https://en.voopootech.com/drag-param\">https://en.voopootech.com/drag-param</a></li>\r\n<li>Gigabyte Brix<br />\r\n<a href=\"https://www.gigabyte.com/us/Mini-PcBarebone\">https://www.gigabyte.com/us/Mini-PcBarebone</a></li>\r\n<li>SDR talk</li>\r\n<li>DSP hack a day<br />\r\n<a href=\"https://hackaday.com/tag/dsp/\">https://hackaday.com/tag/dsp/</a></li>\r\n<li>Mastodon<br />\r\n<a href=\"https://joinmastodon.org/\">https://joinmastodon.org/</a></li>\r\n<li>hpr 2627 Home phone setup<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2627\">https://hackerpublicradio.org/eps.php?id=2627</a></li>\r\n<li>Asterisk<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Asterisk_(PBX)\">https://en.wikipedia.org/wiki/Asterisk_(PBX)</a></li>\r\n<li>Hanging LED lights</li>\r\n<li>The Wall</li>\r\n<li>Clipper chip<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Clipper_chip\">https://en.wikipedia.org/wiki/Clipper_chip</a></li>\r\n<li>Podcasting</li>\r\n<li>Time zones yet again</li>\r\n<li>Firearms</li>\r\n<li>President Trump</li>\r\n<li>Linux action news<br />\r\n<a href=\"https://linuxactionnews.com/\">https://linuxactionnews.com/</a></li>\r\n<li>Late night Linux<br />\r\n<a href=\"https://latenightlinux.com/\">https://latenightlinux.com/</a></li>\r\n<li>User error<br />\r\n<a href=\"https://www.jupiterbroadcasting.com/show/error/\">https://www.jupiterbroadcasting.com/show/error/</a></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR new years show, new years, community',0,0,1),
(2825,'2019-05-31','More text to speech trials',286,'A supplementary show to Jeroens episode 2792','<p>\r\nA supplementary show to Jeroens episode <a href=\"https://hackerpublicradio.org/eps.php?id=2792\">HPR2792 :: Playing around with text to speech synthesis on Linux</a>.\r\n</p>\r\n<p>\r\nI found two addional options. The first is <a href=\"https://mimic.mycroft.ai/\">mimic</a>\r\n</p>\r\n<pre>\r\n# dnf info mimic\r\nSummary      : Mycroft\'s TTS engine\r\nURL          : https://mimic.mycroft.ai/\r\nLicense      : BSD\r\nDescription  : Mimic is a fast, lightweight Text-to-speech engine developed by Mycroft A.I.\r\n             : and VocalID, based on Carnegie Mellon University’s FLITE software. Mimic takes\r\n             : in text and reads it out loud to create a high quality voice. Mimic\'s\r\n             : low-latency, small resource footprint, and good quality voices set it apart\r\n             : from other open source text-to-speech projects.\r\n</pre>\r\n\r\n<p>\r\nAnd the second is <a href=\"https://gtts.readthedocs.io/en/latest/index.html\">gTTS</a> which is a interface to the google TTS api.\r\n</p>\r\n',30,0,0,'CC-BY-SA','gTTS, Mimic, tts',0,0,1),
(2848,'2019-07-03','Random numbers in Haskell',1957,'Tuula talks how to generate random numbers (and other values) in Haskell','<p>There’s lots of random and similar sounding words in this episode. I hope you can still follow what I’m trying to explain, but I’m aware that it might be hard.</p>\r\n<p>Haskell functions are pure, meaning that they will always produce same values for same set of arguments. This might sound hard when you want to generate random numbers, but it turns out that the solution isn’t too tricky.</p>\r\n<p>First part to the puzzle is type class <code>RandomGen</code>:</p>\r\n<pre><code>class RandomGen g where\r\n    next :: g -&gt; (Int, g)\r\n    genRange :: g -&gt; (Int, Int)\r\n    split :: g -&gt; (g, g)</code></pre>\r\n<p><code>next</code> produces tuple, where first element is random <code>Int</code> and second element is new random generator. <code>genRange</code> returns tuple defining minimum and maximum values this generator will return. <code>split</code> produces tuple with two new random generators.</p>\r\n<p>Using <code>RandomGen</code> to produce random values of specific type or for specific range requires a bit of arithmetic. It’s easier to use <code>Random</code> that defines functions for that specific task:</p>\r\n<pre><code>class Random a where\r\n    randomR :: RandomGen g =&gt; (a, a) -&gt; g -&gt; (a, g)\r\n    random :: RandomGen g =&gt; g -&gt; (a, g)\r\n    randomRs :: RandomGen g =&gt; (a, a) -&gt; g -&gt; [a]\r\n    randoms :: RandomGen g =&gt; g -&gt; [a]\r\n    randomRIO :: (a, a) -&gt; IO a\r\n    randomIO :: IO a</code></pre>\r\n<ul>\r\n<li><code>randomR</code>, when given range and random generator, produces tuple with random number and new generator</li>\r\n<li><code>random</code>, is similar but doesn’t take range. Instead it will use minimum and maximum specific to that data type</li>\r\n<li><code>randomRs</code>, takes range and produces infinite list of random values within that range</li>\r\n<li><code>randoms</code>, simply produces infinite list of random values using range that is specific to datatype</li>\r\n<li><code>randomRIO</code> and <code>randomIO</code> are effectful versions that don’t need random generator, but use some default one</li>\r\n</ul>\r\n<p>In short, <code>RandomGen</code> is source of randomness and <code>Random</code> is datatype specific way of generating random values using random generator <code>RandomGen</code>.</p>\r\n<p>Final part of the puzzle is where to get <code>RandomGen</code>? One could initialize one manually, but then it wouldn’t be random. However, there’s function <code>getStdGen</code> that will seed <code>RandomGen</code> using OS default random number generator, current time or some other method. Since it has signature of <code>getStdGen :: IO StdGen</code>, one can only call it in IO monad.</p>\r\n<p>Functions that operate with IO can only be called from other IO functions. They can call pure functions, but pure functions can’t call them. So there’s two options: have the code that needs random numbers in effectful function or get <code>RandomGen</code> in effectful function and pass it to pure function.</p>\r\n<h2 id=\"example\">Example</h2>\r\n<pre><code>import System.Random\r\nimport Data.List\r\n\r\n-- | get n unique entries from given list in random order\r\n-- | if n &gt; length of list, all items of the list will be returned\r\ngetR :: RandomGen g =&gt; g -&gt; Int -&gt; [a] -&gt; [a]\r\ngetR g n xs =\r\n    fmap (xs !!) ids\r\n    where\r\n        ids = take (min n $ length xs) $ nub $ randomRs (0, length xs - 1) g\r\n\r\n-- | Returns 4 unique numbers between 1 and 10 (inclusive)\r\ntest :: IO [Int]\r\ntest = do\r\n    g &lt;- getStdGen\r\n    return $ getR g 4 [1..10]</code></pre>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>Pseudo randomness doesn’t require IO, only seeding the generator does. Simple computation that don’t require many calls to <code>random</code> are easy enough. If you need lots of random values, <a href=\"https://hackage.haskell.org/package/MonadRandom-0.4.1/docs/Control-Monad-Random-Class.html\"><code>MonadRandom</code></a> is better suited. It takes care of carrying implicit <code>RandomGen</code> along while your computation progresses.</p>\r\n<p>Best way to catch me nowadays is either email or fediverse where I’m <code>Tuula@mastodon.social</code></p>\r\n',364,107,0,'CC-BY-SA','haskell, random numbers',0,0,1),
(2820,'2019-05-24','29 - CERT Home Security Tips',1337,'What CERT recommends to mitigate security and privacy threats to your home network.','<p>The Computer Emergency Readiness Team of the US Department of Homeland Security issues a security bulletin, ST15-002, which has tips for home network security. In this episode we review these tips and why they make sense.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.us-cert.gov/ncas/tips/ST15-002\" class=\"uri\">https://www.us-cert.gov/ncas/tips/ST15-002</a></li>\r\n<li><a href=\"https://www.zwilnik.com/\" class=\"uri\">https://www.zwilnik.com/</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','Home Networks, Security',0,0,1),
(2821,'2019-05-27','Interviewing some exhibitors at the 2019 vcfe.org event',2784,'I interviewed some of the exhibitors at the recent vcfe.org event in Munich, Germany.','<p>I visited the vcfe.org event in Munich, Germany.</p>\r\n<p>Below you will find some urls for the projects that I came across.</p>\r\n<ul>\r\n<li>Steckschwein 6502 computer: <a href=\"https://steckschwein.de/\" class=\"uri\">https://steckschwein.de/</a></li>\r\n<li>Siemens Simatic S5 PLC: <a href=\"https://en.wikipedia.org/wiki/Simatic_S5_PLC\" class=\"uri\">https://en.wikipedia.org/wiki/Simatic_S5_PLC</a></li>\r\n<li>CP/M operating system: <a href=\"https://en.wikipedia.org/wiki/CP/M\" class=\"uri\">https://en.wikipedia.org/wiki/CP/M</a></li>\r\n<li>Old fashioned MUD game Nemesis: <a href=\"https://nemesis.de\" class=\"uri\">https://nemesis.de</a></li>\r\n<li>Eastern Germany Robotron hardware: <a href=\"https://en.wikipedia.org/wiki/VEB_Robotron\" class=\"uri\">https://en.wikipedia.org/wiki/VEB_Robotron</a></li>\r\n</ul>\r\n<p>If you like these things, the next exhibition will be in September in Berlin (you can find more info on <a href=\"https://vcfb.de/2019/\">vcfb.de</a>).</p>\r\n<p>Regards, Jeroen Baten</p>',369,78,0,'CC-BY-SA','vcfe, vintage, computers, exhibition, munich, germany',0,0,1),
(3111,'2020-07-06','HPR Community News for June 2020',3596,'Dave struggles to keep Ken on track as they talk about shows and comments in June 2020','<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=3086\" target=\"_blank\">3086</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-06-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3086\" target=\"_blank\">HPR Community News for May 2020</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=3087\" target=\"_blank\">3087</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-06-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3087\" target=\"_blank\">Phonetic alphabet</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=3088\" target=\"_blank\">3088</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-06-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3088\" target=\"_blank\">Matchbox Restoration Part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3089\" target=\"_blank\">3089</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-06-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3089\" target=\"_blank\">For my Entertainment</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=3090\" target=\"_blank\">3090</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-06-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3090\" target=\"_blank\">Locating Computer on a Enterprise Network</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=3091\" target=\"_blank\">3091</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-06-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3091\" target=\"_blank\">fuguserv</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=3092\" target=\"_blank\">3092</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-06-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3092\" target=\"_blank\">Pens, pencils, paper and ink - 2</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=3093\" target=\"_blank\">3093</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-06-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3093\" target=\"_blank\">Response to Linux Inlaws S01E06 (hpr 3079) on NeXT</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=3094\" target=\"_blank\">3094</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-06-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3094\" target=\"_blank\">Holy crud! I have a kinesis advantage 2 keyboard!</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0115.html\" target=\"_blank\">sigflup</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3095\" target=\"_blank\">3095</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-06-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3095\" target=\"_blank\">Intro to GIMP</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=3096\" target=\"_blank\">3096</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-06-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3096\" target=\"_blank\">Unscripted ramblings on a walk:  PC Building.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3097\" target=\"_blank\">3097</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-06-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3097\" target=\"_blank\">Linux Inlaws S01E07 The Big Blue Button</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3098\" target=\"_blank\">3098</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-06-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3098\" target=\"_blank\">Matchbox Restoration Part 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3099\" target=\"_blank\">3099</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-06-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3099\" target=\"_blank\">Linux Inlaws S01E08 The review of the review</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3100\" target=\"_blank\">3100</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-06-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3100\" target=\"_blank\">For your consideration - Makers Corner</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=3101\" target=\"_blank\">3101</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-06-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3101\" target=\"_blank\">Metrics</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=3102\" target=\"_blank\">3102</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-06-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3102\" target=\"_blank\">RFC 5005 Part 2 – Webcomics, subscribers and feed readers</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3103\" target=\"_blank\">3103</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-06-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3103\" target=\"_blank\">A warning about browser extensions and add-ons.</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=3104\" target=\"_blank\">3104</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-06-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3104\" target=\"_blank\">HPR AudioBook Club 19 - Tincture: An Apocalyptic Proposition</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3105\" target=\"_blank\">3105</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-06-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3105\" target=\"_blank\">Akaso EK7000 Pro</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=3106\" target=\"_blank\">3106</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-06-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3106\" target=\"_blank\">Linux Inlaws S01E09 Postgres</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3107\" target=\"_blank\">3107</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-06-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3107\" target=\"_blank\">Generating comfortable passwords</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0385.html\" target=\"_blank\">crvs</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 23 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=3056#comments\" target=\"_blank\">hpr3056</a></strong>\n(2020-04-20) \"<em>Jitsi</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3056#8\" target=\"_blank\">Comment 8</a>:\noperat0r on 2020-06-13:\n\"dERp\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3072#comments\" target=\"_blank\">hpr3072</a></strong>\n(2020-05-12) \"<em>The joy of pip-tools and pyenv-virtualenv</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3072#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2020-06-02:\n\"The joy is real\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3079#comments\" target=\"_blank\">hpr3079</a></strong>\n(2020-05-21) \"<em>Linux Inlaws S01E06 Porn and Trump</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3079#1\" target=\"_blank\">Comment 1</a>:\nfrank on 2020-06-15:\n\"The sketch\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3082#comments\" target=\"_blank\">hpr3082</a></strong>\n(2020-05-26) \"<em>RFC 5005 Part 1 – Paged and archived feeds? Who cares?</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3082#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2020-06-02:\n\"Atom \"tombstones\" RFC\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3083#comments\" target=\"_blank\">hpr3083</a></strong>\n(2020-05-27) \"<em>Mumbling while on lockdown</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=3083#3\" target=\"_blank\">Comment 3</a>:\nWindigo on 2020-06-03:\n\"Modern Sheevaplug support\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3083#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2020-06-04:\n\"Re: Modern Sheevaplug support\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 17 comments on 11 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3087#comments\" target=\"_blank\">hpr3087</a></strong>\n(2020-06-02) \"<em>Phonetic alphabet</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=3087#1\" target=\"_blank\">Comment 1</a>:\ncrvs on 2020-06-02:\n\"you forgot november\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3090#comments\" target=\"_blank\">hpr3090</a></strong>\n(2020-06-05) \"<em>Locating Computer on a Enterprise Network</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=3090#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2020-06-05:\n\"Thanks for reminding me\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3090#2\" target=\"_blank\">Comment 2</a>:\ncmhobbs on 2020-06-08:\n\"quality episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3091#comments\" target=\"_blank\">hpr3091</a></strong>\n(2020-06-08) \"<em>fuguserv</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=3091#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2020-06-08:\n\"read only router\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3091#2\" target=\"_blank\">Comment 2</a>:\nlZen_Floater1 on 2020-06-11:\n\"READ ONLY ROOTS\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3093#comments\" target=\"_blank\">hpr3093</a></strong>\n(2020-06-10) \"<em>Response to Linux Inlaws S01E06 (hpr 3079) on NeXT</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3093#1\" target=\"_blank\">Comment 1</a>:\nmonochromec on 2020-05-27:\n\"The review of the review\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3094#comments\" target=\"_blank\">hpr3094</a></strong>\n(2020-06-11) \"<em>Holy crud! I have a kinesis advantage 2 keyboard!</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0115.html\" target=\"_blank\">sigflup</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3094#1\" target=\"_blank\">Comment 1</a>:\ncmhobbs on 2020-06-11:\n\"great keyboard\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3095#comments\" target=\"_blank\">hpr3095</a></strong>\n(2020-06-12) \"<em>Intro to GIMP</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=3095#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-06-14:\n\"the gimp\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3095#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-06-14:\n\"I\'m glad it helped\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3096#comments\" target=\"_blank\">hpr3096</a></strong>\n(2020-06-15) \"<em>Unscripted ramblings on a walk:  PC Building.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3096#1\" target=\"_blank\">Comment 1</a>:\nMike Brehm on 2020-06-17:\n\"Productive walk\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3096#2\" target=\"_blank\">Comment 2</a>:\ncmhobbs on 2020-06-21:\n\"re: productive walk\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3099#comments\" target=\"_blank\">hpr3099</a></strong>\n(2020-06-18) \"<em>Linux Inlaws S01E08 The review of the review</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3099#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2020-06-18:\n\"All According to Plan! }:-)\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3100#comments\" target=\"_blank\">hpr3100</a></strong>\n(2020-06-19) \"<em>For your consideration - Makers Corner</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=3100#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-06-19:\n\"a book recommendation\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3101#comments\" target=\"_blank\">hpr3101</a></strong>\n(2020-06-22) \"<em>Metrics</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=3101#1\" target=\"_blank\">Comment 1</a>:\nClinton Roy on 2020-06-22:\n\"Looking forward to further episodes.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3101#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-06-22:\n\"Excellent!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3101#3\" target=\"_blank\">Comment 3</a>:\nbrian-in-ohio on 2020-06-22:\n\"more episodes\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3107#comments\" target=\"_blank\">hpr3107</a></strong>\n(2020-06-30) \"<em>Generating comfortable passwords</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0385.html\" target=\"_blank\">crvs</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3107#1\" target=\"_blank\">Comment 1</a>:\nsigflup on 2020-06-30:\n\"Thanks\"</li></ul><br/>\n</li></ul>\n\n<h2>Mailing List discussions</h2>\n<p>\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the <a href=\"https://hackerpublicradio.org/maillist\"\ntarget=\"_blank\">Mail List</a> which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/\">Mailman</a>.\n</p>\n<p>The threaded discussions this month can be found here:</p>\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-June/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-June/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=\"error-feedback-from-show-notes\">Error feedback from show notes</h3>\n<p>Most of the shows we process require us to make some level of modifications to get them posted. This ranges from fixing tags to a complete rewrite of the shownotes, or verifying whether intros were actually added or not.</p>\n<p>Each modification that we make means that it requires more human intervention and prevents us from being able to completely automate the upload process. In addition there is a non trivial amount of time needed to \"fix\" these issues. This can range from a few minutes to an hour or more per show, and with 260 shows a year this mounts up.</p>\n<p>We normally don\'t contact hosts about these issues as it is usually quicker to fix the issues than composing emails, and waiting for the reply that may never come. For the most part our experience has been that hosts are more than willing to fix these issues if they are aware of them.</p>\n<p>As part of the ongoing steps toward automation, would hosts be open to the idea of getting a processing report once we have posted the show? This would list all the issues the test tools found and the steps that we needed to take to rectify them.</p>\n<h3 id=\"making-changes-to-shows-after-upload\">Making changes to shows after upload</h3>\n<p>Sometimes an error or omission in notes for an HPR episode isn\'t noticed until the show is posted to the site. In recent times a few hosts have sent in their changes by way of comments. This is not ideal:</p>\n<ol type=\"1\">\n<li>There\'s a limit on how much text a comment can hold</li>\n<li>The comment form has a nasty habit of stripping backslashes, so code corrections can be messed up</li>\n<li>We don\'t put comments on the show\'s page on <code>archive.org</code>, so such corrections will not be seen by people reading the notes there</li>\n</ol>\n<p>The HPR admins would prefer changes to be sent in the form of emails to <code>admin at hackerpublicradio.org</code>. They will then be applied to the show notes and the <code>archive.org</code> version updated in step.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 10 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3131,'2020-08-03','HPR Community News for July 2020',7227,'Warning Ken and Dave discuss some disturbing agricultural practices. Listener discretion is advised.','<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=3108\" target=\"_blank\">3108</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-07-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3108\" target=\"_blank\">Fuguita as a Desktop</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=3109\" target=\"_blank\">3109</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-07-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3109\" target=\"_blank\">Matchbox Restoration Part 4</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3110\" target=\"_blank\">3110</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-07-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3110\" target=\"_blank\">Finding an Android phone to run LineageOS</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=3111\" target=\"_blank\">3111</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-07-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3111\" target=\"_blank\">HPR Community News for June 2020</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=3112\" target=\"_blank\">3112</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-07-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3112\" target=\"_blank\">finishing the frame on the long wheelbase recumbent</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3113\" target=\"_blank\">3113</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-07-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3113\" target=\"_blank\">OpenJDK 15 - Unsafe Garbage</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=3114\" target=\"_blank\">3114</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-07-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3114\" target=\"_blank\">Using the Akaso EK7000 Pro</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=3115\" target=\"_blank\">3115</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-07-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3115\" target=\"_blank\">Pest Control</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=3116\" target=\"_blank\">3116</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-07-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3116\" target=\"_blank\">Unscripted ramblings on a walk:  Crisis at The Manor</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3117\" target=\"_blank\">3117</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-07-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3117\" target=\"_blank\">The joy of retro computing</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3118\" target=\"_blank\">3118</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-07-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3118\" target=\"_blank\">Linux Inlaws S01E10 The Python Bumper Part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3119\" target=\"_blank\">3119</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-07-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3119\" target=\"_blank\">Converting to FFS2</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=3120\" target=\"_blank\">3120</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-07-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3120\" target=\"_blank\">How open are roleplaying games?</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=3121\" target=\"_blank\">3121</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-07-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3121\" target=\"_blank\">Opposing Views on Tattoos</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0215.html\" target=\"_blank\">Windigo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3122\" target=\"_blank\">3122</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-07-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3122\" target=\"_blank\">Devuan review - and commentary</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=3123\" target=\"_blank\">3123</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-07-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3123\" target=\"_blank\">Arduino controlled Christmas lights</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=3124\" target=\"_blank\">3124</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-07-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3124\" target=\"_blank\">Matchbox Restoration Part 5</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3125\" target=\"_blank\">3125</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-07-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3125\" target=\"_blank\">GIMP: The Canvas</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=3126\" target=\"_blank\">3126</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-07-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3126\" target=\"_blank\">Metrics part II</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=3127\" target=\"_blank\">3127</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-07-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3127\" target=\"_blank\">HPR AudioBook Club 20 - Quarter Share</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3128\" target=\"_blank\">3128</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-07-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3128\" target=\"_blank\">Linux Inlaws S01E11 The Python Bumper Part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3129\" target=\"_blank\">3129</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-07-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3129\" target=\"_blank\">Followup on HPR3122</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=3130\" target=\"_blank\">3130</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-07-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3130\" target=\"_blank\">More Quick Tips</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0036.html\" target=\"_blank\">operat0r</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 33 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=2774#comments\" target=\"_blank\">hpr2774</a></strong>\n(2019-03-21) \"<em>CJDNS and Yggdrasil</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0374.html\" target=\"_blank\">aldenp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2774#6\" target=\"_blank\">Comment 6</a>:\nSam on 2020-07-19:\n\"hpr2774 :: CJDNS and Yggdrasil\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3097#comments\" target=\"_blank\">hpr3097</a></strong>\n(2020-06-16) \"<em>Linux Inlaws S01E07 The Big Blue Button</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3097#1\" target=\"_blank\">Comment 1</a>:\nan anonymous listener on 2020-07-02:\n\"free software licensing\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3097#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-07-02:\n\"Good interview\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3106#comments\" target=\"_blank\">hpr3106</a></strong>\n(2020-06-29) \"<em>Linux Inlaws S01E09 Postgres</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3106#1\" target=\"_blank\">Comment 1</a>:\nBob on 2020-07-03:\n\"Levels\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3106#2\" target=\"_blank\">Comment 2</a>:\nBruce Momjian on 2020-07-07:\n\"Amazon\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 28 comments on 12 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3108#comments\" target=\"_blank\">hpr3108</a></strong>\n(2020-07-01) \"<em>Fuguita as a Desktop</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=3108#1\" target=\"_blank\">Comment 1</a>:\nLuna Jernberg on 2020-07-01:\n\"Firefox Flatpak\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3108#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2020-07-27:\n\"SD Card + encrypted hard drive\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3109#comments\" target=\"_blank\">hpr3109</a></strong>\n(2020-07-02) \"<em>Matchbox Restoration Part 4</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3109#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2020-07-04:\n\"Very cool topic\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3111#comments\" target=\"_blank\">hpr3111</a></strong>\n(2020-07-06) \"<em>HPR Community News for June 2020</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=3111#1\" target=\"_blank\">Comment 1</a>:\ncrvs on 2020-07-07:\n\"On math @ HPR\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3115#comments\" target=\"_blank\">hpr3115</a></strong>\n(2020-07-10) \"<em>Pest Control</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=3115#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-07-12:\n\"surprise\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3116#comments\" target=\"_blank\">hpr3116</a></strong>\n(2020-07-13) \"<em>Unscripted ramblings on a walk:  Crisis at The Manor</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0241.html\" target=\"_blank\">Christopher M. Hobbs</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3116#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-07-13:\n\"network\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3116#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2020-07-14:\n\"Co-op hosting\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3116#3\" target=\"_blank\">Comment 3</a>:\nbk on 2020-07-15:\n\"Please tell us about how you built the Manor\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3117#comments\" target=\"_blank\">hpr3117</a></strong>\n(2020-07-14) \"<em>The joy of retro computing</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3117#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-07-15:\n\"computer learning today\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3118#comments\" target=\"_blank\">hpr3118</a></strong>\n(2020-07-15) \"<em>Linux Inlaws S01E10 The Python Bumper Part 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3118#1\" target=\"_blank\">Comment 1</a>:\nGuido on 2020-07-15:\n\"Nice episode on a weird language\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3119#comments\" target=\"_blank\">hpr3119</a></strong>\n(2020-07-16) \"<em>Converting to FFS2</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=3119#1\" target=\"_blank\">Comment 1</a>:\nan anonymous listener on 2020-07-23:\n\"security is hard\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3119#2\" target=\"_blank\">Comment 2</a>:\nGumnos on 2020-07-29:\n\"OpenBSD on a Mini10\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3121#comments\" target=\"_blank\">hpr3121</a></strong>\n(2020-07-20) \"<em>Opposing Views on Tattoos</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0215.html\" target=\"_blank\">Windigo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3121#1\" target=\"_blank\">Comment 1</a>:\nKlaatu on 2020-07-29:\n\"Team Mrs. Honeyhume\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3121#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2020-07-31:\n\"I have an aversion to tattoos\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3122#comments\" target=\"_blank\">hpr3122</a></strong>\n(2020-07-21) \"<em>Devuan review - and commentary</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=3122#1\" target=\"_blank\">Comment 1</a>:\nbittin on 2020-07-21:\n\"Politics\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#2\" target=\"_blank\">Comment 2</a>:\nDan on 2020-07-21:\n\"Purposely misleading episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2020-07-21:\n\"Updated show notes\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#4\" target=\"_blank\">Comment 4</a>:\ndraxil on 2020-07-21:\n\"Very interesting listen\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#5\" target=\"_blank\">Comment 5</a>:\nb-yeezi on 2020-07-22:\n\"Interesting but misleading title\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#6\" target=\"_blank\">Comment 6</a>:\nKo on 2020-07-23:\n\"Misuse of HPR\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#7\" target=\"_blank\">Comment 7</a>:\nKen Fallon on 2020-07-24:\n\"Apologies to Zen_Floater2\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#8\" target=\"_blank\">Comment 8</a>:\nx on 2020-07-26:\n\"Good!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#9\" target=\"_blank\">Comment 9</a>:\nigottrolledintolisteningtothis on 2020-07-27:\n\"Title should be\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3122#10\" target=\"_blank\">Comment 10</a>:\nbrian-in-ohio on 2020-07-31:\n\"the ruling\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3126#comments\" target=\"_blank\">hpr3126</a></strong>\n(2020-07-27) \"<em>Metrics part II</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=3126#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2020-07-29:\n\"Etymology of \'geodesic\'\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3126#2\" target=\"_blank\">Comment 2</a>:\nsesamemucho on 2020-07-31:\n\"Special thanks\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3129#comments\" target=\"_blank\">hpr3129</a></strong>\n(2020-07-30) \"<em>Followup on HPR3122</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=3129#1\" target=\"_blank\">Comment 1</a>:\nJan on 2020-07-30:\n\"Zen_Floater2  asked for Comments  on \"Explicit or not\"\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3129#2\" target=\"_blank\">Comment 2</a>:\nbrian-in-ohio on 2020-07-31:\n\"supreme court ruling\"</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/2020-July/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-July/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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0382.html\">Daniel Persson</a></b></p>\n<p>Over the period tags and/or summaries have been added to 81 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2819,'2019-05-23','Reply to Knightwise - podcasts',493,'I provide a slightly different view on podcasts to that recently given by Knightwise.','<p>Knightwise, in <a href=\"https://hackerpublicradio.org/eps.php?id=2798\">HPR 2798</a>, made the argument that podcasts are better if they are done by \"pirates\", i.e. not by corporations, but by individuals with something to say. While I see some merit in this view, I think the more significant feature of podcasts is that it gets us away from \"broadcasting\" (shows aimed at the lowest common denominator) and towards \"narrowcasting\", an environment where small niche interests can find an audience and thrive since podcasting does not require a lot of resources. But I do appreciate the chance to hear some radio programs that I would not otherwise be able to listen to when they are offered as podcasts.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.npr.org/podcasts/583350334/science-friday\" class=\"uri\">https://www.npr.org/podcasts/583350334/science-friday</a></li>\r\n<li><a href=\"https://www.bbc.co.uk/programmes/b00snr0w\" class=\"uri\">https://www.bbc.co.uk/programmes/b00snr0w</a></li>\r\n<li><a href=\"https://www.palain.com\" class=\"uri\">https://www.palain.com</a></li>\r\n</ul>',198,75,0,'CC-BY-SA','podcasts, narrowcasting, broadcasting',0,0,1),
(2849,'2019-07-04','2018-2019 New Years Eve show part 5',7759,'The HPR community comes together to say happy new year and chat','<h2>Hacker Public Radio New Years Show episode 5</h2>\r\n<p>Welcome to the 7th Annual Hacker Public Radio New Years Show. 2018-2019</p>\r\n<ul>\r\n<li>Sans Holiday Hack Challenge<br />\r\n<a href=\"https://www.holidayhackchallenge.com/2018/\">https://www.holidayhackchallenge.com/2018/</a></li>\r\n<li>Hack The Box<br />\r\n<a href=\"https://www.hackthebox.eu/\">https://www.hackthebox.eu/</a></li>\r\n<li>Over the Wire<br />\r\n<a href=\"https://overthewire.org/wargames/\">https://overthewire.org/wargames/</a></li>\r\n<li>Under the Wire<br />\r\n<a href=\"https://underthewire.tech/\">https://underthewire.tech/</a></li>\r\n<li>Gnome Boxes<br />\r\n<a href=\"https://en.wikipedia.org/wiki/GNOME_Boxes\">https://en.wikipedia.org/wiki/GNOME_Boxes</a></li>\r\n<li>Talking about headsets</li>\r\n<li>Mobile operating systems</li>\r\n<li>Plasma Mobile<br />\r\n<a href=\"https://www.plasma-mobile.org/\">https://www.plasma-mobile.org/</a></li>\r\n<li>Kansas Linux Fest<br />\r\n<a href=\"https://kansaslinuxfest.org/\">https://kansaslinuxfest.org/</a></li>\r\n<li>FreeNas<br />\r\n<a href=\"https://freenas.org/?\">https://freenas.org/</a></li>\r\n<li>Talking Desktop Environments</li>\r\n<li>GPD mini laptops<br />\r\n<a href=\"https://www.gpd.hk/\">https://www.gpd.hk/</a></li>\r\n<li>Gemini PDA<br />\r\n<a href=\"https://www.indiegogo.com/projects/gemini-pda-android-linux-keyboard-mobile-device--2#/\">https://www.indiegogo.com/projects/gemini-pda-android-linux-keyboard-mobile-device--2#/</a></li>\r\n<li>usb-c<br />\r\n<a href=\"https://en.wikipedia.org/wiki/USB-C\">https://en.wikipedia.org/wiki/USB-C</a></li>\r\n<li>Talking uefi<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface\">https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface</a></li>\r\n<li>Boxing day<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Boxing_Day\">https://en.wikipedia.org/wiki/Boxing_Day</a></li>\r\n<li>UK vs US</li>\r\n<li>More Brexit talk<br />\r\n<a href=\"https://www.bbc.com/news/uk-politics-32810887\">https://www.bbc.com/news/uk-politics-32810887</a></li>\r\n<li>year 2038 problem<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Year_2038_problem\">https://en.wikipedia.org/wiki/Year_2038_problem</a></li>\r\n<li>LXQT desktop<br />\r\n<a href=\"https://lxqt.org/\">https://lxqt.org/</a></li>\r\n<li>Enlightenment desktop<br />\r\n<a href=\"https://www.enlightenment.org/\">https://www.enlightenment.org/</a></li>\r\n<li>gnome boxes<br />\r\n<a href=\"https://wiki.gnome.org/Apps/Boxes\">https://wiki.gnome.org/Apps/Boxes</a></li>\r\n</ul>\r\n\r\n\r\n',159,121,1,'CC-BY-SA','HPR new years show, new years, community',0,0,1),
(2850,'2019-07-05','NIST Cybersecurity Framework',1702,'What NIST suggests as a framework to improve security at the  Enterprise level','<p>The National Institute of Standards and Technology of the US Government issued the NIST Cybersecurity Framework, which has recommendations for private companies and mandates for U.S. Government agencies. For people who work in information security in an Enterprise environment, this framework may be of interest, so we will take a walk through it.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/National_Institute_of_Standards_and_Technology\" class=\"uri\">https://en.wikipedia.org/wiki/National_Institute_of_Standards_and_Technology</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/NIST_Cybersecurity_Framework\" class=\"uri\">https://en.wikipedia.org/wiki/NIST_Cybersecurity_Framework</a></li>\r\n<li><a href=\"https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.04162018.pdf\" class=\"uri\">https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.04162018.pdf</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=997\" class=\"uri\">https://www.zwilnik.com/?page_id=997</a></li>\r\n</ul>',198,74,0,'CC-BY-SA','Enterprise, Security',0,0,1),
(2860,'2019-07-19','Encryption and Quantum Computing',757,'How will quantum computing affect the security of encryption?','<p>The Quantum Computer is supposed to be a game changer that renders encryption useless. But is this true? We look at how quantum computing will affect encryption going forward, and show that we are already working on quantum-resistant encryption.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=530\" class=\"uri\">https://www.zwilnik.com/?page_id=530</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1620\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=1620</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Utah_Data_Center\" class=\"uri\">https://en.wikipedia.org/wiki/Utah_Data_Center</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Quantum_computing\" class=\"uri\">https://en.wikipedia.org/wiki/Quantum_computing</a></li>\r\n<li><a href=\"https://csrc.nist.gov/Projects/Post-Quantum-Cryptography\" class=\"uri\">https://csrc.nist.gov/Projects/Post-Quantum-Cryptography</a></li>\r\n<li><a href=\"https://www.nist.gov/programs-projects/information-security-and-privacy-advisory-board-ispab\" class=\"uri\">https://www.nist.gov/programs-projects/information-security-and-privacy-advisory-board-ispab</a></li>\r\n<li><a href=\"https://csrc.nist.gov/Projects/Post-Quantum-Cryptography/Round-2-Submissions\" class=\"uri\">https://csrc.nist.gov/Projects/Post-Quantum-Cryptography/Round-2-Submissions</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=999\" class=\"uri\">https://www.zwilnik.com/?page_id=999</a></li>\r\n</ul>',198,74,0,'CC-BY-SA','Encryption, Quantum Computing',0,0,1),
(2870,'2019-08-02','Hierarchy of Evidence',865,'All studies are not the same. Some are better than others.','<p>The idea of a Hierarchy of Evidence is that there is a ranking of studies of different kinds in terms of how persuasive they are. It is not enough to simply say that “A study shows…” without also looking at what kind of study it is how powerful the results are. We look at the different kinds of studies and rank them from top to bottom.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Hierarchy_of_evidence\" class=\"uri\">https://en.wikipedia.org/wiki/Hierarchy_of_evidence</a></li>\r\n<li><a href=\"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2707010/\" class=\"uri\">https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2707010/</a></li>\r\n<li><a href=\"https://www.phru.nhs.uk/casp/rcts.htm\" class=\"uri\">https://www.phru.nhs.uk/casp/rcts.htm</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Cohort_study\" class=\"uri\">https://en.wikipedia.org/wiki/Cohort_study</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Framingham_Heart_Study\" class=\"uri\">https://en.wikipedia.org/wiki/Framingham_Heart_Study</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Case-control_studies\" class=\"uri\">https://en.wikipedia.org/wiki/Case-control_studies</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Cross-sectional_study\" class=\"uri\">https://en.wikipedia.org/wiki/Cross-sectional_study</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Case_reports\" class=\"uri\">https://en.wikipedia.org/wiki/Case_reports</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=402\" class=\"uri\">https://www.palain.com/?page_id=402</a></li>\r\n</ul>',198,100,0,'CC-BY-SA','Health, Medicine, Evidence, Science, Studies',0,0,1),
(2880,'2019-08-16','Evaluating a Study',861,'We\'ve developed the standards to judge, so now let\'s do an example!','<p>We take the ideas we have developed over the previous episodes and use them to evaluate a a study I found online. These are things anyone can do with just a little work on Google, and the payoff is to have a good idea of whether or not you are looking at a quality study</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.medicalnewstoday.com/\" class=\"uri\">https://www.medicalnewstoday.com/</a></li>\r\n<li><a href=\"https://www.medicalnewstoday.com/articles/324558.php\" class=\"uri\">https://www.medicalnewstoday.com/articles/324558.php</a></li>\r\n<li><a href=\"https://mediabiasfactcheck.com/medical-news-today/\" class=\"uri\">https://mediabiasfactcheck.com/medical-news-today/</a></li>\r\n<li><a href=\"https://www.quora.com/How-can-I-find-a-replication-of-a-study\" class=\"uri\">https://www.quora.com/How-can-I-find-a-replication-of-a-study</a></li>\r\n<li><a href=\"https://en.m.wikipedia.org/wiki/Web_of_Science\" class=\"uri\">https://en.m.wikipedia.org/wiki/Web_of_Science</a></li>\r\n<li><a href=\"https://www.nature.com/articles/s41551-019-0356-9#MOESM1\" class=\"uri\">https://www.nature.com/articles/s41551-019-0356-9#MOESM1</a></li>\r\n<li><a href=\"https://www.nature.com/natbiomedeng/\" class=\"uri\">https://www.nature.com/natbiomedeng/</a></li>\r\n<li><a href=\"https://www.nature.com/articles/s41551-019-0356-9\" class=\"uri\">https://www.nature.com/articles/s41551-019-0356-9</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=404\" class=\"uri\">https://www.palain.com/?page_id=404</a></li>\r\n</ul>',198,100,0,'CC-BY-SA','Health, Medicine, Evidence, Science, Studies',0,0,1),
(2855,'2019-07-12','2018-2019 New Years Eve show part 6',8486,'The HPR community comes together to say happy new year and chat','<h2>Hacker Public Radio New Years Show episode 6</h2>\r\n<p>Welcome to the 7th Annual Hacker Public Radio New Years Show. 2018-2019</p>\r\n<ul>\r\n<li>The Makerz Podcast<br />\r\n<a href=\"https://podnutz.com/category/themakerz/\">https://podnutz.com/category/themakerz/</a></li>\r\n<li>Tronxy X1<br />\r\n<a href=\"https://all3dp.com/1/tronxy-x1-3d-printer-review/\">https://all3dp.com/1/tronxy-x1-3d-printer-review/</a></li>\r\n<li>SBC talk</li>\r\n<li>Apple Talk</li>\r\n<li>Linux on mobile</li>\r\n<li>more 3d printing talk</li>\r\n<li><a href=\"https://www.newmodeus.com/shop/\">https://www.newmodeus.com/shop/</a></li>\r\n<li>new years food traditions</li>\r\n<li>Cats</li>\r\n<li>The Last Centurion<br />\r\n<a href=\"https://www.amazon.com/Last-Centurion-John-Ringo/dp/1439132917\">https://www.amazon.com/Last-Centurion-John-Ringo/dp/1439132917</a></li>\r\n<li><a href=\"https://www.chewy.com/\">https://www.chewy.com/</a></li>\r\n</ul>',159,121,1,'CC-BY-SA','HPR new years show, new years, community',1,0,1),
(2832,'2019-06-11','How I got started in Linux',168,'This is a very brief introduction on what got me into using Linux.','<p>This is just a brief intro into my introduction to Linux.</p>\r\n',378,29,0,'CC-BY-SA','linux, introduction',0,0,1),
(2836,'2019-06-17','Interview with Wendy Hill',1576,'In this episode, Yannick talks with Wendy Hill about her use of opensource software in her job','<p>Wendy Hill is a photographer. And by that, I don’t mean she takes pictures of her kids on Sundays at the baseball game. Although, if she was to do that, it would probably turn out to be great pictures. No, Wendy is a professional photographer, and to run her business, she uses free and opensource software.</p>\r\n<p>Wait… no Photoshop? No Illustrator? How is that possible? Wendy joined me on Mumble earlier this year – that’s 2019 for you, visitors from the future – and we discussed about that.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.wendyhillphoto.com/\" class=\"uri\">https://www.wendyhillphoto.com/</a></li>\r\n<li><a href=\"https://launchpad.net/lubuntu\" class=\"uri\">https://launchpad.net/lubuntu</a></li>\r\n</ul>\r\n',370,78,0,'CC-BY-SA','opensource,photography,lubuntu,darktable,Rapid Photo Downloader,displaycal,gimp',0,0,1),
(2831,'2019-06-10','Interview with Robbie Ferguson',2347,'In this episode, Yannick talks with Robbie Ferguson about the Nagios Enterprise Monitoring System','<p>When it comes to monitoring your network, and the machines on it, you have a lot of options. But, let’s face it : none of those are easy to implement, and configuring a monitoring tool, whether it’s an open-source or a proprietary one, is often complex and time consuming.</p>\r\n<p>Well, someone took that matter into their own hands, and made <a href=\"https://nemslinux.com/\">NEMS</a>. What is NEMS, how can it help us, and what infrastructure does it require? Those are a few of the questions I asked <a href=\"https://baldnerd.com/\">Robbie Ferguson</a>, the maintainer of NEMS, who joined me on Easter week-end for a little chat.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://nemslinux.com/\" class=\"uri\">https://nemslinux.com/</a></li>\r\n<li><a href=\"https://twitter.com/NEMSLinux\" class=\"uri\">https://twitter.com/NEMSLinux</a></li>\r\n<li><a href=\"https://baldnerd.com/\" class=\"uri\">https://baldnerd.com/</a></li>\r\n</ul>\r\n',370,78,0,'CC-BY-SA','nagios,network,monitoring,opensource,single board computer,sbc,raspberrypi,odroid',0,0,1),
(2837,'2019-06-18','parallax live desktops in android',1040,'Parallax_Wallpaper, mouse gigglers, system d Youtube background play and more ! ','<h2 id=\"parallax-live-desktops-in-android\">parallax live desktops in android</h2>\r\n<ul>\r\n<li><p><a href=\"https://www.linkedin.com/pulse/caffeine-pfft-espresso-robert-mccurdy/\" class=\"uri\">https://www.linkedin.com/pulse/caffeine-pfft-espresso-robert-mccurdy/</a><br />\r\nlinkedin Cafinee.exe MouseGiggler espresso autohotkey</p></li>\r\n<li><p>Systemd linkedin<br />\r\n<a href=\"https://www.linkedin.com/pulse/initd-dead-long-live-robert-mccurdy/\" class=\"uri\">https://www.linkedin.com/pulse/initd-dead-long-live-robert-mccurdy/</a></p></li>\r\n<li><p>linkedin youtube in background<br />\r\n<a href=\"https://www.linkedin.com/pulse/play-youtube-background-robert-mccurdy/\" class=\"uri\">https://www.linkedin.com/pulse/play-youtube-background-robert-mccurdy/</a><br />\r\nViewers can download</p></li>\r\n<li><p><a href=\"https://f-droid.org/repo/org.schabi.newpipe_71.apk\" class=\"uri\">https://f-droid.org/repo/org.schabi.newpipe_71.apk</a></p></li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','youtube downloader,systemd,linux,autohotkey',0,0,1),
(2829,'2019-06-06','Discussion around fair use clips on HPR',1391,'A request for comments on not publishing clips with known fair use samples','<h1>Request for comments</h1>\r\n<p>Hi All,</p>\r\n<p>Under safe harbor provisions, we as volunteers are usually insulated from any copyright issues that may arise in the shows. \"We do not vet, edit, moderate or in any way censor any of the shows on the network, we trust you to do that.\"</p>\r\n<p>This we got by accident <a href=\"https://hackerpublicradio.org/stuff_you_need_to_know.php#not_moderated\">because</a> \"This is a long standing tradition arising from the fact that HPR is a community of peers who believe that any host has as much right to submit shows as any other.\"</p>\r\n<p>In the show notes associated with hpr2829 on 2019-06-06, the host included the following text \"For all included materials: If anyone feels they have right to any material in this show please let me know and I will comply.\"</p>\r\n<p>This violates the HPR <a href=\"https://hackerpublicradio.org/stuff_you_need_to_know.php#permission\">upload policy</a>.</p>\r\n<p>\"Never include content, for example music, in your show that you do not have permission to redistribute. Try to avoid using any content in your show that can not be redistributed under a Creative Commons Attribution-ShareAlike 3.0 Unported license. If you are redistributing under another Creative Commons License or by arranged permission please make note of the restrictions when you upload your show. We can then signal that, so that others who redistribute HPR content can filter your show out.\"</p>\r\n<p>As it was clear that they were not in compliance, I contacted the host. The host has been very helpful and has already removed some of the content but commented \"There are still 2 audio clips included. I claim I can use them on the basis off fair use principles.\"</p>\r\n<p>While the host may be correct, if they are not, then it is me and not the host that will be held responsible for posting it. I do not want that responsibility.</p>\r\n<p>Under the current HPR rules I am allowed to reject this submission.</p>\r\n<p>Before I do, I would appreciate as much feedback as possible on this topic so that we can gauge the opinions of the HPR Community as a whole.</p>\r\n<p>Regards,</p>\r\n<p>Ken. </p>\r\n\r\n<p>The discussion <a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2019-May/014446.html\">thread</a> remains open and is open to all by joining the <a href=\"https://hackerpublicradio.org/mailman/listinfo/hpr_hackerpublicradio.org\">Maillist</a>.</p>',109,0,0,'CC-BY-SA','HPR, Policy Change, Legal, DMCA, TWAT, Fair Use, PacketSniffers, Copyright',0,0,1),
(2827,'2019-06-04','Unscripted ramblings from my garage about my first CTF event',832,'I briefly discss a CTF event I was invited to and what I plan to bring with me.','<h2 id=\"unscripted-ramblings-about-an-upcoming-ctf-event.\">Unscripted ramblings about an upcoming CTF event.</h2>\r\n<h3 id=\"hak5-items-mentioned-hak5.org\">Hak5 items mentioned (hak5.org):</h3>\r\n<ul>\r\n<li>WiFi Pineapple</li>\r\n<li>Bash Bunny (erroneously referred to as a ‘rabbit’)</li>\r\n<li>USB Rubber Ducky</li>\r\n<li>Packet Squirrel</li>\r\n<li>LAN Turtle (unmentioned but I’ll bring one)</li>\r\n</ul>\r\n<h3 id=\"software-mentioned\">Software mentioned:</h3>\r\n<ul>\r\n<li>MetaSploit: <a href=\"https://metasploit.com\">metasploit.com</a></li>\r\n<li>Ronin: <a href=\"https://ronin-ruby.github.io\">ronin-ruby.github.io</a></li>\r\n<li>Maltego: <a href=\"https://www.paterva.com/web7/\">www.paterva.com/web7/</a></li>\r\n<li>Burpsuite: <a href=\"https://portswigger.net/burp/\">portswigger.net/burp/</a></li>\r\n<li>SET: <a href=\"https://trustedsec.com/social-engineer-toolkit-set/\">trustedsec.com/social-engineer-toolkit-set/</a></li>\r\n<li>Parrot Linux: <a href=\"https://parrotsec.org\">parrotsec.org</a></li>\r\n</ul>\r\n<h3 id=\"my-info\">My info:</h3>\r\n<ul>\r\n<li>Chat with us on irc.freenode.net in #manor\r\n<ul>\r\n<li>More info at <a href=\"https://manor.space\" class=\"uri\">https://manor.space</a></li>\r\n</ul></li>\r\n<li>My little business: <a href=\"https://ascia.tech\" class=\"uri\">https://ascia.tech</a></li>\r\n<li>Email: <a href=\"mailto:cmhobbs@member.fsf.org\">cmhobbs@member.fsf.org</a>\r\n<ul>\r\n<li>1200 0808 F968 47AB F489 91A3 FE26 6FFB 1A77 0868</li>\r\n</ul></li>\r\n<li>Other shows by me (in case this one doesn’t get linked)\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0241.html\" class=\"uri\">https://hackerpublicradio.org/correspondents/0241.html</a></li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>CTF: Capture the flag; <a href=\"https://en.wikipedia.org/wiki/Capture_the_flag_(disambiguation)\">Wikipedia disambiguation page</a>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Wargame_(hacking)\">Cyber-security challenge</a></li>\r\n</ul></li>\r\n</ul>\r\n',241,0,0,'CC-BY-SA','ctf, hacking, security, infosec, events, conventions, gear',0,0,1),
(2833,'2019-06-12','Jeroen chats with Joep Piscaer',1176,'Interviewing Joep Piscaer during Loadays in Antwerpen, Belgium','<p>In this show an Interview with Joep Piscaer, recorded during the recent Loadays conference in Antwerpen, Belgium.</p>\r\n<p>Schedule of recent Loadays event: <a href=\"https://cfp.loadays.org/2019/schedule/\">https://cfp.loadays.org/2019/schedule/</a></p>\r\n<p>I mention the \"Cut the crap podcast\", made by Ryan Caligiuri.</p>\r\n<p>And specifically episode 145 as an excellent example of his podcast quality:</p>\r\n<p><a href=\"https://player.fm/series/the-cut-the-crap-show/ep-145-stronger-develop-the-resilience-you-need-to-succeed-with-dr-george-everly\">https://player.fm/series/the-cut-the-crap-show/ep-145-stronger-develop-the-resilience-you-need-to-succeed-with-dr-george-everly</a></p>\r\n<p>At the end of the podcast I a refer to the \"Follow your Gift\" talk, by Steve Harvey.</p>\r\n<p>You can find a recording of this talk on YouTube at <a href=\"https://www.youtube.com/watch?v=3x3rEg2qvcQ\">https://www.youtube.com/watch?v=3x3rEg2qvcQ</a></p>\r\n\r\n',369,78,0,'CC-BY-SA','loadays, ryan caligiuri, steve harvey',0,0,1),
(2834,'2019-06-13','My favorite desktop and android applications',1757,'Moving right along with shows from the requests list, I combine two program lists.','<p>Desktop:</p>\r\n<ul>\r\n<li>xfce4-terminal</li>\r\n<li>globaltime (orage)</li>\r\n<li>xfce4 notes</li>\r\n<li>thunar</li>\r\n<li>firefox</li>\r\n<li>Emacs</li>\r\n<li>claws-mail</li>\r\n<li>weechat</li>\r\n<li>mupdf</li>\r\n<li>gtk-redshift</li>\r\n<li>asunder</li>\r\n<li>keepassx</li>\r\n<li>lucky backup</li>\r\n<li>virtualbox/kvm</li>\r\n<li>xlog</li>\r\n<li>gpredict</li>\r\n<li>arduino ide</li>\r\n<li>tor browser bundle</li>\r\n<li>ledger wallet</li>\r\n<li>xmame</li>\r\n<li>freedoom</li>\r\n<li>rRootage</li>\r\n<li>dia</li>\r\n<li>fbreader</li>\r\n<li>gnumeric/libreoffice</li>\r\n<li>mandelbulber2</li>\r\n<li>gqrx</li>\r\n<li>transmission</li>\r\n<li>xastir</li>\r\n<li>youtube-dl gui</li>\r\n<li>zenmap</li>\r\n<li>mpv</li>\r\n</ul>\r\n<p>Android</p>\r\n<ul>\r\n<li>LineageOS</li>\r\n<li>built in phone</li>\r\n<li>signal</li>\r\n<li>built in fm radio</li>\r\n<li>built in camera</li>\r\n<li>2048</li>\r\n<li>acrylic paint</li>\r\n<li>amsatdroid free</li>\r\n<li>antennapod</li>\r\n<li>aprsdroid</li>\r\n<li>audiofx</li>\r\n<li>barcode scanner</li>\r\n<li>binaural beats</li>\r\n<li>blockinger</li>\r\n<li>blowtorch</li>\r\n<li>built in calendar</li>\r\n<li>call recorder</li>\r\n<li>chroma doze</li>\r\n<li>built in clock</li>\r\n<li>cloudlibrary</li>\r\n<li>built in contacts</li>\r\n<li>danmaku death</li>\r\n<li>echolink</li>\r\n<li>equate</li>\r\n<li>f-droid</li>\r\n<li>fbreader</li>\r\n<li>fennec f-droid</li>\r\n<li>red cross first aid</li>\r\n<li>flashlight</li>\r\n<li>freegal music</li>\r\n<li>gadgetbridge</li>\r\n<li>built in gallery</li>\r\n<li>ghost commander</li>\r\n<li>gobandroid</li>\r\n<li>hoopla</li>\r\n<li>iz2uuf morse code trainer</li>\r\n<li>libby</li>\r\n<li>lightning</li>\r\n<li>mobilinkd tnc</li>\r\n<li>mupdf</li>\r\n<li>netguard</li>\r\n<li>o’reilly</li>\r\n<li>orbot, orfox</li>\r\n<li>osmand~</li>\r\n<li>red cross pet first aid</li>\r\n<li>plumble</li>\r\n<li>propel graviton</li>\r\n<li>radiodroid (radio-browser.info)</li>\r\n<li>recorder</li>\r\n<li>roblox</li>\r\n<li>rpn</li>\r\n<li>sealnote</li>\r\n<li>sim card</li>\r\n<li>simple world clock</li>\r\n<li>space trader</li>\r\n<li>spotify</li>\r\n<li>suntimes, suntimes alarms</li>\r\n<li>survival manual</li>\r\n<li>termux</li>\r\n<li>timber</li>\r\n<li>tsumego pro</li>\r\n<li>ttrss-reader</li>\r\n<li>unifi</li>\r\n<li>vlc</li>\r\n<li>webtube</li>\r\n<li>weechat-android</li>\r\n<li>wifianalyzer</li>\r\n<li>wikipedia</li>\r\n<li>yalp store</li>\r\n<li>yorecast</li>\r\n</ul>\r\n',241,0,0,'CC-BY-SA','programs, linux, android, apps, applications, lists, favorites',0,0,1),
(2841,'2019-06-24','How I got into Linux (and then some...)',1864,'A response to the request for \"how i got into linux\" and a little of my history with Linux/BSD','<p>Basically what it says on the tin. Most distros I mention can be easily searched for. I meander through a discussion of how I got into Linux and where I am with it now.</p>',241,29,0,'CC-BY-SA','linux, intro, story, discourse, bsd',0,0,1),
(2858,'2019-07-17','Vehicle designer for a space game',1404,'Tuula talks about modeling vehicle designer for their space game','<p>This episode is about modeling vehicle designer that can be used to design all kinds of vehicles available in the game. It relates to episode about <a href=\"https://hackerpublicradio.org/eps.php?id=2818\">performing research</a>.</p>\r\n<h2 id=\"major-parts\">Major parts</h2>\r\n<p>Two major parts about vehicle designer are components and chassis.</p>\r\n<p>Components are modular pieces of vehicle that are assembled on chassis. They can, among other things, be things lie star sails, astrolabe navigators or long range sensor. Each component is defined by two values <code>ComponentId</code> and <code>ComponentLevel</code>. If you know these two values, you’ll be able to find out details of the component. <code>ComponentId</code> tells what component it is and <code>ComponentLevel</code> the general knowledge of it. When component is first discovered as a result of research, it’s just a prototype and as a such doesn’t function particularly well. Further research refines it and factories are able to produce higher quality components.</p>\r\n<p>Full definition of component is show below:</p>\r\n<pre><code>data Component = Component\r\n    { componentId :: ComponentId\r\n    , componentLevel :: ComponentLevel\r\n    , componentName :: ComponentName\r\n    , componentDescription :: ComponentDescription\r\n    , componentWeight :: Weight\r\n    , componentSlot :: ComponentSlot\r\n    , componentType :: [ ComponentPower ]\r\n    , componentCost :: RawResources ResourceCost\r\n    , componentChassisType :: ChassisType\r\n    }\r\n    deriving (Show, Read, Eq, Ord)</code></pre>\r\n<p>Two particularly interesting fields are <code>componentSlot</code> and <code>componentType</code>. <code>componentSlot</code> has type of <code>ComponentSlot</code> and defines what kind of slot the component occupies in chassis. As there are limited amount of slots in each chassis, designer needs to make compromises on what components to install. <code>componentType</code> has type of <code>ComponentPower</code>, which defines what component does in general. It could be sensor or provide supplies for the vehicle for example.</p>\r\n<p>Technology requirements are defined by function: <code>componentRequirements :: ComponentId -&gt; Maybe Technology</code>. It defines which technology unlock a given component. Part of the definition is show below. Each and every <code>ComponentId</code> has to be handled.</p>\r\n<pre><code>componentRequirements ShipLongRangeSensors = Just HighSensitivitySensors\r\ncomponentRequirements ShipBridge = Nothing\r\ncomponentRequirements VehicleWheeledMotiveSystem = Nothing\r\ncomponentRequirements VehicleHoverMotiveSystem = Just HoverCrafts\r\n...</code></pre>\r\n<p>Second major part of the designer are chassis. They’re stored in database, as I wanted a bit more flexible system than hardcoding as I did with components. Following piece of configuration is used to define database table and generated data for Haskell code. Most of the fields are probably easy enough to guess. <code>type</code> with type of <code>ChassisType</code> defines if this particular chassis is for example a land vehicle or a space ship. Various slot fields on other hand define amount of particular slots that the chassis offers.</p>\r\n<pre><code>Chassis json\r\n    name ChassisName\r\n    tonnage Weight\r\n    type ChassisType\r\n    technology Technology Maybe\r\n    armourSlots SlotAmount\r\n    innerSlots SlotAmount\r\n    outerSlots SlotAmount\r\n    sensorSlots SlotAmount\r\n    weaponSlots SlotAmount\r\n    engineSlots SlotAmount\r\n    motiveSlots SlotAmount\r\n    sailSlots SlotAmount\r\n    deriving Show Read Eq</code></pre>\r\n<p>Not all chassis are equal and some (probably pretty much every one of them) have some sort of requirements that has to be fulfilled when designing a vehicle. For example, space ships require a bridge for captain and star sails. Bawley, smallest of the working ships has room for two star sails, but requires only one of them to be installed in order to be a valid design. Flyboat on the other hand is smaller ship built for speed and always requires two set of sails.</p>\r\n<p>This data is stored in <code>required_component</code> table and represented as <code>RequiredComponent</code> data. Both are generated from the definition show below:</p>\r\n<pre><code>RequiredComponent json\r\n    chassisId ChassisId\r\n    componentType ComponentType\r\n    level ComponentLevel\r\n    amount ComponentAmount\r\n    deriving Show Read Eq</code></pre>\r\n<h2 id=\"designing-a-vehicle\">Designing a vehicle</h2>\r\n<p>With all that data, we can now design a vehicle. Process is roughly the following:</p>\r\n<ul>\r\n<li>based on completed research, get a list of chassis that are available</li>\r\n<li>select chassis from the list</li>\r\n<li>based on the selected chassis and completed research, get a list of components that are available</li>\r\n<li>select components to install</li>\r\n<li>remember to check that maximum tonnage isn’t exceeded and that there’s enough slots and requirements are met</li>\r\n<li>fill in name</li>\r\n<li>save into database</li>\r\n</ul>\r\n<p>Completed design is saved in two different tables. First one <code>design</code> holds info like name of the design, faction that design belongs to and used chassis. <code>planned_component</code> holds info about which components are planned to be installed and in what quantity.</p>\r\n<pre><code>Design json\r\n    name Text\r\n    ownerId FactionId\r\n    chassisId ChassisId\r\n    deriving Show Read Eq</code></pre>\r\n<p>and</p>\r\n<pre><code>PlannedComponent json\r\n    designId DesignId\r\n    componentId ComponentId\r\n    level ComponentLevel\r\n    amount ComponentAmount\r\n    deriving Show Read Eq</code></pre>\r\n<p>As a little teaser, below is an screenshot of what the vehicle designer currently looks like.</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2858_1.png\" alt=\"Screenshot of vehicle designer showing chassis and components\" /></p>\r\n<h2 id=\"finally\">Finally</h2>\r\n<p>Thanks for interest. If you have questions or comments, best way to reach me nowadays is either by email or in fediverse, where I’m <code>Tuula@mastodon.social</code>.</p>\r\n',364,107,0,'CC-BY-SA','haskell',0,0,1),
(2859,'2019-07-18','2018-2019 New Years Eve show part 7',10714,'The HPR community comes together to say happy new year and chat','<h2>Hacker Public Radio New Years Show episode 7</h2>\r\n<p>Welcome to the 7th Annual Hacker Public Radio New Years Show. 2018-2019</p>\r\n<ul>\r\n<li>Trucking</li>\r\n<li>Patrick Stewart and Bret Spiner<br />\r\n<a href=\"https://www.youtube.com/watch?v=l5zQIKeh9B4\">https://www.youtube.com/watch?v=l5zQIKeh9B4</a><br />\r\n<a href=\"https://www.youtube.com/watch?v=EvJ7xR4D1ZI\">https://www.youtube.com/watch?v=EvJ7xR4D1ZI</a></li>\r\n<li>Self Defense</li>\r\n<li>The origin of Irish coffee</li>\r\n<li>Calendars</li>\r\n<li>Sleep</li>\r\n<li>The Pine Book<br />\r\n<a href=\"https://www.pine64.org/pinebook/\">https://www.pine64.org/pinebook/</a></li>\r\n<li>Guns</li>\r\n<li>Tanks</li>\r\n<li>AmazFit Bip<br />\r\n<a href=\"https://us.amazfit.com/shop/bip?variant=336750\">https://us.amazfit.com/shop/bip?variant=336750</a></li>\r\n<li>Canes</li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR new years show, new years, community',0,0,1),
(2842,'2019-06-25','What\'s in my Bag an update to hpr2065',225,'This is a short update show on what I carry in my Geek Bag','<p>Hello HPR land, this is Tony Hughes again coming to you from Blackpool in the UK.</p>\r\n<p>During my last episode, which was my 50th for HPR, I realized that my ‘Bag’ has changed considerably since recording my episode hpr2065 about it back in July 2016. So this is an update on what I currently carry in my ‘Geek’ Bag when out and about.</p>\r\n<p>I have several laptops which are used for different things at different times so may or may not be in the bag/bags depending on what I am doing. This is the list:</p>\r\n<ul>\r\n<li>Lenovo X230i</li>\r\n<li>Toshiba z30</li>\r\n<li>Dells E6220 x 2, E7250, E7440 and E6540</li>\r\n</ul>\r\n<p>Recently I have moved more to Dell laptops and the Dell E7440 is a great compromise of portability and usability with its 14&quot; 1080p screen, but if I want light and long battery life the Toshiba z30 is a fantastic little PC with all day battery life and a great 13.3&quot; screen.</p>\r\n<p>But all the others have their place in the bag, for demonstrating Linux Distros at events or at my LUG.</p>\r\n<p>So the next thing that makes it into the bag is my ZoomH2 recorder that goes with me for recording interviews at events I attend, with the intention of producing HPR shows.</p>\r\n<p>I also have some tools, the first is a little set of a screwdriver and small driver bits made by Draper this is handy for laptop tear downs as it has all the necessary bit heads needed to work on electronics. I also carry a small set of pliers and a wire cutter in the bag.</p>\r\n<p>I also carry a 10000mA battery pack for charging my mobile phone if needed while out and about. In conjunction with this a I carry several micro USB charging cables and a USB C cable for the increasing number of USB C devices around these days.</p>\r\n<p>In the bag are also a couple of 128Gb SSD’s as spares for quick swap outs, if I don’t want to wipe a drive but wish to test a new OS, or for those times the only solution to helping someone rescue an older laptop is to stick an SSD into it.</p>\r\n<p>I generally carry my 1Tb portable USB3 HDD around with me as I store a large number of current Linux ISO files for burning to a flash drive to create boot discs. With that it goes without saying that I have a few spare flash drives in the bag for just this use. I also usually carry a few SD cards for creating Raspberry Pi images if needed.</p>\r\n<p>Other items include a USB WiFi card as a backup if I have a WiFi malfunction, or I’m working on a machine without its own WiFi card.</p>\r\n<p>Well that’s about it for what I’m currently carrying in my bag, but before I go a bit of sad news. Many of you have heard me talk of my latest bargains from the Computer Auction I have frequented since 2006. Well sadly NO MORE, Northern Realisations after 20 years of trading have closed their doors for the last time, so I need to find another source of cheap PC equipment. As they say: <em>All good things come to an end</em>.</p>\r\n<p>Well that’s it for this episode, this is Tony Hughes signing off for Hacker Public Radio.</p>\r\n<ul>\r\n<li><p><a href=\"https://www.keithstead.com/and_more/reviews/zoomh2.html\" class=\"uri\">https://www.keithstead.com/and_more/reviews/zoomh2.html</a></p></li>\r\n<li><p><a href=\"https://www.realnorth.co.uk/\" class=\"uri\">https://www.realnorth.co.uk/</a></p></li>\r\n</ul>\r\n',338,0,0,'CC-BY-SA','Linux, PC\'s, Laptops, Geek Bag',0,0,1),
(2847,'2019-07-02','earbuds',902,'My trials with earbuds and custom setups','<p>operat0r discusses his trials with earbuds and custom setups.</p>',36,0,0,'CC-BY-SA','earbuds,hacking,music,diy',0,0,1),
(2856,'2019-07-15','Mint Mobile Security Rant',1185,'Settle in for a Mint Mobile Security Rant ','<p>\r\nYou can also use call forwarding to forward calls to your google voice number. Mint does not seem to stay connected all the time.\r\n</p>',36,0,1,'CC-BY-SA','Mint Mobile,ANdroid,Phones,4G,VoIP,google voice',0,0,1),
(2861,'2019-07-22','Safety Razors',870,'I go over some of my thoughts on Safety Razors Etc','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://smile.amazon.com/gp/product/B01859QHJU/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1\" class=\"uri\">https://smile.amazon.com/gp/product/B01859QHJU/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1</a></li>\r\n<li><a href=\"https://smile.amazon.com/gp/product/B01M2Y82H8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1\" class=\"uri\">https://smile.amazon.com/gp/product/B01M2Y82H8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1</a></li>\r\n<li><a href=\"https://smile.amazon.com/gp/product/B000684Z70/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;th=1\" class=\"uri\">https://smile.amazon.com/gp/product/B000684Z70/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;th=1</a></li>\r\n<li><a href=\"https://smile.amazon.com/gp/product/B0022RB080/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1\" class=\"uri\">https://smile.amazon.com/gp/product/B0022RB080/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1</a></li>\r\n</ul>\r\n',36,0,0,'CC-BY-SA','shaving,safety,razor,health,grooming',0,0,1),
(2886,'2019-08-26','INFOSECOND',1136,'Thoughts around IT and Information Security','<p>\r\nIn todays show, operat0r shares his personal thoughts around information security and getting into the field. He also talks about ways to get support from your local community.\r\n</p>',36,0,1,'CC-BY-SA','information security,careers',0,0,1),
(2853,'2019-07-10','Feeding the beast',424,'How the swedes are killing their hardcash and feeding the beast','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.bankid.com/\" class=\"uri\">https://www.bankid.com/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Swish_(payment)\" class=\"uri\">https://en.wikipedia.org/wiki/Swish_(payment)</a></li>\r\n</ul>',309,0,0,'CC-BY-SA','bankid, swish, cash, payment, digitalization, sweden',0,0,1),
(2839,'2019-06-20','Sample episode of the Distrohoppers Digest podcast',2231,'We bring you the first episode of the new Creative Commons show the Distrohoppers Digest','<p>\r\nThis is a sample episode of the new Creative Commons tech podcast. It\'s brought to us by Moss and our own <a href=\"https://hackerpublicradio.org/correspondents/0338.html\">Tony Hughes</a>. From the blurb:\r\n</p>\r\n\r\n<quote>\r\nWe are two Blokes who love Linux and trying out new stuff, we thought it would be interesting to share our experience of trying new Linux and BSD distributions and how we found it trying to live with them as our daily driver for up to a Month at a time, by recording a podcast about how we got on.\r\n</quote>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://distrohoppersdigest.blogspot.com/\">https://distrohoppersdigest.blogspot.com/</a></li>\r\n<li><a href=\"https://distrohoppersdigest.blogspot.com/feeds/posts/default\">https://distrohoppersdigest.blogspot.com/feeds/posts/default</a></li>\r\n<li><a href=\"https://distrohoppersdigest.blogspot.com/feeds/posts/default?alt=rss\">https://distrohoppersdigest.blogspot.com/feeds/posts/default?alt=rss</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0338.html\">https://hackerpublicradio.org/correspondents/0338.html</a></li>\r\n<li><a href=\"https://mintcast.org/\">https://mintcast.org/</a></li>\r\n</ul>',30,0,0,'CC-BY-NC-SA','Distrohoppers Digest, mintCast, linux, bsd',0,0,1),
(2844,'2019-06-27','The Sony TC-222-A Portable Reel-To-Reel Tape Recorder',1868,'I talk about my latest thrift-store gadget, a 1969 Sony portable reel-to-reel tape recorder','<p>In this episode I talk about my new 1969 <a href=\"https://flic.kr/s/aHsmEcunXZ\" target=\"_blank\">Sony TC-222-A</a> portable reel-to-reel tape recorder. I found it about 3 weeks ago at <a href=\"https://www.handupthrift.com/\" target=\"_blank\">Hand-Up Thrift store</a> in Lafayette Louisiana for $5. It was in partially working condition, without a power cord, and in need of some work. I cleaned the contact points, overhauled the fast-forward idler wheel, lubricated both of the tape shafts, replaced the belts, hacked an old electric razor cord to work as a power cord, and tightened up the record linkage. One thing I still can\'t get working is recording using the microphone.</p>\r\n\r\n<p>I spend about half of this episode talking about trying to make a super-long recording fit on a 5-inch reel and playing at 4.8 cm/second. I use Kimiko Ishizaka\'s wonderful <a href=\"https://kimiko-piano.com/open-goldberg\" target=\"_blank\">Open Goldberg Variations</a> and <a href=\"https://music.kimiko-piano.com/album/bach-well-tempered-clavier-book-1\" target=\"_blank\">Open Well-Tempered Clavier</a> as the music. To do this, I speeded up all of the tracks to play at 4x speed, for which I use the following script to loop through all mp3s in the current directory and subject them to the appropriate <a href=\"https://linux.die.net/man/1/sox\" target=\"_blank\">sox</a> command:</p>\r\n\r\n<pre>\r\n#!/bin/bash\r\n\r\nfor i in *.mp3; do\r\n# speed em up 4x\r\n  infile=$(basename $i)\r\n  stem=$(basename \"$i\" .mp3)\r\n  outfile=\"$stem\"_4x.mp3\r\n  sox $infile $outfile speed 4.0\r\n  sleep .1\r\ndone\r\n</pre>\r\n\r\n<p>It worked! Well. The script and <code>sox</code> command worked. Recording the 4x-speed audio at 19 cm/second and then playing back at 4.8 cm/second also mostly worked, I just had a very poor-quality tape so it sounded pretty bad. The speed was just about right, though. In fact when I compared pitch against my piano, it was EXACTLY right. I may try again with a better tape. (BTW I said my tape was \"old new stock,\" but obviously I meant \"new old stock.\")</p>\r\n\r\n<h3>Photo Album (click image)</h3>\r\n\r\n<p><a data-flickr-embed=\"true\"  href=\"https://www.flickr.com/photos/137675441@N05/albums/72157709041025907\" title=\"Sony TC-222-A Portable Reel-to-Reel Tape Recorder\"><img src=\"https://live.staticflickr.com/65535/48046250816_552453ece7.jpg\" width=\"500\" height=\"375\" alt=\"Sony TC-222-A Portable Reel-to-Reel Tape Recorder\"></a></p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li>Video: <a href=\"https://www.youtube.com/watch?v=52BbX_aP1sQ\" target=\"_blank\">The Sony TC-222-A in action</a></li>\r\n	<li><a href=\"https://www.youtube.com/user/Techmoan\" target=\"_blank\">Techmoan</a>: one of my favorite YouTube channels</li>\r\n	<li>Music bumpers are from Kimiko Ishizaka\'s <em>The Open Goldberg Variations</em>: <a href=\"https://www.opengoldbergvariations.org/\" target=\"_blank\">https://www.opengoldbergvariations.org/</a>, used by permission of their <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\" target=\"_blank\">CC0 1.0 Universal (CC0 1.0) Public Domain Dedication license</a>.</li>\r\n	<li><a href=\"https://www.vintage-electronics.net/\" target=\"_blank\">Vintage Electronics</a>, my source for replacement belts, replacement lamps for my Marantz receiver, etc. </li>\r\n</ul>',238,0,0,'CC-BY-SA','Music,Recording,Audio,Tape,Reel-To-Reel,Open-Reel,Recording Devices,Tape Speeds,Bash Scripting',0,0,1),
(2843,'2019-06-26','Afrikan Tähti (or Star of Africa)',678,'Tuula talks about one of the most important Finnish board game ever','<p>For more information about the game and history behind it, have a look at the following links:</p>\r\n<ul>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Afrikan_t%C3%A4hti\">https://en.wikipedia.org/wiki/Afrikan_t%C3%A4hti</a></li>\r\n<li>Board Game Geek: <a href=\"https://www.boardgamegeek.com/boardgame/5130/afrikan-tahti\" class=\"uri\">https://www.boardgamegeek.com/boardgame/5130/afrikan-tahti</a></li>\r\n</ul>\r\n',364,95,0,'CC-BY-SA','finnish, childhood favourite',0,0,1),
(2851,'2019-07-08','An introduction to the work of fire fighters',1847,'A small introduction into the work of fire fighters ','<p>Some general basic knowledge of fire fighting. Also an invitation to ask questions in the comments.</p>',369,0,0,'CC-BY-SA','fire fighting, fire brigade',0,0,1),
(2868,'2019-07-31','Custom data with Persistent',1202,'Tuula explains how to serialize custom data with Persistent','<p>Podcast episode is about two things, serializing custom data with Persistent and <code>IsString</code> typeclass.</p>\r\n<p>I’m using Persistent in conjunction with Yesod (web framework). Process in short is that data is defined in <code>/config/models</code> file that is used in compile time to generate data type definitions for Haskell. Same information is used to create schema for the database when Yesod application starts. It can even do simple migrations if schema changes, but I wouldn’t recommend using that in production.</p>\r\n<p>Persistent maps information between database and program written in Haskell. There’s pre-existing mappings for things like text and various kinds of numbers. In case one wants to use custom data type, compiler can automatically generate needed mapping. This automatic generation works well with enumerations and very complex data.</p>\r\n<p>For example, following piece defines enumeration <code>BuildingType</code> that is mapped in <code>varchar</code> field in database. Enumeration is thus stored as text.</p>\r\n<pre><code>data BuildingType = SensorStation\r\n    | ResearchComplex\r\n    | Farm\r\n    | ParticleAccelerator\r\n    | NeutronDetector\r\n    | BlackMatterScanner\r\n    | GravityWaveSensor\r\n    deriving (Show, Read, Eq)\r\n\r\nderivePersistField &quot;BuildingType&quot;</code></pre>\r\n<p>For newtypes, automatic deriving works too, but generates (in my opinion) extra information that isn’t needed. This extra information causes data saved as text. For those cases, manual mapping can be used.</p>\r\n<p>Our example is for <code>StarDate</code>, which is just glorified <code>Int</code>. I’m using newtype to make <code>StarDate</code> distinct from any other <code>Int</code>, even when it behaves just like <code>Int</code>.</p>\r\n<pre><code>newtype StarDate = StarDate { unStarDate :: Int }\r\n    deriving (Show, Read, Eq, Num, Ord)\r\n\r\ninstance PersistField StarDate where\r\n    toPersistValue (StarDate n) =\r\n        PersistInt64 $ fromIntegral n\r\n\r\n    fromPersistValue (PersistInt64 n) =\r\n        Right $ StarDate $ fromIntegral n\r\n\r\n    fromPersistValue _ =\r\n        Left &quot;Failed to deserialize&quot;\r\n\r\n\r\ninstance PersistFieldSql StarDate where\r\n    sqlType _ = SqlInt64</code></pre>\r\n<p>One more trick, that doesn’t directly relate to Persistent is <code>IsString</code> type class. Instead of having to specify all the time what type text literal is, one can let compiler to deduce it from usage.</p>\r\n<p>For example, if I had a newtype like:</p>\r\n<pre><code>newtype PlanetName = PlanetName { unPlanetName :: Text }</code></pre>\r\n<p>I can turn on OverloadedStrings pragma and create <code>IsString</code> instance:</p>\r\n<pre><code>instance IsString PlanetName where\r\n    fromString = PlanetName . fromString</code></pre>\r\n<p>Now I can write: <code>placeName = &quot;Earth&quot;</code> instead of <code>placeName = PlanetName &quot;Earth&quot;</code> and compiler can deduce correct type based on how the <code>placeName</code> is used.</p>\r\n<p>Thanks for listening, if you have any questions or comments, you can reach me via email or in the fediverse, where I’m <code>Tuula@mastodon.social</code>.</p>\r\n',364,107,0,'CC-BY-SA','haskell, persistent, database',0,0,1),
(2890,'2019-08-30','Penguicon 2019 Report',843,'Penguicon 2019 took place on May 3-5, 2018 in Southfield, Michigan','<p>Penguicon 2019 is a combined technology and science fiction convention in Southfield, Michigan, a suburb of Detroit, and presents over 500 hours of programming over the entire weekend. Of this, around 100 hours are open source, tech-related. In this episode I tell you about my own personal experience at Penguicon this year.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://2019.penguicon.org/\" class=\"uri\">https://2019.penguicon.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Saladin_Ahmed\" class=\"uri\">https://en.wikipedia.org/wiki/Saladin_Ahmed</a></li>\r\n<li><a href=\"https://www.mikeymason.com/\" class=\"uri\">https://www.mikeymason.com/</a></li>\r\n<li><a href=\"https://zedshaw.com/\" class=\"uri\">https://zedshaw.com/</a></li>\r\n<li><a href=\"https://www.facebook.com/CraftyCelts/posts/d41d8cd9/233607537127/\" class=\"uri\">https://www.facebook.com/CraftyCelts/posts/d41d8cd9/233607537127/</a></li>\r\n<li><a href=\"https://www.sophiabrueckner.com/\" class=\"uri\">https://www.sophiabrueckner.com/</a></li>\r\n<li><a href=\"https://www.facebook.com/public/Karen-Corbeill\" class=\"uri\">https://www.facebook.com/public/Karen-Corbeill</a></li>\r\n<li><a href=\"https://www.youtube.com/playlist?list=PLwO8CTSLTkii9S_vhEOsyJ17RI3jjBZ95\" class=\"uri\">https://www.youtube.com/playlist?list=PLwO8CTSLTkii9S_vhEOsyJ17RI3jjBZ95</a></li>\r\n<li><a href=\"https://www.allhandsactive.org/\" class=\"uri\">https://www.allhandsactive.org/</a></li>\r\n<li><a href=\"https://www.zwilnik.com\" class=\"uri\">https://www.zwilnik.com</a></li>\r\n</ul>\r\n',198,96,0,'CC-BY-SA','Penguicon, Open Source, Convention',0,0,1),
(2852,'2019-07-09','Gnu Awk - Part 16',2564,'Winding up the Gnu Awk series','<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the sixteenth and final episode of the <code>\'</code><a href=\"https://hackerpublicradio.org/series/0094.html\" title=\"Learning Awk\">Learning Awk</a><code>\'</code> series which is being produced by <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" title=\"b-yeezi\">b-yeezi</a> (BY) and <a href=\"https://hackerpublicradio.org/correspondents/0225.html\" title=\"Dave Morriss\">Dave Morriss</a> (DM).</p>\r\n<p>We are using this as an opportunity to have a round-table discussion about the series, about Awk, and where we recommend the listeners should go from here. Including this one we have produced 16 episodes covering the features most likely to be used in pipelines on the command line or in simple shell and awk scripts.</p>\r\n<p><small> Note that although the HPR site will list this episode as having a single host, in fact it has two! Plans are afoot to enhance the HPR database so we can eventually indicate this properly. </small></p>\r\n<h2 id=\"topics-discussed\">Topics Discussed</h2>\r\n<ul>\r\n<li>The series\r\n<ul>\r\n<li>Started in 2016 (first show released 2016-07-13)</li>\r\n<li>Finishing in 2019</li>\r\n<li>16 episodes in total</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Why are we finishing the series?\r\n<ul>\r\n<li>We have probably reached the limit of what is useful on the command line or in shell scripts or even in manageable-sized Awk scripts</li>\r\n<li>Awk shows its limitations as we go on and doesn’t compare well with more modern text processing languages</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Our personal experiences with Awk\r\n<ul>\r\n<li>BY:\r\n<ul>\r\n<li>Started with sed and awk when first moving to Linux in 2011</li>\r\n<li>(ongoing) Exploring and cleaning client data</li>\r\n<li>(ongoing) Personal scripts when adding python or other tool would be overkill</li>\r\n</ul></li>\r\n<li>DM:\r\n<ul>\r\n<li>Working with VAX/VMS in the 1980’s. No very good text processing features built-in, so Gnu Awk (and sed) was a great way to handle the data we were using to generate accounts for new students each year. Could easily spot bad records, do some data validation (for example impossible dates of birth).</li>\r\n<li>Later in the late 1980’s and early 1990’s more Unix systems came on the scene running HP-UX, Ultrix, SunOS, Solaris, OSF/1, True64 Unix, and awk was very much used there.</li>\r\n<li>Later still we moved to Linux; initially Fedora but later RHEL, and of course awk figured in the list of tools there as well.</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>What have we left out? Why?\r\n<ul>\r\n<li>User-defined functions are pretty clunky and hard to use</li>\r\n<li>Multi-dimensional arrays: other languages do this better</li>\r\n<li>Internationalization: assumes you’re writing <em>big</em> awk programs</li>\r\n<li>The <code>gawk</code> debugger: quite clever but probably overkill for this series</li>\r\n<li>Extensions written in C and C++: some come with <code>gawk</code> and look quite good, but this subject is out of scope</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>What to use as an alternative to Awk?\r\n<ul>\r\n<li>DM moved from <code>gawk</code> to Perl (version 4) in the 1980’s and later to Perl version 5. This might have engendered an <em>awk</em>y, <em>Bash</em>y mindset that’s hard to shake off. Not the recommended place to start these days.</li>\r\n<li>BY moved from <code>gawk</code> to Python and R for large projects. For interactive <em>Bash</em>y exploration, moved to <a href=\"https://github.com/BurntSushi/xsv\" title=\"XSV\">XSV</a>, <a href=\"https://harelba.github.io/q/\" title=\"q to run SQL on csv files\">q</a>, and <a href=\"https://csvkit.readthedocs.io/en/latest/\" title=\"CSV Kit\">csv-kit</a> for most use cases.</li>\r\n<li>These tools have built-in convenience features, like accounting for headers, data types, and file encodings</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>What’s next?\r\n<ul>\r\n<li>It is planned to turn the notes for this series into a combined document which will be available on the HPR site and on archive.org. There is no timescale for this at the moment</li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/html_node/index.html\"><em>GNU Awk User’s Guide</em></a>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/gawk/manual/gawk.html#Internationalization\"><em>Internationalization with gawk</em></a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li><a href=\"https://catonmat.net/proof-that-sed-is-turing-complete\"><em>A proof that Unix utility sed is Turing complete</em></a></li>\r\n<li><a href=\"https://mutagen.readthedocs.io/en/latest/\"><em>Mutagen</em></a> - discussed as an alternative way to access audio metadata (<em>tags</em>) from Python</li>\r\n<li><a href=\"https://github.com/BurntSushi/xsv\"><em>XSV</em></a></li>\r\n<li><a href=\"https://csvkit.readthedocs.io/en/latest/\"><em>csvkit</em></a></li>\r\n<li><a href=\"https://harelba.github.io/q/\"><em>Run SQL on CSV files with <b>q</b></em></a></li>\r\n</ul>\r\n<ul>\r\n<li>Links to all of the shows in this series on HPR:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2114\"><em>Gnu Awk - Part 1</em></a> - episode 2114</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2129\"><em>Gnu Awk - Part 2</em></a> - episode 2129</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2143\"><em>Gnu Awk - Part 3</em></a> - episode 2143</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2163\"><em>Gnu Awk - Part 4</em></a> - episode 2163</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2184\"><em>Gnu Awk - Part 5</em></a> - episode 2184</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2238\"><em>Gnu Awk - Part 6</em></a> - episode 2238</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2330\"><em>Gnu Awk - Part 7</em></a> - episode 2330</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2438\"><em>Gnu Awk - Part 8</em></a> - episode 2438</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2476\"><em>Gnu Awk - Part 9</em></a> - episode 2476</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2526\"><em>Gnu Awk - Part 10</em></a> - episode 2526</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2554\"><em>Gnu Awk - Part 11</em></a> - episode 2554</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2610\"><em>Gnu Awk - Part 12</em></a> - episode 2610</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2804\"><em>Gnu Awk - Part 13</em></a> - episode 2804</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2816\"><em>Gnu Awk - Part 14</em></a> - episode 2816</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2824\"><em>Gnu Awk - Part 15</em></a> - episode 2824</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2852\"><em>Gnu Awk - Part 16</em></a> - episode 2852</li>\r\n</ul></li>\r\n</ul>\r\n',225,94,1,'CC-BY-SA','Gnu Awk, advanced features',0,0,1),
(2854,'2019-07-11','Telling myself something In The Morning',374,'There was a need for some software, so I wrote some','<ul>\r\n<li>Source for In The Morning: <a href=\"https://gitlab.com/jezra/in-the-morning\" class=\"uri\">https://gitlab.com/jezra/in-the-morning</a></li>\r\n<li>Bottle Framework: <a href=\"https://bottlepy.org\" class=\"uri\">https://bottlepy.org</a></li>\r\n</ul>',243,25,0,'CC-BY-SA','python, programming',0,0,1),
(2857,'2019-07-16','Creating CounterParty Collectible Tokens for the Bitcorn Game',995,'How to create Bitcorn collectibles: tokens issued on Bitcoin blockchain, used in Bitcorn Farms game','<p>Bitcorn is an idle farming game created with and played using Bitcoin tokens using the CounterParty protocol. I’ll walk you through how it all works, how to get started and what all that means.</p>\r\n<p>In this episode we’ll walk through the basics of creating and submitting a Bitcorn collectible card to be included in the game, along with setting up a wallet so you can buy and sell them.</p>\r\n',379,110,0,'CC-BY-SA','bitcorn, bitcoin, collectibles',0,0,1),
(2862,'2019-07-23','Art vs. Commerce In Storytelling',830,'Lostnbronx examines stories as both art and products.','<p>In this final episode of \"Random Elements of Storytelling\", Lostnbronx looks at the question of art vs. commerce.</p>\r\n<p>When is a story a product? When is it a work of passion? Can it be both? In a era of interactive storytelling, what is the difference between a story teller and an audience? And where do art, commerce, creativity, and consumption intersect?</p>\r\n<p>Lostnbronx wanders over hill and dale, and likely fails to adequately explain anything at all.</p>\r\n',107,105,0,'CC-BY-SA','stories, storytelling, art, commerce, lostnbronx',0,0,1),
(2900,'2019-09-13','Better Social Media 01 - Introduction',711,'We don\'t have to use Twitter and Facebook. There are alternatives.','<p>While many people like to use social media, platforms like Twitter and Facebook are very unsatisfying, not to mention inimical to your security and privacy. Fortunately there are alternatives we can try, and in this series I want to explore a few of them. <a href=\"https://www.zwilnik.com/?page_id=1025\" class=\"uri\">https://www.zwilnik.com/?page_id=1025</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://elplatt.com/\" class=\"uri\">https://elplatt.com/</a></li>\r\n<li><a href=\"https://litmus.com/blog/email-client-market-share-trends-first-half-of-2018\" class=\"uri\">https://litmus.com/blog/email-client-market-share-trends-first-half-of-2018</a></li>\r\n<li><a href=\"https://www.amazon.com/dp/B07H7G7CMN/ref=dp-kindle-redirect?_encoding=UTF8&amp;btkr=1\" class=\"uri\">https://www.amazon.com/dp/B07H7G7CMN/ref=dp-kindle-redirect?_encoding=UTF8&amp;btkr=1</a></li>\r\n<li><a href=\"https://mewe.com/\" class=\"uri\">https://mewe.com/</a></li>\r\n<li><a href=\"https://ello.co/\" class=\"uri\">https://ello.co/</a></li>\r\n<li><a href=\"https://diasporafoundation.org/\" class=\"uri\">https://diasporafoundation.org/</a></li>\r\n<li><a href=\"https://pluspora.com/\" class=\"uri\">https://pluspora.com/</a></li>\r\n<li><a href=\"https://www.bitchute.com/\" class=\"uri\">https://www.bitchute.com/</a></li>\r\n<li><a href=\"https://joinmastodon.org/\" class=\"uri\">https://joinmastodon.org/</a></li>\r\n<li><a href=\"https://textile.photos/\" class=\"uri\">https://textile.photos/</a></li>\r\n<li><a href=\"https://pixelfed.org/\" class=\"uri\">https://pixelfed.org/</a></li>\r\n<li><a href=\"https://www.wire.com/\" class=\"uri\">https://www.wire.com/</a></li>\r\n<li><a href=\"https://www.signal.org/\" class=\"uri\">https://www.signal.org/</a></li>\r\n<li><a href=\"https://gnu.io/social/\" class=\"uri\">https://gnu.io/social/</a></li>\r\n<li><a href=\"https://www.scuttlebutt.nz/\" class=\"uri\">https://www.scuttlebutt.nz/</a></li>\r\n<li><a href=\"https://mediagoblin.org/\" class=\"uri\">https://mediagoblin.org/</a></li>\r\n<li><a href=\"https://freenetproject.org/author/freenet-project-inc.html\" class=\"uri\">https://freenetproject.org/author/freenet-project-inc.html</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1025\" class=\"uri\">https://www.zwilnik.com/?page_id=1025</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','Fediverse, social media, federated',0,0,1),
(2910,'2019-09-27','Better Social Media 02 - Pluspora',582,'Pluspora was advertised as the federated alternative to Google Plus.','<p>Pluspora is an instance of the Diaspora software that was specifically designed to appeal to users of Google Plus. So when Google Plus disappeared, many people moved over to this platform. <a href=\"https://www.zwilnik.com/?page_id=1027\" class=\"uri\">https://www.zwilnik.com/?page_id=1027</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://pluspora.com/\" class=\"uri\">https://pluspora.com/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\" class=\"uri\">https://en.wikipedia.org/wiki/GNU_General_Public_License</a></li>\r\n<li><a href=\"https://diasporafoundation.org/formatting\" class=\"uri\">https://diasporafoundation.org/formatting</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Markdown\" class=\"uri\">https://en.wikipedia.org/wiki/Markdown</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1027\" class=\"uri\">https://www.zwilnik.com/?page_id=1027</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','Fediverse, social media, federated',0,0,1),
(2920,'2019-10-11','Better Social Media 03 - MeWe',729,'MeWe was advertised as another popular alternative to Google Plus.','<p>MeWe is another platform that was advertised to users left high-and-dry by the closure of Google Plus. It is not federated, but does make strong claims of privacy protection, and is the slickest alternative I have seen to Google Plus. So when Google Plus disappeared, many people moved over to this platform. <a href=\"https://www.zwilnik.com/?page_id=1030\" class=\"uri\">https://www.zwilnik.com/?page_id=1030</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://mewe.com/\" class=\"uri\">https://mewe.com/</a></li>\r\n<li><a href=\"https://mewepro.com/\" class=\"uri\">https://mewepro.com/</a></li>\r\n<li><a href=\"https://mewe.com/store\" class=\"uri\">https://mewe.com/store</a></li>\r\n<li><a href=\"https://mewe.com/#\" class=\"uri\">https://mewe.com/#</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1030\" class=\"uri\">https://www.zwilnik.com/?page_id=1030</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative',0,0,1),
(2930,'2019-10-25','Better Social Media 04 - Diaspora',886,'Diaspora was the original alternative platform when it went up against Facebook.','<p>I don’t know if Diaspora was the first of the alternatives to come along, but it was certainly the first I was aware of. It got a lot of attention for the college students who first put it together (and remember that Facebook was originally created by a college student, Mark Zuckerberg). The four students, Ilya Zhitomirskiy, Dan Grippi, Max Salzberg, and Raphael Sofaer, were inspired by a speech Eben Moglen gave to the Internet society’s New York Chapter, where he described centralized social networks as “Spying for free”. The students chose the name Diaspora, which is a Greek word that means a “scattered or dispersed population” to reflect the idea that instead of a centralized platform, Diaspora would consist of independent nodes, called pods, each running a copy of the free software which is open source and licensed under the GNU-AGPL-3.0 license. <a href=\"https://www.zwilnik.com/?page_id=1032\" class=\"uri\">https://www.zwilnik.com/?page_id=1032</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://diasporafoundation.org/\" class=\"uri\">https://diasporafoundation.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\" class=\"uri\">https://en.wikipedia.org/wiki/GNU_General_Public_License</a></li>\r\n<li><a href=\"https://softwarefreedom.org/\" class=\"uri\">https://softwarefreedom.org/</a></li>\r\n<li><a href=\"https://web.archive.org/web/20111002003516/https://blog.diasporafoundation.org/2011/09/21/diaspora-means-a-brighter-future-for-all-of-us.html\" class=\"uri\">https://web.archive.org/web/20111002003516/https://blog.diasporafoundation.org/2011/09/21/diaspora-means-a-brighter-future-for-all-of-us.html</a></li>\r\n<li><a href=\"https://podupti.me/\" class=\"uri\">https://podupti.me/</a></li>\r\n<li><a href=\"mailto:ahuka@pod.haxxors.com\">ahuka@pod.haxxors.com</a></li>\r\n<li><a href=\"https://pod.haxxors.com/i/394c80269066\" class=\"uri\">https://pod.haxxors.com/i/394c80269066</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1032\" class=\"uri\">https://www.zwilnik.com/?page_id=1032</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, federated, Fediverse',0,0,1),
(2940,'2019-11-08','Better Social Media 05 - Mastodon',778,'Mastodon is the federated alternative to Twitter.','<p>As mentioned earlier, Diaspora was one of the earliest alternative, privacy-respecting social media platforms, but it was focused on being an alternative to Facebook (and it has done this fairly well). But that leaves the other big platform of the social world, Twitter. Mastodon is a nice federated alternative to Twitter and a nicer place to be. <a href=\"https://www.zwilnik.com/?page_id=1034\" class=\"uri\">https://www.zwilnik.com/?page_id=1034</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://joinmastodon.org/\" class=\"uri\">https://joinmastodon.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Identi.ca\" class=\"uri\">https://en.wikipedia.org/wiki/Identi.ca</a></li>\r\n<li><a href=\"https://pump.io/\" class=\"uri\">https://pump.io/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Gamergate_controversy\" class=\"uri\">https://en.wikipedia.org/wiki/Gamergate_controversy</a></li>\r\n<li><a href=\"https://blog.joinmastodon.org/2018/07/cage-the-mastodon/\" class=\"uri\">https://blog.joinmastodon.org/2018/07/cage-the-mastodon/</a></li>\r\n<li><a href=\"https://mastodon.social/about/more\" class=\"uri\">https://mastodon.social/about/more</a></li>\r\n<li><a href=\"https://instances.noct.zone/\" class=\"uri\">https://instances.noct.zone/</a></li>\r\n<li><a href=\"https://instances.social/list#lang=&amp;allowed=&amp;prohibited=&amp;users=\" class=\"uri\">https://instances.social/list#lang=&amp;allowed=&amp;prohibited=&amp;users=</a></li>\r\n<li><a href=\"https://mwl.io/\" class=\"uri\">https://mwl.io/</a></li>\r\n<li><a href=\"https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md\" class=\"uri\">https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1034\" class=\"uri\">https://www.zwilnik.com/?page_id=1034</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','Fediverse, social media, federated, alternative',0,0,1),
(2863,'2019-07-24','Simplified application architectures for improved security',955,'A thought experiment in whether reducing runtime dependencies can improve security and how to do it.','<p>Before the days of the PC, application architectures were often very simple - being little more than the executable itself and any input files. The constraints of the early PC’s very limited resources required new architectures to make the most of those resources.</p>\r\n<p>We now have a situation where most applications either install, or require the presence of, multiple runtime dependencies. Each dependency has an interface which allows communication between itself and the application, but every interface presents an attack surface with the potential to be exploited by a malicious 3rd party.</p>\r\n<p>Modern computers do not have those same resource constraints yet we are still developing applications using the principles that applied 3 decades ago.</p>\r\n<p>Re-usable functionality can be internalised through static linking at compile-time or by code inclusion (along the lines of a .h file in C/C++)</p>\r\n<p>To change from using tried and tested methods is never convenient, but with concern for cyber security high and rising, has the time come to exchange convenience for simpler application architectures that should reduce vulnerabilities?</p>\r\n<p>…And may a move to new (or is it old) architectures deliver a big win for open source software?</p>\r\n',246,0,0,'CC-BY-SA','Application development, Application architecture, Security',0,0,1),
(2864,'2019-07-25','One weird trick to add a --help option to your awk scripts',1213,'Klaatu demonstrates two ways to add a --help message to your awk scripts','<p>\r\nThe first method is in Awk itself.\r\n</p>\r\n\r\n<pre><code>\r\n#!/usr/bin/awk -f\r\n#\r\n# USAGE EXAMPLE:\r\n# echo the input of some var\r\n# $ foo -v var=8\r\n#\r\n\r\nBEGIN {\r\n    if (length(var) == 0) {\r\n        printf \"%s %s\\n\", ENVIRON[\"_\"], \"is a proof-of-concept help message\";\r\n        printf \"%s\\n\", \"Usage:\";\r\n        printf \"%s\\n\", \"------\";\r\n        printf \"%s %s %s\\n\", \"$\", ENVIRON[\"_\"], \"-v var=NUM\";\r\n        printf \"%s\\n\", \"substitute NUM with the number you want echoed\";\r\n        exit\r\n    }\r\n    else {\r\n        printf \"%s %s\\n\", \"You have entered \", var;\r\n    }\r\n}\r\n</code></pre>\r\n\r\n<p>\r\nThe disadvantage to this is that it only provides a help message if no option is provided. If you actually type <code>--help</code>, then you get Awk\'s help message, which is not useful in this context.\r\n</p>\r\n\r\n<p>\r\nThe shell script wrapper method uses the shell to parse options, which are then passed to an embedded Awk script:\r\n</p>\r\n\r\n<pre><code>\r\n#!/bin/sh\r\n\r\nif [ \"${1}\" = \"--help\" -o \"${1}\" = \"-h\" -o \"${1}\" = \"\" ]; then\r\n    echo \"This is a help message.\"\r\n    exit\r\nfi\r\n\r\n/usr/bin/awk -v var=\"${1}\" \'\r\n\r\nBEGIN {\r\nprintf \"%s %s\\n\", \"You provided\", var;\r\n}\'\r\n</code></pre>\r\n</p>\r\n\r\n<p>\r\nThe disadvantage here is only that you\'re not just writing an Awk script, you\'re writing a shell script with embedded Awk. I can\'t think of a reason not to do it this way (even though in the script that served as the inspiration for this episode, I don\'t use this method).\r\n</p>\r\n\r\n',78,94,0,'CC-BY-SA','awk,option,help,arg',0,0,1),
(2866,'2019-07-29','Intro to Bitcoin for techies',1915,'Survey of Bitcoin: blockchains, blocks, transactions, miners, PoW, hashing, addresses, wallets','<p>This is a broad introduction to Bitcoin from a technical perspective. We do not talk about finance or economics, and we don’t compare distributed ledger technologies. We’re not addressing exchanges, layer 2 technologies, mainstream adoption, etc.</p>\r\n<p>We’re also going to avoid going deep into forks, fungibility, mining or the math of Bitcoin.</p>\r\n<p>In this episode we introduce these fundamental Bitcoin topics:</p>\r\n<ul>\r\n<li>What is Bitcoin?</li>\r\n<li>Blockchains and blocks</li>\r\n<li>What are transactions?</li>\r\n<li>What are miners and what do they do?</li>\r\n<li>Proof of Work in Bitcoin - SHA256 hashing</li>\r\n<li>Bitcoin consensus mechanism</li>\r\n<li>How do wallets work?</li>\r\n<li>Brief discussion about various types of wallets and wallet security</li>\r\n</ul>\r\n<p>I hope this is accessible and informative and look forward to doing more in the future.</p>',379,110,0,'CC-BY-SA','bitcoin, blockchain, cryptocurrency',0,0,1),
(2873,'2019-08-07','Death Angel - Card game',1045,'Short description of Death Angel card game','<p>For more information, have a look at BoardGameGeek: <a href=\"https://boardgamegeek.com/boardgame/71721/space-hulk-death-angel-card-game\" class=\"uri\">https://boardgamegeek.com/boardgame/71721/space-hulk-death-angel-card-game</a></p>\r\n',364,95,0,'CC-BY-SA','cardgame',0,0,1),
(2878,'2019-08-14','Type classes in Haskell',1168,'Tuula explains what type classes are and how to use them','<h2 id=\"background\">Background</h2>\r\n<p>Type classes are Haskell’s way of doing ad hoc polymorphics or overloading. They are used to defined set of functions that can operate more than one specific type of data.</p>\r\n<h2 id=\"equality\">Equality</h2>\r\n<p>In Haskell there’s no default equality, it has to be defined.</p>\r\n<p>There’s two parts to the puzzle. First is type class <code>Eq</code> that comes with the standard library and defines function signatures for equality and non-equality comparisons. There’s type parameter <code>a</code> in the definition, which is filled by user when they define instance of <code>Eq</code> for their data. In that instance definition, <code>a</code> is filled with concrete type.</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\r\n  x /= y = not (x == y)</code></pre>\r\n<p>Definition above can be read as “class Eq a that has two functions with following signatures and implementations”. In other words, given two <code>a</code>, this function determines are they equal or not (thus <code>Bool</code> as return type). <code>/=</code> is defined in terms of <code>==</code>, so it’s enough to define one and you get other one for free. But you can still define both if you’re so included (maybe some optimization case).</p>\r\n<p>If we define our own <code>Size</code> type, like below, we can compare sizes:</p>\r\n<pre><code>data Size = Small | Medium | Large\r\n    deriving (Show, Read)\r\n\r\ninstance Eq Size where\r\n    Small == Small = True\r\n    Medium == Medium = True\r\n    Large == Large = True\r\n    _ == _ = False</code></pre>\r\n<p>And here’s couple example comparisons.</p>\r\n<pre><code>&gt; Small == Small\r\nTrue\r\n&gt; Large /= Large\r\nFalse</code></pre>\r\n<p>Writing these by hand is both tedious and error prone, so we usually use automatic derivation for them. Note how the second line now reads <code>deriving (Show, Read, Eq)</code>.</p>\r\n<pre><code>data Size = Small | Medium | Large\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<h2 id=\"hierarchy-between-type-classes\">Hierarchy between type classes</h2>\r\n<p>There can be hierarchy between type classes, meaning one requires presence of another. Common example is <code>Ord</code>, which is used to order data.</p>\r\n<pre><code>class Eq a =&gt; Ord a where\r\n    compare :: a -&gt; a -&gt; Ordering\r\n    (&lt;) :: a -&gt; a -&gt; Bool\r\n    (&gt;=) :: a -&gt; a -&gt; Bool\r\n    (&gt;) :: a -&gt; a -&gt; Bool\r\n    (&lt;=) :: a -&gt; a -&gt; Bool\r\n    max :: a -&gt; a -&gt; a\r\n    min :: a -&gt; a -&gt; a</code></pre>\r\n<p>This definition can be read as “class Ord a, where a has instance of Eq, with pile of functions as follows”. <code>Ord</code> has default implementation for quite many of these, in terms of others, so it’s enough to implement either <code>compare</code> or <code>&lt;=</code>.</p>\r\n<p>For our <code>Size</code>, instance of <code>Ord</code> could be defined as:</p>\r\n<pre><code>instance Ord Size where\r\n    Small &lt;= _ = True\r\n    Medium &lt;= Small = False\r\n    Medium &lt;= _ = True\r\n    Large &lt;= Large = True\r\n    Large &lt;= _ = False</code></pre>\r\n<h2 id=\"writing-generic-code\">Writing generic code</h2>\r\n<p>There’s lots and lots of type classes in standard library:</p>\r\n<ul>\r\n<li><code>Num</code> for numeric operations</li>\r\n<li><code>Integral</code> for integer numbers</li>\r\n<li><code>Floating</code> for floating numbers</li>\r\n<li><code>Show</code> for turning data into strings</li>\r\n<li><code>Read</code> for turning strings to data</li>\r\n<li><code>Enum</code> for sequentially ordered types (these can be enumerated)</li>\r\n<li><code>Bounded</code> for things with upper and lower bound</li>\r\n<li>and so on…</li>\r\n</ul>\r\n<p>Type classes allow you to write really generic code. Following is contrived example using <code>Ord</code> and <code>Show</code>:</p>\r\n<pre><code>check :: (Ord a, Show a) =&gt; a -&gt; a -&gt; String\r\ncheck a b =\r\n    case compare a b of\r\n        LT -&gt;\r\n            show a ++ &quot; is smaller than &quot; ++ show b\r\n        GT -&gt;\r\n            show a ++ &quot; is greater than &quot; ++ show b\r\n        EQ -&gt;\r\n            show a ++ &quot; and &quot; ++ show b ++ &quot; are equal&quot;</code></pre>\r\n<p>Check takes two parameters that are same type and that type has to have <code>Ord</code> and <code>Show</code> instances. <code>Ord</code> is for ordering and <code>Show</code> is for turning data into string (handy for displaying it). The end result is string telling result of comparison. Below is some examples of usage. Note how our function can handle different types of data: <code>Size</code>, <code>Int</code> and <code>[Int]</code>.</p>\r\n<pre><code>&gt; check Medium Small\r\n&quot;Medium is greater than Small&quot;\r\n&gt; check Small Large\r\n&quot;Small is smaller than Large&quot;\r\n&gt; check 7 3\r\n&quot;7 is greater than 3&quot;\r\n&gt; check [1, 2] [1, 1, 1]\r\n&quot;[1, 2] is greater than [1, 1, 1]&quot;</code></pre>\r\n<p>There are many extensions to type classes that add more behaviour. These aren’t part of standard Haskell, but can be enabled with a pragma definition or compiler flag. They can be somewhat more complicated to use, have special cases that need careful consideration, but offer interesting options.</p>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>Thank you for listening. Question, comments and feedback welcome. Best way to catch me nowadays is either by email or in fediverse, where I’m <code>Tuula@mastodon.social</code>.</p>\r\n',364,107,0,'CC-BY-SA','type class',0,0,1),
(2883,'2019-08-21','Pass the pigs',318,'Tuula talks about their childhood game pass the pigs','<p>For more information, have a look at <a href=\"https://boardgamegeek.com/boardgame/2593/pass-pigs\" class=\"uri\">https://boardgamegeek.com/boardgame/2593/pass-pigs</a></p>\r\n',364,95,0,'CC-BY-SA','dice game',0,0,1),
(2950,'2019-11-22','NotPetya and Maersk: An Object Lesson',861,'Looking at an object lesson for proper IT management processes and the cost of failure','<p>We previously looked at the NIST Security Framework, which lays out how organizations should manage their network security. That may have seemed a bit dry, so let’s look at this case study to put some flesh on those dry bones. Failing to manage your security risks properly can have significant consequences.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=997\" class=\"uri\">https://www.zwilnik.com/?page_id=997</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2850\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2850</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1045\" class=\"uri\">https://www.zwilnik.com/?page_id=1045</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','IT Management, Security',0,0,1),
(2898,'2019-09-11','Modeling people in space game',1315,'Tuula talks how they approach modeling people in space game','<p>People are what makes dynasty simulators interesting and this episode will be about them. There isn’t much code this time, mainly just how data is organized. Topic is long and split over several episodes.</p>\r\n<p>Some people in game are controlled by computer, while some are controlled by player. There’s no difference on what each can do in game, computer is basically just filling in for players when there aren’t enough players.</p>\r\n<p>There’s plenty of data about people, spread over several entities and database tables. Main one is <code>Person</code>, which stores name, gender, sex, date of birth and some stats (and then some more).</p>\r\n<p>There are lots of various ways of naming people and I chose to model three for the starters:</p>\r\n<pre><code>data PersonName =\r\n    RegularName FirstName FamilyName (Maybe Cognomen)\r\n    | SimpleName FirstName (Maybe Cognomen)\r\n    | RegalName FirstName FamilyName RegnalNumber (Maybe Cognomen)\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>The higher the rank, more complicated names you tend to have (for some reason). Later on I’ll try and see if I can add more varied names, like matronyms and patronyms.</p>\r\n<p>Sex and gender I’m modeling with simple system of two enumerations, sex can be <code>Female</code>, <code>Male</code> or <code>Intersex</code>, while gender has values <code>Man</code>, <code>Woman</code>, <code>Agender</code> and <code>Nonbinary</code>. System is coarse, but should be enough to get started with the game. Later on, this can be expanded to more nuanced system.</p>\r\n<p>Traits are defining features of people. These include things like brave, coward, ambitious, content, honest and such. Values are binary, character either is brave or not. And character can’t be brave and coward at the same time.</p>\r\n<p>Relations are modeled as <code>PersonRelation</code> and thus stored in <code>person_relation</code> table:</p>\r\n<pre><code>Relation json\r\n    originatorId PersonId\r\n    targetId PersonId\r\n    type RelationType\r\n    visibility RelationVisibility\r\n    deriving Show Read Eq</code></pre>\r\n<p>I find this corner of the puzzle particular interesting. This models who is parent or child, who is friend or rival. Interconnected web created by relations isn’t completely visible to players (or any other person in game). Relations have visibility, modeled as <code>RelationVisibility</code>, which tells how visible it is. Public ones are known by everyone, family relations are limited to small group of people and secret relations are only known by those who are in the fold. One aspect of the game is acquiring this information.</p>\r\n<p>Intel is modeled as <code>HumanIntelligence</code> and stored in <code>human_intelligence</code> table:</p>\r\n<pre><code>HumanIntelligence json\r\n    personId PersonId\r\n    ownerId PersonId\r\n    level PersonIntel\r\n    deriving Show Read Eq</code></pre>\r\n<p>Essentially it just lists which character has what information about certain other character. So when displaying information to players, this table has to be referenced in order to know how much to reveal to them.</p>\r\n<p>Different types of intels are listed as <code>PersonIntel</code>:</p>\r\n<pre><code>data PersonIntel =\r\n    Stats\r\n    | Demesne\r\n    | FamilyRelations\r\n    | SecretRelations\r\n    | Opinions OpinionIntel\r\n    | Traits\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>Person related data is sent back to client in <code>PersonReport</code> record (I’m not copying it here as it’s relatively large). We can have a look on how one field is processed.</p>\r\n<p>For example, in case of traits. <code>PersonReport</code> has field <code>personReportTraits :: !(Maybe [TraitReport])</code>. Exclamation mark in the beginning of type instructs Haskell that this value should be computed immediately when record is created and not left for later. I’m doing this as I know for sure that it’ll always be used and there’s no advantage on delaying computation for the time when it might be needed.</p>\r\n<p>Report creating (high level):</p>\r\n<pre><code>personReportTraits = if Traits `elem` targetIntel\r\n                        then Just $ traitReport &lt;$&gt; targetTraits\r\n                        else Nothing</code></pre>\r\n<p>That first checks that <code>Traits</code> level of intel is available and then creates list of trait reports (one for each trait person has). These have things like trait name, description, trait type and how long the trait is valid. Having separate name and description fields makes it easier to work on client side as I don’t have to come up with descriptions there anymore. I can just use what the server sends to me and be happy.</p>\r\n<p>Comments, questions and feedback are welcome. Best way to catch me nowadays is email or fediverse where I’m <code>Tuula@mastodon.social</code>.</p>\r\n',364,107,0,'CC-BY-SA','modelling,data',0,0,1),
(2867,'2019-07-30','The Kenwood TS940S Automatic Tuning Unit',784,'I cover the Automatic Tuning unit on my Kenwood TS940S, re comment from HPR2668','<p>In this episode I let you hear the operation of my Kenwood TS940S automatic tuning unit. It had been a while since I’d last transmitted and I was a bit nervous that it might not even work – apparently it still does.</p>\r\n<ul>\r\n<li><p>Link to my original show that had a comment from Michael<br />\r\nhpr2668 :: Explaining the controls on my Amateur HF Radio Part 3<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2668\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2668</a></p></li>\r\n<li><p>Link to article about the Kenwood TS940-S<br />\r\n<a href=\"https://www.universal-radio.com/catalog/hamhf/ts940s.html\" class=\"uri\">https://www.universal-radio.com/catalog/hamhf/ts940s.html</a></p></li>\r\n<li><p>Information on the Automatic Tuning Unit located internally within the Kenwood TS940S apparently its an optional Unit with Part number AT-940<br />\r\n<a href=\"https://www.universal-radio.com/catalog/hamhf/at940.html\" class=\"uri\">https://www.universal-radio.com/catalog/hamhf/at940.html</a></p></li>\r\n<li><p>if you really want to dive into more detail about Tuning units feel free to follow this link in wikipedia.<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Antenna_tuner\" class=\"uri\">https://en.wikipedia.org/wiki/Antenna_tuner</a></p></li>\r\n<li><p>Dipole information from wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Dipole_antenna\" class=\"uri\">https://en.wikipedia.org/wiki/Dipole_antenna</a></p></li>\r\n<li><p>40M band allocation information from Wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/40-meter_band\" class=\"uri\">https://en.wikipedia.org/wiki/40-meter_band</a></p></li>\r\n<li><p>Noise Blanker information from wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Noise_blanker\" class=\"uri\">https://en.wikipedia.org/wiki/Noise_blanker</a></p></li>\r\n</ul>\r\n',201,43,1,'CC-BY-SA','Amateur, Radio, Ham',0,0,1),
(2865,'2019-07-26','The YouTube channels I really like',857,'Just some random thoughts on some random youtube channels','<ul>\r\n<li><p>The Late Show with Stephen Colbert<br />\r\n(<a href=\"https://www.youtube.com/channel/UCMtFAi84ehTSYSE9XoHefig\" class=\"uri\">https://www.youtube.com/channel/UCMtFAi84ehTSYSE9XoHefig</a>)</p></li>\r\n<li><p>CuriousMarc<br />\r\nApollo AGC Part 1: Restoring the computer that put man on the Moon<br />\r\n(<a href=\"https://www.youtube.com/watch?v=2KSahAoOLdU\" class=\"uri\">https://www.youtube.com/watch?v=2KSahAoOLdU</a>)</p></li>\r\n<li><p>Virtual AGC — AGS — LVDC — Gemini<br />\r\n(<a href=\"https://github.com/virtualagc/virtualagc\" class=\"uri\">https://github.com/virtualagc/virtualagc</a>)<br />\r\n(<a href=\"https://www.ibiblio.org/apollo/\" class=\"uri\">https://www.ibiblio.org/apollo/</a>)</p></li>\r\n<li><p>Moshix<br />\r\n(<a href=\"https://www.youtube.com/user/moshe5760\" class=\"uri\">https://www.youtube.com/user/moshe5760</a>)</p></li>\r\n<li><p>Death Wears Bunny Slippers<br />\r\n(<a href=\"https://www.youtube.com/channel/UCd50A5qLv8FemVufSvDgkCQ\" class=\"uri\">https://www.youtube.com/channel/UCd50A5qLv8FemVufSvDgkCQ</a>)</p></li>\r\n</ul>\r\n',369,0,0,'CC-BY-SA','apollo,agc,youtube',0,0,1),
(2888,'2019-08-28','Pattern matching in Haskell',1236,'Tuula talks about one of their favourite features in Haskell','<p>Pattern matching is one of those features of Haskell that immediately got me interested as it reduces amount of branching inside of functions I write. Basic idea is that if value constructors are for making data, pattern matching is for taking it apart.</p>\r\n<p>First example is a function that takes a <code>Bool</code> and returns a respective <code>String</code>:</p>\r\n<pre><code>boolToString :: Bool -&gt; String\r\nboolToString n =\r\n    if n\r\n        then &quot;True&quot;\r\n        else &quot;False&quot;</code></pre>\r\n<p>Nothing too fancy, just an <code>if</code> expression inside a function. We can move that <code>if</code> out of there though and define exactly same functionality, but with patterns:</p>\r\n<pre><code>boolToString :: Bool -&gt; String\r\nboolToString True =\r\n    &quot;True&quot;\r\n\r\nboolToString False =\r\n    &quot;False&quot;</code></pre>\r\n<p>There’s one definition for <code>boolToString</code>, but two different patterns used.</p>\r\n<p>Second example is bit more complex, this time we have <code>Maybe Int</code> that is being turned into <code>String</code>. <code>Maybe</code> has two value constructors <code>Nothing</code> and <code>Just a</code>. We have two cases for <code>Just</code>, specific one for when it’s <code>Just 1</code> and more general one <code>Just n</code> that takes care of rest of the cases.</p>\r\n<pre><code>isBig :: Maybe Int -&gt; String\r\nisBig Nothing =\r\n    &quot;Not at all&quot;\r\n\r\nisBig (Just 1) =\r\n    &quot;Just perfect&quot;\r\n\r\nisBig (Just n) =\r\n    if n &lt; 10\r\n        then &quot;Just slightly&quot;\r\n        else &quot;Definitely is&quot;</code></pre>\r\n<p>Some example usage:</p>\r\n<pre><code>&gt; isBig Nothing\r\n&quot;Not at all&quot;\r\n&gt; isBig $ Just 0\r\n&quot;Just perfect&quot;\r\n&gt; isBig $ Just 50\r\n&quot;Definitely is&quot;</code></pre>\r\n<p>Pattern matching isn’t limited to algebraic datatypes that we have been working with so far. We can do same things with records. Below is an function used to calculate total fee when cost and customer are known. Each customer can have their own discount percentage, but in addition we’re giving 10% discount to VIP customers:</p>\r\n<pre><code>data Customer = Customer\r\n    { customerName :: String\r\n    , customerDiscountPct :: Double\r\n    , vipCustomer :: Bool\r\n    }\r\n\r\ntotalFee :: Double -&gt; Customer -&gt; Double\r\ntotalFee bill cust@(Customer { vipCustomer = True }) =\r\n    bill * 0.9 * customerDiscountPct cust\r\n\r\ntotalFee bill cust =\r\n    bill * customerDiscountPct cust</code></pre>\r\n<p>There’s two cases of <code>totalFee</code> function. First one is for when passed in <code>Customer</code> has <code>vipCustomer</code> field <code>True</code>. Second one takes care of general case. In the first case we’re using <code>@</code> to bind <code>Customer</code> as a whole to <code>cust</code> name.</p>\r\n<p>Lists can be matched too. The basic idea is exactly the same:</p>\r\n<ul>\r\n<li><code>(x:xs)</code> matches a list with at least one item, <code>x</code> is first item, <code>xs</code> is rest of the items (might be an empty list)</li>\r\n<li><code>(x:y:_)</code> matches two first items in a list of at least two items, <code>x</code> is first, <code>y</code> is second, <code>_</code> is rest</li>\r\n<li><code>[]</code> matches empty list</li>\r\n<li><code>(x:[])</code> matches list of exactly one item</li>\r\n</ul>\r\n<p>Underscore <code>_</code> matches to everything without binding value to a name. This is useful when you don’t care about exact value, so you don’t want to give it a name. One could give it a name, but compiler will issue a warning if there are unused values in the code.</p>\r\n<p>Next example is recursively counting amount if items in a list using pattern matching:</p>\r\n<pre><code>count :: [a] -&gt; Int\r\ncount [] =\r\n    0\r\n\r\ncount (x:xs) =\r\n    1 + count xs</code></pre>\r\n<p>Fibonacci series is series of number which starts with 0, 1 and then rest of the numbers are sum of two previous ones: 0, 1, 1, 2, 3, 5, 8…</p>\r\n<p>To calculate number in series, we can write following code (this is extremely slow way of calculating them by the way):</p>\r\n<pre><code>fibonacci :: Int -&gt; Int\r\nfibonacci 0 =\r\n    0\r\n\r\nfibonacci 1 =\r\n    1\r\n\r\nfibonacci n =\r\n    fibonacci (n - 1) + fibonacci (n - 2)</code></pre>\r\n<p>Last trick in our sleeve for now is <code>case</code> expression. This allows us to do pattern matching inside of a function. Otherwise it works in the same way. Our fibonacci function could be defined as:</p>\r\n<pre><code>fibonacci :: Int -&gt; Int\r\nfibonacci n =\r\n    case n of\r\n        0 -&gt;\r\n            0\r\n\r\n        1 -&gt;\r\n            1\r\n\r\n        n -&gt;\r\n            fibonacci (n - 1) + fibonacci (n - 2)</code></pre>\r\n<p>Questions, comments and feedback are welcome. Best way to catch me nowadays is either email or in fediverse where I’m <code>Tuula@mastodon.social</code></p>\r\n',364,107,0,'CC-BY-SA','pattern matching',0,0,1),
(2869,'2019-08-01','building a bike, following in John Kulp\'s footsteps',694,'turning a couple of old bikes into a long wheel base recumbent','<ul>\r\n<li><p>recycled recumbent<br />\r\n<a href=\"https://sites.google.com/site/recycledrecumbents/home\" class=\"uri\">https://sites.google.com/site/recycledrecumbents/home</a></p></li>\r\n<li><p>wisil recumbent<br />\r\n<a href=\"https://www.wisil.recumbents.com/home/\" class=\"uri\">https://www.wisil.recumbents.com/home/</a></p></li>\r\n<li><p>hpr 1282<br />\r\n<a href=\"https://www.hackerpublicradio.org/eps.php?id=1282\" class=\"uri\">https://www.hackerpublicradio.org/eps.php?id=1282</a></p></li>\r\n<li><p>cj hoyle<br />\r\n<a href=\"https://www.youtube.com/user/cjhoyle\" class=\"uri\">https://www.youtube.com/user/cjhoyle</a></p></li>\r\n<li><p>toledo bike<br />\r\n<a href=\"https://www.toledobikes.org/\" class=\"uri\">https://www.toledobikes.org/</a></p></li>\r\n</ul>\r\n',326,115,0,'CC-BY-SA','bicycle, recumbent, recycle',0,0,1),
(2872,'2019-08-06','Shoe Lace Tips',472,'In this episode I give some shoe lace tips','<p>In this episode I give some shoe lace tips</p>\r\n<ul>\r\n<li><p>Shoe Laces Ted Talk with over 6.5 million views<br />\r\n<a href=\"https://www.ted.com/talks/terry_moore_how_to_tie_your_shoes?language=en\" class=\"uri\">https://www.ted.com/talks/terry_moore_how_to_tie_your_shoes?language=en</a></p></li>\r\n<li><p>Some further info on the shoe lace knot from the wonderful wikipedia site<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Shoelace_knot\" class=\"uri\">https://en.wikipedia.org/wiki/Shoelace_knot</a></p></li>\r\n<li><p>Fast tie shoe laces recommended for anyone in a hurry<br />\r\n<a href=\"https://www.amazon.co.uk/Gritin-Elastic-Laces-Black-Reflective/dp/B07GYM9RC8/ref=cts_sp_3_vtp\" class=\"uri\">https://www.amazon.co.uk/Gritin-Elastic-Laces-Black-Reflective/dp/B07GYM9RC8/ref=cts_sp_3_vtp</a></p></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','hacks, tips',0,0,1),
(2874,'2019-08-08','Repair of G.E. Variable Speed Cassette Recorder',1228,'I talk about repairing a 1997 handheld cassette recorder and demonstrate its use.','<p>I found a pretty cool little handheld cassette recorder at Salvation Army Thrift Store for 99 cents yesterday. It was non-functioning. I was able to get it working again by 1. cleaning corrosion from battery compartment; 2. replacing the nasty gooey belt; 3.  repairing the battery compartment, which had a broken-off spring for one of the battery\'s negative connections. The most interesting feature of the device is that it has a variable-speed knob for playback at higher speed. I demonstrate this in the podcast.</p>\r\n\r\n<p><a data-flickr-embed=\"true\"  href=\"https://www.flickr.com/photos/137675441@N05/albums/72157709909168017\" title=\"G.E. Variable Speed Cassette Recorder Repair\" target=\"_blank\"><img src=\"https://live.staticflickr.com/65535/48384093097_f35a19caaa.jpg\" width=\"500\" height=\"281\" alt=\"G.E. Variable Speed Cassette Recorder Repair\"></a></p>\r\n\r\n<h2>Links to Stuff Mentioned in the Episode</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://www.flickr.com/photos/137675441@N05/albums/72157709909168017\" target=\"_blank\">Flickr Photo Album</a></li>\r\n	<li><a href=\"https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=assorted+cassette+belts&_sacat=0\" target=\"_blank\">Assorted cassette deck belts on eBay</a></li>\r\n	<li><a href=\"https://kahoot.com/\" target=\"_blank\">Kahoot!</a> Make Learning Awesome.</li>\r\n</ul>\r\n\r\n\r\n',238,0,0,'CC-BY-SA','Recording, Audio, Tape, Cassette, Recording Devices, Tape Speeds, Electronics, Repair',0,0,1),
(2875,'2019-08-09','cutting up the frames',456,'you\'ve got to crack some eggs to make an omelette','<h2 id=\"drawings\">Drawings</h2>\r\n<p><a href=\"https://sites.google.com/site/recycledrecumbents/ez-clone-drawings\" class=\"uri\">https://sites.google.com/site/recycledrecumbents/ez-clone-drawings</a></p>\r\n<h2 id=\"pictures\">Pictures</h2>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture01-one-of-the-donors.jpg\" alt=\"picture01-one-of-the-donors.jpg\" /><br />\r\nOne of the donors</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture02-dross.jpg\" alt=\"picture02-dross.jpg\" /><br />\r\nDross</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture03-the-gold.jpg\" alt=\"picture03-the-gold.jpg\" /><br />\r\nThe gold</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture04-first-cut.jpg\" alt=\"picture04-first-cut.jpg\" /><br />\r\nFirst cut</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture05-cutting-tubes.jpg\" alt=\"picture05-cutting-tubes.jpg\" /><br />\r\nCutting tubes</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture06-workmate.jpg\" alt=\"picture06-workmate.jpg\" /><br />\r\nWorkmate</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture07-frame2-parts.jpg\" alt=\"picture07-frame2-parts.jpg\" /><br />\r\nFrame 2 parts</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2875/picture08-frame1-parts.jpg\" alt=\"picture08-frame1-parts.jpg\" /><br />\r\nFrame 1 parts</p>\r\n',326,115,0,'CC-BY-SA','bicycle, recumbent, recycle',0,0,1),
(2876,'2019-08-12','Sausage Orzotto',2543,'A favorite recipe, dictated while it is cooked.','<p>This recipe has been heavily adapted from one I received from <a href=\"https://www.hellofresh.com\">Hello Fresh</a> - credit where credit\'s due!</p>\r\n<p>Ingredients:</p>\r\n<ul>\r\n<li>1 lb (500g) Sausage (chicken or pork works)</li>\r\n<li>1 ½ cups (192g) Orzo</li>\r\n<li>2 tbsp (40g) Butter</li>\r\n<li>Olive oil</li>\r\n<li>Zucchini</li>\r\n<li>Shallot</li>\r\n<li>1 - 2 tbsp (20-40g) Italian Seasoning</li>\r\n<li>Pepper</li>\r\n<li>2 cups (475ml) water</li>\r\n<li>1 tsp (4g) stock concentrate</li>\r\n<li>16oz (450g?? One normal can, whatever that is) Crushed or diced tomatoes</li>\r\n<li>1 cup (226g) Mozzarella cheese (shredded)</li>\r\n<li>Panko Breadcrumbs</li>\r\n<li>Salt (Optional)</li>\r\n</ul>\r\n<ol>\r\n<li>Mince half the shallot (or all of it, I\'m not the boss of you). Trim and shred the zucchini. Prepare a mixing bowl lined with a paper towel.</li>\r\n<li>Preheat oven to 500 F</li>\r\n<li>Drizzle some oil into a large oven-proof pan (if you\'ve got one) and cook the sausage, with half the Italian seasoning, over medium heat, breaking it into bite-sized pieces as you cook it. Transfer to the mixing bowl for later.</li>\r\n<li>Add another drizzle of olive oil, and shred the zucchini into the pan. Add shallot, and cook until the zucchini shrinks to ⅔ of its size (about 5 minutes). Transfer to the mixing bowl with the sausage.</li>\r\n<li>Wipe out the pan with a paper towel. Melt 1 tbsp of butter over medium heat, and add orzo, stirring pretty frequently for 2-3 minutes.</li>\r\n<li>Stir in the rest of the Italian seasoning, along with the water, tomatoes, and stock concentrate. Bring to a boil and stir until orzo is done - around 12 - 14 minutes.</li>\r\n<li>Drain excess liquid from the zucchini and sausage.</li>\r\n<li>Mix sausage &amp; zucchini into orzo mixture, with 1 tbsp of butter. Season with salt &amp; pepper, if you want.</li>\r\n<li>If you don\'t have an oven-proof pan, you\'re going to want to transfer everything over to a large baking dish of some kind. 13x9&quot; works for me.</li>\r\n<li>Cover the mixture in mozzarella cheese and panko breadcrumbs - in that order!</li>\r\n<li>Place dish in the oven for 2-3 minutes, until the breadcrumbs are toasted.</li>\r\n</ol>\r\n<p>Note: If these metric measurements seem crazy, they probably are.</p>\r\n',196,0,1,'CC-BY-SA','food,cooking',0,0,1),
(2877,'2019-08-13','Using Zenity with Pdmenu',1358,'Zenity is a rather cool program that will display GTK+ dialogs from a script','<h2 id=\"overview\">Overview</h2>\r\n<p>I use <code>pdmenu</code> a lot to help me do work on my main desktop PC. I did an HPR show on <a href=\"https://hackerpublicradio.org/eps.php?id=2443\" title=\"hpr2443 :: pdmenu\"><code>pdmenu</code></a> on 13 December 2017 and the author <a href=\"https://joeyh.name/\" title=\"Joey Hess\">Joey Hess</a> responded in show <a href=\"https://hackerpublicradio.org/eps.php?id=2459\" title=\"hpr2459 :: free software&#39;s long tail\">2459</a>.</p>\r\n<p>In the intervening time I have also integrated <a href=\"https://help.gnome.org/users/zenity/\" title=\"Zenity Manual\"><code>Zenity</code></a> into my menus. This is a GUI tool which generates a number of different pop-up windows known as <em>dialogs</em>, which can display information, or into which information can be typed. The capabilities provided by <code>pdmenu</code> are a little too basic to enable me to do what I need to do.</p>\r\n<p>I thought it might be of interest to show some examples of how I use this tool with <code>pdmenu</code>.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr2877/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Pdmenu:\r\n<ul>\r\n<li><a href=\"https://joeyh.name/code/pdmenu/\">Pdmenu website</a></li>\r\n<li><a href=\"https://joeyh.name/\">Joey Hess</a></li>\r\n</ul></li>\r\n<li>Zenity\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Zenity\">Wikipedia page</a></li>\r\n<li><a href=\"https://help.gnome.org/users/zenity/\">Zenity Manual</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','zenity,Bash scripting,pdmenu,GTK+',0,0,1),
(2879,'2019-08-15','Describing how I listen to podcasts PART 1',1877,'This episode badly covers the console audio player moc.','<p>In this series I cover how I listen to podcasts and how the process has change over the years. This episode badly covers the console audio player <code>moc</code>.</p>\r\n<ul>\r\n<li><p>Link to HPR 2112 (Home Server) episode mentioned in this podcast<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2112\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2112</a></p></li>\r\n<li><p>My first MP3 player was a Jelly Bean shaped MP3 player apparently known as an S1 MP3 player<br />\r\n<a href=\"https://en.wikipedia.org/wiki/S1_MP3_player\" class=\"uri\">https://en.wikipedia.org/wiki/S1_MP3_player</a></p></li>\r\n<li><p>Sansa Clip info on wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Sansa_Clip#Sansa_Clip\" class=\"uri\">https://en.wikipedia.org/wiki/Sansa_Clip#Sansa_Clip</a></p></li>\r\n<li><p>Raspberry Pi<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\" class=\"uri\">https://en.wikipedia.org/wiki/Raspberry_Pi</a></p></li>\r\n<li><p>Music On Console (MOC) is an ncurses-based console audio player for Linux/UNIX<br />\r\n</p>\r\n<ul>\r\n<li><p>Here is a link to information about moc on wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Music_on_Console\" class=\"uri\">https://en.wikipedia.org/wiki/Music_on_Console</a></p></li>\r\n<li>On a Debian based system Moc can be installed by issuing the following command<br />\r\n</li>\r\n</ul>\r\n<pre><code>      sudo apt-get install moc</code></pre>\r\n<ul>\r\n<li>Link to Moc, Music On Console homepage<br />\r\n<a href=\"https://moc.daper.net/\" class=\"uri\">https://moc.daper.net/</a></li>\r\n</ul></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Audio, Podcasts, Linux, Ncurses',0,0,1),
(2884,'2019-08-22','TASCAM Porta 02 MiniStudio 4-Track Cassette Recorder Demonstration',4636,'I demonstrate the use of a vintage home studio device','<p>I discuss and demonstrate the latest retro gadget I found at the flea market last weekend, a TASCAM Porta 02 MiniStudio 4-Track Cassette Recorder. It was in a bin full of junk—filthy, lacking its power supply, and I got it for only $5. I hacked a power supply, disassembled it completely, washed everything thoroughly, and put it back together. It worked perfectly with the exception of the pause button. This has been one of the most fun projects I can remember, especially because my daughter is into it too, and she\'s learning how to make multi-track recordings. I always wanted a 4-track when I was in high school but never had one. Now I do!</p>\r\n\r\n<p><a data-flickr-embed=\"true\"  href=\"https://www.flickr.com/photos/137675441@N05/albums/72157710065663101\" title=\"TSACAM Porta 02 4-Track Recording Demonstration\"><img src=\"https://live.staticflickr.com/65535/48445093092_64359d6b68.jpg\" width=\"500\" height=\"375\" alt=\"TSACAM Porta 02 4-Track Recording Demonstration\"></a></p>\r\n\r\n<h2>Links to info about stuff I mentioned</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://flic.kr/s/aHsmFL2UUv\" target=\"_blank\">Flickr album with photos from this recording session</a></li>\r\n	<li><a href=\"https://flic.kr/s/aHsmFyCT82\" target=\"_blank\">Flickr album with photos from the TASCAM machine restoration</a></li>\r\n	<li>My earlier episode about the Marantz recorder: <a href=\"https://hackerpublicradio.org/eps.php?id=1844\">hpr1844 :: The Marantz PMD 660 Professional Solid State Recorder</a></li>\r\n	<li>My video of the TASCAM testing, power supply hack, disassembly, and cleaning: <a href=\"https://youtu.be/HhM6UwBhykM\" target=\"_blank\">Watch on YouTube</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Multitrack_recording\" target=\"_blank\">Multitrack recording</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/G%C3%BCiro\" target=\"_blank\">Güiro</a> (mine is metal)</li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Claves\" target=\"_blank\">Clave</a> (instrument) and <a href=\"https://en.wikipedia.org/wiki/Clave_(rhythm)\" target=\"_blank\">clave rhythm</a> (you heard the 2-3 clave rhythm on this podcast)</li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Harmonica#Diatonic_harmonicas\" target=\"_blank\">Diatonic harmonica</a></li>\r\n	<li>	<a href=\"https://en.wikipedia.org/wiki/Chromatic_harmonica\" target=\"_blank\">Chromatic harmonica</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Microphone\" target=\"_blank\">Microphone types</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Phantom_power\" target=\"_blank\">Phantom power</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Clipping_(audio)\" target=\"_blank\">Clipping</a></li>\r\n	<li>EQ: <a href=\"https://en.wikipedia.org/wiki/Equalization_(audio)\" target=\"_blank\">Equalization</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Audio_mixing_(recorded_music)\">Mixing</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Mastering_(audio)\">Mastering</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Demo_(music)\">Demo Recordings</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Portastudio\">The TASCAM PortaStudio</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/David_Mead_(musician)\" target=\"_blank\">David Mead</a> (his first two albums were with RCA, not Polygram</li>\r\n	<li>My first test recording on the restored TASCAM Porta 02: <a href=\"https://soundcloud.com/jonkulp/tascam-4-track-cassette-recorder-test-1-vamos-a-bailar\" target=\"_blank\">Listen on Soundcloud</a></li>\r\n</ul>\r\n',238,0,0,'CC-BY-SA','Multi-Track Recording, Recording Devices, Home Recording Studios, Cassette Tapes, Vintage Recording ',0,0,1),
(2881,'2019-08-19','Automatically split album into tracks in Audacity',250,'Inspired by a Jon Kulp show, Ken splits a large recording based on silence between tracks','<p>\r\nIn this show Ken, recalls <a href=\"https://hackerpublicradio.org/eps.php?id=1771\">hpr1771 :: Audacity: Label Tracks</a> by <a href=\"https://hackerpublicradio.org/correspondents/0238.html\">Jon Kulp</a> to add Labels to an large audio file.\r\n</p>\r\n\r\n<ul>\r\n<li>Tidy up the audio to the point where you are happy with it, but do not truncate silence.</li>\r\n<li>Find the first break in the audio and check how long it is. In my case it was 4 seconds.</li>\r\n<li>Select the entire track and select <em>Analyze>Silence Finder</em></li>\r\n<li>Change <em>Maximum duration of silence</em> to just under the length of the break. In my case I set it to 3 seconds</li>\r\n<li>This will then create a series of labels on a new Label track</li>\r\n<li>Edit the names of each as desired.</li>\r\n<li>Select File > Export > Export Multiple</li>\r\n<li>Select Split Files based on Labels</li>\r\n<li>Name files using Label/Track Name</li>\r\n</ul>',30,0,1,'CC-BY-SA','Audacity, hpr1771, Detect Silence, Split Track, Label',0,0,1),
(3156,'2020-09-07','HPR Community News for August 2020',4202,'HPR Volunteers talk about shows released and comments posted in August 2020','<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/0387.html\" target=\"_blank\">Cedric De Vroey</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=3131\" target=\"_blank\">3131</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-08-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3131\" target=\"_blank\">HPR Community News for July 2020</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=3132\" target=\"_blank\">3132</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-08-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3132\" target=\"_blank\">Keeping track of where I am</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=3133\" target=\"_blank\">3133</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-08-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3133\" target=\"_blank\">Quick tip - Using MPV with Youtube links</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=3134\" target=\"_blank\">3134</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-08-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3134\" target=\"_blank\">Tomorrowland 2020</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=3135\" target=\"_blank\">3135</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-08-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3135\" target=\"_blank\">Quick Tips for May 20 20</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=3136\" target=\"_blank\">3136</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-08-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3136\" target=\"_blank\">Matchbox Restoration Part 6</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3137\" target=\"_blank\">3137</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-08-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3137\" target=\"_blank\">Coronavirus Update 2020-07-30</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=3138\" target=\"_blank\">3138</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-08-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3138\" target=\"_blank\">Linux Inlaws S01E12: Reminiscing in FLOSS Weekly</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3139\" target=\"_blank\">3139</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-08-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3139\" target=\"_blank\">MIDI Sysex</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=3140\" target=\"_blank\">3140</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-08-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3140\" target=\"_blank\">GIMP: Selection Tools</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=3141\" target=\"_blank\">3141</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-08-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3141\" target=\"_blank\">Lessons learnt from Magic the Gathering game design</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=3142\" target=\"_blank\">3142</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-08-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3142\" target=\"_blank\">tcsh</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=3143\" target=\"_blank\">3143</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-08-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3143\" target=\"_blank\">LibreOffice 7.0 Released!</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=3144\" target=\"_blank\">3144</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-08-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3144\" target=\"_blank\">Pentesting: Insecure Object Reference</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0387.html\" target=\"_blank\">Cedric De Vroey</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3145\" target=\"_blank\">3145</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-08-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3145\" target=\"_blank\">A light bulb moment, part 1</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=3146\" target=\"_blank\">3146</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-08-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3146\" target=\"_blank\">Help Me Help you with HPR eps!</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=3147\" target=\"_blank\">3147</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-08-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3147\" target=\"_blank\">NIST\'s Quantum Cryptography Update</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=3148\" target=\"_blank\">3148</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-08-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3148\" target=\"_blank\">Why Open Source matters (to me)</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=3149\" target=\"_blank\">3149</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-08-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3149\" target=\"_blank\">HPR AudioBook Club 21  - The Terrible Business of Salmon and Dusk</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0157.html\" target=\"_blank\">HPR_AudioBookClub</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3150\" target=\"_blank\">3150</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-08-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3150\" target=\"_blank\">GIMP: Paint Tools</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=3151\" target=\"_blank\">3151</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-08-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3151\" target=\"_blank\">How I listen to podcasts</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0382.html\" target=\"_blank\">Daniel Persson</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 23 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3119#comments\" target=\"_blank\">hpr3119</a></strong>\n(2020-07-16) \"<em>Converting to FFS2</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=3119#3\" target=\"_blank\">Comment 3</a>:\nZen_Floater2 on 2020-08-13:\n\"reply back to Gumnos\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3123#comments\" target=\"_blank\">hpr3123</a></strong>\n(2020-07-22) \"<em>Arduino controlled Christmas lights</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3123#1\" target=\"_blank\">Comment 1</a>:\nArcher72 on 2020-08-03:\n\"Funny story\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 21 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3131#comments\" target=\"_blank\">hpr3131</a></strong>\n(2020-08-03) \"<em>HPR Community News for July 2020</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=3131#1\" target=\"_blank\">Comment 1</a>:\nZen_Floater2 on 2020-08-13:\n\"I\'ve learned much.and I\'d like to share much as well...\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3134#comments\" target=\"_blank\">hpr3134</a></strong>\n(2020-08-06) \"<em>Tomorrowland 2020</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=3134#1\" target=\"_blank\">Comment 1</a>:\nfatherfinch on 2020-08-07:\n\"Great Energy\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3134#2\" target=\"_blank\">Comment 2</a>:\ncatn0b0t on 2020-08-10:\n\"TML 2020\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3137#comments\" target=\"_blank\">hpr3137</a></strong>\n(2020-08-11) \"<em>Coronavirus Update 2020-07-30</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=3137#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-08-11:\n\"some \'smart\' people may not take a vaccine\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-08-12:\n\"Why it matters\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#3\" target=\"_blank\">Comment 3</a>:\nZen_Floater2 on 2020-08-13:\n\"The Squirrel from the Magical Forrest\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#4\" target=\"_blank\">Comment 4</a>:\nSkepticalA on 2020-08-16:\n\"Condescending\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#5\" target=\"_blank\">Comment 5</a>:\nBob on 2020-08-16:\n\"Fact Checks on one of your claims\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#6\" target=\"_blank\">Comment 6</a>:\nbrian-in-ohio on 2020-08-16:\n\"sympathy\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#7\" target=\"_blank\">Comment 7</a>:\nAhuka on 2020-08-16:\n\"Clarification\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#8\" target=\"_blank\">Comment 8</a>:\nZen_Floater2 on 2020-08-19:\n\"Detailed research Corbit Report\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3137#9\" target=\"_blank\">Comment 9</a>:\nAnon on 2020-08-21:\n\"Conspiracy Theories: Last Week Tonight with John Oliver\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3138#comments\" target=\"_blank\">hpr3138</a></strong>\n(2020-08-12) \"<em>Linux Inlaws S01E12: Reminiscing in FLOSS Weekly</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3138#1\" target=\"_blank\">Comment 1</a>:\nAhuka on 2020-08-12:\n\"Excellent Interview\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3138#2\" target=\"_blank\">Comment 2</a>:\nClaudioM on 2020-08-14:\n\"Agree with Ahuka. Great Interview!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3138#3\" target=\"_blank\">Comment 3</a>:\nbrian-in-ohio on 2020-08-16:\n\"follow up question\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3138#4\" target=\"_blank\">Comment 4</a>:\nan anonymous listener on 2020-08-21:\n\"volume\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3139#comments\" target=\"_blank\">hpr3139</a></strong>\n(2020-08-13) \"<em>MIDI Sysex</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=3139#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-08-16:\n\"the voice\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3139#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2020-08-18:\n\"Voice\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3143#comments\" target=\"_blank\">hpr3143</a></strong>\n(2020-08-19) \"<em>LibreOffice 7.0 Released!</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=3143#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-08-19:\n\"slackware\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3144#comments\" target=\"_blank\">hpr3144</a></strong>\n(2020-08-20) \"<em>Pentesting: Insecure Object Reference</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0387.html\" target=\"_blank\">Cedric De Vroey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3144#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2020-08-20:\n\"I deal with this all the time\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3148#comments\" target=\"_blank\">hpr3148</a></strong>\n(2020-08-26) \"<em>Why Open Source matters (to me)</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=3148#1\" target=\"_blank\">Comment 1</a>:\nZen_Floater2 on 2020-08-29:\n\"Vic 20\"</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/2020-August/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-August/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 12 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3176,'2020-10-05','HPR Community News for September 2020',4187,'HPR Volunteers talk about shows released and comments posted in September 2020','<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=3152\" target=\"_blank\">3152</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-09-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3152\" target=\"_blank\">My Pocket Knives</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=3153\" target=\"_blank\">3153</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-09-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3153\" target=\"_blank\">Fixing eBooks with Calibre and pdfcrop</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=3154\" target=\"_blank\">3154</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-09-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3154\" target=\"_blank\">Make NextCloud your next cloud</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=3155\" target=\"_blank\">3155</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-09-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3155\" target=\"_blank\">LastPass Security Dashboard</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=3156\" target=\"_blank\">3156</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-09-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3156\" target=\"_blank\">HPR Community News for August 2020</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=3157\" target=\"_blank\">3157</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-09-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3157\" target=\"_blank\">Compost</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=3158\" target=\"_blank\">3158</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-09-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3158\" target=\"_blank\">Fingerprint access control? LOL... </a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0387.html\" target=\"_blank\">Cedric De Vroey</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3159\" target=\"_blank\">3159</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-09-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3159\" target=\"_blank\">Vivaldi - The Four Seasons</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=3160\" target=\"_blank\">3160</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-09-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3160\" target=\"_blank\">GIMP: Transform Tools</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=3161\" target=\"_blank\">3161</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-09-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3161\" target=\"_blank\">How I manage podcast listening</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=3162\" target=\"_blank\">3162</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-09-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3162\" target=\"_blank\">Introduction to Ansible</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=3163\" target=\"_blank\">3163</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-09-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3163\" target=\"_blank\">Linux Inlaws S01E13: The road to communism and freedom</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3164\" target=\"_blank\">3164</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-09-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3164\" target=\"_blank\">I\'m Learning Spanish</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=3165\" target=\"_blank\">3165</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-09-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3165\" target=\"_blank\">Spanish Tools Continued</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=3166\" target=\"_blank\">3166</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-09-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3166\" target=\"_blank\">Using Ansible to mirror a Git repo</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=3167\" target=\"_blank\">3167</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-09-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3167\" target=\"_blank\">A ramble with the Pentland Squires (part 1)</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=3168\" target=\"_blank\">3168</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-09-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3168\" target=\"_blank\">FreeBSD Jails and iocage</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=3169\" target=\"_blank\">3169</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-09-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3169\" target=\"_blank\">Ludwig van Beethoven with a hint of Chopin</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=3170\" target=\"_blank\">3170</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-09-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3170\" target=\"_blank\">GIMP: Color Tools</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=3171\" target=\"_blank\">3171</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-09-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3171\" target=\"_blank\">A Week On Soylent</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0107.html\" target=\"_blank\">lostnbronx</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3172\" target=\"_blank\">3172</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-09-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3172\" target=\"_blank\">A ramble with the Pentland Squires (part 2)</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=3173\" target=\"_blank\">3173</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-09-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3173\" target=\"_blank\">Manage your Raspberry Pi fleet with Ansible</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0030.html\" target=\"_blank\">Ken Fallon</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 15 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3138#comments\" target=\"_blank\">hpr3138</a></strong>\n(2020-08-12) \"<em>Linux Inlaws S01E12: Reminiscing in FLOSS Weekly</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3138#5\" target=\"_blank\">Comment 5</a>:\nRobert on 2020-09-02:\n\"..._---_\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3146#comments\" target=\"_blank\">hpr3146</a></strong>\n(2020-08-24) \"<em>Help Me Help you with HPR eps!</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3146#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2020-09-05:\n\"Keep doing what you\'re doing\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 13 comments on 6 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3152#comments\" target=\"_blank\">hpr3152</a></strong>\n(2020-09-01) \"<em>My Pocket Knives</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=3152#1\" target=\"_blank\">Comment 1</a>:\nReto on 2020-09-24:\n\"Link to the other knive podcast\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3154#comments\" target=\"_blank\">hpr3154</a></strong>\n(2020-09-03) \"<em>Make NextCloud your next cloud</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=3154#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2020-09-11:\n\"Nextcloud and self hosting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3158#comments\" target=\"_blank\">hpr3158</a></strong>\n(2020-09-09) \"<em>Fingerprint access control? LOL... </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0387.html\" target=\"_blank\">Cedric De Vroey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3158#1\" target=\"_blank\">Comment 1</a>:\nBeeza on 2020-09-11:\n\"The need for \"meta procedures\"\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3158#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-09-11:\n\"Fantastic show!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3161#comments\" target=\"_blank\">hpr3161</a></strong>\n(2020-09-14) \"<em>How I manage podcast listening</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=3161#1\" target=\"_blank\">Comment 1</a>:\nReto on 2020-09-24:\n\"Sansa MP3 Players\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3161#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2020-09-27:\n\"Rockbox and Sansa players\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3161#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2020-09-27:\n\"My Rockbox/Sansa experience\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3161#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2020-09-29:\n\"No more Sansa Clip Plus\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3167#comments\" target=\"_blank\">hpr3167</a></strong>\n(2020-09-22) \"<em>A ramble with the Pentland Squires (part 1)</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=3167#1\" target=\"_blank\">Comment 1</a>:\nAaron on 2020-09-27:\n\"Nice conversation, thanks for sharing it\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3167#2\" target=\"_blank\">Comment 2</a>:\nZen_Floater2 on 2020-09-27:\n\"Squirrels love local chit-chat\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3167#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2020-09-29:\n\"Thanks for the feedback\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3168#comments\" target=\"_blank\">hpr3168</a></strong>\n(2020-09-23) \"<em>FreeBSD Jails and iocage</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><li><a href=\"https://hackerpublicradio.org/eps.php?id=3168#1\" target=\"_blank\">Comment 1</a>:\n0xf10e on 2020-09-27:\n\"Why an additional disk/zpool?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3168#2\" target=\"_blank\">Comment 2</a>:\nnorrist on 2020-09-28:\n\"2nd disk for iocage\"</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/2020-September/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-September/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 7 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2889,'2019-08-29','Describing how I listen to podcasts PART 2',1052,'In this episode I cover the hardware I\'ve used over the years to listen to podcasts.','<h3 id=\"short-summary\">Short Summary</h3>\r\n<p>In this series I cover how I listen to podcasts and how the process has change over the years. In this episode I cover the hardware I’ve used over the years to listen to podcasts.</p>\r\n<ul>\r\n<li><p>Link to HPR 2112 (Home Server) episode mentioned in this podcast<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2112\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2112</a></p></li>\r\n<li><p>Link to HPR 2106 (Hpodder) Episode mentioned in this podcast<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2106\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2106</a></p></li>\r\n<li><p>The cordless headphones I use are analogue cordless headphones they operate in the UHF 860 MHz RF spectrum and use Frequency modulation</p></li>\r\n<li><p>(Picture 01) shows a pair of JVC cordless headphones, these were my first pair of cordless headphones, from memory they were reasonably comfortable and lasted a reasonably long time, they eventually gave way when the strap along the top completely split if you look carefully you can see evidence of this in the picture. <img src=\"https://hackerpublicradio.org/eps/hpr2889/Picture-01.JPG\" alt=\"Picture-01.JPG\" /></p></li>\r\n<li><p>I think my 2nd set pair of cordless headphones were made by Phillips, unfortunately I don’t have a picture of these. The headphones were too big and kept falling from my head.</p></li>\r\n<li><p>(Picture 02) shows a pair of Sony headphones that I can’t even remember owning! I’ve lost count of how many cordless headphones I’ve owned over the years, these were also too big and regularly fell off my head, there are probably other pairs which I have forgotten about. It took a lot of trial an error to find a pair that would fit properly. <img src=\"https://hackerpublicradio.org/eps/hpr2889/Picture-02.JPG\" alt=\"Picture-02.JPG\" /></p></li>\r\n<li><p>I think my 3rd set of cordless headphones were a cheap pair from Liddles, unfortunately I don’t have a picture of these again these were also too big.</p></li>\r\n<li><p>(Picture 03) Shows my current set of cordless headphones, unfortunately my camera refused to work while taking this picture so you’ll not be able to identify the manufacturer which is a great pity as they are absolutely great also the lighting in here is very bad so you won’t be able to make out the writing printed on them :) <img src=\"https://hackerpublicradio.org/eps/hpr2889/Picture-03.JPG\" alt=\"Picture-03.JPG\" /></p></li>\r\n<li><p>Compaq N610C laptop<br />\r\n<img src=\"https://1.bp.blogspot.com/_73lLV6srqwY/SxB7dASme9I/AAAAAAAAAVU/QsNP-O2chaU/s1600/missionaccomplished.jpg\" alt=\"https://1.bp.blogspot.com/_73lLV6srqwY/SxB7dASme9I/AAAAAAAAAVU/QsNP-O2chaU/s1600/missionaccomplished.jpg\" /></p></li>\r\n<li><p>Screen<br />\r\n<a href=\"https://en.wikipedia.org/wiki/GNU_Screen\" class=\"uri\">https://en.wikipedia.org/wiki/GNU_Screen</a></p></li>\r\n<li><p>EEE PC Laptop<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Asus_Eee_PC\" class=\"uri\">https://en.wikipedia.org/wiki/Asus_Eee_PC</a></p></li>\r\n<li><p>Pictures (04 and 05) are of my Nokia N810 <img src=\"https://hackerpublicradio.org/eps/hpr2889/Picture-04.JPG\" alt=\"Picture-04.JPG\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2889/Picture-05.JPG\" alt=\"Picture-05.JPG\" /></p></li>\r\n<li><p>Below is a link from wikipedia covering the Nokia N810.<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Nokia_N810\" class=\"uri\">https://en.wikipedia.org/wiki/Nokia_N810</a></p></li>\r\n<li><p>Links to shows where klaatu references the Nokia N770 which came out before the Nokia N810 but is very similar<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=0228\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=0228</a><br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=0416\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=0416</a></p></li>\r\n<li><p>Nexus 7, first generation<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Nexus_7_(2012)\" class=\"uri\">https://en.wikipedia.org/wiki/Nexus_7_(2012)</a></p></li>\r\n<li><p>Psion 3C<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Psion_Series_3#Psion_Series_3c\" class=\"uri\">https://en.wikipedia.org/wiki/Psion_Series_3#Psion_Series_3c</a></p></li>\r\n<li><p>Raspberry pi<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\" class=\"uri\">https://en.wikipedia.org/wiki/Raspberry_Pi</a></p></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Audio, Podcasts, Linux, Command Line, PDA, hardware',0,0,1),
(2908,'2019-09-25','Modeling opinions in space game',2104,'Tuula talks about modeling opinions','<p>We continue with people, this time focusing on opinions. This episode has somewhat more code than previous one, so following along with the shownotes might be a good idea. I’m trying to minimize amount of code I read out aloud.</p>\r\n<h2 id=\"intro\">Intro</h2>\r\n<p>One person’s opinion of another is expressed as <code>OpinionScore</code> that ranges from -100 to 100.</p>\r\n<p>Computing the score is based on intelligence player has available to them. Internally we have <code>ReportResult</code> that tracks score, reasons for the score and confidence level about the results. It’s defined as:</p>\r\n<pre><code>data ReportResult =\r\n    FeelingLevel OpinionScore\r\n    | ReasonsLevel OpinionScore [OpinionReason]\r\n    | DetailedLevel OpinionScore [OpinionReason]\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>We’re going to be adding up these results quite a bit, so we define <code>SemiGroup</code> and <code>Monoid</code> instances for it. When two results are combined, scores are added together, lists of reasons are concatenated and the lowest confidence level is used. This is written as:</p>\r\n<pre><code>instance Semigroup ReportResult where\r\n    (FeelingLevel s1) &lt;&gt; (FeelingLevel s2) = FeelingLevel (s1 &lt;&gt; s2)\r\n    (FeelingLevel s1) &lt;&gt; (ReasonsLevel s2 _) = FeelingLevel (s1 &lt;&gt; s2)\r\n    (FeelingLevel s1) &lt;&gt; (DetailedLevel s2 _) = FeelingLevel (s1 &lt;&gt; s2)\r\n    (ReasonsLevel s1 _) &lt;&gt; (FeelingLevel s2) = FeelingLevel (s1 &lt;&gt; s2)\r\n    (ReasonsLevel s1 r1) &lt;&gt; (ReasonsLevel s2 r2) = ReasonsLevel (s1 &lt;&gt; s2) (r1 &lt;&gt; r2)\r\n    (ReasonsLevel s1 r1) &lt;&gt; (DetailedLevel s2 r2) = ReasonsLevel (s1 &lt;&gt; s2) (r1 &lt;&gt; r2)\r\n    (DetailedLevel s1 _) &lt;&gt; (FeelingLevel s2) = FeelingLevel (s1 &lt;&gt; s2)\r\n    (DetailedLevel s1 r1) &lt;&gt; (ReasonsLevel s2 r2) = ReasonsLevel (s1 &lt;&gt; s2) (r1 &lt;&gt; r2)\r\n    (DetailedLevel s1 r1) &lt;&gt; (DetailedLevel s2 r2) = DetailedLevel (s1 &lt;&gt; s2) (r1 &lt;&gt; r2)\r\n\r\n\r\ninstance Monoid ReportResult where\r\n    mempty = DetailedLevel mempty mempty</code></pre>\r\n<h2 id=\"opinion-based-on-traits\">Opinion based on traits</h2>\r\n<p>Current system compares two lists of traits. For example, two brave characters like each other slightly better than if one of them would be coward. Comparison is done by <code>traitPairOpinion</code> function, which definition I’m omitting as it’s rather long and not too interesting. It’s signature is: <code>traitPairOpinion :: TraitType -&gt; TraitType -&gt; Maybe (OpinionScore, OpinionReason)</code>. So, given two traits, tells how that pair affects to opinion and reasoning for it.</p>\r\n<p>In order to have nicer format for out data, we introduce a helper function:</p>\r\n<pre><code>traitPairScore :: TraitType -&gt; TraitType -&gt; (OpinionScore, [OpinionReason])\r\ntraitPairScore a b =\r\n    case traitPairOpinion a b of\r\n            Nothing -&gt;\r\n                mempty\r\n\r\n            Just (s, r) -&gt;\r\n                (s, [r])</code></pre>\r\n<p>This is because <code>(OpinionScore, OpinionReason)</code> isn’t monoid, but <code>(OpinionScore, [OpinionReason])</code> is, which means we can combine them with <code>&lt;&gt;</code>.</p>\r\n<p>Actual score calculation based on traits, we do it like this:</p>\r\n<pre><code>traitScore :: [TraitType] -&gt; [PersonIntel] -&gt; [TraitType] -&gt; [PersonIntel] -&gt; ReportResult\r\ntraitScore originatorTraits originatorIntel targetTraits targetIntel =\r\n    if (Traits `elem` originatorIntel) &amp;&amp; (Traits `elem` targetIntel)\r\n        then DetailedLevel score reasons\r\n        else FeelingLevel score\r\n    where\r\n        (score, reasons) = mconcat $ traitPairScore &lt;$&gt; originatorTraits &lt;*&gt; targetTraits</code></pre>\r\n<p>The interesting part is <code>mconcat $ traitPairScore &lt;$&gt; originatorTraits &lt;*&gt; targetTraits</code>. Function <code>traitPairScore</code> expects two <code>TraitType</code> values as parameters, but we’re calling it with two lists of such values. First step is to use <code>&lt;$&gt;</code> and list of values, which produces a list of partially applied functions. Second step is to use <code>&lt;*&gt;</code> to call each and every of those functions with values from second list. Result is a list of results that were obtained by calling <code>traitPairScore</code> with every combination of elements from two lists. Final step is to take this list of <code>ReportResult</code> values and combine them to single result with <code>mconcat</code>.</p>\r\n<p>Finally, based on available intel, <code>ReportResult</code> of correct level is created.</p>\r\n<h2 id=\"opinion-based-on-relations\">Opinion based on relations</h2>\r\n<p>Score based on relations is similar, but a bit convoluted (or rather, a lot more).</p>\r\n<p>Intel here has two dimensions. One of them is relationship visibility (is it public, family relation or secret relation), another is level of detail: <code>BaseOpinionIntel</code>, <code>ReasonsForOpinions</code> and <code>DetailedOpinions</code>.</p>\r\n<p><code>relationScore</code> is the entry point for calculation:</p>\r\n<pre><code>relationScore :: [PersonIntel] -&gt; [Relation] -&gt; ReportResult\r\nrelationScore intel relations =\r\n    mconcat $ (relReport oIntel score) &lt;$&gt; visibilities\r\n    where\r\n        score = mconcat $ (relationTypeScore . relationType) &lt;$&gt; relations\r\n        visibilities = mkUniq $ relationVisibility &lt;$&gt; relations\r\n        oIntel = mkUniq $ mapMaybe (\\case\r\n                                        Opinions x -&gt;\r\n                                            Just x\r\n\r\n                                        _ -&gt;\r\n                                            Nothing)\r\n                                   intel</code></pre>\r\n<p>Code has to take into account of what level of intel we have about opinions and on what detail: <code>oIntel</code>. On the other hand, <code>visibilities</code> is unique relation visibilities that exists in relations in this particular case and <code>score</code> is computed based on relations.</p>\r\n<p>Function <code>relReport</code> creates final report. It takes into account on what level of intel we have, by doing: <code>matching = safeHead $ reverse $ sort $ filter (\\x -&gt; opinionIntelVisibility x == visibility) intel</code>. This finds highest level intel we have about this particular relationship visibility. Based on the highest level of available intel <code>ReportResult</code> is created with correct confidence level. Ie. if there’s no specific intel, we get <code>FeelingLevel</code> report. If there’s intel about why particular person has certain opinion, we get <code>ReasonsLevel</code> report. Whole definition of function is below:</p>\r\n<pre><code>relReport :: [OpinionIntel]\r\n    -&gt; (OpinionScore, [OpinionReason])\r\n    -&gt; RelationVisibility\r\n    -&gt; ReportResult\r\nrelReport intel (score, reasons) visibility =\r\n    case matching of\r\n        Nothing -&gt;\r\n            FeelingLevel score\r\n\r\n        Just (BaseOpinionIntel _) -&gt;\r\n            FeelingLevel score\r\n\r\n        Just (ReasonsForOpinions _) -&gt;\r\n            ReasonsLevel score reasons\r\n\r\n        Just (DetailedOpinions _) -&gt;\r\n            DetailedLevel score reasons\r\n    where\r\n        matching = safeHead $ reverse $ sort $ filter (\\x -&gt; opinionIntelVisibility x == visibility) intel</code></pre>\r\n<h2 id=\"opinion-report\">Opinion report</h2>\r\n<p>To pull all this together, we combine results of these two functions. Based on given information, it’ll compute <code>traitsRep</code> and <code>relationsRep</code>. These two are combined with <code>&lt;&gt;</code> as explained earlier in episode:</p>\r\n<ul>\r\n<li>scores are summed up</li>\r\n<li>reason lists are concatenated</li>\r\n<li>confidence level is lowest of two</li>\r\n</ul>\r\n<pre><code>opinionReport :: [TraitType]\r\n    -&gt; [PersonIntel]\r\n    -&gt; [TraitType]\r\n    -&gt; [PersonIntel]\r\n    -&gt; [Relation]\r\n    -&gt; OpinionReport\r\nopinionReport originatorTraits originatorIntel targetTraits targetIntel targetRelations =\r\n    reportResultToOpinionResult $ traitsRep &lt;&gt; relationsRep\r\n    where\r\n        traitsRep = traitScore originatorTraits originatorIntel targetTraits targetIntel\r\n        relationsRep = relationScore originatorIntel targetRelations</code></pre>\r\n<p>Finally <code>ReportResult</code> is transformed to <code>OpinionReport</code>, which can be sent to client.</p>\r\n<p><code>OpinionReport</code> has three levels:</p>\r\n<ul>\r\n<li><code>BaseOpinionReport</code> only tells if feeling is positive, neutral or negative</li>\r\n<li><code>OpinionReasonReport</code> has feeling and in addition to reasoning</li>\r\n<li><code>DetailedOpinionReport</code> has exact (more or less) score and reasoning</li>\r\n</ul>\r\n<pre><code>data OpinionReport =\r\n    BaseOpinionReport OpinionFeeling\r\n    | OpinionReasonReport OpinionFeeling [OpinionReason]\r\n    | DetailedOpinionReport OpinionScore [OpinionReason]\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>Actual transformation is shown here:</p>\r\n<pre><code>reportResultToOpinionResult :: ReportResult -&gt; OpinionReport\r\nreportResultToOpinionResult (FeelingLevel score) =\r\n    BaseOpinionReport $ scoreFeeling score\r\n\r\nreportResultToOpinionResult (ReasonsLevel score reasons) =\r\n    OpinionReasonReport (scoreFeeling score) reasons\r\n\r\nreportResultToOpinionResult (DetailedLevel score reasons) =\r\n    DetailedOpinionReport (clamp (-100) 100 score) reasons</code></pre>\r\n<h2 id=\"note-about-incorrectness\">Note about incorrectness</h2>\r\n<p>Reports are based on intel and this might lead into incorrect results. In case of player’s own avatar, they have full intel (ie. they know all relations, all traits and so on.) Therefore opinion about some other person is based wholly on what we know about them.</p>\r\n<p>But in case of gauging somebody else’s opinion about us or person A’s opinion of person B, when A or B isn’t us, there’s chance of misjudging things. We might not know everything about them, or we might know more about A than B knows about them. In short, opinion shown for player, is just best effort guess.</p>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>Questions, comments and feedback is welcome. Even better is if you record your own HPR episode. Best way to reach me nowadays is by email or in fediverse, where I’m <code>Tuula@mastodon.social</code>.</p>\r\n<p>ad astra!</p>\r\n',364,107,0,'CC-BY-SA','haskell, game development',0,0,1),
(2903,'2019-09-18','What is PMEM',453,'Persistent memory (PMEM), also known as storage-class memory','<h3 id=\"what-is-persistent-memory\">What is persistent memory?</h3>\r\n<p>In brief, PMEM is next generation memory technology whose data transfer speed is as good as DRAM (50-300 ns, 100 times faster than SSDs) and unlike DRAM, it can even retain the data after reboots.</p>\r\n<p>In detail persistent memory (PMEM) is a solid-state high-performance byte-addressable memory device that resides on the memory bus. Being on the memory bus allows PMEM to have DRAM-like access to data, which means that it has nearly the same speed and latency of DRAM and the nonvolatility of NAND flash. NVDIMM (nonvolatile dual in-line memory module) and Intel 3D XPoint DIMMs (also known as Optane DC persistent memory modules) are two examples of persistent memory technologies.</p>\r\n<p>Persistent memory, such as Intel® Optane™ DC Persistent Memory, provides a future-proofed solution. Installed alongside traditional RAM, PMEM has many of the advantages of DRAM, including low latency access. But it comes in greater capacities. Intel® Optane™ DC, for example, will be available in 128GB, 256GB and 512GB sizes.</p>\r\n<h3 id=\"persistent-memory-benefits\">Persistent Memory Benefits</h3>\r\n<p>Persistent memory in the data center allows applications to run without incurring the latency penalty of going out to storage.</p>\r\n<p>The main advantages of persistent memory include:</p>\r\n<ul>\r\n<li>Provides access latencies less than those of flash SSDs.</li>\r\n<li>Increases throughput more than flash storage.</li>\r\n<li>Cheaper than DRAM.</li>\r\n<li>PMEM is cacheable. This is a huge advantage over PCIe interconnect, which cannot be cached in the CPU.</li>\r\n<li>Real-time access to data; allows ultrafast access to large datasets.</li>\r\n<li><p>Data persists in memory after power interruption, like flash.</p></li>\r\n<li>Persistent Memory Use Cases\r\n<ul>\r\n<li>Fraud detection</li>\r\n<li>Cyberthreat analysis</li>\r\n<li>Web-scale personalization</li>\r\n<li>Financial trading</li>\r\n<li>Internet of Things (IoT)</li>\r\n</ul></li>\r\n</ul>\r\n<pre><code>    Non       \\\r\n    Volatile  /- Non-volatile: you plug it off and on again, and the Information is still there\r\n\r\n    Double    \\\r\n    In-line   | DIMM: This the HW format\r\n    Memory    |\r\n    Module    /</code></pre>\r\n<h3 id=\"persistent-memory-vs.-nvram\">Persistent Memory Vs. NVRAM</h3>\r\n<p>Nonvolatile random-access memory (NVRAM) is random-access memory that retains its information even if there is no power. If power is lost before the data is written to disk, you don’t lose the data because it can be recovered from NVRAM. NVRAM uses battery backup to keep data persistent. During this time it can flash the data out to a flash device that is attached directly. In most cases, NVRAM resides on the PCIe bus.</p>\r\n<p>PMEM or NVDIMM-N can also be backed up by battery. It resides only on the memory bus.</p>\r\n<h3 id=\"where-pmem-is-going\">Where PMEM is going</h3>\r\n<p>It’s no wonder that this sort of ‘in-memory’ computing has exploded in recent years. According to Gartner, 75 percent of cloud-native application development will use in-memory/PMEM computing by 2019, and by 2021, at least 25 percent of large and global organisations will adopt platforms using in-memory technologies.</p>\r\n<h3 id=\"drawbacks-of-pmem\">Drawbacks of PMEM</h3>\r\n<ul>\r\n<li>PMEM is a local store.</li>\r\n<li>Host failures can result in loss of availability.</li>\r\n<li>In the case of catastrophic errors you may lose all data and must take manual steps to reformat the PMEM.</li>\r\n</ul>\r\n<h2 id=\"reference-notes\">Reference Notes</h2>\r\n<ul>\r\n<li><a href=\"https://www.netapp.com/us/info/what-is-persistent-memory.aspx\" class=\"uri\">https://www.netapp.com/us/info/what-is-persistent-memory.aspx</a></li>\r\n<li><a href=\"https://www.intel.co.uk/content/www/uk/en/it-management/cloud-analytic-hub/pmem-next-generation-storage.html\" class=\"uri\">https://www.intel.co.uk/content/www/uk/en/it-management/cloud-analytic-hub/pmem-next-generation-storage.html</a></li>\r\n<li><a href=\"https://vthinkbeyondvm.com/vsphere-6-7-what-is-pmem-and-how-vsphere-drs-works-with-pmem-configured-vms/\" class=\"uri\">https://vthinkbeyondvm.com/vsphere-6-7-what-is-pmem-and-how-vsphere-drs-works-with-pmem-configured-vms/</a></li>\r\n<li><a href=\"https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-EB72D358-9C2C-4FBD-81A9-A145E155CE31.html\" class=\"uri\">https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-EB72D358-9C2C-4FBD-81A9-A145E155CE31.html</a></li>\r\n<li><a href=\"https://vmsplice.net/~stefan/nvdimm_slides_public.pdf\" class=\"uri\">https://vmsplice.net/~stefan/nvdimm_slides_public.pdf</a></li>\r\n<li><a href=\"https://www.theregister.co.uk/2018/09/07/persistent_memory_whirlwind_is_spinning_up/\" class=\"uri\">https://www.theregister.co.uk/2018/09/07/persistent_memory_whirlwind_is_spinning_up/</a></li>\r\n</ul>\r\n',129,0,0,'CC-BY-SA','Pmem, intel, memory, storage',0,0,1),
(2882,'2019-08-20','ONICS Part 1:  Basic Commands',1364,'In this episode I review some basic commands for manipulating packet captures','<p>Background</p>\r\n<ul>\r\n<li>It\'s been about 6 years since I talked about my project ONICS in HPR 1350</li>\r\n<li>ONICS stands for Open Network Inpection Command Suite</li>\r\n<li>I created ONICS as because I thought it would be neat to have a suite of tools that could manipulate packets on the command line in a way similar to how tools lik sed, awk, grep, cut, and so forth manipulate text.</li>\r\n</ul>\r\n<p>Installing</p>\r\n<ul>\r\n<li>Not currently maintained in any package distributions</li>\r\n<li>Maintainers who are interested in doing so are welcome</li>\r\n<li>Install by source</li>\r\n</ul>\r\n<pre><code>    $ git clone https://gitlab.com/catlib/catlib\r\n    $ cd catlib\r\n    $ make\r\n    $ cd ..\r\n    $ git clone https://gitlab.com/onics/onics\r\n    $ cd onics\r\n    $ ./configure\r\n    $ make\r\n    $ make test\r\n    $ sudo make install\r\n    $ make veryclean\r\n</code></pre>\r\n<ul>\r\n<li>Can always uninstall cleanly from the source directory</li>\r\n</ul>\r\n<pre><code>    $ make uninstall\r\n</code></pre>\r\n<ul>\r\n<li>Alternate to installation is to stop at \'make test\' and then add to \'onics/bin\' and \'onics/scripts\' to your path.</li>\r\n</ul>\r\n<p>Documentation</p>\r\n<ul>\r\n<li><p>Manpages are available in onics/doc directory if you aren\'t installing locally. They are quite extensive.</p></li>\r\n<li><p>If installed locally, starting with:</p></li>\r\n</ul>\r\n<pre><code>    $ man onics\r\n</code></pre>\r\n<p>XPKT Format</p>\r\n<ul>\r\n<li><p>PCAP format is outdated and not very extensible</p>\r\n<ul>\r\n<li>I want to be able to annotate with interface IDs, flow IDs, packet numbers, classification info, header offsets, etc...</li>\r\n</ul></li>\r\n<li><p>First and foremost, the file header prevents just <code>cat</code>ing files together.</p>\r\n<ul>\r\n<li>it makes merging live streams more difficult</li>\r\n<li>pcapng improves things but still has global file header</li>\r\n</ul></li>\r\n</ul>\r\n<p>First Programs</p>\r\n<ul>\r\n<li>Let\'s first capture in the traditional way</li>\r\n</ul>\r\n<pre><code>    $ sudo tcpdump -i eth0 -c 5 -w file1.pcap\r\n</code></pre>\r\n<ul>\r\n<li>First program is to capture packets from the wire:</li>\r\n</ul>\r\n<pre><code>    $ sudo pktin eth0 &gt; file2.xpkt\r\n</code></pre>\r\n<ul>\r\n<li>If not running as root</li>\r\n</ul>\r\n<pre><code>    $ sudo chown myname file1.pcap file2.xpkt\r\n</code></pre>\r\n<ul>\r\n<li>Let\'s dump them:</li>\r\n</ul>\r\n<pre><code>    $ tcpdump -r file1.pcap\r\n    $ xpktdump file2.xpkt\r\n</code></pre>\r\n<ul>\r\n<li>Now lets convert the PCAP to XPKT</li>\r\n</ul>\r\n<pre><code>    $ pc2xpkt file1.pcap file1.xpkt\r\n      or\r\n    $ pc2xpkt file1.pcap &gt; file1.xpkt\r\n      or\r\n    $ pc2xpkt &lt; file1.pcap &gt; file1.xpkt\r\n      or\r\n    $ cat file1.pcap | pc2xpkt &gt; file1.xpkt\r\n</code></pre>\r\n<ul>\r\n<li>Now we can dump file1 using xpktdump:</li>\r\n</ul>\r\n<pre><code>    $ xpktdump file1.xpkt\r\n</code></pre>\r\n<p>Something we can\'t do w/ tcpdump</p>\r\n<ul>\r\n<li>Lets now merge them one after another</li>\r\n</ul>\r\n<pre><code>    $ cat file1.xpkt file2.xpkt &gt; merged.xpkt\r\n    $ xpktdump merged.xpkt\r\n</code></pre>\r\n<ul>\r\n<li>Of course there\'s a simpler way</li>\r\n</ul>\r\n<pre><code>    $ cat file1.xpkt file2.xpkt | xpktdump\r\n</code></pre>\r\n<p>Convert back to pcap:</p>\r\n<ul>\r\n<li>Let\'s convert file2 to PCAP</li>\r\n</ul>\r\n<pre><code>    $ xpkt2pc file2.xpkt file2.pcap\r\n      or\r\n    $ xpkt2pc &lt; file2.xpkt &gt; file2.pcap\r\n      or\r\n    $ xpkt2pc file2.xpkt &gt; file2.pcap\r\n      or\r\n    $ cat file2.xpkt | xpkt2pc &gt; file2.pcap\r\n</code></pre>\r\n<ul>\r\n<li>Let\'s look at the stream using tcpdump:</li>\r\n</ul>\r\n<pre><code>    $ tcpdump -r file2.pcap\r\n</code></pre>\r\n<ul>\r\n<li>If we didn\'t want to actually store as a PCAP</li>\r\n</ul>\r\n<pre><code>    $ xpkt2pc file2.xpkt | tcpdump -r -\r\n</code></pre>\r\n<ul>\r\n<li>Let\'s concatenate and dump using tcpdump</li>\r\n</ul>\r\n<pre><code>    $ cat file1.xpkt file2.xpkt | xpkt2pc | tcpdump -r | less\r\n</code></pre>\r\n<p>Sending packets:</p>\r\n<pre><code>    $ sudo tcpdump -i eth0  # in one terminal\r\n    $ sudo pktout -i eth0 file1.xpkt\r\n      or\r\n    $ sudo pktout -i eth0 &lt; file1.xpkt\r\n      or\r\n    $ cat file1.xpkt | sudo pktout -i eth0\r\n</code></pre>\r\n<p>Summary</p>\r\n<ul>\r\n<li>XPKT is a versatile, extensible, self-contained packet trace format</li>\r\n<li>ONICS\' most basic tools are pktin, pktout, pc2xpkt and xpkt2pc</li>\r\n<li>We\'ve demonstrated how the ONICS design supports leveraging the power of the UNIX command line for packets</li>\r\n<li>This is only the VERY beginning. ONICS has over 20 binaries and 30 scripts for manipulating packets.</li>\r\n</ul>\r\n',259,61,0,'CC-BY-SA','networking, command-line, tools',0,0,1),
(2887,'2019-08-27','Stardrifter RPG Playtest Part 01',2202,'Lostnbronx and friends playtest a new, original RPG system.','<p>\r\nThis episode begins a limited series covering the first playtest of a new role-playing game, based upon my Stardrifter series of books and short stories. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.\r\n</p>\r\n<p>\r\nThis series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.\r\n</p>\r\n<p>\r\nIn this first episode, as well as the next, we we go over the rules of the game, and discuss them in some detail.\r\n</p>\r\n<p>\r\nSpecial thanks to my playtesters: Klaatu, Thaj, Mark (who was playing Brinn), and Brian!\r\n</p>\r\n',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2892,'2019-09-03','Stardrifter RPG Playtest Part 02',2247,'Lostnbronx and friends playtest a new, original RPG system.','<p>\r\nThis episode is Part 2 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.\r\n</p>\r\n<p>\r\nThis series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.\r\n</p>\r\n<p>\r\nIn this part, we continue to go over the rules of the game, and discuss them in some detail.\r\n</p>\r\n<p>\r\nSpecial thanks to my playtesters: Klaatu, Thaj, Mark (who was playing Brinn), and Brian!\r\n</p>',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2897,'2019-09-10','Stardrifter RPG Playtest Part 03',2446,'Lostnbronx and friends playtest a new, original RPG system.','<p>\r\nThis episode is Part 3 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.\r\n</p>\r\n<p>\r\nThis series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.\r\n</p>\r\n<p>\r\nIn this part, we continue to go over the rules of the game, and then start into the adventure!\r\n</p>\r\n<p>\r\nSpecial thanks to my playtesters: Klaatu, Thaj, Mark (who was playing Brinn), and Brian!\r\n</p>',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2902,'2019-09-17','Stardrifter RPG Playtest Part 04',3286,'Lostnbronx and friends playtest a new, original RPG system.','<p>\r\nThis episode is Part 4 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.\r\n</p>\r\n<p>\r\nThis series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.\r\n</p>\r\n<p>\r\nIn this part, the characters have a job prospect...but is it legitimate, or are they being conned?\r\n</p>\r\n<p>\r\nSpecial thanks to my playtesters: Klaatu, Thaj, Mark (who was playing Brinn), and Brian!\r\n</p>',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2907,'2019-09-24','Stardrifter RPG Playtest Part 05',3120,'Lostnbronx and friends playtest a new, original RPG system.','<p>\r\nThis episode is Part 5 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.\r\n</p>\r\n<p>\r\nThis series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.\r\n</p>\r\n<p>\r\nIn this part, the characters take on a contract to deal with some...hippies?\r\n</p>\r\n<p>\r\nSpecial thanks to my playtesters: Klaatu, Thaj, and Mark (who was playing Brinn)\r\n</p>',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2885,'2019-08-23','ONICS Part 2: Filtering and Extraction',994,'In this episode I discuss commands to filter and/or extract packets from a packet trace file.','<p>In this episode we\'ll talk about filtering and dissecting packet traces and streams and introduce diffing. Remember that most tools have very flexible options for a variety of use cases. So check their manpages. Each man page also has multiple examples of how to use each tool.</p>\r\n<h3 id=\"counting-packets\">Counting Packets</h3>\r\n<ul>\r\n<li>Lets start with grabbing a trace from the unit tests:</li>\r\n</ul>\r\n<pre><code>   $ mkdir /tmp/packets\r\n   $ cd /tmp/packets\r\n   $ cp /path/to/onics/tests/data/packets/sample.xpkt .\r\n</code></pre>\r\n<ul>\r\n<li>Lets see what we have inside. First, lets see how many packets there are. We\'ll use a new tool \'pcount\'.</li>\r\n</ul>\r\n<pre><code>   $ pcount sample.xpkt\r\n\r\n   90 total packets and 19082 total bytes.\r\n</code></pre>\r\n<ul>\r\n<li>Good thing we looked first. Don\'t want to walk through all the packets.</li>\r\n</ul>\r\n<h3 id=\"scanning-packet-flows\">Scanning Packet Flows</h3>\r\n<ul>\r\n<li><p>Well, lets look at the connections or &quot;flows&quot; in the trace. We\'ll do this by using the \'nftrk\' command for &quot;network flow tracker&quot;.</p></li>\r\n<li><p>Like \'pcount\' this utility (and many or most ONICS utilities), this program can run on a live stream or a trace file. We\'ll run:</p></li>\r\n</ul>\r\n<pre><code>   $ nftrk -dt sample.xpkt | grep END\r\n</code></pre>\r\n<p>and get:</p>\r\n<pre><code>   |FLOW END|IP:ca=192.168.0.43,sa=224.0.0.251,proto=2|Start=1565446184.543,\r\n   End=1565446184.544,Dur=0.001|SENT:1,60|\r\n   ...\r\n   |FLOW END|IP:ca=192.168.0.7,sa=192.168.0.255,proto=17,cpt=631,spt=631|\r\n   Start=1565446184.543,End=1565446184.544,Dur=0.001|SENT:3,660|\r\n</code></pre>\r\n<ul>\r\n<li><p>\'nftrk\' tracks flows giving events like the start and end of each flow or connection. We just want a summary of all the connections so we just grep for \'END\' (all caps).</p></li>\r\n<li><p>We could just as easily have grepped for START, but this way we get the final number of packets sent and received on each connection. If we just want a count of the connections we can do:</p></li>\r\n</ul>\r\n<pre><code>   $ nftrk -dt sample.xpkt | grep START | wc -l\r\n</code></pre>\r\n<p>and that tells us that there are 10 flows in the trace.</p>\r\n<h3 id=\"basic-filtering\">Basic Filtering</h3>\r\n<ul>\r\n<li>Ok, so 90 packets, in 10 flows totalling ~19000 bytes. Lets now see about filtering the connection so we just get the TCP packets.</li>\r\n</ul>\r\n<pre><code>   $ pflt tcp sample.xpkt tcponly.xpkt\r\n\r\n   $ pcount tcponly.xpkt\r\n   73 total packets and 17184 total bytes.\r\n\r\n   $ nftrk -dt tcponly.xpkt | grep END | wc -l\r\n   2\r\n</code></pre>\r\n<ul>\r\n<li>We could have been super fancy and done:</li>\r\n</ul>\r\n<pre><code>   $ pflt tcp sample.xpkt |\r\n     pcount -p |\r\n     nftrk -t 2&gt;/tmp/flows &gt; tcponly.xpkt &amp;&amp;\r\n     echo -n &quot;Number of flows &quot; &amp;&amp;\r\n     grep END /tmp/flows | wc -l &amp;&amp;\r\n     rm -f /tmp/flows\r\n</code></pre>\r\n<ul>\r\n<li>Ok, enough of that. Anyway, now we have a trace file with only the TCP connections. Running</li>\r\n</ul>\r\n<pre><code>   $ nftrk -dt /tmp/tcponly.xpkt | grep END\r\n   |FLOW END|IP:ca=192.168.0.4,sa=192.168.0.7,proto=6,cpt=38859,spt=22|\r\n   Start=1566073862.612,End=1566073862.613,Dur=0.000|C2S:25,4561|S2C:30,5124|\r\n   |FLOW END|IP:ca=192.168.0.4,sa=64.233.169.147,proto=6,cpt=35071,spt=80|\r\n   Start=1566073862.613,End=1566073862.613,Dur=0.000|C2S:9,704|S2C:9,6795|\r\n</code></pre>\r\n<p>Shows that the server ports are 22 and 80 for the two connections. That\'s SSH and HTTP.</p>\r\n<ul>\r\n<li><p>The patterns we can use to filter packets are pretty standard across most of the ONICS tools.</p></li>\r\n<li><p>We\'ll discuss this is more detail in a future podcast. But if you want to see the kinds of fields you can match on go to</p></li>\r\n</ul>\r\n<pre><code>   $ man onics_proto\r\n</code></pre>\r\n<h3 id=\"extracting-ranges-of-packets\">Extracting Ranges of Packets</h3>\r\n<ul>\r\n<li>What if we wanted to just grab specific packets out of the trace file? Say we wanted packets 3-6. For that we would run:</li>\r\n</ul>\r\n<pre><code>   $ pxtr 3,6 sample.xpkt pkts-3-to-6.xpkt\r\n</code></pre>\r\n<ul>\r\n<li>Alternately we could ask for all packets from the 7th packet to the first TCP packet. We match using the same types of matching conditions as with pflt, but we must enclose them in {}s.</li>\r\n</ul>\r\n<pre><code>   $ pxtr &quot;7,{tcp}&quot; sample.xpkt | xpktdump\r\n</code></pre>\r\n<ul>\r\n<li>Lets say we just wanted to drop packets 5-10 from the stream. There are several ways to do this in ONICS, but using pxtr, the way we would do it would be:</li>\r\n</ul>\r\n<pre><code>   $ pxtr 1,4 sample.xpkt &gt; not-5-to-10.xpkt\r\n   $ pxtr 11,NONE sample.xpkt &gt;&gt; not-5-to-10.xpkt\r\n</code></pre>\r\n<ul>\r\n<li>Maybe I should add another option to pxtr to invert the boundary conditions. It\'s a tradeoff between having the tools do one thing and one thing well and supporting a potentially common use case.</li>\r\n</ul>\r\n<h3 id=\"differences-between-traces\">Differences Between Traces</h3>\r\n<ul>\r\n<li>Finally, lets look at one tool that I really like. Let\'s see the difference between the original stream and the one that we just created:</li>\r\n</ul>\r\n<pre><code>   $ pdiff sample.xpkt not-5-to-10.xpkt | less\r\n</code></pre>\r\n<ul>\r\n<li>Sure enough that shows us that packets 5-10 were dropped from the stream. If we do the reverse</li>\r\n</ul>\r\n<pre><code>   $ pdiff -v not-5-to-10.xpkt sample.xpkt | less\r\n</code></pre>\r\n<p>it describes the sample.xpkt from the perspective of starting with not-5-to-10.xpkt and inserting a bunch of packets into the middle.</p>\r\n<h3 id=\"conclusion\">Conclusion</h3>\r\n<ul>\r\n<li>In this podcast we looked at a few tools to help analyze and dissect packet traces or packet streams.</li>\r\n<li>Next time we\'ll look at some of the more powerful pattern matching we can apply and</li>\r\n</ul>\r\n',259,61,0,'CC-BY-SA','networking, command-line, tools',0,0,1),
(2894,'2019-09-05','Repairing a Musical Instrument Case',1318,'I talked about repairing the case for a Vietnamese Dan Tranh','<p>In this episode I talk about repairing the case for a Vietnamese Đàn tranh, a zither-like instrument which was donated to the School of Music by a member of the community. I also demonstrate the instrument as best I can so that you can hear what it sounds like.</p>\r\n\r\n<p>See the Flickr photo album that accompanies this show by clicking the image below.</p>\r\n\r\n<p><a data-flickr-embed=\"true\"  href=\"https://www.flickr.com/photos/137675441@N05/albums/72157710403088542\" title=\"Dan Tranh Case Repair\"><img src=\"https://live.staticflickr.com/65535/48570414971_d678f8ff0c.jpg\" width=\"500\" height=\"375\" alt=\"Dan Tranh Case Repair\"></a></p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/%C4%90%C3%A0n_tranh\">Đàn tranh</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Adhesive#Contact\">Contact cement</a></li>\r\n	<li><a href=\"https://en.wikipedia.org/wiki/Pentatonic_scale\">Pentatonic scale</a></li>\r\n</ul>\r\n\r\n<h2>Credits</h2>\r\n\r\n<ul>\r\n	<li>Music bumpers are from Kimiko Ishizaka\'s <em>The Open Goldberg Variations</em>: <a href=\"https://www.opengoldbergvariations.org/\">https://www.opengoldbergvariations.org/</a>, used by permission of their <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>',238,0,0,'CC-BY-SA','Music, Musical Instruments, Repairs, DIY, Vietnamese Stringed Instruments',0,0,1),
(2895,'2019-09-06','The work of fire fighters, part 2',2370,'The continued introduction into the work of fire fighters','<p>Continued general basic knowledge of fire fighting.<br />\r\nAlso an extended invitation to ask questions in the comments.<br />\r\nps: I started making podcasts one year ago! o/</p>',369,0,0,'CC-BY-SA','fire fighting, fire brigade',0,0,1),
(2899,'2019-09-12','Endeavour OS',99,'A quick show introducing Endeavour OS','<p>Hi to all you out there in HPR land, this is a quick show to help out with the current summer shortage of shows.</p>\r\n<p>So over the last few months I’ve been busy with my new Podcasting career, well it fills in the time now I’m retired. Anyway the Distro-hoppers show has been getting a regular audience and recently we decided to branch out a little and open up the review format to the audience, you can find details of how to do that on the Blog.</p>\r\n<p>The most recent show was a review of the new Endeavour OS which has risen from the ashes of Antergos Linux an Arch based OS. Well I decided to use this opportunity to delve into the world of Arch for the first time with Endeavour OS and I can report I was pleasantly surprised with this slick iteration of Arch. OK when you first install Endeavour all you will have is a new XFCE 4.14 DE and some basic software to get you started, you are then expected to do a little research to find out how to install other software you need to get your PC setup the way you like but all the basic information on package management is on the Endeavour OS Wiki and also on the Arch Linux Wiki.</p>\r\n<p>If you have thought of trying Arch Linux but would prefer to start with a running Desktop from install then Endeavour OS is definitely the place to start. I have been running it as my daily Driver for over a month and have fallen in love with it.<br />\r\nMy full review is on the Distrohoppers Blog as is a link to the Audio of the show.</p>\r\n<p>That’s it for this time, this is Tony Hughes saying goodbye until next time.</p>\r\n<p><a href=\"https://distrohoppersdigest.blogspot.com/\" class=\"uri\">https://distrohoppersdigest.blogspot.com/</a></p>\r\n<p><a href=\"https://endeavouros.com/\" class=\"uri\">https://endeavouros.com/</a></p>\r\n<p><a href=\"https://www.archlinux.org/\" class=\"uri\">https://www.archlinux.org/</a></p>\r\n',338,0,0,'CC-BY-SA','EndeavourOS, Linux, Arch Linux, Distrohopping',0,0,1),
(2912,'2019-10-01','Stardrifter RPG Playtest Part 06',2013,'Lostnbronx and friends playtest a new, original RPG system.','<p>This episode is Part 6 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes. The remaining episodes in this mini-series, including this one, were all from the second session.</p>\r\n<p>This series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.</p>\r\n<p>In this part, the characters fly out to the derelict (though hardly empty) spaceship, and find a way to sneak aboard.</p>\r\n<p>Special thanks to my playtesters: Thaj, Mark (who was playing Brinn), and X1101!</p>\r\n',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2917,'2019-10-08','Stardrifter RPG Playtest Part 07',1685,'Lostnbronx and friends playtest a new, original RPG system.','<p>This episode is Part 7 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.</p>\r\n<p>This series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.</p>\r\n<p>In this part, the characters make some new friends who show them their guns! Bonus Fun: I make tons of mistakes reading my own rules!</p>\r\n<p>Special thanks to my playtesters: Thaj, Mark (who was playing Brinn), and X1101!</p>\r\n',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2922,'2019-10-15','Stardrifter RPG Playtest Part 08',1967,'Lostnbronx and friends playtest a new, original RPG system.','<p>This episode is Part 8 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.</p>\r\n<p>This series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.</p>\r\n<p>In this part, the characters reevaluate their life choices, and decide that negotiation is the better part of valor!</p>\r\n<p>Special thanks to my playtesters: Thaj, Mark (who was playing Brinn), and X1101!</p>\r\n',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2927,'2019-10-22','Stardrifter RPG Playtest Part 09',1584,'Lostnbronx and friends playtest a new, original RPG system.','<p>This episode is Part 9 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.</p>\r\n<p>This series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.</p>\r\n<p>In this part, the characters agree to join someone else’s treasure hunt, with the success (or failure) of their own mission in the balance!</p>\r\n<p>Special thanks to my playtesters: Thaj, Mark (who was playing Brinn), and X1101!</p>\r\n',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2893,'2019-09-04','Whats in the box! Part 2',727,'NYbill finishes a guitar pedal kit Timttmy sent him. ','<p>In this short follow up episode NYbill troubleshoots the Tremlo guitar kit Timttmy sent him.</p>\r\n<p>Here is a hint, there were two problems, not just one.</p>\r\n<p>Pics for the episode:</p>\r\n<p><a href=\"https://media.gunmonkeynet.net/u/nybill/collection/whats-in-the-box-part-2/\" class=\"uri\">https://media.gunmonkeynet.net/u/nybill/collection/whats-in-the-box-part-2/</a></p>\r\n',235,103,0,'CC-BY-SA','guitar, pedal, tremlo, kit, DIY, soldering',0,0,1),
(2932,'2019-10-29','Stardrifter RPG Playtest Part 10',3255,'Lostnbronx and friends playtest a new, original RPG system.','<p>This episode is Part 10 of the Stardrifter role-playing game playtest. The series is composed of two playtest sessions, held earlier this year. They were recorded and chopped into manageable bites, then edited down into separate episodes.</p>\r\n<p>This series is meant to give listeners some insight into the RPG construction process. Playtesting is not the final step, but rather, just another stage. The construction of an RPG can be convoluted, and feedback from players is absolutely vital.</p>\r\n<p>It’s not unusual for a game master to have two sets of maps for an adventure: one is for the players, which only has the sort of information on it that their characters might reasonably have access to; the other is NOT for the players, as it shows all the special information they shouldn’t know about (at least, not all at once). This is where you’d make note of secret doors, hidden objects or enemies, and/or, as in the case of this playtest, the physical condition of the ship as it stands at the moment.</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2932/Player-Cargo-Ship-2000x2624.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2932/Player-Cargo-Ship-666x874.jpg\" alt=\"Player Map\" width=\"666\" height=\"874\" /></a><br />\r\nPlayer Map</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2932/GM-Cargo-Ship-2000x2786.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2932/GM-Cargo-Ship-627x874.jpg\" alt=\"Game Master Map\" width=\"627\" height=\"874\" /></a><br />\r\nGame Master Map</p>\r\n<p>Additionally, here’s a zip file containing the adventure, the maps, the floor plan descriptions, some miscellaneous non-player characters, and the Stardrifter RPG rules in EPUB format. Again, these are no longer the LATEST version of the rules, but they are what we used for these episodes.</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2932/Stardrifter-RPG-Playtest_Squatters-Rights.zip\">Stardrifter-RPG-Playtest_Squatters-Rights.zip</a></p>\r\n<p>In this final part of the mini-series, the players provide their hard-working game designer with some valuable feedback, observations, and general opinions!</p>\r\n<p>Special thanks to my playtesters in this episode: Thaj, Mark (who was playing Brinn), and X1101!</p>\r\n',107,95,1,'CC-0','rpg, gaming, stardrifter, game construction, playtest',0,0,1),
(2896,'2019-09-09','Orange PI Zero LTS version',737,'A general overview of the Orange PI Zero LTS','<ul>\r\n<li><p>A general overview of the Orange PI Zero LTS version<br />\r\n<a href=\"https://www.orangepi.org/orangepizerolts/\" class=\"uri\">https://www.orangepi.org/orangepizerolts/</a><br />\r\n<a href=\"https://www.geeky-gadgets.com/raspberry-pi-alternative-12-08-2019/\" class=\"uri\">https://www.geeky-gadgets.com/raspberry-pi-alternative-12-08-2019/</a></p></li>\r\n<li><p>This is the one I really liked<br />\r\n<a href=\"https://www.cnx-software.com/2019/07/31/buy-orange-pi-zero-lts-sbc/\" class=\"uri\">https://www.cnx-software.com/2019/07/31/buy-orange-pi-zero-lts-sbc/</a></p></li>\r\n<li><p>This is were the software is<br />\r\n<a href=\"https://www.armbian.org\" class=\"uri\">https://www.armbian.org</a></p></li>\r\n</ul>\r\n',129,0,0,'CC-BY-SA','Raspberry PI, OrangePI, Armbian, Hobby Computing, VNC',0,0,1),
(2901,'2019-09-16','Describing how I listen to podcasts PART 3',835,'In this episode I cover the 1st add-on board I purchased for one of my raspberry pi\'s','<p>In this series I cover how I listen to podcasts and how the process has changed over the years. In this episode I cover the 1st add-on board I purchased for one of my raspberry pi’s I then go on to explain what I do with it.</p>\r\n<ul>\r\n<li><p>Raspberry pi<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\" class=\"uri\">https://en.wikipedia.org/wiki/Raspberry_Pi</a></p></li>\r\n<li><p>Piface Digital IO, pictures and links<br />\r\n<a href=\"https://www.piface.org.uk/products/piface_digital/\" class=\"uri\">https://www.piface.org.uk/products/piface_digital/</a><br />\r\n<a href=\"https://www.piface.org.uk/products/piface_digital_2/\" class=\"uri\">https://www.piface.org.uk/products/piface_digital_2/</a><br />\r\nSoftware Documentation <a href=\"https://piface.github.io/pifacedigitalio/\" class=\"uri\">https://piface.github.io/pifacedigitalio/</a></p></li>\r\n<li>Command used to install the software &amp; libraries to use the Piface Digital IO board, command from companies website:</li>\r\n</ul>\r\n<pre><code>    sudo apt-get install python{,3}-pifacedigitalio</code></pre>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2901/Picture-01.JPG\" alt=\"Picture 1\" /><br />\r\nPicture 1, shows the Piface Digital IO board installed on top of my raspberry pi</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2901/Picture-02.JPG\" alt=\"Picture 2\" /><br />\r\nPicture 2, shows the extension board I built. The extension board increases the number of available LED’s and switches. The board is attached via a ribbon cable with the ends of the wire inserted into the green and orange screw down chocolate blocks attached to the Piface Digital IO board.</p>\r\n<ul>\r\n<li><p>Command to toggle between play and pause in moc is<br />\r\n<code>mocp -G</code> or <code>mocp –toggle-pause</code><br />\r\nmoc man page <a href=\"https://www.mankier.com/1/mocp\" class=\"uri\">https://www.mankier.com/1/mocp</a><br />\r\nmoc homepage <a href=\"https://moc.daper.net/\" class=\"uri\">https://moc.daper.net/</a></p></li>\r\n<li><p>Uptime man page <a href=\"https://linux.die.net/man/1/uptime\" class=\"uri\">https://linux.die.net/man/1/uptime</a></p></li>\r\n</ul>\r\n<h3 id=\"explanation-of-how-to-read-a-binary-display\">Explanation of how to read a binary display</h3>\r\n<p>The board I built which attaches to the Piface Digital board has a total of 8 LED’s. I use the 8 LED’s to display a number in binary format. In binary each LED has only two values either on or off, with 1 LED you can count to 1 with two LED’s you can count to 3. This may seem confusing if you’ve never dealt with binary before. Starting from the right each subsequent LED represents double the value of the previous one so the 1st LED has a value of 1 the 2nd LED has a value of 2, the third LED has a value of 4 and so on. See below</p>\r\n<pre><code>LED Number   8   7   6   5  4  3  2  1\r\nLED VALUES 128, 64, 32, 16, 8, 4, 2, 1</code></pre>\r\n<p>LED on represents 1, LED off represents 0</p>\r\n<p><code>[Example 1]    0   0   0   0  0  0  0  1  [Represented value 1]</code><br />\r\n1st LED on value = 1</p>\r\n<p><code>[Example 2]    0   0   0   0  0  0  1  1  [Represented value 3]</code><br />\r\n1st and 2nd LED on, LED VALUE 1 + 2 = 3</p>\r\n<p><code>[Examples 3]   0   0   0   0  1  0  1  0  [Represented value 10]</code><br />\r\n2nd and 4th LED on, LED VALUE 2 + 8 = 10</p>\r\n<p>With practice it gets easy to convert from binary to decimal, at my work we still have a very old computer which contains a front panel with LED’s and binary switches. To load the computer instructions must be loaded in binary using flip switches and LED’s with practice it becomes second nature.</p>\r\n<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><p>Further information on binary numbers <a href=\"https://en.wikipedia.org/wiki/Binary_number\" class=\"uri\">https://en.wikipedia.org/wiki/Binary_number</a></p></li>\r\n<li><p><code>df</code> man page (Disk Free) <a href=\"https://linux.die.net/man/1/df\" class=\"uri\">https://linux.die.net/man/1/df</a></p></li>\r\n<li><p><code>aplay</code> man page <a href=\"https://linux.die.net/man/1/aplay\" class=\"uri\">https://linux.die.net/man/1/aplay</a></p></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Audio, Podcasts, Linux, Command Line, hardware, electronics, Raspberry Pi',0,0,1),
(2918,'2019-10-09','Selecting random item from weighted list',1604,'How to selected random item from weighted list using Haskell','<h2 id=\"intro\">Intro</h2>\r\n<p>We’re going to have a look how to select random item from weighted list. There isn’t that much code this time, but it certainly took many tries to get it working and looking nice.</p>\r\n<h2 id=\"analogy\">Analogy</h2>\r\n<p>Imagine stack of building blocks of different heights stacked on top of each other. Height of the each block is chance of how often it will be selected. Selection is done by chopping a stick so that its length at maximum is height of the stack. Place stick next to the stack and select the block that stick reaches at.</p>\r\n<h2 id=\"explanation-of-algorithm\">Explanation of algorithm</h2>\r\n<p>We have list of items and associated weight, defined as <code>Frequency a = Frequency Int a</code>.</p>\r\n<p>Total is sum of all the weights and we select a random number <code>n</code> between 1 and total.</p>\r\n<p><code>pick</code> function has signature of <code>[Frequency a] -&gt; n -&gt; Maybe a</code>. Empty list will result <code>Nothing</code>. When picking item, if <code>n</code> is equal or less than weight of the first item, return that item. Otherwise, drop the first item, subtract weight of that first item from <code>n</code> and try again. Eventually we either arrive to item which weight is greater than <code>n</code> or to empty list.</p>\r\n<h2 id=\"quick-detour-on-random-number-generators\">Quick detour on random number generators</h2>\r\n<p>Haskell functions are pure, meaning that with same input, you are guaranteed to get the same output (safe for some specific cases). Which makes concept of random numbers at first glance to be impossible. This is solved by passing in a random number generator, which can supply you a random value a new random number generator. Using this new random number generator to generate a value yields you a yet another value and yet another random number generator.</p>\r\n<p>Passing these random number generators around in code gets tedious, but there’s different solution: <code>MonadRandom</code>. Using it will thread along generators automatically behind the scenes, ensuring that you always have access to a fresh generator. There’s several functions that can be used to generate random values, but we’re using this one: <code>getRandomR :: Random a =&gt; (a, a) -&gt; m a</code>. Given a lower and upper bound, it will return you a random value wrapped in context that carries that new random number generator.</p>\r\n<p>In the end, we need to take our computation (that can be complex and use multiple calls to random number generator) and turn that <code>m a</code> into <code>a</code>. This is done with <code>runRand :: RandomGen g =&gt; Rand g a -&gt; g -&gt; (a, g)</code>. We give it our computation and a <code>RandomGen g</code> that can generate random values and receive <code>(a, g)</code> where <code>a</code> is our result and <code>g</code> new random number generator. In cases where we aren’t going to use the new generator, we can use <code>evalRand :: RandomGen g =&gt; Rand g a -&gt; g -&gt; a</code>, which discards it and returns just <code>a</code>.</p>\r\n<h2 id=\"actual-implementation-with-explanation\">Actual implementation with explanation</h2>\r\n<p>First, <code>Frequency</code> for expressing weight of individual item. It’s parametrized, so can be used with any data.</p>\r\n<pre><code>data Frequency a = Frequency Int a\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>Next, determining which item to choose, based on stack and measuring stick. In case a value outside of valid range has been selected, we end up with <code>Nothing</code>, otherwise with <code>Just a</code>. First case is for empty list (either we called this originally with empty list or picked number that is greater than total sum of weights), second one either picks the first item of list or recursive calls itself removing first item.</p>\r\n<pre><code>pick :: [Frequency a] -&gt; Int -&gt; Maybe a\r\npick [] _ = Nothing\r\n\r\npick (Frequency x item:xs) i\r\n    | i &lt;= x = Just item\r\n    | otherwise = pick xs (i - x)</code></pre>\r\n<p>Finally, function for calculating total of weights and choosing random number. We’re using that <code>Rand g (Maybe a)</code> I explained earlier. First case is for empty list again and latter case for list with at least one item.</p>\r\n<pre><code>choose :: RandomGen g =&gt; [Frequency a] -&gt; Rand g (Maybe a)\r\nchoose [] =\r\n    return Nothing\r\n\r\nchoose items = do\r\n    let total = sum $ fmap (\\(Frequency x _) -&gt; x) items\r\n    n &lt;- getRandomR (1, total)\r\n    return $ pick items n</code></pre>\r\n<p>Notice how we can get random number by <code>n &lt;- getRandomR (1, total)</code>, without talking about generators. <code>MonadRandom</code> is handling generators and making sure that there’s always a fresh generator available and new generator is stored ready to be used.</p>\r\n<p>And that’s all the code this time (I told the amount of code is small this time).</p>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>This probably sounds a lot more complicated than it actually is. I arrived to the result after quite many detours, but the end result looks pretty nice.</p>\r\n<p>Next time we’re going to have a look where to use our <code>choose</code> function.</p>\r\n<p>In the meantime, questions, comments and feedback are welcomed. Best way to reach me is email or fediverse where I’m <code>Tuula@mastodon.social</code>. Or even better, record your own Hacker Public Radio episode.</p>\r\n',364,107,0,'CC-BY-SA','haskell, random, monad',0,0,1),
(2904,'2019-09-19','DIY URL shortening',738,'Quick tip on how to shorten an URL without a silly SaaS','<p>\r\nMake a directory to house your shortened URLs.\r\n</p>\r\n\r\n<pre><code>\r\n$ ssh example.com mkdir public_html/u\r\n</code></pre>\r\n\r\n<p>\r\nOn demand, create a subdirectory for the shortened URL you want to create.\r\n</p>\r\n\r\n<pre><code>\r\n$ ssh example.com mkdir public_html/u/hpr\r\n</code></pre>\r\n\r\n<p>\r\nCreate an HTTP redirect in an index.html file.\r\n</p>\r\n\r\n<pre><code>\r\n$ ssh example.com echo \"\"&lt;html>&lt;title>Shortened URL&lt;/title>&lt;head>&lt;meta http-equiv=\'refresh\' content=\'0; URL=http:&#47;&#47;hackerpublicradio.org&#47;correspondents/0078.html\' />&lt;/head>&lt;/html>\"\" &gt; www/u/hpr/index.html\r\n</code></pre>\r\n\r\n<p>\r\nYour shortened URL is example.com/u/hpr\r\n</p>\r\n',78,0,0,'CC-BY-SA','html, url shortner',0,0,1),
(2928,'2019-10-23','Building markov chains with Haskell',1798,'How to build markov chains with Haskell','<h2 id=\"intro\">Intro</h2>\r\n<p>Last time we built a weighted list, this time we’re using that to build markov chains. Wikipedia states that “A Markov chain is a stochastic model describing a sequence of possible events in which the probability of each event depends only on the state attained in the previous event.” and that they’re named after the Russian mathematician Andrey Markov.</p>\r\n<h2 id=\"configuration\">Configuration</h2>\r\n<p>We’re after generic system, hence parametrized data types.</p>\r\n<p>First part is <code>Configuration a</code> that lists possible starting elements of chain and elements that can follow a particular element.</p>\r\n<pre><code>data Config a = Config\r\n    { configStarts :: ![Item a]\r\n    , configContinuations :: !(Map a [Item a])\r\n    } deriving (Show, Read, Eq)</code></pre>\r\n<p>Second part is <code>Item a</code>, that just holds single item that could appear in chain and relatively frequency for its appearance.</p>\r\n<pre><code>data Item a =\r\n    Item (Frequency (Maybe a))\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>We’re using <code>Maybe a</code> as in some cases there’s chance of element being last element in chain. Thus, <code>Nothing</code> will represent end of chain.</p>\r\n<p>In previous episode, we implemented <code>choose</code>, but later on I decided to rename it to <code>chooseM</code>. So when you see <code>chooseM</code>, it’s just different name for what we implemented previously.</p>\r\n<h2 id=\"building-a-chain\">Building a chain</h2>\r\n<p>Since building a configuration depends on the case quite a bit, we’re just going to assume that we have one at hand.</p>\r\n<p>Our chains are built by <code>chainM :: (Ord a, RandomGen g) =&gt; Config a -&gt; Rand g [a]</code>. Given a config, it creates computation that when run will return list of <code>a</code>, which is our chain.</p>\r\n<p>Implementation is fairly straightforward:</p>\r\n<pre><code>chainM config = do\r\n    starter &lt;- chooseM (itemToFreq &lt;$&gt; configStarts config)\r\n    case join starter of\r\n        Nothing -&gt;\r\n            return []\r\n\r\n        Just h -&gt; do\r\n            t &lt;- tailOfChain config h\r\n            return $ h : t</code></pre>\r\n<p>First we select item from starting elements. In case there isn’t one, result will be a empty list. Otherwise we use <code>tailOfChain</code> to compute rest of the list and return a list of starter element followed by that tail.</p>\r\n<p>For tail we need to figure out first what possible elements there are that can follow a given element. This is done by <code>candidates</code> function. <code>lookup</code> finds a possible list of elements in <code>configContinuations</code>. We use <code>itemToFreq</code> to turn this list into frequencies. Since <code>items</code> might be <code>Nothing</code> (in case where there aren’t any suitable continuations present) and any continuation in the list might be <code>Nothing</code> (in case where this is possibly terminating element), we have to use <code>(fmap . fmap)</code> to apply <code>itemToFreq</code> to each possible element. Moreover, <code>concat</code> turns our <code>Maybe [Frequency (Maybe a)]</code> into <code>[Frequency (Maybe a)]</code>, if we have <code>Nothing</code> at this stage, result will be an empty list <code>[]</code>.</p>\r\n<pre><code>candidates :: (Ord a) =&gt; Config a -&gt; a -&gt; [Frequency (Maybe a)]\r\ncandidates config x =\r\n    concat $ (fmap . fmap) itemToFreq items\r\n    where\r\n        items = lookup x (configContinuations config)</code></pre>\r\n<p>That <code>concat</code> part could have been written as:</p>\r\n<pre><code>    case (fmap . fmap) itemToFreq items of\r\n        Nothing -&gt;\r\n            []\r\n\r\n        Just x -&gt;\r\n            x</code></pre>\r\n<p>and the end result would be identical.</p>\r\n<p>Now that we know how to figure our possible continuation elements, we can implement computing tail of chain:</p>\r\n<pre><code>tailOfChain :: (Ord a, RandomGen g) =&gt; Config a -&gt; a -&gt; Rand g [a]\r\ntailOfChain config c = do\r\n    item &lt;- chooseM (candidates config c)\r\n    case join item of\r\n        Nothing -&gt;\r\n            return []\r\n\r\n        Just x -&gt; do\r\n             xs &lt;- tailOfChain config x\r\n             return $ x : xs</code></pre>\r\n<p>Function first select <code>item</code> from candidates. If there isn’t suitable item or item is <code>Nothing</code>, result will be an empty list. Otherwise function recurses, computes tail starting from selected element and constructs chain starting by selected <code>item</code> and followed by tail.</p>\r\n<p><code>join item</code> at the start of case analysis collapses two nested <code>Maybe</code>s together:</p>\r\n<ul>\r\n<li><code>Nothing</code> will result <code>Nothing</code> (no suitable continuation)</li>\r\n<li><code>Just Nothing</code> will also result <code>Nothing</code> (end of chain reached)</li>\r\n<li><code>Just a</code> will result <code>Just a</code> (suitable element found)</li>\r\n</ul>\r\n<p>In the end we have list that is sort of like: <code>h : chooseM (candidates config h) : chooseM (candidates config h\') : chooseM (candidates config h\'\') : ... : []</code></p>\r\n<h2 id=\"extra\">Extra</h2>\r\n<p>For convenience we define two other functions. First one is for when we don’t want to use <code>Rand g a</code>. It’s done by applying <code>runRand</code> function with our <code>chainM</code> function, config and <code>RandomGen</code>.</p>\r\n<pre><code>chain :: (Ord a, RandomGen g) =&gt; Config a -&gt; g -&gt; ([a], g)\r\nchain config g =\r\n    runRand (chainM config) g</code></pre>\r\n<p>More interesting is <code>chains</code> which builds infinite list of chains:</p>\r\n<pre><code>chains :: (Ord a, RandomGen g) =&gt; Config a -&gt; g -&gt; [[a]]\r\nchains config g =\r\n        c : chains config g&#39;\r\n    where\r\n        (c, g&#39;) = chain config g</code></pre>\r\n<p>This uses <code>chain</code> function to create starting element (which is markov chain) and new generator <code>g\'</code>. Then it builds a list where that first chain is followed by list of chains that is created by calling <code>chains</code> with that new random generator. Since there’s no termination case in the function, it will compute infinitely long list of markov chains. This works because elements are computed only when needed. For all intents and purposes for program using this infinite list, items are there when needed.</p>\r\n<h2 id=\"closing\">Closing</h2>\r\n<p>Hardest part working with markov chains (at least in my opinion) is building suitable configuration. When you have that configuration at hand, building chains from it requires relatively small amount of code. In the next episode we’re going to use this chains for our space game.</p>\r\n<p>Questions, comments and feedback are always welcome. Best way to reach me is by email or in fediverse where I’m <code>Tuula@mastodon.social</code>.</p>\r\n',364,107,0,'CC-BY-SA','markov chains, Haskell',0,0,1),
(2905,'2019-09-20','Two HPR hosts living in the same region finally meet up!',1145,'Dave Morriss and MrX meet up and record a conversation','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Two HPR hosts who live in the Edinburgh locality in Scotland met on Saturday 24<sup>th</sup> August for a chat.</p>\r\n<p>The hosts are:</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0201.html\" title=\"MrX\">MrX</a> - first HPR show <a href=\"https://hackerpublicradio.org/eps.php?id=911\">“Hobbies”</a> on 2012-01-27</li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" title=\"Dave Morriss\">Dave Morriss</a> - first HPR show <a href=\"https://hackerpublicradio.org/eps.php?id=1091\">“Useful Vim Plugins”</a> on 2012-10-05</li>\r\n</ul>\r\n<p>Some of the meeting was recorded and is presented here.</p>\r\n<h3 id=\"recording-information\">Recording information</h3>\r\n<p>We were both recording this chat. Dave was using his Zoom H2n (with the microphones in <em>XY</em> mode) and MrX had left his small <em>Dictaphone</em>-like recorder on the table.</p>\r\n<p>Most of the audio here was from the Zoom, but at one point it switches to MrX’s recorder for comparison. The sample is at about 18 minutes into the recording (hard to judge since an intro sequence will have been added on the HPR site). A “chirp” effect has been added at the start and end of this sample to help with identification.</p>\r\n<p>The Zoom track had noise reduction applied to it, using a noise sample from the start as a reference. The sample from MrX’s recorder also had noise reduction applied, and both tracks were amplified.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>MrX’s shows that we were talking about:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2879\">Describing how I listen to podcasts PART 1</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2889\">Describing how I listen to podcasts PART 2</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2901\">Describing how I listen to podcasts PART 3</a></li>\r\n</ul></li>\r\n<li>The radio device for the Pi mentioned by Dave:\r\n<ul>\r\n<li>ESP8266 IoT pHAT from Pimoroni (now discontinued)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ESP8266\">Wikipedia page on the ESP8266</a></li>\r\n<li><a href=\"https://learn.pimoroni.com/tutorial/hal13/getting-started-with-iot-phat\">Pimoroni Tutorial on using the pHAT</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','HPR,hosts,meeting,Dave Morriss,MrX',0,0,1),
(2906,'2019-09-23','Feature Engineering for Data-Driven Decision Making',1006,'In this episode, I explain feature engineering, and how it can be used to make decisions','<h2 id=\"example-of-the-input-data\">Example of the input data</h2>\r\n<table>\r\n<thead>\r\n<tr class=\"header\">\r\n<th>Client name</th>\r\n<th>Date ordered</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr class=\"odd\">\r\n<td>Client 1</td>\r\n<td>2019-01-01</td>\r\n</tr>\r\n<tr class=\"even\">\r\n<td>Client 1</td>\r\n<td>2019-01-01</td>\r\n</tr>\r\n<tr class=\"odd\">\r\n<td>Client 3</td>\r\n<td>2019-01-01</td>\r\n</tr>\r\n<tr class=\"even\">\r\n<td>Client 3</td>\r\n<td>2019-01-01</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<h2 id=\"example-of-the-engineered-features\">Example of the engineered features</h2>\r\n<table>\r\n<thead>\r\n<tr class=\"header\">\r\n<th>Client name</th>\r\n<th>volume</th>\r\n<th>last order date</th>\r\n<th>first order date</th>\r\n<th>days since last order</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr class=\"odd\">\r\n<td>Client 1</td>\r\n<td>292</td>\r\n<td>2019-09-03</td>\r\n<td>2015-03-04</td>\r\n<td>10</td>\r\n</tr>\r\n<tr class=\"even\">\r\n<td>Client 2</td>\r\n<td>18</td>\r\n<td>2019-09-09</td>\r\n<td>2019-09-04</td>\r\n<td>4</td>\r\n</tr>\r\n<tr class=\"odd\">\r\n<td>Client 3</td>\r\n<td>300</td>\r\n<td>2019-08-16</td>\r\n<td>2016-11-15</td>\r\n<td><strong>28</strong></td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<h2 id=\"links\">Links</h2>\r\n<ol type=\"1\">\r\n<li><a href=\"https://en.wikipedia.org/wiki/Feature_engineering\">Feature Engineering</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Feature_(machine_learning)\">Feature</a></li>\r\n</ol>\r\n',300,0,0,'CC-BY-SA','data',0,0,1),
(2909,'2019-09-26','ONICS Basics Part 3:  Networking Fundamentals',3031,'This show discusses basic principles of networks and how to send data using ONICS','<h1 id=\"theory\">Theory</h1>\r\n<p>In this episode I decided to take a slight diversion into networking fundamentals. As before, if you want to learn more about installing the ONICS tool suite, go back and listen to HPR 2882.</p>\r\n<p>There are three key concepts to understand about modern networks. They are:</p>\r\n<ul>\r\n<li><p>digital - the networks carry bits and bytes (binary digits)</p></li>\r\n<li><p>packet switched - devices break data into blobs of data called &quot;packets&quot; and take turns sending and receiving those packets to/from other devices attached to the network</p></li>\r\n<li><p>internetworked -- machines communicate using a protocol that allows traffic to traverse across multiple, independently-managed networks in a uniform way</p></li>\r\n</ul>\r\n<h1 id=\"my-setup\">My Setup</h1>\r\n<ul>\r\n<li><p>2 laptops connected to a home wifi network that has Internet connectivity.</p></li>\r\n<li><p>Practicing sending data from a source machine to a destination machine. Both are running Linux.</p></li>\r\n<li><p>Source machine:</p>\r\n<ul>\r\n<li>Wifi interface: wlan0</li>\r\n<li>Ethernet address: 00:22:fa:a7:69:90</li>\r\n<li>IP address: 192.168.0.4</li>\r\n</ul></li>\r\n<li><p>Destination machine</p>\r\n<ul>\r\n<li>Wifi interface: wlo1</li>\r\n<li>Ethernet address: 6c:88:14:7c:2e:14</li>\r\n<li>IP address: 192.168.0.248</li>\r\n</ul></li>\r\n<li><p>Internet Router:</p>\r\n<ul>\r\n<li>Ethernet address: 00:0d:b9:23:f2:51</li>\r\n<li>IP address: 192.168.0.1</li>\r\n</ul></li>\r\n</ul>\r\n<h1 id=\"more-terminology\">More Terminology</h1>\r\n<ul>\r\n<li><p>Address - a number that identifies a machine\'s interface in a network</p></li>\r\n<li><p>Packet - a blob of binary data sent as a unit over a network</p></li>\r\n<li><p>Route - a rule that specifies how to forward traffic to a given address</p></li>\r\n<li><p>Router / Gateway - a machine that uses the IP protocol and forwards traffic between multiple networks that it connects to</p></li>\r\n<li><p>Network Protocol - a set of rules and data formats for exchanging information over a network</p></li>\r\n</ul>\r\n<h1 id=\"standard-unix-commands\">Standard UNIX Commands</h1>\r\n<ul>\r\n<li>ifconfig (no arguments or \'-a\')\r\n<ul>\r\n<li>list interfaces on a machine</li>\r\n</ul></li>\r\n<li>ifconfig IFNAME\r\n<ul>\r\n<li>list properites about a given interface</li>\r\n</ul></li>\r\n<li>ping -c 1 IPADDRESS\r\n<ul>\r\n<li>send an echo request to machine IPADDRESS</li>\r\n</ul></li>\r\n<li>arp -na\r\n<ul>\r\n<li>Dump the Ethernet addresses of known nearby machines</li>\r\n</ul></li>\r\n<li>netstat -nr\r\n<ul>\r\n<li>Dump the routes in a system</li>\r\n</ul></li>\r\n<li>netstat -nr | grep &quot;^0.0.0.0&quot;\r\n<ul>\r\n<li>Find the route (and thus IP address) of the default gateway</li>\r\n</ul></li>\r\n</ul>\r\n<h1 id=\"onics-commands-in-this-episode\">ONICS Commands in this Episode</h1>\r\n<ul>\r\n<li><p>rawpkt - take a blob of data and wrap it in an XPKT format (so other ONICS tools can understand what it is)</p></li>\r\n<li><p>ethwrap - take an XPKT and prepend an Ethernet header to it</p></li>\r\n<li><p>ipwrap - take an XPKT and prepend an IP header to it</p></li>\r\n<li><p>pktin - read a stream of packets from a network interface</p></li>\r\n<li><p>pflt - filter a stream of packets so that only those matching a pattern get through</p></li>\r\n<li><p>pktout - send a stream of packets to a network interface</p></li>\r\n<li><p>x2hpkt - convert XPKTs into a hex dump</p></li>\r\n<li><p>xpktdump - like x2hpkt, but send the output to a pager like \'less\' for easy reading</p></li>\r\n</ul>\r\n<h1 id=\"sending-an-ethernet-packet-to-the-destination\">Sending an Ethernet Packet to the Destination</h1>\r\n<ul>\r\n<li>On the receiver:</li>\r\n</ul>\r\n<pre><code>    $ sudo pktin wlo1 |\r\n      pflt &quot;not ip and eth.dst == 6c:88:14:7c:2e:14&quot; |\r\n      x2hpkt\r\n</code></pre>\r\n<ul>\r\n<li>On the sender:</li>\r\n</ul>\r\n<pre><code>    $ echo &quot;hello world&quot; |\r\n      rawpkt |\r\n      ethwrap &quot;eth.dst = 6c:88:14:7c:2e:14; &quot;\r\n              &quot;eth.src = 00:22:fa:a7:69:90; &quot;\r\n              &quot;eth.ethtype = 12;&quot; |\r\n      sudo pktout wlan0\r\n</code></pre>\r\n<p>Note that while I broke up the field setting commands into multiple lines in ethwrap, they can all be part of a single quoted string if desired. To store the packet to a file rather than send it instead do something</p>\r\n<pre><code>$ echo ... | rawpkt | ethwrap ... &gt; outfile.xpkt\r\n</code></pre>\r\n<p>One can then dump the packet by running:</p>\r\n<pre><code>$ xpktdump outfile.xpkt\r\n</code></pre>\r\n<p>or send the packet by running:</p>\r\n<pre><code>$ sudo pktout outfile.xpkt wlan0\r\n</code></pre>\r\n<h1 id=\"sending-an-ip-packet-to-the-destination-over-the-local-network\">Sending an IP Packet to the Destination over the Local Network</h1>\r\n<ul>\r\n<li>On the reciever:</li>\r\n</ul>\r\n<pre><code>    $ sudo pktin wlo1 |\r\n      pflt &quot;ip and ip.proto == 255&quot; |\r\n      x2hpkt\r\n</code></pre>\r\n<ul>\r\n<li>On the sender:</li>\r\n</ul>\r\n<pre><code>    $ echo &quot;hello world&quot; |\r\n      rawpkt |\r\n      ipwrap &quot;ip.saddr = 192.168.0.4;&quot;\r\n             &quot;ip.daddr = 192.168.0.248;&quot;\r\n             &quot;ip.len = 32;&quot;\r\n             &quot;ip.ttl = 64;&quot;\r\n             &quot;ip.proto = 255;&quot; |\r\n      ethwrap &quot;eth.dst = 6c:88:14:7c:2e:14; &quot;\r\n              &quot;eth.src = 00:22:fa:a7:69:90; &quot;\r\n              &quot;eth.ethtype = 0x800;&quot; |\r\n      sudo pktout wlan0\r\n</code></pre>\r\n<p>Note that while I broke up the field setting commands into multiple lines in ipwrap and ethwrap, they can all be part of a single quoted string if desired. Also note that it is not actually necessary to set the \'ip.len\' and \'eth.ethtype\' fields: the tools will do that automatically.</p>\r\n<h1 id=\"sending-an-ip-packet-to-the-destination-via-ip\">Sending an IP Packet to the Destination via IP</h1>\r\n<ul>\r\n<li>On the receiver:</li>\r\n</ul>\r\n<pre><code>    $ sudo pktin wlo1 |\r\n      pflt &quot;ip and ip.proto == 255&quot; |\r\n      x2hpkt\r\n</code></pre>\r\n<ul>\r\n<li>One the sender:</li>\r\n</ul>\r\n<pre><code>    $ echo &quot;hello world&quot; |\r\n      rawpkt |\r\n      ipwrap &quot;ip.saddr = 192.168.0.4;&quot;\r\n             &quot;ip.daddr = 192.168.0.248;&quot;\r\n             &quot;ip.ttl = 64;&quot;\r\n             &quot;ip.proto = 255;&quot; |\r\n      ethwrap &quot;eth.dst = 00:0d:b9:23:f2:51; &quot;\r\n              &quot;eth.src = 00:22:fa:a7:69:90; &quot; |\r\n      sudo pktout wlan0\r\n</code></pre>\r\n<h1 id=\"challenge\">Challenge</h1>\r\n<p>There are several differences between the packets that arrive at the destination machine when sending directly over the local network versus sending via an IP gateway (router). I\'ve mentioned how the Ethernet header is different. Can you find the other differences? What causes these differences?</p>\r\n<p>TIP: instead of sending the <code>pktin</code> command to x2hpkt, send it to a file. Do this for both local network send and for sending via the router saving each to different files. Then run <code>pdiff</code> on the two files to highlight the differences.</p>\r\n',259,61,0,'CC-BY-SA','command-line, networking, basics',0,0,1),
(2911,'2019-09-30','my internet connection',655,'a bloviated harang with a smattering of spewed expetives, while describing available ISPs','<p>Any notes for this episode should probably contain links to the ISPs mentioned in the show. Since I do not wish to harm any listeners, I have opted to not include links to evil ISPs.</p>',243,0,1,'CC-BY-SA','internet service, satellite',0,0,1),
(2938,'2019-11-06','Naming pets in space game',1236,'How to use markov chains to generate names','<h2 id=\"intro\">Intro</h2>\r\n<p>In the two previous episodes we built a weighted list and used that to build markov chains. This time we’re going to use them to generate some names based on examples. I’m skipping over a lot of uninteresting code in this episode, concentrating only the parts that deal with names.</p>\r\n<h2 id=\"idea\">Idea</h2>\r\n<p>Person in game might hear scurrying sounds inside walls of their quarters. Then they have option of getting a cat, taming a rat or letting someone else deal with the problem. Depending on their choice, they might end up with a cat or a rat, that of course needs a name. Game offers 3 different options of names that haven’t been used before and person can always opt for completely random one.</p>\r\n<h2 id=\"config\">Config</h2>\r\n<p>While we’re not going to dig very deep into making configurations for markov chains, we can have look at the overall process.</p>\r\n<p>We have list of names to serve as examples and three functions, which implementation I won’t delve into:</p>\r\n<ul>\r\n<li><code>start</code> for adding starting element</li>\r\n<li><code>links</code> for recording link between two elements</li>\r\n<li><code>end</code> adds ending element</li>\r\n</ul>\r\n<p><code>addName</code> function is used to add single name into config:</p>\r\n<pre><code>addName :: Int -&gt; Text -&gt; Config Text -&gt; Config Text\r\naddName n s config =\r\n    links pairs $\r\n            end elements $\r\n            start elements config\r\n    where\r\n        elements = chunksOf n s\r\n        pairs = zip elements (safeTail elements)</code></pre>\r\n<p>First <code>s</code> (name) is split into strings of length <code>n</code>. These <code>elements</code> are then combined into pairs, where consecutive elements form a pair. Final step is to add start and ending elements into config, followed by links between elements of pairs.</p>\r\n<p>We can then fold a list of examples into config:</p>\r\n<pre><code>nameConfig :: [Text] -&gt; Int -&gt; Config Text\r\nnameConfig xs n =\r\n    foldr (addName n) emptyConfig xs</code></pre>\r\n<p>This starts with <code>emptyConfig</code> and calls <code>addName</code> repeatedly until all elements of list containing examples have been processed.</p>\r\n<h2 id=\"implementation\">Implementation</h2>\r\n<p>Now that we have configuration, we can start generating names. As usual, I like to keep things specific and generate <code>PetName</code> instead of just <code>Text</code>. I happened to have list of ancient greek names at hand, so I used that. Later on we’ll have to add more cultures, like Romans, Parthians, Persians, Germans, Phoenicians and so on.</p>\r\n<p>General implementation of generating infinite list of strings of specific kind is shown below:</p>\r\n<pre><code>names :: (RandomGen g, Eq b) =&gt; (Text -&gt; b) -&gt; Config Text -&gt; g -&gt; [b]\r\nnames t config g =\r\n    nub $ (t . toTitle . concat) &lt;$&gt; chains config g</code></pre>\r\n<p>It’s easier to read if you start from right. <code>chains config g</code> generates infinite list of markov chains with given configuration. Next we create a new function <code>(t . toTitle . concat)</code>, which uses <code>concat</code> to combine list of <code>Text</code> into single <code>Text</code>, <code>toTitle</code> to capitalize is correctly and <code>t</code> to transform it to something (<code>PetName</code> in our case). <code>&lt;$&gt;</code> is then used to apply this function to each element of our infinite list. Finally <code>nub</code> is used to remove duplicate entries.</p>\r\n<p>With <code>names</code> we can then define <code>petNames</code>:</p>\r\n<pre><code>petNames :: (RandomGen g) =&gt; g -&gt; [PetName]\r\npetNames =\r\n    names MkPetName greekNameConfig</code></pre>\r\n<p><code>MkPetName</code> is value constructor that turns <code>Text</code> into <code>PetName</code> (this is <code>t</code> used by <code>names</code> function).</p>\r\n<h2 id=\"pets\">Pets</h2>\r\n<p>Pets are currently very much work in progress. They have few attributes and there can be two different kinds of pets:</p>\r\n<pre><code>Pet json\r\n    name PetName\r\n    type PetType\r\n    dateOfBirth StarDate\r\n    dateOfDeath StarDate Maybe\r\n    ownerId PersonId\r\n    deriving Show Read Eq</code></pre>\r\n<pre><code>data PetType\r\n    = Cat\r\n    | Rat\r\n    deriving (Show, Read, Eq, Ord, Enum, Bounded)</code></pre>\r\n<p>The actual beef is <code>namingPetEvent</code> function. When applied with <code>Entity Person</code>, <code>Entity Pet</code> and <code>StarDate</code>, it will create <code>News</code> that can be saved into database and later on showed to player. While the code is shown below, I’m not going to go over it line by line:</p>\r\n<pre><code>namingPetEvent :: (PersistQueryRead backend, MonadIO m,\r\n    BaseBackend backend ~ SqlBackend) =&gt;\r\n    Entity Person -&gt; Entity Pet -&gt; StarDate -&gt; ReaderT backend m News\r\nnamingPetEvent personE petE date = do\r\n    pets &lt;- selectList [ PetOwnerId ==. (entityKey personE)\r\n                       , PetDateOfDeath ==. Nothing\r\n                       ] []\r\n    let names = (petName . entityVal) &lt;$&gt; pets\r\n    g &lt;- liftIO getStdGen\r\n    let availableNames = take 3 $ filter (\\x -&gt; not (x `elem` names)) $ petNames g\r\n    let content = NamingPet (NamingPetEvent { namingPetEventPersonId = entityKey personE\r\n                                            , namingPetEventPetId = entityKey petE\r\n                                            , namingPetEventPetType = (petType . entityVal) petE\r\n                                            , namingPetEventDate = date\r\n                                            , namingPetNameOptions = availableNames\r\n                                            })\r\n                            [] Nothing\r\n    return $ mkPersonalSpecialNews date (entityKey personE) content</code></pre>\r\n<p>General idea is to use <code>selectList</code> to load living pets of given person and then extract their names. With random generator <code>g</code>, we create a infinite list of <code>PetName</code>s, remove already used names from it and take 3 first ones. These names are then used to create <code>NamingPetEvent</code>.</p>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>Names are probably one of the most common applications of markov chains in games. Same technique can be used to generate nonsense books and articles that look realistic on a glance.</p>\r\n<p>Questions, comments and feedback is welcomed, best way to reach is email or in fediverse where I’m <code>Tuula@mastodon.social</code>. Or even better, record your own episode for Hacker Public Radio.</p>\r\n<p>ad astra!</p>\r\n',364,107,0,'CC-BY-SA','haskell, markov chains',0,0,1),
(2913,'2019-10-02','Windows, SDN, and Firewalls',2483,'Being a Windows User for the past 3 years, Information on SDN, and a DIY approach to a home Firewall','<pre>\r\nIntro\r\n\r\nLast Upload was hpr1468 March 19, 2014 \r\n\r\npython\r\n\r\n>>> print (D.today() - D(2014, 3, 19)).days\r\n\r\n1999\r\n\r\n>>> 2000/365\r\n\r\n5\r\n</pre>\r\n\r\n<p><a href=\"https://unix.stackexchange.com/questions/24626/quickly-calculate-date-differences\" class=\"uri\">https://unix.stackexchange.com/questions/24626/quickly-calculate-date-differences</a></p>\r\n<p>In the last 5 years:</p>\r\n<ul>\r\n<li>Traveled the world.</li>\r\n<li>Deployed a lot of things for work.</li>\r\n<li>Taken on a new role which moves me from Datacenters to Networks.</li>\r\n<li>Learned a lot about Operations, Datacenter Infrastructure, People around the world, and why it is important to have your house in order.</li>\r\n<li>Read over 3 dozen books.</li>\r\n<li>Paid off debt and focused on long term financial goals.</li>\r\n<li>Humility, Humanity, and Harmony: Three things I have continued to strive for in my personal life, work, and hobbies.</li>\r\n</ul>\r\n<p>Let\'s Start The Show off in the wrong direction</p>\r\n<h2 id=\"windows\">Windows</h2>\r\n<ul>\r\n<li>Chocolatey\r\n<ul>\r\n<li>Great Tool for Downloading free software from the windows powershell command line</li>\r\n<li><a href=\"https://chocolatey.org/docs/installation\" class=\"uri\">https://chocolatey.org/docs/installation</a></li>\r\n</ul></li>\r\n</ul>\r\n<h3 id=\"sublime-text-3\">Sublime Text 3</h3>\r\n<ul>\r\n<li>Fantastic Text editor and very powerful. I use this to quickly parse data using regex searches and push this to spreadsheets or other tools that allow me to organize data quickly. Overall Great tool for anyone</li>\r\n</ul>\r\n<h3 id=\"summary\">Summary:</h3>\r\n<ul>\r\n<li>Overall: The importance of being an everyday Windows User has allowed me to focus on solving problems in different and unique ways. I\'ve found that the way I use Windows is not the same as most normal Windows Users. I live most of the time inside of Chrome so Windows is just another OS to get my Chrome Browser running.</li>\r\n<li>Observation: Windows has definitely matured over the past 10 years. I find myself enjoying the time I save using Windows 10.</li>\r\n<li>Contradictions: I still use Linux, but as a VM to work on things that I just can\'t do inside of Windows.</li>\r\n</ul>\r\n<h2 id=\"web-stuff\">Web Stuff</h2>\r\n<ul>\r\n<li>Regex\r\n<ul>\r\n<li>Test and debug your regex. It is a great tool that combines pastebin and regex debugging. This allows you to share your regex with other by simply using a link. There is a lot of useful information on the site about what each portion of your regex is doing.</li>\r\n<li><a href=\"https://regex101.com\" class=\"uri\">https://regex101.com</a></li>\r\n</ul></li>\r\n<li>Maps\r\n<ul>\r\n<li>USGS Maps\r\n<ul>\r\n<li>Very nice site that allows you to download PDFs of 1:24000 or 7.5 minute Maps. You can print these off and use a Map grid tool to navigate your journey. This is kind of an analog tool but you are downloading the maps to your computer or phone. Good to have maps saved offline while you hike, that way you don\'t get lost.</li>\r\n<li><a href=\"https://store.usgs.gov/map-locator\" class=\"uri\">https://store.usgs.gov/map-locator</a></li>\r\n</ul></li>\r\n</ul></li>\r\n<li>SDN Information\r\n<ul>\r\n<li>If you\'re just starting with Software Defined Networking or are already working with it in a production environment, there is much to learn but very few places to find aggregated information. The GitHub Page called awesome-sdn has tons of links on NOS,Controllers, Libraries, and more. I have A couple of Northbound network and Aruba switches at home to use with my SDN projects. I highly recommend you start getting familiar with network automation using ansible or other automation best practices at the least. For the more technical stuff definitely start looking at SDN.</li>\r\n<li>Awesome-SDN\r\n<ul>\r\n<li><a href=\"https://github.com/sdnds-tw/awesome-sdn/blob/master/README.md\" class=\"uri\">https://github.com/sdnds-tw/awesome-sdn/blob/master/README.md</a></li>\r\n</ul></li>\r\n<li>Northbound Networks SDN Devices\r\n<ul>\r\n<li><a href=\"https://northboundnetworks.com/\" class=\"uri\">https://northboundnetworks.com/</a></li>\r\n</ul></li>\r\n<li>ZeroTier is an example of SDN WAN or Edge Networking\r\n<ul>\r\n<li><a href=\"https://www.zerotier.com/download/\" class=\"uri\">https://www.zerotier.com/download/</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"home-hacks\">Home Hacks</h2>\r\n<ul>\r\n<li>Home Phone\r\n<ul>\r\n<li>Cheap way to have a home phone\r\n<ul>\r\n<li>Google Voice Number</li>\r\n<li>OBi200 VoIP Telephone Adapter 100Mb LAN\r\n<ul>\r\n<li>Has the Option to sign up for 911 but with just Google Voice Number it is a free way to have a house phone</li>\r\n<li><a href=\"https://www.obitalk.com/info/products/obi200\" class=\"uri\">https://www.obitalk.com/info/products/obi200</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"firewalls\">Firewalls</h2>\r\n<ul>\r\n<li>Off the shelf vs DIY options\r\n<ul>\r\n<li>Off The Shelf Ubiquiti Option\r\n<ul>\r\n<li>Ubiquiti \"SDN\" Like FW decent enough for homes with 100Mb/s Uplinks but not for homes with 1Gb/s uplinks.</li>\r\n<li>USG3 can\'t handle IPS throughput past 50Mb/s</li>\r\n<li>USG3 can\'t handle FW PPS past 400Mb/s at 100B packets, which is around 500,000 PPS</li>\r\n<li>The Ubiquiti alternative would be to spend money on an XG which is well over $1000 USD.</li>\r\n</ul></li>\r\n<li>DIY Option\r\n<ul>\r\n<li>The best alternative would be to purchase a used SFF PC with at least 1 Gb onboard NIC and 2 PCIe x16 or x 8 lanes. This would allow for 10Gb NIC options</li>\r\n<li>4x10Gb Intel Nics are a steal</li>\r\n<li>or 4 x 1Gb Nics which are an even better deal.</li>\r\n<li>Going SFP+ is a great option because you can use Copper or Fiber Modules in the same NIC card.</li>\r\n</ul></li>\r\n</ul></li>\r\n<li>Summary\r\n<ul>\r\n<li>The most important part about the SFF Option, you get to use a xeon processor, at least 32 GBs of RAM, and install up to 4 HDDs in the System. You can even install a PCIe NVME or M.2 Sata using a PCIe peripheral.</li>\r\n<li>For software, PFSense or Sophos XG will be great options. If you really want to get technical, load up a hypervisor and then install the Firewall as a VM. This would allow you to leverage the SFF system for more than just a FW and allow for easy testing of other types of FW solutions.</li>\r\n</ul></li>\r\n<li>Hardware Info\r\n<ul>\r\n<li>Intel X722DA4FH Ethernet Network Adapter X722-DA4\r\n<ul>\r\n<li><a href=\"https://g.co/kgs/j9aNJz\" class=\"uri\">https://g.co/kgs/j9aNJz</a></li>\r\n</ul></li>\r\n<li>HP Z240 SFF\r\n<ul>\r\n<li><a href=\"https://g.co/kgs/ax2hwq\" class=\"uri\">https://g.co/kgs/ax2hwq</a></li>\r\n</ul></li>\r\n</ul></li>\r\n<li>Firewall OSes\r\n<ul>\r\n<li>PFSense\r\n<ul>\r\n<li><a href=\"https://www.pfsense.org/\" class=\"uri\">https://www.pfsense.org/</a></li>\r\n</ul></li>\r\n<li>Sophos\r\n<ul>\r\n<li><a href=\"https://www.sophos.com/en-us/products/next-gen-firewall.aspx\" class=\"uri\">https://www.sophos.com/en-us/products/next-gen-firewall.aspx</a></li>\r\n</ul></li>\r\n<li>OPNSense\r\n<ul>\r\n<li><a href=\"https://opnsense.org/\" class=\"uri\">https://opnsense.org/</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n',231,61,1,'CC-BY-SA','Windows, Firewalls, SDN',0,0,1),
(2914,'2019-10-03','Describing how I listen to podcasts PART 4',526,'In this episode I cover my 2nd add on board for the raspberry pi','<ul>\r\n<li><p>PiFace Control and Display<br />\r\n<a href=\"https://www.piface.org.uk/products/piface_control_and_display/\" class=\"uri\">https://www.piface.org.uk/products/piface_control_and_display/</a></p></li>\r\n<li><p>How to fit, setup and install the required software for your Raspberry Pi running the Raspbian Operating system<br />\r\n<a href=\"https://www.piface.org.uk/guides/setting_up_pifacecad/fitting_PiFace_Control_and_Display/\" class=\"uri\">https://www.piface.org.uk/guides/setting_up_pifacecad/fitting_PiFace_Control_and_Display/</a></p></li>\r\n</ul>\r\n<p>Pictures 01, 02 and 03 show how the PiFace Control and Display board and raspberry pi fit into the case<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-01.JPG\" alt=\"Picture-01.JPG\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-02.JPG\" alt=\"Picture-02.JPG\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-03.JPG\" alt=\"Picture-03.JPG\" /></p>\r\n<p>Pictures 04 and 05 shows the piece of plastic used to transfer the light from the LED’s on the Pi board to the holes in the casing. This is supposed to allow you to monitor the PI LED’s. I held it in place using a piece of Blu Tack.<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-04.JPG\" alt=\"Picture-04.JPG\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-05.JPG\" alt=\"Picture-05.JPG\" /></p>\r\n<ul>\r\n<li>Wikipedia article about Blu Tack<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Blu_Tack\" class=\"uri\">https://en.wikipedia.org/wiki/Blu_Tack</a></li>\r\n</ul>\r\n<p>Picture 6 shows the completed box<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-06.JPG\" alt=\"Picture-06.JPG\" /></p>\r\n<p>Pictures 7 and 8 show the project in operation and mounted on a spare Anker tablet stand that I had lying about.<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-07.JPG\" alt=\"Picture-07.JPG\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2914/Picture-08.JPG\" alt=\"Picture-08.JPG\" /></p>\r\n<p>This is an example of the Anker stand I used. I use it to hold my project at a 45 degree angle so I can see it from around the room, it is intended to be used as a tablet stand.<br />\r\n<a href=\"https://www.ebay.co.uk/itm/Anker-Multi-Angle-Portable-Stand-for-Tablets-7-10-inch-E-readers-and-0-4lb-for-/282696421630?_trksid=p2385738.m4383.l4275.c10\">Anker stand for my Nexus 7, pictures, links</a></p>\r\n',201,0,1,'CC-BY-SA','Audio, Podcasts, Linux, Raspberry Pi, hardware, electronics, projects',0,0,1),
(2915,'2019-10-04','Intro - My Recording Setup',1248,'My first HPR episode. A bit of an intro and then a description of my recording setup.','<p>I discuss loading Fedora on various bits of older hardware and devise a plan to turn one of those bits of older hardware into a dedicated headless audio processor using its firewire port to keep yet another older piece of hardware alive: a Yamaha GO46 audio interface.</p>\r\n<p>Having done that and finding that it all performs admirably, I illogically decide to replace it with newer (but not new) hardware and buy yet another different model firewire audio interface: a Focusrite Saffire Pro 24.</p>\r\n<p>I record the end of the show on audio interface #3: a USB based Steinberg UR22mkII, which one could argue that I should have been using all along, leaving the firewire gear in the last decade where it belongs (?).</p>',380,0,0,'CC-BY-SA','Fedora, Firewire, Audio Interface',0,0,1),
(2919,'2019-10-10','hosting software in HPR show notes',626,'boats are awesome, but might lead to hosting software in the HPR show notes ','<pre><code>#!/usr/bin/env python\r\nimport urllib.request\r\nimport json\r\nimport re\r\nimport subprocess\r\n\r\n# see https://www.weather.gov/documentation/services-web-api\r\n\r\n#where are we? GPS coordinates\r\nlat = 39.275235\r\nlon = -120.9199507\r\n#what is the user agent string?\r\nagent = &quot;Jezra&#39;s fun lil script&quot;\r\n#minimum wind speed in mph?\r\nmin_speed = 9\r\n\r\ndef get_api_data(endpoint):\r\n  print(endpoint)\r\n  #prepare the connection with custom headers\r\n  request = urllib.request.Request(endpoint, headers={&quot;User-Agent&quot;:agent})\r\n  #create a handler for the request\r\n  handler = urllib.request.urlopen(request)\r\n  #get the text\r\n  text = handler.read()\r\n  #parse the json text to a python object\r\n  obj = json.loads(text)\r\n  return obj\r\n\r\ndef wind_is_good(s):\r\n  #use regex to find the matches\r\n  matches = re.findall(&quot;[0-9]+&quot;,s)\r\n  for match in matches:\r\n    #convert string to int\r\n    m = int(match)\r\n    #is the speed good?\r\n    if(m&gt;=min_speed):\r\n      return True\r\n  #if we get here, there is no match :(\r\n  return False\r\n\r\nstart_url = &quot;https://api.weather.gov/points/{0},{1}&quot;.format(lat,lon)\r\n#get the json response from the start_url as a python object\r\nobj = get_api_data(start_url)\r\n\r\n#get the forecast url from the returned data\r\nforecast_url = obj[&#39;properties&#39;][&#39;forecast&#39;]\r\n\r\n# process the forecast url\r\nforecast = get_api_data(forecast_url)\r\n\r\n#loop through the forcast periods\r\nfor period in forecast[&#39;properties&#39;][&#39;periods&#39;]:\r\n  #put name and windspeed into easier to handle variable names\r\n  name= period[&#39;name&#39;]\r\n  wind = period[&#39;windSpeed&#39;]\r\n  print (name, wind)\r\n  #check the wind speed\r\n  if wind_is_good(wind):\r\n    subprocess.call([&quot;textjezra&quot;,&quot;{0}: {1}&quot;.format(name,wind)])\r\n</code></pre>\r\n',243,25,0,'CC-BY-SA','canoe, ptython, api, weather',0,0,1),
(2921,'2019-10-14','Geocaching with the family',2916,'Dave and his family take a wander around a wood looking for Geocaches','<p>In this episode, Dave and his family wander the paths of <a href=\"https://www.doncaster.gov.uk/services/culture-leisure-tourism/sandall-beat-wood\">Sandall Beat Wood</a> in <a href=\"https://en.wikipedia.org/wiki/Doncaster\">Doncaster</a> to participate in the game of <a href=\"https://en.wikipedia.org/wiki/Geocaching\">Geocaching</a>. During this time, which demonstrates an unusual level of failure in us playing the game, we try and explain what the game is all about.</p>\r\n<p>No, not <a href=\"https://en.wikipedia.org/wiki/The_Game_(mind_game)\">The Game</a>...</p>\r\n<p>As I explain at the beginning of the episode, this is a fairly long episode which hasn\'t been edited down much, so there are a lot of ambient pauses and heavy breathing to be enjoyed.</p>\r\n<p><em>Recorded in the field on my <a href=\"https://www.amazon.co.uk/Olympus-DM-3-Digital-Voice-Recorder/dp/B003UP6ALA\">Olympus DM-3</a> voice recorder.</em></p>\r\n<h2 id=\"caches-explored\">Caches explored</h2>\r\n<ul>\r\n<li>Cache 1 - <a href=\"https://coord.info/GC7F8ND\">GC7F8ND</a> - not found</li>\r\n<li>Cache 2 - <a href=\"https://coord.info/GC50TVW\">GC50TVW</a> - not found</li>\r\n<li>Cache 3 - <a href=\"https://coord.info/GC7KRHH\">GC7KRHH </a> - found!</li>\r\n</ul>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://next.moobug.net/index.php/apps/gallery/s/iGwmZMtyaD52ecg\">Link to photos and screenshot</a></li>\r\n<li><a href=\"https://geocaching.com\">geocaching.com</a></li>\r\n<li>Official Geocaching App: <a href=\"https://play.google.com/store/apps/details?id=com.groundspeak.geocaching.intro\">Google Play</a> | <a href=\"https://itunes.apple.com/app/apple-store/id329541503\">App Store</a></li>\r\n<li>c:geo Geocaching app: <a href=\"https://play.google.com/store/apps/details?id=cgeo.geocaching\">Google Play</a></li>\r\n</ul>\r\n',314,0,0,'CC-BY-SA','geocaching, outdoors, family',0,0,1),
(2948,'2019-11-20','Testing with Haskell',2560,'Introduction on HSpec and QuickCheck','<h2 id=\"intro\">Intro</h2>\r\n<p>I have liked writing automated tests for a long time, so it’s not a surprise that I end up writing them in Haskell too. This is very broad topic, so this episode only scratches the surface.</p>\r\n<h2 id=\"hspec\">HSpec</h2>\r\n<p>HSpec is testing framework that automatically detects tests, like most of the modern systems. It supports hierarchies, so one can organize tests by feature for example.</p>\r\n<pre><code>spec :: Spec\r\nspec = do\r\n    describe &quot;Very important feature&quot; $ do\r\n        it &quot;Execution should be error free&quot; $ do\r\n            ...\r\n\r\n        it &quot;Flux capacitors can be charged&quot; $ do\r\n            ...\r\n\r\n    describe &quot;Somewhat less important feature&quot; $ do\r\n        ...</code></pre>\r\n<h2 id=\"unit-test\">Unit test</h2>\r\n<p>Unit test tests a single case with fixed set of inputs. With pure functions these are a pleasure to write as they’re really just data in, data out, verify results. Below is two examples:</p>\r\n<pre><code>spec :: Spec\r\nspec = do\r\n    describe &quot;Markov chain configuration&quot; $ do\r\n        it &quot;Adding new starting element to empty configuration creates item with frequency of 1&quot; $ do\r\n            let config = addStart (&quot;AA&quot; :: DT.Text) emptyConfig\r\n            config ^? (configStartsL . _head . itemFreqL) `shouldBe` Just 1\r\n            config ^? (configStartsL . _head . itemItemL . _Just) `shouldBe` Just &quot;AA&quot;\r\n\r\n        it &quot;Adding same element twice to empty configuration creates item with frequency of 2&quot; $ do\r\n            let config = addStart &quot;AA&quot; $\r\n                         addStart (&quot;AA&quot; :: DT.Text) emptyConfig\r\n            config ^? (configStartsL . _head . itemFreqL) `shouldBe` Just 2\r\n            config ^? (configStartsL . _head . itemItemL . _Just) `shouldBe` Just &quot;AA&quot;</code></pre>\r\n<p>Both are for testing configuring markov chains. First one checks that adding a starting element in empty configuration results correct item with correct weight being added. Second checks that adding same starting element twice results weight of 2.</p>\r\n<p>Both tests use lenses for reading nested data structure. Episode doesn’t cover them much at all, as it’s enough to know that <code>(configStartsL . _head . itemFreqL)</code> focuses on starting elements of configuration, selects first item of the list and then selects frequency of that item. Lenses can also be used for modifying data and they don’t have to focus on only one element.</p>\r\n<p>Unit tests are easy enough to write, they verify single thing about the unit being tested and are usually super fast to run and not error prone.</p>\r\n<h2 id=\"property-based-test\">Property based test</h2>\r\n<p>Property based tests are used to check that a certain property holds with randomly generated input parameters. I’m using HSpec as testing framework and QuickCheck as tool for generating test data:</p>\r\n<pre><code>spec :: Spec\r\nspec = do\r\n    describe &quot;planets&quot; $ do\r\n        describe &quot;food&quot; $ do\r\n            it &quot;food requirement for positive amount of population is more than zero&quot; $ do\r\n                forAll positivePopulation $ \\x -&gt; foodRequirement x  &gt; RawResource 0\r\n\r\n            it &quot;food base production for farms is equal or greater than their amount&quot; $ do\r\n                forAll someFarms $ \\x -&gt; (sum (fmap foodBaseProduction x)) &gt; (RawResource $ length x)</code></pre>\r\n<p>Above we have two tests. First one checks that with any non-zero population, <code>foodRequirement</code> is greater than 0. Second one check that with any positive amount of farm, <code>foodBaseProduction</code> is greater than amount of the farms.</p>\r\n<p><code>positivePopulation</code> is Generator, that is used by QuickCheck to generate random data for testing. Its definition is shown below:</p>\r\n<pre><code>singlePopulation :: Gen PlanetPopulation\r\nsinglePopulation = do\r\n    let aPlanetId = toSqlKey 0\r\n    let aRaceId = toSqlKey 0\r\n    aPopulation &lt;- arbitrary `suchThat` \\x -&gt; x &gt; 0\r\n    return $ PlanetPopulation aPlanetId aRaceId aPopulation\r\n\r\npositivePopulation :: Gen [PlanetPopulation]\r\npositivePopulation = do\r\n    k &lt;- arbitrary `suchThat` \\x -&gt; x &gt; 0\r\n    vectorOf k singlePopulation</code></pre>\r\n<p>Generated data can be really simple or very complex. Generating complex data is often convenient to break into smaller steps and write generators for them.</p>\r\n<p>Property based tests are somewhat harder to write than unit tests, but they can potentially cover edge cases that might otherwise not been discovered.</p>\r\n<h2 id=\"working-with-database\">Working with database</h2>\r\n<p>All tests shown so far have been testing pure code, that is, code that is data in, data out. When database is introduced, things get more complicated. Suddenly there’s much more possibilities for errors. Below is an example of such a test:</p>\r\n<pre><code>spec :: Spec\r\nspec = withApp $ do\r\n\r\n    describe &quot;Status handling&quot;  $ do\r\n        describe &quot;Planet statuses&quot;  $ do\r\n            it &quot;Expired planet statuses are removed and news created&quot; $ do\r\n\r\n                sId &lt;- runDB $ insert $ StarSystem\r\n                        { starSystemName = &quot;Aldebaraan&quot;\r\n                        , starSystemCoordX = 10\r\n                        , starSystemCoordY = 20\r\n                        , starSystemRulerId = Nothing\r\n                        }\r\n\r\n                fId &lt;- runDB $ insert $ Faction\r\n                        { factionName = &quot;Star lords&quot;\r\n                        , factionHomeSystem = sId\r\n                        , factionBiologicals = 10\r\n                        , factionMechanicals = 10\r\n                        , factionChemicals = 10\r\n                        }\r\n\r\n                pId1 &lt;- runDB $ insert $ Planet\r\n                        { planetName = &quot;New Earth&quot;\r\n                        , planetPosition = 3\r\n                        , planetStarSystemId = sId\r\n                        , planetOwnerId = Just fId\r\n                        , planetGravity = 1.0\r\n                        , planetRulerId = Nothing\r\n                        }\r\n\r\n                _ &lt;- runDB $ insert $ PlanetStatus\r\n                        { planetStatusPlanetId = pId1\r\n                        , planetStatusStatus = GoodHarvest\r\n                        , planetStatusExpiration = Just 20201\r\n                        }\r\n\r\n                let status = Simulation 20201\r\n                _ &lt;- runDB $ insert status\r\n\r\n                news &lt;- runDB $ removeExpiredStatuses (simulationCurrentTime status)\r\n\r\n                statuses &lt;- runDB $ selectList [ PlanetStatusPlanetId ==. pId1 ] []\r\n                loadedNews &lt;- runDB $ selectList [] [ Asc NewsDate ]\r\n\r\n                liftIO $ statuses `shouldSatisfy` (\\x -&gt; length x == 0)\r\n                liftIO $ news `shouldSatisfy` (\\x -&gt; length x == 1)\r\n                liftIO $ loadedNews `shouldSatisfy` (\\x -&gt; length x == 1)</code></pre>\r\n<p>There’s a lot more code that had to be written for this test and majority of it is for setting up database state. The test if for ensuring that when good harvest boost expires, it is removed from database and respective news article is created.</p>\r\n<p>These kinds of tests have a lot more code and are much more slower to run because of the communication with a database. There’s also more cases where something can go wrong. But in the end, these kinds of tests are needed if one wants to verify that interaction with database is working as planned.</p>\r\n<h2 id=\"testing-api\">Testing API</h2>\r\n<p>Last example is about testing REST API. There are two tests, where the first one is checking that proper access control is in place and second one checks that pending messages are correctly retrieved.</p>\r\n<pre><code>spec :: Spec\r\nspec = withApp $ do\r\n    describe &quot;Message handling&quot; $ do\r\n        it &quot;unauthenticated user can&#39;t access messages&quot; $ do\r\n            _ &lt;- get ApiMessageR\r\n            statusIs 401\r\n\r\n        it &quot;pending messages are loaded&quot; $ do\r\n            (pId, fId) &lt;- setupPerson\r\n            _ &lt;- runDB $ insert $ researchCompleted 25250 fId HighSensitivitySensors\r\n            user &lt;- createUser &quot;Pete&quot; (Just pId)\r\n            authenticateAs user\r\n            _ &lt;- get ApiMessageR\r\n            resp &lt;- getResponse\r\n            let jsonM = join (decode &lt;$&gt; simpleBody &lt;$&gt; resp) :: Maybe Value\r\n\r\n            assertEq &quot;message tag&quot;\r\n                     (jsonM ^? (_Just . _Array . _head . key &quot;tag&quot; . _String))\r\n                     (Just &quot;ResearchCompleted&quot;)\r\n            assertEq &quot;star date&quot;\r\n                     (jsonM ^? (_Just . _Array . _head . key &quot;starDate&quot; . _Integer))\r\n                     (Just 25250)\r\n            assertEq &quot;technology&quot;\r\n                     (jsonM ^? (_Just . _Array . _head . key &quot;contents&quot; . key &quot;Technology&quot; . _String))\r\n                     (Just &quot;HighSensitivitySensors&quot;)\r\n\r\n            statusIs 200</code></pre>\r\n<p>Here extra complication is created by the fact that many features of the system are behind authentication and authorization. Luckily Yesod comes with helper function <code>authenticateAs</code>, that allows code to authenticate when system is running in development mode.</p>\r\n<p>These test are even slower than any of the previous ones, but on the other hand, they test whole chain from user interaction to database and back.</p>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>There’s lots of things that I couldn’t cover in such a short time, like various types of tests: UI testing, performance testing, security testing, long running testing…, the list goes on and on. But hopefully this episode gave you ideas what kinds of tests one can write and how to get started doing so using Haskell.</p>\r\n<p>Best way to reach me is email or at fediverse, where I’m <code>Tuula@mastodon.social</code>.</p>\r\n',364,107,0,'CC-BY-SA','haskell, testing, HSpec, QuickCheck',0,0,1),
(2924,'2019-10-17','Hacking an Alarm Clock to Make it Quieter',365,'I talk about installing a resistor in the speaker wire of an alarm clock so it won\'t be so loud','<p>The alarm clock on my bedside table had a very loud alarm&mdash;so loud that it scared me and made my heart race when it went off. I know you\'re thinking I should just use an alarm on my phone, but for whatever reason I wanted to use the alarm clock. In this episode I talk about installing a resistor in the speaker wires of the alarm clock so that it won\'t be so loud when it goes off. It\'s all good now. Loud enough to wake me up, but not so loud that it scares everyone.</p>\r\n\r\n<p><a data-flickr-embed=\"true\"  href=\"https://www.flickr.com/photos/137675441@N05/albums/72157710800691661\" title=\"Alarm Clock Hack\" target=\"_blank\"><img src=\"https://live.staticflickr.com/65535/48718052852_81d452d4c8.jpg\" width=\"500\" height=\"394\" alt=\"Alarm Clock Hack\"></a></p>\r\n',238,0,0,'CC-BY-SA','clocks, electronics, decibels, noise levels, alarm clocks, alarms',0,0,1),
(2937,'2019-11-05','Lord D\'s Film Reviews: His Girl Friday',2937,'Lostnbronx reviews an old screwball comedy.','<p>Ignore the address for the film that I give in the review. Here’s a MUCH better copy than the one I watched. It’s another upload on Archive.org:</p>\r\n<p><a href=\"https://archive.org/details/HisGirlFriday-1940\" class=\"uri\">https://archive.org/details/HisGirlFriday-1940</a></p>\r\n<p>Boy, I wish I’d found this one first!</p>\r\n',107,109,0,'CC-0','review, film, lord d',0,0,1),
(2933,'2019-10-30','A walk through my PifaceCAD Python code – Part 1',871,'In this series a do whirl wind tour of the Python code I developed for my PifaceCAD board','<p>In this series a do whirl wind tour of the Python code I developed to control my PifaceCAD raspberry pi add on board. I this use to control a music player running on a remote raspberry pi upstairs.</p>\r\n<p>In this episode I cover my use of global variables.</p>\r\n<p>List of global variables along with associated comments explaining what they are used for</p>\r\n<pre><code># GLOBAL VARIABLES\r\n\r\nRemoteDevice = &quot;pi@192.168.1.13&quot;\r\n# Username and ip address of the remote device to control\r\n\r\nSeekMin = -6\r\n# Sets the minimum value of the variable SeekPosition\r\n\r\nSeekMax = 6\r\n# Sets the maximum value of the variable SeekPosition\r\n\r\nSeekPosition = 0\r\n# stores seek menu position,\r\n\r\nSeekMenu = False\r\n# used to track seek menu state, ie are we in seek menu or not\r\n\r\nFirstPass = True\r\n# Used to track 1st time button 5 (backlight toggle) is pushed, turns off blinkstick\r\n\r\nLcdLightOn = False\r\n# used to track toggle sate of backlight button 5\r\n\r\nMenuMin = 0\r\n# Sets the minimum value of variable &quot;Menu&quot;\r\n\r\nMenuMax = 2\r\n# Sets the maximum value of variable &quot;Menu&quot;\r\n\r\nMenu = 0\r\n# global variable used to keep trak of selected menu\r\n\r\nIrActive = False\r\n# used to track toggle state of active infrared buttons, when false disables\r\n# all buttons on the remote control except the blue button.\r\n\r\nStoredTime = 0\r\n# Stores curent time in seconds when a button is pushed, used by double button tap feature\r\n\r\n#GET_IP_CMD = &quot;hostname –all-ip-addresses&quot;\r\n# Debian 7 wheezy, Command to get IP adress\r\n\r\nGET_IP_CMD = &quot;hostname --all-ip-addresses | cut -d&#39; &#39; -f1&quot;\r\n# Debian 8 jessie, Command to get IP adress\r\n\r\n#GET_ESSID_CMD = &quot;iwconfig wlan0 | grep &#39;ESSID:&#39; | cut -d&#39;:&#39; -f2&quot;\r\n# Debian 7 wheezy, Command to get wifi ESSID\r\n\r\nGET_ESSID_CMD = &quot;/sbin/iwconfig wlan0 | grep &#39;ESSID:&#39; | cut -d&#39;:&#39; -f2&quot;\r\n# Debian 8 wheezy, Command to get wifi ESSID\r\n\r\nGET_WIFI_STRENGTH_CMD = &quot;/sbin/iwconfig wlan0 | grep &#39;Link Quality=&#39; | awk &#39;{ print $2 }&#39;&quot;\r\n# Command to get wifi signal strength</code></pre>\r\n',201,38,1,'CC-BY-SA','Podcasts, Linux, Command Line, Python, Raspberry Pi',0,0,1),
(2923,'2019-10-16','Describing how I listen to podcasts PART 5',1750,'In this episode I cover how I use my 2nd add on board the PiFace Control and Display','<p>Below are examples of messages shown on the screen during operation</p>\r\n<p><em>System Up</em> (Unfortunately I didn’t get a picture of this message)</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-01.JPG\" alt=\"Picture 01\" /><br />\r\nShows the unit waiting to get a wi-fi connection and get given an IP address.</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-02.JPG\" alt=\"Picture 02\" /><br />\r\nUnit goes to the HPR site and gets the number of days to free slot in the show queue. At the time when I took the picture the queue had a healthy 22 shows!</p>\r\n<p>Links to three previous shows I did that mention the Blinkstick</p>\r\n<ol type=\"1\">\r\n<li><p>Solving a problem I had with my Blinkstick<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2089\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2089</a></p></li>\r\n<li><p>Tracking the HPR queue using python and a Blinkstick<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2340\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2340</a></p></li>\r\n<li><p>Follow on to HPR2340 (Tracking the HPR queue in Python)<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2344\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2344</a></p></li>\r\n</ol>\r\n<ul>\r\n<li>Link to Moc, Music On Console<br />\r\n<a href=\"https://moc.daper.net/\" class=\"uri\">https://moc.daper.net/</a></li>\r\n</ul>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-03.JPG\" alt=\"Picture 03\" /> <img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-04.JPG\" alt=\"Picture 04\" /><br />\r\nMenu 0 Podcasts screens</p>\r\n<pre><code>0 [PODCASTS]\r\n0 1 &lt;|| PLAY/PAUSE (Toggles moc between play and Pause)\r\n0 2 &lt;&lt;  INFORMATION(Displays information about the current track)\r\n0 3 &lt;&lt;  (Move to previous track in playlist)\r\n0 4 &lt;&lt;  (Move to next track in playlist)\r\n0 5 LIGHT (Toggle back-light on LCD screen)\r\nPUSH IN TOP TOGGLE BUTTON (Seek forward or back in current track)</code></pre>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-05.JPG\" alt=\"Picture 05\" /> <img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-06.JPG\" alt=\"Picture 06\" /><br />\r\nMenu 1 Audiobooks screens</p>\r\n<pre><code>1 [AUDIOBOOKS]\r\n1 1 &lt;|| PLAY/PAUSE (Toggles moc between play and Pause)\r\n1 2 &lt;&lt;  INFORMATION(Displays information about the current track)\r\n1 3 &lt;&lt;  (Move to previous track in playlist)\r\n1 4 &lt;&lt;  (Move to next track in playlist)\r\n1 5 LIGHT (Toggle back-light on LCD screen)\r\nPUSH IN TOP TOGGLE BUTTON (Seek forward or back in current track)</code></pre>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-07.JPG\" alt=\"Picture 07\" /> <img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-08.JPG\" alt=\"Picture 08\" /><br />\r\nMenu 2 System screens</p>\r\n<pre><code>2 [SYSTEM]\r\n2 1 Sys Information (System information)\r\n2 2 WiFi (Displays WiFi inofrmation such SSID &amp; signal strength)\r\n2 3 HPR (Displays the number days to the next free slots on FPR que)\r\n2 4 Not shown, (Not in use)\r\n2 5 LIGHT (Toggle back-light on LCD screen)\r\nPUSH IN TOP TOGGLE BUTTON (Shut-down the Raspberry Pi)</code></pre>\r\n<p>Infra-red Sensor</p>\r\n<ul>\r\n<li><p>Example of my <a href=\"https://www.google.com/url?sa=i&amp;rct=j&amp;q=&amp;esrc=s&amp;source=images&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwin95XTnLbeAhURzaQKHcNIADEQjRx6BAgBEAU&amp;url=http%3A%2F%2Fwww.remotes4you.eu%2Fen%2Fsamsung-original-samsung-remote-control-aa59-00465.html&amp;psig=AOvVaw04vHTRnb1mBQYLrBKpOAKf&amp;ust=1541265724536724\">Samsung TV remote control</a></p></li>\r\n<li><p>Lirc Article from Wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/LIRC\" class=\"uri\">https://en.wikipedia.org/wiki/LIRC</a></p></li>\r\n</ul>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-09.JPG\" alt=\"Picture 09\" /><br />\r\nInfra-red sensor turned on</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-10.JPG\" alt=\"Picture 10\" /><br />\r\nInfra-red sensor turned off</p>\r\n<ul>\r\n<li>Kodi article on Wikipedia, (Formerly XBMC)<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Kodi_(software)\" class=\"uri\">https://en.wikipedia.org/wiki/Kodi_(software)</a></li>\r\n</ul>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-11.JPG\" alt=\"Picture 11\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-12.JPG\" alt=\"Picture 12\" /><br />\r\nExample of a message being sent to the unit telling me that a backup is complete. The bright pink LED on the Blinkstick lets me know at a glance that a message has been sent to the display.</p>\r\n<ul>\r\n<li><p>EEE PC article on Wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Asus_Eee_PC\" class=\"uri\">https://en.wikipedia.org/wiki/Asus_Eee_PC</a></p></li>\r\n<li><p>Switch Bounce article on Wikipedia<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Switch#Contact_bounce\" class=\"uri\">https://en.wikipedia.org/wiki/Switch#Contact_bounce</a></p></li>\r\n</ul>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-13.JPG\" alt=\"Picture 13\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-14.JPG\" alt=\"Picture 14\" /><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-15.JPG\" alt=\"Picture 15\" /><br />\r\nA flavour of what information is shown when the information button 2 is pushed. The picture showing the title scrolling from right to left was blurred so I didn’t include this.</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-16.JPG\" alt=\"Picture 16\" /><br />\r\nThe menu displayed during seek, this in initiated by pushing and releasing the toggle button while either in the Podcasts main menu 0 or Audio book main menu 1.</p>\r\n<p><img src=\"https://hackerpublicradio.org/eps/hpr2923/Picture-17.JPG\" alt=\"Picture 17\" /><br />\r\nThe shut-down menu this in initiated by pushing and releasing the toggle button while in the System main menu 2.</p>\r\n',201,0,1,'CC-BY-SA','Audio, Podcasts, Linux, Command Line, Python, Raspberry Pi',0,0,1),
(2925,'2019-10-18','LinuxLugCast\'s Memorial for FiftyOneFifty ',7541,'We are here tonight to share memories of our friend Donald Grier aka FiftyOneFifty.','<p><a href=\"https://www.linuxlugcast.com/category/https-honkeymagoo-000webhostapp-com-home-podcast-2\">LinuxLugCast Memorial</a></p>\r\n\r\n<p>We are here tonight to share memories of our friend<strong> Donald Grier</strong> aka <strong>FiftyOneFifty</strong></p>\r\n<p>Fifty was involved with many podcast over the years</p>\r\n<ul class=\"bullet\">\r\n<li>Obviously LinuxLugCast <a href=\"https://www.linuxlugcast.com\">https://www.linuxlugcast.com</a></li>\r\n<li><a href=\"https://archive.org/search.php?query=linuxlugcast\">https://archive.org/search.php?query=linuxlugcast</a></li>\r\n<li>Hacker Public Radio <a href=\"https://hackerpublicradio.org/\">https://hackerpublicradio.org/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0131.html\">https://hackerpublicradio.org/correspondents/0131.html</a></li>\r\n<li>/dev/random <a href=\"https://devrandomshow.org/\">https://devrandomshow.org/</a></li>\r\n<li><a href=\"https://devrandomshow.org/shows/?f=all.html\">https://devrandomshow.org/shows/?f=all.html</a></li>\r\n<li>Kernal Panic Oggcast <a href=\"https://archive.org/search.php?query=KernelPanic+Oggcast&page=2\">https://archive.org/search.php?query=KernelPanic+Oggcast&page=2</a></li>\r\n</ul>\r\n<p><u>Shared thoughts and memories</u>:<br>\r\n<strong>Ken Fallon</strong></p>\r\n<p>I was in the back room pottering away when espeak notified me that 5150<br>\r\nhad passed away. I went back to the computer and read the announcement<br>\r\nin the IRC Logs and confirmed the news. Some dude I had never met, never<br>\r\nseen in my life, and didn’t even know his real name, was gone and I was<br>\r\nin the back room crying my eyes out.</p>\r\n<p>Crying for the loss of a friend.</p>\r\n<p>When had he become a friend ?</p>\r\n<p>People have been socializing since the dawn of humans, be it at the camp<br>\r\nfire, the forge, pub, hairdresser, sports club, church, or wherever.</p>\r\n<p>For us it was via Linux podcasting. You are there because you share a<br>\r\ncommon interest. If you were into Linux podcasting then you could not<br>\r\nhelp but get to know fiftyonefifty. The guy turned up everywhere if not<br>\r\non the podcasts themselves he was commenting on them. I have 619<br>\r\nmessages from him about HPR alone.</p>\r\n<p>He submitted his first show back in 2010 and has been a regular since<br>\r\nthen. At some point after that I knew that he was on my “special list”<br>\r\nof people who I could rely upon to fill the queue if needed.</p>\r\n<p>And as I sat there crying I realized that he had also sneaked onto my<br>\r\nlist of friends.</p>\r\n<p>I’ve not always been a fan of the New Year Show, but now I am glad for<br>\r\nit. While I may never get to share a beer with him any more, or take him<br>\r\nup on his promise to let me fire off some rounds on his farm, I did at<br>\r\nleast get to shoot the breeze with him for many a happy hour.</p>\r\n<p>Goodbye old friend you will be missed</p>\r\n<p><strong>Anonymous</strong><br>\r\nA Ramble for FiftyOneFifty: King of Ramblers</p>\r\n<p>I am writing a Ramble for a man I knew only as FiftyOneFifty.  I never knew his real name,<br>\r\nnor do I know if he knew mine.  In many things, Names do not matter, People, Actions, and<br>\r\nfeeling do.   We podcasted together off and on, over several years.  I don’t recall exactly<br>\r\nhow many.   It doesn’t matter now, since they are all that there will ever be.  We grew to be<br>\r\ngood friends.  I never met him in person, online life is like that.  I only know my life would be<br>\r\nmuch poorer, if I had not known him.  Hearing he died, shattered me.  This Ramble is my try<br>\r\nat putting most the pieces back in place.  Of course, nothing can replace the largest piece,<br>\r\nthe Man Himself.  My heart and prayers go out to those friends and family dealing with his loss.</p>\r\n<p>His death is a harsh, unchangeable, fact.  I shall focus on his life, and things better remembered<br>\r\nthan the wall we all will hit one day.  Fifty was a man if Life, Joy, and passions.  That is how I shall<br>\r\nwrite of him.  I had a far too short time, to learn about him, and from him.  It will also  warm my heart,<br>\r\nwhere he live yet, and has for a long time.  I learned this fact, only after I could no longer talk with him.</p>\r\n<p>I found him easy to talk with, and listen to.  He was also “Vaccinated with a Victrola Needle ”  as<br>\r\nmy relatives might say.  He could ramble on for hours. enjoyably.  He virtually always made sense,<br>\r\neven when in his cups.  He shared himself, his hobbies, experience, and his travels with us, on our<br>\r\npodcasts.  While he went to Linux events, he never limited himself to just linux topics.  He reported the<br>\r\nnon Linux features of events.  This great for choosing family trips to them.   He included accommodations, restaurants, and pubs in the area.  I don’t travel, or drive, so these second hand visit were a delight.</p>\r\n<p>His research and Linux activities made up much of his contribution to our podcasts.  He life also<br>\r\nflowed in, to entertain and inform us.  He lived in the country, farming, cows, trouble getting Internet<br>\r\nservice were included.  My parents can off farms, so he even kept my ties to that life alive.  Firearms, cars, especially his beloved Hearse were shared interests.  tale from his tech support work, for businesses and schools enlightened me.  Farmers are natural pack rats, so gathering all sorts of discarded computer gear was natural.   Unfortunately he lost most of it in the fire which destroyed his house.   Losing his house, and even his dear father, never seemed to blight his spirit or life, in the long run.  It would be natural to keep such private matters from more distant friends, as I was.  Nor did his long illness color the side of him I saw.  it got in his way, sometimes,  as I recall, but never in his spirit.  I wish I had been closer, to offer myself more to the man I miss dearly.  I must just try to use his independent example, in my own life.  Anyone could do much, worse.   His quiet touch helped heal me in ways I am only now realizing.</p>\r\n<p>I started the day in tears, still aching from losing a rare, true friend.  Then I recalled a song from Toby Keith, called “Cryin’ for Me (Wayman’s Song ) written about he loss of his close friend, Wayman Tisdale.  Toby found about his friends passing on Friday.  On Sunday Toby was driven to write the memorial song.  In it he says his tears are not for his lost friend, who is now in Heaven, but for Toby himself, and all those family, and friends, Wayman left behind.  I believe Fifty is in Heaven, with his Dad, and those who have gone before.  He will see things from the Good Seats.  He can enjoy all the Holidays, and never feel the cold.  I was driven to write like Toby, to handle my own shock and grief.  We Cry and Mourn, those left behind in the Mortal world, for our loss and pain.  Our dear One is beyond pain, perhaps for the first time in years.  He has earned his time in Grace.  He as paid as we pay now, for life beyond grief, with those who have gone ahead.   I hope my words and memories may help  the ones he left behind.  Pain is a Mortal thing. It need not be deadly, or poisonous.  Fifty’s Life is a great example of this and many other things.  I hope we can go forward, with his example helping heal our loss of him.    God Bless You, Fifty, and those you touched in turn.</p>\r\n',269,0,1,'CC-BY-SA','LinuxLugCast, FiftyOneFifty, Memorial, Syndication',0,0,1),
(2929,'2019-10-24','Recovering Files from a Dead MacBook Air',482,'I talk about recovering the files from my wife\'s dead MacBook Air using an Ubuntu Live CD.','<p>I talk about becoming a household hero by recovering my wife\'s files from her dead MacBook Air. Her laptop would not boot, shutting down seconds into the process each time she tried to start it up. I used an Ubuntu Live CD (DVD), with the commands <code>fdisk</code> and <code>fsck</code> to repair the damaged filesystem on the Mac. It still wouldn\'t boot even with the repaired filesystem, but I was able to mount the drive and copy her files to a USB drive.</p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li>Blog post Howto: <a href=\"https://miteshshah.github.io/mac/repair-fix-mac-hfs-partition-using-ubuntu/\">Repair/Fix MAC HFS+ Partition Using Ubuntu</a></li>\r\n</ul>\r\n',238,0,0,'CC-BY-SA','Ubuntu,Mac OS X,File Recovery,Filesystem Repair',0,0,1),
(2931,'2019-10-28','Wallabag for on premises article aggregation',690,'In this episode, I describes my trials and eventual triumph in installing Wallabag','<h2 id=\"addendum\">Addendum</h2>\r\n<p>I forgot to mention that Wallabag is also offered as a service for a small fee. Check out the website for more information.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://wallabag.org/en\">Wallabag website</a></li>\r\n<li><a href=\"https://doc.wallabag.org/en/admin/installation/installation.html\">Wallabag documentation</a></li>\r\n<li><a href=\"https://hub.docker.com/r/wallabag/wallabag\">Wallabag on Docker Hub</a></li>\r\n<li><a href=\"https://cockpit-project.org/\">Cockpit website</a></li>\r\n</ul>\r\n',300,0,0,'CC-BY-SA','self-hosted, docker',0,0,1),
(2939,'2019-11-07','Submit a show to Hacker Public Radio in 10 easy steps',601,'This is a 10 step walkthrough of submitting a show to HPR','<h2 id=\"steps\">Steps</h2>\r\n<ol>\r\n<li>Record your episode</li>\r\n<li>Go to <a href=\"https://hackerpublicradio.org\" class=\"uri\">https://hackerpublicradio.org</a></li>\r\n<li>Click on &quot;Give Shows&quot;</li>\r\n<li>Click on &quot;Calendar&quot; (the link is not obvious, so use your browser\'s find functionality to search for the word &quot;Calendar&quot;).<br />\r\n<small><em>Edit: Please use the ⇧Upload⇧ link in the menu bar</em></small>\r\n</li>\r\n<li>Choose a slot</li>\r\n<li>Submit your email address</li>\r\n<li>Click the link in the confirmation email</li>\r\n<li>Create your profile (if new), then fill in the form with title, summary and show notes</li>\r\n<li>Attach your episode and submit (wait for long upload process)</li>\r\n<li>Receive your confirmation email, and enjoy your episode!</li>\r\n</ol>\r\n',300,45,0,'CC-BY-SA','podcast, hpr, how-to',0,0,1),
(2926,'2019-10-21','Full Circle Magazine',181,'Just a short show to request support for one of the Linux communities longest standing Magazines','<p>Hi Everyone in HPR land this is Tony Hughes coming to you from Studio B at Woodbrooke Quaker Study Centre in Birmingham in the UK, where I am currently staying for a week of voluntary work.</p>\r\n<p>The reason for this short episode is to talk about a community magazine that I have been reading since I started to use Ubuntu Linux back in 2007. Full Circle magazine actually produced a pilot issue in April of 2007 and issue one was issued in June 2007. All issues are published as a free pdf download and all the content is under a Creative Commons licence.</p>\r\n<p>Free Circle Magazine initially started as an Ubuntu (and official spins of Ubuntu) magazine but over the years while still being officially about Ubuntu or Linux Distributions based on Ubuntu, many of the articles are applicable to those across the Linux community.</p>\r\n<p>Over the years, as well as printing one off articles about individuals’ journey to using Linux, reviews and letters from readers, there have been regular series on topics such as Inkscape, Python programming, Open/LibreOffice, Virtualisation and much more.</p>\r\n<p>Sadly after over 12 years of producing a regular monthly magazine for the Linux community some of the regular article series are coming to an end and due to ill health at least one regular writer is not able to contribute at the moment, and this is leaving the magazine short of content and in danger of possibly coming to an end.</p>\r\n<p>As a podcast community that is used to the idea of crowd sourced content, many of whom are also Linux users, could I ask that some of you that have read Full Circle, but never contributed, consider sending in some content. It could be an article on how you started using Linux, about some Linux software that you think the readers may be interested in learning more about, or just a letter to Ronnie to say thanks for all his efforts putting out a magazine every month for the last 12+ years.</p>\r\n<p>Like many things we often don’t miss them until they are gone, and I would hate to think that Full Circle Magazine is one of those things that I will miss in the future. I have put my money where my mouth is and in coming issues you may see me in print, talking about podcasting. You could even use any writing you do as the base for a HPR show, and achieve two goals in one go.</p>\r\n<p>All the best for now.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.woodbrooke.org.uk/\" class=\"uri\">https://www.woodbrooke.org.uk/</a></li>\r\n<li><a href=\"https://fullcirclemagazine.org/\" class=\"uri\">https://fullcirclemagazine.org/</a></li>\r\n<li><a href=\"https://fullcirclemagazine.org/issue-149/\" class=\"uri\">https://fullcirclemagazine.org/issue-149/</a></li>\r\n</ul>\r\n',338,0,0,'CC-BY-SA','Full Circle Magazine, Ubuntu, Linux, Free Magazine, Creative Commons',0,0,1),
(2934,'2019-10-31','Server Basics 106: Namespaces and containers',2033,'Klaatu talks about the unshare and lxc commands','<p>\r\nNamespaces provide context and constraints for processes on a Linux system.\r\nThey are utilised by the infrastructure of \"the cloud\" to create distinct \"containers\", in which processes may run without awareness of the system they are actually running upon.\r\n</p>\r\n\r\n<pre><code>\r\n// prove you are not running some process\r\n\r\n$ pidof tcsh\r\n// nothing\r\n\r\n$ sudo pidof tcsh\r\n// nothing\r\n\r\n// launch tcsh in a new namespace with unshare:\r\n\r\n$ sudo unshare --fork --pid --mount-proc tcsh\r\n\r\n// from within that session:\r\n\r\n# pidof tcsh\r\n1\r\n\r\n// wait what??\r\n// yes tcsh is the first pid of its own namespace\r\n\r\n// from another term\r\n$ ps 1\r\ninit\r\n\r\n$ pidof tcsh\r\n26814\r\n\r\n// from inside the namespace, pid is seen as 1\r\n// from outside, pid is normal\r\n\r\n$ ps tree | less\r\n// search for tcsh\r\n\r\n// See evidence of namespaces:\r\n\r\n$ ls /proc/*/ns\r\n\r\n$ ls /proc/26814/ns\r\nipc net pid user uts [...]\r\n</code></pre>\r\n\r\n<p>\r\nTo see this in action for a slightly more pragmatic purpose, you can use the <code>lxc</code> command.\r\nThe <a href=\"https://linuxcontainers.org/lxc/getting-started/\" target=\"_blank\">LXC</a> system uses namespaces and cgroups to create functional containers that act, more or less, like a Virtual Machine, except that they are built in containers so that they do not have to emulate hardware.\r\n</p>\r\n<p>If your system doesn\'t have LXC installed, first install it:\r\n</p>\r\n\r\n<pre><code>\r\n$ sudo dnf install lxc lxc-templates lxc-doc\r\n\r\n// on Ubuntu or Debian:\r\n\r\n$ apt install lxc\r\n</code>\r\n</pre>\r\n\r\n<p>\r\nYou also need to create a network bridge so that your container and your host system (that\'s the computer you\'re sitting in front of right now) can communicate.\r\n</p>\r\n\r\n<pre><code>\r\n$ sudo ip link add br0 type bridge\r\n$ sudo ip addr show br0\r\n7: br0: &lt;BROADCAST,MULTICAST&gt; mtu 1500 qdisc\r\n   noop state DOWN group default qlen 1000\r\n   link/ether 26:fa:21:5f:cf:99 brd ff:ff:ff:ff:ff:ff\r\n</code></pre>\r\n<p>\r\nNow give your bridge device an IP address that doesn\'t conflict with any existing IP address on your network:\r\n</p>\r\n<pre><code>\r\n$ sudo ip addr add 192.168.168.168 dev br0\r\n$ sudo ip link set br0 up\r\n</code></pre>\r\n\r\n<p>\r\nCreate a configuration for your container.\r\nYou can base this on the samples provided by lxc (located in /usr/share/docs/lxc or similar).\r\nEverything but <strong>veth</strong>, <strong>br0</strong>, and <strong>up</strong> is arbitrary. You can make up all the values.\r\n</p>\r\n\r\n<pre><code>\r\nlxc.utsname = hackerpublicradio\r\nlxc.network.type = veth\r\nlxc.network.flags = up\r\nlxc.network.link = br0\r\nlxc.network.hwaddr = 4a:49:43:49:79:bd\r\nlxc.network.ipv4 = 192.168.168.1/24\r\nlxc.network.ipv6 = 2003:db8:1:0:214:c0ff:ee0b:3596\r\n</code></pre>\r\n\r\n<p>\r\nNow install an OS into your container.\r\nOS templates are provided by LXC in /usr/share/doc/lxc/templates or a similar location.\r\n</p>\r\n\r\n<pre><code>\r\n$ ls -m /usr/share/lxc/templates/\r\nlxc-alpine, lxc-altlinux, lxc-archlinux, lxc-busybox, lxc-centos [...]\r\n</code></pre>\r\n\r\n<p>\r\nChoose a template and install.\r\nI use Alpine in the recorded show, because it\'s supposed to be really small.\r\nI don\'t necessarily recommend Alpine. I recommend Slackware, of course.\r\n</p>\r\n\r\n<pre><code>\r\n$ sudo lxc-create --name slackware --template slackware\r\n</code></pre>\r\n\r\n<p>\r\nOnce the install is done, start your container:\r\n</p>\r\n\r\n<pre><code>\r\n$ sudo lxc-start --name slackware\r\n--rcfile ~/mycontainer.conf\r\n</code></pre>\r\n\r\n<p>\r\nNow attach to the container:\r\n</p>\r\n\r\n<pre><code>\r\n$ sudo lxc-attach --name slackware\r\n#\r\n</code></pre>\r\n\r\n<p>\r\nRun a command.\r\n</p>\r\n\r\n<pre><code>\r\n# uname -av\r\nLinux hackerpublicradio 5.3.0.x86_64 #1 SMP Wed Oct 10 18:34:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\r\n</code></pre>\r\n\r\n<p>\r\nThis is the technology that Docker and <a href=\"https://www.opencontainers.org/\" target=\"_blank\">OCI</a> projects use to create containers.\r\nAnd when a bunch of containers start swarming around on a bunch of hosts, you eventually end up with a cloud.\r\nHow do you manage all of these things?\r\nThat will be the topic for the next entry in this series, I\'ll bet.\r\n</p>\r\n',78,0,0,'CC-BY-SA','server,container,docker,serverless,cloud,sys admin,kubernetes',0,0,1),
(2935,'2019-11-01','The work of fire fighters, part 3',1807,'The continued introduction into the work of fire fighters','<h2 id=\"continued-general-basic-knowledge-of-fire-fighting.\">Continued general basic knowledge of fire fighting.</h2>\r\n<p>Talking about large water system, breathing gear, “the walk”, flash-over and back-draft.</p>\r\n',369,0,0,'CC-BY-SA','fire fighting, fire brigade',0,0,1),
(2941,'2019-11-11','Server Basics 107: Minishift and container management',2331,'Klaatu introduces Minishift, a local test environment for a single-node cloud','<p>Learn \"the OS of the cloud\" with <a href=\"https://www.okd.io/minishift/\" target=\"_blank\">minishift</a> or <a href=\"https://github.com/kubernetes/minikube\" target=\"_blank\">minikube</a>\r\n</p>',78,0,0,'CC-BY-SA','server,container,docker,serverless,cloud,sys admin,kubernetes',0,0,1),
(2943,'2019-11-13','Music as Life',582,'quantum harmony','<ul>\r\n<li>Thomas Orr Anderson<br />\r\n<a href=\"https://www.phisonics.com/about-2/\" class=\"uri\">https://www.phisonics.com/about-2/</a></li>\r\n<li>Find the audio that I listened to here<br />\r\n<a href=\"https://www.phisonics.com/podcast-blog-research/\" class=\"uri\">https://www.phisonics.com/podcast-blog-research/</a></li>\r\n</ul>\r\n<p>Background sounds provided by some road noise, and a train.</p>\r\n',329,0,1,'CC-BY-SA','science',0,0,1),
(3196,'2020-11-02','HPR Community News for October 2020',5375,'Dave and Ken review the months happenings, and try various pronunciations of Cedric De Vroeys name.','<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=3174\" target=\"_blank\">3174</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-10-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3174\" target=\"_blank\">Linux Inlaws S01E14: The big programming language panel</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3175\" target=\"_blank\">3175</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-10-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3175\" target=\"_blank\">International Keyboard</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=3176\" target=\"_blank\">3176</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-10-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3176\" target=\"_blank\">HPR Community News for September 2020</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=3177\" target=\"_blank\">3177</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-10-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3177\" target=\"_blank\">Zero cost VPN</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=3178\" target=\"_blank\">3178</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-10-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3178\" target=\"_blank\">Finishing the Recumbent Bicycle</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3179\" target=\"_blank\">3179</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-10-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3179\" target=\"_blank\">MakeMKV to back up media, and a Question</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=3180\" target=\"_blank\">3180</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-10-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3180\" target=\"_blank\">GIMP: Miscellaneous Tools</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=3181\" target=\"_blank\">3181</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-10-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3181\" target=\"_blank\">RealVNC cloud offering</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3182\" target=\"_blank\">3182</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-10-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3182\" target=\"_blank\">Yo-ho-ho, and a bottle of Cholecalciferol</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=3183\" target=\"_blank\">3183</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-10-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3183\" target=\"_blank\">Don\'t trust zipfiles</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0387.html\" target=\"_blank\">Cedric De Vroey</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3184\" target=\"_blank\">3184</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-10-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3184\" target=\"_blank\">Linux Inlaws S01E15: IT Security and stick insects</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3185\" target=\"_blank\">3185</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-10-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3185\" target=\"_blank\">Pandemics In History</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=3186\" target=\"_blank\">3186</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-10-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3186\" target=\"_blank\">A light bulb moment, part 2</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=3187\" target=\"_blank\">3187</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-10-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3187\" target=\"_blank\">Ansible for Dynamic Host Configuration Protocol</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=3188\" target=\"_blank\">3188</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-10-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3188\" target=\"_blank\">Thrift store quick fix</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=3189\" target=\"_blank\">3189</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-10-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3189\" target=\"_blank\">How the Dutch dig Graves</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=3190\" target=\"_blank\">3190</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-10-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3190\" target=\"_blank\">GIMP Brushes</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=3191\" target=\"_blank\">3191</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-10-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3191\" target=\"_blank\">Swedish Corona Experience</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=3192\" target=\"_blank\">3192</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-10-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3192\" target=\"_blank\">A light bulb moment, part 3</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=3193\" target=\"_blank\">3193</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-10-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3193\" target=\"_blank\">Meet Antithesis</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=3194\" target=\"_blank\">3194</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-10-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3194\" target=\"_blank\">Linux Inlaws S01E16: The count and the questions</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3195\" target=\"_blank\">3195</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-10-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3195\" target=\"_blank\">For your Consideration - the ideal Ham Radio setup</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 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=3153#comments\" target=\"_blank\">hpr3153</a></strong>\n(2020-09-02) \"<em>Fixing eBooks with Calibre and pdfcrop</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3153#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2020-10-21:\n\"Thank for this\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 13 comments on 9 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3175#comments\" target=\"_blank\">hpr3175</a></strong>\n(2020-10-02) \"<em>International Keyboard</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=3175#1\" target=\"_blank\">Comment 1</a>:\nGumnos on 2020-10-03:\n\"Using the X \"Compose\" key\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3176#comments\" target=\"_blank\">hpr3176</a></strong>\n(2020-10-05) \"<em>HPR Community News for September 2020</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=3176#1\" target=\"_blank\">Comment 1</a>:\nMike Ray on 2020-10-05:\n\"YAML, spacing and ansible-lint\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3179#comments\" target=\"_blank\">hpr3179</a></strong>\n(2020-10-08) \"<em>MakeMKV to back up media, and a Question</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=3179#1\" target=\"_blank\">Comment 1</a>:\njanedoc on 2020-10-09:\n\"using make mkv\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3180#comments\" target=\"_blank\">hpr3180</a></strong>\n(2020-10-09) \"<em>GIMP: Miscellaneous Tools</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=3180#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2020-10-10:\n\"contribution back\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3180#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2020-10-10:\n\"Donating to Fedora\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3184#comments\" target=\"_blank\">hpr3184</a></strong>\n(2020-10-15) \"<em>Linux Inlaws S01E15: IT Security and stick insects</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3184#1\" target=\"_blank\">Comment 1</a>:\nClinton Roy on 2020-10-15:\n\"Mix not quite right?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3184#2\" target=\"_blank\">Comment 2</a>:\nCedric De Vroey on 2020-10-26:\n\"Great show keep them comming :-)\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3185#comments\" target=\"_blank\">hpr3185</a></strong>\n(2020-10-16) \"<em>Pandemics In History</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=3185#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-10-16:\n\"fear porn\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3185#2\" target=\"_blank\">Comment 2</a>:\nCedric De Vroey on 2020-10-26:\n\"Ahuka\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3187#comments\" target=\"_blank\">hpr3187</a></strong>\n(2020-10-20) \"<em>Ansible for Dynamic Host Configuration Protocol</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><li><a href=\"https://hackerpublicradio.org/eps.php?id=3187#1\" target=\"_blank\">Comment 1</a>:\nCedric De Vroey on 2020-10-26:\n\"Also getting into Ansible\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3189#comments\" target=\"_blank\">hpr3189</a></strong>\n(2020-10-22) \"<em>How the Dutch dig Graves</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=3189#1\" target=\"_blank\">Comment 1</a>:\nCedric De Vroey on 2020-10-26:\n\"Love graveyards\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3189#2\" target=\"_blank\">Comment 2</a>:\nClinton Roy on 2020-10-28:\n\"Interesting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3191#comments\" target=\"_blank\">hpr3191</a></strong>\n(2020-10-26) \"<em>Swedish Corona Experience</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=3191#1\" target=\"_blank\">Comment 1</a>:\nmcnalu on 2020-10-26:\n\"Interesting info from Sweden\"</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/2020-October/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-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=\"call-for-shows\">Call for shows</h3>\n<ul>\n<li>There are just a few days until the next free slot on the calendar. More shows are urgently needed!</li>\n</ul>\n<h3 id=\"question\">Question</h3>\n<ul>\n<li>Which undead would you rather be from D&amp;D v 5 - Lich or Vampire ? And why ?</li>\n</ul>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 6 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3221,'2020-12-07','HPR Community News for November 2020',2948,'HPR Volunteers talk about shows released and comments posted in November 2020','<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/0388.html\" target=\"_blank\">Padraig Jeroen Fallon</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=3196\" target=\"_blank\">3196</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-11-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3196\" target=\"_blank\">HPR Community News for October 2020</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=3197\" target=\"_blank\">3197</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-11-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3197\" target=\"_blank\">Pens, pencils, paper and ink - 3</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=3198\" target=\"_blank\">3198</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-11-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3198\" target=\"_blank\">Income Life insurance and then Chopin</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=3199\" target=\"_blank\">3199</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-11-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3199\" target=\"_blank\">Bad Audio Weed Eater Bugs Sprinkler and Bubbles !</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=3200\" target=\"_blank\">3200</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-11-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3200\" target=\"_blank\">Better Social Media 17 - OcapPub</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=3201\" target=\"_blank\">3201</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-11-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3201\" target=\"_blank\">A small intro to 3D printing</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=3202\" target=\"_blank\">3202</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-11-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3202\" target=\"_blank\">A big Question</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0388.html\" target=\"_blank\">Padraig Jeroen Fallon</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3203\" target=\"_blank\">3203</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-11-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3203\" target=\"_blank\">The Paul Quirk show: Retro Computing</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=3204\" target=\"_blank\">3204</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-11-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3204\" target=\"_blank\">Getting Started in 3D Printing</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3205\" target=\"_blank\">3205</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-11-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3205\" target=\"_blank\">Backups of your Backups of Backups</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=3206\" target=\"_blank\">3206</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-11-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3206\" target=\"_blank\">Dungeons and Dragons for the blind</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=3207\" target=\"_blank\">3207</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-11-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3207\" target=\"_blank\">Fireside chat with E Nigma</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=3208\" target=\"_blank\">3208</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-11-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3208\" target=\"_blank\">The Paul Quirk show: Wacom with Pinebook, and thoughts on the DMCA takedown</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=3209\" target=\"_blank\">3209</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-11-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3209\" target=\"_blank\">Linux Inlaws S01E17: Nextcloud</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3210\" target=\"_blank\">3210</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-11-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3210\" target=\"_blank\">GIMP: Patterns and Gradients</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=3211\" target=\"_blank\">3211</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-11-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3211\" target=\"_blank\">Chainsaws</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=3212\" target=\"_blank\">3212</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-11-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3212\" target=\"_blank\">A Pi Model 3B as your daily driver? You must be joking.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0246.html\" target=\"_blank\">Beeza</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3213\" target=\"_blank\">3213</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-11-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3213\" target=\"_blank\">Electrical Safety</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=3214\" target=\"_blank\">3214</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-11-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3214\" target=\"_blank\">Rant about websites</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=3215\" target=\"_blank\">3215</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-11-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3215\" target=\"_blank\">Why I Gave Away a 3-D Printer</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=3216\" target=\"_blank\">3216</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-11-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3216\" target=\"_blank\">Buying a second home in France</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 13 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 7 comments on\n6 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1771#comments\" target=\"_blank\">hpr1771</a></strong>\n(2015-05-18) \"<em>Audacity: Label Tracks</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1771#4\" target=\"_blank\">Comment 4</a>:\nKen Fallon on 2020-11-19:\n\"Yes - found it\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1796#comments\" target=\"_blank\">hpr1796</a></strong>\n(2015-06-22) \"<em>Audacity - Chains, Notches and Labels</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0307.html\" target=\"_blank\">cheeto4493</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1796#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2020-11-19:\n\"And this one as well\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2881#comments\" target=\"_blank\">hpr2881</a></strong>\n(2019-08-19) \"<em>Automatically split album into tracks in Audacity</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2881#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2020-11-19:\n\"And the final piece of the puzzle\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3126#comments\" target=\"_blank\">hpr3126</a></strong>\n(2020-07-27) \"<em>Metrics part II</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3126#3\" target=\"_blank\">Comment 3</a>:\nmcnalu on 2020-11-25:\n\"Thanks for the comments\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3179#comments\" target=\"_blank\">hpr3179</a></strong>\n(2020-10-08) \"<em>MakeMKV to back up media, and a Question</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3179#2\" target=\"_blank\">Comment 2</a>:\nArcher72 on 2020-11-03:\n\"re: janedoc\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3193#comments\" target=\"_blank\">hpr3193</a></strong>\n(2020-10-28) \"<em>Meet Antithesis</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3193#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2020-11-03:\n\"dark-table\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3193#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-11-03:\n\"Agree with Brian\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 6 comments on 5 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3202#comments\" target=\"_blank\">hpr3202</a></strong>\n(2020-11-10) \"<em>A big Question</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0388.html\" target=\"_blank\">Padraig Jeroen Fallon</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3202#1\" target=\"_blank\">Comment 1</a>:\nEnigma on 2020-11-10:\n\"Great first show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3206#comments\" target=\"_blank\">hpr3206</a></strong>\n(2020-11-16) \"<em>Dungeons and Dragons for the blind</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=3206#1\" target=\"_blank\">Comment 1</a>:\nMike Ray on 2020-11-16:\n\"Thanks for a great show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3208#comments\" target=\"_blank\">hpr3208</a></strong>\n(2020-11-18) \"<em>The Paul Quirk show: Wacom with Pinebook, and thoughts on the DMCA takedown</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=3208#1\" target=\"_blank\">Comment 1</a>:\nCharliebrownau on 2020-11-23:\n\"Feedback - HPR 3208e\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3209#comments\" target=\"_blank\">hpr3209</a></strong>\n(2020-11-19) \"<em>Linux Inlaws S01E17: Nextcloud</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3209#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2020-11-19:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3213#comments\" target=\"_blank\">hpr3213</a></strong>\n(2020-11-25) \"<em>Electrical Safety</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=3213#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2020-11-25:\n\"Great episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3213#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2020-11-27:\n\"I loved the show\"</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/2020-November/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>There were no tag or summary updates in the past month.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2942,'2019-11-12','Why I love lisps',509,'A very wooden and scripted episode about why I love the lisp programming language family','<h2 id=\"syntax-example\">Syntax example</h2>\r\n<pre><code>(define (fib-rec n)\r\n  (if (&lt; n 2)\r\n      n\r\n      (+ (fib-rec (- n 1))\r\n         (fib-rec (- n 2)))))\r\n</code></pre>\r\n<h2 id=\"structured-editing\">Structured Editing</h2>\r\n<p>Parinfer: <a href=\"https://shaunlebron.github.io/parinfer/\" class=\"uri\">https://shaunlebron.github.io/parinfer/</a></p>\r\n<p>Paredit: <a href=\"https://www.emacswiki.org/emacs/ParEdit\" class=\"uri\">https://www.emacswiki.org/emacs/ParEdit</a></p>\r\n<h2 id=\"clojure-libraries\">Clojure libraries</h2>\r\n<p>core.match (adds pattern matching): <a href=\"https://github.com/clojure/core.match\" class=\"uri\">https://github.com/clojure/core.match</a></p>\r\n<p>core.logic (prolog-like stuff): <a href=\"https://github.com/clojure/core.logic\" class=\"uri\">https://github.com/clojure/core.logic</a></p>\r\n<p>overtone: <a href=\"https://github.com/overtone/overtone\" class=\"uri\">https://github.com/overtone/overtone</a></p>\r\n<h2 id=\"other-stuff\">Other stuff</h2>\r\n<p>Clojure macro explanation: <a href=\"https://learnxinyminutes.com/docs/clojure-macros/\" class=\"uri\">https://learnxinyminutes.com/docs/clojure-macros/</a></p>\r\n<h2 id=\"books\">Books</h2>\r\n<p>The little schemer: <a href=\"https://mitpress.mit.edu/books/little-schemer-fourth-edition\" class=\"uri\">https://mitpress.mit.edu/books/little-schemer-fourth-edition</a></p>\r\n<p>Clojure for the brave and true: <a href=\"https://www.braveclojure.com/\" class=\"uri\">https://www.braveclojure.com/</a></p>\r\n',381,0,0,'CC-BY-SA','lisp, programming',0,0,1),
(2955,'2019-11-29','Machine Learning / Data Analysis Basics',1293,'We talk about different machine learning techniques','<p>In this episode, I talk about different techniques that we can use to predict the outcome of some question depending on input features.</p>\r\n<p>The different techniques I will go through are the ZeroR and OneR that will create a baseline for the rest of the methods.</p>\r\n<p>Next up, we have the Naive Bayes classifier that is simple but powerful for some applications.</p>\r\n<p>Nearest neighbor and Decision trees are next up that requires more training but is very efficient when you infer results.</p>\r\n<p>Multi-layer perceptron (MLP) is the first technique that is close to the ones we usually see in Machine Learning frameworks used today. But it is just a precursor to Convolutional Neural Network (CNN) because of the size requirements. MLPs have the same size for all the hidden layers, which makes it unfeasible for larger networks.</p>\r\n<p>CNNs, on the other hand, uses subsampling that will shrink the layer maps to reduce the size of the network without reducing the accuracy of the predictions.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Some references for further reading on Wikipedia.\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Naive_Bayes_classifier\" class=\"uri\">https://en.wikipedia.org/wiki/Naive_Bayes_classifier</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Nearest_neighbor_search\" class=\"uri\">https://en.wikipedia.org/wiki/Nearest_neighbor_search</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Decision_tree\" class=\"uri\">https://en.wikipedia.org/wiki/Decision_tree</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Support-vector_machine\" class=\"uri\">https://en.wikipedia.org/wiki/Support-vector_machine</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Multilayer_perceptron\" class=\"uri\">https://en.wikipedia.org/wiki/Multilayer_perceptron</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Convolutional_neural_network\" class=\"uri\">https://en.wikipedia.org/wiki/Convolutional_neural_network</a></li>\r\n</ul></li>\r\n<li>A video I made some years ago where you can see some visual aids for this subject.<br />\r\n<a href=\"https://youtu.be/Xys1N_7MbSs\" class=\"uri\">https://youtu.be/Xys1N_7MbSs</a></li>\r\n</ul>',382,0,0,'CC-BY-SA','machine learning, basics, theory',0,0,1),
(2944,'2019-11-14','ONICS Basics Part 4: Network Flows and Connections',989,'I try to add a bit more basic networking info while writing a quick script for Dave Morris','<h1 id=\"terminology\">Terminology</h1>\r\n<ul>\r\n<li>connection - a bi-directional communication channel between two programs over a network</li>\r\n<li>client - the initiator of a connection</li>\r\n<li>server - the receiver of the connection</li>\r\n<li>port - a common term for the address of a program or service on a given machine</li>\r\n<li>5-tuple - the combination of protocol, client machine network address, client port, server machine network address, server port that uniquely identifies a connection</li>\r\n<li>flow - a grouping of packets to be treated in a common way</li>\r\n<li>microflow - a flow with a fine level of granularity such as the packets from one direction of traffic in a connection</li>\r\n</ul>\r\n<h1 id=\"the-topflowsh-script\">The topflow.sh Script</h1>\r\n<pre><code>#!/bin/sh\r\n\r\n# Start a capture in the background that drops the packets\r\n# and just reports the flow events\r\npktin $1 | nftrk -d -f /tmp/flows.txt &amp;\r\nPID=$!\r\n\r\n# On CTRL-C clean kill the capture and clean up\r\ntrap &quot;kill $PID ; rm -f /tmp/flows.txt /tmp/topflows.txt /tmp/namecache.txt ; exit 0&quot; INT TERM\r\n\r\n# Once per second do\r\n#   look at the last 100 flows\r\n#   sort them by 5-tuple\r\n#   remove duplicates\r\n#   convert ports, protocols and addresses to names\r\n#   sort by data usage per flow in reverse order (highest first)\r\n#   a little more pretty printing\r\n#   only take the top 20 lines\r\n#   clear the screen and print the result\r\nwhile [ 1 ] ; do\r\n    tail -100 /tmp/flows.txt |\r\n            sort -s -t &#39;|&#39; -k 3,3 |\r\n            awk -f uniqflows.awk  |\r\n            awk -f prflow.awk  |\r\n            sort -s -t &#39;,&#39; -k 3 -r |\r\n            awk -f columns.awk |\r\n            head -20 &gt; /tmp/topflows.txt\r\n    clear\r\n    cat /tmp/topflows.txt\r\n    sleep 1\r\ndone\r\n</code></pre>\r\n<p>You can find the complete code at: <a href=\"https://gitlab.com/onics/onics-examples\" class=\"uri\">https://gitlab.com/onics/onics-examples</a></p>\r\n',259,61,0,'CC-BY-SA','command line networking',0,0,1),
(2945,'2019-11-15','Saturday at OggCamp Manchester 2019',2225,'Interviews and chat from the UK\'s largest FLOSS event.','<p>\r\n<a href=\"https://www.oggcamp.org/\">OggCamp</a> is an unconference celebrating Free Culture, Free and Open Source Software, hardware hacking, digital rights, and all manner of collaborative cultural activities and is committed to creating a conference that is as inclusive as possible.<br />\r\nThis year a team of HPR volunteers hit the show.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191018_122746Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191018_122746Z-small.jpg\"></a><br />\r\nKen\'s recording kit and some of the stickers.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_081508Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_081508Z-small.jpg\"></a><br />\r\n<a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave</a>, <a href=\"https://hackerpublicradio.org/correspondents/0268.html\">Andrew Conway/mcnalu</a> and Timttmy getting the booth ready.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_081704Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_081704Z-small.jpg\"></a><br />\r\nOnly <a http=\"https://hackerpublicradio.org/correspondents.php\">HPR hosts</a> can sign the booth.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_085140Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_085140Z-small.jpg\"></a><br />\r\n<a href=\"https://hackerpublicradio.org/correspondents/0370.html\">Yannick</a> signs the booth.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_091705Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_091705Z-small.jpg\"></a><br />\r\nTimttmy\'s script to turn an Android phone into a webcam. Two versions of the script to take a screenshot and post it to the web.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_091709Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_091709Z-small.jpg\"></a><br />\r\nSurveillance state ?\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_095727Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_095727Z-small.jpg\"></a><br />\r\nOur latest host <a href=\"https://hackerpublicradio.org/correspondents/0381.html\">Nihilazo</a> signs the booth.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_133636Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_133636Z-small.jpg\"></a><br />\r\nAn Interview with Ban Parsons from the <a href=\"https://matrix.org/\">Matrix</a> <em>An open network for secure, decentralized communication</em>\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_135427Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_135427Z-small.jpg\"></a><br />\r\nAn Interview with <a href=\"https://www.mystorm.uk/\">mystorm.uk</a> makers of the open FPGA. An FPGA chip is a re-programmable piece of silicon hardware, it can be reconfigured or programmed to a logic circuit of your own design.\r\n\r\n<br/>\r\n<em>In 2016 we decided to setup up the myStorm project in order to build OpenSource FPGA hardware. Several years later we are building the 5th generation of <a href=\"https://github.com/folknology/BlackIceMx/wiki\">BlackIce</a> Development boards. <a href=\"https://www.tindie.com/products/Folknology/blackice-mx/\">BlackIce Mx</a> the latest generation of our hardware has been built using BlackEdge open hardware standard which enable the \'Core\' Board <a href=\"https://github.com/folknology/IceCore/wiki/IceCore-Getting-Started\">IceCore</a> to be separated from its carrier board which provides MixMod and Pmod hardware add-ons. Please take a look at the <a href=\"https://forum.mystorm.uk\">myStorm forum</a> to ask questions and participate in our community. </em>\r\n\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_135429Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_135429Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_141427Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_141427Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2945/IMG_20191019_143611Z.jpg\"><img src=\"../eps/hpr2945/IMG_20191019_143611Z-small.jpg\"></a><br />\r\nAn Interview with Erik Grun of the <a href=\"https://fsfe.org/\">Free Software Foundation Europe</a> about their campaign for <strong><a href=\"https://fsfe.org/campaigns/publiccode/index.en.html\">Public Money? Public Code!</a></strong>\r\n</p>\r\n',30,78,0,'CC-BY-SA','OGGCamp, FSFE, Matrix, BlackEdge, mystorm, blackice, fswebcam, android, sshpass',0,0,1),
(2946,'2019-11-18','Sunday at OggCamp Manchester 2019',3378,'Interviews and chat from the UK\'s largest FLOSS event.','<p>\r\n<a href=\"../eps/hpr2946/434340905_92324.jpg\"><img src=\"../eps/hpr2946/434340905_92324-small.jpg\"></a><br />\r\n<a href=\"https://hackerpublicradio.org/correspondents/0288.html\">beni</a>, <a href=\"https://hackerpublicradio.org/correspondents/0268.html\">Andrew Conway/mcnalu</a>, Timttmy, and <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave</a> at the HPR booth.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_100452Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_100452Z-small.jpg\"></a><br />\r\nMichael from <a href=\"https://www.electricflapjack.com/\">Electric Flap Jack</a> Custom Built Guitars, and author of <a href=\"https://efguitars.s3.amazonaws.com/fretboard-generator.html\">Fretboard Template Generator</a> available on <a href=\"https://github.com/mdales/Fretboard-generator\">GitHub</a>\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_132900Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_132900Z-small.jpg\"></a><br />\r\nPerspex template for carving the body and neck.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_132904Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_132904Z-small.jpg\"></a><br />\r\nA work in progress.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_132909Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_132909Z-small.jpg\"></a><br />\r\nTools for making guitar, including the tool to round the frets.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_132913Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_132913Z-small.jpg\"></a><br />\r\nAnd of course you need a guitar stand.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_132918Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_132918Z-small.jpg\"></a><br />\r\n<a href=\"https://efguitars.s3.amazonaws.com/fretboard-generator.html\">Fretboard Template Generator</a> available on <a href=\"https://github.com/mdales/Fretboard-generator\">GitHub</a>\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_101726Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_101726Z-small.jpg\"></a><br />\r\nTai Kedzierski hanging out with \"Grumpy\" Mike Cook.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_101754Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_101754Z-small.jpg\"></a><br />\r\nMike produces electronic musical instruments for people with accessibility issues.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103658Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103658Z-small.jpg\"></a><br />\r\nHe also has a book called <a href=\"https://www.apress.com/gp/book/9781484217207\">Arduino Music and Audio Projects</a> to help you do this yourself.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103704Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103704Z-small.jpg\"></a><br />\r\n<em>\r\nAt <a href=\"https://www.drakemusic.org/\">Drake Music</a> we are leaders in music, disability and technology.<br />\r\nWe are innovators, educators, curators and advocates. We believe everyone has the right to express themselves creatively through music. We use new technologies and ideas to open up access to music for all. Our vision is a world where disabled and non-disabled musicians work together as equals.</em>\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103728Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103728Z-small.jpg\"></a><br />\r\nThe <em>bat base</em>.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103744Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103744Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103749Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103749Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103821Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103821Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103722Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103722Z-small.jpg\"></a><br />\r\nThe <em>Cattle Caster</em>.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_103713Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_103713Z-small.jpg\"></a><br />\r\nThe <em>Arduino Caster</em>\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_105735Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_105735Z-small.jpg\"></a><br />\r\nThe <a href=\"https://www.openrightsgroup.org/\">Open Rights Group</a>.<br />\r\n<em>\r\n<a href=\"https://www.openrightsgroup.org/ourwork/\">Open Rights Group</a> protects the digital rights of people in the UK including privacy and free speech online. We are funded by over <a href=\"https://www.openrightsgroup.org/join/\">3,000 people like you</a>.\r\n</em>\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_115630Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_115630Z-small.jpg\"></a><br />\r\n<a href=\"https://manchestergreyhats.co.uk/\">Manchester Grey Hats</a><br />\r\n<p>Manchester Grey Hats is a place for all those interested in hacking and cyber security to learn and share. We run capture the flags, workshops and perform/present security research.</p>\r\n<p>We encourage all skill levels and those from all backgrounds. Are you an aspiring hacker or a developer thinking about security? Come along and learn. Presenting is open to all members, so if you have something you’d like to present but aren’t ready for the big conferences, get in touch.</p>\r\n\r\n<p>Said best by The Mentor – “This is our world now… the world of the electron and the switch, the beauty of the baud”</p>\r\n\r\n<p>Although we meet face to face once a month, MGH is mostly an online community. We encourage people to join us in person for workshops and events but if you can\'t, join us on Slack and our live stream.</p>\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_115639Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_115639Z-small.jpg\"></a><br />\r\nAn example of the of the locks that needed to be picked for the FlawCon Capture the Flag event.\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_115654Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_115654Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_115701Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_115701Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_115719Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_115719Z-small.jpg\"></a><br />\r\n</p>\r\n<p>\r\n<a href=\"../eps/hpr2946/IMG_20191020_115905Z.jpg\"><img src=\"../eps/hpr2946/IMG_20191020_115905Z-small.jpg\"></a><br />\r\nHow to hold the lock while you are picking it.\r\n</p>\r\n',30,78,0,'CC-BY-SA','OGGCamp, FSFE, Matrix, BlackEdge, mystorm, blackice, fswebcam, android, sshpass',0,0,1),
(2947,'2019-11-19','The Mimblewimble Protocol',1261,'mimblewimble is a new blockchain protocol for scalability, privacy and fungibility','<p>Financial privacy is critical for adoption of cryptocurrency as a means of exchange. Individuals worry about employers monitoring their spending details, insurers increasing rates based on purchases and landlords raising rents when they get a promotion. Businesses can only operate using cryptocurrency if they can prevent disclosure of vendor payments, rates paid to suppliers, payroll details, and so on. At the same time, they need to selectively disclose financial data to governments and might need to demonstrate compliance in some industries.</p>\r\n<p>Mimblewimble is a new protocol that uses cryptography to achieve striking reductions in blockchain size, so users can run a full node on low powered devices like phones. It offers the strongest privacy protection assurances around, through a variety of clever tricks. For one thing, transaction history is not recorded, which also results in a smaller blockchain. There are no addresses and no transaction amounts are recorded.</p>\r\n<p>We’re not going to focus on the cryptography, although it’s a fascinating example of just how much progress is being made in recent years. We’ll focus instead on what makes this mysterious network protocol unique among cryptocurrencies.</p>\r\n',379,110,0,'CC-BY-SA','blockchain, privacy',0,0,1),
(2954,'2019-11-28','Wrestling As You Like It episode 1',462,'A Wrestling podcast reporting on indie wrestling. Today we are talking about different TV styles.','<p>TV and pro wrestling go hand in hand. Both have fed off of each other, and with the internet we are now exposed to many different promotions with their own visual style in order to broadcast wrestling in the ring.</p>\r\n',354,0,1,'CC-BY-SA','Pro Wrestling',0,0,1),
(2949,'2019-11-21','Grin and Beam: The 2 major mimblewimble blockchains',1387,'Grin and Beam are two mimblewimble implementations that are very different & we take a look at both','<p>Last time we reviewed the mimblewimble protocol for blockchain networks. This is an innovative protocol focused on privacy and scalability.</p>\r\n<p>In this episode we take a closer look at the two major implementations of mimblewimble, called Grin and Beam. They are both interesting projects that take very different approaches, yet both have managed to launch working blockchains that preserve the core strengths of the protocol.</p>',379,110,1,'CC-BY-SA','blockchain, privacy',0,0,1),
(2960,'2019-12-06','Dehydrated Foods',835,'Dehydrating your own fruits and vegetables for healthy snacks','<p>I have begun to dehydrate fruits and vegetables at home with my own dehydrator, and it lets me have fresher products without all of the additives. In this episode I discuss both the why and the how.</p>\r\n<ul>\r\n<li><a href=\"https://www.mayoclinic.org/tests-procedures/a1c-test/about/pac-20384643\" class=\"uri\">https://www.mayoclinic.org/tests-procedures/a1c-test/about/pac-20384643</a></li>\r\n<li><a href=\"https://www.webmd.com/food-recipes/news/20090323/7-rules-for-eating#1\" class=\"uri\">https://www.webmd.com/food-recipes/news/20090323/7-rules-for-eating#1</a></li>\r\n<li><a href=\"https://www.amazon.com/NESCO-FD-37A-Dehydrator-Speckled-Marbled/dp/B00CS5ZI6G\" class=\"uri\">https://www.amazon.com/NESCO-FD-37A-Dehydrator-Speckled-Marbled/dp/B00CS5ZI6G</a></li>\r\n<li><a href=\"https://www.rei.com/blog/hike/how-to-dehydrate-food\" class=\"uri\">https://www.rei.com/blog/hike/how-to-dehydrate-food</a></li>\r\n<li><a href=\"https://smile.amazon.com/Beginners-Guide-Dehydrating-Food-2nd/dp/1635860245/ref=sr_1_1?keywords=The+Beginner%27s+Guide+to+Dehydrating+Food%2C+2nd+Edition%3A+How+to+Preserve+All+Your+Favorite+Vegetables%2C+Fruits%2C+Meats%2C+and+Herbs&amp;qid=1570990745&amp;s=books&amp;sr=1-1\">https://smile.amazon.com/Beginners-Guide-Dehydrating-Food-2nd/dp/1635860245/ref=sr_1_1?keywords=The+Beginner%27s+Guide+to+Dehydrating+Food%2C+2nd+Edition%3A+How+to+Preserve+All+Your+Favorite+Vegetables%2C+Fruits%2C+Meats%2C+and+Herbs&amp;qid=1570990745&amp;s=books&amp;sr=1-1</a></li>\r\n<li><a href=\"https://addapinch.com/homemade-ranch-seasoning-mix-recipe/\" class=\"uri\">https://addapinch.com/homemade-ranch-seasoning-mix-recipe/</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=674\" class=\"uri\">https://www.palain.com/?page_id=674</a></li>\r\n</ul>',198,100,0,'CC-BY-SA','Health, Diet',0,0,1),
(2958,'2019-12-04','Haskell modules',1387,'Tuula talks about haskell modules','<p>With small programs it’s easy enough to have all code in single file. But as the program grows, you eventually want to organize things into separate files. In this episode I’ll talk a bit how to define modules and how to use them.</p>\r\n<h2 id=\"defining\">Defining</h2>\r\n<p>Each module is defined in separate file. In our example, we have file called <code>multiplexer.hs</code>, which contains our module definition.</p>\r\n<p>At the beginning of the file, we have following:</p>\r\n<pre><code>module Multiplexer (mix, match, Plexer, Scooper(..))\r\n  where\r\n  ....</code></pre>\r\n<p>We’re omitting actual function and type definitions as they aren’t important to this episode. In any case, there’s two functions: <code>mix</code> and <code>match</code> and two types: <code>Plexer</code> and <code>Scooper</code> that module exports (that is, these are available outside of the module). <code>Plexer</code> is imported as a type only and <code>Scooper</code> with field accessors or value constructors depending if it’s a record or algebraic datatype.</p>\r\n<h2 id=\"using-modules\">Using modules</h2>\r\n<p>In order to be able to use identifiers defined in separate module, we have to import them into our current one. In our imaginary program, we have <code>main.hs</code> that defines entry point for our program and we would like to import the definitions from <code>Multiplexer</code> module.</p>\r\n<p>Easiest one is to just have <code>import Multiplexer</code> at the start of the <code>main</code>. This brings all exported identifiers from <code>Multiplexer</code> and we can then use them. Both qualified and unqualified names are imported. Qualified means name is prepended with module name: <code>Multiplexer.mix</code> instead of just <code>mix</code>.</p>\r\n<p>If we want, we can specify what exactly should be imported: <code>import Multiplexer (mix, match)</code>. This causes only functions <code>mix</code> and <code>match</code> be imported, while <code>Plexer</code> and <code>Scooper</code> are unavailable for us. Again, both qualified and unqualified names are imported.</p>\r\n<p>In case we want only qualified names, we’ll write <code>import qualified Multiplexer</code>. After this <code>mix</code> isn’t available, but <code>Multiplexer.mix</code> is (and all the other identifiers exported by <code>Multiplexer</code>).</p>\r\n<p>Sometimes module name is long and tedious to repeat when using qualified names. In these cases, renaming module while importing is a good option. This can be done by writing <code>import Multiplexer as M</code>. After this, instead of <code>Multiplexer.mix</code> you write <code>M.mix</code>.</p>\r\n<p>Final thing I’m going to mention is importing everything else except specified identifiers. This is done by writing <code>import Multiplexer hiding (mix)</code>. This imports everything exported by <code>Multiplexer</code>, except <code>mix</code>.</p>\r\n<h2 id=\"summary\">Summary</h2>\r\n<p>There are many ways of importing and they can be mixed. Here’s a list of them:</p>\r\n<ul>\r\n<li><code>import Multiplexer</code></li>\r\n<li><code>import Multiplexer ()</code></li>\r\n<li><code>import Multiplexer (mix, match, Plexer, Scooper(..))</code></li>\r\n<li><code>import qualified Multiplexer</code></li>\r\n<li><code>import qualified Multiplexer (mix, match, Plexer, Scooper(..))</code></li>\r\n<li><code>import Multiplexer hiding (mix, match)</code></li>\r\n<li><code>import qualified Multiplexer hiding (Plexer, Scooper)</code></li>\r\n<li><code>import Multiplexer as M</code></li>\r\n<li><code>import Multiplexer as M (mix, match)</code></li>\r\n<li><code>import qualified Multiplexer as M</code></li>\r\n<li><code>import qualified Multiplexer as M (Plexer, Scooper(..))</code></li>\r\n</ul>\r\n<p>In short:</p>\r\n<ul>\r\n<li>Some identifiers can be chosen to be imported, while leaving others unimported</li>\r\n<li>Modules can be imported qualified (forcing an obligatory namespace qualifier to imported identifiers).</li>\r\n<li>Some identifiers can be skipped via the hiding clause.</li>\r\n<li>The module namespace can be renamed, with an as clause.</li>\r\n</ul>\r\n<h2 id=\"prelude\">Prelude</h2>\r\n<p>Prelude is base module containing lots of helpful types and functions, which is automatically imported by every module. If this is not what you want, there’s two options. First one is to use pragma at start of the file: <code>{-# LANGUAGE NoImplicitPrelude #-}</code>, which causes <code>Prelude</code> not to be imported. Another one is to manually import <code>Prelude</code>, which turns of automatic import: <code>import qualified Prelude as P</code>.</p>\r\n<h2 id=\"closing\">Closing</h2>\r\n<p>When system grows, it’s helpful to break it into more manageable pieces. For this we use modules. <code>import</code> is used to bring identifiers from other modules into current one.</p>\r\n<p>Questions, comments and feedback is welcomed. Best way to reach me is either email or in fediverse where I’m <code>Tuula@mastodon.social</code></p>\r\n',364,107,0,'CC-BY-SA','haskell, modules',0,0,1),
(2951,'2019-11-25','A walk through my PifaceCAD Python code – Part 2',888,'In this episode I cover some generic functions at the top of the code.','<h2 id=\"code\">Code</h2>\r\n<p>The script being discussed in this show is available for download with this show: <a href=\"https://hackerpublicradio.org/eps/hpr2951/cad-menu.py\">cad-menu.py</a></p>\r\n<h2 id=\"generic-functions\">GENERIC FUNCTIONS</h2>\r\n<ul>\r\n<li><code>def get_hpr_que():</code><br />\r\nGoto hacker public stats page and extract the number of days to next free slot turns on blinkstick LED with colour dependent on the number of days to next free slot in HPR queue prints number of days to next free slot to the display</li>\r\n</ul>\r\n<h2 id=\"generic-blinkstick-functions\">GENERIC BLINKSTICK FUNCTIONS</h2>\r\n<ul>\r\n<li><p><code>def bstick_off():</code><br />\r\nSearch for all attached blinksticks and turn them all off</p></li>\r\n<li><p><code>def bstick_on(colour):</code><br />\r\nTurn blinkstick on and set led colour to string value stored in var colour. valid colours are, black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua</p></li>\r\n<li><p><code>def bstick_on_random():</code><br />\r\nTurn blinkstick on colour random</p></li>\r\n<li><p><code>def bstick_blink(colour):</code><br />\r\nTurn blinkstick on with supplied colour</p></li>\r\n</ul>\r\n<h2 id=\"end-blinkstick-functions\">END BLINKSTICK FUNCTIONS</h2>\r\n<ul>\r\n<li><p><code>def run_cmd(cmd):</code><br />\r\nUsed to run an external linux command</p></li>\r\n<li><p><code>def get_my_ip():</code><br />\r\nReturns ip address</p></li>\r\n<li><p><code>def get_my_essid():</code><br />\r\nReturns wifi ESSID</p></li>\r\n<li><p><code>def get_my_wifi_strength():</code><br />\r\nReturns wifi signal strength as a percentage</p></li>\r\n<li><p><code>def wait_for_ip():</code><br />\r\nTries 10 times to get IP address</p></li>\r\n<li><p><code>def show_wifi_info():</code><br />\r\nShow WiFi information on display, shows essid on first line and both the wifi signal strength as a percentage and ip address on the second line.</p></li>\r\n<li><p><code>def custom_bitmaps():</code><br />\r\nSelection of custom bitmaps to use on LCD display</p></li>\r\n<li><p>Article in pifacecad documentation giving details about creating custom bitmaps on the pifacecad<br />\r\n<a href=\"https://piface.github.io/pifacecad/creating_custom_bitmaps.html\" class=\"uri\">https://piface.github.io/pifacecad/creating_custom_bitmaps.html</a></p></li>\r\n<li><p>This tool referenced in the pifacecad documentation link above can help design custom bitmaps. Make sure you select 5x8<br />\r\n<a href=\"https://www.quinapalus.com/hd44780udg.html\" class=\"uri\">https://www.quinapalus.com/hd44780udg.html</a></p></li>\r\n<li><p><code>def writelongstring(longstring):</code><br />\r\nWrites a long string to the piface control and display LCD &amp; scrolls it to the left until the last character appears on the right hand side of the screen</p></li>\r\n</ul>\r\n<pre><code># Local Variables (for function writelongstring)\r\nDisplaySize = 15\r\n# Number of characters  that can be displayed on 1 line of display\r\n\r\nStepSize = 4\r\n# Step size when scrolling message on display\r\n\r\nScrollSpeed =   0.55\r\n# Adjusts scroll speed, delay in seconds between scrolls\r\n\r\nScroll = 0\r\n# Default value for scroll, used when string is smaller than display size</code></pre>\r\n<ul>\r\n<li><p><code>def init_display():</code><br/>\r\n# Setup LCD display for selected menu 0 (Podcasts), 1 (Audiobooks), 2 (System)</p></li>\r\n<li><p><code>def display_main_menu(event):</code><br/>\r\n# Clear LCD &amp; dsplays the appropriate main menu message</p></li>\r\n</ul>\r\n',201,38,1,'CC-BY-SA','Podcasts, Linux, Command Line, Python, Raspberry Pi',0,0,1),
(2952,'2019-11-26','Publishing your book using open source tools',1562,'How I evolved from writing with a publisher to self-publishing using open source tools','<p>Printing on demand website: <a href=\"https://www.lulu.com\" class=\"uri\">https://www.lulu.com</a></p>',369,0,0,'CC-BY-SA','asciidoc,asciidoctor,lulu,writing,books',0,0,1),
(2953,'2019-11-27','How I got started in Linux',276,'How I start in Linux, computing, and Free Software','<p>Osdisc.com is the website that I mentioned while distro hopping. Unfortunately, as of August 2019, their site is no longer sending CD’s/DVD’s.</p>\r\n<p>How I recorded:<br />\r\nAndroid phone, lapel mic, and Audio Recorder app found here:</p>\r\n<p><a href=\"https://play.google.com/store/apps/details?id=com.github.axet.audiorecorder\" class=\"uri\">https://play.google.com/store/apps/details?id=com.github.axet.audiorecorder</a></p>\r\n<p>And here:</p>\r\n<p><a href=\"https://f-droid.org/en/packages/com.github.axet.audiorecorder/\" class=\"uri\">https://f-droid.org/en/packages/com.github.axet.audiorecorder/</a></p>\r\n',318,29,0,'CC-BY-SA','Linux, FreeBSD, Computers',0,0,1),
(2957,'2019-12-03','Lord D\'s Film Reviews: Ever',1025,'Lostnbronx reviews a recent drama/romance.','<p><b>Ever</b><br />\r\nWritten/Directed by Josh Beck<br />\r\nStarring Wendy McColm &amp; Christina Elizabeth Smith<br />\r\nCinematography by Micah Van Hove<br />\r\nRunning Time: 1:37:42</p>\r\n<p><a href=\"https://www.youtube.com/watch?v=5F-XfwIvmMg\" class=\"uri\">https://www.youtube.com/watch?v=5F-XfwIvmMg</a></p>\r\n<p>A young woman named Ever, while grieving over a devastating loss, meets Emily, who helps her to heal and find love again.</p>\r\n',107,109,0,'CC-0','review, film, lord d',0,0,1),
(2959,'2019-12-05','Interview with Josh Clements about gpodder.net ',2314,'What starts as an Interview and ends in a brain storm.','<p>\r\nIn today\'s show Ken interviews Josh Clements from the <a href=\"https://gpodder.net\">gpodder.net</a> project.\r\n</p>\r\n<p>\r\nJosh answered the <a href=\"https://github.com/gpodder/mygpo/blob/master/maintainer-needed.md\">call to arms</a> he heard on the <a href=\"https://ubuntupodcast.org/2019/08/08/s12e18-pilotwings/\">Ubuntu Podcast</a>. We discuss <em>the plan</em> and explain how you can also get involved.\r\n</p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://github.com/gpodder/mygpo/blob/master/maintainer-needed.md\">https://github.com/gpodder/mygpo/blob/master/maintainer-needed.md</a></li>\r\n<li><a href=\"https://ubuntupodcast.org/2019/08/08/s12e18-pilotwings/\">https://ubuntupodcast.org/2019/08/08/s12e18-pilotwings/</a></li>\r\n<li><a href=\"https://github.com/gpodder/\">https://github.com/gpodder/</a></li>\r\n<li><a href=\"https://gpodder.github.io/docs/mailing-list.html\">https://gpodder.github.io/docs/mailing-list.html</a></li>\r\n<li><a href=\"https://feeds.gpodder.net/\">https://feeds.gpodder.net/</a></li>\r\n<li><a href=\"https://prgmr.com/xen/\">https://prgmr.com/xen/</a></li>\r\n<li><a href=\"mailto:support@gpodder.net\">support@gpodder.net</a></li>\r\n</ul>\r\n',30,78,0,'CC-BY-SA','gpodder.net, Josh Clements',0,0,1),
(2961,'2019-12-09','Kubernetics / Cloud - Terminology',664,'We talk about terms often used when using Kubernetes','<p>We talk about terms often used when using Kubernetes.</p>\r\n<p>Terms we talk about</p>\r\n<ul>\r\n<li>Node - Machine to run jobs on.</li>\r\n<li>Cluster - Grouping of nodes to deploy work to.</li>\r\n<li>Container - Compute unit that we can run in the cloud</li>\r\n<li>Pod - One or more containers that are one unit in the cloud that could be started, stopped, or restarted.</li>\r\n<li>Service - Different network services that serve the pods\r\n<ul>\r\n<li>Load balancers - Balance network calls to different pods</li>\r\n<li>Certmanager - Handles certificates, for instance, let’s encrypt.</li>\r\n<li>Ingress - Handles traffic from the external network</li>\r\n</ul></li>\r\n<li>Volumes - External resources used by pods to keep state</li>\r\n<li>ConfigMap - Configuration parameters that could be changed without restarting the pods or deployment.</li>\r\n<li>Deployment - A configuration of all the terms mentioned that you use to deploy as a unit to the cluster.</li>\r\n</ul>\r\n',382,0,0,'CC-BY-SA','kubernetics, basic, terminology',0,0,1),
(2968,'2019-12-18','Life and Times of a Geek part 3',2441,'Part 3 of my personal story of experiences with computers','<h2 id=\"introduction\">Introduction</h2>\r\n<p>In the last part of my story (show <a href=\"https://hackerpublicradio.org/eps.php?id=1811\" title=\"Life and Times of a Geek part 2\">1811</a> in 2015) I told you about some of my experiences at the University of Manchester as a postgraduate student from around 1973.</p>\r\n<p>Today I want to talk a little more about my time in Manchester and mention some of the things I did that may be of interest to Hackers!</p>\r\n<h2 id=\"researching-for-the-episode\">Researching for the episode</h2>\r\n<p>As I have been researching for this HPR episode I realise how long ago some of these events were - in Internet years particularly. In many cases I could find no online records of places, equipment or people. This seems to be because any records there might be are on paper and have never made it online. I contacted a company that made some of the laboratory equipment I used that I thought might be of interest, and the person I contacted said that although he remembered what I was referring to the company had kept no records of it and had had to discontinue it due to modern safety concerns.</p>\r\n<p>I find this somewhat dispiriting and it makes me feel very very old!</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode. The HTML version can be <a href=\"https://hackerpublicradio.org/eps/hpr2968/full_shownotes.html\">viewed here</a> and the ePub version downloaded from <a href=\"https://hackerpublicradio.org/eps/hpr2968/full_shownotes.epub\">here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Building experimental apparatus:\r\n<ul>\r\n<li>Wikipedia page for <a href=\"https://en.wikipedia.org/wiki/Dexion\">Dexion</a> - for building metal structures</li>\r\n<li>Wikipedia page on the “<em>Skinner Box</em>” or <a href=\"https://en.wikipedia.org/wiki/Operant_conditioning_chamber\">Operant Conditioning Chamber</a></li>\r\n<li>“<em><a href=\"https://handytube.co.uk/\">Handy Tube</a></em>” used for making Skinner Boxes</li>\r\n</ul></li>\r\n<li>Video tape recorders:\r\n<ul>\r\n<li>The Rewind Museum <a href=\"https://www.rewindmuseum.com/reeltoreelvideo.htm\">reel-to-reel video recorders</a></li>\r\n<li>Wikipedia page on <a href=\"https://en.wikipedia.org/wiki/Video_tape_recorder\">Video tape recorders</a></li>\r\n<li>Youtube video about a <a href=\"https://www.youtube.com/watch?v=xwbMXqp0XtA\">Sanyo Reel to Reel Video Tape Recorder</a></li>\r\n</ul></li>\r\n<li>Logic programming:\r\n<ul>\r\n<li>Wikipedia page on the <a href=\"https://en.wikipedia.org/wiki/Logic_gate\">Logic Gate</a></li>\r\n<li>Wikipedia page on the (electronic) <a href=\"https://en.wikipedia.org/wiki/Flip-flop_(electronics)\">“<em>Flip-Flop</em>”</a></li>\r\n</ul></li>\r\n<li>D-MAC Digitiser:\r\n<ul>\r\n<li>StackExchange article discussing the <a href=\"https://history.stackexchange.com/questions/48789/what-is-this-d-mac-device\"><em>D-MAC</em></a> digitiser</li>\r\n</ul></li>\r\n<li>ICT (ICL) computers:\r\n<ul>\r\n<li>Wikipedia page on the <a href=\"https://en.wikipedia.org/wiki/ICT_1900_series\">ICT (ICL) 1900 series</a></li>\r\n<li>Wikipedia page on the <a href=\"https://en.wikipedia.org/wiki/GEORGE_%28operating_system%29\">ICL GEORGE operating system</a></li>\r\n</ul></li>\r\n<li>Teleprinter:\r\n<ul>\r\n<li>Wikipedia page on the <a href=\"https://en.wikipedia.org/wiki/Teletype_Model_33\">Teletype Model 33</a></li>\r\n</ul></li>\r\n<li>CDC computers:\r\n<ul>\r\n<li>Wikipedia page on the <a href=\"https://en.wikipedia.org/wiki/CDC_Cyber\">CDC Cyber range</a></li>\r\n</ul></li>\r\n<li>Wikipedia page on the <a href=\"https://en.wikipedia.org/wiki/APL_%28programming_language%29\">APL language</a></li>\r\n<li>Sinclair calculators:\r\n<ul>\r\n<li>Wikipedia page on the <a href=\"https://en.wikipedia.org/wiki/Sinclair_Scientific\">Sinclair Scientific</a></li>\r\n<li><a href=\"https://books.google.co.uk/books?id=FS6D5VL2qo4C&amp;pg=PA639#v=onepage&amp;q&amp;f=false\">New Scientist advertisement</a> December 1975</li>\r\n<li><a href=\"https://phils.bitboxes.co.uk/scan_and_ocr/manuals/sinclair_scientific/\">Sinclair Scientific operating instructions</a> [<em>This link might be dead; try the archive.org one below</em>]\r\n<ul>\r\n<li><a href=\"https://web.archive.org/web/20141021211903/https://phils.bitboxes.co.uk/scan_and_ocr/manuals/sinclair_scientific/\" class=\"uri\">https://web.archive.org/web/20141021211903/https://phils.bitboxes.co.uk/scan_and_ocr/manuals/sinclair_scientific/</a></li>\r\n</ul></li>\r\n<li><a href=\"https://files.righto.com/calculator/sinclair_scientific_simulator.html\">Sinclair Scientific simulator</a></li>\r\n<li><a href=\"https://www.vintagecalculators.com/html/sinclair1.html\">Vintage Calculators</a></li>\r\n<li><a href=\"https://www.calculator.org/rpn.aspx\">Reverse Polish Notation</a></li>\r\n</ul></li>\r\n<li>Previous episodes:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1664\"><em>Life and Times of a Geek</em> part 1</a> (2014-12-18)</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1811\"><em>Life and Times of a Geek</em> part 2</a> (2015-07-13)</li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2968/full_shownotes.html\">Full show notes</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr2968/full_shownotes.epub\">ePub show notes</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,29,1,'CC-BY-SA','video recorder,Skinner box,logic gate,digitiser,Dobbie McInnes,Data General,teletype,Cyber-72,APL,Si',0,0,1),
(2975,'2019-12-27','SimpleScreenRecorder and Vidcutter',311,'Two useful applications to record a screen, and to chop and trim a video ','<p>In today’s show Ken talks about two small applications to make recording and trimming video easy.</p>\r\n<h3>What is SimpleScreenRecorder?</h3>\r\n<blockquote>\r\n<p>SimpleScreenRecorder is a Linux program that I’ve created to record programs and games. There were already a few programs that could do this, but I wasn’t 100% happy with any of them, so I created my own.</p>\r\n<p>My original goal was to create a program that was just really simple to use, but as I was writing it I started adding more and more features, and the result is actually a pretty powerful program. It’s ‘simple’ in the sense that it’s easier to use than ffmpeg/avconv or VLC, because it has a straightforward user interface.</p>\r\n</blockquote>\r\n<h3>What is VidCutter</h3>\r\n<blockquote>\r\n<p>The simplest &amp; sexiest tool for cutting and joining your videos without the need for re-encoding or a diploma in multimedia. VidCutter focuses on getting the job done using tried and true tech in its arsenal via mpv and FFmpeg.</p>\r\n</blockquote>\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://www.maartenbaert.be/simplescreenrecorder/\">SimpleScreenRecorder</a> Homepage</li>\r\n<li><a href=\"https://github.com/ozmartian/vidcutter\">vidcutter</a> Homepage</li>\r\n<li><a href=\"https://www.linuxandubuntu.com/home/vidcutter-linux-video-cutting-or-trimming-app\">VidCutter – Linux Video Cutting Or Trimming App</a> review on <a href=\"https://www.linuxandubuntu.com/\">Linux And Ubuntu</a></li>\r\n</ul>\r\n',30,0,1,'CC-BY-SA','SimpleScreenRecorder, Vidcutter, ffmpeg, ffprobe, mediainfo',0,0,1),
(2980,'2020-01-03','FLOSS Weekly 553 - Hacker Public Radio',4037,'Randal Schwartz and Aaron Newcomb featured HPR on FLOSS Weekly ','<p>On the 30th Oct 2019 <a href=\"https://hackerpublicradio.org/correspondents/0198.html\">Kevin O’Brien (Ahuka)</a> and <a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken Fallon</a> were interviewed about <a href=\"https://hackerpublicradio.org\">Hacker Public Radio</a> by <a href=\"https://twit.tv/people/randal-schwartz\">Randal Schwartz</a> and <a href=\"https://twit.tv/people/aaron-newcomb\">Aaron Newcomb</a> for <a href=\"https://twit.tv/shows/floss-weekly/episodes/553\">FLOSS Weekly 553</a>.</p>\r\n<p>This is that show and is released under a <a href=\"https://creativecommons.org/licenses/by-nc-nd/4.0/\">Creative Commons Attribution Non-Commercial No-Derivatives 4.0 International license</a>.</p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://twit.tv/people/randal-schwartz\">https://twit.tv/people/randal-schwartz</a></li>\r\n<li><a href=\"https://twit.tv/people/aaron-newcomb\">https://twit.tv/people/aaron-newcomb</a></li>\r\n<li><a href=\"https://twit.tv/shows/floss-weekly/episodes/553\">https://twit.tv/shows/floss-weekly/episodes/553</a></li>\r\n<li><a href=\"https://creativecommons.org/licenses/by-nc-nd/4.0/\">https://creativecommons.org/licenses/by-nc-nd/4.0/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org\">https://hackerpublicradio.org</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0198.html\">https://hackerpublicradio.org/correspondents/0198.html</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0030.html\">https://hackerpublicradio.org/correspondents/0030.html</a></li>\r\n</ul>',30,78,0,'CC-BY-NC-ND','Randal Schwartz, Aaron Newcomb, FLOSS Weekly',0,0,1),
(2962,'2019-12-10','Bespoke bike building',1474,'Brian in Ohio continues his bike building project','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1282\">hpr 1282</a> john kulps efforts</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2869\">hpr 2869</a> part one of my build</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2875\">hpr 2875</a> part two</li>\r\n<li>recycled recumbent<br />\r\n<a href=\"https://sites.google.com/site/recycledrecumbents/home\" class=\"uri\">https://sites.google.com/site/recycledrecumbents/home</a></li>\r\n<li>fish mouth cutting on recumbents.com<br />\r\n<a href=\"https://www.wisil.recumbents.com/wisil/Plans/frametubes.htm\" class=\"uri\">https://www.wisil.recumbents.com/wisil/Plans/frametubes.htm</a></li>\r\n</ul>\r\n<h2 id=\"pictures\">Pictures</h2>\r\n<p>(The images below may be clicked to view the full-sized versions)</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture01-mocking-up-the-parts.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture01-mocking-up-the-parts-small.jpg\" alt=\"Mocking up parts\" /></a><br />\r\nmocking up parts to see spacing, especially the crankset</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture02-cutting-fishmouths.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture02-cutting-fishmouths-small.jpg\" alt=\"Laying out fishmouths\" /></a><br />\r\nlaying out ‘fishmouth’ cut, used to connect two tubes</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture03-cutting-fishmouths.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture03-cutting-fishmouths-small.jpg\" alt=\"Cutting fishmouths\" /></a><br />\r\nlay out fishmouth</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture04-cutting-fishmouths.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture04-cutting-fishmouths-small.jpg\" alt=\"Cutting fishmouths\" /></a><br />\r\nanother layout picture, note marks on tube</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture05-cutting-fishmouths.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture05-cutting-fishmouths-small.jpg\" alt=\"Cutting fishmouths\" /></a><br />\r\nfinished product</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture06-cutting-fishmouths.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture06-cutting-fishmouths-small.jpg\" alt=\"Cutting fishmouths\" /></a><br />\r\ntest fitting assembly one, the engine room</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture07-assembly-one-complete.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture07-assembly-one-complete-small.jpg\" alt=\"Brazing complete\" /></a><br />\r\nbrazing complete! assembly one done</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture08-readying-assembly-two.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture08-readying-assembly-two-small.jpg\" alt=\"Readying assembly\" /></a><br />\r\nsetting up assembly tube, gray tube slips inside the red tube</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture09-readying-assemby-two.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture09-readying-assemby-two-small.jpg\" alt=\"Removing tab\" /></a><br />\r\nneed to cut that small tab off, get to hear this in the recording</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture10-jigging-up-assembly2.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture10-jigging-up-assembly2-small.jpg\" alt=\"Jigging up\" /></a><br />\r\njigging up the frame, similar to john kulps set up, see hpr 1282</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture11-assemby2-done.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture11-assemby2-done-small.jpg\" alt=\"Still in the jig\" /></a><br />\r\nstill in the jig but all brazed up, top half of frame done!</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr2962/picture12-next-next-brazing-here.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr2962/picture12-next-next-brazing-here-small.jpg\" alt=\"More brazing to do\" /></a><br />\r\nthe next part will be modifiying the rear triangle and brazing it where i’m pointing to.</p>\r\n<h2 id=\"summary\">Summary</h2>\r\n<ul>\r\n<li>all in all, went better than expected, i’ll clean up those brazing joints after the bike is done and has been ridden for a while, before I paint it.</li>\r\n<li>brazing isn’t as difficult as i thought it might be. give it a try its a cool hacker skill!</li>\r\n</ul>\r\n',326,115,0,'CC-BY-SA','bicycle, recumbent, recycle',0,0,1),
(2963,'2019-12-11','A walk through my PifaceCAD Python code – Part 3',880,'In this episode I cover functions activated when a button is pushed on the PiFaceCAD board','<h3 id=\"code\">Code</h3>\r\n<p>The script being discussed in this show is available for download with the previous show: <a href=\"https://hackerpublicradio.org/eps/hpr2951/cad-menu.py\">cad-menu.py</a></p>\r\n<h3 id=\"functions\">Functions</h3>\r\n<ul>\r\n<li><p><code>def button0(event):</code><br />\r\nPlay / Pause Button<br />\r\nPrint message to lcd and toggle between play and pause for podcasts, then runs <code>init_display</code> to display available options</p></li>\r\n<li><p><code>def button1(event):</code><br />\r\nTrack Information button<br />\r\nPrint message to lcd then display current moc track information such as moc state, current time, time left, current playlist number of total playlist number &amp; podcast title.<br />\r\n<br />\r\nExample output from command <code>mocp --info</code></p>\r\n<pre><code>State: PAUSE\r\nFile: /home/pi/files/mp3/hpr1597.mp3\r\nTitle: Steve Smethurst - HPR1597: Extravehicular Activity (Hacker Public Radio)\r\nArtist: Steve Smethurst\r\nSongTitle: HPR1597: Extravehicular Activity\r\nAlbum: Hacker Public Radio\r\nTotalTime: 14:11\r\nTimeLeft: 02:47\r\nTotalSec: 851\r\nCurrentTime: 11:24\r\nCurrentSec: 684\r\nBitrate: 64kbps\r\nAvgBitrate: 64kbps\r\nRate: 44kHz</code></pre></li>\r\n<li><p><code>def button2(event):</code><br />\r\nPrevious Track Button<br />\r\nButton is only active if button is pushed twice within 0.3 seconds. This was added to stop moving to a new track by accidental pushing of button. If menu = 0 or 1 and value of variable TimeDiff is less than 0.3 then Print message to lcd and move to previous track in playlist. If menu = 2 and button pressed twice within 0.3 then display number of HPR shows in the queue</p></li>\r\n<li><p><code>def button3(event):</code><br />\r\nNext track Button<br />\r\nButton is only active if button is pushed twice within 0.3 seconds. This was added to stop moving to a new track by accidental pushing of button. If menu = 0 or 1 and value of variable TimeDiff is less than 0.3 then Print message to lcd and move to next track in playlist Button currently has no function if menu = 2</p></li>\r\n<li><p><code>def button4(event):</code><br />\r\nToggle backlight Button<br />\r\nIf 1st time button is pushed then turn off blinkstick and display main menu else Toggle lcd backlight between on and off</p></li>\r\n<li><p><code>def moc_seek():</code><br />\r\nUsed to seek backward or forward in track being played in mocp SeekPosition is a global variable used to store the current seek position, its value changes up and down when using button6 and button7</p></li>\r\n<li><code>def button5(event):</code><br />\r\nJogg switch<br />\r\nThis button is selected by momentarily pushing in the left/right toggle button. Button located on the top of unit<br />\r\n\r\n<ul>\r\n<li>If menu equals 0 or 1, [PODCASTS or AUDIOBOOKS] menu then<br />\r\n\r\n<ul>\r\n<li>if not in seek menu then display seek menu</li>\r\n<li>if in seek menu then jump forward or back in track by the amount currently displayed on the seek menu, uses function <code>moc_seek()</code></li>\r\n</ul></li>\r\n<li>If menu equals 2, [SYSTEM] menu then\r\n<ul>\r\n<li>Get date and time information, Clear screen, turn on LCD backlight print the shutdown message with date and time info to lcd &amp; then issue the shutdown command</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<!-- -->\r\n<ul>\r\n<li><code>def button6(event):</code><br />\r\nLeft Jogg switch decrement through menus also used during seek<br />\r\nThis button is selected by momentarily pushing the toggle switch to the left. Button located on the top of unit<br />\r\nButton only active if more than 0.3 seconds has passed since it was last pushed, this was added to get around switch bounce causing multiple jumps in menu, think left and right jogg switch is a bit noisy.\r\n<ul>\r\n<li>If in seek menu\r\n<ul>\r\n<li>SeekPosition decrements by one until SeekMin is reached, and then returns to 0</li>\r\n<li>each time the display is updated with the decremented value stored in dictionary SeekDisplay</li>\r\n</ul></li>\r\n<li>If not in seek menu\r\n<ul>\r\n<li>Menu decrements down by one until MenuMin is reached then rolls over to MenuMax</li>\r\n</ul></li>\r\n</ul></li>\r\n<li><p><code>def button7(event):</code><br />\r\nSame as button6 above but instead increments value, i.e. menu or seek value is incremented by 1</p></li>\r\n<li><p><code>def print_ir_code(event):</code><br />\r\nUsed during debugging to get remote control working, came from piface examples page, prints IR code <code>print(event.ir_code)</code></p></li>\r\n<li><p><code>def ir_play(event):</code><br />\r\nIf the play button is pushed on the remote control twice within 0.5 seconds and if IR is active then toggle backlight and toggle between play and pause</p></li>\r\n<li><p><code>def ir_info(event):</code><br />\r\nIf the info button (pause) is pushed on the remote control twice within 0.5 seconds and if IR is active then toggle backlight and display on the LCD information about the current track</p></li>\r\n<li><p><code>def ir_rewind(event):</code><br />\r\nIf the rewind button is pushed on the remote control and if IR is active then toggle backlight and go to previous track on playlist</p></li>\r\n<li><p><code>def ir_forward(event):</code><br />\r\nIf the forward button is pushed on the remote control and if IR is active then toggle backlight and go to next track on playlist</p></li>\r\n<li><p><code>def ir_stop(event):</code><br />\r\nIf the stop button is pushed on the remote control and if IR is active then toggle backlight</p></li>\r\n<li><p><code>def ir_blue(event):</code><br />\r\nActivate and deactivate IR buttons on the remote control, turns blinkstick on red when IR active. When blue button is pushed twice within 0.5 seconds on remote control, toggle backlight and display momentary message on LCD display giving IR status i.e. are the remote control buttons active or deactive.<br />\r\n<br />\r\nAll remote buttons bar this one are affected. This feature was added to remotely disable all the buttons while using the TV remote control media buttons these would sometimes falsely trigger things<br />\r\n<br />\r\nThe double push of the blue button within 0.5 seconds was added as sometimes a single push of it was required on my TV and this would falsely activate it<br />\r\n<br />\r\nFeature added to check if var FirstPass is set to true, i.e. backlight button4 has not pushed since boot<br />\r\n<br />\r\nbutton4 normally toggles backlight but turns off hpr queue LED first time it’s pushed after boot.</p></li>\r\n</ul>\r\n',201,38,1,'CC-BY-SA','Audio, Podcasts, Linux, Command Line, Python, Raspberry Pi',0,0,1),
(2964,'2019-12-12','Bolos and Bowties: Neckwear for Nerds',980,'I talk about ties, at least the kind I like to wear when the occasion calls for it.','<p>It\'s probably because of a non-conformist streak in me, but I\'ve never liked traditional neckties. In fact I never wanted to wear any ties until I got my first bolo tie, which was sufficiently different from everyone else and easy enough to put on that I decided I could wear bolo ties. I\'ve built a collection of about a dozen of these and they always get positive comments, especially the ones made from recycled circuit boards. Recently I\'ve expanded my horizons to include bowties, which have a more formal appearance and the added nerd factor of being difficult to tie for most people. In this episode I talk about my ties.</p>\r\n\r\n<h3>Click image to view photo gallery</h3>\r\n\r\n<p><a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/137675441@N05/albums/72157711876166718\" title=\"Bolos and Bowties\"><img src=\"https://live.staticflickr.com/65535/49100398632_cf81d6b66b.jpg\" width=\"500\" height=\"281\" alt=\"Bolos and Bowties\"></a></p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://circuitbreakerlabs.myshopify.com/\" target=\"_blank\">Circuit Breaker Labs</a> upcycled Jewelry made from circuit boards.</li>\r\n	<li><a href=\"https://www.hightidebowties.com/blogs/news/15522315-10-reasons-why-you-should-wear-a-bow-tie\">10 Reasons to Wear a Bowtie</a></li>\r\n</ul>\r\n',238,0,0,'CC-BY-SA','Style, Fashion, Recycling, Upcycling, Circuit Boards, Ties, Bowties, Bolo Ties, Neck ties',0,0,1),
(2969,'2019-12-19','Crewing a spaceship in Haskell',1358,'How to calculate amount of crew needed for a spaceship','<h2 id=\"intro\">Intro</h2>\r\n<p>Every spaceship in game needs a crew to operate it. Smaller ships with fewer components require less crew than huge ones with lots of components.</p>\r\n<h2 id=\"types\">Types</h2>\r\n<p>Unit stats lists amount of crew required to operate a spaceship and if they need sleeping quarters.</p>\r\n<pre><code>data UnitStats = UnitStats\r\n    { unitStatsMinimumCrew :: ![CrewRequirement]\r\n    , unitStatsNominalCrew :: ![CrewRequirement]\r\n    , unitStatsCrewSpace :: !TotalCrewSpace\r\n    , unitStatsCrewSpaceRequired :: !CrewSpaceReq\r\n    } deriving (Show, Read, Eq)</code></pre>\r\n<p>Different positions a crew can have is an enumeration:</p>\r\n<pre><code>data CrewPosition =\r\n    Commander\r\n    | Navigator\r\n    | Signaler\r\n    | SensorOperator\r\n    | Gunner\r\n    | Doctor\r\n    | Nurse\r\n    | Driver\r\n    | Helmsman\r\n    | Artificer\r\n    | Crew\r\n    | Passenger\r\n    deriving (Show, Read, Eq, Enum, Bounded)\r\nderivePersistField &quot;CrewPosition&quot;</code></pre>\r\n<p>Rank of a crew member isn’t a military rank, but rather their position in ship’s internal hierarchy:</p>\r\n<pre><code>data CrewRank =\r\n    SecondClass\r\n    | FirstClass\r\n    | Senior\r\n    | Chief\r\n    deriving (Show, Read, Eq, Enum, Bounded)\r\nderivePersistField &quot;CrewRank&quot;</code></pre>\r\n<p>Amount of crew is newtype that helps me not to mix different types of numbers with each other.</p>\r\n<pre><code>newtype CrewAmount = CrewAmount { unCrewAmount :: Int }\r\n    deriving (Show, Read, Eq, Ord, Num)</code></pre>\r\n<p>Total crew space of a ship is divided to three different types: steerage, standard and luxury.</p>\r\n<pre><code>data TotalCrewSpace = TotalCrewSpace\r\n    { totalCrewSpaceSteerage :: !(CrewSpace SteerageQuarters)\r\n    , totalCrewSpaceStandard :: !(CrewSpace StandardQuarters)\r\n    , totalCrewSpaceLuxury :: !(CrewSpace LuxuryQuarters)\r\n    } deriving (Show, Read, Eq)</code></pre>\r\n<p>Again, crew space is newtype so I don’t mix different types of numbers with each other.</p>\r\n<pre><code>data CrewSpace a =\r\n    CrewSpace { unCrewSpace :: CrewAmount }\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p>I could have modeled fact that vehicle might need crew space with <code>Bool</code>, but having a descriptive name and type is more to my liking.</p>\r\n<pre><code>data CrewSpaceReq =\r\n    CrewSpaceRequired\r\n    | CrewSpaceOptional\r\n    deriving (Show, Read, Eq)\r\nderivePersistField &quot;CrewSpaceReq&quot;</code></pre>\r\n<p>The fact that single person could manage multiple components is reflected by <code>ComponentCrewReq</code> having <code>Double</code> instead of <code>Integer</code></p>\r\n<pre><code>-- | Crew requirements for a component\r\ndata ComponentCrewReq =\r\n    ComponentCrewReq CrewPosition Double\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<h2 id=\"in-closing\">In closing</h2>\r\n<p>If you have questions, comments or feedback, easiest way to catch me nowdays is by email or in fediverse where I’m <code>Tuula@mastodon.social</code></p>\r\n',364,107,0,'CC-BY-SA','haskell, problem solving',0,0,1),
(2965,'2019-12-13','instant feedback for students in maths',838,'How we use old CAS software to give students instant feedback in their maths homework','<p>I\'m trying to make sure that this show doesn\'t come across as as advertisment placement on HPR I won\'t provide a link to our application (which wouldn\'t help a lot anyway as we don\'t really have much of a web site anyway.).</p>\r\n<p>However I\'ll link to some of the technical components:</p>\r\n<p>The Computer Algebra System we use is called <a href=\"https://maxima.sourceforge.net/\">Maxima</a>, its history goes back to the early 80s. It\'s written in common lisp.</p>\r\n<p>We have considered switching to <a href=\"https://www.sympy.org/\">SymPy</a> as a more modern alternative. SymPy doesn\'t offer the feature completeness Maxima does, though. It has still a long way to go.</p>\r\n<p>Our servers run <a href=\"https://debian.org/\">Debian</a>. The current version is written in <a href=\"https://www.php.net/\">PHP</a> but we are working on a new version based on dockerized <a href=\"https://www.djangoproject.com/\">Django</a> with a JS frontend in <a href=\"https://emberjs.com/\">Ember</a> along with some micro services written in <a href=\"https://golang.org/\">Go</a>, <a href=\"https://python.org/\">Python</a> and <a href=\"https://www.php.net/\">PHP</a>.</p>\r\n<p>To render math we use <a href=\"https://www.mathjax.org/\">MathJax</a> in the current version and <a href=\"https://katex.org/\">KaTeX</a> in the new version. The PDF-export of worksheets is of course done in <a href=\"https://www.latex-project.org/\">LaTeX</a>.</p>',288,0,0,'CC-BY-SA','maths,education,learning',0,0,1),
(2966,'2019-12-16','World of Commodore 2019 Episode 1: The Interviews',1174,'In this first episode, I interview exhibitors and members at the World of Commodore in 2019.','<p>Hello, good people of Hacker Public Radio, my name is Paul Quirk and this is my very first ever podcast. I would like to give credit Klaatu of Gnu World Order for making me aware of Hacker Public Radio, which I’ve been a listener of for the past year. As we near the holiday season of the winter solstice, I decided to give back to the open source community with this gift of a mini series of podcasts about the World of Commodore from December 7, 2019.</p>\r\n<p>The World of Commodore is an annual computer expo dedicated to Commodore computers that is normally held on the first Saturday of December in the city of Mississauga, Ontario. It started off back in 1983 by Commodore Canada as a trade show where Commodore and related vendors could showcase their latest products for the holiday season. As a Commodore computer nerd kid of the 1980’s living within an hour’s drive of Mississauga, this was an event I always looked forward to with excitement. For me, this was bigger and better than Santa Claus. Commodore went bankrupt in 1994, but a decade later, the show was revived by the Toronto PET user’s group, or TPUG, one of the world’s oldest computer user groups of which I am a member. Today’s World of Commodore is very different from the expo’s of the 1980’s, and has transformed into an event where hackers from around the world gather together to share ideas and show off their own discoveries and products, both open source and commercial.</p>\r\n<p>Since many listeners and contributors of Hacker Public Radio got started with a Commodore computer at some time, and since this event has grown beyond Commodore products and into open source hardware and software, I thought this event would be of great interest to this community, and it is my hope that many of you listeners might join us at next year’s World of Commodore.</p>\r\n<p>I have decided to create a miniseries of podcasts of this event which I will release on a weekly schedule. In this first episode, I walk around the trade show floor and interview various exhibitors, vendors, and members of TPUG. As there is a visual element to this podcast, I have posted pictures of the exhibits in my personal non-commercial blog at pquirk.com, which I encourage you to visit in order to get the full experience. And so, with no further ado, let’s all go to the wonderful world of Commodore.</p>\r\n<ul>\r\n<li><a href=\"https://www.tpug.ca/\" class=\"uri\">https://www.tpug.ca/</a></li>\r\n<li><a href=\"https://signalsfromspace.ca/\" class=\"uri\">https://signalsfromspace.ca/</a></li>\r\n<li><a href=\"https://doublesidedgames.com/\" class=\"uri\">https://doublesidedgames.com/</a></li>\r\n<li><a href=\"https://pquirk.com/2019/12/08/world-of-commodore-2019-episode-1/\" class=\"uri\">https://pquirk.com/2019/12/08/world-of-commodore-2019-episode-1/</a></li>\r\n</ul>\r\n',383,103,0,'CC-BY-SA','Commodore,PET,Amiga,Gecko,retro',0,0,1),
(2967,'2019-12-17','Wrestling As You Like It Episode 2',1599,'Wrestling As You Like It Episode 2','<p>Today’s episode is about the landscape of professional wrestling today, the hierarchy, and how it came to be that way, and a brief explanation of different styles of professional wrestling.</p>',354,0,1,'CC-BY-SA','Pro Wrestling',0,0,1),
(2970,'2019-12-20','The Fediverse',1142,'The Fediverse is the open network of social media platforms','<p>The Fediverse is the name given to the collection of social media platforms that are distributed and interconnected. Distributed means that the servers are not centrally controlled, but are available to users in a variety of forms and conditions. And interconnected means they use protocols that are designed to allow communication between different platforms as well as different servers. The most common of these protocols is ActivityPub.</p>\r\n<p><a href=\"https://www.zwilnik.com/?page_id=1050\" class=\"uri\">https://www.zwilnik.com/?page_id=1050</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://blog.joinmastodon.org/2018/06/why-activitypub-is-the-future/\" class=\"uri\">https://blog.joinmastodon.org/2018/06/why-activitypub-is-the-future/</a></li>\r\n<li><a href=\"https://www.w3.org/TR/activitypub/\" class=\"uri\">https://www.w3.org/TR/activitypub/</a></li>\r\n<li><a href=\"https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/\" class=\"uri\">https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/</a></li>\r\n<li><a href=\"https://blog.joinmastodon.org/2018/06/why-activitypub-is-the-future/\" class=\"uri\">https://blog.joinmastodon.org/2018/06/why-activitypub-is-the-future/</a></li>\r\n<li><a href=\"https://github.com/pump-io/pump.io/blob/master/API.md\" class=\"uri\">https://github.com/pump-io/pump.io/blob/master/API.md</a></li>\r\n<li><a href=\"https://blog.diasporafoundation.org/4-islamic-state-fighters-on-diaspora\" class=\"uri\">https://blog.diasporafoundation.org/4-islamic-state-fighters-on-diaspora</a></li>\r\n<li><a href=\"https://emojos.in/\" class=\"uri\">https://emojos.in/</a></li>\r\n<li><a href=\"https://mwl.io/\" class=\"uri\">https://mwl.io/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ActivityPub\" class=\"uri\">https://en.wikipedia.org/wiki/ActivityPub</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Diaspora_(social_network)\" class=\"uri\">https://en.wikipedia.org/wiki/Diaspora_(social_network)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Open_standard\" class=\"uri\">https://en.wikipedia.org/wiki/Open_standard</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/OStatus\" class=\"uri\">https://en.wikipedia.org/wiki/OStatus</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/XMPP\" class=\"uri\">https://en.wikipedia.org/wiki/XMPP</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1050\" class=\"uri\">https://www.zwilnik.com/?page_id=1050</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub',0,0,1),
(2971,'2019-12-23','World of Commodore 2019 Episode 2: Hacking GeckOS',2960,'Glen Holmer explains how he got Linux running on a Commodore 64.','<ul>\r\n<li><a href=\"https://pquirk.com/\" class=\"uri\">https://pquirk.com/</a></li>\r\n<li><a href=\"https://www.lyonlabs.org/\" class=\"uri\">https://www.lyonlabs.org/</a></li>\r\n<li><a href=\"https://www.youtube.com/user/TorontoPETUsersGroup/\" class=\"uri\">https://www.youtube.com/user/TorontoPETUsersGroup/</a></li>\r\n<li><a href=\"https://www.tpug.ca/\" class=\"uri\">https://www.tpug.ca/</a></li>\r\n</ul>',383,103,0,'CC-BY-SA','Commodore,PET,Amiga,Geckos,retro,Linux,Open Source',0,0,1),
(2972,'2019-12-24','The foot of the ski slope',2681,'MrX and Dave Morriss chat about nerdy things near a ski slope','<h2 id=\"another-in-the-chat-series-from-edinburgh\">Another in the chat series from Edinburgh</h2>\r\n<h3 id=\"hosted-by-mrx1-and-dave-morriss2\">Hosted by <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" title=\"MrX\">MrX</a> and <a href=\"https://hackerpublicradio.org/correspondents/0225.html\" title=\"Dave Morriss\">Dave Morriss</a></h3>\r\n<p>This time we met up for breakfast on Sunday 24<sup>th</sup> November in a pub/restaurant in an area called <a href=\"https://en.wikipedia.org/wiki/Hillend,_Edinburgh\" title=\"Hillend, Midlothian\">Hillend</a>, just outside Edinburgh in <a href=\"https://en.wikipedia.org/wiki/Midlothian\" title=\"Midlothian municipal district\">Midlothian</a>. The hill close by is the location of the <a href=\"https://en.wikipedia.org/wiki/Midlothian_Snowsports_Centre\" title=\"Midlothian Snowsports Centre\">Midlothian Snowsports Centre</a>, an artificial Ski Slope which is very popular in the region for recreation and training.</p>\r\n<p>We chatted for a while inside then moved to <em>Studio C</em> in the car park and recorded this episode.</p>\r\n<h3 id=\"pdas-and-the-like\">PDAs and the like</h3>\r\n<p>We were talking about PDAs (Personal Data Assistants) from the 1980’s.</p>\r\n<ul>\r\n<li>MrX had recently been offered a <a href=\"https://en.wikipedia.org/wiki/Gemini_(PDA)\" title=\"Gemini PDA\">Gemini</a> device and had at one time owned a <a href=\"https://en.wikipedia.org/wiki/Psion_Series_3\" title=\"Psion Series 3\">Psion Series 3c</a>.</li>\r\n<li>Dave owns a broken <a href=\"https://en.wikipedia.org/wiki/Psion_Series_5\" title=\"Psion Series 5\">Psion Series 5</a> (and recently parted with a working one after much bargaining).</li>\r\n<li>Dave struggled to remember devices like the <a href=\"https://en.wikipedia.org/wiki/PalmPilot\" title=\"Palm Pilot\">Palm Pilot</a> which were quite popular in the 80’s and 90’s. These had no keyboard, but offered a touch-sensitive screen, used with a stylus, and had handwriting recognition<a href=\"#fn1\" class=\"footnote-ref\" id=\"fnref1\"><sup>1</sup></a>.</li>\r\n<li>MrX mentioned the Compaq <a href=\"https://en.wikipedia.org/wiki/IPAQ\" title=\"Compaq/HP iPAQ PDA\">iPAQ PDA</a> (Compaq was later acquired by Hewlett Packard) from the 2000’s, which was a much advanced PDA with similar features.</li>\r\n</ul>\r\n<h3 id=\"software-annoyances\">Software annoyances</h3>\r\n<ul>\r\n<li>Mr X has had some problems with the latest Audacity on Ubuntu. It sometimes does not launch from the menu link after an upgrade.</li>\r\n<li>Calibre on Dave’s <em>Debian Testing</em> system has stopped working recently, due to a Python error.<a href=\"#fn2\" class=\"footnote-ref\" id=\"fnref2\"><sup>2</sup></a></li>\r\n<li>Dave uses Clementine, the music player, which turns off the UI when you close it down the wrong way and apparently doesn’t provide a way to enable it again without hacking the configuration file<a href=\"#fn3\" class=\"footnote-ref\" id=\"fnref3\"><sup>3</sup></a>.</li>\r\n<li>MrX had problems with audio device recognition and uses <code>hdajackretask</code> to correct this. This is part of the <code>alsa-tools-gui</code> package on Debian (and related)<a href=\"#fn4\" class=\"footnote-ref\" id=\"fnref4\"><sup>4</sup></a>, but has a non-intuitive UI.</li>\r\n</ul>\r\n<h3 id=\"os-choices\">OS choices</h3>\r\n<ul>\r\n<li>Dave uses Raspbian Lite on his headless Raspberry Pis (which he secures using advice from Ken Fallon’s HPR show on preparing the <a href=\"https://hackerpublicradio.org/eps.php?id=2356\" title=\"hpr2356 :: Safely enabling ssh in the default Raspbian Image\">Raspbian image</a>).</li>\r\n<li>MrX uses standard Raspian on RPis, Ubuntu as his main Linux version, as well as OSMC (Open Source Media Center) on a Raspberry Pi, for watching media.</li>\r\n<li>Dave originally started with Fedora (actually Red Hat version 4 for a brief time) then moved to Ubuntu (Kubuntu) before moving to Debian Testing on his desktop, and KDE Neon on his laptop.</li>\r\n<li>Both had used Crunchbang at one point, another Debian-based distribution.</li>\r\n</ul>\r\n<h3 id=\"a-few-other-topics\">A few other topics</h3>\r\n<ul>\r\n<li>MrX uses a Wiki service (<a href=\"https://www.wikidot.com/\" class=\"uri\">https://www.wikidot.com/</a>). Dave uses MediaWiki on a Raspberry Pi and has scripts that update some of the contents (mainly tables). There was discussion about using Pandoc (<a href=\"https://pandoc.org/\" class=\"uri\">https://pandoc.org/</a>) to generate MediaWiki markup from something like Markdown.</li>\r\n<li>Emulating a Bash session in a web browser. One example is: <a href=\"https://bellard.org/jslinux/\" class=\"uri\">https://bellard.org/jslinux/</a></li>\r\n<li>Online Python tools. For example: <a href=\"https://repl.it/languages/python3\" class=\"uri\">https://repl.it/languages/python3</a></li>\r\n<li>Midnight Commander (<a href=\"https://midnight-commander.org/\" class=\"uri\">https://midnight-commander.org/</a>) contains its own editor.</li>\r\n<li>Notepadqq (<a href=\"https://notepadqq.com/\" class=\"uri\">https://notepadqq.com/</a>) is a Notepad++-like editor for the Linux desktop.</li>\r\n<li>File managers:\r\n<ul>\r\n<li>MrX has problems with the Ubuntu file manager; he uses Nemo (<a href=\"https://en.wikipedia.org/wiki/Nemo_(file_manager)\" class=\"uri\">https://en.wikipedia.org/wiki/Nemo_(file_manager)</a>) for its more advanced features</li>\r\n<li>Dave uses KDE’s Dolphin (<a href=\"https://en.wikipedia.org/wiki/Dolphin_(file_manager)\" class=\"uri\">https://en.wikipedia.org/wiki/Dolphin_(file_manager)</a>)</li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Location:\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Hillend,_Edinburgh\">Hillend</a> (Wikipedia)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Midlothian\">Midlothian</a> (Wikipedia)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Midlothian_Snowsports_Centre\">Midlothian Snowsports Centre</a> (Wikipedia)</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>PDAs (Personal Data Assistants - <a href=\"https://en.wikipedia.org/wiki/Personal_digital_assistant\">Wikipedia page</a>)\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Organiser\">Psion Organiser II</a> (Wikipedia)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Series_3\">Psion Series 3</a> (Wikipedia)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Psion_Series_5\">Psion Series 5</a> (Wikipedia)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/PalmPilot\">Palm Pilot</a> (Wikipedia)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Gemini_(PDA)\">Gemini PDA</a> (Wikipedia)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/IPAQ\">Compaq/HP iPAQ PDA</a> (Wikipedia)</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Compaq computers\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/IPAQ_(desktop_computer)\">iPAQ</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Software niggles:\r\n<ul>\r\n<li><a href=\"https://www.audacityteam.org/\">Audacity software</a></li>\r\n<li><a href=\"https://calibre-ebook.com/\">Calibre e-book Manager</a></li>\r\n<li><a href=\"https://www.clementine-player.org/\">Clementine music player</a></li>\r\n<li><code>hdajackretask</code> from the <a href=\"https://alsa-project.org/wiki/Main_Page\">ALSA Project</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Operating system choices:\r\n<ul>\r\n<li><a href=\"https://www.raspberrypi.org/downloads/raspbian/\">Raspbian Lite</a>\r\n<ul>\r\n<li>Dave’s HPR show about his <a href=\"https://hackerpublicradio.org/eps.php?id=2496\"><code>what_pi</code></a> script</li>\r\n</ul></li>\r\n<li><a href=\"https://osmc.tv/\">Open Source Media Center (OSMC)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/CrunchBang_Linux\">Crunchbang Linux</a> (Wikipedia)</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>MrX’s shows that we were talking about:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2879\">Describing how I listen to podcasts PART 1</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2889\">Describing how I listen to podcasts PART 2</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2901\">Describing how I listen to podcasts PART 3</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2914\">Describing how I listen to podcasts PART 4</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2923\">Describing how I listen to podcasts PART 5</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2933\">A walk through my PifaceCAD Python code – Part 1</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2951\">A walk through my PifaceCAD Python code – Part 2</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>The previous episode:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2905\">Two HPR hosts living in the same region finally meet up!</a></li>\r\n</ul></li>\r\n</ul>\r\n<section class=\"footnotes\">\r\n<hr />\r\n<ol>\r\n<li id=\"fn1\"><p><small>The person using a Palm Pilot to take meeting notes had an external keyboard, and wasn’t using handwriting recognition!</small><a href=\"#fnref1\" class=\"footnote-back\">↩</a></p></li>\r\n<li id=\"fn2\"><p><small><code>calibre</code> was failing with the error: <code>ImportError: No module named functools_lru_cache</code>. It later proved possible to fix this by reinstalling a Python module: <code>pip2 install --force backports.functools_lru_cache</code></small><a href=\"#fnref2\" class=\"footnote-back\">↩</a></p></li>\r\n<li id=\"fn3\"><p><small>There have been no releases of Clementine since 2016 sadly, though there are more recent changes on the GitHub page.</small><a href=\"#fnref3\" class=\"footnote-back\">↩</a></p></li>\r\n<li id=\"fn4\"><p><small>Information on the web about <em>alsa-tools-gui</em> seems a little sparse. The <em>hdajackretask</em> application has a README file in the distribution that gives some information.</small><a href=\"#fnref4\" class=\"footnote-back\">↩</a></p></li>\r\n</ol>\r\n</section>',225,0,1,'CC-BY-SA','HPR,hosts,meeting,technology',0,0,1),
(2976,'2019-12-30','A walk through my PifaceCAD Python code – Part 4',391,'This is the last show in the series and covers the main program section at the bottom of my script','<p>This is the last show in the series. The series was recorded in one go and split into multiple parts. This last section is pretty short; it covers the main program section at the bottom of my script that calls all the other functions and allows the user to quit the program. In this episode I also mention explanatory notes that I included in my script. These are mainly for my own benefit so I could remember how I set up lirc. I’ve included these notes at the end of these show notes.</p>\r\n<p><b>Main program</b><br />\r\nTurn LCD backlight on, print <em>System up</em> message to LCD, wait a few seconds then clear screen. Activate push buttons on control and display board. Activates various IR buttons waiting on input from the remote control. Print quit message to terminal, waiting for input, repeat message until q is entered by user. When q is entered deactivate buttons and turn LCD backlight off.</p>\r\n<p>Below are my Lirc explanatory comments at the end of my Python script.</p>\r\n<blockquote>\r\n<p><code>lirc</code><br />\r\nThis is the Linux IR control program<br />\r\nLIRC (Linux Infrared remote control) is an open source package that allows users to receive and send infrared signals with a Linux-based computer system.</p>\r\n<p><code>Irrecord</code><br />\r\nTool used to record valid IR codes from your remote control. It generates the file <code>/etc/lirc/lircd.conf</code>, possibly overwrites original file so use with caution. It attempts to recognise your remote control from a series of button pushes. If the remote is not recognised then it captures the codes in raw mode, I abandoned this tool and got a valid IR file for a very similar remote control on the internet, see info below</p>\r\n<p><code>/etc/lirc/lircd.conf</code><br />\r\nFile used to store IR codes for your remote control, either using the tool <code>irrecord</code> or from somewhere on the internet. This file is a direct copy of file <code>\"BN59-00861A-SAMSUNG-TV.conf\"</code> I added the Samsung TV string to the file name.</p>\r\n<p><code>irw</code><br />\r\nTool used to get the key names for your particular remote control, for this to work you must first have a valid <code>/etc/lirc/lircd.conf</code> file</p>\r\n<p><code>~/.lircrc</code><br />\r\nThis file is used to store the remote control key names that you want to activate, and what action is to be taken when the button is pushed. Adding the field <code>\"remote =\"</code> allows the use of multiple remote controls. The remote control key names can be found by using the command <code>\"irw\"</code>, I created a file called <code>~/scripts/remote-key-names-sorted.txt</code> to store the valid key names for my Samsung remote control</p>\r\n<p><code>~/scripts/remote-key-names-sorted.txt</code><br />\r\nList of valid remote control key names for my Samsung remote control, this was generated using the <code>irw</code> command. I used the <code>\"tee\"</code> command to pipe output to the screen and write output to this file at the same time, see file for further details of commands I used.</p>\r\n</blockquote>\r\n',201,38,1,'CC-BY-SA','Podcasts, Linux, Command Line, Python, Raspberry Pi',0,0,1),
(3241,'2021-01-04','HPR Community News for December 2020',4055,'HPR Volunteers Dave, ToeJet, and Ken talk about shows released and comments posted in December 2020','<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/0011.html\" target=\"_blank\">Pat from TLLTS</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=3217\" target=\"_blank\">3217</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-12-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3217\" target=\"_blank\">Sump Minion</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3218\" target=\"_blank\">3218</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-12-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3218\" target=\"_blank\">An introduction to Darktable</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=3219\" target=\"_blank\">3219</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-12-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3219\" target=\"_blank\">Linux Inlaws S01E18: Voice Recognition and Text to Speech</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3220\" target=\"_blank\">3220</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-12-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3220\" target=\"_blank\">PixelFed</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=3221\" target=\"_blank\">3221</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-12-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3221\" target=\"_blank\">HPR Community News for November 2020</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=3222\" target=\"_blank\">3222</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-12-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3222\" target=\"_blank\">Musings about writing a book about the Odoo software suite</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=3223\" target=\"_blank\">3223</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-12-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3223\" target=\"_blank\">My COVID year summary</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3224\" target=\"_blank\">3224</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-12-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3224\" target=\"_blank\">Adventures in Retrocomputing with the Mac Plus</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=3225\" target=\"_blank\">3225</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-12-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3225\" target=\"_blank\">Grill repair</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=3226\" target=\"_blank\">3226</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-12-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3226\" target=\"_blank\">Using taskwarrior to structurize your work</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=3227\" target=\"_blank\">3227</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-12-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3227\" target=\"_blank\">Fresh water Aquarium Basics</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3228\" target=\"_blank\">3228</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-12-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3228\" target=\"_blank\">YAML basics</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=3229\" target=\"_blank\">3229</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-12-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3229\" target=\"_blank\">Linux Inlaws S01E19: Redis</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3230\" target=\"_blank\">3230</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-12-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3230\" target=\"_blank\">Introduction to Layers</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=3231\" target=\"_blank\">3231</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-12-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3231\" target=\"_blank\">USB Key</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0273.html\" target=\"_blank\">ToeJet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3232\" target=\"_blank\">3232</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-12-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3232\" target=\"_blank\">Nextcloud</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=3233\" target=\"_blank\">3233</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-12-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3233\" target=\"_blank\">HPR RPG Club reviews Shadowrun 5e</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=3234\" target=\"_blank\">3234</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-12-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3234\" target=\"_blank\">Apple products I have owned</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0297.html\" target=\"_blank\">swift110</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3235\" target=\"_blank\">3235</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2020-12-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3235\" target=\"_blank\">Soldering Tips</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=3236\" target=\"_blank\">3236</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2020-12-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3236\" target=\"_blank\">The State of Linux Audio Apps in 2020</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0011.html\" target=\"_blank\">Pat from TLLTS</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3237\" target=\"_blank\">3237</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2020-12-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3237\" target=\"_blank\">Cloning a Hard Drive with Clonezilla</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3238\" target=\"_blank\">3238</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2020-12-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3238\" target=\"_blank\">Linux Inlaws S01E20: The Xmas and New Year Special</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3239\" target=\"_blank\">3239</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2020-12-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3239\" target=\"_blank\">New Community Project Proposal</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</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 18 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 3 comments on\n3 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3090#comments\" target=\"_blank\">hpr3090</a></strong>\n(2020-06-05) \"<em>Locating Computer on a Enterprise Network</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3090#3\" target=\"_blank\">Comment 3</a>:\nnstr on 2020-12-01:\n\"wow\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3158#comments\" target=\"_blank\">hpr3158</a></strong>\n(2020-09-09) \"<em>Fingerprint access control? LOL... </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0387.html\" target=\"_blank\">Cedric De Vroey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3158#3\" target=\"_blank\">Comment 3</a>:\ncrust punk on 2020-12-03:\n\"untitled\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3207#comments\" target=\"_blank\">hpr3207</a></strong>\n(2020-11-17) \"<em>Fireside chat with E Nigma</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3207#1\" target=\"_blank\">Comment 1</a>:\noperat0r on 2020-12-04:\n\"old days\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 15 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3218#comments\" target=\"_blank\">hpr3218</a></strong>\n(2020-12-02) \"<em>An introduction to Darktable</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=3218#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2020-12-03:\n\"Another great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3218#2\" target=\"_blank\">Comment 2</a>:\nRay Arachelian on 2020-12-06:\n\"would have been useful to have this podcast as a video instead\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3218#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2020-12-08:\n\"Supporting Video\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3220#comments\" target=\"_blank\">hpr3220</a></strong>\n(2020-12-04) \"<em>PixelFed</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=3220#1\" target=\"_blank\">Comment 1</a>:\nsesamemucho on 2020-12-05:\n\"A complete and conclusive report\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3220#2\" target=\"_blank\">Comment 2</a>:\nAhuka on 2020-12-05:\n\"You are most welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3223#comments\" target=\"_blank\">hpr3223</a></strong>\n(2020-12-09) \"<em>My COVID year summary</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3223#1\" target=\"_blank\">Comment 1</a>:\nBrian-in-ohio on 2020-12-12:\n\"compliment\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3223#2\" target=\"_blank\">Comment 2</a>:\nb-yeezi on 2020-12-21:\n\"re: compliment\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3226#comments\" target=\"_blank\">hpr3226</a></strong>\n(2020-12-14) \"<em>Using taskwarrior to structurize your work</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3226#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2020-12-16:\n\"I like it but probably won\'t switch completely\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3226#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2020-12-20:\n\"Write a manual!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3227#comments\" target=\"_blank\">hpr3227</a></strong>\n(2020-12-15) \"<em>Fresh water Aquarium Basics</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3227#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2020-12-16:\n\"Pictures!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3231#comments\" target=\"_blank\">hpr3231</a></strong>\n(2020-12-21) \"<em>USB Key</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0273.html\" target=\"_blank\">ToeJet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3231#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2020-12-29:\n\"Great technique\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3232#comments\" target=\"_blank\">hpr3232</a></strong>\n(2020-12-22) \"<em>Nextcloud</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=3232#1\" target=\"_blank\">Comment 1</a>:\nthe pro on 2020-12-22:\n\"this is a nice group\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3232#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2020-12-22:\n\"Upgrade via the UI ?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3232#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2020-12-23:\n\"Good inspiration!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3236#comments\" target=\"_blank\">hpr3236</a></strong>\n(2020-12-28) \"<em>The State of Linux Audio Apps in 2020</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0011.html\" target=\"_blank\">Pat from TLLTS</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3236#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2020-12-28:\n\"Links for the Episode\"</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/2020-December/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2020-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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 3 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3261,'2021-02-01','HPR Community News for January 2021',3606,'HPR Volunteers talk about shows released and comments posted in January 2021','<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/0389.html\" target=\"_blank\">TrumpetJohn</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=3240\" target=\"_blank\">3240</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-01-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3240\" target=\"_blank\">Linux Under Attack</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=3241\" target=\"_blank\">3241</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-01-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3241\" target=\"_blank\">HPR Community News for December 2020</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=3242\" target=\"_blank\">3242</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-01-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3242\" target=\"_blank\">The eternal battle over how to run your chromebook is about to begin</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=3243\" target=\"_blank\">3243</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-01-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3243\" target=\"_blank\">Pictor - free and open radio astronomy</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=3244\" target=\"_blank\">3244</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-01-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3244\" target=\"_blank\">Interview with Anco Scholte ter Horst CEO of Freedom Internet</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=3245\" target=\"_blank\">3245</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-01-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3245\" target=\"_blank\">ELECTRICITY</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=3246\" target=\"_blank\">3246</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-01-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3246\" target=\"_blank\">LXCast: freeing the Fairphone 3 (and many other phones) </a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0285.html\" target=\"_blank\">2BFrank</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3247\" target=\"_blank\">3247</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-01-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3247\" target=\"_blank\">Saturday Morning Automotive Routine</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=3248\" target=\"_blank\">3248</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-01-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3248\" target=\"_blank\">SARS-CoV-2 detection by PCR explanation</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3249\" target=\"_blank\">3249</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-01-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3249\" target=\"_blank\">Linux Inlaws S01E21: The Big Linux Inlaws Peep Show</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3250\" target=\"_blank\">3250</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-01-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3250\" target=\"_blank\">GIMP: Getting Started With Layers</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=3251\" target=\"_blank\">3251</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-01-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3251\" target=\"_blank\">Opposing Views on Alcohol</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0215.html\" target=\"_blank\">Windigo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3252\" target=\"_blank\">3252</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-01-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3252\" target=\"_blank\">Simple JSON querying tool (also YAML, and to a lesser extent XML)</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0385.html\" target=\"_blank\">crvs</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3253\" target=\"_blank\">3253</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-01-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3253\" target=\"_blank\">Pandas Intro</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3254\" target=\"_blank\">3254</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-01-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3254\" target=\"_blank\">The Markdown editor Retext</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=3255\" target=\"_blank\">3255</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-01-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3255\" target=\"_blank\">garage door part 2</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=3256\" target=\"_blank\">3256</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-01-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3256\" target=\"_blank\">Update, MS Teams, Covid 19, Raspberry PI 400 Raspberry PI 4 8GB Centos</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3257\" target=\"_blank\">3257</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-01-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3257\" target=\"_blank\">Lack of diversity in Linux and other open source communities</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0297.html\" target=\"_blank\">swift110</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3258\" target=\"_blank\">3258</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-01-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3258\" target=\"_blank\">Linux Inlaws S01E22: The Linux Professional Institute</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3259\" target=\"_blank\">3259</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-01-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3259\" target=\"_blank\">Nextcloud - The easy way</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=3260\" target=\"_blank\">3260</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-01-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3260\" target=\"_blank\">Free, Public Domain and Creative Commons Assets</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 21 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3236#comments\" target=\"_blank\">hpr3236</a></strong>\n(2020-12-28) \"<em>The State of Linux Audio Apps in 2020</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0011.html\" target=\"_blank\">Pat from TLLTS</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3236#2\" target=\"_blank\">Comment 2</a>:\nMarc Lavallee on 2021-01-10:\n\"Jack and Pulseadio\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3237#comments\" target=\"_blank\">hpr3237</a></strong>\n(2020-12-29) \"<em>Cloning a Hard Drive with Clonezilla</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3237#1\" target=\"_blank\">Comment 1</a>:\njezra on 2021-01-04:\n\"blather\"</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=3240#comments\" target=\"_blank\">hpr3240</a></strong>\n(2021-01-01) \"<em>Linux Under Attack</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=3240#1\" target=\"_blank\">Comment 1</a>:\nGreat episode on 2021-01-11:\n\"Important information, thank you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3242#comments\" target=\"_blank\">hpr3242</a></strong>\n(2021-01-05) \"<em>The eternal battle over how to run your chromebook is about to begin</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=3242#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-01-06:\n\"Video\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3242#2\" target=\"_blank\">Comment 2</a>:\nKlaatu on 2021-01-07:\n\"Cool skills\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3242#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2021-01-08:\n\"I loved the show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3242#4\" target=\"_blank\">Comment 4</a>:\nReto on 2021-01-17:\n\"I like the concept\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3244#comments\" target=\"_blank\">hpr3244</a></strong>\n(2021-01-07) \"<em>Interview with Anco Scholte ter Horst CEO of Freedom Internet</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=3244#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-01-12:\n\"I\'m jealous!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3244#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2021-01-24:\n\"Great show for lifting the spirits\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3245#comments\" target=\"_blank\">hpr3245</a></strong>\n(2021-01-08) \"<em>ELECTRICITY</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=3245#1\" target=\"_blank\">Comment 1</a>:\nPaul Quirk on 2020-11-07:\n\"Show warning\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3246#comments\" target=\"_blank\">hpr3246</a></strong>\n(2021-01-11) \"<em>LXCast: freeing the Fairphone 3 (and many other phones) </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0285.html\" target=\"_blank\">2BFrank</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3246#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-01-19:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3247#comments\" target=\"_blank\">hpr3247</a></strong>\n(2021-01-12) \"<em>Saturday Morning Automotive Routine</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=3247#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-01-19:\n\"Excellent!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3248#comments\" target=\"_blank\">hpr3248</a></strong>\n(2021-01-13) \"<em>SARS-CoV-2 detection by PCR explanation</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3248#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2021-01-13:\n\"Is b-yeezi  a genius?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3248#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-01-20:\n\"Another fantastic show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3249#comments\" target=\"_blank\">hpr3249</a></strong>\n(2021-01-14) \"<em>Linux Inlaws S01E21: The Big Linux Inlaws Peep Show</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3249#1\" target=\"_blank\">Comment 1</a>:\nOperat0r on 2021-01-22:\n\"greets!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3252#comments\" target=\"_blank\">hpr3252</a></strong>\n(2021-01-19) \"<em>Simple JSON querying tool (also YAML, and to a lesser extent XML)</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0385.html\" target=\"_blank\">crvs</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3252#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-01-29:\n\"Using this today\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3253#comments\" target=\"_blank\">hpr3253</a></strong>\n(2021-01-20) \"<em>Pandas Intro</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3253#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2021-01-20:\n\"New info, even for me\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3257#comments\" target=\"_blank\">hpr3257</a></strong>\n(2021-01-26) \"<em>Lack of diversity in Linux and other open source communities</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0297.html\" target=\"_blank\">swift110</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3257#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2021-01-26:\n\"I can relate\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3257#2\" target=\"_blank\">Comment 2</a>:\nTony Hughes on 2021-01-26:\n\"The lack of diversity in Linux\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3257#3\" target=\"_blank\">Comment 3</a>:\nBeeza on 2021-01-27:\n\"Thoughts on diversity\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3258#comments\" target=\"_blank\">hpr3258</a></strong>\n(2021-01-27) \"<em>Linux Inlaws S01E22: The Linux Professional Institute</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3258#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-01-28:\n\"I loved the show\"</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/2021-January/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 3 shows which were without them.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(2973,'2019-12-25','Introduction to Advent of Code',836,'Advent of code is a challenge each year between 1-25 of December.','<p>I discuss all the challenges we have seen so far during the Advent of Code and talk about what they entailed and how hard they were to solve.</p>',382,0,0,'CC-BY-SA','coding, challenge',0,0,1),
(2974,'2019-12-26','Guitar Setup pt. 2',3107,'NYbill finish a guitar setup.','<p>Heh, listen to NYbill tune a guitar for an hour.</p>\r\n<p>Part two of guitar set up. Fret polishing, neck relief, string height, and intonation.</p>\r\n<h3 id=\"suppliers\">Suppliers:</h3>\r\n<ul>\r\n<li><p>Stewart MacDonald:<br />\r\n<a href=\"https://www.stewmac.com/\" class=\"uri\">https://www.stewmac.com/</a></p></li>\r\n<li><p>Warmoth:<br />\r\n<a href=\"https://www.warmoth.com/\" class=\"uri\">https://www.warmoth.com/</a></p></li>\r\n<li><p>Allied Lutherie:<br />\r\n<a href=\"https://alliedlutherie.com/\" class=\"uri\">https://alliedlutherie.com/</a></p></li>\r\n<li><p>Guitar Fetish:<br />\r\n<a href=\"https://www.guitarfetish.com/\" class=\"uri\">https://www.guitarfetish.com/</a></p></li>\r\n<li><p>Zona micro fiber polishing paper:<br />\r\n<a href=\"https://www.zonatool.net/cat/scroll-sander-sanding-tools/3m-wet-dry-micron-graded-polishing-papers/\" class=\"uri\">https://www.zonatool.net/cat/scroll-sander-sanding-tools/3m-wet-dry-micron-graded-polishing-papers/</a></p></li>\r\n<li><p>Pics for the episode:<br />\r\n<a href=\"https://media.gunmonkeynet.net/u/nybill/collection/guitar-setup-pt-2/\" class=\"uri\">https://media.gunmonkeynet.net/u/nybill/collection/guitar-setup-pt-2/</a></p></li>\r\n</ul>\r\n',235,0,0,'CC-BY-SA','Guitar, Setup, Repair',0,0,1),
(2977,'2019-12-31','World of Commodore 2019 Episode 3: Life after Commodore',1660,'A presentation by Dr. Richard Immers, author of \"Inside Commodore DOS\"','<p>Some relevant links of note:</p>\r\n<ul>\r\n<li><a href=\"https://www.goodreads.com/author/show/826731.Richard_C_Immers\" class=\"uri\">https://www.goodreads.com/author/show/826731.Richard_C_Immers</a></li>\r\n<li><a href=\"https://www.youtube.com/user/TorontoPETUsersGroup/\" class=\"uri\">https://www.youtube.com/user/TorontoPETUsersGroup/</a></li>\r\n<li><a href=\"https://www.tpug.ca/\" class=\"uri\">https://www.tpug.ca/</a></li>\r\n<li><a href=\"https://pquirk.com/\" class=\"uri\">https://pquirk.com/</a></li>\r\n</ul>\r\n',383,78,0,'CC-BY-SA','Commodore,PET,Amiga,64,Geckos,retro,Inside Commodore,DOS',0,0,1),
(2978,'2020-01-01','GARAGE DOOR',738,'I talk about various GARAGE DOOR and fixes','<p>Are you afraid if your garage door ? Have no fear!</p>',36,0,1,'CC-BY-SA','home improvement, garage door ,DIY',0,0,1),
(2982,'2020-01-07','World of Commodore 2019 Episode 4: Bare metal c64 Emulation on Raspberry Pi',2420,'Randy Rossi\'s presentation of his Github project on bare metal emulation of the C64 on a Pi 3.','<p>Links of note:</p>\r\n<ul>\r\n<li><a href=\"https://github.com/randyrossi/bmc64\" class=\"uri\">https://github.com/randyrossi/bmc64</a></li>\r\n<li><a href=\"https://www.youtube.com/user/TorontoPETUsersGroup/\" class=\"uri\">https://www.youtube.com/user/TorontoPETUsersGroup/</a></li>\r\n<li><a href=\"https://www.tpug.ca/\" class=\"uri\">https://www.tpug.ca/</a></li>\r\n<li><a href=\"https://pquirk.com/\" class=\"uri\">https://pquirk.com/</a></li>\r\n</ul>',383,103,0,'CC-BY-SA','Raspberry,Pi,emulation,Commodore,64,World of Commodore,TPUG,Toronto,Pet,Users,Group,Github,Open Sour',0,0,1),
(2985,'2020-01-10','Firefox Update',1046,'Some recent updates to Firefox that add useful features','<p>Firefox has been the more secure alternative to Chrome, and it has over the last few months made some updates. So we may want to take a look and see if these are any good, and ask if they add to the security. In some cases there are valuable improvements, such as Facebook Container and the Monitor service.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.mozilla.org/en-US/firefox/flashback/\" class=\"uri\">https://www.mozilla.org/en-US/firefox/flashback/</a></li>\r\n<li><a href=\"https://www.mozilla.org/en-US/firefox/privacy/\" class=\"uri\">https://www.mozilla.org/en-US/firefox/privacy/</a></li>\r\n<li><a href=\"https://www.mozilla.org/en-US/privacy/firefox/\" class=\"uri\">https://www.mozilla.org/en-US/privacy/firefox/</a></li>\r\n<li><a href=\"https://support.mozilla.org/en-US/kb/firefox-accounts-managing-account-data\" class=\"uri\">https://support.mozilla.org/en-US/kb/firefox-accounts-managing-account-data</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1072\" class=\"uri\">https://www.zwilnik.com/?page_id=1072</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','Firefox, Sync, Container',0,0,1),
(2986,'2020-01-13','Onlykey Updated',1390,'Onlykey more like you better have two keys!','<p>I chat about Onlykey updates along with plugins / updates / issues/ fixes</p>\r\n<p><a href=\"https://chrome.google.com/webstore/detail/onlykey-configuration/adafilbceehejjehoccladhbkgbjmica?hl=en-US\" class=\"uri\">https://chrome.google.com/webstore/detail/onlykey-configuration/adafilbceehejjehoccladhbkgbjmica?hl=en-US</a></p>\r\n',36,74,1,'CC-BY-SA','fob,2fa,onlykey,security,computers',0,0,1),
(2991,'2020-01-20','Fix yer fog machine',674,'Save Your Fog Machine today!','<p><a href=\"https://smile.amazon.com/gp/product/B077HYSYSG\" class=\"uri\">https://smile.amazon.com/gp/product/B077HYSYSG</a></p>\r\n',36,0,1,'CC-BY-SA','Halloween,fog machine,DIY',0,0,1),
(2996,'2020-01-27','Spideroak Update',465,'I give you an update on my cloud backup solution and fixes','<p><a href=\"https://spideroak.support/hc/en-us/articles/115001891343-Command-Line-Reference\" class=\"uri\">https://spideroak.support/hc/en-us/articles/115001891343-Command-Line-Reference</a></p>\r\n<p>service script:</p>\r\n<pre><code># Make sure you have space or link the base path to some place else\r\n# make sure you have R/W for the plex user\r\n# ln -s /media/data/SPIDEROAK_CONFIG/ /home/plex/.config/SpiderOakONE\r\n\r\n[Unit]\r\nDescription=SPIDEROAK STARTUP\r\nAfter=network.target\r\n\r\n[Service]\r\nUser=plex\r\nGroup=adm\r\n\r\nType=simple\r\nExecStart=/bin/bash -c &#39;\r\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin ;\r\n/usr/bin/SpiderOakONE --headless --verbose&#39;\r\n\r\n[Install]\r\nWantedBy=multi-user.target</code></pre>\r\n',36,0,1,'CC-BY-SA','cloud backup,computers,linux,spideroak one,spideroak',0,0,1),
(3006,'2020-02-10','Hijack Auxiliary Input of your car!',2159,'I talk about my Q40 and getting Auxiliary Input when your car does not have one','<p><a href=\"https://www.myg37.com/forums/audio-video-and-electronics/285929-2015-infiniti-q40-4dr-with-crap-audio.html\" class=\"uri\">https://www.myg37.com/forums/audio-video-and-electronics/285929-2015-infiniti-q40-4dr-with-crap-audio.html</a></p>\r\n<p><a href=\"https://rmccurdy.com/.scripts/downloaded/www.nicoclub.com/FSM/Q40/2015%20Q40/\" class=\"uri\">https://rmccurdy.com/.scripts/downloaded/www.nicoclub.com/FSM/Q40/2015%20Q40/</a></p>\r\n<p><strong>Updated: Solved:</strong> The audio could use a dac or something nice but this will do. Not (DO NOT PLUG IN THE HARNESS WRONG ORDER OR YOU WILL BLOW AT LEAST 4 FUSES ) I had to swap out 3 in the passenger side and 1 for the rear lights on the IPDM E/R next to the battery in a #@$% spot.</p>\r\n<p>pulled the pins and soldered a audio jack to them and fed it though the AC vent :</p>\r\n<p>pin 1 - G : Satellite radio sound signal LH pin 2 + R : Satellite radio sound signal LH pin 3 - w : Satellite radio sound signal RH pin 4 + b : Satellite radio sound signal RH</p>\r\n<h4 id=\"reference\">Reference:</h4>\r\n<ul>\r\n<li><a href=\"https://www.myg37.com/forums/audio-v...ml#post4253485\" class=\"uri\">https://www.myg37.com/forums/audio-v...ml#post4253485</a></li>\r\n<li><a href=\"https://rmccurdy.com/.scripts/downlo...5%20Q40/av.pdf\" class=\"uri\">https://rmccurdy.com/.scripts/downlo...5%20Q40/av.pdf</a> pg 42</li>\r\n</ul>\r\n<p><b>NOT SOLVED 08/21/2019 :</b> So I\'m sick of this jank setup .. the software is wonky and works about 1/2 the time .. I have to ƒ@#$ with it for about 5-10 min every time I want to use it … WIRELINQ is crap.. and I don\'t want the 600$ BT mod .. I just want AUX in !! I dont care if CD or SAT is spliced!</p>\r\n<ul>\r\n<li>NO I\'m not using a Apple device ..</li>\r\n<li>NO I\'m not going BT because its crap audio ..</li>\r\n<li>NO I\'m not using MONO or anything like that (discord) because that\'s even worse then BT…</li>\r\n<li>NO I\'m not using a FM Transmitter because that\'s just stupid its a 2015 car it should have AUX input ..</li>\r\n</ul>\r\n<p>maybe I can hack it myself the issue is that the SAT is in the @<span class=\"math inline\"></span>^ing trunk .. so I would have to find the wires that go to the trunk. I use a long speaker wire with alligator clips on it and a continuity tester (volt meter ) to hunt for it …</p>\r\n<p>Part No<br />\r\n2591a 1ma5e</p>\r\n<p>Model No<br />\r\ncv-vn01e04d</p>\r\n<p>\"11 12 Infiniti G25 G37 Radio CD Player 2591A-1MA5E Bulk 711\"</p>\r\n<p><b>SOLVED 01/20/2018 :</b> YAY ! this works and I dont have to have grap BT audio</p>\r\n<ul>\r\n<li>2015 INFINITI Q40 NONAV ANDROID</li>\r\n<li>IPOD WIRELINQ GROM-WLQ</li>\r\n<li>Electop 2 Pack USB 2.0 A Female to USB Micro Female Adapter Converter</li>\r\n<li>Wsken Mini2 Micro USB Magnetic LED Display Data Sync Fast Charge 3.28ft Cable for Android (Silver)</li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','Car Audio,DIY,music,cars,auto',0,0,1),
(3011,'2020-02-17','Linux is HARD rant with Intel graphics',1228,'I go over my issues around Linux in general specifically Video issues','<p>Help me help you! I rant about linux and Video drivers etc …</p>\r\n<p>Get Video and CPU Info<br />\r\nchrome://gpu</p>\r\n<pre><code># gives you info about video GPU in chrome!\r\nchrome://gpu</code></pre>\r\n<p>phoronix-test-suite system-info</p>\r\n<pre><code># neat little project to dump out all kinds of info\r\nphoronix-test-suite system-info</code></pre>\r\n<pre><code># get hard disk temperatures !\r\n\r\nhddtemp /dev/sdb\r\n/dev/sdb: WDC WD4003FZEX-00Z4SA0: 37°C\r\nhddtemp /dev/sdc\r\n/dev/sdc: WDC WD4003FZEX-00Z4SA0: 36°C</code></pre>\r\n<p>vainfo - display information from VA API driver</p>\r\n<p>lspci specific device</p>\r\n<pre><code>lspci -v -s 00:02.0\r\n00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Desktop) (prog-if 00 [VGA controller])\r\n        Subsystem: ASRock Incorporation Device 3e92\r\n        Flags: bus master, fast devsel, latency 0, IRQ 126\r\n        Memory at a0000000 (64-bit, non-prefetchable) [size=16M]\r\n        Memory at 90000000 (64-bit, prefetchable) [size=256M]\r\n        I/O ports at 4000 [size=64]\r\n        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]\r\n        Capabilities: [40] Vendor Specific Information: Len=0c &lt;?&gt;\r\n        Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00\r\n        Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit-\r\n        Capabilities: [d0] Power Management version 2\r\n        Capabilities: [100] Process Address Space ID (PASID)\r\n        Capabilities: [200] Address Translation Service (ATS)\r\n        Capabilities: [300] Page Request Interface (PRI)\r\n        Kernel driver in use: i915\r\n        Kernel modules: i915\r\nlshw\r\n#  lshw is a small tool to extract detailed information on the hardware configuration of the machine\r\n\r\nlshw -c video\r\n  *-display\r\n       description: VGA compatible controller\r\n       product: UHD Graphics 630 (Desktop)\r\n       vendor: Intel Corporation\r\n       physical id: 2\r\n       bus info: pci@0000:00:02.0\r\n       version: 00\r\n       width: 64 bits\r\n       clock: 33MHz\r\n       capabilities: pciexpress msi pm vga_controller bus_master cap_list rom\r\n       configuration: driver=i915 latency=0\r\n       resources: irq:126 memory:a0000000-a0ffffff memory:90000000-9fffffff ioport:4000(size=64) memory:c0000-dffff</code></pre>\r\n<p>glxinfo</p>\r\n<p>The glxinfo program shows information about the OpenGL and GLX implementations running on a given X display.</p>\r\n<pre><code>glxinfo | egrep -i &#39;device|memory|OpenGL|direct&#39;</code></pre>\r\n<p>dmesg</p>\r\n<pre><code>dmesg | grep -e IOMMU -e DMAR\r\n\r\ndmesg | grep -E &#39;drm|radeon&#39; | grep -iE &#39;firmware|microcode&#39;\r\ndmesg | grep -i -e i915 -e drm -e vga</code></pre>\r\n<p>dmidecode - DMI table decoder</p>\r\n<pre><code>dmidecode -t baseboard | grep -i &#39;Product&#39;</code></pre>\r\n<p>GPU usage</p>\r\n<pre><code>apt-get install intel-gpu-tools | intel_gpu_top</code></pre>\r\n<p>Google Dorks</p>\r\n<ul>\r\n<li>when googleing try -ubuntu -xubuntu</li>\r\n<li>when searching for start up stuff use ‘systemd’ in your query</li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','linux,video,DIY,xbmc,kodi,ubuntu,debian',0,0,1),
(3016,'2020-02-24','Nixie tube clock and friends!',874,'I chat about Novice Nixie tubes and tronics soldering etc','<p>Nixie tube (English: /ˈnɪk. siː/ NIK-see), or cold cathode display, is an electronic device for displaying numerals or other information using glow discharge.</p>\r\n<p><a href=\"https://www.tindie.com/products/robg/msp430-nixie-clock-kit/\" class=\"uri\">https://www.tindie.com/products/robg/msp430-nixie-clock-kit/</a></p>',36,0,0,'CC-BY-SA','DIY,nixie tube,LED,electronics ',0,0,1),
(2987,'2020-01-14','World of Commodore 2019 Episode 5: New games from Double Sided Games',2250,'A presentation by Jérémie Marsin of Double Sided games.','<p>Links of note:</p>\r\n<ul>\r\n<li><a href=\"https://doublesidedgames.com/\" class=\"uri\">https://doublesidedgames.com/</a></li>\r\n<li><a href=\"https://www.tpug.ca/\" class=\"uri\">https://www.tpug.ca/</a></li>\r\n<li><a href=\"https://pquirk.com/\" class=\"uri\">https://pquirk.com/</a></li>\r\n</ul>',383,0,0,'CC-BY-SA','Commodore 64,retro,computing,games,gamer,vintage',0,0,1),
(2992,'2020-01-21','World of Commodore 2019 Episode 6: Introduction to C64 OS',2159,'Greg Naçu presents to us his new operating system to the Commodore 64','<p>Links of note:</p>\r\n<ul>\r\n<li><a href=\"https://www.tpug.ca/\" class=\"uri\">https://www.tpug.ca/</a></li>\r\n<li><a href=\"https://pquirk.com/\" class=\"uri\">https://pquirk.com/</a></li>\r\n</ul>\r\n',383,103,0,'CC-BY-SA','Commodore,64,OS,World of Commodore',0,0,1),
(2983,'2020-01-08','my phone',497,'gnu-linuxy in my pocket','<ul>\r\n<li><p>lineageOS<br />\r\n<a href=\"https://lineageos.org/\" class=\"uri\">https://lineageos.org/</a></p></li>\r\n<li><p>termux<br />\r\n<a href=\"https://termux.com/\" class=\"uri\">https://termux.com/</a></p></li>\r\n<li><p>fdroid<br />\r\n<a href=\"https://f-droid.org/\" class=\"uri\">https://f-droid.org/</a></p></li>\r\n<li><p>satstat<br />\r\n<a href=\"https://f-droid.org/en/packages/com.vonglasow.michael.satstat/\" class=\"uri\">https://f-droid.org/en/packages/com.vonglasow.michael.satstat/</a></p></li>\r\n<li><p>skymap<br />\r\n<a href=\"https://f-droid.org/en/packages/com.google.android.stardroid/\" class=\"uri\">https://f-droid.org/en/packages/com.google.android.stardroid/</a></p></li>\r\n<li><p>web utilities<br />\r\n<a href=\"https://radio.jezra.net\" class=\"uri\">https://radio.jezra.net</a><br />\r\n<a href=\"https://twilock.jezra.net\" class=\"uri\">https://twilock.jezra.net</a></p></li>\r\n</ul>\r\n',243,0,0,'CC-BY-SA','phone, linux',0,0,1),
(2990,'2020-01-17','JDK14 - Wrap up edition',911,'We look into what is included in the next release of the JDK.','<p>305: <a href=\"https://openjdk.java.net/jeps/305\">Pattern Matching for instanceof (Preview)</a><br />\r\n343: <a href=\"https://openjdk.java.net/jeps/343\">Packaging Tool (Incubator)</a><br />\r\n345: <a href=\"https://openjdk.java.net/jeps/345\">NUMA-Aware Memory Allocation for G1</a><br />\r\n349: <a href=\"https://openjdk.java.net/jeps/349\">JFR Event Streaming</a><br />\r\n352: <a href=\"https://openjdk.java.net/jeps/352\">Non-Volatile Mapped Byte Buffers</a><br />\r\n358: <a href=\"https://openjdk.java.net/jeps/358\">Helpful NullPointerExceptions</a><br />\r\n359: <a href=\"https://openjdk.java.net/jeps/359\">Records (Preview)</a><br />\r\n361: <a href=\"https://openjdk.java.net/jeps/361\">Switch Expressions (Standard)</a><br />\r\n362: <a href=\"https://openjdk.java.net/jeps/362\">Deprecate the Solaris and SPARC Ports</a><br />\r\n363: <a href=\"https://openjdk.java.net/jeps/363\">Remove the Concurrent Mark Sweep (CMS) Garbage Collector</a><br />\r\n364: <a href=\"https://openjdk.java.net/jeps/364\">ZGC on macOS</a><br />\r\n365: <a href=\"https://openjdk.java.net/jeps/365\">ZGC on Windows</a><br />\r\n366: <a href=\"https://openjdk.java.net/jeps/366\">Deprecate the ParallelScavenge + SerialOld GC Combination</a><br />\r\n367: <a href=\"https://openjdk.java.net/jeps/367\">Remove the Pack200 Tools and API</a><br />\r\n368: <a href=\"https://openjdk.java.net/jeps/368\">Text Blocks (Second Preview)</a><br />\r\n370: <a href=\"https://openjdk.java.net/jeps/370\">Foreign-Memory Access API (Incubator)</a></p>\r\n',382,0,0,'CC-BY-SA','java, news',0,0,1),
(2979,'2020-01-02','Bicycle Freewheel Maintenance',450,'I explain how to lube a bicycle freewheel','<p>This is a short episode where I explain how to service your bicycle freewheel if it\'s misbehaving. My pedals were turning around when I walked the bike, and they ought to be stationary. A quick dose of chain oil in the freewheel fixed the problem. Click the image to see photos showing how to do this.</p>\r\n\r\n<p><a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/137675441@N05/albums/72157712277100862\" title=\"Bicycle Freewheel Lube\"><img src=\"https://live.staticflickr.com/65535/49243896423_d89e9185da.jpg\" width=\"500\" height=\"281\" alt=\"Bicycle Freewheel Lube\"></a></p>\r\n',238,115,0,'CC-BY-SA','bicycles, bicycle maintenance, DIY, bicycle repair',0,0,1),
(2984,'2020-01-09','RHEL 8 Workstation first looks ',543,'Runing RHEL 8 workstation on a HP Stream Laptop','<p>Hi Everyone a bit random ideas about RHEL 8 on a low end laptop.</p>\r\n<p>Interesting Git and flatpak are already installed out of the box.</p>\r\n<p>MS Teams works great.</p>',129,0,0,'CC-BY-SA','HP Stream, RHEL 8, MS Teams, flatpak',0,0,1),
(2988,'2020-01-15','A tale of two hackers in the same system',518,'AIX Hacking and modem stuff!!','<p>Hi, I’m sigflup. This is about that awesome time I found that there was another hacker in the same system that I was hacking. Fun stuff</p>\r\n',115,0,1,'CC-BY-SA','unix,aix,modem,lynx',0,0,1),
(2989,'2020-01-16','2019-2020 New Year Show Episode 1',8435,'Eighth Annual New Year Show - Sint brings toys','<h3>Hacker Public Radio 2019-20 New Year Show Episode 1</h3>\r\n<p>04:30 - 11:00 EST (09:30 - 16:00 UTC)</p>\r\n<ul>\r\n<li>Ken explains Sinterklaas\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Sinterklaas\">https://en.wikipedia.org/wiki/Sinterklaas</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=vTGDFhi7z4U\">https://www.youtube.com/watch?v=vTGDFhi7z4U</a></li>\r\n</ul></li>\r\n<li><a href=\"https://www.comptia.org/certifications/a\">https://www.comptia.org/certifications/a</a></li>\r\n<li>Ken &amp; Popey chat</li>\r\n<li>Netminer invites Popey &amp; Ken\'s daughter to be guests on LinuxLUGcast</li>\r\n<li>Raspberry Pi IV discussion</li>\r\n<li>Popey and TonyH chat about restoring model cars</li>\r\n<li>Popey and TonyH chat about: More model cars, 8-bit computing, ZX Spectrum, Commodore</li>\r\n<li><a href=\"https://8bitversus.com/\"> https://8bitversus.com/</a></li>\r\n<li>Sinclair calculator - <a href=\"https://en.wikipedia.org/wiki/List_of_Sinclair_calculators\">https://en.wikipedia.org/wiki/List_of_Sinclair_calculators</a></li>\r\n<li>Popey and TonyH speak about Lenovo laptops</li>\r\n<li>Mr Cholmondley Warner (<a href=\"https://www.youtube.com/watch?v=tQWPR9TM0Gk)\">https://www.youtube.com/watch?v=tQWPR9TM0Gk)</a></li>\r\n<li>DaveM and TonyH talk more about model cars, their restoration and history</li>\r\n<li>DaveM is working on a \"MagicMirror2\" system on a Pi 3A+ to show status information</li>\r\n<li>Dinky Toys - <a href=\"https://en.wikipedia.org/wiki/Dinky_Toys\">https://en.wikipedia.org/wiki/Dinky_Toys</a></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','2019-20 New Year Show, NYS',0,0,1),
(3026,'2020-03-09','Hex Bug and Battle Bots',1120,'Review/mods of fun Hex Bug and Battle Bots','<p>Review/mods of fun Hex Bug and Battle Bots</p>\r\n',36,0,0,'CC-BY-SA','robots,hexbug,battlebots,RC,IR',0,0,1),
(2993,'2020-01-22','2019-2020 New Year Show Episode 2',9298,'Eighth Annual New Year Show with ThinkPads, Steam engines and Corporate America philosophy','<h3>Hacker Public Radio 2019-20 New Year Show Episode 2</h3>\r\n<p>11:00 - 16:30 EST (16:00 - 21:30 UTC)</p>\r\n<ul>\r\n<li>TonyH &amp; JoeB chat: ThinkPads, podcasts they are involved with</li>\r\n<li>KenF explains podcast download stats</li>\r\n<li>Commercial podcasts hurting the little guy?</li>\r\n<li>TonyH &amp; JoeB chat: Headphones</li>\r\n<li>TonyH &amp; Popey chat: Food, games, first computer experience</li>\r\n<li>Moss joins in</li>\r\n<li>Old data storage: cassette tapes, Zip &amp; Jazz drives</li>\r\n<li>Thaj joins Moss &amp; JoeB: Favorite books &amp; authors</li>\r\n<li>Netminer discusses Autism</li>\r\n<li>Automobile inspections</li>\r\n<li>Netminer &amp; TonyH chat: personal property boundary issues</li>\r\n<li>Handsome_pirate joins: steam engine chat</li>\r\n<li>HonkeyMagoo joins</li>\r\n<li>David Richards steam engine Youtube channel -<a href= \"https://www.youtube.com/channel/UCBdj-vOveiEFWe3vnGoJUag\">https://www.youtube.com/channel/UCBdj-vOveiEFWe3vnGoJUag</a></li>\r\n<li>Mass transit, city traffic</li>\r\n<li>Corporate America philosophy</li>\r\n<li>Worker unions</li>\r\n<li>Fireworks</li>\r\n<li>Wimpy joins</li>\r\n<li>Ubuntu Mate discussion</li>\r\n<li>Donating used PC\'s</li>\r\n<li><a href=\"https://8bitversus.com/\">https://8bitversus.com/</a></li>\r\n<li>Timezone confusion??</li>\r\n<li>Ubuntu podcast</li>\r\n<li>TonyH: how he discovered Linux</li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','2019-20 New Year Show, HPRNYS',0,0,1),
(2994,'2020-01-23','Wrestling As You Like It Episode 3',1327,'A podcast on why I like wrestling and how it works to draw in fans.','<p>In this episode I discuss what direction I’m taking the podcast in. Also more importantly I discuss what Supercards are and their purpose in Pro Wrestling.</p>',354,0,1,'CC-BY-SA','Pro Wrestling',0,0,1),
(2995,'2020-01-24','ActivityPub Conference 2019 - ActivityPub: past, present, future',961,'ActivityPub Conference 2019 Keynote','<p>The ActivityPub Conference of 2019 was held in Prague. This is about the opening keynote talk from Christopher Lemmer Webber. <a href=\"https://www.zwilnik.com/?page_id=1063\" class=\"uri\">https://www.zwilnik.com/?page_id=1063</a></p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-chris\" class=\"uri\">https://archive.org/details/apconf-chris</a></li>\r\n<li><a href=\"https://dustycloud.org/\" class=\"uri\">https://dustycloud.org/</a></li>\r\n<li><a href=\"https://www.crockford.com/ec/\" class=\"uri\">https://www.crockford.com/ec/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1063\" class=\"uri\">https://www.zwilnik.com/?page_id=1063</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub',0,0,1),
(2997,'2020-01-28','World of Commodore 2019 Episode 7: Video Playback with 1541 Ultimate',1161,'In this seventh episode, Greg returns to tell us how he got full video playback on a Commodore 64.','<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/user/TorontoPETUsersGroup/\" class=\"uri\">https://www.youtube.com/user/TorontoPETUsersGroup/</a></li>\r\n<li><a href=\"https://pquirk.com/\" class=\"uri\">https://pquirk.com/</a></li>\r\n<li><a href=\"https://www.c64-wiki.com/wiki/1541_Ultimate\" class=\"uri\">https://www.c64-wiki.com/wiki/1541_Ultimate</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/1541_Ultimate\" class=\"uri\">https://en.wikipedia.org/wiki/1541_Ultimate</a></li>\r\n</ul>\r\n',383,103,0,'CC-BY-SA','Commodore 64,retro,computing,games,gamer,vintage,video,World of Commodore,TPUG',0,0,1),
(2998,'2020-01-29','2019-2020 New Year Show Episode 3',9164,'Eighth Annual New Year Show: The US is awake','<h3>Hacker Public Radio 2019-20 New Year Show Episode 3</h3>\r\n<p>16:30 - 21:54 EST (21:30 - 02:54 UTC)</p>\r\n<ul>\r\n<li>KWisher joins: ponders the New Year show editing</li>\r\n<li>New PC discussion, used PC acquisitions</li>\r\n<li>Remote desktop solutions</li>\r\n<li>Raspberry Pi IV</li>\r\n<li>DannW joins: text editors, Pascal, Fortran &amp; other programming languages</li>\r\n<li>MS Windows licensing, software, operating systems</li>\r\n<li>More MS woes</li>\r\n<li>Asperger syndrome, some light political chat</li>\r\n<li>ClaudioM joins: talks about BSD</li>\r\n<li>Moss: Feren OS - <a href=\"https://ferenos.weebly.com/\">https://ferenos.weebly.com/</a></li>\r\n<li>ZFS discussion</li>\r\n<li>Urandom Podcast - <a href=\"https://urandom-podcast.info/\">https://urandom-podcast.info/</a></li>\r\n<li>SELF - <a href=\"https://southeastlinuxfest.org/\">https://southeastlinuxfest.org/</a></li>\r\n<li>Destination Linux Podcast - <a href=\"https://destinationlinux.org/\">https://destinationlinux.org/</a></li>\r\n<li>Mandriva, Sabayon, Slackware, Fedora discussion</li>\r\n<li>Softmaker Office, office suite discussion</li>\r\n<li>Pokey joins: automobiles, politics</li>\r\n<li>Mushrooms, farming, college</li>\r\n<li>HP EliteBooks</li>\r\n<li>Linux Mint, thermal paste</li>\r\n<li>Winter weather &amp; driving, tire socks</li>\r\n<li><a href=\"https://thermal-grizzly.com/en/products/16-kryonaut-en\">https://thermal-grizzly.com/en/products/16-kryonaut-en</a></li>\r\n<li>Netminer talks about his DOS days, ISO standards</li>\r\n<li>Spine/back issues, treatment</li>\r\n<li>Xoke joins in</li>\r\n<li>Pokey loves DuckDuckGo</li>\r\n<li>Gnome boxes virtualization - <a href=\"https://help.gnome.org/users/gnome-boxes/stable/\">https://help.gnome.org/users/gnome-boxes/stable/</a></li>\r\n<li>Android key mapper - <a href=\"https://f-droid.org/en/packages/io.github.sds100.keymapper/\">https://f-droid.org/en/packages/io.github.sds100.keymapper/</a></li>\r\n</ul>',159,121,1,'CC-BY-SA','2019-20 New Year Show',0,0,1),
(3002,'2020-02-04','World of Commodore 2019 Episode 8: Vote of thanks',1156,'This is the final episode of the World of Commodore 2019 mini series.','<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://www.tpug.ca/\" class=\"uri\">https://www.tpug.ca/</a></li>\r\n<li><a href=\"https://pquirk.com/\" class=\"uri\">https://pquirk.com/</a></li>\r\n</ul>',383,0,1,'CC-BY-SA','Commodore,64,PET, Vic 20, amiga,World of Commodore, TPUG',0,0,1),
(3003,'2020-02-05','2019-2020 New Year Show Episode 4',9707,'Eighth Annual New Year Show. From Star Wars to NASA','<h3 id=\"hacker-public-radio-2019-20-new-year-show-episode-4\">Hacker Public Radio 2019-20 New Year Show Episode 4</h3>\r\n<p>21:54 - 01:40 EST (02:54 - 06:40 UTC)</p>\r\n<ul>\r\n<li>Chat about music, Star Wars, The Mandalorian</li>\r\n<li>Current main distro</li>\r\n<li>X2go RDP, Teamviewer, Dark Reader Firefox theme</li>\r\n<li>Pokey sucks at uRandom promotion</li>\r\n<li>Advent - <a href=\"https://en.wikipedia.org/wiki/Advent\" class=\"uri\">https://en.wikipedia.org/wiki/Advent</a></li>\r\n<li>Pokey’s firestarters</li>\r\n<li>Thaj publicly shames Lyle </li>\r\n<li>Lyle joins in shame</li>\r\n<li>Brief history of the New Year show </li>\r\n<li>Thaj challenges everyone listening to find one HPR episode that doesn’t have tags and contribute them this year. Tags get sparse around episode 550 if you are trying to find a place to start. OH…and you also owe Ken a show too.</li>\r\n<li>Here are the instructions: <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a></li>\r\n<li>Discussion about exercise </li>\r\n<li>Pokey tries to help Mongo with Mumble </li>\r\n<li>Thaj describes his custom keyboard layout </li>\r\n<li>Pokey repairs his wife’s laptop</li>\r\n<li>Thaj publicly shames Klattu &amp; Pokey for no tags on their shows</li>\r\n<li>CladioM explains the Latin tradition “Twelve Grapes” </li>\r\n<li>Pokey talks about being a grandparent</li>\r\n<li>More HP &amp; laptop talk</li>\r\n<li>Urugami joins</li>\r\n<li>Mongo joins</li>\r\n<li>Texas geography</li>\r\n<li>Motorcycles</li>\r\n<li>War stories</li>\r\n<li>NASA</li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','2019-20 New Year Show',0,0,1),
(3008,'2020-02-12','2019-2020 New Year Show Episode 5',7013,'Eighth Annual New Year Show: war stories and more war stories','<h3 id=\"hacker-public-radio-2019-20-new-year-show-episode-5\">Hacker Public Radio 2019-20 New Year Show Episode 5</h3>\r\n<p>01:40 - 07:20 EST (09:40 - 12:20 UTC)</p>\r\n<ul>\r\n<li>More war stories, podcasts, lawn mowing</li>\r\n<li>Timezones, Daylight Savings Time</li>\r\n<li>Antique computers - PDP, VAX, distro talk</li>\r\n<li>NAS discussion, EU politics</li>\r\n<li>Urugami joins</li>\r\n<li>Mongo joins</li>\r\n<li>Texas geography</li>\r\n<li>Motorcycles</li>\r\n<li>War stories</li>\r\n<li>NASA</li>\r\n<li>More war stories, podcasts, lawn mowing</li>\r\n<li>Timezones, Daylight Savings Time</li>\r\n<li>Antique computers - PDP, VAX, distro talk</li>\r\n<li>NAS discussion, EU politics</li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','2019-20 New Year Show',0,0,1),
(3005,'2020-02-07','Is ActivityPub Paving The Way to Web 3.0?',735,'ActivityPub Conference 2019, a talk about whether ActivityPub is leading the way to Web 3.0','<p>The ActivityPub Conference of 2019 was held in Prague. This is about a talk raising a suggestion that ActivityPub might be a way to implement Web 3.0. <a href=\"https://www.zwilnik.com/?page_id=1081\" class=\"uri\">https://www.zwilnik.com/?page_id=1081</a></p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk2_Maloki_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk2_Maloki_compressed.mov</a></li>\r\n<li><a href=\"https://medium.com/@maloki/does-mastodon-spark-joy-no-meet-florence-788bbc8b48c2\" class=\"uri\">https://medium.com/@maloki/does-mastodon-spark-joy-no-meet-florence-788bbc8b48c2</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1081\" class=\"uri\">https://www.zwilnik.com/?page_id=1081</a></li>\r\n</ul>',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub',0,0,1),
(3015,'2020-02-21','ActivityPub Conference 2019 - The Semantic Social Network',438,'ActivityPub Conference 2019, building a Semantic Social Network','<p>The ActivityPub Conference of 2019 was held in Prague. This is about a talk using ActivityPub to create the Semantic Social Network. <a href=\"https://www.zwilnik.com/?page_id=1086\" class=\"uri\">https://www.zwilnik.com/?page_id=1086</a></p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk3_Pukkamustard_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk3_Pukkamustard_compressed.mov</a></li>\r\n<li><a href=\"https://schema.org/\" class=\"uri\">https://schema.org/</a></li>\r\n<li><a href=\"https://schema.org/servesCuisine\" class=\"uri\">https://schema.org/servesCuisine</a></li>\r\n<li><a href=\"https://schema.org/areaServed\" class=\"uri\">https://schema.org/areaServed</a></li>\r\n<li><a href=\"https://5stardata.info/en/\" class=\"uri\">https://5stardata.info/en/</a></li>\r\n<li><a href=\"https://moz.com/blog/json-ld-for-beginners\" class=\"uri\">https://moz.com/blog/json-ld-for-beginners</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1086\" class=\"uri\">https://www.zwilnik.com/?page_id=1086</a></li>\r\n</ul>',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub',0,0,1),
(3025,'2020-03-06','Keep unwanted messages off the Fediverse',881,'ActivityPub Conference 2019, techniques for fighting SPAM and unwanted messages in the Fediverse.','<p>The ActivityPub Conference of 2019 was held in Prague. This is about a talk about how we can keep SPAM and unwanted messages off of our platforms in the Fediverse. <a href=\"https://www.zwilnik.com/?page_id=1089\" class=\"uri\">https://www.zwilnik.com/?page_id=1089</a></p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk4_Serge_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk4_Serge_compressed.mov</a></li>\r\n<li><a href=\"https://gitlab.com/spritely/ocappub\" class=\"uri\">https://gitlab.com/spritely/ocappub</a></li>\r\n<li><a href=\"https://www.zwilnik.com/spritely/ocappub/master/*How%20to%20build%20it\" class=\"uri\">https://www.zwilnik.com/spritely/ocappub/master/*How%20to%20build%20it</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1089\" class=\"uri\">https://www.zwilnik.com/?page_id=1089</a></li>\r\n</ul>',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, SPAM',0,0,1),
(3035,'2020-03-20','Decentralised Hashtag Search and Subscription in Federated Social Networks',669,'ActivityPub Conference 2019, a proposal for how we can use hashtags to find and subscribe to content','<p>The ActivityPub Conference of 2019 was held in Prague. This is about a talk a proposal for a method to allow searching for hashtags in a decentralized Fediverse environment so that we can find, and subscribe to, content of interest. <a href=\"https://www.zwilnik.com/?page_id=1091\" class=\"uri\">https://www.zwilnik.com/?page_id=1091</a></p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk5_Schmittlauch_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk5_Schmittlauch_compressed.mov</a></li>\r\n<li><a href=\"https://relay.mastodon.host/\" class=\"uri\">https://relay.mastodon.host/</a></li>\r\n<li><a href=\"https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/\" class=\"uri\">https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/</a></li>\r\n<li><a href=\"https://source.joinmastodon.org/mastodon/pub-relay\" class=\"uri\">https://source.joinmastodon.org/mastodon/pub-relay</a></li>\r\n<li><a href=\"https://git.orlives.de/schmittlauch/paper_hashtag_federation/src/branch/master/paper_hashtag_federation.pdf\" class=\"uri\">https://git.orlives.de/schmittlauch/paper_hashtag_federation/src/branch/master/paper_hashtag_federation.pdf</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1091\" class=\"uri\">https://www.zwilnik.com/?page_id=1091</a></li>\r\n</ul>',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, Hashtags',0,0,1),
(3045,'2020-04-03','OSS compliance with privacy by default and design',951,'How can Open Source Software manage the mandates of regulations like the GDPR?','<p>The GDPR (General Data Protection Regulation) was enacted by the European Community in 2016, and began to be enforced in 2018. Since this covers a large segment of the Internet users, and other jurisdictions are looking at similar legislation this talk is a timely look at what is required and how Open Source Software can meet the legal requirements. <a href=\"https://www.zwilnik.com/?page_id=1096\" class=\"uri\">https://www.zwilnik.com/?page_id=1096</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk6_Cristina_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk6_Cristina_compressed.mov</a></li>\r\n<li><a href=\"https://xwiki.com/en/company/who-we-are/\" class=\"uri\">https://xwiki.com/en/company/who-we-are/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\" class=\"uri\">https://en.wikipedia.org/wiki/General_Data_Protection_Regulation</a></li>\r\n<li><a href=\"https://developercertificate.org/\" class=\"uri\">https://developercertificate.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1096\" class=\"uri\">https://www.zwilnik.com/?page_id=1096</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, Privacy',0,0,1),
(3007,'2020-02-11','Photography 101',1468,'I tell you everything I know about the basics of photography','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://musopen.org/music/43172-pleasant-moments/\" class=\"uri\">https://musopen.org/music/43172-pleasant-moments/</a></li>\r\n<li><a href=\"https://pquirk.com\" class=\"uri\">https://pquirk.com</a></li>\r\n</ul>\r\n',383,0,0,'CC-BY-SA','Photography 101,digital,film,camera',0,0,1),
(2999,'2020-01-30','SQRL - Secure Quick Reliable Login',1442,'In this podcast we talk about what SQRL is and how it works.','<p>In this podcast, we talk about what SQRL is, and how it works, why I feel that it’s an exciting new login method that is safe and easy to use.</p>\r\n<ul>\r\n<li><p>SQRL Documentation<br />\r\n<a href=\"https://www.grc.com/sqrl/sqrl.htm\" class=\"uri\">https://www.grc.com/sqrl/sqrl.htm</a></p></li>\r\n<li><p>SQRL Forums<br />\r\n<a href=\"https://sqrl.grc.com/\" class=\"uri\">https://sqrl.grc.com/</a></p></li>\r\n<li><p>SQRL Github organization<br />\r\n<a href=\"https://github.com/sqrldev\" class=\"uri\">https://github.com/sqrldev</a></p></li>\r\n<li><p>Android Application<br />\r\n<a href=\"https://play.google.com/store/apps/details?id=org.ea.sqrl\" class=\"uri\">https://play.google.com/store/apps/details?id=org.ea.sqrl</a></p></li>\r\n<li><p>Github repository for Android Application<br />\r\n<a href=\"https://github.com/kalaspuffar/secure-quick-reliable-login\" class=\"uri\">https://github.com/kalaspuffar/secure-quick-reliable-login</a></p></li>\r\n</ul>\r\n',382,0,1,'CC-BY-SA','security, login method',0,0,1),
(3281,'2021-03-01','HPR Community News for February 2021',4150,'HPR Volunteers talk about shows released and comments posted in February 2021','<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/0390.html\" target=\"_blank\">o9l</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</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=3261\" target=\"_blank\">3261</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-02-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3261\" target=\"_blank\">HPR Community News for January 2021</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=3262\" target=\"_blank\">3262</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-02-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3262\" target=\"_blank\">My thoughts on diversity in Linux and open source</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0297.html\" target=\"_blank\">swift110</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3263\" target=\"_blank\">3263</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-02-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3263\" target=\"_blank\">My Beginnings in Tech</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0390.html\" target=\"_blank\">o9l</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3264\" target=\"_blank\">3264</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-02-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3264\" target=\"_blank\">Intro to Nagios</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=3265\" target=\"_blank\">3265</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-02-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3265\" target=\"_blank\">My Chromebook Experience</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=3266\" target=\"_blank\">3266</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-02-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3266\" target=\"_blank\">Upgrading Debian on my raspberry pi</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=3267\" target=\"_blank\">3267</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-02-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3267\" target=\"_blank\">Ripping Media 2021</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=3268\" target=\"_blank\">3268</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-02-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3268\" target=\"_blank\">Video Game Review - Ark Survival Evolved</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3269\" target=\"_blank\">3269</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-02-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3269\" target=\"_blank\">Linux Inlaws S01E23: The first year of the five year plan</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3270\" target=\"_blank\">3270</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-02-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3270\" target=\"_blank\">An Example of Using Layers</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=3271\" target=\"_blank\">3271</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-02-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3271\" target=\"_blank\">Interview with a 6yo child </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=3272\" target=\"_blank\">3272</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-02-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3272\" target=\"_blank\">In GNU/Linux, there is no \"diversity\", we\'re all just data.</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=3273\" target=\"_blank\">3273</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-02-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3273\" target=\"_blank\">Embrace Firefox</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=3274\" target=\"_blank\">3274</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-02-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3274\" target=\"_blank\">My Custom dwm Setup</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0138.html\" target=\"_blank\">arfab</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3275\" target=\"_blank\">3275</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-02-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3275\" target=\"_blank\">D1 Mini Close Lid to Scan</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=3276\" target=\"_blank\">3276</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-02-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3276\" target=\"_blank\">Deepgeek\'s thoughts about HD Radio</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0073.html\" target=\"_blank\">deepgeek</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3277\" target=\"_blank\">3277</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-02-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3277\" target=\"_blank\">Microsoft in my Debian repo</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=3278\" target=\"_blank\">3278</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-02-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3278\" target=\"_blank\">A Minor Victory Against Designed-In Obsolescence</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0246.html\" target=\"_blank\">Beeza</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3279\" target=\"_blank\">3279</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-02-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3279\" target=\"_blank\">Linux Inlaws S01E24: Legacy programming languages</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3280\" target=\"_blank\">3280</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-02-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3280\" target=\"_blank\">What We Need For the ActivityPub Network</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 16 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 7 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2356#comments\" target=\"_blank\">hpr2356</a></strong>\n(2017-08-14) \"<em>Safely enabling ssh in the default Raspbian Image</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2356#4\" target=\"_blank\">Comment 4</a>:\nLeo_B on 2021-02-23:\n\"If you\'re watching this in 2021\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2356#5\" target=\"_blank\">Comment 5</a>:\nKen Fallon on 2021-02-25:\n\"Updated versions\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3187#comments\" target=\"_blank\">hpr3187</a></strong>\n(2020-10-20) \"<em>Ansible for Dynamic Host Configuration Protocol</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=3187#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2021-02-10:\n\"Interesting approach\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3241#comments\" target=\"_blank\">hpr3241</a></strong>\n(2021-01-04) \"<em>HPR Community News for December 2020</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3241#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2021-02-16:\n\"NoSQL and Redis\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3241#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2021-02-16:\n\"Redis pronunciation\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3241#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2021-02-17:\n\"Key/value storage\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3259#comments\" target=\"_blank\">hpr3259</a></strong>\n(2021-01-28) \"<em>Nextcloud - The easy way</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3259#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2021-02-01:\n\"Show name\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 9 comments on 5 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3262#comments\" target=\"_blank\">hpr3262</a></strong>\n(2021-02-02) \"<em>My thoughts on diversity in Linux and open source</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0297.html\" target=\"_blank\">swift110</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3262#1\" target=\"_blank\">Comment 1</a>:\nnorist on 2021-02-02:\n\"Storyteller\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3262#2\" target=\"_blank\">Comment 2</a>:\nBill n1vux on 2021-02-04:\n\"well said\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3262#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2021-02-04:\n\"Further discussion\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3262#4\" target=\"_blank\">Comment 4</a>:\nblizzack on 2021-02-15:\n\"Systematically kept out - part 1\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3262#5\" target=\"_blank\">Comment 5</a>:\nblizzack on 2021-02-15:\n\"Systematically kept out - part 2\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3269#comments\" target=\"_blank\">hpr3269</a></strong>\n(2021-02-11) \"<em>Linux Inlaws S01E23: The first year of the five year plan</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3269#1\" target=\"_blank\">Comment 1</a>:\nclaudiom on 2021-02-12:\n\"Thanks for the invite....\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3271#comments\" target=\"_blank\">hpr3271</a></strong>\n(2021-02-15) \"<em>Interview with a 6yo child </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=3271#1\" target=\"_blank\">Comment 1</a>:\nthelovebug on 2021-02-16:\n\"Loved this!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3272#comments\" target=\"_blank\">hpr3272</a></strong>\n(2021-02-16) \"<em>In GNU/Linux, there is no \"diversity\", we\'re all just data.</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=3272#1\" target=\"_blank\">Comment 1</a>:\nbookewyrmm on 2021-02-17:\n\"welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3274#comments\" target=\"_blank\">hpr3274</a></strong>\n(2021-02-18) \"<em>My Custom dwm Setup</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0138.html\" target=\"_blank\">arfab</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3274#1\" target=\"_blank\">Comment 1</a>:\nmcnalu on 2021-02-19:\n\"Might return to dwm\"</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/2021-February/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-February/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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 10 shows which were without them.</p>\n<p>There are now 414 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3306,'2021-04-05','HPR Community News for March 2021',2000,'HPR Volunteers talk about shows released and comments posted in March 2021','<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/0392.html\" target=\"_blank\">timttmy</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=3281\" target=\"_blank\">3281</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-03-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3281\" target=\"_blank\">HPR Community News for February 2021</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=3282\" target=\"_blank\">3282</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-03-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3282\" target=\"_blank\">HP Laptop with AMD Ryzen 3 Mobile with Radeon Graphics</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=3283\" target=\"_blank\">3283</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-03-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3283\" target=\"_blank\">HPR RPG Club reviews Dead Earth</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=3284\" target=\"_blank\">3284</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-03-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3284\" target=\"_blank\">Introduction to gdb</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=3285\" target=\"_blank\">3285</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-03-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3285\" target=\"_blank\">Upgrading Lubuntu on my Samsung N150 Plus netbook</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=3286\" target=\"_blank\">3286</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-03-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3286\" target=\"_blank\">Wireguard How To</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0392.html\" target=\"_blank\">timttmy</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3287\" target=\"_blank\">3287</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-03-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3287\" target=\"_blank\">Quick tip</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=3288\" target=\"_blank\">3288</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-03-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3288\" target=\"_blank\">Linux Inlaws S01E25: The Grumpy Old Coders</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3289\" target=\"_blank\">3289</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-03-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3289\" target=\"_blank\">NextCloud the hard way</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=3290\" target=\"_blank\">3290</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-03-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3290\" target=\"_blank\">GIMP: More on Layer Tools and Techniques</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=3291\" target=\"_blank\">3291</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-03-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3291\" target=\"_blank\">The New Audacity and Batch Processing Macros</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=3292\" target=\"_blank\">3292</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-03-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3292\" target=\"_blank\">Squirrel FSF blog</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=3293\" target=\"_blank\">3293</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-03-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3293\" target=\"_blank\">HPR RPG Club reviews Dungeon Raiders</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=3294\" target=\"_blank\">3294</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-03-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3294\" target=\"_blank\">Update to MakeMKV to back up media</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=3295\" target=\"_blank\">3295</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-03-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3295\" target=\"_blank\">Renewing a Let\'s Encrypt cert for Home Network use</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=3296\" target=\"_blank\">3296</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-03-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3296\" target=\"_blank\">Spam Bot Honey Pot</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=3297\" target=\"_blank\">3297</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-03-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3297\" target=\"_blank\">Nextcloud Application Updating</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0273.html\" target=\"_blank\">ToeJet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3298\" target=\"_blank\">3298</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-03-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3298\" target=\"_blank\">Poisoning The Well</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=3299\" target=\"_blank\">3299</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-03-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3299\" target=\"_blank\">Linux Inlaws S01E26: Make your Linux harder</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3300\" target=\"_blank\">3300</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-03-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3300\" target=\"_blank\">YouTube Channels for Learning Spanish, Part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3301\" target=\"_blank\">3301</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-03-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3301\" target=\"_blank\">K S P Kerbal Space Program! (Game)</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=3302\" target=\"_blank\">3302</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-03-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3302\" target=\"_blank\">Input Methods on Ubuntu</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3303\" target=\"_blank\">3303</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-03-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3303\" target=\"_blank\">Slackware on RaspberryPi</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</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 15 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 3 comments on\n3 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3153#comments\" target=\"_blank\">hpr3153</a></strong>\n(2020-09-02) \"<em>Fixing eBooks with Calibre and pdfcrop</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3153#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2021-03-03:\n\"Thanks Again.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3241#comments\" target=\"_blank\">hpr3241</a></strong>\n(2021-01-04) \"<em>HPR Community News for December 2020</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3241#4\" target=\"_blank\">Comment 4</a>:\nclacke on 2021-03-03:\n\"OpenLDAP on BDB?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3262#comments\" target=\"_blank\">hpr3262</a></strong>\n(2021-02-02) \"<em>My thoughts on diversity in Linux and open source</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0297.html\" target=\"_blank\">swift110</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3262#6\" target=\"_blank\">Comment 6</a>:\nbjhend on 2021-03-08:\n\"Get rid of bad terms in IT\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 12 comments on 7 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3282#comments\" target=\"_blank\">hpr3282</a></strong>\n(2021-03-02) \"<em>HP Laptop with AMD Ryzen 3 Mobile with Radeon Graphics</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=3282#1\" target=\"_blank\">Comment 1</a>:\nfrank on 2021-03-18:\n\"Using your OEM Windows key in a VM\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3289#comments\" target=\"_blank\">hpr3289</a></strong>\n(2021-03-11) \"<em>NextCloud the hard way</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=3289#1\" target=\"_blank\">Comment 1</a>:\nmonochromec on 2021-01-29:\n\"apachectl restart vs. systemctl restart apache2.service\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3291#comments\" target=\"_blank\">hpr3291</a></strong>\n(2021-03-15) \"<em>The New Audacity and Batch Processing Macros</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=3291#1\" target=\"_blank\">Comment 1</a>:\nRmccurdyDOTcom on 2021-03-15:\n\"audio\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3291#2\" target=\"_blank\">Comment 2</a>:\nGumnos on 2021-03-26:\n\"Which hardware podcast player did you move to?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3291#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2021-03-27:\n\"Your answer\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3292#comments\" target=\"_blank\">hpr3292</a></strong>\n(2021-03-16) \"<em>Squirrel FSF blog</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=3292#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-03-09:\n\"Good Question\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3292#2\" target=\"_blank\">Comment 2</a>:\nA listener on 2021-03-16:\n\"Enjoyed the podcast, but...\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3292#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2021-03-18:\n\"Thank you\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3292#4\" target=\"_blank\">Comment 4</a>:\nThaj on 2021-03-27:\n\"Well...\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3296#comments\" target=\"_blank\">hpr3296</a></strong>\n(2021-03-22) \"<em>Spam Bot Honey Pot</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=3296#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-03-25:\n\"Great show!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3298#comments\" target=\"_blank\">hpr3298</a></strong>\n(2021-03-24) \"<em>Poisoning The Well</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=3298#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2021-03-25:\n\"Agreed\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3299#comments\" target=\"_blank\">hpr3299</a></strong>\n(2021-03-25) \"<em>Linux Inlaws S01E26: Make your Linux harder</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3299#1\" target=\"_blank\">Comment 1</a>:\nnobody on 2021-03-25:\n\"Other MAC implementations\"</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/2021-March/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-March/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=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 10 shows which were without them.</p>\n<p>There are now 404 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3055,'2020-04-17','Advice to new Fediverse administrators and developers',754,'An experienced admin for a Mastodon Instance at a major Fediverse developer offers some tips','<p>Framasoft is a company that develops for PeerTube and Mobilizon, and also hosts a Mastodon instance. The speaker is the sysadmin for the Mastodon instance gives his tips based on his experience at this non-profit company. <a href=\"https://www.zwilnik.com/?page_id=1098\" class=\"uri\">https://www.zwilnik.com/?page_id=1098</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk1_Luc_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk1_Luc_compressed.mov</a></li>\r\n<li><a href=\"https://frama.link/ap-conf-2019\" class=\"uri\">https://frama.link/ap-conf-2019</a></li>\r\n<li><a href=\"https://joinpeertube.org/\" class=\"uri\">https://joinpeertube.org/</a></li>\r\n<li><a href=\"https://joinmobilizon.org/en/\" class=\"uri\">https://joinmobilizon.org/en/</a></li>\r\n<li><a href=\"https://soutenir.framasoft.org/en/\" class=\"uri\">https://soutenir.framasoft.org/en/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1034\" class=\"uri\">https://www.zwilnik.com/?page_id=1034</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1098\" class=\"uri\">https://www.zwilnik.com/?page_id=1098</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub',0,0,1),
(3065,'2020-05-01','The case for the unattributed message',977,'Anonymity can cause problems (trolls) but also can be necessary.','<p>Anonymity has an unfortunate consequence of enabling trolls and abuse. But there are cases where it is important for people to communicate anonymously. In this talk some ideas are presented on how to enable a measure of anonymity without having all of the problems. <a href=\"https://www.zwilnik.com/?page_id=1103\" class=\"uri\">https://www.zwilnik.com/?page_id=1103</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk7_Caleb_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk7_Caleb_compressed.mov</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/EFnet\" class=\"uri\">https://en.wikipedia.org/wiki/EFnet</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Freenet\" class=\"uri\">https://en.wikipedia.org/wiki/Freenet</a></li>\r\n<li><a href=\"https://medium.com/@mhatta/easy-censorship-resistant-communication-with-syndie-e063a6c9cf35\" class=\"uri\">https://medium.com/@mhatta/easy-censorship-resistant-communication-with-syndie-e063a6c9cf35</a></li>\r\n<li><a href=\"https://www.zwilnik.com/wp-admin/post.php?post=1101&amp;action=edit\" class=\"uri\">https://www.zwilnik.com/wp-admin/post.php?post=1101&amp;action=edit</a></li>\r\n<li><a href=\"https://medium.com/@ameet/strong-opinions-weakly-held-a-framework-for-thinking-6530d417e364\" class=\"uri\">https://medium.com/@ameet/strong-opinions-weakly-held-a-framework-for-thinking-6530d417e364</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1034\" class=\"uri\">https://www.zwilnik.com/?page_id=1034</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1103\" class=\"uri\">https://www.zwilnik.com/?page_id=1103</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, Privacy, Anonymity',0,0,1),
(3075,'2020-05-15','Federated Blogging with WriteFreely',740,'A look at a minimally social blogging app using ActivityPub.','<p>Many social media apps seem determined to put bells and whistles in every possible place, which is not always in the interest of the user. This talk presents an alternative view which is called “minimally social” which only puts in the features needed by the user. In this case, the main focus is on a simple blogging app. There is also a brief mention of a very technical talk about coding. <a href=\"https://www.zwilnik.com/?page_id=1103\" class=\"uri\">https://www.zwilnik.com/?page_id=1103</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk8_Matt_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk8_Matt_compressed.mov</a></li>\r\n<li><a href=\"https://read.as/\" class=\"uri\">https://read.as/</a></li>\r\n<li><a href=\"https://libresaas.org/\" class=\"uri\">https://libresaas.org/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1105\" class=\"uri\">https://www.zwilnik.com/?page_id=1105</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-talks/Talk9_Michael_compressed.mov\" class=\"uri\">https://archive.org/details/apconf-talks/Talk9_Michael_compressed.mov</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1103\" class=\"uri\">https://www.zwilnik.com/?page_id=1103</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, Blogging',0,0,1),
(3085,'2020-05-29','Architectures of Robust Openness',1142,'A look at how to secure social networks against attack while still being open to strangers.','<p>Social networks can be attacked by people who want to cause abuse and disruption, and one way to deal with that is to lock down the membership. But that goes against the idea of social, which should include being open to welcoming strangers. Mark Miller presents an analysis of how you can be both secure and welcoming which focuses on Object Capabilities. <a href=\"https://www.zwilnik.com/?page_id=1107\" class=\"uri\">https://www.zwilnik.com/?page_id=1107</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://redaktor.me/apconf/\" class=\"uri\">https://redaktor.me/apconf/</a></li>\r\n<li><a href=\"https://archive.org/details/apconf-mark\" class=\"uri\">https://archive.org/details/apconf-mark</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Project_Xanadu\" class=\"uri\">https://en.wikipedia.org/wiki/Project_Xanadu</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Miller_columns\" class=\"uri\">https://en.wikipedia.org/wiki/Miller_columns</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/E_(programming_language)\" class=\"uri\">https://en.wikipedia.org/wiki/E_(programming_language)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Caja_programming_language\" class=\"uri\">https://en.wikipedia.org/wiki/Caja_programming_language</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Foresight_Institute\" class=\"uri\">https://en.wikipedia.org/wiki/Foresight_Institute</a></li>\r\n<li><a href=\"https://www.synopsys.com/blogs/software-security/polaris-software-integrity-platform/\" class=\"uri\">https://www.synopsys.com/blogs/software-security/polaris-software-integrity-platform/</a></li>\r\n<li><a href=\"https://www.cs.jhu.edu/~seaborn/plash/html/\" class=\"uri\">https://www.cs.jhu.edu/~seaborn/plash/html/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Bitfrost\" class=\"uri\">https://en.wikipedia.org/wiki/Bitfrost</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Security_Content_Automation_Protocol\" class=\"uri\">https://en.wikipedia.org/wiki/Security_Content_Automation_Protocol</a></li>\r\n<li><a href=\"https://alanhkarp.com/scoopfs/index.html\" class=\"uri\">https://alanhkarp.com/scoopfs/index.html</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Secure_Scuttlebutt\" class=\"uri\">https://en.wikipedia.org/wiki/Secure_Scuttlebutt</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fediverse\" class=\"uri\">https://en.wikipedia.org/wiki/Fediverse</a></li>\r\n<li><a href=\"https://www.zwilnik.com/?page_id=1107\" class=\"uri\">https://www.zwilnik.com/?page_id=1107</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, Security, OCaps',0,0,1),
(3000,'2020-01-31','Chopin Free project',1433,'An effort to produce royalty and copyright free versions of Frédéric Chopin work.','<p>\r\nThe <a href=\"https://musopen.org/about/\">Musopen</a> (www.musopen.org) is a 501(c)(3) non-profit focused on improving access and exposure to music by creating free resources and educational materials. We provide recordings, sheet music, and textbooks to the public for free, without copyright restrictions. Put simply, our mission is to set music free.\r\n</p>\r\n<p>\r\nTheir latest <a href=\"https://www.kickstarter.com/projects/Musopen/set-chopin-free\">Kickstarter</a> aims to open the works of <a href=\"https://en.wikipedia.org/wiki/Fr%C3%A9d%C3%A9ric_Chopin\">Frédéric Chopin</a> copyright free.\r\n</p>',383,0,0,'CC-BY-SA','musopen, Frédéric Chopin',0,0,1),
(3004,'2020-02-06','Fixing simple audio problems with Audacity',808,'Sharing a few experiences with Audacity that may be helpful to others','<h2 id=\"overview\">Overview</h2>\r\n<p>I recorded the audio for the show I did with <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" title=\"MrX\">MrX</a> in late 2019: <a href=\"https://hackerpublicradio.org/eps.php?id=2972\">“hpr2972 :: The foot of the ski slope”</a>. I was using my Zoom H2n recorder in my car, on a small tripod placed on the dashboard. Something about this setup caused the result to be very <em>boomy</em> and (to me) unpleasant to listen to. This episode is about what I did for a cure, after some research.</p>\r\n<p>I have also been using the <a href=\"https://manual.audacityteam.org/man/truncate_silence.html\" title=\"Truncate Silence\">‘<em>Truncate Silence</em>’</a> effect in Audacity incorrectly in the past, and I used the opportunity to learn how to do a better job with it.</p>\r\n<p>Now, I am well aware that there are some skilled and experienced Audio Engineers out there in HPR-land. I am certainly not one of these, though I quite enjoy fiddling with audio to make it sound better. I’d like to make two requests:</p>\r\n<ol type=\"1\">\r\n<li>If I didn’t do a good job, please tell me what I did wrong here, and how I should have done it.</li>\r\n<li>Think about doing a show (or shows) on HPR about how to deal with common audio problems. For example: how to remove a mains hum, the use of compression and normalisation.</li>\r\n</ol>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>A longer form of these notes may be <a href=\"https://hackerpublicradio.org/eps/hpr3004/full_shownotes.html\">found here (full_shownotes.html)</a>. These go into more detail on the steps I took to try and make the audio for show 2972 more tolerable.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Wikipedia page describing <a href=\"https://en.wikipedia.org/wiki/Audacity_%28audio_editor%29\">Audacity</a></li>\r\n<li>Audacity <a href=\"https://www.audacityteam.org/\">website</a></li>\r\n<li>Effects:\r\n<ul>\r\n<li><a href=\"https://manual.audacityteam.org/man/noise_reduction.html\">Noise Reduction</a></li>\r\n<li><a href=\"https://manual.audacityteam.org/man/high_pass_filter.html\">High-pass Filter</a></li>\r\n<li><a href=\"https://manual.audacityteam.org/man/amplify.html\">Amplify</a></li>\r\n<li><a href=\"https://manual.audacityteam.org/man/truncate_silence.html\">Truncate Silence</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','audio,Audacity,effects,problem solving',0,0,1),
(3009,'2020-02-13','Linux Inlaws S01E01',3570,'Linux Inlaws - a podcast about on topics around free and open source software','<p><em>Linux Inlaws</em> - a podcast about on topics around free and open source software, any associated contraband, communism / the revolution in general and whatever else fancies your tickle.</p>\r\n<p>Please note that this and other episodes may contain strong language, offensive humor and other certainly not politically correct language - you have been warned (our parents insisted on this disclaimer - happy mum?). Thus the content is not suitable for consumption in the workplace (especially when played back on a speaker in an open plan office or similar environments), any minors under the age of 35 or any pets including fluffy little killer bunnies, your trusty guide dog (unless on speed) and cute t-rexes or other associated dinosaurs.</p>\r\n\r\n<p>\r\nIn this show the lads introduce themselves and discuss the technology they use and why they are putting on the show.\r\n</p>\r\n\r\n<h3>Links:</h3>\r\n<ul>\r\n<li><a href=\"https://linuxinlaws.eu/\">https://linuxinlaws.eu/</a></li>\r\n<li>email: feedback at linuxinlaws eu</li>\r\n<li><a href=\"https://traceroute-online.com/mtr/\">https://traceroute-online.com/mtr/</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY','free open source software revolution',0,0,1),
(3095,'2020-06-12','Intro to GIMP',1064,'An introduction to GIMP to kick off a new series.','<p>GIMP is the open source alternative to the proprietary Photoshop, and can do most of the same things while respecting your freedom. This show will kick off a new series of tutorials. As a note of caution, I am not an expert, I am just learning GIMP as I go. But I thought there was no harm in sharing my experiences with the HPR community. <a href=\"https://www.ahuka.com/?page_id=1423\" class=\"uri\">https://www.ahuka.com/?page_id=1423</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/watch?v=Q8C0LJPpr64\" class=\"uri\">https://www.youtube.com/watch?v=Q8C0LJPpr64</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=SoP5LOFxPeY\" class=\"uri\">https://www.youtube.com/watch?v=SoP5LOFxPeY</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=_L_MMU22bAw\" class=\"uri\">https://www.youtube.com/watch?v=_L_MMU22bAw</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=TiavEWDVQGE\" class=\"uri\">https://www.youtube.com/watch?v=TiavEWDVQGE</a></li>\r\n<li><a href=\"https://www.gimp.org/tutorials/\" class=\"uri\">https://www.gimp.org/tutorials/</a></li>\r\n<li><a href=\"https://www.makeuseof.com/tag/gimp-photo-editing/\" class=\"uri\">https://www.makeuseof.com/tag/gimp-photo-editing/</a></li>\r\n<li><a href=\"https://www.wikihow.com/Use-GIMP\" class=\"uri\">https://www.wikihow.com/Use-GIMP</a></li>\r\n<li><a href=\"https://daviesmediadesign.com/20-gimp-2-10-tutorials-for-beginners/\" class=\"uri\">https://daviesmediadesign.com/20-gimp-2-10-tutorials-for-beginners/</a></li>\r\n<li><a href=\"https://www.pcworld.com/article/3451356/gimp-basics-tips-and-tricks-for-beginners.html\" class=\"uri\">https://www.pcworld.com/article/3451356/gimp-basics-tips-and-tricks-for-beginners.html</a></li>\r\n<li><a href=\"https://howtogimp.com/\" class=\"uri\">https://howtogimp.com/</a></li>\r\n<li><a href=\"https://issuu.com/gimpmagazine\" class=\"uri\">https://issuu.com/gimpmagazine</a></li>\r\n<li><a href=\"https://www.gimp.org/downloads/\" class=\"uri\">https://www.gimp.org/downloads/</a></li>\r\n<li><a href=\"https://whatis.techtarget.com/fileformat/XCF-GIMP-document\" class=\"uri\">https://whatis.techtarget.com/fileformat/XCF-GIMP-document</a></li>\r\n<li><a href=\"https://gist.github.com/rbrito/e57c87d5376fd56113df058abf71bdf3\" class=\"uri\">https://gist.github.com/rbrito/e57c87d5376fd56113df058abf71bdf3</a></li>\r\n<li><a href=\"https://www.ahuka.com/?page_id=1423\" class=\"uri\">https://www.ahuka.com/?page_id=1423</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics',0,0,1),
(3010,'2020-02-14','FOSDEM first impressions',1638,'Impressions from my first attendance at FOSDEM.','<p><a href=\"https://fosdem.org\">FOSDEM</a> is the biggest Free and Open Source conference in the world and on its 20<sup>th</sup> anniversary I decided to attend for the first time. By a good turn of fate, and some well-judged pitching, Ken Fallon secured a stand for the <a href=\"https://freeculturepodcasts.org/\">Free Culture Podcasts project</a> which is an umbrella group that covers HPR, many of the shows on <a href=\"https://otherside.network/\">The Other Side Network</a> and many more excellent podcasts that are released under creative commons licenses.</p>\r\n\r\n<p>This audio is recorded in snippets in between manning the stand and gives some off-the-cuff observations from a FOSDEM noob. I was surprised to find that relatively few visitors to our stand had heard of HPR, which we quickly rectified of course, and I give a brief summary of the feedback we received. Also mentioned in this show, but not actually appearing, are my co-conspirators at FOSDEM, <a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken</a>, <a href=\"https://hackerpublicradio.org/correspondents/0288.html\">Beni</a>, <a href=\"https://hackerpublicradio.org/correspondents/0129.html\">JWP</a> as well as <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a> who unfortunately wasn\'t able to join us in person but was very much there in spirit.</p>\r\n\r\n',268,0,0,'CC-BY-SA','fosdem,conference,podcasts,creative commons',0,0,1),
(3012,'2020-02-18','Sample episode from Wikipediapodden',518,'An English microsode of their Swedish language podcast about Wikipedia.','<p>\r\nJan Ainali from the  <a href=\"https://wikipediapodden.se/\">https://wikipediapodden.se/</a> podcast came over to the <a href=\"https://freeculturepodcasts.org/\">https://freeculturepodcasts.org/</a> booth at <a href=\"https://fosdem.org/2020/\">FOSDEM</a> 2020.\r\n</p>\r\n<p>\r\nThey do a Swedish Language Podcast about wikipedia et al, and of course we added them to the <a href=\"https://freeculturepodcasts.org/\">https://freeculturepodcasts.org/</a> site. While their main shows are in Swedish, they also have summaries that they do in English which can be found at <a href=\"https://wikipediapodden.se/tag/english/\">https://wikipediapodden.se/tag/english/</a>, (<a href=\"https://wikipediapodden.se/tag/english/feed/\">RSS Feed</a>).\r\n</p>',30,75,1,'CC-BY-SA','fosdem, wikipediapodden, swedish, sweden',0,0,1),
(3036,'2020-03-23','WiiU is dead long live WiiU!',1439,'How to approach dea-ish mod communities','<ul>\r\n<li><p>lulz:<br />\r\n<a href=\"https://twitter.com/operat0r/status/1224025568334708737\" class=\"uri\">https://twitter.com/operat0r/status/1224025568334708737</a></p></li>\r\n<li><p>Discord:<br />\r\n<a href=\"https://discord.gg/nintendohomebrew\" class=\"uri\">https://discord.gg/nintendohomebrew</a></p></li>\r\n<li><p>Saves:<br />\r\n<a href=\"https://gbatemp.net/threads/wii-u-save-files-compilation.427761/#post-6374659\" class=\"uri\">https://gbatemp.net/threads/wii-u-save-files-compilation.427761/#post-6374659</a></p></li>\r\n<li><p>lego ntsc save<br />\r\n<a href=\"https://drive.google.com/open?id=1bTtXv1c8NkOkeHoKOkWHhP6RbiXv9ERo\" class=\"uri\">https://drive.google.com/open?id=1bTtXv1c8NkOkeHoKOkWHhP6RbiXv9ERo</a><br />\r\n<a href=\"https://www.youtube.com/user/BullyWiiPlaza/videos\" class=\"uri\">https://www.youtube.com/user/BullyWiiPlaza/videos</a></p></li>\r\n<li><p>old cheat engine files:<br />\r\n<a href=\"https://rmccurdy.com/.scripts/downloaded/CheatEngineTables-master/tables/\" class=\"uri\">https://rmccurdy.com/.scripts/downloaded/CheatEngineTables-master/tables/</a></p></li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','wiiu,modding,hacking,tcpgecko,android,ssl pinning,games',0,0,1),
(3014,'2020-02-20','A Headless Raspberry Pi Streaming Radio',1068,'I use a Raspberry Pi to make a streaming radio device for my pillow speaker.','<p>In this episode I talk about how I used a Raspberry Pi to create a streaming radio device to feed my pillow speaker. This is something I used to do with clock radios and later a satellite radio, but in an effort to decrease monthly subscription costs for services I did not use optimally, I discontinued my satellite radio subscription about a year ago. This new free solution is an excellent substitute for Satellite Radio so far, since I was mostly listening to this same channel on the Sat Radio but paying about $12 a month for the privilege. The device I’m using is a <a href=\"https://www.raspberrypi.org/products/raspberry-pi-2-model-b/\">Raspberry Pi 2 Model B</a> with <a href=\"https://ubuntu.com/download/raspberry-pi\">Ubuntu Server</a>. My barrier to this project in the past was not being able to find the URL for the stream I wanted but I discovered you can find it easily if you use Firefox with <a href=\"https://www.downloadhelper.net/\">Video Download Helper</a> to reveal the URL on a page with media playing (in this case it’s from TuneIn):</p>\r\n\r\n<pre><code>https://XX.XXX.XXX.XXX/radio-stationmp3-48?session-id=af1b271fefba04b650f8e253c6b253bd&source=TuneIn\r\n</code></pre>\r\n\r\n<p>Strip off everything after the <code>48</code> to get raw URL:</p>\r\n\r\n<pre><code>https://XX.XXX.XXX.XXX/radio-stationmp3-48\r\n</code></pre>\r\n\r\n<p>Command to play stream with <a href=\"https://www.mpg123.de/\">mpg123</a> on the Pi. Using the <code>-q</code> option to suppress output:</p>\r\n\r\n<pre><code>mpg123-pulse -q https://XX.XXX.XXX.XXX/radio-stationmp3-48 &\r\n</code></pre>\r\n\r\n<p>Once I figure out the command that plays the stream I want, I save the command as an executable script in <code>/home/$user/bin</code>.</p>\r\n\r\n<h3 id=\"usingtheradio\">Using the “Radio”</h3>\r\n\r\n<p>To start playing a stream you first have to SSH into the RasPi. This is easy from a laptop using any terminal emulator. I use pubkey auth so I don’t have to type a password every time. On my phone I use <a href=\"https://play.google.com/store/apps/details?id=org.connectbot&hl=en_US\">ConnectBot</a>. Once I’m into the Pi I run the radio commands from CLI like <code>espn</code> or <code>kmfa</code> or <code>krvs</code>. To stop playback I kill the process with <code>pkill mpg</code>. I have a 3.5mm audio splitter Plugged into the headphone jack of the USB audio interface. In one side of the splitter I’ve got an old pair of earbuds where one side didn’t work, with the working earbud under my pillow. That’s my pillow speaker. On the other side of the splitter I put the audio cable for an <a href=\"https://smile.amazon.com/gp/product/B005GUQ0FI/\">FM transmitter</a>, so that I can use an FM radio to listen to the stream while I’m walking around the house.</p>\r\n\r\n<p>Click the image below to see pictures of the setup.</p>\r\n\r\n<p><a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/137675441@N05/albums/72157712927722077\" title=\"Raspberry Pi Radio\"><img src=\"https://live.staticflickr.com/65535/49473218252_39195601ed.jpg\" width=\"500\" height=\"281\" alt=\"Raspberry Pi Radio\"></a></p>\r\n\r\n<h3 id=\"links\">Links</h3>\r\n\r\n<ul>\r\n<li><a href=\"https://www.raspberrypi.org/products/raspberry-pi-2-model-b/\">Raspberry Pi 2 Model B</a></li>\r\n<li><a href=\"https://ubuntu.com/download/raspberry-pi\">Ubuntu Server</a></li>\r\n<li><a href=\"https://www.downloadhelper.net/\">Video Download Helper</a> (Firefox extension)</li>\r\n<li>The <a href=\"https://smile.amazon.com/gp/product/B001MSS6CS/\">USB Audio interface</a> I use</li>\r\n<li>Panda Wireless <a href=\"https://smile.amazon.com/gp/product/B00762YNMG\">USB WiFi adapter</a></li>\r\n<li><a href=\"https://www.mpg123.de/\">mpg123</a> command-line audio player</li>\r\n<li><a href=\"https://play.google.com/store/apps/details?id=org.connectbot&hl=en_US\">ConnectBot</a></li>\r\n<li><a href=\"https://smile.amazon.com/gp/product/B005GUQ0FI/\">C. Crane FM Transmitter</a></li>\r\n</ul>\r\n',238,0,0,'CC-BY-SA','Raspberry Pi, Internet Radio, Streaming Radio, Radio, Streaming Audio, Ubuntu, Ubuntu Server',0,0,1),
(3018,'2020-02-26','Encrypted edit',1234,'Klaatu talks about editing and viewing encrypted files in a tmpfs in RAM','<ul>\r\n<li><a href=\"https://www.passwordstore.org/\" target=\"_blank\">Password-store</a> and the <strong>pre</strong> command.</li>\r\n<li><a href=\"https://gitlab.com/notklaatu/credit/\" target=\"_blank\">Credit</a> command</li>\r\n</ul>\r\n',78,0,0,'CC-BY-SA','GPG, privacy',0,0,1),
(3017,'2020-02-25','Developing Black and White Film',2544,'Join me as I develop my first roll of black and white film since over 30 years ago.','<p>My photos will be available at: <a href=\"https://pquirk.com\" class=\"uri\">https://pquirk.com</a></p>\r\n',383,0,0,'CC-BY-SA','Photography,film,developing,black and white',0,0,1),
(3019,'2020-02-27','Linux Inlaws S01E02 FOSDEM shenanigans',3929,'Linux Inlaws - a podcast about on topics around free and open source software','<p>Linux Inlaws - a podcast about on topics around free and open source software, any associated contraband, communism / the revolution in general and whatever else fancies your tickle.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://linuxinlaws.eu\" class=\"uri\">https://linuxinlaws.eu</a></li>\r\n<li><a href=\"https://fosdem.org\" class=\"uri\">https://fosdem.org</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3009\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3009</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','free open source software, revolution, FLOSS',0,0,1),
(3013,'2020-02-19','Bash Tips - 21',2497,'Environment variables','<h2 id=\"the-environment-more-collateral-bash-tips\">The Environment <small><small>(More collateral Bash tips)</small></small></h2>\r\n<h3 id=\"overview\">Overview</h3>\r\n<p>You will probably have seen references to <em>The Environment</em> in various contexts relating to shells, shell scripts, scripts in other languages and compiled programs.</p>\r\n<p>In Unix and Unix-like operating systems an environment is maintained by the shell, and we will be looking at how Bash deals with this in this episode. When a script, program or subprocess is invoked it is given an array of strings called the <em>environment</em>. This is a list of name-value pairs, of the form <code>name=value</code>.</p>\r\n<h4 id=\"using-the-environment\">Using the environment</h4>\r\n<p>The environment is used to convey various pieces of information to the executing script or program. For example, two standard variables provided by the shell are <code>\'HOME\'</code>, which is set to the current user’s home directory and <code>\'PWD</code>, set to the current working directory. The shell user can set, change, remove and view environment variables for their own purposes as we will see in this episode. The Bash shell itself creates and in some cases manages environment variables.</p>\r\n<p>The environment contains global data which is passed down to subprocesses (<em>child</em> processes) by copying. However, it is not possible for a subprocess to pass information <b>back</b> to the superior (<em>parent</em>) process.</p>\r\n<h4 id=\"viewing-the-environment\">Viewing the environment</h4>\r\n<p>You can view the environment in a number of ways.</p>\r\n<ul>\r\n<li><p>From the command line the command <code>printenv</code> can do this (this is usually but not always a stand-alone command: it’s <code>/usr/bin/printenv</code> on my Debian system). We will look at this command later.</p></li>\r\n<li><p>The command <code>env</code> without any arguments does the same thing as <code>printenv</code> without arguments. This is actually a tool to run a program in a modified environment which we will look at later. The environment printing capability can be regarded as more of a bonus feature.</p></li>\r\n<li><p>Scripting languages like <code>awk</code> (as well as Python and Perl, to name just a few) can view and manipulate the environment.</p></li>\r\n<li><p>Compiled languages such as <code>C</code> can do this too of course.</p></li>\r\n<li><p>There are other commands that will show the environment, and we will look at some of these briefly.</p></li>\r\n</ul>\r\n<h4 id=\"changing-variables-in-the-environment\">Changing variables in the environment</h4>\r\n<p>The variables in the environment are not significantly different from the <em>shell parameters</em> we have seen throughout this Bash Tips series. The only difference is that they are marked for <em>export</em> to commands and sub-shells. You will often see variables (or parameters) in the environment referred to as <em>environment variables</em>. The Bash manual makes a distinction between ordinary parameters (variables) and environment variables, but many other sources are less precise about this in my experience.</p>\r\n<p>The standard variables in the environment have upper-case names (<code>HOME</code>, <code>SHELL</code>, <code>PWD</code>, etc), but there is no reason why a variable you create should not be in lower or mixed case. In fact, the Bash manual suggests that you should avoid using all upper-case names so as not to clash with Bash’s variables.</p>\r\n<p>Variables can be created and changed a number of ways.</p>\r\n<ul>\r\n<li>They can be set up at login time (globally or locally) through various standard configuration files. It is intended to look at this subject in an upcoming episode so we will leave discussing the subject until then.</li>\r\n<li>By preceding the command or script invocation with <em>name=value</em> expressions which will temporarily place these variables into the environment for the command</li>\r\n<li>Using the <code>export</code> command</li>\r\n<li>Using the <code>declare</code> command with the <code>-x</code> option</li>\r\n<li>The value of an environment variable (once established) can be changed at any time in the sub-shell with a command like <code>myvar=42</code>, just as for a normal variable</li>\r\n<li>The <code>export</code> command can also be used to turn off the <em>export</em> marker on a variable</li>\r\n<li>Deletion is performed with the <code>unset</code> command (as seen earlier in the series)</li>\r\n</ul>\r\n<p>We will look at all of these features in more detail later in the episode.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr3013/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/bash.html\">“<em>GNU BASH Reference Manual</em>”</a>\r\n<ul>\r\n<li>Section <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Command-Execution-Environment\">“3.7.3 Command Execution Environment”</a></li>\r\n<li>Section <a href=\"https://www.gnu.org/software/bash/manual/bash.html#Environment\">“3.7.4 Environment”</a></li>\r\n</ul></li>\r\n<li><a href=\"https://www.gnu.org/software/coreutils/manual/\"><em>GNU Coreutils Manual</em></a>\r\n<ul>\r\n<li>Section <a href=\"https://www.gnu.org/software/coreutils/manual/html_node/env-invocation.html\">23.2 env: Run a command in a modified environment</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Env\">Wikipedia page on the <code>env</code> command</a></p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0042.html\">HPR series: <em>Bash Scripting</em></a></p></li>\r\n<li>Previous episodes under the heading <em>Bash Tips</em>:<br />\r\n<small><strong>Episode number</strong></small>\r\n<ol>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1648\">HPR episode 1648 <code>\"</code><em>Bash parameter manipulation</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1843\">HPR episode 1843 <code>\"</code><em>Some Bash tips</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1884\">HPR episode 1884 <code>\"</code><em>Some more Bash tips</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1903\">HPR episode 1903 <code>\"</code><em>Some further Bash tips</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1951\">HPR episode 1951 <code>\"</code><em>Some additional Bash tips</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2045\">HPR episode 2045 <code>\"</code><em>Some other Bash tips</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2278\">HPR episode 2278 <code>\"</code><em>Some supplementary Bash tips</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2293\">HPR episode 2293 <code>\"</code><em>More supplementary Bash tips</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2639\">HPR episode 2639 <code>\"</code><em>Some ancillary Bash tips - 9</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2649\">HPR episode 2649 <code>\"</code><em>More ancillary Bash tips - 10</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2659\">HPR episode 2659 <code>\"</code><em>Further ancillary Bash tips - 11</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2669\">HPR episode 2669 <code>\"</code><em>Additional ancillary Bash tips - 12</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2679\">HPR episode 2679 <code>\"</code><em>Extra ancillary Bash tips - 13</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2689\">HPR episode 2689 <code>\"</code><em>Bash Tips - 14 (Some auxiliary Bash tips)</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2699\">HPR episode 2699 <code>\"</code><em>Bash Tips - 15 (More auxiliary Bash tips)</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2709\">HPR episode 2709 <code>\"</code><em>Bash Tips - 16 (Further auxiliary Bash tips)</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2719\">HPR episode 2719 <code>\"</code><em>Bash Tips - 17 (Additional auxiliary Bash tips)</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2729\">HPR episode 2729 <code>\"</code><em>Bash Tips - 18 (Extra auxiliary Bash tips)</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2739\">HPR episode 2739 <code>\"</code><em>Bash Tips - 19 (Supplemental auxiliary Bash tips)</em><code>\"</code></a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2756\">HPR episode 2756 <code>\"</code><em>Bash Tips - 20 (Some collateral Bash tips)</em><code>\"</code></a></li>\r\n</ol></li>\r\n</ul>\r\n<ul>\r\n<li>Resources:\r\n<ul>\r\n<li>Examples:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex1.sh\">bash21_ex1.sh</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex2.sh\">bash21_ex2.sh</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex3.awk\">bash21_ex3.awk</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex4.sh\">bash21_ex4.sh</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex5.sh\">bash21_ex5.sh</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex6.sh\">bash21_ex6.sh</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex6_1.cfg\">bash21_ex6_1.cfg</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3013/bash21_ex6_2.cfg\">bash21_ex6_2.cfg</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n',225,42,1,'CC-BY-SA','Bash,variable,environment,environment variable',0,0,1),
(3020,'2020-02-28','Validating data in Haskell',1500,'Tuula talks about wow to validate incoming http request before acting on them','<h1 id=\"background\">Background</h1>\r\n<p>The space game I working on needs a admin interface that can by used by game masters to view and modify the simulation.</p>\r\n<p>For start, I added interface for viewing, modifying and creating new people. It has three HTTP endpoints that are defined below. In this episode, I’ll concentrate on creating a new person and especially making sure that parameters used are valid.</p>\r\n<pre><code>/api/admin/people              AdminApiPeopleR     GET\r\n/api/admin/people/#PersonId    AdminApiPersonR     GET PUT\r\n/api/admin/addPerson           AdminApiAddPersonR  POST</code></pre>\r\n<h1 id=\"types-and-parsing\">Types and parsing</h1>\r\n<p>There are two important approaches on making sure that data is valid. Making illegal state unpresentable and parsing instead of validation.</p>\r\n<p>If it’s impossible to create invalid data, you don’t have to validate it. Instead of using <code>Integer</code> and checking that given parameter is 0 or more, you should use <code>Natural</code>. Since <code>Natural</code> can’t have negative values, you don’t have to validate it. Similarly, instead of using a list, you could use <code>NonEmpty</code> to make sure that there’s at least one element present in the collection.</p>\r\n<p>Parse, don’t validate is similar approach. Instead of having a lax parser and then validating the result, parser should reject data that doesn’t make sense. By selecting suitable datatypes to represent data in the system, simply parsing incoming message is sometimes enough to validate it at the same time.</p>\r\n<h1 id=\"person-creation\">Person creation</h1>\r\n<p>Function in charge of generating a new person has signature of <code>generatePersonM :: RandomGen g =&gt; StarDate -&gt; PersonOptions -&gt; Rand g Person</code>. Given a current <code>StarDate</code> and <code>PersonOptions</code> describing what kind of person is needed, it will return a computation that can be executed to generate a random person.</p>\r\n<p><code>PersonOptions</code> is very barebones. There’s only one field to tell what kind of age the person should have and even that is an optional field.</p>\r\n<pre><code>data PersonOptions = PersonOptions\r\n    { personOptionsAge :: Maybe AgeOptions\r\n    } deriving (Show, Read, Eq)</code></pre>\r\n<p><code>AgeOptions</code> has two possibilities. <code>AgeBracket</code> describes case where age should be inside of given range. <code>ExactAge</code> specifies exactly what age should be.</p>\r\n<pre><code>data AgeOptions =\r\n    AgeBracket Age Age\r\n    | ExactAge Age\r\n    deriving (Show, Read, Eq)</code></pre>\r\n<p><code>Age</code> is newtype wrapping <code>Natural</code>, thus <code>Age</code> can never be less than zero.</p>\r\n<pre><code>newtype Age = Age { unAge :: Natural }\r\n    deriving (Show, Read, Eq, Num, Ord)</code></pre>\r\n<p>Hand written <code>FromJSON</code> instance takes care of rejecting numbers that aren’t integers and at least zero. One could skip the checks here and parsed <code>Age</code> still couldn’t be negative. Advantage of explicit checks is that we get much nicer error message instead of just annoying runtime exception.</p>\r\n<pre><code>instance FromJSON Age where\r\n    parseJSON =\r\n        withScientific &quot;age&quot;\r\n            (\\x -&gt; case toBoundedInteger x of\r\n                Nothing -&gt;\r\n                    mempty\r\n\r\n                Just n -&gt;\r\n                    if n &gt;= 0 then\r\n                        return $ Age $ fromIntegral (n :: Int)\r\n\r\n                    else\r\n                        mempty)</code></pre>\r\n<p>So, when creating a new person, you can have:</p>\r\n<ul>\r\n<li>no age options at all, computer can pick something</li>\r\n<li>specific age, computer calculates date of birth based on current date</li>\r\n<li>age bracket, computer calculates date of birth based on current date and bracket</li>\r\n<li>age is always integer that is 0 or more</li>\r\n</ul>\r\n<p>There’s still possibility of error. Nothing ensure that age bracket makes sense. It could be <code>AgeBracket (Age 10) (Age 5)</code> (bracket from 10 to 5). We need to add a bit of validation.</p>\r\n<p><code>Data.Validation</code> is “a data-type like Either but with an accumulating Applicative”. What this means to me is that I can validate multiple aspects and collect errors in a list. It’s handy for getting all the problems at once, instead of having to fix them one by one and retry after each fix.</p>\r\n<p>Our validation function has signature <code>validateAddPerson :: PersonOptions -&gt; Validation [ErrorCode] PersonOptions</code>. Given <code>PersonOptions</code>, it will give list of <code>ErrorCode</code> and original <code>PersonOptions</code>. Multiple validation functions can be combined for more complex validations.</p>\r\n<p>In our example <code>validateAgeOptions</code> validates only age related options of the data. <code>validateAddPerson</code> is supposed to validate whole data, but currently it just delegates to <code>validateAgeOptions</code>. In the future, we can add more validations by adding more functions and chaining them with <code>&lt;*</code> operator.</p>\r\n<pre><code>validateAddPerson :: PersonOptions -&gt; Validation [ErrorCode] PersonOptions\r\nvalidateAddPerson opt =\r\n        pure opt\r\n            &lt;* validateAgeOptions opt\r\n\r\nvalidateAgeOptions :: PersonOptions -&gt; Validation [ErrorCode] PersonOptions\r\nvalidateAgeOptions opt =\r\n    case personOptionsAge opt of\r\n        Nothing -&gt;\r\n            _Success # opt\r\n\r\n        Just (AgeBracket a b) -&gt;\r\n            if a &lt;= b\r\n                then _Success # opt\r\n                else _Failure # [ AgeBracketStartIsGreaterThanEnd ]\r\n\r\n        Just (ExactAge _) -&gt;\r\n            _Success # opt</code></pre>\r\n<h1 id=\"putting-it-all-together\">Putting it all together</h1>\r\n<p>Function that handles <code>POST</code> message and creates a new person is shown below:</p>\r\n<pre><code>postAdminApiAddPersonR :: Handler Value\r\npostAdminApiAddPersonR = do\r\n    _ &lt;- apiRequireAdmin\r\n    msg &lt;- requireJsonBody\r\n    date &lt;- runDB $ starDate\r\n    _ &lt;- raiseIfFailure $ validateAddPerson msg\r\n    g &lt;- liftIO newStdGen\r\n    let person = evalRand (generatePersonM date msg) g\r\n    pId &lt;- runDB $ insert person\r\n    returnJson (Entity pId person)</code></pre>\r\n<p>It does several things: - check that current user is admin - get json content and parse it to <code>PersonOptions</code> - get current star date from database - validate <code>PersonOptions</code> and return error if validation fails - get new random number generator - generate new person - insert it into database - return tuple of <code>(PersonId, Person)</code></p>\r\n<h1 id=\"closing\">Closing</h1>\r\n<p>Types should represent only valid states. By having invalid state unpresentable, we can avoid many errors. Likewise, parsing should reject invalid data. This usually follows from having invalid states being unpresentable (you can’t parse invalid message to invalid data if you don’t have way to represent that invalid data).</p>\r\n<p>Questions, comments and feedback welcome. Best way to reach me is either by email or in mastodon, where I’m <code>Tuula@mastodon.social</code>.</p>\r\n',364,107,0,'CC-BY-SA','validation, algebraic data types, json',0,0,1),
(3022,'2020-03-03','FOSDEM 2020 Stand Interviews',5578,'Interviews with some of the stands at FOSDEM 2020','<h1>Table of Contents</h1>\r\n\r\n<ul>\r\n  <li><a href=\"#previous\">Previously Interviewed Projects</a></li>\r\n  <li><a href=\"#missed\">Projects we did not get to Interview (yet)</a></li>\r\n  <li><a href=\"#0_A.D\">0 A.D.</a></li>\r\n  <li><a href=\"#AdoptOpenJDK\">AdoptOpenJDK</a></li>\r\n  <li><a href=\"#Apache_Camel\">Apache Camel</a></li>\r\n  <li><a href=\"#Checkmk\">Checkmk</a></li>\r\n  <li><a href=\"#Coderdojo\">Coderdojo</a></li>\r\n  <li><a href=\"#Eclipse_Foundation\">Eclipse Foundation</a></li>\r\n  <li><a href=\"#GitLab\">GitLab</a></li>\r\n  <li><a href=\"#GNU_Health\">GNU Health</a></li>\r\n  <li><a href=\"#Javascript\">Javascript</a></li>\r\n  <li><a href=\"#Jenkins-x\">Jenkins-x</a></li>\r\n  <li><a href=\"#Kopano\">Kopano</a></li>\r\n  <li><a href=\"#KubeVirt_Metal3\">KubeVirt and Metal3</a></li>\r\n  <li><a href=\"#Micropython_Espruino\">Micropython and Espruino</a></li>\r\n  <li><a href=\"#Nuspell\">Nuspell</a></li>\r\n  <li><a href=\"#openHAB\">openHAB</a></li>\r\n  <li><a href=\"#OpenStack_Foundation\">OpenStack Foundation</a></li>\r\n  <li><a href=\"#OpenTAP\">OpenTAP</a></li>\r\n  <li><a href=\"#OpenUK\">OpenUK</a></li>\r\n  <li><a href=\"#openWifi\">openWifi</a></li>\r\n  <li><a href=\"#OWASP\">OWASP</a></li>\r\n  <li><a href=\"#Percona\">Percona</a></li>\r\n  <li><a href=\"#PineTime\">PineTime</a></li>\r\n  <li><a href=\"#PostGraphile\">PostGraphile</a></li>\r\n  <li><a href=\"#Skolelinux_AlekSIS_Teckids\">Skolelinux / AlekSIS / Teckids</a></li>\r\n  <li><a href=\"#Technoethical\">Technoethical</a></li>\r\n  <li><a href=\"#TinyGo\">Tiny Go</a></li>\r\n  <li><a href=\"#XCP-ng\">XCP-ng</a></li>\r\n  <li><a href=\"#Zenroom\">Zenroom</a></li>\r\n  <li><a href=\"#fenster-full\">Fenster</a></li>\r\n</ul>\r\n\r\n<h2 id=\"previous\">Previously Interviewed Projects</h2>\r\n<ul>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2224#K2.3\">Apache Software Foundation</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2226#AW.4\">Automotive Grade Linux</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.10\">CentOS</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.5\">CiviCRM</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2226#AW.1\">Coreboot</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1B.4\">Debian</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=1702\">Flashrom</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1C.7b\">Foreman</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.7\">FreeBSD Project</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1C.1\">Free Software Foundation Europe</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1B.2\">Gentoo Linux</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.2\">GNOME</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2227#H.1\">Godot Engine</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2225#K2.15b\">Google Summer of Code</a> (Saturday)</li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=1932\">Grafana</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1B.1b\">Haiku</a> (Saturday)</li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.8\">illumos</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2226#AW.5\">Infobooth on amateur radio</a> (HAM Radio)</li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2224#K2.5\">Jenkins</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.1\">KDE</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.3\">LibreOffice</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=1746\">Linux Professional Institute</a> (Saturday)</li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2225#K2.19\">Matrix</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2224#K2.1\">Mozilla</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2225#K2.18\">Musescore</a> (Saturday)</li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1B.6\">Nextcloud</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2226#AW.7\">OpenEmbedded</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=1957#OpenMandriva\">OpenMandriva</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.9\">openSUSE Project</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1C.7a\">oVirt</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2224#K2.4\">OW2 Open Source Community</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2225#K2.11\">Perl</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1B.5\">PostgreSQL</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2223#K1B.1a\">ReactOS</a> (Sunday)</li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=1697\">Software Freedom Conservancy</a> (Sunday)</li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2222#K1A.11\">The Fedora Project</a></li>\r\n  <li><a href=\"https://hackerpublicradio.org/eps.php?id=2227#H.5\">wolfSSL</a></li>\r\n</ul>\r\n\r\n<h2 id=\"missed\">Projects we did not get to Interview (yet)</h2>\r\n<ul>\r\n  <li><a href=\"https://3box.io/\">3Box</a> (Sunday)</li>\r\n  <li><a href=\"https://www.davx5.com/\">Davx</a></li>\r\n  <li><a href=\"https://fossasia.org/\">FOSSASIA</a> (Sunday)</li>\r\n  <li><a href=\"https://freeculturepodcasts.org/\">Free Culture Podcasts</a> (Sunday)</li>\r\n  <li><a href=\"https://www.linphone.org/\">Linphone</a></li>\r\n  <li><a href=\"https://www.linuxboot.org/\">LinuxBoot</a></li>\r\n  <li><a href=\"https://mattermost.com/\">Mattermost</a></li>\r\n  <li><a href=\"https://www.mautic.org\">Mautic</a> (Saturday)</li>\r\n  <li><a href=\"https://appinventor.mit.edu/\">MIT App Inventor</a> (Sunday)</li>\r\n  <li><a href=\"https://www.ntop.org/\">ntopng</a> (Sunday)</li>\r\n  <li><a href=\"https://www.onlyoffice.com/\">ONLYOFFICE</a></li>\r\n  <li><a href=\"https://opensourcedesign.net\">Open Source Design</a> (Sunday)</li>\r\n  <li><a href=\"https://kiwitcms.org/\">Open Source Test Management</a> (Sunday)</li>\r\n  <li><a href=\"https://pharo.org/\">Pharo</a> (Sunday)</li>\r\n  <li><a href=\"https://pine64.org/\">PINE64</a> (Sunday)</li>\r\n  <li><a href=\"https://raku.org/\">Raku</a></li>\r\n  <li><a href=\"https://sugarlabs.org/\">Sugar Labs</a> (Saturday)</li>\r\n  <li><a href=\"https://syndesis.io/\">Syndesis</a></li>\r\n  <li><a href=\"https://github.com/tine20/tine20\">Tine 2.0</a> (Saturday)</li>\r\n  <li><a href=\"https://www.algoo.fr/fr/tracim\">Tracim</a> (Sunday)</li>\r\n  <li><a href=\"https://yottadb.com/\">YottaDB</a></li>\r\n</ul>\r\n\r\n<h2 id=\"0_A.D\">0 A.D.</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/0_A.D.png\"/></p>\r\n<blockquote cite=\"https://en.wikipedia.org/wiki/0_A.D._(video_game)\">\r\n0 A.D. is a free and open-source, real-time strategy game under development by Wildfire Games. It is a historical war and economy game focusing on the years between 500 BC and 1 BC for the first part, and a planned second part for the years 1 AD to 500 AD. The game is cross-platform, playable on Windows, macOS, FreeBSD, Linux, and OpenBSD. It aims to be entirely free and open-source, using the GPLv2+ license for the game engine and CC BY-SA for the game art. \r\n</blockquote>\r\n\r\n<blockquote cite=\"https://wildfiregames.com/\">\r\nWildfire Games is a global group of volunteer game developers. We create open source games and mods.\r\n</blockquote>\r\n<h3>Listen to the interview with Stanislas Dolcini from 0 A.D.</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/0_A.D-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=94.000000,211.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=94.000000,211.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://play0ad.com\">https://play0ad.com</a></li>\r\n<li>Source Code: <a href=\"https://github.com/StanleySweet?tab=repositories\">https://github.com/StanleySweet?tab=repositories</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/0_A.D._(video_game)\">https://en.wikipedia.org/wiki/0_A.D._(video_game)</a></li>\r\n<li><a href=\"https://wildfiregames.com/\">https://wildfiregames.com/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"AdoptOpenJDK\">AdoptOpenJDK</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/AdoptOpenJDK.png\"/></p>\r\n<blockquote cite=\"https://adoptopenjdk.net/\">\r\nPrebuilt OpenJDK Binaries for Free!<br />\r\nJava&#153; is the world\'s leading programming language and platform. AdoptOpenJDK uses infrastructure, build and test scripts to produce prebuilt binaries from OpenJDK&#153; class libraries and a choice of either the OpenJDK HotSpot or Eclipse OpenJ9 VM. All AdoptOpenJDK binaries and scripts are open source licensed and available for free.\r\n</blockquote>\r\n<h3>Listen to the interview with Stewart X Addison AdoptOpenJDK</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/AdoptOpenJDK-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=209.000000,294.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=209.000000,294.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://adoptopenjdk.net/\">https://adoptopenjdk.net/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/AdoptOpenJDK\">https://github.com/AdoptOpenJDK</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/OpenJDK#OpenJDK_builds\">https://en.wikipedia.org/wiki/OpenJDK#OpenJDK_builds</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Apache_Camel\">Apache Camel</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Apache_Camel.png\"/></p>\r\n<blockquote cite=\"https://camel.apache.org/\">\r\nApache Camel is an open source framework for message-oriented middleware with a rule-based routing and mediation engine that provides a Java object-based implementation of the Enterprise Integration Patterns using an application programming interface (or declarative Java domain-specific language) to configure routing and mediation rules. The domain-specific language means that Apache Camel can support type-safe smart completion of routing rules in an integrated development environment using regular Java code without large amounts of XML configuration files, though XML configuration inside Spring Framework is also supported. Camel is often used with Apache ServiceMix, Apache ActiveMQ and Apache CXF in service-oriented architecture projects. \r\n</blockquote>\r\n<h3>Listen to the interview with Rachel Yord&#225;n from Apache Camel</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Apache_Camel-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=304.000000,420.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=304.000000,420.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://camel.apache.org/\">https://camel.apache.org/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/apache/camel/\">https://github.com/apache/camel/</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Apache_Camel\">https://en.wikipedia.org/wiki/Apache_Camel</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Checkmk\">Checkmk</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Checkmk.png\"/></p>\r\n<blockquote cite=\"https://checkmk.com/\">\r\nBest-in-class infrastructure and application monitoring. Helping you stay up and running from simple to the most complex environments.\r\n</blockquote>\r\n<h3>Listen to the interview with Marcel Arentz from Checkmk</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=409.000000,529.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=409.000000,529.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://checkmk.com/\">https://checkmk.com/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/tribe29/checkmk\">https://github.com/tribe29/checkmk</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Check_MK\">https://en.wikipedia.org/wiki/Check_MK</a></li>\r\n<li><a href=\"https://tribe29.com/\">https://tribe29.com/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Coderdojo\">Coderdojo</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Coderdojo.png\"/></p>\r\n<blockquote cite=\"https://coderdojobelgium.be/en\">\r\nCoderDojo organizes free coding workshops (called Dojo&#146;s) for girls and boys from 7 to 18 years old. A Dojo is entirely prepared and led by volunteers. If you are older, then you can help out at an existing Dojo or start your very own CoderDojo!      \r\n</blockquote>\r\n<h3>Listen to the interview with Coderdojo</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=536.000000,708.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=536.000000,708.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://coderdojobelgium.be/en\">https://coderdojobelgium.be/en</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/CoderDojo\">https://en.wikipedia.org/wiki/CoderDojo</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Eclipse_Foundation\">Eclipse Foundation</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Eclipse_Foundation.png\"/></p>\r\n<blockquote cite=\"https://www.eclipse.org/org/\">\r\nThe Eclipse Foundation provides our global community of individuals and organizations with a mature, scalable, and business-friendly environment for open source software collaboration and innovation. The Foundation is home to the Eclipse IDE, Jakarta EE, and over 350 open source projects, including runtimes, tools, and frameworks for a wide range of technology domains such as the Internet of Things, automotive, geospatial, systems engineering, and many others.\r\n</blockquote>\r\n<h3>Listen to the interview with Mika&#235;l Barbero, Release Engineer, Eclipse Foundation</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Eclipse_Foundation-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=717.000000,801.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=717.000000,801.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.eclipse.org/org/\">https://www.eclipse.org/org/</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Eclipse_Foundation\">https://en.wikipedia.org/wiki/Eclipse_Foundation</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"GitLab\">GitLab</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/GitLab.png\"/></p>\r\n<blockquote cite=\"https://en.wikipedia.org/wiki/GitLab\">\r\nGitLab is a web-based DevOps lifecycle tool that provides a Git-repository manager providing wiki, issue-tracking and CI/CD pipeline features, using an open-source license, developed by GitLab Inc.\r\n</blockquote>\r\n<h3>Listen to the interview with David Planella Director Of Community Relations at GitLab</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/GitLab-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=807.000000,917.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=807.000000,917.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://about.gitlab.com/\">https://about.gitlab.com/</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/GitLab\">https://en.wikipedia.org/wiki/GitLab</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"GNU_Health\">GNU Health</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/GNU_Health.png\"/></p>\r\n<blockquote cite=\"https://www.gnuhealth.org/#/about\">\r\nGNU Health combines the socioeconomic determinants of health with state-of-the-art technology in bioinformatics and clinical genetics. It manages the internal processes of a health institution, such as financial management, stock and pharmacies or laboratories (LIMS)\r\n</blockquote>\r\n<h3>Listen to the interview with Axel K. Braun about GNU Health</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/GNU_Health-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=926.000000,1113.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=926.000000,1113.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.gnuhealth.org/\">https://www.gnuhealth.org/</a></li>\r\n<li>Source Code: <a href=\"https://savannah.gnu.org/projects/health\">https://savannah.gnu.org/projects/health</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/GNU_Health\">https://en.wikipedia.org/wiki/GNU_Health</a></li>\r\n<li><a href=\"https://www.gnusolidario.org/\">https://www.gnusolidario.org/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Javascript\">Javascript</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Javascript.png\"/></p>\r\n<blockquote cite=\"https://hackages.io/\">\r\nHackages is a community-based tech company with education at its core. We help you boost your skills and realise your projects through our expertise in training, product development, consultancy and community building.\r\n</blockquote>\r\n<h3>Listen to the interview with Marta Moliz about Javascript</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Javascript-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=1122.000000,1246.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=1122.000000,1246.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/JavaScript\">https://en.wikipedia.org/wiki/JavaScript</a></li>\r\n<li><a href=\"https://hackages.io/\">https://hackages.io/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Jenkins-x\">Jenkins-x</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Jenkins-x.png\"/></p>\r\n<blockquote cite=\"https://jenkins-x.io/\">\r\nJenkins X provides pipeline automation, built-in GitOps, and preview environments to help teams collaborate and accelerate their software delivery at any scale.\r\n</blockquote>\r\n<h3>Listen to the interview with Kara de la Marck, Open Source Community Manager at CloudBees, about Jenkins-x</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Jenkins-x-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=1254.000000,1413.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=1254.000000,1413.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://jenkins-x.io/\">https://jenkins-x.io/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/jenkins-x\">https://github.com/jenkins-x</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Jenkins_(software)\">https://en.wikipedia.org/wiki/Jenkins_(software)</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Kopano\">Kopano</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Kopano.png\"/></p>\r\n<blockquote cite=\"https://kopano.io/\">\r\n100% Open source collaboration tools: email, calendaring, Mattermost chat, webRTC video meetings, document collaboration with LibreOffice Online, integration with file storage services and more.\r\n</blockquote>\r\n<h3>Listen to the interview with Brian Joseph about Kopano</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Kopano-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=1421.000000,1740.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=1421.000000,1740.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://kopano.io/\">https://kopano.io/</a></li>\r\n<li>Source Code: <a href=\"https://stash.kopano.io/repos?visibility=public\">https://stash.kopano.io/repos?visibility=public</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Kopano_(software)\">https://en.wikipedia.org/wiki/Kopano_(software)</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"KubeVirt_Metal3\">KubeVirt and Metal3</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/KubeVirt.png\"/></p>\r\n<blockquote cite=\"https://kubevirt.io/\">\r\nVirtual Machine Management on Kubernetes. Building a virtualization API for Kubernetes. KubeVirt technology addresses the needs of development teams that have adopted or want to adopt Kubernetes but possess existing Virtual Machine-based workloads that cannot be easily containerized. More specifically, the technology provides a unified development platform where developers can build, modify, and deploy applications residing in both Application Containers as well as Virtual \r\n</blockquote>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Metal3.png\"/></p>\r\n<blockquote cite=\"https://metal3.io/\">\r\nThere are a number of great open source tools for bare metal host provisioning, including Ironic. Metal3.io aims to build on these technologies to provide a Kubernetes native API for managing bare metal hosts via a provisioning stack that is also running on Kubernetes. We believe that Kubernetes Native Infrastructure, or managing your infrastructure just like your applications, is a powerful next step in the evolution of infrastructure management.\r\n</blockquote>\r\n<h3>Listen to the interview with KubeVirt and Metal3</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=1742.000000,1902.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=1742.000000,1902.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://kubevirt.io/\">https://kubevirt.io/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/kubevirt\">https://github.com/kubevirt</a></li>\r\n<li>Project Website: <a href=\"https://metal3.io/\">https://metal3.io/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/metal3-io/metal3-docs\">https://github.com/metal3-io/metal3-docs</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Micropython_Espruino\">Micropython and Espruino</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Micropython.png\"/></p>\r\n<blockquote cite=\"https://micropython.org/\">\r\nMicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of the Python standard library and is optimised to run on microcontrollers and in constrained environments. \r\n</blockquote>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Espruino.png\"/></p>\r\n<blockquote cite=\"\">\r\nEspruino is an open-source JavaScript interpreter for microcontrollers. It is designed for devices with small amounts of RAM (as low as 8kB). Espruino was created by Gordon Williams in 2012 as an attempt to make microcontroller development truly multiplatform. It was made open-source in 2013 after a successful Kickstarter campaign for a development board running the software.\r\n</blockquote>\r\n<h3>Listen to the interview with Christine Spindler from Micropython and Gordon Williams from Espruino</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Micropython_Espruino-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=1910.000000,2248.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=1910.000000,2248.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://micropython.org/\">https://micropython.org/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/micropython\">https://github.com/micropython</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/MicroPython\">https://en.wikipedia.org/wiki/MicroPython</a></li>\r\n<li>Project Website: <a href=\"https://www.espruino.com/\">https://www.espruino.com/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/espruino\">https://github.com/espruino</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Espruino\">https://en.wikipedia.org/wiki/Espruino</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Nuspell\">Nuspell</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Nuspell.png\"/></p>\r\n<blockquote cite=\"\">\r\n</blockquote>\r\n<h3>Listen to the interview with Sander van Geloven from Nuspell</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Nuspell-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=2244.000000,2460.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=2244.000000,2460.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://nuspell.github.io\">https://nuspell.github.io</a></li>\r\n<li>Source Code: <a href=\"https://github.com/nuspell/nuspell\">https://github.com/nuspell/nuspell</a></li>\r\n<li><a href=\"https://hellebaard.nl\">https://hellebaard.nl</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"openHAB\">openHAB</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/openHAB.png\"/></p>\r\n<blockquote cite=\"\">\r\nEmpowering the smart home. A vendor and technology agnostic open source automation software for your home.\r\n</blockquote>\r\n<h3>Listen to the interview with Thomas Bail about openHAB</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=2465.000000,2625.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=2465.000000,2625.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.openhab.org/\">https://www.openhab.org/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/openhab\">https://github.com/openhab</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/OpenHAB\">https://en.wikipedia.org/wiki/OpenHAB</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"OpenStack_Foundation\">OpenStack Foundation</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/OpenStack_Foundation.png\"/></p>\r\n<blockquote cite=\"\">\r\nThe OpenStack Foundation promotes the global development, distribution and adoption of open infrastructure with more than 105,000 community members from 187 countries around the world. The OpenStack Foundation was founded in September 2012 to provide an independent home for the OpenStack cloud operating system, which has since become one of the largest and most diverse open source projects in history.\r\n</blockquote>\r\n<h3>Listen to the interview with Jeremy Stanley about OpenStack Foundation</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=2634.000000,2734.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=2634.000000,2734.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.openstack.org/foundation/\">https://www.openstack.org/foundation/</a></li>\r\n<li>Source Code: <a href=\"https://opendev.org/openstack\">https://opendev.org/openstack</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/OpenStack\">https://en.wikipedia.org/wiki/OpenStack</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"OpenTAP\">OpenTAP</h2>\r\n<p><img alt=\"Logo\" src=\"https://hackerpublicradio.org/eps/hpr3022/OpenTAP.png\"/></p>\r\n<blockquote cite=\"https://www.opentap.io/\">\r\nOpenTAP is an open source project for test automation. An open source test sequencing engine. The project is available online at \r\nhttps://Gitlab.com/OpenTAP/OpenTAP\r\n</blockquote>\r\n<h3>Listen to the interview with Michael Dieudonn&#233; about OpenTAP</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=2743.000000,2817.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=2743.000000,2817.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.opentap.io/\">https://www.opentap.io/</a></li>\r\n<li>Source Code: <a href=\"https://gitlab.com/OpenTAP/opentap\">https://gitlab.com/OpenTAP/opentap</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"OpenUK\">OpenUK</h2>\r\n<p><img alt=\"Logo\" src=\"https://hackerpublicradio.org/eps/hpr3022/OpenUK.png\"/></p>\r\n<blockquote cite=\"\">\r\nWe are a UK organisation committed to develop and sustain UK leadership in Open Technology. We promote businesses, projects and people, who use Open. We strive to collaborate across all existing organisations for Open.\r\n</blockquote>\r\n<h3>Listen to the interview with Amanda Brock about OpenUK</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/OpenUK-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=2826.000000,3000.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=2826.000000,3000.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://openuk.uk\">https://openuk.uk</a></li>\r\n<li><a href=\"https://openuk.uk/profiles/amanda-brock/\">https://openuk.uk/profiles/amanda-brock/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"openWifi\">openWifi</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/openWifi.png\"/></p>\r\n<blockquote cite=\"\">\r\nopenwifi: Linux mac80211 compatible full-stack IEEE802.11/Wi-Fi design based on SDR (Software Defined Radio).\r\n</blockquote>\r\n<h3>Listen to the interview with XianJun Jiao about openWifi</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/openWifi-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=3007.000000,3432.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=3007.000000,3432.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Source Code: <a href=\"https://github.com/open-sdr/openwifi\">https://github.com/open-sdr/openwifi</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"OWASP\">OWASP</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/OWASP.png\"/></p>\r\n<blockquote cite=\"\">\r\nThe Open Web Application Security Project (OWASP) is a nonprofit foundation that works to improve the security of software. Through community-led open source software projects, hundreds of local chapters worldwide, tens of thousands of members, and leading educational and training conferences, the OWASP Foundation is the source for developers and technologists to secure the web.\r\n</blockquote>\r\n<h3>Listen to the interview with Antonis Manaras about OWASP</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/OWASP-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=3422.000000,3547.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=3422.000000,3547.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://owasp.org/\">https://owasp.org/</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/OWASP\">https://en.wikipedia.org/wiki/OWASP</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Percona\">Percona</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Percona.png\"/></p>\r\n<blockquote cite=\"\">\r\nPercona is a leading provider of unbiased open source database solutions that allow organizations to easily, securely and affordably maintain business agility, minimize risks, and stay competitive.\r\n</blockquote>\r\n<h3>Listen to the interview with Evgeniy Patlan about Percona</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=3554.000000,3598.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=3554.000000,3598.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.percona.com/\">https://www.percona.com/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"PineTime\">PineTime</h2>\r\n<p><img alt=\"Logo\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/PineTime.png\"/></p>\r\n<blockquote cite=\"https://wiki.pine64.org/index.php/PineTime\">\r\nAn Open Source Smartwatch For Your Favorite Devices. Low Cost, High Fidelity.\r\n<br />\r\nThe PineTime is a free and open source smartwatch capable of running custom-built open operating systems. Some of the notable features include a heart rate monitor, a week-long battery as well as a capacitive touch IPS display that is legible in direct sunlight. It is a fully community driven side-project, which means that it will ultimately be up to the developers and end-users to determine when they deem the PineTime ready to ship. \r\n</blockquote>\r\n<h3>Listen to the interview with Koen Zandberg about PineTime</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/PineTime-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=3607.000000,3855.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=3607.000000,3855.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.pine64.org/pinetime/\">https://www.pine64.org/pinetime/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/bergzand\">https://github.com/bergzand</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Pine_Microsystems\">https://en.wikipedia.org/wiki/Pine_Microsystems</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"PostGraphile\">PostGraphile</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/PostGraphile.png\"/></p>\r\n<blockquote cite=\"https://www.graphile.org/\">\r\nExtensible high-performance automatic GraphQL API for PostgreSQL\r\n</blockquote>\r\n<h3>Listen to the interview with Benjie Gillam, OSS Maintainer PostGraphile</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/PostGraphile-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=3865.000000,4085.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=3865.000000,4085.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.graphile.org/\">https://www.graphile.org/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/graphile\">https://github.com/graphile</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Skolelinux_AlekSIS_Teckids\">Skolelinux / AlekSIS / Teckids</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Skolelinux_AlekSIS_Teckids.png\"/></p>\r\n<blockquote cite=\"https://www.teckids.org/en/\">\r\nAt Teckids, all children and adolescents become part of the Free Software community - as users and contributors. Our young tutors aged between 9 and 16 regularly work together on their workshops, which they then lead for children and adolescents of the same age.\r\n</blockquote>\r\n<h3>Listen to the interview with Niels Bradek from Skolelinux / AlekSIS / Teckids</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=4010.000000,4215.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=4010.000000,4215.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://www.teckids.org/en/\">https://www.teckids.org/en/</a></li>\r\n<li><a href=\"https://wiki.debian.org/DebianEdu/\">https://wiki.debian.org/DebianEdu/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Technoethical\">Technoethical</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Technoethical.png\"/></p>\r\n<blockquote cite=\"\">\r\nTechnoethical is an online shop that sells hardware compatible with operating systems that fully respect users\' freedom as defined by the GNU Project. We are based in Bucharest, Romania (European Union) and we ship worldwide.\r\n</blockquote>\r\n<h3>Listen to the interview with Tiberiu Turbureanu about Technoethical</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=4224.000000,4720.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=4224.000000,4720.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://tehnoetic.com/\">https://tehnoetic.com/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"TinyGo\">Tiny Go</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/TinyGo.png\"/></p>\r\n<blockquote cite=\"\">\r\nTinyGo is a project to bring the Go programming language to microcontrollers and modern web browsers by creating a new compiler based on LLVM. You can compile and run TinyGo programs on several different microcontroller boards such as the BBC micro:bit and the Arduino Uno. TinyGo can also be used to produce WebAssembly (WASM) code which is very compact in size.\r\n</blockquote>\r\n<h3>Listen to the interview with Ron \"Dead Program\" Evans about Tiny Go</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=4729.000000,5086.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=4729.000000,5086.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://tinygo.org/\">https://tinygo.org/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/tinygo-org/tinygo\">https://github.com/tinygo-org/tinygo</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Go_(programming_language)\">https://en.wikipedia.org/wiki/Go_(programming_language)</a></li>\r\n<li><a href=\"https://hybridgroup.com/\">https://hybridgroup.com/</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"XCP-ng\">XCP-ng</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/XCP-ng.png\"/></p>\r\n<blockquote cite=\"https://xcp-ng.org/\">\r\nTurnkey Open Source Hypervisor. Based on XenServer, XCP-ng is the result of massive cooperation between individuals and companies, to deliver a product without limits. No restrictions on features and every bit available on GitHub! \r\n</blockquote>\r\n<h3>Listen to the interview with Olivier Lambert about XCP-ng</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/XCP-ng-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=5086.000000,5206.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=5086.000000,5206.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://xcp-ng.org/\">https://xcp-ng.org/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/xcp-ng\">https://github.com/xcp-ng</a></li>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Hypervisor\">https://en.wikipedia.org/wiki/Hypervisor</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"Zenroom\">Zenroom</h2>\r\n<p><img alt=\"Logo\" height=\"80\" src=\"https://hackerpublicradio.org/eps/hpr3022/Zenroom.png\"/></p>\r\n<blockquote cite=\"https://zenroom.org/\">\r\nZenroom: easy cryptography to the people. Zenroom is a tiny and portable virtual machine that authenticates and manages access to data using human-readable smart contracts. Zenroom is easy to program to performs fast cryptographic operations for end-to-end encryption and runs on: desktop, embedded, mobile phones, clouds and web browsers.\r\n</blockquote>\r\n<h3>Listen to the interview with Denis \"Jaromil\" Roio from Zenroom</h3>\r\n<p><img alt=\"headshot\" height=\"300\" src=\"https://hackerpublicradio.org/eps/hpr3022/Zenroom-headshot.png\"/></p>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=5214.000000,5496.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=5214.000000,5496.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Project Website: <a href=\"https://zenroom.org/\">https://zenroom.org/</a></li>\r\n<li>Source Code: <a href=\"https://github.com/DECODEproject/zenroom/\">https://github.com/DECODEproject/zenroom/</a></li>\r\n<li><a href=\"https://dyne.org\">https://dyne.org</a></li>\r\n</ul>\r\n\r\n\r\n<h2 id=\"fenster-full\">Fenster</h2>\r\n<h3>Fenster - Free Software Song</h3>\r\n<p><audio controls preload=\"none\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.ogg#t=5492.000000,5666.000000\" type=\"audio/ogg\">\r\n<source src=\"https://hackerpublicradio.org/local/hpr3022.mp3#t=5492.000000,5666.000000\" type=\"audio/mpeg\">\r\n</audio></p>\r\n<h3>Links</h3>\r\n\r\n<ul>\r\n<li>Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Free_Software_Song\">https://en.wikipedia.org/wiki/Free_Software_Song</a></li>\r\n<li>Official: <a href=\"https://www.gnu.org/music/free-software-song.html\">https://www.gnu.org/music/free-software-song.html</a></li>\r\n<li>Remix: <a href=\"https://freesoft.potlatch20.net/\">https://freesoft.potlatch20.net/</a></li>\r\n<li>RMS sings: <a href=\"https://www.youtube.com/watch?v=1BH7poMtPVU\">https://www.youtube.com/watch?v=1BH7poMtPVU</a></li>\r\n<li>GNU: <a href=\"https://audio-video.gnu.org/audio\">https://audio-video.gnu.org/audio</a></li>\r\n</ul>\r\n<pre>Track name : Free Software Song\r\nPerformer : Fenster\r\nRecorded date : 2002\r\nCopyright : Copyright (C) 2002, \r\nFenster LLC. Verbatim copying of this entire recording is permitted in any medium, \r\nprovided this notice is preserved. \r\nPerformers: \r\nPaul Robinson (vocals), \r\nRoman Kravec (guitar), \r\nEd D\'Angelo (bass), \r\nDave Newman (drums), \r\nBrian Yarbrough (trumpet), \r\nTony Moore (trumpet). \r\n</pre>\r\n\r\n',30,78,0,'CC-BY-SA','FOSDEM 2020',0,0,1),
(3023,'2020-03-04','Critique My Script, Episode 1 - Qots-Crew-Gen',782,'Discussion of using a shell script to randomly generate a ten man aircrew.','<p>This is my second HPR episode and the first in what could be a series about shell scripts I have written. This episode goes through a short script which randomly generates first and last names for a ten man aircrew to use with the Avalon Hill game B-17 Queen of the Skies.</p>\r\n<p>You can see the basic script in action here:<br />\r\n<a href=\"https://www.sodface.com/misc/qots-crew-gen\" class=\"uri\">https://www.sodface.com/misc/qots-crew-gen</a></p>\r\n<p>and a more complicated version here, though based on the same underlying methodolgy:<br />\r\n<a href=\"https://www.sodface.com/misc/qots-crew-gen2\" class=\"uri\">https://www.sodface.com/misc/qots-crew-gen2</a></p>\r\n<p>Here’s the script:</p>\r\n<pre><code>#!/bin/sh\r\n\r\nfirst_names=&#39;./firstnames.txt&#39;\r\nlast_names=&#39;./surnames.txt&#39;\r\ncrew_positions=&#39;./positions.txt&#39;\r\ncrew_ranks=&#39;./ranks.txt&#39;\r\n\r\nlen_first_names=$(wc -l &lt; ${first_names})\r\nlen_last_names=$(wc -l &lt; ${last_names})\r\n\r\nnum_pairs=$(printf &quot;10 ${len_first_names} ${len_last_names}&quot; | \\\r\n    awk &#39;BEGIN { srand() }\r\n    { for (i=1; i&lt;=$1; i++) {\r\n        for(f = 2; f &lt;= NF; f++) {\r\n        num=int(rand() * $f + 1); printf num&quot;,&quot; } printf &quot;\\n&quot;\r\n    }\r\n    }&#39;)\r\n\r\ni=1\r\n\r\nfor crew_member in ${num_pairs}\r\ndo\r\n  line_num=$(printf &quot;${crew_member}&quot; | cut -d&#39;,&#39; -f1)\r\n  first_name=$(sed -n ${line_num}p ${first_names})\r\n\r\n  line_num=$(printf &quot;${crew_member}&quot; | cut -d&#39;,&#39; -f2)\r\n  last_name=$(sed -n ${line_num}p ${last_names})\r\n\r\n  crew_position=$(sed -n ${i}p ${crew_positions})\r\n  crew_rank=$(sed -n ${i}p ${crew_ranks})\r\n\r\n  #\r\n  # Use the variables above to generate HTML.\r\n  # Omitted here to simplify this example.\r\n  #\r\n\r\n  i=$((( ${i} +1 )))\r\ndone</code></pre>\r\n',380,0,0,'CC-BY-SA','Shell Script,Random Numbers,Awk',0,0,1),
(3024,'2020-03-05','A funny thing happened the other day',259,'Describing a funny thing that happened the other day.','<p>Equipment used</p>\r\n<ul>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Nexus_7_(2013)\">Nexus 7 tablet</a></p></li>\r\n<li><p><a href=\"https://www.amazon.co.uk/HccToo-Multifunctional-Rechargeable-Dictaphone-Conversation/dp/B015H9JP6S/ref=sr_1_1?ie=UTF8&amp;qid=1502381150&amp;sr=8-1&amp;keywords=dictation+machines\">My faithful Dictaphone</a></p></li>\r\n<li><p>Noise source<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3024_noise-source.JPG\" alt=\"Noise source\" width=\"400\" height=\"400\" /></p></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','story, audio, sound',0,0,1),
(3027,'2020-03-10','What is quantum computing and why should we care?',1515,'What is all the quantum computing hype about & what is it that quantum computers will be able to do?','<h3 id=\"what-are-quantum-computers-anyway\">What are quantum computers anyway?</h3>\r\n<p>Physical computing systems that take advantage of quantum effects.</p>\r\n<h3 id=\"what-kind-of-quantum-effects-and-why-does-that-matter\">What kind of quantum effects, and why does that matter?</h3>\r\n<p>Entanglement and superposition: Entanglement lets us do unusual, head-scratching kinds of things like teleportation. Superposition lets us harness the almost unimaginable potential of quantum mechanics to do things that conventional computers can never do.</p>\r\n<h3 id=\"how-can-you-ever-explain-that-in-a-podcast\">How can you ever explain that in a podcast?</h3>\r\n<p>To really understand the details, you must have math, but math and audio formats are not so compatible. So I use analogies, and throw in some pithy quotes from Einstein and hope that does the trick.</p>\r\n<h3 id=\"big-picture\">Big picture?</h3>\r\n<p>Lots of work going on to build quantum processors (QPUs) that use quantum memory and, get this, will at some point actually do error correction. There are programming frameworks and rudimentary compilers to compile down python code all the way down to microwave pulses and laser pulses and there is control machinery to gather back the signals and interpret them to ones and zeros. Quantum computers will be securely networked using quantum protocols and we’ll all live happily ever after in a quantum computing world.</p>\r\n<p><b>Questions?</b> Please leave suggestions if you want to dive a bit deeper in some topic areas - it’ll encourage me to do more episodes.</p>\r\n',379,0,0,'CC-BY-SA','quantum computing',0,0,1),
(3028,'2020-03-11','Monads and Haskell',1275,'A hopefully not too rambly \"introduction\" to  functors and monads in and out of haskell','<p>This is basically a transcript of the post I wrote on the subject which I host <a href=\"https://www.crvs.xyz/posts_haskeljoin.html\">here</a> It has a bit more than what I talked about</p>\r\n<h1 id=\"join-in-haskell\">Join in Haskell</h1>\r\n<p><code>join</code> is a monadic operation, instead of working only on lists, it works on monads and has the signature:</p>\r\n<pre><code>   join :: Monad m =&gt; m ( m a ) -&gt; (m a)\r\n</code></pre>\r\n<p>In effect it <code>joins</code> or <code>merges</code> two successive monad applications into a single monad application. But join is not part of the canonical monad definition, which is given by:</p>\r\n<pre><code>   return ::  Monad m =&gt; a -&gt; m a` ; and`\r\n   (&gt;&gt;=) :: Monad m =&gt; m a -&gt; ( a -&gt; m b ) -&gt; m b\r\n</code></pre>\r\n<p>A good or rather trivial way to think of the relationship between <code>return</code> <code>join</code> and <code>(&gt;&gt;=)</code> is that in essence, since each monad is a functor, then what <code>(&gt;&gt;=)</code> does is that it maps the second argument over the first argument, and then uses <code>join</code> to merge the two applications of the monad constructor, i.e.:</p>\r\n<pre><code>  (x &gt;&gt;= f) = join $ fmap f x\r\n</code></pre>\r\n<p>However, join needs to be constructed from <code>return</code> and <code>(&gt;&gt;=)</code>. The naive solution is that we want to <code>trick</code> <code>(&gt;&gt;=)</code> to let us apply a function that does not pile up yet another <code>m</code> onto our initial type <code>m (m a)</code> and surprisingly, this will actually work if we let</p>\r\n<pre><code>   join x = (x &gt;&gt;= id)\r\n</code></pre>\r\n<p>Initially this is surprising since <code>id</code> has the signature <code>(c -&gt; c)</code> instead of the necessary <code>a -&gt; m b</code>! However, when <code>c</code> is not an atomic type, but rather of the form <code>m d</code> for some (maybe atomic) type <code>d</code>, then we actually have the signature <code>m d -&gt; m d</code>, and if we bind type <code>a</code> to <code>m d</code> and type <code>b</code> to <code>d</code>, we obtain <code>id</code> with actual type signatuare <code>a -&gt; m b</code>, and it can indeed be used as the second argument of <code>(&gt;&gt;=)</code>, and everything actually makes sense.</p>\r\n<p>Now style is important and so we can do an eta reduction on this, to get a point-free implementation by simply binding the second argument of <code>&gt;&gt;=</code>:</p>\r\n<pre><code>   join = (&gt;&gt;= id)\r\n</code></pre>\r\n<p>This is all fine and well for the type number, and it <em>does</em> work, but it\'s also important to understand how it works, so let\'s see it in a simple example, using the <code>Maybe</code> monad. So let\'s start by refreshing the implementation of the monad instance:</p>\r\n<pre><code>instance Monad Maybe where\r\n\r\n   (&gt;&gt;=) :: Maybe a -&gt; (a -&gt; Maybe b) -&gt; Maybe b\r\n   (&gt;&gt;=) Nothing _ = Nothing\r\n   (&gt;&gt;=) (Just x) f = f x\r\n\r\n   return :: a -&gt; Maybe a\r\n   return = Just\r\n</code></pre>\r\n<p>So let\'s now go through the successive bindings when performing <code>(&gt;&gt;=id)</code>:</p>\r\n<pre><code>   Just x = Just (Just 2) =&gt; x = Just 2\r\n   Just x &gt;&gt;= id = id x = x\r\n   x = Just 2\r\n</code></pre>\r\n<p>This example is pretty much verbatim the same thing for the <code>Either</code> monad and many other monads that follow a similar principle, so let\'s look at a bit more of a complex example. Let\'s look at the <code>List</code> monad:</p>\r\n<p>instance Monad List where</p>\r\n<pre><code>   (&gt;&gt;=) :: [a] -&gt; (a -&gt; [b]) -&gt; [b]\r\n   (&gt;&gt;=) [] _ = []\r\n   (&gt;&gt;=) (x:xs) f = f x ++ (xs &gt;&gt;= f)\r\n\r\n   return :: a -&gt; [a]\r\n   return = (:[])\r\n</code></pre>\r\n<p>Following the bindings again we have</p>\r\n<pre><code>   [[2,3],[4]] = (x:xs) =&gt; x = [2,3] ; xs = [[4]]\r\n   (x:xs) &gt;&gt;= id = (id x) ++ (xs &gt;&gt;= id) = x ++ (xs &gt;&gt;= id)\r\n   [[4]] = (y:ys) =&gt; y = [4] ; ys = []\r\n   (y:ys) &gt;&gt;= id = y ++ (ys &gt;&gt;= id)\r\n   ys = [] =&gt; (ys &gt;&gt;= id) = []\r\n   =&gt; (y:ys) &gt;&gt;= id  =  [4] ++ [] = [4]\r\n   =&gt; xs &gt;&gt;= id = [4]\r\n   =&gt; (x:xs) &gt;&gt;= id = x ++ [4] = [2,3] ++ [4] = [2,3,4]\r\n</code></pre>\r\n<p>So all of this is to say that <code>join</code> actually does what one expects it to do on a list of lists. It joins them one by one into a single list.</p>\r\n<h1 id=\"the-associativity-law\">The Associativity Law</h1>\r\n<p>The associativity law of a monad can be quite confusing, after all it takes the form:</p>\r\n<pre><code>   (m &gt;&gt;= f) &gt;&gt;= g == m &gt;&gt;= ( x -&gt; f x &gt;&gt;= g )\r\n</code></pre>\r\n<p>While not too complicated to understand it is difficult to see how it relates to a usual associativity law, which follows the form <code>a * (b * c) = (a * b) * c</code>. To recover the associativity the usual explanation is that one has to see it in terms of the monadic function composition <code>(&gt;=&gt;)</code> and while this is a valid way of doing so, I like to decompose things in terms of <code>fmap</code>, <code>(&gt;&gt;=)</code> and <code>join</code>.</p>\r\n<p>So let\'s use what we did previously on the associativity law, starting on the left side, and replacing the atomic-looking type <code>m</code> with the dependent type <code>M z</code>:</p>\r\n<pre><code>   (M z &gt;&gt;= f) &gt;&gt;= g\r\n   = join (fmap f (M z)) &gt;&gt;= g\r\n   = join (fmap g $ join ( fmap f (M z)))\r\n   = join (fmap g $ join ( M (f z) )\r\n</code></pre>\r\n<p>and the right-hand side:</p>\r\n<pre><code>   M z &gt;&gt;= ( x -&gt; f x &gt;&gt;= g )\r\n   = M z &gt;&gt;= ( x -&gt; join $ fmap g (f x))\r\n   = join $ fmap ( x -&gt; join $ fmap g (f x)) (M z)\r\n   = join $ M ( x -&gt; join $ fmap g (f x)) z\r\n   = join $ M (join $ fmap g (f z))\r\n</code></pre>\r\n<p>And essentially what it says is that if I have two functions <code>f</code> and <code>g</code> I can either do it in an orderly fashion where I apply them sequentially with <code>join . fmap f</code> followed by <code>join . fmap g</code>, or I can apply them both within the constructor and then join once within the constructor and one outside the constructor, and I should get the same thing. In fact if you replace <code>f</code> and <code>g</code> with <code>id</code>; this is the associativity law for monads as usually presented in a standard category theory textbook such as Mac Lane\'s Categories for the Working Mathematician (and recovering this was the whole point of this exercise in the first place).</p>\r\n',385,107,1,'CC-BY-SA','Haskell, Programming, Math',0,0,1),
(3029,'2020-03-12','At Union Station with a train delay',347,'This is a soundscape while waiting for a train at Union Station.','<p>I was waiting for the Metra train, when there was an announcement that the train would be late due to a server failure.</p>',318,101,0,'CC-BY-SA','soundscape, trains',0,0,1),
(3030,'2020-03-13','My new Samsung tablet',1686,'A general discussion about my new 10.5 inch Samsung Galaxy tablet','<ul>\r\n<li><p>Samsung Galaxy Tab A 10.5 inch 2018 Tablet at 3:30<br />\r\n<a href=\"https://www.amazon.co.uk/Samsung-Galaxy-10-5-WiFi-Black/dp/B07GG5DSTW/ref=asc_df_B07GG5DSTW/?tag=googshopuk-21&amp;linkCode=df0&amp;hvadid=310819184817&amp;hvpos=1o1&amp;hvnetw=g&amp;hvrand=16845709935342815174&amp;hvpone=&amp;hvptwo=&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=9046893&amp;hvtargid=aud-858395717453:pla-667424753514&amp;psc=1&amp;th=1&amp;psc=1\">Amazon link</a></p></li>\r\n<li><p>Nexus 7 at 3:50<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Nexus_7_(2013)\" class=\"uri\">https://en.wikipedia.org/wiki/Nexus_7_(2013)</a></p></li>\r\n<li><p>New tablet Battery at 5:20<br />\r\nLithium Polymer batteries, 7300 mAh capacity with claimed 15 hours of video playback on one charge. It seems to charge surprisingly quickly.</p></li>\r\n<li><p>Wikipedia entry for Edinburgh City Bypass at 9:30<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Edinburgh_City_Bypass\" class=\"uri\">https://en.wikipedia.org/wiki/Edinburgh_City_Bypass</a></p></li>\r\n<li><p>Eye strain at 14:07</p></li>\r\n<li><p>Bluetooth Ear buds at 15:15<br />\r\nSimilar to these: <a href=\"https://www.amazon.co.uk/Bluetooth-Wireless-Headphones-Canceling-Compatible-white/dp/B084ST42CL/ref=sr_1_13?keywords=bluetooth+earbuds&amp;qid=1582899080&amp;sr=8-13\">Amazon link</a></p></li>\r\n<li><p>Bluetooth speaker at 16:52<br />\r\n<a href=\"https://www.amazon.co.uk/EasyAcc-Portable-Rechargeable-Bluetooth-Microphone/dp/B00JK6MQEI/ref=sr_1_2?crid=1X95EE1DRL6DI&amp;keywords=bluetooth+speaker+easyacc&amp;qid=1582899239&amp;sprefix=bluetooth+speaker+easy+%2Caps%2C161&amp;sr=8-2\">Amazon link</a></p></li>\r\n<li><p>Bluetooth keyboard at 22:35<br />\r\n<a href=\"https://www.amazon.co.uk/Universal-Adjustable-Brightness-Smartphone-Rechargeable/dp/B00X5P8BJO/ref=sr_1_1?crid=1K2NT7A80IVPK&amp;keywords=arteck+universal+backlit+7-colors&amp;qid=1582899392&amp;sprefix=Artec+Uni%2Caps%2C160&amp;sr=8-1\">Amazon link</a></p></li>\r\n<li><p>Additional thoughts after recording this episode</p>\r\n<ul>\r\n<li><p>Closing one eye seems to solve the problem though not very practical. It doesn’t seem to matter which eye I close.</p></li>\r\n<li><p>Doesn’t seem to bother me with the other 8” Samsung tablet or any other tablet / phone.</p></li>\r\n<li><p>Counter intuitively increasing the brightness makes things better</p></li>\r\n<li><p>Searching for eye strain and Samsung brought up one or two results of people saying a similar thing to myself; one person commenting that they were fed up of people telling them to get an eye test and like myself they do not have this problem with any other device.</p></li>\r\n</ul></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Android, Tablet',0,0,1),
(3031,'2020-03-16','Daniel Persson - Me? Me!',1131,'I talk about who I am and where I come from and what my interests are.','<p>Talking about my history, forgot to talk about my open-source interests and different projects I’m a part of.</p>\r\n<p>If you want to know more about me you could follow any of the links below.</p>\r\n<ul>\r\n<li><p><a href=\"https://danielpersson.dev/\" class=\"uri\">https://danielpersson.dev/</a></p></li>\r\n<li><p><a href=\"https://youtube.com/c/DanielPersson\" class=\"uri\">https://youtube.com/c/DanielPersson</a></p></li>\r\n<li><p><a href=\"https://github.com/kalaspuffar\" class=\"uri\">https://github.com/kalaspuffar</a></p></li>\r\n<li><p><a href=\"https://github.com/sqrldev/wordpress-sqrl-login\" class=\"uri\">https://github.com/sqrldev/wordpress-sqrl-login</a></p></li>\r\n</ul>\r\n',382,0,0,'CC-BY-SA','biography',0,0,1),
(3032,'2020-03-17','piCore on a Raspberry Pi 1 Model B',651,'How I revived my Raspberry Pi Model 1 B with piCore and a tiny SD card.','<p>In this episode, I discuss how I revived my Raspberry Pi 1 Model B using piCore, a specialized version of Tiny Core Linux for the Raspberry Pi, on a 128 MB SD card that I had laying around. I also mention nanoBSD and Alpine Linux as possible alternatives to try out.</p>\r\n<ul>\r\n<li><p>Tiny Core Linux<br />\r\n<a href=\"https://tinycorelinux.net/\" class=\"uri\">https://tinycorelinux.net/</a></p></li>\r\n<li><p>piCore Releases<br />\r\n<a href=\"https://www.tinycorelinux.net/9.x/armv6/\" class=\"uri\">https://www.tinycorelinux.net/9.x/armv6/</a></p></li>\r\n<li><p>nanoBSD<br />\r\n<a href=\"https://www.freebsd.org/doc/en_US.ISO8859-1/articles/nanobsd/index.html\" class=\"uri\">https://www.freebsd.org/doc/en_US.ISO8859-1/articles/nanobsd/index.html</a><br />\r\n<a href=\"https://www.freebsd.org/doc/en_US.ISO8859-1/articles/nanobsd/howto.html\" class=\"uri\">https://www.freebsd.org/doc/en_US.ISO8859-1/articles/nanobsd/howto.html</a></p></li>\r\n<li><p>Alpine Linux<br />\r\n<a href=\"https://alpinelinux.org/\" class=\"uri\">https://alpinelinux.org/</a><br />\r\n<a href=\"https://wiki.alpinelinux.org/wiki/Raspberry_Pi\" class=\"uri\">https://wiki.alpinelinux.org/wiki/Raspberry_Pi</a></p></li>\r\n</ul>\r\n',152,0,0,'CC-BY-SA','raspberrypi,rpi,linux,bsd',0,0,1),
(3033,'2020-03-18','Linux Inlaws S01E03 32 Bit Time Travel',3543,'Linux Inlaws - a podcast on topics around free and open source software','<p>For show notes, please visit <a href=\"https://linuxinlaws.eu\" class=\"uri\">https://linuxinlaws.eu</a></p>',384,111,1,'CC-BY-SA','Linux Inlaws, free open source software, revolution, FLOSS',0,0,1),
(3034,'2020-03-19','How to bridge Freenode IRC rooms to Matrix.org',786,'Thaj builds upon a previous episode by Clacke to deep dive into bridging IRC to Matrix.org','<ul>\r\n<li><p>Attribution</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0311.html\">Clacke</a> - <a href=\"https://hackerpublicradio.org/eps.php?id=2169\">HPR Episode 2169 on Matrix</a></li>\r\n<li><a href=\"https://thelovebug.org/\">Dave Lee</a> - Helped a great deal in getting me on board with Matrix bridging. Check out his other podcasts at <a href=\"https://otherside.network/\">The Other Side Podcast Network</a></li>\r\n</ul></li>\r\n<li><p><a href=\"matrix.org\">Matrix.org</a> is a Free, open source, and decentralized messaging system. One of the strong points of this system is its ability to <a href=\"https://matrix.org/bridges\">bridge</a> multiple protocols together into one interface.</p></li>\r\n<li><p><a href=\"https://about.riot.im/\">Riot.im</a></p></li>\r\n<li><p>Bridging to Freenode\'s IRC server is built into Matrix.org. If you already have a registered Nick on Freenode it is a simple process to associate your Matrix and Freenode accounts.</p></li>\r\n<li><p>Steps to bridge to a Freenode IRC room</p>\r\n<ol>\r\n<li>Start a direct message with @freenode_NickServ:matrix.org and send the command <code>identify nick pass</code> (replacing nick and pass with your credentials).</li>\r\n<li>Direct message @appservice-irc:matrix.org with the command <code>!storepass nick:pass</code></li>\r\n<li>Join the room #freenode_#oggcastplanet:matrix.org. <em>You can really join any room on freenode with #freenode_#CHANNAME:matrix.org</em></li>\r\n<li>PROFIT!!!!</li>\r\n</ol></li>\r\n</ul>\r\n',270,108,0,'CC-BY-SA','Freenode, IRC, Matrix.org, Riot.im, Social Media',0,0,1),
(3037,'2020-03-24','Ambient recording at Union Station',205,'Ambient recording in the main hall at Union Station, Chicago','<p>This was recorded in the main hall at Union Station in Chicago, Illinois.<br />\r\nThere was a brief security announcement about watching for bags or package left unattended.</p>',318,101,0,'CC-BY-SA','soundscape, train station',0,0,1),
(3038,'2020-03-25','Solo Magic',2244,'All the magic without the gathering','<p>This episode outlines my single-player mod for the <strong>Magic: The Gathering</strong> card game.</p>',78,95,0,'CC-BY-SA','magic, mtg',0,0,1),
(3040,'2020-03-27','Why use GNU Autotools',1766,'6 good reasons you should be using a build system','<p>GNU Autotools is a build system that helps you distribute your code in a predictable and reliable way.\r\nBuild systems offer many benefits, including:\r\n</p>\r\n\r\n<ol>\r\n<li>Standard and automate-able build process</li>\r\n<li>hooks into packaging systems (RPM, DEB, Slackbuilds, Flatpak, Snap, and so on)</li>\r\n<li>version reporting</li>\r\n<li>build for various OSes</li>\r\n<li>you get lots of  code to handle every possible corner case, for free</li>\r\n<li>with a single configuration, you can build your project as the developer, build it for packagers, and enable users to build it for themselves</li>\r\n</ol>\r\n\r\n<p>Next up: how to use GNU Autotools</p>',78,0,0,'CC-BY-SA','autotools,build,make',0,0,1),
(3041,'2020-03-30','How to use GNU Autotools',2337,'How to use GNU Autotools','<p>I found a great article on this topic here: <a href=\"\" target=\"_blank\">https://opensource.com/article/19/7/introduction-gnu-autotools</a>, so please refer to that as show notes.</p>\r\n<p>\r\n<small>\r\nPage included by Ken, as permitted by cc-by-sa\r\n</small>\r\n</p>\r\n<h1>Introduction to GNU Autotools</h1>\r\n\r\n<p id=\"introduction-to-gnu-autotools\">Have you ever downloaded the source code for a popular software project that required you to type the almost ritualistic <strong>./configure; make &amp;&amp; make install</strong> command sequence to build and install it? If so, you’ve used <a href=\"https://www.gnu.org/software/automake/faq/autotools-faq.html\" target=\"_blank\">GNU Autotools</a>. If you’ve ever looked into some of the files accompanying such a project, you’ve likely also been terrified at the apparent complexity of such a build system.</p>\r\n\r\n<p>Good news! GNU Autotools is a lot simpler to set up than you think, and it’s GNU Autotools itself that generates those 1,000-line configuration files for you. Yes, you can write 20 or 30 lines of installation code and get the other 4,000 for free.</p>\r\n\r\n<h2 id=\"autotools-at-work\">Autotools at work</h2>\r\n\r\n<p>If you’re a user new to Linux looking for information on how to install applications, you do not have to read this article! You’re welcome to read it if you want to research how software is built, but if you’re just installing a new application, go read my article about <a href=\"https://opensource.com/article/18/1/how-install-apps-linux\">installing apps on Linux</a>.</p>\r\n\r\n<p>For developers, Autotools is a quick and easy way to manage and package source code so users can compile and install software. Autotools is also well-supported by major packaging formats, like DEB and RPM, so maintainers of software repositories can easily prepare a project built with Autotools.</p>\r\n\r\n<p>Autotools works in stages:</p>\r\n\r\n<ol>\r\n<li>First, during the <strong>./configure</strong> step, Autotools scans the host system (the computer it’s being run on) to discover the default settings. Default settings include where support libraries are located, and where new software should be placed on the system.</li>\r\n<li>Next, during the <strong>make</strong> step, Autotools builds the application, usually by converting human-readable source code into machine language.</li>\r\n<li>Finally, during the <strong>make install</strong> step, Autotools copies the files&nbsp;it built to the appropriate locations (as detected during the configure stage) on your computer.</li>\r\n</ol><p>This process seems simple, and it is, as long as you use Autotools.</p>\r\n\r\n<h2 id=\"the-autotools-advantage\">The Autotools advantage</h2>\r\n\r\n<p>GNU Autotools is a big and important piece of software that most of us take for granted. Along with <a href=\"https://en.wikipedia.org/wiki/GNU_Compiler_Collection\" target=\"_blank\">GCC (the GNU Compiler Collection)</a>, Autotools is the scaffolding that allows Free Software to be constructed and installed to a running system. If you’re running a <a href=\"https://en.wikipedia.org/wiki/POSIX\" target=\"_blank\">POSIX</a> system, it’s not an understatement to say that most of your operating system exists as runnable software on your computer because of these projects.</p>\r\n\r\n<p>In the likely event that your pet project isn’t an operating system, you might assume that Autotools is overkill for your needs. But, despite its reputation, Autotools has lots of little features that may benefit you, even if your project is a relatively simple application or series of scripts.</p>\r\n\r\n<h3 id=\"portability\">Portability</h3>\r\n\r\n<p>First of all, Autotools comes with portability in mind. While it can’t make your project work across all POSIX platforms (that’s up to you, as the coder), Autotools can ensure that the files you’ve marked for installation get installed to the most sensible locations on a known platform. And because of Autotools, it’s trivial for a power user to customize and override any non-optimal value, according to their own system.</p>\r\n\r\n<p>With Autotools, all you need to know is what files need to be installed to what general location. It takes care of everything else. No more custom install scripts that break on any untested OS.</p>\r\n\r\n<h3 id=\"packaging\">Packaging</h3>\r\n\r\n<p>Autotools is also well-supported. Hand a project with Autotools over to a distro packager, whether they’re packaging an RPM, DEB, TGZ, or anything else, and their job is simple. Packaging tools know Autotools, so there’s likely to be no patching, hacking, or adjustments necessary. In many cases, incorporating an Autotools project into a pipeline can even be automated.</p>\r\n\r\n<h2 id=\"how-to-use-autotools\">How to use Autotools</h2>\r\n\r\n<p>To use Autotools, you must first have Autotools installed. Your distribution may provide one package meant to help developers build projects, or it may provide separate packages for each component, so you may have to do some research on your platform to discover what packages you need to install.</p>\r\n\r\n<p>The primary components of Autotools are:</p>\r\n\r\n<ul>\r\n<li><strong>automake</strong></li>\r\n<li><strong>autoconf</strong></li>\r\n<li><strong>make</strong></li>\r\n</ul>\r\n\r\n<p>While you likely need to install the compiler (GCC, for instance) required by your project, Autotools works just fine with scripts or binary assets that don’t need to be compiled. In fact, Autotools can be useful for such projects because it provides a <strong>make uninstall</strong> script for easy removal.</p>\r\n\r\n<p>Once you have all of the components installed, it’s time to look at the structure of your project’s files.</p>\r\n\r\n<h3 id=\"autotools-project-structure\">Autotools project structure</h3>\r\n\r\n<p>GNU Autotools has very specific expectations, and most of them are probably familiar if you download and build source code often. First, the source code itself is expected to be in a subdirectory called <strong>src</strong>.</p>\r\n\r\n<p>Your project doesn’t have to follow all of these expectations, but if you put files in non-standard locations (from the perspective of Autotools), then you’ll have to make adjustments for that in your Makefile later.</p>\r\n\r\n<p>Additionally, these files are required:</p>\r\n\r\n<ul>\r\n<li><strong>NEWS</strong></li>\r\n<li><strong>README</strong></li>\r\n<li><strong>AUTHORS</strong></li>\r\n<li><strong>ChangeLog</strong></li>\r\n</ul>\r\n\r\n<p>You don’t have to actively use the files, and they can be symlinks to a monolithic document (like <strong>README.md</strong>) that encompasses all of that information, but they must be present.</p>\r\n\r\n<h3 id=\"autotools-configuration\">Autotools configuration</h3>\r\n\r\n<p>Create a file called <strong>configure.ac</strong> at your project’s root directory. This file is used by <strong>autoconf</strong> to create the <strong>configure</strong> shell script that users run before building. The file must contain, at the very least, the <strong>AC_INIT</strong> and <strong>AC_OUTPUT</strong> <a href=\"https://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Initializing-configure.html\" target=\"_blank\">M4 macros</a>. You don’t need to know anything about the M4 language to use these macros; they’re already written for you, and all of the ones relevant to Autotools are defined in the documentation.</p>\r\n\r\n<p>Open the file in your favorite text editor. The <strong>AC_INIT</strong> macro may consist of the package name, version, an email address for bug reports, the project URL, and optionally the name of the source TAR file.</p>\r\n\r\n<p>The <strong><a href=\"https://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Output.html#Output\" target=\"_blank\">AC_OUTPUT</a></strong> macro is much simpler and accepts no arguments.</p>\r\n\r\n<pre>AC_INIT([penguin], [2019.3.6], [seth@example.com])<br>\r\nAC_OUTPUT</pre>\r\n\r\n<p>If you were to run <strong>autoconf</strong> at this point, a <strong>configure</strong> script would be generated from your <strong>configure.ac</strong> file, and it would run successfully. That’s all it would do, though, because all you have done so far is define your project’s metadata and called for a configuration script to be created.</p>\r\n\r\n<p>The next macros you must invoke in your <strong>configure.ac</strong> file are functions to create a <a href=\"https://www.gnu.org/software/make/manual/html_node/Introduction.html\" target=\"_blank\">Makefile</a>. A Makefile tells the <strong>make</strong> command what to do (usually, how to compile and link a program).</p>\r\n\r\n<p>The macros to create a Makefile are <strong>AM_INIT_AUTOMAKE</strong>, which accepts no arguments, and <strong>AC_CONFIG_FILES</strong>, which accepts the name you want to call your output file.</p>\r\n\r\n<p>Finally, you must add a macro to account for the compiler your project needs. The macro you use obviously depends on your project. If your project is written in C++, the appropriate macro is <strong>AC_PROG_CXX</strong>, while a project written in C requires <strong>AC_PROG_CC</strong>, and so on, as detailed in the <a href=\"https://www.gnu.org/software/automake/manual/html_node/Programs.html#Programs\" target=\"_blank\">Building Programs and Libraries</a> section in the Autoconf documentation.</p>\r\n\r\n<p>For example, I might add the following for my C++ program:</p>\r\n\r\n<pre>AC_INIT([penguin], [2019.3.6], [seth@example.com])<br>\r\nAC_OUTPUT<br>\r\nAM_INIT_AUTOMAKE<br>\r\nAC_CONFIG_FILES([Makefile])<br>\r\nAC_PROG_CXX</pre>\r\n\r\n<p>Save the file. It’s time to move on to the Makefile.</p>\r\n\r\n<h3 id=\"autotools-makefile-generation\">Autotools Makefile generation</h3>\r\n\r\n<p>Makefiles aren’t difficult to <a href=\"https://opensource.com/article/18/8/what-how-makefile\" target=\"_blank\">write manually</a>, but Autotools can write one for you, and the one it generates will use the configuration options detected during the <code>./configure</code> step, and it will contain far more options than you would think to include or want to write yourself. However, Autotools can’t detect everything your project requires to build, so you have to add some details in the file <strong>Makefile.am</strong>, which in turn is used by <strong>automake</strong> when constructing a Makefile.</p>\r\n\r\n<p><strong>Makefile.am</strong> uses the same syntax as a Makefile, so if you’ve ever written a Makefile from scratch, then this process will be familiar and simple. Often, a <strong>Makefile.am</strong> file needs only a few variable definitions to indicate what files are to be built, and where they are to be installed.</p>\r\n\r\n<p>Variables ending in <strong>_PROGRAMS</strong> identify code that is to be built (this is usually considered the <em>primary</em> target; it’s the main reason the Makefile exists). Automake recognizes other primaries, like <strong>_SCRIPTS</strong>, <strong>_DATA</strong>, <strong>_LIBRARIES</strong>, and other common parts that make up a software project.</p>\r\n\r\n<p>If your application is literally compiled during the build process, then you identify it as a binary program with the <strong>bin_PROGRAMS</strong> variable, and then reference any part of the source code required to build it (these parts may be one or more files to be compiled and linked together) using the program name as the variable prefix:</p>\r\n\r\n<pre>bin_PROGRAMS = penguin<br>\r\npenguin_SOURCES = penguin.cpp</pre>\r\n\r\n<p>The target of <strong>bin_PROGRAMS</strong> is installed into the <strong>bindir</strong>, which is user-configurable during compilation.</p>\r\n\r\n<p>If your application isn’t actually compiled, then your project doesn’t need a <strong>bin_PROGRAMS</strong> variable at all. For instance, if your project is a script written in Bash, Perl, or a similar interpreted language, then define a <strong>_SCRIPTS</strong> variable instead:</p>\r\n\r\n<pre>bin_SCRIPTS = bin/penguin</pre>\r\n\r\n<p>Automake expects sources to be located in a directory called <strong>src</strong>, so if your project uses an alternative directory structure for its layout, you must tell Automake to accept code from outside sources:</p>\r\n\r\n<pre>AUTOMAKE_OPTIONS = foreign subdir-objects</pre>\r\n\r\n<p>Finally, you can create any custom Makefile rules in <strong>Makefile.am</strong> and they’ll be copied verbatim into the generated Makefile. For instance, if you know that a temporary value needs to be replaced in your source code before the installation proceeds, you could make a custom rule for that process:</p>\r\n\r\n<pre>all-am: penguin<br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; touch bin/penguin.sh<br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; <br>\r\npenguin: bin/penguin.sh<br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; @sed \"s|__datadir__|@datadir@|\" $&lt; &gt;bin/$@</pre>\r\n\r\n<p>A particularly useful trick is to extend the existing <strong>clean</strong> target, at least during development. The <strong>make clean</strong> command generally removes all generated build files with the exception of the Automake infrastructure. It’s designed this way because most users rarely want <strong>make clean</strong> to obliterate the files that make it easy to build their code.</p>\r\n\r\n<p>However, during development, you might want a method to reliably return your project to a state relatively unaffected by Autotools. In that case, you may want to add this:</p>\r\n\r\n<pre>clean-local:<br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; @rm config.status configure config.log<br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; @rm Makefile <br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; @rm -r autom4te.cache/<br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; @rm aclocal.m4 <br>\r\n&nbsp; &nbsp; &nbsp; &nbsp; @rm compile install-sh missing Makefile.in</pre>\r\n\r\n<p>There’s a lot of flexibility here, and if you’re not already familiar with Makefiles, it can be difficult to know what your <strong>Makefile.am</strong> needs. The barest necessity is a primary target, whether that’s a binary program or a script, and an indication of where the source code is located (whether that’s through a <strong>_SOURCES</strong> variable or by using <strong>AUTOMAKE_OPTIONS</strong> to tell Automake where to look for source code).</p>\r\n\r\n<p>Once you have those variables and settings defined, you can try generating your build scripts as you see in the next section, and adjust for anything that’s missing.</p>\r\n\r\n<h3 id=\"autotools-build-script-generation\">Autotools build script generation</h3>\r\n\r\n<p>You’ve built the infrastructure, now it’s time to let Autotools do what it does best: automate your project tooling. The way the developer (you) interfaces with Autotools is different from how users building your code do.</p>\r\n\r\n<p>Builders generally use this well-known sequence:</p>\r\n\r\n<pre>$ ./configure<br>\r\n$ make<br>\r\n$ sudo make install</pre>\r\n\r\n<p>For that incantation to work, though, you as the developer must bootstrap the build infrastructure. First, run <strong>autoreconf</strong> to generate the configure script that users invoke before running <strong>make</strong>. Use the <strong>–install</strong> option to bring in auxiliary files, such as a symlink to <strong>depcomp</strong>, a script to generate dependencies during the compiling process, and a copy of the <strong>compile</strong> script, a wrapper for compilers to account for syntax variance, and so on.</p>\r\n\r\n<pre>$ autoreconf --install<br>\r\nconfigure.ac:3: installing \'./compile\'<br>\r\nconfigure.ac:2: installing \'./install-sh\'<br>\r\nconfigure.ac:2: installing \'./missing\'</pre>\r\n\r\n<p>With this development build environment, you can then create a package for source code distribution:</p>\r\n\r\n<pre>$ make dist</pre>\r\n\r\n<p>The <strong>dist</strong> target is a rule you get for \"free\"&nbsp;from Autotools.<br>\r\nIt’s a feature that gets built into the Makefile generated from your humble <strong>Makefile.am</strong> configuration. This target produces a <strong>tar.gz</strong> archive containing all of your source code and all of the essential Autotools infrastructure so that people downloading the package can build the project.</p>\r\n\r\n<p>At this point, you should review the contents of the archive carefully to ensure that it contains everything you intend to ship to your users. You should also, of course, try building from it yourself:</p>\r\n\r\n<pre>$ tar --extract --file penguin-0.0.1.tar.gz<br>\r\n$ cd penguin-0.0.1<br>\r\n$ ./configure <br>\r\n$ make <br>\r\n$ DESTDIR=/tmp/penguin-test-build make install</pre>\r\n\r\n<p>If your build is successful, you find a local copy of your compiled application specified by <strong>DESTDIR</strong> (in the case of this example, <strong>/tmp/penguin-test-build</strong>).</p>\r\n\r\n<pre>$ /tmp/example-test-build/usr/local/bin/example <br>\r\nhello world from GNU Autotools</pre>\r\n\r\n<h2 id=\"time-to-use-autotools\">Time to use Autotools</h2>\r\n\r\n<p>Autotools is a great collection of scripts for a predictable and automated release process. This toolset may be new to you if you’re used to Python or Bash builders, but it’s likely worth learning for the structure and adaptability it provides to your project.</p>\r\n\r\n<p>And Autotools is not just for code, either. Autotools can be used to build <a href=\"https://opensource.com/article/17/9/docbook\">Docbook</a> projects, to keep media organized (I use Autotools for my music releases), documentation projects, and anything else that could benefit from customizable install targets.</p>\r\n',78,25,0,'CC-BY-SA','autotools,build,make',0,0,1),
(3039,'2020-03-26','Making a Raspberry Pi status display',1608,'A project making use of my Pi 3A+, an old monitor and MagicMirror2','<h2 id=\"introduction\">Introduction</h2>\r\n<p>I have had a project on my <em>To Do</em> list for a while: to make a status display from a Raspberry Pi. My vision was to show the state of various things including some HPR stuff, and I had imagined setting up a Pi with a monitor and controlling it over SSH.</p>\r\n<p>I started on the project over the Christmas period 2019. I have a Raspberry Pi 3A+, which is a sort of souped-up Pi Zero, which I bought on a whim and hadn’t found a use for (Yannick reviewed this RPi model in show <a href=\"https://hackerpublicradio.org/eps.php?id=2711\" title=\"hpr2711 :: Raspberry Pi 3A+ Review\">2711</a>). I also had an old square Dell monitor from about 15 years ago which still worked (at least to begin with).</p>\r\n<p>I had imagined I’d write some software of my own with a web front end which ran various tasks to monitor things.</p>\r\n<p>However, in my researches I came across <em>MagicMirror<sup>2</sup></em> which I thought I might be able to use instead of writing my own thing.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr3039/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>JavaScript programming language:\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/JavaScript\">Wikipedia entry</a></li>\r\n</ul></li>\r\n<li>Node.js JavaScript runtime environment:\r\n<ul>\r\n<li><a href=\"https://nodejs.org/en/\">Website</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Node.js\">Wikipedia entry</a></li>\r\n</ul></li>\r\n<li>Electron software framework:\r\n<ul>\r\n<li><a href=\"https://www.electronjs.org/\">Website</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Electron_%28software_framework%29\">Wikipedia entry</a></li>\r\n</ul></li>\r\n<li>MagicMirror<sup>2</sup>:\r\n<ul>\r\n<li><a href=\"https://github.com/MichMich/MagicMirror\">GitHub page</a></li>\r\n<li><a href=\"https://magicmirror.builders/\">Website</a></li>\r\n<li><a href=\"https://github.com/MichMich/MagicMirror/wiki/3rd-party-modules\">List of third-party modules</a></li>\r\n</ul></li>\r\n<li>Resources:\r\n<ul>\r\n<li>Example files:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3039/config.js\">config.js</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3039/custom.css\">custom.css</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','Raspberry Pi,VGA monitor,MagicMirror2,MQTT,Node.js,Electron',0,0,1),
(3042,'2020-03-31','The COVID-19 Work From Home Stream - Day 0',4021,'A couple of HPR characters decide to spend some of their social distancing time being social','<p>Tuesday 17.03.2020</p>\r\n<p>Guests: honkeymagoo, crvs, and Thaj</p>\r\n<ul>\r\n<li>How likely we are to get COVID-19</li>\r\n<li>Should we invest while the market is down</li>\r\n<li>How bad is the internet infrastructure in the US</li>\r\n<li>Learning Python\r\n<ul>\r\n<li><a href=\"https://grasshopper.app/\">Grasshopper</a></li>\r\n<li><a href=\"https://github.com/ubarredo/LearnPythonTheHardWay\">Learn Python tne Hard Way</a></li>\r\n<li><a href=\"https://exercism.io\">Excercism</a></li>\r\n<li>Klaatu\'s <a href=\"https://www.amazon.com/Programming-Book-S-Kenlon/dp/098478425X/ref=sr_1_1?dchild=1&amp;keywords=9780984784257&amp;linkCode=qs&amp;qid=1584490615&amp;s=books&amp;sr=1-1\">Programming Book</a></li>\r\n</ul></li>\r\n<li>Growing plants</li>\r\n<li>That Audiobook Club though...</li>\r\n<li>Video games</li>\r\n<li>Single Board Computers\r\n<ul>\r\n<li>OpenBSD on <a href=\"https://www.openbsd.org/arm64.html\">Raspberry Pi</a></li>\r\n</ul></li>\r\n<li>Why haven\'t you done a show about that Thaj?</li>\r\n<li>Emacs and org-mode</li>\r\n<li>Nano for the win</li>\r\n</ul>\r\n',270,0,1,'CC-BY-SA','COVID-19, Stock Markets, Emacs, Python, Programming, Audiobooks, Growing Food, Video Games, SBCs',0,0,1),
(3043,'2020-04-01','How I record for HPR',119,'The tools I use to record a show for HPR','<ol type=\"1\">\r\n<li><p>Sentry BT250 Bluetooth Headphones w/ mic<br />\r\n<a href=\"https://www.amazon.com/Wireless-Rechargeable-Stereo-Earbuds-Bluetooth/dp/B015NFWDX8\" class=\"uri\">https://www.amazon.com/Wireless-Rechargeable-Stereo-Earbuds-Bluetooth/dp/B015NFWDX8</a></p></li>\r\n<li><p>F-Droid - free open source apps for Android<br />\r\n<a href=\"https://f-droid.org/en/\" class=\"uri\">https://f-droid.org/en/</a></p></li>\r\n<li>Audio Recorder from F-Droid<br />\r\n<a href=\"https://f-droid.org/en/packages/com.github.axet.audiorecorder/\" class=\"uri\">https://f-droid.org/en/packages/com.github.axet.audiorecorder/</a><br />\r\nFeatures:\r\n<ul>\r\n<li>Mute incoming call audio while recording</li>\r\n<li>Variety of format encoding\r\n<ul>\r\n<li>ogg (default)</li>\r\n<li>wav</li>\r\n<li>flac</li>\r\n<li>m4a</li>\r\n<li>mp3</li>\r\n<li>opus</li>\r\n</ul></li>\r\n</ul></li>\r\n<li><p>X-plore Android file explorer<br />\r\n<a href=\"https://play.google.com/store/apps/details?id=com.lonelycatgames.Xplore&amp;hl=en_US\" class=\"uri\">https://play.google.com/store/apps/details?id=com.lonelycatgames.Xplore&amp;hl=en_US</a></p></li>\r\n<li>Audacity\r\n<ul>\r\n<li>Amplify tool</li>\r\n<li>Bass and Treble tool</li>\r\n</ul></li>\r\n</ol>\r\n',318,0,0,'CC-BY-SA','recording, bluetooth, android',0,0,1),
(3047,'2020-04-07','The COVID-19 Work From Home Stream - Day 1',2449,'A couple of HPR characters decide to spend some of their social distancing time being social','<p>Wednesday 18.03.2020 (2020-03-18)</p>\r\n<p>Guests: honkeymagoo, crvs, Lyle, Thaj</p>\r\n<ul>\r\n<li><a href=\"https://obsproject.com\">Open Broadcaster Studio</a></li>\r\n<li>A grocery store trip is a sign of the apocalypse?</li>\r\n<li>Bidets are the fix for TP shortages</li>\r\n<li>Insider details on the grocery business</li>\r\n<li>My beard is NOT negotiable</li>\r\n<li>Long term impacts of social distance\r\n<ul>\r\n<li>How are schools handling this?</li>\r\n</ul></li>\r\n<li>Matrix, IRC, and Microsoft Teams...OH MY!!</li>\r\n<li>Do you need another person for your HPR episode, call Thaj.</li>\r\n<li>Lyle has a <a href=\"https://i.imgur.com/GVEOiIB.jpg\">meme</a></li>\r\n<li>Lyle makes a <a href=\"https://cooking.nytimes.com/recipes/1018203-simple-crusty-bread-\">bread</a></li>\r\n<li>More Python</li>\r\n<li>ffmpeg</li>\r\n</ul>',270,0,1,'CC-BY-SA','OBS, Bidets, Grocery',0,0,1),
(3048,'2020-04-08','Alternatives to toilet paper',702,'A non-satirical and non-sarcastic review of alternatives to toilet paper.','<p>In some countries, people seem to be legitimately concerned about the availability of toilet paper. This episode offers alternatives to toilet paper in the hope of relieving people of additional stress around hygiene.\r\n</p><p>This is not a joke episode and contains no offensive language, but it is about a potentially sensitive subject, so it has been marked explicit as a precaution.</p>',78,100,1,'CC-BY-SA','hygiene',0,0,1),
(3051,'2020-04-13','The COVID-19 Work From Home Stream - Day 2',2552,'A few HPR characters decide to spend some of their social distancing time being social','<p>Thursday 19.03.2020</p>\r\n<p>Guests: honkeymagoo, Thaj</p>\r\n<ul>\r\n<li>Talk about creating video tutorials for work</li>\r\n<li>Still more talking about Python</li>\r\n<li>Plumble dies</li>\r\n<li>Is being open to technology based on age?</li>\r\n<li>How much farther will this virus shut things down?</li>\r\n<li>Oh no....politics!</li>\r\n<li>Healthcare in the US</li>\r\n</ul>',270,0,1,'CC-BY-SA','Healthcare, Python, COVID-19, Plumble, Politcs, Technology',0,0,1),
(3054,'2020-04-16','Coronavirus Thoughts',1101,'Where we are with this pandemic, and how should we respond.','<p>This is an attempt on my part to pull together what we know about the Coronavirus, and what measures we can take. It emphasizes the importance of social distancing, and evaluates our prospects for conquering the disease. <a href=\"https://www.palain.com/?page_id=731\" class=\"uri\">https://www.palain.com/?page_id=731</a></p>\r\n<ul>\r\n<li><a href=\"https://www.palain.com/?page_id=356\" class=\"uri\">https://www.palain.com/?page_id=356</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=358\" class=\"uri\">https://www.palain.com/?page_id=358</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=360\" class=\"uri\">https://www.palain.com/?page_id=360</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=402\" class=\"uri\">https://www.palain.com/?page_id=402</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=402\" class=\"uri\">https://www.palain.com/?page_id=402</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2685\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2685</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2695\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2695</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2705\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2705</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2870\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2870</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2880\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2880</a></li>\r\n<li><a href=\"https://www.theguardian.com/world/2020/apr/05/when-will-a-coronavirus-vaccine-be-ready\" class=\"uri\">https://www.theguardian.com/world/2020/apr/05/when-will-a-coronavirus-vaccine-be-ready</a></li>\r\n<li><a href=\"https://s2.washingtonpost.com/camp-rw/?e=endpbG5pa0B6d2lsbmlrLmNvbQ%3D%3D&s=5e8b05f4fe1ff6038cf6a56a&linknum=0&linktot=79\" class=\"uri\">https://s2.washingtonpost.com/camp-rw/?e=endpbG5pa0B6d2lsbmlrLmNvbQ%3D%3D&s=5e8b05f4fe1ff6038cf6a56a&linknum=0&linktot=79</a></li>\r\n<li><a href=\"https://www.jci.org/articles/view/138003\" class=\"uri\">https://www.jci.org/articles/view/138003</a></li>\r\n<li><a href=\"https://www.scientificamerican.com/podcast/science-talk/\" class=\"uri\">https://www.scientificamerican.com/podcast/science-talk/</a></li>\r\n<li><a href=\"https://fivethirtyeight.com/videos/why-we-shouldnt-hope-covid-19-is-seasonal-like-the-flu/\" class=\"uri\">https://fivethirtyeight.com/videos/why-we-shouldnt-hope-covid-19-is-seasonal-like-the-flu/</a></li>\r\n<li><a href=\"https://fivethirtyeight.com/features/why-we-still-need-to-test-widely-for-coronavirus/\" class=\"uri\">https://fivethirtyeight.com/features/why-we-still-need-to-test-widely-for-coronavirus/</a></li>\r\n<li><a href=\"https://www.palain.com/?page_id=731\" class=\"uri\">https://www.palain.com/?page_id=731</a></li>\r\n</ul>\r\n\r\n<hr />\r\n<small>Show notes added by Ken as they are released under a Creative Commons Attribution-ShareAlike 4.0 International License. </small>\r\n\r\n<p>\r\n   Well, since I am sitting at home maintaining a &#8220;social distance&#8221; I thought I would put down some thoughts about this pandemic and how we will be affected. But a disclaimer to be completely clear: I am not a doctor or a research scientist. I am retired, but I was once a college professor teaching \r\n   <em>\r\n   Statistics\r\n   </em>\r\n   and \r\n   <em>\r\n   Research Methods\r\n   </em>\r\n   . I think this helps me in some way to interpret the information I receive, but when I want authoritative information I look to real doctors, the CDC, and qualified researchers. If you want to know more about what I mean by qualified researchers, you might want to check out my series on interpreting studies:\r\n</p>\r\n<ul>\r\n   <li>\r\n      <a rel=\"noreferrer noopener\" href=\"https://www.palain.com/?page_id=356\" target=\"_blank\">\r\n      Scientific and Medical Reports\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a rel=\"noreferrer noopener\" href=\"https://www.palain.com/?page_id=358\" target=\"_blank\">\r\n      Problems With Studies\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a rel=\"noreferrer noopener\" href=\"https://www.palain.com/?page_id=360\" target=\"_blank\">\r\n      Evidence-Based Medicine\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a rel=\"noreferrer noopener\" href=\"https://www.palain.com/?page_id=402\" target=\"_blank\">\r\n      The Hierarchy of Evidence\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a rel=\"noreferrer noopener\" href=\"https://www.palain.com/?page_id=402\" target=\"_blank\">\r\n      Evaluating a Study\r\n      </a>\r\n   </li>\r\n</ul>\r\n<p>\r\n   And if you prefer audio to reading, you can download the audio versions at Hacker Public Radio:\r\n</p>\r\n<ul>\r\n   <li>\r\n      <a href=\"https://hackerpublicradio.org/eps.php?id=2685\" target=\"_blank\" rel=\"noreferrer noopener\">\r\n      Scientific and Medical Reports\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a href=\"https://hackerpublicradio.org/eps.php?id=2695\" target=\"_blank\" rel=\"noreferrer noopener\">\r\n      Problems With Studies\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a href=\"https://hackerpublicradio.org/eps.php?id=2705\" target=\"_blank\" rel=\"noreferrer noopener\">\r\n      Evidence-Based Medicine\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a href=\"https://hackerpublicradio.org/eps.php?id=2870\" target=\"_blank\" rel=\"noreferrer noopener\">\r\n      The Hierarchy of Evidence\r\n      </a>\r\n   </li>\r\n   <li>\r\n      <a href=\"https://hackerpublicradio.org/eps.php?id=2880\" target=\"_blank\" rel=\"noreferrer noopener\">\r\n      Evaluating  a Study\r\n      </a>\r\n   </li>\r\n</ul>\r\n<p>\r\n   So, with the preliminaries out of the way, what do we know? We know that this is a virus of a type called coronavirus, which makes it part of the family of viruses that include the common cold, SARS, and MERS. What distinguishes this new virus, technically called SARS-CoV2 (though I usually just call it covid-19, like most reports do) is that it is highly infectious and highly virulent. Highly infectious means it is easily passed from one person to another. Highly virulent means that it can cause death easily. It has been compared in this respect to the 1918 Flu pandemic, which we estimate infected 500 million people worldwide (about 1/3 of the population at that time) and killed at least 20 million to 50 million people, and perhaps more. Note that assigning a cause of death is not a precise science, and medical record keeping in many parts of the world was sketchy at best.\r\n</p>\r\n<h2>\r\n   What Can Help?\r\n</h2>\r\n<p>\r\n   The ultimate answer to this would be a vaccine. Thankfully, the anti-vaxxers have crawled back under whatever rocks they live under for the time being, but a vaccine is not the perfect answer right now. The good news is that coronavirus appears to be one that does not mutate a lot, which means a vaccine is likely to be more effective than the flu vaccine. Influenza virus changes every year and that makes it a bit of guesswork to figure out. \r\n   <a rel=\"noreferrer noopener\" href=\"https://www.theguardian.com/world/2020/apr/05/when-will-a-coronavirus-vaccine-be-ready\" target=\"_blank\">\r\n   Scientists are working on a vaccine right now in a crash program\r\n   </a>\r\n   , and again there is some good news on that front. First, Chinese scientists were able to DNA sequence the virus pretty quickly. They found that this virus shares 80-90% of its DNA with SARS, which is why it is named SARS-CoV2. Unfortunately, we don&#8217;t have a SARS vaccine because that outbreak died off before work was completed, but the work that was done is something we can build on. But in general, most researchers have said that it will take as much as 18 months even with a crash program. \r\n</p>\r\n<p>\r\n   Usually these take much longer. First you do animal studies, both for safety and for efficacy. For example, one of the early candidates for a SARS vaccine was causing harm to the animals who received it, though they think that problem has now been solved. If the animal trials are promising, you can move on to human trials Stage 1 is to test with a small number of healthy volunteers, looking specifically to test safety. You don&#8217;t want to administer a vaccine that kill everyone, or even any significant number of people.   If the candidate passes that test, Stage 2 is to administer the vaccine to a few hundred people in an area where the disease is rampant. If it looks like it is working, and no safety issues have arisen, a final trial can involve several thousand people. If it passes that, it can be approved for medical use and move into production. And that adds even more delays, since producing vaccine in large quantities takes a long time. According to Ronald Klain, Obama Administration&#8217;s Ebola Czar:\r\n</p>\r\n<blockquote>\r\n   <p>\r\n      Developing and testing the vaccine &#8212; hard as it is &#8212; isn&#8217;t the hardest part. Manufacturing hundreds of millions of doses &#8212; and getting people to take the vaccine &#8212; will be harder and take longer.\r\n   </p>\r\n   <cite>\r\n   <a href=\"https://s2.washingtonpost.com/camp-rw/?e=endpbG5pa0B6d2lsbmlrLmNvbQ%3D%3D&amp;s=5e8b05f4fe1ff6038cf6a56a&amp;linknum=0&amp;linktot=79\">\r\n   https://s2.washingtonpost.com/camp-rw/?e=endpbG5pa0B6d2lsbmlrLmNvbQ%3D%3D&amp;s=5e8b05f4fe1ff6038cf6a56a&amp;linknum=0&amp;linktot=79\r\n   </a>\r\n   </cite>\r\n</blockquote>\r\n<p>\r\n   Now, this process can be accelerated to some degree, but not by as much as you might think. Doing the research to find a candidate that might work will take time, and there is no short cut. That is why researchers say a crash program might deliver something in 18 months, as opposed to the decade or more many vaccines require. Sometimes when these studies are done, you get quick results that can lead to dropping some steps. For example, if you have a test group and a control group, and the test group recovers quickly while the control group is dying, any ethical researcher will stop the trial and give the remedy to everyone who needs it. But you are dealing with probabilities in this, and most people are not comfortable with that. They want yes or no answers, and sadly life does not give that all the time. If you are responsible for that decision, if anything goes wrong you will get all of the blame. I&#8217;m glad I don&#8217;t have to make that decision, though also apprehensive that the people who do make that decision may not be sane adults.\r\n</p>\r\n<p>\r\n   OK, if you we wait for the vaccine, what about medicines to cure the infection? Again, there is work being done here. Several different approaches are being studied. One which we know can work is called \r\n   <a rel=\"noreferrer noopener\" href=\"https://www.jci.org/articles/view/138003\" target=\"_blank\">\r\n   Convalescent Plasma\r\n   </a>\r\n   (aka Convalescent Blood). This takes plasma from people who have recovered from the disease, and gives it intravenously to someone seriously ill. It is an old approach, predating vaccines, but it does work. The transfusion of the plasma contains antibodies made by the person who recovered, and those antibodies can help someone with the disease. But the obvious problem is that it does not scale very well when new cases keep increasing. Other approaches are using drugs developed for different illnesses, in the hope that they are sufficiently similar to covid-19 so that the medication would be effective. This is good since those medications have already passed all of the safety tests, but we just don&#8217;t know enough right now. Some reports suggest HIV drugs can help, other reports say they don&#8217;t. And so this may bear fruit, but it may be a while yet. The medicine promoted by Donald Trump, hydroxychloroquine, has not been found effective in any good research, and should not be counted on as a valid cure.\r\n</p>\r\n<p>\r\n   And that brings us back to the things we know are effective at this point, which is preventing people from passing on the virus by \r\n   <em>\r\n   social distancing\r\n   </em>\r\n   , i.e. quarantine, and massive testing. If people stay home and do not interact with other people, they cannot pass the disease along and the outbreak will eventually die off. This will work if done properly. To see this, I will use an example I pulled from Steve Mirsky of the \r\n   <a href=\"https://www.scientificamerican.com/podcast/science-talk/\" target=\"_blank\" rel=\"noreferrer noopener\">\r\n   Scientific American Podcast\r\n   </a>\r\n   , which requires less than a minute of spreadsheet work. This uses the reproduction factor R0, which is the average number of people who get infected by each person with the virus.\r\n</p>\r\n<figure class=\"wp-block-table\">\r\n   <table>\r\n      <tbody>\r\n         <tr>\r\n            <td>\r\n               Round\r\n            </td>\r\n            <td>\r\n               R0=1.3\r\n            </td>\r\n            <td>\r\n               R0=2.5\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               1\r\n            </td>\r\n            <td>\r\n               1.3\r\n            </td>\r\n            <td>\r\n               2.5\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               2\r\n            </td>\r\n            <td>\r\n               1.7\r\n            </td>\r\n            <td>\r\n               6.3\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               3\r\n            </td>\r\n            <td>\r\n               2.2\r\n            </td>\r\n            <td>\r\n               15.6\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               4\r\n            </td>\r\n            <td>\r\n               2.9\r\n            </td>\r\n            <td>\r\n               39.1\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               5\r\n            </td>\r\n            <td>\r\n               3.7\r\n            </td>\r\n            <td>\r\n               97.7\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               6\r\n            </td>\r\n            <td>\r\n               4.8\r\n            </td>\r\n            <td>\r\n               244.1\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               7\r\n            </td>\r\n            <td>\r\n               6.3\r\n            </td>\r\n            <td>\r\n               610.4\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               8\r\n            </td>\r\n            <td>\r\n               8.2\r\n            </td>\r\n            <td>\r\n               1525.9\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               9\r\n            </td>\r\n            <td>\r\n               10.6\r\n            </td>\r\n            <td>\r\n               3814.7\r\n            </td>\r\n         </tr>\r\n         <tr>\r\n            <td>\r\n               10\r\n            </td>\r\n            <td>\r\n               13.8\r\n            </td>\r\n            <td>\r\n               9536.7\r\n            </td>\r\n         </tr>\r\n      </tbody>\r\n   </table>\r\n   <figcaption>\r\n      How the reproduction factor affects the spread\r\n   </figcaption>\r\n</figure>\r\n<p>\r\n   As we can see, with a factor of R0=1.3, which means each person infects on average 1.3 others, after ten rounds of infection it has only spread to 14 other people. But with R0=2.5, which doesn&#8217;t seem that much different, ten rounds means 9,536 people have the disease. Now, there are two primary factors affecting R0. One is the inherent infectiousness of the virus, which is high and out of our control. The other factor is how many people each person interacts with, and that is what we are trying to reduce through social distancing.\r\n</p>\r\n<p>\r\n   Testing is still important, even at this stage, because it does several good things. First, it helps with the allocation of resources if we know exactly where the worst spots are. Second, it saves time and equipment in hospitals if we know exactly who is sick. Third, this gets us data we need to plan for future outbreaks. This pandemic is not the last one we will face, and this one won&#8217;t be over soon either. We need to know everything we can about how it spreads. And finally, we need a robust testing regime in place before we can &#8220;safely&#8221; start to resume our lives. \r\n</p>\r\n<blockquote>\r\n   <p>\r\n      There’s also the fact that, eventually, we’re going to want to go back outside again. As the current protocols start to relax,&nbsp;\r\n      <a href=\"https://fivethirtyeight.com/videos/why-we-shouldnt-hope-covid-19-is-seasonal-like-the-flu/\">\r\n      a second wave of infections may arise,\r\n      </a>\r\n      &nbsp;especially if we don’t have a good grasp on where and how many cases we have in the U.S., said Dr. Eli Perencevich, a professor of medicine and epidemiology at the University of Iowa.\r\n   </p>\r\n   <p>\r\n      “We can’t stay in social distancing forever,” Perencevich said. “So we need to ramp up testing quickly.”\r\n   </p>\r\n   <cite>\r\n   <a href=\"https://fivethirtyeight.com/features/why-we-still-need-to-test-widely-for-coronavirus/\">\r\n   https://fivethirtyeight.com/features/why-we-still-need-to-test-widely-for-coronavirus/\r\n   </a>\r\n   </cite>\r\n</blockquote>\r\n<p>\r\n   So, the bottom line is that a vaccine is most likely 18 months away, medicines may be months away, and right now the best thing we can do as individuals is isolate.\r\n</p>\r\n\r\n',198,100,0,'CC-BY-SA','Health, Coronavirus, COVID-19',0,0,1),
(3049,'2020-04-09','What computers taught me about reality',1451,'Klaatu tells us what computers taught him about reality','<p>Some musings about what computers taught me about reality and perception.</p>',78,0,0,'CC-BY-SA','philosophy,system design',0,0,1),
(3044,'2020-04-02','mocp snooze tip',391,'A quick snooze tip when using mocp','<p>I use cordless headphones, I find this very handy when I want <code>mocp</code> to play for a set time then pause.</p>\r\n<p>Commands used</p>\r\n<ul>\r\n<li><p>Ctrl + r, to quickly find the command</p></li>\r\n<li><p><code>sleep 10m && mocp -G</code></p></li>\r\n<li><p><code>sleep 10m && mocp -M ~/.moc/audiobooks -G</code></p></li>\r\n<li><p><code>sleep 5h && iplayer-url</code></p></li>\r\n</ul>',201,0,1,'CC-BY-SA','Linux, bash, podcasts, audio',0,0,1),
(3056,'2020-04-20','Jitsi',764,'Jitsi is an open-source multiplatform videoconferencing ','<p>Jitsi is a collection of free and open-source multiplatform voice, videoconferencing and instant messaging applications for the web platform, Windows, Linux, Mac OS X and Android</p>\r\n<p>Jitsi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small><small>(<b>Editor\'s Note</b>: show notes amended 2020-06-13 from comment)</small></small></p>\r\n<pre><code>systemctl stop docker\r\n\r\nrm -Rf /var/lib/docker\r\nrm -Rf ~/.jitsi-meet-cfg\r\n\r\n# change docker-data to your path you want to put images in\r\nmount --rbind /media/moredata/docker-data /var/lib/docker\r\n\r\napt-get remove --purge install docker-ce docker-ce-cli containerd.io\r\napt-get install docker-ce docker-ce-cli containerd.io\r\n\r\ncurl -L &quot;https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose\r\nchmod +x /usr/local/bin/docker-compose\r\n\r\ngit clone https://github.com/jitsi/docker-jitsi-meet &amp;&amp; cd docker-jitsi-meet\r\n\r\nsystemctl restart docker\r\n\r\ncp env.example .env\r\nmkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb}\r\n\r\ndocker-compose --log-level DEBUG up -d --force-recreate --remove-orphans\r\n\r\ntail -f `find /var/lib/docker/containers -iname &quot;*.log&quot; `\r\n\r\ndocker container ls\r\n\r\ndocker exec -it d4c89a799fd7 bash\r\n\r\n# side that will be controlled needs to run\r\nhttps://github.com/jitsi/jitsi-meet-electron/releases/latest</code></pre>\r\n<ul>\r\n<li><p><a href=\"https://rmccurdy.com/.scripts/videos/rmccurdy_com/HPR_Jitsi.mp4\" class=\"uri\">https://rmccurdy.com/.scripts/videos/rmccurdy_com/HPR_Jitsi.mp4</a></p></li>\r\n<li><p><a href=\"https://rmccurdy.com/.scripts/videos/rmccurdy_com/HPR_Jitsi.mp3\" class=\"uri\">https://rmccurdy.com/.scripts/videos/rmccurdy_com/HPR_Jitsi.mp3</a></p></li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','linux,debian,computers,software,internet,Jitsi,video,conferencing,open-source',0,0,1),
(3050,'2020-04-10','Linux Inlaws S01E04 What\'s in a name',4396,'Season 1, Episode 4. The episode where the legacy is revealed','<p>This is Linux Inlaws, a series on free and open source software, black humour, the revolution and freedom in general (this includes ideas and software) and generally having fun.</p>\r\n<p>Linux Inlaws - a podcast about on topics around free and open source software, any associated contraband, communism / the revolution in general and whatever else fancies your tickle.</p>\r\n<p>Please note that this and other episodes may contain strong language, offensive humor and other certainly not politically correct language - you have been warned (our parents insisted on this disclaimer - happy mum?). Thus the content is not suitable for consumption in the workplace (especially when played back on a speaker in an open plan office or similar environments), any minors under the age of 35 or any pets including fluffy little killer bunnies, your trusty guide dog (unless on speed) and cute t-rexes or other associated dinosaurs.</p>\r\n<p>In this show the lads Martin and Chris speak about the legacy, its name and also introduce Tech Support from the Dark Side, a new hotline helping politicians and other users in need of computer support to cope with reality.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Martin’s BBC podcast: <a href=\"https://www.bbc.co.uk/programmes/w13xttx2/episodes/downloads\" class=\"uri\">https://www.bbc.co.uk/programmes/w13xttx2/episodes/downloads</a></li>\r\n<li>Chris’ food for thought: <a href=\"https://en.wikipedia.org/wiki/Moon_landing_conspiracy_theories\" class=\"uri\">https://en.wikipedia.org/wiki/Moon_landing_conspiracy_theories</a></li>\r\n<li>Martin’s new laptop spec: <a href=\"https://www.asus.com/Laptops/ROG-Strix-SCAR-III/Tech-Specs\" class=\"uri\">https://www.asus.com/Laptops/ROG-Strix-SCAR-III/Tech-Specs</a></li>\r\n<li>Chris’ documentary: <a href=\"https://en.wikipedia.org/wiki/Terminator:_The_Sarah_Connor_Chronicles\" class=\"uri\">https://en.wikipedia.org/wiki/Terminator:_The_Sarah_Connor_Chronicles</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','linux inlaws,communism,free and open source software',0,0,1),
(3052,'2020-04-14','Locating computers on a network',1322,'Ken explains some different ways to locate computers on the network','<h1>Locating computers on a network</h1>\r\n\r\n<p>Sometimes you may wish to locate a device on your network. It might be to find rogue devices, or to locate a new device be that a printer, an Internet of Things light bulb, or whatever. In my case I was trying to track down a RaspberryPi. Raspbian now lists the IP Addresses assigned to it when it first starts, but that requires a monitor to be connected.</p>\r\n\r\n<h2 id=\"locating-using-your-router\">Locating using your router.</h2>\r\n\r\n<p>This is by far the easiest way to find a new device but it is also the most manual. If you have access to the (WiFi) Router/<a href=\"https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol\">DHCP</a> server on your network then this should be a matter of logging in and getting the address from the menu area probably called <code>Network</code> or <code>LAN</code> or something like that. So first list all the computers that are on the network. Then turn on your pi, and see if a new one has joined. If you\'re lucky it may even be labeled <em>Raspberry Pi Foundation</em>.</p>\r\n\r\n<p>In my case I want to locate these devices automatically using a script. So below we will explore some ways that you can approach the problem of locating devices on your network. All of them rely on trying to find the mapping between an Ethernet MAC Address, and a IP Address. It will help to understand a little about how Ethernet works. This is a nice short overview, <a href=\"https://www.youtube.com/watch?v=5u52wbqBgEY\">How does Ethernet work? (animated)</a> by <a href=\"https://www.youtube.com/channel/UCXkx8hX8Xo4lb7T0_-yZzVg\">Janos Pasztor</a></p>\r\n\r\n<h2 id=\"arp\">ARP</h2>\r\n\r\n<p>I don\'t know the network device you will be using so I\'d like to share a few ways of doing this using the <a href=\"https://en.wikipedia.org/wiki/Address_Resolution_Protocol\">ARP</a> protocol. This provides a mapping between a device\'s permanent <a href=\"https://en.wikipedia.org/wiki/MAC_address\">MAC address</a> and their, often temporarily, assigned <a href=\"https://en.wikipedia.org/wiki/IP_address\">IP address</a>.</p>\r\n\r\n<p>When your computer <code>192.168.1.1</code> wants to talk to another device it will need to know the Ethernet <a href=\"https://en.wikipedia.org/wiki/MAC_address\">MAC address</a> of the other device. Let\'s assume it wants to connect to the local printer <code>192.168.1.2</code> that is on the same network, and it knows its IP Address. If your computer has already heard the printer communicate on the network, it will have already added the printer\'s IP address and MAC Address to its so called ARP table. Over time older entries will be removed from this table either because they are too old, or there were too many entries.</p>\r\n\r\n<p>Linux has a command called <code>arp</code> which will show you a list of the IP addresses mapped to the MAC/HWaddress address.</p>\r\n<pre><code># arp -n\r\nAddress                  HWtype  HWaddress           Flags Mask            Iface\r\n192.168.1.254            ether   ff:ee:dd:cc:bb:aa   C                     eno1\r\n192.168.1.2              ether   00:11:22:33:44:55   C                     eno1\r\n192.168.1.1              ether   00:aa:bb:cc:dd:ee   C                     eno1\r\n</code></pre>\r\n\r\n<p>From a <a href=\"https://en.wikipedia.org/wiki/Internet_Protocol\">Internet Protocol (IP)</a> point of view all your devices in your house are probably in the same <a href=\"https://en.wikipedia.org/wiki/Subnetwork\">Subnet(work)</a>. But what if you need to communicate outside your network? For example to ping a well known server <code>8.8.8.8</code> to check if you have an Internet Connection. The IP settings also include a <a href=\"https://en.wikipedia.org/wiki/Default_gateway\">Default gateway</a> to send all traffic not intended for the local network.</p>\r\n\r\n<h2 id=\"finding-the-default-gateway\">Finding the Default gateway</h2>\r\n\r\n<p>Your computer will have many IP Addresses configured but it\'s a good bet that the network you and your new pi are on is the same one as the default gateway is on. You can find the default gateway using the following command:</p>\r\n<pre><code>$ route -n | grep -E \'Destination|^0.0.0.0\'\r\nDestination     Gateway         Genmask         Flags Metric Ref    Use Iface\r\n0.0.0.0         192.168.1.254   0.0.0.0         UG    100    0        0 eno1\r\n</code></pre>\r\n\r\n<p>It uses <code>route</code> to show the route table showing IP Addresses and not network names. The first column is <code>Destination</code> and so a <code>0.0.0.0</code> there means <em>route everything else to</em> and the <em>to</em> we get from the second column <code>Gateway</code>, which is our gateway.</p>\r\n\r\n<p>You can also get the same information using the following command:</p>\r\n<pre><code>$ ip route show | grep default\r\ndefault via 192.168.1.254 dev eno1 proto dhcp metric 100\r\n</code></pre>\r\n\r\n<p>And now to just show the IP Address.</p>\r\n\r\n<pre><code>$ route -n | awk &#39;/^0.0.0.0/ {print $2}&#39;\r\n192.168.1.254\r\n</code></pre>\r\n\r\n\r\n<p>From an Ethernet point of view it needs to find the <a href=\"https://en.wikipedia.org/wiki/MAC_address\">MAC address</a> associated with your router/default gateway\'s IP address <code>192.168.1.254</code>, so that it can send Ethernet Frames to it. In our case the address is in the ARP table, but if it wasn\'t then your computer would broadcast to everyone on the network using a special address <code>ff:ff:ff:ff:ff:ff</code>. When the router/default gateway replies that entry will be added to the ARP table.</p>\r\n\r\n<pre><code>\r\n739  5.328679069  00:aa:bb:cc:dd:ee  ff:ff:ff:ff:ff:ff  ARP  42  Who has 192.168.1.254? Tell 192.168.1.1\r\n746  5.328911559  ff:ee:dd:cc:bb:aa  00:aa:bb:cc:dd:ee  ARP  60  192.168.1.254 is at ff:ee:dd:cc:bb:aa\r\n</code></pre>\r\n\r\n<p>Have a play with <a href=\"https://www.wireshark.org/\">WireShark</a> to see what is actually going on on your network. There is a good step by step walk through on <a href=\"https://en.wikiversity.org/wiki/Wireshark/Arp\">Wireshark/Arp</a> on wikiversity.</p>\r\n\r\n<p>All RaspberryPi computers have an Ethernet <a href=\"https://en.wikipedia.org/wiki/MAC_address\">MAC address</a> starting with <a href=\"https://hwaddress.com/company/raspberry-pi-foundation\"><code>b8:27:eb</code> or <code>dc:a6:32</code></a>. So if your computer and the new pi are on the same network you can look for new MAC addresses starting with <code>b8:27:eb</code> or <code>dc:a6:32</code>.</p>\r\n\r\n<h2 id=\"foiled-by-the-switch\">Foiled by the Switch</h2>\r\n\r\n<p>All is not plain sailing as most modern <a href=\"https://en.wikipedia.org/wiki/Local_area_network\">LAN</a>\'s use <a href=\"https://en.wikipedia.org/wiki/Network_switch\">switches</a> to split up the <a href=\"https://en.wikipedia.org/wiki/Broadcast_domain#Further_explanation\">broadcast domain</a>.</p>\r\n\r\n<blockquote cite=\"https://en.wikipedia.org/wiki/Broadcast_domain#Further_explanation\">\r\nSwitches act as buffers, receiving and analyzing the frames from each connected network segment. Frames destined for nodes connected to the originating segment are not forwarded by the switch. Frames destined for a specific node on a different segment are sent only to that segment. Only broadcast frames are forwarded to all other segments. This reduces unnecessary traffic and collisions.\r\n</blockquote>\r\n\r\n<p>What this means is that although all your computers may be on one big IP network, the devices may be connected to different switches. For example a WiFi Router downstairs, a Cabled Switch in the back room, and a network extender in the attic. All are filtering out unnecessary traffic. While that is a good thing, it does mean that it may not ever see the traffic from the new Pi.</p>\r\n\r\n<p>If we try and contact each and every IP Address on the network, that forces ARP \"Who has?\" traffic, and the answers that come back will be added to the arp table. There are a few ways to force this discovery.</p>\r\n\r\n<h2 id=\"discovery-by-ping\">Discovery by ping</h2>\r\n\r\n<p>One way to generate ARP traffic is to use the <a href=\"https://en.wikipedia.org/wiki/Ping_(networking_utility)\">ping</a> utility.</p>\r\n\r\n<blockquote cite=\"https://en.wikipedia.org/wiki/Ping_(networking_utility)n\">\r\nPing measures the round-trip time for messages sent from the originating host to a destination computer that are echoed back to the source. The name comes from active sonar terminology that sends a pulse of sound and listens for the echo to detect objects under water.\r\n</blockquote>\r\n\r\n<p>To ping an IP Address, just type <code>ping 192.168.1.1</code>. That will send out a continuous ping which you can stop by pressing and holding the <em>ctrl</em> key and then pressing the letter <em>c</em>.</p>\r\n\r\n<pre><code>$ ping 192.168.1.1\r\nPING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.\r\n64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=0.547 ms\r\n64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=0.493 ms\r\n64 bytes from 192.168.1.1: icmp_seq=3 ttl=63 time=0.422 ms\r\n64 bytes from 192.168.1.1: icmp_seq=4 ttl=63 time=0.466 ms\r\n^C\r\n--- 192.168.1.1 ping statistics ---\r\n4 packets transmitted, 4 received, 0% packet loss, time 3105ms\r\nrtt min/avg/max/mdev = 0.422/0.482/0.547/0.045 m\r\n</code></pre>\r\n\r\n<p>We don\'t actually care about the output, as the point here is to generate some traffic to see who is awake. So we can redirect output and errors to <a href=\"https://en.wikipedia.org/wiki/Null_device\">/dev/null</a>. So a good command to do this would be:</p>\r\n\r\n<pre><code>ping -n -c 1 -W 1 192.168.1.1 &gt;/dev/null 2&gt;&amp;1 &amp;</code></pre>\r\n\r\n<p>The options used are to limit the traffic and wait time as much as possible:</p>\r\n\r\n<pre><code>-n Numeric output only.  No attempt will be made to lookup symbolic names for host addresses.\r\n-c count. Stop after sending count ECHO_REQUEST packets. With deadline option, ping waits for count ECHO_REPLY packets, until the timeout expires.\r\n-W timeout. Time to wait for a response, in seconds. The option affects only timeout in absence of any responses, otherwise ping waits for two RTTs.\r\n</code></pre>\r\n\r\n<p>In this solution we will try and <a href=\"https://en.wikipedia.org/wiki/Ping_(networking_utility)\">ping</a> every host on the network. It would be a bit tedious to do each one by one, so we will make a script to do this for us. It\'s a very safe bet that your home network will have a private IP range of 192.168.???.0 to 192.168.???.255. This is not a safe assumption in an Office Environment but we can deal with that later.</p>\r\n\r\n<p>So we will try and find the <em>base</em> part of the subnet <code>192.168.1.1</code> which will be <code>192.168.1</code> and then we will ping each address in turn.</p>\r\n\r\n<pre><code>base=$( ip route show | awk -F &#39;\\\\.|/| &#39; &#39;/default/ {print $3&quot;.&quot;$4&quot;.&quot;$5}&#39; )\r\nfor node in {1..254}\r\ndo\r\n( ping -n -c 1 -W 1 ${base}.${node} &amp; )\r\ndone\r\n</code></pre>\r\n\r\n<p>I\'m assigning the <code>base</code> variable the first three parts of the IP Address and then I am cycling through all possible addresses sending out a <a href=\"https://en.wikipedia.org/wiki/Ping%20%28networking_utility%29\">ping</a> (a sort of hello message) to each. By wrapping the whole thing in <code>()</code> we can <em>fork</em> each to run at the same time.</p>\r\n\r\n<p>This will force some traffic between my computer and every computer on the network, which will fill up the arp table on my pc.</p>\r\n\r\n<pre><code># arp -n\r\nAddress                  HWtype  HWaddress           Flags Mask            Iface\r\n192.168.1.2              ether   00:11:22:33:44:55   C                     eno1\r\n192.168.1.1              ether   00:aa:bb:cc:dd:ee   C                     eno1\r\n192.168.1.10             ether   11:11:11:11:11:11   C                     eno1\r\n192.168.1.25             ether   22:22:22:22:22:22   C                     eno1\r\n192.168.1.3              ether   33:22:22:22:22:22   C                     eno1\r\n192.168.1.5              ether   b8:27:eb:11:11:11   C                     eno1\r\n</code></pre>\r\n\r\n<p>And now we find all the computers that are on, and responding to pings on the network. We can see that there is one that starts with <code>b8:27:eb|dc:a6:32</code>, and it has an IP Address of 192.168.1.5.</p>\r\n\r\n<pre><code># arp -n | grep -Ei &#39;b8:27:eb|dc:a6:32&#39; | awk &#39;{print $1}&#39;\r\n192.168.1.5\r\n</code></pre>\r\n\r\n<p>Putting it all together</p>\r\n\r\n<pre><code>base=$( ip route show | awk -F &#39;\\\\.|/| &#39; &#39;/default/ {print $3&quot;.&quot;$4&quot;.&quot;$5}&#39; )\r\nfor node in {1..254}\r\ndo\r\n  (ping -n -c 1 -W 1 ${base}.${node} &gt;/dev/null 2&gt;&amp;1 &amp;)\r\ndone\r\narp -n | grep -Ei &#39;b8:27:eb|dc:a6:32&#39; | awk &#39;{print $1}&#39;\r\n</code></pre>\r\n\r\n<h2 id=\"discovery-by-nmap\">Discovery by nmap</h2>\r\n\r\n<p>You should have <strong>permission in writing</strong> from your network administrator before you proceed with these steps.</p>\r\n\r\n<p>Here I am going to use some of the commands above together with the tools <a href=\"https://nmap.org/\">nmap</a> and <a href=\"https://github.com/nmav/ipcalc\">ipcalc</a> to locate and scan the network. This has the advantage of dealing with more exotic subnet masks.</p>\r\n\r\n<p>Find the default interface</p>\r\n\r\n<pre><code># route -n\r\nKernel IP routing table\r\nDestination     Gateway         Genmask         Flags Metric Ref    Use Iface\r\n0.0.0.0         192.168.1.254   0.0.0.0         UG    100    0        0 eno1\r\n....\r\n\r\n# route -n | grep -E &#39;^0.0.0.0&#39; | awk &#39;{print $8}&#39;\r\neno1\r\n</code></pre>\r\n\r\n<p>Find the ip and subnetmask for the default interface</p>\r\n<pre><code># ifconfig eno1 | grep &#39;inet &#39;\r\ninet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255\r\n\r\n# ifconfig eno1 | grep &#39;inet &#39; | awk &#39;{print $2&quot;/&quot;$4}&#39;\r\n192.168.1.1/255.255.255.0\r\n</code></pre>\r\n\r\n<p>Get the network from ipcalc</p>\r\n\r\n<pre><code># ipcalc 192.168.1.1/255.255.255.0\r\nAddress:        192.168.1.1\r\nNetwork:        192.168.1.0/24\r\nNetmask:        255.255.255.0 = 24\r\nBroadcast:      192.168.1.255\r\n\r\nAddress space:  Private Use\r\nAddress class:  Class C\r\nHostMin:        192.168.1.1\r\nHostMax:        192.168.1.254\r\nHosts/Net:      254\r\n\r\n# ipcalc 192.168.1.4/255.255.255.0 | grep &#39;Network&#39; | awk &#39;{print $NF}&#39;\r\n192.168.1.0/24\r\n</code></pre>\r\n<p>Now call nmap to give the ip address and MAC address</p>\r\n<pre><code># nmap -sn 192.168.1.0/24\r\nStarting Nmap 7.40 ( https://nmap.org ) at 2017-07-05 20:57 CEST\r\nNmap scan report for 192.168.1.2\r\nHost is up (0.0012s latency).\r\nMAC Address: 00:11:22:33:44:55 (Acme industries)\r\nNmap scan report for 192.168.1.5\r\nMAC Address: b8:27:eb:11:11:11 (Raspberry Pi Foundation)\r\nNmap scan report for local.lan (192.168.1.254)\r\nHost is up.\r\nNmap done: 256 IP addresses (2 hosts up) scanned in 3.51 seconds\r\n\r\n\r\n-sn (No port scan) This option tells Nmap not to do a port scan after host discovery, and only print out the available hosts that responded to the host discovery probes. This is often known as a “ping scan”, but you can also request that traceroute and NSE host scripts be run. In previous releases of Nmap, -sn was known as -sP.\r\n</code></pre>\r\n\r\n<h2 id=\"discovery-by-arp-scan\">Discovery by arp-scan</h2>\r\n\r\n<p>By far the easiest way to do this is using the dedicated tool called <a href=\"https://github.com/royhills/arp-scan\">arp-scan</a>, (<a href=\"https://linux.die.net/man/1/arp-scan\">Man Page</a>)</p>\r\n\r\n<pre><code># arp-scan --interface eno1 --localnet --numeric --ignoredups\r\nInterface: eno1, type: EN10MB, MAC: 20:47:47:ca:24:a6, IPv4: 192.168.10.14\r\nStarting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)\r\n192.168.1.2     00:11:22:33:44:55       Acme industries\r\n192.168.1.5     dc:a6:32:22:22:22       Raspberry Pi Trading Ltd\r\n192.168.1.233   b8:27:eb:11:11:11       Raspberry Pi Foundation\r\n192.168.1.254   e4:95:6e:00:00:00       IEEE Registration Authority\r\n\r\n12 packets received by filter, 0 packets dropped by kernel\r\nEnding arp-scan 1.9.7: 256 hosts scanned in 1.939 seconds (132.03 hosts/sec). 12 responded\r\n</code></pre>\r\n\r\n<p>Whichever option you chose I hope this helps you become more familiar with your network and the way it works.</p>\r\n',30,61,0,'CC-BY-SA','arp, ethernet, ip address, dhcp, wireshark, nmap, ping, route, router, arp-scan, wikiversity',0,0,1),
(3053,'2020-04-15','AudioBookClub 17 - Blood Witness',9328,'Straight out of the Freezer, the HPR Audiobook Club reviews Blood Witness by David Hitt','<h1 id=\"in-this-episode-the-hpr-audiobook-club-discusses-the-audiobook-blood-witness-by-david-hitt\">In this episode the HPR Audiobook Club discusses the audiobook <a href=\"https://www.scribl.com/books/PA513/blood-witness\">Blood Witness</a> by David Hitt</h1>\r\n<hr />\r\n<h1 id=\"non-spoiler-thoughts\">Non-Spoiler Thoughts</h1>\r\n<hr />\r\n<ul>\r\n<li>This book may or may not be offensive to some. We discuss.</li>\r\n<li>Audio quality was generally good, very few double reads.</li>\r\n<li>Thaj is annoyed by the transition sound.</li>\r\n<li>We generally enjoyed the theme music.</li>\r\n<li>We discuss the characters that we found the most interesting.</li>\r\n<li>Lyle apologizes for being unintentionally offensive.</li>\r\n<li>How do vampires work in this book anyways ?</li>\r\n</ul>\r\n<h1 id=\"beverage-reviews\">Beverage Reviews</h1>\r\n<hr />\r\n<p>As usual, the HPR AudioBook Club took some time to review the beverages that each of us were drinking during the episode</p>\r\n<ul>\r\n<li><strong>Thaj:</strong> Water, and a bit of something different. Thaj has had a rough week so he treated himself to <a href=\"https://www.worldmarket.com/product/daelmans-dutch-caramel-waffles.do\">Daelmans Wafers</a></li>\r\n<li><strong>x1101:</strong> <a href=\"https://redhook.com/beers/redhook-ipa\">Redhook Longhammer IPA</a></li>\r\n<li><strong>pokey:</strong> Pokey’s beverage in this episode is Twisted Cabernet Savaugnon.</li>\r\n<li><strong>FiftyOneFifty:</strong> <a href=\"https://www.beeradvocate.com/beer/profile/37795/147598/\">Mike’s Hard Smashed Apple Ale</a></li>\r\n</ul>\r\n<h1 id=\"things-we-talked-about\">Things We talked about</h1>\r\n<hr />\r\n<ul>\r\n<li>Pokey thinks the ending is not strong.</li>\r\n<li>He also finds some plot holes.</li>\r\n<li>There is a big door for a sequel.</li>\r\n<li>The logistics of becoming a vampire.</li>\r\n<li>Why \"Twilight\" sucks.</li>\r\n<li>How the characters react to becoming a vampire.</li>\r\n<li>The book wasn’t as graphic as we anticipated.</li>\r\n<li>We introduce… OneFiftyOneFifty!</li>\r\n<li>Fire!!!</li>\r\n<li>Sparks vs. allsparks</li>\r\n<li>Link in the shownotes…or not.</li>\r\n<li>Do you need a \"good person\" to cheer on in a story to enjoy it?</li>\r\n<li><a href=\"https://edictzero.wordpress.com/\">Edict Zero:FIS</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=-PSP2Adz5j8\">The Lab Rats - Devil’s Train</a></li>\r\n<li><a href=\"https://monsterjavaguns.com/\">https://monsterjavaguns.com/</a></li>\r\n<li>OK, so we gave up on the book and just talked about games.</li>\r\n</ul>\r\n<h1 id=\"our-next-audiobook\">Our Next Audiobook</h1>\r\n<hr />\r\n<p><a href=\"https://startrekcontinuingmission.com/\">Star Trek: The Continuing Mission</a></p>\r\n<h1 id=\"the-next-audiobook-club-recording\">The Next Audiobook Club Recording</h1>\r\n<hr />\r\n<p>Right now we are working through a backlog of older episode that have already been recorded. Once that ends we fully anticipate recording new episodes with listener participation.</p>\r\n<h1 id=\"further-recommendations\">Further Recommendations</h1>\r\n<hr />\r\n<ul>\r\n<li><a href=\"https://play.google.com/store/apps/details?id=com.watabou.pixeldungeon&amp;hl=en\">Pixel Dungeon</a></li>\r\n<li><a href=\"https://www.canakit.com/raspberry-pi-starter-kit.html\">Raspberry Pi 2 Kit</a></li>\r\n<li><a href=\"https://news.bbcimg.co.uk/media/images/81372000/jpg/_81372893_b_ivlqbu0aesbph.jpglarge.jpg\">Dollar Nemoy</a></li>\r\n</ul>\r\n<h1 id=\"feedback\">Feedback</h1>\r\n<hr />\r\n<p>Thank you very much for listening to this episode of the HPR AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you’ll consider joining us next time we record a new episode. Please leave a few words in the episode’s comment section.</p>\r\n<p>As always; remember to visit the HPR contribution page HPR could really use your <a href=\"https://hackerpublicradio.org/help_out.php\">help</a> right now.</p>\r\n<p>Sincerely, The HPR Audiobook Club</p>\r\n<p><em>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</em></p>\r\n<h1 id=\"our-audio\">Our Audio</h1>\r\n<hr />\r\n<p>This episode was processed using <a href=\"https://audacity.sourceforge.net/\">Audacity</a>. We’ve been making small adjustments to our audio mix each month in order to get the best possible sound. Its been especially challenging getting all of our voices relatively level, because everyone has their own unique setup. Mumble is great for bringing us all together, and for recording, but it’s not good at making everyone’s voice the same volume. We’re pretty happy with the way this month’s show turned out, so we’d like to share our editing process and settings with you and our future selves (who, of course, will have forgotten all this by then).</p>\r\n<p>We use the \"Truncate Silence\" effect with it’s default settings to minimize the silence between people speaking. When used with it’s default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes a conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying \"uuuuummmm.\" Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too aggressively your audio may sound sped up and choppy.</p>\r\n<p>Next we use the \"Compressor\" effect with the following settings:</p>\r\n<pre><code>Threshold: -30db\r\nNoise Floor: -50db\r\nRatio: 3:1\r\nAttack Time: 0.2sec\r\nDecay Time: 1.0 sec</code></pre>\r\n<p>\"Make-up Gain for 0db after compressing\" and \"compress based on peaks\" were both left un-checked.</p>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from the file and save them in a separate file for possible use as outtakes after the closing music.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can \"Mix and Render\" all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR server.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the .aup file to .FLAC so that we can paste a copy of the shownotes into the audio file’s metadata.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being \"crashy\" but if you remember save after every major transform, you will wonder how it ever got that reputation.</p>\r\n',157,53,1,'CC-BY-SA','HPR Audiobook Club,Audiobooks,Horror',0,0,1),
(3060,'2020-04-24','Running a local imap server',360,'Ken installs courier-imap locally to have a local backup of his mail.','<h1 id=\"setting-up-a-local-imap-server\">Setting up a local imap server</h1>\r\n<p>To install a local imap daemon that will only listen to localhost connections, made via ssh tunneling. This is for use as a local backup of your imap files, or for keeping a remote backup somewhere.</p>\r\n<p>This is not a mail delivery solution but rather a way to keep a backup of your email using to a <code>MailDir</code> directory that you can access using your email client. As each message is stored in its own file, you can also use normal tools like <code>find|sed|awk|grep</code> to find messages.</p>\r\n<p>This setup can be installed locally or remotely on, for example, a raspberry pi. In that case you can enable a portforwarding rule in <code>~/.ssh/config</code> to include something like <code>LocalForward 127.0.0.1:2143 127.0.0.1:143</code></p>\r\n<p>Install using <code>aptitude install courier-imap courier-authdaemon</code></p>\r\n<p>You can check the status using <code>systemctl status courier-imap.service courier-authdaemon.service</code></p>\r\n<p>Edit the file <code>/etc/courier/imapd</code> and modify the following settings:</p>\r\n<p>Address to listen on, can be set to a single IP address.</p>\r\n<pre><code>    &lt; ADDRESS=0\r\n    &gt; ADDRESS=127.0.0.1\r\n</code></pre>\r\n<p>Maximum number of IMAP servers started</p>\r\n<pre><code>    &lt; MAXDAEMONS=40\r\n    &gt; MAXDAEMONS=80\r\n</code></pre>\r\n<p>Maximum number of connections to accept from the same IP address</p>\r\n<pre><code>    &lt; MAXPERIP=20\r\n    &gt; MAXPERIP=40\r\n</code></pre>\r\n<p>The following setting is optional, and causes messages from the given folder to be automatically deleted after the given number of days.</p>\r\n<pre><code>    &lt; IMAP_EMPTYTRASH=Trash:7\r\n    &gt; #IMAP_EMPTYTRASH=Trash:7\r\n</code></pre>\r\n<p>Change the directory name of the maildir directory.</p>\r\n<pre><code>    &lt; MAILDIRPATH=Maildir\r\n    &gt; MAILDIRPATH=/home/pi/MailDir\r\n</code></pre>\r\n<p>Then restart the service using <code>systemctl restart courier-imap.service courier-authdaemon.service</code>.</p>\r\n<p>When I did this I got a strange error about but installing the package <code>gamin</code> fixed it. Which is a <em>Library providing the FAM File Alteration Monitor API</em>.</p>\r\n<pre><code>  Filesystem notification initialization error -- contact your mail\r\n  administrator (check for configuration errors with the FAM/Gamin library)\r\n</code></pre>\r\n<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://www.courier-mta.org/imap/documentation.html\">https://www.courier-mta.org/imap/documentation.html</a></li>\r\n<li><a href=\"https://www.faqforge.com/linux/fix-for-courier-imap-error-check-for-configuration-errors-with-the-famgamin-library/\">https://www.faqforge.com/linux/fix-for-courier-imap-error-check-for-configuration-errors-with-the-famgamin-library/</a></li>\r\n</ul>\r\n',30,0,0,'CC-BY-SA','courier, imap, MailDir, raspberrypi',0,0,1),
(3058,'2020-04-22','The COVID-19 Work From Home Stream - Day 3',6065,'A few HPR characters decide to spend some of their social distancing time being social','<p>Friday 2020-03-02</p>\r\n<ul>\r\n<li>A secret message left for Thaj (for the record it pronounced like the Taj in Taj Mahal)</li>\r\n<li>How do you use a bidet?</li>\r\n<li>The different ways to organize work from home</li>\r\n<li>Kids and working from home</li>\r\n<li><a href=\"https://www.youtube.com/watch?v=CdJ6VzIthRY&amp;feature=youtu.be\">Jon\'s video</a></li>\r\n<li><a href=\"https://lbry.com/\">LBRY</a></li>\r\n<li>Driving is not fun</li>\r\n<li>More ffmpeg talk</li>\r\n<li>Bidets come up again</li>\r\n<li>#oggcastplanet on Freenode</li>\r\n<li>Programming languages</li>\r\n<li>By the way...I run Arch</li>\r\n<li>Kevin Wisher and Thaj talk shop</li>\r\n<li>What is that accent?</li>\r\n</ul>\r\n',270,0,1,'CC-BY-SA','Bidets, ffmpeg, driving, Programming, Arch Linux, OggcastPlanet, education',0,0,1),
(3061,'2020-04-27','Parental Controls With Mike Ivy',2051,'We talk about Parental Controls and IOT device ','<ul>\r\n<li>Amazon free time</li>\r\n<li>Microsoft family safety live account</li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','IOT,hacking,amazon,android,firestick',0,0,1),
(3057,'2020-04-21','Formal verification with Coq',1271,'Tuula talks about formally verifying code','<p><a href=\"https://coq.inria.fr/\">Coq</a> is interactive theorem prover, which comes with its own programming language Gallina.</p>\r\n<p>If we wanted to write function that calculates resulting blood type based on two gene alleles, we could do it as following.</p>\r\n<p>Start by defining types that represents alleles and resulting blood type:</p>\r\n<pre><code>Inductive BloodTypeAllele : Type :=\r\n  | BloodTypeA\r\n  | BloodTypeB\r\n  | BloodTypeO.\r\n\r\nInductive BloodType : Type :=\r\n  | TypeA\r\n  | TypeB\r\n  | TypeAB\r\n  | TypeO.</code></pre>\r\n<p>Mapping between them is defined as follows:</p>\r\n<pre><code>Definition bloodType (a b : BloodTypeAllele) : BloodType :=\r\n  match a, b with\r\n  | BloodTypeA, BloodTypeA =&gt; TypeA\r\n  | BloodTypeA, BloodTypeO =&gt; TypeA\r\n  | BloodTypeA, BloodTypeB =&gt; TypeAB\r\n  | BloodTypeB, BloodTypeB =&gt; TypeB\r\n  | BloodTypeB, BloodTypeA =&gt; TypeAB\r\n  | BloodTypeB, BloodTypeO =&gt; TypeB\r\n  | BloodTypeO, BloodTypeA =&gt; TypeA\r\n  | BloodTypeO, BloodTypeB =&gt; TypeB\r\n  | BloodTypeO, BloodTypeO =&gt; TypeO\r\n  end.</code></pre>\r\n<p>Notice that the only way of getting <code>TypeO</code> blood is for both alleles to be <code>BloodTypeO</code>.</p>\r\n<p>We can state theorems about the code:</p>\r\n<pre><code>Theorem double_O_results_O_type :\r\n  bloodType BloodTypeO BloodTypeO = TypeO.\r\nProof.\r\n  reflexivity.\r\n  Qed.</code></pre>\r\n<p><code>double_O_results_O_type</code> states that <code>bloodType BloodTypeO BloodTypeO</code> will have value of <code>TypeO</code>. There’s also attached proof for this theorem.</p>\r\n<p>Second theorem is longer:</p>\r\n<pre><code>Theorem not_double_O_does_not_result_O_type :\r\n  forall (b1 b2 : BloodTypeAllele),\r\n  b1 &lt;&gt; BloodTypeO \\/ b2 &lt;&gt; BloodTypeO -&gt;\r\n  bloodType b1 b2 &lt;&gt; TypeO.\r\nProof.\r\n  intros.\r\n  destruct b1.\r\n  - destruct b2.\r\n    + discriminate.\r\n    + discriminate.\r\n    + discriminate.\r\n  - destruct b2.\r\n    + discriminate.\r\n    + discriminate.\r\n    + discriminate.\r\n  - destruct b2.\r\n    + discriminate.\r\n    + discriminate.\r\n    + destruct H.\r\n      * simpl. contradiction.\r\n      * simpl. contradiction.\r\nQed.</code></pre>\r\n<p>It states that if <code>bloodType</code> is applied with anything else than two <code>BloodTypeO</code>, the result will not be <code>TypeO</code>. Proof for this is longer. It goes through each and every combination of parameters and proves that the result isn’t <code>TypeO</code>. Mathematician could write this as: ∀ b1 b2, b1 ≠ BloodTypeO ∨ b2 ≠ BloodTypeO → bloodType b1 b2 ≠ TypeO.</p>\r\n<p>If code above is in module called <code>Genes</code>, we can add following at the end to instruct compiler to emit Haskell code:</p>\r\n<pre><code>Extraction Language Haskell.\r\nExtraction Genes.</code></pre>\r\n<p>Resulting code is as follows:</p>\r\n<pre><code>data BloodTypeAllele =\r\n   BloodTypeA\r\n | BloodTypeB\r\n | BloodTypeO\r\n\r\ndata BloodType =\r\n   TypeA\r\n | TypeB\r\n | TypeAB\r\n | TypeO\r\n\r\nbloodType :: BloodTypeAllele -&gt; BloodTypeAllele -&gt; BloodType\r\nbloodType a b =\r\n  case a of {\r\n   BloodTypeA -&gt; case b of {\r\n                  BloodTypeB -&gt; TypeAB;\r\n                  _ -&gt; TypeA};\r\n   BloodTypeB -&gt; case b of {\r\n                  BloodTypeA -&gt; TypeAB;\r\n                  _ -&gt; TypeB};\r\n   BloodTypeO -&gt;\r\n    case b of {\r\n     BloodTypeA -&gt; TypeA;\r\n     BloodTypeB -&gt; TypeB;\r\n     BloodTypeO -&gt; TypeO}}</code></pre>\r\n<p>Now we have Haskell code that started in Coq, has two properties formally verified and is ready to be integrated with rest of the system.</p>\r\n<p>Further reading:</p>\r\n<ul>\r\n<li><a href=\"https://softwarefoundations.cis.upenn.edu/\">Software Foundations</a></li>\r\n<li><a href=\"https://cel.archives-ouvertes.fr/file/index/docid/459139/filename/coq-hurry.pdf\">Coq in a Hurry</a></li>\r\n</ul>\r\n',364,0,0,'CC-BY-SA','Coq, Haskell, mathematics',0,0,1),
(3059,'2020-04-23','A quick intro to Snapcast',293,'A brief overview of Snapcast, an open source multi-room audio streaming system.','<p>Relevant links:</p>\r\n<ul>\r\n<li><a href=\"https://github.com/badaix/snapcast\">Snapcast</a></li>\r\n<li><a href=\"https://www.musicpd.org/\">MPD</a></li>\r\n<li><a href=\"https://mpv.io/\">mpv</a></li>\r\n<li><a href=\"https://github.com/badaix/snapdroid\">Snapdroid</a></li>\r\n<li><a href=\"https://github.com/atoomic/snapcast-volume-ui\">snapcast-volume-ui</a></li>\r\n<li><a href=\"https://github.com/badaix/snapcast/blob/master/doc/json_rpc_api/v2_0_0.md\">Snapcast JSON-RPC documentation</a></li>\r\n</ul>',386,0,1,'CC-BY-SA','opensource, selfhosted',0,0,1),
(3062,'2020-04-28','Vassal: How to play board games while remote',931,'How to do physical distancing while avoiding social distance using digitized boardgames','<p>A friend, a stranger and I played <a href=\"https://www.vassalengine.org/\">https://www.vassalengine.org/</a> together.</p>\r\n<p>We played the Carcasonne-simple 1.2 module downloaded from <a href=\"https://www.vassalengine.org/wiki/Module:Carcassonne\">https://www.vassalengine.org/wiki/Module:Carcassonne</a>.</p>\r\n<p>There are some things that may be confusing the first time, but the game engine works well, the rule- and tile-set we played worked well, text chat is surprisingly adequate for talking to people while playing, and I would like to play again some time.</p>\r\n<p>Original Fediverse post at <a href=\"https://libranet.de/display/0b6b25a8-675e-91bf-8b9d-5c6226360513\">https://libranet.de/display/0b6b25a8-675e-91bf-8b9d-5c6226360513</a>.</p>',311,95,0,'CC-BY-SA','game, board game, xmpp, remote, network game',0,0,1),
(3063,'2020-04-29','Pens, pencils, paper and ink - 1',879,'Looking at a few more of my writing implements','<h2 id=\"introduction\">Introduction</h2>\r\n<p>It’s been over four years since I did a show about fountain pens. It was in the <a href=\"https://hackerpublicradio.org/series/0023.html\" title=\"What&#39;s in My Toolkit\"><em>What’s in My Toolkit</em></a> series entitled <a href=\"https://hackerpublicradio.org/eps.php?id=1941\" title=\"What&#39;s in my case\"><em>What’s in my case</em></a>, show 1941 released on 2016-01-11.</p>\r\n<p>I thought it might be appropriate to visit the subject once again. I want to tell you about some new pens and pencils I have acquired, some inks I am enjoying and some of the notebooks I have bought.</p>\r\n<p>There’s too much for a single show here, so I’m making a mini-series of three shows. This also leaves the door open for more when the collection grows in the future!</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes with pictures for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr3063/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Fountain pens:\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Fountain_pen\">Wikipedia article</a></li>\r\n<li><a href=\"https://www.wikihow.com/Use-a-Fountain-Pen\">How to use a fountain pen</a></li>\r\n</ul></li>\r\n<li>Fountain pen revival:\r\n<ul>\r\n<li>Article in <em>“The Independent”</em>: <a href=\"https://www.independent.co.uk/news/long_reads/fountain-pens-stationery-writing-style-revival-a8707501.html\"><em>When a simple ballpoint just won’t do</em></a></li>\r\n</ul></li>\r\n<li>Reasons to use a fountain pen:\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/watch?v=xVksqX7_650\">13 Reasons Why You Should Use a Fountain Pen</a></li>\r\n</ul></li>\r\n<li>Vacuum filling pens:\r\n<ul>\r\n<li>How to use a vacuum filler: <a href=\"https://www.youtube.com/watch?v=qTOSY8U2UIM\">Video from Goulet Pens</a></li>\r\n<li>TWSBI VAC-20 ink bottle: <a href=\"https://www.youtube.com/watch?v=JYMt1wEdWd4\">Video from Goulet Pens</a></li>\r\n</ul></li>\r\n<li>Pen brands:\r\n<ul>\r\n<li><a href=\"https://www.lamy.com\">LAMY</a></li>\r\n<li><a href=\"https://www.twsbi.com/\">TWSBI</a></li>\r\n<li><a href=\"https://www.pilotpen.com/\">Pilot</a></li>\r\n<li><a href=\"https://troikaus.com\">Troika</a> <em>(US site)</em></li>\r\n</ul></li>\r\n<li>HPR links:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1941\">hpr1941 :: What’s in my case</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2061\">hpr2061 :: Handwriting</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2273\">hpr2273 :: Fountain Pens</a></li>\r\n</ul></li>\r\n</ul>',225,112,1,'CC-BY-SA','fountain pen,ballpoint pen',0,0,1),
(3064,'2020-04-30','How I got started in Electronics',427,'How I got started in Electronics and some job stuff','<p>Links:</p>\r\n<ul>\r\n<li><a href=\"https://archive.org/search.php?query=forrest%20mims\" class=\"uri\">https://archive.org/search.php?query=forrest%20mims</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Forrest_Mims\" class=\"uri\">https://en.wikipedia.org/wiki/Forrest_Mims</a></li>\r\n<li><a href=\"https://www.newark.com/mcm-partnership\" class=\"uri\">https://www.newark.com/mcm-partnership</a></li>\r\n<li><p><a href=\"https://www.allelectronics.com/\" class=\"uri\">https://www.allelectronics.com/</a></p></li>\r\n<li><p>This is where I found the doubler circuit.<br />\r\n<a href=\"https://www.zpag.net/Electroniques/Kit/Radio_Shack_-_Engineer&#39;s_Mini-Notebook_-_Basic_Semiconductor_Circuits.pdf\" class=\"uri\">https://www.zpag.net/Electroniques/Kit/Radio_Shack_-_Engineer\'s_Mini-Notebook_-_Basic_Semiconductor_Circuits.pdf</a></p></li>\r\n<li><p>Close approximation of my first transformer.<br />\r\n<img src=\"https://archive.org/download/screenshotfrimar27171804cdt2020/screenshot_Fri%20Mar%2027%2017%3A18%3A04%20CDT%202020.png\" alt=\"https://archive.org/download/screenshotfrimar27171804cdt2020/screenshot_Fri%20Mar%2027%2017%3A18%3A04%20CDT%202020.png\" /></p></li>\r\n<li><p>Power supplies I had in my teens.<br />\r\n<img src=\"https://archive.org/download/screenshotfrimar27171804cdt2020/screenshot_Fri%20Mar%2027%2017%3A16%3A04%20CDT%202020.png\" alt=\"https://archive.org/download/screenshotfrimar27171804cdt2020/screenshot_Fri%20Mar%2027%2017%3A16%3A04%20CDT%202020.png\" /><br />\r\n<img src=\"https://archive.org/download/screenshotfrimar27171804cdt2020/screenshot_Fri%20Mar%2027%2017%3A40%3A31%20CDT%202020.png\" alt=\"https://archive.org/download/screenshotfrimar27171804cdt2020/screenshot_Fri%20Mar%2027%2017%3A40%3A31%20CDT%202020.png\" /></p></li>\r\n<li>Places I worked.\r\n<ul>\r\n<li>Manu-tronics<br />\r\n<a href=\"https://www.bizjournals.com/milwaukee/stories/1999/01/25/daily21.html\" class=\"uri\">https://www.bizjournals.com/milwaukee/stories/1999/01/25/daily21.html</a></li>\r\n<li>Bought out by Sanmina Corporation<br />\r\n<a href=\"https://www.sanmina.com/media-center/videos/kenosha-facility/\" class=\"uri\">https://www.sanmina.com/media-center/videos/kenosha-facility/</a></li>\r\n<li>Baxter Healthcare<br />\r\n<a href=\"https://www.baxter.com/\" class=\"uri\">https://www.baxter.com/</a></li>\r\n<li>Colleague 3 pump picture<br />\r\n<a href=\"https://drive.google.com/drive/folders/1tZlkSQi6gdpPc9UqGiDy2bzXuXcxZ-fl?usp=sharing\" class=\"uri\">https://drive.google.com/drive/folders/1tZlkSQi6gdpPc9UqGiDy2bzXuXcxZ-fl?usp=sharing</a></li>\r\n<li>Illinois Instrument (Systech Illinois)<br />\r\n<a href=\"https://www.systechillinois.com/en/products/ec900-process-oxygen-analyser\" class=\"uri\">https://www.systechillinois.com/en/products/ec900-process-oxygen-analyser</a></li>\r\n</ul></li>\r\n</ul>\r\n',318,0,0,'CC-BY-SA','electronics, soldering, trains, jobs',0,0,1),
(3105,'2020-06-26','Akaso EK7000 Pro',1009,'My experience with an inexpensive Waterproof action camera called the Akaso EK7000 Pro','<p>Action cameras are becoming very popular, and many incorporate a waterproof feature. If you want to try this with something less expensive than a GoPro, take a look at this review.</p>\r\n<ul>\r\n<li><a href=\"https://youtu.be/tucT47cn5II\" class=\"uri\">https://youtu.be/tucT47cn5II</a></li>\r\n<li><a href=\"https://www.palain.com/wp-content/uploads/2020/01/Camera.png\" class=\"uri\">https://www.palain.com/wp-content/uploads/2020/01/Camera.png</a></li>\r\n<li><a href=\"https://www.palain.com/wp-content/uploads/2020/01/Waterproof_Case-751x1024.png\" class=\"uri\">https://www.palain.com/wp-content/uploads/2020/01/Waterproof_Case-751x1024.png</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=xA7A5eYitLI\" class=\"uri\">https://www.youtube.com/watch?v=xA7A5eYitLI</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=L0guCNiJp5M\" class=\"uri\">https://www.youtube.com/watch?v=L0guCNiJp5M</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=1p4yOmvkyP4\" class=\"uri\">https://www.youtube.com/watch?v=1p4yOmvkyP4</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=NK1v_ECiJgo\" class=\"uri\">https://www.youtube.com/watch?v=NK1v_ECiJgo</a></li>\r\n<li><a href=\"https://www.palain.com/wp-content/uploads/2020/01/Removing-1024x764.png\" class=\"uri\">https://www.palain.com/wp-content/uploads/2020/01/Removing-1024x764.png</a></li>\r\n<li><a href=\"https://www.palain.com/wp-content/uploads/2020/04/20190601_004658.mov\" class=\"uri\">https://www.palain.com/wp-content/uploads/2020/04/20190601_004658.mov</a></li>\r\n<li><a href=\"https://www.palain.com/wp-content/uploads/2020/04/20190601_031004-1024x582.jpg\" class=\"uri\">https://www.palain.com/wp-content/uploads/2020/04/20190601_031004-1024x582.jpg</a></li>\r\n<li><a href=\"https://www.palain.com/photography/akaso-ek7000-pro/\" class=\"uri\">https://www.palain.com/photography/akaso-ek7000-pro/</a></li>\r\n</ul>\r\n',198,0,0,'CC-BY-SA','Camera, Waterproof Camera, Action camera',0,0,1),
(3068,'2020-05-06','Keeping track of downloads in Elm',791,'Tuula shows how to keep track of what data is being downloaded in Elm','<h2 id=\"background\">Background</h2>\r\n<p>I have page that requests several resources from server. To keep track what is going on, I initially had model like:</p>\r\n<pre><code>type alias Model =\r\n    { availableChassis : List Chassis\r\n    , chassisLoaded : Bool\r\n    , chassisLoading : Bool\r\n    ...\r\n    }</code></pre>\r\n<p>Problem with this is that I have to remember to check those boolean flags while rendering on screen. And it’s possible to have inconsistent state (both loading and loaded).</p>\r\n<h2 id=\"solution\">Solution</h2>\r\n<p>We can model state with algebraic datatypes and we don’t even have to write it by ourselves as there’s <a href=\"https://package.elm-lang.org/packages/krisajenkins/remotedata/latest\">RemoteData</a> library.</p>\r\n<p>Now we can change our model to following:</p>\r\n<pre><code>import RemoteData exposing (RemoteData(..), WebData)\r\n\r\ntype alias Model =\r\n    { availableChassis : WebData (List Chassis)\r\n    }</code></pre>\r\n<ul>\r\n<li><code>availableChassis</code> has four states it can be in:\r\n<ul>\r\n<li><code>NotAsked</code>, data isn’t available and it hasn’t been requested from server</li>\r\n<li><code>Loading</code>, data isn’t available, but it has been requested from server</li>\r\n<li><code>Success (List Chassis)</code>, data has been loaded from server</li>\r\n<li><code>Failure Http.Error</code>, there was error while loading data</li>\r\n</ul></li>\r\n</ul>\r\n<p>For example, while rendering the view, you could do</p>\r\n<pre><code>    case model.availableChassis of\r\n        NotAsked -&gt;\r\n            renderEmptyTable\r\n\r\n        Loading -&gt;\r\n            renderLoadingTable\r\n\r\n        Success chassis -&gt;\r\n            renderChassisList chassis\r\n\r\n        Failure error -&gt;\r\n            renderErrorMessage error</code></pre>\r\n',364,0,0,'CC-BY-SA','Elm, programming',0,0,1),
(3080,'2020-05-22','Ansible ping',440,'Troubleshooting a basic install of Ansible','Here are some steps you need to should take when setting up <a href=\"https://www.ansible.com/)\">Ansible</a> for the first time.\r\n\r\n<ul>\r\n<li><a href=\"#Install_the_software\">Install the software</a></li>\r\n<li><a href=\"#Confirm_ssh_working\">Confirm ssh working</a></li>\r\n<li><a href=\"#Create_a_Inventory/Host_file\">Create a Inventory/Host_file</a></li>\r\n<li><a href=\"#Ansible_Ping\">Ansible Ping</a></li>\r\n<li><a href=\"#Create_a_playbook\">Create a playbook</a></li>\r\n<li><a href=\"#Confirm_the_YAML_is_valid\">Confirm the YAML is valid</a></li>\r\n<li><a href=\"#Confirm_the_syntax_is_valid\">Confirm the syntax is valid</a></li>\r\n<li><a href=\"#Confirm_everything_works_together\">Confirm everything works together</a></li>\r\n</ul>\r\n\r\n<h3 id=\"Install_the_software\">Install the software</h3>\r\nFirst you need to <a href=\"https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html\">install</a> the <a href=\"https://www.ansible.com/)\">Ansible</a> software. On Fedora that is as simple as a <em>dnf install ansible</em>, or on debian <em>apt install ansible</em>.\r\n\r\n<h3 id=\"Confirm_ssh_working\">Confirm ssh working</h3>\r\n\r\nConfirm that you can connect to the servers via ssh as you would normally.\r\n\r\n<pre><code>ssh -i /home/my_user/.ssh/id_ed25519_pi my_user@192.168.0.1\r\nssh -i /home/my_user/.ssh/id_ed25519_pi your_username@192.168.1.2\r\n</code></pre>\r\n\r\n<h3 id=\"Create_a_Inventory/Host_file\">Create a Inventory/Host file</h3>\r\n\r\nTranslate the ssh commands into a <a href=\"https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html\">Inventory/Host</a> file. I am using a YAML in this example but other variants are available.\r\n\r\n<pre><code>all:\r\n  hosts:\r\n    my_server:\r\n      ansible_host: 192.168.0.1\r\n    your_server:\r\n      ansible_host: 192.168.1.2\r\n      ansible_ssh_user: your_username\r\n  vars:\r\n    ansible_connection: ssh\r\n    ansible_ssh_user: my_user\r\n    ansible_ssh_private_key_file: /home/my_user/.ssh/id_ed25519_pi\r\n</code></pre>\r\n\r\n<h3 id=\"Ansible_Ping\">Ansible Ping</h3>\r\nCheck that your server is up and reported correctly in your file by having <a href=\"https://www.ansible.com/)\">Ansible</a> ping it. This should allow you to determine if at least there is a command and control connection available.\r\n\r\n<pre><code>ansible --inventory-file my_inventory.yaml -m ping all\r\n</code></pre>\r\n\r\nThis uses the group <em>all</em> and will ping all servers under it. The reply below shows a positive and negative response. \r\n\r\n<pre><code>my_server | SUCCESS => {\r\n    \"ansible_facts\": {\r\n        \"discovered_interpreter_python\": \"/usr/bin/python\"\r\n    },\r\n    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\nyour_server | UNREACHABLE! => {\r\n    \"changed\": false,\r\n    \"msg\": \"Failed to connect to the host via ssh: ssh: connect to host 192.168.1.2 port 22: No route to host\",\r\n    \"unreachable\": true\r\n}\r\n</code></pre>\r\n\r\nThe <em>msg</em> will give you a clue as to what is going wrong and you should try to ssh directly with the Ansible credentials again, and then try and ping using Ansible.\r\n<pre><code>ansible --inventory-file my_inventory.yaml -m ping your_server\r\n</code></pre>\r\n\r\nModify the Inventory file until you have managed to get a successful reply. \r\n\r\n<h3 id=\"Create_a_playbook\">Create a playbook</h3>\r\n\r\nWork on your playbook and verify that it is valid yaml.\r\n\r\n<pre><code>---\r\n- name: Test Ping\r\n  hosts: all\r\n  tasks:\r\n  - action: ping\r\n</code></pre>\r\n\r\n<h3 id=\"Confirm_the_YAML_is_valid\">Confirm the YAML is valid</h3>\r\nIf there is no reply all is good.\r\n<pre><code>yamllint ~/my_example.yaml\r\n</code></pre>\r\n\r\nIf there is no reply all is good. For your reference I will remove the <em>---</em> line and this is the response.\r\n<pre><code>yamllint ~/my_example.yaml\r\n/home/user/my_example.yaml\r\n  1:1       warning  missing document start \"---\"  (document-start)\r\n</code></pre>\r\n\r\n<h3 id=\"Confirm_the_syntax_is_valid\">Confirm the syntax is valid</h3>\r\nThen verify that the playbook is sane\r\n<pre><code>ansible-playbook --syntax-check ~/my_example.yaml\r\n</code></pre>\r\n\r\nIf there is no reply all is good. For your reference I will remove the <em>hosts</em> line and this is the response.\r\n<pre><code>ansible-playbook --syntax-check ~/my_example.yaml\r\nERROR! the field \'hosts\' is required but was not set\r\n</code></pre>\r\n\r\n<h3 id=\"Confirm_everything_works_together\">Confirm everything works together</h3>\r\n\r\nAfter that you should be able to run the playbook using.\r\n\r\n<pre><code>ansible-playbook --inventory-file my_inventory.yaml ~/my_example.yaml\r\n\r\nPLAY [Test Ping] ***************************************************************************************************\r\n\r\nTASK [Gathering Facts] *********************************************************************************************\r\n[WARNING]: Platform linux on host my_server is using the discovered Python interpreter at /usr/bin/python, but\r\nfuture installation of another Python interpreter could change this. See\r\nhttps://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.\r\nok: [my_server]\r\nfatal: [your_server]: UNREACHABLE! => {\"changed\": false, \"msg\": \"Failed to connect to the host via ssh: ssh: connect to host 192.168.1.2 port 22: No route to host\", \"unreachable\": true}\r\n\r\nTASK [ping] ********************************************************************************************************\r\nok: [my_server]\r\n\r\nPLAY RECAP *********************************************************************************************************\r\nmy_server                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \r\nyour_server                : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0\r\n</code></pre>\r\n',30,0,0,'CC-BY-SA','ansible, ping, ssh',0,0,1),
(3084,'2020-05-28','AudioBookClub 18 - Star Trek: The Continuing Mission',6017,'The HPR Audiobook Club reviews the fan audio drama Star Trek: The Continuing Mission','<h1 id=\"in-this-episode-the-hpr_audiobookclub-discusses-star-trek-the-continuing-mission-created-by-sebastian-prooth-and-andy-tyrer\">In this episode, the HPR_AudioBookClub discusses <a href=\"https://startrekcontinuingmission.com/\">Star Trek The Continuing Mission</a> created by Sebastian Prooth and Andy Tyrer.</h1>\r\n<hr />\r\n<h1 id=\"non-spoiler-thoughts\">Non-Spoiler Thoughts</h1>\r\n<hr />\r\n<ul>\r\n<li>Thaj misses Star Trek, and this made me realize that (this has since changed)</li>\r\n<li>Voice acting is very good.</li>\r\n<li>It\'s hard to translate things like starship combat into an audio drama.</li>\r\n<li>Background sounds really sell the structure of these episodes as Star Trek.</li>\r\n<li>This proves that an abundance of canon is not a reason to reboot things. This finds a niche in an unexplored part of the timeline and works.</li>\r\n<li>The warp sound effect for jumping to warp is weird.</li>\r\n<li>We think LostnBronx should write a StarDrfiter Audiodrama for us to produce.</li>\r\n</ul>\r\n<h1 id=\"beverage-reviews\">Beverage Reviews</h1>\r\n<hr />\r\n<p>As usual, the HPR AudioBook Club took some time to review the beverages that each of us were drinking during the episode</p>\r\n<ul>\r\n<li><strong>Thaj:</strong> Water and something from Kroger that I think resembles chocolate ice cream.</li>\r\n<li><strong>x1101:</strong> Throwback style Mt. Dew made with real, diabetes inducing, sugar</li>\r\n<li><strong>pokey:</strong> Led Light Bulbs....wait what?!?!</li>\r\n<li><strong>FiftyOneFifty:</strong> Johnny Walker Black</li>\r\n</ul>\r\n<h1 id=\"things-we-talked-about\">Things We talked about</h1>\r\n<hr />\r\n<ul>\r\n<li>Recasting the captain was a bad idea.</li>\r\n<li>Thaj hates Cthulhu episodes of scifi shows.</li>\r\n<li>Which Star Trek is the best (the correct answer is DS9)</li>\r\n<li>Star Trek as an allegory for the real world.</li>\r\n<li>Pokey doesn\'t like time travel in Star Trek.</li>\r\n<li>And...we\'re back on DS9</li>\r\n<li>We geek about the different types of ships in Trek.</li>\r\n<li>Since we didn\'t talk about the audio drama that much, we did actually like it.</li>\r\n</ul>\r\n<h1 id=\"our-next-audiobook\">Our Next Audiobook</h1>\r\n<hr />\r\n<p><a href=\"https://scribl.com/books/PFC12/tincture-an-apocalyptic-proposition\">Tincture, An Apocalyptic Proposition</a></p>\r\n<h1 id=\"the-next-audiobook-club-recording\">The Next Audiobook Club Recording</h1>\r\n<hr />\r\n<p>Right now we are working through a backlog of older episode that have already been recorded. Once that ends we fully anticipate recording new episodes with listener participation.</p>\r\n<h1 id=\"further-recommendations\">Further Recommendations</h1>\r\n<hr />\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Stirling_engine\">Stirling Engines</a></li>\r\n<li><a href=\"https://nathanlowell.com/\">Nathan Lowell</a></li>\r\n<li>Pokey wouldn\'t mind a few cyborg modifications</li>\r\n<li><a href=\"https://www.panmacmillan.com/author/peterfhamilton\">Peter F. Hamilton</a></li>\r\n<li>Lock Picking</li>\r\n<li><a href=\"https://cs608829.vk.me/v608829353/ac55/QTzYhbf8oUc.jpg\">I Don\'t want to live on this planet anymore</a></li>\r\n<li>Cory Doctrow\'s <a href=\"https://craphound.com/makers/download/\">\"Makers\"</a></li>\r\n<li><a href=\"https://www.shapeways.com/product/T3ZY4LFDB/thorn-dice-set-with-decader\">3D printed metal dice</a></li>\r\n<li><a href=\"https://www.aliexpress.com/item/Practical-Portable-Casino-Spade-A-Poker-Card-Beer-Bottle-Opener-Stainless-Steel-Wine-Bottle-Opener-for/32243512631.html\">Ace of spaces credit card bottle opener</a></li>\r\n<li><a href=\"https://awesomestufftobuy.com/critical-hit-d20-ice-mold/\">Dice Ice</a></li>\r\n<li><a href=\"https://awesomestufftobuy.com/come-in-go-away-doormat/\">Doormat</a></li>\r\n</ul>\r\n<h1 id=\"feedback\">Feedback</h1>\r\n<hr />\r\n<p>Thank you very much for listening to this episode of the HPR AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you\'ll consider joining us next time we record a new episode. Please leave a few words in the episode\'s comment section.</p>\r\n<p>As always; remember to visit the HPR contribution page HPR could really use your <a href=\"https://hackerpublicradio.org/help_out.php\">help</a> right now.</p>\r\n<p>Sincerely, The HPR Audiobook Club</p>\r\n<p><em>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</em></p>\r\n<h1 id=\"our-audio\">Our Audio</h1>\r\n<hr />\r\n<p>This episode was processed using <a href=\"https://audacity.sourceforge.net/\">Audacity</a>. We\'ve been making small adjustments to our audio mix each month in order to get the best possible sound. Its been especially challenging getting all of our voices relatively level, because everyone has their own unique setup. Mumble is great for bringing us all together, and for recording, but it\'s not good at making everyone\'s voice the same volume. We\'re pretty happy with the way this month\'s show turned out, so we\'d like to share our editing process and settings with you and our future selves (who, of course, will have forgotten all this by then).</p>\r\n<p>We use the \"Truncate Silence\" effect with it\'s default settings to minimize the silence between people speaking. When used with it\'s default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes a conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying \"uuuuummmm.\" Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too aggressively your audio may sound sped up and choppy.</p>\r\n<p>Next we use the \"Compressor\" effect with the following settings:</p>\r\n<pre><code>Threshold: -30db\r\nNoise Floor: -50db\r\nRatio: 3:1\r\nAttack Time: 0.2sec\r\nDecay Time: 1.0 sec\r\n</code></pre>\r\n<p>\"Make-up Gain for 0db after compressing\" and \"compress based on peaks\" were both left un-checked.</p>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from the file and save them in a separate file for possible use as outtakes after the closing music.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can \"Mix and Render\" all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR server.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the .aup file to .FLAC so that we can paste a copy of the shownotes into the audio file\'s metadata.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being \"crashy\" but if you remember save after every major transform, you will wonder how it ever got that reputation.</p>\r\n',270,0,1,'CC-BY-SA','Audiobooks, Audio Drama, Star Trek',0,0,1),
(3100,'2020-06-19','For your consideration - Makers Corner',4534,'Makers Corner is a tech oriented DIY podcast, from the Other Side Podcast Network','<p>\r\nI\'m amazed I didn\'t find this podcast earlier, epically as one half of the team is HPR Host <a href=\"https://hackerpublicradio.org/correspondents/0370.html\">Yannick</a>, and that we listed it on our Sister Project <a href=\"https://freeculturepodcasts.org/\">Free Culture Podcasts</a>.</p>\r\n<p>\r\nThis show is a sample episode I picked, but it is not a typical show. I wanted to give a bit more exposure to the interview.\r\n</p>\r\n<p>\r\nIn this episode, Nate talks about his oldest boy’s Electronic Engineering class. Then, <a href=\"https://twitter.com/pimoroni\">Jon</a> and <a href=\"https://twitter.com/gadgetoid\">Phil</a> join in to talk about the <a href=\"https://32blit.com/\">32Blit</a>. And finally, the guys have a look at the <a href=\"https://www.thingiverse.com/thing:1657541\">Monster Mouth Headphone Holder – Clampable</a>, from <a href=\"https://www.thingiverse.com/\">thingiverse</a>.</p>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li>Website: <a href=\"https://makerscorner.tech\">https://makerscorner.tech</a></li>\r\n<li>RSS Feed: <a href=\"https://makerscorner.tech/feed/podcast/\">https://makerscorner.tech/feed/podcast/</a></li>\r\n<li><a href=\"https://twitter.com/pimoroni\">https://twitter.com/pimoroni</a></li>\r\n<li><a href=\"https://twitter.com/gadgetoid\">https://twitter.com/gadgetoid</a></li>\r\n<li><a href=\"https://www.thingiverse.com/\">https://www.thingiverse.com/</a></li>\r\n</ul>',30,75,0,'CC-BY-SA','pimoroni, gadgetoid, Monster Mouth Headphone Holder,Free Culture Podcasts',0,0,1),
(3074,'2020-05-14','For your consideration - Escape Pod',1773,'A sample episode from Escape Pod The Original Science Fiction Podcast','<p>\r\nIt\'s high time I submitted a sample episode from <a href=\"https://escapepod.org/\">Escape Pod</a>, one of the many excellent Podcasts from the <a href=\"https://www.escapeartists.net/\">Escape Artists</a>. They are a serious platform for the best science fiction out there today.\r\n</p>\r\n<p>\r\nWith so much choice, I can pick a recommendation that I think will be right up HPR\'s alley, and that is <a href=\"https://escapepod.org/2018/04/19/escape-pod-624-fandom-for-robots/\">Escape Pod 624: Fandom for Robots</a> released on April 19, 2018 written by Vina Jie-Min Prasad and Narrated by Trendane Sparks.\r\n</p>\r\n<p>\r\nThe sound files are published by under a Creative Commons Attribution-NonCommercial-NoDerivatives license <a href=\"https://creativecommons.org/licenses/by-nc-nd/3.0/\">https://creativecommons.org/licenses/by-nc-nd/3.0/</a>.\r\n</p>',30,75,1,'CC-BY-NC-ND','EA Podcasts, Escape Pod, Fandom for Robots, Vina Jie-Min Prasad, Trendane Sparks',0,0,1),
(3326,'2021-05-03','HPR Community News for April 2021',4825,'HPR Volunteers talk about shows released and comments posted in April 2021','<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/0393.html\" target=\"_blank\">Anonymous Host</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</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=3304\" target=\"_blank\">3304</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-04-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3304\" target=\"_blank\">Newsflash 21/01/04</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0393.html\" target=\"_blank\">Anonymous Host</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3305\" target=\"_blank\">3305</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-04-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3305\" target=\"_blank\">Nagios part 2</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=3306\" target=\"_blank\">3306</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-04-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3306\" target=\"_blank\">HPR Community News for March 2021</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=3307\" target=\"_blank\">3307</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-04-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3307\" target=\"_blank\">Git worktree</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=3308\" target=\"_blank\">3308</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-04-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3308\" target=\"_blank\">let\'s talk about Thunderbird</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=3309\" target=\"_blank\">3309</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-04-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3309\" target=\"_blank\">Linux Inlaws S01E27: The Big Uncertainties in Life and beyond</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3310\" target=\"_blank\">3310</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-04-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3310\" target=\"_blank\">Layer Masks</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=3311\" target=\"_blank\">3311</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-04-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3311\" target=\"_blank\">Bradley M. Kuhn\'s article from 2019 on Richard M. Stallman</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0393.html\" target=\"_blank\">Anonymous Host</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3312\" target=\"_blank\">3312</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-04-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3312\" target=\"_blank\">COVID Doldrums</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=3313\" target=\"_blank\">3313</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-04-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3313\" target=\"_blank\">Zoom Update</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0273.html\" target=\"_blank\">ToeJet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3314\" target=\"_blank\">3314</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-04-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3314\" target=\"_blank\">Introduction... A little bit about me</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=3315\" target=\"_blank\">3315</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-04-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3315\" target=\"_blank\">tesseract optical character recognition</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=3316\" target=\"_blank\">3316</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-04-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3316\" target=\"_blank\">FSF and RMS on election of Richard Stallman</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0393.html\" target=\"_blank\">Anonymous Host</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3317\" target=\"_blank\">3317</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-04-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3317\" target=\"_blank\">Reading a manifesto: Towards A Cooperative Technology Movement</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3318\" target=\"_blank\">3318</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-04-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3318\" target=\"_blank\">Modding a Wii classic with a DNS exploit</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=3319\" target=\"_blank\">3319</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-04-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3319\" target=\"_blank\">Linux Inlaws S01E28: Politicians and artificial intelligence part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3320\" target=\"_blank\">3320</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-04-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3320\" target=\"_blank\">YouTube Channels for Learning Spanish, Part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0198.html\" target=\"_blank\">Ahuka</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3321\" target=\"_blank\">3321</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-04-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3321\" target=\"_blank\">DNS66 URANDOM RANDOM</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=3322\" target=\"_blank\">3322</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-04-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3322\" target=\"_blank\">Tune system performance with tuned</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=3323\" target=\"_blank\">3323</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-04-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3323\" target=\"_blank\">The alternate Internet you never knew existed</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=3324\" target=\"_blank\">3324</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-04-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3324\" target=\"_blank\">Infosec Podcasts Part 1  News and Current Events </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=3325\" target=\"_blank\">3325</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-04-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3325\" target=\"_blank\">Games and rules</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</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 4 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3291#comments\" target=\"_blank\">hpr3291</a></strong>\n(2021-03-15) \"<em>The New Audacity and Batch Processing Macros</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3291#4\" target=\"_blank\">Comment 4</a>:\nbrother mouse on 2021-04-04:\n\"audacity batch\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3296#comments\" target=\"_blank\">hpr3296</a></strong>\n(2021-03-22) \"<em>Spam Bot Honey Pot</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=3296#2\" target=\"_blank\">Comment 2</a>:\nrtsn on 2021-04-13:\n\"nice\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3301#comments\" target=\"_blank\">hpr3301</a></strong>\n(2021-03-29) \"<em>K S P Kerbal Space Program! (Game)</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3301#1\" target=\"_blank\">Comment 1</a>:\nAaronb on 2021-04-17:\n\"Have you seen xkcd about Kerbal\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3303#comments\" target=\"_blank\">hpr3303</a></strong>\n(2021-03-31) \"<em>Slackware on RaspberryPi</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3303#1\" target=\"_blank\">Comment 1</a>:\nZen_floater2 on 2021-04-01:\n\"Bravo\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 21 comments on 9 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3305#comments\" target=\"_blank\">hpr3305</a></strong>\n(2021-04-02) \"<em>Nagios part 2</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><li><a href=\"https://hackerpublicradio.org/eps.php?id=3305#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-04-05:\n\"Adding my endorsement\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3308#comments\" target=\"_blank\">hpr3308</a></strong>\n(2021-04-07) \"<em>let\'s talk about Thunderbird</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=3308#1\" target=\"_blank\">Comment 1</a>:\nHenry on 2021-04-09:\n\"Got some good tips ... thank you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3311#comments\" target=\"_blank\">hpr3311</a></strong>\n(2021-04-12) \"<em>Bradley M. Kuhn\'s article from 2019 on Richard M. Stallman</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0393.html\" target=\"_blank\">Anonymous Host</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2021-04-12:\n\"bravery\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2021-04-13:\n\"Long history of supporting anonymous posts\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#3\" target=\"_blank\">Comment 3</a>:\nReto on 2021-04-13:\n\"RMS\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#4\" target=\"_blank\">Comment 4</a>:\nKen Fallon on 2021-04-14:\n\"Interview with RMS/FSF ?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#5\" target=\"_blank\">Comment 5</a>:\nKen Fallon on 2021-04-14:\n\"Interview with RMS/FSF ? - links\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#6\" target=\"_blank\">Comment 6</a>:\nBeeza on 2021-04-14:\n\"Richard Stallman\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#7\" target=\"_blank\">Comment 7</a>:\nTorao on 2021-04-16:\n\"Stallman\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3311#8\" target=\"_blank\">Comment 8</a>:\nCfish on 2021-04-19:\n\"The responsibility of leadership\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3317#comments\" target=\"_blank\">hpr3317</a></strong>\n(2021-04-20) \"<em>Reading a manifesto: Towards A Cooperative Technology Movement</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3317#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2021-04-02:\n\"Errata\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3317#2\" target=\"_blank\">Comment 2</a>:\nCfish on 2021-04-20:\n\"Great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3317#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2021-04-22:\n\"Fantastic show!!!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3317#4\" target=\"_blank\">Comment 4</a>:\nclacke on 2021-04-28:\n\"A season for manifestos\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3317#5\" target=\"_blank\">Comment 5</a>:\nKevin O&#39;Brien on 2021-04-29:\n\"Keep it up\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3318#comments\" target=\"_blank\">hpr3318</a></strong>\n(2021-04-21) \"<em>Modding a Wii classic with a DNS exploit</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=3318#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-04-21:\n\"sdcard and a usbstick\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3318#2\" target=\"_blank\">Comment 2</a>:\narcher72 on 2021-04-22:\n\"Re: sdcard and a usbstick\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3319#comments\" target=\"_blank\">hpr3319</a></strong>\n(2021-04-22) \"<em>Linux Inlaws S01E28: Politicians and artificial intelligence part 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3319#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-04-23:\n\"AI is misleading AP would be better\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3320#comments\" target=\"_blank\">hpr3320</a></strong>\n(2021-04-23) \"<em>YouTube Channels for Learning Spanish, Part 2</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=3320#1\" target=\"_blank\">Comment 1</a>:\nAaronb on 2021-04-26:\n\"Listening to Twit podcasts\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3321#comments\" target=\"_blank\">hpr3321</a></strong>\n(2021-04-26) \"<em>DNS66 URANDOM RANDOM</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=3321#1\" target=\"_blank\">Comment 1</a>:\nThaj on 2021-04-26:\n\"Mission accomplished\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3324#comments\" target=\"_blank\">hpr3324</a></strong>\n(2021-04-29) \"<em>Infosec Podcasts Part 1  News and Current Events </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3324#1\" target=\"_blank\">Comment 1</a>:\nXoke on 2021-04-29:\n\"GRRRRR!\"</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/2021-April/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-April/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=\"booth-kit-update\">Booth kit update</h3>\n<p>The FSF Europe have sent us a selection of stickers and leaflets to add to our booth kit(s).</p>\n<h3 id=\"posting-anonymously\">Posting Anonymously</h3>\n<ul>\n<li>HPR supports anonymous posting\n<ul>\n<li>Use Tor browser</li>\n<li>Sign up on a temporary email address <a href=\"https://en.wikipedia.org/wiki/Disposable_email_address\" class=\"uri\">https://en.wikipedia.org/wiki/Disposable_email_address</a></li>\n<li>Select your slot and check for the confirmation email</li>\n<li>Post your show as normal - but add a note to say it\'s an anonymous user.</li>\n</ul></li>\n</ul>\n<h3 id=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>The project to upload the <b>older</b> HPR shows to archive.org has been quiescent for a few years. The shows between 1 and 870 had not been uploaded prior to April 2021 (though some shows had been uploaded in batches in the early days, without notes etc).</p>\n<p>However, this <em>old show</em> project has been restarted this month, after new software had been written to help manage the process. At the time of writing 65 shows in the range 1-870 have been uploaded, with notes, and with the same range of audio formats used for current shows.</p>\n<p>Since we don\'t want to upload shows without summaries or tags the two projects are now tied together. So we will be all the more welcoming of tag and summary updates sent to the address referenced in the next section!</p>\n<p>The plan is to report the numbers uploaded each month in the AOB section of the Community News show notes.</p>\n<p>HPR shows on archive.org have the URL https://archive.org/details/hprXXXX where XXXX is the show number with leading zeroes. So for example, show 840\'s URL is: <a href=\"https://archive.org/details/hpr0840\" class=\"uri\">https://archive.org/details/hpr0840</a>.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a>, <a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a></b></p>\n<p>Over the period tags and/or summaries have been added to 23 shows which were without them.</p>\n<p>There are now 384 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3351,'2021-06-07','HPR Community News for May 2021',3956,'The HPR Matrons are doing the rounds.','<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=3326\" target=\"_blank\">3326</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-05-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3326\" target=\"_blank\">HPR Community News for April 2021</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=3327\" target=\"_blank\">3327</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-05-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3327\" target=\"_blank\">Looking into Ceph storage solution</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=3328\" target=\"_blank\">3328</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-05-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3328\" target=\"_blank\">Pandas Part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3329\" target=\"_blank\">3329</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-05-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3329\" target=\"_blank\">Linux Inlaws S01E29: The (one and only) Linux Kernel Contributor Panel</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3330\" target=\"_blank\">3330</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-05-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3330\" target=\"_blank\">A Layer Mask Project</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=3331\" target=\"_blank\">3331</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-05-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3331\" target=\"_blank\">Audio for Podcasting: Episode 1 - The Microphone</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3332\" target=\"_blank\">3332</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-05-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3332\" target=\"_blank\">My current Devices</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3333\" target=\"_blank\">3333</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-05-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3333\" target=\"_blank\">My TV Stand devices and Pine64.org</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3334\" target=\"_blank\">3334</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-05-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3334\" target=\"_blank\">Infosec Podcasts Part 2 - General Information Security</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=3335\" target=\"_blank\">3335</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-05-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3335\" target=\"_blank\">For your consideration, the Anarcho Book Club</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=3336\" target=\"_blank\">3336</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-05-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3336\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3337\" target=\"_blank\">3337</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-05-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3337\" target=\"_blank\">I like that the boat is stuck</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=3338\" target=\"_blank\">3338</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-05-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3338\" target=\"_blank\">Using openssl s_client like telnet</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=3339\" target=\"_blank\">3339</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-05-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3339\" target=\"_blank\">Linux Inlaws S01E30: Politicians and artificial intelligence part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3340\" target=\"_blank\">3340</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-05-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3340\" target=\"_blank\">Hacked?</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=3341\" target=\"_blank\">3341</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-05-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3341\" target=\"_blank\">Linux on a serial Terminal - And Jorome\'s MainFrame Challenge</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3342\" target=\"_blank\">3342</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-05-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3342\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3343\" target=\"_blank\">3343</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-05-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3343\" target=\"_blank\">The Forth programming language</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3344\" target=\"_blank\">3344</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-05-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3344\" target=\"_blank\">Infosec Podcasts Part 3 - Infosec Career and Personal Development</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=3345\" target=\"_blank\">3345</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-05-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3345\" target=\"_blank\">Audio for Podcasting: Episode 2 - Equalization</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3346\" target=\"_blank\">3346</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-05-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3346\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</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 12 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 5 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2499#comments\" target=\"_blank\">hpr2499</a></strong>\n(2018-03-01) \"<em>Tuning around the HF 40Mtr band</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2499#3\" target=\"_blank\">Comment 3</a>:\nDave (thelovebug) on 2021-05-19:\n\"Coming to this late, but wow!\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2499#4\" target=\"_blank\">Comment 4</a>:\nMrX on 2021-05-29:\n\"Re: Coming to this late, but wow!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3297#comments\" target=\"_blank\">hpr3297</a></strong>\n(2021-03-23) \"<em>Nextcloud Application Updating</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0273.html\" target=\"_blank\">ToeJet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3297#1\" target=\"_blank\">Comment 1</a>:\nychaouche on 2021-05-02:\n\"safe ?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3317#comments\" target=\"_blank\">hpr3317</a></strong>\n(2021-04-20) \"<em>Reading a manifesto: Towards A Cooperative Technology Movement</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3317#6\" target=\"_blank\">Comment 6</a>:\nAaron C on 2021-05-01:\n\"Raises an excellent point\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3324#comments\" target=\"_blank\">hpr3324</a></strong>\n(2021-04-29) \"<em>Infosec Podcasts Part 1  News and Current Events </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3324#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-05-01:\n\"Really liked the show\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 7 comments on 6 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3328#comments\" target=\"_blank\">hpr3328</a></strong>\n(2021-05-05) \"<em>Pandas Part 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0039.html\" target=\"_blank\">Enigma</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3328#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2021-05-05:\n\"Another great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3328#2\" target=\"_blank\">Comment 2</a>:\nb-yeezi on 2021-05-05:\n\"One more speed gain\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3331#comments\" target=\"_blank\">hpr3331</a></strong>\n(2021-05-10) \"<em>Audio for Podcasting: Episode 1 - The Microphone</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3331#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-05-10:\n\"Great episode.  Thanks for the advice.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3336#comments\" target=\"_blank\">hpr3336</a></strong>\n(2021-05-17) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3336#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3337#comments\" target=\"_blank\">hpr3337</a></strong>\n(2021-05-18) \"<em>I like that the boat is stuck</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=3337#1\" target=\"_blank\">Comment 1</a>:\nmpardo on 2021-05-18:\n\"mpardohpr@gmail.com\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3342#comments\" target=\"_blank\">hpr3342</a></strong>\n(2021-05-25) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3342#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3346#comments\" target=\"_blank\">hpr3346</a></strong>\n(2021-05-31) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 3</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3346#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</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/2021-May/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-May/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=\"reminder---stuff-you-need-to-know\">Reminder - <em>Stuff you need to know</em></h3>\n<ul>\n<li>HPR will stop as a project if there are not enough shows.</li>\n<li>We do not syndicate shows not produced for HPR.</li>\n<li>You are agreeing to license your show CC-BY-SA.</li>\n<li>You have permission to redistribute your show in its entirety.</li>\n<li>Your show will not be moderated.</li>\n<li>Your show will be signaled as containing explicit content.</li>\n<li>You determine where in the schedule your show will be released.</li>\n<li>We use UTF-8 end to end.</li>\n<li>Your show will be heard by an International Audience.</li>\n<li>We also need emergency shows.</li>\n<li>You will no longer be allowed to edit HPR pages on Wikipedia.</li>\n</ul>\n<h3 id=\"reminder---scheduling-guidelines\">Reminder - <em>Scheduling Guidelines</em></h3>\n<ol type=\"1\">\n<li>You must have your audio recording ready to upload before you pick a slot.</li>\n<li>Always try and fill any free slots that are available in the upcoming two weeks.</li>\n<li>If the queue is filling up then please consider leaving some slots free for new contributors.</li>\n<li>If you have a non urgent show then find a empty week and schedule it then.</li>\n<li>If you are uploading a series of shows, consider scheduling one every two weeks.</li>\n</ol>\n<h3 id=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>This month 96 additional shows in the range 1-870 have been uploaded to the Internet Archive.</p>\n<p>Since we don\'t want to upload shows without summaries or tags the <em>old shows</em> and <em>tag and summary</em> projects are now tied together. So we will be all the more welcoming of tag and summary updates submitted as described on the <a href=\"https://hackerpublicradio.org/report_missing_tags.php\">summary page</a>.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributor for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 7 shows which were without them.</p>\n<p>There are currently 377 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3077,'2020-05-19','Video conference Push to Talk',457,'Building the push to talk button missing from many video conference tools','<p>For the sake of archival, \"state of the world\" refers to the COVID-19 pandemic.</p>\r\n<p>The code and CAD files for this project can be found <a href=\"https://github.com/DanNixon/pulseaudio-ptt\">here</a>.</p>\r\n<p>Relevant links:</p>\r\n<ul>\r\n<li><a href=\"https://www.freedesktop.org/wiki/Software/PulseAudio/\">PulseAudio</a> is the sound server used by many Linux distributions</li>\r\n<li><a href=\"https://pypi.org/project/pulsectl/\">pulsectl</a> is a Python library that allows you to control a PulseAudio server</li>\r\n<li><a href=\"https://www.adafruit.com/category/168\">NeoPixels</a> are cool addressable LEDs</li>\r\n<li>The <a href=\"https://www.pjrc.com/teensy/\">Teensy</a> is a small but powerful microcontroller development board</li>\r\n<li><a href=\"https://pythonhosted.org/pyserial/\">pySerial</a> is a library allowing you to use serial ports in Python</li>\r\n<li><a href=\"https://platformio.org/\">PlatformIO</a> is a tool for making software development for embedded platforms easy</li>\r\n</ul>\r\n<p>Early prototype:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3077/01_prototype.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3077/01_prototype_thumbnail.jpg\" title=\"Prototype\" alt=\"Electronic parts assembled for testing\" style=\"width:50.0%;height:50.0%\" /></a></p>\r\n<p>Assembled electronics fitted into case ready to be closed:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3077/02_pre_assembly.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3077/02_pre_assembly_thumbnail.jpg\" title=\"Pre-assembly\" alt=\"Electronics fitted into case ready for case to be closed\" style=\"width:50.0%;height:50.0%\" /></a></p>\r\n<p>View of the top of the case, showing Cherry switch and NeoPixel LED indicator:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3077/03_top.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3077/03_top_thumbnail.jpg\" title=\"Top view\" alt=\"View of the top of the finished device showing button and indicator LED\" style=\"width:50.0%;height:50.0%\" /></a></p>\r\n<p>View of the bottom of the case, showing USB port and some of the nicer M3 screws from my parts bin:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3077/04_bottom.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3077/04_bottom_thumbnail.jpg\" title=\"Bottom view\" alt=\"View of bottom of the finished device showing screws and USB port\" style=\"width:50.0%;height:50.0%\" /></a></p>\r\n<p>Plugged in and powered on, showing the muted state:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3077/05_muted.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3077/05_muted_thumbnail.jpg\" title=\"Muted state\" alt=\"Device showing the muted state\" style=\"width:50.0%;height:50.0%\" /></a></p>\r\n<p>Button pushed, showing the unmuted/mic live state:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3077/06_unmuted.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3077/06_unmuted_thumbnail.jpg\" title=\"Unmuted state\" alt=\"Device with the button pushed showing the unmuted state\" style=\"width:50.0%;height:50.0%\" /></a></p>\r\n',386,103,1,'CC-BY-SA','arduino, linux audio, electronics, hardware',0,0,1),
(3067,'2020-05-05','Getting my Python3 code working in Python2',1526,'What I had to do to get my raspberry Pi PifaceCAD board working after a Debian upgrade.','<p>I have a raspberry Pi model B with the original Pifacecad add on board</p>\r\n<p>I recently upgraded the operating system on my raspberry pi from Wheezy (Debian 7) to Jessie (Debian 8), all seemed fine till I tried to run my Python3 project. It reported that the <code>pifacecad</code> module wasn’t present. I tried to install the module using the standard <code>apt-get</code> command given in the Pifacecad documentation. It installed OK for python 2 but It would not install for python 3 as there was a dependency issue with the <code>python-lirc</code> library. I’m guessing the upgrade broke something.</p>\r\n<p>I installed a fresh minimal installation of raspbian Stretch (Debian 9) onto a new SD card and ran the standard installation command in the Pifacecad documentation. It all installed but there was a warning about Spi which I had forgotten to enable. I enabled this using the <code>raspi-config</code> util and rebooted the pi.</p>\r\n<p>I then tested the installation by running the <code>sys-info.py</code> example that is mentioned in the installation documentation that comes with the pifacecad board.</p>\r\n<p>Running this example gave a warning saying that the pifacecad hardware could not be found at this point I gave up and decided instead to run my project in python 2.</p>\r\n<p>Of course at first the code wouldn’t run using python 2 and I had to do a bit of digging around to find out what was going wrong.</p>\r\n<p>You may find this useful in the unlikely event that you have a project written in python 3 that you want to run in python 2, it might also be useful if you’re going in the other direction.</p>\r\n<p>One other thing that I briefly stumbled upon was that I believe there is a tool available that attempts to convert python 2 code to python 3 I don’t know anything about it and didn’t bother looking to see if there is a tool to go in the opposite direction which is what I needed. I’ve included a link to the tool below <a href=\"https://docs.python.org/2/library/2to3.html\" class=\"uri\">https://docs.python.org/2/library/2to3.html</a></p>\r\n<p>I’ve got the two versions of code loaded into the excellent graphical diff tool <code>meld</code> and I’ll just briefly cover the things that I had to change.</p>\r\n<p>Link to meld diff tool: <a href=\"https://meldmerge.org/\" class=\"uri\">https://meldmerge.org/</a></p>\r\n<p>After some mucking about I got it partially working by installing Piface module for Python 2.7</p>\r\n<p>Had to do the following changes to get the code working in Python 2.7:</p>\r\n<ul>\r\n<li><p>Changed first line of code from python3 to python2 so that code was run using the correct interpreter</p></li>\r\n<li><p>Print statement fixed by see<br />\r\n<a href=\"https://stackoverflow.com/questions/32032697/how-to-use-from-future-import-print-function\" class=\"uri\">https://stackoverflow.com/questions/32032697/how-to-use-from-future-import-print-function</a></p></li>\r\n<li>Python 3 uses the urllib.request command. For Python 3 I used</li>\r\n</ul>\r\n<pre><code>    urllib.request.urlopen(url).read()</code></pre>\r\n<blockquote>\r\n<p><a href=\"https://docs.python.org/3/library/urllib.request.html\" class=\"uri\">https://docs.python.org/3/library/urllib.request.html</a></p>\r\n</blockquote>\r\n<ul>\r\n<li>Python 2 uses the urllib2 command. For Python 2 I used the following</li>\r\n</ul>\r\n<pre><code>    urllib2.urlopen(url).read()</code></pre>\r\n<blockquote>\r\n<p><a href=\"https://docs.python.org/2/library/urllib2.html\" class=\"uri\">https://docs.python.org/2/library/urllib2.html</a></p>\r\n</blockquote>\r\n<ul>\r\n<li><p><code>hostname --all</code> has different output on this version of Debian, now includes mac address which I did not want.</p></li>\r\n<li><p>Getting the wifi ESSID information. I used <code>iwconfig</code> to get this information. The path to iwconfig command changed in this version of Debian and I now had to give the full path to get it to work.</p></li>\r\n<li><p>Python 2 and 3 seemed to handle strings differently when converting from an array to a plain string.</p></li>\r\n<li><p>Python 3 handles input different from python 2</p></li>\r\n<li><p>If python 2 comes across a non numeric value it quits with an exception</p>\r\n<ul>\r\n<li>so for python 2 I used the command</li>\r\n</ul>\r\n<pre><code>      raw_input()</code></pre>\r\n<ul>\r\n<li>for python 3 I used the command</li>\r\n</ul>\r\n<pre><code>      input()</code></pre></li>\r\n</ul>\r\n<p>Two article about incorporating future statements in Python 2<br />\r\n<a href=\"https://docs.python.org/3/library/__future__.html\" class=\"uri\">https://docs.python.org/3/library/__future__.html</a><br />\r\n</p>\r\n<p><a href=\"https://simeonvisser.com/posts/how-does-from-future-import-work-in-python.html\" class=\"uri\">https://simeonvisser.com/posts/how-does-from-future-import-work-in-python.html</a></p>\r\n<p>Related shows about my PiFaceCAD add on board for the raspberry pi</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2933\">hpr2933 :: A walk through my PifaceCAD Python code – Part 1</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2951\">hpr2951 :: A walk through my PifaceCAD Python code – Part 2</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2963\">hpr2963 :: A walk through my PifaceCAD Python code – Part 3</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2976\">hpr2976 :: A walk through my PifaceCAD Python code – Part 4</a></li>\r\n</ul>\r\n',201,38,1,'CC-BY-SA','Python, Programming, Linux, Raspberry Pi',0,0,1),
(3069,'2020-05-07','Linux Inlaws S01E05 Porn and Skynet',4029,'This is Linux Inlaws, a series on free and open source software, black humour, the revolution','<p>Linux Inlaws - a podcast about on topics around free and open source software, any associated contraband, communism / the revolution in general and whatever else fancies your tickle.</p>\r\n<p>Please note that this and other episodes may contain strong language, offensive humor and other certainly not politically correct language - you have been warned (our parents insisted on this disclaimer - happy mum?). Thus the content is not suitable for consumption in the workplace (especially when played back on a speaker in an open plan office or similar environments), any minors under the age of 35 or any pets including fluffy little killer bunnies, your trusty guide dog (unless on speed) and cute t-rexes or other associated dinosaurs.</p>\r\n<ul>\r\n<li>Ubuntu 20.04: <a href=\"https://wiki.ubuntu.com/FocalFossa/ReleaseNotes\" class=\"uri\">https://wiki.ubuntu.com/FocalFossa/ReleaseNotes</a></li>\r\n<li>Kernel 5.6: <a href=\"https://itsfoss.com/linux-kernel-5-6\" class=\"uri\">https://itsfoss.com/linux-kernel-5-6</a></li>\r\n<li>Wireguard: <a href=\"https://www.wireguard.com\" class=\"uri\">https://www.wireguard.com</a></li>\r\n<li>Python 2.7.18: <a href=\"https://mail.python.org/archives/list/python-dev@python.org/message/OFCIETIXLX34X7FVK5B5WPZH22HXV342/\" class=\"uri\">https://mail.python.org/archives/list/python-dev@python.org/message/OFCIETIXLX34X7FVK5B5WPZH22HXV342/</a></li>\r\n<li>Python 404: <a href=\"https://www.python.org/dev/peps/pep-0404\" class=\"uri\">https://www.python.org/dev/peps/pep-0404</a></li>\r\n<li>RTPM: <a href=\"https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol\" class=\"uri\">https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol</a></li>\r\n<li>webRTC: <a href=\"https://en.wikipedia.org/wiki/WebRTC\" class=\"uri\">https://en.wikipedia.org/wiki/WebRTC</a></li>\r\n<li>MPEG: <a href=\"https://en.wikipedia.org/wiki/MPEG-4\" class=\"uri\">https://en.wikipedia.org/wiki/MPEG-4</a></li>\r\n<li>VP9: <a href=\"https://en.wikipedia.org/wiki/VP9\" class=\"uri\">https://en.wikipedia.org/wiki/VP9</a></li>\r\n<li>Audio compression: <a href=\"https://en.wikipedia.org/wiki/Data_compression#Audio\" class=\"uri\">https://en.wikipedia.org/wiki/Data_compression#Audio</a></li>\r\n<li>Container formats: <a href=\"https://en.wikipedia.org/wiki/Comparison_of_video_container_formats\" class=\"uri\">https://en.wikipedia.org/wiki/Comparison_of_video_container_formats</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','linux inlaws, communism, free and open source software, adult entertainment, skynet',0,0,1),
(3070,'2020-05-08','making vim xdg compatible',3070,'move your vim configuration out of the home directory','<h1 id=\"xdg-vim-config\">xdg vim config</h1>\r\n<p>To make vim load an alternative config file either use an alias or the VIMINIT variable. i.e. place either <code>alias vim=\"vim -u ~/.config/vim/vimrc\"</code> or <code>VIMINIT=\"source ~/.config/vim/vimrc\"</code> in your <code>.bashrc</code> (ironically, that one is still in my home folder).</p>\r\n<p>Once that is loaded, you should source the following file after \"nocompatible\"</p>\r\n<pre><code>&quot; file: ~/.config/vim/xdg.vim\r\nif empty($XDG_CACHE_HOME)\r\n    let $XDG_CACHE_HOME=$HOME.&quot;/.cache&quot;\r\nendif\r\n\r\nif empty($XDG_CONFIG_HOME)\r\n    let $XDG_CONFIG_HOME=$HOME.&quot;/.config&quot;\r\nendif\r\n\r\nif empty($XDG_DATA_HOME)\r\n    let $XDG_DATA_HOME=$HOME.&quot;/.local/share&quot;\r\nendif\r\n\r\nset directory=$XDG_CACHE_HOME/vim/swap,~/,/tmp\r\nset backupdir=$XDG_CACHE_HOME/vim/backup,~/,/tmp\r\nset undodir=$XDG_CACHE_HOME/vim/undo,~/,/tmp\r\nset viminfo+=n$XDG_CACHE_HOME/vim/viminfo\r\nset runtimepath+=$XDG_CONFIG_HOME/vim,$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/bundle/Vundle.vim,$VIM,$VIMRUNTIME\r\nlet $MYVIMRC=$XDG_CONFIG_HOME.&quot;/vim/vimrc&quot;\r\n</code></pre>\r\n<p>With this file in place you should call it from your vimrc</p>\r\n<pre><code>&quot; file: ~/.config/vim/vimrc\r\nset nocompatible\r\nfiletype off\r\nsource $HOME/.config/vim/xdg.vim\r\ncall vundle#begin()\r\nlet vundle#bundle_dir = expand(&quot;$XDG_DATA_HOME/vim/bundle&quot;)\r\n\r\n&quot; include your calls to Plugin here\r\n\r\ncall vundle#end()\r\nfiletype plugin indent on\r\nsyntax on\r\n\r\nsource ~/.config.\r\n</code></pre>\r\n<p>Note that it is important that all the paths are defined BEFORE Vundle (or whatever is your plugin manager) is called, since the path to it is defined in <code>xdg.vim</code>.</p>\r\n<p>You can check my full vim config at <a href=\"https://gitlab.com/crvs/dotfiles/-/tree/master/.config/vim\">gitlab</a>.</p>\r\n<h2 id=\"references\">References</h2>\r\n<p>The vim script I modified my config from - <a href=\"https://gist.github.com/dkasak/6ae1c6bf0d771155f23b\">https://gist.github.com/dkasak/6ae1c6bf0d771155f23b</a></p>\r\n',385,82,1,'CC-BY-SA','vim, configuration, XDG',0,0,1),
(3071,'2020-05-11','Bash snippet - quotes inside quoted strings',799,'How to add quotes to quoted strings in Bash','<h2 id=\"bash-and-quoted-strings\">Bash and quoted strings</h2>\r\n<p>An issue I just hit in Bash was that I had a quoted string, and I wanted to enclose it in quotes. How to do this?</p>\r\n<p>This is the umpteenth time I have stumbled over this issue, and I realised I had found out how to solve it a while back but the information hadn’t rooted itself into my mind!</p>\r\n<p>I have always been less clear in my mind about quoted strings in Bash than I should be, so, assuming others might have similar confusion I thought I’d try and clarify things in the form of an HPR show.</p>\r\n<h3 id=\"the-problem\">The problem</h3>\r\n<p>The thing I was having difficulties with was an <code>alias</code> definition of a useful pipeline:</p>\r\n<pre><code>nmap -sn 192.168.0.0/24 | awk &#39;/^Nmap scan report/{print &quot;&quot;; print; next}{print}&#39;</code></pre>\r\n<p>This uses <code>nmap</code> (see Ken’s show <a href=\"https://hackerpublicradio.org/eps.php?id=3052\" title=\"hpr3052 :: Locating computers on a network\">3052</a> for a discussion of its use) piped into an <code>awk</code> one-liner that formats the information returned by <code>nmap</code>.</p>\r\n<p>The <code>alias</code> command can be used to store such a command or command sequence as a single simple command. It’s usually added to the <code>~/.bashrc</code> file so it gets added to every Bash shell you start up (note <em>Bash Tips #22</em>, currently being written, will cover these startup files).</p>\r\n<p>An <code>alias</code> definition looks something like this:</p>\r\n<pre><code>alias la=&#39;ls -Al&#39;</code></pre>\r\n<p>The alias itself <code>\'la\'</code> is defined as the command <code>ls -Al</code>.</p>\r\n<p>So how to make my <code>nmap</code> sequence into an alias given that the commands contain both single and double quotes?</p>\r\n<h3 id=\"quoted-strings-in-bash\">Quoted strings in Bash</h3>\r\n<p>Bash is (to my mind) a bit weird with quoted strings.</p>\r\n<p>There are two sorts of quotes in Bash (leaving aside the <em>backquote</em> or <em>backtick</em> – <code>`</code>):</p>\r\n<ul>\r\n<li><p>Single quotes, also called <em>hard</em> quotes (<code>\'</code>). The literal value of characters between the quotes is preserved. Single quotes are not allowed, even if preceded by backslash escape characters.</p></li>\r\n<li><p>Double quotes, also called <em>soft</em> quotes (<code>\"</code>). Certain characters within the quotes have special meanings, such as <code>\'$\'</code> and <code>\'&bsol;\'</code>. Double quotes are allowed in the string when preceded by a backslash.</p></li>\r\n</ul>\r\n<p>There’s a more comprehensive treatment of these quoting types (and others) in the <a href=\"https://www.gnu.org/software/bash/manual/html_node/Quoting.html\" title=\"Bash Reference Manual: 3.1.2 Quoting\">Bash Reference Manual</a>.</p>\r\n<h3 id=\"changing-quotes-and-concatenating-strings\">Changing quotes and concatenating strings</h3>\r\n<p>To make a variable containing a string with embedded quotes you can do this:</p>\r\n<pre><code>$ x=&#39;string1&#39;&quot;&#39;&quot;&#39;string2&#39;\r\n$ echo $x\r\nstring1&#39;string2</code></pre>\r\n<p>What we did here was close <code>\'string1\'</code>, start a new string enclosed in double quotes <code>\"\'\"</code>, then append a second string <code>\'string2\'</code>. Bash treats the three strings as one, but they have to be contiguous. There must be no intervening spaces<a href=\"#fn1\" class=\"footnote-ref\" id=\"fnref1\"><sup>1</sup></a>.</p>\r\n<p>This solution is rather ugly. You could also use Bash string concatenation to do this, though it’s more long-winded:</p>\r\n<pre><code>$ x=&#39;string1&#39;\r\n$ x+=&quot;&#39;&quot;\r\n$ x+=&#39;string2&#39;\r\n$ echo $x\r\nstring1&#39;string2</code></pre>\r\n<p>The same principles hold for double quotes of course:</p>\r\n<pre><code>$ x=&quot;string1&quot;&#39;&quot;&#39;&quot;string2&quot;\r\n$ echo $x\r\nstring1&quot;string2</code></pre>\r\n<p>You’d probably not want to do this though.</p>\r\n<h3 id=\"using-backslashes\">Using backslashes</h3>\r\n<p>You can use backslashes to escape double quotes inside a <em>double</em> quoted string in Bash as we have seen.</p>\r\n<pre><code>$ x=&quot;string1&bsol;&quot;string2&quot;\r\n$ echo $x\r\nstring1&quot;string2</code></pre>\r\n<p>However, as discussed earlier, it’s not possible to use backslashes to escape single quotes inside a single quoted string in Bash. However, outside a string a backslashed character is <em>escaped</em>. For example, if you have files which have spaces in their names, you can quote the name or use the backslash escape to protect the spaces<a href=\"#fn2\" class=\"footnote-ref\" id=\"fnref2\"><sup>2</sup></a>:</p>\r\n<pre><code>$ ls -l a&bsol; file&bsol; with&bsol; spaces.awk\r\n-rw-r--r-- 1 hprdemo hprdemo 0 Apr 22 22:25 &#39;a file with spaces.awk&#39;</code></pre>\r\n<p>So, knowing this, you can exit a string, concatenate with a backslashed quote then restart a string like this:</p>\r\n<pre><code>$ x=&#39;string1&#39;&bsol;&#39;&#39;string2&#39;\r\n$ echo $x\r\nstring1&#39;string2</code></pre>\r\n<h3 id=\"solution\">Solution</h3>\r\n<p>So now we can see how to achieve the alias definition I wanted earlier:</p>\r\n<pre><code>alias show_network=&#39;nmap -sn 192.168.0.0/24 | awk &#39;&bsol;&#39;&#39;/^Nmap scan report/{print &quot;&quot;; print; next}{print}&#39;&bsol;&#39;&#39;&#39;\r\n\r\n</code></pre>\r\n<h3 id=\"epilogue\">Epilogue</h3>\r\n<p>There’s more to be said about this subject, but too much of this stuff is not healthy.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><p>Ken Fallon’s HPR show where he describes <code>nmap</code>: <a href=\"https://hackerpublicradio.org/eps.php?id=3052\">hpr3052 :: Locating computers on a network</a></p></li>\r\n<li>Bash Reference Manual:\r\n<ul>\r\n<li><a href=\"https://www.gnu.org/software/bash/manual/html_node/Quoting.html\">Quoting</a></li>\r\n</ul></li>\r\n<li>Stack Overflow articles:\r\n<ul>\r\n<li><a href=\"https://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash\">Difference between single and double quotes in Bash</a></li>\r\n<li><a href=\"https://stackoverflow.com/questions/3834839/how-to-escape-a-double-quote-inside-double-quotes\">How to escape a double quote inside double quotes</a></li>\r\n</ul></li>\r\n</ul>\r\n<section class=\"footnotes\">\r\n<hr />\r\n<ol>\r\n<li id=\"fn1\"><p>This is quite an artificial example to make a point. You wouldn’t do things this way in reality. Using <code>x=\'string1\'\"\'string2\"</code> would also work (<code>\'string1\'</code> in single quotes, and <code>\"\'string2\'\"</code> in double quotes). Also, you could just write <code>x=\"string1\'string2\"</code> and stop all the messing about, but that would not be much of an example!<a href=\"#fnref1\" class=\"footnote-back\">↩</a></p></li>\r\n<li id=\"fn2\"><p>The backslash is making the space a literal space, otherwise Bash would see it as an argument delimiter, and would look for the files <code>\'a\'</code>, <code>\'file\'</code>, <code>\'with\'</code> and <code>\'spaces.awk\'</code> to list details about!<a href=\"#fnref2\" class=\"footnote-back\">↩</a></p></li>\r\n</ol>\r\n</section>\r\n',225,42,1,'CC-BY-SA','Bash,quotes',0,0,1),
(3072,'2020-05-12','The joy of pip-tools and pyenv-virtualenv',1441,'How to manage your dependencies and environment isolation when developing in Python','<p>TL;DL: What I end up recommending is that you use pip-tools for your dependency management needs, and pyenv-virtualenv for your environment management needs. In the show I explain why you would want these things.</p>\r\n\r\n<p>I talk about these tools:</p>\r\n\r\n<ul>\r\n  <li><a href=\"https://virtualenv.pypa.io/\">virtualenv</a></li>\r\n  <li><a href=\"https://python-poetry.org/\">poetry</a></li>\r\n  <li><a href=\"https://pipenv.pypa.io/\">pipenv</a></li>\r\n  <li><a href=\"https://github.com/jazzband/pip-tools/\">pip-tools</a></li>\r\n  <li><a href=\"https://virtualenvwrapper.readthedocs.io/\">virtualenvwrapper</a></li>\r\n  <li><a href=\"https://github.com/pyenv/pyenv\">pyenv</a></li>\r\n  <li><a href=\"https://github.com/pyenv/pyenv-virtualenv\">pyenv-virtualenv</a></li>\r\n</ul>\r\n\r\n<p>I mention in passing, and as fodder for further shows:</p>\r\n\r\n<ul>\r\n  <li><a href=\"https://reproducible-builds.org/\">reproducible builds</a></li>\r\n  <li><a href=\"https://nixos.org/nix/\">Nix</a></li>\r\n  <li><a href=\"https://tox.readthedocs.io/\">tox</a></li>\r\n  <li>I also owe you a show on my awesome bash prompt that shows me which environment I am in.</li>\r\n</ul>\r\n\r\n<h2 id=\"install-pyenv-and-pyenv-virtualenv\">Install pyenv and pyenv-virtualenv</h2>\r\n\r\n<pre><code>git clone https://github.com/pyenv/pyenv ~/.pyenv\r\ngit clone https://github.com/pyenv/pyenv-virtualenv ~/.pyenv/plugins/pyenv-virtualenv\r\n</code></pre>\r\n\r\n<p>Add to <code>~/.bash_profile</code>:</p>\r\n\r\n<pre><code>export PYENV_ROOT=$HOME/.pyenv\r\nexport PATH=$PYENV_ROOT/bin:$PATH\r\n</code></pre>\r\n\r\n<p>Add to <code>~/.bash_profile</code> (optional):</p>\r\n\r\n<pre><code>eval \"$(pyenv init -)\"\r\neval \"$(pyenv virtualenv-init -)\"\r\n</code></pre>\r\n\r\n<p>The optional bits provide you with the <code>pyenv shell</code> functionality for setting a session-specific Python version, and automatic activation of the virtualenv. Most of the time you don’t need activation, scripts and commands run just fine via the shims, but some tooling around Python may sometimes need to know which virtualenv you’re in.</p>\r\n\r\n<p>Run the export and eval lines in your shell to have the configuration work immediately. Alternatively, do <code>su - yourusername</code> to login to a new session that runs the profile. The <code>-</code> is important.</p>\r\n\r\n<p>You might be able to get away with just opening a new tab or window in your terminal. Whether that runs the profile depends on your settings.</p>\r\n\r\n<h2 id=\"set-up-your-pyenv-virtualenv-for-your-project\">Set up your pyenv virtualenv for your project</h2>\r\n\r\n<pre><code># Creates the virtualenv named my-project-env using \r\n# the python named system (your system default python)\r\npyenv virtualenv system my-project-env  \r\ncd /path/to/my-project\r\npyenv local my-project-env\r\n</code></pre>\r\n\r\n<p>Your system Python may or may not work for this. You might have to install pip and virtualenv. It might still break with some message about <code>ensurepip</code> failing (currently both Nix (20.09pre) python and Ubuntu (18.04) python are failing for me, and older Anaconda pythons also had a broken venv). In that case, use pyenv to install a Python that works, and use that instead of the system python:</p>\r\n\r\n<pre><code>pyenv install miniconda3-latest\r\npyenv virtualenv miniconda3-latest my-project-env\r\ncd /path/to/my-project\r\npyenv local my-project-env\r\n</code></pre>\r\n\r\n<h2 id=\"install-pip-tools\">Install pip-tools</h2>\r\n\r\n<p>You’ll want to do this inside the virtual environment that you want to manage. Don’t install pip-tools globally.</p>\r\n\r\n<pre><code>cd /path/to/my/project\r\n# And, assuming you have the shims on your $PATH\r\n# and you set the pyenv local as shown previously\r\npython -m pip install pip-tools\r\n</code></pre>\r\n\r\n<p>Now put your requirements in <code>requirements.in</code>, one on each line, in the form you would give them to <code>pip</code> on the command line:</p>\r\n\r\n<pre><code>somepackage &gt;=3, &lt;4\r\notherpackage &lt;7\r\n</code></pre>\r\n\r\n<p>Compile <code>requirements.in</code> to a <code>requirements.txt</code>:</p>\r\n\r\n<pre><code>python -m piptools compile\r\n</code></pre>\r\n\r\n<p>You could run the shorter command <code>pip-compile</code> for convenience, but using the long form with <code>-m</code> looks it up through your configured Python, and makes it less likely for you to surprise yourself and run a tool in a different virtualenv than you expected. Same with <code>python -m pip</code> above.</p>\r\n\r\n<p>Your <code>requirements.txt</code> will look something like this:</p>\r\n\r\n<pre><code>otherpackage==6.9.3          # via -r requirements.in\r\nsomepackage==3.4.2           # via -r requirements.in\r\ntransitivedependency==2.7.6  # via somepackage\r\n</code></pre>\r\n\r\n<p>It helpfully tells you where everything is from!</p>\r\n\r\n<p>Now to actually install these things you <code>python -m pip -r requirements.txt</code>.</p>\r\n\r\n<p>Now you’re good to go! Happy hacking!</p>',311,38,1,'CC-BY-SA','python,pyenv,virtualenv,virtualenvwrapper,poetry,pipenv,pip-tools',0,0,1),
(3076,'2020-05-18','Keep calm and Virion',3526,'A COVID-19 lockdown chat from Scotland','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Two HPR hosts from Scotland get together over Mumble to chat about all manner of stuff.</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0268.html\">Andrew Conway</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\r\n</ul>\r\n<h2 id=\"apology\">Apology</h2>\r\n<p>Dave’s sound was a bit muffled in this recording. It turns out that it’s important which USB port the microphone (Zoom recorder) is plugged into. Who knew!</p>\r\n<h2 id=\"notes\">Notes</h2>\r\n<p>Some of the topics we discussed</p>\r\n<ul>\r\n<li>Accent differences in Scotland\r\n<ul>\r\n<li>What is <em>Butcher Meat</em>? Is it an Edinburgh expression?</li>\r\n</ul></li>\r\n<li>The Fish Van from <a href=\"https://en.wikipedia.org/wiki/Pittenweem\" title=\"A fishing village in Fife\">Pittenweem</a>\r\n<ul>\r\n<li>The mysterious non-Crab Crab meat</li>\r\n<li>Dressed and live crabs in <a href=\"https://en.wikipedia.org/wiki/Cromer\" title=\"A town on the Norfolk coast\">Cromer</a></li>\r\n</ul></li>\r\n<li>Handling enforced isolation; the response to COVID-19</li>\r\n<li>The type of disposable masks sold for DIY use can be impractical</li>\r\n<li>Supermarket online shopping and delivery versus local shopping</li>\r\n<li>The etiquette of distancing when out walking or cycling for exercise during the lockdown</li>\r\n<li>Cycling anecdotes\r\n<ul>\r\n<li><a href=\"https://www.slime.com/uk/products/bike/sealants/tube-sealant.php\" title=\"Slime tube sealant\">Slime</a> tube sealant</li>\r\n<li>Old railway lines turned to cycle paths (e.g. <a href=\"https://en.wikipedia.org/wiki/Balerno_line\" title=\"Balerno railway line, now a walkway\">Balerno line</a> in Edinburgh, <a href=\"https://en.wikipedia.org/wiki/Marriott&#39;s_Way\" title=\"Marriott&#39;s Way, Norfolk, originally a railway line\">Marriott’s Way</a> in Norfolk)</li>\r\n</ul></li>\r\n<li>Industrial archaeology and historical buildings\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Water_of_Leith\" title=\"Water of Leith\">Water of Leith</a>, Edinburgh</li>\r\n<li>Paper making (<a href=\"https://en.wikipedia.org/wiki/Esparto\" title=\"Esparto grass\">Esparto grass</a>)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/River_Kelvin\" title=\"River Kelvin\">River Kelvin</a>, Glasgow</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/William_Thomson,_1st_Baron_Kelvin\" title=\"Lord Kelvin\">Lord Kelvin</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Warrender_Baths\" title=\"Warrender Baths, Edinburgh\">Warrender Baths</a>, Edinburgh</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Govanhill_Baths\" title=\"Govanhill Baths, Glasgow\">Govanhill Baths</a>, Glasgow (ref. <em>steamie</em>)</li>\r\n</ul></li>\r\n<li>Electronics\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ESP8266\" title=\"Low-cost Wi-Fi microchip\">ESP8266</a>, <a href=\"https://en.wikipedia.org/wiki/ESP32\" title=\"Microcontroller with integrated Wi-Fi and dual-mode Bluetooth\">ESP32</a></li>\r\n<li><a href=\"https://sonoff.tech/\" title=\"Home automation\">Sonoff</a> home automation</li>\r\n</ul></li>\r\n<li>D&amp;D sessions\r\n<ul>\r\n<li>Initiated by <a href=\"https://hackerpublicradio.org/correspondents/0078.html\">Klaatu</a> in New Zealand</li>\r\n</ul></li>\r\n<li>Shortages during the pandemic: toilet rolls, flour, etc\r\n<ul>\r\n<li>Supply chains: wholesale versus domestic</li>\r\n</ul></li>\r\n<li><em>Dracula</em> by Bram Stoker\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Whitby\" title=\"A coastal town in Yorkshire\">Whitby</a>, Yorkshire</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Brașov\" title=\"A city in Transylvania, Romania\">Brașov</a>, Transylvania, Romania.\r\n<ul>\r\n<li>Called <em>Corona</em> at one point in its history.</li>\r\n<li>Near to <a href=\"https://en.wikipedia.org/wiki/Bran_Castle\" title=\"Bran Castle, near Brașov\">Bran Castle</a>, known outside Romania as Dracula’s Castle.</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Pittenweem\">Pittenweem</a>, a fishing village in Fife</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Cromer\">Cromer</a>, a town on the Norfolk coast, famous for its crabs</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Whitby\">Whitby</a>, a seaside town in North Yorkshire</li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','Virus,Virion,COVID-19',0,0,1),
(3090,'2020-06-05','Locating Computer on a Enterprise Network',2388,'advanced nmap tips','<p>\r\nIn this episode operat0r responds to <a href=\"https://hackerpublicradio.org/eps.php?id=3052\">hpr3052 :: Locating computers on a network</a>, with more tips and tricks. Then he continues through a detailed exercise in using nmap on the corporate network.\r\n</p>\r\n<p>\r\nThe expanded commands can be found <a href=\"https://hackerpublicradio.org/eps/hpr3090.txt\">here</a>.\r\n</p>',36,61,1,'CC-BY-SA','nmap,hacking,computers,networking,scripting,bash,shell',0,0,1),
(3073,'2020-05-13','Matchbox and Diecast Restoration',182,'A short episode about my New hobby restoring Matchbox and other Diecast models','<p>\r\nToday\'s show is about my recently started hobby of restoring Matchbox models. I talked about this on the New Year show and Ken said it deserved a show in its own right.\r\n</p>\r\n<p>\r\nSo today I briefly talk about how I got into the hobby through watching YouTube Videos of Marty\'s Matchbox Makeovers, and my first restoration pictured below. Enjoy.\r\n</p>\r\n<p>\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3073.jpg\">\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3073_thumbnail.jpg\" title=\"\" alt=\"Photo of a silver matchbox car\" ></a>\r\n</p>\r\n\r\n\r\n<h3>Links:</h3>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/channel/UCLM7pRUW6CmqqoAic24wbpQ\">https://www.youtube.com/channel/UCLM7pRUW6CmqqoAic24wbpQ</a></li>\r\n</ul>\r\n\r\n',338,114,0,'CC-BY-SA','Matchbox, Diecast Models, Restoration',0,0,1),
(3078,'2020-05-20','Coronavirus Update 2020-05-07',878,'Where we are with this pandemic, and how should we respond?','<p>This is an update to my earlier show to pull together what we know about the Coronavirus on this date, and what measures we can take. It focuses on the lack of solid information at this point and suggests a prudent course to stay safe. <a href=\"https://www.palain.com/health-topics/coronavirus-update-20200507/\" class=\"uri\">https://www.palain.com/health-topics/coronavirus-update-20200507/</a></p>\r\n<ul>\r\n<li><a href=\"https://www.palain.com/health-topics/scientific-and-medical-reports/\" class=\"uri\">https://www.palain.com/health-topics/scientific-and-medical-reports/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2685\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2685</a></li>\r\n<li><a href=\"https://www.cdc.gov/flu/about/burden/2017-2018.htm\" class=\"uri\">https://www.cdc.gov/flu/about/burden/2017-2018.htm</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/All_models_are_wrong\" class=\"uri\">https://en.wikipedia.org/wiki/All_models_are_wrong</a></li>\r\n<li><a href=\"https://www.healthdata.org/covid/updates\" class=\"uri\">https://www.healthdata.org/covid/updates</a></li>\r\n<li><a href=\"https://www.medpagetoday.com/infectiousdisease/covid19/86127\" class=\"uri\">https://www.medpagetoday.com/infectiousdisease/covid19/86127</a></li>\r\n<li><a href=\"https://www.cnn.com/2020/05/04/health/us-coronavirus-monday/index.html\" class=\"uri\">https://www.cnn.com/2020/05/04/health/us-coronavirus-monday/index.html</a></li>\r\n<li><a href=\"https://www.palain.com/health-topics/coronavirus-update-20200507/\" class=\"uri\">https://www.palain.com/health-topics/coronavirus-update-20200507/</a></li>\r\n</ul>\r\n\r\n<hr />\r\n\r\n<p>\r\nExtracted from <a href=\"https://www.palain.com/health-topics/coronavirus-update-20200507/\">Palain.com</a> under the tearms of Creative Commons Attribution-ShareAlike 4.0 International License. \r\n</p>\r\n\r\n<h1 >Coronavirus Update 20200507</h1>\r\n\r\n<p>The coronavirus pandemic is continuing throughout most of the world, and I wanted to put down some observations on where we stand today. First, note that I put the date in the title. This is because the situation in some ways changes day-by-day, even though there are continuities. That makes it a dangerous place to be because it is human nature to look for the latest news and jump on it if it looks good. And that is a prime mistake because we do not in fact know enough at this point to be confident in these news reports. I would refer you to my earlier essay, <a rel=\"noreferrer noopener\" href=\"https://www.palain.com/health-topics/scientific-and-medical-reports/\" target=\"_blank\">Scientific and Medical Reports</a>, which is highly relevant right now. While I could not have predicted this pandemic when I wrote it, it contains basic principles that are <em>always</em> relevant. </p>\r\n\r\n\r\n\r\n<p>The nature of the press is that it is like the carnivorous plant in the movie <em>Little Shop of Horrors</em>, always crying \"Feed Me!\" And of course we are all interested if not to say anxious for any news on the course of this disease and where it is taking us. What this means is that you will see a unstoppable stream of news stories touting the latest study on one or another aspect of this. Add in the desire of politicians to spin things to their advantage, and you have a recipe for disaster. To keep sane, remember a few basic principles:</p>\r\n\r\n\r\n\r\n<ul><li>One study proves nothing. There are lots of studies, and many of them are one-and-done without having any effect on medical practice. If there is an interesting result, it merely indicates an area for further study.</li><li>Study results are only meaningful when they have withstood peer review and have been replicated by other scientists. This process does produce good results, but only with time. Only in movies do scientists go into the lab and come out 24 hours later with the answer.</li><li>If you really want to know when all of this will end, there are only two answers. It can end very soon with an accompanying loss of life because the virus is still spreading. This is starting to show up in places that ignore the science. Going outside without a mask and carrying on as usual is not brave, it is stupid.</li><li>The other answer is that a gradual relaxation of isolation can happen if it guided by sound science. Unfortunately, as just explained, that sound science is still being sought, and will take time.</li><li>When you see the vast majority of doctors and scientists saying the same thing, that is your best assurance the information is accurate. </li><li>Right now the number one priority is testing, testing, testing.</li></ul>\r\n\r\n\r\n\r\n<p>So, with that background, do we know anything at this point? Yes, we do. But we also have a lot of unanswered questions.</p>\r\n\r\n\r\n\r\n<h2>Second Wave?</h2>\r\n\r\n\r\n\r\n<p>The first big question is whether there will be a second wave, and this is something that every qualified epidemiologist I have heard from says is guaranteed. And the reason is that a certain \"fatigue\" sets in with staying in isolation, and at least some people will convince themselves they don’t need to do it. They are wrong, and they will guarantee that second wave. In the 1918 Flu Pandemic, the second wave was far worse than the first wave. And don’t forget there was a third wave in that pandemic until it petered out in 1920. The best thing you can do is keep isolated if at all possible, and follow all of the guidelines: </p>\r\n\r\n\r\n\r\n<ul><li>Wear a mask if you must go out, such as for groceries.</li><li>Many stores are offering special hours for seniors. If you are one, take advantage.</li><li>After a shopping trip, wash or disinfect items carefully. Remember that soap is all you need to defeat the virus, but use disinfectant wipes when soap is not practical.</li><li>After returning, strip and place all of your clothes in the washer. The detergent should kill any virus that is there.</li><li>Wash your hands with soap frequently.</li><li>Try not to touch your face.</li><li>Maintain at least two meters distance from anyone not in your household when you do go out.</li><li>Try to stay fit. I go for walks in my neighborhood if there aren’t too many others out, and when there is someone else out, I give them a wide separation. I also do gardening in my own yard, and exercise in my home. That won’t prevent you from getting the disease, but it may prevent you from dying of it.</li></ul>\r\n\r\n\r\n\r\n<p>Yeah, this is all of the stuff we have been hearing all along. But annoying as it is, it <em>does</em> work if you do it.</p>\r\n\r\n\r\n\r\n<h2>Is the virus mutating?</h2>\r\n\r\n\r\n\r\n<p>Yes. In other news, water is wet. Face it, mutation is what organisms do, and that has been true for billions of years. The question you really have is \"Is it getting worse?\" And right now the answer is \"We don’t know.\" Sorry I can’t give you any more determinative answer, but we are only at the \"one study\" phase right now, and we are a ways off from the \"peer-reviewed, replicated consensus\" phase that will resolve this. There are indications that at least this virus does not mutate as much as influenza, but even that may require more study.</p>\r\n\r\n\r\n\r\n<h2>Am I Immune?</h2>\r\n\r\n\r\n\r\n<p>We would all love to know if we are immune. This requires two big things to give a good answer. First, does having the disease and then recovering give you immunity? And the sad truth is that we don’t know yet. The common cold is a coronavirus, and you never get immunity. Influenza is a virus, and getting it one year provides no immunity the next. And if getting it once does provide immunity, we still need testing to discover this. The number one priority right now in all locations should be testing, testing, testing. That is the prerequisite for doing any decent epidemiology. There was a report (note: <em>one study</em>) out of South Korea that indicated that some people could get the disease twice, but they re-analyzed the data and decided that it might have been false positives. That is the kind of thing that happens when scientists are trying to do a year’s worth of work in few weeks, which is what they are doing.</p>\r\n\r\n\r\n\r\n<h2>Is It More Infectious Than We Thought?</h2>\r\n\r\n\r\n\r\n<p>Again, very unclear. And even less clear is what this implies. An argument is being made that if the rate of infection is higher, given the number of deaths, that would imply it is less lethal. And that is being used to argue in favor of this not being a big deal, so reopen everything. But to put it in perspective, in the 2017-2018 flu season, which was on the high end of deaths, we had <a href=\"https://www.cdc.gov/flu/about/burden/2017-2018.htm\">61 thousand deaths in the U.S</a>. Today, in just over 2 months, we have 75 thousand deaths in the US, and that is with all of the extraordinary measures we put in place to keep people safe. To make an argument that Covid-19 is no more dangerous than the flu is to be criminally stupid at best.</p>\r\n\r\n\r\n\r\n<h2>Didn’t They Predict More Deaths?</h2>\r\n\r\n\r\n\r\n<p>Why yes, they did. A widely used model in the US is from the Institute for Health Metrics and Evaluation (IHME), at the University of Washington. And they have issued forecasts that ranged from hundreds of thousands of deaths to around 60,000 deaths. Clearly they have no idea what they are doing, right? Not so fast. As the statistician <a href=\"https://en.wikipedia.org/wiki/All_models_are_wrong\">George Box</a> famously said, \"All models are wrong but some are useful\". In this case you have to factor in two things. One is uncertainty, of course. To forecast how many people will die, it helps to know how many people <em>have</em> died, and this has been subject to fierce debate. </p>\r\n\r\n\r\n\r\n<p>And here it gets difficult, since one argument is over what counts as a Covid-19 death. And since every one of our 50 states has their own health reporting system, there is a wide disparity. One example of this is the idea of \"excess deaths\". If a given area has a pretty regular death rate for a number of years, and suddenly that death rate jumps 500% in the midst of a pandemic, it is reasonable to suspect those \"excess deaths\" are a result of the coronavirus. But if those deaths get counted, others will argue that it is inflating the numbers, and that only a positive coronavirus serum test should count. Since each state does this differently, this leads to the odd result that the disease appears more or less lethal depending on your state of residence. And that means politicians have incentive to get the numbers they want.</p>\r\n\r\n\r\n\r\n<p>The other factor complicating things is the phenomenon known as the \"self-preventing\" prophecy. You see, the initial high estimates tended to be \"This is what will happen if you don’t take strong measures\", and of course they were very high. And we know that governments like the UK and the US looked at those predictions, and started to take some stronger measures. So after a little bit, new predictions came out that were lower <em>as a result</em> of those measures. And now we are seeing misguided efforts to get people to go out and resume normal life, and <em>as a result</em> the newest forecasts are going up again. This is a feedback loop, in other words. </p>\r\n\r\n',198,100,0,'CC-BY-SA','Health, Coronavirus',0,0,1),
(3115,'2020-07-10','Pest Control',2291,'Talk about pest control','<ul>\r\n<li><a href=\"https://smile.amazon.com/s?k=Mosquito+Dunk\" class=\"uri\">https://smile.amazon.com/s?k=Mosquito+Dunk</a>\r\n<ul>\r\n<li>essentra ic3 for outdoors (30-90days)</li>\r\n<li>bee Friendly Mavrik Perimeter for indoor/outdoor OR bad for bees 4 oz of bifen (30-90days)</li>\r\n<li>delta dust for cracks / walls etc ( 6 -8 mos nasty stuff … )</li>\r\n<li>Syngenta Advion Cockroach Gel Bait ( only when you have issues with above approach or infestation )</li>\r\n<li><a href=\"https://www.stihlusa.com/products/sprayers/backpack-sprayers/sr450/\" class=\"uri\">https://www.stihlusa.com/products/sprayers/backpack-sprayers/sr450/</a> ( blower I use for outside ~$700USD I spray neighbors for $20USD to create a perimeter around my house :P )</li>\r\n<li>use normal pump sprayer for indoors suggest using a metal tip for finer mist on baseboards etc youtube for best approach… I DO NOT spray surfaces that people touch .. some folks spray ‘safe’ indoor stuff on carpet and couches … I spray under/around/behind</li>\r\n</ul></li>\r\n<li>FULL TANK ( ~3.5 gal )GETS:\r\n<ul>\r\n<li>4 oz of bifen OR .5oz of Mavrik</li>\r\n<li>12 of essentra ic3</li>\r\n</ul></li>\r\n<li>Pump Sprayer gets:\r\n<ul>\r\n<li>1gal water</li>\r\n<li>.5oz bifen or .1 Mavrik</li>\r\n</ul></li>\r\n</ul>\r\n',36,0,1,'CC-BY-SA','Pest Control,bugs,DIY,Home Improvement',0,0,1),
(3082,'2020-05-26','RFC 5005 Part 1 – Paged and archived feeds? Who cares?',2108,'An interview with two passionate RFC 5005 fans on how to handle big Atom feeds','<p>This conversation took almost an hour, so I split it into two shows:</p>\r\n\r\n<ul>\r\n  <li>Part 1 talks mostly about the RFC itself, what it means and why.</li>\r\n  <li>Part 2 goes into personal experiences with the RFC and with syndication in general, in particular in the context of web comics. This is part 1.</li>\r\n</ul>\r\n\r\n<h2 id=\"the-why\">The why</h2>\r\n\r\n<p>When serving most RSS/Atom feed readers today, you have to choose: Do you make a complete feed with all the things you ever published, or do you make a shorter feed with just the latest entries?</p>\r\n\r\n<p>This is a trade-off with pros and cons, and it seems like a trade-off you have to make, but a solution to let your Atom feed have the cake and eat it too existed already 13 years ago, if only any of our feed readers would adhere to it: RFC 5005, <em>Feed Paging and Archiving</em></p>\r\n\r\n<h2 id=\"the-what\">The what</h2>\r\n\r\n<p><a href=\"https://tools.ietf.org/html/rfc5005\">https://tools.ietf.org/html/rfc5005</a> was published in September 2007</p>\r\n\r\n<ul>\r\n  <li>The XML namespace for RFC 5005 elements is <code>https://purl.org/syndication/history/1.0</code>, aliased as <code>fh</code> below.</li>\r\n  <li>Section 2 defines the <em>complete feed</em>: It is one document (Atom file) that contains the entire set the feed describes. The document is marked with an <code>fh:complete</code> element.</li>\r\n  <li>Section 3 defines the <em>paged feed</em>: It is a series of documents connected with Atom <code>link</code> elements with <code>rel</code> set to the <em>link relations</em> <code>first</code>, <code>last</code>, <code>previous</code> or <code>next</code>.</li>\r\n  <li>Section 4 defines the <em>archived feed</em>: It has a <em>subscription document</em> that may change at any time, and a series of <em>archive documents</em> that are expected to have stable contents and URIs. The link relations defined are <code>current</code>, <code>prev-archive</code> and <code>next-archive</code>. The semantics are clearer: <code>prev-archive</code> refers to previously published entries, and because the contents are stable you can stop when you see a URI to a document you already have. Archive documents are marked with the <code>fh:archive</code> element.</li>\r\n</ul>\r\n\r\n<h2 id=\"the-who\">The who</h2>\r\n\r\n<p>In this show I’m talking to:</p>\r\n\r\n<h3 id=\"fluffy\">fluffy</h3>\r\n\r\n<ul>\r\n  <li>Federated social web:<br />\r\n<a href=\"https://queer.party/@fluffy\">https://queer.party/@fluffy</a></li>\r\n  <li>Writes and makes things in several creative fields:<br />\r\n<a href=\"https://beesbuzz.biz/\">https://beesbuzz.biz/</a></li>\r\n  <li>Publ is like a static site generator, but dynamic. It produces RFC 5005 archive feeds, of course:<br />\r\n<a href=\"https://publ.beesbuzz.biz/\">https://publ.beesbuzz.biz/</a></li>\r\n  <li>Thoughts on ephemeral content vs content worth archiving and how they relate to protocols:<br />\r\n<a href=\"https://beesbuzz.biz/blog/5709-Keeping-it-personal\">https://beesbuzz.biz/blog/5709-Keeping-it-personal</a></li>\r\n</ul>\r\n\r\n<h3 id=\"jamey\">Jamey</h3>\r\n\r\n<ul>\r\n  <li>Federated social web:<br />\r\n<a href=\"https://toot.cat/@jamey\">https://toot.cat/@jamey</a></li>\r\n  <li>Blog:<br />\r\n<a href=\"https://minilop.net/\">https://minilop.net/</a></li>\r\n  <li>Made a prototype full-history reader that follows RFC 5005 links:<br />\r\n<a href=\"https://reader.minilop.net/\">https://reader.minilop.net/</a></li>\r\n  <li>Made a webcomic reader mostly mentioned in Part 2:<br />\r\n<a href=\"https://www.comic-rocket.com/\">https://www.comic-rocket.com/</a></li>\r\n  <li>Made a WordPress plugin implementing RFC 5005:<br />\r\n<a href=\"https://github.com/jameysharp/wp-fullhistory\">https://github.com/jameysharp/wp-fullhistory</a></li>\r\n  <li>Made an RFC 5005 archive feed synthesizer for sites with a predictable post frequency and URL structure:<br />\r\n<a href=\"https://github.com/jameysharp/predictable/\">https://github.com/jameysharp/predictable/</a><br />\r\nHosted at <a href=\"https://fh.minilop.net/\">https://fh.minilop.net/</a></li>\r\n  <li>Was on HPR 9 years ago, talking about Xorg!<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=0825\">https://hackerpublicradio.org/eps.php?id=0825</a></li>\r\n</ul>\r\n\r\n<h2 id=\"conversation-notes\">Conversation notes</h2>\r\n\r\n<ul>\r\n  <li>Google Reader was terminated 2013-07-01, all subscription data permanently gone on 2013-07-15:<br />\r\n<a href=\"https://www.google.com/reader/about/\">https://www.google.com/reader/about/</a></li>\r\n  <li>Mastodon had Atom feeds with paging, but the feeds went away when OStatus went away:<br />\r\n<a href=\"https://github.com/tootsuite/mastodon/pull/11247\">https://github.com/tootsuite/mastodon/pull/11247</a></li>\r\n  <li>HTML4 does indeed define the HTML link relations:<br />\r\n<a href=\"https://www.w3.org/TR/html4/types.html#h-6.12\">https://www.w3.org/TR/html4/types.html#h-6.12</a><br />\r\nIt has <code>prev</code> rather than the <code>previous</code> of RFC 5005, but mentions that some browsers support <code>previous</code> as an alias.</li>\r\n  <li>HTML5 also defines the HTML link relations:<br />\r\n<a href=\"https://html.spec.whatwg.org/multipage/links.html\">https://html.spec.whatwg.org/multipage/links.html</a><br />\r\nHere <code>previous</code> is a lower-case <em>must</em> for historical reasons.</li>\r\n  <li>IANA manages the Registry of Link Relations:<br />\r\n<a href=\"https://www.iana.org/assignments/link-relations/link-relations.xhtml\">https://www.iana.org/assignments/link-relations/link-relations.xhtml</a><br />\r\nIt references RFC 5005 for the Section 4 relations, but not the Section 3 ones.</li>\r\n  <li>RFC 5005 singles out its own Section 3 (<em>Paged Feeds</em>) as the best-effort, loose, discouraged model.\r\n    <ul>\r\n      <li>Section 3:\r\n        <blockquote>Therefore, clients SHOULD NOT present paged feeds as coherent or complete, or make assumptions to that effect.</blockquote>\r\n      </li>\r\n      <li>Section 4:\r\n        <blockquote>Unlike paged feeds, archived feeds enable clients to do this without losing entries.</blockquote>\r\n      </li>\r\n    </ul>\r\n  </li>\r\n  <li>I’m confused about it in the show, but the RFC is clear that an <em>archived feed</em> has one dynamic <em>subscription document</em>, which points to a chain of immutable <em>archive documents</em>.</li>\r\n  <li>Back in 2002, Aaron Swartz published his joke MIME-header-based <em>RSS 3</em>:<br />\r\n<a href=\"https://www.aaronsw.com/weblog/000574\">https://www.aaronsw.com/weblog/000574</a><br />\r\nThe cultural context at the time and the rivalry between RSS 0.91+, RSS 1.0, RSS 2.0 and Atom deserves a show of its own.</li>\r\n</ul>\r\n',311,0,0,'CC-BY-SA','rss,atom,rfc,interview,feedreader,podcatcher',0,0,1),
(3083,'2020-05-27','Mumbling while on lockdown',3021,'Two Edinburgh-based hosts have a chat from their respective houses','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Two HPR hosts based in Edinburgh got together over Mumble to have a chat during the COVID-19 lockdown.</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\r\n</ul>\r\n<h2 id=\"apology\">Apology</h2>\r\n<p>Dave’s sound was a bit distorted in this recording. Having had recent problems using the Zoom recorder as a microphone, this time the in-built microphone was resorted to, with even worse results it turned out. See the <a href=\"#sound-processing\">Sound processing</a> section below if you want to know more.</p>\r\n<h2 id=\"notes\">Notes</h2>\r\n<p>Some of the topics we discussed</p>\r\n<ul>\r\n<li>Locations for recording. Ambient noises.</li>\r\n<li>WiFi versus ethernet. Dave has a 5-port switch on his dining table (not 8-port).</li>\r\n<li>ADSL routers</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/NSLU2\" title=\"Linksys NSLU2\">Linksys NSLU2</a> <code>\"</code><em>SLUG</em><code>\"</code></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/SheevaPlug\" title=\"SheevaPlug\">SheevaPlug</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/CUPS\" title=\"Common Unix Printing System\">CUPS</a> - printing and scanning with old non-networked printers</li>\r\n<li><em>Legacy computing experiences</em>:\r\n<ul>\r\n<li>Diablo exchangeable disks</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Line_printer\" title=\"Line printer\">Line printers</a>. Fan-fold 132 column paper</li>\r\n<li>Punched card experiences. Card sequence numbers. <a href=\"https://en.wikipedia.org/wiki/IBM_card_sorter\" title=\"Card sorter\">Card sorters</a>.</li>\r\n<li>Checking disks for warped platters</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Magnetic_tape_data_storage\" title=\"Magnetic tape data storage\">Magnetic tapes</a>; recovering from damage.</li>\r\n</ul></li>\r\n<li>8-track tapes</li>\r\n<li><a href=\"https://mocft.co.uk/\" title=\"Museum of Communication, Burntisland, Fife\">Museum of Communication, Fife</a>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Strowger_switch\" title=\"Strowger switch\">Strowger switch</a> electromechanical stepping switch telephone exchange system</li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/NSLU2\">Linksys NSLU2</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/SheevaPlug\">SheevaPlug</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/CUPS\">CUPS</a> - Common Unix Printing System</li>\r\n<li><a href=\"https://mocft.co.uk/\">Museum of Communication, Burntisland, Fife</a></li>\r\n</ul>\r\n<h3 id=\"sound-processing\">Sound processing</h3>\r\n<p><small> The recording was made in multichannel mode in anticipation of problems. The distorted channel was processed by using the <em>Clip Fix</em> effect in Audacity, which didn’t seem to change much except reduce the sound level. It was also necessary to find and remove sounds produced by the <em>push to talk</em> key presses. Removal meant replacing these sounds by silence so the two channels would not get out of step. After this the two channels were merged together and silences truncated. </small></p>\r\n<p><small> Lessons learned: don’t use a built-in microphone if you can help it! </small></p>\r\n</article>\r\n',225,0,1,'CC-BY-SA','COVID-19,lockdown',0,0,1),
(3081,'2020-05-25','Why do formal verification?',1120,'Tuula talks about testing and formal verification of software','<p>In episode <a href=\"https://hackerpublicradio.org/eps.php?id=3057\">3057</a> I talked about formal verification of software and forgot to mention why one would want to do it. This episode hopefully answers to that.</p>\r\n<p>While formal verification is powerful tool, it’s also rather cumbersome and slow to use. In some cases you’re better off with traditional ways of testing.</p>',364,0,0,'CC-BY-SA','testing, verification, mathematics',0,0,1),
(3079,'2020-05-21','Linux Inlaws S01E06 Porn and Trump',4779,'The lads discuss Audacity, KDEnlive, Blender, PwC, The Current War, Better Things, and Pamela Adlon','<p>This is Linux Inlaws, a series on free and open source software, black humour, the revolution and freedom in general (this includes ideas and software) and generally having fun.</p>\r\n<p>Linux Inlaws - a podcast about on topics around free and open source software, any associated contraband, communism / the revolution in general and whatever else fancies your tickle.</p>\r\n<p>Please note that this and other episodes may contain strong language, offensive humor and other certainly not politically correct language - you have been warned (our parents insisted on this disclaimer - happy mum?). Thus the content is not suitable for consumption in the workplace (especially when played back on a speaker in an open plan office or similar environments), any minors under the age of 35 or any pets including fluffy little killer bunnies, your trusty guide dog (unless on speed) and cute T-Rexes or other associated dinosaurs.</p>\r\n<p>Links:</p>\r\n<ul>\r\n<li>Audacity: <a href=\"https://www.audacityteam.org\" class=\"uri\">https://www.audacityteam.org</a></li>\r\n<li>Audacity OSX work-around: <a href=\"https://forum.audacityteam.org/viewtopic.php?t=105586\" class=\"uri\">https://forum.audacityteam.org/viewtopic.php?t=105586</a></li>\r\n<li>KDEnlive: <a href=\"https://kdenlive.org\" class=\"uri\">https://kdenlive.org</a></li>\r\n<li>Blender: <a href=\"https://www.blender.org\" class=\"uri\">https://www.blender.org</a></li>\r\n<li>PwC mishap: <a href=\"https://www.theregister.co.uk/2020/05/06/pwc_azure_squatting\" class=\"uri\">https://www.theregister.co.uk/2020/05/06/pwc_azure_squatting</a></li>\r\n<li>The Current War: <a href=\"https://en.wikipedia.org/wiki/The_Current_War\" class=\"uri\">https://en.wikipedia.org/wiki/The_Current_War</a></li>\r\n<li>Rick and Morty: <a href=\"https://www.adultswim.com/videos/rick-and-morty\" class=\"uri\">https://www.adultswim.com/videos/rick-and-morty</a></li>\r\n<li>Better Things: <a href=\"https://en.wikipedia.org/wiki/Better_Things_(TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Better_Things_(TV_series)</a></li>\r\n<li>Pamela Adlon: <a href=\"https://twitter.com/pamelaadlon\" class=\"uri\">https://twitter.com/pamelaadlon</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','Audacity, KDEnlive, Blender, PwC mishap, The Current War, Better Things, Pamela Adlon',0,0,1),
(3087,'2020-06-02','Phonetic alphabet',114,'The NATO phonetic alphabet recited once.','<p>The NATO phonetic alphabet. Play this a few times until it\'s ingrained in your memory banks. It\'ll change the way you communicate.</p>\r\n<p>\r\n<a href=\"https://en.wikipedia.org/wiki/NATO_phonetic_alphabet\">Wikipedia</a>\r\n</p>',78,43,0,'CC-BY-SA','nato, alphabet, communication',0,0,1),
(3088,'2020-06-03','Matchbox Restoration Part 2',307,'Second episode discussing restoring Matchbox diecast models Tony talks tools and materials needed ','<h3 id=\"matchbox-hpr-episode-2-equipment\">Matchbox HPR Episode 2 – Equipment</h3>\r\n<p>Hello all those in HPR land. This is Tony Hughes coming to you from Blackpool in the UK. I hope you are all keeping well at the current time of restrictions due to the Corona Virus.</p>\r\n<p>In this the second of my recordings talking about restoring of Matchbox and other Die-cast models, I am going to talk of the equipment you will find essential, and some other things that while at the start you could live without, as you get into the hobby you may find extremely useful.</p>\r\n<p>So the first thing you will need is a drill for drilling the posts out on the model, both to aid in dismantling them and if you plan to reassemble with the aid of small screws, to drill the hole in the post for tapping to accommodating the screws. This can be a hand held wired or cordless drill or if you have a workshop with a drill press, all the better as this can be used in several ways during the reassembly of the models. That is on my wish list as I don’t have one at the moment.</p>\r\n<p>Secondly you will need a set of modelling files for removing the burr on axles, to remove these and the plastic wheels of the base of the model to allow for repainting if required.</p>\r\n<p>Wire brushes for cleaning the remains of any paint that didn’t get removed by the paint stripper.</p>\r\n<p>Hemostat Clamp Tweezers or crocodile clips on a rod, for use to hold the model during spray painting</p>\r\n<p>Additionally, although you can start doing restorations without these, the following will become very useful to help save time and achieve better finishes of the completed restoration.</p>\r\n<p>Rotary Tool, the most well known is the Dremel but there are many other manufacturers of similar tools at more economic cost. However beware you do get what you pay for and you may find buying the cheapest you can find a false economy. My cheap Lidl rotary tool which I have had for a few years but barely used, failed after 5 months of use a few weeks ago. The chuck ring thread striped and it will no longer hold bits in the chuck. The rotary tool makes the removal of the axles a very quick job, and cleaning paint stripped castings with a wire rotary brush is a breeze.</p>\r\n<p>Another thing you may find useful is a small spray booth with an extractor fan and filter for removing over-spray from the area you are painting in if doing this indoors, particularly if your workshop is in the house. Although one YouTube modeller I follow sprays his models on the cooker with the cooker extractor fan on to achieve a similar result when painting indoors.</p>\r\n<p>Finally you may wish to put a compressor and spray gun on your wish list if you get hooked as this gives you a far better range of colours you can paint in, as you can mix your own shades. Some in this community are sticklers for trying to get an exact match to the original colour of the model, others like me at the moment are happy to use shop bought spray paint cans.</p>\r\n<p>Small table vice for holding the model. A set of helping hands for the same during painting, particularly when painting fine details.</p>\r\n<p>So that’s the tools, now the consumables:</p>\r\n<ul>\r\n<li>Gloves – Rubber washing up gloves to protect from some of the chemicals used to strip paint.</li>\r\n<li>Latex gloves for using when spray painting as you have more control while wearing these rather than the looser fitting rubber washing up gloves.</li>\r\n<li>Work gloves to use when drilling or using other tools.</li>\r\n<li>Paint face mask to prevent inhaling fumes.</li>\r\n<li>Paint stripper, I use B&amp;Q’s DIAL own brand paint stripper. I also use caustic soda for the same thing, occasionally one will work when the other failed to remove the paint, it depends on the original paint applied to the model.</li>\r\n<li>Model filler for repairing dents in the casting</li>\r\n<li>Wire wool and several grades of wet and dry sanding paper to smooth models after filler has been used.</li>\r\n<li>Super glue, useful for repairs where a quick setting medium is needed.</li>\r\n<li>Cans of spray paint to repaint the model, both primer and the final colour. You may also want a can or two of a clear coat to give that extra protection after painting or giving a gloss finish if the paint was a matt or satin finish.</li>\r\n<li>Not essential at the start but I also use a UV resin glue that cures very quickly after exposure to a UV light torch, this can be added and cured in layers if needed and remains flexible so can be useful for repairs on cables as well as my modelling.</li>\r\n<li>Finally you need your first model to start work on, these can be found in charity shops, online auction sites or maybe in your loft or garage if you have any of your childhood models kicking around needing to be re-loved.</li>\r\n</ul>\r\n<p>Later in the series I’ll talk about other things you may add to the consumables list as you get more into the hobby. So that’s it for this episode. In the next episode I’ll talk you through me dismantling a model for restoration.</p>\r\n<p>This is Tony Hughes for HPR signing off for this episode. Keep safe and I’ll be back soon.</p>\r\n',338,114,0,'CC-BY-SA','Matchbox Cars, Diecast Models, Restoration, Tools and materials.',0,0,1),
(3089,'2020-06-04','For my Entertainment',425,'How I have my file server and media center put together','<h3>Reasoning.</h3>\r\n<p>I have a file server with Slackware running on a Pi4. I wanted to make the<br />movies and TV Shows easily accessible on the TV without using a DVD or Blu ray<br />player.</p>\r\n<p>It would give my wife and I a chance to sit and watch a show without much<br />fuss. The latest show we are on is Sue Thomas F.B. Eye.<br />The main character, Sue has been deaf from about the age of 4 years.<br />She is adept at reading lips and learned to speak despite being deaf.</p>\r\n<p><a title=\"Sue Thomas F.B. Eye\" href=\"https://en.wikipedia.org/wiki/Sue_Thomas:_F.B.Eye\">https://en.wikipedia.org/wiki/Sue_Thomas:_F.B.Eye</a></p>\r\n<h3>Hardware.</h3>\r\n<p>The Pi4 is enclosed in a stripped out power supply that died on me. The fan<br />still worked, so I wired it to the Pi on the 5v line. It runs at half the<br />speed it was designed for, but that makes it run almost silent. With the<br />heatsinks added, stays about 35C when idle and 50C when encoding video.</p>\r\n<h3>Pi Networking.</h3>\r\n<p>I have 2 Pi\'s connected via ethernet. One is on 192.168.2.5 with a gateway of<br />192.168.2.6, with the other on 192.168.2.6 with a gateway of 192.168.2.5.<br />Essentially just a crossover network. The reason for this is running Kodi on Pi4<br />has choppy video, but is better at running video encoding. So I linked it to a<br />Pi3 to run Kodi via a samba share from the Pi4.</p>\r\n<p>Used OSMC for the kodi interface.<br />It was the distribution that was stable on my Pi and booted right to the Kodi<br />interface.</p>\r\n<p><a title=\"OSMC - Open Source Media Center\" href=\"https://osmc.tv/download/\">https://osmc.tv/download/</a></p>\r\n<p><code>lsblk</code> - List block devices<br /><code>dd status=progress if=osmc.img of=/devsdX</code></p>\r\n<h3>Installing Slackware.</h3>\r\n<p>Get sources<br /><a title=\"Get Slackware ARM\" href=\"https://sarpi.fatdog.eu/index.php?p=getslack\">https://sarpi.fatdog.eu/index.php?p=getslack</a></p>\r\n<pre><code>root@mynixbox:/tmp# mkdir /slackarm\r\nroot@mynixbox:/tmp# mount /dev/sdc1 /slackarm\r\nroot@mynixbox:/tmp# cd /slackarm\r\nroot@mynixbox:/slackarm#</code></pre>\r\n<p>To download Slackware ARM 14.2, type the following at the command prompt:</p>\r\n<p><code>root@mynixbox:/slackarm# rsync -Prv --delete<br />ftp.slackware.uk::slackwarearm/slackwarearm-14.2 .</code></p>\r\n<p>[FatDog says ...] DON\'T forget the period \".\" at the end of the rsync command<br />or it won\'t work!</p>\r\n<p>I made a directory called extras, under the /slackarm directory</p>\r\n<p><a title=\"Sarpi sources for Slackware current\" href=\"https://sarpi.fatdog.eu/index.php?p=rpi4getcurrent\">https://sarpi.fatdog.eu/index.php?p=rpi4getcurrent</a></p>\r\n<p><code>upgradepkg --install-new</code> (for each of these packages, after finishing the main Slackware installation.)</p>\r\n<h5>System Packages</h5>\r\n<p><code>kernel_sarpi4-5.4.40-armv7l-1_slackcurrent_13May20_sp1.txz <br />\r\nkernel-modules-sarpi4-5.4.40-armv7l-1_slackcurrent_13May20_sp1.txz <br />\r\nsarpi4-boot-firmware-armv7l-1_slackcurrent_13May20_sp1.txz\r\nsarpi4-hacks-4.0-armv7l-1_slackcurrent_13May20_sp1.txz</code></p>\r\n<h3>Partitioning example</h3>\r\n<p>After mounting the sd card listed by the lsblk command, run <br />cfdisk /dev/mmcblk0 to partition the card.</p>\r\n<pre><code>mmcblk0 179:0 0 59.5G 0 disk <br />|-mmcblk0p2 179:2 0 4G 0 part [SWAP]<br />|-mmcblk0p3 179:3 0 55.3G 0 part /<br />`-mmcblk0p1 179:1 0 150M 0 part <br />root@slack-server:mark # df -h / <br />Filesystem Size Used Avail Use% Mounted on /dev/root 55G 25G 28G 48% /\r\n\r\nmkfs.vfat /dev/mmcblk0p1<br />mkswap /dev/mmcblk0p2</code></pre>\r\n<h3>Samba snippet</h3>\r\n<pre><code>[MediaServer.Movies]<br />path = /mnt/media2/Movies/<br />writable = no<br />browsable = yes<br />read only = no<br />guest ok = no<br />public = no</code></pre>\r\n<h3>fstab snippet (Kodi)</h3>\r\n<pre><code>//192.168.2.5/MediaServer.Movies /mnt/Movies cifs noauto,users,username=mark,password=*********** 0 0</code></pre>\r\n<h3>Script to connect to the wifi network</h3>\r\n<pre><code>mark@osmc:~$ cat /usr/bin/net.sh<br><br />#!/bin/bash<br />connmanctl enable wifi<br />connmanctl connect wifi_HASH_managed_psk</code></pre>\r\n<h3>Systemd service file</h3>\r\n<pre><code>mark@osmc:~$ cat /lib/systemd/system/net.service<br /><br>[Unit]<br />Description=Wifi network auto connect on boot<br />After=http-time.service\r\n<br>[Service]<br />Type=simple<br />Restart=always<br />ExecStart=/bin/bash /usr/bin/net.sh <br />\r\n[Install]<br />WantedBy=multi-user.target</code></pre>\r\n\r\n<h3>Edit:</h3>\r\n<p>Since I sent the show notes, I had problems using the GUI way to set up<br /> a static IP address on the OSMC section. Here is a more concise way to go about\r\nit.</p>\r\n<p><a href=\"https://discourse.osmc.tv/t/solved-setting-ip-static/1439/14\">https://discourse.osmc.tv/t/solved-setting-ip-static/1439/14</a></p>\r\n<p>It seems OSMC uses connman, so in order to create an ethernet static IP:</p>\r\n<ol>\r\n<li>\r\n<p>Create a config file with your editor:</p>\r\n<pre><code>sudo vim /var/lib/connman/osmc.config\r\n</code></pre>\r\n</li>\r\n<li>\r\n<p>Add the following contents:</p>\r\n<pre><code>[global]\r\nName = OSMC\r\nDescription = OSMC static network configuration\r\n[service_osmc]\r\nType = ethernet\r\nIPv4 = 192.168.0.21/255.255.255.0/192.168.0.1\r\nNameservers = 8.8.8.8,8.8.4.4\r\n</code></pre>\r\n<p>Make sure to change the <code>IPv4</code> line to match your own network/netmask/gateway and <code>Nameservers</code> to use the ones you want.</p>\r\n</li>\r\n<li>\r\n<p>Reboot your RPi or restart the connman service:</p>\r\n<pre><code>sudo systemctl restart connman\r\n</code></pre>\r\n</li>\r\n</ol>\r\n<p>If you opt to restart connman, you&rsquo;ll loose the connection.</p>\r\n',318,0,0,'CC-BY-SA','Raspberry Pi, Kodi, OSMC, Networking, Slackware, Sarpi Project',0,0,1),
(3104,'2020-06-25','HPR AudioBook Club 19 - Tincture: An Apocalyptic Proposition',7607,'The HPR Audiobook Club reviews the audiobook Tincture by Matthew D. Jordan','<h2 id=\"in-this-episode-the-hpr_audiobookclub-discusses-tincture-an-apocalyptic-proposition-written-by-matthew-d-jordan\">In this episode, the HPR_AudioBookClub discusses <a href=\"https://scribl.com/books/PFC12/tincture-an-apocalyptic-proposition\">Tincture: An Apocalyptic Proposition</a> written by Matthew D. Jordan</h2>\r\n<hr />\r\n<h2 id=\"non-spoiler-thoughts\">Non-Spoiler Thoughts</h2>\r\n<hr />\r\n<ul>\r\n<li>If you don\'t like knowing what is going on until halfway through the book, then this book is for you.</li>\r\n<li>The book uses a very interesting type of speech that was all kinda dig.</li>\r\n<li>Some of us liked this book so much that we mainlined the <a href=\"https://scribl.com/books/PCA29/tincture-and-the-devil-pulls-six-guns\">sequel</a> immediately.</li>\r\n<li>This feels a lot like \"The Dark Tower\" series by Stephen King, and even references it.</li>\r\n<li>We talk about the use of Hebrew in the character names in the story.</li>\r\n<li>The music for the book is excellent, and matches the story very well.</li>\r\n<li>How do you make alcohol in the apocalypse?</li>\r\n<li>This also feels a lot like the Fallout games.</li>\r\n<li>The return of PLOT BULLETS!!!!</li>\r\n</ul>\r\n<h2 id=\"beverage-reviews\">Beverage Reviews</h2>\r\n<hr />\r\n<p>As usual, the HPR AudioBook Club took some time to review the beverages that each of us were drinking during the episode</p>\r\n<ul>\r\n<li><strong>Thaj:</strong> Made my own tincture of homemade iced tea and lemonade mixed. Tastes good. Thaj still can\'t grow lemons though :(</li>\r\n<li><strong>x1101:</strong> <a href=\"https://cdn.bourbonbanter.com/wp-content/uploads/2013/07/wildturkeyrarebreedbourbon.jpg?090fad\">Wild Turkey Rare Breed</a></li>\r\n<li><strong>pokey:</strong> I have <a href=\"https://www.beeradvocate.com/beer/profile/10272/39258/\">beer</a> this month it\'s pretty good. I Like it, but I don\'t love it. I also bought a few of the credit card sized tools that we talked about on our last episode. In short they are interesting, but mostly not very useful.</li>\r\n<li><strong>FiftyOneFifty:</strong> <a href=\"https://www.shiner.com/beer/prickly-pear\">Shiner Prickly Pear</a>. This unusual beer came as a complete surprise to me because I was frankly expecting a sweet peary. Instead I was confronted by a very dry, only slightly hoppy (20 IBU) beer without much flavor but a lasting aftertaste that is slightly sweet. Those Shiner boys aren\'t messing around, they make beer with cactus. I really did not enjoy the first beer but by the end of the six it is growing on me. Though it would be refreshing on a hot day, I doubt I will be buying it again.</li>\r\n</ul>\r\n<h2 id=\"things-we-talked-about\">Things We talked about</h2>\r\n<hr />\r\n<ul>\r\n<li>We talk about the connections to \"The Dark Tower\"</li>\r\n<li><a href=\"https://i44.tinypic.com/2ptqn4o.jpg\">\"Blue\" Irons (Marcs/Afulan/Rolands guns)</a></li>\r\n<li><a href=\"https://www.gunblast.com/images/SHOT2003_Day1/DSC05601.jpg\">Another big gun</a></li>\r\n<li>Is this time travel, dimension travel, or something entirely different?</li>\r\n<li>The ties to Judeo-Christian mythology is interesting to Thaj.</li>\r\n<li>Is getting the answers about the setting what you really want?</li>\r\n<li>The book doesn\'t exactly get guns right...</li>\r\n</ul>\r\n<h2 id=\"our-next-audiobook\">Our Next Audiobook</h2>\r\n<hr />\r\n<p><a href=\"https://scribl.com/books/P2A75/quarter-share\">Quarter Share</a> by Nathan Lowell</p>\r\n<h2 id=\"the-next-audiobook-club-recording\">The Next Audiobook Club Recording</h2>\r\n<hr />\r\n<p>Right now we are working through a backlog of older episode that have already been recorded. Once that ends we fully anticipate recording new episodes with listener participation.</p>\r\n<h2 id=\"further-recommendations\">Further Recommendations</h2>\r\n<hr />\r\n<ul>\r\n<li><a href=\"https://www.homewetbar.com/images/prod/flask-set-skull84585.jpg\">Skull Flash</a></li>\r\n<li>That IT life</li>\r\n<li>Automating Android</li>\r\n<li><a href=\"https://play.google.com/store/apps/details?id=com.keramidas.TitaniumBackup&amp;hl=en\">Titanium Backup</a></li>\r\n<li>What happened to Lyle\'s cookbook?</li>\r\n<li>CyanogenMod v. CyanogenOS</li>\r\n<li>Thaj predicts the name change to LineageOS</li>\r\n<li>OpenStreetMap</li>\r\n<li>Automated Cars</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Hill%2BKnowlton_Strategies\">H&amp;K</a></li>\r\n</ul>\r\n<h2 id=\"feedback\">Feedback</h2>\r\n<hr />\r\n<p>Thank you very much for listening to this episode of the HPR AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you\'ll consider joining us next time we record a new episode. Please leave a few words in the episode\'s comment section.</p>\r\n<p>As always; remember to visit the HPR contribution page HPR could really use your <a href=\"https://hackerpublicradio.org/help_out.php\">help</a> right now.</p>\r\n<p>Sincerely, The HPR Audiobook Club</p>\r\n<p><em>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</em></p>\r\n<h2 id=\"our-audio\">Our Audio</h2>\r\n<hr />\r\n<p>This episode was processed using <a href=\"https://audacity.sourceforge.net/\">Audacity</a>. We\'ve been making small adjustments to our audio mix each month in order to get the best possible sound. Its been especially challenging getting all of our voices relatively level, because everyone has their own unique setup. Mumble is great for bringing us all together, and for recording, but it\'s not good at making everyone\'s voice the same volume. We\'re pretty happy with the way this month\'s show turned out, so we\'d like to share our editing process and settings with you and our future selves (who, of course, will have forgotten all this by then).</p>\r\n<p>We use the \"Truncate Silence\" effect with it\'s default settings to minimize the silence between people speaking. When used with it\'s default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes a conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying \"uuuuummmm.\" Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too aggressively your audio may sound sped up and choppy.</p>\r\n<p>Next we use the \"Compressor\" effect with the following settings:</p>\r\n<pre><code>Threshold: -30db\r\nNoise Floor: -50db\r\nRatio: 3:1\r\nAttack Time: 0.2sec\r\nDecay Time: 1.0 sec\r\n</code></pre>\r\n<p>\"Make-up Gain for 0db after compressing\" and \"compress based on peaks\" were both left un-checked.</p>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from the file and save them in a separate file for possible use as outtakes after the closing music.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can \"Mix and Render\" all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR server.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the <code>.aup</code> file to .FLAC so that we can paste a copy of the shownotes into the audio file\'s metadata.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being \"crashy\" but if you remember save after every major transform, you will wonder how it ever got that reputation.</p>\r\n',157,53,1,'CC-BY-SA','HPR Audiobook Club, Audiobooks, SciFi, Western',0,0,1),
(3091,'2020-06-08','fuguserv',2628,'Fuguita OpenBSD server - building a new wifi-router / server','<ul>\r\n<li><p>Where you can go to get your copy of the fuguita OS.<br />\r\n<a href=\"https://fuguita.org\" class=\"uri\">https://fuguita.org</a></p></li>\r\n<li><p>Additional book references.<br />\r\n<a href=\"https://nostarch.com/pf3\" class=\"uri\">https://nostarch.com/pf3</a><br />\r\n<a href=\"https://nostarch.com/obenbsd2e\" class=\"uri\">https://nostarch.com/obenbsd2e</a></p></li>\r\n</ul>\r\n<p>The files I cover in the <code>/etc/</code> directory first..</p>\r\n<p><code>dhclient.conf</code></p>\r\n<pre><code>interface &quot;em0&quot; {\r\n#      ignore domain-name-servers;\r\n      reject 192.168.1.1;\r\n}\r\n#supersede domain-name-servers 127.0.0.1;</code></pre>\r\n<p><code>dhcpd.conf</code></p>\r\n<pre><code>option domain-name-servers 192.168.1.1;\r\nsubnet 192.168.1.0 netmask 255.255.255.0 {\r\n        option routers 192.168.1.1;\r\n        range 192.168.1.40 192.168.1.190;\r\n        host myserver {\r\n                fixed-address 192.168.1.2;\r\n                hardware ethernet 00:00:00:00:00:00;\r\n                }\r\n        host darkstar {\r\n                fixed-address 192.168.1.210;\r\n                hardware ethernet a0:d3:7a:42:aa:1d;\r\n                }\r\n        host zenbig   {\r\n                fixed-address  192.168.1.215;\r\n                hardware ethernet 14:d6:4d:aa:6c:c6;\r\n                }\r\n        host zenstar  {\r\n                fixed-address 192.168.1.205;\r\n                hardware ethernet 2c:6e:85:bf:72:91;\r\n                }\r\n        host mini10   {\r\n                fixed-address 192.168.1.200;\r\n                hardware ethernet 88:25:2C:B2:94:8C;\r\n                }\r\n        host nexus9   {\r\n                fixed-address 192.168.1.195;\r\n                hardware ethernet 44:91:60:9e:d2:73;\r\n                }\r\n        host diningpi {\r\n                fixed-address 192.168.1.197;\r\n                hardware ethernet b8:27:eb:09:bb:1e;\r\n                }\r\n        host think330 {\r\n                fixed-address 192.168.1.193;\r\n                hardware ethernet 50:5B:C2:E5:CA:F5;\r\n                }\r\n        host largedongle1 {\r\n                fixed-address 192.168.1.211;\r\n                hardware ethernet 00:C0:CA:82:EC:30;\r\n                }\r\n        host largedongle2 {\r\n                fixed-address 192.168.1.212;\r\n                hardware ethernet 00:C0:CA:82:E6:29;\r\n                }</code></pre>\r\n<p><code>dhcpd.interfaces</code></p>\r\n<pre><code>athn0</code></pre>\r\n<p><code>hostname.athn0</code></p>\r\n<pre><code>inet            192.168.1.5    255.255.255.0    192.168.1.255\r\nmedia           autoselect\r\nmediaopt        hostap\r\nchan            4\r\nwpa\r\nnwid            fuguserv\r\nwpakey          1234567890ABCD#\r\nup</code></pre>\r\n<p><code>hostname.bridge0</code></p>\r\n<pre><code>add vether0\r\nadd em0\r\nadd athn0\r\nblocknonip vether0\r\nblocknonip em0\r\nblocknonip athn0\r\nup</code></pre>\r\n<p><code>hostname.em0</code></p>\r\n<pre><code>dhcp\r\ninet6 autoconf</code></pre>\r\n<p><code>hostname.vether0</code></p>\r\n<pre><code>inet 192.168.1.1 255.255.255.0 192.168.1.255</code></pre>\r\n<p><code>pf.conf</code></p>\r\n<pre><code>nt_if=&quot;{ vether0 em0 athn0 }&quot;\r\nbroken=&quot;224.0.0.22 127.0.0.0/8 192.168.0.0/16 172.16.0.0/12\r\n        10.0.0.0/8 169.254.0.0/16 192.0.2.0/24\r\n        198.51.100.0/24, 203.0.113.0/24,\r\n        169.254.0.0/16 0.0.0.0/8 240.0.0.0/4 255.255.255.255/32&quot;\r\ntable &lt;bruteforce&gt; persist\r\nset block-policy drop\r\nset loginterface egress\r\nset skip on lo0\r\nmatch in all scrub (no-df random-id max-mss 1440)\r\nmatch out on egress inet from !(egress:network) to any nat-to (egress:0)\r\nantispoof quick for (egress)\r\nblock quick from &lt;bruteforce&gt;\r\nblock in quick on egress from { $broken no-route urpf-failed } to any\r\nblock in quick inet6 all\r\nblock return out quick inet6 all\r\n#block return out quick log on egress proto { tcp udp } from any to any port 53\r\nblock return out quick log on egress from any to { no-route $broken }\r\nblock in all\r\npass out quick inet keep state\r\npass in on $int_if inet\r\npass in on egress inet proto tcp from any to (egress) port 22 keep state (max-src-conn 40, max-src-conn-rate 40/172800 ,overload &lt;bruteforce&gt; flush global)\r\npass in quick on $int_if proto udp from any to ! 192.168.1.1 port 123 rdr-to 192.168.1.1</code></pre>\r\n<p><code>sysctl.conf</code></p>\r\n<pre><code>net.inet.ip.forwarding=1\r\nnet.inet.ip.redirect=0\r\nkern.bufcachepercent=50\r\nnet.inet.ip.ifq.maxlen=1024\r\nnet.inet.tcp.mssdflt=1440\r\nmachdep.allowaperture=2 # See xf86(4)\r\nmachdep.lidaction=0\r\nnet.inet6.ip6.forwarding=0\r\nnet.inet6.ip6.mforwarding=0\r\nhw.smt=1</code></pre>\r\n<p><code>rc.conf.local</code></p>\r\n<pre><code>check_quotas=NO\r\ndhcpd_flags=&quot;vether0&quot;\r\nntpd_flags=&quot;&quot;\r\n#pkg_scripts=dnscrypt_proxy -config /etc/dnscrypt-proxy.toml\r\nsndiod_flags=NO\r\nunbound_flags=&quot;&quot;</code></pre>\r\n<p><code>/var/unbound/etc/unbound.conf</code></p>\r\n<pre><code># $OpenBSD: unbound.conf,v 1.14 2018/12/16 20:41:30 tim Exp $\r\nserver:\r\n    username: _unbound\r\n    directory: /var/unbound\r\n    chroot: /var/unbound\r\n\r\n    interface: 192.168.1.1\r\n    interface: 127.0.0.1\r\n    do-ip6: no\r\n\r\n    access-control: 127.0.0.0/8 allow\r\n    access-control: 192.168.1.0/24 allow\r\n    hide-identity: yes\r\n    hide-version: yes\r\n    do-not-query-localhost: no\r\n\r\n    tcp-upstream: yes\r\n\r\n    private-address: 10.0.0.0/8\r\n    private-address: 172.16.0.0/12\r\n    private-address: 192.168.0.0/16\r\n\r\nremote-control:\r\n        control-enable: yes\r\n        control-use-cert: no\r\n        control-interface: /var/run/unbound.sock\r\n\r\nforward-zone:\r\n    name: &quot;.&quot;\r\n    forward-addr: 127.0.0.1</code></pre>\r\n',377,0,0,'CC-BY-SA','FuguIta, OpenBSD, Wifi-Routers, Servers, Portable, Memory_resident',0,0,1),
(3092,'2020-06-09','Pens, pencils, paper and ink - 2',1256,'Looking at more writing equipment','<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the second in a short series about pens, pencils, writing paper and ink. In this episode we will look at three more fountain pens (two lower-priced and one around £50), a mechanical pencil and some paper.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr3092/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Pen brands:\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Kaweco\">Kaweco</a> Wikipedia page</li>\r\n<li><a href=\"https://www.mrpen.co.uk/contents/en-uk/d184.html\">Italix</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Uni-ball\">uni-ball</a> Wikipedia page (maker of Kuru Toga)</li>\r\n</ul></li>\r\n<li>Reviews:\r\n<ul>\r\n<li>The Well Appointed Desk: <a href=\"https://www.wellappointeddesk.com/2020/02/pen-review-platinum-prefounte-fountain-pen/\">Platinum Prefounte</a></li>\r\n</ul></li>\r\n<li>Calligraphy Skills\r\n<ul>\r\n<li><a href=\"https://www.calligraphy-skills.com/italic-calligraphy.html\">Italic calligraphy</a></li>\r\n<li><a href=\"https://www.calligraphy-skills.com/italic-lettering.html\">Italic lettering</a></li>\r\n</ul></li>\r\n<li>Paper brands:\r\n<ul>\r\n<li><a href=\"https://www.bloc-rhodia.com/index-en.html\">Rhodia</a></li>\r\n</ul></li>\r\n<li>HPR links:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1941\">hpr1941 :: What’s in my case</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2061\">hpr2061 :: Handwriting</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2273\">hpr2273 :: Fountain Pens</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3063\">hpr3063 :: Pens, pencils, paper and ink - 1</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,112,1,'CC-BY-SA','fountain pen,mechanical pencil,paper',0,0,1),
(3093,'2020-06-10','Response to Linux Inlaws S01E06 (hpr 3079) on NeXT',430,'Response to Linux Inlaws S01E06 (hpr 3079) regarding NeXT, NeXTSTEP, and what would become Mac OS X.','<p>Some clarification on NeXT as I ramble on about all things NeXT, what would become \"Mac OS X\" (now \"macOS\"), and a harbinger of what was to come.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/NeXTSTEP\" class=\"uri\">https://en.wikipedia.org/wiki/NeXTSTEP</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/NeXT_Computer#Legacy\" class=\"uri\">https://en.wikipedia.org/wiki/NeXT_Computer#Legacy</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/OpenStep\" class=\"uri\">https://en.wikipedia.org/wiki/OpenStep</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Rhapsody_(operating_system)\" class=\"uri\">https://en.wikipedia.org/wiki/Rhapsody_(operating_system)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Darwin_(operating_system)\" class=\"uri\">https://en.wikipedia.org/wiki/Darwin_(operating_system)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/A/UX\" class=\"uri\">https://en.wikipedia.org/wiki/A/UX</a></li>\r\n</ul>',152,0,0,'CC-BY-SA','NeXT, NeXTSTEP, OPENSTEP, Rhapsody, Darwin, MacOSX, OSX, macOS, AUX',0,0,1),
(3098,'2020-06-17','Matchbox Restoration Part 3',191,'In this the 3rd in the series Tony discusses dismantling the castings of the MK10 Jaguar','<h2 id=\"hpr-matchbox-show-episode-3\">HPR Matchbox show Episode 3</h2>\r\n<p>Good day to all in HPR land, this is Tony Hughes coming to you again from Blackpool in the UK. To recap this is the 3rd in a series of shows about my hobby of restoring Matchbox and other Die-cast models. In the first 2 shows I introduced the concept and discussed the tools and other equipment you would need to start this hobby.</p>\r\n<p>In this episode I have decided to return to where it all started with the Matchbox No28 the Jaguar Mk10. Please refer to the show notes for the pictures of the process as we move along. You can see in the first picture the 4 castings used in this process.</p>\r\n<p>Picture 000:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3098/img_000.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3098/img_000_thumbnail.jpg\" alt=\"Picture 000\" /></a></p>\r\n<p>This is a lovely little casting and is a nice introduction to the techniques used in the process. Also I have several of these that I can strip down to their components and that should give us enough quality parts to reassemble at least one good example, hopefully one or two more.</p>\r\n<p>The next picture shows you the base of the model and that there is a mushroomed post that needs to be drilled out at the rear of the model, the front of the base is retained by a tab, which once the post is removed and the base released, this can be slid forward to free the tab.</p>\r\n<p>Picture 001:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3098/img_001.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3098/img_001_thumbnail.jpg\" alt=\"Picture 001\" /></a></p>\r\n<p>I drilled out this post. The post is drilled out with a 4mm drill bit, and as you can see in the next picture on this particular casting I was a little over zealous and damaged the base a little, although as it is the base it’s not a major issue.</p>\r\n<p>Picture 003:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3098/img_003.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3098/img_003_thumbnail.jpg\" alt=\"Picture 003\" /></a></p>\r\n<p>I then released the base by prying it off the remainder of the post with a small flat bladed screwdriver to lever it of the body. This now allowed the removal of the inner plastic forming the seating and holding a small plastic suspension piece. In the next picture you can see the casting without any internals but with the plastic window unit still held in place with another shallow mushroom post.</p>\r\n<p>Picture 005:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3098/img_005.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3098/img_005_thumbnail.jpg\" alt=\"Picture 005\" /></a></p>\r\n<p>Being very careful not to be too aggressive drilling this mushroom holding the windscreen unit, it is removed, again with a 4mm drill bit, so that a little pressure from a flat blade slid between the roof and the glassing unit will allow it to pop out without it breaking. It usually takes several attempts of a little drilling, trying with the flat blade, then if not coming free, a little more drilling until it pops off.</p>\r\n<p>Picture 006:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3098/img_006.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3098/img_006_thumbnail.jpg\" alt=\"Picture 006\" /></a></p>\r\n<p>Picture 006x:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3098/img_006x.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3098/img_006x_thumbnail.jpg\" alt=\"Picture 006x\" /></a></p>\r\n<p>This process was repeated with the other 3 castings and the result is shown in the next picture</p>\r\n<p>Picture 008:<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3098/img_008.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3098/img_008_thumbnail.jpg\" alt=\"Picture 008\" /></a></p>\r\n<p>As you can see the casting on the upper left of the image still has the bonnet (Hood) attached, this would not come off without me risking damaging it, so I was hoping that once the paint is removed that this will help it to come free. You will have to wait for the next instalment to find out what happened next. I’ve got to keep you wanting some more of this rambling tale.</p>\r\n<p>So until next time this is Tony Hughes saying goodbye to all those in HPR land. Keep safe until the next instalment.</p>\r\n',338,114,0,'CC-BY-SA','Matchbox Cars, Diecast Models, Restoration, dismantling the model',0,0,1),
(3094,'2020-06-11','Holy crud! I have a kinesis advantage 2 keyboard!',275,'Sigflup does a review of the Kinesis Advantage 2 keyboard','<h3>Kinesis Advantage 2 Keyboard</h3>\r\n\r\n<p><img src=\"https://theadesilva.com/keyboard.jpg\" alt=\"Kinesis Advantage 2 Keyboard\"/></p>',115,0,0,'CC-BY-SA','keyboards',0,0,1),
(3097,'2020-06-16','Linux Inlaws S01E07 The Big Blue Button',3895,'The lads talk to Fred Dixon, product manager for BigBlueButton.','<p>In this episode our two chaps welcome Fred Dixon, product manager for BigBlueButton, on the show to talk about the project, its history and if it will finally run on Fedora and CentOS.</p>\r\n<p>Surrounding musings include how to hack the GDM login screen, why Martin is <i>not</i> behind the recent Easyjet hack and poxes as well as anti-poxes.</p>\r\n<h2>Shownotes:</h2>\r\n<ul>\r\n<li>BigBlueButton: <a href=\"https://bigbluebutton.org\" target=_blank>https://bigbluebutton.org</a></li>\r\n<li><a href=\"https://www.theregister.co.uk/2020/05/19/easyjet_hack_9million_2000_credit_cards\" target=_blank>The Easyjet hack</a></li>\r\n<li>How to hack the GDM login screen in Focal Fossa: <a href=\"https://github.com/PRATAP-KUMAR/focal_gdm3_login_theme_complete_hack\" target=_blank>https://github.com/PRATAP-KUMAR/focal_gdm3_login_theme_complete_hack</a></li>\r\n<li>The Ubuntu logo for the GDM3 login screen for Focal Fossa and previous Ubuntu versions can be found at: /usr/share/plymouth/ubuntu-logo.png. Simply truncate this to zero bytes and the logo will be gone from the login screen</li>\r\n<li>Virgy\'s open source website: <a href=\"https://www.websiteplanet.com/blog/what-is-open-source-software\" target=_blank>https://www.websiteplanet.com/blog/what-is-open-source-software</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','BigBlueButton, GDM, Focal Fossa, Ubuntu',0,0,1);
INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hostid`, `series`, `explicit`, `license`, `tags`, `version`, `downloads`, `valid`) VALUES (3371,'2021-07-05','HPR Community News for June 2021',3988,'Dave and Ken talk about shows released and comments posted in June 2021','<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=3347\" target=\"_blank\">3347</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-06-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3347\" target=\"_blank\">Ethical Analysis of Renewable Energy and Conservation</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=3348\" target=\"_blank\">3348</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-06-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3348\" target=\"_blank\">Feedback on the Article by hedorah about HPR</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=3349\" target=\"_blank\">3349</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-06-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3349\" target=\"_blank\">Linux Inlaws S01E31: Interview with Paul Ramsey FOSS aficionado and entrepreneur</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3350\" target=\"_blank\">3350</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-06-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3350\" target=\"_blank\">Blending Layers</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=3351\" target=\"_blank\">3351</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-06-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3351\" target=\"_blank\">HPR Community News for May 2021</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=3352\" target=\"_blank\">3352</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-06-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3352\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 4</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3353\" target=\"_blank\">3353</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-06-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3353\" target=\"_blank\">My terminal journey, part 01.</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=3354\" target=\"_blank\">3354</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-06-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3354\" target=\"_blank\">My Devices</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=3355\" target=\"_blank\">3355</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-06-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3355\" target=\"_blank\">Tiki Hell</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=3356\" target=\"_blank\">3356</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-06-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3356\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 5</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3357\" target=\"_blank\">3357</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-06-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3357\" target=\"_blank\">My terminal journey, part 02.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3358\" target=\"_blank\">3358</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-06-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3358\" target=\"_blank\">BlastEm! A wicked awesome Sega Genesis/Megadrive emulator</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0115.html\" target=\"_blank\">sigflup</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3359\" target=\"_blank\">3359</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-06-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3359\" target=\"_blank\">Linux Inlaws S01E32: Politicians and artificial intelligence part 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3360\" target=\"_blank\">3360</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-06-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3360\" target=\"_blank\">Android Malware Alert</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=3361\" target=\"_blank\">3361</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-06-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3361\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 6</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3362\" target=\"_blank\">3362</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-06-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3362\" target=\"_blank\">Spam Bot Honey Pot: Eating your own dog food</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=3363\" target=\"_blank\">3363</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-06-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3363\" target=\"_blank\">Electronics podcasts I listen to</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=3364\" target=\"_blank\">3364</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-06-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3364\" target=\"_blank\">Part One - all the covid crap</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0315.html\" target=\"_blank\">Clinton Roy</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3365\" target=\"_blank\">3365</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-06-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3365\" target=\"_blank\">Diablo 2 Portable and Modding</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=3366\" target=\"_blank\">3366</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-06-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3366\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 7</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3367\" target=\"_blank\">3367</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-06-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3367\" target=\"_blank\">Making books with linux - part 1</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=3368\" target=\"_blank\">3368</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-06-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3368\" target=\"_blank\">Infosec Podcasts Part 4 - Social Engineering Podcasts</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 23 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 7 comments on\n5 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3263#comments\" target=\"_blank\">hpr3263</a></strong>\n(2021-02-03) \"<em>My Beginnings in Tech</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0390.html\" target=\"_blank\">o9l</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3263#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2021-06-03:\n\"Welcome to HPR\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3329#comments\" target=\"_blank\">hpr3329</a></strong>\n(2021-05-06) \"<em>Linux Inlaws S01E29: The (one and only) Linux Kernel Contributor Panel</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3329#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-06-05:\n\"Who ?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3342#comments\" target=\"_blank\">hpr3342</a></strong>\n(2021-05-25) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3342#2\" target=\"_blank\">Comment 2</a>:\ncrvs on 2021-06-24:\n\"thank you for the reminder\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3343#comments\" target=\"_blank\">hpr3343</a></strong>\n(2021-05-26) \"<em>The Forth programming language</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3343#1\" target=\"_blank\">Comment 1</a>:\ncagey on 2021-06-02:\n\"My experience with Forth (at SAO)\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3343#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2021-06-06:\n\"What does SAO stand for?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3345#comments\" target=\"_blank\">hpr3345</a></strong>\n(2021-05-28) \"<em>Audio for Podcasting: Episode 2 - Equalization</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3345#1\" target=\"_blank\">Comment 1</a>:\narcher72 on 2021-06-03:\n\"Another great episode.\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3345#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2021-06-08:\n\"Thank you.\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 16 comments on 7 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3348#comments\" target=\"_blank\">hpr3348</a></strong>\n(2021-06-02) \"<em>Feedback on the Article by hedorah about HPR</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=3348#1\" target=\"_blank\">Comment 1</a>:\nHawkinsTheWizard on 2021-06-02:\n\"hpr3348 feedback\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3348#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2021-06-02:\n\"I was trying to remember \"This American Life\"\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3352#comments\" target=\"_blank\">hpr3352</a></strong>\n(2021-06-08) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 4</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3352#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3353#comments\" target=\"_blank\">hpr3353</a></strong>\n(2021-06-09) \"<em>My terminal journey, part 01.</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=3353#1\" target=\"_blank\">Comment 1</a>:\nFXB on 2021-06-09:\n\"Good listening.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3353#2\" target=\"_blank\">Comment 2</a>:\njezra on 2021-06-09:\n\"Hey, that\'s how I learned!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3353#3\" target=\"_blank\">Comment 3</a>:\nTrey on 2021-06-11:\n\"Well done!  Keep up the great work!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3353#4\" target=\"_blank\">Comment 4</a>:\narcher72 on 2021-06-11:\n\"Good to hear this one\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3353#5\" target=\"_blank\">Comment 5</a>:\nSome Guy On The Internet on 2021-06-16:\n\"Giving Thanks.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3353#6\" target=\"_blank\">Comment 6</a>:\nsesamemucho on 2021-06-19:\n\"Nice\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3353#7\" target=\"_blank\">Comment 7</a>:\nfrank on 2021-06-30:\n\"Comments and feedback on your show (part 1)\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3353#8\" target=\"_blank\">Comment 8</a>:\nfrank on 2021-06-30:\n\"Comments and feedback on your show (part 2)\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3356#comments\" target=\"_blank\">hpr3356</a></strong>\n(2021-06-14) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 5</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3356#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3356#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-06-14:\n\"Nice show, but too long\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3357#comments\" target=\"_blank\">hpr3357</a></strong>\n(2021-06-15) \"<em>My terminal journey, part 02.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3357#1\" target=\"_blank\">Comment 1</a>:\nbjb on 2021-06-29:\n\"hpr3357 :: My terminal journey, part 02. - feedback/comment\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3361#comments\" target=\"_blank\">hpr3361</a></strong>\n(2021-06-21) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 6</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3361#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3366#comments\" target=\"_blank\">hpr3366</a></strong>\n(2021-06-28) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 7</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3366#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</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/2021-June/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-June/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=\"condolences\">Condolences</h3>\n<p>Our deepest condolences to Randy Noseworthy on the loss of his wife.</p>\n<h3 id=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>This month 100 additional shows in the range 1-870 have been uploaded.</p>\n<p>Since we don\'t want to upload shows without summaries or tags the <em>old shows</em> and <em>tag and summary</em> projects are now tied together. So we will be all the more welcoming of tag and summary updates submitted as described on the <a href=\"https://hackerpublicradio.org/report_missing_tags.php\">summary page</a>.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 82 shows which were without them.</p>\n<p>There are now 295 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3391,'2021-08-02','HPR Community News for July 2021',4611,'HPR Volunteers talk about shows released and comments posted in July 2021','<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=3369\" target=\"_blank\">3369</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-07-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3369\" target=\"_blank\">Linux Inlaws S01E33: The Return of the Rust</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3370\" target=\"_blank\">3370</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-07-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3370\" target=\"_blank\">More Free Images?</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=3371\" target=\"_blank\">3371</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-07-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3371\" target=\"_blank\">HPR Community News for June 2021</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=3372\" target=\"_blank\">3372</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-07-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3372\" target=\"_blank\">HPR 2020 - 2021 New Years Eve Show Episode 8</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3373\" target=\"_blank\">3373</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-07-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3373\" target=\"_blank\">HPR RPG Club reviews Starfinder</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=3374\" target=\"_blank\">3374</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-07-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3374\" target=\"_blank\">Why I love the MacBook Mid 2010</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0297.html\" target=\"_blank\">swift110</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3375\" target=\"_blank\">3375</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-07-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3375\" target=\"_blank\">Car ODB2 Fun and Fail</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=3376\" target=\"_blank\">3376</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-07-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3376\" target=\"_blank\">Making books with Linux - part 2</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=3377\" target=\"_blank\">3377</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-07-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3377\" target=\"_blank\">Chromebook support and more</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=3378\" target=\"_blank\">3378</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-07-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3378\" target=\"_blank\">A bit of my experience with Starlink internet service</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=3379\" target=\"_blank\">3379</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-07-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3379\" target=\"_blank\">Linux Inlaws S01E34: The one with the intelligence</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3380\" target=\"_blank\">3380</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-07-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3380\" target=\"_blank\">Building a Better Goodreads with ActivityPub</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=3381\" target=\"_blank\">3381</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-07-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3381\" target=\"_blank\">Learning to skate</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=3382\" target=\"_blank\">3382</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-07-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3382\" target=\"_blank\">How I fixed a fault on my car for free thanks to YouTube</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=3383\" target=\"_blank\">3383</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-07-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3383\" target=\"_blank\">My gEeeky Experiment - Part 1</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=3384\" target=\"_blank\">3384</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-07-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3384\" target=\"_blank\">Page Numbers in EPUB eBook Files</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3385\" target=\"_blank\">3385</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-07-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3385\" target=\"_blank\">DIY Cat feeder!</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=3386\" target=\"_blank\">3386</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-07-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3386\" target=\"_blank\">What\'s for dinner?</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=3387\" target=\"_blank\">3387</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-07-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3387\" target=\"_blank\">Infosec Podcasts Part 5  Grab bag</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=3388\" target=\"_blank\">3388</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-07-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3388\" target=\"_blank\">Linux Inlaws S01E35: The Free Software Foundation Europe</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3389\" target=\"_blank\">3389</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-07-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3389\" target=\"_blank\">Tales of a Tagger</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=3390\" target=\"_blank\">3390</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-07-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3390\" target=\"_blank\">Intro to DOS Series</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 18 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=3357#comments\" target=\"_blank\">hpr3357</a></strong>\n(2021-06-15) \"<em>My terminal journey, part 02.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" target=\"_blank\">Some Guy On The Internet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3357#2\" target=\"_blank\">Comment 2</a>:\nSome Guy On The Internet on 2021-07-08:\n\"apt-mark hold\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3367#comments\" target=\"_blank\">hpr3367</a></strong>\n(2021-06-29) \"<em>Making books with linux - part 1</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3367#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2021-07-11:\n\"Page numbers\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3367#2\" target=\"_blank\">Comment 2</a>:\ndangerseeker on 2021-07-16:\n\"Fonts and LaTeX\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3368#comments\" target=\"_blank\">hpr3368</a></strong>\n(2021-06-30) \"<em>Infosec Podcasts Part 4 - Social Engineering Podcasts</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3368#1\" target=\"_blank\">Comment 1</a>:\nPorkchop on 2021-07-01:\n\"recommendation\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3368#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2021-07-05:\n\"Thanks for the feedback, Porkchop.\"</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=3369#comments\" target=\"_blank\">hpr3369</a></strong>\n(2021-07-01) \"<em>Linux Inlaws S01E33: The Return of the Rust</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3369#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-07-01:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3371#comments\" target=\"_blank\">hpr3371</a></strong>\n(2021-07-05) \"<em>HPR Community News for June 2021</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=3371#1\" target=\"_blank\">Comment 1</a>:\nfrank on 2021-07-05:\n\"A comment on your comment about my comment\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3371#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2021-07-05:\n\"Congrats on joining the Ham community!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3371#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2021-07-06:\n\"Errors in comments\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3371#4\" target=\"_blank\">Comment 4</a>:\nb-yeezi on 2021-07-06:\n\"Ranger previously on HPR\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3372#comments\" target=\"_blank\">hpr3372</a></strong>\n(2021-07-06) \"<em>HPR 2020 - 2021 New Years Eve Show Episode 8</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3372#1\" target=\"_blank\">Comment 1</a>:\nHonkeymagoo on 2021-05-11:\n\"Thanking\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3377#comments\" target=\"_blank\">hpr3377</a></strong>\n(2021-07-13) \"<em>Chromebook support and more</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=3377#1\" target=\"_blank\">Comment 1</a>:\nClinton Roy on 2021-07-13:\n\"Well,\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3381#comments\" target=\"_blank\">hpr3381</a></strong>\n(2021-07-19) \"<em>Learning to skate</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=3381#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2021-07-21:\n\"Consultant available\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3381#2\" target=\"_blank\">Comment 2</a>:\nJon Kulp on 2021-07-21:\n\"Skate Shoes\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3383#comments\" target=\"_blank\">hpr3383</a></strong>\n(2021-07-21) \"<em>My gEeeky Experiment - Part 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3383#1\" target=\"_blank\">Comment 1</a>:\nZen_floater2 on 2021-07-22:\n\"Why I love OpenBSD\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3388#comments\" target=\"_blank\">hpr3388</a></strong>\n(2021-07-28) \"<em>Linux Inlaws S01E35: The Free Software Foundation Europe</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3388#1\" target=\"_blank\">Comment 1</a>:\nBrian-in-ohio on 2021-07-30:\n\"free speech\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3390#comments\" target=\"_blank\">hpr3390</a></strong>\n(2021-07-30) \"<em>Intro to DOS Series</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=3390#1\" target=\"_blank\">Comment 1</a>:\nBrian-in-ohio on 2021-07-30:\n\"great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3390#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-07-30:\n\"You are most welcome\"</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/2021-July/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-July/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\">Older HPR shows on archive.org</h3>\n<p>This month 35 additional shows in the range 1-870 have been uploaded.</p>\n<p>Since we don\'t want to upload shows without summaries or tags the <em>old shows</em> and <em>tag and summary</em> projects are now tied together. So we will be all the more welcoming of tag and summary updates submitted as described on the <a href=\"https://hackerpublicradio.org/report_missing_tags.php\">summary page</a>.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0293.html\">Rho`n</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 71 shows which were without them.</p>\n<p>There are currently 222 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3114,'2020-07-09','Using the Akaso EK7000 Pro',666,'Some tips on using the camera based on my limited experience on one trip.','<p>I found this camera to be useful, but it has a few quirks. Here is what I learned about using it. I took it on a cruise in the Caribbean Sea in February 2020, just before the coronavirus hit everything.</p>\r\n<ul>\r\n<li><a href=\"https://www.palain.com/photography/using-the-akaso-ek7000-pro/\" class=\"uri\">https://www.palain.com/photography/using-the-akaso-ek7000-pro/</a></li>\r\n</ul>\r\n',198,0,0,'CC-BY-SA','Camera, Waterproof Camera, Action camera',0,0,1),
(3125,'2020-07-24','GIMP: The Canvas',785,'The Canvas is the first key concept in learning Gimp','<p>The Canvas is the main stage on which all of the action takes place, and it controls some aspects of the final image. When you get ready to export, you only export what is on the canvas.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/XCF_(file_format)\" class=\"uri\">https://en.wikipedia.org/wiki/XCF_(file_format)</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/the-canvas/\" class=\"uri\">https://www.ahuka.com/gimp/the-canvas/</a></li>\r\n</ul>',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, canvas, layer',0,0,1),
(3110,'2020-07-03','Finding an Android phone to run LineageOS',2277,'Join Ken on this 6 year long journey of success but also failure','<h1 id=\"finding-an-android-phone-to-run-lineageos\">Finding an Android phone to run LineageOS</h1>\r\n<p>Affordable phone that support school apps, and allow firewall.</p>\r\n<h2 id=\"tldr\">TL;DR</h2>\r\n<p>Don\'t, unless you are willing to loose the money you are paying.</p>\r\n<h2 id=\"requirements\">Requirements</h2>\r\n<ul>\r\n<li>Supported for 3-5 years.</li>\r\n<li>Apps = Android = LineageOS</li>\r\n<li>Firewall = AFWall+ = Unlocked + Root</li>\r\n<li>Affordable</li>\r\n</ul>\r\n<h3 id=\"support\">Support</h3>\r\n<p>Getting a brand new phone means that Developers have not had time to release code.</p>\r\n<p>Older phones are no longer available for purchase, and actually become more expensive.</p>\r\n<p>Too old a version and apps are no longer supported.</p>\r\n<h2 id=\"finding-a-phone-that-can-be-unlocked\">Finding a phone that can be unlocked</h2>\r\n<p>I use a site called <a href=\"https://tweakers.net/smartphones/vergelijken/\">Tweakers.net</a> which allows you to do parameter search.</p>\r\n<p>Set the maximum price you are willing to pay.</p>\r\n<p>The current version of Android is 10 so select only those. You want your phone to be supported for as long as possible.</p>\r\n<p>Make any other selections that you think are critical, like memory, processor etc but be prepared to adjust this later.</p>\r\n<p>In my case I selected a minimum of 4G Ram and 64G Storage the first time.</p>\r\n<p>Sort by price low to high, and loop through, finding what support there is for <a href=\"https://twrp.me/Devices/\">TWRP</a>. That will tell you how open the phone is. If the Manufacturer support (the spirit of) unlocking, then remove them from the list.</p>\r\n<ul>\r\n<li>HTC support unlocking but not don\'t give code to the developers so it\'s useless.</li>\r\n<li>Motorola support was good but since the take over by Lenovo they have stopped supporting unlocking.</li>\r\n<li>Google phones are unlocked and are ideal for developers but are too expensive.</li>\r\n<li>Xiaomi requires you to wait until the EU 14 day no questions asked warranty has expired.</li>\r\n<li>Fairphone too expensive.</li>\r\n<li>PinePhone may be an option but people report the current version being too slow.</li>\r\n</ul>\r\n<p>After finding a phone that can be unlocked and rooted, then check to see if there is an <em>official</em> version for <a href=\"https://wiki.lineageos.org/devices/\">LineageOS</a></p>\r\n<p>If no phone meets all the requirements then try the next one.</p>\r\n<p>It\'s very likely you will not find a phone. You are then faced with the choice of adjusting your parameters, for example picking a more expensive model, but at the end of the day be prepared that you may not find a phone.</p>\r\n<p>If you do find a phone, it\'s very likely that it may be a different version than the one supported. I have had to return several phones that I had unlocked and just hoped that the supplier would take them back and refund me.</p>\r\n<p>Even on supported phones, especially newer ones, it\'s quite often that a major piece of functionality will not work. I have had issues with no GPS on one phone, and bluetooth/wifi not working on another until files were manually edited on each reboot.</p>\r\n<p>Do not do this if you want a stress free life, and also if you are not willing to accept the waste of all the money, and time involved.</p>\r\n<h3 id=\"links\">Links</h3>\r\n<ul>\r\n<li><a href=\"https://tweakers.net/smartphones/vergelijken/\">Tweakers.net</a></li>\r\n<li><a href=\"https://twrp.me/Devices/\">TWRP</a></li>\r\n<li><a href=\"https://wiki.lineageos.org/devices/\">LineageOS</a></li>\r\n<li><a href=\"https://github.com/Genymobile/scrcpy\">scrcpy</a></li>\r\n<li><a href=\"https://tektab.com/2015/10/31/android-bootloaderfastboot-mode-and-recovery-mode-explained/\">Android bootloader/fastboot mode and recovery mode explained/Android boot process</a> October 31, 2015 Saad Faruque</li>\r\n<li><a href=\"https://www.pine64.org/pinephone/\">pinephone</a></li>\r\n</ul>\r\n',30,0,1,'CC-BY-SA','TWRP,Tweakers,LineageOS,scrcpy,tektab.com,bootloader,fastboot,Sony Xperia XA2,pinephone',0,0,1),
(3102,'2020-06-23','RFC 5005 Part 2 – Webcomics, subscribers and feed readers',902,'fluffy, Jamey and I go on for another ten minutes about how webcomic artists feel about feeds','<p>An interview with two passionate RFC 5005 fans on how to handle big Atom feeds</p>\r\n\r\n<p>This conversation took almost an hour, so I split it into two shows:</p>\r\n\r\n<ul>\r\n  <li>Part 1 talks mostly about the RFC itself, what it means and why. <a href=\"https://hackerpublicradio.org/eps.php?id=3082\">HPR 3082</a></li>\r\n  <li>Part 2 goes into personal experiences with the RFC and with syndication in general, in particular in the context of web comics.</li>\r\n</ul>\r\n\r\n<p>This is part 2.</p>\r\n\r\n<p>In this show I’m talking to:</p>\r\n\r\n<h3 id=\"fluffy\">fluffy</h3>\r\n\r\n<ul>\r\n  <li>Federated social web:<br />\r\n<a href=\"https://queer.party/@fluffy\">https://queer.party/@fluffy</a></li>\r\n  <li>Writes and makes things in several creative fields:<br />\r\n<a href=\"https://beesbuzz.biz/\">https://beesbuzz.biz/</a></li>\r\n  <li>Publ is like a static site generator, but dynamic. It produces RFC 5005 archive feeds, of course:<br />\r\n<a href=\"https://publ.beesbuzz.biz/\">https://publ.beesbuzz.biz/</a></li>\r\n  <li>Thoughts on ephemeral content vs content worth archiving and how they relate to protocols:<br />\r\n<a href=\"https://beesbuzz.biz/blog/5709-Keeping-it-personal\">https://beesbuzz.biz/blog/5709-Keeping-it-personal</a></li>\r\n</ul>\r\n\r\n<h3 id=\"jamey\">Jamey</h3>\r\n\r\n<ul>\r\n  <li>Federated social web:<br />\r\n<a href=\"https://toot.cat/@jamey\">https://toot.cat/@jamey</a></li>\r\n  <li>Blog:<br />\r\n<a href=\"https://minilop.net/\">https://minilop.net/</a></li>\r\n  <li>Made a prototype full-history reader that follows RFC 5005 links:<br />\r\n<a href=\"https://reader.minilop.net/\">https://reader.minilop.net/</a></li>\r\n  <li>Made a webcomic reader mostly mentioned in Part 2:<br />\r\n<a href=\"https://www.comic-rocket.com/\">https://www.comic-rocket.com/</a></li>\r\n  <li>Made a WordPress plugin implementing RFC 5005:<br />\r\n<a href=\"https://github.com/jameysharp/wp-fullhistory\">https://github.com/jameysharp/wp-fullhistory</a></li>\r\n  <li>Made an RFC 5005 archive feed synthesizer for sites with a predictable post frequency and URL structure:<br />\r\n<a href=\"https://github.com/jameysharp/predictable/\">https://github.com/jameysharp/predictable/</a><br />\r\nHosted at <a href=\"https://fh.minilop.net/\">https://fh.minilop.net/</a></li>\r\n  <li>Was on HPR 9 years ago, talking about X.Org!<br />\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=0825\">https://hackerpublicradio.org/eps.php?id=0825</a></li>\r\n</ul>\r\n\r\n<h2 id=\"conversation-notes\">Conversation notes</h2>\r\n\r\n<ul>\r\n  <li>Back in 2002, Aaron Swartz published his joke MIME-header-based <em>RSS 3</em>:<br />\r\n<a href=\"https://www.aaronsw.com/weblog/000574\">https://www.aaronsw.com/weblog/000574</a><br />\r\nThe cultural context at the time and the rivalry between RSS 0.91+, RSS 1.0, RSS 2.0 and Atom deserves a show of its own.</li>\r\n</ul>\r\n',311,0,0,'CC-BY-SA','webcomics, rfc5005, atom, rss, feeds',0,0,1),
(3099,'2020-06-18','Linux Inlaws S01E08 The review of the review',2741,'In this short episode our two heroes rant about Linus, Transmeta, EdgeOS','<h2>S01E08: <a href=\"https://hackerpublicradio.org/eps.php?id=3099\" target=_blank>The review of the review</a></h2>\r\n<p>More shenanigans from our two heroes. In this short episode our two heroes rant about Linus and other old people, Transmeta and other history, discuss Martin\'s EdgeOS woes and discover that MIPS is indeed a CPU architecture supported by standard Debian. The show concludes with a short review of Claudio\'s <a href=https://hackerpublicradio.org/eps.php?id=3093>review</a> and poxes about the Arch wiki and Californication. You have been warned!</p>\r\n\r\n<h3>Links:</h3>\r\n<ul>\r\n<li>Linus Torvald\'s 80 column rant: <a href=https://lkml.iu.edu/hypermail/linux/kernel/2005.3/08168.html target=_blank>https://lkml.iu.edu/hypermail/linux/kernel/2005.3/08168.html</a></li>\r\n<li>Linux\'s device tree explained: <a href=https://elinux.org/Device_Tree_Reference target=_blank>https://elinux.org/Device_Tree_Reference</a></li>\r\n<li>Debian packages for EdgeOS: <a href=https://help.ui.com/hc/en-us/articles/205202560-EdgeRouter-Add-Debian-Packages-to-EdgeOS target=_blank>https://help.ui.com/hc/en-us/articles/205202560-EdgeRouter-Add-Debian-Packages-to-EdgeOS</a></li>\r\n<li>Arch Wiki: <a href=https://wiki.archlinux.org target=_blank>https://wiki.archlinux.org</a></li>\r\n<li>Californication: <a href=https://www.sho.com/californication target=_blank>https://www.sho.com/californication</a></li>\r\n<li>The Italian music extract is courtesy of Christian Petermann from his piece Folk Festival (CC-BY-SA)</li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Linus, Transmeta, EdgeOS, Arch, Californication, device tree ',0,0,1),
(3096,'2020-06-15','Unscripted ramblings on a walk:  PC Building.',135,'I take a walk and discuss my experience building a new PC after having not done so for many years.','<p>I certainly want to say that this episode isn\'t a brag-a-thon about my new rig. I try to discuss what surprised me most about how PC building has changed in the last 10-15 years.</p>\r\n<p>The parts for my build:</p>\r\n<ul>\r\n<li>AMD Threadripper 1920X 3.5 GHz 12-Core Processor</li>\r\n<li>ASRock X399 Taichi ATX sTR4 Motherboard</li>\r\n<li>EVGA 850 B3, 80+ Bronze 850W, Fully Modular PSU</li>\r\n<li>Noctua NH-U14S TR4-SP3, Premium-Grade CPU Cooler</li>\r\n<li>MSI Gaming GeForce GT 710</li>\r\n<li>Fractal Design Define C case</li>\r\n<li>Corsair LPX 32GB (2x16GB) 3200MHz C16 DDR4 DRAM Memory Kit</li>\r\n<li>GELID GC-Extreme thermal paste</li>\r\n<li>Random 500GB SSD from my parts bin</li>\r\n</ul>',241,57,0,'CC-BY-SA','pc,hardware,build,battlestation,discussion,review,walk',0,0,1),
(3101,'2020-06-22','Metrics',1553,'A layman\'s explanation of the mathematical concept of metric.','<p>Whether you are writing a simple darts simulation 8-bit computer game or are traversing the galaxy Elite-style, you might well find yourself tangling with the mathematical concept known as the metric. In this episode I describe the mathematical concept of a metric which I address with the following questions. Brief answers are provided below but the show, I hope, gives more context and colour.</p>\r\n<h3 id=\"what-is-a-metric\">What is a metric?</h3>\r\n<p>A type of ruler that is used in mathematics.</p>\r\n<h3 id=\"why-not-just-use-a-ruler\">Why not just use a ruler?</h3>\r\n<p>You can if all you want to do is measure distances in real life but if you want to work out distances from coordinates you need a metric.</p>\r\n<h3 id=\"whats-the-simplest-example-of-a-metric\">What\'s the simplest example of a metric?</h3>\r\n<p>In 1D, distance s equals change in x coordinate.</p>\r\n<h3 id=\"ok-can-i-have-a-more-interesting-example-please\">OK, can I have a more interesting example please?</h3>\r\n<p>On a flat 2D surface, distance squared is the change in x squared plus change in y squared.</p>\r\n<h3 id=\"isnt-that-pythagoras\">Isn\'t that pythagoras?</h3>\r\n<p>Yes, it is, but using the word distance and two co-ordinates.</p>\r\n<h3 id=\"what-other-co-ordinates-can-we-use-for-a-flat-2d-surface\">What other co-ordinates can we use for a flat 2D surface?</h3>\r\n<p>Those x and y co-ordinates are called Cartesian co-ordinates. Instead we can use polar co-ordinates: radius r, and the angle φ (or phi) measured clockwise from the vertical. These might be more convenient in some cases, say for a dart board computer game, or if you are working with a compass bearing, eg head east for 1 km would become start at the origin (r=0) and move with phi=90° until r=1 km.</p>\r\n<h3 id=\"does-pythagoras-still-work-in-polar-coords\">Does Pythagoras still work in polar coords?</h3>\r\n<p>Yes and no. No, it is no longer true to say that distance squared equals radius squared plus φ squared, but since the geometry is the same - a flat 2D surface - we can say that a <em>change</em> in distance squared equals the <em>change</em> in radius squared plus radius squared times the <em>change</em> in φ squared.</p>\r\n<h3 id=\"why-do-we-have-to-talk-about-changes-in-s-r-and-φ\">Why do we have to talk about changes in s, r and φ?</h3>\r\n<p>Because one of our coordinates now appears in the metric. That is, the radius squared multiplies on to the change in φ squared. This means that a change in φ depends on r. In other words, bigger circles have bigger circumferences. Actually, it\'s more intricate than that, as we must deal with infinitesimals: quantities which are very, very, very small but not zero.</p>\r\n<h3 id=\"can-we-use-cartesian-or-polar-co-ordinates-on-the-surface-of-the-earth\">Can we use Cartesian or polar co-ordinates on the surface of the Earth?</h3>\r\n<p>Only over short distances, much smaller than the radius of the Earth which is 6400 km. So up to about 100 km that\'s fine for many purposes, but not when flying a plane over great distances, say London to Singapore.</p>\r\n<h3 id=\"why-not\">Why not?</h3>\r\n<p>The surface of the Earth may look locally flat but of course the Earth has a curved 2D surface. This means that this surface has a non-euclidean geometry, which means that Pythagoras does not hold and we cannot even define Cartesian co-ordinates, let alone use them.</p>\r\n<h3 id=\"i-want-to-know-more-or-my-mind-is-not-fully-blown\">I want to know more OR my mind is not fully blown.</h3>\r\n<p>I will probably do more shows on this.</p>\r\n<h3 id=\"can-i-have-some-links\">Can I have some links?</h3>\r\n<p>Sure:</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Alcubierre_drive\">Alcubierre drive</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Darts\">Dart board</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Polar_coordinate_system\">Polar coordinates</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Metric_(mathematics)\">Metric</a></li>\r\n</ul>\r\n',268,0,0,'CC-BY-SA','mathematics,relativity,physics',0,0,1),
(3103,'2020-06-24','A warning about browser extensions and add-ons.',93,'A unmaintained extension lead to a popup storm','<p>\r\nI started getting popups while going to safe websites in chromium-browser. I disabled all browser extensions and then turned them back on individually. I found one that which was causing the problem and it is no longer on the app store. It was however still working and had not been revoked on my browser.\r\n</p>\r\n<p>\r\nPlease check your extensions and add-ons to make sure they are regularly updated.\r\n</p>',30,0,0,'CC-BY-SA','extensions,add-ons,firefox,chromium,chrome,thunderbird',0,0,1),
(3116,'2020-07-13','Unscripted ramblings on a walk:  Crisis at The Manor',1137,'A walk and a talk about a lightning strike zapping a network.','<p>In an episode years ago, I talked about \"libernil.net\" (a network for my family and friends). That network grew to be known as \"The Manor\" (manor.space) and has hosted more friends over time. Not too long ago our primary infrastructure was knocked out by lightning. On today\'s walk, I talk a little bit about what happened.</p>',241,0,1,'CC-BY-SA','networks,post-mortem,retrospective,community,walk,rambling',0,0,1),
(3108,'2020-07-01','Fuguita as a Desktop',3148,'I cover all the wonderful things about using Fuguita as your Desktop','<p>I cover many issues about using OpenBSD based Fuguita as your Desktop. I wouldn\'t have it any other way, I use Fuguita for my main Desktop these days.</p>\r\n',377,0,0,'CC-BY-SA','OpenBSD,Fuguita,Desktop,Portability,Sanity',0,0,1),
(3119,'2020-07-16','Converting to FFS2',2426,'FFS2, FuguIta encryption and UUID\'s and 9 volt batteries','<p>I talk about converting my I386 Dell Mini 10 running OpenBSD6.7 to the new FFS2 file system. I also talk about the two new features of FuguIta 6.7 which are data encryption and the use of UUID\'s in the noasks file which is used for automatic booting. I also talk about 9 volt batteries and high technology transistor radios. I am also surprised by an SD card discovery I found on my Dell Mini 10.</p>\r\n',377,0,0,'CC-BY-SA','FFS2, SD cards, OpenBSD',0,0,1),
(3120,'2020-07-17','How open are roleplaying games?',2767,'Klaatu and mcnalu talk through what open and free mean in roleplaying games.','<p>Roleplaying games open you up to a seemingly unlimited array of possibilities taking place in many universes. But truly unlimited freedom would literally mean nothing without a context of history, lore and rules for your adventures. Klaatu and mcnalu talk through what open and free mean in roleplaying games with a particular focus on Dungeons &amp; Dragons which Klaatu has been been running for the HPR community in recent months.</p>\r\n<p>If you want to play D&amp;D you can go to the website of its publisher <a href=\"https://dnd.wizards.com/\">Wizards of the Coast</a> and browse for the player and other manuals. But if you want to play but can\'t or won\'t pay then you can use the <a href=\"https://dnd.wizards.com/articles/features/systems-reference-document-srd\">System Reference Document (SRD)</a> which is published under the <a href=\"https://www.opengamingfoundation.org/ogl.html\">Open Game License (OGL)</a>. You can even use that document to create and publish your own adventures.</p>\r\n<p>However, if you want to publish an adventure with the full set of D&amp;D rules from official manuals — every monster and every spell — then you need the publisher\'s approval. To do this for D&amp;D you need to publish through the <a href=\"https://support.dmsguild.com/hc/en-us/articles/360024677993-Getting-Started-on-Dungeon-Masters-Guild\">Dungeon Masters\' Guild</a>.</p>\r\n',268,0,0,'CC-BY-SA','open,free,roleplaying,licensing',0,0,1),
(3128,'2020-07-29','Linux Inlaws S01E11 The Python Bumper Part 2',4065,'The chaps continue to shed more light on our beloved programming language','<ul>\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    <li>Stackoverflow index: <a href=https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved target=_blank>https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved</a></li>\r\n    <li>PEP 520 (the Zen of Python): <a href=https://www.python.org/dev/peps/pep-0020 target=_blank>https://www.python.org/dev/peps/pep-0020</a></li>\r\n    <li>PEP 572: <a href=https://www.python.org/dev/peps/pep-0572 target=_blank>https://www.python.org/dev/peps/pep-0572</a></li>\r\n    <li>PEP 572 discussion: <a href=https://twitter.com/llanga/status/989670881176702976 target=_blank>https://twitter.com/llanga/status/989670881176702976</a></li>\r\n    <li>Claudio\'s link: <a href=https://www.kevra.org/TheBestOfNext/DifferentNeXTSpellings/DifferentNeXTSpellings.html target=_blank>https://www.kevra.org/TheBestOfNext/DifferentNeXTSpellings/DifferentNeXTSpellings.html</a></li>\r\n    <li>Secret Diary of a Call Girl: <a href=https://en.wikipedia.org/wiki/Secret_Diary_of_a_Call_Girl target=_blank>https://en.wikipedia.org/wiki/Secret_Diary_of_a_Call_Girl</a></li>\r\n    <li>Sophie Wilson interview: <a href=\"https://www.youtube.com/watch?v=R2SdSLCMKEA&t=1852s\" target=_blank>https://www.youtube.com/watch?v=R2SdSLCMKEA&amp;t=1852s</a></li>\r\n</ul>\r\n\r\n\r\n',384,111,1,'CC-BY-SA','Python 3.9, Mortgages in New York, Williamsburg, Wirecard, middle-aged blondes',0,0,1),
(3106,'2020-06-29','Linux Inlaws S01E09 Postgres',3851,'The lads talk to Bruce Momjian Postgres evangelist','<h2>S01E09:</h2>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=3106\" target=_blank>Postgres</a><br/>\r\nListen to our two OAP interviewing Bruce\r\nMomjian, Postgres evangelist and long-time supporter of this popular SQL\r\ndatabase. Expect lots of strong language around SQL and NoSQL topics and\r\nsome ranting about MINT\'s attitude towards snaps, a fun breach of a health\r\nservice provider in the UK and why broadcasters should stick to\r\nmonopolies.</p>\r\n<ul>\r\n<li>MINT Chromium issue: <a href=https://blog.linuxmint.com/?p=3766 target=_blank>https://blog.linuxmint.com/?p=3766</a></li>\r\n<li>PostgreSQL: <a href=https://www.postgresql.org target=_blank>https://www.postgresql.org</a></li>\r\n<li>Babylon Health breach: <a href=https://www.bbc.com/news/technology-52986629 target=_blank>https://www.bbc.com/news/technology-52986629</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','Postgres, SQL, NoSQL, MINT',0,0,1),
(3107,'2020-06-30','Generating comfortable passwords',1800,'generating passwords to be comfortably type-able','<h2 id=\"random-password-generation\">Random Password Generation</h2>\r\n<p>First implementation: 14 character long with 6 letters and 8 digits</p>\r\n<pre><code>#!/usr/bin/env python3\r\n# file: passgen-v1.py\r\n\r\nimport random\r\n\r\nLETTERS = &quot;abcdefghijklmnopqrstuvwxyz&quot;\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n\r\n    passwd = []\r\n\r\n    for i in range(6):\r\n            passwd.append(random.choice(LETTERS))\r\n\r\n    for i in range(8):\r\n            passwd.append(random.choice(&quot;1234567890&quot;))\r\n\r\n    print(&quot;&quot;.join(passwd))\r\n</code></pre>\r\n<p>The passwords that come out of this are a bit difficult to type so I forced it to alternate between the left and right hands</p>\r\n<pre><code>#!/usr/bin/env python3\r\n# file: passgen-v2.py\r\n\r\nimport random\r\n\r\nLEFTS = &quot;&#39;,.pyaoeui;qjkx&quot;\r\nRIGHTS = &quot;fgcrldhdhtns-bmwvz&quot;\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n\r\n    passwd = []\r\n\r\n    for i in range(6):\r\n        if i % 2 == 0:\r\n            passwd.append(random.choice(LEFTS))\r\n        else:\r\n            passwd.append(random.choice(RIGHTS))\r\n\r\n    for i in range(8):\r\n        if i % 2 == 0:\r\n            passwd.append(random.choice(&quot;123456&quot;))\r\n        else:\r\n            passwd.append(random.choice(&quot;7890&quot;))\r\n\r\n    print(&quot;&quot;.join(passwd))\r\n</code></pre>\r\n<p>The regularity of switching between left and right hands (intuitively, and almost surely) decreases the entropy of the password, so use markov models to make that happen for the most part but critically NOT enforce it.</p>\r\n<pre><code>#!/usr/bin/env python3\r\n# file: passgen-v3.py\r\n\r\nimport random\r\n\r\nLs = [\r\n    &quot;aoeui&quot;,  # L1\r\n    &quot;&#39;,.py&quot;,  # L2\r\n    &quot;;qjkx&quot;,  # L3\r\n    &quot;123456&quot;, # L4\r\n    &quot;-snthd&quot;, # R1\r\n    &quot;lrcgf&quot;,  # R2\r\n    &quot;zvwmb&quot;,  # R3\r\n    &quot;7890&quot;    # R4\r\n]\r\n\r\nA = [[ .03,  .03,  .03, .01,  .27,  .27,  .27, .09],\r\n     [ .03,  .03,  .03, .01,  .27,  .27,  .27, .09],\r\n     [ .03,  .03,  .03, .01,  .27,  .27,  .27, .09],\r\n     [.004, .003, .003, .09,  .03,  .03,  .03, .81],\r\n     [ .27,  .27,  .27, .09,  .03,  .03,  .03, .01],\r\n     [ .27,  .27,  .27, .09,  .03,  .03,  .03, .01],\r\n     [ .27,  .27,  .27, .09,  .03,  .03,  .03, .01],\r\n     [ .03,  .03,  .03, .81, .004, .003, .003, .09]]\r\n\r\npi = [ .41, .03, .03, .03, .41, .03, .03, .03]\r\n\r\ndef sample( l ):\r\n    l_partial = [ sum(l[:i+1],0) for i in range(len(l))]\r\n    u = random.uniform(0,1)\r\n    for j,v in enumerate(l_partial):\r\n        if v &gt; u:\r\n            return j\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n\r\n    passwd = []\r\n\r\n    s = sample(pi)\r\n    for i in range(20):\r\n        s = sample(A[s])\r\n        passwd.append(random.choice(Ls[s]))\r\n\r\n    print(&quot;&quot;.join(passwd))\r\n</code></pre>\r\n<p>For increased entropy should also consider peppering in a few upper case characters.</p>\r\n<pre><code>#!/usr/bin/env python3\r\n# file: passgen-v3.py\r\n\r\nimport random\r\n\r\nLs = [\r\n    &quot;aoeui&quot;,  # L1\r\n    &quot;&#39;,.py&quot;,  # L2\r\n    &quot;;qjkx&quot;,  # L3\r\n    &quot;123456&quot;, # L4\r\n    &quot;-snthd&quot;, # R1\r\n    &quot;lrcgf&quot;,  # R2\r\n    &quot;zvwmb&quot;,  # R3\r\n    &quot;7890&quot;    # R4\r\n]\r\n\r\nA = [[ .03,  .03,  .03, .01,  .27,  .27,  .27, .09],\r\n     [ .03,  .03,  .03, .01,  .27,  .27,  .27, .09],\r\n     [ .03,  .03,  .03, .01,  .27,  .27,  .27, .09],\r\n     [.004, .003, .003, .09,  .03,  .03,  .03, .81],\r\n     [ .27,  .27,  .27, .09,  .03,  .03,  .03, .01],\r\n     [ .27,  .27,  .27, .09,  .03,  .03,  .03, .01],\r\n     [ .27,  .27,  .27, .09,  .03,  .03,  .03, .01],\r\n     [ .03,  .03,  .03, .81, .004, .003, .003, .09]]\r\n\r\npi = [ .41, .03, .03, .03, .41, .03, .03, .03]\r\n\r\nUPPER=.1\r\n\r\ndef sample( l ):\r\n    l_partial = [ sum(l[:i+1],0) for i in range(len(l))]\r\n    u = random.uniform(0,1)\r\n    for j,v in enumerate(l_partial):\r\n        if v &gt; u:\r\n            return j\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n\r\n    passwd = []\r\n\r\n    s = sample(pi)\r\n    for i in range(20):\r\n        s = sample(A[s])\r\n        c = random.choice(Ls[s])\r\n        u = random.uniform(0,1)\r\n        if u &lt; UPPER:\r\n            c = c.upper()\r\n        passwd.append(c)\r\n\r\n    print(&quot;&quot;.join(passwd))\r\n</code></pre>\r\n<p>Finally, generating the matrix by hand was a bit of a pain, so I made it a bit easier by making a small procedure with few control knobs (the variables <code>SWITCH_HAND</code> and <code>SWITCH_CHAR</code> which control how likely it is that a character pair will result in a hand switch, or a switch between general characters and digits).</p>\r\n<pre><code>#!/usr/bin/env python3\r\n\r\nimport random\r\nimport numpy\r\n\r\n# this version uses a markov chain to make it more likely to alternate hands\r\n# (in dvorak) so that the password is easy to type (in dvorak)\r\n\r\nLs = [\r\n    &quot;aoeui&quot;,  # L1\r\n    &quot;&#39;,.py&quot;,  # L2\r\n    &quot;;qjkx&quot;,  # L3\r\n    &quot;123456&quot;, # L4\r\n    &quot;-snthd&quot;, # R1\r\n    &quot;lrcgf&quot;,  # R2\r\n    &quot;zvwmb&quot;,  # R3\r\n    &quot;7890&quot;    # R4\r\n]\r\n\r\nSWITCH_HAND = .8\r\nSWITCH_CHAR = .3\r\nUPPER=.1\r\n\r\ndef prob( i , j ):\r\n    switch_hand = int(i / 4) != int(j / 4)\r\n    to_num = (j % 4) == 3\r\n    from_num = (i % 4) == 3\r\n\r\n    prob = 1\r\n\r\n    if to_num and from_num:\r\n        prob *= (1 - SWITCH_CHAR)\r\n    elif to_num:\r\n        prob *= (SWITCH_CHAR)\r\n    elif from_num:\r\n        prob *= (SWITCH_CHAR / 3)\r\n    else:\r\n        prob *= ((1 - SWITCH_CHAR) / 3)\r\n\r\n    if switch_hand:\r\n        prob *= SWITCH_HAND\r\n    else:\r\n        prob *= (1 - SWITCH_HAND)\r\n\r\n    return prob\r\n\r\n\r\nA = numpy.array([ [ prob(i,j) for j in range(8)  ] for i in range(8) ])\r\n\r\npi = [ 1.0 / 8 for i in range(8) ]\r\n\r\ndef sample( l ):\r\n    l_partial = [ sum(l[:i+1],0) for i in range(len(l))]\r\n    u = random.uniform(0,1)\r\n    for j,v in enumerate(l_partial):\r\n        if v &gt; u:\r\n            return j\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n\r\n    passwd = []\r\n\r\n    s = sample(pi)\r\n    for i in range(20):\r\n        s = sample(A[s])\r\n        c = random.choice(Ls[s])\r\n        u = random.uniform(0,1)\r\n        if u &lt; UPPER:\r\n            c = c.upper()\r\n        passwd.append(c)\r\n\r\n    print(&quot;&quot;.join(passwd))\r\n</code></pre>\r\n',385,0,1,'CC-BY-SA','passwords, python',0,0,1),
(3109,'2020-07-02','Matchbox Restoration Part 4',277,'In this the 4th in the series Tony discusses paint removal on the castings of the MK10 Jaguars','<p>Good day to all in HPR land, this is Tony Hughes coming to you again from Blackpool in the UK. To recap this is the 4th in a series of shows about my hobby of restoring Matchbox and other Die cast models. In the last show I went through the process of stripping the models down to their component parts. In this episode I will discuss the process I use to remove the paint and prepare the casting for repainting and reassembly.</p>\r\n<p>So first off, and I should have said this last episode, a health and safety warning. If there are young people listening to this some of the things talked about on today\'s show require parental supervision, and are not recommended for young people unless properly supervised. So with that public service announcement out of the way let\'s get on with the show.</p>\r\n<p>So before the base can be put in the paint stripper the wheels and axles need to be removed. As you can see from the picture there are flanges holding on the wheels to the metal axle and one side is only a small flange.</p>\r\n<p>Picture 000<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_000.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_000_thumbnail.jpg\" alt=\"Picture 000\" /></a></p>\r\n<p>This can be removed with a small needle file or a small rotary file attachment for my rotary tool. Once removed the bases can be put in with the rest of the casting for paint removal.</p>\r\n<p>Picture 001<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_001.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_001_thumbnail.jpg\" alt=\"Picture 001\" /></a></p>\r\n<p>So let\'s talk about paint removal, obviously the first one you will think of is some kind of chemical paint stripper and I use 2 different methods of this. The first and probably the safest in the first instance is a commercial paint stripper from one of the chain DIY stores here in the UK, B&Q. There is a local store about 10 minutes drive from me so it is convenient during normal shopping times just to pop in and grab a 2.5Ltr container of their own brand DIAL paint stripper that is fantastic for this job and quite economic.</p>\r\n<p>The second is a little more aggressive if you need fast results but requires a little more in the way of care when using it as it is very corrosive and can be harmful if the fumes are breathed in, or the product gets onto your skin or in your eyes. This is caustic soda and I buy this through eBay and have it delivered in 1Kg pouches. It needs to be stored in an air tight container in a dry environment to keep it from getting damp as this is a potential fire hazard as if it gets contaminated buy moisture a chemical reaction starts which generates heat. So if you go with the caustic soda method you need to take adequate safety precautions. With the Jaguar I mainly used the caustic soda method to remove the paint but one casting I put in the paint stripper to show that method.</p>\r\n<p>With the caustic soda place the castings in a jar with enough room to cover with just boiled water so that it does not overflow when the caustic soda crystals are added slowly, I use a long handle tea spoon and add 2-3 tea spoons of the soda until it has a good fizz. Then leave for about 15 minutes but the longer the better, I sometimes do this and leave over night and this gives a great result. Remember to wear gloves when doing this to prevent getting the caustic on your hands.</p>\r\n<p>Picture 002<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_002.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_002_thumbnail.jpg\" alt=\"Picture 002\" /></a></p>\r\n<p>Picture 003<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_003.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_003_thumbnail.jpg\" alt=\"Picture 003\" /></a></p>\r\n<p>Picture 004<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_004.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_004_thumbnail.jpg\" alt=\"Picture 004\" /></a></p>\r\n<p>Picture 005<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_005.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_005_thumbnail.jpg\" alt=\"Picture 005\" /></a></p>\r\n<p>With the paint stripper I have a plastic click lock box with this in that I immerse the casting into and leave for several hours for best results. This can be reused many times as you can see in this picture keeping it an economic method as most of the stripper is left in the box when you remove the casting. The results for both methods are similar, but I find the caustic although you need to be careful, is the less messy of the two options, and the casting is easier to clean after paint removal.</p>\r\n<p>Picture 006<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_006.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_006_thumbnail.jpg\" alt=\"Picture 006\" /></a></p>\r\n<p>So after removal of the paint the castings are polished up with either a hand wire brush or a wire brush attachment for the rotary tool. You can see the base before and after and a picture of the polished main casting in the notes.</p>\r\n<p>Picture 007<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_007.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_007_thumbnail.jpg\" alt=\"Picture 007\" /></a></p>\r\n<p>Picture 008<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3109/img_008.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3109/img_008_thumbnail.jpg\" alt=\"Picture 008\" /></a></p>\r\n<p>So we now have a casting ready for repainting, which I will cover in the next episode. So until next time this is Tony Hughes saying goodbye to all those in HPR land. Keep safe until the next instalment.</p>\r\n',338,114,0,'CC-BY-SA','Matchbox Cars,Diecast Models,Restoration,paint removal,caustic soda,paint stripper',0,0,1),
(3403,'2021-08-18','Forth on microcontrollers',1341,'A little more about forth and a couple of chapters in the novel of my life','<ul>\r\n<li><p>microlisp<br />\r\nlisp on avr microcontrollers (and others)<br />\r\n<a href=\"https://www.ulisp.com/\" class=\"uri\">https://www.ulisp.com/</a></p></li>\r\n<li><p>ben eater<br />\r\n<a href=\"https://eater.net/\" class=\"uri\">https://eater.net/</a></p></li>\r\n<li><p>computer on breadboards<br />\r\n<a href=\"https://6502.org/\" class=\"uri\">https://6502.org/</a></p></li>\r\n<li><p>forth on avr microcontrollers</p>\r\n<ul>\r\n<li>eforth <a href=\"https://forth.org/eforth.html\" class=\"uri\">https://forth.org/eforth.html</a></li>\r\n<li>amforth <a href=\"https://amforth.sourceforge.net/\" class=\"uri\">https://amforth.sourceforge.net/</a></li>\r\n<li>flash forth <a href=\"https://www.flashforth.com/\" class=\"uri\">https://www.flashforth.com/</a></li>\r\n</ul></li>\r\n<li><p>incantations</p></li>\r\n</ul>\r\n<pre><code>  sudo avrdude -c usbtiny -p m328p -e -U flash:w:uno.hex:i -U eeprom:w:uno.eep.hex:i\r\n  sudo avrdude -c usbtiny -p m328p -e -U flash:w:uno.hex:i -U eeprom:w:uno.eep.hex:i\r\n  sudo avrdude -P usbtiny -p m328p -e -U efuse:w:0x05:m -U hfuse:w:0xD9:m -U lfuse:w:0xFF:m</code></pre>',326,0,0,'CC-BY-SA','programming, history, arduino',0,0,1),
(3112,'2020-07-07','finishing the frame on the long wheelbase recumbent',529,'a narrated slideshow of the next steps in building a bespoke recumbent bicycle','<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1282\">hpr 1282</a> john kulps efforts</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2869\">hpr 2869</a> part one of my build</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2875\">hpr 2875</a> part two</li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2962\">hpr 2962</a> part three</li>\r\n</ul>\r\n<!-- - -->\r\n<ul>\r\n<li>recycled recumbent can be found at:<br />\r\n<a href=\"https://sites.google.com/site/recycledrecumbents/home\" class=\"uri\">https://sites.google.com/site/recycledrecumbents/home</a></li>\r\n</ul>\r\n<p>Rear triangle in jig<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_000.jpg\" alt=\"Rear triangle in jig\" /></p>\r\n<p>Close up<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_001.jpg\" alt=\"Close up\" /></p>\r\n<p>View from the front<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_002.jpg\" alt=\"View from the front\" /></p>\r\n<p>Jig ready for bending<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_003.jpg\" alt=\"Jig ready for bending\" /></p>\r\n<p>Bending process complete<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_004.jpg\" alt=\"Bending process complete\" /></p>\r\n<p>Jigging up rear triangle onto frame<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_005.jpg\" alt=\"Jigging up rear triangle onto frame\" /></p>\r\n<p>Rear triangle brazed to frame<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_006.jpg\" alt=\"Rear triangle brazed to frame\" /></p>\r\n<p>Making emt bottom rails<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_007.jpg\" alt=\"Making emt bottom rails\" /></p>\r\n<p>Prying cuts open<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_008.jpg\" alt=\"Prying cuts open\" /></p>\r\n<p>Finished and ready to fit in frame<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_009.jpg\" alt=\"Finished and ready to fit in frame\" /></p>\r\n<p>Emt bending tool<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_010.jpg\" alt=\"Emt bending tool\" /></p>\r\n<p>Bottom rails ready for brazing<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3112/img_011.jpg\" alt=\"Bottom rails ready for brazing\" /></p>\r\n<!-- picture01-rear-triangle-in-jig.jpg -->\r\n<!-- Rear triangle in jig -->\r\n<!-- picture02-triangle-close-up.jpg -->\r\n<!-- Close up -->\r\n<!-- picture03-triangle-front-view.jpg -->\r\n<!-- View from the front -->\r\n<!-- picture04-bending-jig.jpg -->\r\n<!-- Jig ready for bendoing -->\r\n<!-- picture05-triangle-bend-complete.jpg -->\r\n<!-- Bending process complete -->\r\n<!-- picture06-rear-triangle-on-frame.jpg -->\r\n<!-- Jigging up rear triangle onto frame -->\r\n<!-- picture07-rear-triangle-brazed.jpg -->\r\n<!-- Rear triangle brazed to frame -->\r\n<!-- picture08-emt-opening.jpg -->\r\n<!-- Making emt bottom rails -->\r\n<!-- picture09-prying-open.jpg -->\r\n<!-- Prying cuts open -->\r\n<!-- picture10-say-ahh.jpg -->\r\n<!-- Finished and ready to fit in frame -->\r\n<!-- picture11-bending-tool.jpg -->\r\n<!-- Emt bending tool -->\r\n<!-- picture12-bottom-rails-ready-to-braze.jpg -->\r\n<!-- Bottom rails ready for brazing -->\r\n',326,115,0,'CC-BY-SA','bicycle, recumbent',0,0,1),
(3130,'2020-07-31','More Quick Tips',667,'This time tips onNvidia ffmpeg transcoding Fallout Perks Late to Movies,Shared 2FA,Time to leave app','<ol type=\"1\">\r\n<li>I talk about using Nvidia to quickly transcode</li>\r\n<li>Go over fallout 76 perks</li>\r\n<li>Show up to movies 20min late to miss th BS</li>\r\n<li>Shared 2FA because everybody uses SMS for some reason even tho the feds say now not to ... it took us 10 years to get here lol</li>\r\n<li>Time to leave app ! never be late to anything again... LOL .. you wish !</li>\r\n</ol>\r\n<p>-rmccurdy.com</p>\r\n',36,0,1,'CC-BY-SA','Nvidia ffmpeg transcoding,Fallout Perks,Late to Movies,Shared 2FA,Time to leave app',0,0,1),
(3135,'2020-08-07','Quick Tips for May 20 20',977,'BlueTooth,Carseats,tweezers,waffles ','<ol type=\"1\">\r\n<li>Talk about Bluetooth...</li>\r\n<li>We can put a man on the moon but we can\'t make a carseat that doesn\'t make me want to murder people when I try to move it ...</li>\r\n<li>Sharpen those tweezers!</li>\r\n<li>Waffffffffelz! YUM!</li>\r\n</ol>',36,0,1,'CC-BY-SA','BlueTooth,Carseats,tweezers,waffles ',0,0,1),
(3140,'2020-08-14','GIMP: Selection Tools',962,'The key to using GIMP effectively is to select the area you want to work on.','<p>Selection Tools define the area that other tools will work within. For example, if you want to add color to an image, you probably want to add it to a specific area, not to the entire image. Selection Tools help you to pick the area precisely, and are useful for photo retouching purposes.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/tools-selection/\">https://www.ahuka.com/gimp/tools-selection/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, selection',0,0,1),
(3150,'2020-08-28','GIMP: Paint Tools',1097,'With Paint Tools you begin to operate on the image.','<p>Paint Tools are where you begin to add things to an image. You can add a large variety of things depending on the tool, from thin lines to broad strokes, to gradients, and so on.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/paint-tools/\">https://www.ahuka.com/gimp/paint-tools/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, paint, draw',0,0,1),
(3160,'2020-09-11','GIMP: Transform Tools',992,'With Transform Tools you can stretch, move, and crop the image.','<p>Transform Tools are where you start to manipulate an image. You can move it around, stretch it, rotate it, crop it, and so on. This is the third of the four groups of tools we will look at for GIMP.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\" class=\"uri\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Transformation_matrix\" class=\"uri\">https://en.wikipedia.org/wiki/Transformation_matrix</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/transform-tools/\" class=\"uri\">https://www.ahuka.com/gimp/transform-tools/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, transform',0,0,1),
(3113,'2020-07-08','OpenJDK 15 - Unsafe Garbage',893,'We take a quick look at what is coming in JDK 15','<p><a href=\"https://youtu.be/7duUZYvNFWw\">Youtube: OpenJDK 15 - Unsafe Garbage</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/339\">339: Edwards-Curve Digital Signature Algorithm (EdDSA)</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/360\">360: Sealed Classes (Preview)</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/371\">371: Hidden Classes</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/372\">372: Remove the Nashorn JavaScript Engine</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/373\">373: Reimplement the Legacy DatagramSocket API</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/374\">374: Disable and Deprecate Biased Locking</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/375\">375: Pattern Matching for instanceof (Second Preview)</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/377\">377: ZGC: A Scalable Low-Latency Garbage Collector</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/378\">378: Text Blocks</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/379\">379: Shenandoah: A Low-Pause-Time Garbage Collector</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/381\">381: Remove the Solaris and SPARC Ports</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/383\">383: Foreign-Memory Access API (Second Incubator)</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/384\">384: Records (Second Preview)</a></p>\r\n<p><a href=\"https://openjdk.java.net/jeps/385\">385: Deprecate RMI Activation for Removal</a></p>\r\n',382,0,0,'CC-BY-SA','java, news',0,0,1),
(3118,'2020-07-15','Linux Inlaws S01E10 The Python Bumper Part 1',5436,'A discussion of Python questions and their answers (part 1). Plus news on Brad and Alia','<ul>\r\n    <li>Linux 5.8RC1: <a href=\"https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.8-rc1-Released\" target=_blank>https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.8-rc1-Release\r\nd</a></li>\r\n  <li>Stackless Python: <a href=\"https://github.com/stackless-dev/stackless/wiki\" target=_blank>https://github.com/stackless-dev/stackless/wiki</a></li>\r\n  <li>Python 3 documentation: <a href=\"https://docs.python.org/3\" target=_blank>https://docs.python.org/3</a></li>\r\n  <li>Guido van	Rossum:	<a href=\"https://gvanrossum.github.io\" target=_blank>https://gvanrossum.github.io</a></li>\r\n    <li>Python Enhancement Proposals (PEPs): <a href=\"https://www.python.org/dev/peps\" target=_blank>https://www.python.org/dev/peps</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>PEP 572: <a href=\"https://www.python.org/dev/peps/pep-0572\" target=_blank>https://www.python.org/dev/peps/pep-0572</a></li>\r\n    <li>Brad & Alia: <a href=\"https://www.gala.de/stars/news/l_a__news/brad-pitt--ist-er-mit-dieser-schauspielerin-zusammen--22244236.html\" target=_blank>https://www.gala.de/stars/news/l_a__news\r\n/brad-pitt--ist-er-mit-dieser-schauspielerin-zusammen--22244236.html</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','Python, PEP, Linux, Alia Shawkat, Brad Pitt, Stackless Python',0,0,1),
(3117,'2020-07-14','The joy of retro computing',1914,'Knightwise talks about the old computers in his attic and how it is a loverly geek getaway','<p>Knightwise talks about his collection of old macs and pc\'s and how he uses them as a little \"getaway\" of the rush of modern day life. Show recorded in the car, excuse the road noise.</p>',111,0,0,'CC-BY-SA','Retro computer',0,0,1),
(3123,'2020-07-22','Arduino controlled Christmas lights',170,'Controlling Christmas LED lights with an Arduino','<ol type=\"1\">\r\n<li><p>Inspired by an Instructable project</p>\r\n<p><a href=\"https://www.instructables.com/id/LED-VU-Meter-With-Arduino-UNO\">https://www.instructables.com/id/LED-VU-Meter-With-Arduino-UNO</a></p></li>\r\n<li><p>Started the project with Arduino Uno.</p>\r\n<ul>\r\n<li>Found that power it with the barrel plug made audio input stable</li>\r\n<li>Tested this theory by using USB power</li>\r\n<li>Suspect this was due to grounding not being as good with the USB</li>\r\n<li>This caused LED\'s to light even without an audio input</li>\r\n<li>Ended up using an generic Arduino Nano to control the project</li>\r\n</ul></li>\r\n<li><p>Modified an audio mic preamplifier from Amazon to condition the output from the laptop music source</p></li>\r\n<li><p>Ran the output from this to A0 on the Arduino</p></li>\r\n<li><p>Split the signal out to an external speaker</p></li>\r\n<li><p>Used digital outputs listed in the sketch to power the LED indicators</p>\r\n<ul>\r\n<li>For reference, a sketch is the program that the Arduino runs through a loop.</li>\r\n</ul></li>\r\n<li><p>Used pins 10 to 12 as AnalogWrite pin to provide the power to the solid state relays.</p></li>\r\n<li><p>Used a dremel to separate the power to the hot side of the two power outlets</p>\r\n<ul>\r\n<li>Used three of the outlets to power three strings of Christmas tree LED lights.</li>\r\n<li>Used the other outlet to power the Arduino</li>\r\n</ul></li>\r\n<li><h4 id=\"bonus\">Bonus</h4>\r\n<ul>\r\n<li>Using these particular solid state relays, there is still a 10Vac output in <em>off</em> state. It actually worked for good, as the lights are at a nice brightness without a music input.</li>\r\n<li>Kindly leave a note in the comments if this is common to Solid State relays.</li>\r\n</ul></li>\r\n</ol>\r\n<h3 id=\"links\">Links:</h3>\r\n<h4 id=\"gy-max4466-electret-microphone-amplifier\">GY-MAX4466 Electret Microphone Amplifier</h4>\r\n<p><a href=\"https://www.amazon.com/gp/product/B07C3HXPJ9/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1\">https://www.amazon.com/gp/product/B07C3HXPJ9/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1</a></p>\r\n<h4 id=\"solid-state-relay-on-ebay\">Solid State relay on Ebay</h4>\r\n<p><a href=\"https://www.ebay.com/itm/25A-40A-SSR-25DA-SSR-40DA-250V-Solid-State-Relay-Module-Alloy-Heat-Sink/401478280169?hash=item5d79f863e9:g:dkwAAOSwiqFaX3f8\">https://www.ebay.com/itm/25A-40A-SSR-25DA-SSR-40DA-250V-Solid-State-Relay-Module-Alloy-Heat-Sink/401478280169?hash=item5d79f863e9:g:dkwAAOSwiqFaX3f8</a></p>\r\n<h4 id=\"elegoo-for-arduino-nano-v3.0\">ELEGOO for Arduino Nano V3.0</h4>\r\n<p><a href=\"https://www.amazon.com/gp/product/B0713XK923/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1\">https://www.amazon.com/gp/product/B0713XK923/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;psc=1</a></p>\r\n<h4 id=\"analogwrite\">AnalogWrite</h4>\r\n<p><a href=\"https://www.arduino.cc/en/pmwiki.php?n=Reference/AnalogWrite\">https://www.arduino.cc/en/pmwiki.php?n=Reference/AnalogWrite</a></p>\r\n<p><a href=\"https://www.arduino.cc/en/Tutorial/AnalogInOutSerial\">https://www.arduino.cc/en/Tutorial/AnalogInOutSerial</a></p>\r\n<h3 id=\"my-video\">My video</h3>\r\n<p><a href=\"https://archive.org/details/vid-20191217-192821-no-audio\">Sound\r\nReactive Christmas lights on Archive.org</a></p>\r\n<p><img src=\"https://ia801506.us.archive.org/34/items/screenshot-20200630-014101/Screenshot_20200630-014101.png\" style=\"width:200px;\" /></p>\r\n<p><strong>Edit:</strong></p>\r\n<p>Here is the song I meant to add, to see if it matches my video of the lights.</p>\r\n<p>It is the Trans Siberian Orchestra, Carol of the Bells.</p>\r\n<p><a href=\"https://m.youtube.com/watch?v=sCabI3MdV9g\" target=\"_blank\">https://m.youtube.com/watch?v=sCabI3MdV9g</a></p>\r\n',318,91,0,'CC-BY-SA','Arduino, Christmas, lights, Solid state relays',0,0,1),
(3170,'2020-09-25','GIMP: Color Tools',1199,'With Color Tools you can adjust the colors and brightness of an image.','<p>Color Tools are where you can adjust the colors and brightness of an image.You can change the color balance, adjust individual colors or transparency without affecting other colors, and so on. This is the fourth of the four general groups of tools we will look at for GIMP. There will also be some miscellaneous tools.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\" class=\"uri\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://osdn.net/projects/separate-plus/\" class=\"uri\">https://osdn.net/projects/separate-plus/</a></li>\r\n<li><a href=\"https://learn.leighcotnoir.com/artspeak/elements-color/hue-value-saturation/\" class=\"uri\">https://learn.leighcotnoir.com/artspeak/elements-color/hue-value-saturation/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Complementary_colors\" class=\"uri\">https://en.wikipedia.org/wiki/Complementary_colors</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/transform-tools/\" class=\"uri\">https://www.ahuka.com/gimp/transform-tools/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, color',0,0,1),
(3180,'2020-10-09','GIMP: Miscellaneous Tools',803,'These few remaining tools are important, but don\'t fit neatly into one category.','<p>The Miscellaneous tools do a number of useful things without fitting neatly into a category. The Paths tool takes Selections up a notch and also lets you add interesting effects. Zoom is one you would use every day, and Measure is handy in some situations. Finally, GEGL Operations are the future of all GIMP development</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\" class=\"uri\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/B%C3%A9zier_curve\" class=\"uri\">https://en.wikipedia.org/wiki/B%C3%A9zier_curve</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Font_hinting\" class=\"uri\">https://en.wikipedia.org/wiki/Font_hinting</a></li>\r\n<li><a href=\"https://www.webopedia.com/TERM/A/antialiasing.html\" class=\"uri\">https://www.webopedia.com/TERM/A/antialiasing.html</a></li>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/gimp-tool-gegl.html\" class=\"uri\">https://docs.gimp.org/2.8/en/gimp-tool-gegl.html</a></li>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-tool-gegl.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-tool-gegl.html</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=aEsqVMCgpJ8\" class=\"uri\">https://www.youtube.com/watch?v=aEsqVMCgpJ8</a></li>\r\n<li><a href=\"https://www.patreon.com/m/649544/posts\" class=\"uri\">https://www.patreon.com/m/649544/posts</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/miscellaneous-tools/\" class=\"uri\">https://www.ahuka.com/gimp/miscellaneous-tools/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, paths, zoom, GEGL',0,0,1),
(3124,'2020-07-23','Matchbox Restoration Part 5',310,'In this the 5th in the series Tony discusses the painting process on the castings of the MK10 Jaguar','<h2 id=\"hpr-matchbox-show-episode-5\">HPR Matchbox show Episode 5</h2>\r\n<p>Good day to all in HPR land, this is Tony Hughes coming to you again from Blackpool in the UK. To recap this is the 5th in a series of shows about my hobby of restoring Matchbox and other Die cast models. In the last show I went through the process I use to remove the paint and prepare the casting for repainting and reassembly. In this episode we will look at the painting of the castings and \'Spoiler\' what to do if things go wrong.</p>\r\n<p>After polishing and before painting I degrease the casting in some alcohol. I use a cheap own brand nail polish remover from the Co-Op but there are many ways of doing this and as many products on the market, so use what you have to hand. Even a good clean in hot soapy water, dry with a lint free cloth and then a wipe over with alcohol wipes works well. Remember to wear gloves when handling the casting after this process as the grease from your hands can undo all your hard work.</p>\r\n<p>So the first thing to say is that I am still in the early stages of learning this hobby and use what are referred to as \'Rattle\' cans in this community, it just means spray can painting rather than the use of an Air Brush, which I will be moving onto at some point so I can mix my own paint colours and not just those available in a spray can.</p>\r\n<p>So far I have been painting the casting outside during a warm dry day with little or no wind, or in a sheltered spot behind the garage if the wind is a little strong. I have now set up a small portable spray booth in the garage for this so will be able to paint in all conditions weather wise, which will make life easier.</p>\r\n<p>Image 001<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_000.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_000_thumbnail.jpg\" alt=\"Image 001\" /></a></p>\r\n<p>So back to the casting, I use a Hemostat Clamp to hold the casting on this model it is attached to the post that holds the model together as this will not be seen when reassembled, I used a grey primer, spraying light coats all over the model until it is completely covered in the primer. Priming helps smooth out any small imperfections for the final paint coat, and as the casting is over 50 years old, it also lays down a consistent base colour and ensures that the colour coat should be the same all over when final paint is applied. As you can see in the picture it also shows up the casting lines and if desired these can be filed away prior to final painting, as this is a restoration I left this casting as original as possible, and left these in.</p>\r\n<p>Image 002<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_001.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_001_thumbnail.jpg\" alt=\"Image 002\" /></a></p>\r\n<p>Image 003<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_002.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_002_thumbnail.jpg\" alt=\"Image 003\" /></a></p>\r\n<p>After leaving the casting to dry for about an hour I came back with the colour coat, the original model was a metallic brown, but the nearest match I was able to find in the local pound shops is a metallic gold. Not perfect but the final results look good, but a little lighter than the original paint. I applied the paint in smooth fine strokes, getting what is called a tack coat of the paint all over the model casting to start, then applying another coat (the wet coat) all over until there is no sign of the primer and all looks smooth but with no runs in the paint finish. The balance needs to be just right with not too little or too much paint, but with practice you get there in the end. Unforseeably on this occasion there was a reaction with the primer on the rear of the model which caused bubbling of the paint.</p>\r\n<p>Image 004<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_003.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_003_thumbnail.jpg\" alt=\"Image 004\" /></a></p>\r\n<p>Image 005<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_004.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_004_thumbnail.jpg\" alt=\"Image 005\" /></a></p>\r\n<p>So after allowing the paint to fully cure I used a little wet and dry fine sanding paper to smooth out this area and gave the casting another coat of paint, and fortunately this time all was well as you can see from the pictures in the show notes.</p>\r\n<p>Image 006<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_005.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_005_thumbnail.jpg\" alt=\"Image 006\" /></a></p>\r\n<p>Image 007<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_006.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_006_thumbnail.jpg\" alt=\"Image 007\" /></a></p>\r\n<p>While the casting was fully curing I turned my attention to the screen plastic. I found the best of the ones I had salvaged, from the 4 castings, picture 008 in the notes, and gave it a polish with some auto sol polishing compound using a cotton bud, and it came out quite nice. I then gave it a wash in soapy water to remove the residue of the polishing compound and after drying gave it a dip in some Pledge floor shine, it works great.</p>\r\n<p>Image 008<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_007.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_007_thumbnail.jpg\" alt=\"Image 008\" /></a></p>\r\n<p>Image 009<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_008.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_008_thumbnail.jpg\" alt=\"Image 009\" /></a></p>\r\n<p>Image 010<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_009.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_009_thumbnail.jpg\" alt=\"Image 010\" /></a></p>\r\n<p>After coating the screen in the Pledge it is placed on a pad of paper towel and covered with a plastic pot to stop dust getting on it while drying.</p>\r\n<p>Image 011<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3124/img_010.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3124/img_010_thumbnail.jpg\" alt=\"Image 011\" /></a></p>\r\n<p>Although the original casting had a black painted base I liked the look of the polished base so decided to leave this as it was, but if painting the base it is the same process as the main casting.</p>\r\n<p>Well that\'s it for this episode, on the next I will look at putting the wheels and axles back on the base and the reassembly process.</p>\r\n<p>This is Tony Hughes for Hacker Public Radio, saying goodbye for now, keep safe everyone and I\'ll be back soon with the next instalment.</p>\r\n',338,114,0,'CC-BY-SA','Matchbox Cars, Diecast Models, Restoration, painting, Rattle cans, Air brushing, Plastic polishing',0,0,1),
(3121,'2020-07-20','Opposing Views on Tattoos',1866,'Windigo and Mrs. Honeyhume discuss their views on tattoos','<p>\r\nNote: Phone recording came with a little bit of a hiss. Sorry about that!\r\n</p>\r\n<p>\r\nI discuss the subject of tattoos with my partner of fifteen years, Mrs. Honeyhume. While we agree on many subjects, tattoos are not one of them.\r\n</p>\r\n<p>\r\nShe enjoys and appreciates tattoos, seeing them as a permanent form of art that you can display on your own body. She has several of her own. I do not mind if other people tattoo themselves, but I am very opposed to getting them myself.\r\n</p>\r\n<p>\r\nWe discuss cultural influences of tattooing, some different methods used to tattoo skin, and many hypothetical situations to try to pin down the source of my opposition to getting one.\r\n</p>\r\n',196,0,1,'CC-BY-SA','tattoos',0,0,1),
(3126,'2020-07-27','Metrics part II',1967,'The metric of a 2D curved surface','<p>In this show I continue from where I left off in my last show (<a href=\"https://hackerpublicradio.org/eps.php?id=3101\">3101</a>) and talk about the geometry of curved 2D surfaces such as that of a sphere.</p>\r\n<p>Using the Earth\'s surface as an example we can use familiar the co-ordinates of longitude and latitude, illustrated on this diagram:</p>\r\n<img alt=\"Sphere with latitude and longitude\" src=\"https://hackerpublicradio.org/eps/hpr3126/FedStats_Lat_long.png\">\r\n\r\n<p><em>Source: Public domain, <a href=\"https://commons.wikimedia.org/wiki/File:FedStats_Lat_long.png\">Wikimedia commons</a></em></p>\r\n<p>On the left we see circles of constant latitude. The largest of these circles is at latitude 0° and is called the <strong>equator</strong>. Its circumference is equal to that of the Earth and so it is an example of a <strong>great circle</strong>.</p>\r\n<p>On the right we see lines of constant longitude. These run from pole to pole and are perpendicular to the equator. Each of these lie on a great circle (in fact they are half a great circle each).</p>\r\n<p>Great circles on the surface of a sphere are analogous to straight lines on a flat 2D surface. They offer a way to connect any two points with the shortest distance. Lines in 2D or great circles on a sphere are examples of what is called a <strong>geodesic</strong>. In physics, particles that are not subject to any forces will follow geodesics.</p>\r\n<p>In Einstein\'s General Theory of Relativity, the presence of mass or energy will alter the shape of spacetime and that will determine the metric. From the metric you can derive the geodesics and from that you can predict the motion of objects with no forces acting on them. In this way you can do away with the approximation that is Newton\'s gravitational force and replace it by a description that only involves the curvature of spacetime. I only touch on this in this show but will likely return to it in future shows.</p>\r\n<p>Here are the equations discussed in this show and the previous one:</p>\r\n<img alt=\"Sphere with latitude and longitude\" src=\"https://hackerpublicradio.org/eps/hpr3126/metric_equations.png\">\r\n\r\n',268,0,0,'CC-BY-SA','maths,relativity,physics,earth',0,0,1),
(3122,'2020-07-21','Devuan review - and commentary',2086,'Devuan  Review plus I talk about race','<p>\r\nFrom <a href=\"https://en.wikipedia.org/wiki/Devuan\">Wikipedia</a>, the free encyclopedia\r\n</p>\r\n<p>\r\n<b><a href=\"https://devuan.org/\">Devuan</a></b> is a fork Debian that uses sysvinit or OpenRC instead of systemd, which is the default in newer Debian releases. The Devuan development team aim to maintain compatibility with other init systems in the future and not detach Linux from other Unix systems.\r\n</p>\r\n<p>\r\n<small>[Edit: Ken 2020-07-21]</small>\r\n</p>\r\n<p>\r\nA significant portion of this show relates to the U.S Supreme Court decision in the case of <a href=\"https://www.supremecourt.gov/opinions/19pdf/18-9526_9okb.pdf\">McGIRT v. OKLAHOMA</a>, and speculation as to possible ramifications.\r\n</p>\r\n\r\n',377,0,0,'CC-BY-SA','Devuan, Debian, sysvinit, OpenRC, systemd',0,0,1),
(3190,'2020-10-23','GIMP Brushes',1219,'Paint tools, and particularly the Paintbrush Tool, require the use of brushes.','<p>Brushes are a key part of using Paint tools, and in particular the Paintbrush Tool. And in this episode we look at how to work with, edit, download, and save different brushes. We look at the Brush Dialog, and examine the different settings that make them easier to work with.</p>\r\n<p>Links:</p>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\" class=\"uri\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/paint-tools/\" class=\"uri\">https://www.ahuka.com/gimp/paint-tools/</a></li>\r\n<li><a href=\"https://franz.com/support/documentation/current/doc/cg/cg-pixmaps.htm\" class=\"uri\">https://franz.com/support/documentation/current/doc/cg/cg-pixmaps.htm</a></li>\r\n<li><a href=\"https://ergodic.ugr.es/cphys_pedro/unix/athena5.html\" class=\"uri\">https://ergodic.ugr.es/cphys_pedro/unix/athena5.html</a></li>\r\n<li><a href=\"https://conceptartempire.com/gimp-brushes/\" class=\"uri\">https://conceptartempire.com/gimp-brushes/</a></li>\r\n<li><a href=\"https://opensource.com/article/17/10/7-must-have-gimp-brushes\" class=\"uri\">https://opensource.com/article/17/10/7-must-have-gimp-brushes</a></li>\r\n<li><a href=\"https://logosbynick.com/free-download-gimp-brushes/\" class=\"uri\">https://logosbynick.com/free-download-gimp-brushes/</a></li>\r\n<li><a href=\"https://daviesmediadesign.com/the-best-free-brushes-for-gimp-in-2020/\" class=\"uri\">https://daviesmediadesign.com/the-best-free-brushes-for-gimp-in-2020/</a></li>\r\n<li><a href=\"https://www.makeuseof.com/tag/install-gimp-brushes/\" class=\"uri\">https://www.makeuseof.com/tag/install-gimp-brushes/</a></li>\r\n<li><a href=\"https://www.deviantart.com/\" class=\"uri\">https://www.deviantart.com/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/brushes/\" class=\"uri\">https://www.ahuka.com/gimp/brushes/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, brushes',0,0,1),
(3129,'2020-07-30','Followup on HPR3122',2157,'Followup on HPR3122 and *MORE* - percent *MORE* undescribed','https://www.youtube.com/watch?v=OFWCbGzxofU',377,0,0,'CC-BY-SA','Followups MORE',0,0,1),
(3127,'2020-07-28','HPR AudioBook Club 20 - Quarter Share',9131,'The HPR Audiobook Club reviews the audiobook Quarter Share by Nathan Lowell','<h1 id=\"in-this-episode-the-hpr-audiobook-club-discusses-the-audiobook-quarter-share-by-nathan-lowell\">In this episode the HPR Audiobook Club discusses the audiobook <a href=\"https://scribl.com/books/P2A75/quarter-share\">Quarter Share</a> by Nathan Lowell</h1>\r\n<hr />\r\n<h1 id=\"non-spoiler-thoughts\">Non-Spoiler Thoughts</h1>\r\n<hr />\r\n<ul>\r\n<li>This may be Pokey\'s all time favorite audiobook.</li>\r\n<li>This book takes the \'fish out of water\" trope and turns it on it head to a certain extent.</li>\r\n<li>Is Klaatu really Bilbo Baggins?</li>\r\n<li>Ishmael Wang is kinda our hero.</li>\r\n<li>So Traveller is a huge influence on these books.</li>\r\n<li>You know you want to deep dive on the lore of this universe. <a href=\"https://solarclipper.com/\">Go ahead</a>.</li>\r\n<li>Buy more Nathan Lowell books.</li>\r\n<li>WWID, What Would Ishmael Do</li>\r\n<li>Excellent recording, despite equipment of dubious quality.</li>\r\n<li>Solar Clipper Universe vs. StarDrifter Universe, and how we are fantastically lucky to have both.</li>\r\n</ul>\r\n<h1 id=\"beverage-reviews\">Beverage Reviews</h1>\r\n<hr />\r\n<p>As usual, the HPR AudioBook Club took some time to review the beverages that each of us were drinking during the episode</p>\r\n<ul>\r\n<li><strong>Thaj:</strong> Grapefruit Juice, simple, delicious.</li>\r\n<li><strong>x1101:</strong> Shipyards Signature Series IPA</li>\r\n<li><strong>pokey:</strong> I like Roma Sambuka in my coffee. It\'s muggy here today, so I\'m happy to discover that it\'s just as good in ice coffee. Roma Sambuka does not seem to have a website. The trick, imho, is to make your coffee as you normally would, then add the booze. Don\'t adjust for the booze, other than using a bigger glass.</li>\r\n<li><strong>FiftyOneFifty:</strong> <a href=\"https://olesmoky.com/pages/distillery\">Ole Smokey Tennessee Moonshine</a></li>\r\n</ul>\r\n<h1 id=\"things-we-talked-about\">Things We talked about</h1>\r\n<hr />\r\n<ul>\r\n<li>We definitely can\'t keep these books straight. Just read them all. You\'ll thank us.</li>\r\n<li>Pokey found a plot bullet, maybe. Thaj may disagree.</li>\r\n<li>All the characters are there for a reason.</li>\r\n<li>Nathan\'s reading voice is perfect for this series.</li>\r\n<li>Wormholes, wormholes, wormholes.</li>\r\n<li>We discuss the details of how to use the technology from this series to fly into a system.</li>\r\n<li>Pokey wishes promotions in the real world worked they way they work on the ship.</li>\r\n<li>Find the Podiobook Easter eggs.</li>\r\n</ul>\r\n<h1 id=\"our-next-audiobook\">Our Next Audiobook</h1>\r\n<hr />\r\n<p><a href=\"https://scribl.com/books/P98FB/the-terrible-business-of-salmon-and-dusk\">The Terrible Business of Salmon &amp; Dusk</a></p>\r\n<h1 id=\"the-next-audiobook-club-recording\">The Next Audiobook Club Recording</h1>\r\n<hr />\r\n<p>Right now we are working through a backlog of older episode that have already been recorded. Once that ends we fully anticipate recording new episodes with listener participation.</p>\r\n<h1 id=\"further-recommendations\">Further Recommendations</h1>\r\n<hr />\r\n<ul>\r\n<li>Daredevil</li>\r\n<li>The DCEU</li>\r\n<li>We talk about a picture I can no longer find a link for.</li>\r\n<li>Pokey gets a new <a href=\"https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.ytimg.com%2Fvi%2FMey_Q4ZhvD4%2Fmaxresdefault.jpg&amp;f=1&amp;nofb=1\">motorcycle</a>.</li>\r\n<li>FiftyOneFifty talks about actual computer stuff.</li>\r\n<li>Windows probs...</li>\r\n<li>Web Browsers editorializing the Internet.</li>\r\n<li>Is Flash dead yet?</li>\r\n</ul>\r\n<h1 id=\"feedback\">Feedback</h1>\r\n<hr />\r\n<p>Thank you very much for listening to this episode of the HPR AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you\'ll consider joining us next time we record a new episode. Please leave a few words in the episode\'s comment section.</p>\r\n<p>As always; remember to visit the HPR contribution page HPR could really use your <a href=\"https://hackerpublicradio.org/help_out.php\">help</a> right now.</p>\r\n<p>Sincerely, The HPR Audiobook Club</p>\r\n<p><em>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</em></p>\r\n<h1 id=\"our-audio\">Our Audio</h1>\r\n<hr />\r\n<p>This episode was processed using <a href=\"https://audacity.sourceforge.net/\">Audacity</a>. We\'ve been making small adjustments to our audio mix each month in order to get the best possible sound. Its been especially challenging getting all of our voices relatively level, because everyone has their own unique setup. Mumble is great for bringing us all together, and for recording, but it\'s not good at making everyone\'s voice the same volume. We\'re pretty happy with the way this month\'s show turned out, so we\'d like to share our editing process and settings with you and our future selves (who, of course, will have forgotten all this by then).</p>\r\n<p>We use the \"Truncate Silence\" effect with it\'s default settings to minimize the silence between people speaking. When used with it\'s default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes a conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying \"uuuuummmm.\" Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too aggressively your audio may sound sped up and choppy.</p>\r\n<p>Next we use the \"Compressor\" effect with the following settings:</p>\r\n<pre><code>    Threshold: -30db\r\n    Noise Floor: -50db\r\n    Ratio: 3:1\r\n    Attack Time: 0.2sec\r\n    Decay Time: 1.0 sec\r\n</code></pre>\r\n<p>\"Make-up Gain for 0db after compressing\" and \"compress based on peaks\" were both left un-checked.</p>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from the file and save them in a separate file for possible use as outtakes after the closing music.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can \"Mix and Render\" all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR server.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the .aup file to .FLAC so that we can paste a copy of the shownotes into the audio file\'s metadata.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being \"crashy\" but if you remember save after every major transform, you will wonder how it ever got that reputation.</p>\r\n',157,53,1,'CC-BY-SA','Nathan Lowell, Audiobooks, SciFi, Space Opera',0,0,1),
(3132,'2020-08-04','Keeping track of where I am',1362,'How I keep track of where I am','<p>This episode covers how I keep track of what I\'m listening to</p>\r\n<p>I almost never produced this podcast as I discovered part way through that I had covered it in my show \"Describing how I listen to podcasts PART 2\" (HPR 2889). I\'m conscious I have a tendency to repeat myself in real life, I think this is because I have such a terrible memory. Despite this I decided to continue with the episode but will go into subject in a bit more detail.</p>\r\n<p>These ideas slowly evolved over time and I think some of them may now be redundant. I think I need to do some tidying.</p>\r\n<p>As I\'ve previously mention I used cordless headphones to listen to my podcasts and audiobooks. The headphones come with base transmitter which was originally plugged into my old Compaq home server. This server was generally turned on when I came home from work and turned off before going to bed. Each night I had to remember which track I was on and where about in the track. I often forgot and had to try and find the place again. This quickly became a tiresome task.</p>\r\n<p>My first solution was to use some bash Kung Fu jiggery pokery to create list of files which I placed in each podcast folder. In the process I learned a bit about using bash commands.</p>\r\n<p>Command used to create index</p>\r\n<pre><code>id3v2 -l *.mp3 | grep &#39;TIT2&#39; | cut -c44- &gt;&gt; readme.txt\r\nid3v2 -l *.mp3 | grep &#39;TIT2&#39; | cut -c44- | egrep &#39;HPR[01][9][7-9]&#39; &gt;&gt; readme.txt\r\nid3v2 -l *.mp3 | grep &#39;TIT2&#39; | cut -c44- | egrep &#39;HPR[1-9]&#39; |less &gt;&gt; readme.txt\r\n========================================================\r\n========================================================</code></pre>\r\n<p>Example output</p>\r\n<pre><code>epr0006.mp3 - dosman                            complete\r\nhpr0010.mp3 - linux boot process, part 1        complete\r\nhpr0012.mp3 - zen virtulization                 complete\r\nhpr0018.mp3 - book review                       complete</code></pre>\r\n<p>The downside of this was that at the end of each night I had to remember to update my file lists recording what I had listened to and what position I was in within the track. From time to time I had to update this list by appending the latest episodes sitting on my server using the previous id3v2 command.</p>\r\n<p>As you can imagine this took up a fair amount of time and became very tiresome, I would sometimes forget to do it this would cause me a headache next time I started listening to my podcasts.</p>\r\n<p>My next solution involved creating a bash script that attempted to persuade my music player moc to find the track I was previously listening to.</p>\r\n<p>The script sometimes worked but it was a bit flaky and didn\'t always work.</p>\r\n<p>My final solution is in multiple parts</p>\r\n<p>The 1st part consists of a bash script and a log file, it\'s a handy way of checking the last podcast episode and last position, this information is recorded to the log file when the front end of moc is exited by hitting Q. Of course this doesn\'t work if mocp closes for any other reason ie if I forgot to hit Q or my Pi crashed.</p>\r\n<p>First script</p>\r\n<pre><code>~/scripts/podcasts\r\n\r\nquick lash up of script created 29/12/12 (DD/MM/YY)\r\nCreated to keep track of last position of listened podcast\r\n\r\nScript displays last 4 lines of logfile &quot;podcasts.txt&quot;\r\nThe four lines consist of a Dashed line separator, the last recorded Track\r\nTitle, last recorded Filename and the last recorded track position.\r\nThe script then pauses and displays a message saying\r\npress any key to continue.\r\nRuns mocp\r\nWhen the frontend of mocp exits\r\nThe script gets the current track filename\r\nIf the result is empty ie no filename then\r\n    exit with error saying (moc was not playing anything)\r\nif not empty\r\n    append a dashed line separator, the current track title, the current\r\n    filename, the current track position to logfile it then display last 4 lines\r\n    of logfile and exits the script\r\n\r\nSo in essence I get a reminder of the track and position I&#39;m listening to\r\nevery time a start or stop the front end of moc\r\n\r\nThe logfile located at /home/pi/scripts/podcast.txt\r\npodcasts.txt as of 4th October 2019 is 168KB in size and currently has 4904\r\nlines as each entry has 4 lines this means it currently contains 1226 entries.</code></pre>\r\n<p>The 2nd script I use runs as a cron job every night at 11.01pm. This script keeps track of all the files copied to the MP3 directory of my raspberry pi, this is where I put my podcasts that I want to listen to. I can then grep the log file to see the latest version of a particular episodes that\'s been copied to my mp3 directory as from time to time I delete the episodes I\'ve listened to before copying new ones in.</p>\r\n<pre><code>~/scripts/update-podcast-episode-log\r\n Below are the comments taken directly from my script\r\nCreated to keep track of the latest podcast episode I&#39;ve\r\nlistened to it does this by logging the contents\r\nof the mp3 directory on the raspberry pi.\r\nThe script checks the logfile exists, then checks the\r\npodcast (mp3) directory exists, it then use the find\r\ncommand to list the files in the mp3 directory and send the  listing to a log\r\nfile, a date stamp is added at the beginning of the listing.\r\nV1 11 July 2015\r\n\r\nLogfile located at /home/pi/files/logs/podcast-episodes.log\r\nAs of the 4th October 2019 the log file is an impressive 688Kb containing\r\na whopping 28,158 lines, the first entry was dated  15th July 2013</code></pre>\r\n<p>The 3rd script is also runs as a cron job every every night at 11.00pm</p>\r\n<pre><code>/home/pi/scripts/update-podcast-position-log\r\nBelow are the comments taken directly from my script\r\nCreated to log current position of current podcast\r\nThe script checks the logfile exists, then checks that mocp  is installed on\r\nthe system it then writes a timestamp, and track position information to\r\na logfile using moc with -Q flag to get current track position, track title\r\n&amp; file name\r\nV1 Created by MrX 11th July 2015\r\n\r\nLogfile located at /home/pi/files/logs/podcast-position.log\r\nSize is 148Kb as of 4th October 2019 currently has a 1495 lines, the first\r\nentry was dated 15th July 2013</code></pre>\r\n<p>Example logfile output</p>\r\n<pre><code>15:09:06:23:01 | 01:12 | Dave Morriss - HPR1811: Life and Times of a Geek part 2 (Hacker Public Radio) | hpr1811.mp3\r\n\r\nYY:MM:DD:HH:MM | Track position (MM:SS) | ID3 track title | Filename</code></pre>\r\n<p>The 4th script is identical to the previous script but is used to update the current audiobook position to a log file, like the previous script it runs as a cron job every night.</p>\r\n<pre><code>/home/pi/scripts/update-audiobook-position-log</code></pre>\r\n<p>The 5th and final script</p>\r\n<pre><code>home/pi/scripts/logs</code></pre>\r\n<p>Was created to easily view podcast and audiobook logs The script first checks that the logfiles exists, then displays the last three lines of my podcasts and audiobooks logs so I can quickly see the most recent episode positions that were stored by the cron jobs at 11pm.</p>\r\n<p>Logs are:-</p>\r\n<pre><code>/home/pi/files/logs/podcast-position.log\r\n/home/pi/files/logs/audiobook-position.log</code></pre>\r\n<h3 id=\"v1-created-by-mrx-13th-july-2015\">V1 Created by MrX 13th July 2015</h3>\r\n<h3 id=\"v2-updated-by-mrx-8th-august-2015\">V2 Updated by MrX 8th August 2015</h3>\r\n<p>This added an option to seach for a string in my episodes position logs to easily find out what the last episode I listened to of a particular book or podcast, the output is piped to less as numerous lines can be returned.</p>\r\n<p>if more than one argument is given then it displays an error and usage message</p>\r\n<h3 id=\"v3-updated-by-mrx-21st-jul-2017\">V3 Updated by MrX 21st Jul 2017</h3>\r\n<p>If a single argument is given now jumps to end of list rather than beginning, this was achieved by using the +G flag with less command.</p>\r\n<p>The script displays contents of logfiles</p>\r\n<pre><code>/home/pi/files/logs/podcast-position.log\r\n/home/pi/files/logs/audiobook-position.log</code></pre>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3132/logs\" class=\"uri\">https://hackerpublicradio.org/eps/hpr3132/logs</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3132/update-podcast-episode-log\" class=\"uri\">https://hackerpublicradio.org/eps/hpr3132/update-podcast-episode-log</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3132/update-podcast-position-log\" class=\"uri\">https://hackerpublicradio.org/eps/hpr3132/update-podcast-position-log</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3132/index.html\" class=\"uri\">https://hackerpublicradio.org/eps/hpr3132/index.html</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3132/update-audiobook-position-log\" class=\"uri\">https://hackerpublicradio.org/eps/hpr3132/update-audiobook-position-log</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps/hpr3132/podcasts\" class=\"uri\">https://hackerpublicradio.org/eps/hpr3132/podcasts</a></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Linux, bash, podcasts, audio, scripts',0,0,1),
(3149,'2020-08-27','HPR AudioBook Club 21  - The Terrible Business of Salmon and Dusk',6342,'The HPR Audiobook Club reviews the audiobook The Terrible Business of Salmon and Dusk by Myke Bartle','<h1 id=\"in-this-episode-the-hpr-audiobook-club-discusses-the-audiobook-the-terrible-business-of-salmon--dusk-by-myke-bartlett\">In this episode the HPR Audiobook Club discusses the audiobook <a href=\"https://scribl.com/books/P98FB/the-terrible-business-of-salmon-and-dusk\">The Terrible Business of Salmon &amp; Dusk</a> by Myke Bartlett</h1>\r\n<hr />\r\n<h1 id=\"non-spoiler-thoughts\">Non-Spoiler Thoughts</h1>\r\n<hr />\r\n<ul>\r\n<li>The terrible business of trying to listen to this book (technical difficulties abound)</li>\r\n<li>We talk about the audio players we tried to get around the technical difficulties.</li>\r\n<li>This book is a weird world.</li>\r\n<li>The reading performance is great, and the audio quality is good (minus technical difficulties).</li>\r\n<li>The is a clear distinction between characters by the reader using voice and accents.</li>\r\n<li>This pushes the definition of \"magical realism\". Perhaps \"surrealistic\" is a better description.</li>\r\n<li>The world is slightly more interesting than the characters.</li>\r\n</ul>\r\n<h1 id=\"beverage-reviews\">Beverage Reviews</h1>\r\n<hr />\r\n<p>As usual, the HPR AudioBook Club took some time to review the beverages that each of us were drinking during the episode</p>\r\n<ul>\r\n<li><strong>Thaj:</strong> Water and <a href=\"https://f-droid.org/en/packages/de.ph1b.audiobook/\">Material Player which is now called Voice</a></li>\r\n<li><strong>x1101:</strong> <a href=\"https://www.blacksheepbrewery.com/our-beers/monty-python/holy-grail/\">Monty Python\'s Holy <s>Gr</s>ail - Black Knight\'s Reserve</a></li>\r\n<li><strong>pokey:</strong> <a href=\"https://longtrail.com/age-verification?destination=beers/double-bag%C2%AE\">Long Trail Double Bag Ale</a> and <a href=\"https://racewithrusty.com/\">The Rusty Wallace Formula Experience</a></li>\r\n</ul>\r\n<h1 id=\"things-we-talked-about\">Things We talked about</h1>\r\n<hr />\r\n<ul>\r\n<li>Why are two sticks of chalk important?</li>\r\n<li>Does this end by not ending?</li>\r\n<li>Thaj thinks this is trying too hard to be clever. Both and Thaj and x1101 think Tincture does weird better.</li>\r\n<li>Is the fallen a metaphor for depression?</li>\r\n<li>What is going on with The Albion?</li>\r\n<li>\"There are a <em>LOT</em> of things that can use a little more explanation.\"</li>\r\n<li>Thaj thinks <a href=\"https://en.wikipedia.org/wiki/The_Rainbow_Thief\">The Rainbow Thief</a> and <a href=\"https://en.wikipedia.org/wiki/Adjustment_Team\">Adjustment Team</a> may be inspirations for this story. Pokey raises with Sherlock Holmes and Doctor Who.</li>\r\n<li>Also <a href=\"https://en.wikipedia.org/wiki/Kato_(The_Green_Hornet)\">Kato</a> from The Green Hornet...</li>\r\n<li>We disagree about how the time travel was done.</li>\r\n<li>Nero is the character we all felt the easiest to follow.</li>\r\n</ul>\r\n<h1 id=\"our-next-audiobook\">Our Next Audiobook</h1>\r\n<hr />\r\n<p><a href=\"https://scribl.com/books/P4C82/murder-at-avedon-hill\">Murder at Avedon Hill</a> by P.G. Holyfield</p>\r\n<h1 id=\"the-next-audiobook-club-recording\">The Next Audiobook Club Recording</h1>\r\n<hr />\r\n<p>Right now we are working through a backlog of older episode that have already been recorded. Once that ends we fully anticipate recording new epsiodes with listener participation.</p>\r\n<h1 id=\"further-recommendations\">Further Recommendations</h1>\r\n<hr />\r\n<ul>\r\n<li>Pokey goes to the races.</li>\r\n<li>Sometimes it\'s just easier to nuke and pave.</li>\r\n<li>New (Old) phones.</li>\r\n<li>Android File Explorers</li>\r\n<li>Audio Book Player Link: <a href=\"https://material-player.en.uptodown.com/android\">https://material-player.en.uptodown.com/android</a></li>\r\n<li>F-Droid link: Audiobook player now renamed Voice <a href=\"https://f-droid.org/en/packages/de.ph1b.audiobook/\">https://f-droid.org/en/packages/de.ph1b.audiobook/</a></li>\r\n</ul>\r\n<h1 id=\"feedback\">Feedback</h1>\r\n<hr />\r\n<p>Thank you very much for listening to this episode of the HPR AudioBookClub. We had a great time recording this show, and we hope you enjoyed it as well. We also hope you\'ll consider joining us next time we record a new episode. Please leave a few words in the episode\'s comment section.</p>\r\n<p>As always; remember to visit the HPR contribution page HPR could really use your <a href=\"https://hackerpublicradio.org/help_out.php\">help</a> right now.</p>\r\n<p>Sincerely, The HPR Audiobook Club</p>\r\n<p><em>P.S. Some people really like finding mistakes. For their enjoyment, we always include a few.</em></p>\r\n<h1 id=\"our-audio\">Our Audio</h1>\r\n<hr />\r\n<p>This episode was processed using <a href=\"https://audacity.sourceforge.net/\">Audacity</a>. We\'ve been making small adjustments to our audio mix each month in order to get the best possible sound. Its been especially challenging getting all of our voices relatively level, because everyone has their own unique setup. Mumble is great for bringing us all together, and for recording, but it\'s not good at making everyone\'s voice the same volume. We\'re pretty happy with the way this month\'s show turned out, so we\'d like to share our editing process and settings with you and our future selves (who, of course, will have forgotten all this by then).</p>\r\n<p>We use the \"Truncate Silence\" effect with it\'s default settings to minimize the silence between people speaking. When used with it\'s default (or at least reasonable) settings, Truncate Silence is extremely effective and satisfying. It makes everyone sound smarter, it makes the file shorter without destroying actual content, and it makes a conversations sound as easy and fluid during playback as it was while it was recorded. It can be even more effective if you can train yourself to remain silent instead of saying \"uuuuummmm.\" Just remember to ONLY pass the file through Truncate Silence ONCE. If you pass it through a second time, or if you set it too aggressively your audio may sound sped up and choppy.</p>\r\n<p>Next we use the \"Compressor\" effect with the following settings:</p>\r\n<pre><code>    Threshold: -30db\r\n        Noise Floor: -50db\r\n        Ratio: 3:1\r\n        Attack Time: 0.2sec\r\n        Decay Time: 1.0 sec\r\n</code></pre>\r\n<p>\"Make-up Gain for 0db after compressing\" and \"compress based on peaks\" were both left un-checked.</p>\r\n<p>After compressing the audio we cut any pre-show and post-show chatter from the file and save them in a separate file for possible use as outtakes after the closing music.</p>\r\n<p>We adjust the Gain so that the VU meter in Audacity hovers around -12db while people are speaking, and we try to keep the peaks under -6db, and we adjust the Gain on each of the new tracks so that all volumes are similar, and more importantly comfortable. Once this is done we can \"Mix and Render\" all of our tracks into a single track for export to the .FLAC file which is uploaded to the HPR server.</p>\r\n<p>At this point we listen back to the whole file and we work on the shownotes. This is when we can cut out anything that needs to be cut, and we can also make sure that we put any links in the shownotes that were talked about during the recording of the show. We finish the shownotes before exporting the .aup file to .FLAC so that we can paste a copy of the shownotes into the audio file\'s metadata.</p>\r\n<p>At this point we add new, empty audio tracks into which we paste the intro, outro and possibly outtakes, and we rename each track accordingly.</p>\r\n<p>Remember to save often when using Audacity. We like to save after each of these steps. Audacity has a reputation for being \"crashy\" but if you remember save after every major transform, you will wonder how it ever got that reputation.</p>\r\n',157,53,1,'CC-BY-SA','Audiobook, Review, Creative Commons',0,0,1),
(3133,'2020-08-05','Quick tip - Using MPV with Youtube links',124,'I give a quick tip on shortcut keys for watching Youtube or other video sites in MPV','<h3 id=\"idea\">Idea:</h3>\r\n<p>Quickly copy a Youtube or other video site, and open in the MPV media player.</p>\r\n<h4 id=\"plugins\">Plugins:</h4>\r\n<p>Vim Vixen for Firefox<br />\r\n<a href=\"https://addons.mozilla.org/en-US/firefox/addon/vim-vixen\" class=\"uri\">https://addons.mozilla.org/en-US/firefox/addon/vim-vixen</a></p>\r\n<p>Surfingkeys for Chrome/Chromium browser<br />\r\n<a href=\"https://chrome.google.com/webstore/detail/surfingkeys/gfbliohnnapiefjpjlpjnehglfpaknnc?hl=en-US\" class=\"uri\">https://chrome.google.com/webstore/detail/surfingkeys/gfbliohnnapiefjpjlpjnehglfpaknnc?hl=en-US</a></p>\r\n<h4 id=\"script\">Script:</h4>\r\n<pre><code>#!/bin/bash\r\n## mpvurl\r\n\r\nurl=`xsel -o -b`\r\necho $url\r\nmpv $url</code></pre>\r\n<p>Rename <code>/usr/bin/vlc</code> to <code>/usr/bin/vlc.old</code></p>\r\n<p>Copy script to <code>/usr/bin/vlc</code> and <code>chmod +x /usr/bin/vlc</code></p>\r\n<h4 id=\"how-to-use\">How to use:</h4>\r\n<p>Vim Vixen copy is \'y\' Surfingkeys copy is \'yy\'</p>\r\n<p>Shortcut to open copied video url is Shift-Mod-p, with Mod being the windows key</p>\r\n<p>Tested with Gnome3, Xfce and i3</p>\r\n<p>In i3, press Mod+v then Mod+s.</p>\r\n<p>Any video played this way will be stacked under Firefox/Chromium for the rest of your session.</p>\r\n<h4 id=\"config\">Config:</h4>\r\n<p>In ~/.config/i3/config</p>\r\n<pre><code>#Paste url into mpv player\r\nbindsym $mod+Shift+p exec vlc</code></pre>\r\n<h3 id=\"example-screenshots\">Example screenshots:</h3>\r\n<p>Example of stacked Firefox/MPV layout<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3133/img_001.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3133/img_001_thumbnail.png\" alt=\"Example of stacked Firefox/MPV layout\" /></a></p>\r\n<p>For Gnome3 the setting can be reached with Mod (Windows key) and Shortcuts<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3133/img_002.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3133/img_002_thumbnail.png\" alt=\"For Gnome3 the setting can be reached with Mod (Windows key) and Shortcuts\" /></a></p>\r\n<p>And the Default Applications need to be changed<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3133/img_003.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3133/img_003_thumbnail.png\" alt=\"And the Default Applications need to be changed\" /></a></p>\r\n<p>The setting for Shortcuts in Xfce looks like this<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3133/img_004.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3133/img_004_thumbnail.png\" alt=\"The setting for Shortcuts in Xfce looks like this\" /></a></p>\r\n',318,0,0,'CC-BY-SA','Video, media, bash, i3, Gnome3, Xfce',0,0,1),
(3416,'2021-09-06','HPR Community News for August 2021',5765,'Ken\'s not available so MrX joins Dave to talk about the shows and comments in August','<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=3391\" target=\"_blank\">3391</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-08-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3391\" target=\"_blank\">HPR Community News for July 2021</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=3392\" target=\"_blank\">3392</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-08-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3392\" target=\"_blank\">Structured error reporting</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3393\" target=\"_blank\">3393</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-08-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3393\" target=\"_blank\">We need to talk about XML</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=3394\" target=\"_blank\">3394</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-08-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3394\" target=\"_blank\">Be an XML star with xmlstarlet</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=3395\" target=\"_blank\">3395</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-08-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3395\" target=\"_blank\">Hacking Stories with Reacted: part 1</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=3396\" target=\"_blank\">3396</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-08-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3396\" target=\"_blank\">Card roles in Magic the Gathering</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=3397\" target=\"_blank\">3397</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-08-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3397\" target=\"_blank\">What is a PineTime</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=3398\" target=\"_blank\">3398</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-08-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3398\" target=\"_blank\">Anacron</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=3399\" target=\"_blank\">3399</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-08-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3399\" target=\"_blank\">Linux Inlaws S01E36: Open Source Licenses</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3400\" target=\"_blank\">3400</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-08-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3400\" target=\"_blank\">Normal Layer Modes: Normal, Dissolve, Color Erase</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=3401\" target=\"_blank\">3401</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-08-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3401\" target=\"_blank\">Mana hacks</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=3402\" target=\"_blank\">3402</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-08-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3402\" target=\"_blank\">Reading a manifesto: Declaration of Digital Autonomy</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3403\" target=\"_blank\">3403</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-08-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3403\" target=\"_blank\">Forth on microcontrollers</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3404\" target=\"_blank\">3404</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-08-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3404\" target=\"_blank\">Suse 15.3 Leap</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3405\" target=\"_blank\">3405</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-08-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3405\" target=\"_blank\">Hacking Stories with Reacted: part 2</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=3406\" target=\"_blank\">3406</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-08-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3406\" target=\"_blank\">A study of cards in games</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=3407\" target=\"_blank\">3407</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-08-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3407\" target=\"_blank\">Software Freedom Podcast</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=3408\" target=\"_blank\">3408</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-08-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3408\" target=\"_blank\">Composting</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=3409\" target=\"_blank\">3409</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-08-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3409\" target=\"_blank\">Linux Inlaws S01E37: All about Hacker Public Radio</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3410\" target=\"_blank\">3410</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-08-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3410\" target=\"_blank\">Operating Systems</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=3411\" target=\"_blank\">3411</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-08-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3411\" target=\"_blank\">Dominion card game</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=3412\" target=\"_blank\">3412</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-08-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3412\" target=\"_blank\">Reading a license: Creative Commons Attribution ShareAlike 3.0 Unported</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</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 24 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 9 comments on\n5 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3323#comments\" target=\"_blank\">hpr3323</a></strong>\n(2021-04-28) \"<em>The alternate Internet you never knew existed</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=3323#1\" target=\"_blank\">Comment 1</a>:\nbjb on 2021-08-29:\n\"Interesting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3331#comments\" target=\"_blank\">hpr3331</a></strong>\n(2021-05-10) \"<em>Audio for Podcasting: Episode 1 - The Microphone</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3331#2\" target=\"_blank\">Comment 2</a>:\nbjb on 2021-08-08:\n\"Question about mic positioning\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3377#comments\" target=\"_blank\">hpr3377</a></strong>\n(2021-07-13) \"<em>Chromebook support and more</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=3377#2\" target=\"_blank\">Comment 2</a>:\nGuardian on 2021-08-08:\n\"Lousy sound quality abuses audience.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3382#comments\" target=\"_blank\">hpr3382</a></strong>\n(2021-07-20) \"<em>How I fixed a fault on my car for free thanks to YouTube</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0201.html\" target=\"_blank\">MrX</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3382#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2021-08-06:\n\"I hadn\'t quite appreciated what was happening\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3382#2\" target=\"_blank\">Comment 2</a>:\nMrX on 2021-08-07:\n\"Oops\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3382#3\" target=\"_blank\">Comment 3</a>:\nShortFatBaldGuy on 2021-08-28:\n\"Appreciation for episode\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3388#comments\" target=\"_blank\">hpr3388</a></strong>\n(2021-07-28) \"<em>Linux Inlaws S01E35: The Free Software Foundation Europe</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3388#2\" target=\"_blank\">Comment 2</a>:\ndragestil on 2021-08-07:\n\"Regarding RMS\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3388#3\" target=\"_blank\">Comment 3</a>:\nBob on 2021-08-10:\n\"Clarification\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3388#4\" target=\"_blank\">Comment 4</a>:\ndragestil on 2021-08-11:\n\"Re: Clarification\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 15 comments on 7 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3393#comments\" target=\"_blank\">hpr3393</a></strong>\n(2021-08-04) \"<em>We need to talk about XML</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=3393#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-08-06:\n\"Thank you.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3393#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-08-08:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3394#comments\" target=\"_blank\">hpr3394</a></strong>\n(2021-08-05) \"<em>Be an XML star with xmlstarlet</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=3394#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2021-08-05:\n\"My one cool xmlstarlet trick\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3395#comments\" target=\"_blank\">hpr3395</a></strong>\n(2021-08-06) \"<em>Hacking Stories with Reacted: part 1</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=3395#1\" target=\"_blank\">Comment 1</a>:\nnorrist on 2021-08-06:\n\"Please do more\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3395#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-08-09:\n\"I loved this story\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3395#3\" target=\"_blank\">Comment 3</a>:\nBeeza on 2021-08-23:\n\"Social Engineering Access\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3399#comments\" target=\"_blank\">hpr3399</a></strong>\n(2021-08-12) \"<em>Linux Inlaws S01E36: Open Source Licenses</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3399#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-08-14:\n\"Another good show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3400#comments\" target=\"_blank\">hpr3400</a></strong>\n(2021-08-13) \"<em>Normal Layer Modes: Normal, Dissolve, Color Erase</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=3400#1\" target=\"_blank\">Comment 1</a>:\nbjb on 2021-08-12:\n\"Thanks\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3400#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-08-12:\n\"You are most welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3407#comments\" target=\"_blank\">hpr3407</a></strong>\n(2021-08-24) \"<em>Software Freedom Podcast</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=3407#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2021-08-27:\n\"Great Show.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3410#comments\" target=\"_blank\">hpr3410</a></strong>\n(2021-08-27) \"<em>Operating Systems</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=3410#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-08-27:\n\"Love this history\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3410#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-08-27:\n\"You are most welcome\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3410#3\" target=\"_blank\">Comment 3</a>:\nJan on 2021-08-27:\n\"Observations\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3410#4\" target=\"_blank\">Comment 4</a>:\nKevin O&#39;Brien on 2021-08-30:\n\"Audio quality\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3410#5\" target=\"_blank\">Comment 5</a>:\nKen Fallon on 2021-08-30:\n\"Can you define broken\"</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/2021-August/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-August/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>This month 10 additional shows in the range 1-870 have been uploaded.</p>\n<p>Since we don\'t want to upload shows without summaries or tags the <em>old shows</em> and <em>tag and summary</em> projects are now tied together. So we will be all the more welcoming of tag and summary updates submitted as described on the <a href=\"https://hackerpublicradio.org/report_missing_tags.php\">summary page</a>.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0293.html\">Rho`n</a>, <a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken Fallon</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></b></p>\n<p>Over the period tags and/or summaries have been added to 108 shows which were without them.</p>\n<p>There are currently 114 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3436,'2021-10-04','HPR Community News for September 2021',3268,'HPR Volunteers talk about shows released and comments posted in September 2021','<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/0395.html\" target=\"_blank\">CoGo</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</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=3413\" target=\"_blank\">3413</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-09-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3413\" target=\"_blank\">Bash snippet - using coproc with SQLite</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=3414\" target=\"_blank\">3414</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-09-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3414\" target=\"_blank\">Critical Thinking may make You Critical of the Covid Crisis</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0395.html\" target=\"_blank\">CoGo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3415\" target=\"_blank\">3415</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-09-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3415\" target=\"_blank\">Hacking Stories with Reacted: part 3</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=3416\" target=\"_blank\">3416</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-09-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3416\" target=\"_blank\">HPR Community News for August 2021</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=3417\" target=\"_blank\">3417</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-09-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3417\" target=\"_blank\">Ceph cluster hardware</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=3418\" target=\"_blank\">3418</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-09-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3418\" target=\"_blank\">My gEeeky Experiment - Part 2</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=3419\" target=\"_blank\">3419</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-09-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3419\" target=\"_blank\">Linux Inlaws S01E38: Tiny kernels</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3420\" target=\"_blank\">3420</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-09-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3420\" target=\"_blank\">Normal Layer Modes: Erase, Merge, and Split</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=3421\" target=\"_blank\">3421</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-09-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3421\" target=\"_blank\">BlacKernel\'s Journey Into Technology: Episode 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3422\" target=\"_blank\">3422</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-09-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3422\" target=\"_blank\">Update about Phones and Devices</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3423\" target=\"_blank\">3423</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-09-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3423\" target=\"_blank\">\"upg.sh\" my \"dump.txt\" to \"note.md\"</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=3424\" target=\"_blank\">3424</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-09-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3424\" target=\"_blank\">Infosec Podcasts Part 6 - Infosec Leadership</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=3425\" target=\"_blank\">3425</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-09-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3425\" target=\"_blank\">Hacking Stories with Reacted: part 4</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=3426\" target=\"_blank\">3426</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-09-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3426\" target=\"_blank\">Rust 101: Episode 0 - What in Tarnishing?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3427\" target=\"_blank\">3427</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-09-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3427\" target=\"_blank\">Ranger for the Win!</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3428\" target=\"_blank\">3428</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-09-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3428\" target=\"_blank\">Bad disk rescue</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=3429\" target=\"_blank\">3429</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-09-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3429\" target=\"_blank\">Linux Inlaws S01E39: Ubuntu and the Community</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3430\" target=\"_blank\">3430</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-09-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3430\" target=\"_blank\">Booting</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=3431\" target=\"_blank\">3431</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-09-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3431\" target=\"_blank\">Living in the Terminal</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3432\" target=\"_blank\">3432</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-09-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3432\" target=\"_blank\">Reading a license: Creative Commons Attribution ShareAlike 4.0 International</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3433\" target=\"_blank\">3433</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-09-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3433\" target=\"_blank\">A Squirrels thoughts about RMS</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=3434\" target=\"_blank\">3434</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-09-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3434\" target=\"_blank\">From 0 to K8s in 30 minutes</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0078.html\" target=\"_blank\">klaatu</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 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3297#comments\" target=\"_blank\">hpr3297</a></strong>\n(2021-03-23) \"<em>Nextcloud Application Updating</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0273.html\" target=\"_blank\">ToeJet</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3297#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2021-09-21:\n\"+1\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3377#comments\" target=\"_blank\">hpr3377</a></strong>\n(2021-07-13) \"<em>Chromebook support and more</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=3377#3\" target=\"_blank\">Comment 3</a>:\nFSA on 2021-09-30:\n\"Sound Quality Trolling?\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 25 comments on 13 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3413#comments\" target=\"_blank\">hpr3413</a></strong>\n(2021-09-01) \"<em>Bash snippet - using coproc with SQLite</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=3413#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2021-09-01:\n\"New tool for my toolbox\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3413#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2021-09-02:\n\"Excellent detail!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3413#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2021-09-02:\n\"Re: New tool for my toolbox\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3413#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2021-09-02:\n\"Re: Excellent detail!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3414#comments\" target=\"_blank\">hpr3414</a></strong>\n(2021-09-02) \"<em>Critical Thinking may make You Critical of the Covid Crisis</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0395.html\" target=\"_blank\">CoGo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3414#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-09-02:\n\"Controversial topic... Love it!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3414#2\" target=\"_blank\">Comment 2</a>:\ndrad on 2021-09-03:\n\"Great Episode!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3414#3\" target=\"_blank\">Comment 3</a>:\nBarbara Ann Walko on 2021-09-09:\n\"hpr3414\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3414#4\" target=\"_blank\">Comment 4</a>:\nJoel on 2021-09-09:\n\"Excellent analysis!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3415#comments\" target=\"_blank\">hpr3415</a></strong>\n(2021-09-03) \"<em>Hacking Stories with Reacted: part 3</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=3415#1\" target=\"_blank\">Comment 1</a>:\nWillingness on 2021-09-04:\n\"Awesome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3416#comments\" target=\"_blank\">hpr3416</a></strong>\n(2021-09-06) \"<em>HPR Community News for August 2021</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=3416#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-09-07:\n\"My former profession\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3417#comments\" target=\"_blank\">hpr3417</a></strong>\n(2021-09-07) \"<em>Ceph cluster hardware</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=3417#1\" target=\"_blank\">Comment 1</a>:\nMichael on 2021-09-08:\n\"Why Ceph?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3420#comments\" target=\"_blank\">hpr3420</a></strong>\n(2021-09-10) \"<em>Normal Layer Modes: Erase, Merge, and Split</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=3420#1\" target=\"_blank\">Comment 1</a>:\nmu.rupeshkumar@gmail,com on 2021-09-12:\n\"can\'t hear in Mobile\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3420#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2021-09-13:\n\"Fixed\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3421#comments\" target=\"_blank\">hpr3421</a></strong>\n(2021-09-13) \"<em>BlacKernel\'s Journey Into Technology: Episode 1</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3421#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-09-13:\n\"Welcome &amp; thanks for sharing!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3423#comments\" target=\"_blank\">hpr3423</a></strong>\n(2021-09-15) \"<em>\"upg.sh\" my \"dump.txt\" to \"note.md\"</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=3423#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-09-15:\n\"Great work\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3426#comments\" target=\"_blank\">hpr3426</a></strong>\n(2021-09-20) \"<em>Rust 101: Episode 0 - What in Tarnishing?</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3426#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-09-20:\n\"Thank you.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3426#2\" target=\"_blank\">Comment 2</a>:\nHipstre on 2021-09-20:\n\"Rust 101, Episode 0\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3427#comments\" target=\"_blank\">hpr3427</a></strong>\n(2021-09-21) \"<em>Ranger for the Win!</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3427#1\" target=\"_blank\">Comment 1</a>:\njrullo on 2021-09-22:\n\"Vim lover\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3429#comments\" target=\"_blank\">hpr3429</a></strong>\n(2021-09-23) \"<em>Linux Inlaws S01E39: Ubuntu and the Community</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3429#1\" target=\"_blank\">Comment 1</a>:\nClinton Roy on 2021-09-23:\n\"Just the usual complaint\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3430#comments\" target=\"_blank\">hpr3430</a></strong>\n(2021-09-24) \"<em>Booting</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=3430#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-09-24:\n\"Trip down memory lane...\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3430#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-09-24:\n\"You are most welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3431#comments\" target=\"_blank\">hpr3431</a></strong>\n(2021-09-27) \"<em>Living in the Terminal</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3431#1\" target=\"_blank\">Comment 1</a>:\nOperat0r on 2021-09-27:\n\"Kids these days!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3431#2\" target=\"_blank\">Comment 2</a>:\nb-yeezi on 2021-09-28:\n\"+1 for cnus\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3431#3\" target=\"_blank\">Comment 3</a>:\nsesamemucho on 2021-09-29:\n\"The text\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3431#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2021-09-29:\n\"Very enjoyable\"</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/2021-September/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-September/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>This month 5 additional shows in the range 1-870 have been uploaded.</p>\n<p>Since we don\'t want to upload shows without summaries or tags the <em>old shows</em> and <em>tag and summary</em> projects are now tied together. So we will be all the more welcoming of tag and summary updates submitted as described on the <a href=\"https://hackerpublicradio.org/report_missing_tags.php\">summary page</a>.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0293.html\">Rho`n</a></b></p>\n<p>Over the period tags and/or summaries have been added to 76 shows which were without them.</p>\n<p>There are currently 38 shows which need a summary and/or tags.</p>\n<p>If you would like to contribute to the tag/summary project visit the summary page at <a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a> and follow the instructions there.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3134,'2020-08-06','Tomorrowland 2020',584,'Explaining the experience of the first virtual music festival','<p>The music festival Tomorrowland was made virtual this year.</p>\r\n<p>Usually, they have 200k visitors over two weekends on a small area of 128 football (soccer) fields. This year they digitally did it all, which was engaging and fun. I\'ve never attended, but I loved this year, where I could be a part of the experience.</p>\r\n<p>This recording was made at 01.00 AM right after the festival had ended, so I still had the hype, totally sober but euphoric.</p>\r\n<ul>\r\n<li><p>Katy Perry<br />\r\n<a href=\"https://www.youtube.com/watch?v=i65puYqFh6Q\" class=\"uri\">https://www.youtube.com/watch?v=i65puYqFh6Q</a></p></li>\r\n<li><p>David Guetta<br />\r\n<a href=\"https://www.youtube.com/watch?v=xs7eqBkQCYM\" class=\"uri\">https://www.youtube.com/watch?v=xs7eqBkQCYM</a></p></li>\r\n</ul>\r\n',382,0,0,'CC-BY-SA','music,dance,house,festival,tomorrowland',0,0,1),
(3136,'2020-08-10','Matchbox Restoration Part 6',286,'Matchbox Cars, Diecast Models, Restoration, Reassembly of the model','<p>Good day to all in HPR land, this is Tony Hughes coming to you again from Blackpool in the UK. To recap this is the 6th in a series of shows about my hobby of restoring Matchbox and other Die cast models. In the last show I went through the process I use to paint and prepare the casting for reassembly. In this episode I will discuss how I put back the wheels onto the base and reassemble the final model, before revealing in the show note pictures how the model came out.</p>\r\n<p>So before putting back the plastic wheels onto the axles I polished the axles in my drill bit using a little bit of fine wet and dry emery paper.</p>\r\n<p>Picture 001<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_001.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_001_thumbnail.jpg\" alt=\"Picture 001\" /></a></p>\r\n<p>After selecting the best 4 of the plastic tyres from the models we originally dismantled I washed these in a little soapy water and after drying they these were fit for putting back on the restored model. The cleaned up axle is assembled on the base with the first tyre in place with the large dome end of the axle sat on a nail punch held in a vice. The second tyre is then placed on the axle and holding this all in place a small hammer is used to peen over the end of the axle by hitting it gently so the end is peened over but the axle does not bend. It is possible to do this stage in a drill press using another nail punch in the drill chuck, but I do not have a drill press at the moment, so have to do this the old school way, with a bit of brute force and ignorance.</p>\r\n<p>Picture 002<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_002.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_002_thumbnail.jpg\" alt=\"Picture 002\" /></a></p>\r\n<p>So we now have all the parts ready for reassembly. The base has the axles and wheels back on, the screen has been polished and the plastic seating given a clean in soapy water and dried, and the body is repainted and ready to go.</p>\r\n<p>Picture 003<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_003.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_003_thumbnail.jpg\" alt=\"Picture 003\" /></a></p>\r\n<p>So being careful not to damage the paint work the casting is placed with the base side up and the window unit is placed into it.</p>\r\n<p>Picture 004<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_004.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_004_thumbnail.jpg\" alt=\"Picture 004\" /></a></p>\r\n<p>Followed by the plastic interior, the eagle eyed among you will notice a colour change to the body work as I forgot to take a picture of this stage on the gold model. You have to ensure that the tab with the tow hitch (yes Matchbox put a tow hitch on a posh car) is fully over the retaining post or the base will not seat properly.</p>\r\n<p>Picture 005<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_005.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_005_thumbnail.jpg\" alt=\"Picture 005\" /></a></p>\r\n<p>The base is then placed back on the model by sliding it over the tab at the front and clicking it down over the rivet post.</p>\r\n<p>Picture 006<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_006.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_006_thumbnail.jpg\" alt=\"Picture 006\" /></a></p>\r\n<p>I then used some \'5 second Fix\' UV glue to glue around the post to hold it in place. You can also drill out the post with a 1.5mm drill and using an M2 tap then use a small M2 screw to hold the base in place, but in this case I was happy with the glue as it was for display and will not be handled frequently enough to require the more secure retention of a screw. With these small models there is a risk of damaging the post while drilling and tapping them so it is personal preference as to the method used to hold it all together at the end.</p>\r\n<p>Picture 007<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_007.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_007_thumbnail.jpg\" alt=\"Picture 007\" /></a></p>\r\n<p>Picture 008<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_008.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_008_thumbnail.jpg\" alt=\"Picture 008\" /></a></p>\r\n<p>The model is now completed and the final picture in the show notes is a small collection of what it looks like now it is ready to display again.</p>\r\n<p>Picture 009<br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3136/img_009.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3136/img_009_thumbnail.jpg\" alt=\"Picture 009\" /></a></p>\r\n<p>So that is the story of how to restore a Die-cast model back from the dead (well almost). These small models are comparatively easy, but some of the larger scale models with many more parts can take many days to restore, and require a lot of patience to do so. But from small beginnings we all start, and maybe in the future I will feel confident enough to tackle something a little more complicated. I have recently done a few models with opening doors which have a retaining spring holding them in place.</p>\r\n<p>So this short story is finished so this is Tony Hughes for Hacker Public Radio, saying goodbye for now, keep safe everyone and I\'ll be back at some time with another show. At the moment I\'m not sure about what, but I will be back, so Ken can rest assured I still owe him a show.</p>\r\n',338,114,0,'CC-BY-SA','Matchbox Cars, Diecast Models, Restoration, Reassembly of the model',0,0,1),
(3137,'2020-08-11','Coronavirus Update 2020-07-30',1364,'Where we are with this pandemic, and how should we respond?','<p>This is an update to my earlier shows to pull together what we know about the Coronavirus on this date, and what measures we can take. It focuses on the lack of solid information at this point and suggests a prudent course to stay safe. <a href=\"https://www.palain.com/health-topics/coronavirus-update-20200730/\" class=\"uri\">https://www.palain.com/health-topics/coronavirus-update-20200730/</a></p>\r\n<ul>\r\n<li><a href=\"https://jamanetwork.com/journals/jamacardiology/fullarticle/2768916\" class=\"uri\">https://jamanetwork.com/journals/jamacardiology/fullarticle/2768916</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Severe_acute_respiratory_syndrome\" class=\"uri\">https://en.wikipedia.org/wiki/Severe_acute_respiratory_syndrome</a></li>\r\n<li><a href=\"https://www.axios.com/hydroxychloroquine-coronavirus-scott-gottlieb-trump-a7b60575-91db-4239-8c86-59b993c55358.html\" class=\"uri\">https://www.axios.com/hydroxychloroquine-coronavirus-scott-gottlieb-trump-a7b60575-91db-4239-8c86-59b993c55358.html</a></li>\r\n<li><a href=\"https://www.sciencenews.org/article/remdesivir-covid-19-coronavirus-pandemic-gilead\" class=\"uri\">https://www.sciencenews.org/article/remdesivir-covid-19-coronavirus-pandemic-gilead</a></li>\r\n<li><a href=\"https://www.nejm.org/doi/full/10.1056/NEJMoa2021436\" class=\"uri\">https://www.nejm.org/doi/full/10.1056/NEJMoa2021436</a></li>\r\n<li><a href=\"https://news.yale.edu/2020/07/27/yale-lead-trial-potential-covid-19-treatment\" class=\"uri\">https://news.yale.edu/2020/07/27/yale-lead-trial-potential-covid-19-treatment</a></li>\r\n<li><a href=\"https://www.nature.com/articles/s41586-020-2577-1_reference.pdf\" class=\"uri\">https://www.nature.com/articles/s41586-020-2577-1_reference.pdf</a></li>\r\n<li><a href=\"https://news.yale.edu/2020/07/27/yale-lead-trial-potential-covid-19-treatment\" class=\"uri\">https://news.yale.edu/2020/07/27/yale-lead-trial-potential-covid-19-treatment</a></li>\r\n<li><a href=\"https://pubs.acs.org/doi/10.1021/acs.nanolett.0c02278\" class=\"uri\">https://pubs.acs.org/doi/10.1021/acs.nanolett.0c02278</a></li>\r\n<li><a href=\"https://helix.northwestern.edu/article/thalidomide-tragedy-lessons-drug-safety-and-regulation\" class=\"uri\">https://helix.northwestern.edu/article/thalidomide-tragedy-lessons-drug-safety-and-regulation</a></li>\r\n<li><a href=\"https://www.washingtonpost.com/health/7-in-10-americans-would-be-likely-to-get-a-coronavirus-vaccine-a-post-abc-poll-finds/2020/06/01/4d1f8f68-a429-11ea-bb20-ebf0921f3bbd_story.html\" class=\"uri\">https://www.washingtonpost.com/health/7-in-10-americans-would-be-likely-to-get-a-coronavirus-vaccine-a-post-abc-poll-finds/2020/06/01/4d1f8f68-a429-11ea-bb20-ebf0921f3bbd_story.html</a></li>\r\n<li><a href=\"https://nymag.com/intelligencer/2020/07/heres-the-latest-good-and-bad-news-about-covid-19.html\" class=\"uri\">https://nymag.com/intelligencer/2020/07/heres-the-latest-good-and-bad-news-about-covid-19.html</a></li>\r\n<li><a href=\"https://www.cdc.gov/coronavirus/2019-ncov/index.html\" class=\"uri\">https://www.cdc.gov/coronavirus/2019-ncov/index.html</a></li>\r\n<li><a href=\"https://curiositystream.com/\" class=\"uri\">https://curiositystream.com/</a></li>\r\n<li><a href=\"https://www.nature.com/nature/articles?type=nature-podcast\" class=\"uri\">https://www.nature.com/nature/articles?type=nature-podcast</a></li>\r\n<li><a href=\"https://www.youtube.com/user/thehealthcaretriage\" class=\"uri\">https://www.youtube.com/user/thehealthcaretriage</a></li>\r\n<li><a href=\"https://www.palain.com/health-topics/the-hierarchy-of-evidence/\" class=\"uri\">https://www.palain.com/health-topics/the-hierarchy-of-evidence/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2870\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2870</a></li>\r\n<li><a href=\"https://www.youtube.com/scishow\" class=\"uri\">https://www.youtube.com/scishow</a></li>\r\n<li><a href=\"https://www.youtube.com/playlist?list=PLsNB4peY6C6IQediwz2GzMTNvm_dMzr47\" class=\"uri\">https://www.youtube.com/playlist?list=PLsNB4peY6C6IQediwz2GzMTNvm_dMzr47</a></li>\r\n<li><a href=\"https://www.sciencenews.org/\" class=\"uri\">https://www.sciencenews.org/</a></li>\r\n<li><a href=\"https://nymag.com/intelligencer/2020/07/heres-the-latest-good-and-bad-news-about-covid-19.html\" class=\"uri\">https://nymag.com/intelligencer/2020/07/heres-the-latest-good-and-bad-news-about-covid-19.html</a></li>\r\n<li><a href=\"https://www.palain.com/health-topics/coronavirus-update-20200730/\" class=\"uri\">https://www.palain.com/health-topics/coronavirus-update-20200730/</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health, Coronavirus',0,0,1),
(3138,'2020-08-12','Linux Inlaws S01E12: Reminiscing in FLOSS Weekly',5664,'An interview with Randal Schwartz of FLOSS Weekly fame','<ul>\r\n<li>FLOSS Weekly: <a href=\"https://twit.tv/shows/floss-weekly\" target=\"_blank\">https://twit.tv/shows/floss-weekly</a></li>\r\n<li>Kernel patches for Google Futex enhancements: <a href=\"https://lore.kernel.org/lkml/20200722234538.166697-1-posk@posk.io\" target=\"_blank\">https://lore.kernel.org/lkml/20200722234538.166697-1-posk@posk.io</a></li>\r\n<li>Google presentation on Futexes: <a href=\"ttp://pdxplumbers.osuosl.org/2013/ocw//system/presentations/1653/original/LPC%20-%20User%20Threading.pdf\" target=\"_blank\">https://pdxplumbers.osuosl.org/2013/ocw//system/presentations/1653/original/LPC%20-%20User%20Threading.pdf</a></li>\r\n<li>Fuchsia Futexes: <a href=\"https://fuchsia.dev/fuchsia-src/reference/kernel_objects/futex\" target=\"_blank\">https://fuchsia.dev/fuchsia-src/reference/kernel_objects/futex</a></li>\r\n<li>The show where Simon Phipps flips: <a href=\"https://twit.tv/shows/floss-weekly/episodes/521\" target=\"_blank\">https://twit.tv/shows/floss-weekly/episodes/521</a></li>\r\n<li>Perl 6 / Raku: <a href=\"https://raku.org\" target=\"_blank\">https://raku.org</a></li>\r\n<li>Flutter: <a href=\"https://flutter.dev\" target=\"_blank\">https://flutter.dev</a></li>\r\n<li>Dart: <a href=\"https://dart.dev\" target=\"_blank\">https://dart.dev</a></li>\r\n<li>Mouse door opener day: <a href=\"https://www.wdrmaus.de/extras/tueren_auf.php5\" target=\"_blank\">https://www.wdrmaus.de/extras/tueren_auf.php5</a></li>\r\n<li>Grumpy old coders: <a href=\"https://soundcloud.com/user-498377588/grumpy-old-coders-ep-1-fast-change\" target=\"_blank\">https://soundcloud.com/user-498377588/grumpy-old-coders-ep-1-fast-change</a></li>\r\n</ul>\r\n\r\n',384,111,1,'CC-BY-SA','Linux inlaws, communism, free and open source software, FLOSS Weekly, Perl, ship cruises',0,0,1),
(3200,'2020-11-06','Better Social Media 17 - OcapPub',1125,'How using Object Capabilities within ActivityPub could solve some problems with social media.','<p>Social media has some problems, and even federated media is not immune to them. OcapPub proposes to help reduce some problems by moving away from a fundamentally broken model revolving around identity and access to a better model involving objects and capabilities. This could help reduce to problems of identity theft, and help against web site problems like clickjacking and Cross-Site Request Forgery. It is a proposal being worked on, not a finished technology, but it is promising.</p>\r\n<p>Links:</p>\r\n<ul>\r\n<li><a href=\"https://gitlab.com/spritely/ocappub/blob/master/README.org\" class=\"uri\">https://gitlab.com/spritely/ocappub/blob/master/README.org</a></li>\r\n<li><a href=\"https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/\" class=\"uri\">https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/</a></li>\r\n<li><a href=\"https://www.w3.org/TR/activitypub/\" class=\"uri\">https://www.w3.org/TR/activitypub/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Actor_model#Fundamental_concepts\" class=\"uri\">https://en.wikipedia.org/wiki/Actor_model#Fundamental_concepts</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Gamergate_controversy\" class=\"uri\">https://en.wikipedia.org/wiki/Gamergate_controversy</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Speakers%27_Corner\" class=\"uri\">https://en.wikipedia.org/wiki/Speakers%27_Corner</a></li>\r\n<li><a href=\"https://waterken.sourceforge.net/aclsdont/current.pdf\" class=\"uri\">https://waterken.sourceforge.net/aclsdont/current.pdf</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Principle_of_least_privilege\" class=\"uri\">https://en.wikipedia.org/wiki/Principle_of_least_privilege</a></li>\r\n<li><a href=\"https://www.zwilnik.com/better-social-media/ocappub/\" class=\"uri\">https://www.zwilnik.com/better-social-media/ocappub/</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, OcapPub',0,0,1),
(3139,'2020-08-13','MIDI Sysex',1238,'Klaatu talks about Sysex functions in MIDI','<p>\r\nThe MIDI spec is available at <a href=\"https://www.midi.org\" target=\"_blank\">MIDI.org</a>\r\n</p>\r\n\r\n<p>\r\nSysex commands are listed at <a href=\"https://www.midi.org/specifications-old/item/table-4-universal-system-exclusive-messages\" target=\"_blank\">midi.org&#47;specifications-old&#47;item&#47;table-4-universal-system-exclusive-messages</a>\r\n</p>\r\n',78,0,0,'CC-BY-SA','midi,music,synth',0,0,1),
(3141,'2020-08-17','Lessons learnt from Magic the Gathering game design',2269,'Lessons learnt from Magic the Gathering game design','<p>\r\nObservations and musings about game design, seen through the lens of MTG.\r\n</p>\r\n',78,95,0,'CC-BY-SA','magic, mtg',0,0,1),
(3142,'2020-08-18','tcsh',1719,'Klaatu talks about tcsh','<p>\r\nTcsh is a shell. It was popular once, I think. Anyway, I talk about why I sometimes use it, fondly, sometimes.\r\n</p>',78,0,0,'CC-BY-SA','shell,csh,bash,tcsh',0,0,1),
(3210,'2020-11-20','GIMP: Patterns and Gradients',1337,'Patterns and Gradients are useful for drawing with more than just color.','<p>Patterns and Gradients let you create images that go beyond simple colors and let you create more interesting images. And using them also means we begin to see how to combine a variety of tools, like paint tools, selection tools, and brushes, to create the effects we want in our images.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\" class=\"uri\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/paint-tools/\" class=\"uri\">https://www.ahuka.com/gimp/paint-tools/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3150\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3150</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/miscellaneous-tools/\" class=\"uri\">https://www.ahuka.com/gimp/miscellaneous-tools/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3180\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3180</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/patterns-and-gradients/\" class=\"uri\">https://www.ahuka.com/gimp/patterns-and-gradients/</a></li>\r\n</ul>',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, patterns, gradients',0,0,1),
(3220,'2020-12-04','PixelFed',1183,'A look at a federated alternative to Instagram.','<p>Maybe you want to share some photos with your family and friends. You could use Instagram, but that is part of the Surveillance Capitalist media environment. Fortunately, there is a privacy-respecting federated alternative called PixelFed. This episode is an introduction to that platform.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ActivityPub\" class=\"uri\">https://en.wikipedia.org/wiki/ActivityPub</a></li>\r\n<li><a href=\"https://www.w3.org/TR/activitypub/\" class=\"uri\">https://www.w3.org/TR/activitypub/</a></li>\r\n<li><a href=\"https://www.digikam.org/\" class=\"uri\">https://www.digikam.org/</a></li>\r\n<li><a href=\"https://www.gimp.org/\" class=\"uri\">https://www.gimp.org/</a></li>\r\n<li><a href=\"https://docs.pixelfed.org/installing-pixelfed/\" class=\"uri\">https://docs.pixelfed.org/installing-pixelfed/</a></li>\r\n<li><a href=\"https://the-federation.info/\" class=\"uri\">https://the-federation.info/</a></li>\r\n<li><a href=\"https://the-federation.info/pixelfed\" class=\"uri\">https://the-federation.info/pixelfed</a></li>\r\n<li><a href=\"https://mastodon.social/@pixelfed/103122742969957333\" class=\"uri\">https://mastodon.social/@pixelfed/103122742969957333</a></li>\r\n<li><a href=\"https://www.zwilnik.com/better-social-media/pixelfed/\" class=\"uri\">https://www.zwilnik.com/better-social-media/pixelfed/</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, PixelFed, photo sharing',0,0,1),
(3143,'2020-08-19','LibreOffice 7.0 Released!',927,'LibreOffice releases a new major update, LibreOffice 7.0','<p>LibreOffice is the premiere open source office suite, and with the major release of 7.0 continues to move forward. In this episode I look at some of the major features of this upgrade and why it matters.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://blog.documentfoundation.org/blog/2020/08/05/announcement-of-libreoffice-7-0/\" class=\"uri\">https://blog.documentfoundation.org/blog/2020/08/05/announcement-of-libreoffice-7-0/</a></li>\r\n<li><a href=\"https://blog.documentfoundation.org/blog/2020/01/21/odf-1-3-approved-as-oasis-committee-specification/\" class=\"uri\">https://blog.documentfoundation.org/blog/2020/01/21/odf-1-3-approved-as-oasis-committee-specification/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/OASIS_(organization)\" class=\"uri\">https://en.wikipedia.org/wiki/OASIS_(organization)</a></li>\r\n<li><a href=\"https://skia.org/\" class=\"uri\">https://skia.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Vulkan_(API)\" class=\"uri\">https://en.wikipedia.org/wiki/Vulkan_(API)</a></li>\r\n<li><a href=\"https://www.documentfoundation.org/governance/advisory-board/\" class=\"uri\">https://www.documentfoundation.org/governance/advisory-board/</a></li>\r\n<li><a href=\"https://www.redhat.com/en\" class=\"uri\">https://www.redhat.com/en</a></li>\r\n<li><a href=\"https://www.collaboraoffice.com/\" class=\"uri\">https://www.collaboraoffice.com/</a></li>\r\n<li><a href=\"https://www.cib.de/en/home.html\" class=\"uri\">https://www.cib.de/en/home.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/libreoffice-7-0-released/\" class=\"uri\">https://www.ahuka.com/libreoffice-7-0-released/</a></li>\r\n</ul>\r\n',198,70,0,'CC-BY-SA','LibreOffice, new release',0,0,1),
(3230,'2020-12-18','Introduction to Layers',1258,'Layers are the most important concept in using GIMP','<p>Layers are the feature that does most of the heavy lifting in GIMP. In this episode we begin looking at them with an introduction, but we\'ll go deeper!</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.8/en/\" class=\"uri\">https://docs.gimp.org/2.8/en/</a></li>\r\n<li><a href=\"https://www.animationconnection.com/about-the-art/original-production-cels\" class=\"uri\">https://www.animationconnection.com/about-the-art/original-production-cels</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/XCF_(file_format)\" class=\"uri\">https://en.wikipedia.org/wiki/XCF_(file_format)</a></li>\r\n<li><a href=\"https://www.webopedia.com/TERM/A/alpha_channel.html\" class=\"uri\">https://www.webopedia.com/TERM/A/alpha_channel.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/introduction-to-layers/\" class=\"uri\">https://www.ahuka.com/gimp/introduction-to-layers/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, layers',0,0,1),
(3146,'2020-08-24','Help Me Help you with HPR eps!',358,'What should I do and how should I do it ?','<p>A show about shows ?</p>',36,0,0,'CC-BY-SA','podcasting, hpr',0,0,1),
(3155,'2020-09-04','LastPass Security Dashboard',680,'A recent update to LastPass added a Security Dashboard','<p>LastPass is one of the password managers I use (along with Keepass), and recently they added a Security Dashboard feature to the product. I take a look at this dashboard and review some of the features.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://blog.lastpass.com/2020/08/new-lastpass-security-dashboard-and-dark-web-monitoring-now-available/\" class=\"uri\">https://blog.lastpass.com/2020/08/new-lastpass-security-dashboard-and-dark-web-monitoring-now-available/</a></li>\r\n<li><a href=\"https://www.pcmag.com/picks/the-best-password-managers\" class=\"uri\">https://www.pcmag.com/picks/the-best-password-managers</a></li>\r\n<li><a href=\"https://www.cnet.com/how-to/best-password-manager-to-use-for-2020-1password-last-password-more-compared/\" class=\"uri\">https://www.cnet.com/how-to/best-password-manager-to-use-for-2020-1password-last-password-more-compared/</a></li>\r\n<li><a href=\"https://www.tomsguide.com/us/best-password-managers,review-3785.html\" class=\"uri\">https://www.tomsguide.com/us/best-password-managers,review-3785.html</a></li>\r\n<li><a href=\"https://www.wired.com/story/best-password-managers/\" class=\"uri\">https://www.wired.com/story/best-password-managers/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/security-and-privacy/hashing-passwords-and-certificates/passwords-entropy-and-good-password-practices/\" class=\"uri\">https://www.zwilnik.com/security-and-privacy/hashing-passwords-and-certificates/passwords-entropy-and-good-password-practices/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1620\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=1620</a></li>\r\n<li><a href=\"https://support.logmeininc.com/lastpass/help/what-is-the-security-score-in-my-security-dashboard\" class=\"uri\">https://support.logmeininc.com/lastpass/help/what-is-the-security-score-in-my-security-dashboard</a></li>\r\n<li><a href=\"https://www.sans.org/security-awareness-training/blog/time-password-expiration-die\" class=\"uri\">https://www.sans.org/security-awareness-training/blog/time-password-expiration-die</a></li>\r\n<li><a href=\"https://haveibeenpwned.com/\" class=\"uri\">https://haveibeenpwned.com/</a></li>\r\n<li><a href=\"https://www.enzoic.com/\" class=\"uri\">https://www.enzoic.com/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/the-lastpass-security-dashboard/\" class=\"uri\">https://www.zwilnik.com/the-lastpass-security-dashboard/</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','LastPass, passwords, security, monitoring',0,0,1),
(3144,'2020-08-20','Pentesting: Insecure Object Reference',726,'How an insecure object reference lead to a covid-related databreach','<p>Insecure object reference is a very common bug in online applications which most of the time leads to significant data breaches. In this episode I talk about one such vulnerability I discovered recently in a covid-related application.</p>',387,74,0,'CC-BY-SA','pentesting,security,hacking',0,0,1),
(3145,'2020-08-21','A light bulb moment, part 1',649,'Finding the working voltage of a bulb','<p>This show came about because of an email from Dave Morriss on the 4th March 2020</p>\r\n<p>The upshot of it was that Dave came into possession of an illuminated lantern that he wanted to use. He had a problem however as the lantern in question was sealed and he didn\'t know the working voltage of the bulb within. He asked me if there was a way of working it out.</p>\r\n<p>Well first of all before I go any further I should probably say I\'m not a bulb expert, however I set about doing a little investigating. What I was about to discover is that calculating this is not as straightforward as you might think.</p>\r\n<p>One thing you might think to do is to use a meter to measure the resistance of the bulb. Even doing this however is fraught with difficulty because measuring the resistance of a cold bulb not at working temperature will give a misleading answer. This is because the resistance of a standard bulb changes with temperature.</p>\r\n<p>I can demonstrate this by measuring the resistance of two light bulbs I have lying around the house.</p>\r\n<p>One is a clear traditional Bayonet tungsten filament house bulb rated at 40W. I live in the UK so its operating voltage is 240V I used my trusty Fluke 77 Digital Ohmmeter but any meter capable of measuring resistance will do. This bulb at room temperature measured a resistance of 108 ohms</p>\r\n<p>The other bulb was a Halogen E14 screw in bulb rated at 28W and its operating voltage like the previous bulb was 240V. Its measured resistance at room temperature was 144 ohms)</p>\r\n<p>Diagrams Created using LibreOffice Draw \"Version: 6.0.7.3\"</p>\r\n<p>Formulae<br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3145/img_001.png\" alt=\"Formulae\" /></p>\r\n<p><strong>Calculations For (tungsten filament bulb)</strong></p>\r\n<pre><code>V/R = I (Amps)\r\nso 240V / 108 ohms = 2.2 Amps\r\n\r\nV x I = P (Watts)\r\nso 240V x 2.2 Amps = 528W</code></pre>\r\n<p><strong>Calculations For (halogen bulb)</strong></p>\r\n<pre><code>V/R = 240V / 144 ohms = 1.7 Amps    (halogen)\r\n\r\nV x I = W\r\nso 240V x 1.7 Amps = 408W</code></pre>\r\n<p>As per usual I used google and come up with somebody asking the same sort of question at <a href=\"https://www.candlepowerforums.com/vb/showthread.php?64832-How-to-identify-voltage-of-an-unmarked-bulb\" class=\"uri\">https://www.candlepowerforums.com/vb/showthread.php?64832-How-to-identify-voltage-of-an-unmarked-bulb</a> yes it seems like there a forum for just about anything you can think of.</p>\r\n<p>One person on the forum made the point that there really isn\'t such a thing as a working voltage it just depends on how long you want the bulb to last. For this reason I always turn down the brightness on any car I own that his dimmable dashboard lights changing these bulbs can be a real pain and or can be expensive.</p>\r\n<p>Sometimes the stated working voltage for a bulb can be misleading for example a car bulb will often state a working voltage of 12V but is likely to be running at a higher voltage when the engine is running due to the operation of cars alternator.</p>\r\n<p>Another person suggested trying to estimate the length of the filament and using this to determine the working voltage.</p>\r\n<p>Yet somebody else suggested just using a variable supply and to just slowly increase the voltage until a reasonable amount of light is generated. This might be quite simple if it\'s a low voltage bulb and you could even use some batteries lying around connecting them in series adding one battery at a time until the required brightness is achieved.</p>\r\n<p>It isn\'t so simple if bulb requires a higher voltage.</p>\r\n<p>In the end I just passed this information onto Dave wishing him luck in his path to discovering the optimal working voltage for his lantern.</p>\r\n<p>Feel free to write a comment if any of you out there have any other idea on finding the working voltage of a bulb this way it can be shared with the rest of us during the Community News, better still send in your own show.</p>\r\n',201,0,1,'CC-BY-SA','Hardware, electrical',0,0,1),
(3147,'2020-08-25','NIST\'s Quantum Cryptography Update',825,'NIST has concluded Round Two of the quantum encryption search and moved to Round Three','<p>NIST initiated a competition to find and test algorithms for quantum encryption that would resist quantum decryption back in December of 2016. Two rounds of testing have been completed, and an initial group of 69 submissions have been winnowed to 15. These 15 are now in Round Three of the testing process, and it is anticipated that as many as 4 of them will be approved as standards. This news update is intended to bring you up to date on the process.</p>\r\n<p>Links:</p>\r\n<ul>\r\n<li><a href=\"https://www.zwilnik.com/security-and-privacy/encryption-and-quantum-computing/\" class=\"uri\">https://www.zwilnik.com/security-and-privacy/encryption-and-quantum-computing/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2860\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=2860</a></li>\r\n<li><a href=\"https://letsencrypt.org/\" class=\"uri\">https://letsencrypt.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Public-key_cryptography\" class=\"uri\">https://en.wikipedia.org/wiki/Public-key_cryptography</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Whitfield_Diffie\" class=\"uri\">https://en.wikipedia.org/wiki/Whitfield_Diffie</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Martin_Hellman\" class=\"uri\">https://en.wikipedia.org/wiki/Martin_Hellman</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Ralph_Merkle\" class=\"uri\">https://en.wikipedia.org/wiki/Ralph_Merkle</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Pretty_Good_Privacy\" class=\"uri\">https://en.wikipedia.org/wiki/Pretty_Good_Privacy</a></li>\r\n<li><a href=\"https://gcn.com/articles/2016/12/22/nist-quantum-encryption.aspx\" class=\"uri\">https://gcn.com/articles/2016/12/22/nist-quantum-encryption.aspx</a></li>\r\n<li><a href=\"https://gcn.com/articles/2019/02/04/nist-quantum-semifinals.aspx\" class=\"uri\">https://gcn.com/articles/2019/02/04/nist-quantum-semifinals.aspx</a></li>\r\n<li><a href=\"https://csrc.nist.gov/publications/detail/nistir/8309/final\" class=\"uri\">https://csrc.nist.gov/publications/detail/nistir/8309/final</a></li>\r\n<li><a href=\"https://www.nist.gov/news-events/news/2020/07/nists-post-quantum-cryptography-program-enters-selection-round\" class=\"uri\">https://www.nist.gov/news-events/news/2020/07/nists-post-quantum-cryptography-program-enters-selection-round</a></li>\r\n<li><a href=\"https://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html\" class=\"uri\">https://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html</a></li>\r\n<li><a href=\"https://www.zwilnik.com/security-and-privacy/nists-quantum-cryptography-update-20200815/\" class=\"uri\">https://www.zwilnik.com/security-and-privacy/nists-quantum-cryptography-update-20200815/</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','security, encryption, quantum computing',0,0,1),
(3148,'2020-08-26','Why Open Source matters (to me)',1612,'I go briefly into my own history that has lead me to choose open source software exclusively.','<p>My original website: <a href=\"https://psquirk.tripod.com\" class=\"uri\">https://psquirk.tripod.com</a></p>',383,0,0,'CC-BY-SA','history,open source,matters,vic 20,amiga,commodore',0,0,1),
(3151,'2020-08-31','How I listen to podcasts',393,'This is a reply to MrX episode on how to listen to podcasts','<p>In this episode I talk about the program I use to listen to podcasts.</p>\r\n<p>BeyondPod which has a smart play feature where you can decide how to listen, in what order and how much of each podcast.</p>',382,0,0,'CC-BY-SA','podcast,software,android',0,0,1),
(3152,'2020-09-01','My Pocket Knives',870,'I talk a little about some pocket knives I often carry','<h2 id=\"introduction\">Introduction</h2>\r\n<p>As a boy I was allowed to have a penknife from about the age of 10. Since then I have tended to carry pocket knives with me on a regular basis.</p>\r\n<p>I have three knives that often travel with me, though two might have become illegal in the UK in the recent past because they lock.</p>\r\n<p>The knives are:</p>\r\n<ul>\r\n<li>Victorinox <em>Huntsman</em></li>\r\n<li>Durol locking knife</li>\r\n<li>Roxon KS-S501</li>\r\n</ul>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>I have provided detailed notes as usual for this episode, and these can be <a href=\"https://hackerpublicradio.org/eps/hpr3152/full_shownotes.html\">viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Victorinox\r\n<ul>\r\n<li><a href=\"https://www.victorinox.com/uk/en\">Victorinox website</a> (UK)</li>\r\n<li><a href=\"https://www.victorinox.com/uk/en/Products/Swiss-Army-Knives/Medium-Pocket-Knives/Huntsman/p/1.3713\">Victorinox <em>Huntsman</em></a> (UK)</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Swiss_Army_knife\">Wikipedia: Swiss Army knife</a></li>\r\n</ul></li>\r\n<li>Durol\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Thiers,_Puy-de-D%C3%B4me\">Wikipedia: Thiers, Puy-de-Dôme</a></li>\r\n<li><a href=\"https://www.lecouteau.info/couteliers-fabricants-de-thiers/durol/\">Coutellerie &amp; Couteaux - Durol</a> (<em>in French</em>)</li>\r\n</ul></li>\r\n<li>ROXON\r\n<ul>\r\n<li><a href=\"https://roxontool.com/col.jsp?id=111\">KS-S501</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','knife,pocket knife,penknife,Victorinox,Durol,Roxon',0,0,1),
(3153,'2020-09-02','Fixing eBooks with Calibre and pdfcrop',308,'Ken uses Calibre to convert a epub to PDF then uses pdfcrop to trim the margins','<pre>\r\npdfcrop --margins \'-4 -4 -4 -5\' --clip input.pdf output.pdf\r\n</pre>\r\n\r\n<p>\r\ncalibre is a powerful and easy to use e-book manager. Users say it’s outstanding and a must-have. It’ll allow you to do nearly everything and it takes things a step beyond normal e-book software. It’s also completely free and open source and great for both casual users and computer experts. \r\n</p>\r\n<p>\r\nPDFCrop is a Perl script that crops the white margins of PDF pages and rescales them to fit a standard size sheet of paper. It makes the printed pages far more attractive to read! \r\n</p>\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://calibre-ebook.com/\">https://calibre-ebook.com/</a></li>\r\n<li><a href=\"https://pdfcrop.sourceforge.net/\">https://pdfcrop.sourceforge.net/</a></li>\r\n</ul>',30,0,0,'CC-BY-SA','calibre,pdfcrop,epub,pdf',0,0,1),
(3154,'2020-09-03','Make NextCloud your next cloud',771,'I go into my reasons for using NextCloud, what it is, and why you might want it.','<p>My federated address is @paul@cloud.pquirk.com</p>',383,0,0,'CC-BY-SA','Raspberry Pi,NextCloud,federated',0,0,1),
(3157,'2020-09-08','Compost',2583,'How and why to compost','<p>\r\n  How to compost food scraps to produce nutrient-rich soil. It&#39;s natural&#33;\r\n</p>',78,93,0,'CC-BY-SA','food, rubbish, landfill, gardening',0,0,1),
(3159,'2020-09-10','Vivaldi - The Four Seasons',2703,'All four movements of Vivaldi\'s Four Seasons, celebrating the Creative Commons license','<p>\r\nAntonio Vivaldi composed The Four Seasons (\'Le quattro stagioni\' in its original Italian) in 1723. It is a set of 4 violin concertos that propose an early form of descriptive music: for example, Winter makes prominent use of pizzicato notes in high registers, whereas Summer evokes a storm in its final movement. The work was first presented as part of Op. 8, being later catalogued as RV 269, 315, 293 & 297. The Four Seasons remain very popular to this day, some of its concertos spawning a great number of derivative works, whereas thousands of recordings of the original pieces have been made. It is still debated if Vivaldi wrote this concertos to accompany four sonnets that may have been written by himself. <br />\r\nFrom <a href=\"https://musopen.org/music/14910-the-four-seasons-op-8/\">Vivaldi The Four Seasons, Op. 8</a>\r\n</p>\r\n\r\n<p>\r\n<a href=\"https://musopen.org/music/performer/the-modena-chamber-orchestra/\">The Modena Chamber Orchestra Music</a>\r\n</p>',383,22,0,'CC-BY-SA','Vivaldi, four seasons, creative commons',0,0,1),
(3158,'2020-09-09','Fingerprint access control? LOL... ',1201,'A story about pentesting physical security','<p>Hello everyone, my name is Cedric and I\'m here again with another story on pentesting and security, straight from the trenches.</p>\r\n<p>Today I\'m going to share a story with you about an assignment we did some time ago for a large entertainment company. Our client, like many entertainment companies, produces a lot of intellectual property. So, one of their biggest concerns is that someone might physically break into their premises and steal some of these designs and products. They had already taken some precautions, like installing intrusion detection alarms and access controls on all doors etc\' The access controls they installed even had a dual function and could be used both as an RFID reader and as a fingerprint reader. So, they were already trying their best to secure their on-site intellectual property. And that\'s also the reason why they hired me and my team: they wanted to check if their investment in security was actually worth its money so far.</p>\r\n<p>We proposed a plan to hack them, in any way our devious minds could possibly think of. Everything was on the table: We could try and hack ourselves in. We could social engineer ourselves in, basically by manipulating people and abusing their trust and confidence. We could do all of that, and we would, eventually. But first, the grand opening of this show, would be an attempt to physically break into their premises at night. And yes, that was as much fun as it sounds ;-)</p>\r\n<p>Our approach was basically the same as that of a professional burglar: we\'d start with a week of preparation and scoping the place.</p>\r\n<p>So how do you do this? Well, we knew the address of course so first we checked out the place on Google Maps. And we were pretty lucky: Google had just recently updated their imagery of the area which meant we had recent maps to work with and the entire thing could be viewed in 3D with a fair amount of detail. That\'s pretty much as perfect as it comes when you\'re planning to do a major heist on a place in the physical world out there :-) So, we started with scouting the area from behind our laptops. We saw where all the entrances to the building were. We also saw that on the frontside the building just gave access to the street, while on the backside of the premise there was a public park. This looked very promising as a potential entrypoint, so our next step would be to actually physically go there and scout the area.</p>\r\n<p>So, first we went there during daylight hours and just took a drive around the block using a rental car. We\'d look for entrances to the building, camera\'s guarding these and the general view of the area, basic things… We didn\'t spot any cameras on the outside of the building. So we figured it would be pretty safe to take a walk and scout the area by foot. There was foot traffic but not too much, so we wouldn\'t draw any attention by just casually walking around and having a closer look.</p>\r\n<p>The main entrance to the building was in a quiet street which led to a small square where a few kids were playing, and on the other side there was a street with some shops and a few restaurants. The entrance to our clients building had a gate through which we could see a quiet courtyard and the general layout of the building. The first thing that drew our attention was an access control device guarding the entrance, it was a fingerprint reader and it had a brand name Suprema printed on it. Straight across the courtyard we could see the trees of the neighboring park. There was a rooftop terrace on the first floor which gave access to the offices of our client. We also noticed the wall that separated this terrace from the park and it was huge, at least 6 meters.</p>\r\n<p>We couldn\'t hang around for too long of course so we decided to continue our walk to the second entrance we spotted just around the corner. We could recognise its anonymous door next to a restaurant because it was guarded by the same Suprema fingerprint device. The restaurant however seemed quite popular, and it had a terras in front of it with a dozen tables, so that pretty much dismissed this entrance as a possible entry for our heist.</p>\r\n<p>Needless to say that while we walked around the block we were also continuously scanning the area for Wifi and bluetooth devices. But nothing interesting had shown up so far. We had spotted our clients network but it was protected. We probably could use this information to set up rogue access-points later during our assignment, but for now this information was of little use to us.</p>\r\n<p>We continued our walk and took a left to end up at the park bordering to the other side of our clients building. While the park was empty at that moment, we didn\'t really feel at ease. On one side the park bordered an apartment building and all of its rear terrasses faced this park. We went to the wall at the far end of the park as casually as possible, and inspected it. It had two large windows, giving the people working in the offices on the inside a nice view of the park. Unfortunately these windows didn\'t seem to have any way of opening. The wall was high, very high, we estimated about 8 meters. On the other side it would give access to the terrace on the first floor. We figured that this would be the perfect entrypoint for our heist. We\'d use the cover of darkness to get a ladder across the park, under the trees against that wall. I\'d climb over it to land on the terrace and that would be our first step onto the premise. Next step would be to find a way into the building and for that we\'d have to find a way to bypass these Suprema fingerprint readers next to every door.</p>\r\n<p>So we went back to our hackerspace and researched this device and we figured the best way to move forward would be to actually buy one of these to first try and hack it in the safety of our lab. So I spent a fair amount of time researching the exact model they had installed and ordering one from a local supplier. The thing came at a hefty price, these Suprema devices are not cheap. But now I had an electronic lock, a relay board, a power supply and one of these fingerprint readers with which I could start playing.</p>\r\n<p>I started off with reading the manual of course, which already was very interesting on its own. I learned that this thing can be configured in a zillion ways. I figured that, like most things, the guys that installed it would probably stick pretty close to how it came out of the box. So that\'s what I did as well: I installed the thing exactly as it came, following the instructions in the manual.</p>\r\n<p>I\'ll give you the summary of this entire installation. Electronic locks are pretty simple technology. Basically it\'s just an electro-magnet, a coil through which you send current to create a magnetic field that pulls a bolt out of the way so the lock can open, that\'s when it makes the clicking sound. Inside of the building, the receptionist can just press a button and a current will flow to the lock. However, on the outside of the building it wouldn\'t be very desirable that anyone can just press a button to open the door. That\'s why most companies implement access controls like RFID-readers or in this case fingerprint readers. A visitor scans his fingerprint with the device next to the door, the software checks if it finds the signature of the print in the database holding all recognized prints, and if so it will open the door.</p>\r\n<p>So if we\'d want to bypass this scheme, we\'d basically have two options: hack the device to open the lock, or duplicate a registered fingerprint to fool the scanner and open the lock. Research had shown that this last option wasn\'t actually so far fetched. It\'s actually a proven feasible attack, last DEFCON even demonstrated an attack where a print was copied in 3D using a 3D printer. The technique we would try involved etching the negative of a high-contrast image from a lifted latent print onto a copper plate. Next we\'d pour hot glue over that etch to actually recreate the fingerprint in 3D. However, this procedure requires some practice and skills, and we didn\'t have time for that. We tried it using our own prints lifted from a glass plate, following the procedure as best as we could but we failed miserably. So, this would not be an option and we already spent a fair amount of time.</p>\r\n<p>So by now it had become clear we would have to hack the device. And as it was laying there in front of me on my desk, basically running the default setup with just my own print registered in the software, it became obvious that I had missed a crucial error in the design the entire time. I had never actually bothered to install this thing \"properly\" like mounted to a board with its cables fitted nicely behind a wall etc. The entire thing was just laying there, in front of me on my desk and all the cables really were a mess, but most importantly: the software wasn\'t showing any warnings whatsoever that the device was not mounted to a wall. I investigated the manual and I learned that the thing has something called a \"tamper alarm\". But this must have been disabled by default because I never had any alarms while the device was just laying there and was continuously shaking and moving it. So this meant that I could probably just pull this thing from a wall without any alarms going off.</p>\r\n<p>I had to validate this premise first before we could continue. If this turned out to be a false assumption we\'d waste valuable time investigating a plan which would probably fail in the end. So the following night I set out again to our clients building. It was like 3:30 in the morning and there was nobody on the streets. We already validated that there were no cameras pointing to the entrance, still I didn\'t feel too confident. My plan was simple but solid: I\'d unscrew the fingerprint reader at the main entrance and put it back in place after 30seconds. I\'d then walk to the little square at the end of the street and sit on the bench there so I would have a clear view of our clients entrance. I figured that, if the tamper alarm was enabled, and if they had someone monitoring it, they would probably come and check the device causing the alarm. I\'d be interested in their response time of course, but most of all I was just hoping nobody would show up. And that\'s also what happened. I waited for 2 whole hours on that bench and nobody showed up, so I concluded the tamper alarm must have been disabled as is the default setting on these things, or nobody is monitoring it. Anyway, now I knew I could safely start tinkering on how I could manipulate this thing into letting me.</p>\r\n<p>So the next day after I had a few hours of sleep we went back to work, playing with that Suprema BioLite and its software. I was in a good mood and had lots of inspiration. We started with investigating the general architecture of this access control scheme. So it turns out you have a client device, the scanner which is next to the door and this client device gets a database of recognized fingerprints from a control server which holds a list of all connected devices. So it\'s on this server where you register new doors and locks and new users that can open these locks. Now, when I installed the setup to experiment with, I learned that I had to register the lock into the control server before I could actually do anything, so I followed that entire procedure but unless I was missing something I didn\'t notice any real checks to be in place during that registration. So what I was thinking was: maybe I can disconnect this device from its network and the control server and reconnect it to my own server. Then I could upload my own prints to the device and then I\'d be able to open the door with my own finger. So that\'s what I tried. I had the entire setup running in my own network, so I re-installed the software once again on my laptop. I then registered another print of mine into this installation. Next I disconnected the device from my network and connected it to a new temporary network running on my laptop: I had it running DHCP and I had a little USB-powered ethernet switch laying around which came in handy for this job. So the device quickly got an ip address from my new network and when I scanned for new fingerprint devices in my network using the Suprema control server that was installed on my laptop, I easily found it and was able to register it in this installation. I then was able to upload a copy of my fingerprints from my laptop to the device and after reconnecting it to the original network I could still open the lock with my newly registered print. So this meant we had our hack to bypass this device: we\'d just upload our own set of prints to it and it would happily accept these and open the door for us.</p>\r\n<p>So we hired a van and a ladder, and with some action cameras geared up we set out in the middle of the following night. We managed to get the ladder across the park and put it against the wall without making too much noise, we didn\'t wake up any curious neighbours. Next, I\'d climb up the ladder, but since it was only 6m and the wall was about 8m high I\'d have to climb the last bit by hand. Fortunately there was some vegetation growing on that wall and it felt like it would be strong enough to hold my weight. So, I gave it a try and pulled myself up from the ladder and the vines fortunately didn\'t break, so I climbed to the top of the wall and hoisted myself on top of it. I jumped off on the other side and landed on the first floor terrace we saw earlier. I went straight to the door and as expected it had one of these Suprema fingerprint readers next to it and I immediately went to work: I unscrewed the device from its mounting bracket and pulled the cables a bit from the wall. I then cut all the wires of the UTP-connection and connected a female RJ-45 socket to the UTP-wires of the fingerprint reader with crocodile clips. Next I hooked it up to my usb-powered switch which connected the device to the network running on my laptop. As I had tested everything in detail, the attack went smooth as a breeze and within no time I had my own fingerprint loaded into the device. I tested it and I could hear the lock of the door clicking while I put my finger onto the reader, so I started screwing the device back into the mounting bracket.</p>\r\n<p>Everything went exactly as planned and I had just put my laptop and all my gear into my backpack again when suddenly I saw the lights go on through the glass door separating me from the inside of the top floor. I could see the elevator doors open and suddenly there I was, standing face to face with a janitor. I could see his face and he could see me so I tried to pull myself together, I had to think quickly. I figured he would let me in, or call the cops and I would probably only get one chance to explain myself. So I pulled my silly face, pointed with a finger to the access control, shrugged my shoulders and lipped slowly \"it\'s not working\". Well, I must have been an actor in a previous life because, sure thing the man came up to the door and opened up for me. While I entered and said a quick \"hey thanks man\", he looked a bit questioning and mumbled something of \"who are you and what are you doing here?\" and as casual as I could I answered \"Oh I\'m from IT, I\'m here for work\". I smiled, thanked him once again while I stepped into the elevator and pressed the button for the ground floor. I was in! My heart was pounding like a racehorse but I was in! This stuff was like straight from the movies.</p>\r\n<p>Now it was time for the fun part of the night: claiming our flag of victory. First I went to the director\'s office, to leave a friendly signature of my presence: I left a bottle of champagne on his desk and I decorated the place with some CYBER-tape :-) On my way out I left a little present in the form of a LAN Turtle 3G. That\'s a 3G-enabled remote access toolkit with a network-connection which I hooked up with an empty socket underneath the receptionist\'s desk. The LAN Turtle would immediately boot and using its 3G connection it established a reverse tunnel using SSH to our command-and-control server. Using that covert connection we now had a way into the network from the outside. Installing it only took about 15 seconds and after having confirmed tunnel using a shell on my phone I went straight to the front-door and left the place. Mission accomplished! We had successfully penetrated the place.</p>\r\n<p>I went to bed with a very big smile on my face early in the morning that day. By Noon I got up after a few hours of sleep and called our clients. They thanked us for the champagne and I gave them the gist of what had happened earlier that day while everyone else was still in bed sleeping.</p>\r\n<p>The following weeks we would continue with our assignment and use our newly granted access into the place to go there physically during daytime hours, posing as an external developer. Eventually we gained full access to the entire place, including their on-premise datacenter holding their intellectual property, the crown jewels as to speak. Apparently, the access control-server was still protected with the default credentials admin/admin so I had pretty easy time expanding my initial foothold.</p>\r\n<p>At the end of our assignment we presented all of our findings to our client and they immediately took appropriate action, including making sure tampering control got enabled on all of their access control devices. And I for my part had learned a whole lot of new fun stuff about access control devices and the possible flaws they can hold.</p>\r\n<p>So, this was yet another story on pentesting and security. I hope you enjoyed this episode. If you\'d like to reach out to me, please use the comment section on Hacker Public Radio or contact me on Twitter or Facebook. See you next time!</p>\r\n',387,74,0,'CC-BY-SA','pentesting,security,hacking,biometrics',0,0,1),
(3161,'2020-09-14','How I manage podcast listening',1192,'Another reply to MrX\'s episode on how he listens to podcasts','<h2 id=\"introduction\">Introduction</h2>\r\n<p>I have spoken in the past about the <a href=\"https://hackerpublicradio.org/eps.php?id=2211\" title=\"My podcast workflow\">podcast management system</a> I have created, but have never gone into much detail about how I manage the playing of episodes.</p>\r\n<p>Prompted by <a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX’s</a> <a href=\"https://hackerpublicradio.org/eps.php?id=3132\" title=\"Keeping track of where I am\">HPR episode hpr3132, “Keeping track of where I am”</a> I will describe it now.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>Follow this link to <a href=\"https://hackerpublicradio.org/eps/hpr3161/full_shownotes.html\">read the detailed notes</a> associated with this episode.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://www.rockbox.org/\">Rockbox - an alternative operating system for certain music players</a></li>\r\n<li><a href=\"https://www.figlet.org/\">figlet - a program for making large letters out of ordinary text</a></li>\r\n</ul>\r\n<ul>\r\n<li>HPR links:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1656\">hpr1656 :: My audio player collection</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1992\">hpr1992 :: How I’m handling my podcast-subscriptions and -listening</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2211\">hpr2211 :: My podcast workflow</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3132\">hpr3132 :: Keeping track of where I am</a></li>\r\n</ul></li>\r\n</ul>',225,0,1,'CC-BY-SA','podcast,software,mp3 player,database',0,0,1),
(3164,'2020-09-17','I\'m Learning Spanish',989,'How I am using a variety of tools to learn Spanish','<p>I decided to use my time spent in relative isolation to do something productive and learn another language. I picked Spanish because I am hoping to visit Mexico and other Latin American countries whenever the plague lifts. I decided to document this for anyone who wants to know what options I found and how they have worked for me so far.</p>\r\n<ul>\r\n<li><a href=\"https://www.babbel.com/\" class=\"uri\">https://www.babbel.com/</a></li>\r\n<li><a href=\"https://actualfluency.com/babbel-review/\" class=\"uri\">https://actualfluency.com/babbel-review/</a></li>\r\n<li><a href=\"https://www.trustpilot.com/review/babbel.com\" class=\"uri\">https://www.trustpilot.com/review/babbel.com</a></li>\r\n<li><a href=\"https://www.alllanguageresources.com/rosetta-stone-vs-babbel/\" class=\"uri\">https://www.alllanguageresources.com/rosetta-stone-vs-babbel/</a></li>\r\n<li><a href=\"https://my.babbel.com/en/prices\" class=\"uri\">https://my.babbel.com/en/prices</a></li>\r\n<li><a href=\"https://support.babbel.com/hc/en-us/articles/360037580132\" class=\"uri\">https://support.babbel.com/hc/en-us/articles/360037580132</a></li>\r\n<li><a href=\"https://www.duolingo.com/\" class=\"uri\">https://www.duolingo.com/</a></li>\r\n<li><a href=\"https://appleinsider.com/articles/13/12/17/apple-announces-best-of-2013-itunes-list-for-music-apps-more\" class=\"uri\">https://appleinsider.com/articles/13/12/17/apple-announces-best-of-2013-itunes-list-for-music-apps-more</a></li>\r\n<li><a href=\"https://www.cnet.com/news/best-language-learning-apps-of-2020-update/#listicle-a538cb59-e3e7-47b1-b029-f9ad8735bcbb\" class=\"uri\">https://www.cnet.com/news/best-language-learning-apps-of-2020-update/#listicle-a538cb59-e3e7-47b1-b029-f9ad8735bcbb</a></li>\r\n<li><a href=\"https://uk.pcmag.com/education/18817/duolingo\" class=\"uri\">https://uk.pcmag.com/education/18817/duolingo</a></li>\r\n<li><a href=\"https://www.influenster.com/reviews/duolingo\" class=\"uri\">https://www.influenster.com/reviews/duolingo</a></li>\r\n<li><a href=\"https://www.memrise.com/apps/\" class=\"uri\">https://www.memrise.com/apps/</a></li>\r\n<li><a href=\"https://www.pcmag.com/reviews/memrise\" class=\"uri\">https://www.pcmag.com/reviews/memrise</a></li>\r\n<li><a href=\"https://www.alllanguageresources.com/memrise-review-good-beginners-dont-overuse/\" class=\"uri\">https://www.alllanguageresources.com/memrise-review-good-beginners-dont-overuse/</a></li>\r\n<li><a href=\"https://www.lifewire.com/memrise-review-1357058\" class=\"uri\">https://www.lifewire.com/memrise-review-1357058</a></li>\r\n<li><a href=\"https://www.spanishpod101.com/\" class=\"uri\">https://www.spanishpod101.com/</a></li>\r\n<li><a href=\"https://www.fluentu.com/blog/spanish/spanishpod101-review/\" class=\"uri\">https://www.fluentu.com/blog/spanish/spanishpod101-review/</a></li>\r\n<li><a href=\"https://www.alllanguageresources.com/spanishpod101/\" class=\"uri\">https://www.alllanguageresources.com/spanishpod101/</a></li>\r\n<li><a href=\"https://actualfluency.com/spanishpod101-review/\" class=\"uri\">https://actualfluency.com/spanishpod101-review/</a></li>\r\n<li><a href=\"https://www.speaktribe.com/\" class=\"uri\">https://www.speaktribe.com/</a></li>\r\n<li><a href=\"https://www.androidguys.com/reviews/speaktribe-a-great-way-of-learning-the-beautiful-spanish-language-review/\" class=\"uri\">https://www.androidguys.com/reviews/speaktribe-a-great-way-of-learning-the-beautiful-spanish-language-review/</a></li>\r\n<li><a href=\"https://www.educationalappstore.com/app/learn-spanish-with-speaktribe\" class=\"uri\">https://www.educationalappstore.com/app/learn-spanish-with-speaktribe</a></li>\r\n<li><a href=\"https://appgrooves.com/app/learn-spanish-with-speaktribe-by-edushire-technologies-private-limited\" class=\"uri\">https://appgrooves.com/app/learn-spanish-with-speaktribe-by-edushire-technologies-private-limited</a></li>\r\n<li><a href=\"https://aaac.co/en-us/en-spa/best-spanish-learning-app-for-ios-android/2059/\" class=\"uri\">https://aaac.co/en-us/en-spa/best-spanish-learning-app-for-ios-android/2059/</a></li>\r\n<li><a href=\"https://appgrooves.com/android/com.ufo.learnspanish/learn-spanish-offline/ufostudio\" class=\"uri\">https://appgrooves.com/android/com.ufo.learnspanish/learn-spanish-offline/ufostudio</a></li>\r\n<li><a href=\"https://appfollow.io/android/learn-spanish-offline/com.ufo.learnspanish\" class=\"uri\">https://appfollow.io/android/learn-spanish-offline/com.ufo.learnspanish</a></li>\r\n<li><a href=\"https://spanishobsessed.com/\" class=\"uri\">https://spanishobsessed.com/</a></li>\r\n<li><a href=\"https://languagelearninglibrary.com/library/spanish-obsessed/\" class=\"uri\">https://languagelearninglibrary.com/library/spanish-obsessed/</a></li>\r\n<li><a href=\"https://www.fluentu.com/blog/spanish/spanish-podcasts/\" class=\"uri\">https://www.fluentu.com/blog/spanish/spanish-podcasts/</a></li>\r\n<li><a href=\"https://www.theguardian.com/education/2015/feb/09/top-podcasts-learning-language-german-japanese\" class=\"uri\">https://www.theguardian.com/education/2015/feb/09/top-podcasts-learning-language-german-japanese</a></li>\r\n<li><a href=\"https://www.palain.com/im-learning-spanish/\" class=\"uri\">https://www.palain.com/im-learning-spanish/</a></li>\r\n</ul>\r\n',198,116,0,'CC-BY-SA','Spanish, Language learning',0,0,1),
(3165,'2020-09-18','Spanish Tools Continued',830,'Part two of how I am using a variety of tools to learn Spanish','<p>I decided to use my time spent in relative isolation to do something productive and learn another language. I picked Spanish because I am hoping to visit Mexico and other Latin American countries whenever the plague lifts. I decided to document this for anyone who wants to know what options I found and how they have worked for me so far. This is the second part of my tools exploration.</p>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/channel/UC3iaeeUxWOgUXFK6kfIp_Ig\" class=\"uri\">https://www.youtube.com/channel/UC3iaeeUxWOgUXFK6kfIp_Ig</a></li>\r\n<li><a href=\"https://www.alllanguageresources.com/spanish/\" class=\"uri\">https://www.alllanguageresources.com/spanish/</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=hyLl_0d0EBw&amp;list=PLTpetkN815Qyuc2RbC1kxxMQvxjQ3RnYG\" class=\"uri\">https://www.youtube.com/watch?v=hyLl_0d0EBw&amp;list=PLTpetkN815Qyuc2RbC1kxxMQvxjQ3RnYG</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=QWEXFfqwh7w&amp;list=PL80Flen6gkH_9j4OxsDucs9mbKjl5ccvU\" class=\"uri\">https://www.youtube.com/watch?v=QWEXFfqwh7w&amp;list=PL80Flen6gkH_9j4OxsDucs9mbKjl5ccvU</a></li>\r\n<li><a href=\"https://radiolingua.com/category/coffee-break-spanish/\" class=\"uri\">https://radiolingua.com/category/coffee-break-spanish/</a></li>\r\n<li><a href=\"https://www.fluentu.com/blog/spanish/coffee-break-spanish-review/\" class=\"uri\">https://www.fluentu.com/blog/spanish/coffee-break-spanish-review/</a></li>\r\n<li><a href=\"https://www.alllanguageresources.com/coffee-break-spanish/\" class=\"uri\">https://www.alllanguageresources.com/coffee-break-spanish/</a></li>\r\n<li><a href=\"https://spanishlandschool.com/best-spanish-podcasts/\" class=\"uri\">https://spanishlandschool.com/best-spanish-podcasts/</a></li>\r\n<li><a href=\"https://podcast.duolingo.com/spanish\" class=\"uri\">https://podcast.duolingo.com/spanish</a></li>\r\n<li><a href=\"https://www.alllanguageresources.com/spanish-podcasts/\" class=\"uri\">https://www.alllanguageresources.com/spanish-podcasts/</a></li>\r\n<li><a href=\"https://mashable.com/2017/12/07/duolingo-launches-spanish-podcast/\" class=\"uri\">https://mashable.com/2017/12/07/duolingo-launches-spanish-podcast/</a></li>\r\n<li><a href=\"https://www.thoughtco.com/best-podcasts-for-learning-spanish-4705414\" class=\"uri\">https://www.thoughtco.com/best-podcasts-for-learning-spanish-4705414</a></li>\r\n<li><a href=\"https://www.babbel.com/en/magazine/babbels-spanish-podcasts\" class=\"uri\">https://www.babbel.com/en/magazine/babbels-spanish-podcasts</a></li>\r\n<li><a href=\"https://www.podparadise.com/Podcast/Reviews/1485542323\" class=\"uri\">https://www.podparadise.com/Podcast/Reviews/1485542323</a></li>\r\n<li><a href=\"https://chartable.com/podcasts/a-zero-to-a-hero-learn-spanish\" class=\"uri\">https://chartable.com/podcasts/a-zero-to-a-hero-learn-spanish</a></li>\r\n<li><a href=\"https://www.boulderspanish.com/top-10-podcasts-for-spanish-learners/\" class=\"uri\">https://www.boulderspanish.com/top-10-podcasts-for-spanish-learners/</a></li>\r\n<li><a href=\"https://www.spanishpod101.com/helpcenter/getstarted/itunesfeeds\" class=\"uri\">https://www.spanishpod101.com/helpcenter/getstarted/itunesfeeds</a></li>\r\n<li><a href=\"https://www.fluentin3months.com/spanishpod101-review/\" class=\"uri\">https://www.fluentin3months.com/spanishpod101-review/</a></li>\r\n<li><a href=\"https://www.alllanguageresources.com/spanishpod101/\" class=\"uri\">https://www.alllanguageresources.com/spanishpod101/</a></li>\r\n<li><a href=\"https://actualfluency.com/spanishpod101-review/\" class=\"uri\">https://actualfluency.com/spanishpod101-review/</a></li>\r\n<li><a href=\"https://www.notesinspanish.com/\" class=\"uri\">https://www.notesinspanish.com/</a></li>\r\n<li><a href=\"https://www.fluentu.com/blog/spanish/spanish-podcasts/\" class=\"uri\">https://www.fluentu.com/blog/spanish/spanish-podcasts/</a></li>\r\n<li><a href=\"https://coffeeshopspanish.com/blog/2016/09/23/top-7-spanish-podcasts-intermediateadvanced-learners/\" class=\"uri\">https://coffeeshopspanish.com/blog/2016/09/23/top-7-spanish-podcasts-intermediateadvanced-learners/</a></li>\r\n<li><a href=\"https://www.merlot.org/merlot/viewCompositeReview.htm?id=389501\" class=\"uri\">https://www.merlot.org/merlot/viewCompositeReview.htm?id=389501</a></li>\r\n<li><a href=\"https://www.newsinslowspanish.com/\" class=\"uri\">https://www.newsinslowspanish.com/</a></li>\r\n<li><a href=\"https://www.mosalingua.com/en/the-best-free-spanish-podcasts/\" class=\"uri\">https://www.mosalingua.com/en/the-best-free-spanish-podcasts/</a></li>\r\n<li><a href=\"https://spanishlandschool.com/best-spanish-podcasts/\" class=\"uri\">https://spanishlandschool.com/best-spanish-podcasts/</a></li>\r\n<li><a href=\"https://coffeeshopspanish.com/blog/2016/09/23/top-7-spanish-podcasts-intermediateadvanced-learners/\" class=\"uri\">https://coffeeshopspanish.com/blog/2016/09/23/top-7-spanish-podcasts-intermediateadvanced-learners/</a></li>\r\n<li><a href=\"https://www.palain.com/spanish-tools-continued/\" class=\"uri\">https://www.palain.com/spanish-tools-continued/</a></li>\r\n</ul>\r\n',198,116,0,'CC-BY-SA','Spanish, Language learning',0,0,1),
(3175,'2020-10-02','International Keyboard',681,'How I learned to implement a keyboard that lets me type in Spanish','<p>I decided to use my time spent in relative isolation to do something productive and learn another language. I picked Spanish because I am hoping to visit Mexico and other Latin American countries whenever the plague lifts. I decided to document this for anyone who wants to know what options I found and how they have worked for me so far. This is the third part where I explain how I implemented the US International Keyboard on a variety of platforms. This lets me type characters that Spanish uses which do not appear on a standard US English keyboard. And best of all, it a purely free software fix.</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/British_and_American_keyboards#/media/File:KB_US-International.svg\" class=\"uri\">https://en.wikipedia.org/wiki/British_and_American_keyboards#/media/File:KB_US-International.svg</a></li>\r\n<li><a href=\"https://www.palain.com/international-keyboard/\" class=\"uri\">https://www.palain.com/international-keyboard/</a></li>\r\n</ul>\r\n',198,116,0,'CC-BY-SA','Spanish, Language learning, typing foreign characters',0,0,1),
(3456,'2021-11-01','HPR Community News for October 2021',4849,'HPR Volunteers talk about shows released and comments posted in October 2021','<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/0397.html\" target=\"_blank\">hakerdefo</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=3435\" target=\"_blank\">3435</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-10-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3435\" target=\"_blank\">Hacking Stories with Reacted: part 5</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=3436\" target=\"_blank\">3436</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-10-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3436\" target=\"_blank\">HPR Community News for September 2021</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=3437\" target=\"_blank\">3437</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-10-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3437\" target=\"_blank\">The HTML document format</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=3438\" target=\"_blank\">3438</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-10-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3438\" target=\"_blank\">Ten privacy friendly Google search alternatives.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0397.html\" target=\"_blank\">hakerdefo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3439\" target=\"_blank\">3439</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-10-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3439\" target=\"_blank\">Linux Inlaws S01E40: The One with the BSDs</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3440\" target=\"_blank\">3440</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-10-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3440\" target=\"_blank\">Lighten Layer Modes</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=3441\" target=\"_blank\">3441</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-10-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3441\" target=\"_blank\">Murphy Work Bench</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=3442\" target=\"_blank\">3442</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-10-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3442\" target=\"_blank\">What is this thing called science</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=3443\" target=\"_blank\">3443</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-10-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3443\" target=\"_blank\">Neuton battery replacement</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=3444\" target=\"_blank\">3444</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-10-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3444\" target=\"_blank\">The Psion series 5mx</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0381.html\" target=\"_blank\">Nihilazo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3445\" target=\"_blank\">3445</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-10-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3445\" target=\"_blank\">True critical thinking seems to be the key</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=3446\" target=\"_blank\">3446</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-10-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3446\" target=\"_blank\">Speech To Text</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=3447\" target=\"_blank\">3447</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-10-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3447\" target=\"_blank\">BlacKernel\'s Journey Into Technology: Episode 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3448\" target=\"_blank\">3448</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-10-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3448\" target=\"_blank\">Installing GuixSD</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=3449\" target=\"_blank\">3449</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-10-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3449\" target=\"_blank\">Linux Inlaws S01E41: The Halloween Documents</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3450\" target=\"_blank\">3450</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-10-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3450\" target=\"_blank\">Internal Commands</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=3451\" target=\"_blank\">3451</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-10-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3451\" target=\"_blank\">Bricklink</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=3452\" target=\"_blank\">3452</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-10-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3452\" target=\"_blank\">Neuton battery test</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=3453\" target=\"_blank\">3453</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-10-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3453\" target=\"_blank\">Rust 101: Episode 1 - Hello, World!</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3454\" target=\"_blank\">3454</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-10-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3454\" target=\"_blank\">Engineering Notation</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=3455\" target=\"_blank\">3455</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-10-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3455\" target=\"_blank\">Podcast Recommendation: IBM and Quantum computing</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 38 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 16 comments on\n7 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2793#comments\" target=\"_blank\">hpr2793</a></strong>\n(2019-04-17) \"<em>bash coproc: the future (2009) is here</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2793#5\" target=\"_blank\">Comment 5</a>:\nclacke on 2021-10-08:\n\"Real world use, thanks Dave!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3337#comments\" target=\"_blank\">hpr3337</a></strong>\n(2021-05-18) \"<em>I like that the boat is stuck</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3337#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2021-10-07:\n\"Amazing\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3414#comments\" target=\"_blank\">hpr3414</a></strong>\n(2021-09-02) \"<em>Critical Thinking may make You Critical of the Covid Crisis</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0395.html\" target=\"_blank\">CoGo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3414#5\" target=\"_blank\">Comment 5</a>:\ne8hffff on 2021-10-16:\n\"Common Sense\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3414#6\" target=\"_blank\">Comment 6</a>:\nDave Morriss on 2021-10-30:\n\"Response to e8hffff, comment #5\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3426#comments\" target=\"_blank\">hpr3426</a></strong>\n(2021-09-20) \"<em>Rust 101: Episode 0 - What in Tarnishing?</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3426#3\" target=\"_blank\">Comment 3</a>:\nHonkeymagoo on 2021-10-04:\n\"another fun way to learn rust\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3431#comments\" target=\"_blank\">hpr3431</a></strong>\n(2021-09-27) \"<em>Living in the Terminal</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3431#5\" target=\"_blank\">Comment 5</a>:\nGumnos on 2021-10-06:\n\"Using \"c\" to pause in cmus\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3433#comments\" target=\"_blank\">hpr3433</a></strong>\n(2021-09-29) \"<em>A Squirrels thoughts about RMS</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=3433#1\" target=\"_blank\">Comment 1</a>:\nBen on 2021-10-02:\n\"Yikes!\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3433#2\" target=\"_blank\">Comment 2</a>:\narcher72 on 2021-10-03:\n\"Good call, Ken\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3433#3\" target=\"_blank\">Comment 3</a>:\nZen_floater2 on 2021-10-05:\n\"Reply to Ben\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3433#4\" target=\"_blank\">Comment 4</a>:\nZen_floater2 on 2021-10-05:\n\"Reply to archer72\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3433#5\" target=\"_blank\">Comment 5</a>:\nKen Fallon on 2021-10-05:\n\"Disapointed with this show\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3433#6\" target=\"_blank\">Comment 6</a>:\nBob on 2021-10-05:\n\"Deliberately misleading ?\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3433#7\" target=\"_blank\">Comment 7</a>:\nZen_floater2 on 2021-10-05:\n\"Reply to Ken Fallon\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3433#8\" target=\"_blank\">Comment 8</a>:\nBen on 2021-10-22:\n\"Reply to #4\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3434#comments\" target=\"_blank\">hpr3434</a></strong>\n(2021-09-30) \"<em>From 0 to K8s in 30 minutes</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=3434#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2021-10-01:\n\"What an amazing show\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3434#2\" target=\"_blank\">Comment 2</a>:\nMike Ray on 2021-10-01:\n\"Great show\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 22 comments on 7 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3436#comments\" target=\"_blank\">hpr3436</a></strong>\n(2021-10-04) \"<em>HPR Community News for September 2021</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=3436#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-10-13:\n\"Clarification\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3438#comments\" target=\"_blank\">hpr3438</a></strong>\n(2021-10-06) \"<em>Ten privacy friendly Google search alternatives.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0397.html\" target=\"_blank\">hakerdefo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3438#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2021-10-07:\n\"Mojeek\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3438#2\" target=\"_blank\">Comment 2</a>:\nLinux4security on 2021-10-19:\n\"browser\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3439#comments\" target=\"_blank\">hpr3439</a></strong>\n(2021-10-07) \"<em>Linux Inlaws S01E40: The One with the BSDs</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3439#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2021-10-07:\n\"Best of BSD!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3439#2\" target=\"_blank\">Comment 2</a>:\nZen_floater2 on 2021-10-09:\n\"This show put me up a tree\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3442#comments\" target=\"_blank\">hpr3442</a></strong>\n(2021-10-12) \"<em>What is this thing called science</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=3442#1\" target=\"_blank\">Comment 1</a>:\nBrian-in-ohio on 2021-10-13:\n\"science\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3442#2\" target=\"_blank\">Comment 2</a>:\ne8hffff on 2021-10-13:\n\"Re:[HPR3442] Klaatu, CoVID, and Science\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3442#3\" target=\"_blank\">Comment 3</a>:\nkingbeowulf on 2021-10-14:\n\"scientific method selectively apply based on \"feelings\"?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3442#4\" target=\"_blank\">Comment 4</a>:\nMad Sweeney on 2021-10-15:\n\"Hats Off to You\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3442#5\" target=\"_blank\">Comment 5</a>:\ne8hffff on 2021-10-16:\n\"The Pharmacist\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3444#comments\" target=\"_blank\">hpr3444</a></strong>\n(2021-10-14) \"<em>The Psion series 5mx</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0381.html\" target=\"_blank\">Nihilazo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3444#1\" target=\"_blank\">Comment 1</a>:\nBrian-in-ohio on 2021-10-14:\n\"compliment\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3444#2\" target=\"_blank\">Comment 2</a>:\nGumnos on 2021-10-14:\n\"Looking forward to this one!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3444#3\" target=\"_blank\">Comment 3</a>:\nCometcycle on 2021-10-15:\n\"Trip down memory lane\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3444#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2021-10-16:\n\"Great show!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3445#comments\" target=\"_blank\">hpr3445</a></strong>\n(2021-10-15) \"<em>True critical thinking seems to be the key</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=3445#1\" target=\"_blank\">Comment 1</a>:\nironhelixx on 2021-10-13:\n\"This is the way to handle misinformation\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3445#2\" target=\"_blank\">Comment 2</a>:\nAaronb on 2021-10-15:\n\"Reasoning\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3445#3\" target=\"_blank\">Comment 3</a>:\ne8hffff on 2021-10-16:\n\"Common Sense\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3445#4\" target=\"_blank\">Comment 4</a>:\nKevin O&#39;Brien on 2021-10-19:\n\"Bravo!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3445#5\" target=\"_blank\">Comment 5</a>:\nBrian-in-ohio on 2021-10-20:\n\"risk\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3445#6\" target=\"_blank\">Comment 6</a>:\nDave Morriss on 2021-10-30:\n\"Response to e8hffff, comment #3\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3445#7\" target=\"_blank\">Comment 7</a>:\nDave Morriss on 2021-10-30:\n\"Response to Brian-in-ohio, comment #5\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3446#comments\" target=\"_blank\">hpr3446</a></strong>\n(2021-10-18) \"<em>Speech To Text</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=3446#1\" target=\"_blank\">Comment 1</a>:\noperat0r on 2021-09-27:\n\"Example script\"</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/2021-October/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-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\">Older HPR shows on archive.org</h3>\n<p>This month 70 additional shows in the range 1-870 have been uploaded.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p>Thanks to the following contributors for sending in updates in the past month:<br />\n<b><a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0293.html\">Rho`n</a></b></p>\n<p>Over the period tags and/or summaries have been added to 38 shows which were without them.</p>\n<p>----------------------------------------<br />\n<b>Hooray!</b> There are now no more shows that need summaries or tags!</p>\n<p>Thanks to all of the contributors to this project. According to my records the people who have helped to get to this point are listed below. Apologies if I have omitted anyone from the list:<br />\n<a href=\"https://hackerpublicradio.org/correspondents/0198.html\">Ahuka</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0318.html\">archer72</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0357.html\">bjb</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0152.html\">ClaudioM</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0385.html\">crvs</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0382.html\">Daniel Persson</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken Fallon</a><br/><a href=\"Kirk%20Reiser\">Kirk Reiser</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0235.html\">NYbill</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0293.html\">Rho`n</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0338.html\">Tony Hughes</a><br/><a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a></p>\n<p>----------------------------------------<br />\n</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3481,'2021-12-06','HPR Community News for November 2021',5638,'HPR Volunteers talk about shows released and comments posted in November 2021','<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/0398.html\" target=\"_blank\">one_of_spoons</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</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=3456\" target=\"_blank\">3456</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-11-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3456\" target=\"_blank\">HPR Community News for October 2021</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=3457\" target=\"_blank\">3457</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-11-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3457\" target=\"_blank\">Tables</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=3458\" target=\"_blank\">3458</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-11-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3458\" target=\"_blank\">Living in the Terminal 2: The Obligatory Sequel</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3459\" target=\"_blank\">3459</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-11-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3459\" target=\"_blank\">Linux Inlaws S01E42: The Open Source Initiative</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3460\" target=\"_blank\">3460</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-11-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3460\" target=\"_blank\">Dodge and Burn</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=3461\" target=\"_blank\">3461</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-11-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3461\" target=\"_blank\">Changes to HPR Branding</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=3462\" target=\"_blank\">3462</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-11-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3462\" target=\"_blank\">Metal marbles.</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=3463\" target=\"_blank\">3463</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-11-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3463\" target=\"_blank\">Clonezilla: A backup story</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=3464\" target=\"_blank\">3464</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-11-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3464\" target=\"_blank\">Being irrational</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=3465\" target=\"_blank\">3465</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-11-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3465\" target=\"_blank\">Walmart Onn 7 inch tablet gen 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3466\" target=\"_blank\">3466</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-11-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3466\" target=\"_blank\">Why HPR has less downloads</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3467\" target=\"_blank\">3467</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-11-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3467\" target=\"_blank\">Protonmail in the terminal</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=3468\" target=\"_blank\">3468</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-11-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3468\" target=\"_blank\">Distro upgrade intervals on my Raspberry Pi</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=3469\" target=\"_blank\">3469</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-11-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3469\" target=\"_blank\">Linux Inlaws S01E43: The Great Battle or not</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3470\" target=\"_blank\">3470</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-11-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3470\" target=\"_blank\">External Commands and Emergency Boot Disk</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=3471\" target=\"_blank\">3471</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-11-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3471\" target=\"_blank\">The Sony Walkman WM-F41</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3472\" target=\"_blank\">3472</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-11-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3472\" target=\"_blank\">consuming an AQI API</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=3473\" target=\"_blank\">3473</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-11-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3473\" target=\"_blank\">My journey into Amateur Radio</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0314.html\" target=\"_blank\">thelovebug</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3474\" target=\"_blank\">3474</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-11-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3474\" target=\"_blank\">H P R and Audio Fun</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=3475\" target=\"_blank\">3475</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-11-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3475\" target=\"_blank\">How I Watch Everything Using Open Source Software</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0375.html\" target=\"_blank\">minnix</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3476\" target=\"_blank\">3476</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-11-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3476\" target=\"_blank\">My mutt email setup</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=3477\" target=\"_blank\">3477</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-11-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3477\" target=\"_blank\">Picking a Forth</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</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 20 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 5 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2169#comments\" target=\"_blank\">hpr2169</a></strong>\n(2016-11-24) \"<em>How I connect to the awesome #oggcastplanet on mobile</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0311.html\" target=\"_blank\">clacke</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2169#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2021-11-06:\n\"NickServ authentication\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2672#comments\" target=\"_blank\">hpr2672</a></strong>\n(2018-10-30) \"<em>Porteus</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=2672#4\" target=\"_blank\">Comment 4</a>:\nhhskladby on 2021-11-02:\n\"Porteus Modularity\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3034#comments\" target=\"_blank\">hpr3034</a></strong>\n(2020-03-19) \"<em>How to bridge Freenode IRC rooms to Matrix.org</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0270.html\" target=\"_blank\">Thaj Sara</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3034#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2021-11-06:\n\"libera.chat\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3454#comments\" target=\"_blank\">hpr3454</a></strong>\n(2021-10-28) \"<em>Engineering Notation</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3454#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2021-11-02:\n\"suffixes\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3454#3\" target=\"_blank\">Comment 3</a>:\nTrey on 2021-11-04:\n\"Great reminder\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 15 comments on 11 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3457#comments\" target=\"_blank\">hpr3457</a></strong>\n(2021-11-02) \"<em>Tables</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=3457#1\" target=\"_blank\">Comment 1</a>:\nJon Kulp on 2021-11-07:\n\"Tables and font sizes\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3457#2\" target=\"_blank\">Comment 2</a>:\nGumnos on 2021-11-17:\n\"Storing data in recsel format?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3459#comments\" target=\"_blank\">hpr3459</a></strong>\n(2021-11-04) \"<em>Linux Inlaws S01E42: The Open Source Initiative</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3459#1\" target=\"_blank\">Comment 1</a>:\nOliver on 2021-11-29:\n\"TerminusDB Link\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3461#comments\" target=\"_blank\">hpr3461</a></strong>\n(2021-11-08) \"<em>Changes to HPR Branding</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=3461#1\" target=\"_blank\">Comment 1</a>:\nMike eSpeak Ray on 2021-11-08:\n\"TTS\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3464#comments\" target=\"_blank\">hpr3464</a></strong>\n(2021-11-11) \"<em>Being irrational</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=3464#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2021-11-11:\n\"a serendipitous quote\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3465#comments\" target=\"_blank\">hpr3465</a></strong>\n(2021-11-12) \"<em>Walmart Onn 7 inch tablet gen 2</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3465#1\" target=\"_blank\">Comment 1</a>:\nPipeManMusic on 2021-11-12:\n\"Real numbers to an off hand comment.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3466#comments\" target=\"_blank\">hpr3466</a></strong>\n(2021-11-15) \"<em>Why HPR has less downloads</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3466#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-11-15:\n\"On the rise again\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3470#comments\" target=\"_blank\">hpr3470</a></strong>\n(2021-11-19) \"<em>External Commands and Emergency Boot Disk</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=3470#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-11-19:\n\"Oh what happy memories\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3470#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2021-11-19:\n\"You are most welcome\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3471#comments\" target=\"_blank\">hpr3471</a></strong>\n(2021-11-22) \"<em>The Sony Walkman WM-F41</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3471#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-11-22:\n\"Capacitors\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3471#2\" target=\"_blank\">Comment 2</a>:\nKeith on 2021-11-23:\n\"They really are great devices\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3471#3\" target=\"_blank\">Comment 3</a>:\nJon Kulp on 2021-11-23:\n\"Recapping\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3472#comments\" target=\"_blank\">hpr3472</a></strong>\n(2021-11-23) \"<em>consuming an AQI API</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0243.html\" target=\"_blank\">Jezra</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3472#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2021-11-27:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3473#comments\" target=\"_blank\">hpr3473</a></strong>\n(2021-11-24) \"<em>My journey into Amateur Radio</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0314.html\" target=\"_blank\">thelovebug</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3473#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-11-24:\n\"Congrats\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3474#comments\" target=\"_blank\">hpr3474</a></strong>\n(2021-11-25) \"<em>H P R and Audio Fun</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=3474#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2021-11-27:\n\"No please don\'t add silence to the audio\"</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/2021-November/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-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=\"providing-a-valid-link-to-your-shows-audio\">Providing a valid link to your show\'s audio</h3>\n<p>In the upload form there is the option to provide shows via a URL. This must be a publicly available URL that is accessible without authentication via command line tools like wget or curl.</p>\n<h3 id=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>This month 115 additional shows in the range 1-870 have been uploaded.</p>\n<p>The number of shows left to upload in this range is now: 369.</p>\n<h3 id=\"tags-and-summaries\">Tags and Summaries</h3>\n<p><b>Hooray!</b> There are now no more shows that need summaries or tags!</p>\n<p>See the notes for episode <a href=\"https://hackerpublicradio.org/eps.php?id=3456\">3456</a> for a list of all the contributors to this project</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3162,'2020-09-15','Introduction to Ansible',2674,'Klaatu demonstrates some Ansible tricks, and how Ansible can be a better choice than scripting.','<p>\r\nIntroduction to Ansible.\r\n</p>',78,0,0,'CC-BY-SA','ansible,sysadmin',0,0,1),
(3163,'2020-09-16','Linux Inlaws S01E13: The road to communism and freedom',3855,'Our old heroes discuss their legacy and how they arrived at open source software and communism','<ul>\r\n<li>brytlyt: <a href=https://www.brytlyt.com target=_blank>https://www.brytlyt.com</a></li>\r\n<li>OS/2: <a href=https://en.wikipedia.org/wiki/OS/2 target=_blank>https://en.wikipedia.org/wiki/OS/2</a></li>\r\n<li>CCP/M: <a href=https://en.wikipedia.org/wiki/Multiuser_DOS#CCP/M-86 target=_blank>https://en.wikipedia.org/wiki/Multiuser_DOS#CCP/M-86</a></li>\r\n<li>Communism and open source: <a href=https://medium.com/@diego.graziano/open-source-the-communism-of-knowledge-fe76334b9b10 target=_blank>https://medium.com/@diego.graziano/open-source-the-communism-of-knowledge-fe76334b9b10</a></li>\r\n<li>Why Emacs is better than vi (aka The Church of Emacs): <a href=https://www.gnu.org/fun/jokes/gospel.html target=_blank>https://www.gnu.org/fun/jokes/gospel.html</a></li>\r\n<li>(Open)VMS: <a href=https://en.wikipedia.org/wiki/OpenVMS target=_blank>https://en.wikipedia.org/wiki/OpenVMS</a></li>\r\n<li>Mach: <a href=\"https://en.wikipedia.org/wiki/Mach_(kernel)\" target=_blank>https://en.wikipedia.org/wiki/Mach_(kernel)</a></li>\r\n<li>Dave Cutler: <a href=\"https://en.wikipedia.org/wiki/Dave_Cutler\" target=_blank>https://en.wikipedia.org/wiki/Dave_Cutler</a></li>\r\n<li>The ultimate remedy for insomnia: <a href=https://www.routledge.com/Advances-in-Object-Oriented-Metalevel-Architectures-and-Reflection/Zimmermann/p/book/9780849326639 target=_blank>https://www.routledge.com/Advances-in-Object-Oriented-Metalevel-Architectures-and-Reflection/Zimmermann/p/book/9780849326639</a></li>\r\n<li>Randal\'s departure from FLOSS Weekly: <a href=https://twit.tv/posts/inside-twit/doc-searls-new-host-floss-weekly target=_blank>https://twit.tv/posts/inside-twit/doc-searls-new-host-floss-weekly</a></li>\r\n<li>The Rust Foundation: <a href=https://blog.rust-lang.org/2020/08/18/laying-the-foundation-for-rusts-future.html target=_blank>https://blog.rust-lang.org/2020/08/18/laying-the-foundation-for-rusts-future.html</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','open source, communism, escort services, freedom, Mach, VMS, accounts',0,0,1),
(3166,'2020-09-21','Using Ansible to mirror a Git repo',1580,'Klaatu uses Ansible to mirror a Git repo on two separate Git hosts','<p>\r\nI came up with a way to easily clone a repo living on Github and mirror it, with all the latest commits, on another Git host. You can schedule Ansible to run periodically to ensure your mirror stays updated.\r\n</p>\r\n\r\n<p>\r\nThis is <a href=\"https://github.com/dwayne-lee/mirrored_repos\" target=\"_blank\">Dwayne Lee&#39;s improved implementation based on my original script</a>.\r\n</p>',78,0,0,'CC-BY-SA','ansible,sysadmin,git',0,0,1),
(3169,'2020-09-24','Ludwig van Beethoven with a hint of Chopin',2518,'A fine treat to satisfy your earholes.','<p>All music in this episode is freely available from musopen.org.</p>\r\n\r\n<h3>Links</h3>\r\n\r\n<ul>\r\n<li><a href=\"https://musopen.org/music/2547-piano-sonata-no-14-in-c-sharp-minor-moonlight-sonata-op-27-no-2/\">Beethoven Piano Sonata no. 14 in C-sharp minor \'Moonlight Sonata\', Op. 27 no. 2</a></li>\r\n<li><a href=\"https://musopen.org/music/2567-symphony-no-5-in-c-minor-op-67/\">Beethoven Symphony no. 5 in C minor, Op. 67</a></li>\r\n<li><a href=\"https://musopen.org/music/612-fantaisie-impromptu-op-66/\">Chopin Fantaisie - Impromptu, Op. 66</a></li>\r\n<li><a href=\"https://musopen.org/music/33-piano-sonata-no-8-in-c-minor-pathetique-op-13/\">Beethoven Piano Sonata no. 8 in C minor \'Pathetique\', Op. 13</a></li>\r\n<li><a href=\"https://musopen.org/music/46-piano-sonata-no-21-in-c-major-waldstein-op-53/\">Beethoven Piano Sonata no. 21 in C major \'Waldstein\', Op. 53</a></li>\r\n</ul>\r\n',383,22,0,'CC-BY-SA','Ludwig Van Beethoven,Fredrick Chopin,classical,energetic,music,public domain',0,0,1),
(3167,'2020-09-22','A ramble with the Pentland Squires (part 1)',2547,'MrX and Dave Morriss chat from opposite sides of the Pentland Hills, Edinburgh','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Once again the two HPR hosts based in Edinburgh got together over Mumble to have a chat during the COVID-19 pandemic.</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\r\n</ul>\r\n<p>We recorded this conversation in the evening of Sunday 23<sup>rd</sup> August 2020.</p>\r\n<p>The audio was quite long when we’d finished, so we decided to cut it into two similar-length pieces and the remainder is released as a second episode.</p>\r\n<h3 id=\"show-title\">Show title</h3>\r\n<p>Although a explaining a joke can often destroy it, it’s probably worth saying that the title of this show was derived from the name of a variety of potato, <em>Pentland Squire</em>, and the fact that the two participants were separated by the Pentland Hills in Edinburgh! <code>\"</code>Where was the joke?<code>\"</code> you ask…</p>\r\n<h2 id=\"notes\">Notes</h2>\r\n<p>Some of the topics we discussed:</p>\r\n<ul>\r\n<li>Our positions relative to the Pentland Hills: MrX is to the East and Dave is to the West of the area, which is to the south of Edinburgh, about 6 or 7 miles out.\r\n<ul>\r\n<li><a href=\"https://www.pentlandhills.org/\">Pentland Hills Regional Park</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>The state of COVID-19 and the lockdown in Scotland\r\n<ul>\r\n<li><a href=\"https://www.travellingtabby.com/scotland-coronavirus-tracker/\">Scotland Coronavirus Tracker</a></li>\r\n<li><a href=\"https://coronavirus.data.gov.uk/\">Coronavirus (COVID-19) in the UK</a> - no longer offering a simple CSV download as it originally did, but now has a detailed API.</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Processing HPR shownotes:\r\n<ul>\r\n<li>Experiences:\r\n<ul>\r\n<li>HTML, preferred but needs to be high quality</li>\r\n<li>Markdown, if well formatted this is the easiest to deal with</li>\r\n<li>Plain text, gets converted to Markdown by volunteers</li>\r\n</ul></li>\r\n<li><a href=\"https://github.com/retext-project/retext\">ReText, an editor for Markdown and reStructuredText markup languages</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Glasgow Podcrawl\r\n<ul>\r\n<li>A virtual meeting this year over Jitsi</li>\r\n<li>Some people joined from very far away such as <a href=\"https://hackerpublicradio.org/correspondents/0078.html\">Klaatu</a> in New Zealand</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Scripts written in recent times:\r\n<ul>\r\n<li>MrX: finding the duration of a video with <a href=\"https://ffmpeg.org/ffprobe-all.html\"><code>ffprobe</code></a>.</li>\r\n<li>Dave: choosing a meal from a list in a database to cook for the family</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Vegetarianism\r\n<ul>\r\n<li>MrX’s experiences</li>\r\n<li>Dave often makes a <a href=\"https://en.wikipedia.org/wiki/Nut_roast\"><em>Nut Roast</em></a> for Christmas dinner</li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','COVID-19,physical isolation,discussion',0,0,1),
(3168,'2020-09-23','FreeBSD Jails and iocage',531,'Use iocage to manage freebsd jails','<h2 id=\"freebsd-jails-with-iocage\">FreeBSD Jails with iocage</h2>\r\n<h3 id=\"introduction\">Introduction</h3>\r\n<p>FreeBSD jails allow users to run multiple, isolated instances of FreeBSD on a single server. Iocage simplifies the management of FreeBSD Jails.</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/OS-level_virtualization\">https://en.wikipedia.org/wiki/OS-level_virtualization</a></p>\r\n<p>The jails will be configured to bind to an IP address on the jail host\'s internal network. The host OS will pass traffic from the external network to the jail.</p>\r\n<p>The jails will be managed with Iocage. Iocage uses ZFS properties to store configuration data for each jail, so a ZFS file system is required.</p>\r\n<h3 id=\"network-setup\">Network setup</h3>\r\n<p>These steps will:</p>\r\n<ol>\r\n<li>Set up the internal network.</li>\r\n<li>Enable the <strong>pf</strong> packet filter</li>\r\n<li>Configure pf pass internet traffic to and from the jail.</li>\r\n</ol>\r\n<p>PF is full featured firewall, and can do more than just pass traffic to an internal network. Refer to the PF documentation for additional configuration options.</p>\r\n<h4 id=\"run-the-following-to-configure-the-internal-network-and-enable-pf\">Run the following to configure the internal network and enable pf.</h4>\r\n<pre><code>sysrc cloned_interfaces+=&quot;lo1&quot;\r\nsysrc ifconfig_lo1=&quot;inet 192.0.2.1/24&quot;\r\nsysrc pf_enable=&quot;YES&quot;\r\n</code></pre>\r\n<h4 id=\"put-the-following-in-etcpfconf\">Put the following in <code>/etc/pf.conf</code></h4>\r\n<pre><code># Variables\r\n# ext_if should be set to the hosts external NIC\r\next_if = &quot;vtnet0&quot;\r\njail_if = &quot;lo1&quot;\r\njail_net = $jail_if:network\r\n\r\n# NAT allows the jails to access the external network\r\nnat on $ext_if from $jail_net to any -&gt; ($ext_if)\r\n\r\n# Redirect traffic on port 80 to the web server jail\r\n# Add similar rules for additional jails\r\nrdr pass on $ext_if inet proto tcp to port 80 -&gt; 192.0.2.10\r\n</code></pre>\r\n<p><em>Reboot</em> to activate the network changes</p>\r\n<h3 id=\"zfs\">ZFS</h3>\r\n<p>The best way to use ZFS on a VPS is to attach block storage as a new disk.</p>\r\n<p>If block storage is not available, you can optionally use a file as the ZFS device.</p>\r\n<h4 id=\"enable-and-start-zfs\">Enable and start ZFS.</h4>\r\n<pre><code>sysrc zfs_enable=&quot;YES&quot;\r\nservice zfs start\r\n</code></pre>\r\n<h4 id=\"zfs-using-block-storage\">ZFS using Block storage</h4>\r\n<p>List the available disks. If you are using a VPS, the block store will probably be the second disk.</p>\r\n<pre><code>geom disk list\r\n</code></pre>\r\n<p>Create a ZFS pool named jailstore.</p>\r\n<pre><code>zpool create jailstore  /dev/vtbd1\r\n</code></pre>\r\n<h4 id=\"zfs-using-a-file\">ZFS using a file</h4>\r\n<p>Create the ZFS file.</p>\r\n<pre><code>dd if=/dev/zero of=/zfsfile bs=1M count=4096\r\n</code></pre>\r\n<p>Create a ZFS pool named jailstore.</p>\r\n<pre><code>zpool create jailstore /zfsfile\r\n</code></pre>\r\n<h3 id=\"install-iocage\">Install iocage</h3>\r\n<pre><code>pkg install py36-iocage\r\n</code></pre>\r\n<h3 id=\"using-iocage\">Using iocage</h3>\r\n<pre><code>iocage activate jailstore\r\niocage fetch\r\n\r\niocage create -n www ip4_addr=&quot;lo1|192.0.2.10/24&quot; -r 11.1-RELEASE\r\niocage start www\r\niocage console www\r\n</code></pre>\r\n<p>Once you have a shell <strong>inside the jail</strong>, install and start Apache.</p>\r\n<pre><code>pkg install apache24\r\nsysrc apache24_enable=&quot;yes&quot;\r\nservice apache24 start\r\n</code></pre>\r\n<p>Port 80 on the jail will now be accessible on the hosts IP address.</p>\r\n<h3 id=\"multiple-jails\">Multiple jails.</h3>\r\n<p>Additional jails can be installed using the example above.</p>\r\n<ol>\r\n<li>Install the new jail with the <code>iocage create</code> command , but use a different IP address</li>\r\n<li>Expose the new jail to the network by adding additional rules to pf.conf.</li>\r\n</ol>\r\n<h3>Book recommendation</h3>\r\n<ul>\r\n<li><a href=\"https://www.tiltedwindmillpress.com/product/fmjail\"><em>FreeBSD Mastery: Jails</em>, Michael W Lucas</a><br/>\r\nMichael W Lucas is great Technical book author.</li>\r\n</ul>\r\n',342,0,0,'CC-BY-SA','BSD',0,0,1),
(3172,'2020-09-29','A ramble with the Pentland Squires (part 2)',2983,'Second half of the chat between MrX and Dave Morriss','<p>The two HPR hosts based in Edinburgh got together over Mumble on the evening of Sunday 23<sup>rd</sup> August 2020 to have a chat during the COVID-19 pandemic.</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\r\n</ul>\r\n<p>This is the second half of the conversation. For the first part see <a href=\"https://hackerpublicradio.org/eps.php?id=3167\">HPR show 3167</a>.</p>\r\n<h2 id=\"notes\">Notes</h2>\r\n<p>Some of the topics we discussed:</p>\r\n<ul>\r\n<li>Listening to podcasts\r\n<ul>\r\n<li>MrX’s recent show <a href=\"https://hackerpublicradio.org/eps.php?id=3132\"><em>Keeping track of where I am</em></a></li>\r\n<li>Using phone-based apps like <a href=\"https://antennapod.org/\">Antennapod</a></li>\r\n<li><a href=\"https://www.rockbox.org/\">Rockbox (free music player firmware)</a> on Sansa Fuze, Sansa Clip, Clip+, Clip Zip, etc</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Mobile phones and tablets\r\n<ul>\r\n<li>MrX likes his <a href=\"https://www.nokia.com/phones/en_gb/nokia-5310\">Nokia 5310</a></li>\r\n<li>Dave is interested in the <a href=\"https://www.pine64.org/pinephone/\">PinePhone</a></li>\r\n<li>MrX has a Samsung Galaxy tablet (and did an HPR episode about it: <a href=\"https://hackerpublicradio.org/eps.php?id=3030\">hpr3030 :: My new Samsung tablet</a>)</li>\r\n<li><em>Smart</em> devices want to make you a <em>victim</em>!</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Digital data versus pieces of paper\r\n<ul>\r\n<li>Dave is using a Google spreadsheet shopping list which he can share with his kids who are shopping for him</li>\r\n<li>There’s still a desire to keep things on paper though</li>\r\n<li>The tendency to hoard bits of paper</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Using Windows\r\n<ul>\r\n<li>Multiple (virtual) desktops on Windows 10, a counter-intuitive design</li>\r\n<li>Outlook as a mail client (with Exchange) is very poor compared to open source options</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>3D printing\r\n<ul>\r\n<li><a href=\"https://www.openscad.org/\">OpenSCAD: <em>The Programmers Solid 3D CAD Modeller</em></a></li>\r\n<li>A <a href=\"https://en.wikipedia.org/wiki/Slicer_(3D_printing)\">Slicer</a>: software for converting a 3D model into instructions for a 3D printer in the form of <a href=\"https://en.wikipedia.org/wiki/G-code\">G-code</a>.</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>The current pandemic\r\n<ul>\r\n<li>Lockdown controls exposure to the virus and limits cases</li>\r\n<li>Fewer cases means the health service can cope better</li>\r\n<li><em>Sheltering</em> keeps vulnerable people safe until a vaccine is available</li>\r\n<li><em>Herd Immunity</em> is when the majority of people are immune to the virus and don’t transmit it to vulnerable people</li>\r\n<li>Long-term effects of COVID-19</li>\r\n<li>Asymptomatic carriers of the virus</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>HPR listening and contributing in the time of COVID\r\n<ul>\r\n<li>Current times tend to make it harder to keep up to date with shows</li>\r\n<li>It’s also harder to make time to make contributions at the moment</li>\r\n<li>Issues with motivation</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Miscellaneous\r\n<ul>\r\n<li>MrX’s car needing attention due to rust</li>\r\n<li>Dave’s anecdote of his neighbour losing power late one night</li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','COVID-19,physical isolation,discussion',0,0,1),
(3240,'2021-01-01','Linux Under Attack',978,'A look at how malware is now targeting Linux, especially servers','<p>At one time most malware targeted Windows because it was the most popular OS, but as Linux has risen in popularity, particularly in the data center, it has become a target. We look at some of the recent attacks on Linux, and note some common features of the attacks. This then suggests some ways we can protect ourselves</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://build5nines.com/linux-is-most-used-os-in-microsoft-azure-over-50-percent-fo-vm-cores/\" class=\"uri\">https://build5nines.com/linux-is-most-used-os-in-microsoft-azure-over-50-percent-fo-vm-cores/</a></li>\r\n<li><a href=\"https://w3techs.com/technologies/comparison/os-linux,os-windows\" class=\"uri\">https://w3techs.com/technologies/comparison/os-linux,os-windows</a></li>\r\n<li><a href=\"https://gs.statcounter.com/os-market-share\" class=\"uri\">https://gs.statcounter.com/os-market-share</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Chrome_OS\" class=\"uri\">https://en.wikipedia.org/wiki/Chrome_OS</a></li>\r\n<li><a href=\"https://www.zdnet.com/article/this-surprise-linux-malware-warning-shows-that-hackers-are-changing-their-targets/\" class=\"uri\">https://www.zdnet.com/article/this-surprise-linux-malware-warning-shows-that-hackers-are-changing-their-targets/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/security-and-privacy/ssh-and-tunneling/ssh-introduction/\" class=\"uri\">https://www.zwilnik.com/security-and-privacy/ssh-and-tunneling/ssh-introduction/</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1850\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=1850</a></li>\r\n<li><a href=\"https://www.bleepingcomputer.com/news/security/russian-hacker-pleads-guilty-for-role-in-infamous-linux-ebury-malware/\" class=\"uri\">https://www.bleepingcomputer.com/news/security/russian-hacker-pleads-guilty-for-role-in-infamous-linux-ebury-malware/</a></li>\r\n<li><a href=\"https://www.theregister.com/2016/09/02/alleged_linux_hacker_arrested/\" class=\"uri\">https://www.theregister.com/2016/09/02/alleged_linux_hacker_arrested/</a></li>\r\n<li><a href=\"https://www.helpnetsecurity.com/2018/12/07/linux-backdoors-openssh/\" class=\"uri\">https://www.helpnetsecurity.com/2018/12/07/linux-backdoors-openssh/</a></li>\r\n<li><a href=\"https://www.welivesecurity.com/wp-content/uploads/2018/12/ESET-The_Dark_Side_of_the_ForSSHe.pdf\" class=\"uri\">https://www.welivesecurity.com/wp-content/uploads/2018/12/ESET-The_Dark_Side_of_the_ForSSHe.pdf</a></li>\r\n<li><a href=\"https://www.helpnetsecurity.com/2018/12/07/linux-backdoors-openssh/\" class=\"uri\">https://www.helpnetsecurity.com/2018/12/07/linux-backdoors-openssh/</a></li>\r\n<li><a href=\"https://www.nsa.gov/news-features/press-room/Article/2311407/nsa-and-fbi-expose-russian-previously-undisclosed-malware-drovorub-in-cybersecu/\" class=\"uri\">https://www.nsa.gov/news-features/press-room/Article/2311407/nsa-and-fbi-expose-russian-previously-undisclosed-malware-drovorub-in-cybersecu/</a></li>\r\n<li><a href=\"https://www.zdnet.com/article/fbi-and-nsa-expose-new-linux-malware-drovorub-used-by-russian-state-hackers/\" class=\"uri\">https://www.zdnet.com/article/fbi-and-nsa-expose-new-linux-malware-drovorub-used-by-russian-state-hackers/</a></li>\r\n<li><a href=\"https://www.bleepingcomputer.com/news/security/lucifer-cryptomining-ddos-malware-now-targets-linux-systems/\" class=\"uri\">https://www.bleepingcomputer.com/news/security/lucifer-cryptomining-ddos-malware-now-targets-linux-systems/</a></li>\r\n<li><a href=\"https://www.bleepingcomputer.com/news/security/lemon-duck-cryptominer-malware-now-targets-linux-devices/\" class=\"uri\">https://www.bleepingcomputer.com/news/security/lemon-duck-cryptominer-malware-now-targets-linux-devices/</a></li>\r\n<li><a href=\"https://www.bleepingcomputer.com/news/security/fritzfrog-malware-attacks-linux-servers-over-ssh-to-mine-monero/\" class=\"uri\">https://www.bleepingcomputer.com/news/security/fritzfrog-malware-attacks-linux-servers-over-ssh-to-mine-monero/</a></li>\r\n<li><a href=\"https://www.amazon.com/SSH-Mastery-OpenSSH-PuTTY-Tunnels/dp/1642350028\" class=\"uri\">https://www.amazon.com/SSH-Mastery-OpenSSH-PuTTY-Tunnels/dp/1642350028</a></li>\r\n<li><a href=\"https://www.zwilnik.com/security-and-privacy/linux-under-attack/\" class=\"uri\">https://www.zwilnik.com/security-and-privacy/linux-under-attack/</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','Linux, malware, ssh',0,0,1),
(3174,'2020-10-01','Linux Inlaws S01E14: The big programming language panel',3174,'Our heroes host an eclectic panel of experts discussion C(++), Python and Rust. ','<br/>Shownotes:<br/>\r\n<ul>\r\n<li>Bottlerocket: <a href=\"https://aws.amazon.com/about-aws/whats-new/2020/08/announcing-general-availability-of-bottlerocket\" target=\"_blank\">https://aws.amazon.com/about-aws/whats-new/2020/08/announcing-general-availability-of-bottlerocket</a></li>\r\n<li>Windows as a rolling release: <a href=\"https://ubuntupodcast.org/2020/08/27/s13e23-horseshoe\" target=\"_blank\">https://ubuntupodcast.org/2020/08/27/s13e23-horseshoe</a></li>\r\n<li>LPC Rust in kernel: <a href=\"https://program.linuxplumbersconf.org/event/7/contributions/804/attachments/641/1168/barriers-to-in-tree-rust.pdf\" target=\"_blank\">https://program.linuxplumbersconf.org/event/7/contributions/804/attachments/641/1168/barriers-to-in-tree-rust.pdf</a></li>\r\n<li>Redox OS: <a href=\"https://www.redox-os.org\" target=\"_blank\">https://www.redox-os.org</a></li>\r\n<li>FC33: <a href=\"https://fedoramagazine.org/btrfs-coming-to-fedora-33\" target=\"_blank\">https://fedoramagazine.org/btrfs-coming-to-fedora-33</a></li>\r\n<li>Linux kernel history report: <a href=\"https://www.linuxfoundation.org/resources/publications/2020-kernel-history-report\" target=\"_blank\">https://www.linuxfoundation.org/resources/publications/2020-kernel-history-report</a></li>\r\n<li>Thunderbird 78 with OpenPGP: <a href=\"https://wiki.mozilla.org/Thunderbird:OpenPGP:2020\" target=\"_blank\">https://wiki.mozilla.org/Thunderbird:OpenPGP:2020</a></li>\r\n<li>Python Software Foundation: <a href=\"https://www.python.org/psf\" target=\"_blank\">https://www.python.org/psf</a></li>\r\n<li>Rust project website: <a href=\"https://www.rust-lang.org\" target=\"_blank\">https://www.rust-lang.org</a></li>\r\n<li>ISO C working group: <a href=\"https://www.open-std.org/jtc1/sc22/wg14\" target=\"_blank\">https://www.open-std.org/jtc1/sc22/wg14</a></li>\r\n<li>ISO C++ standard: <a href=\"https://isocpp.org\" target=\"_blank\">https://isocpp.org</a></li>\r\n<li>Rust @ Microsoft: <a href=\"https://www.youtube.com/watch?v=NQBVUjdkLAA\" target=\"_blank\">https://www.youtube.com/watch?v=NQBVUjdkLAA</a></li>\r\n<li>Rainbow escort: <a href=\"https://www.etsy.com/de/market/rainbow_escort_card\" target=\"_blank\">https://www.etsy.com/de/market/rainbow_escort_card</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','C++, Python, Rust, Rainbow Escorts, Halloween',0,0,1),
(3185,'2020-10-16','Pandemics In History',1062,'Infectious disease is one of the most important factors influencing human history','<p>This is a look at how infectious diseases have changed the course of human history. It is admittedly a bit Euro- or Western-centric since that is what I know best. But I think the point of its importance applies more broadly.</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Plague_of_Athens\" class=\"uri\">https://en.wikipedia.org/wiki/Plague_of_Athens</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Antonine_Plague\" class=\"uri\">https://en.wikipedia.org/wiki/Antonine_Plague</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Plague_of_Cyprian\" class=\"uri\">https://en.wikipedia.org/wiki/Plague_of_Cyprian</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Crisis_of_the_Third_Century\" class=\"uri\">https://en.wikipedia.org/wiki/Crisis_of_the_Third_Century</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Plague_of_Justinian\" class=\"uri\">https://en.wikipedia.org/wiki/Plague_of_Justinian</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Black_Death\" class=\"uri\">https://en.wikipedia.org/wiki/Black_Death</a></li>\r\n<li><a href=\"https://www.amazon.com/1491-Revelations-Americas-Before-Columbus/dp/1400032059\" class=\"uri\">https://www.amazon.com/1491-Revelations-Americas-Before-Columbus/dp/1400032059</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/0\" class=\"uri\">https://en.wikipedia.org/wiki/0</a></li>\r\n<li><a href=\"https://www.pri.org/stories/2019-01-31/european-colonization-americas-killed-10-percent-world-population-and-caused\" class=\"uri\">https://www.pri.org/stories/2019-01-31/european-colonization-americas-killed-10-percent-world-population-and-caused</a></li>\r\n<li><a href=\"https://www.amazon.com/Guns-Germs-Steel-Fates-Societies/dp/0393317552\" class=\"uri\">https://www.amazon.com/Guns-Germs-Steel-Fates-Societies/dp/0393317552</a></li>\r\n<li><a href=\"https://www.scientificamerican.com/article/mass-deaths-in-americas-start-new-co2-epoch/\" class=\"uri\">https://www.scientificamerican.com/article/mass-deaths-in-americas-start-new-co2-epoch/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Cocoliztli_epidemics\" class=\"uri\">https://en.wikipedia.org/wiki/Cocoliztli_epidemics</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Spanish_flu\" class=\"uri\">https://en.wikipedia.org/wiki/Spanish_flu</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Cytokine_storm\" class=\"uri\">https://en.wikipedia.org/wiki/Cytokine_storm</a></li>\r\n<li><a href=\"https://dc.gov/measles/downloads/MeaslesDataAndStatsSlideSet.pdf\" class=\"uri\">https://dc.gov/measles/downloads/MeaslesDataAndStatsSlideSet.pdf</a></li>\r\n<li><a href=\"https://www.palain.com/health-topics/pandemics-in-history/\" class=\"uri\">https://www.palain.com/health-topics/pandemics-in-history/</a></li>\r\n</ul>\r\n',198,100,0,'CC-BY-SA','Health, Infectious Disease, History, Pandemics',0,0,1),
(3171,'2020-09-28','A Week On Soylent',735,'Lostnbronx tries eating nothing but Soylent, so you don\'t have to.','<p>I bought - and ate - a jar of Soylent, which is a powdered food replacement product. These are my thoughts.</p>\r\n<ul>\r\n<li><p>Company Website:<br />\r\n<a href=\"https://soylent.com/\" class=\"uri\">https://soylent.com/</a></p></li>\r\n<li><p>Wikipedia Article:<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Soylent_(meal_replacement)\" class=\"uri\">https://en.wikipedia.org/wiki/Soylent_(meal_replacement)</a></p></li>\r\n</ul>',107,0,0,'CC-BY-SA','soylent, food, health, diet, lostnbronx',0,0,1),
(3173,'2020-09-30','Manage your Raspberry Pi fleet with Ansible',1209,'A solution to the problem of updating difficult-to-reach Raspberry Pis in the enterprise.','<p>\r\nThis is the final show in the miniseries on how to manage your RaspberryPis with ansible. The goal is to produce a common base Raspberry Pi OS image that doesn\'t change often but, once it\'s installed, can automatically be customized, maintained, and managed remotely.\r\n</p>\r\n<p>\r\nWe will create the base image using the <a href=\"https://github.com/kenfallon/fix-ssh-on-pi\">script fix-ssh-on-pi<a/> which is available on GitHub. \r\n</p>\r\n<p>\r\nThen we will identify the hosts on the network with tips from <a href=\"https://hackerpublicradio.org/correspondents/0036.html\">operat0r</a> in show <a href=\"https://hackerpublicradio.org/eps.php?id=3090\">hpr3090 :: Locating Computers on a Enterprise Network</a>, or for simpler networks from my own show <a href=\"https://hackerpublicradio.org/eps.php?id=3052\">hpr3052 :: Locating computers on a network</a>.\r\n</p>\r\n<p>\r\nFinally we will provision the devices using tips from <a href=\"https://hackerpublicradio.org/eps.php?id=3080\">hpr3080 :: Ansible ping</a>, and <a href=\"https://hackerpublicradio.org/eps.php?id=3162\">hpr3162 :: Introduction to Ansible </a>\r\n</p>\r\n<p>\r\nThis show has been been simultaneously published as an <a href=\"https://opensource.com/article/20/9/raspberry-pi-ansible\">article on opensource.com</a>.\r\n</p>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0036.html\">https://hackerpublicradio.org/correspondents/0036.html</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0078.html\">https://hackerpublicradio.org/correspondents/0078.html</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2356\">https://hackerpublicradio.org/eps.php?id=2356</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3052\">https://hackerpublicradio.org/eps.php?id=3052</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3080\">https://hackerpublicradio.org/eps.php?id=3080</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3090\">https://hackerpublicradio.org/eps.php?id=3090</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3162\">https://hackerpublicradio.org/eps.php?id=3162</a></li>\r\n<li><a href=\"https://man7.org/linux/man-pages/man8/losetup.8.html\">https://man7.org/linux/man-pages/man8/losetup.8.html</a></li>\r\n<li><a href=\"https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html\">https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html</a></li>\r\n<li><a href=\"https://docs.ansible.com/ansible/latest/modules/apt_module.html\">https://docs.ansible.com/ansible/latest/modules/apt_module.html</a></li>\r\n<li><a href=\"https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html\">https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html</a></li>\r\n<li><a href=\"https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html\">https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html</a></li>\r\n<li><a href=\"https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html\">https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Ansible_%28software%29%23Design_goals\">https://en.wikipedia.org/wiki/Ansible_%28software%29%23Design_goals</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software\">https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/DevOps\">https://en.wikipedia.org/wiki/DevOps</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Domain_Name_System\">https://en.wikipedia.org/wiki/Domain_Name_System</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol\">https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Enterprise_resource_planning\">https://en.wikipedia.org/wiki/Enterprise_resource_planning</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Hostname\">https://en.wikipedia.org/wiki/Hostname</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Idempotent\">https://en.wikipedia.org/wiki/Idempotent</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ISO_9000\">https://en.wikipedia.org/wiki/ISO_9000</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/MAC_address\">https://en.wikipedia.org/wiki/MAC_address</a></li>\r\n<li><a href=\"https://github.com/kenfallon/fix-ssh-on-pi\">https://github.com/kenfallon/fix-ssh-on-pi</a></li>\r\n<li><a href=\"https://github.com/nmcclain/raspberian-firstboot\">https://github.com/nmcclain/raspberian-firstboot</a></li>\r\n<li><a href=\"https://wiki.debian.org/DebianReleases\">https://wiki.debian.org/DebianReleases</a></li>\r\n<li><a href=\"https://www.amazon.com/StarTech-com-4-Slot-USB-C-Card-Reader/dp/B07HVPNQRQ/\">https://www.amazon.com/StarTech-com-4-Slot-USB-C-Card-Reader/dp/B07HVPNQRQ/</a></li>\r\n<li><a href=\"https://www.ansible.com/\">https://www.ansible.com/</a></li>\r\n<li><a href=\"https://www.cyberciti.biz/faq/ansible-apt-update-all-packages-on-ubuntu-debian-linux/\">https://www.cyberciti.biz/faq/ansible-apt-update-all-packages-on-ubuntu-debian-linux/</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/blog/raspberry-pi-4-on-sale-now-from-35/#comment-1510410\">https://www.raspberrypi.org/blog/raspberry-pi-4-on-sale-now-from-35/#comment-1510410</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/documentation/configuration/raspi-config.md\">https://www.raspberrypi.org/documentation/configuration/raspi-config.md</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net_tutorial.md\">https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net_tutorial.md</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/documentation/raspbian/updating.md\">https://www.raspberrypi.org/documentation/raspbian/updating.md</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/education/\">https://www.raspberrypi.org/education/</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/products/raspberry-pi-1-model-b-plus/\">https://www.raspberrypi.org/products/raspberry-pi-1-model-b-plus/</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/products/raspberry-pi-2-model-b/\">https://www.raspberrypi.org/products/raspberry-pi-2-model-b/</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/products/raspberry-pi-3-model-a-plus/\">https://www.raspberrypi.org/products/raspberry-pi-3-model-a-plus/</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/products/raspberry-pi-3-model-b/\">https://www.raspberrypi.org/products/raspberry-pi-3-model-b/</a></li>\r\n<li><a href=\"https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/\">https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/</a></li>\r\n<li><a href=\"https://www.raspbian.org/\">https://www.raspbian.org/</a></li>\r\n</ul>',30,0,0,'CC-BY-SA','raspberrypi, Raspbian, ansible, opensource.com',0,0,1),
(3250,'2021-01-15','GIMP: Getting Started With Layers',952,'Mastering the basic tools of Layers in GIMP','<p>Layers are the feature that does most of the heavy lifting in GIMP. After our previous introduction, we start to get hands-on with the controls that let us work with Layers</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/\" class=\"uri\">https://docs.gimp.org/2.10/en/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/getting-started-with-layers/\" class=\"uri\">https://www.ahuka.com/gimp/getting-started-with-layers/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, images, photos, graphics, layers',0,0,1),
(3260,'2021-01-29','Free, Public Domain and Creative Commons Assets',1289,'Using images and fonts that are not restricted','<p>In preparation for doing some sample exercises I wanted to first explain about how you can use images and fonts that are not restricted or are available under license terms that are not too restrictive. Any image that is intended for public display or for commercial purposes could be liable for copyright infringement if care is not taken. Fortunately, there are many resources available that you can use, and we look at some of the better ones.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/\" class=\"uri\">https://docs.gimp.org/2.10/en/</a></li>\r\n<li><a href=\"https://creativecommons.org/\" class=\"uri\">https://creativecommons.org/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources\" class=\"uri\">https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources</a></li>\r\n<li><a href=\"https://ccsearch.creativecommons.org/\" class=\"uri\">https://ccsearch.creativecommons.org/</a></li>\r\n<li><a href=\"https://ccsearch.creativecommons.org/search-help\" class=\"uri\">https://ccsearch.creativecommons.org/search-help</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Category:Public_domain_typefaces\" class=\"uri\">https://en.wikipedia.org/wiki/Category:Public_domain_typefaces</a></li>\r\n<li><a href=\"https://www.booksofm.com/2008/08/public-domain-font.html\" class=\"uri\">https://www.booksofm.com/2008/08/public-domain-font.html</a></li>\r\n<li><a href=\"https://www.1001fonts.com/licenses/ffc.html\" class=\"uri\">https://www.1001fonts.com/licenses/ffc.html</a></li>\r\n<li><a href=\"https://www.dafont.com/\" class=\"uri\">https://www.dafont.com/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/SIL_Open_Font_License\" class=\"uri\">https://en.wikipedia.org/wiki/SIL_Open_Font_License</a></li>\r\n<li><a href=\"https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;id=OFL\" class=\"uri\">https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;id=OFL</a></li>\r\n<li><a href=\"https://linuxconfig.org/how-to-install-fonts-on-ubuntu-20-04-focal-fossa-linux\" class=\"uri\">https://linuxconfig.org/how-to-install-fonts-on-ubuntu-20-04-focal-fossa-linux</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/free-public-domain-and-cc-assets/\" class=\"uri\">https://www.ahuka.com/gimp/free-public-domain-and-cc-assets/</a></li>\r\n</ul>',198,113,0,'CC-BY-SA','Public Domain, Creative Commons, copyright, images, fonts',0,0,1),
(3177,'2020-10-06','Zero cost VPN',407,'OpenVPN on a Free Tier VPS for securing phone trafic ','<p>A basic overview of the VPN I use</p>\r\n<ul>\r\n<li>Linux on a free/low cost VPS</li>\r\n<li>Helper script install OpenVPN and generate client config file</li>\r\n<li>Transfer client config file to mobile device</li>\r\n<li>Install OpenVPN client on Mobile Device and import the config</li>\r\n</ul>\r\n<p>There are a few options for the Linux server. Free tier cloud providers</p>\r\n<ul>\r\n<li>AWS</li>\r\n<li>Google</li>\r\n<li>Azure</li>\r\n</ul>\r\n<p>VPS with Free credits ($20-$100) for new accounts I\'ve gotten discount codes from podcasts</p>\r\n<ul>\r\n<li>Digital Ocean</li>\r\n<li>Linode</li>\r\n</ul>\r\n<p>VPS requirements for running a OpenVPN server are pretty are basic</p>\r\n<ul>\r\n<li>Internet accessible IP address</li>\r\n<li>Average Network speed</li>\r\n<li>root shell access</li>\r\n</ul>\r\n<p>The openvpn installer is on GitHub. <a href=\"https://github.com/angristan/openvpn-install\">https://github.com/angristan/openvpn-install</a></p>\r\n<p>On the server as root, run</p>\r\n<pre><code>git clone https://github.com/angristan/openvpn-install.git\r\n/openvpn-install/openvpn-install.sh\r\n</code></pre>\r\n',342,0,0,'CC-BY-SA','VPN, OpenVPN',0,0,1),
(3270,'2021-02-12','An Example of Using Layers',900,'Creating a new header image for my WordPress site using Layers in GIMP','<p>There is a point where you need to stop being abstract and start demonstrating what you are talking about, so I thought this was a good opportunity to put some things into practice by creating an image. I chose to do a header image for my site Ahuka Communications that would more accurately reflect the content. This lets us use freely licensed images, an OFL-licensed font, layers, and various tools. Note that you can download all of this stuff from my site.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/\" class=\"uri\">https://docs.gimp.org/2.10/en/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources\" class=\"uri\">https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources</a></li>\r\n<li><a href=\"https://www.clker.com/\" class=\"uri\">https://www.clker.com/</a></li>\r\n<li><a href=\"https://www.clker.com/clipart-1895.html\" class=\"uri\">https://www.clker.com/clipart-1895.html</a></li>\r\n<li><a href=\"https://www.clker.com/clipart-29779.html\" class=\"uri\">https://www.clker.com/clipart-29779.html</a></li>\r\n<li><a href=\"https://www.clker.com/clipart-x-office-spreadsheet.html\" class=\"uri\">https://www.clker.com/clipart-x-office-spreadsheet.html</a></li>\r\n<li><a href=\"https://www.clipartspy.com/\" class=\"uri\">https://www.clipartspy.com/</a></li>\r\n<li><a href=\"https://www.needpix.com/\" class=\"uri\">https://www.needpix.com/</a></li>\r\n<li><a href=\"https://www.needpix.com/photo/96030/file-type-ods-spreadsheet-open-document-spreadsheet-file-open-office\" class=\"uri\">https://www.needpix.com/photo/96030/file-type-ods-spreadsheet-open-document-spreadsheet-file-open-office</a></li>\r\n<li><a href=\"https://www.needpix.com/photo/28685/presentation-people-meeting-office-corporate-seminar-training-professional-businesspeople\" class=\"uri\">https://www.needpix.com/photo/28685/presentation-people-meeting-office-corporate-seminar-training-professional-businesspeople</a></li>\r\n<li><a href=\"https://www.needpix.com/photo/1321215/abstract-background-business-cloud-concept-graphic-group-illustration-office\" class=\"uri\">https://www.needpix.com/photo/1321215/abstract-background-business-cloud-concept-graphic-group-illustration-office</a></li>\r\n<li><a href=\"https://fontlibrary.org/\" class=\"uri\">https://fontlibrary.org/</a></li>\r\n<li><a href=\"https://www.ahuka.com/wp-content/uploads/2020/09/Header.zip\" class=\"uri\">https://www.ahuka.com/wp-content/uploads/2020/09/Header.zip</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/an-example-of-using-layers/\" class=\"uri\">https://www.ahuka.com/gimp/an-example-of-using-layers/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layers, WordPress',0,0,1),
(3178,'2020-10-07','Finishing the Recumbent Bicycle',259,'While channeling Stephen Hawking, Brian in Ohio describes finishing and riding the bike','<h2 id=\"websites\">Websites:</h2>\r\n<ul>\r\n<li>recycled recumbent: <a href=\"https://sites.google.com/site/recycledrecumbents/home\" class=\"uri\">https://sites.google.com/site/recycledrecumbents/home</a></li>\r\n<li>cj hoyle milk crate tutorial: <a href=\"https://youtu.be/MvBx_74FzUk\" class=\"uri\">https://youtu.be/MvBx_74FzUk</a></li>\r\n</ul>\r\n<h2 id=\"gallery\">Gallery:</h2>\r\n<p><em>1 - Bending Tools</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_001.jpg\" alt=\"1 - Bending Tools\" /></p>\r\n<p>This is how I clamped up the conduit bending tool in the trusty workmate. In this configuration you can bend the tube to specific angles and make sure the bends stay in plane. The goal here is to create two side rails that are identical. The seat webbing is sewn on to these rails.</p>\r\n<p><em>2 - Needed weights</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_002.jpg\" alt=\"2 - Needed weights\" /></p>\r\n<p>This photo shows some more of how the bending jig was set up. Those are counter weights needed to keep the jig on the ground while the tube is being bent.</p>\r\n<p><em>3 - Seat rail plans</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_003.jpg\" alt=\"3 - Seat rail plans\" /></p>\r\n<p>Mr. Carson provides pdf files that you can print out to be used as templates to match your bends.</p>\r\n<p><em>4 - Marking tubes</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_004.jpg\" alt=\"4 - Marking tubes\" /></p>\r\n<p><em>5 - Sighting down tube</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_005.jpg\" alt=\"5 - Sighting down tube\" /></p>\r\n<p><em>6 - Using marks</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_006.jpg\" alt=\"6 - Using marks\" /></p>\r\n<p><em>7 - Help with angles</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_007.jpg\" alt=\"7 - Help with angles\" /></p>\r\n<p><em>8 - Matching to plans</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_008.jpg\" alt=\"8 - Matching to plans\" /></p>\r\n<p>Pictures 4-8 show the layout of the tubes and how the marks are used to ensure you make mirror image rails for the seat.</p>\r\n<p><em>9 - Matching sides</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_009.jpg\" alt=\"9 - Matching sides\" /></p>\r\n<p><em>10 - Seat backs</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_010.jpg\" alt=\"10 - Seat backs\" /></p>\r\n<p><em>11 - Drilling fish mouths</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_011.jpg\" alt=\"11 - Drilling fish mouths\" /></p>\r\n<p><em>12 - Seat backs ready for trimming</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_012.jpg\" alt=\"12 - Seat backs ready for trimming\" /></p>\r\n<p><em>13 - Finished seat backs</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_013.jpg\" alt=\"13 - Finished seat backs\" /></p>\r\n<p><em>14 - Jigging up</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_014.jpg\" alt=\"14 - Jigging up\" /></p>\r\n<p>Pictures 9-14 outline the steps in fabricating the seat backs. The seat backs tie the rails together and are where the clamps that connect the seat to the frame grab the seat. This part of the construction can be overwhelming if you don\'t take it one step at a time. I had to constantly remind myself that building the bike was not a race but a journey, take your time and enjoy each little milestone. The last picture is the seat frame jigged up and ready for brazing.</p>\r\n<p><em>15 - Seat stay one</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_015.jpg\" alt=\"15 - Seat stay one\" /></p>\r\n<p><em>16 - Seat stay two</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_016.jpg\" alt=\"16 - Seat stay two\" /></p>\r\n<p>The seat stay was at first glance very intimidating. This piece connects the back of the seat down to the frame, supporting the upper part of your body. Its made of many parts, but all they are is cut up pieces of steel rod and threaded rod that are brazed together. No bending is involved only cutting and brazing and in the end it wasn\'t to difficult to fabricate.</p>\r\n<p><em>17 - Seat stay three</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_017.jpg\" alt=\"17 - Seat stay three\" /></p>\r\n<p>The completed seat connected to the frame. The seat is clamped to the frame using hose clamps and clamping blocks made of conduit cut length wise and brazed together at right angles.</p>\r\n<p><em>18 - Seat webbing one</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_018.jpg\" alt=\"18 - Seat webbing one\" /></p>\r\n<p><em>19 - Seat webbing two</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_019.jpg\" alt=\"19 - Seat webbing two\" /></p>\r\n<p>The seat webbing is sewn on using fishing line as described on the website, the only challenge is getting it nice and tight. Needle, line and a few hpr episodes is all you need to get through the task.</p>\r\n<p><em>20 - Finished</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3178/img_020.jpg\" alt=\"20 - Finished\" /></p>\r\n<p>The last picture is the bike finished and ready for its maiden journey.</p>\r\n<h2 id=\"espeak-script\">Espeak script:</h2>\r\n<p>Hello Hacker Public Radio, Brian in Ohio here.</p>\r\n<p>I am out from under my rock, and doing the last of the recumbent bike build episodes. My wife and I are visiting the land of our youth, Colorado, so my recording stuff is at home, hence the espeak rendition of the show. I finished building the bike a while ago and have been riding it around town to do errands and get exercise. I love this bike! The comfort level is unparalleled. Its like sitting in a chase lounge. No more neck strain or pain in the derriere. You don\'t need any fancy bike clothes, like padded biking shorts, in order to feel comfortable. The bike is fast and has responsive handling. Somethings I have learned so far while riding the bike. First, a rear view mirror really helps when riding on the street. Unlike upright bikes turning your head to look back to clear for traffic is not as easy. Next, the handling takes some getting used to. The long lever arm of the steering tube makes the bike feel jerky when you first ride it. After a while you\'ll see that a light hand on the tiller goes a long way to smoothing out the ride. It took me a bit of practice to gracefully get the bike started after coming to a stop. Because you can\'t stand up and hammer on the peddles, coming to a stop requires a bit of work on the gears. Being in a easy gear then shifting up as you get moving is the way to go. If you build one of these bikes, and why wouldn\'t you, you will have to think about storage because throwing a back pack on is not really an option. I found a bike rack that attaches to the back of the bike, a grocery store plastic basket and an instructive video tutorial by C J Hoyle on you tube took care of my storage needs, a link is in the show notes. The last parts that need to be fabricated to complete the bike were the seat and the handle bars, and all of there associated bits and pieces that make up these assemblies. Instead of narrating through all the pictures, I leave you, dear hacker public radio listener, that\'s interested to look at the pictures and read the captions yourself. My general impressions of building the pieces are as follows. The handle bars are relatively easy to fabricate but the big problem for me was the metal on the handle bars you use to make the tiller did not braze well with the conduit. In the end I had to resort to pop rivets and a through bolt to get a safe, sturdy connection. The seat is a collection of many parts and at first glance can be a bit overwhelming. By examining the photos on the recycled recumbent website and studying the plans, focusing on each step the seat came out fine for me, yours will too. The side rails are bent using a conduit bender and the challenge is getting the two sides close to match. Take your time and get some extra conduit, you\'re probably going to need it. The seat back stay is pretty easy to make, but it is made up of quite a few parts, requiring simple cuts and brazing to fashion it. The rest of the seat parts, the various fittings used to clamp the seat to the frame are pretty easy to make and I can\'t compliment Mr. Carsen highly enough for his ingenious design. Fitting out the bike; getting wheels, brakes and drive train together are going to be unique to every bike and will depend on how much money you want to spend, what parts you have laying around and what fittings you might have to create to attach the parts. I opted to use used parts that were at hand so I could get the bike up and running. I plan on upgrading parts, making changes and improvements after I\'ve ridden the bike for a few months and gotten a good number of miles under my belt. I\'ll do an update show in the future to let you know what I\'ve done. Will I do this again? Yes definitely I will build another bike, maybe a mach two or three, the building is fun the bike rides great. Mr Carsen sells parts, kits and completed bikes on his website. When I do it again I may opt to buy the seat from him. I would recommend this project to anyone. You can, go out and build one yourself.</p>\r\n<p>This is Brian in Ohio signing off for now reminding every one to: go fast; take chances.</p>\r\n',326,115,0,'CC-BY-SA','bicycle, recumbent',0,0,1),
(3179,'2020-10-08','MakeMKV to back up media, and a Question',404,'Describing two ways to install MakeMKV DVD/Blu-ray backup program on Fedora 32','<p>Installed Fedora 32 on a spare laptop</p>\r\n<h5 id=\"quick-tip\">Quick tip</h5>\r\n<p>To ignore the handle switch on the laptop triggering a power off:</p>\r\n<p>Put <code>HandleLidSwitch=ignore</code> in <code>/etc/systemd/logind.conf</code></p>\r\n<h4 id=\"install-makemkv-from-source\">Install MakeMKV from source</h4>\r\n<pre><code>dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm\r\n\r\ndnf install zlib-devel openssl-devel expat-devel ffmpeg ffmpeg-devel qt5-qtbase-devel\r\nmkdir git/makemkv.source\r\n\r\ncd makemkv.source\r\nwget https://www.makemkv.com/download/makemkv-oss-1.15.2.tar.gz\r\nwget https://www.makemkv.com/download/makemkv-bin-1.15.2.tar.gz\r\n\r\ntar xpf makemkv-oss-1.15.2.tar.gz\r\ntar xpf makemkv-bin-1.15.2.tar.gz\r\n\r\ncd makemkv-oss-1.15.2/\r\n./configure\r\nmake\r\nsudo make install\r\n\r\ncd ../makemkv-bin-1.15.2/\r\nmake\r\nsudo make install</code></pre>\r\n<h4 id=\"install-makemkv-from-flathub\">Install MakeMKV from flathub</h4>\r\n<pre><code>flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo\r\nflatpak install flathub com.makemkv.MakeMKV</code></pre>\r\n<h4 id=\"install-ccextractor\">Install ccextractor</h4>\r\n<pre><code>dnf install libtesseract-dev autoconf sysconftool\r\n\r\ngit clone https://github.com/CCExtractor/ccextractor.git\r\ncd ccextractor/linux/\r\n./build</code></pre>\r\n<h4 id=\"enable-expert-mode\">Enable expert mode</h4>\r\n<p><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3179/img_001.png\" /></p>\r\n<h4 id=\"provide-path-to-the-ccextractor-binary\">Provide path to the ccextractor binary</h4>\r\n<p><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3179/img_002.png\" /></p>\r\n<h4 id=\"re-encoding-mkv-file\">Re-encoding MKV file</h4>\r\n<pre><code>ffmpeg -i $1 -b:a 128k -b:v 2000k -vcodec mpeg4 -acodec aac &quot;encoded&quot;/&quot;`basename -s .mkv $1`-_2000k_aac.mkv&quot;</code></pre>\r\n<h4 id=\"updated-registration-key-good-for-2-months\">Updated registration key (Good for 2 months?)</h4>\r\n<p><a href=\"https://www.makemkv.com/forum/viewtopic.php?t=1053\">Updated registration key for MakeMKV</a></p>\r\n<h4 id=\"makemkv-registration-code-update-script-untested\">MakeMKV registration code update script (Untested)</h4>\r\n<p><a href=\"https://github.com/AyrA/MakeMKV\">Github link to MakeMKV registration update script</a></p>\r\n<h4 id=\"other-links\">Other links</h4>\r\n<p><a href=\"https://linuxconfig.org/how-to-install-makemkv-on-fedora-linux\">How to install MakeMKV on Fedora Linux</a> <br> <a href=\"https://www.makemkv.com/forum/viewtopic.php?f=3&amp;t=224&amp;sid=4e978698972df3de5f4e055c39370e03\">Forum post for MakeMKV on Linux</a></p>\r\n<h4 id=\"how-to-playrip-blu-ray-discs-on-mplayer-command-line\">How to play/rip Blu-ray discs on Mplayer command line</h4>\r\n<p>For DVD\'s</p>\r\n<pre><code>mplayer dvd:///_/dvd/mount/dir_</code></pre>\r\n<p>For Blu-ray discs <br> Download keydb.cfg and place it in <code>~/.config/aacs/</code> <br> <a href=\"https://fvonline-db.bplaced.net/\">Link to keydb.cfg</a></p>\r\n<pre><code>mplayer br:///_/bluray/mount/dir_\r\nie. mplayer br:////dev/sr0 &lt;br&gt;</code></pre>\r\n<p>note the 3 forward slashes before the block device, as the disk will not be read otherwise</p>\r\n<p>Ripping:</p>\r\n<pre><code>mplayer br:////dev/sr0 -alang en -dumpstream -dumpfile $movie.mpg</code></pre>\r\n<p>Encoding:</p>\r\n<pre><code>mkdir encoded\r\nffmpeg -i $1 -map 0:0 -map 0:1 -b:a 128k -b:v 2000k -vcodec mpeg4 &quot;encoded&quot;/&quot;`basename -s .mpg $1`.mkv&quot;</code></pre>\r\n<h4 id=\"questions-for-the-community\">Questions for the Community:</h4>\r\n<p>Is it antiquated to want to rip Blu-ray/DVD disks to a server?</p>\r\n<p>Is there a better way to accomplish this, rather than using MakeMKV, which continues to be Beta software, and not Free and Open Source?</p>\r\n',318,0,0,'CC-BY-SA','dvd, blu-ray, backup',0,0,1),
(3182,'2020-10-13','Yo-ho-ho, and a bottle of Cholecalciferol',4763,'From Scotland, two HPR hosts chew the fat','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Two HPR hosts from Scotland get together over Mumble one more time to chat about all manner of stuff.</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0268.html\">Andrew Conway</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\r\n</ul>\r\n<p>We recorded on Saturday 19<sup>th</sup> September 2020, which was <a href=\"https://en.wikipedia.org/wiki/International_Talk_Like_a_Pirate_Day\"><em>International Talk Like A Pirate Day</em></a>, we but managed to avoid any utterances of <em>ARRRR!</em>, and the use of marlinspikes, fids or belaying pins. Also, no timbers were shivered and no mainbraces spliced (not while recording anyway).</p>\r\n<h2 id=\"notes\">Notes</h2>\r\n<p>Some of the topics we discussed:</p>\r\n<ul>\r\n<li>COVID-19:\r\n<ul>\r\n<li>The increase in COVID-19 cases in Scotland, particularly Glasgow\r\n<ul>\r\n<li>Movement in Glasgow is more restricted than in Edinburgh at time of recording</li>\r\n</ul></li>\r\n<li>The <a href=\"https://www.kcl.ac.uk/news/new-symptom-tracking-app-aims-to-slow-spread-of-coronavirus\">KCL COVID tracker</a>, described further in an <a href=\"https://www.kcl.ac.uk/news/spotlight/spotlight-on-covid-tracking-the-symptoms\">article with more details</a>\r\n<ul>\r\n<li>Andrew is using this</li>\r\n</ul></li>\r\n<li>Is Glasgow the most infected city in the UK?</li>\r\n<li><a href=\"https://www.microbe.tv/twiv/\">This week in Virology podcast</a> discussing easing of lock down and return of children to school, both likely to increase infections.</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Vitamin_D\">Vitamin D</a> (D<sub>3</sub> in particular<a href=\"#fn1\" class=\"footnote-ref\" id=\"fnref1\" role=\"doc-noteref\"><sup>1</sup></a>) seems to have a beneficial effect in COVID-19 cases. Having an optimal level of the vitamin seems to help ameliorate the COVID-19 effects, whereas being deficient can apparently result in more severe effects. See the study in the <a href=\"https://t.co/oXb0fr5NyE?amp=1\"><em>Journal of Steroid Biochemistry and Molecular Biology</em></a></li>\r\n<li>Long-term immunity and t-cells: <a href=\"https://www.nature.com/articles/s41586-020-2550-z\">see the Nature paper mentioned in the episode</a></li>\r\n<li>The virus is called <code>SARS-CoV-2</code><a href=\"#fn2\" class=\"footnote-ref\" id=\"fnref2\" role=\"doc-noteref\"><sup>2</sup></a> (as opposed to <code>SARS-CoV-1</code>, the previous <em>SARS</em> coronavirus). The disease is called <code>COVID-19</code><a href=\"#fn3\" class=\"footnote-ref\" id=\"fnref3\" role=\"doc-noteref\"><sup>3</sup></a>.</li>\r\n<li>Speculations heard:\r\n<ul>\r\n<li>Whether having had the <a href=\"https://en.wikipedia.org/wiki/BCG_vaccine\">BCG immunisation</a> against tuberculosis helps protect from COVID-19.</li>\r\n<li>Whether exposure to other (milder) corona viruses can provide immunity to <code>SARS-CoV-2</code>.</li>\r\n</ul></li>\r\n<li>The puzzling case of Sweden and COVID-19</li>\r\n<li>Have there been randomised controlled trials of the effectiveness of the masks in common use?<a href=\"#fn4\" class=\"footnote-ref\" id=\"fnref4\" role=\"doc-noteref\"><sup>4</sup></a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>What we’re doing in lockdown:\r\n<ul>\r\n<li>Dave: cooking for the family 2 nights a week; shopping “<em>by proxy</em>”; not going to the gym yet</li>\r\n<li>Andrew: exercising at home; tried the gym a couple of times but was put off by overcrowding; working on the BBC Micro (check HPR show <a href=\"https://hackerpublicradio.org/eps.php?id=2731\"><em>hpr2731 :: My 8 bit Christmas</em></a>)</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>:\r\n<ul>\r\n<li>A 32KiB 8-bit computer based around the 6502 CPU, made by <a href=\"https://en.wikipedia.org/wiki/Acorn_Computers\">Acorn Computers Ltd.</a></li>\r\n<li>Game: <a href=\"https://bbcmicro.co.uk/game.php?id=89\"><em>Twin Kingdom Valley</em></a> originally played by Andrew in 1982/3. He has been:\r\n<ul>\r\n<li>Disassembling the game (which is in machine code).\r\n<ul>\r\n<li>Disassembly is non-trivial when data is interleaved with the code.</li>\r\n</ul></li>\r\n<li>Rewriting the non-graphic code in C</li>\r\n</ul></li>\r\n<li>The BBC had a paged ROM area known as the <em>Sideways ROM</em> (see the <a href=\"https://mdfs.net/Docs/Comp/BBC/AllMem\">System Memory Map</a>)</li>\r\n<li>Andrew had the ROM game <em>Dr. Who and the Mines of Terror!</em>.</li>\r\n<li>The 65C02 processor is still being made!</li>\r\n<li><a href=\"https://www.youtube.com/c/BenEater\">Ben Eater on YouTube</a> is explaining the workings of the 6502, amongst other things.\r\n<ul>\r\n<li>Andrew has bought a <a href=\"https://eater.net/6502\">6502 kit from Ben Eater</a></li>\r\n</ul></li>\r\n<li>The 6502 could be seen as an early RISC (Reduced Instruction Set) machine (though not intentionally). Acorn created the Acorn RISC Machine (ARM) for the Archimedes and eventually spun off <em>ARM Ltd.</em></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Internet bandwidth in Scotland\r\n<ul>\r\n<li>Dave’s street has just had optical fibre installed. He has an ADSL link at present which is slow and not always reliable</li>\r\n<li>Andrew has cable, which is very reliable. Reliability is more important than very high speeds, as is low latency</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>HPR queue state:\r\n<ul>\r\n<li>OK for the next couple of weeks (at time of recording)</li>\r\n<li>A new show then arrived <b>at that point</b>!</li>\r\n<li>HPR always needs shows!</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Programming languages:\r\n<ul>\r\n<li>Dave hasn’t been too keen on using assembler since the late 1980’s</li>\r\n<li>Andrew has been a Java programmer but likes the slimness of C</li>\r\n<li>Dave tinkered with FORTH on the BBC Micro at one time, and wrote some stuff in PostScript as a programming language</li>\r\n<li>FORTH was used to control telescopes at one time</li>\r\n</ul></li>\r\n</ul>\r\n<section class=\"footnotes\" role=\"doc-endnotes\">\r\n<hr />\r\n<ol>\r\n<li id=\"fn1\" role=\"doc-endnote\"><p>Vitamin D<sub>3</sub> is also known as <em>cholecalciferol</em>.<a href=\"#fnref1\" class=\"footnote-back\" role=\"doc-backlink\">↩︎</a></p></li>\r\n<li id=\"fn2\" role=\"doc-endnote\"><p><code>SARS-CoV-2</code>: <code>SARS</code> stands for <em>Severe Acute Respiratory Syndrome</em>, <code>CoV</code> means <em>Corona Virus</em> and the 2 refers to the second SARS corona virus in recent times.<a href=\"#fnref2\" class=\"footnote-back\" role=\"doc-backlink\">↩︎</a></p></li>\r\n<li id=\"fn3\" role=\"doc-endnote\"><p><code>COVID-19</code>: simply means <em>coronavirus disease 19</em>, referring to its arrival in 2019.<a href=\"#fnref3\" class=\"footnote-back\" role=\"doc-backlink\">↩︎</a></p></li>\r\n<li id=\"fn4\" role=\"doc-endnote\"><p>Some clarification of the types of mask being used most commonly might be needed. Andrew was thinking of the fabric masks when speaking about this. Some research after the recording discovered a mask-related trial as follows: <a href=\"https://www.ijidonline.com/article/S1201-9712(20)30399-4/fulltext\">Human coronavirus data from four clinical trials of masks and respirators</a>.<a href=\"#fnref4\" class=\"footnote-back\" role=\"doc-backlink\">↩︎</a></p></li>\r\n</ol>\r\n</section>\r\n',225,0,1,'CC-BY-SA','COVID-19,SARS-Cov-2,Vitamin D,6502 microprocessor,BBC Micro',0,0,1),
(3181,'2020-10-12','RealVNC cloud offering',262,'JWP emails in a show about using VNC while out and about','<p>\r\nJust a short podcast about RealVNC cloud offering.\r\nAn interesting VNC option if you want to connect on the road or the at\r\nthe coffee shop to a server back home without putting holes in your router.\r\n</p>\r\n<p>\r\n<a href=\"https://www.realvnc.com/en/news/what-vnc-cloud/\">https://www.realvnc.com/en/news/what-vnc-cloud/</a>\r\n</p>',129,0,1,'CC-BY-SA','realvnc, remote computing',0,0,1),
(3184,'2020-10-15','Linux Inlaws S01E15: IT Security and stick insects',3368,'How to secure photos of your stick insect collection and more ','<p>In this episode Martin discovers that protecting pictures of stick insects (rated XXX or not)\r\non USB sticks (pun intended) can be an ardous endeavour indeed. Never mind eventually turning\r\nthis into a business including web servers, shared file spaces and password storage. Additional\r\nbonus: the lovely Emma from Rainbow Escorts makes another cameo apperance supported by some Irish, um, students.</p>\r\n<h3>Shownotes:</h3>\r\n<ul>\r\n<li>Linux Unified Key Setup (LUKS): <a href=\"https://gitlab.com/cryptsetup/cryptsetup/blob/master/README.md\" target=\"_blank\">https://gitlab.com/cryptsetup/cryptsetup/blob/master/README.md</a></li>\r\n<li>EncFS: <a href=\"https://vgough.github.io/encfs\" target=\"_blank\">https://vgough.github.io/encfs</a></li>\r\n<li>EcryptFS: <a href=\"https://www.ecryptfs.org\" target=\"_blank\">https://www.ecryptfs.org</a></li>\r\n<li>Keepass: <a href=\"https://keepass.info/\" target=\"_blank\">https://keepass.info/</a></li>\r\n<li>Snort: <a href=\"https://www.snort.org\" target=\"_blank\">https://www.snort.org</a></li>\r\n<li>Fail2ban: <a href=\"https://www.fail2ban.org/wiki/index.php/Main_Page\" target=\"_blank\">https://www.fail2ban.org/wiki/index.php/Main_Page</a></li>\r\n<li>PSAD: <a href=\"https://cipherdyne.org/psad\" target=\"_blank\">https://cipherdyne.org/psad</a></li>\r\n<li>Nextcloud: <a href=\"https://nextcloud.com\" target=\"_blank\">https://nextcloud.com</a></li>\r\n<li>Tor: <a href=\"https://torproject.org\" target=\"_blank\">https://torproject.org</a></li>\r\n<li>OPENVPN: <a href=\"https://openvpn.net\" target=\"_blank\">https://openvpn.net</a></li>\r\n<li>WireGuard: <a href=\"https://www.wireguard.com\" target=\"_blank\">https://www.wireguard.com</a></li>\r\n<li>boringtun: <a href=\"https://github.com/cloudflare/boringtun\" target=\"_blank\">https://github.com/cloudflare/boringtun</a></li>\r\n<li>DistroWatch: <a href=\"https://distrowatch.com\" target=\"_blank\">https://distrowatch.com</a></li>\r\n</ul>',384,111,0,'CC-BY-SA','IT Security, stick insects, Rainbow Escorts, Grumpy Old Coders',0,0,1),
(3183,'2020-10-14','Don\'t trust zipfiles',277,'Zipfiles can contain all kinds of evilness and unpacking them can lead to unexpected results','<p>This show explains the concept of injecting symbolic links into zipfiles and how those can be used to attack a web application.</p>',387,74,0,'CC-BY-SA','pentesting,security,hacking,zip',0,0,1),
(3186,'2020-10-19','A light bulb moment, part 2',450,'The history of lighting','<p><u><strong>A very brief history of lighting </strong></u></p>\r\n<p>Natural light first came from fire</p>\r\n<p>Then using oil and fat with a wick</p>\r\n<p>Early candles used animal fat this smelled awful and tended to spit</p>\r\n<p>Some parts of world used whole animals as candles</p>\r\n<p>These early candles gave so little light that people generally just went to bed at sunset</p>\r\n<p>Electric lighting started first by Humphry Davy in the early 1800’s using an arc, this was developed into commercial lighting in the 1840s</p>\r\n<p>Arc lighting needed a complex mechanism to gradually push the contacts together as they burnt away</p>\r\n<p>Gas lighting started around the 1850s this was improved in the 1870 with the advent of the Gas mantel.</p>\r\n<p>Thomas Edison develop the electric light bulb in 1879 using a carbon filament. It took a great deal of effort to convince people to use it because gas lighting was so well established and worked well.</p>\r\n<p>Many houses in Britain didn\'t install electric lighting until the 1930s</p>\r\n<p>Finally electricity won as it could be used for so many other things.</p>\r\n<p><u><strong>The tungsten filament bulb</strong></u></p>\r\n<p>The filament within the bulb is made up of a tungsten coiled coil wire. This is done because the more compactly a filament can be wound the less heat is lost to the surroundings and the brighter the bulb will glow.</p>\r\n<p><u><strong>The tungsten halogen bulb</strong></u></p>\r\n<p>The next progression was tungsten halogen bulb, these bulbs are more efficient and give out twice as much light as ordinary bulbs and usually last twice as long.</p>\r\n<p>All filament lights waste a lot of energy producing heat. An ordinary light bulb only gives out 10% of its energy as light, the rest is wasted as heat.</p>\r\n<p><u><strong>Fluorescent neon lights</strong></u></p>\r\n<p>Fluorescent neon lights were invented in 1905 by a French man called George Claude. These were used for advertising mainly in America.</p>\r\n<p><u><strong>Fluorescent strip light</strong></u></p>\r\n<p>The first fluorescent light was introduced in 1939 it uses the same principle as the neon light but incorporates a filament at both ends. It is filled with argon and mercury vapour. It mainly gives off ultra violet light the tube is coated on the inside with chemicals to convert the output to mostly visible light using a property called fluorescence.</p>\r\n<p>Fluorescent tubes are four times as efficient as normal incandescent light bulbs and run cool.</p>\r\n<p>The first energy efficient light bulbs were just fluorescent lights folded into a compact bulb shape.</p>\r\n<p><u><strong>Sodium lights</strong></u></p>\r\n<p>Sodium lights used mainly in street lighting are twice as efficient again as fluorescent bulbs they give off a rather horrible orange colour.</p>\r\n<p>The first commercial high-pressure sodium lamps were available in 1965 from companies in the United States, the United Kingdom, and the Netherlands; at introduction a 400 watt lamp would produce around 100 lumens per watt <a href=\"https://en.wikipedia.org/wiki/Sodium-vapor_lamp\" class=\"uri\">https://en.wikipedia.org/wiki/Sodium-vapor_lamp</a></p>\r\n<p>The next big development was LED lighting which I\'ll cover in my next episode.</p>\r\n',201,0,0,'CC-BY-SA','Hardware, electrical',0,0,1),
(3187,'2020-10-20','Ansible for Dynamic Host Configuration Protocol',518,'How I use ansible to configure my OpenBSD router','<h1 id=\"ansible-dhcpd-and-dns\">Ansible DHCPD and DNS</h1>\r\n<h2 id=\"using-ansible-to-configure-dhcpd-and-nds-on-openbsd\">Using Ansible to configure DHCPD and NDS on OpenBSD</h2>\r\n<ul>\r\n<li>Host data is stored in csv files</li>\r\n<li>Ansible templates to create config files</li>\r\n<li>Restart services</li>\r\n</ul>\r\n<h2 id=\"hostname-setup.yml\">hostname-setup.yml</h2>\r\n<pre><code>---\r\n- hosts: localhost\r\n  tasks:\r\n  - name: read subnet 10\r\n    read_csv:\r\n      path: 10.csv\r\n      fieldnames: mac,ip,hostname\r\n    register: subnet_10\r\n  - name: read subnet 11\r\n    read_csv:\r\n      path: 11.csv\r\n      fieldnames: mac,ip,hostname\r\n    register: subnet_11\r\n  - name: read static\r\n    read_csv:\r\n      path: static.csv\r\n      fieldnames: hostname,ip\r\n    register: static_ip\r\n\r\n  - name: write dhcp file\r\n    template:\r\n      src: dhcpd.conf.j2\r\n      dest: /etc/dhcpd.conf\r\n      validate: dhcpd -nc %s\r\n  - name: write local.lan zone file\r\n    template:\r\n      src: local.lan.zone.j2\r\n      dest: /var/nsd/zones/master/local.lan\r\n      owner: root\r\n      group: _nsd\r\n      validate: nsd-checkzone local.lan %s\r\n  - name: nsd_conf\r\n    copy:\r\n      src: nsd.conf\r\n      dest: /var/nsd/etc/nsd.conf\r\n      owner: root\r\n      group: _nsd\r\n      validate: nsd-checkconf %s\r\n  - name: restart nsd\r\n    service:\r\n      name: nsd\r\n      state: restarted\r\n  - name: restart dhcpd\r\n    service:\r\n      name: dhcpd\r\n      state: restarted\r\n  - name: restart unbound\r\n    service:\r\n      name: unbound\r\n      state: restarted</code></pre>\r\n<h2 id=\"csv\">10.csv</h2>\r\n<pre><code>b8:27:eb:8b:7a:6d,192.168.10.100,pi3a\r\nb8:27:eb:ef:f2:d4,192.168.10.101,pi3b\r\n28:10:7b:25:d5:60,192.168.10.79,ipcam3\r\n28:10:7b:0c:fa:7b,192.168.10.80,ipcam1\r\nf0:7d:68:0b:ca:56,192.168.10.81,ipcam2</code></pre>\r\n<h2 id=\"static.csv\">static.csv</h2>\r\n<pre><code>tplink,192.168.10.2\r\ngate,192.168.10.10\r\nwww,192.168.10.10\r\nfox,192.168.10.17</code></pre>\r\n<h2 id=\"dhcpd.conf.j2\">dhcpd.conf.j2</h2>\r\n<pre><code>option  domain-name &quot;local.lan&quot;;\r\noption  domain-name-servers 192.168.10.10;\r\n\r\nsubnet 192.168.10.0 netmask 255.255.255.0 {\r\n        option routers 192.168.10.10;\r\n        range 192.168.10.161 192.168.10.179;\r\n        {% for host in subnet_10.list %}\r\n        host static-client { hardware ethernet {{ host.mac }};fixed-address {{ host.ip }};} #{{ host.hostname }}\r\n        {% endfor %}\r\n}\r\n\r\nsubnet 192.168.11.0 netmask 255.255.255.0 {\r\n    option routers 192.168.11.10;\r\n    range 192.168.11.72 192.168.11.127;\r\n{% for host in subnet_11.list %}\r\nhost static-client { hardware ethernet {{ host.mac }};fixed-address {{ host.ip }};} #{{ host.hostname }}\r\n{% endfor %}\r\n}\r\n</code></pre>\r\n<h3 id=\"rendered-dhcp-entires\">Rendered DHCP entires</h3>\r\n<pre><code>host static-client { hardware ethernet b8:27:eb:de:2f:38;fixed-address 192.168.10.45;} #pi3a\r\nhost static-client { hardware ethernet 28:10:7b:25:d5:60;fixed-address 192.168.10.79;} #ipcam3\r\nhost static-client { hardware ethernet 28:10:7b:0c:fa:7b;fixed-address 192.168.10.80;} #ipcam1\r\n</code></pre>\r\n<h2 id=\"local.lan.zone.j2\">local.lan.zone.j2</h2>\r\n<pre><code>$TTL 3600\r\nlocal.lan. IN     SOA    a.root-servers.net. root. (\r\n                2016092901  ; Serial\r\n                3H          ; refresh after 3 hours\r\n                1H          ; retry after 1 hour\r\n                1W          ; expire after 1 week\r\n                1D)         ; minimum TTL of 1 day\r\n\r\nIN  NS  gate.\r\n\r\nIN  MX  50 gate.local.lan.\r\n\r\nlocal.lan.      IN A    192.168.10.10\r\n\r\n{% for host in static_ip.list%}\r\n{{ host.hostname }} IN A {{ host.ip }}\r\n{% endfor %}\r\n\r\n{% for host in subnet_10.list%}\r\n{{ host.hostname }} IN A {{ host.ip }}\r\n{% endfor %}\r\n\r\n{% for host in subnet_11.list%}\r\n{{ host.hostname }} IN A {{ host.ip }}\r\n{% endfor %}\r\n</code></pre>\r\n<h3 id=\"rendered-a-records\">Rendered A records</h3>\r\n<pre><code>pi3b IN A 192.168.10.101\r\npi3a IN A 192.168.10.45\r\nipcam3 IN A 192.168.10.79\r\nipcam1 IN A 192.168.10.80</code></pre>\r\n<h2 id=\"run-the-playbook\">Run the playbook</h2>\r\n<pre><code>ansible-playbook hostname-setup.yml</code></pre>\r\n',342,0,0,'CC-BY-SA','ansible, dhcp,  dns, openbsd',0,0,1),
(3191,'2020-10-26','Swedish Corona Experience',969,'I will cover my experience of the Corona virus','<p>Swedish Health Authority Recommendation</p>\r\n<ul>\r\n<li>If sick stay at home.</li>\r\n<li>If you have symptoms take a test.</li>\r\n<li>Wash at least 20 seconds use alcohol with atleast 60% alcohol content.</li>\r\n<li>Don\'t touch your face with unwashed hands.</li>\r\n<li>Keep distance arm length (or 2m).</li>\r\n<li>Don\'t gather in large companies.</li>\r\n<li>Avoid public transport, try walking or biking when possible.\r\n<ul>\r\n<li>If required go with public transport book a ticket or go when others don\'t.</li>\r\n</ul></li>\r\n<li>If possible work from home.</li>\r\n</ul>\r\n<p><a href=\"https://www.folkhalsomyndigheten.se/smittskydd-beredskap/utbrott/aktuella-utbrott/covid-19/\" class=\"uri\">https://www.folkhalsomyndigheten.se/smittskydd-beredskap/utbrott/aktuella-utbrott/covid-19/</a></p>\r\n',382,100,0,'CC-BY-SA','corona, sweden',0,0,1),
(3280,'2021-02-26','What We Need For the ActivityPub Network',1026,'This keynote address looks at where federated social media can go if we make it work. ','<p>Federated social media can open up some wonderful possibilities but we need to make it happen. In this opening keynote address Evan Prodromou, who arguably started it all off, shows that he has thought long and deeply about this, and gives us his vision for where we can take it. <a href=\"https://www.zwilnik.com/better-social-media/activitypub-conference-2020/activitypub-2020-evan-prodromou/\" class=\"uri\">https://www.zwilnik.com/better-social-media/activitypub-conference-2020/activitypub-2020-evan-prodromou/</a></p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Evan_Prodromou\" class=\"uri\">https://en.wikipedia.org/wiki/Evan_Prodromou</a></li>\r\n<li><a href=\"https://www.w3.org/community/fedsocweb/\" class=\"uri\">https://www.w3.org/community/fedsocweb/</a></li>\r\n<li><a href=\"https://www.w3.org/wiki/Socialwg\" class=\"uri\">https://www.w3.org/wiki/Socialwg</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ActivityPub\" class=\"uri\">https://en.wikipedia.org/wiki/ActivityPub</a></li>\r\n<li><a href=\"https://conf.tube/videos/watch/c79457a9-aae5-47dd-8731-617e6b09fe06\" class=\"uri\">https://conf.tube/videos/watch/c79457a9-aae5-47dd-8731-617e6b09fe06</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Yo_(app)\" class=\"uri\">https://en.wikipedia.org/wiki/Yo_(app)</a></li>\r\n<li><a href=\"https://www.zwilnik.com/better-social-media/activitypub-conference-2020/activitypub-2020-evan-prodromou/\" class=\"uri\">https://www.zwilnik.com/better-social-media/activitypub-conference-2020/activitypub-2020-evan-prodromou/</a></li>\r\n</ul>',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub',0,0,1),
(3194,'2020-10-29','Linux Inlaws S01E16: The count and the questions',4061,'Linux Inlaws S01E16: This is Linux Inlaws, a series on free and open source software, black humour a','<ul>\r\n<li>Halloween: <a href=\"https://en.wikipedia.org/wiki/Halloween\" target=\"_blank\">https://en.wikipedia.org/wiki/Halloween</a></li>\r\n<li>Ancient vampire folklore: <a href=\"https://en.wikipedia.org/wiki/Vampire_folklore_by_region#Mesopotamia\" target=\"_blank\">https://en.wikipedia.org/wiki/Vampire_folklore_by_region#Mesopotamia</a></li>\r\n<li>Blade franchise: <a href=\"https://en.wikipedia.org/wiki/Blade_(franchise)\" target=\"_blank\">https://en.wikipedia.org/wiki/Blade_(franchise)</a></li>\r\n<li>Judas history: <a href=\"https://authorlyngibson.wordpress.com/2013/08/05/the-legend-of-judas-iscariot-vampire\" target=\"_blank\">https://authorlyngibson.wordpress.com/2013/08/05/the-legend-of-judas-iscariot-vampire</a></li>\r\n<li>Vulcans &amp; Romulans: <a href=\"https://memory-alpha.fandom.com/wiki/Vulcan-Romulan_history\" target=\"_blank\">https://memory-alpha.fandom.com/wiki/Vulcan-Romulan_history</a></li>\r\n<li>The Fly: <a href=\"https://www.imdb.com/title/tt0091064\" target=\"_blank\">https://www.imdb.com/title/tt0091064</a></li>\r\n<li>PETA: <a href=\"https://www.peta.org\" target=\"_blank\">https://www.peta.org</a></li>\r\n<li>Oracle vs. Google: <a href=\"https://techcrunch.com/2020/10/06/standing-by-developers-through-google-v-oracle\" target=\"_blank\">https://techcrunch.com/2020/10/06/standing-by-developers-through-google-v-oracle</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','Count, questions, vlad, legends, Halloween',0,0,1),
(3192,'2020-10-27','A light bulb moment, part 3',777,'The LED revolution','<p><strong><u>LED History</u></strong></p>\r\n<p>The history of the LED revolution is both long and complex but I\'ll do my best to cover it. Please forgive me if I mispronounce some of the materials and processes I\'m not a lighting expert as I stated right back at the beginning of this series.</p>\r\n<p>The following excerpts are from Wikipedia; the link will be in the show notes, <a href=\"https://en.wikipedia.org/wiki/Light-emitting_diode\">https://en.wikipedia.org/wiki/Light-emitting_diode</a></p>\r\n<p>The LED or Light Emitting Diode first appeared as a practical electronic component in 1962, the earliest LEDs emitted low-intensity infrared light.[7] Infrared LEDs are used in remote-control circuits, such as those used with a wide variety of consumer electronics. The first visible-light LEDs were of low intensity and limited to red. Modern LEDs are available across the visible, ultraviolet, and infrared wavelengths, with high light output. A great deal of development and refinement was required to get to this point.</p>\r\n<p>The first commercial visible-wavelength LEDs were commonly used as replacements for incandescent and neon indicator lamps, and in seven-segment displays,[31] first in expensive equipment such as laboratory and electronics test equipment, then later in such appliances as calculators, TVs, radios, telephones, as well as watches (see list of signal uses). Until 1968, visible and infrared LEDs were extremely costly, in the order of US$200 per unit, and so had little practical use.[32]</p>\r\n<p>In 1968 Monsanto was the first organization to mass-produce visible LEDs, these were red LEDs suitable for indicators.[32]</p>\r\n<p>In February 1969, Hewlett-Packard introduced the HP Model 5082-7000 Numeric Indicator, the first LED device to use integrated circuit (integrated LED circuit) technology.[33] It was the first intelligent LED display, and was a revolution in digital display technology, replacing the Nixie tube and becoming the basis for later LED displays.[36]</p>\r\n<p>The early red LEDs were bright enough only for use as indicators, as the light output was not enough to illuminate an area. Readouts in calculators were so small that plastic lenses were built over each digit to make them legible. Later, other colors became widely available and appeared in appliances and equipment.</p>\r\n<p>The first blue-violet LED using magnesium-doped gallium nitride was made at Stanford University in 1972 by Herb Maruska and Wally Rhines</p>\r\n<p>In 1973 Pankove and Ed Miller demonstrated the first blue electroluminescence from zinc-doped gallium nitride, though the subsequent device Pankove and Miller built, the first actual gallium nitride light-emitting diode, emitted green light.[49][50]</p>\r\n<p>Today, magnesium-doping of gallium nitride remains the basis for all commercial blue LEDs and laser diodes. In the early 1970s, these devices were too dim for practical use, and research into gallium nitride devices slowed.</p>\r\n<p>In 1993, high-brightness blue LEDs were demonstrated by Shuji Nakamura of Nichia Corporation using a gallium nitride growth process.[56][57][58] In parallel, Isamu Akasaki and Hiroshi Amano in Nagoya were working on developing the important GaN deposition on sapphire substrates and the demonstration of p-type doping of GaN. This new development revolutionized LED lighting, making high-power blue light sources practical, leading to the development of technologies like Blu-ray[citation needed].</p>\r\n<p>In 1995, Alberto Barbieri at the Cardiff University Laboratory (GB) investigated the efficiency and reliability of high-brightness LEDs and demonstrated a \"transparent contact\" LED using indium tin oxide (ITO) on (AlGaInP/GaAs).</p>\r\n<p>In 2001[62] and 2002,[63] processes for growing gallium nitride (GaN) LEDs on silicon were successfully demonstrated.</p>\r\n<p>In January 2012, Osram demonstrated high-power InGaN LEDs grown on silicon substrates commercially,[64] and GaN-on-silicon LEDs are in production at Plessey Semiconductors.</p>\r\n<p><strong><u>White LEDs and the illumination breakthrough</u></strong></p>\r\n<p>Even though white light can be created using individual red, green and blue LEDs, this results in poor color rendering, since only three narrow bands of wavelengths of light are being emitted. The attainment of high efficiency blue LEDs was quickly followed by the development of the first white LED. In this device a cerium doped phosphor coating produces yellow light through fluorescence. The combination of that yellow with remaining blue light appears white to the eye. Using different phosphors produces green and red light through fluorescence. The resulting mixture of red, green and blue is perceived as white light, with improved color rendering compared to wavelengths from the blue LED/YAG phosphor combination.</p>\r\n<p>The first white LEDs were expensive and inefficient. However, the light output of LEDs has increased exponentially. The latest research and development has been propagated by Japanese manufacturers such as Panasonic, and Nichia, and by Korean and Chinese manufacturers such as Samsung, Kingsun, and others. This trend in increased output has been called Haitz\'s law after Dr. Roland Haitz.[79]</p>\r\n<p><em>Figure 1</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3192/img_001.png\" alt=\"Figure 1\" /><br />\r\n<em>Illustration of Haitz\'s law, showing improvement in light output per LED over time, with a logarithmic scale on the vertical axis</em></p>\r\n<p>Light output and efficiency of blue and near-ultraviolet LEDs rose and the cost of reliable devices fell. This led to relatively high-power white-light LEDs for illumination, which are replacing incandescent and fluorescent lighting.[80][81]</p>\r\n<p>Experimental white LEDs have been demonstrated to produce 303 lumens per watt of electricity (lm/w); some can last up to 100,000 hours.[82][83] However, commercially available LEDs have an efficiency of up to 223 lm/w.[84][85][86]</p>\r\n<p>Below are some comparisons for incandescent bulbs</p>\r\n<p><u><strong>Some figures I found online from Wikipedia</strong></u></p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Incandescent_light_bulb\">https://en.wikipedia.org/wiki/Incandescent_light_bulb</a></p>\r\n<p>(Example figure for Standard Incandescent bulb only 12.6 lm / W)</p>\r\n<p>(Example figures for Halogen bulb being 24 lm / W)</p>\r\n<p>With LEDs continuing to get cheaper and even though for now they cost more than traditional bulbs, having this huge increase in electrical efficiency means the overall cost is significantly cheaper than that of incandescent bulbs.[87]</p>\r\n<p>While indicator LEDs are known for their extremely long life, up to 100,000 hours, lighting LEDs are operated much less conservatively, and consequently have shorter lives. LED technology is useful for lighting designers, because of its low power consumption, low heat generation, instantaneous on/off control, and in the case of single color LEDs, continuity of color throughout the life of the diode and relatively low cost of manufacture. LED lifetime depends strongly on the temperature of the diode. Operating an LED lamp in conditions that increase the internal temperature can greatly shorten the lamp\'s life.</p>\r\n<p>I now use LED lighting in my own home particularly in the areas where lighting is on for extended periods such as in the living room.</p>\r\n<p>As you can see we have come an extremely long way in a relatively short space of time with advancements continuing to accelerate.</p>\r\n<p>It\'s hard to appreciate the massive impact electric lighting has had on the world.</p>\r\n<p>It\'s even harder to imagine living in a time not that long ago where an expensive candle producing a puny amount illumination was the only source of light, with the added not inconsiderable fire risk of having a naked flame sharing a room with combustible materials.</p>\r\n<p>With all these deterrents it\'s little wonder that people just went to bed when the sun went down.</p>\r\n',201,0,1,'CC-BY-SA','Electrical, Hacks',0,0,1),
(3188,'2020-10-21','Thrift store quick fix',67,'Fixing up a dog coat for the cool weather.','<h3 id=\"thrift-store-quick-fix-for-a-dog-coat.\">Thrift store quick fix for a dog coat.</h3>\r\n<ol type=\"1\">\r\n<li>Ripped out stitches on defective velcro.</li>\r\n</ol>\r\n<p><small><em>Picture 1</em></small><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3188/img_001.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3188/img_001_thumbnail.jpg\" alt=\"Picture 1\" /></a></p>\r\n<ol start=\"2\" type=\"1\">\r\n<li>Re-stitched with the flat surface facing up.</li>\r\n</ol>\r\n<p><small><em>Picture 2</em></small><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3188/img_002.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3188/img_002_thumbnail.jpg\" alt=\"Picture 2\" /></a></p>\r\n<p><small><em>Picture 3</em></small><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3188/img_003.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3188/img_003_thumbnail.jpg\" alt=\"Picture 3\" /></a></p>\r\n<ol start=\"3\" type=\"1\">\r\n<li>Hot-glued replacement velcro.</li>\r\n</ol>\r\n<p><small><em>Picture 4</em></small><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3188/img_004.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3188/img_004_thumbnail.jpg\" alt=\"Picture 4\" /></a></p>\r\n<ol start=\"4\" type=\"1\">\r\n<li>Profit</li>\r\n</ol>\r\n<p><small><em>Picture 5</em></small><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3188/img_005.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3188/img_005_thumbnail.jpg\" alt=\"Picture 5\" /></a></p>\r\n',318,0,0,'CC-BY-SA','sewing',0,0,1),
(3189,'2020-10-22','How the Dutch dig Graves',163,'Ken explains how they dig graves when the ground is essentially sand','<p>\r\nOn a lock down walk in the local grave yard, Ken and his Wife stumble upon a new grave. As the soil is mostly sand, the graves need to be shored up to prevent collapse.\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3189/1.jpg\" />\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3189/2.jpg\" />\r\n</p>\r\n<p>\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3189/3.jpg\" />\r\n</p>',30,0,1,'CC-BY-SA','graves, sand, How Holland Works, Dutch, Netherlands',0,0,1),
(3193,'2020-10-28','Meet Antithesis',1946,'Meet my new computer, a Pinebook Pro, as I explain my rationale, unbox it, and set it up.','<p>In this episode Paul discusses his thoughts in ordering a Pinebook Pro. During the episode he does an unboxing, and then comes back after a week of use to let us know how it preforms in practice.<br />\r\n\r\nYou can get one yourself here: <a href=\"https://www.pine64.org/\" class=\"uri\">https://www.pine64.org/</a></p>\r\n',383,57,0,'CC-BY-SA','Pinebook,Pro,64,unboxing',0,0,1),
(3198,'2020-11-04','Income Life insurance and then Chopin',1381,'I talk about my thoughts on Income Life insurance, and then we listen to some Chopin','<p><code>@paul@cloud.pquirk.com</code></p>',383,0,0,'CC-BY-SA','Income,life,insurance,investment,investing,Chopin',0,0,1),
(3195,'2020-10-30','For your Consideration - the ideal Ham Radio setup',3470,'Introducing a new podcast to me, with a special guest with an interest in amateur radio.','<ol type=\"1\">\r\n<li><p>Host Noah Cheliah</p></li>\r\n<li><p>Plenty of Linux security and IP cameras talk</p></li>\r\n<li><p>Focus on Free Software and related news</p></li>\r\n<li><p>Noah brings on a guest, who describe his ideal Ham Radio setup, which includes use of Software Defined radio.</p>\r\n<p><a href=\"https://en.wikipedia.org/wiki/Software-defined_radio\" class=\"uri\">https://en.wikipedia.org/wiki/Software-defined_radio</a></p></li>\r\n<li><p>Guest talking about Ham Radio starts at 00:25:42</p>\r\n<p><a href=\"https://podcast.asknoahshow.com/200\" class=\"uri\">https://podcast.asknoahshow.com/200</a></p></li>\r\n</ol>\r\n',318,75,0,'CC-BY-NC-ND','linux, security, amateur radio',0,0,1),
(3197,'2020-11-03','Pens, pencils, paper and ink - 3',1420,'Looking at another batch of writing equipment','<h2 id=\"introduction\">Introduction</h2>\r\n<p>This is the third in a short series about pens, pencils, writing paper and ink.</p>\r\n<p>In this episode I look at two Chinese fountain pens, a mechanical pencil, a gel pen, some inks and some paper.</p>\r\n<h2 id=\"long-notes\">Long notes</h2>\r\n<p>The <a href=\"https://hackerpublicradio.org/eps/hpr3197/full_shownotes.html\">main notes for this episode, including pictures, can be viewed here</a>.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li>Pen &amp; Pencil Brands:\r\n<ul>\r\n<li>Jinhao\r\n<ul>\r\n<li><a href=\"https://qiangu.bjsx12.host.35.com/en/indexen.asp\">Website</a></li>\r\n<li><a href=\"https://stationery.wiki/Jinhao\">Stationery Wiki</a></li>\r\n</ul></li>\r\n<li>Pentel\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Pentel\">Wikipedia page</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Mechanical Pencil:\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Mechanical_pencil\">Wikipedia page</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Inks:\r\n<ul>\r\n<li><a href=\"https://www.jherbin.com/index.html\">J.Herbin</a></li>\r\n<li><a href=\"https://www.jetpens.com/J.-Herbin-Bleu-Pervenche-Ink-Periwinkle-Blue-30-ml-Bottle/pd/3768\">Jet Pens, Bleu Pervenche Ink, 30ml</a></li>\r\n<li><a href=\"https://www.diamineinks.co.uk/\">Diamine Inks</a></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Paper:\r\n<ul>\r\n<li><a href=\"https://www.clairefontaine.com/\">Clairefontaine</a></li>\r\n<li>Oxford:\r\n<ul>\r\n<li><a href=\"https://www.my-oxford.com/gb-en/oxford-campus-notebooks/oxford-campus-refill-pads\">Oxford Campus Refills</a></li>\r\n<li><a href=\"https://www.my-oxford.com/int-en/oxford-black-n-red\">Oxford Black N’ Red</a></li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>HPR links:\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1941\">hpr1941 :: What’s in my case</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2061\">hpr2061 :: Handwriting</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=2273\">hpr2273 :: Fountain Pens</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3063\">hpr3063 :: Pens, pencils, paper and ink - 1</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3092\">hpr3092 :: Pens, pencils, paper and ink - 2</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,112,1,'CC-BY-SA','fountain pen,gel pen,mechanical pencil,ink,paper',0,0,1),
(3201,'2020-11-09','A small intro to 3D printing',688,'Everything a newbie needs to know to start 3D printing','<ul>\r\n<li>My Ender 3 printer from Creality</li>\r\n<li>Cura, open source from Ultimaker, <a href=\"https://ultimaker.com/nl/software/ultimaker-cura\" class=\"uri\">https://ultimaker.com/nl/software/ultimaker-cura</a></li>\r\n<li>Octoprint, <a href=\"https://octoprint.org/\" class=\"uri\">https://octoprint.org/</a></li>\r\n</ul>',369,0,0,'CC-BY-SA','3D printing',0,0,1),
(3203,'2020-11-11','The Paul Quirk show: Retro Computing',1838,'I discuss the hobby of retro computing in this episode.','<p>Some links of interest for the listener:</p>\r\n<ul>\r\n<li>Amiga emulation: <a href=\"https://fs-uae.net/\" class=\"uri\">https://fs-uae.net/</a></li>\r\n<li>Commodore 8 bit emulation: <a href=\"https://vice-emu.sourceforge.io/\" class=\"uri\">https://vice-emu.sourceforge.io/</a></li>\r\n<li>Atari emulation: <a href=\"https://hatari.tuxfamily.org/\" class=\"uri\">https://hatari.tuxfamily.org/</a></li>\r\n<li>Apple II emulation: <a href=\"https://apple2games.com/wiki/Apple_2_Emulators\" class=\"uri\">https://apple2games.com/wiki/Apple_2_Emulators</a></li>\r\n<li>A site for the Color Computer: <a href=\"https://cocoquest.com/\" class=\"uri\">https://cocoquest.com/</a></li>\r\n</ul>',383,0,0,'CC-BY-SA','retro,computing,Paul Quirk show,Commodore 64,Commodore 128,Vic 20,Apple II,coco,8-bit,PET,Atari',0,0,1),
(3199,'2020-11-05','Bad Audio Weed Eater Bugs Sprinkler and Bubbles !',1516,'Pushing the definition of \"Audible\" to the limit, join us for some home repair tips','<p>\r\nJoin us for some home repairs, picking up tips and tricks on the way. Sorry for the bad audio.\r\n</p>\r\n<ul>\r\n<li>Bad Audio</li>\r\n<li>Weedeater Bugs</li>\r\n<li>Sprinkler</li>\r\n<li>Bubbles</li>\r\n</ul>',36,0,1,'CC-BY-SA','home improvement,home repair,outdoors,outside ',0,0,1),
(3202,'2020-11-10','A big Question',1118,'In his first show, Padraig asks a big life question. Well ok more like an undead question.','<p>\r\nIn his first show - recorded on Halloween night, Padraig asks a big life question. Well ok more like an undead question. Which is better a Lich, or a Vampire.\r\n</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Lich_(Dungeons_%26_Dragons)\">https://en.wikipedia.org/wiki/Lich_(Dungeons_%26_Dragons)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Vampire_(Dungeons_%26_Dragons)\">https://en.wikipedia.org/wiki/Vampire_(Dungeons_%26_Dragons)</a></li>\r\n</ul>',388,95,0,'CC-BY-SA','DND, Vampires, Lich, Undead, Halloween',0,0,1),
(3205,'2020-11-13','Backups of your Backups of Backups',3205,'Do you have backups of your backups? Well you better! Listen to this rant','This is a general discussion about backups and cloud storage. ',36,0,1,'CC-BY-SA','backups,cloud,spideroak,backup,cloud backup,cloud backups',0,0,1),
(3211,'2020-11-23','Chainsaws',1098,'Info about chainsaws and what I know so far!','In this episode operat0r shares his experiences with chainsaws.',36,0,1,'CC-BY-SA','outdoors,outdoor,outside,mechanic,small engine repair,repair,home,home repair,chainsaws',0,0,1),
(3214,'2020-11-26','Rant about websites',1880,'I go over history of websites and the complex nature of security in complex websites','<p>In this show I go over history of websites and the complex nature of security in complex websites</p>',36,0,1,'CC-BY-SA','internet,security,history,html',0,0,1),
(3225,'2020-12-11','Grill repair',1027,'I go over some grill tips/repair','<p>A few quick tips on how to extend the life of grills.</p>',36,0,1,'CC-BY-SA','outdoor,outdoors,repair,home repair,grills',0,0,1),
(3235,'2020-12-25','Soldering Tips',487,'What little I know about the topic you will learn','<p>\r\nA follow up show in the vein of <a href=\"https://hackerpublicradio.org/eps.php?id=3016\">hpr3016 :: Nixie tube clock and friends!</a>. Also be sure to remove batteries from electronics in storage.</p>',36,103,1,'CC-BY-SA','Solder,Soldering,Electronics',0,0,1),
(3245,'2021-01-08','ELECTRICITY',1843,'I talk about tips on ELECTRICITY','<p>An adhoc show in traffic, about how sockets and 3 way switches work.</p>',36,0,1,'CC-BY-SA','ELECTRICITY',0,0,1),
(3216,'2020-11-30','Buying a second home in France',952,'Steps I have taken up to now for buying a second home in another country','<p><a href=\"https://www.funda.nl/\">funda.nl</a></p>\r\n<ul>\r\n<li><p>Do geo query on <a href=\"https://overpass-turbo.eu/\">overpass-turbo.eu</a></p></li>\r\n<li><p>Find query to query villages here: <a href=\"https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example\" class=\"uri\">https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example</a></p></li>\r\n<li><p>The box on the right is the viewport that you will get data from.</p></li>\r\n<li><p>Used python to convert xml file to Postgres sql table</p></li>\r\n<li><p>Run query for all < my_max_inhabitants</p></li>\r\n<li><p>Run script to query and save to csv</p></li>\r\n<li><p>Import csv into LibreOffice spreadsheet.</p></li>\r\n<li><p>Use global search & replace to make cells with google maps url clickable.</p></li>\r\n<li><p>Nice podcast of French women about buying a house in France<br />\r\n<a href=\"https://joinusinfrance.com/episode/buying-a-house-in-france-episode-239/\" class=\"uri\">https://joinusinfrance.com/episode/buying-a-house-in-france-episode-239/</a></p></li>\r\n</ul>',369,0,0,'CC-BY-SA','second-house,france',0,0,1),
(3204,'2020-11-12','Getting Started in 3D Printing',960,'Thaj gives his opinions and recommendations on how to get started in 3D printing','<p>Getting started in 3D printing</p>\r\n<ul>\r\n<li><p><a href=\"https://top3dshop.com/blog/fff-vs-fdm-difference-and-best-printers\">The FFF vs. FDM Debate</a></p></li>\r\n<li><p><a href=\"https://www.creality.com/goods-detail/ender-3-3d-printer\">Creality Ender 3</a></p></li>\r\n<li><p><a href=\"https://www.reprap.org/wiki/RepRap\">Where to go once you decide you need another 3D printer</a></p></li>\r\n</ul>',270,0,1,'CC-BY-SA','3D Printing',0,0,1),
(3206,'2020-11-16','Dungeons and Dragons for the blind',3511,'I discuss some easy workarounds to make tabletop RPGs easy for both sighted and non-sighted players','<p>Dungeons and Dragons, and most tabletop roleplaying games, are ideal platforms for players with low or no vision. However, because most players are sighted, you have to work-around some assumptions made by the rulebooks.</p>\r\n\r\n<p>I &#91;currently&#93; have vision, but I have played with a blind player before, and I\'ve played as a Dungeon Master with no materials on hand. In this episode, I discuss some easy workarounds to make tabletop RPGs easy for both sighted and non-sighted players.\r\n</p>\r\n\r\n<p>There are audiobook versions of the rule books available at <a href=\"https://listenrpg.com\">https://listenrpg.com</a>.</p>\r\n\r\n<p>The official D&amp;D digital platform is <a href=\"https://www.dndbeyond.com/\" target=\"_blank\">dndbeyond.com</a>, and it is accessible to blind players using a screen reader.</p>\r\n\r\n<p>Wizards of the Coast publishes the basic rules under the <a href=\"https://www.opengamingfoundation.org/licenses.html\" target=\"_blank\">Open Game License (OGL)</a>. As a service to my players, I maintain <a href=\"https://notabug.org/notklaatu/5srdnd.git\">a version of this document in plain text, with third-party OGL additions</a>. It may or may not be useful for screen readers, depending on your workflow.</p>',78,95,0,'CC-BY-SA','dnd,blind,inclusive,5e,tabletop,rpg',0,0,1),
(3217,'2020-12-01','Sump Minion',1106,'My first Internet of Things device, without using python','\r\n<p>1 <b>introduction</b></p>\r\n<p>1.1 back in Ohio using my regular voice<br />\r\n1.2 espeak is no worse than operat0rs audio and we all love his shows.</p>\r\n<p>2 <b>the problem</b></p>\r\n<p>2.1 where i live the water table is high and basement flooding is a problem <a href=\"https://en.wikipedia.org/wiki/Great_Black_Swamp\" class=\"uri\">https://en.wikipedia.org/wiki/Great_Black_Swamp</a><br />\r\n2.2 to counteract the water table problem houses have sumps in the basement</p>\r\n<p><em>sump closet</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3217/img_001.jpg\" alt=\"sump closet\" /></p>\r\n<p><em>sump close up</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3217/img_002.jpg\" alt=\"sump close up\" /></p>\r\n<p>2.2.1 sumps consist of a basin where outside water is collected<br />\r\n2.2.2 a pump, usually electric, that drains the sump<br />\r\n2.2.3 also a good sump system will have some type of backup pump</p>\r\n<p>2.3 the \'real\' problem happens when the sump pump(s) fail<br />\r\n2.3.1 primary pumps fail in many ways, mechanical motor failures, floats sticking electrical outage<br />\r\n2.3.2 secondary pumps also fail battery problems, mechanical problems<br />\r\n2.3.3 i wanted a notification system that would let me know that the water level in my sump was rising. i wanted it set so that if the water level hits where the secondary system kicks in i would get some ind of notification. i wanted a system that would not use python or some kind of \'home spy\' system available from some friendly corporation.</p>\r\n<p>3 <b>the solution</b></p>\r\n<p>3.1 a raspberrry pi, a simple transistor circuit, a c library that allows access to the pi\'s gpio\'s, mutt mail client, some bash scripting and a cron job</p>\r\n<p>\r\nThe probe is meerly 2 wires on the end of a pvc pipe. one wire is higher up on the pipe than the other when both wires are submerged, the circuit is complete. the wires are just some old stuff from a stripped out ethernet cable. you could easily cascade anumber of these circuits and provide a water level meter something like this,<br />\r\n\r\n<img src=\"https://www.homemade-circuits.com/wp-content/uploads/2019/06/water-level.jpg\" alt=\"water level meter\" /><br />\r\n, instead of running leds, you\'d hook each end to a gpio pin on the pie.\r\n</p>\r\n<p>\r\nIn picture 2, the closeup you can see the probe its the small pvc pipe with the blue wires running along the side. I attached the end of the wires to the pipe by stripping the ends and wrapping them around a small 1/2\" self tapping screw. then I screwed one in towards the bottom and on higher up. the one higer up determines when the water alarm goes off. \r\n</p>\r\n\r\n\r\n<p>4 <b>implementation</b></p>\r\n<p>4.1 raspberry pi 3b+<br />\r\n4.1.1 install slackware<br />\r\n<a href=\"https://sarpi.fatdog.eu/\" class=\"uri\">https://sarpi.fatdog.eu/</a><br />\r\nslackware-arm<br />\r\n<a href=\"https://arm.slackware.com/\" class=\"uri\">https://arm.slackware.com/</a><br />\r\npodcast<br />\r\n<a href=\"https://shows.acast.com/slackchat\" class=\"uri\">https://shows.acast.com/slackchat</a><br />\r\n4.1.2 access to gpio\'s<br />\r\n4.1.2.1 initially sysfs, its deprecated<br />\r\n<a href=\"https://www.kernel.org/doc/Documentation/ABI/obsolete/sysfs-gpio\" class=\"uri\">https://www.kernel.org/doc/Documentation/ABI/obsolete/sysfs-gpio</a><br />\r\n4.1.2.2 i was unable to get libgpio to compile<br />\r\n4.1.2.3 other solutions python. wiringpi, project dead<br />\r\n4.1.2.4 a library pigpiod<br />\r\n<a href=\"https://abyz.me.uk/rpi/pigpio/pigpiod.html\" class=\"uri\">https://abyz.me.uk/rpi/pigpio/pigpiod.html</a><br />\r\n4.1.2.5 slackbuilds pigpiod<br />\r\n<a href=\"https://slackbuilds.org/\" class=\"uri\">https://slackbuilds.org/</a><br />\r\n4.1.3 the circuit<br />\r\n4.1.3.1 a rework of a forrest mims water alarm circuit<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Forrest_Mims\" class=\"uri\">https://en.wikipedia.org/wiki/Forrest_Mims</a></p>\r\n<p><em>circuit diagram</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3217/img_003.jpg\" alt=\"circuit diagram\" /></p>\r\n<p>4.1.4 mutt<br />\r\n<a href=\"https://smalldata.tech/blog/2016/09/10/gmail-with-mutt\" class=\"uri\">https://smalldata.tech/blog/2016/09/10/gmail-with-mutt</a><br />\r\n4.1.5 email to text<br />\r\n<a href=\"https://20somethingfinance.com/how-to-send-text-messages-sms-via-email-for-free/\" class=\"uri\">https://20somethingfinance.com/how-to-send-text-messages-sms-via-email-for-free/</a><br />\r\n4.1.6 the script<br />\r\n</p>\r\n<pre><code>#!/bin/bash\r\n\r\nSENSOR=4\r\nRELAY=17\r\nINPUT=0\r\nOUTPUT=1\r\nON=1\r\nOFF=0\r\n\r\nADDRESS1=&lt;your-phone-number&gt;@vtext.com\r\n\r\n#if its 6am send system running sanity text\r\nif [ $(date | cut -c 12-16) == &quot;06:00&quot; ]; then\r\n\r\n#check to make sure daemon is running\r\nif [ &quot;$(pidof pigpiod)&quot; == &quot;&quot; ]; then\r\n   echo &quot;Something is wrong, pigpiod is not running.&quot; | mutt -s &quot;mutt message&quot; $ADDRESS1\r\n   else\r\n   #make sure pin 4 is input, pin 17 output\r\n   if [ &quot;$(pigs modeg $SENSOR)&quot; = $OUTPUT ]; then\r\n      pigs modes $SENSOR R\r\n   fi\r\n   if [ &quot;$(pigs modeg $RELAY)&quot; = $INPUT ]; then\r\n      pigs modes $RELAY W\r\n   fi\r\n      echo &quot;System running.&quot; | mutt -s &quot;mutt message&quot; $ADDRESS1\r\n   fi\r\nfi\r\n\r\n#if its the first wednesday of the month, run a system test\r\nif [ $(date | cut -c 1-3) `= &quot;Wed&quot; ] &amp;&amp; [ $(date | cut -c 12-16) =&#39; &quot;12:00&quot; ] &amp;&amp; [ $(date | cut -c 9-10) -lt &quot;8&quot; ]; then\r\n   echo &quot;Monthly Test.&quot; | mutt -s &quot;mutt message&quot; $ADDRESS1\r\n   pigs w $RELAY $ON\r\n   sleep 1\r\n\r\n   if [ $(pigs r $SENSOR) = 0 ]; then\r\n     echo &quot;Test Passed!&quot; | mutt -s &quot;mutt message&quot; $ADDRESS1\r\n   else\r\n     echo &quot;Something is wrong!&quot; | mutt -s &quot;mutt message&quot; $ADDRESS1\r\n   fi\r\nfi\r\n\r\n#check to see if water is rising, has the reading on pin 4 been driven low?\r\nif [ $(pigs r $SENSOR) = 0 ]; then\r\n   echo &quot;Alert! The water is rising!&quot; | mutt -s &quot;mutt message&quot; $ADDRESS1\r\nfi</code></pre>\r\n<p><em>testing on breadboard</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3217/img_004.jpg\" alt=\"testing on breadboard\" /></p>\r\n<p><em>strip board</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3217/img_005.jpg\" alt=\"strip board\" /></p>\r\n<p><em>final installation</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3217/img_006.jpg\" alt=\"final installation\" /></p>\r\n<p>5 <b>conclusion</b></p>\r\n<p>5.1 fun project, shows the power of linux and floss and hope it inspires you</p>\r\n',326,103,0,'CC-BY-SA','raspberry pi, slackware',0,0,1),
(3226,'2020-12-14','Using taskwarrior to structurize your work',970,'How using taskwarrior can help you to structure your work','<ul>\r\n<li><a href=\"https://taskwarrior.org/\">taskwarrior.org</a>\r\n<ul>\r\n<li>Taskwarrior is Free and Open Source Software that manages your TODO list from the command line. It is flexible, fast, and unobtrusive. It does its job then gets out of your way.</li>\r\n</ul></li>\r\n</ul>\r\n<!-- x -->\r\n<ul>\r\n<li><a href=\"https://timewarrior.net/\">timewarrior.net</a>\r\n<ul>\r\n<li>Timewarrior is Free and Open Source Software that tracks time from the command line.</li>\r\n</ul></li>\r\n</ul>\r\n<!-- x -->\r\n<ul>\r\n<li><a href=\"https://medium.com/@jrisch/tracking-time-with-taskwarrior-and-timewarrior-6759f3542276\">Article on the Medium website</a>\r\n<ul>\r\n<li><em>Tracking time on the command line with Taskwarrior and Timewarrior</em></li>\r\n</ul></li>\r\n</ul>',369,0,0,'CC-BY-SA','command-line,taskwarrior,timewarrior,todo-list',0,0,1),
(3215,'2020-11-27','Why I Gave Away a 3-D Printer',442,'I briefly had a 3-D printer and gave it away. This is why.','<p>Ken Fallon asked for shows abut 3-D printers and I told him I had given mine away. So of course he asked for a show about why I had done that. This is that show.</p>\r\n<ul>\r\n<li><a href=\"https://olfconference.org/\" class=\"uri\">https://olfconference.org/</a></li>\r\n<li><a href=\"https://2021.penguicon.org/\" class=\"uri\">https://2021.penguicon.org/</a></li>\r\n<li><a href=\"https://canonical.com/\" class=\"uri\">https://canonical.com/</a></li>\r\n<li><a href=\"https://www.vmware.com/\" class=\"uri\">https://www.vmware.com/</a></li>\r\n<li><a href=\"https://www.redhat.com/en/authors/joe-brockmeier\" class=\"uri\">https://www.redhat.com/en/authors/joe-brockmeier</a></li>\r\n<li><a href=\"https://enablingthefuture.org/\" class=\"uri\">https://enablingthefuture.org/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/why-i-gave-away-a-3-d-printer/\" class=\"uri\">https://www.zwilnik.com/why-i-gave-away-a-3-d-printer/</a></li>\r\n</ul>',198,0,0,'CC-BY-SA','3D Printers, prosthetics',0,0,1),
(3209,'2020-11-19','Linux Inlaws S01E17: Nextcloud',4189,'Chat with Frank Karlitschek about Nextcloud and forking your company','<ul>\r\n<li>Nextcloud: <a href=\"https://nextcloud.com\" target=\"_blank\">https://nextcloud.com</a></li>\r\n<li>PHP: <a href=\"https://www.php.net\" target=\"_blank\">https://www.php.net</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','Nextcloud, PHP, Golang, forking a company, technical debt',0,0,1),
(3207,'2020-11-17','Fireside chat with E Nigma',3799,'Ken talks to the original HPR and Today with a Techie Admin.','<p>In this rambling episode, we talk to <a href=\"https://hackerpublicradio.org/correspondents/0039.html\">Enigma</a> about the old days of HPR. He helped out with Today With A Techie and <a href=\"https://hackerpublicradio.org/correspondents/0001.html\">Droops</a> asked him if he would like lead the project. After 300 episodes he, <a href=\"https://www.urbandictionary.com/define.php?term=Dual_Parallel\">Dual Parallel</a>, <a href=\"https://hackerpublicradio.org/correspondents/0001.html\">Droops</a>, and  <a href=\"https://en.wikipedia.org/wiki/StankDawg\">StankDawg</a> decided to pivot and rebrand as Hacker Public Radio. A nod to <a href=\"https://en.wikipedia.org/wiki/NPR\">National Public Radio</a>.</p>\r\n\r\n<h3>Links</h3>\r\n<ul>\r\n<li><a href=\"https://oldskoolphreak.com/radio.html\">https://oldskoolphreak.com/radio.html</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/twat.html\">https://hackerpublicradio.org/twat.html</a></li>\r\n<li><a href=\"https://www.binrev.com/forums/\">https://www.binrev.com/forums/</a></li>\r\n<li><a href=\"https://lottalinuxlinks.com/\">https://lottalinuxlinks.com/</a></li>\r\n<li><a href=\"https://archive.org/details/Linux_Reality_Podcast_Archive_DVD\">https://archive.org/details/Linux_Reality_Podcast_Archive_DVD</a></li>\r\n<li><a href=\"https://archive.org/details/BRRseason1\">https://archive.org/details/BRRseason1</a></li>\r\n<li><a href=\"https://archive.org/details/BRRseason2\">https://archive.org/details/BRRseason2</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0039.html\">Enigma https://hackerpublicradio.org/correspondents/0039.html</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Digital_DawgPound\">https://en.wikipedia.org/wiki/Digital_DawgPound</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Infonomicon\">https://en.wikipedia.org/wiki/Infonomicon</a></li>\r\n<li><a href=\"https://www.urbandictionary.com/define.php?term=Dual_Parallel\">https://www.urbandictionary.com/define.php?term=Dual_Parallel</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/StankDawg\">https://en.wikipedia.org/wiki/StankDawg</a></li>\r\n</ul>',30,0,1,'CC-BY-SA','HPR, TWAT, DDP, Infonomicon, Binrev, RFA',0,0,1),
(3208,'2020-11-18','The Paul Quirk show: Wacom with Pinebook, and thoughts on the DMCA takedown',1120,'I got a Wacom tablet to use with my Pinebook, and then share my thoughts on the recent DMCA takedown','<ul>\r\n<li><p>My fediverse address: <span class=\"citation\" data-cites=\"paul\">@paul</span><span class=\"citation\" data-cites=\"cloud.pquirk.com\">@cloud.pquirk.com</span></p></li>\r\n<li><p>See my first Wacom doodle here: <a href=\"https://cloud.pquirk.com/index.php/s/CAnAwwD6S6AczC6\" class=\"uri\">https://cloud.pquirk.com/index.php/s/CAnAwwD6S6AczC6</a></p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Citizens_United_v._Federal_Election_Commission\" class=\"uri\">https://en.wikipedia.org/wiki/Citizens_United_v._Federal_Election_Commission</a></p></li>\r\n<li><p><a href=\"https://www.canlii.org/en/ca/scc/doc/2000/2000scc57/2000scc57.html\" class=\"uri\">https://www.canlii.org/en/ca/scc/doc/2000/2000scc57/2000scc57.html</a></p></li>\r\n</ul>',383,0,0,'CC-BY-SA','Pinebook,Pro,Wacom,tablet,DMCA,takedown,Youtube,Canadian,Canada,Music',0,0,1),
(3212,'2020-11-24','A Pi Model 3B as your daily driver? You must be joking.',755,'Beeza\'s laptop is away being fixed. Can he manage for a few days using just his Raspberry Pi 3B?','<p>My Dell laptop had to go away to have a new cooling fan fitted. I\'ve got 3 other laptops to call upon, but instead I decided to conduct an experiment I\'ve theorised about for ages. Could a Raspberry Pi 3B serve as my daily driver?</p>\r\n<p>This idea goes back some way and since then, of course, the much more powerful model 4 has been released. However, there must be thousands of 3Bs out there doing nothing, so perhaps they could have a new lease of life providing basic browsing and internet capabilities to people who might otherwise not be in a position to buy a computer.</p>\r\n<p>Hardware: Raspberry Pi Model 3B<br />\r\nOS: Raspberry Pi OS (current version as of 31st October 2020)<br />\r\nMicroSD: SanDisk 16GB</p>\r\n<p>ADDITIONAL SOFTWARE INSTALLED</p>\r\n<ul>\r\n<li>Audio Editor: mhWaveEdit 1.4.23</li>\r\n<li>Audio Format Converter: SoundConverter 2.1.3</li>\r\n<li>Image Editor: GIMP 2.10</li>\r\n</ul>\r\n',246,0,0,'CC-BY-SA','Raspberry Pi, Software Review',0,0,1),
(3213,'2020-11-25','Electrical Safety',1835,'I discuss why and how I stay safe when working with electricity, with some ear candy at the end.','<ul>\r\n<li>Circuit breaker failures:\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/watch?v=0Xov-nXpBmM\" class=\"uri\">Breaker Panel Explosion</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=PN7qtQVJXXM\" class=\"uri\">DB-25 Circuit Breaker Blows Up</a></li>\r\n</ul></li>\r\n<li>Electrical socket failures:\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/watch?v=Kzv1Qn1pPpc\" class=\"uri\">Multiple socket outlet catching fire</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=nPhgQpRFe5A\" class=\"uri\">Loose wires cause fires.</a></li>\r\n</ul></li>\r\n</ul>\r\n<p>Please be safe!</p>',383,0,0,'CC-BY-SA','Electrical,safety,code,electricity,electrocution',0,0,1),
(3218,'2020-12-02','An introduction to Darktable',1574,'A brief introduction to RAW photography, the Darktable application, and then sheep may safely graze','<ul>\r\n<li><a href=\"https://darktable.org/\" class=\"uri\">https://darktable.org/</a></li>\r\n<li><a href=\"https://musopen.org/music/3446-the-lively-hunt-is-all-my-hearts-desire-bwv-208/\" class=\"uri\">https://musopen.org/music/3446-the-lively-hunt-is-all-my-hearts-desire-bwv-208/</a></li>\r\n</ul>\r\n<pre><code>@paul@cloud.pquirk.com\r\n@quirk@mastodon.social</code></pre>',383,0,0,'CC-BY-SA','darktable,RAW,photo,photography,editing',0,0,1),
(3219,'2020-12-03','Linux Inlaws S01E18: Voice Recognition and Text to Speech',4603,'How to place fake prank calls into podcasts and what does TTS have to do with this','<p>\r\nIn this episode, Chris is harassed by quite a few artificial nuisance callers, among\r\ndrug lords, Irish nurses and some random Linux Inlaws Chief Financial Officer. Based\r\non these examples, our two heroes discuss the history and current state of text-to-\r\nspeech (TTS) and voice recognition. We attempted to use voice recognition software in order\r\nto produce a <a href=\"https://linuxinlaws.eu/S01E18_trans.txt\" target=\"_blank\">transcript of the show</a>.\r\n</p>\r\n<br/>Shownotes:<br/>\r\n<ul>\r\n<li>Wavenet: <a href=\"https://deepmind.com/blog/article/wavenet-generative-model-raw-audio\" target=\"_blank\">https://deepmind.com/blog/article/wavenet-generative-model-raw-audio</a></li>\r\n<li>Tacotron: <a href=\"https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html\" target=\"_blank\">https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html</a></li>\r\n<li>DeepSpeech: <a href=\"https://github.com/mozilla/DeepSpeech\" target=\"_blank\">https://github.com/mozilla/DeepSpeech</a></li>\r\n<li>Lyrebird / Welcome.AI: <a href=\"https://www.welcome.ai/lyrebird\" target=\"_blank\">https://www.welcome.ai/lyrebird</a></li>\r\n<li>Nvidia Tacotron 2: <a href=\"https://github.com/NVIDIA/tacotron2\" target=\"_blank\">https://github.com/NVIDIA/tacotron2</a></li>\r\n<li>Tensorflow: <a href=\"https://www.tensorflow.org\" target=\"_blank\">https://www.tensorflow.org</a></li>\r\n<li>PyTorch: <a href=\"https://pytorch.org\" target=\"_blank\">https://pytorch.org</a></li>\r\n<li>Melspectrograms: <a href=\"https://medium.com/analytics-vidhya/understanding-the-mel-spectrogram-fca2afa2ce53\" target=\"_blank\">https://medium.com/analytics-vidhya/understanding-the-mel-spectrogram-fca2afa2ce53</a></li>\r\n<li>GRAPHCORE: <a href=\"https://www.graphcore.ai\" target=\"_blank\">https://www.graphcore.ai</a></li>\r\n<li>FGPA: <a href=\"https://en.wikipedia.org/wiki/Field-programmable_gate_array\" target=\"_blank\">https://en.wikipedia.org/wiki/Field-programmable_gate_array</a></li>\r\n<li>IBM ROMP: <a href=\"https://en.wikipedia.org/wiki/IBM_ROMP\" target=\"_blank\">https://en.wikipedia.org/wiki/IBM_ROMP</a></li>\r\n<li>Google\'s TTS: <a href=\"https://cloud.google.com/text-to-speech\" target=\"_blank\">https://cloud.google.com/text-to-speech</a></li>\r\n<li>Apple M1: <a href=\"https://www.gsmarena.com/the_apple_m1_is_the_first_armbased_chipset_for_macs_with_the_fastest_cpu_cores_and_top_igpu-news-46222.php\" target=\"_blank\">https://www.gsmarena.com/the_apple_m1_is_the_first_armbased_chipset_for_macs_with_the_fastest_cpu_cores_and_top_igpu-news-46222.php</a></li>\r\n<li>Secure Enclaves: <a href=\"https://support.apple.com/guide/security/secure-enclave-overview-sec59b0b31ff/web\" target=\"_blank\">https://support.apple.com/guide/security/secure-enclave-overview-sec59b0b31ff/web</a></li>\r\n<li>OSDU: <a href=\"https://www.opengroup.org/osdu/forum-homepage\" target=\"_blank\">https://www.opengroup.org/osdu/forum-homepage</a></li>\r\n<li>Jack Kerouac\'s On the Road: <a href=\"https://en.wikipedia.org/wiki/On_the_Road\" target=\"_blank\">https://en.wikipedia.org/wiki/On_the_Road</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','voice recognition, text to speech, wavenet, tacotron 2, DeepSpeech, Lyrebird',0,0,1),
(3222,'2020-12-08','Musings about writing a book about the Odoo software suite',1616,'How I started writing again after 20 years and this time about the Odoo software','<p>In this podcast I describe how I met another Dutch guy at the Ubucon 2018 conference in Spain. And how he asked me to write another book, this time about Odoo. How I learned how the Odoo ecosystem works, with the Odoo S.A. company and the Odoo Community Association (OCA).</p>\r\n<p>At the end I had a finished book.</p>\r\n<p>You can find the book here: <a href=\"https://www.lulu.com/en/en/shop/jeroen-baten/jumpstart-your-business-with-odoo-12-ennl/paperback/product-1wkzmj52.html\" class=\"uri\">https://www.lulu.com/en/en/shop/jeroen-baten/jumpstart-your-business-with-odoo-12-ennl/paperback/product-1wkzmj52.html</a></p>\r\n<p>If you have questions or comments, please leave a comment at the HPR site.</p>\r\n<p>Warm regards, Jeroen Baten</p>\r\n',369,0,0,'CC-BY-SA','odoo, writing, book',0,0,1),
(3223,'2020-12-09','My COVID year summary',1090,'I summarize what I\'ve been doing for the last year','<h1 id=\"links\">Links</h1>\r\n<ul>\r\n<li><a href=\"https://www.cdc.gov/coronavirus/2019-ncov/lab/reporting-lab-data.html\">https://www.cdc.gov/coronavirus/2019-ncov/lab/reporting-lab-data.html</a></li>\r\n<li><a href=\"https://coronavirus.jhu.edu/map.html\">https://coronavirus.jhu.edu/map.html</a></li>\r\n<li><a href=\"https://www.fda.gov/emergency-preparedness-and-response/mcm-legal-regulatory-and-policy-framework/emergency-use-authorization#covid19euas\">https://www.fda.gov/emergency-preparedness-and-response/mcm-legal-regulatory-and-policy-framework/emergency-use-authorization#covid19euas</a></li>\r\n</ul>',300,100,0,'CC-BY-SA','covid,healthcare,coronavirus,laboratory',0,0,1),
(3224,'2020-12-10','Adventures in Retrocomputing with the Mac Plus',1479,'I talk more about my hobby with retrocomputing, and then Greensleeves.','<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Macintosh_Plus\" class=\"uri\">https://en.wikipedia.org/wiki/Macintosh_Plus</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Zip_drive\" class=\"uri\">https://en.wikipedia.org/wiki/Zip_drive</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Steve_Jobs\" class=\"uri\">https://en.wikipedia.org/wiki/Steve_Jobs</a></li>\r\n<li><a href=\"https://www.applegazette.com/ipod/steve-jobs-and-minimalism/\" class=\"uri\">https://www.applegazette.com/ipod/steve-jobs-and-minimalism/</a></li>\r\n</ul>',383,71,0,'CC-BY-SA','Mac,Plus,Iomega,zip,drive,OS,7.5.5,6.0.8,retro,computing',0,0,1),
(3501,'2022-01-03','HPR Community News for December 2021',4324,'HPR Volunteers talk about shows released and comments posted in December 2021','<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/0401.html\" target=\"_blank\">Mechatroniac</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=3478\" target=\"_blank\">3478</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-12-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3478\" target=\"_blank\">Audio Wiring Hack on a Classroom Podium</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3479\" target=\"_blank\">3479</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-12-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3479\" target=\"_blank\">Linux Inlaws S01E49: Version Control Systems and why bother</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3480\" target=\"_blank\">3480</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-12-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3480\" target=\"_blank\">Darken Layer Modes</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=3481\" target=\"_blank\">3481</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-12-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3481\" target=\"_blank\">HPR Community News for November 2021</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=3482\" target=\"_blank\">3482</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-12-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3482\" target=\"_blank\">Introduction to Post Apocalyptic Robotics Meta Technology</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=3483\" target=\"_blank\">3483</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-12-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3483\" target=\"_blank\">Pinephone64 review</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0115.html\" target=\"_blank\">sigflup</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3484\" target=\"_blank\">3484</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-12-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3484\" target=\"_blank\">My vim setup with GnuPG</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=3485\" target=\"_blank\">3485</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-12-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3485\" target=\"_blank\">50 years since the 1st Edition of Unix was published</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=3486\" target=\"_blank\">3486</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-12-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3486\" target=\"_blank\">Unleash the true potential of GNU nano text editor</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0397.html\" target=\"_blank\">hakerdefo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3487\" target=\"_blank\">3487</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-12-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3487\" target=\"_blank\">Installing a cat door</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=3488\" target=\"_blank\">3488</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-12-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3488\" target=\"_blank\">Binaural 3d audio recording, please listen at normal speed with good head phones.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0110.html\" target=\"_blank\">Quvmoh</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3489\" target=\"_blank\">3489</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-12-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3489\" target=\"_blank\">Equality of structured errors</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3490\" target=\"_blank\">3490</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-12-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3490\" target=\"_blank\">The Path</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=3491\" target=\"_blank\">3491</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-12-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3491\" target=\"_blank\">My Github and flickmetrix</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=3492\" target=\"_blank\">3492</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-12-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3492\" target=\"_blank\">Linux Inlaws S01E44: Pipewire Just another audio server Think again</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3493\" target=\"_blank\">3493</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-12-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3493\" target=\"_blank\">My First Spanish HPR Episode</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=3494\" target=\"_blank\">3494</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-12-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3494\" target=\"_blank\">Recent Generator Repairs and Maintenance</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3495\" target=\"_blank\">3495</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-12-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3495\" target=\"_blank\">Podcast Recommendation: The Retroist</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=3496\" target=\"_blank\">3496</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2021-12-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3496\" target=\"_blank\">How I record HPR Episodes</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=3497\" target=\"_blank\">3497</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2021-12-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3497\" target=\"_blank\">Jankilators.</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=3498\" target=\"_blank\">3498</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2021-12-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3498\" target=\"_blank\">Linux Inlaws S01E45: The Big Xmas New Year bash with the Grumpies</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3499\" target=\"_blank\">3499</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2021-12-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3499\" target=\"_blank\">Fixing a noisy blower motor</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=3500\" target=\"_blank\">3500</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2021-12-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3500\" target=\"_blank\">Contrast Layer Modes</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 are 6 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3292#comments\" target=\"_blank\">hpr3292</a></strong>\n(2021-03-16) \"<em>Squirrel FSF blog</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=3292#5\" target=\"_blank\">Comment 5</a>:\ndodddummy on 2021-12-18:\n\"Where\'s the thumbs down button?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3394#comments\" target=\"_blank\">hpr3394</a></strong>\n(2021-08-05) \"<em>Be an XML star with xmlstarlet</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=3394#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2021-12-22:\n\"I consulted this episode this week\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3473#comments\" target=\"_blank\">hpr3473</a></strong>\n(2021-11-24) \"<em>My journey into Amateur Radio</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0314.html\" target=\"_blank\">thelovebug</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3473#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2021-12-02:\n\"UGH!  Correction.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3474#comments\" target=\"_blank\">hpr3474</a></strong>\n(2021-11-25) \"<em>H P R and Audio Fun</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3474#2\" target=\"_blank\">Comment 2</a>:\nOperat0r on 2021-12-06:\n\"replace Ken Fallon with a script\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3474#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2021-12-07:\n\"Thanks for Volunteering\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3474#4\" target=\"_blank\">Comment 4</a>:\nOperat0r on 2021-12-10:\n\"fun\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 8 comments on 7 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3478#comments\" target=\"_blank\">hpr3478</a></strong>\n(2021-12-01) \"<em>Audio Wiring Hack on a Classroom Podium</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0238.html\" target=\"_blank\">Jon Kulp</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3478#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-12-01:\n\"I am sure the Audio/Video department loves you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3479#comments\" target=\"_blank\">hpr3479</a></strong>\n(2021-12-02) \"<em>Linux Inlaws S01E49: Version Control Systems and why bother</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3479#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-12-02:\n\"Thanks for sharing.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3482#comments\" target=\"_blank\">hpr3482</a></strong>\n(2021-12-07) \"<em>Introduction to Post Apocalyptic Robotics Meta Technology</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=3482#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2021-12-30:\n\"Fascinating subject\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3485#comments\" target=\"_blank\">hpr3485</a></strong>\n(2021-12-10) \"<em>50 years since the 1st Edition of Unix was published</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=3485#1\" target=\"_blank\">Comment 1</a>:\nmonochromec on 2021-11-24:\n\"The show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3493#comments\" target=\"_blank\">hpr3493</a></strong>\n(2021-12-22) \"<em>My First Spanish HPR Episode</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3493#1\" target=\"_blank\">Comment 1</a>:\nDNT on 2021-12-04:\n\"Great episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3493#2\" target=\"_blank\">Comment 2</a>:\nOyente#1 on 2021-12-25:\n\"Gracias\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3495#comments\" target=\"_blank\">hpr3495</a></strong>\n(2021-12-24) \"<em>Podcast Recommendation: The Retroist</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=3495#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2021-12-24:\n\"Great recommendation\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3496#comments\" target=\"_blank\">hpr3496</a></strong>\n(2021-12-27) \"<em>How I record HPR Episodes</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><li><a href=\"https://hackerpublicradio.org/eps.php?id=3496#1\" target=\"_blank\">Comment 1</a>:\nDave Morriss on 2021-12-30:\n\"Great show\"</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/2021-December/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-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\">Older HPR shows on archive.org</h3>\n<p>This month 125 additional shows in the range 1-870 have been uploaded.</p>\n<p>The number of shows left to upload in this range is now: 244.</p>\n<h3>\nThanks to all HPR contributors in 2021!\n</h3>\n<p>\n<a href=\"https://hackerpublicradio.org/correspondents/0285.html\">2BFrank</a>, <a href=\"https://hackerpublicradio.org/correspondents/0198.html\">Ahuka</a>, <a href=\"https://hackerpublicradio.org/correspondents/0268.html\">Andrew Conway</a>, <a href=\"https://hackerpublicradio.org/correspondents/0393.html\">Anonymous Host</a>, <a href=\"https://hackerpublicradio.org/correspondents/0318.html\">Archer72</a>, <a href=\"https://hackerpublicradio.org/correspondents/0138.html\">arfab</a>, <a href=\"https://hackerpublicradio.org/correspondents/0300.html\">b-yeezi</a>, <a href=\"https://hackerpublicradio.org/correspondents/0246.html\">Beeza</a>, <a href=\"https://hackerpublicradio.org/correspondents/0396.html\">BlacKernel</a>, <a href=\"https://hackerpublicradio.org/correspondents/0326.html\">Brian in Ohio</a>, <a href=\"https://hackerpublicradio.org/correspondents/0311.html\">clacke</a>, <a href=\"https://hackerpublicradio.org/correspondents/0152.html\">Claudio Miranda</a>, <a href=\"https://hackerpublicradio.org/correspondents/0315.html\">Clinton Roy</a>, <a href=\"https://hackerpublicradio.org/correspondents/0395.html\">CoGo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0385.html\">crvs</a>, <a href=\"https://hackerpublicradio.org/correspondents/0382.html\">Daniel Persson</a>, <a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a>, <a href=\"https://hackerpublicradio.org/correspondents/0073.html\">deepgeek</a>, <a href=\"https://hackerpublicradio.org/correspondents/0399.html\">dnt</a>, <a href=\"https://hackerpublicradio.org/correspondents/0039.html\">Enigma</a>, <a href=\"https://hackerpublicradio.org/correspondents/0397.html\">hakerdefo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0269.html\">Honkeymagoo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0159.html\">HPR Volunteers</a>, <a href=\"https://hackerpublicradio.org/correspondents/0243.html\">Jezra</a>, <a href=\"https://hackerpublicradio.org/correspondents/0238.html\">Jon Kulp</a>, <a href=\"https://hackerpublicradio.org/correspondents/0129.html\">JWP</a>, <a href=\"https://hackerpublicradio.org/correspondents/0030.html\">Ken Fallon</a>, <a href=\"https://hackerpublicradio.org/correspondents/0078.html\">klaatu</a>, <a href=\"https://hackerpublicradio.org/correspondents/0401.html\">Mechatroniac</a>, <a href=\"https://hackerpublicradio.org/correspondents/0375.html\">minnix</a>, <a href=\"https://hackerpublicradio.org/correspondents/0384.html\">monochromec</a>, <a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a>, <a href=\"https://hackerpublicradio.org/correspondents/0381.html\">Nihilazo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0342.html\">norrist</a>, <a href=\"https://hackerpublicradio.org/correspondents/0390.html\">o9l</a>, <a href=\"https://hackerpublicradio.org/correspondents/0398.html\">one_of_spoons</a>, <a href=\"https://hackerpublicradio.org/correspondents/0036.html\">operat0r</a>, <a href=\"https://hackerpublicradio.org/correspondents/0383.html\">Paul Quirk</a>, <a href=\"https://hackerpublicradio.org/correspondents/0110.html\">Quvmoh</a>, <a href=\"https://hackerpublicradio.org/correspondents/0293.html\">Rho`n</a>, <a href=\"https://hackerpublicradio.org/correspondents/0115.html\">sigflup</a>, <a href=\"https://hackerpublicradio.org/correspondents/0391.html\">Some Guy On The Internet</a>, <a href=\"https://hackerpublicradio.org/correspondents/0297.html\">swift110</a>, <a href=\"https://hackerpublicradio.org/correspondents/0270.html\">Thaj Sara</a>, <a href=\"https://hackerpublicradio.org/correspondents/0314.html\">thelovebug</a>, <a href=\"https://hackerpublicradio.org/correspondents/0392.html\">timttmy</a>, <a href=\"https://hackerpublicradio.org/correspondents/0273.html\">ToeJet</a>, <a href=\"https://hackerpublicradio.org/correspondents/0394.html\">Trey</a>, <a href=\"https://hackerpublicradio.org/correspondents/0389.html\">TrumpetJohn</a>, <a href=\"https://hackerpublicradio.org/correspondents/0364.html\">Tuula</a>, <a href=\"https://hackerpublicradio.org/correspondents/0215.html\">Windigo</a>, <a href=\"https://hackerpublicradio.org/correspondents/0377.html\">Zen_Floater2</a>.\n</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3526,'2022-02-07','HPR Community News for January 2022',2626,'HPR Volunteers talk about shows released and comments posted in January 2022','<style>\ntable td.shrink {\n    white-space:nowrap\n}\np#ignore, li#ignore {\n    background-color: lightgreen;\n    color:maroon;\n}\ndiv#highlight {\n  border-style: solid;\n  border-color: red;\n  padding-right: 20px;\n  padding-left: 20px;\n}\nhr.thin {\n    border: 0;\n    height: 0;\n    border-top: 1px solid rgba(0, 0, 0, 0.1);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.3);\n}\n</style>\n\n<h2>New hosts</h2>\n<p>\nThere were no new hosts this month.\n</p>\n\n<h2>Last Month\'s Shows</h2>\n<table id=\"t01\">\n<tr>\n<th>Id</th>\n<th>Day</th>\n<th>Date</th>\n<th>Title</th>\n<th>Host</th>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3501\" target=\"_blank\">3501</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-01-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3501\" target=\"_blank\">HPR Community News for December 2021</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=3502\" target=\"_blank\">3502</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-01-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3502\" target=\"_blank\">New year Greetings and a short review of my new Juno PC</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0338.html\" target=\"_blank\">Tony Hughes AKA TonyH1212</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3503\" target=\"_blank\">3503</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-01-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3503\" target=\"_blank\">Configuring Mumble</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=3504\" target=\"_blank\">3504</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-01-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3504\" target=\"_blank\">James Webb Space Telescope</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=3505\" target=\"_blank\">3505</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-01-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3505\" target=\"_blank\">A DX with Hotel Bravo 9 Hotel November Tango</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0288.html\" target=\"_blank\">beni</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3506\" target=\"_blank\">3506</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-01-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3506\" target=\"_blank\">HPR CONTEST 2022 01</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=3507\" target=\"_blank\">3507</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-01-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3507\" target=\"_blank\">USB Turntable fix and sound journey</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=3508\" target=\"_blank\">3508</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-01-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3508\" target=\"_blank\">Differences between C# and Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3509\" target=\"_blank\">3509</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-01-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3509\" target=\"_blank\">Linux Inlaws S01E46: The Matrix Project (Without Neo)</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3510\" target=\"_blank\">3510</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-01-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3510\" target=\"_blank\">Syntax, Switches, and Help</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=3511\" target=\"_blank\">3511</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-01-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3511\" target=\"_blank\">Podman like Vagrant</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=3512\" target=\"_blank\">3512</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-01-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3512\" target=\"_blank\">Auld Acquaintance</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=3513\" target=\"_blank\">3513</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-01-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3513\" target=\"_blank\">HB9HNT and PA7KEN on SOTA, Summits on the Air</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0288.html\" target=\"_blank\">beni</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3514\" target=\"_blank\">3514</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-01-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3514\" target=\"_blank\">Hacking Stories: Soft Drink</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=3515\" target=\"_blank\">3515</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-01-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3515\" target=\"_blank\">ADB and scrcpy</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=3516\" target=\"_blank\">3516</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-01-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3516\" target=\"_blank\">Rant about RX</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=3517\" target=\"_blank\">3517</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-01-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3517\" target=\"_blank\">Hp stream laptop with Lubuntu 20.04</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3518\" target=\"_blank\">3518</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-01-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3518\" target=\"_blank\">Linux Inlaws S01E47: BigBlueButton and NAT</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3519\" target=\"_blank\">3519</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-01-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3519\" target=\"_blank\">Rust 101: Episode 2 - Rolling With the Errors</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3520\" target=\"_blank\">3520</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-01-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3520\" target=\"_blank\">Inversion Layer Modes</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=3521\" target=\"_blank\">3521</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-01-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3521\" target=\"_blank\">Upgrades to Acer Aspire 5 Slim</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 9 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 4 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3322#comments\" target=\"_blank\">hpr3322</a></strong>\n(2021-04-27) \"<em>Tune system performance with tuned</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=3322#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-01-21:\n\"Lost udev episode\"\n<br/><hr class=\"thin\">I was surprised to hear you say you\'ve never done an episode on udev, because I distinctly remember that episode! You were discussing creating your own udev rules to automatically run tasks upon inserting a USB drive.<br />\n<br />\nIt may be that you\'ve never done an episode on HPR about it; I can\'t find it for the life of me.<br />\n<br />\nEither way, thank you - as always - for the excellent episode. :)\n</li><br/></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3485#comments\" target=\"_blank\">hpr3485</a></strong>\n(2021-12-10) \"<em>50 years since the 1st Edition of Unix was published</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3485#2\" target=\"_blank\">Comment 2</a>:\nwynaut on 2022-01-07:\n\"thanks great show\"\n<br/><hr class=\"thin\">agree with prev comment, listener who just turned 51 :)\n</li><br/></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3496#comments\" target=\"_blank\">hpr3496</a></strong>\n(2021-12-27) \"<em>How I record HPR Episodes</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=3496#2\" target=\"_blank\">Comment 2</a>:\nReto on 2022-01-09:\n\"a good idea\"\n<br/><hr class=\"thin\">Hi,<br />\nThank you for this program and the introduction as a podcast.<br />\n<br />\nI just downloaded the .zip from GitLab and while trying the commands, I realize a section with dependencies is missing. I think pip is too large, so, I usually do run it in an virtualenv.<br />\nIn other Phython projects like here: https://github.com/jonaswinkler/paperless-ng/blob/master/requirements.txt you find a requirements.txt. I was wondering if you add one too?<br />\n<br />\nBr,<br />\nReto\n</li><br/></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3498#comments\" target=\"_blank\">hpr3498</a></strong>\n(2021-12-29) \"<em>Linux Inlaws S01E45: The Big Xmas New Year bash with the Grumpies</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3498#1\" target=\"_blank\">Comment 1</a>:\noperat0r on 2022-01-09:\n\"Love this show\"\n<br/><hr class=\"thin\">reminds me a little bit of udev random  podcast. this one had a lot of laughs! You guys are my friends for now. Mine won\'t do anything.. Holidays  are hard for some/most people. Shooting the shit and ranting are my fav podcast eps!<br />\n<br />\nTake care of yourselves! your the only U you have!\n</li><br/></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 5 comments on 5 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3504#comments\" target=\"_blank\">hpr3504</a></strong>\n(2022-01-06) \"<em>James Webb Space Telescope</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=3504#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-01-06:\n\"Mission control\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3505#comments\" target=\"_blank\">hpr3505</a></strong>\n(2022-01-07) \"<em>A DX with Hotel Bravo 9 Hotel November Tango</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0288.html\" target=\"_blank\">beni</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3505#1\" target=\"_blank\">Comment 1</a>:\nbaffled on 2022-01-11:\n\"Nice show!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3510#comments\" target=\"_blank\">hpr3510</a></strong>\n(2022-01-14) \"<em>Syntax, Switches, and Help</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=3510#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2022-01-17:\n\"This brought some memories\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3516#comments\" target=\"_blank\">hpr3516</a></strong>\n(2022-01-24) \"<em>Rant about RX</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=3516#1\" target=\"_blank\">Comment 1</a>:\nJanedoc on 2022-01-26:\n\"empathize with you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3517#comments\" target=\"_blank\">hpr3517</a></strong>\n(2022-01-25) \"<em>Hp stream laptop with Lubuntu 20.04</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3517#1\" target=\"_blank\">Comment 1</a>:\nJesse on 2022-01-25:\n\"Monty Mint phone\"</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-January/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-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=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>This month 120 additional shows in the range 1-870 have been uploaded.</p>\n<p>The number of shows left to upload in this range is now: 124.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3227,'2020-12-15','Fresh water Aquarium Basics',1589,'Enigma discusses the high level basics of getting into the aquarium hobby','<p>Enigma discusses the high level basics of getting into the aquarium hobby and what to consider when purchasing your first aquarium.</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.amazon.com/API-FRESHWATER-800-Test-Freshwater-Aquarium/dp/B000255NCI/ref=asc_df_B000255NCI/?tag=hyprod-20&linkCode=df0&hvadid=198072615033&hvpos=&hvnetw=g&hvrand=14659243461056273975&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9012091&hvtargid=pla-348697791053&psc=1\"> API Test kit </a></li>\r\n<li><a href=https://www.walmart.com/ip/Aqua-Culture-10-Gallon-Aquarium-Starter-Kit-With-LED-Lighting/35326017?wmlspartner=wlpa&selectedSellerId=0&wl13=941&&adid=22222222253447309554&wl0=&wl1=g&wl2=c&wl3=469838565059&wl4=aud-1025747331336:pla-319527574754&wl5=9012091&wl6=&wl7=&wl8=&wl9=pla&wl10=8175035&wl11=local&wl12=35326017&wl13=941&veh=sem&wl18=showcase&gclid=Cj0KCQiAkuP9BRCkARIsAKGLE8WOkLhoN56nLuuG29VXdC1NFBMNnhKdRM8lJs-vvP0qnrJYUDVuLNYaAja9EALw_wcB\"> 10 Gallon (38 liter) starter kit </a></li>\r\n</ul>',39,0,1,'CC-BY-SA','Aquariums',0,0,1),
(3229,'2020-12-17','Linux Inlaws S01E19: Redis',4418,'Our two chaps interview Itamar Haber of Redis fame','<p>In this episode our two heroes interview Itamar Haber, community liaison for Redis, a popular open-source\r\nin-memory NoSQL database. Technology prevails in this episode; communism, free love and drugs\r\ntake a backseat (but only for the moment! :-). The trio discuss the legacy of redis, bemoan their old age\r\nand reveal why Itamar initially wanted to be a mermaid. Listen to the episode\r\nfor more shocking epiphanies!</p>\r\n<br/>Shownotes:<br/>\r\n<ul>\r\n<li>Kaypro: <a href=\"https://en.wikipedia.org/wiki/Kaypro\" target=\"_blank\">https://en.wikipedia.org/wiki/Kaypro</a></li>\r\n<li>Salvatore Sanfilippo: <a href=\"https://github.com/antirez\" target=\"_blank\">https://github.com/antirez</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>Redis Labs: <a href=\"https://redislabs.com\" target=\"_blank\">https://redislabs.com</a></li>\r\n<li>Redis Streams: <a href=\"https://redis.io/topics/streams-intro\" target=\"_blank\">https://redis.io/topics/streams-intro</a></li>\r\n<li>Redis Modules: <a href=\"https://redis.io/modules\" target=\"_blank\">https://redis.io/modules</a></li>\r\n<li>Windows: <a href=\"https://bugs.launchpad.net/ubuntu/+bug/1\" target=\"_blank\">https://bugs.launchpad.net/ubuntu/+bug/1</a></li>\r\n<li>WSL 2: <a href=\"https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux#WSL_2\" target=\"_blank\">https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux#WSL_2</a></li>\r\n<li>On the Bro\'d: <a href=\"https://www.mikelacher.com/work/on-the-brod\" target=\"_blank\">https://www.mikelacher.com/work/on-the-brod</a></li>\r\n</ul>\r\n\r\n\r\n',384,111,1,'CC-BY-SA','Redis, mermaids, communism, Israel',0,0,1),
(3239,'2020-12-31','New Community Project Proposal',516,'Enigma discusses a project proposal called Hacker exchange','<p>Enigma discusses a project proposal called Hacker exchange, a proposed content sharing site that would aggregate audio/video and text based tutorials.</p>\r\n<p>Come chat about this project on <code>irc.freenode.net #hackerexchange</code></p>',39,0,1,'CC-BY-SA','hpr, community_projects, ddp, binrev',0,0,1),
(3228,'2020-12-16','YAML basics',2027,'Learn about sequence and mapping in YAML','<p>YAML has two data elements that serve as building blocks for complex data structures: sequences and mappings.</p>\r\n\r\n<h2>Sequence</h2>\r\n\r\n<p>This is a sequence:</p>\r\n\r\n<pre><code>\r\n---\r\n- Emperor\r\n- Gentoo\r\n- Little Blue\r\n</code></pre>\r\n\r\n<h2>Mapping</h2>\r\n\r\n<p>\r\nThis is a mapping:\r\n</p>\r\n\r\n<pre><code>\r\n---\r\nPenguin: Emperor\r\n</code></pre>\r\n\r\n<p>\r\nIn this case, <strong>Penguin</strong> is a <em>key</em> and <strong>Emperor</strong> is a <em>value</em>. This is often called a &#34;key and value pair&#34;, but in YAML it&#39;s just called a mapping.\r\n</p>\r\n\r\n<h2>Combining data blocks</h2>\r\n\r\n<p>\r\nYou can embed these data types into one another. Here is a mapping that has a sequence as its value:\r\n</p>\r\n\r\n<pre><code>\r\n---\r\nPenguin:\r\n  - Emperor\r\n  - Gentoo\r\n  - Little Blue\r\n</code></pre>\r\n\r\n<p>\r\nHere is a sequence of mappings:\r\n</p>\r\n\r\n<pre><code>\r\n---\r\n- Penguin: Emperor\r\n- Penguin: Gentoo\r\n- Penguin: Little Blue\r\n</code></pre>\r\n\r\n<h2>yamllint</h2>\r\n\r\n<p>Use yamllint to detect errors in your YAML. To install:\r\n</p>\r\n\r\n<pre>\r\n<code>\r\n$ pip install yamllint\r\n</code></pre>\r\n\r\n<p>Run it:\r\n</p>\r\n\r\n<pre>\r\n<code>\r\n$ yamllint good.yaml\r\n$ yamllint bad.yaml\r\nbad.yaml\r\n  1:1       warning  missing document start \"---\"  (document-start)\r\n  4:14      error    no new line character at the end of file  (new-line-at-end-of-file)\r\n</code></pre>\r\n\r\n<h2>yaml2json</h2>\r\n\r\n<p>\r\nSometimes it&#39;s useful to convert your YAML to JSON so you can view the data structure in a different way. There are probably dozens of YAML-to-JSON converters out there, but here&#39;s the one I use: <a href=\"https://gitlab.com/slackermedia/yaml2json.git\" target=\"_blank\">https://gitlab.com/slackermedia/yaml2json.git</a>\r\n</p>\r\n\r\n<p>\r\nRun it:\r\n</p>\r\n\r\n<pre><code>\r\n$ cat example.yaml\r\n---\r\npenguins:\r\n  - Gentoo\r\n  - Little Blue\r\n  - Rockhopper\r\ndragons:\r\n  - black\r\n  - white\r\n  - red\r\n$ ~/bin/yaml2json.py example.yaml\r\n{\"penguins\": [\"Gentoo\", \"Little Blue\", \"Rockhopper\"], \"dragons\": [\"black\", \"white\", \"red\"]}\r\n</code></pre>\r\n\r\n<h2>YAML police</h2>\r\n\r\n<p>There are no YAML police. As long as yamllint finds no errors, your YAML is valid and can be parsed by any one of the dozens of YAML libraries out there. However, these YAML libraries aren&#39;t magical, so you must understand the internal logic of your own YAML data. Keep that in mind when devising a scheme for the data you\'re recording.\r\n</p>\r\n\r\n<p>YAML is a great method for creating configuration files, or storing simple data structures, and it\'s essential for Ansible playbooks.</p>\r\n\r\n<p>\r\nEnjoy!\r\n</p>\r\n\r\n',78,25,0,'CC-BY-SA','yaml,data,parse,lint,json',0,0,1),
(3231,'2020-12-21','USB Key',120,'Turn a Thumb drive into a Key to lock/unlock your linux machine.','<p>Script and instruction at<br />\r\n<a href=\"https://james.toebesacademy.com/USBKey.html\" class=\"uri\">https://james.toebesacademy.com/USBKey.html</a></p>\r\n<ul>\r\n<li>Combo of\r\n<ul>\r\n<li>Perl for Installation,</li>\r\n<li><code>ssh-keygen</code> for key exchange.</li>\r\n<li><code>udev</code> for actions</li>\r\n<li><code>bash</code> for locking/unlocking/key checking.</li>\r\n</ul></li>\r\n</ul>\r\n<!-- . -->\r\n<ul>\r\n<li><code>udev</code> add/remove/change events\r\n<ul>\r\n<li>add event does not allow access to drive</li>\r\n<li>change event was not allowing unlock.</li>\r\n</ul></li>\r\n</ul>\r\n<p>Compromise was <em>unlock</em>, then <em>lock</em> if key check fails.</p>\r\n',273,74,0,'CC-BY-SA','security, usb',0,0,1),
(3232,'2020-12-22','Nextcloud',1279,'Nextcloud is easy. You should try it.','<p>I&#39;ve been running NextCloud since it was OwnCloud. In this episode, I encourage other people to install and run NextCloud. It\'s a great way to get out of the Google ecosystem, and it doesn\'t require much to set up or maintain.</p>\r\n\r\n<p>\r\nHere\'s the script I use to update one of the Nextcloud instances I maintain, running on a dirt-cheap VPS slice from Blue Host er something:</p>\r\n\r\n<pre><code>\r\n#/test/before/using/bash\r\n# GNU All-Permissive License\r\n# Copying and distribution of this file, with or without modification,\r\n# are permitted in any medium without royalty provided the copyright\r\n# notice and this notice are preserved.  This file is offered as-is,\r\n# without any warranty.\r\n\r\nif [ \"${1}\" == \"--help\" ]; then\r\n    echo \"usage:\"\r\n    echo \"$0 https://path-to-nextcloud.bz2\"\r\n    echo \"WARNING: You MUST put your Nextcloud instance into maintenance mode first\"\r\n    exit\r\nfi\r\n\r\nset -e\r\n\r\n# get rid of the old Nextcloud tarball from the last time you upgraded\r\ntrash nextcloud*bz2 || true\r\n\r\n# get rid of old backups as long as they are empty of actual data\r\n[[ -e cloud/data ]] &amp;&amp; trash cloud-deleteme\r\n\r\n#download the source tarball\r\nwget \"${1}\"\r\n\r\n#rename old cloud\r\nmv nextcloud cloud-deleteme\r\n\r\n# untar source\r\n# grab your data from old cloud\r\ntar xvf nextcloud*bz2 &amp;&amp; mv cloud-deleteme/data/ nextcloud/\r\n\r\n# copy your config\r\ncp cloud-deleteme/config/config.php nextcloud/config/\r\n\r\n# enter the cloud\r\npushd nextcloud\r\n\r\n# perform upgrade\r\nphp ./occ upgrade\r\n\r\n# leave the cloud\r\npopd\r\n</code></pre>\r\n\r\n<p>\r\nDon\'t use my upgrade script blindly, and please do test first. It works for my setup, but has been tested ONLY on my setup. Also, it doesn\'t put your Nextcloud instance into maintenance mode (probably because I wrote it before I knew Awk...), so you must do that manually.\r\n</p>\r\n\r\n<p>\r\nHappy hacking!\r\n</p>\r\n',78,74,0,'CC-BY-SA','cloud,nextcloud,owncloud,server',0,0,1),
(3233,'2020-12-23','HPR RPG Club reviews Shadowrun 5e',3245,'Cyberpunk + Magic and a fistful of D6','<p>Beni, McNalu, Klaatu, and Philip review the Fifth Edition of the Shadowrun roleplaying game.\r\n</p>\r\n\r\n<p>For more information about Shadowrun, go to <a href=\"https://www.shadowruntabletop.com/\" target=\"_blank\">ShadowrunTabletop.com</a>.\r\n</p>\r\n\r\n<p>\r\nQuickstart rules are <a href=\"https://www.drivethrurpg.com/product/116662/Shadowrun-Fifth-Edition-QuickStart-Rules?affiliate_id=845571\" target=\"_blank\">available for $0 from drivethrurpg.com</a> &#40;this is Klaatu&#39;s affiliate link, granting him some n&#37; of the $0 sale&#41;\r\n</p>\r\n\r\n<p>Finally, you can find lots of great Shadowrun fiction on <a href=\"https://www.drivethrurpg.com/browse.php?affiliate_id=845571?filters=0_0_1700_44501_0\" target=\"_blank\">drivethrurpg.com</a> in EPUB format.\r\n</p>\r\n\r\n',78,95,0,'CC-BY-SA','rpg,cyberpunk,HPR RPG Club',0,0,1),
(3243,'2021-01-06','Pictor - free and open radio astronomy',2854,'Discussion with the people that created the Pictor radio telescope.','<p>In this show I talk with Apostolos and Vasilis who I met at FOSDEM 2020 about the <a href=\"https://pictortelescope.com/\">Pictor radio telescope</a> which they created and now maintain. Using free and open source software and hardware they have made a radio telescope that anyone can operate via a simple web page and which can return results to you within a minute or two. In fact you\'ll hear me get excited during the show when I realise this and submit an observation request, the results of which came back immediately and which you can see below.</p>\r\n<p>To date Pictor has performed 3,500 observations from over 700 users from all around the world. Additionally, the PICTOR web platform is now equipped with a 3.2m antenna, which is about 4 times more sensitive than the previous 1.5m antenna, so users can observe the radio sky for free with an even more sensitive instrument.</p>\r\n<p>On top of that, after 204 hours of integration time and over 3 TB of data, they have produced a Northern Sky Hydrogen (HI) Survey produced with the PICTOR Radio Telescope. This effort actually marks the very first radio-image obtained in Greece, shown here:</p>\r\n<p><em>Pictor all sky images of hydrogen in our galaxy</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3243/img_001.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3243/img_001_thumbnail.png\" alt=\"Pictor all sky images of hydrogen in our galaxy\" /></a></p>\r\n<p>Here are the results of the observation I performed during the show. The body of the email pictor sent back to me confirms the observation I requested:</p>\r\n<pre><code>Your observation has been carried out by PICTOR successfully!\r\nObservation name: mcnalu first try\r\nObservation datetime: 2020-12-08 12:40:09 (UTC+2)\r\nCenter frequency: 1420000000.0 Hz\r\nBandwidth: 2400000 Hz\r\nSample rate: 2400000 samples/sec\r\nNumber of channels: 2048\r\nNumber of bins: 100\r\nObservation duration: 10 sec\r\nObservation ID: 82937104\r\nYour observation&#39;s averaged spectrum, dynamic spectrum (waterfall) and Power vs Time plot are attached in this email as an image.\r\n</code></pre>\r\n<p>And this is the plot attached to that email:</p>\r\n<p><em>Graphs showing raw and corrected radio spectra for mcnalu\'s observation request</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3243/img_002.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3243/img_002_thumbnail.png\" alt=\"Graphs showing raw and corrected radio spectra for mcnalu&#39;s observation request\" /></a></p>\r\n<p>Please do have a go at using Pictor and let us know how you got on by recording an HPR show.</p>\r\n',268,0,0,'CC-BY-SA','science,astronomy,hardware,radio,data',0,0,1),
(3546,'2022-03-07','HPR Community News for February 2022',3665,'Dave, Roan and Ken talk about shows released and comments posted in February 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/0402.html\" target=\"_blank\">takov751</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=3522\" target=\"_blank\">3522</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-02-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3522\" target=\"_blank\">Set up your Robot Building Lab and build a $0 Robot Platform</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=3523\" target=\"_blank\">3523</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-02-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3523\" target=\"_blank\">The Compose key</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=3524\" target=\"_blank\">3524</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-02-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3524\" target=\"_blank\">Wheels Addendum - How to Reliably Attach Wheels to PAR Robot Platform</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=3525\" target=\"_blank\">3525</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-02-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3525\" target=\"_blank\">Battling with English - part 4</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=3526\" target=\"_blank\">3526</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-02-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3526\" target=\"_blank\">HPR Community News for January 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=3527\" target=\"_blank\">3527</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-02-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3527\" target=\"_blank\">My gEeeky Experiment - Part 3</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=3528\" target=\"_blank\">3528</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-02-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3528\" target=\"_blank\">Slackware on a netbook</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=3529\" target=\"_blank\">3529</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-02-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3529\" target=\"_blank\">Linux Inlaws S01E48: Year Two of the Five Year Plan</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3530\" target=\"_blank\">3530</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-02-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3530\" target=\"_blank\">Filenames and ASCII</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=3531\" target=\"_blank\">3531</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-02-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3531\" target=\"_blank\">Barrier: Software KVM</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0215.html\" target=\"_blank\">Windigo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3532\" target=\"_blank\">3532</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-02-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3532\" target=\"_blank\">Self-hosting in small scale E0: Disclaimer and general idea</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0402.html\" target=\"_blank\">takov751</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3533\" target=\"_blank\">3533</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-02-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3533\" target=\"_blank\">Porridge</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=3534\" target=\"_blank\">3534</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-02-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3534\" target=\"_blank\">Vernier caliper</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=3535\" target=\"_blank\">3535</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-02-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3535\" target=\"_blank\">template Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3536\" target=\"_blank\">3536</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-02-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3536\" target=\"_blank\">Laptop power problems</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=3537\" target=\"_blank\">3537</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-02-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3537\" target=\"_blank\">getting to blinky with flashforth</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3538\" target=\"_blank\">3538</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-02-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3538\" target=\"_blank\">Installing the Tenacity audio editor</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=3539\" target=\"_blank\">3539</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-02-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3539\" target=\"_blank\">Linux Inlaws S01E50: The OpenSUSE Project</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3540\" target=\"_blank\">3540</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-02-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3540\" target=\"_blank\">HSV Components Layer Modes</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=3541\" target=\"_blank\">3541</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-02-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3541\" target=\"_blank\">The case of missing ideas.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0398.html\" target=\"_blank\">one_of_spoons</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 29 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 9 comments on\n7 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2881#comments\" target=\"_blank\">hpr2881</a></strong>\n(2019-08-19) \"<em>Automatically split album into tracks in Audacity</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2881#4\" target=\"_blank\">Comment 4</a>:\nKen Fallon on 2022-02-08:\n\"I knew I heard how to do this somewhere\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3228#comments\" target=\"_blank\">hpr3228</a></strong>\n(2020-12-16) \"<em>YAML basics</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=3228#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-02-21:\n\"Exactly what I needed\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3286#comments\" target=\"_blank\">hpr3286</a></strong>\n(2021-03-08) \"<em>Wireguard How To</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0392.html\" target=\"_blank\">timttmy</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3286#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-02-05:\n\"Thanks again\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3286#2\" target=\"_blank\">Comment 2</a>:\ntimttmy on 2022-02-13:\n\"Me too!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3289#comments\" target=\"_blank\">hpr3289</a></strong>\n(2021-03-11) \"<em>NextCloud the hard way</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3289#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2022-02-05:\n\"Wasting shows\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3315#comments\" target=\"_blank\">hpr3315</a></strong>\n(2021-04-16) \"<em>tesseract optical character recognition</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3315#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-02-13:\n\"Yet another one\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3472#comments\" target=\"_blank\">hpr3472</a></strong>\n(2021-11-23) \"<em>consuming an AQI API</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0243.html\" target=\"_blank\">Jezra</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3472#2\" target=\"_blank\">Comment 2</a>:\nStache_AF on 2022-02-17:\n\"Thank you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3504#comments\" target=\"_blank\">hpr3504</a></strong>\n(2022-01-06) \"<em>James Webb Space Telescope</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=3504#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2022-02-03:\n\"How L2 works\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3504#3\" target=\"_blank\">Comment 3</a>:\nclacke on 2022-02-03:\n\"Re: centrifugal force\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 20 comments on 10 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3523#comments\" target=\"_blank\">hpr3523</a></strong>\n(2022-02-02) \"<em>The Compose key</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=3523#1\" target=\"_blank\">Comment 1</a>:\nLinuxMintXFCE on 2022-02-21:\n\"Compose\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3525#comments\" target=\"_blank\">hpr3525</a></strong>\n(2022-02-04) \"<em>Battling with English - part 4</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=3525#1\" target=\"_blank\">Comment 1</a>:\nXoke on 2022-02-04:\n\"Multiple words in a row\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3525#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2022-02-08:\n\"Where Jones had had \"had\" ...\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3525#3\" target=\"_blank\">Comment 3</a>:\ndnt on 2022-02-10:\n\"processes\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3525#4\" target=\"_blank\">Comment 4</a>:\nwynaut on 2022-02-10:\n\"thanks!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3525#5\" target=\"_blank\">Comment 5</a>:\nDave Morriss on 2022-02-11:\n\"Re: processes\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3525#6\" target=\"_blank\">Comment 6</a>:\nDave Morriss on 2022-02-11:\n\"Hope you find the episodes useful, wynaut\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3526#comments\" target=\"_blank\">hpr3526</a></strong>\n(2022-02-07) \"<em>HPR Community News for January 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=3526#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2022-02-16:\n\"Comments\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3527#comments\" target=\"_blank\">hpr3527</a></strong>\n(2022-02-08) \"<em>My gEeeky Experiment - Part 3</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3527#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-02-15:\n\"PATA and Netbooks\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3527#2\" target=\"_blank\">Comment 2</a>:\nClaudioM on 2022-02-21:\n\"Re; PATA and Netbooks\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3531#comments\" target=\"_blank\">hpr3531</a></strong>\n(2022-02-14) \"<em>Barrier: Software KVM</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0215.html\" target=\"_blank\">Windigo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3531#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2022-02-16:\n\"Old school KVMs\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3533#comments\" target=\"_blank\">hpr3533</a></strong>\n(2022-02-16) \"<em>Porridge</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=3533#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2022-02-16:\n\"interesting\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3533#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2022-02-16:\n\"Steel Cut Oats\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3533#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2022-02-16:\n\"Great show topic, excellent show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3534#comments\" target=\"_blank\">hpr3534</a></strong>\n(2022-02-17) \"<em>Vernier caliper</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=3534#1\" target=\"_blank\">Comment 1</a>:\nAaronb on 2022-02-18:\n\"At 66 Years old. . . .\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3534#2\" target=\"_blank\">Comment 2</a>:\nAaronb on 2022-02-18:\n\"sorry forgot the Link\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3536#comments\" target=\"_blank\">hpr3536</a></strong>\n(2022-02-21) \"<em>Laptop power problems</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=3536#1\" target=\"_blank\">Comment 1</a>:\nZen_floater2 on 2022-02-22:\n\"I have the Google GO pro chromebook, had the same problems\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3538#comments\" target=\"_blank\">hpr3538</a></strong>\n(2022-02-23) \"<em>Installing the Tenacity audio editor</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=3538#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-02-08:\n\"How to run it\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3538#2\" target=\"_blank\">Comment 2</a>:\nRandom_Linux_User on 2022-02-27:\n\"Re hpr3538 :: Installing the Tenacity audio editor\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3541#comments\" target=\"_blank\">hpr3541</a></strong>\n(2022-02-28) \"<em>The case of missing ideas.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0398.html\" target=\"_blank\">one_of_spoons</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3541#1\" target=\"_blank\">Comment 1</a>:\npublius on 2022-02-28:\n\"\"Have\" constructions\"</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-February/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-February/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\">Older HPR shows on archive.org</h3>\n<p>This month 120 additional shows in the range 1-870 have been uploaded.</p>\n<p>The number of shows left to upload in this range is now: 4.</p>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3234,'2020-12-24','Apple products I have owned',1397,'I talk about Apple products that I have owned over the years','<ul>\r\n<li>30\" Apple Cinema Display 2560x1600</li>\r\n<li>160 GB iPod Classic</li>\r\n<li>IPad 3</li>\r\n<li>Mac Pro 1.1</li>\r\n<li>iPhone 4s</li>\r\n</ul>',297,0,0,'CC-BY-SA','apple, technology, Mac, OS X,iOS',0,0,1),
(3242,'2021-01-05','The eternal battle over how to run your chromebook is about to begin',8865,'Squirrel VS ALIEN Chromebook discussions','<p>As usual, I have botched up the show notes where they make absolutely no sense and I fully expect the ENTIRE HUMAN COMMUNITY from HPR to attack me endlessly over my incompetence. They just keep forgetting that I\'m a squirrel who lives in a magical forrest and not a human being and therefore does terrible show notes,</p>\r\n<p>There were so many issues brought up about chromebooks and chromiumOS that I could not prepare a detailed list of them all.</p>\r\n<p>This ENTIRE conversation was derived from the work found on GNU WORLD ORDER episode 383 for which you will find his show notes AS::: <a href=\"https://gnuworldorder.info/\" class=\"uri\">https://gnuworldorder.info/</a> \"Linux, Flatpaks, Android apps, and ChromiumOS on a Lenovo Chromebook.\"</p>\r\n<p>Now, if you don\'t like my show notes and you do like this aliens show notes, then may I suggest your anti-squirrel and you need to be sent to a de-programming camp for rehabilitation.</p>\r\n<p>Remember, squirrels represent planet earth.</p>\r\n',377,0,1,'CC-BY-SA','chromebooks,chromiumOS,Opensource,Freesoftware,cloud computing',0,0,1),
(3236,'2020-12-28','The State of Linux Audio Apps in 2020',3101,'Patrick Davila and Claudio Miranda discuss the current state of Linux Audio Application in 2020','<p>Pat and Claudio discuss the current state of Linux audio applications in 2020. The primary focus is applications to create music. We discuss Linux sound servers (Pulse, ALSA and Jack). Software synthesizers available in Linux. Midi, sequencers and drum machines. Digital Audio Workstation applications. Impulse Responses for guitar and bass speaker emulation. Commercial vendors that support the Linux platform. Music equipment vendors that use Linux as the basis of their products.</p>\r\n\r\n<p>\r\n<br>\r\nThis page has been around for years.  Some links might be stale or dead.<br>\r\n<a href=\"https://linux-sound.org/\" target=\"_blank\">https://linux-sound.org/</a><br>\r\n<br>\r\nSome of the sound fonts I\'ve used:<br>\r\n<a href=\"https://midkar.com/soundfonts/\" target=\"_blank\">https://midkar.com/soundfonts/</a><br>\r\n<a href=\"https://www.pvv.org/~hammer\" target=\"_blank\">https://www.pvv.org/~hammer</a><br>\r\n<a href=\"https://www.michaelpichermusic.com/sample-libraries\" target=\"_blank\">https://www.michaelpichermusic.com/sample-libraries</a><br>\r\n<br>\r\nMIDI/Music software discussed:<br>\r\nJACK (JACK Audio Connection Kit)<br>\r\n<a href=\"https://jackaudio.org/\" target=\"_blank\">https://jackaudio.org/</a><br>\r\nQtractor<br>\r\n<a href=\"https://qtractor.sourceforge.io/\" target=\"_blank\">https://qtractor.sourceforge.io/</a><br>\r\nArdour<br>\r\n<a href=\"https://ardour.org/\" target=\"_blank\">https://ardour.org/</a><br>\r\nReaper<br>\r\n<a href=\"https://www.reaper.fm/index.php\" target=\"_blank\">https://www.reaper.fm/index.php</a><br>\r\nCarla<br>\r\n<a href=\"https://kx.studio/Applications:Carla\" target=\"_blank\">https://kx.studio/Applications:Carla</a><br>\r\nDuality Bass <br>\r\n<a href=\"https://audio-assault.com/duality.php\" target=\"_blank\">https://audio-assault.com/duality.php</a><br>\r\n<br>\r\nMy Soundcloud page.<br>\r\n<a href=\"https://www.soundcloud.com/claudiom72\" target=\"_blank\">https://www.soundcloud.com/claudiom72</a><br>\r\n<br>\r\nOpen source synthesizers:<br>\r\n<a href=\"https://www.moddevices.com/\" target=\"_blank\">https://www.moddevices.com/</a><br>\r\n<a href=\"https://www.linuxsynths.com/\" target=\"_blank\">https://www.linuxsynths.com/</a><br>\r\n<a href=\"https://en.wikipedia.org/wiki/Korg_OASYS\" target=\"_blank\">https://en.wikipedia.org/wiki/Korg_OASYS</a> (Finally found that hardware Linux-based synth.)<br>\r\n<a href=\"https://synthesia.sourceforge.net/\" target=\"_blank\">https://synthesia.sourceforge.net/</a><br>\r\n<a href=\"https://zynthian.org/\" target=\"_blank\">https://zynthian.org/</a> (Don\'t remember if this was mentioned, but here it is. :-p)<br>\r\n<br>\r\nPipewire<br>\r\n<a href=\"https://pipewire.org/\" target=\"_blank\">https://pipewire.org/</a><br>\r\n<br>\r\nunfa<br>\r\n<a href=\"https://www.youtube.com/channel/UCAYKj_peyESIMDp5LtHlH2A\" target=\"_blank\">https://www.youtube.com/channel/UCAYKj_peyESIMDp5LtHlH2A</a>\r\n</p>',11,0,0,'CC-BY-SA','Audio, music, recording, DAW, Ardour, Jack, Pulse, ALSA, Hydrogen, Odin2, Qtractor, Carla, VST',0,0,1),
(3238,'2020-12-30','Linux Inlaws S01E20: The Xmas and New Year Special',5978,'An episode on the past, present and future not just on FOSS - all will be explained','<ul>\r\n<li>LinuxOne: <a href=\"https://developer.ibm.com/components/ibm-linuxone/gettingstarted\" target=\"_blank\">https://developer.ibm.com/components/ibm-linuxone/gettingstarted</a></li>\r\n<li>IBM quantum computing: <a href=\"https://www.ibm.com/quantum-computing\" target=\"_blank\">https://www.ibm.com/quantum-computing</a></li>\r\n<li>redis on LinuxOne(in German): <a href=\"https://chemnitzer.linux-tage.de/2019/en/programm/beitrag/206\" target=\"_blank\">https://chemnitzer.linux-tage.de/2019/en/programm/beitrag/206</a></li>\r\n<li>Ask IBM: <a href=\"https://www.ibm.com/blogs/cloud-computing/2015/01/13/hello-watson-ask-anything\" target=\"_blank\">https://www.ibm.com/blogs/cloud-computing/2015/01/13/hello-watson-ask-anything</a></li>\r\n<li>Jeff Bezo\'s real name: <a href=\"https://en.wikipedia.org/wiki/Jeff_Bezos\" target=\"_blank\">https://en.wikipedia.org/wiki/Jeff_Bezos</a></li>\r\n<li>Jeff Bezo\'s divorce: <a href=\"https://www.bloomberg.com/news/articles/2019-07-05/bezos-split-finalizes-as-38-billion-amazon-stake-transfer-looms\" target=\"_blank\">https://www.bloomberg.com/news/articles/2019-07-05/bezos-split-finalizes-as-38-billion-amazon-stake-transfer-looms</a></li>\r\n<li>French protests: <a href=\"https://www.politico.eu/article/spotlight-falls-on-amazon-as-french-businesses-are-restricted-by-lockdown-rules/\" target=\"_blank\">https://www.politico.eu/article/spotlight-falls-on-amazon-as-french-businesses-are-restricted-by-lockdown-rules/</a></li>\r\n<li>2001: A Space Odyssee: <a href=\"https://www.imdb.com/title/tt0062622\" target=\"_blank\">https://www.imdb.com/title/tt0062622</a></li>\r\n<li>OpenAI: <a href=\"https://openai.com\" target=\"_blank\">https://openai.com</a></li>\r\n<li>GPT3: <a href=\"https://en.wikipedia.org/wiki/GPT-3\" target=\"_blank\">https://en.wikipedia.org/wiki/GPT-3</a></li>\r\n<li>ARM Jazelle: <a href=\"https://en.wikipedia.org/wiki/Jazelle\" target=\"_blank\">https://en.wikipedia.org/wiki/Jazelle</a></li>\r\n<li>ARM ThumbEE: <a href=\"https://en.wikipedia.org/wiki/ARM_architecture#Thumb_Execution_Environment_(ThumbEE)\" target=\"_blank\">https://en.wikipedia.org/wiki/ARM_architecture#Thumb_Execution_Environment_(ThumbEE)</a></li>\r\n<li>TIOBE programming language index: <a href=\"https://www.tiobe.com/tiobe-index\" target=\"_blank\">https://www.tiobe.com/tiobe-index</a></li>\r\n<li>Commons Clause and Redis Source Available License: <a href=\"https://redislabs.com/blog/redis-labs-modules-license-changes\" target=\"_blank\">https://redislabs.com/blog/redis-labs-modules-license-changes</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','past, present, future, artificial intelligence, b-sides, ibm, microsoft, you fill in the rest',0,0,1),
(3237,'2020-12-29','Cloning a Hard Drive with Clonezilla',1057,'I had some hard drive failures recently and am getting back to the habit of cloning for backups.','<p>I sneak back into the HPR community with an episode about cloning the hard drive on my laptop for a backup after some recent catastrophic drive failures.</p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://clonezilla.org/\">Clonezilla</a>: The Free and Open Source Software for Disk Imaging and Cloning</li>\r\n	<li><a href=\"https://smile.amazon.com/s?k=hard+drive+adapter+cable+to+usb&crid=3MFREZT2Q9UY9&sprefix=hard+drive+ada%2Caps%2C198&ref=nb_sb_ss_ts-a-p_2_14\">Hard drive adapters at Amazon</a></li>\r\n</ul>\r\n\r\n<h2>Credits</h2>\r\n\r\n<ul>\r\n	<li>Music bumpers are from Kimiko Ishizaka\'s <em>Libre Art of Fugue</em>: <a href=\"https://www.opengoldbergvariations.org/\">https://music.kimiko-piano.com/album/j-s-bach-the-art-of-the-fugue-kunst-der-fuge-bwv-1080</a>, used by permission of their <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',238,0,0,'CC-BY-SA','clonezilla, backups, hard drives, cloning',0,0,1),
(3244,'2021-01-07','Interview with Anco Scholte ter Horst CEO of Freedom Internet',4223,'Could there be an ISP that wants free and open internet, for privacy, security and quality ?','<p>\r\nIn this interview with Anco Scholte ter Horst, CEO Freedom Internet, we discuss the history of Internet in the Netherlands. How inspired by the work as XS4All, a new ISP was founded with privacy, security and quality at its core.\r\n</p>\r\n<p>\r\nFrom: <a href=\"https://en.wikipedia.org/wiki/XS4ALL\">https://en.wikipedia.org/wiki/XS4ALL</a>\r\n</p>\r\n<p>\r\nXS4ALL was sold to KPN in December 1998, but remained an independent subsidiary. In January 2019, KPN announced that it would eventually phase out the XS4ALL brand and continue operations under the KPN brand. A petition and a special action commission was started to try to revert this decision, the petition has been signed over 50,000 times, signatories include ex-board members and founders of XS4ALL. In November 2019 the committee launched a new company named Freedom Internet, meant to serve as an ideological successor to XS4ALL, and supported by a crowdfunding action that raised 2.5 million euro. Freedom Internet initially offers e-mail hosting, and is meant to roll out its first DSL connections in early 2020.\r\n</p>\r\n<ul>\r\n<li><a href=\"https://www.linkedin.com/in/anco-scholte-ter-horst-5309171/\">https://www.linkedin.com/in/anco-scholte-ter-horst-5309171/</a></li>\r\n<li><a href=\"https://opennebula.io/\">https://opennebula.io/</a></li>\r\n<li><a href=\"https://internet.nl/\">https://internet.nl/</a></li>\r\n<li><a href=\"https://nl.wikipedia.org/wiki/Freedom_Internet\">https://nl.wikipedia.org/wiki/Freedom_Internet</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/XS4ALL\">https://en.wikipedia.org/wiki/XS4ALL</a></li>\r\n<li><a href=\"https://www.bit.nl/\">https://www.bit.nl/</a></li>\r\n</ul>\r\n',30,78,0,'CC-BY-SA','Freedom.nl,xs4all,ISP,crowdfunding',0,0,1),
(3275,'2021-02-19','D1 Mini Close Lid to Scan',430,'Use a Wemos to monitor if the lid is open or closed on a network scanner.','<h1 id=\"wemos-close-to-scan\">wemos-close-to-scan</h1>\r\n<p>Use a Wemos to monitor if the lid is open or closed on a network scanner.</p>\r\n<ul>\r\n<li><a href=\"https://github.com/kenfallon/wemos-close-to-scan\">https://github.com/kenfallon/wemos-close-to-scan</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3275\">https://hackerpublicradio.org/eps.php?id=3275</a></li>\r\n</ul>\r\n<h2 id=\"history\">History</h2>\r\n<p>In episode <a href=\"https://hackerpublicradio.org/eps.php?id=2430\">hpr2430 :: Scanning books</a>, I had a bash file trigger a network scan. This required two steps, one to close the lid and the next to press a key for <a href=\"scantoimage.bash\">scantoimage.bash</a> to trigger the next page of the scan.</p>\r\n<p>In the intervening time I looked at several solutions to improve this situation.</p>\r\n<p>The most obvious step was to put a magnetic switch on the scanner lid so that a device could detect the lid been closed.</p>\r\n<p>I tried a Raspberry PI but my scanner drivers are only available for Intel and not Arm. Then then accessing the pi using Remote GPIO, but it got very complex to setup and run.</p>\r\n<p>Inspired by <a href=\"https://hackerpublicradio.org/eps.php?id=3077\">hpr3077 :: Video conference Push to Talk</a> Hosted by DanNixon on 2020-05-19, I tried using an arduino talking over serial to a Intel Compute Stick. But that was very flakey.</p>\r\n<h2 id=\"hardware\">Hardware</h2>\r\n<p>Finally I settled on using a <a href=\"https://www.wemos.cc/en/latest/d1/d1_mini.html\">Clone of LOLIN D1 mini</a>, and some Reed Contacts.</p>\r\n<ul>\r\n<li><a href=\"https://www.amazon.co.uk/gp/product/B071S8MWTY\">Makerfire D1 Mini NodeMcu 4M Bytes Lua WIFI Development Board Base on ESP8266 ESP-12F N Compatible NodeMcu Arduino</a></li>\r\n<li><a href=\"https://www.digikey.com/en/products/detail/zf-electronics/MP201801/361987\">https://www.digikey.com/en/products/detail/zf-electronics/MP201801/361987</a></li>\r\n<li><a href=\"https://switches-sensors.zf.com/us/product/magnetic-position-sensor-mp2018/\">https://switches-sensors.zf.com/us/product/magnetic-position-sensor-mp2018/</a></li>\r\n<li><a href=\"https://www.conrad.nl/p/zf-mp201801-reedcontact-1x-no-175-vdc-175-vac-500-ma-10-w-276124\">ZF MP201801 Reedcontact 1x NO 175 V/DC, 175 V/AC 500 mA 10 W</a></li>\r\n<li><a href=\"https://www.conrad.nl/p/zf-as201801-bedienmagneet-voor-reedcontact-276116\">ZF AS201801 Bedienmagneet voor reedcontact</a><br /></li>\r\n</ul>\r\n<h2 id=\"wiring\">Wiring</h2>\r\n<p>Wire one end of the reed contact to 3.3v, and the other end to ground via a 10K resistor.</p>\r\n<p>Have a sensor wire go from the 10K resistor to pin D5 on the D1 Mini.</p>\r\n<p><img src=\"eps/hpr3275/circuitdiagram.png\" title=\"Circuit Diagram\" alt=\"circuitdiagram\" /></p>\r\n<p><img src=\"eps/hpr3275/breadboard.png\" title=\"Breadboard\" alt=\"breadboard\" /></p>\r\n<p><img src=\"eps/hpr3275/photo.png\" title=\"Photo\" alt=\"photo\" /></p>\r\n<h2 id=\"code\">Code</h2>\r\n<h3 id=\"d1-mini\">D1 Mini</h3>\r\n<p>See <a href=\"eps/hpr3275/wemos-close-to-scan.ino\">wemos-close-to-scan.ino</a></p>\r\n<h3 id=\"laptop\">Laptop</h3>\r\n<p>See <a href=\"eps/hpr3275/wemos-scantoimage.bash\">wemos-scantoimage.bash</a></p>\r\n<h1 id=\"operation\">Operation</h1>\r\n<ol>\r\n<li>Plug in D1 Mini and monitor the serial port to get its IP Address.</li>\r\n<li>Change the <code>server=\"YOUR-WEMOS-IP-ADDRESS\"</code> in <a href=\"eps/hpr3275/wemos-scantoimage.bash\">wemos-scantoimage.bash</a> to the ip address.</li>\r\n<li>Change the <code>image_path=\"/PATH/TO/YOUR/SCANS/\"</code> in <a href=\"eps/hpr3275/wemos-scantoimage.bash\">wemos-scantoimage.bash</a> to where your want the files saved.</li>\r\n<li>Close scanner and scan.</li>\r\n</ol>\r\n',30,57,0,'CC-BY-SA','Wemos, D1 Mini, network scan',0,0,1),
(3289,'2021-03-11','NextCloud the hard way',1933,'A private NextCloud instance on a Pi 4x8, with lets encrypt and wireguard vpn access','<h1 id=\"nextcloud\">NextCloud</h1>\r\n<p>I want to install NextCloud for my family, but <strong>only</strong> for my family. This means making things hard for myself by installing it behind my firewall with a private nat ipaddress. That presented problems with getting a valid <a href=\"https://letsencrypt.org/\">Let\'s encrypt</a> cert.</p>\r\n<p>It all now works, and thanks to timttmy I was able to get the WireGuard VPN installed and working.</p>\r\n<h2 id=\"pi-4\">Pi 4</h2>\r\n<p>Get a Pi, and a SSD, enable it. You should review <a href=\"https://jamesachambers.com/raspberry-pi-4-usb-boot-config-guide-for-ssd-flash-drives/\">Raspberry Pi 4 USB Boot Config Guide for SSD / Flash Drives</a>, for issues with SSD drives and the Raspberry Pi.</p>\r\n<p>You can install Raspbian as normal. I already covered this in <a href=\"https://hackerpublicradio.org/eps.php?id=2356\">hpr2356 :: Safely enabling ssh in the default Raspbian Image</a>, and <a href=\"https://github.com/kenfallon/fix-ssh-on-pi\">Safely enabling ssh in the default Raspberry Pi OS (previously called Raspbian) Image</a>.</p>\r\n<p>And then follow the instructions in <a href=\"https://www.tomshardware.com/how-to/boot-raspberry-pi-4-usb\">How to Boot Raspberry Pi 4 From a USB SSD or Flash Drive</a>.</p>\r\n<h2 id=\"next-cloud\">Next Cloud</h2>\r\n<p>Install Apache, MariaDB, and PHP</p>\r\n<ul>\r\n<li><a href=\"https://www.techrepublic.com/article/how-to-install-nextcloud-20-on-ubuntu-server-20-04/\">How to install Nextcloud 20 on Ubuntu Server 20.04</a></li>\r\n<li><a href=\"https://docs.nextcloud.com/server/20/admin_manual/installation/source_installation.html\">NextCloud - Installation and server configuration - Installation on Linux</a></li>\r\n<li><a href=\"https://nextcloud.com/install/#instructions-server\">Download NextCloud</a></li>\r\n</ul>\r\n<pre><code># diff /etc/apache2/apache2.conf /etc/apache2/apache2.conf.orig\r\n171,172c171,172\r\n&lt;       Options FollowSymLinks\r\n&lt;       AllowOverride All\r\n---\r\n&gt;       Options Indexes FollowSymLinks\r\n&gt;       AllowOverride None</code></pre>\r\n<h3 id=\"install-phpmyadmin\">Install PHPMyAdmin</h3>\r\n<ul>\r\n<li><a href=\"https://pimylifeup.com/raspberry-pi-phpmyadmin/\">How to Install PHPMyAdmin on the Raspberry Pi</a></li>\r\n</ul>\r\n<h3 id=\"required-changes-to-nextcloud-config.\">Required Changes to nextcloud config.</h3>\r\n<pre><code>root@nextcloud:~# diff /root/nextcloud-config.php.orig /var/www/html/nextcloud/config/config.php \r\n&gt;     1 =&gt; &#39;nextcloud&#39;,\r\n&gt;     2 =&gt; &#39;192.168.123.123&#39;,\r\n&gt;     3 =&gt; &#39;nextcloud.example.com&#39;,\r\n&gt;   &#39;memcache.local&#39; =&gt; &#39;\\OC\\Memcache\\APCu&#39;,</code></pre>\r\n<pre><code># diff /etc/apache2/sites-available/000-default.conf.orig /etc/apache2/sites-enabled/000-default.conf\r\n28a29,32\r\n&gt;         RewriteEngine On\r\n&gt;         RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]\r\n&gt;       Redirect 301 /.well-known/carddav /var/www/html/nextcloud/remote.php/dav\r\n&gt;       Redirect 301 /.well-known/caldav /var/www/html/nextcloud/remote.php/dav</code></pre>\r\n<h3 id=\"required-changes-to-php.ini-config.\">Required Changes to <code>php.ini</code> config.</h3>\r\n<pre><code>root@nextcloud:~# diff /etc/php/7.3/apache2/php.ini.orig /etc/php/7.3/apache2/php.ini\r\n401c401\r\n&lt; memory_limit = 128M\r\n---\r\n&gt; memory_limit = 2000M\r\n689c689\r\n&lt; post_max_size = 8M\r\n---\r\n&gt; post_max_size = 2048M\r\n841c841\r\n&lt; upload_max_filesize = 2M\r\n---\r\n&gt; upload_max_filesize = 2048M</code></pre>\r\n<h3 id=\"upgrade\">Upgrade</h3>\r\n<p>You can upgrade using the procedure described by <a href=\"https://hackerpublicradio.org/correspondents/0078.html\">klaatu</a> in <a href=\"https://hackerpublicradio.org/eps.php?id=3232\">hpr3232 :: Nextcloud</a>, or as admin via the UI <code>https://nextcloud.example.com/nextcloud/index.php/settings/user</code>, Administration, Overview.</p>\r\n<p>You will see a lot of <a href=\"https://docs.nextcloud.com/server/12/admin_manual/configuration_server/security_setup_warnings.html\">Warnings on Admin Page</a>, but don\'t panic. The server is not accessible on the Internet after all.</p>\r\n<p>The errors have links to how you can fix them and some are very easy to do.</p>\r\n<p>I got an error \"Error occurred while checking server setup\". I used this <a href=\"https://help.nextcloud.com/t/solved-12-0-2-to-12-0-3-update-failes-at-create-backup/21490\">tip</a> to move root owned files out of next cloud dir.</p>\r\n<p>For me it was mostly about enabling caching via <a href=\"https://docs.nextcloud.com/server/12/admin_manual/configuration_server/caching_configuration.html#id1\">APCU</a>, and enabling <a href=\"https://docs.nextcloud.com/server/12/admin_manual/configuration_server/security_setup_warnings.html#you-are-accessing-this-site-via-http\">You are accessing this site via HTTP</a>.</p>\r\n<p>The first is fixed in the <code>nextcloud/config/config.php</code> page, the next is fixed by installing a valid SSL cert from Let\'s Encrypt.</p>\r\n<h2 id=\"ssl-lets-encrypt\">SSL Let\'s Encrypt</h2>\r\n<p>Based on the following article I installed it manually.</p>\r\n<p><a href=\"https://code.luasoftware.com/tutorials/lets-encrypt/obtain-lets-encrypt-ssl-using-manual-dns-verification/\">Obtain Let\'s Encrypt SSL Certificate Using Manual DNS Verification</a></p>\r\n<h3 id=\"install-certbot\">Install certbot</h3>\r\n<pre><code># apt install certbot</code></pre>\r\n<p>Then run the script manually specifying that the challenge should be over dns.</p>\r\n<pre><code># certbot certonly --manual --preferred-challenges dns \r\nSaving debug log to /var/log/letsencrypt/letsencrypt.log\r\nPlugins selected: Authenticator manual, Installer None\r\nEnter email address (used for urgent renewal and security notices) (Enter &#39;c&#39; to\r\ncancel): letsencrypt@example.com\r\n\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nPlease read the Terms of Service at\r\nhttps://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must\r\nagree in order to register with the ACME server at\r\nhttps://acme-v02.api.letsencrypt.org/directory\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n(A)gree/(C)ancel: A\r\n\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nWould you be willing to share your email address with the Electronic Frontier\r\nFoundation, a founding partner of the Let&#39;s Encrypt project and the non-profit\r\norganization that develops Certbot? We&#39;d like to send you email about our work\r\nencrypting the web, EFF news, campaigns, and ways to support digital freedom.\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n(Y)es/(N)o: n\r\nPlease enter in your domain name(s) (comma and/or space separated)  (Enter &#39;c&#39;\r\nto cancel): nextcloud.example.com\r\nObtaining a new certificate\r\nPerforming the following challenges:\r\ndns-01 challenge for nextcloud.example.com\r\n\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nNOTE: The IP of this machine will be publicly logged as having requested this\r\ncertificate. If you&#39;re running certbot in manual mode on a machine that is not\r\nyour server, please ensure you&#39;re okay with that.\r\n\r\nAre you OK with your IP being logged?\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n(Y)es/(N)o: y\r\n\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nPlease deploy a DNS TXT record under the name\r\n_acme-challenge.nextcloud.example.com with the following value:\r\n\r\n0c5dbJpS5t0VKzglhdfFhZ6CGmZlLHNaNnAQe2VeJyKi\r\n\r\nBefore continuing, verify the record is deployed.\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nPress Enter to Continue</code></pre>\r\n<p>It was at this point I went to my hosting companys page and created a subdomain called <code>nextcloud</code>. Then I added a <code>TXT</code> record called <code>_acme-challenge</code> with the text <code>0c5dbJpS5t0VKzglhdfFhZ6CGmZlLHNaNnAQe2VeJyKi</code>.</p>\r\n<p>In order to verify that we use the command:</p>\r\n<pre><code># apt-get install -y dnsutils\r\n\r\n$ dig -t TXT _acme-challenge.nextcloud.example.com\r\n\r\n; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1+deb10u2-Debian &lt;&lt;&gt;&gt; -t TXT _acme-challenge.nextcloud.example.com\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 39298\r\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 4096\r\n;; QUESTION SECTION:\r\n;_acme-challenge.nextcloud.example.com. IN TXT\r\n\r\n;; ANSWER SECTION:\r\n_acme-challenge.nextcloud.example.com. 3600 IN TXT &quot;0c5dbJpS5t0VKzglhdfFhZ6CGmZlLHNaNnAQe2VeJyKi&quot;\r\n\r\n;; Query time: 7 msec\r\n;; SERVER: 178.21.112.12#53(178.21.112.12)\r\n;; WHEN: Thu Dec 10 16:27:53 CET 2020\r\n;; MSG SIZE  rcvd: 121\r\n</code></pre>\r\n<p>Now that the answer section is correct we can continue with the <code>certbot</code> script.</p>\r\n<pre><code>Waiting for verification...\r\nCleaning up challenges\r\n\r\nIMPORTANT NOTES:\r\n - Congratulations! Your certificate and chain have been saved at:\r\n   /etc/letsencrypt/live/nextcloud.example.com/fullchain.pem\r\n   Your key file has been saved at:\r\n   /etc/letsencrypt/live/nextcloud.example.com/privkey.pem\r\n   Your cert will expire on 2021-03-10. To obtain a new or tweaked\r\n   version of this certificate in the future, simply run certbot\r\n   again. To non-interactively renew *all* of your certificates, run\r\n   &quot;certbot renew&quot;\r\n - If you like Certbot, please consider supporting our work by:\r\n\r\n   Donating to ISRG / Let&#39;s Encrypt:   https://letsencrypt.org/donate\r\n   Donating to EFF:                    https://eff.org/donate-le</code></pre>\r\n<h3 id=\"renew\">Renew</h3>\r\n<p>Unfortunately the renew is not automatic. <a href=\"https://webmasters.stackexchange.com/questions/116316/could-not-renew-letsencrypt-certificate-error-the-manual-plugin-is-not-working\">\"You don\'t have to renew Certificate with\"renew\" option. You have to run the same command you ran for Certificate creation.\"</a></p>\r\n<p>So I just set up a 3 monthly recurring reminder in NextCloud to do this.</p>\r\n<h3 id=\"delete\">Delete</h3>\r\n<p>If you need to delete the cert you can do it as follows.</p>\r\n<pre><code>root@nextcloud:~# certbot certificates\r\nSaving debug log to /var/log/letsencrypt/letsencrypt.log\r\n\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nFound the following certs:\r\n  Certificate Name: nextcloud.example.com\r\n    Domains: nextcloud.example.com\r\n    Expiry Date: 2021-03-10 14:28:07+00:00 (VALID: 89 days)\r\n    Certificate Path: /etc/letsencrypt/live/nextcloud.example.com/fullchain.pem\r\n    Private Key Path: /etc/letsencrypt/live/nextcloud.example.com/privkey.pem\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nroot@nextcloud:~# certbot delete\r\nSaving debug log to /var/log/letsencrypt/letsencrypt.log\r\n\r\nWhich certificate(s) would you like to delete?\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n1: nextcloud.example.com\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nSelect the appropriate numbers separated by commas and/or spaces, or leave input\r\nblank to select all options shown (Enter &#39;c&#39; to cancel): 1\r\n\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nDeleted all files relating to certificate nextcloud.example.com.\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</code></pre>\r\n<h2 id=\"apache-setup\">Apache setup</h2>\r\n<p>Setting up Apache is not well explained anywhere I could find.</p>\r\n<p>The good news is that <a href=\"https://ssl-config.mozilla.org/#server=apache&amp;version=2.4.41&amp;config=intermediate&amp;openssl=1.1.1d&amp;guideline=5.6\">moz://a SSL Configuration Generator</a> page takes the misery out of making tea. I mean, it will help you with your configuration. If you do like misery you can of course read the <a href=\"https://wiki.mozilla.org/Talk:Security/Server_Side_TLS\">Talk:Security/Server Side TLS</a> page.</p>\r\n<p>The most helpful articles were:</p>\r\n<ul>\r\n<li><a href=\"https://linuxize.com/post/secure-apache-with-let-s-encrypt-on-debian-10/\">Secure Apache with Let\'s Encrypt on Debian 10</a></li>\r\n<li><a href=\"https://develike.com/en/articles/adding-a-trusted-self-signed-ssl-certificate-to-apache-on-debian-ubuntu\">Adding a trusted self-signed SSL certificate to Apache on Debian/Ubuntu</a></li>\r\n<li><a href=\"https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-debian-10\">How To Create a Self-Signed SSL Certificate for Apache in Debian 10</a></li>\r\n</ul>\r\n<p>I made the following changes:</p>\r\n<pre><code>root@nextcloud:/etc/apache2/sites-available# diff 000-default.conf.orig 000-default.conf\r\n28a29,30\r\n&gt;         RewriteEngine On\r\n&gt;         RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]\r\n\r\nroot@nextcloud:/etc/apache2/sites-available# diff default-ssl.conf.orig default-ssl.conf\r\n32,33c32,33\r\n&lt;               SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem\r\n&lt;               SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key\r\n---\r\n&gt;               SSLCertificateFile      /etc/letsencrypt/live/nextcloud.example.com/fullchain.pem\r\n&gt;               SSLCertificateKeyFile   /etc/letsencrypt/live/nextcloud.example.com/privkey.pem\r\n129a130,131\r\n&gt;               # enable HTTP/2, if available\r\n&gt;               Protocols h2 http/1.1\r\n130a133,134\r\n&gt;               # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)\r\n&gt;               Header always set Strict-Transport-Security &quot;max-age=63072000&quot;</code></pre>\r\n<h2 id=\"testing\">Testing</h2>\r\n<p>To test the cert you can connect to the localhost on the server.</p>\r\n<pre><code>root@nextcloud:/etc/apache2/sites-available# openssl s_client -crlf -debug -connect localhost:443 -status -servername nextcloud.example.com\r\nCONNECTED(00000003)\r\nwrite to 0x643cf8 [0x652568] (321 bytes =&gt; 321 (0x141))\r\n[snip...]\r\nread from 0x643cf8 [0x6492b3] (5 bytes =&gt; 5 (0x5))\r\n0000 - 48 54 54 50 2f                                    HTTP/\r\n3069898768:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:332:\r\n---\r\nno peer certificate available\r\n---\r\nNo client certificate CA names sent\r\n---\r\nSSL handshake has read 5 bytes and written 321 bytes\r\nVerification: OK\r\n---\r\nNew, (NONE), Cipher is (NONE)\r\nSecure Renegotiation IS NOT supported\r\nCompression: NONE\r\nExpansion: NONE\r\nNo ALPN negotiated\r\nEarly data was not sent\r\nVerify return code: 0 (ok)\r\n---\r\n[snip...]</code></pre>\r\n<p>I had been using <code>systemctl restart apache2.service</code> to restart apache, but the recommended way is to use <code>apache2ctl</code>.</p>\r\n<pre><code>root@nextcloud:/etc/apache2/sites-available# apache2ctl \r\nUsage: /usr/sbin/apache2ctl start|stop|restart|graceful|graceful-stop|configtest|status|fullstatus|help\r\n       /usr/sbin/apache2ctl &lt;apache2 args&gt;\r\n       /usr/sbin/apache2ctl -h            (for help on &lt;apache2 args&gt;)\r\n\r\nroot@nextcloud:/etc/apache2/sites-available# apache2ctl restart\r\nAH00558: apache2: Could not reliably determine the server&#39;s fully qualified domain name, using 127.0.1.1. Set the &#39;ServerName&#39; directive globally to suppress this message\r\n\r\nroot@nextcloud:/etc/apache2/sites-available# apache2 -t\r\n[Thu Dec 10 18:18:49.187628 2020] [core:warn] [pid 4108] AH00111: Config variable ${APACHE_RUN_DIR} is not defined\r\napache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot</code></pre>\r\n<p>For some reason that fixed it.</p>\r\n<pre><code># openssl s_client -crlf -debug -connect localhost:443 -status -servername nextcloud.example.com\r\nCONNECTED(00000003)\r\nwrite to 0xe4918 [0xf3188] (324 bytes =&gt; 324 (0x144))\r\n[snip...]\r\nOCSP response: \r\n======================================\r\nOCSP Response Data:\r\n    OCSP Response Status: successful (0x0)\r\n    Response Type: Basic OCSP Response\r\n    Version: 1 (0x0)\r\n    Responder Id: C = US, O = Let&#39;s Encrypt, CN = R3\r\n    Produced At: Dec 22 16:04:00 2020 GMT\r\n[snip...]\r\n---\r\nCertificate chain\r\n 0 s:CN = nextcloud.example.com\r\n   i:C = US, O = Let&#39;s Encrypt, CN = R3\r\n 1 s:C = US, O = Let&#39;s Encrypt, CN = R3\r\n   i:O = Digital Signature Trust Co., CN = DST Root CA X3\r\n---\r\nServer certificate\r\n-----BEGIN CERTIFICATE-----\r\n[snip...]</code></pre>\r\n<h2 id=\"dns-rebind-protection\">DNS Rebind Protection</h2>\r\n<p>Now that everything is up and running we just need to create a new <code>A</code> record pointing to our internal IP Address. Unfortunately while <code>nextcloud.example.com</code> resolves to <code>192.168.123.123</code> externally, it fails to return an answer internally.</p>\r\n<p>A little investigation lead to the fact that my <a href=\"https://en.avm.de/service/fritzbox/fritzbox-7390/knowledge-base/publication/show/663_No-DNS-resolution-of-private-IP-addresses/\">firewall</a>, was seeing this as a <a href=\"https://en.wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding</a> attack. It correctly blocks these DNS entires. I was able to add an exception under <code>Network &gt; DHCP &gt; Rebind protection &gt; Discard upstream RFC1918 responses</code>.</p>\r\n<p>On your router you should check under DHCP/DNS entries for <code>RFC1918</code> or <code>DNS Rebinding</code>.</p>\r\n<p>You can verify your install as follows:</p>\r\n<pre><code># apt-get install -y dnsutils\r\n\r\n$ dig nextcloud.example.com\r\n\r\n; &lt;&lt;&gt;&gt; DiG 9.16.8-Debian &lt;&lt;&gt;&gt; nextcloud.example.com\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 29350\r\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 4096\r\n;; QUESTION SECTION:\r\n;nextcloud.example.com.          IN      A\r\n\r\n;; ANSWER SECTION:\r\nnextcloud.example.com.   3600    IN      A       192.168.123.123\r\n\r\n;; Query time: 40 msec\r\n;; SERVER: 192.168.0.71#53(192.168.0.71)\r\n;; WHEN: Thu Dec 10 16:53:39 GMT 2020\r\n;; MSG SIZE  rcvd: 65</code></pre>\r\n<h2 id=\"completing\">Completing</h2>\r\n<p>Back in the admin console you should keep upgrading, and fixing errors until it says <code>Your version is up to date.</code> and <code>All checks passed.</code></p>\r\n<p>At this point you are ready to open the server up to your users while they are outside the home, in work or school.</p>\r\n<h1 id=\"firewall-setup\">Firewall setup</h1>\r\n<p>timttmy has already done an episode on WireGuard where he goes into the details of how to install it manually.</p>\r\n<p>I cheated and used the <a href=\"https://www.pivpn.io/\">PIVPN</a> which now supports wireguard.</p>\r\n<p>This is a good walkthrough with screenshots in the article <a href=\"https://pimylifeup.com/raspberry-pi-wireguard/\">Setting up a WireGuard VPN on the Raspberry Pi</a>.</p>\r\n<p>Once that\'s done you should have the following commands available.</p>\r\n<pre><code># pivpn\r\n::: Control all PiVPN specific functions!\r\n:::\r\n::: Usage: pivpn &lt;command&gt; [option]\r\n:::\r\n::: Commands:\r\n:::  -a,  add              Create a client conf profile\r\n:::  -c,  clients          List any connected clients to the server\r\n:::  -d,  debug            Start a debugging session if having trouble\r\n:::  -l,  list             List all clients\r\n:::  -qr, qrcode           Show the qrcode of a client for use with the mobile app\r\n:::  -r,  remove           Remove a client\r\n:::  -h,  help             Show this help dialog\r\n:::  -u,  uninstall        Uninstall pivpn from your system!\r\n:::  -up, update           Updates PiVPN Scripts\r\n:::  -bk, backup           Backup VPN configs and user profiles\r\n</code></pre>\r\n<p>During the install process you will select a port to use. This port needs to be allowed in from the Internet to your internal server. Where this will be done is different for every router, but have a look around for <code>port forwarding</code> or <code>permit access</code> to do this.</p>\r\n<h1 id=\"setting-up-client-on-lineageos\">Setting up Client on LineageOS</h1>\r\n<p>It is at this point that you will need to have accounts created in NextCloud.</p>\r\n<ul>\r\n<li><a href=\"https://nextcloud.example.com/nextcloud/\">https://nextcloud.example.com/nextcloud/</a></li>\r\n</ul>\r\n<p>You can do this under your profile &gt; users in an admin account.</p>\r\n<p>I created an account for each of the family members, a generic one for the house, and a readonly one for the <a href=\"https://hackerpublicradio.org/eps.php?id=3039\">MagicMirror</a>.</p>\r\n<p>The house account houses (pun intended) the shared calendar, files, and contacts. All the family accounts have read and write access to these, except for the MagicMirror one which only needs to read the calendar and contacts.</p>\r\n<h2 id=\"fdroid\">Fdroid</h2>\r\n<p>Now you can install the software you will need on your phones.</p>\r\n<ul>\r\n<li><a href=\"https://f-droid.org/en/packages/com.nextcloud.client/\">NextCloud</a> Synchronization client</li>\r\n<li><a href=\"https://f-droid.org/en/packages/at.bitfire.davdroid/\">DAVx</a> DAVx⁵ CalDAV/CardDAV Synchronization and Client</li>\r\n<li><a href=\"https://f-droid.org/en/packages/org.dmfs.tasks/\">OpenTasks</a> Keep track of your list of goals</li>\r\n<li><a href=\"https://f-droid.org/en/packages/com.wireguard.android/\">WireGuard</a> Next generation secure VPN network tunnel</li>\r\n</ul>\r\n<p>You will need to setup the NextCloud client using the url <code>https://nextcloud.example.com/nextcloud/</code>, username and password.</p>\r\n<p>Then you set up DAVx using another url <code>https://nextcloud.example.com/nextcloud/remote.php/dav</code>, but the same , username and password.</p>\r\n<p>By the way if you want to access files you can do so via <code>davs://nextcloud.example.com/nextcloud/remote.php/dav/files/house/</code></p>\r\n<p>I set up the NextCloud client to automatically upload photos, and videos to the server.</p>\r\n<p>To set up WireGuard you need to create a connection for each device connecting</p>\r\n<pre><code>root@nextcloud:~# pivpn add\r\nEnter a Name for the Client: Mobile_Worker\r\n::: Client Keys generated\r\n::: Client config generated\r\n::: Updated server config\r\n::: WireGuard reloaded\r\n======================================================================\r\n::: Done! Mobile_Worker.conf successfully created!\r\n::: Mobile_Worker.conf was copied to /home/ken/configs for easy transfer.\r\n::: Please use this profile only on one device and create additional\r\n::: profiles for other devices. You can also use pivpn -qr\r\n::: to generate a QR Code you can scan with the mobile app.\r\n======================================================================</code></pre>\r\n<p>Then open display the qrcode as follows:</p>\r\n<pre><code>root@nextcloud:~# pivpn qrcode\r\n::  Client list  ::\r\n1) Mobile_Worker\r\nPlease enter the Index/Name of the Client to show: </code></pre>\r\n<p>Pressing <code>1</code> in my case will display the QRCode.</p>\r\n<p>Open the WireGuard app on the phone and press <code>+</code> to add an account, and select <em>scan from qr code</em>.</p>\r\n<p>Point it to QRCode and that\'s it.</p>\r\n<p>If you want to remove a client, you can just use <code>pivpn remove</code></p>\r\n<pre><code>root@nextcloud:~# pivpn remove\r\n::  Client list  ::\r\n1) Mobile_Worker\r\nPlease enter the Index/Name of the Client to be removed from the list above: 6\r\nDo you really want to delete Mobile_Worker? [Y/n] y\r\n::: Updated server config\r\n::: Client config for Mobile_Worker removed\r\n::: Client Keys for Mobile_Worker removed\r\n::: Successfully deleted Mobile_Worker\r\n::: WireGuard reloaded</code></pre>\r\n<h2 id=\"magicmirror\">MagicMirror</h2>\r\n<p>The final step is to have the <a href=\"https://hackerpublicradio.org/eps.php?id=3039\">MagicMirror</a> in the living room display the shared calendar.</p>\r\n<p>To display your calendar there, you need to have an <a href=\"https://en.wikipedia.org/wiki/ICalendar\">ics iCalendar</a> file.</p>\r\n<p>You can get that by login into NextCloud as the MagicMirror user via the web, going to the calendar you desire to export. Click the <code>...</code> menu and select \"Copy Private Link\".</p>\r\n<p>You can then add the <code>?export</code> at the end of the url to get an ical export.</p>\r\n<p><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave</a> gave me a tip on how to have MagicMirror serve this file, by using its own local webserver. You point it to a local directory eg: <code>https://localhost:8080/modules/.calendars/</code>. Don\'t forget to create it.</p>\r\n<pre><code>mkdir -p ~/MagicMirror/modules/.calendars/</code></pre>\r\n<p>I wrote a script that would first get a new version of the ical file, and if it is downloaded correctly would immediately overwrite the previous one.</p>\r\n<pre><code>[magicmirror@magicmirror ~]$ cat /home/pi/bin/cal.bash\r\n#!/bin/bash\r\nwget --quiet --output-document /home/pi/MagicMirror/modules/.calendars/home_calendar.ics.tmp --auth-no-challenge --http-user=magicmirror --http-password=&quot;PASSWORD&quot; &quot;https://nextcloud.example.com/nextcloud/remote.php/dav/calendars/magicmirror/personal_shared_by_House/?export&quot; &gt; /dev/null 2&gt;&amp;1\r\nif [ -s /home/pi/MagicMirror/modules/.calendars/home_calendar.ics.tmp ]\r\nthen\r\n  mv /home/pi/MagicMirror/modules/.calendars/home_calendar.ics.tmp /home/pi/MagicMirror/modules/.calendars/home_calendar.ics\r\nfi\r\n[snip...]</code></pre>\r\n<p>I then scheduled this to run every 15 minutes.</p>\r\n<pre><code>[magicmirror@magicmirror ~]$ crontab -l\r\n*/15 * * * * /home/pi/bin/cal.bash &gt;/dev/null 2&gt;&amp;1</code></pre>\r\n<p>The final step was to update my Calendar entry in the <code>~/MagicMirror/config/config.js</code> config file.</p>\r\n<pre><code>        // Calendar\r\n        {\r\n            module: &quot;calendar&quot;,\r\n            header: &quot;Calendar&quot;,\r\n            position: &quot;top_center&quot;,\r\n            config: {\r\n                colored: true,\r\n                maxTitleLength: 30,\r\n                fade: false,\r\n                calendars: [\r\n                    {\r\n                        name: &quot;Family Calendar&quot;,\r\n                        url: &quot;https://localhost:8080/modules/.calendars/home_calendar.ics&quot;,\r\n                        symbol: &quot;calendar-check&quot;,\r\n                        color: &quot;#825BFF&quot; // violet-ish\r\n                    },\r\n                    {\r\n                        name: &quot;Birthday Calendar&quot;,\r\n                        url: &quot;https://localhost:8080/modules/.calendars/birthday_calendar.ics&quot;,\r\n                        symbol: &quot;calendar-check&quot;,\r\n                        color: &quot;#FFCC00&quot; // violet-ish\r\n                    },\r\n                    {\r\n                        // Calendar uses repeated &#39;RDATE&#39; entries, which this iCal parser\r\n                        // doesn&#39;t seem to recognise. Only the next event is visible, and\r\n                        // the calendar has to be refreshed *after* the event has passed.\r\n                        name: &quot;HPR Community News recordings&quot;,\r\n                        url: &quot;https://hackerpublicradio.org/HPR_Community_News_schedule.ics&quot;,\r\n                        symbol: &quot;calendar-check&quot;,\r\n                        color: &quot;#C465A7&quot; // purple\r\n                    },\r\n                    {\r\n                        // https://inzamelkalender.gad.nl/ical-info\r\n                        name: &quot;GAD Calendar&quot;,\r\n                        url: &quot;https://inzamelkalender.gad.nl/ical/0381200000107654&quot;,\r\n                        symbol: &quot;calendar-check&quot;,\r\n                        color: &quot;#00CC00&quot; // Green\r\n                    },\r\n                ]\r\n            }\r\n        },</code></pre>\r\n<p>The contacts birthday wasn\'t available to the MagicMirror user immediately after I created it, so I was able to force an update as follows:</p>\r\n<pre><code>root@nextcloud:/var/www/html/nextcloud# sudo -u www-data php occ dav:sync-birthday-calendar\r\nStart birthday calendar sync for all users ...\r\n    7 [============================]</code></pre>\r\n<h1 id=\"conclusion\">Conclusion</h1>\r\n<p>With that we have a family sharing solution just like other normal house holds. Yet with the security of knowing that the data doesn\'t leave the house, and is not being used without your approval.</p>\r\n<p>You can tell it\'s a hit, because now people are scheduling tech support tasks via the app.</p>\r\n<p>Ah well.</p>\r\n\r\n',30,0,1,'CC-BY-SA','NextCloud, Raspbian, Apache, mariadb, PHP, myphpadmin, wireguard, DNS Rebind, magicmirror2',0,0,1),
(3246,'2021-01-11','LXCast: freeing the Fairphone 3 (and many other phones) ',1744,'We look at how to get a free smartphone operating system on the Fairphone 3 (and many other phones),','<ul>\r\n<li><p>My review on the FP3 when it came out<br />\r\n<a href=\"https://lxcast.net/lxcast-2-fairphone-3-fair-but-not-free-yet/\" class=\"uri\">https://lxcast.net/lxcast-2-fairphone-3-fair-but-not-free-yet/</a></p></li>\r\n<li><p>Two solutions for a free OS:</p>\r\n<ol type=\"1\">\r\n<li><p>lineage OS - free android with the Gapps removed<br />\r\n<a href=\"https://download.lineageos.org/FP3\" class=\"uri\">https://download.lineageos.org/FP3</a></p></li>\r\n<li><p>the /e/ project !! A \"de-googled\" operating system - actually a fork of lineage OS - this is what I\'m going to talk about here.<br />\r\n<a href=\"https://e.foundation/about-e/\" class=\"uri\">https://e.foundation/about-e/</a></p></li>\r\n</ol></li>\r\n<li><p>The research paper on Google Data Collection by Professor Douglas C. Schmidt, Vanderbilt University (2018) - learn how and how often normal Android phones send your data to Google servers.<br />\r\n<a href=\"https://digitalcontentnext.org/blog/2018/08/21/google-data-collection-research/\" class=\"uri\">https://digitalcontentnext.org/blog/2018/08/21/google-data-collection-research/</a></p></li>\r\n<li><p>Another background article on tracking (in German) based on research from a Norwegian journalist:<br />\r\n<a href=\"https://www.golem.de/news/datenschutz-wie-ich-die-ueberwacher-in-meinem-smartphone-aufspuerte-2012-152829-2.html\" class=\"uri\">https://www.golem.de/news/datenschutz-wie-ich-die-ueberwacher-in-meinem-smartphone-aufspuerte-2012-152829-2.html</a></p></li>\r\n<li><p>MicroG services, a replacement for Google\'s libraries on /e/ with purely open-source implementations.</p></li>\r\n<li><p>The man behind the /e/ project: Gael Duval, pioneer of Open Source, Mandrake, Ulteo...<br />\r\n<a href=\"https://www.indidea.org/gael/blog/about-gael-duval/\" class=\"uri\">https://www.indidea.org/gael/blog/about-gael-duval/</a></p></li>\r\n<li><p>His article outlining his vision for /e/ : <a href=\"https://gael-duval.medium.com/e-os-redefines-the-mobile-operating-system-paradigm-for-a-more-sustainable-world-4e929b1010c\" class=\"uri\">https://gael-duval.medium.com/e-os-redefines-the-mobile-operating-system-paradigm-for-a-more-sustainable-world-4e929b1010c</a></p></li>\r\n<li><p>You can buy a FP3 and an FP3 + with /e/ pre-installed here !!<br />\r\n<a href=\"https://esolutions.shop/de/\" class=\"uri\">https://esolutions.shop/de/</a></p></li>\r\n<li><p>Installing on your phone: over 110 devices supported: from Asus to Google, to Oneplus and Xiaomi<br />\r\n<a href=\"https://doc.e.foundation/devices/\" class=\"uri\">https://doc.e.foundation/devices/</a></p></li>\r\n</ul>\r\n<h3 id=\"how-to-install-it-on-the-fp3\">How to install it on the FP3</h3>\r\n<ul>\r\n<li><p>Install /e/ on FairPhone FP3 - FP3 | /e/ documentation</p></li>\r\n<li><p>Privacy ratings of apps: <a href=\"https://exodus-privacy.eu\" class=\"uri\">https://exodus-privacy.eu</a></p></li>\r\n<li><p>Alternative launchers:</p>\r\n<ul>\r\n<li>KISS launcher</li>\r\n<li>Simple launcher</li>\r\n</ul></li>\r\n<li><p>I recommended you add these apps:</p>\r\n<ul>\r\n<li>Antennapod - podcast client</li>\r\n<li>FairEmail or simple email</li>\r\n<li>Fennec (Firefox)</li>\r\n<li>Signal</li>\r\n<li>newpipe for watching youtube without being tracked</li>\r\n</ul></li>\r\n<li><p>Backup via adb is apparently broken | Not the fault of /e/!!</p></li>\r\n<li><p>You cannot simply flash a new recovery, such as TWRP, to flash images or backup, instead, you can use this method<br />\r\n<a href=\"https://twrp.me/fairphone/fairphone3.html\" class=\"uri\">https://twrp.me/fairphone/fairphone3.html</a></p></li>\r\n<li><p>Donate or become a member to keep the project going:<br />\r\n<a href=\"https://e.foundation/donate-2/\" class=\"uri\">https://e.foundation/donate-2/</a></p></li>\r\n</ul>\r\n<p>Feel free to add any comments below!</p>\r\n<p>Theme Music: Jazzhar, \"Room with a View\" CC-BY-SA, check him out on Jamendo and on Free Music Archive</p>\r\n',285,75,0,'CC-BY-SA','LXCast, Smartphone, Android, Fairphone, FOSS',0,0,1),
(3247,'2021-01-12','Saturday Morning Automotive Routine',1110,'I have developed a relaxing 10-step routine for keeping your car in running condition.','<p>The top ten are:</p>\r\n<ol type=\"1\">\r\n<li>Gas</li>\r\n<li>Tires</li>\r\n<li>Battery</li>\r\n<li>Hoses/Belts</li>\r\n<li>Fluids</li>\r\n<li>External</li>\r\n<li>Review dates</li>\r\n<li>Schedule replacement parts</li>\r\n<li>Clean up</li>\r\n<li>Choose for car wash</li>\r\n</ol>\r\n<!-- . -->\r\n<ol start=\"11\" type=\"1\">\r\n<li>A treat!</li>\r\n</ol>\r\n<p>Blog site: <a href=\"https://biblicaltrumpets.org\" class=\"uri\">https://biblicaltrumpets.org</a></p>\r\n',389,0,0,'CC-BY-SA','system,lifehack,automotive,routine maintenance',0,0,1),
(3255,'2021-01-22','garage door part 2',574,'tis teh season COUGH COUGH','<p>garage door part 2<br />\r\ntis teh season COUGH COUGH</p>',36,0,1,'CC-BY-SA','garage door,diy,home,repair',0,0,1),
(3290,'2021-03-12','GIMP: More on Layer Tools and Techniques',887,'Using some additional tools for for working with Layers in GIMP','<p>When working with layers you often need to use additional tools and techniques to get the results you want. We cover several of the most often used ones in this tutorial, including Transparency, Opacity, Layer Groups, and Linking Layers. You will use these frequently in working with Layers.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/\" class=\"uri\">https://docs.gimp.org/2.10/en/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources\" class=\"uri\">https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources</a></li>\r\n<li><a href=\"https://imageric.com/\" class=\"uri\">https://imageric.com/</a></li>\r\n<li><a href=\"https://imageric.com/photos/free/detail/13392-daughter-happy-together-family-mother-smiling-child-people-group-love\" class=\"uri\">https://imageric.com/photos/free/detail/13392-daughter-happy-together-family-mother-smiling-child-people-group-love</a></li>\r\n<li><a href=\"https://imageric.com/photos/free/detail/13400-flower-arrangement-bouquet-arrangement-rose-decoration-flower-roses\" class=\"uri\">https://imageric.com/photos/free/detail/13400-flower-arrangement-bouquet-arrangement-rose-decoration-flower-roses</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/more-on-layer-tools-and-techniques/\" class=\"uri\">https://www.ahuka.com/gimp/more-on-layer-tools-and-techniques/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layers',0,0,1),
(3300,'2021-03-26','YouTube Channels for Learning Spanish, Part 1',984,'My reviews of some YouTube channels offering free Spanish language lessons.','<p>As I have been learning Spanish I have been making use of a variety of tools and aids. One of the best is YouTube, where there is a wealth of free stuff. Of course, Spanish is not the only language with good resources here, but it is the one I am studying right now. But if you are interested in learning another language, or improving your knowledge of one, you should take a look.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/channel/UC_GFwrcNlXh92xA8iKFT2WA\" class=\"uri\">https://www.youtube.com/channel/UC_GFwrcNlXh92xA8iKFT2WA</a></li>\r\n<li><a href=\"https://thelanguagetutor.co/\" class=\"uri\">https://thelanguagetutor.co/</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=hyLl_0d0EBw&amp;list=PLTpetkN815Qyuc2RbC1kxxMQvxjQ3RnYG\" class=\"uri\">https://www.youtube.com/watch?v=hyLl_0d0EBw&amp;list=PLTpetkN815Qyuc2RbC1kxxMQvxjQ3RnYG</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=I8hFdZEPqdM\" class=\"uri\">https://www.youtube.com/watch?v=I8hFdZEPqdM</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Common_European_Framework_of_Reference_for_Languages\" class=\"uri\">https://en.wikipedia.org/wiki/Common_European_Framework_of_Reference_for_Languages</a></li>\r\n<li><a href=\"https://www.youtube.com/c/Professorjason/featured\" class=\"uri\">https://www.youtube.com/c/Professorjason/featured</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UC67BDv__7er_ZaYKqhOSOFQ\" class=\"uri\">https://www.youtube.com/channel/UC67BDv__7er_ZaYKqhOSOFQ</a></li>\r\n<li><a href=\"https://www.youtube.com/user/culturealley\" class=\"uri\">https://www.youtube.com/user/culturealley</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UC9yudInUYzMh9H4gJs4DrHg\" class=\"uri\">https://www.youtube.com/channel/UC9yudInUYzMh9H4gJs4DrHg</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCozZrWPuoNRLl5ArOyJ57sQ\" class=\"uri\">https://www.youtube.com/channel/UCozZrWPuoNRLl5ArOyJ57sQ</a></li>\r\n<li><a href=\"https://www.palain.com/spanish/youtube-channels-for-learning-spanish/\" class=\"uri\">https://www.palain.com/spanish/youtube-channels-for-learning-spanish/</a></li>\r\n</ul>\r\n',198,116,0,'CC-BY-SA','Spanish, Language learning, YouTube',0,0,1),
(3310,'2021-04-09','Layer Masks',970,'We begin our look at a key tool in GIMP, Layer Masks','<p>One of the key tools in GIMP is Layer Masks, which allow you to make selected parts of a layer transparent, so that lower layers can come through. This is a way to get the same kinds of effects you would get with physical transparency sheets or animation gels.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/\" class=\"uri\">https://docs.gimp.org/2.10/en/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources\" class=\"uri\">https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources</a></li>\r\n<li><a href=\"https://snappygoat.com/\" class=\"uri\">https://snappygoat.com/</a></li>\r\n<li><a href=\"https://snappygoat.com/s/?q=flowerscloseup#eda72d0e7eedc238eed8f7acffc515dba94ce64c,1,342\" class=\"uri\">https://snappygoat.com/s/?q=flowerscloseup#eda72d0e7eedc238eed8f7acffc515dba94ce64c,1,342</a></li>\r\n<li><a href=\"https://www.gimp.org/docs/userfaq.html#when-will-gimp-support-any-kind-of-non-destructive-editing-like-adjustment-layers-layer-filters-andor-full-blown-node-based-editing\" class=\"uri\">https://www.gimp.org/docs/userfaq.html#when-will-gimp-support-any-kind-of-non-destructive-editing-like-adjustment-layers-layer-filters-andor-full-blown-node-based-editing</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/layer-masks/\" class=\"uri\">https://www.ahuka.com/gimp/layer-masks/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layers, Layer Masks',0,0,1),
(3320,'2021-04-23','YouTube Channels for Learning Spanish, Part 2',873,'My reviews of some YouTube channels offering free Spanish language lessons.','<p>As I have been learning Spanish I have been making use of a variety of tools and aids. One of the best is YouTube, where there is a wealth of free stuff. Of course, Spanish is not the only language with good resources here, but it is the one I am studying right now. But if you are interested in learning another language, or improving your knowledge of one, you should take a look. This is the second part covering some additional channels</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://www.youtube.com/channel/UCmSElpplqOqmAHi1N0z42AQ\" class=\"uri\">https://www.youtube.com/channel/UCmSElpplqOqmAHi1N0z42AQ</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCydVvh3Wg4VPvllLHFoe5_A\" class=\"uri\">https://www.youtube.com/channel/UCydVvh3Wg4VPvllLHFoe5_A</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCouyFdE9-Lrjo3M_2idKq1A\" class=\"uri\">https://www.youtube.com/channel/UCouyFdE9-Lrjo3M_2idKq1A</a></li>\r\n<li><a href=\"https://algworld.com/\" class=\"uri\">https://algworld.com/</a></li>\r\n<li><a href=\"https://www.teachingenglish.org.uk/article/comprehensible-input\" class=\"uri\">https://www.teachingenglish.org.uk/article/comprehensible-input</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCIdFcLCIJQ_YMrormG_nU8w\" class=\"uri\">https://www.youtube.com/channel/UCIdFcLCIJQ_YMrormG_nU8w</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCfG2VhlQgy5bHGmkpeKcjVA\" class=\"uri\">https://www.youtube.com/channel/UCfG2VhlQgy5bHGmkpeKcjVA</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCrMqdq1osi5ECCBkia2jsNw\" class=\"uri\">https://www.youtube.com/channel/UCrMqdq1osi5ECCBkia2jsNw</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCAg2CRWxgDZPFricsDv6EOA\" class=\"uri\">https://www.youtube.com/channel/UCAg2CRWxgDZPFricsDv6EOA</a></li>\r\n<li><a href=\"https://www.palain.com/spanish/youtube-channels-for-learning-spanish-part-2/\" class=\"uri\">https://www.palain.com/spanish/youtube-channels-for-learning-spanish-part-2/</a></li>\r\n</ul>\r\n',198,116,0,'CC-BY-SA','Spanish, Language learning, YouTube',0,0,1),
(3330,'2021-05-07','A Layer Mask Project',934,'We apply our knowledge of Layer Masks to create a project.','<p>This tutorial has us applying our knowledge of Layer Masks in combination with some other tools to make an image. We start with a photograph, and transform it into something very different, as a way to practice our GIMP skills.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/\" class=\"uri\">https://docs.gimp.org/2.10/en/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources\" class=\"uri\">https://en.wikipedia.org/wiki/Wikipedia:Public_domain_image_resources</a></li>\r\n<li><a href=\"https://www.youtube.com/channel/UCnSAUHBwdAEPWeeIs8LTViA\" class=\"uri\">https://www.youtube.com/channel/UCnSAUHBwdAEPWeeIs8LTViA</a></li>\r\n<li><a href=\"https://digitalmedia.fws.gov/\" class=\"uri\">https://digitalmedia.fws.gov/</a></li>\r\n<li><a href=\"https://digitalmedia.fws.gov/digital/collection/natdiglib/id/14486/rec/210\" class=\"uri\">https://digitalmedia.fws.gov/digital/collection/natdiglib/id/14486/rec/210</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/a-layer-mask-project/\" class=\"uri\">https://www.ahuka.com/gimp/a-layer-mask-project/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layers, Layer Masks',0,0,1),
(3340,'2021-05-21','Hacked?',603,'People commonly say that their own, or someone else\'s, Facebook has been hacked.','<p>As someone who has reasons to be on Facebook, I have gotten used to seeing people warn that their account was hacked, and we should not accept friend requests from them. It is so common that you would wonder if Facebook had no security at all. But the truth is something different, and worth knowing about.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://www.ricksdailytips.com/beware-duplicate-friend-requests/\" class=\"uri\">https://www.ricksdailytips.com/beware-duplicate-friend-requests/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/hacked/\" class=\"uri\">https://www.zwilnik.com/hacked/</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','Facebook, scams',0,0,1),
(3249,'2021-01-14','Linux Inlaws S01E21: The Big Linux Inlaws Peep Show',3165,'The two chaps go the full monty and reveal it all','<ul>\r\n<li>Rust for the Linux kernel: <a href=\"https://github.com/Rust-for-Linux/linux\" target=\"_blank\">https://github.com/Rust-for-Linux/linux</a></li>\r\n<li>Linus opinion on C++ in the Linux kernel: <a href=\"https://lkml.org/lkml/2004/1/20/20\" target=\"_blank\">https://lkml.org/lkml/2004/1/20/20</a></li>\r\n<li>gdb: <a href=\"https://www.gnu.org/software/gdb\" target=\"_blank\">https://www.gnu.org/software/gdb</a></li>\r\n<li>lldb: <a href=\"https://lldb.llvm.org\" target=\"_blank\">https://lldb.llvm.org</a></li>\r\n<li>Novell\'s Netware: <a href=\"https://en.wikipedia.org/wiki/NetWare\" target=\"_blank\">https://en.wikipedia.org/wiki/NetWare</a></li>\r\n<li>strace: <a href=\"https://strace.io\" target=\"_blank\">https://strace.io</a></li>\r\n<li>ltrace: <a href=\"https://www.ltrace.org\" target=\"_blank\">https://www.ltrace.org</a></li>\r\n<li>DTrace: <a href=\"https://dtrace.org/blogs/about\" target=\"_blank\">https://dtrace.org/blogs/about</a></li>\r\n<li>ptrace: <a href=\"https://en.wikipedia.org/wiki/Ptrace#Linux\" target=\"_blank\">https://en.wikipedia.org/wiki/Ptrace#Linux</a></li>\r\n<li>Capabilities: <a href=\"https://wiki.archlinux.org/index.php/capabilities\" target=\"_blank\">https://wiki.archlinux.org/index.php/capabilities</a></li>\r\n<li>Extended attributes: <a href=\"https://en.wikipedia.org/wiki/Extended_file_attributes#Linux\" target=\"_blank\">https://en.wikipedia.org/wiki/Extended_file_attributes#L\r\ninux</a></li>\r\n<li>eBPF: <a href=\"https://ebpf.io\" target=\"_blank\">https://ebpf.io</a></li>\r\n<li>BCC: <a href=\"https://github.com/iovisor/bcc\" target=\"_blank\">https://github.com/iovisor/bcc</a></li>\r\n<li>BCC toolchain: <a href=\"https://iovisor.github.io/bcc\" target=\"_blank\">https://iovisor.github.io/bcc</a></li>\r\n<li>Linux kernel tracing: <a href=\"https://www.kernel.org/doc/html/latest/trace/index.html\" target=\"_blank\">https://www.kernel.org/doc/html/latest/trace/index.html</a></li>\r\n<li>Cathy O\'Neil\'s Weapons of Math Destruction: <a href=\"https://en.wikipedia.org/wiki/Weapons_of_Math_Destruction\" target=\"_blank\">https://en.wikipedia.org/wiki/Weapon\r\ns_of_Math_Destruction</a></li>\r\n<li>Audacity: <a href=\"https://manual.audacityteam.org\" target=\"_blank\">https://manual.audacityteam.org</a></li>\r\n<li>Jitsi (Meet): <a href=\"https://github.com/jitsi/jitsi-meet\" target=\"_blank\">https://github.com/jitsi/jitsi-meet</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Nudity, tracing, debugging, extended berkeley packet filter, weapons of math destruction',0,0,1),
(3251,'2021-01-18','Opposing Views on Alcohol',1840,'Windigo and Mrs. Honeyhume discuss their views on alcohol','<p>I discuss the subject of alcohol with my partner of sixteen years, Mrs. Honeyhume. While we agree on many subjects, alcohol is not one of them.</p>\r\n<p>She believes alcohol is an important experience, one to be shared with friends, and I dislike nearly everything about it.</p>\r\n<p>We discuss what we like/dislike about alcohol, our histories with it, and present our personal anecdotal evidence.</p>',196,0,1,'CC-BY-SA','alcohol',0,0,1),
(3350,'2021-06-04','Blending Layers',1321,'GIMP has a number of ways you can blend layers together','<p>This tutorial begins our discussion of how you can blend entire layers in GIMP, starting with changing the opacity of layers, then moving into Layer Modes, which use mathematical functions to allow more complex combinations to achieve certain effects. We discuss the mathematics as a background to more discussion in subsequent tutorials of the specific Layer Modes.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/\" class=\"uri\">https://docs.gimp.org/2.10/en/</a></li>\r\n<li><a href=\"https://www.thefamousartists.com/\" class=\"uri\">https://www.thefamousartists.com/</a></li>\r\n<li><a href=\"https://www.thefamousartists.com/jeong-seon/geumgang-jeondo\" class=\"uri\">https://www.thefamousartists.com/jeong-seon/geumgang-jeondo</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=17Iivi0tmug\" class=\"uri\">https://www.youtube.com/watch?v=17Iivi0tmug</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=J9YyQpJa-ns\" class=\"uri\">https://www.youtube.com/watch?v=J9YyQpJa-ns</a></li>\r\n<li><a href=\"https://ninedegreesbelow.com/photography/gimp-lch-blend-modes.html\" class=\"uri\">https://ninedegreesbelow.com/photography/gimp-lch-blend-modes.html</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Blend_modes\" class=\"uri\">https://en.wikipedia.org/wiki/Blend_modes</a></li>\r\n<li><a href=\"https://search.creativecommons.org/\" class=\"uri\">https://search.creativecommons.org/</a></li>\r\n<li><a href=\"https://search.creativecommons.org/photos/d3067227-9d89-46e6-b5ba-3910432e2a9f\" class=\"uri\">https://search.creativecommons.org/photos/d3067227-9d89-46e6-b5ba-3910432e2a9f</a></li>\r\n<li><a href=\"https://search.creativecommons.org/photos/84314932-0a0a-4824-a1a9-fbb3196bfc4c\" class=\"uri\">https://search.creativecommons.org/photos/84314932-0a0a-4824-a1a9-fbb3196bfc4c</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/blending-layers/\" class=\"uri\">https://www.ahuka.com/gimp/blending-layers/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layers, Layer Modes, Opacity',0,0,1),
(3360,'2021-06-18','Android Malware Alert',665,'A look at some security issues in Android','<p>A type of malware nicknamed Joker has been infecting Android devices. In this episode we dig a little deeper into what this is and how it works.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://stackoverflow.com/questions/7750448/what-are-dex-files-in-android#7750547\" class=\"uri\">https://stackoverflow.com/questions/7750448/what-are-dex-files-in-android#7750547</a></li>\r\n<li><a href=\"https://www.zscaler.com/blogs/security-research/joker-playing-hide-and-seek-google-play\" class=\"uri\">https://www.zscaler.com/blogs/security-research/joker-playing-hide-and-seek-google-play</a></li>\r\n<li><a href=\"https://blog.sucuri.net/2020/08/string-concatenation-obfuscation-techniques.html\" class=\"uri\">https://blog.sucuri.net/2020/08/string-concatenation-obfuscation-techniques.html</a></li>\r\n<li><a href=\"https://www.anquanke.com/post/id/211978\" class=\"uri\">https://www.anquanke.com/post/id/211978</a></li>\r\n<li><a href=\"https://www.zscaler.com/blogs/security-research/joker-playing-hide-and-seek-google-play\" class=\"uri\">https://www.zscaler.com/blogs/security-research/joker-playing-hide-and-seek-google-play</a></li>\r\n<li><a href=\"https://www.techrepublic.com/article/how-to-manage-app-permissions-in-android-11\" class=\"uri\">https://www.techrepublic.com/article/how-to-manage-app-permissions-in-android-11</a></li>\r\n<li><a href=\"https://arstechnica.com/information-technology/2020/09/joker-the-malware-that-signs-you-up-for-pricey-services-floods-android-markets/\" class=\"uri\">https://arstechnica.com/information-technology/2020/09/joker-the-malware-that-signs-you-up-for-pricey-services-floods-android-markets/</a></li>\r\n<li><a href=\"https://www.zwilnik.com/android-malware-alert\" class=\"uri\">https://www.zwilnik.com/android-malware-alert</a></li>\r\n</ul>\r\n',198,74,0,'CC-BY-SA','Android, malware',0,0,1),
(3370,'2021-07-02','More Free Images?',869,'We look at some more free photo sites to see if they are really free','<p>This tutorial adds to our discussion of freely usable photos by looking at a list compiled on the blog of a marketing site Twenty Over Ten. They gave us their top 15 sites, but can I recommend them unreservedly? Not necessarily, you have to dig into each one of them to get to the truth.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://blog.twentyoverten.com/10-best-sites-for-free-stock-photos/\" class=\"uri\">https://blog.twentyoverten.com/10-best-sites-for-free-stock-photos/</a></li>\r\n<li><a href=\"https://unsplash.com/\" class=\"uri\">https://unsplash.com/</a></li>\r\n<li><a href=\"https://unsplash.com/license\" class=\"uri\">https://unsplash.com/license</a></li>\r\n<li><a href=\"https://pixabay.com/\" class=\"uri\">https://pixabay.com/</a></li>\r\n<li><a href=\"https://www.pexels.com/\" class=\"uri\">https://www.pexels.com/</a></li>\r\n<li><a href=\"https://kaboompics.com/\" class=\"uri\">https://kaboompics.com/</a></li>\r\n<li><a href=\"https://shutteroo.com/\" class=\"uri\">https://shutteroo.com/</a></li>\r\n<li><a href=\"https://negativespace.co/\" class=\"uri\">https://negativespace.co/</a></li>\r\n<li><a href=\"https://fancycrave.com/\" class=\"uri\">https://fancycrave.com/</a></li>\r\n<li><a href=\"https://burst.shopify.com/\" class=\"uri\">https://burst.shopify.com/</a></li>\r\n<li><a href=\"https://burst.shopify.com/licenses/shopify-some-rights-reserved\" class=\"uri\">https://burst.shopify.com/licenses/shopify-some-rights-reserved</a></li>\r\n<li><a href=\"https://picjumbo.com/\" class=\"uri\">https://picjumbo.com/</a></li>\r\n<li><a href=\"https://freerangestock.com/#\" class=\"uri\">https://freerangestock.com/#</a></li>\r\n<li><a href=\"https://www.equalicense.com\" class=\"uri\">https://www.equalicense.com</a></li>\r\n<li><a href=\"https://libreshot.com/\" class=\"uri\">https://libreshot.com/</a></li>\r\n<li><a href=\"https://libreshot.com/license-information/\" class=\"uri\">https://libreshot.com/license-information/</a></li>\r\n<li><a href=\"https://www.nappy.co/\" class=\"uri\">https://www.nappy.co/</a></li>\r\n<li><a href=\"https://www.nappy.co/license\" class=\"uri\">https://www.nappy.co/license</a></li>\r\n<li><a href=\"https://stocksnap.io/\" class=\"uri\">https://stocksnap.io/</a></li>\r\n<li><a href=\"https://stocksnap.io/license\" class=\"uri\">https://stocksnap.io/license</a></li>\r\n<li><a href=\"https://www.splitshire.com/\" class=\"uri\">https://www.splitshire.com/</a></li>\r\n<li><a href=\"https://www.lifeofpix.com/\" class=\"uri\">https://www.lifeofpix.com/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/more-free-image-sites/\" class=\"uri\">https://www.ahuka.com/gimp/more-free-image-sites/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','Stock Photos, Creative Commons, Free Photos',0,0,1),
(3380,'2021-07-16','Building a Better Goodreads with ActivityPub',698,'This episode looks at the popular application Goodreads to see if it can be done better.','<p>Federated social media can open up some wonderful possibilities to reimagine some of the social apps we already use and find ways to do them better. In this episode I want to highlight a talk that aimed at such a reimagining involving an app I already use, Goodreads. My main use of it is to manage my book library, but it also involves a social aspect where you can be friends with people and share book reviews, recommendations, and so on. So seeing how this can be done differently with ActivityPub was very interesting to me.</p>\r\n<h3 id=\"links\">Links:</h3>\r\n<ul>\r\n<li><a href=\"https://conf.tube/videos/watch/c42604a8-d71d-4bd0-8081-d2c77210f206\" class=\"uri\">https://conf.tube/videos/watch/c42604a8-d71d-4bd0-8081-d2c77210f206</a></li>\r\n<li><a href=\"https://www.goodreads.com/\" class=\"uri\">https://www.goodreads.com/</a></li>\r\n<li><a href=\"https://www.palain.com/im-learning-spanish/\" class=\"uri\">https://www.palain.com/im-learning-spanish/</a></li>\r\n<li><a href=\"https://learnawesome.org/\" class=\"uri\">https://learnawesome.org/</a></li>\r\n<li><a href=\"https://github.com/learn-awesome\" class=\"uri\">https://github.com/learn-awesome</a></li>\r\n<li><a href=\"https://www.zwilnik.com/better-social-media/activitypub-conference-2020/activitypub-conference-2020-nilesh-trivedi/\" class=\"uri\">https://www.zwilnik.com/better-social-media/activitypub-conference-2020/activitypub-conference-2020-nilesh-trivedi/</a></li>\r\n</ul>\r\n',198,108,0,'CC-BY-SA','social media, alternative, Fediverse, ActivityPub, Goodreads, library',0,0,1),
(3248,'2021-01-13','SARS-CoV-2 detection by PCR explanation',1464,'This episode summarizes the process to detect the virus that causes COVID-19 by PCR','<h2 id=\"basic-process\">Basic Process</h2>\r\n<ol>\r\n<li>Sample Collection</li>\r\n<li>Sample Transportation</li>\r\n<li>Nucleic Acid extraction and Purification</li>\r\n<li>Amplification and Detection</li>\r\n</ol>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Polymerase_chain_reaction\">https://en.wikipedia.org/wiki/Polymerase_chain_reaction</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Coronavirus\">https://en.wikipedia.org/wiki/Coronavirus</a></li>\r\n<li><a href=\"https://www.k-state.edu/hermanlab/protocols/StandardPCRConditions.html\">https://www.k-state.edu/hermanlab/protocols/StandardPCRConditions.html</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/RNA\">https://en.wikipedia.org/wiki/RNA</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/DNA\">https://en.wikipedia.org/wiki/DNA</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Thermus_aquaticus\">https://en.wikipedia.org/wiki/Thermus_aquaticus</a></li>\r\n</ul>\r\n',300,100,0,'CC-BY-SA','PCR,COVID019',0,0,1),
(3252,'2021-01-19','Simple JSON querying tool (also YAML, and to a lesser extent XML)',1137,'crvs talks about jq, yq and xq','<h1 id=\"json\">JSON</h1>\r\n<p>Json is a cool little data serialization language, that allows you to easily and clearly demarcate blocks of data by nesting data structures such as lists (enclosed by square brackets) and key-value pairs or \"dictionaries\" (enclosed by curly braces). So that in the end you get something that looks like this</p>\r\n<pre><code>{\r\n&quot;first list&quot; : [ &quot;element1&quot;, &quot;element2&quot;, {&quot;element3&quot; : &quot;is another k-v pair&quot;, &quot;but contains&quot; : [&quot;a&quot; , &quot;list&quot;, &quot;of&quot;, &quot;words&quot;]}] ,\r\n&quot;this value is a string&quot; : &quot;1&quot; ,\r\n&quot;and this is a number&quot; : 23 ,\r\n&quot;and floating point&quot; :  1.413\r\n}</code></pre>\r\n<p>Aside from:</p>\r\n<ul>\r\n<li>Lists are enclosed in [] and each element is separated by ,</li>\r\n<li>Key-value pair lists are enclosed in {} and have the key and value separated by : and each pair is separated by ,</li>\r\n<li>Keys have to strings quoted with double quotes</li>\r\n<li>Numbers may be left unquoted (but just in value fields)</li>\r\n</ul>\r\n<p>There are no restrictions to what you can do with JSON. Given how explicit the syntax is then, it makes for very easy parsing, and there are plenty of good parser out there. <a href=\"https://stedolan.github.io/jq/\">My favourite JSON parser is jq(1)</a>.</p>\r\n<p>A canonical representation of the JSON example above can easily be obtained with jq by simply calling <code>jq \'\' file.json</code> (or piping the file through stdin, or even putting the contents properly quoted as the second argument).</p>\r\n<pre><code>{\r\n  &quot;first list&quot;: [\r\n    &quot;element1&quot;,\r\n    &quot;element2&quot;,\r\n    {\r\n      &quot;element3&quot;: &quot;is another k-v pair&quot;,\r\n      &quot;but contains&quot;: [\r\n        &quot;a&quot;,\r\n        &quot;list&quot;,\r\n        &quot;of&quot;,\r\n        &quot;words&quot;\r\n      ]\r\n    }\r\n  ],\r\n  &quot;this value is a string&quot;: &quot;1&quot;,\r\n  &quot;and this is a number&quot;: 23,\r\n  &quot;and floating point&quot;: 1.413\r\n}</code></pre>\r\n<p>You can also use jq in a shell script to obtain, for example the second element of the first list:</p>\r\n<pre><code>$ jq &#39;.&quot;first list&quot;[1]&#39; example.json\r\n&quot;element2&quot;</code></pre>\r\n<p>So to get the value associated to a key you use the notation <code>.key</code> and to get the k-th element you use the notation <code>[k-1]</code>. To remove the quotes on the string you can use the <code>-r</code> flag which stands for raw output.</p>\r\n<p><code>jq(1)</code> also gives you a few more functionalities that can be useful like getting the number of elements in a list with the length function.</p>\r\n<pre><code>$ jq &#39;length&#39;  example.json\r\n3\r\n$ jq &#39;.&quot;first list&quot;[2].&quot;but contains&quot; | length&#39;\r\n4</code></pre>\r\n<p>Another useful feature is getting the list of keys from a key-value pair list which can be done with the function <code>keys</code></p>\r\n<pre><code>$ jq &#39;.&quot;first list&quot;[2] | keys[]&#39; example.json\r\n&quot;but contains&quot;,\r\n&quot;element3&quot;</code></pre>\r\n<p>The query language is much much more flexible than this, but for most cases this should be enough for simple configuration querying.</p>\r\n<h1 id=\"yaml-and-xml\">YAML and XML??</h1>\r\n<p><a href=\"https://pypi.org/project/yq/\">The yq project</a> allows one to use the exact same syntax as jq to query, and emit (and therefore also transcode) yaml and XML, extending the usefulness of the query language.</p>\r\n<p>So for example looking at the previous file through <code>yq</code> gives:</p>\r\n<pre><code>$ yq -y &#39;&#39; example.json\r\nfirst list:\r\n  - element1\r\n  - element2\r\n  - element3: is another k-v pair\r\n    but contains:\r\n      - a\r\n      - list\r\n      - of\r\n      - words\r\nthis value is a string: &#39;1&#39;\r\nand this is a number: 23\r\nand floating point: 1.413</code></pre>\r\n<p>And the output of this can be of course queried with <code>yq</code> itself, or can be used to feed into whatever application requires a yaml input (I guess it lacks the triple dash at the top, but that is actually the only warning I get from passing that abomination to yamllint)</p>\r\n<p>Similarly <code>xq</code> can be used to query XML files with the same language. However, to emit these files from json you need to use <code>yq -x</code> like so:</p>\r\n<pre><code>$ yq -x &#39;&#39; example2.json\r\n&lt;file&gt;\r\n  &lt;first_list&gt;element1&lt;/first_list&gt;\r\n  &lt;first_list&gt;element2&lt;/first_list&gt;\r\n  &lt;first_list&gt;\r\n    &lt;element3&gt;is another k-v pair&lt;/element3&gt;\r\n    &lt;but_contains&gt;a&lt;/but_contains&gt;\r\n    &lt;but_contains&gt;list&lt;/but_contains&gt;\r\n    &lt;but_contains&gt;of&lt;/but_contains&gt;\r\n    &lt;but_contains&gt;words&lt;/but_contains&gt;\r\n  &lt;/first_list&gt;\r\n  &lt;this_value_is_a_string&gt;1&lt;/this_value_is_a_string&gt;\r\n  &lt;and_this_is_a_number&gt;23&lt;/and_this_is_a_number&gt;\r\n  &lt;and_floating_point&gt;1.413&lt;/and_floating_point&gt;\r\n&lt;/file&gt;</code></pre>\r\n<p>where the original (modified) file <code>example2.json</code> looks like:</p>\r\n<pre><code>{\r\n    &quot;file&quot;:\r\n    {\r\n      &quot;first_list&quot;: [\r\n        &quot;element1&quot;,\r\n        &quot;element2&quot;,\r\n        {\r\n          &quot;element3&quot;: &quot;is another k-v pair&quot;,\r\n          &quot;but_contains&quot;: [\r\n            &quot;a&quot;,\r\n            &quot;list&quot;,\r\n            &quot;of&quot;,\r\n            &quot;words&quot;\r\n          ]\r\n        }\r\n      ],\r\n      &quot;this_value_is_a_string&quot;: &quot;1&quot;,\r\n      &quot;and_this_is_a_number&quot;: 23,\r\n      &quot;and_floating_point&quot;: 1.413\r\n    }\r\n}</code></pre>\r\n<p>So that the root dictionary has a single key-value pair and all the keys have no spaces in them (so that they can be made into xml tags).</p>\r\n',385,0,1,'CC-BY-SA','json, yaml, xml, query',0,0,1),
(3253,'2021-01-20','Pandas Intro',1241,'Enigma introduces one of his favorite python modules pandas','<p>\r\nWelcome to another episode of HPR I\'m your host Enigma and today we are going to be talking\r\nabout one of my favorite python modules Pandas <br>\r\nThis will be the first episode in a series I\'m naming: For The Love of Python. <br>\r\n<br>\r\nFirst we need to get the module <br>\r\npip or pip3 install pandas <br>\r\nThis will install numpy as well <br>\r\nPandas uses an object called a dataframe which is a two-dimensional data structure, <br>\r\ni.e., data is aligned in a tabular fashion in rows and columns. Think of a spreadsheet type object in memory\r\n<br> <br>\r\nToday we are going to talk about: <br>\r\n<b>1) Importing data from various sources</b><br>\r\nCsv, excel, sql. More advance topics like Json covered in another episode. <br>\r\ndf = pd.read_csv(\'file name\') <br>\r\n<br>\r\n<b>2) Accessing data by column names or positionally </b> <br>\r\nprint(df.head(5)) # print all columns only first 5 rows <br>\r\nprint(df.tail(5)) # print all columns only last 5 rows <br>\r\nprint(df.shape) # print number of rows and columns in dataframe <br>\r\nprint(df.columns) print column names <br>\r\nprint(df[0:1].head(5)) print first two columns first 5 values by column position <br>\r\nprint(df[\'field1].head(5)) print same column first five values by column name <br>\r\n<br>\r\n<b>3) Setting column types. </b> <br>\r\ndf[\'FieldName\'] = df[\'FieldName\'].astype(int) # sets column as interger <br>\r\ndf[\'FieldName\'] = df[\'FieldName\'].astype(str) # sets column to string <br>\r\ndf[\'DateColumn\'] = pd.to_datetime(df[\'DateColumn\']) # sets column to Datetime <br>\r\n<br>\r\n<br>\r\n<b>4) Some basic filtering/manipulation of data. </b><br>\r\nSplits string at the @ for one split next two lines create 2 columns that use the pieces. <br>\r\nnew = df2[\"Email\"].str.split(\"@\", n = 1, expand = True) <br>\r\ndf2[\"user\"]= new[0] <br>\r\ndf2[\"domain\"]= new[1] <br>\r\n<br>\r\ndf[\'col\'] = df[\'Office\'].str[:3] # creates a new column grabing the first 3 positions of Office column <br>\r\ndf = df[df[\'FieldName\'] != 0] # Only keep rows that have a FieldName value not equal to zero <br>\r\n<br>\r\nSee example code that you can run at: <br>\r\n<a href = \'https://github.com/eth0enigma/PandasExample\'> Pandas Working example </a>\r\n</p>',39,38,0,'CC-BY-SA','python, data analytics, data science',0,0,1),
(3256,'2021-01-25','Update, MS Teams, Covid 19, Raspberry PI 400 Raspberry PI 4 8GB Centos',539,'Hey guys just a short update, whats going with Centos?  Raspberry PI 400 Good buy','<p>Hey guys I have been doing a lot of MS Teams it works on Linux not so I can have 365 on my ubuntu browser and MS teams installed. (Work complete from a linux box) (It\'s great) The Raspberry PI400 is a great box you should get it. Also I thought the Raspberry 4 8GB to be very solid.</p>\r\n',129,0,0,'CC-BY-SA','Centos, Oracle linux, MS Teams, Covid, Raspberry, PI 400',0,0,1),
(3257,'2021-01-26','Lack of diversity in Linux and other open source communities',714,'I consider some reasons that there is a lack of diversity when it comes to open source communities. ','<ol type=\"1\">\r\n<li>Why is there a lack of diverse voices and faces in the world of Linux and open source</li>\r\n<li>Free software but it\'s not made available to the very people who could really benefit from it</li>\r\n<li>Lack of training in schools when it comes to Linux and other open source software</li>\r\n</ol>',297,0,0,'CC-BY-SA','linux, race, podcast',0,0,1),
(3259,'2021-01-28','Nextcloud - The easy way',482,'Self hosting a Nextcloud instance.','<p><a href=\"https://peyanski.com/personal-cloud-from-home-nextcloud-on-raspberry-pi/#Nextcloud_initial_setup\" class=\"uri\">https://peyanski.com/personal-cloud-from-home-nextcloud-on-raspberry-pi/#Nextcloud_initial_setup</a></p>\r\n<pre><code>sudo apt-get update &amp;&amp; sudo apt-get upgrade -y</code></pre>\r\n<p>Start the Nextcloud on Raspberry Pi installation with the following script.</p>\r\n<pre><code>curl -sSL https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh | sudo bash</code></pre>\r\n<p>Github script content</p>\r\n<p><a href=\"https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh\" class=\"uri\">https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh</a></p>\r\n<pre><code>\r\n#!/bin/bash\r\n\r\n# NextCloudPi installation script\r\n#\r\n# Copyleft 2017 by Ignacio Nunez Hernanz &lt;nacho _a_t_ ownyourbits _d_o_t_ com&gt;\r\n# GPL licensed (see end of file) * Use at your own risk!\r\n#\r\n# Usage: ./install.sh\r\n#\r\n# more details at https://ownyourbits.com\r\n\r\nBRANCH=master\r\n#DBG=x\r\n\r\nset -e$DBG\r\n\r\nTMPDIR=&quot;$(mktemp -d /tmp/nextcloudpi.XXXXXX || (echo &quot;Failed to create temp dir.\r\nExiting&quot; &gt;&amp;2 ; exit 1) )&quot;\r\ntrap &quot;rm -rf &quot;${TMPDIR}&quot; ; exit 0&quot; 0 1 2 3 15\r\n\r\n[[ ${EUID} -ne 0 ]] &amp;&amp; {\r\n  printf &quot;Must be run as root. Try &#39;sudo $0&#39;n&quot;\r\n  exit 1\r\n}\r\n\r\nexport PATH=&quot;/usr/local/sbin:/usr/sbin:/sbin:${PATH}&quot;\r\n\r\n# check installed software\r\ntype mysqld  &amp;&gt;/dev/null &amp;&amp; echo &quot;&gt;&gt;&gt; WARNING: existing mysqld configuration\r\nwill be changed &lt;&lt;&lt;&quot;\r\n\r\n# get install code\r\necho &quot;Getting build code...&quot;\r\napt-get update\r\napt-get install --no-install-recommends -y wget ca-certificates sudo lsb-release\r\n\r\npushd &quot;$TMPDIR&quot;\r\nwget -qO- --content-disposition\r\nhttps://github.com/nextcloud/nextcloudpi/archive/&quot;$BRANCH&quot;/latest.tar.gz\r\n  | tar -xz\r\n  || exit 1\r\ncd - &amp;&amp; cd &quot;$TMPDIR&quot;/nextcloudpi-&quot;$BRANCH&quot;\r\n\r\n# install NCP\r\necho -e &quot;nInstalling NextCloudPi...&quot;\r\nsource etc/library.sh\r\n\r\n# check distro\r\ncheck_distro etc/ncp.cfg || {\r\n  echo &quot;ERROR: distro not supported:&quot;;\r\n  cat /etc/issue\r\n  exit 1;\r\n}\r\n\r\n\r\nmkdir -p /usr/local/etc/ncp-config.d/\r\ncp etc/ncp-config.d/nc-nextcloud.cfg /usr/local/etc/ncp-config.d/\r\ncp etc/library.sh /usr/local/etc/\r\ncp etc/ncp.cfg /usr/local/etc/\r\n\r\ninstall_app    lamp.sh\r\ninstall_app    bin/ncp/CONFIG/nc-nextcloud.sh\r\nrun_app_unsafe bin/ncp/CONFIG/nc-nextcloud.sh\r\nsystemctl restart mysqld # TODO this shouldn&#39;t be necessary, but somehow it&#39;s\r\nneeded in Debian 9.6. Fixme\r\ninstall_app    ncp.sh\r\nrun_app_unsafe bin/ncp/CONFIG/nc-init.sh\r\nbash /usr/local/bin/ncp-provisioning.sh\r\n\r\npopd\r\n\r\nIFACE=&quot;$( ip r | grep &quot;default via&quot; | awk &#39;{ print $5 }&#39; | head -1 )&quot;\r\nIP=&quot;$( ip a show dev &quot;$IFACE&quot; | grep global | grep -oP &#39;d{1,3}(.d{1,3}){3}&#39; |\r\nhead -1 )&quot;\r\n\r\necho &quot;Done.\r\n\r\nFirst: Visit https://$IP/  https://nextcloudpi.local/ (also\r\nhttps://nextcloudpi.lan/ or https://nextcloudpi/ on windows and mac)\r\nto activate your instance of NC, and save the auto generated passwords. You may\r\nreview or reset them\r\nanytime by using nc-admin and nc-passwd.\r\nSecond: Type &#39;sudo ncp-config&#39; to further configure NCP, or access ncp-web on\r\nhttps://$IP:4443/\r\nNote: You will have to add an exception, to bypass your browser warning when you\r\nfirst load the activation and :4443 pages. You can run letsencrypt to get rid of\r\nthe warning if you have a (sub)domain available.\r\n&quot;\r\n\r\nexit 0\r\n\r\n# License\r\n#\r\n# This script is free software; you can redistribute it and/or modify it\r\n# under the terms of the GNU General Public License as published by\r\n# the Free Software Foundation; either version 2 of the License, or\r\n# (at your option) any later version.\r\n#\r\n# This script is distributed in the hope that it will be useful,\r\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n# GNU General Public License for more details.\r\n#\r\n# You should have received a copy of the GNU General Public License\r\n# along with this script; if not, write to the\r\n# Free Software Foundation, Inc., 59 Temple Place, Suite 330,\r\n# Boston, MA  02111-1307  USA\r\n</code></pre>\r\n<p>DuckDNS</p>\r\n<p><a href=\"https://www.duckdns.org\" class=\"uri\">https://www.duckdns.org</a></p>\r\n<p>Enter trusted domain</p>\r\n<p><em>NextCloudPi panel</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_005.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_005_thumbnail.png\" alt=\"NextCloudPi panel\" /></a></p>\r\n<p><em>Trusted domain 1</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_007.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_007_thumbnail.png\" alt=\"Trusted domain 1\" /></a></p>\r\n<p><em>Trusted domain 2</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_008.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_008_thumbnail.png\" alt=\"Trusted domain 2\" /></a></p>\r\n<p>Certbot script</p>\r\n<pre><code>sudo apt install certbot python-certbot-apache -y\r\n\r\nsudo certbot --apache</code></pre>\r\n<p>Customization External storage support</p>\r\n<p>Apps &gt; Disabled Apps &gt; External Storage Support &gt; Enable</p>\r\n<p><em>Apps 1</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_001.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_001_thumbnail.png\" alt=\"Apps 1\" /></a></p>\r\n<p><em>Apps 2</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_002.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_002_thumbnail.png\" alt=\"Apps 2\" /></a></p>\r\n<p><em>Settings</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_006.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_006_thumbnail.png\" alt=\"Settings\" /></a></p>\r\n<p><em>External storage</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_004.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_004_thumbnail.png\" alt=\"External storage\" /></a></p>\r\n<p>Dark mode support</p>\r\n<p><em>Apps 3</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3259/img_003.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3259/img_003_thumbnail.png\" alt=\"Apps 3\" /></a></p>\r\n',318,0,0,'CC-BY-SA','self hosting, cloud, linux, raspberry pi',0,0,1),
(3254,'2021-01-21','The Markdown editor Retext',1494,'In this episode I cover the markdown editor ReText. I found this useful when creating show notes','<h2 id=\"what-is-retext\">What is ReText?</h2>\r\n<p>The <a href=\"https://github.com/retext-project/retext\">ReText website</a> on GitHub says that ReText is a simple but powerful editor for Markdown and reStructuredText markup languages.</p>\r\n<p>Doing a search on the HPR site returned the following two references to ReText.</p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=1832\">The excellent Markdown and Pandoc HPR 1832 episode by b-yeezi makes reference to ReText</a></p>\r\n<p><a href=\"https://hackerpublicradio.org/eps.php?id=3167\">Dave Morriss mentioned using ReText as a possible tool when sending in shownotes as markdown is preferable to plain text. Refer to HPR 3167</a></p>\r\n<h2 id=\"retext-version-info\">Retext Version Info</h2>\r\n<p>As of the 1st of January 2021 I am running ReText version 7.0.1 the latest version was 7.1.0 this was last updated on the 4th of April 2020.</p>\r\n<h2 id=\"why-i-am-covering-this\">Why I am covering this</h2>\r\n<p>I’m covering this because in HPR show 3167 Dave Morriss said that Markdown was a preferred way to submit shownotes. Prior to this I had supplied my shownotes in plain text.</p>\r\n<h2 id=\"what-is-markdown\">What is Markdown?</h2>\r\n<p>I guess I first must cover what markdown is I found the following definitions:-</p>\r\n<p><a href=\"https://daringfireball.net/projects/markdown/\">Description of Markdown from Wikipedia</a></p>\r\n<p>Markdown is a lightweight markup language for creating formatted text using a plain-text editor. John Gruber and Aaron Swartz created Markdown in 2004 as a markup language that is appealing to the human users in its source form.[9] Markdown is widely used in blogging, instant messaging, online forums, collaboration software, documentation pages, and even readme files Link <a href=\"https://en.wikipedia.org/wiki/Markdown\">https://en.wikipedia.org/wiki/Markdown</a></p>\r\n<p><a href=\"https://daringfireball.net/projects/markdown/\">Description of Markdown from John Gruber\'s website, one of the co founders of Markdown.</a></p>\r\n<p>Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).</p>\r\n<h2 id=\"example-text-used-in-the-show-and-how-it-looks\">Example text used in the show and how it looks</h2>\r\n<pre><code># This is a level 1 heading\r\n\r\n## This is a level 2 heading\r\n\r\n### This is a level 3 heading\r\n</code></pre>\r\n<h1 id=\"this-is-a-level-1-heading\">This is a level 1 heading</h1>\r\n<h2 id=\"this-is-a-level-2-heading\">This is a level 2 heading</h2>\r\n<h3 id=\"this-is-a-level-3-heading\">This is a level 3 heading</h3>\r\n<h2 id=\"list-of-useful-links\">List of useful links</h2>\r\n<p>Finally here are useful links that are available from within the ReText program. They can be found within the Help / About ReText menu:-</p>\r\n<p><a href=\"https://github.com/retext-project/retext\">Link to ReText website</a></p>\r\n<p><a href=\"https://daringfireball.net/projects/markdown/syntax#precode\">Link to Markdown syntax</a></p>\r\n<p><a href=\"https://docutils.sourceforge.io/docs/user/rst/quickref.html\">Link to reStructuredText syntax</a></p>\r\n<h2 id=\"final-thoughts\">Final thoughts</h2>\r\n<ul>\r\n<li><p>Using ReText to pull these shownotes together disciplined me to hopefully put more meaningful titles within my shownotes.</p></li>\r\n<li><p>It helped my to create meaningful descriptive links which will hopefully help accessibility for the visually impaired.</p></li>\r\n<li><p>I edited the text on this occasion in live preview mode I found this made it very easy to see how the final version would look.</p></li>\r\n<li><p>I think I ended up with more polished shownotes that hopefully needs fewer and hopefully no input from our band of HPR volunteers working behind the scenes.</p></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Markdown, HPR, shownotes',0,0,1),
(3265,'2021-02-05','My Chromebook Experience',525,'Adding my own perspective to the Chromebook discussion','<p>On January 5, 2021, Zen_Floater2 did an interesting show that you might call a virtual conversation with Klaatu. He took a show that Klaatu had done on the GNU World Order podcast about using Chromebooks, and interspersed his own comments. As I was listening I thought that I had a slightly different perspective, so I recorded this brief show about my own experience.</p>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3242\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=3242</a></li>\r\n<li><a href=\"https://www.amazon.com/gp/product/B075S8YS87/\" class=\"uri\">https://www.amazon.com/gp/product/B075S8YS87/</a></li>\r\n<li><a href=\"https://www.palain.com/my-chromebook-experience/\" class=\"uri\">https://www.palain.com/my-chromebook-experience/</a></li>\r\n</ul>\r\n',198,0,0,'CC-BY-SA','Chromebooks',0,0,1),
(3258,'2021-01-27','Linux Inlaws S01E22: The Linux Professional Institute',4129,'The chaps host Evan Leibovitch from the LPI','<ul>\r\n<li>Linux Professional Institute: <a href=\"https://www.lpi.org\" target=\"_blank\">https://www.lpi.org</a></li>\r\n<li>Kali Linux: <a href=\"https://www.kali.org\" target=\"_blank\">https://www.kali.org</a></li>\r\n<li>Anti-pox of the week (Java is broken): <a href=\"https://stackoverflow.com/questions/2210720/how-to-analyse-a-noclassdeffounderror-caused-by-an-ignored-exceptionininitialize\" target=\"_blank\">https://stackoverflow.com/questions/2210720/how-to-analyse-a-noclassdeffounderror-caused-by-an-ignored-exceptionininitialize</a></li>\r\n<li>Book of Monsters: <a href=\"https://www.imdb.com/title/tt7260818\" target=\"_blank\">https://www.imdb.com/title/tt7260818</a></li>\r\n<li>Tucker and Dale vs. Evil: <a href=\"https://www.imdb.com/title/tt1465522\" target=\"_blank\">https://www.imdb.com/title/tt1465522</a></li>\r\n<li>The serpent (BBC series): <a href=\"https://en.wikipedia.org/wiki/The_Serpent_(TV_series)\" target=\"_blank\">https://en.wikipedia.org/wiki/The_Serpent_(TV_series)</a></li>\r\n<li>Grumpy Old Coders (epside 6): <a href=\"https://soundcloud.com/user-498377588/grumpy-old-coders-ep-6-retrospective\" target=\"_blank\">https://soundcloud.com/user-498377588/grumpy-old-coders-ep-6-retrospective</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Java screw-up, Linux Professional Institute, Zombies, Grumpies',0,0,1),
(3262,'2021-02-02','My thoughts on diversity in Linux and open source',2010,'I give some of my background story and certain frustrations I have experienced in life','<ol type=\"1\">\r\n<li>Lack of exposure to Linux and open source</li>\r\n<li>Lack of interest in Linux and open source</li>\r\n<li>Some experiences I had growing up</li>\r\n</ol>',297,0,0,'CC-BY-SA','linux, race, podcast, irc, telegram, technology, culture',0,0,1),
(3263,'2021-02-03','My Beginnings in Tech',1157,'Rambling about how I got in to technology and linux.','<p>Hiya! There aren\'t any links or anything to put here, but putting something in the show notes seems important.</p>',390,0,1,'CC-BY-SA','Introduction, Linux, First Show',0,0,1),
(3264,'2021-02-04','Intro to Nagios',1200,'Introduce some nagios basics and walk through setting up nagios on Ubuntu','<h1 id=\"nagios-basics\">Nagios Basics</h1>\r\n<h2 id=\"introduction\">Introduction</h2>\r\n<p>I noticed nagios on the requested topics page. I am far from being an expert with nagios and there is a lot I do not know. I have a working knowledge of most of the basic nagios principles. So, hopefully, I can give a useful introduction and review some one the principles of nagios along the way</p>\r\n<p>Nagios is a network monitoring tool. You define some things for nagios to check, and nagios will alert you if those checks fail.</p>\r\n<p>Nagios has a web UI that is normally used to see the status of the checks. There are some basic administration tasks you can do from the web UI</p>\r\n<ul>\r\n<li>enabling/disabling notifications</li>\r\n<li>Scheduling Downtime</li>\r\n<li>Forcing immediate checks</li>\r\n</ul>\r\n<p>Nagios is primarily configured with text files. You have to edit the nagios config files for things like</p>\r\n<ul>\r\n<li>adding servers</li>\r\n<li>customizing commands</li>\r\n</ul>\r\n<h2 id=\"nagios-core-vs-nagiosxi\">Nagios core vs NagiosXI</h2>\r\n<p>NagiosXI is the commercial version of nagios. NagiosXI requires a paid license and includes support. NagiosXI has some extra features including wizards for adding hosts and easy cloning of hosts.</p>\r\n<p>I have used NagiosXI, and personally don\'t find the extra features very useful. Probably the biggest reason to use NagiosXI is Enterprise that requires commercial support</p>\r\n<p>The <code>community</code> version of nagios is normally referred to as <code>nagios core</code> This episode will focus on the nagios core</p>\r\n<h2 id=\"nagios-documentation\">Nagios Documentation</h2>\r\n<p>I don\'t like the official nagios core documentation. A lot like man pages, It is a good reference, but can be hard to follow.</p>\r\n<p>Maybe is it possible for someone to read the documentation and be able to install and configure nagios for the first time. But it took me a lot of trial and error to get a functional nagios server following the nagios documentation</p>\r\n<p>Outside of the official documentation, Most of the nagios installation guides I found online recommend downloading and building nagios from the nagios site. My general policy is to use OS provided packages whenever possible. Normally, sticking to packages eases long the term maintenance.</p>\r\n<p>You may not always get the latest feature release, but installation and updates are usually easier. I know not everyone will agree with me here, and will want to build the latest version. Regardless of the install method, most of the nagios principles I go over will still apply</p>\r\n<p>I am making the assumption that most listeners will be most familiar with Debian/Ubuntu, so I will go over installing nagios on Ubuntu using the nagios packages from the Ubuntu repository</p>\r\n<h2 id=\"hosts-and-services\">Hosts and Services</h2>\r\n<p>Before I go over the installation, I\'ll talk a bit about some of the pieces that make up nagios Nagios checks are for either hosts or services.</p>\r\n<p>From the Nagios documentation</p>\r\n<blockquote>\r\n<p>A host definition is used to define a physical server, workstation, device, etc. that resides on your network.</p>\r\n</blockquote>\r\n<p>Also from the nagios documentation</p>\r\n<blockquote>\r\n<p>A service definition is used to identify a \"service\" that runs on a host. The term \"service\" is used very loosely. It can mean an actual service that runs on the host (POP, SMTP, HTTP, etc.) or some other type of metric associated with the host</p>\r\n</blockquote>\r\n<p>Normally, hosts are checked using ping. If the host responds to the ping with in the specified time frame, the host is considered up. Once a host is defined and determined to be UP, you can optionally check services on that host</p>\r\n<h2 id=\"installation-and-setup\">Installation and setup</h2>\r\n<p>Install the packages</p>\r\n<pre><code>apt install nagios4</code></pre>\r\n<p>One of the dependencies is the monitoring-plugins I\'ll talk more about the monitoring-plugins package when we dig in to the checks</p>\r\n<p>The primary UI for nagios is a cgi driven web app usually served via apache. Following the nagios4 installation, the web UI isn\'t functional. So we need to make a few configuration changes</p>\r\n<p>The nagios config file for apache contains a directive that is not enabled by default</p>\r\n<p>Enable 2 Apache modules</p>\r\n<pre><code>a2enmod authz_groupfile\r\na2enmod auth_digest\r\nsystemctl restart apache2</code></pre>\r\n<h2 id=\"nagios-authentication\">Nagios authentication</h2>\r\n<h3 id=\"enable-users-in-the-nagios-ui\">Enable users in the nagios UI</h3>\r\n<p>In <code>/etc/nagios4/cgi.cfg</code> change the line</p>\r\n<pre><code>&#39;use_authentication=0&#39;</code></pre>\r\n<p>to</p>\r\n<pre><code>&#39;use_authentication=1&#39;</code></pre>\r\n<h3 id=\"modify-apache\">Modify Apache</h3>\r\n<p>In <code>/etc/apache2/conf-enabled/nagios4-cgi.conf</code> change</p>\r\n<pre><code>Require all granted</code></pre>\r\n<p>to</p>\r\n<pre><code>Require valid-user</code></pre>\r\n<p>And if needed, remove the IP restriction by removing the line that starts with</p>\r\n<pre><code>Require ip</code></pre>\r\n<p>And finally we need to add a nagios basic auth user. I normally use <code>nagiosadmin</code>, but it can be any username</p>\r\n<pre><code>htdigest  -c /etc/nagios4/htdigest.users Nagios4 nagiosadmin</code></pre>\r\n<h4 id=\"restarts\">Restarts</h4>\r\n<p>Restart apache and nagios and the nagios UI will be fully functional</p>\r\n<h2 id=\"check-commands\">Check commands</h2>\r\n<p>Nagios uses a collection of small standalone executables to perform the checks. Checks are either OK, Warning, or Critical, depending on the exit code of the check.</p>\r\n<table>\r\n<thead>\r\n<tr class=\"header\">\r\n<th style=\"text-align: center;\">Exit Code</th>\r\n<th>Status</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr class=\"odd\">\r\n<td style=\"text-align: center;\">0</td>\r\n<td>OK/UP</td>\r\n</tr>\r\n<tr class=\"even\">\r\n<td style=\"text-align: center;\">1</td>\r\n<td>WARNING</td>\r\n</tr>\r\n<tr class=\"odd\">\r\n<td style=\"text-align: center;\">2</td>\r\n<td>CRITICAL</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>The check commands are standalone applications that can be run independent from nagios. Running the checks from the shell is helpful to better understand how the nagios checks work. The location of the check commands can vary depending on how nagios was packaged. In this case, they are in <code>/usr/lib/nagios/plugins</code></p>\r\n<p>Looking at the names on the files can give you an idea of their purpose. For example, it should be obvious what <code>check_http</code> and <code>check_icmp</code> are for.</p>\r\n<pre><code>cd /usr/lib/nagios/plugins\r\n$ ./check_icmp localhost\r\nOK - localhost: rta 0.096ms, lost 0%|rta=0.096ms;200.000;500.000;0; pl=0%;40;80;; rtmax=0.218ms;;;; rtmin=0.064ms;;;;\r\n$ ./check_http localhost\r\nHTTP OK: HTTP/1.1 200 OK - 10977 bytes in 0.005 second response time |time=0.004558s;;;0.000000;10.000000 size=10977B;;;0</code></pre>\r\n<p>Most checks can be run with <code>-h</code> to print usage help</p>\r\n<p>The checks can be in any language as long as is it is executable by the nagios server. Many are compiled C but Perl and shell scripts are also common</p>\r\n<pre><code>file check_icmp\r\ncheck_icmp: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=46badf6e4322515a70d5553c8018a20e1e9b8206, for GNU/Linux 3.2.0, stripped</code></pre>\r\n<h2 id=\"nagios-config-files\">Nagios config files</h2>\r\n<p>The primary nagios config file is <code>/etc/nagios4/nagios.cfg</code></p>\r\n<p>nagios.cfg has a directive that will load additional user generated files</p>\r\n<pre><code>cfg_dir=/etc/nagios4/conf.d</code></pre>\r\n<p>I like to put all my additions to nagios in this directory and use git for both version control and backup.</p>\r\n<h2 id=\"nagios-commands\">Nagios commands</h2>\r\n<p>Nagios doesn\'t run the check executable directly The checks have to be explicitly defined in as a command Some predefined commands are in <code>/etc/nagios4/objects/commands.cfg</code></p>\r\n<p>Debian package <code>monitoring-plugins-basic</code> contains several command definitions that are loaded by nagios.cfg <code>cfg_dir=/etc/nagios-plugins/config</code></p>\r\n<p>Lets look in the <code>/etc/nagios-plugins/config</code> at <code>ping.cfg</code> for an example of how commands are defined</p>\r\n<pre><code># &#39;check-host-alive&#39; command definition\r\ndefine command{\r\n    command_name    check-host-alive\r\n    command_line    /usr/lib/nagios/plugins/check_ping -H &#39;$HOSTADDRESS$&#39; -w 5000,100% -c 5000,100% -p 1\r\n    }</code></pre>\r\n<p>Commands require <code>command_name</code> and <code>command_line</code> The command line is that path to the executable that will perform the check and optional arguments. Most checks require <code>-H</code> for the host address to check The check-host-alive command also contains arguments to set the critical and warning thresholds with <code>-c</code> and <code>-w</code></p>\r\n<p>The check_ping command is similar the check-host-alive command except it requires 2 arguments to set the critical and warning thresholds.</p>\r\n<pre><code>define command{\r\n        command_name    check_ping\r\n        command_line    /usr/lib/nagios/plugins/check_ping -H &#39;$HOSTADDRESS$&#39; -w &#39;$ARG1$&#39; -c &#39;$ARG2$&#39;\r\n        }</code></pre>\r\n<h2 id=\"templates\">Templates</h2>\r\n<p>Hosts and services require a lot of reused variables. Object definitions normally use <strong>templates</strong> to avoid having to repetitively set the same variables on each host. Nagios normally ships with predefined templates for hosts and services that will work for most cases.</p>\r\n<p>In Ubuntu, the templates are defined in <code>/etc/nagios4/objects/templates.cfg</code>. Template definitions are the same as other object definitions, except they contain <code>register 0</code> which designates the object as a template. I\'ll show how the templates are used when I go over the host and service definitions.</p>\r\n<h2 id=\"notifications\">Notifications</h2>\r\n<p>By default, notifications are sent via email to nagios@localhost. The easiest way to get notifications is to configure the nagios server to forward emails to a monitored email address. Since many networks block sending email directly via SMTP, email forwarding may be challenging.</p>\r\n<p>In a follow up episode I will cover setting up postfix to relay mail through a mail sending service and maybe some other methods for sending alerts</p>\r\n<h2 id=\"localhost\">Localhost</h2>\r\n<p>By default, nagios is set to monitor localhost. Having the nagios server can be useful but you probably want to add some additional servers.</p>\r\n<p>Have a look at <code>/etc/nagios4/objects/localhost.cfg</code> if you want to see how the checks for localhost are defined</p>\r\n<h2 id=\"adding-a-new-host-to-monitor\">Adding a new host to monitor</h2>\r\n<p>We will use google.com as an example and create a file named <code>google.cfg</code> and place it in in the cfg_dir <code>/etc/nagios4/conf.d</code>.</p>\r\n<p>The files can be named anything that ends in <code>.cfg</code>. My preference is one file per host that contains all the checks for that host. The content of <code>google.cfg</code> is included new the end of the show notes.</p>\r\n<p>First, we need to define the host. <code>host_name</code> is the only field required to be set. The remaining requirements are met by using the <code>generic-host</code> template.</p>\r\n<p>We can add a service check to google.com using the same file. The easiest to add is a http check <code>host_name</code>, <code>service_description</code>, and <code>check_command</code> have to be set the remaining requirements are met by using the <code>generic-service</code> template.</p>\r\n<h2 id=\"restarting-nagios\">Restarting Nagios</h2>\r\n<p>Nagios has to be reloaded to pick up the configuration changes. Prior to restarting nagios, you can verify the nagios configuration is valid by running:</p>\r\n<pre><code>nagios4 -v /etc/nagios4/nagios.cfg</code></pre>\r\n<p>This will print a summary of the configuration. Any warnings or errors will be printed at the end.</p>\r\n<p>Warnings are not fatal, but should probably be looked at. Errors will keep nagios from restarting; if there are no errors, it is safe to restart nagios</p>\r\n<p>Check the nagios UI at <code>https://SERVER_IP/nagios4</code> and you should see 2 hosts, localhost and google.com as well as the service checks for the hosts</p>\r\n<h2 id=\"next-episode\">Next Episode</h2>\r\n<p>Since I have already made the mistake of mentioning a follow up episode, I know I am now committed to making additional episode, Next time I will try to cover some enhancements to nagios, including</p>\r\n<ul>\r\n<li>some notification options</li>\r\n<li>monitoring-plugins packages</li>\r\n<li>writing custom checks</li>\r\n<li>using SNMP to monitor load average and disk usage</li>\r\n</ul>\r\n<p>Leave a comment if there are other aspects of nagios you would like me to try to cover. No promises, but I will do my best.</p>\r\n<p><strong>Thanks for listening and I will see you next time.</strong></p>\r\n<h2 id=\"files\">Files</h2>\r\n<h3 id=\"playbook\">Playbook</h3>\r\n<pre><code>---\r\n- hosts: nagios\r\n  tasks:\r\n  - name: install nagios\r\n    apt:\r\n      name:\r\n        - nagios4\r\n      update_cache: yes\r\n\r\n  - name: Enable the Apache2 modules\r\n    command: a2enmod &quot;{{item}}&quot;\r\n    with_items:\r\n    - authz_groupfile\r\n    - auth_digest\r\n  - name: modify nagios cgi config to require user\r\n    replace:\r\n      path: /etc/nagios4/cgi.cfg\r\n      regexp: &#39;use_authentication=0&#39;\r\n      replace: &#39;use_authentication=1&#39;\r\n  - name: nagios require valid user\r\n    replace:\r\n      path: /etc/apache2/conf-enabled/nagios4-cgi.conf\r\n      regexp: &quot;Require all  granted&quot;\r\n      replace: &quot;Require valid-user&quot;\r\n  - name: remove IP restriction\r\n    lineinfile:\r\n      regexp: &quot;Require ip&quot;\r\n      path: /etc/apache2/conf-enabled/nagios4-cgi.conf\r\n      state: absent\r\n  - name: move auth requirements out of File restrictions\r\n    lineinfile:\r\n      path: /etc/apache2/conf-enabled/nagios4-cgi.conf\r\n      regexp: &#39;^s*&lt;/?Files&#39;\r\n      state: absent\r\n  - name: nagios user\r\n    copy:\r\n      dest: /etc/nagios4/htdigest.users\r\n      src: htdigest.users\r\n  - name: restart apache\r\n    service:\r\n      name: apache2\r\n      state: restarted\r\n  - name: copy nagios configs\r\n    copy:\r\n      src: &quot;{{item}}&quot;\r\n      dest: /etc/nagios4/conf.d\r\n    with_items:\r\n      - google.cfg\r\n  - name: restart nagios\r\n    service:\r\n      name: nagios4\r\n      state: restarted</code></pre>\r\n<h3 id=\"google.cfg\">google.cfg</h3>\r\n<pre><code>define host {\r\n  host_name google.com\r\n  use generic-host\r\n}\r\n\r\ndefine service {\r\n  use generic-service\r\n  host_name google.com\r\n  service_description HTTP\r\n  check_command check_http\r\n}</code></pre>\r\n<h3 id=\"htdigest.users\">htdigest.users</h3>\r\n<pre><code>nagiosadmin:Nagios4:85043cf96c7f3eb0884f378a8df04e4c</code></pre>\r\n',342,0,0,'CC-BY-SA','nagios, ubuntu',0,0,1),
(3267,'2021-02-09','Ripping Media 2021',1000,'I go over ripping webpage media','<ul>\r\n<li>android has newpipes for downloading youtube</li>\r\n<li>windows youtube-DL script:<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></li>\r\n</ul>\r\n<p>ffmpeg notes:</p>\r\n<ul>\r\n<li><p>I started out by wanting to download facebook live streams and ended up missing it all together</p></li>\r\n<li><p>Reference (no longer live by the time I got online... ): <a href=\"https://www.facebook.com/FormulaDRIFT/videos/452016008942956/\" class=\"uri\">https://www.facebook.com/FormulaDRIFT/videos/452016008942956/</a></p></li>\r\n<li><p>live video looks like something about mpd files with facebook also looks like you need ffmpeg complied with --enable-libxml2</p></li>\r\n<li><p>this is where I found a WONDERFUL script <a href=\"https://github.com/jb-alvarado/media-autobuild_suite\" class=\"uri\">https://github.com/jb-alvarado/media-autobuild_suite</a></p></li>\r\n<li><p>also located other untested projects (pre compiled binaries ;/ ) <a href=\"https://www.videohelp.com/software/Hybrid\" class=\"uri\">https://www.videohelp.com/software/Hybrid</a></p></li>\r\n<li><p>windows binary of youtube-dl for facebook/twitch.tv and youtube etc ..<br />\r\n<a href=\"https://ytdl-org.github.io/youtube-dl/download.html\" class=\"uri\">https://ytdl-org.github.io/youtube-dl/download.html</a></p></li>\r\n<li><p>oneliner to download/run media-autobuild_suite to \"%userprofile%media-autobuild_suite-masterbuildffmpeg-gitbuild-static-64bit\"</p></li>\r\n</ul>\r\n<pre><code>powershell   -Exec Bypass &quot;IEX (New-Object System.Net.WebClient).DownloadFile(&#39;https://github.com/jb-alvarado/media-autobuild_suite/archive/master.zip&#39;,&quot;%userprofile%desktopmaster.zip&quot;);   Expand-Archive -LiteralPath  &quot;%userprofile%desktopmaster.zip&quot;  -DestinationPath  &quot;%userprofile%desktop&quot;     ;Start-Process &quot;%userprofile%desktopmedia-autobuild_suite-mastermedia-autobuild_suite.bat&quot; &quot;</code></pre>\r\n<ul>\r\n<li><p>this took over 8hrs to compile on a i7 I disabled items that had warnings and comments about issues and useless of codes that have issues etc</p></li>\r\n<li><p>missing libopenh264.dll when I launched ffmpeg_g.exe</p></li>\r\n<li><p>the dll was not built but I\'m not sure it\'s something I messed up I\'m sure</p></li>\r\n<li><p>only post I saw online about it was that it\'s useless and -full should never be used flaming etc</p></li>\r\n<li><p>start media-autobuild_suite-mastermsys64mingw64.exe and run the following</p></li>\r\n<li><p>Reference : <a href=\"https://bluexmas.tistory.com/category/OS\" class=\"uri\">https://bluexmas.tistory.com/category/OS</a> not sure what the flags were for but copied the DLL into the folder and it appears to run</p></li>\r\n</ul>\r\n<pre><code>git clone https://github.com/cisco/openh264.git\r\ncd openh264\r\nexport &quot;CFLAGS=-fno-stack-protector&quot;\r\nexport &quot;LDFLAGS=-lssp&quot;\r\nmake</code></pre>\r\n<ul>\r\n<li>also had to apply this fix for AR etc in platform-mingw_nt.mk folder</li>\r\n</ul>\r\n<pre><code>find / -iname &quot;platform-mingw_nt.mk&quot; -exec sed &#39;s/x86_64-w64-mingw32-//g&#39; -i.bak &#39;{}&#39; ;</code></pre>\r\n<pre><code>youtube-dl -f bestvideo+bestaudio &quot;link to youtube video&quot;</code></pre>\r\n<p>If that gives you an error, try the following instead:</p>\r\n<pre><code>youtube-dl -f &#39;bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio&#39; --merge-output-format mp4 &quot;link to youtube video&quot;</code></pre>\r\n<p>Here you download the best video and audio separately and then merge into a, in this case mp4 file. You can change the output format on the merged video as well.</p>\r\n',36,0,1,'CC-BY-SA','ffmpeg,hacking,youtube-dl,media',0,0,1),
(3271,'2021-02-15','Interview with a 6yo child ',428,'I ask some basic questions to my 6yo','<p>Not really hacking but good times</p>',36,78,0,'CC-BY-SA','interviews,kids',0,0,1),
(3269,'2021-02-11','Linux Inlaws S01E23: The first year of the five year plan',2855,'The Inlaws review the first year: the highlights, lowlights and all the bloody rest','<ul>\r\n<li>Free software (not just Richard\'s idea): <a href=\"https://www.gnu.org/philosophy/free-sw.html\" target=\"_blank\">https://www.gnu.org/philosophy/free-sw.html</a></li>\r\n<li>How Nvidia became Skynet: <a href=\"https://hackerpublicradio.org/eps.php?id=3069\" target=\"_blank\">https://hackerpublicradio.org/eps.php?id=3069</a></li>\r\n<li>Hacktoberfest: <a href=\"https://hacktoberfest.digitalocean.com\" target=\"_blank\">https://hacktoberfest.digitalocean.com</a></li>\r\n<li>Claudio and crew: <a href=\"https://hackerpublicradio.org/eps.php?id=3099\" target=\"_blank\">https://hackerpublicradio.org/eps.php?id=3099</a></li>\r\n<li>Not going out: <a href=\"https://en.wikipedia.org/wiki/Not_Going_Out\" target=\"_blank\">https://en.wikipedia.org/wiki/Not_Going_Out</a></li>\r\n<li>An American Pickle: <a href=\"https://www.imdb.com/title/tt9059704/?ref_=fn_al_tt_2\" target=\"_blank\">https://www.imdb.com/title/tt9059704/?ref_=fn_al_tt_2</a></li>\r\n<li>Mrs Honeyhume: <a href=\"https://hackerpublicradio.org/eps.php?id=3251\" target=\"_blank\">https://hackerpublicradio.org/eps.php?id=3251</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','communism, five year plan, world domination, FOSS, Femke',0,0,1),
(3279,'2021-02-25','Linux Inlaws S01E24: Legacy programming languages',3252,'The two chaps discuss why history keeps repeating itself in programming languages and beyond','<ul>\r\n<li>Plankalkül: <a href=\"https://en.wikipedia.org/wiki/Plankalk%C3%BCl\" target=\"_blank\">https://en.wikipedia.org/wiki/Plankalk%C3%BCl</a></li>\r\n<li>Fortran: <a href=\"https://fortran-lang.org\" target=\"_blank\">https://fortran-lang.org</a></li>\r\n<li>COBOL: <a href=\"https://en.wikipedia.org/wiki/COBOL\" target=\"_blank\">https://en.wikipedia.org/wiki/COBOL</a></li>\r\n<li>ALGOL: <a href=\"https://en.wikipedia.org/wiki/ALGOL\" target=\"_blank\">https://en.wikipedia.org/wiki/ALGOL</a></li>\r\n<li>GNU Fortran: <a href=\"https://gcc.gnu.org/fortran/\" target=\"_blank\">https://gcc.gnu.org/fortran/</a></li>\r\n<li>IBM System/36: <a href=\"https://en.wikipedia.org/wiki/IBM_System/36\" target=\"_blank\">https://en.wikipedia.org/wiki/IBM_System/36</a></li>\r\n<li>IBM Z: <a href=\"https://www.ibm.com/it-infrastructure/z/hardware\" target=\"_blank\">https://www.ibm.com/it-infrastructure/z/hardware</a></li>\r\n<li>Niklaus Wirth: <a href=\"https://en.wikipedia.org/wiki/Niklaus_Wirth\" target=\"_blank\">https://en.wikipedia.org/wiki/Niklaus_Wirth</a></li>\r\n<li>Pascal: <a href=\"https://en.wikipedia.org/wiki/Pascal_(programming_language)\" target=\"_blank\">https://en.wikipedia.org/wiki/Pascal_(programming_language)</a></li>\r\n<li>Modula-2: <a href=\"https://en.wikipedia.org/wiki/Modula-2\" target=\"_blank\">https://en.wikipedia.org/wiki/Modula-2</a></li>\r\n<li>Smalltalk: <a href=\"https://en.wikipedia.org/wiki/Smalltalk\" target=\"_blank\">https://en.wikipedia.org/wiki/Smalltalk</a></li>\r\n<li>Lisp: <a href=\"https://en.wikipedia.org/wiki/Lisp_(programming_language)\" target=\"_blank\">https://en.wikipedia.org/wiki/Lisp_(programming_language)</a></li>\r\n<li>Fourth generation languages: <a href=\"https://en.wikipedia.org/wiki/Fourth-generation_programming_language\" target=\"_blank\">https://en.wikipedia.org/wiki/Fourth-generation_programming_language</a></li>\r\n<li>SQL: <a href=\"https://en.wikipedia.org/wiki/SQL\" target=\"_blank\">https://en.wikipedia.org/wiki/SQL</a></li>\r\n<li>ABAP: <a href=\"https://en.wikipedia.org/wiki/ABAP\" target=\"_blank\">https://en.wikipedia.org/wiki/ABAP</a></li>\r\n<li>SAP NetWeaver: <a href=\"https://en.wikipedia.org/wiki/SAP_NetWeaver_Application_Server\" target=\"_blank\">https://en.wikipedia.org/wiki/SAP_NetWeaver_Application_Server</a></li>\r\n<li>Rust: <a href=\"https://rust-lang.org\" target=\"_blank\">https://rust-lang.org</a></li>\r\n<li>Occam: <a href=\"https://en.wikipedia.org/wiki/Occam_(programming_language)\" target=\"_blank\">https://en.wikipedia.org/wiki/Occam_(programming_language)</a></li>\r\n<li>C: <a href=\"https://www.iso.org/standard/74528.html\" target=\"_blank\">https://www.iso.org/standard/74528.html</a></li>\r\n<li>Foreign Function Interface: <a href=\"https://github.com/libffi/libffi\" target=\"_blank\">https://github.com/libffi/libffi</a></li>\r\n<li>Cracking Codes with Python: <a href=\"https://inventwithpython.com/cracking\" target=\"_blank\">https://inventwithpython.com/cracking</a></li>\r\n<li>CUDA: <a href=\"https://developer.nvidia.com/cuda-GPUs\" target=\"_blank\">https://developer.nvidia.com/cuda-GPUs</a></li>\r\n</ul>\r\n\r\n\r\n',384,111,1,'CC-BY-SA','Programming languages, Legacy, old stuff, new stuff, hipster languages, coffee',0,0,1),
(3268,'2021-02-10','Video Game Review - Ark Survival Evolved',532,'Enigma reviews Ark survival evolved','<p>\r\nEnigma reviews <a href=\"https://ark.gamepedia.com/ARK_Survival_Evolved_Wiki\"> Ark Survival Evolved </a>, a multiplayer survival game for the xbox, PC and ps4 <br>\r\n<br>\r\nCome chat with us at irc.freenode.net #hackerexchange <br>\r\nFollow me on twitter @Ed_N1gma\r\n</p>',39,0,1,'CC-BY-SA','video, game, reviews',0,0,1),
(3272,'2021-02-16','In GNU/Linux, there is no \"diversity\", we\'re all just data.',1032,'How I experienced GNU/Linux and the topic of \"diversity\".','<p>I\'m just Some Guy On The Internet.</p>',391,0,1,'CC-BY-SA','GNU/Linux, GNU/Linux diversity',0,0,1),
(3273,'2021-02-17','Embrace Firefox',853,'That\'s Our Browser!','<pre>\r\nHPR.config\r\n\r\nName: \"Darwin\"\r\nHandle: \"Some Guy on the Internet\"\r\nOccupation: \"Loiter on the Internet\"\r\nHobby: \"Freedom\"\r\n\r\nTitle: \"Embrace Firefox\"\r\nSummary: \"That’s Our Browser!\"\r\n</pre>',391,0,1,'CC-BY-SA','Some Guy on the Internet, Darwin, Firefox',0,0,1),
(3266,'2021-02-08','Upgrading Debian on my raspberry pi',2001,'In this episode I cover the process of upgrading Debian from Jessie 8 to Stretch 9 on my raspberrypi','<h1 id=\"pi13-upgrade-from-jessie-8-to-stretch-9---performed-151220\">Pi13 upgrade from Jessie 8 to Stretch 9 - performed 15/12/20</h1>\r\n<h2 id=\"history\">History</h2>\r\n<p>Upgraded my raspberry pi 13, which I think had a minimal install Raspbian, Debian i.e. has no desktop installed. The Pi had a PiFaceIO board installed, <a href=\"https://hackerpublicradio.org/eps.php?id=2901\">refer to my previous HPR episode Hpr2901</a></p>\r\n<h2 id=\"backup-process-in-case-something-went-wrong\">Backup process, in case something went wrong</h2>\r\n<p>I first moved all the unnecessary files to free up as much space as possible</p>\r\n<p>Shrunk the Pi partition on the installed 128GB SD card down to 25106MB (24.52GB), (25708544K), 26,325,549,056 bytes using partition magic</p>\r\n<p>I calculated that this would be 51,417,088 blocks of 512 bytes</p>\r\n<p>I used <code>dd</code> to make an image file and grabbed some unallocated space after partition by using count=55417088, refer to the command below</p>\r\n<pre><code>sudo dd if=/dev/sdb of=/home/stuart/pi-13-img-backup.img bs=512 count=55417088</code></pre>\r\n<p>I used the following command to image files to a spare 64GB SD card</p>\r\n<pre><code>sudo dd if=/home/stuart/pi-13-img-backup.img of=/dev/sdb bs=512 status=progress</code></pre>\r\n<p>I then expanded the partition to fill the full 64GB of the card</p>\r\n<p>Booted from the 64GB card to make sure that I had a backup in case anything went wrong</p>\r\n<p>Removed the 64GB card which I can go back to if things don\'t work out</p>\r\n<p>Booted from 128GB card and expanded the partition using Gparted to fill 128GB SD card</p>\r\n<p>I used the 128GB SD card to perform the upgrade, remember I have 64GB card to fall back on if things go wrong</p>\r\n<h2 id=\"upgrade-process\">Upgrade process</h2>\r\n<p><a href=\"https://www.datenreise.de/en/raspberry-pi-raspbian-update-update-jessie-to-stretch/\">Source of information below</a></p>\r\n<p>Step 1: Check available disk space</p>\r\n<p>In order to update to Raspbian Stretch, there must be enough space on the SD card. Therefore you should check the available and used disk space usage first:</p>\r\n<pre><code>$ df -h</code></pre>\r\n<p>Step 2: Check package status</p>\r\n<p>You must also check that all packages are in a state that is suitable for upgrade. The following command displays all packages that have the status semi-installed or configuration failed, and those with error status:</p>\r\n<pre><code>$ sudo dpkg --audit\r\n$ sudo dpkg --get-selections | grep hold</code></pre>\r\n<p>Step 3: Update system</p>\r\n<p>Before upgrading, the Raspbian should be completely updated:</p>\r\n<pre><code>$ sudo apt-get update\r\n$ sudo apt-get upgrade\r\n$ sudo apt-get dist-upgrade</code></pre>\r\n<p>Step 4: Modify Release</p>\r\n<p>For upgrading to the new Raspbian version, the package lists must be adapted to the \"Stretch\" release. To do this, only the word \"jessie\" has to be replaced by \"stretch\". In order not to overlook any position, we simply let the replacement be done by the following command:</p>\r\n<pre><code>$ sudo sed -i /deb/s/jessie/stretch/g /etc/apt/sources.list\r\n$ sudo sed -i /deb/s/jessie/stretch/g /etc/apt/sources.list.d/*.list</code></pre>\r\n<p>Step 5: Updating package lists</p>\r\n<p>The new package lists must then be updated and imported:</p>\r\n<pre><code>$ sudo apt-get update</code></pre>\r\n<p>Step 6: Update to \"Stretch\"</p>\r\n<p>Now we are ready to start the upgrade:</p>\r\n<pre><code>$ sudo apt-get upgrade\r\n$ sudo apt-get dist-upgrade</code></pre>\r\n<p>Step 7: Clean up installation</p>\r\n<p>Old, unnecessary packages are removed after the system update with the following commands:</p>\r\n<pre><code>$ sudo apt-get autoremove\r\n$ sudo apt-get autoclean</code></pre>\r\n<h2 id=\"what-was-reported-during-upgrade\">What was reported during upgrade</h2>\r\n<h3 id=\"repo-for-get_iplayer-no-longer-available-so-had-to-comment-them-out.-on-my-pi-these-were-located-at-the-following-location.\">repo for get_iplayer no longer available so had to comment them out. On my Pi these were located at the following location.</h3>\r\n<pre><code>/etc/apt/sources.list.d/packages.hedgrows.org.uk.list</code></pre>\r\n<h3 id=\"change-to-lsb_release-command\">change to lsb_release command</h3>\r\n<p>The lsb_release command no longer worked so after the upgrade I could not use it to check what version of Debian I was running.</p>\r\n<p><a href=\"https://linuxconfig.org/check-what-debian-version-you-are-running-on-your-linux-system\">Link to alternative methods to check installed Debian version.</a></p>\r\n<p>I chose the following method</p>\r\n<pre><code>cat /etc/os-release</code></pre>\r\n<h3 id=\"bashrc---kept-my-original-file\">.bashrc - kept my original file</h3>\r\n<p>Something about /etc/login.defs &amp; /etc/login.defs.dpkg-new</p>\r\n<h3 id=\"lots-of-changes-in-new-version-of-ssh\">lots of changes in new version of ssh</h3>\r\n<p>Something was mentioned about apt hashes sha1 weak \"yes\" &amp; apt hashes ripe-md/160 weak \"yes\"</p>\r\n<p>Something about ~/.ssh/authorized_keys &amp; ~/.ssh/authorized_keys2</p>\r\n<p>Something about key length and accepted key types</p>\r\n<h2 id=\"what-went-wrong-after-the-upgrade\">What went wrong after the upgrade</h2>\r\n<h3 id=\"mocp-wouldnt-run\">mocp wouldn\'t run</h3>\r\n<p>I had to modify my config file in .moc folder I added the following line near the top of the file</p>\r\n<pre><code>ALSAStutterDefeat = no</code></pre>\r\n<p>In my .moc folder I had to also modify the my_keymap file at line 82. I think the next_search option is not available in the new version of moc 2.6-alpha3 installed with Debian Stretch. I commented out the following</p>\r\n<pre><code>#next_search =          ^g ^n</code></pre>\r\n<h3 id=\"pifacedigitalio-test.py-reported-an-error\">pifacedigitalio test.py reported an error</h3>\r\n<p>multiple errors reported last line of error was:-</p>\r\n<pre><code>pifacedigitalio.core.NoPiFaceDigitalDetectedError: No PiFace Digital board detected (hardware_addr=0, bus=0, chip_select=0)</code></pre>\r\n<p>I changed the first line of my python script</p>\r\n<p>from</p>\r\n<pre><code>#!/usr/bin/env python</code></pre>\r\n<p>to</p>\r\n<pre><code>#!/usr/bin/env python3</code></pre>\r\n<p>This removed the original error. I stupidly thought this had solved the problem so I went about converting my script to run with Python 3 only to find at the end once I had correct everything that I ended up with the same original error.</p>\r\n<h2 id=\"how-i-solved-the-pifacedigitalio-test.py-reported-error\">How I solved the pifacedigitalio test.py reported error</h2>\r\n<p><a href=\"https://www.raspberrypi.org/forums/viewtopic.php?t=196248\">The problem was solved by looking at this post</a></p>\r\n<p>According to the post it had something to do with the SPI serial speed changing from 500Khz to 125Mhz</p>\r\n<p>Problem was solved by modifying a file spi.py</p>\r\n<p>I found the location of the file by using the following command</p>\r\n<pre><code>find / -iname spi.py</code></pre>\r\n<p>The files were located at</p>\r\n<pre><code>/usr/lib/python2.7/dist-packages/pifacecommon/spi.py\r\n/usr/lib/python3/dist-packages/pifacecommon/spi.py</code></pre>\r\n<p>I created a copy of the original file and called it spi.py.bak</p>\r\n<p>I only modified the file in python2.7 as my program test.py runs in python2.7</p>\r\n<p>I added a comma to the end of line 68 and added the following line to line 69</p>\r\n<pre><code>speed_hz=ctypes.c_uint32(15000)</code></pre>\r\n<h2 id=\"ssh-from-pifacecad-stopped-working\">SSH from pifacecad stopped working</h2>\r\n<p>My Raspberry pi \"Pi10\" downstairs would not SSH into my Pi13 server upstairs This made it impossible for me to remotely start and stop podcasts and audiobooks playing on my Pi13 upstairs.</p>\r\n<p>This happened because the downstairs Pi10 had DSA and RSA keys and it was using DSA keys to ssh into Pi13. I found this by looking at /var/logs/auth.log on Pi13 The log reported</p>\r\n<pre><code>userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes</code></pre>\r\n<h2 id=\"ssh-from-eeepc-stopped-working\">SSH from EEEPC stopped working</h2>\r\n<p>Was not able to SSH into Pi13 from EEEpc</p>\r\n<p>My EEEPC netbook only had DSA keys and that is what it was using to try and SSH into Pi13 I generated new RSA keys and added them to Pi13, this solved the problem and allowed me to ssh into Pi13 from the EEEpc</p>\r\n',201,0,1,'CC-BY-SA','Linux, Distros, Raspberry Pi, Debian',0,0,1),
(3274,'2021-02-18','My Custom dwm Setup',2159,'Me talking about how I\'ve customised dwm, added and removed patches and written various scripts.','<ul>\r\n<li>Intro - video on yt, audio on hpr <a href=\"https://youtu.be/EMFMyxYch14\">https://youtu.be/EMFMyxYch14</a></li>\r\n<li>Who am I? arfab, clearnitesky, trumpetplanet</li>\r\n<li>my email has changed since my first hpr episode - thanks lavabit!</li>\r\n<li>You can now use hello@richcolq.xyz</li>\r\n<li>My previous episode was <a href=\"https://hackerpublicradio.org/eps.php?id=0618\">0618</a></li>\r\n</ul>\r\n<ol type=\"1\">\r\n<li>Story of ricing my own desktop:\r\n<ul>\r\n<li>Always been into customising look/feel, never satisfied</li>\r\n<li>Found Luke Smith and liked i3, made own version.</li>\r\n<li>Pandemic hits! Started learning Python, JavaScript but had no real use for them...</li>\r\n<li>Made a website (inspired by disconnecting from social media)</li>\r\n<li>check out <a href=\"https://richcolq.xyz\">richcolq.xyz</a> and <a href=\"https://github.com/clearnitesky\">github.com/clearnitesky</a></li>\r\n</ul></li>\r\n<li>What programs am I using?\r\n<ul>\r\n<li>dwm (obviously)</li>\r\n<li>dmenu</li>\r\n<li>st</li>\r\n<li>surf / brave</li>\r\n<li>sxhkd - various short cuts sorted by purpose</li>\r\n<li>dunst</li>\r\n<li>sxiv/feh</li>\r\n<li>zathura</li>\r\n<li>my status stuff using dwmstat script</li>\r\n<li>a look in <code>~/.local/bin</code></li>\r\n<li>I recently learned about awk and rewrote all icon scripts which is what inspired me to record this episode.</li>\r\n</ul></li>\r\n<li>What next?\r\n<ul>\r\n<li>Is it necessary to patch dwm? Probably not.<br />\r\nI\'ve come to believe that the real value in these experiments has come from my custom status scripts and keyboard shortcuts - not from patching new features into dwm. It does what I need it to (manage windows!)</li>\r\n</ul></li>\r\n<li>Thanks for watching!</li>\r\n</ol>\r\n',138,0,1,'CC-BY-SA','dwm, suckless, linux, bash, cli',0,0,1),
(3276,'2021-02-22','Deepgeek\'s thoughts about HD Radio',612,'Klaatu reads a post by Deepgeek','<p>\r\nDeepgeek\'s thoughts about HD radio.\r\n</p>\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n<li><a href=\"https://hdradio.com/broadcasters/engineering-support/high-quality-consistent-multicast-engineering/\" target=\"_blank\">multicast chart</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Sacd\" target=\"_blank\">en.wikipedia.org&#47;wiki&#47;Sacd</a></li>\r\n<li><a href=\"https://traffic.libsyn.com/secure/textfiles/Jason_Scott_Talks_His_Way_Out_Of_It_-_Episode_120.mp3\" target=\"_blank\">Jason Scott episode 120</a></li>\r\n</ul>\r\n\r\n',73,99,0,'CC-BY-SA','radio',0,0,1),
(3277,'2021-02-23','Microsoft in my Debian repo',272,'microsoft, raspberry pi, bash, script','<h2 id=\"raspberry-pi-foundation-added-vscode-repo-to-raspberry-os.\">Raspberry pi foundation added vscode repo to raspberry OS.</h2>\r\n<p>Raspberry Pi OS\'s tried:</p>\r\n<ul>\r\n<li>Raspberry Pi OS<br />\r\n<a href=\"https://www.raspberrypi.org/software/\" class=\"uri\">https://www.raspberrypi.org/software/</a></li>\r\n<li>Debian 10<br />\r\n<a href=\"https://raspi.debian.net/\" class=\"uri\">https://raspi.debian.net/</a></li>\r\n<li>Fedora 33<br />\r\n<a href=\"https://fedoraproject.org/wiki/Architectures/ARM/Raspberry_Pi#Downloading_the_Fedora_ARM_image\" class=\"uri\">https://fedoraproject.org/wiki/Architectures/ARM/Raspberry_Pi#Downloading_the_Fedora_ARM_image</a></li>\r\n</ul>\r\n<p>To try later:</p>\r\n<ul>\r\n<li><p>Arch for Arm<br />\r\n<a href=\"https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4\" class=\"uri\">https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4</a></p></li>\r\n<li><p>TPLink dongle. Actually, it has a 6-7 inch antenna for greater range.<br />\r\n<a href=\"https://www.amazon.com/Wireless-desktop-10-9-10-14-Archer-T2U/dp/B07P5PRK7J/\" class=\"uri\">https://www.amazon.com/Wireless-desktop-10-9-10-14-Archer-T2U/dp/B07P5PRK7J/</a><br />\r\n<a href=\"https://github.com/aircrack-ng/rtl8812au.git\" class=\"uri\">https://github.com/aircrack-ng/rtl8812au.git</a></p></li>\r\n</ul>\r\n<pre><code>sudo apt install dkms\r\n\r\ncd rtl8812au\r\n\r\nsudo make dkms_install</code></pre>\r\n<h2 id=\"references.\">References.</h2>\r\n<ul>\r\n<li><p>Gardiner Bryant (The Linux Gamer)<br />\r\n<a href=\"https://www.youtube.com/watch?v=TuYPIohzo2Y\" class=\"uri\">https://www.youtube.com/watch?v=TuYPIohzo2Y</a></p></li>\r\n<li><p>Found after this recording is a more in-depth way to remove Microsoft\'s hands from your Raspberry Pi OS.</p>\r\n<ul>\r\n<li>From Ham Radio operator KM4ACK<br />\r\n<a href=\"https://github.com/km4ack/pi-scripts\" class=\"uri\">https://github.com/km4ack/pi-scripts</a><br />\r\n<a href=\"https://raw.githubusercontent.com/km4ack/pi-scripts/417aaf3a9347c5e6a475071dcbbbe8cae68c1f75/removeMS\" class=\"uri\">https://raw.githubusercontent.com/km4ack/pi-scripts/417aaf3a9347c5e6a475071dcbbbe8cae68c1f75/removeMS</a></li>\r\n</ul></li>\r\n</ul>\r\n<p>The following code snippet was edited for readability.</p>\r\n<pre><code>#Hold raspberrypi-sys-mods package\r\nsudo apt-mark hold raspberrypi-sys-mods\r\n\r\n#Redirect calls to packages.microsoft.com to localhost\r\nsudo echo &quot;0.0.0.0 packages.microsoft.com&quot; &gt;&gt; /etc/hosts\r\n\r\n#remove MS Key file\r\nsudo rm -vf /etc/apt/trusted.gpg.d/microsoft.gpg\r\n\r\n#create empty dummy key file\r\nsudo touch /etc/apt/trusted.gpg.d/microsoft.gpg\r\n\r\n#lock the dummy key file\r\nsudo chattr +i /etc/apt/trusted.gpg.d/microsoft.gpg\r\n\r\n#comment out vscode.list\r\nsudo sed -i &#39;s/deb/#deb/&#39; /etc/apt/sources.list.d/vscode.list\r\n\r\n#lock the vscode.list file\r\nsudo chattr +i /etc/apt/sources.list.d/vscode.list</code></pre>\r\n',318,0,0,'CC-BY-SA','microsoft, raspberry pi, bash, script',0,0,1),
(3278,'2021-02-24','A Minor Victory Against Designed-In Obsolescence',513,'Extracting a bit more life out of a device that Apple would rather have you dump','<p>The Ipad2, at over 9 years old, is unsupported with security or any other kind of updates. Few apps in the App Store will run on its old version of IOS, and that operating system cannot be upgraded.</p>\r\n<p>As far as Apple are concerned an Ipad2 should have been sent to the scrap heap years ago. If you found its 16GB of storage wasn\'t enough, you were supposed to dump it and buy a new one as you couldn\'t add more. If you found that you couldn\'t run the latest version of your favourite apps, dump it and buy a new one as you couldn\'t upgrade the operating system to the required standard.</p>\r\n<p>Is it necessary to abide by this designed-in obsolescence? Beeza inherits an Ipad2 and decides to find out if he can get any serious use out of it or whether it really does need to be dumped.</p>',246,0,0,'CC-BY-SA','Ipad, Apple, Obsolescence, IOS, Hardware',0,0,1),
(3282,'2021-03-02','HP Laptop with AMD Ryzen 3 Mobile with Radeon Graphics',1637,'I talk about the specs of the laptop and a brief upgrade.','<h1 id=\"hp-laptop-with-amd-ryzen-3-mobile-processors-with-radeon-graphics\">HP Laptop with AMD Ryzen 3 Mobile Processors with Radeon Graphics</h1>\r\n<h3 id=\"hp-laptop-info\"><strong>HP Laptop Info.</strong></h3>\r\n<ul>\r\n<li><a href=\"https://support.hp.com/us-en/document/c06620370\" title=\"HP Customer Support, Knowledge Base\">model: 14-dk1025wm</a> (I own this model)</li>\r\n<li>Product ID: 1A491UA#ABA</li>\r\n<li>\r\n<ul>\r\n<li><a href=\"https://www.walmart.com/ip/HP-14-Ryzen-3-4GB-1TB-Laptop-Silver-Google-Classroom-Compatible/580075820\" title=\"HP Laptop - 14-dk1025wm\">Walmart Link 01</a></li>\r\n<li><a href=\"https://www.walmart.com/ip/HP-14-Ryzen-3-4GB-128GB-Laptop-Silver-Google-Classroom-Compatible/779578906\" title=\"HP Laptop - 14-dk1022wm\">Walmart Link 02</a></li>\r\n</ul></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/NATO_phonetic_alphabet\" title=\"Alfa, Brovo, Charlie,...you get it.\">NATO phonetic alphabet</a></li>\r\n</ul>\r\n<h3 id=\"specifications\"><strong>Specifications.</strong></h3>\r\n<ol>\r\n<li><p><a href=\"https://www.amd.com/en/products/apu/amd-ryzen-3-3250u\" title=\"AMD Ryzen 3 3250U Specifications\">AMD Ryzen 3 3250U</a> (2.6 GHz base clock, up to 3.5 GHz max boost clock, 1 MB L2 cache, 2 cores)</p>\r\n<ul>\r\n<li>CPU Cores: 2</li>\r\n<li>CPU Threads: 4</li>\r\n<li>GPU Cores: 3</li>\r\n<li>System Memory Specification: Up to 2400MHz (No need to go big, keep it simple and cheap.)</li>\r\n<li>Launch Date: 06/01/2020 (January 06, 2020)</li>\r\n</ul></li>\r\n<li><p>Memory/Ram: 4 GB DDR4-2400 SDRAM (1 x 4 GB)</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ECC_memory\" title=\"wiki\">ECC</a> Type: Non-ECC</li>\r\n<li>Form Factor: <a href=\"https://en.wikipedia.org/wiki/SO-DIMM\" title=\"wiki\">SODIMM</a></li>\r\n<li>Pin Count: 260-pin</li>\r\n<li>PC Speed: PC4-19200</li>\r\n<li><strong>Ram is upgradable</strong> (Two slots)\r\n<ul>\r\n<li>Walmart has \"Maximum RAM Supported 4 GB\" for model: 14-dk1025wm; <em>this is false information.</em></li>\r\n<li><a href=\"https://www.amazon.com/Crucial-Single-PC4-19200-SODIMM-260-Pin/dp/B01BIWKP58\" title=\"Crucial DDR4-2400\">Amazon Link 01: 8 gb SODIMM</a></li>\r\n<li><a href=\"https://www.amazon.com/Crucial-DDR4-Laptop-Memory-CT8G4SFRA266/dp/B08C56KXQJ\" title=\"Crucial DDR4-2666\">Amazon Link 02: 8 gb SODIMM</a></li>\r\n</ul></li>\r\n<li><strong>Note:</strong>\r\n<ul>\r\n<li>Installed 16 GB ram but system only accepts/recognizes 14 GB ram. Attempted two different ram manufacture type (Crucial and PNY Ram)</li>\r\n</ul></li>\r\n</ul></li>\r\n<li><p>Video graphics: <a href=\"https://www.notebookcheck.net/AMD-Radeon-RX-Vega-3-GPU.278652.0.html\" title=\"Packaged with CPU/APU\">AMD Radeon Vega 3 Graphics</a></p></li>\r\n<li><p>Hard drive: <a href=\"https://shop.westerndigital.com/products/internal-drives/wd-blue-mobile-sata-hdd#WD5000LPCX\" title=\"Western Digital Blue 2.5 hdd 5400 rpm\">1 TB 5400 rpm SATA III HDD</a></p>\r\n<ul>\r\n<li>Also includes, SATA III 6 Gb/s, <a href=\"https://bytebitebit.com/wp-content/uploads/2020/02/m2-ssd-2230-2242-2260-2280-22110.png\" title=\"images\">M.2 2280</a> Slot for additional storage.\r\n<ul>\r\n<li><a href=\"https://www.amazon.com/Blue-NAND-500GB-SSD-WDS500G2B0B/dp/B073SBX6TY\" title=\"Amazon Link 01\">Western Digital Blue 500 GB M.2 2280 SSD.</a></li>\r\n<li><a href=\"https://www.amazon.com/Blue-NAND-500GB-SSD-WDS500G2B0A/dp/B073SBZ8YH\" title=\"Amazon Link 02\">Western Digital Blue 500 GB 2.5 inch SSD, SATA III 6 Gb/s,Up to 560 MB/s</a></li>\r\n</ul></li>\r\n</ul></li>\r\n<li><p>Wifi: Realtek RTL8821CE 802.11b/g/n/ac (1x1) and Bluetooth® 4.2 Combo.</p>\r\n<ul>\r\n<li>Open Source <a href=\"https://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support\" title=\"Noob Friendly\">DKMS</a> Drivers in <a href=\"https://ubuntu.com/\" title=\"Ubuntu\">Ubuntu</a> (and Ubuntu based <a href=\"https://www.howtogeek.com/132624/htg-explains-whats-a-linux-distro-and-how-are-they-different/\">Distros</a>).</li>\r\n</ul></li>\r\n<li><p>Battery Life: 9 hrs (Nope<a href=\"https://www.bfytw.com/\" title=\"And now you know.\">!</a>)</p>\r\n<ul>\r\n<li>Won\'t be seeing that in <a href=\"https://www.gnu.org/home.en.html\" title=\"GNU\">GNU</a>/<a href=\"https://www.linux.com/what-is-linux/\" title=\"Linux\">Linux</a>.</li>\r\n</ul></li>\r\n</ol>\r\n<h3 id=\"secure-boot\"><strong>Secure Boot!</strong></h3>\r\n<ol>\r\n<li><a href=\"https://ubuntu.com/\" title=\"Ubuntu\">Ubuntu</a> is able to boot with <a href=\"https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot\" title=\"Poor Mint\">secure boot</a> enabled.\r\n<ul>\r\n<li>Once disabled, you can load other <a href=\"https://www.howtogeek.com/132624/htg-explains-whats-a-linux-distro-and-how-are-they-different/\">Distros</a>.</li>\r\n</ul></li>\r\n</ol>\r\n',391,57,0,'CC-BY-SA','HP, Ryzen, Crucial, Western Digital, Realtek',0,0,1),
(3288,'2021-03-10','Linux Inlaws S01E25: The Grumpy Old Coders',3628,'Our heroes host an episode with an eclectic duo (not Waldorf or Statler)','<p>\r\nThis time our two heroes host an eclectic couple known as the grumpy old coders. Thomas, David, Martin and Chris\r\ndiscuss stealing, um, borrowing (and never giving back) of mottos and mascotts, programming languages including\r\nJava, Python and Rust woes and how they all arrived at podcasting. Never mind Chris revealing his true and\r\nonly heritage and other little-known secrets. Don\'t miss out on this episode for the full lowdown (never mind\r\nthe even lower down .\r\n</p>\r\n<h3>Shownotes:</h3>\r\n<ul>\r\n<li>Grumpy Old Coders: <a href=\"https://grumpy-old-coders.org\" target=\"_blank\">https://grumpy-old-coders.org</a></li>\r\n<li>The Dig: <a href=\"https://www.netflix.com/de-en/title/81167887\" target=\"_blank\">https://www.netflix.com/de-en/title/81167887</a></li>\r\n<li>Oktoberfest: <a href=\"https://www.oktoberfest.de/en\" target=\"_blank\">https://www.oktoberfest.de/en</a></li>\r\n<li>Erdinger Herbstfest (in German only): <a href=\"https://de.wikipedia.org/wiki/Erdinger_Herbstfest\" target=\"_blank\">https://de.wikipedia.org/wiki/Erdinger_Herbstfest</a></li>\r\n<li>F#: <a href=\"https://fsharp.org\" target=\"_blank\">https://fsharp.org</a></li>\r\n<li>Vulkan API: <a href=\"https://www.khronos.org/vulkan\" target=\"_blank\">https://www.khronos.org/vulkan</a></li>\r\n</ul>',384,111,1,'CC-BY-SA','OAPs, old coders, senior citizens, Bitterfeld, communism',0,0,1),
(3283,'2021-03-03','HPR RPG Club reviews Dead Earth',3150,'Escape reality by pretending you live in a dystopia','<p>\r\nKlaatu, Beni, and Mcnalu review the tabletop RPG game <strong>Dead Earth</strong>, a game published under the <a href=\"https://www.gnu.org/licenses/fdl-1.3.en.html\" target=\"_blank\">GNU Free Documentation License (GFDL)</a>.\r\n</p>\r\n\r\n<p>\r\nNext up is <a href=\"https://paizo.com/starfinder\" target=\"_blank\">Starfinder</a>, a space-themed game using the 3.5 edition D&amp;D rules.\r\nIf you\'re interested in playing, join the Hacker Public Radio mailing list or email Klaatu at this domain.\r\n</p>\r\n\r\n\r\n',78,95,0,'CC-BY-SA','rpg, cyberpunk, post-apocalyptic',0,0,1),
(3284,'2021-03-04','Introduction to gdb',1420,'A really friendly introduction to Gnu Debugger','<p>\r\nFrustrated by gdb tutorials that are either too complicated or too simple? I think this might be an actually-useful tutorial to help you see how and why gdb can be useful.  Anyway, it\'s the path I followed to finding a use for the mysterious gdb, so maybe it will work for you.\r\n</p>\r\n\r\n<p>\r\nTo follow along with this episode, here\'s some simple yet buggy code. This compiles but crashes when run.\r\n</p>\r\n\r\n<pre><code>\r\n#include &lt;iostream&gt;\r\n#include &lt;stdlib.h&gt;  // rand\r\n#include &lt;stdio.h&gt;  // printf\r\n\r\nusing namespace std;\r\n\r\nint main () {\r\n\r\nsrand (time(NULL));\r\nint penguin = rand() % 8;\r\ncout &lt;&lt; &quot;This is a message from your friendly coder\\n&quot; &lt;&lt; endl;\r\nint kiwi = 3;\r\n\r\nprintf(\"penguin is set to is %s\\n\", penguin);\r\nprintf(\"kiwi is set to is %s\\n\", kiwi);\r\n\r\n return 0;\r\n} // main\r\n</code>\r\n</pre>\r\n\r\n<p>\r\nTo compile it and see it crash, do this:\r\n</p>\r\n\r\n<pre><code>\r\n$ g++ example.cpp\r\n$ ./a.out\r\n</code></pre>\r\n\r\n<p>\r\nTo compile it with debug symbols so you can step through it in gdb, do this:\r\n</p>\r\n\r\n<pre><code>\r\n$ g++ -g -o debugtest example.cpp\r\n$ gdb debugtest\r\n</code></pre>\r\n\r\n<p>\r\nYou can now follow along with this tutorial.\r\n</p>\r\n\r\n<p>\r\n<em>For extra credit, try compiling this with clang++ instead&#33;</em>\r\n</p>\r\n\r\n\r\n\r\n',78,84,0,'CC-BY-SA','programming, cpp, gdb, gcc',0,0,1),
(3295,'2021-03-19','Renewing a Let\'s Encrypt cert for Home Network use',195,'How to update a cert when the automatic processes don\'t work','<p>\r\nBack in <a  href=\"https://hackerpublicradio.org/eps.php?id=3289\">hpr3289 :: NextCloud the hard way</a>, I showed you how to install a Let\'s Encrypt SSL cert for use on your home network. One of the problems was the fact that the automatic renew tools won\'t work.\r\n</p>\r\n<p>\r\nToday I got a reminder email from Let\'s Encrypt and I used the exact same command to renew it as I did to create it in the first place. The tool is smart enough to know this is a renewal process. \r\n</p>\r\n<p>\r\nOne thing I forgot to do last time was to remove the <em>TXT</em> record from DNS after I was done. So I had to delete the record and wait a while for the Time To Live (TTL) to expire.\r\n</p>\r\n<p>\r\nI set about doing a check list so the next time the process can be even faster.\r\n</p>\r\n<ol>\r\n<li>Run the command <pre>certbot certonly --manual --preferred-challenges dns</pre></li>\r\n<li>Deploy a DNS TXT record under the name _acme-challenge.nextcloud.example.com</li>\r\n<li>Finish the challenge.</li>\r\n<li>When successful, remove the DNS TXT record as it\'s not needed for another two months.</li>\r\n</ol>',30,0,0,'CC-BY-SA','SSL, Let\'s Encrypt, Intranet',0,0,1),
(3566,'2022-04-04','HPR Community News for March 2022',5485,'Dave and Ken talk about shows released and comments posted in March 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=3542\" target=\"_blank\">3542</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-03-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3542\" target=\"_blank\">The Worst Car I Ever Had</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0246.html\" target=\"_blank\">Beeza</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3543\" target=\"_blank\">3543</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-03-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3543\" target=\"_blank\">Idle thoughts on web browsers</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=3544\" target=\"_blank\">3544</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-03-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3544\" target=\"_blank\">All my microphones</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=3545\" target=\"_blank\">3545</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-03-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3545\" target=\"_blank\">How I make coffee</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=3546\" target=\"_blank\">3546</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-03-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3546\" target=\"_blank\">HPR Community News for February 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=3547\" target=\"_blank\">3547</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-03-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3547\" target=\"_blank\">Password Managers</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=3548\" target=\"_blank\">3548</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-03-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3548\" target=\"_blank\">Make a custom Git command</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=3549\" target=\"_blank\">3549</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-03-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3549\" target=\"_blank\">Linux Inlaws S01E51: git and static site generators</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3550\" target=\"_blank\">3550</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-03-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3550\" target=\"_blank\">Format; Copy; Diskcopy; Xcopy</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=3551\" target=\"_blank\">3551</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-03-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3551\" target=\"_blank\">Bash snippet - some possibly helpful hints</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=3552\" target=\"_blank\">3552</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-03-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3552\" target=\"_blank\">Unboxing a PineTime development kit</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=3553\" target=\"_blank\">3553</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-03-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3553\" target=\"_blank\">Freedom of speech in open source</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=3554\" target=\"_blank\">3554</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-03-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3554\" target=\"_blank\">Guide to the Science and Technology Section of Bitchute</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=3555\" target=\"_blank\">3555</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-03-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3555\" target=\"_blank\">PopKorn Episode 1: The Fallacy of the Unreasonable Effectiveness of Mathematics in the ETC</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3556\" target=\"_blank\">3556</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-03-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3556\" target=\"_blank\">TTS for HPR</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0402.html\" target=\"_blank\">takov751</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3557\" target=\"_blank\">3557</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-03-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3557\" target=\"_blank\">A short story about Lenovo and laptop batteries</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0309.html\" target=\"_blank\">folky</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3558\" target=\"_blank\">3558</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-03-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3558\" target=\"_blank\">How I\'m learning Haskell</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3559\" target=\"_blank\">3559</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-03-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3559\" target=\"_blank\">Linux Inlaws S01E52: The Zig Project</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3560\" target=\"_blank\">3560</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-03-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3560\" target=\"_blank\">LCh Components Layer Modes</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=3561\" target=\"_blank\">3561</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-03-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3561\" target=\"_blank\">Employment security</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=3562\" target=\"_blank\">3562</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-03-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3562\" target=\"_blank\">Creating a new project with Haskell and Stack</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3563\" target=\"_blank\">3563</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-03-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3563\" target=\"_blank\">Home Coffee Roasting, part 1</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=3564\" target=\"_blank\">3564</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-03-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3564\" target=\"_blank\">Removing EXIF data from an image</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0225.html\" target=\"_blank\">Dave Morriss</a></td>\n</tr>\n</table>\n\n<h2>Comments this month</h2>\n\n<p>These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 21 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 7 comments on\n7 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1743#comments\" target=\"_blank\">hpr1743</a></strong>\n(2015-04-08) \"<em>Scale 13x Part 1 of 6</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0024.html\" target=\"_blank\">Lord Drachenblut (R.I.P.)</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1743#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-03-05:\n\"Thank you Lord D\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=1780#comments\" target=\"_blank\">hpr1780</a></strong>\n(2015-05-29) \"<em>16 - TrueCrypt and GnuPG - An Update</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=1780#4\" target=\"_blank\">Comment 4</a>:\nelmussol on 2022-03-27:\n\"mistag\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3461#comments\" target=\"_blank\">hpr3461</a></strong>\n(2021-11-08) \"<em>Changes to HPR Branding</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3461#2\" target=\"_blank\">Comment 2</a>:\nBentley Sorsdahl on 2022-03-12:\n\"The TTS voice\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3496#comments\" target=\"_blank\">hpr3496</a></strong>\n(2021-12-27) \"<em>How I record HPR Episodes</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=3496#3\" target=\"_blank\">Comment 3</a>:\ndnt on 2022-03-09:\n\"I use it\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3515#comments\" target=\"_blank\">hpr3515</a></strong>\n(2022-01-21) \"<em>ADB and scrcpy</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3515#1\" target=\"_blank\">Comment 1</a>:\nArcher72 on 2022-03-03:\n\"On my list\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3533#comments\" target=\"_blank\">hpr3533</a></strong>\n(2022-02-16) \"<em>Porridge</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3533#4\" target=\"_blank\">Comment 4</a>:\nWindigo on 2022-03-18:\n\"Very informative\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3534#comments\" target=\"_blank\">hpr3534</a></strong>\n(2022-02-17) \"<em>Vernier caliper</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3534#3\" target=\"_blank\">Comment 3</a>:\nMichael on 2022-03-10:\n\"Unit missmatch\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 14 comments on 8 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3546#comments\" target=\"_blank\">hpr3546</a></strong>\n(2022-03-07) \"<em>HPR Community News for February 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=3546#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-03-09:\n\"Thank you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3551#comments\" target=\"_blank\">hpr3551</a></strong>\n(2022-03-14) \"<em>Bash snippet - some possibly helpful hints</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=3551#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-03-20:\n\"Bash for the Win.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3551#2\" target=\"_blank\">Comment 2</a>:\nDave Morriss on 2022-03-21:\n\"Hi SGOTI\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3552#comments\" target=\"_blank\">hpr3552</a></strong>\n(2022-03-15) \"<em>Unboxing a PineTime development kit</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=3552#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-03-26:\n\"Development on Pinetime\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3553#comments\" target=\"_blank\">hpr3553</a></strong>\n(2022-03-16) \"<em>Freedom of speech in open source</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=3553#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2022-03-16:\n\"Great Intro\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3553#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2022-03-16:\n\"Important topic\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3553#3\" target=\"_blank\">Comment 3</a>:\nBeeza on 2022-03-17:\n\"Free Speech\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3553#4\" target=\"_blank\">Comment 4</a>:\nKen Fallon on 2022-03-17:\n\"My thoughts\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3553#5\" target=\"_blank\">Comment 5</a>:\njezra on 2022-03-22:\n\"the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3557#comments\" target=\"_blank\">hpr3557</a></strong>\n(2022-03-22) \"<em>A short story about Lenovo and laptop batteries</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0309.html\" target=\"_blank\">folky</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3557#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-03-31:\n\"Thank you.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3558#comments\" target=\"_blank\">hpr3558</a></strong>\n(2022-03-23) \"<em>How I\'m learning Haskell</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3558#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-03-23:\n\"Nicely done.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3558#2\" target=\"_blank\">Comment 2</a>:\nTuula on 2022-03-24:\n\"Good idea\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3563#comments\" target=\"_blank\">hpr3563</a></strong>\n(2022-03-30) \"<em>Home Coffee Roasting, part 1</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=3563#1\" target=\"_blank\">Comment 1</a>:\nTuula on 2022-03-31:\n\"Very interesting\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3564#comments\" target=\"_blank\">hpr3564</a></strong>\n(2022-03-31) \"<em>Removing EXIF data from an image</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=3564#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-03-31:\n\"Much Respect\"</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-March/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-March/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=\"access-problems-from-argentina\">Access problems from Argentina</h3>\n<p>An HPR listener from Argentina reports that the HPR site is unavailable from there. This applies both to an ISP connection and on a mobile phone. It\'s not clear what is causing this.</p>\n<p>Reportedly the problem was resolved on March 30<sup>th</sup> but the next day it returned and at the time of writing the HPR site is still unavailable.</p>\n<h3 id=\"older-hpr-shows-on-archive.org\">Older HPR shows on archive.org</h3>\n<p>As reported on the last Community News all shows in the range 1-870 had been uploaded except for shows hpr0001 - hpr0003. Shows hpr0001 and hpr0002 had been \"blocked\" by existing non-HPR items from over 8 years ago, with the names we were going to assign. Show hpr0003 seemed to have been an early attempt to upload blocks of shows since it contained the audio for shows 1-9, but no notes.</p>\n<p>We received help with clearing the slots for shows 1 and 2 from Jason Scott of the Internet Archive, and the correct shows have now been uploaded. Show hpr0003 has now been resolved by replacing the contents with the appropriate transcoded audio and the notes have been added to it.</p>\n<p>We can now consider this project to be complete!</p>\n<!-- This month 2 additional shows in -->\n<!-- the range 1-870 have been uploaded. -->\n<!-- The number of shows left to upload in this range is now: 0. -->\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3299,'2021-03-25','Linux Inlaws S01E26: Make your Linux harder',2985,'Ever wanted to know about AppArmor and SELinux? Then this is your show!','<p>In this episode our two aging heroes discuss the proper temperature to\r\ndrink beer at (spoiler: it\'s not 20 degrees as CAMRA would make you believe)\r\nand the ins and outs of basic and enhanced security on our beloved operating\r\nsystem. If you ever wanted to know more about Linux Security Modules, AppArmor\r\nand SELinux and how dames of negotiable affections relate to these concepts,\r\nthis show is for you.</p>\r\n<h3>Shownotes:</h3>\r\n<ul>\r\n    <li>Campaign for Real Ale: <a href=\"https://camra.org.uk/\" target=\"_blank\">https://camra.org.uk/</a>\r\n    </li>\r\n    <li>Linux Security Modules: <a href=\"https://en.wikipedia.org/wiki/Linux_Security_Modules\" target=\"_blank\">https://en.wikipedia.org/wiki/Linux_Security_Modules</a>\r\n    </li>\r\n    <li>SELinux: <a href=\"https://selinuxproject.org/page/Main_Page\" target=\"_blank\">https://selinuxproject.org/page/Main_Page</a>\r\n    </li>\r\n    <li>SELinux on Android: <a href=\"https://source.android.com/security/selinux\" target=\"_blank\">https://source.android.com/security/selinux</a>\r\n    </li>\r\n    <li>AppArmor: <a href=\"https://gitlab.com/apparmor/apparmor/-/wikis/Documentation\" target=\"_blank\">https://gitlab.com/apparmor/apparmor/-/wikis/Documentation</a>\r\n    </li>\r\n    <li>RBAC with AppArmor: <a href=\"https://gitlab.com/apparmor/apparmor/-/wikis/AppArmorRBAC\" target=\"_blank\">https://gitlab.com/apparmor/apparmor/-/wikis/AppArmorRBAC</a>\r\n    </li>\r\n    <li>Plan 9: <a href=\"https://9p.io/plan9\" target=\"_blank\">https://9p.io/plan9</a>\r\n    </li>\r\n    <li>Plan 9 from Outer Space: <a href=\"https://www.imdb.com/title/tt0052077\" target=\"_blank\">https://www.imdb.com/title/tt0052077</a>\r\n    </li>\r\n    <li>Man down: <a href=\"https://www.imdb.com/title/tt2461520/?ref_=fn_tt_tt_2\" target=\"_blank\">https://www.imdb.com/title/tt2461520/?ref_=fn_tt_tt_2</a>\r\n    </li>\r\n    <li>The Midnight Gospel: <a href=\"https://www.netflix.com/de-en/title/80987903\" target=\"_blank\">https://www.netflix.com/de-en/title/80987903</a>\r\n    </li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Linux Security Modules, DAC, MAC, AppArmor, SELinux, Plan 9',0,0,1),
(3285,'2021-03-05','Upgrading Lubuntu on my Samsung N150 Plus netbook',1079,'Lubuntu 16.04 LTS to 20.04.1 LTS upgrade on ageing Samsung N150 Plus netbook.','<h1 id=\"samsung-n150-plus-upgrade-from-lubuntu-16.04-lts-to-lubuntu-20.04.1---performed-171220\">Samsung N150 Plus upgrade from Lubuntu 16.04 LTS to Lubuntu 20.04.1 - performed 17/12/20</h1>\r\n<h2 id=\"backup-and-prep-process\">Backup and prep process</h2>\r\n<ul>\r\n<li><p>Copied all documents and important files from Samsung laptop to removable hard drive. Used Lubuntu gui file manager which crashed at least twice, probably due to netbook limited RAM.</p></li>\r\n<li><p>Found out that a direct upgrade from 16.04 LTS to 20.04 LTS is not possible, refer to the following links.</p>\r\n<ul>\r\n<li><a href=\"https://askubuntu.com/questions/1214292/upgrade-path-from-16-04-to-20-04-lts-without-gui-change\">Upgrade path from 16.04 LTS to 20.04 LTS</a></li>\r\n<li><a href=\"https://ubuntu.com/about/release-cycle\">Ubuntu release-cycle</a></li>\r\n</ul></li>\r\n<li><p>Downloaded Lubuntu 20.04.1</p></li>\r\n<li><p>Found a spare 32GB USB stick and copied all the files that were on it to a removable hard drive.</p></li>\r\n<li><p>Opened downloaded Lubuntu image using Disk Image writer (1st time I\'ve used this), wrote image to 32GB SD, found process very easy</p></li>\r\n<li><p>On Samsung netbook hit F2 at boot time to select boot from USB</p></li>\r\n<li><p>Booted from USB stick containing LUBUNTU 20.04.1</p></li>\r\n</ul>\r\n<h2 id=\"live-distro-1st-boot.\">Live distro 1st boot.</h2>\r\n<ul>\r\n<li><p>Once booted I found the trackpad speed to be very slow and my first attempt at adjusting the speed in preferences made no difference.</p></li>\r\n<li><p>Connected to WiFi, setting this up seemed much more clunky than previous connection method, however it did work.</p></li>\r\n<li><p>Went to Youtube and played some video, everything worked fine, also found that volume keys on netbook worked.</p></li>\r\n</ul>\r\n<h2 id=\"install-process\">Install Process</h2>\r\n<ul>\r\n<li><p>Went through install and selected manual partitioning,</p></li>\r\n<li><p>Used existing swap on sda6 and format and mounted new Lubuntu root filesystem on sda7 replacing 16.04 with 20.04.1</p></li>\r\n</ul>\r\n<h2 id=\"after-first-boot\">After first boot</h2>\r\n<ul>\r\n<li><p>Upon first boot was surprised that it had remembered my WiFi connection details and told me there were updates</p></li>\r\n<li><p>It asked if I wanted to perform a full upgrade without giving any details. At the time I didn\'t know what this meant. I wasn\'t sure I would remain on an LTS or upgrade to 20.10. After the full upgrade I check OS release using the following command. This confirmed I was still running 20.04 LTS</p>\r\n<pre><code>  cat /etc/os-release</code></pre></li>\r\n<li><p>The logon screen has desktop options, by default it\'s set to Lubuntu, I found this to be a bit slow and unresponsive also the screen decoration on terminals was rather clunky taking up unnecessary screen space.</p></li>\r\n<li><p>The next time I entered the logon screen I selected LXQT. I was pleased to find that this option was remembered. The netbook was now a bit more responsive though not quite as good as it was before the upgrade. The terminal screen was now much tidier and more usable.</p></li>\r\n<li><p>Preferences / LXQT settings / Keyboard and mouse / Mouse and Touch Pad / Acceleration speed now 5.0 think was 0.1, also selected single click to activate item</p></li>\r\n<li><p>Installed mc, ncdu, screen, pv, moc, ssh</p></li>\r\n<li><p>Generated RSA ssh keys and copied them to Pi13, they installed with no problems and allowed me to SSH into my Pi13.</p></li>\r\n<li><p>Copied all my files and documents from my portable hard drive back onto the laptop. This time I used mc \"Midnight Commander\" to copy the files back which I found much easier than using the GUI file manager the first time around. Midnight commander is an Ncurses file manager.</p></li>\r\n<li><p>I had forgotten just how good the ncurses file manager Midnight commander is.</p></li>\r\n<li><p>Midnight Commander gave a constant percentage progress of each individual file being copied and the overall progress which was very useful and reassuring with such a slow laptop. The first time around the laptop actually crashed a couple of times when I was using the LUBUNTU GUI file manager to try and copy the files from the laptop to the hard drive.</p></li>\r\n<li><p>Also even though I generally use keyboard shortcuts for copy and paste operation I still tend to use the track pad at places when using a file manager. It\'s easy to limit yourself to keyboard navigation using mc. I found this to be greatly reassuring and I feel doing this makes the likelihood of disastrous errors much less likely.</p></li>\r\n</ul>\r\n<h2 id=\"general-thoughts-and-observations\">General thoughts and Observations</h2>\r\n<ul>\r\n<li><p>The keyboard screen brightness buttons don\'t work however I can adjust it within preferences. Further investigation will be needed to resolve this minor annoyance if / when I get the time and inclination.</p></li>\r\n<li><p>The netbook now has a much slower boot time</p></li>\r\n<li><p>The netbook now feels a little sluggish but I think it\'s still perfectly usable. I have a feeling this might be the last upgrade this netbook sees as it\'s now getting a bit long in the tooth. It also has a broken power switch which I believe was a common fault. I have to use a pair of scissors to turn it on.</p></li>\r\n</ul>\r\n',201,0,1,'CC-BY-SA','Linux, Distros, Netbook, Lubuntu',0,0,1),
(3286,'2021-03-08','Wireguard How To',574,'My findings setting up wireguard at home and in my office at work.','<h2 id=\"wireguard-how-to\">Wireguard How To</h2>\r\n<p>Firstly, I am not an expert. These are just my findings setting up wireguard at home and in my office at work.</p>\r\n<p>I\'ve used a program called <code>sshuttle</code> for 7/8 years to attach myself to my home and work networks when on public/untrusted networks or if I need to access some resource at work from home.</p>\r\n<p>Sshuttle for the main part works great and the main benefit is that the only port you ever need to open on the server network is whichever port you have your ssh server running on.</p>\r\n<p>The downside to sshuttle is that it won\'t work with my android devices so I\'ve been using a paid for VPN called PIA on untrusted networks or just staying on 3g/4g and not have any way to connect to my home or work network.</p>\r\n<p>Sshuttle is written in python and a few weeks ago Arch Linux moved to python 3.8 which broke sshuttle. There is a workaround using pyenv and a bug has been filled with the python team and a it\'s already been fixed upstream <a href=\"https://bugs.python.org/issue35415\" class=\"uri\">https://bugs.python.org/issue35415</a>.</p>\r\n<p>Anyway.</p>\r\n<p>I thought it was about time I looked at setting up a proper VPN on my work network.</p>\r\n<p>So I spent a couple of hours reading up on openVPN and creating client and server certificates making a server config on the work server forwarding the port on the router to the server.</p>\r\n<p>Then I spent a couple more hours poking around trying to figure out why it wouldn\'t work.</p>\r\n<p>I eventually gave up frustrated.</p>\r\n<p>I\'m not blaming openVPN, I know it works for many many people, but I couldn\'t see what was wrong.</p>\r\n<p>So I did what we all do in a situation like this.</p>\r\n<p>I took to social media, which in my case is my pleroma server and posted a message to the fediverse.</p>\r\n<p><em>\"OpenVPN has fried my brain. Need booze\"</em><br />\r\nThen I had a beer, a nice cold Stiegl goldbrau if I remember right.</p>\r\n<p>A few minutes later a message popped up from theru, it contained one word with a smiley face. Wireguard.</p>\r\n<p>Now I had looked at wireguard a while ago. You might remember it hit the headlines because Linus Torvalds had praised how beautifully written the code was for it. It turns out what he said was \"It\'s beautiful when compared to openVPN\'s code\". Back then the how to guides were really hard, for me anyway to follow.</p>\r\n<p>There were just examples of two machines on the same LAN connected together and I really struggled to get my head around it being serverless and both machines being peers to each other; after all openVPN has clients and servers and even sshuttle on my laptop connects to a server machine.</p>\r\n<p>There where a couple of wiki pages that I read on Christmas Eve that gave me a lightbulb moment and some clarity on the way it worked. So I decided to try and set it up.</p>\r\n<p>The articles acknowledge that it is a peer to peer technology and then go on to call one peer a server and the other peer the client.</p>\r\n<p>Also I would recommend for your first client use an android device with the wireguard app. It\'s more user friendly in that some of the config is auto filled for you and then you can export the config file and examine it in a text editor later to get a better handle on things.</p>\r\n<p>I\'m going to assume that you have installed the wireguard packages for your system and that you have given your server a static IP on your network.</p>\r\n<p>I\'m using Arch linux on my servers but I see the Linode Debian \'how to\' works in the same way.</p>\r\n<p>So we are going to log into the server and start the setup.</p>\r\n<h3 id=\"st-create-private-and-public-keys\">1st create Private and Public keys</h3>\r\n<p>Create directory for Keys</p>\r\n<pre><code>cd ~\r\nmkdir wireguard\r\ncd wireguard</code></pre>\r\n<p>Create Server Keys</p>\r\n<pre><code>umask 077\r\nwg genkey | tee privatekey | wg pubkey &gt; publickey</code></pre>\r\n<p>Create sub directory for client1 keys</p>\r\n<pre><code>mkdir client1\r\ncd client1\r\nwg genkey | tee privatekey | wg pubkey &gt; publickey</code></pre>\r\n<p>Repeat for as many clients as needed</p>\r\n<h3 id=\"createedit-wireguard-config\">Create/edit wireguard config</h3>\r\n<p>Check the interface name facing the internet is correct before copy/paste</p>\r\n<pre><code>ifconfig</code></pre>\r\n<p>Before you continue you will need to forwrd a port from your internet facing router to your server. Somewhere in your router settings you\'ll find a port forward setting. At home I have a Fritzbox and it\'s buried under network / permitted access. At work it\'s a Linksys ac1200 and it\'s under gaming / apps / single port forwarding. I\'m sure you will find it.</p>\r\n<p>The wireguard default port is 51820 and you\'ll find this port named in most of the how to\'s on the web. I use a different port number just to add a little bit of obsurity/security to my setup so if you choose to forward a different port from your router then remember to use that number in the configs.</p>\r\n<p>Below is the working <code>wg0.conf</code> file from my arch server with one client</p>\r\n<pre><code>[root@arch-server marshall]# cat /etc/wireguard/wg0.conf\r\n[Interface]\r\nAddress = 10.0.0.1/24\r\nMTU = 1500\r\nSaveConfig = false\r\nListenPort = 8801\r\nPrivateKey = sBNF2igw+xxxxxHh0HWJL2SHZ0ltR+xxxxxaCN/Wu3o=\r\nPostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE\r\nPostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D\r\nPOSTROUTING -o enp2s0 -j MASQUERADE\r\n\r\n[Peer]\r\n# BBKey2\r\nPublicKey = Aeo8ya/wCW9dlfO1a5cEaApLTbCfqJVw/stVDi2gDh8=\r\nAllowedIPs = 10.0.0.2/32</code></pre>\r\n<p>Below is the working <code>wg0.conf</code> file from my archarm server with one client</p>\r\n<pre><code>[root@alarmpi wireguard]# cat wg0.conf\r\n[Interface]\r\nAddress = 10.0.0.1/24\r\nMTU = 1500\r\nSaveConfig = false\r\nListenPort = 8801\r\nPrivateKey = GOzcxxxxx4+Gjs/50Ln+XFrlX0XXXXXKpeuf59IDnc=\r\nPostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\r\nPostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D\r\nPOSTROUTING -o eth0 -j MASQUERADE\r\n\r\n[Peer]\r\n# BBKey2\r\nPublicKey = CSJyWwknPQyhF+dRrB6TOBX55gJXnreNIpBiz3qsSm0=\r\nAllowedIPs = 10.0.0.2/32</code></pre>\r\n<h3 id=\"enable-ipv4-forwarding\">Enable IPv4 forwarding</h3>\r\n<p>On the server enable IPv4 forwarding using sysctl</p>\r\n<pre><code>sysctl -w net.ipv4.ip_forward=1</code></pre>\r\n<p>To make the change permanent. Add</p>\r\n<pre><code>net.ipv4.ip_forward = 1</code></pre>\r\n<p>to <code>/etc/sysctl.d/99-sysctl.conf</code></p>\r\n<h3 id=\"check-if-everything-works\">Check if everything works!</h3>\r\n<p>Bring the tunnel up.</p>\r\n<pre><code>wg-quick up wg0</code></pre>\r\n<p>Check tunnel state and see currently connected peers.</p>\r\n<pre><code>wg</code></pre>\r\n<p>If it all works then use systemd to start the tunnel on boot.</p>\r\n<pre><code>systemctl enable wg-quick@wg0.service</code></pre>\r\n<h3 id=\"if-it-doesnt\">If it doesn\'t</h3>\r\n<p>More than likely it\'s IPv4 forwarding.</p>\r\n<p>Try running <code>sysctl -w net.ipv4.ip_forward=1</code> again, or DNS on the client is set wrong.</p>\r\n<h2 id=\"arch-linux\">Arch linux</h2>\r\n<pre><code>pacman -S wireguard-tools wireguard-arch dkms linux-headers</code></pre>\r\n<p>ArchArm dkms + headers</p>\r\n<pre><code>pacman -S dkms wireguard-tools wireguard-dkms linux-raspberrypi-headers</code></pre>\r\n<h2 id=\"links\">Links</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=1263\" class=\"uri\">https://hackerpublicradio.org/eps.php?id=1263</a> &lt;--- the old sshuttle episode with NYbill</li>\r\n<li><a href=\"https://aur.archlinux.org/packages/networkmanager-wireguard-git/\" class=\"uri\">https://aur.archlinux.org/packages/networkmanager-wireguard-git/</a></li>\r\n<li><a href=\"https://github.com/max-moser/network-manager-wireguard\" class=\"uri\">https://github.com/max-moser/network-manager-wireguard</a></li>\r\n<li><a href=\"https://wiki.archlinux.org/index.php/WireGuard\" class=\"uri\">https://wiki.archlinux.org/index.php/WireGuard</a></li>\r\n<li><a href=\"https://www.linode.com/docs/networking/vpn/set-up-wireguard-vpn-on-ubuntu/\" class=\"uri\">https://www.linode.com/docs/networking/vpn/set-up-wireguard-vpn-on-ubuntu/</a></li>\r\n</ul>\r\n',392,0,0,'CC-BY-SA','wireguard, openVPN, Arch, sshuttle',0,0,1),
(3287,'2021-03-09','Quick tip',117,'Quick tip and HPR needs shows','<p><a href=\"https://f-droid.org/en/packages/com.github.axet.audiorecorder/\" class=\"uri\">https://f-droid.org/en/packages/com.github.axet.audiorecorder/</a></p>\r\n<p><em>Small drinking glass</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3287/picture1.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3287/picture1_thumbnail.jpg\" alt=\"Small drinking glass\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<p><em>Perfectly peeled eggs</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3287/picture2.jpg\"><img src=\"https://hackerpublicradio.org/eps/hpr3287/picture2_thumbnail.jpg\" alt=\"Perfectly peeled eggs\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n',318,93,0,'CC-BY-SA','Cooking',0,0,1),
(3291,'2021-03-15','The New Audacity and Batch Processing Macros',501,'A brief look at at the new Audacity and how I got it working for me','<p>When Audacity upgraded it caused some changes that affected my use of it to prepare podcasts I listen to. I did find the answer, though, and I am sharing it with you.</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/\" class=\"uri\">https://hackerpublicradio.org/</a></li>\r\n<li><a href=\"https://forum.audacityteam.org/\" class=\"uri\">https://forum.audacityteam.org/</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=_DZeio_ansE\" class=\"uri\">https://www.youtube.com/watch?v=_DZeio_ansE</a></li>\r\n<li><a href=\"https://www.zwilnik.com/the-new-audacity-and-batch-processing-macros/\" class=\"uri\">https://www.zwilnik.com/the-new-audacity-and-batch-processing-macros/</a></li>\r\n</ul>\r\n',198,0,0,'CC-BY-SA','Audacity, macros, batch processing',0,0,1),
(3390,'2021-07-30','Intro to DOS Series',803,'We begin some technological archeology to explore the old warhorse, DOS.','<p>This Introduction to the series also serves as a brief recap of my early history with computers, and the path that brought me to where I am today.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing',0,0,1),
(3400,'2021-08-13','Normal Layer Modes: Normal, Dissolve, Color Erase',778,'We begin a look at the Layer Modes in GIMP','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We\'ll begin with the Normal modes and work our way through many, but not all, of the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.20.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/normal-layer-modes-normal-dissolve-color-erase/\" class=\"uri\">https://www.ahuka.com/gimp/normal-layer-modes-normal-dissolve-color-erase/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes',0,0,1),
(3410,'2021-08-27','Operating Systems',828,'Here we look at what an operating system is, and how they developed historically.','<p>While the very first computers did not have operating systems, the lack of them made computers less efficient and more difficult to use. We look at the general history of operating systems before getting into the history of DOS. Then we look at some general principles of what operating systems do.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://webopedia.com/\" class=\"uri\">https://webopedia.com/</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/o/operating_system.html\" class=\"uri\">https://webopedia.com/TERM/o/operating_system.html</a></li>\r\n<li><a href=\"https://www.telegraph.co.uk/technology/0/worst-tech-predictions-of-all-time/thomas-watson-ibm-president-in-1943/\" class=\"uri\">https://www.telegraph.co.uk/technology/0/worst-tech-predictions-of-all-time/thomas-watson-ibm-president-in-1943/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Time-sharing\" class=\"uri\">https://en.wikipedia.org/wiki/Time-sharing</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Multics\" class=\"uri\">https://en.wikipedia.org/wiki/Multics</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/C/CPU.html\" class=\"uri\">https://webopedia.com/TERM/C/CPU.html</a></li>\r\n<li><a href=\"https://webopedia.internet.com/TERM/u/user_interface.html\" class=\"uri\">https://webopedia.internet.com/TERM/u/user_interface.html</a></li>\r\n<li><a href=\"https://dougengelbart.org/\" class=\"uri\">https://dougengelbart.org/</a></li>\r\n<li><a href=\"https://webopedia.internet.com/TERM/G/Graphical_User_Interface_GUI.html\" class=\"uri\">https://webopedia.internet.com/TERM/G/Graphical_User_Interface_GUI.html</a></li>\r\n<li><a href=\"https://www.amazon.com/Fumbling-Future-Invented-Personal-Computer/dp/1583482660\" class=\"uri\">https://www.amazon.com/Fumbling-Future-Invented-Personal-Computer/dp/1583482660</a></li>\r\n<li><a href=\"https://www.cryptonomicon.com/beginning.html\" class=\"uri\">https://www.cryptonomicon.com/beginning.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-1-operating-systems/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-1-operating-systems/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, operating systems',0,0,1),
(3420,'2021-09-10','Normal Layer Modes: Erase, Merge, and Split',606,'We continue our look at the Layer Modes in GIMP','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We\'ll begin with the Normal modes and work our way through many, but not all, of the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.20.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://fontlibrary.org/\" class=\"uri\">https://fontlibrary.org/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/free-public-domain-and-cc-assets/\" class=\"uri\">https://www.ahuka.com/gimp/free-public-domain-and-cc-assets/</a></li>\r\n<li><a href=\"https://fontlibrary.org/en/font/fivefoldornamentsetc\" class=\"uri\">https://fontlibrary.org/en/font/fivefoldornamentsetc</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=17Iivi0tmug\" class=\"uri\">https://www.youtube.com/watch?v=17Iivi0tmug</a></li>\r\n<li><a href=\"https://www.gimp-forum.net/Forum-GIMP\" class=\"uri\">https://www.gimp-forum.net/Forum-GIMP</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/normal-layer-modes-erase-merge-and-split/\" class=\"uri\">https://www.ahuka.com/gimp/normal-layer-modes-erase-merge-and-split/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes',0,0,1),
(3430,'2021-09-24','Booting',724,'We look in detail at how early PCs booted.','<p>The boot process is a very particular system for taking a dead hunk of metal and silicon and turning it into an active computer. It is kind of remarkable, and in the DOS environment you really needed to know how it worked.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://webopedia.com/TERM/B/BIOS.html\" class=\"uri\">https://webopedia.com/TERM/B/BIOS.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/R/ROM.html\" class=\"uri\">https://webopedia.com/TERM/R/ROM.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/C/CMOS.html\" class=\"uri\">https://webopedia.com/TERM/C/CMOS.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/p/power_on_self_test.html\" class=\"uri\">https://webopedia.com/TERM/p/power_on_self_test.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/M/MBR.html\" class=\"uri\">https://webopedia.com/TERM/M/MBR.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/k/kernel.html\" class=\"uri\">https://webopedia.com/TERM/k/kernel.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/s/shell.html\" class=\"uri\">https://webopedia.com/TERM/s/shell.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/i/internal_command.html\" class=\"uri\">https://webopedia.com/TERM/i/internal_command.html</a></li>\r\n<li><a href=\"https://webopedia.com/TERM/b/batch_file.html\" class=\"uri\">https://webopedia.com/TERM/b/batch_file.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-2-booting/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-2-booting/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, boot process',0,0,1),
(3292,'2021-03-16','Squirrel FSF blog',2785,'The trouble with HUMANS and HUMAN things.... ','<ul>\r\n<li><p>Google Chrome OS<br />\r\n<a href=\"https://www.google.com/chromebook/chrome-os\" class=\"uri\">https://www.google.com/chromebook/chrome-os</a></p></li>\r\n<li><p>Dell Mini 10<br />\r\n<a href=\"https://www.dell.com/sr/business/p/inspiron-mini10z/pd\" class=\"uri\">https://www.dell.com/sr/business/p/inspiron-mini10z/pd</a></p></li>\r\n<li><p>ConnochaetOS - what\'s left of it.<br />\r\n<a href=\"https://sourceforge.net/projects/connochaetos/\" class=\"uri\">https://sourceforge.net/projects/connochaetos/</a></p></li>\r\n<li><p>OpenBSD website<br />\r\n<a href=\"https://www.openbsd.org/index.html\" class=\"uri\">https://www.openbsd.org/index.html</a></p></li>\r\n<li><p>Enabling audio in OpenBSD<br />\r\n<a href=\"https://www.openbsd.org/faq/faq13.html\" class=\"uri\">https://www.openbsd.org/faq/faq13.html</a></p></li>\r\n<li><p>Enabling a webcam in OpenBSD<br />\r\n<a href=\"https://www.openbsd.org/faq/faq13.html#webcam\" class=\"uri\">https://www.openbsd.org/faq/faq13.html#webcam</a></p></li>\r\n<li><p>FuguIta - OpenBSD Live System<br />\r\n<a href=\"https://fuguita.org/\" class=\"uri\">https://fuguita.org/</a></p></li>\r\n<li><p>Linux Mint - LMDE 4 - Debbie<br />\r\n<a href=\"https://www.linuxmint.com/download_lmde.php\" class=\"uri\">https://www.linuxmint.com/download_lmde.php</a></p></li>\r\n<li><p>Bonus Material - CROWZ - Devuan based Crunchbang clone.<br />\r\n<a href=\"https://sourceforge.net/projects/crowz/\" class=\"uri\">https://sourceforge.net/projects/crowz/</a></p></li>\r\n</ul>\r\n',377,0,0,'CC-BY-SA','banning software, banning ideology, modernizing, re-evaluating, prejudice',0,0,1),
(3293,'2021-03-17','HPR RPG Club reviews Dungeon Raiders',3269,'Klaatu, Beni, and McNalu review an OSR DnD clone','<p>\r\nDungeon Raiders is a D&amp;D \"retroclone\", designed to mimic old school gaming.\r\nIt\'s a simple system, but is it <em>too</em> simple?\r\nFind out in today\'s episode&#33;\r\n</p>\r\n\r\n<p>\r\nYou can download Dungeon Raiders for free from <a href=\"https://www.drivethrurpg.com/product/99366/Dungeon-Raiders\">Drivethrurpg.com</a>\r\n</p>\r\n\r\n<p>\r\nYou can play games with the RPG club.\r\nSubscribe to the HPR mailing list to learn about our schedule, or email Klaatu at this domain.\r\n</p>\r\n',78,95,0,'CC-BY-SA','dnd,osr,tabletop,rpg',0,0,1),
(3301,'2021-03-29','K S P Kerbal Space Program! (Game)',2131,'400 hours into the game I talk about howto get into Kerbal Space Program!','<ul>\r\n<li>dont ever use return to launch pad or anything always use quick save and load etc .. quick save before launch etc...</li>\r\n<li>stay away from missions that are high altitudes/ and low speed etc ... for now. stick with ones that are ALT or SPEED only .. do both only if you are sure you can do it.</li>\r\n<li>use F12 to keep an eye on physics</li>\r\n<li>to EVA in space you need upgrade astronaut complex first ...</li>\r\n<li>hit the rest button in the build menu to reset all the stage to .. logical order</li>\r\n<li>My rules of thumb for parachutes:\r\n<ul>\r\n<li>Mk1s are good for a ton each.</li>\r\n<li>Radials and drogues are good for 1.5t each.</li>\r\n<li>Mk2s are good for 2t each.</li>\r\n</ul></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=nprOvWBgsEM&amp;t=1574\" class=\"uri\">https://www.youtube.com/watch?v=nprOvWBgsEM&amp;t=1574</a></li>\r\n<li>build a plane to do \"conduct survey\" missions ...</li>\r\n<li>missing SAS buttons ? upgrade at tracking and mission control then level up your Pilot to 3 or use tech tree to unlock mod with SAS https://forum.kerbalspaceprogram.com/index.php?/topic/186853-most-efficient-way-to-level-up-pilots/</li>\r\n<li>try to just focuses on missions you can complete easily</li>\r\n<li>when you finish a mission keep an eye on the recovery mod or % at the end it will tell you in the report how much money you lost ....</li>\r\n<li>sub assembly <a href=\"https://www.youtube.com/watch?v=ZdUyKH4NC1M\" class=\"uri\">https://www.youtube.com/watch?v=ZdUyKH4NC1M</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=RXKjt11vjps\" class=\"uri\">https://www.youtube.com/watch?v=RXKjt11vjps</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=mqWppFJGbY8\" class=\"uri\">https://www.youtube.com/watch?v=mqWppFJGbY8</a> ( unlock tech tree )</li>\r\n<li>A good rule of thumb is to simply keep the ship between 200-300 m/s until you are above 12k meters so you aren\'t burning extra fuel to get through the lower atmosphere where you\'re going to experience the most drag. <a href=\"https://m.youtube.com/playlist?list=PL-7ICWbZUDjlBrsHIS8mEEj3xIMUQwlp5\" class=\"uri\">https://m.youtube.com/playlist?list=PL-7ICWbZUDjlBrsHIS8mEEj3xIMUQwlp5</a>\r\n<ul>\r\n<li>different rockets work better in vacuum of Space</li>\r\n<li>for large payloads: Fuel Flow &amp; Asparagus Staging | KSP Beginner\'s Guide</li>\r\n</ul></li>\r\n<li>NERV Rocket : <a href=\"https://www.youtube.com/watch?v=s90tSM0oowo\" class=\"uri\">https://www.youtube.com/watch?v=s90tSM0oowo</a></li>\r\n<li>223 hrs and just now getting to build/mechjeb OK...</li>\r\n<li>COM ranges <a href=\"https://wiki.kerbalspaceprogram.com/wiki/CommNet\" class=\"uri\">https://wiki.kerbalspaceprogram.com/wiki/CommNet</a></li>\r\n<li>sat build! <a href=\"https://www.youtube.com/watch?v=OYCk_pYx_kE\" class=\"uri\">https://www.youtube.com/watch?v=OYCk_pYx_kE</a> :\r\n<ul>\r\n<li>AE-F33 shell (faring)</li>\r\n<li>TR-V2 decopuler</li>\r\n<li>dawn engine</li>\r\n<li>2 x pb-x150 xeono</li>\r\n<li>small inline reaction wheel</li>\r\n<li>z-200 battery</li>\r\n<li>ra-15 sat</li>\r\n<li>OK-T02 probe (remote control )</li>\r\n<li>communion 16 (for kerbal coms)</li>\r\n<li>2x gigantor solar array</li>\r\n</ul></li>\r\n<li>toggle debeis and clean up !</li>\r\n<li><span class=\"citation\" data-cites=\"KSpaceAcademy\">@KSpaceAcademy</span> <span class=\"citation\" data-cites=\"KSA_MissionCtrl\">@KSA_MissionCtrl</span> #KSP #KSP2 <span class=\"citation\" data-cites=\"SquadDevs\">@SquadDevs</span> <span class=\"citation\" data-cites=\"KerbalSpaceP\">@KerbalSpaceP</span></li>\r\n</ul>\r\n',36,0,0,'CC-BY-SA','Kerbal Space Program,KSP,games,space',0,0,1),
(3294,'2021-03-18','Update to MakeMKV to back up media',378,'Update to MakeMKV to back up media, now on Raspberry Pi','<p>This is an update on my previous episode <a href=\"https://hackerpublicradio.org/eps.php?id=3179\"><em>hpr3179 :: MakeMKV to back up media</em></a>.</p>\r\n<p>In the past month, MakeMKV.com has been updated to include Raspberry Pi support.</p>\r\n<h3 id=\"sources\">Sources:</h3>\r\n<ul>\r\n<li>MakeMKV on Linux post<br />\r\n<a href=\"https://forum.makemkv.com/forum/viewtopic.php?f=3&amp;t=224\" class=\"uri\">https://forum.makemkv.com/forum/viewtopic.php?f=3&amp;t=224</a></li>\r\n<li>MakeMKV on ARM release<br />\r\n<a href=\"https://forum.makemkv.com/forum/viewtopic.php?p=105912#p105912\" class=\"uri\">https://forum.makemkv.com/forum/viewtopic.php?p=105912#p105912</a></li>\r\n</ul>\r\n<p>It was a very uneventful \"It\'s here\"</p>\r\n<p><em>MakeMV on Raspberry Pi (ARM)</em><br />\r\n<a href=\"https://hackerpublicradio.org/eps/hpr3294/Picture1.png\"><img src=\"https://hackerpublicradio.org/eps/hpr3294/Picture1_thumbnail.png\" alt=\"MakeMV on Raspberry Pi (ARM)\" /></a> <br/><small><small><em>Click the thumbnail to see the full-sized image</em></small></small></p>\r\n<pre><code>wget https://www.makemkv.com/download/makemkv-bin-1.16.1.tar.gz\r\nwget https://www.makemkv.com/download/makemkv-oss-1.16.1.tar.gz</code></pre>\r\n<p>Unpack both packages and starting from source package and do the following steps:</p>\r\n<p>For makemkv-oss package:</p>\r\n<pre><code>./configure\r\nmake\r\nsudo make install</code></pre>\r\n<p>For makemkv-bin package:</p>\r\n<pre><code>make\r\nsudo make install</code></pre>\r\n<p>Install ccextractor and necessary packages</p>\r\n<pre><code>sudo apt install libtesseract-dev autoconf sysconftool\r\n\r\ngit clone https://github.com/CCExtractor/ccextractor.git\r\ncd ccextractor/linux/\r\n./build</code></pre>\r\n<p>nnn: command line file browser with vim-like keybindings</p>\r\n<p><a href=\"https://github.com/jarun/nnn\" class=\"uri\">https://github.com/jarun/nnn</a></p>\r\n<p>Script to rip TV episodes</p>\r\n<p>makemkv.tv.sh</p>\r\n<pre><code>#!/bin/bash\r\n#echo &quot;Series?&quot;\r\nseries=Battlestar\r\necho &quot;Series: $series&quot;\r\necho &quot;What Season is this?&quot;\r\nread season\r\necho &quot;Season: $season&quot;\r\necho &quot;Which disc # is this?&quot;\r\nread disknum\r\necho &quot;This is disk #$disknum&quot;\r\necho &quot;Starting with which episode?&quot;\r\nread episode\r\n\r\neject -x20\r\nmkdir &quot;&quot;disc.&quot;$disknum&quot;\r\nmakemkvcon mkv --progress=-same --minlength=2100 disc:0 all &quot;&quot;disc.&quot;$disknum&quot;\r\ncd &quot;&quot;disc.&quot;$disknum&quot;\r\n\r\n#episode=1\r\nepisode=$episode\r\nfor track in *.mkv\r\ndo\r\n  mv $track $series&quot;_S&quot;$season&quot;_D&quot;$disknum&quot;_E&quot;$episode.mkv\r\n  episode=$((episode+1))\r\ndone\r\n\r\ncd ..</code></pre>\r\n<p>Script to convert multiple episodes</p>\r\n<p>mkv2mkv_mult.sh</p>\r\n<pre><code>#!/bin/bash\r\nmkdir encoded\r\nfor i in *.mkv\r\ndo\r\n  HandBrakeCLI --first-subtitle --subtitle-default=none -i $i -o &quot;encoded&quot;/&quot;`basename -s .mkv $i`.mkv&quot;\r\ndone</code></pre>\r\n<p>Before and after the rename loop</p>\r\n<p><em>Before rename</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3294/Picture2.png\" alt=\"Before rename\" /></p>\r\n<p><em>After rename</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3294/Picture3.png\" alt=\"After rename\" /></p>\r\n',318,0,0,'CC-BY-SA','dvd, blu-ray, backup, nnn',0,0,1),
(3296,'2021-03-22','Spam Bot Honey Pot',364,'Implementing a honey pot style spam filter for your HTML forms','<p>In this episode of Hacker Public Radio, I will describe the method I chose to combat spam bots filling out my company\'s contact form. About 99% of the submissions we receive are spam, which makes filtering for valid messages painful. After some research into different methods, I decided to go with the honey pot method.</p>\r\n<p>The honey pot method uses an extra text input field to lure the spam bot into filling it out. There are different suggestions for how to hide this extra field from valid users by using either javascript or CSS. With javascript, the honey pot section of the form is removed from the DOM when the page loads, hiding it from your users. The argument for this method is most bots don\'t implement javascript, so the honey pot field will not be hidden from them. I think that is a valid argument but I didn\'t want to include extra javascript in my page--so I went with the CSS method.</p>\r\n<p>There are references at the end of the show notes to a couple of the articles I read on implementing the honey pot with either javascript or CSS. My take away was, one, don\'t use the CSS display property set to the value of none to take the input out of the DOM. Sufficiently smart enough bots may know to scan for this, especially if applied directly to the element. Also don\'t name your classes something obvious to your intent like \"anti-spam-filter\". My guess is the majority of the bots out there aren\'t that sophisticated, but I figured it couldn\'t hurt to follow those suggestions.</p>\r\n<p>I was already using Bootstrap CSS for our site, so I decided to use Bootstrap\'s \"sr-only\" class. This class is used for elements that you only want visible to screen readers. It takes the element and uses a combination of absolute positioning, setting the size and width to 1 pixel, setting a negative left margin, and hiding content overflow to prevent the honey pot showing up visually. I figured if the bot was scanning CSS for classes or properties, this wouldn\'t trigger any warnings. It does bring up the issue of how to prevent impacting the experience of people using screen readers. I applied the aria-hidden attribute with a value of true to the label element surrounding the honey pot input field. \"[this] removes that element and all of its children from the accessibility tree.\" So we now have the field hidden both visually in the browser and from assistive technologies. Given the short end of the stick accessibility usually gets, I doubt there are any spam bots scanning for that ARIA attribute. For the minority of users who might be viewing with the classic lynx browser, I put \'For office use\' as the label text before the honey pot, hoping this would get the message across without tipping off the bot to the intended purpose of the related input field.</p>\r\n<p>The other main issue with this method is the value of the name attribute used for the input field. Some argue to use obfuscated values like \"mmxxName\" instead of \"name\", or \"sxysPhone\" for \"phone\". Apparently some bots will skip fields they don\'t recognize. By using more standard names for multiple honey pot fields, it easier to determine if it is a bot. The counter argument to this naming scheme is about the user experience, by obfuscating the name, then browsers won\'t auto-fill the valid fields of the form. This also brings up the matter of not auto-filling the spam fields by the browser of your users. This is done by setting any of your honey pot input elements\' \"autocomplete\" attributes to \"off\".</p>\r\n<p>So far this spam filtering method is working nicely. I currently send any messages flagged as spam to a different email address with the subject prepended with the words \"[Spam review]\". Once I am confident there are not that many false positives, I will just skip sending flagged messages. The one issue I have experienced with this method is when using the tab key to move through the form. Since the input field is only visually hidden, it still receives focus as you tab through. If you happen to hit another key while still in the hidden field, it will get captured by the honey pot and then the submission will be flagged as spam.</p>\r\n<p>I have created a sample form on my personal site. Please visit URL: <a href=\"https://www.horning.us/hpr/SpamBotHoneyPot.php\" class=\"uri\">https://www.horning.us/hpr/SpamBotHoneyPot.php</a> to try it out. It is a simple PHP page using the GET method when submitting the form. Once you press the submit button you will see the form fields and their values, along with the result messages. I chose to use \"URL\" as the name for my honey pot input field. I use it on my example form, and I use it for my work form. For my work form, a URL is not something we ask to be submitted, and being a common field in forms, makes it very tempting for bots. In my example code, the CSS for hiding the honey pot section is from the minicss.org websites. Their \"visibility-hidden\" class is very similar to Bootstrap\'s \"sr-only\" class. I would be interested to hear if others have implemented something similar. I would also love to hear from someone who uses a screen reader. Does it prevent the honey pot section from being read?</p>\r\n<h2 id=\"references\">References</h2>\r\n<ul>\r\n<li>Better Honeypot Implementation (Form Anti-Spam)<br />\r\n<a href=\"https://stackoverflow.com/questions/36227376/better-honeypot-implementation-form-anti-spam\" class=\"uri\">https://stackoverflow.com/questions/36227376/better-honeypot-implementation-form-anti-spam</a></li>\r\n<li>Honeypot Technique: Fast, Easy Spam Prevention<br />\r\n<a href=\"https://solutionfactor.net/blog/2014/02/01/honeypot-technique-fast-easy-spam-prevention/\" class=\"uri\">https://solutionfactor.net/blog/2014/02/01/honeypot-technique-fast-easy-spam-prevention/</a></li>\r\n<li>Using the aria-hidden attribute<br />\r\n<a href=\"https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-hidden_attribute\" class=\"uri\">https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-hidden_attribute</a></li>\r\n<li>mini.css<br />\r\n<a href=\"https://minicss.org/docs#visibility-helpers\" class=\"uri\">https://minicss.org/docs#visibility-helpers</a></li>\r\n<li>Spam Bot Honey Pot example<br />\r\n<a href=\"https://www.horning.us/hpr/SpamBotHoneyPot.php\" class=\"uri\">https://www.horning.us/hpr/SpamBotHoneyPot.php</a></li>\r\n</ul>\r\n',293,0,0,'CC-BY-SA','Spam, HTML, Forms',0,0,1),
(3297,'2021-03-23','Nextcloud Application Updating',136,'Automatically Update Nextcloud Applications via Cron','<p>Simple method to autoupdate nextcloud apps. An email is sent as summary of actions.</p>\r\n<p>Scheduled for 5 AM Sunday - Cron Entry</p>\r\n<pre><code>MAILTO=MYEMAILADDRES@MYDOMAIN.com\r\n0 5 * * 0 /usr/bin/php /var/www/nextcloud/occ app:update --all 2&gt;&amp;1\r\n# * * * * * command to be executed\r\n# - - - - -\r\n# | | | | |\r\n# | | | | +----- day of week (0 - 6) (Sunday=0)\r\n# | | | +------- month (1 - 12)\r\n# | | +--------- day of month (1 - 31)\r\n# | +----------- hour (0 - 23)\r\n# +------------- min (0 - 59)</code></pre>\r\n',273,0,0,'CC-BY-SA','Nextcloud,SysAdmin,Admin',0,0,1),
(3298,'2021-03-24','Poisoning The Well',1505,'Shutdown the negativity in our community.','<p>Hot, off the cuff. You can leave feedback at <a href=\"mailto:Lyunpaw@gmail.com\" class=\"email\">Lyunpaw@gmail.com</a>; \"hpr04\" for the subject line. Emails are seen as plain text and are filtered. Maybe I\'ll do a show on email; oops now I owe a show.</p>',391,0,0,'CC-BY-SA','General Content.',0,0,1),
(3302,'2021-03-30','Input Methods on Ubuntu',924,'I\'m adding some input methods to a standard Ubuntu 20.04 install','<p>First I go to the <em>Language Support</em> window. Either search (press Super/Windows, then type) for\r\n\"Language Support\" and go there directly, or search for \"Region &amp; Language\", go there, then click\r\n\"Manage Installed Languages\".</p>\r\n<p>There I click <em>Install / Remove Languages ...</em>, check the Chinese I want, then click <em>Apply</em>.</p>\r\n<p>Then I add the packages for the input methods I want, either using the command line (<code>apt install</code>)\r\nor the <em>Ubuntu Software</em> application:</p>\r\n<ul>\r\n<li>Chinese Quick: <code>ibus-table-quick-classic</code></li>\r\n<li>Chinese Pinyin: <code>ibus-libpinyin</code></li>\r\n<li>Chinese (Cantonese) Jyutping: <code>ibus-table-jyutping</code></li>\r\n</ul>\r\n<p>Bonus input method:</p>\r\n<ul>\r\n<li>Unicode emoji: <code>ibus-typing-booster</code></li>\r\n</ul>\r\n<p>Now for each user that wants an input method, I search for and go to <em>Region &amp; Language</em>. At the\r\nbottom of the <em>Input Sources</em> section I click the plus button. The different input methods are found\r\nby clicking down into different sublists. Click the right choice, then <em>Add</em>:</p>\r\n<ul>\r\n<li>Chinese Quick: <em>Chinese</em> -&gt; <em>Chinese (QuickClassic)</em></li>\r\n<li>Chinese Pinyin: <em>⋮</em> -&gt; <em>Other</em> -&gt; <em>Chinese (Intelligent Pinyin)</em></li>\r\n<li>Chinese (Cantonese) Jyutping: <em>Chinese</em> -&gt; <em>Chinese (Jyutping)</em></li>\r\n<li>Unicode emoji: <em>⋮</em> -&gt; <em>Other</em> -&gt; <em>Other (Typing Booster)</em></li>\r\n<li>EurKEY: <em>English (United States)</em> -&gt; <em>EurKEY (US based layout with European letters)</em></li>\r\n</ul>\r\n<p>The EurKEY layout is part of the standard English language support in Ubuntu.</p>\r\n<p>Finally, to enable unicode color emoji as completion suggestions, switch to the Typing Booster mode\r\nby pressing Super/Windows+Space repeatedly until you see the rocket in your notification area. Click\r\nthe rocket -&gt; <em>Unicode symbols and emoji predictions</em> -&gt; <em>On</em>.</p>\r\n<p>I owe you a followup episode once I figure out how to make this work for Guix applications running\r\ninside Ubuntu.</p>\r\n<hr>\r\n<p>This episode was based on a Fediverse thread:<br><a href=\"https://libranet.de/display/0b6b25a8-6760-517c-52c9-654926232346\">https://libranet.de/display/0b6b25a8-6760-517c-52c9-654926232346</a></p>\r\n<p>References for your further study:</p>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Intelligent_Input_Bus\">IBus</a> is an input method protocol for the\r\nGNU/Linux desktop. Other protocols supported are <a href=\"https://en.wikipedia.org/wiki/Xim\">XIM</a>,\r\n<a href=\"https://en.wikipedia.org/wiki/Smart_Common_Input_Method\">SCIM</a>,\r\n<a href=\"https://en.wikipedia.org/wiki/Fcitx\">fcitx</a> and <a href=\"https://en.wikipedia.org/wiki/Uim\">uim</a>. You\r\nhave to choose one of these to use for all your input methods, but the most common input methods\r\nexist at least for IBus and the first three of the rest, so this is not as much a limitation as\r\nit sounds like.</li>\r\n<li>Quick is a simplification of the\r\n<a href=\"https://en.wikipedia.org/wiki/Cangjie_input_method\">Cangjie input method</a>. Cangjie assigns\r\nradicals, character components, to 24 keys on the alphabetic keyboard, and you combine these into\r\na character. In Quick you combine two and then choose a completion from a list.</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Pinyin\">Pinyin</a> is a romanization, a Latin alphabetic spelling,\r\nfor <a href=\"https://en.wikipedia.org/wiki/Standard_Chinese\">Standard Chinese</a> (Mandarin).</li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Jyutping\">Jyutping</a> is one of\r\n<a href=\"https://en.wikipedia.org/wiki/Hong_Kong_Government_Cantonese_Romanisation\">many</a>\r\n<a href=\"https://en.wikipedia.org/wiki/Yale_romanization_of_Cantonese\">romanizations</a>\r\n<a href=\"https://en.wikipedia.org/wiki/Sidney_Lau_romanisation\">for</a>\r\n<a href=\"https://en.wikipedia.org/wiki/Cantonese_Pinyin\">Cantonese</a>. </li>\r\n<li><a href=\"https://guix.gnu.org/\">Guix</a> is a GNU/Linux OS and also a package manager that can be installed\r\nand coexist with the GNU/Linux OS you already have, allowing you to mix and match programs from\r\nboth sources. See also <a href=\"https://hackerpublicradio.org/eps.php?id=2198\">hpr2198</a> and\r\n<a href=\"https://hackerpublicradio.org/eps.php?id=2308\">hpr2308</a>.</li>\r\n</ul>\r\n',311,0,0,'CC-BY-SA','ubuntu, input methods, guix, chinese, emoji, eurkey, pinyin, jyutping, cangjie',0,0,1),
(3303,'2021-03-31','Slackware on RaspberryPi',1182,'An alternative to raspberrypi os','<h3 id=\"a-little-history\">a little history</h3>\n<ul>\n<li>slackware on arm started by stuart winter in 2002</li>\n<li>became an official port of slackware in 2009</li>\n<li>lots of info at the video podcast on youtube</li>\n</ul>\n<h3 id=\"why-choose-slackware\">why choose slackware</h3>\n<ul>\n<li>can do minimal installs easy</li>\n<li>education</li>\n<li>stable and secure</li>\n</ul>\n<h3 id=\"who-should-avoid-slackware\">who should avoid slackware</h3>\n<ul>\n<li>unwilling or unable to read and follow directions</li>\n<li>if you think your leet when you use apt instead of apt-get</li>\n<li>if you think commands like dd are \'scary\'</li>\n</ul>\n<h3 id=\"howto\">howto</h3>\n<ul>\n<li>there is no official port of slackware arm to raspberrypi</li>\n<li>i think this is because of raspberrypi has a non standard way of booting compared to most arm devices</li>\n<li>community has stepped in</li>\n</ul>\n<h4 id=\"on-the-slackware-documentation-project-website-there-are-manual-install-projects\">on the slackware documentation project website there are \'manual\' install projects</h4>\n<ul>\n<li>took a while, had to download firmware from the raspberrypi project itself</li>\n<li>quite a bit of cleanup</li>\n<li>this is the guide if you want slackware on a pi-zero</li>\n</ul>\n<h4 id=\"link-to-the-sarpi-project\">link to the sarpi project</h4>\n<ul>\n<li>guy named phil project lead, started in 2012</li>\n<li>the sarpi project is also a manual process</li>\n<li>even if you don\'t do this you should look at the website content, this is the way to do a tutorial</li>\n<li>after you download the sources this install is exactly like any other slackware install</li>\n<li>when you get to the package selection its easy to customize</li>\n</ul>\n<h3 id=\"after-install\">after install</h3>\n<ul>\n<li>you have a complete development environment</li>\n<li>be prepared to up your search foo</li>\n<li>many packages can be built from slackbuilds</li>\n</ul>\n<p>The only mistakes you can\'t learn from are, your own fatal mistakes</p>\n<h2 id=\"links\">Links</h2>\n<ul>\n<li><a href=\"https://arm.slackware.com/\" class=\"uri\">https://arm.slackware.com/</a></li>\n<li><a href=\"https://sarpi.fatdog.eu/\" class=\"uri\">https://sarpi.fatdog.eu/</a></li>\n<li><a href=\"https://www.youtube.com/channel/UCabC1NZDGA3FZXf2hQ-6uyA/featured\" class=\"uri\">https://www.youtube.com/channel/UCabC1NZDGA3FZXf2hQ-6uyA/featured</a></li>\n<li><a href=\"https://docs.slackware.com/howtos:hardware:arm:start\" class=\"uri\">https://docs.slackware.com/howtos:hardware:arm:start</a></li>\n<li><a href=\"https://slackbuilds.org\" class=\"uri\">https://slackbuilds.org</a></li>\n</ul>\n',326,0,0,'CC-BY-SA','raspberry pi, slackware',0,0,1),
(3309,'2021-04-08','Linux Inlaws S01E27: The Big Uncertainties in Life and beyond',3417,'The two chaps discuss uncertainties and beyond in this episode on probabilistic data structure','<p>In this episode, our two heroes explore the realm of the great uncertainties also known as probabilistic data structures. For this adventures they managed to retain one of the experts in this field from the open source realm. Check out the episode to get in on this secret and its details!</p>\r\n<h3>Links:</h3>\r\n<ul>\r\n<li>Probabilistic data structures (PDS): <a href=\"https://en.wikipedia.org/wiki/Category:Probabilistic_data_structures\" target=\"_blank\">https://en.wikipedia.org/wiki/Category:Probabilistic_data_structures</a>\r\n</li>\r\n<li>Hash functions: <a href=\"https://en.wikipedia.org/wiki/Hash_function\" target=\"_blank\">https://en.wikipedia.org/wiki/Hash_function</a>\r\n</li>\r\n<li>Bloom / cuckoo filters: <a href=\"https://bdupras.github.io/filter-tutorial\" target=\"_blank\">https://bdupras.github.io/filter-tutorial</a>\r\n</li>\r\n<li>Scalable Bloom filter: <a href=\"https://www.waitingforcode.com/big-data-algorithms/scalable-bloom-filter/read\" target=\"_blank\">https://www.waitingforcode.com/big-data-algorithms/scalable-bloom-filter/read</a>\r\n</li>\r\n<li>redis module: <a href=\"https://oss.redislabs.com/redisbloom\" target=\"_blank\">https://oss.redislabs.com/redisbloom</a>\r\n</li>\r\n<li>HyperLogLog: <a href=\"https://en.wikipedia.org/wiki/HyperLogLog\" target=\"_blank\">https://en.wikipedia.org/wiki/HyperLogLog</a>\r\n</li>\r\n<li>PDS Foundation: <a href=\"https://www.amazon.de/Probabilistic-Data-Structures-Algorithms-Applications/dp/3748190484\" target=\"_blank\">https://www.amazon.de/Probabilistic-Data-Structures-Algorithms-Applications/dp/3748190484</a>\r\n</li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Probabilistic data structures,PDS',0,0,1),
(3305,'2021-04-02','Nagios part 2',1428,'Follow up to hpr3264 - Notifications, SNMP, Remote Checks','<p>I did not get any feed back on my first nagios episode, so I can only assume that I perfectly explained what nagios is. And my installation instructions were so good, that no one had any questions. So I will move on to some additional nagios topics.</p>\r\n<h2 id=\"why-use-nagios\">Why use nagios</h2>\r\n<p>One thing I meant to talk about but forgot in the intro is why you may want to run nagios as a hobbyist.</p>\r\n<ul>\r\n<li>Education, learning a new technology for fun</li>\r\n<li>Network Monitoring is a valuable skill and benefit your career if you work in IT</li>\r\n<li>Early warning for failing hardware</li>\r\n<li>Monitoring self hosted applications</li>\r\n<li>Notification for home security devices IP cameras</li>\r\n</ul>\r\n<p>Most of the benefits of nagios are not specific to nagios. There are plenty of other options for monitoring, and all of them are worth exploring.</p>\r\n<h2 id=\"notification-options\">Notification Options</h2>\r\n<h3 id=\"email\">Email</h3>\r\n<p>I had planned on discussing how to set up postfix to send emails. But, that is such a big topic I will have to skip it. I will instead talk about what I do to send email. And Maybe you can do something similar.</p>\r\n<p>Spammers have ruined the ability to directly send email. Most residential ISPs block port 25 outbound to prevent malware from sending email. Some Virtual hosting providers may not block sending mail, but many mail servers will not accept mail from VPS IP ranges.</p>\r\n<p>There are a few ways to get around this problem. I use the email delivery service <code>Sendgrid</code>. They do all the work of staying off the list of spammers, and most email providers trust mail send via Sendgrid.</p>\r\n<p>I wont go into the instructions for configuring postfix to relay outgoing mail via Sendgrid, but their documentation is easy to follow.</p>\r\n<p>There are plenty of services like sendgrid. And most have a free tier. So unless you are blasting out alerts you probably will not have to pay. If you want to send alerts from nagios via email, I recommend finding a email sending service that works for you.</p>\r\n<h3 id=\"push-alerts\">Push alerts</h3>\r\n<p>There are a few options (besides email) for getting alerts on your phone.</p>\r\n<h4 id=\"anag\">aNag</h4>\r\n<p>The easiest way to get alerts is probably the <code>aNag</code> Android app. aNag connects to the nagios UI to get status updates. It can be configured to check in periodically and there generate notifications for failed checks.</p>\r\n<p>One downside to aNag is the phone has to be able to connect to the nagios server. So, if nagios is on a private network, you will need a VPN when you are not on the same network.</p>\r\n<p>If you decide to put nagios on a public network, be sure to configure apache to only use HTTPS. <code>certbot</code> makes this really easy.</p>\r\n<h4 id=\"pushover\">Pushover</h4>\r\n<p>Another option is to us a Push Notification service that can send notifications that are triggered by API calls.</p>\r\n<p>I like to use the pushover.net You pay $5 when you download the pushover app from the app store, and then notifications are sent for free. They offer a 30 day trial if you want to evaluate the service.</p>\r\n<p>To use pushover, we will add a new contact to nagios. The command for the pushover contact is a script that calls the pushover API via curl.</p>\r\n<p>Remember from the previous episode, nagios has a <code>conf.d</code> directory and will load any files in that directory. So we will create a new file <code>/etc/nagios4/conf.d/pushover.cfg</code> and restart nagios. The contents of the pushover file will be in the show notes.</p>\r\n<p>To use pushover for specific checks, and the contact to that check. See the example in the show notes. Or if you want to use pushover for everything Modify the definitions for the host and service templates to use pushover as a contact</p>\r\n<p>The script that calls the Pushover API is at <code>https://github.com/jedda/OSX-Monitoring-Tools/blob/master/notify_by_pushover.sh</code> Save a copy of the script in the nagios plugins directory.</p>\r\n<p>pushover.cfg</p>\r\n<pre><code># &#39;notify-host-pushover&#39; command definition\r\n\r\ndefine command{\r\n        command_name    notify-host-pushover\r\n        command_line    $USER1$/notify_by_pushover.sh -u $CONTACTADDRESS1$ -a $CONTACTADDRESS2$ -c &#39;persistent&#39; -w &#39;siren&#39; -t &quot;Nagios&quot; -m &quot;$NOTIFICATIONTYPE$ Host $HOSTNAME$ $HOSTSTATE$&quot;\r\n        }\r\n\r\n# &#39;notify-service-pushover&#39; command definition\r\n\r\ndefine command{\r\n        command_name   notify-service-pushover\r\n        command_line   $USER1$/notify_by_pushover.sh -u $CONTACTADDRESS1$ -a $CONTACTADDRESS2$ -c &#39;persistent&#39; -w &#39;siren&#39; -t &quot;Nagios&quot; -m &quot;$HOSTNAME$ $SERVICEDESC$ : $SERVICESTATE$ Additional info: $SERVICEOUTPUT$&quot;\r\n        }\r\n\r\ndefine contact{\r\n        name                            generic-pushover\r\n        host_notifications_enabled      1\r\n        service_notifications_enabled   1\r\n        host_notification_period        24x7\r\n        service_notification_period     24x7\r\n    service_notification_options    w,c,r\r\n    host_notification_options       d,r\r\n        host_notification_commands      notify-host-pushover\r\n        service_notification_commands   notify-service-pushover\r\n        can_submit_commands             1\r\n        retain_status_information       1\r\n        retain_nonstatus_information    1\r\n        contact_name           Pushover\r\n        address1               {{ pushover_user_key }}\r\n        address2               {{ pushover_app_key }}\r\n}</code></pre>\r\n<h2 id=\"writing-custom-checks\">writing custom checks</h2>\r\n<p>One of the big advantages of nagios is the ability to write custom checks. In the previous episode, I mentioned that the status of the nagios checks are based on exit code.</p>\r\n<table>\r\n<thead>\r\n<tr class=\"header\">\r\n<th>Exit Code</th>\r\n<th>status</th>\r\n</tr>\r\n</thead>\r\n<tbody>\r\n<tr class=\"odd\">\r\n<td>0</td>\r\n<td>OK/UP</td>\r\n</tr>\r\n<tr class=\"even\">\r\n<td>1</td>\r\n<td>WARNING</td>\r\n</tr>\r\n<tr class=\"odd\">\r\n<td>2</td>\r\n<td>CRITICAL</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<p>So, to write a custom check, we need a script that will perform a check, and exit with an exit code based on the results of the check.</p>\r\n<h3 id=\"verify-recent-log-entry\">Verify recent log entry</h3>\r\n<p>I have a server where occasionally the syslog daemon stop running,</p>\r\n<p>Instead of trying to figure out why syslog keeps crashing, I wrote a script to check the log file is being updated. The script looks for the expected log file and tests that it has been modified in the last few minutes. The script will:</p>\r\n<ul>\r\n<li>exit 0 if the syslog file is less than 1 minute old</li>\r\n<li>exit 1 if the syslog file is less than 10 minutes old</li>\r\n<li>exit 2 if the syslog file is more that than 10 minutes old or does not exist</li>\r\n</ul>\r\n<p>Since the server with the crashy syslog is not the same server running nagios, I need a way for nagios to execute the script on the remote server.</p>\r\n<p>Nagios has a few ways to run check commands on remote servers. I prefer to use ssh, but there are some disadvantages to using ssh. Specifically the resources required to establish the ssh connection can be heavier than some of the other remote execution methods.</p>\r\n<p>The <code>check_by_ssh</code> plugin can be used to execute check commands on another system. Typically ssh-key authentication is set up so the user that is running the nagios daemon can log in to the remote system without a password</p>\r\n<p>You can try the command to make sure it is working.</p>\r\n<pre><code>cd /usr/lib/nagios/plugins\r\n./check_by_ssh -H RemoteHost -u RemoteUser \\\r\n-C /path/to/remote/script/check_log_age.sh</code></pre>\r\n<p>The new command can be added to a file in the nagios conf.d directory</p>\r\n<pre><code>define command {\r\n    command_name check_syslog_age\r\n    command_line    $USER1$/check_by_ssh  -u RemoteUser -C /remote/path/check_log_age.sh\r\n        }</code></pre>\r\n<p>After adding the command definition, <code>check_syslog_age</code> can be added as a service check.</p>\r\n<p>The Log Check script:</p>\r\n<pre><code>#!/usr/bin/bash\r\n\r\nTODAY=$(date +%Y%m%d)\r\nLOGPATH=&quot;/syslog&quot;\r\nTODAYSLOG=&quot;$TODAY.log&quot;\r\nif test `find &quot;$LOGPATH/$TODAYSLOG&quot; -mmin -1`\r\nthen\r\n    echo OK\r\n    exit 0\r\nelif test `find &quot;$LOGPATH/$TODAYSLOG&quot; -mmin -10`\r\nthen\r\n    echo WARNING\r\n    exit 1\r\nelse\r\n    echo CRITICAL\r\n    exit 2\r\nfi</code></pre>\r\n<h2 id=\"using-snmp-to-monitor-load-average-and-disk-usage\">Using snmp to monitor load average and disk usage</h2>\r\n<p>SNMP can get complicated and I have mixed feelings about using it. I am not going to go into the SNMP versions or the different authentication options for SNMP. But I will show a minimal setup that allows some performance data to be checked by nagios</p>\r\n<p>The SNMP authentication that I am demonstrating is only appropriate for isolated networks. If you plan to use snmp over a public network, I recommend looking into more secure versions of SNMP or tunnelling the check traffic via ssh or a VPN.</p>\r\n<p>If you want to learn more about SNMP, I recommend \"SNMP Mastery\" by Michael W Lucas. <a href=\"https://www.tiltedwindmillpress.com/product/snmp-mastery/\" class=\"uri\">https://www.tiltedwindmillpress.com/product/snmp-mastery/</a></p>\r\n<h3 id=\"snmp-setup\">SNMP setup</h3>\r\n<p>First we need to configure the client to respond to SNMP request. On Ubuntu, <code>apt install snmpd</code></p>\r\n<p>By default, snmpd listens on localhost. Replace the existing snmpd.conf with this example to set a read only community string and listen on all IP addresses.</p>\r\n<p>And don\'t forget, I do not recommend this for a Public Network. Restart snmpd and open port 161 if there is a firewall enabled.</p>\r\n<pre><code>agentAddress udp:161,udp6:[::1]:161\r\nrocommunity NEW_SECURE_PASSWORD\r\ndisk /</code></pre>\r\n<h3 id=\"snmp-nagios-checks\">SNMP nagios checks</h3>\r\n<p>The nagios plugin package installs several pre-defined snmp checks in <code>/etc/nagios-plugins/config/snmp.cfg</code> Look through the file to get an idea of the checks that can be performed via SNMP.</p>\r\n<p>Below is an example of a client configuration that uses SNMP. If you look at how the command definitions, most of them have an option to accept arguments to modify how the check is done The argument placeholders re represented by <code>$ARG1$</code></p>\r\n<p>In most cases, the arguments are optional. This particular SNMP check for disk space requires an argument to complete the disk ID being checked.</p>\r\n<p>When the service check is defined, the arguments are separated by <code>!</code> You can also see in the example how you can</p>\r\n<ul>\r\n<li>add additional contacts</li>\r\n<li>Change the check attempts - number or retires before sending an alert</li>\r\n<li>Frequency of checks, the default is every 5 minutes</li>\r\n</ul>\r\n<pre><code>define host {\r\n  host_name ServerIP\r\n  use linux-server\r\n}\r\ndefine service {\r\n  use generic-service\r\n  host_name ServerIP\r\n  contacts Pushover\r\n  max_check_attempts 1\r\n  check_interval 1\r\n  service_description DISK\r\n  check_command snmp_disk!NEW_SECURE_PASSWORD!1!1 # first arg is disk number\r\n  # command in /etc/nagios-plugins/config/snmp.cfg\r\n}\r\ndefine service {\r\n  use generic-service\r\n  host_name ServerIP\r\n  contacts Pushover\r\n  service_description LOAD\r\n  check_command snmp_load!NEW_SECURE_PASSWORD\r\n  # command in /etc/nagios-plugins/config/snmp.cfg\r\n}\r\ndefine service {\r\n  use generic-service\r\n  host_name ServerIP\r\n  service_description Memory\r\n  check_command snmp_mem!NEW_SECURE_PASSWORD\r\n  # command in /etc/nagios-plugins/config/snmp.cfg\r\n}\r\ndefine service {\r\n  use generic-service\r\n  host_name ServerIP\r\n  service_description Swap\r\n  check_command snmp_swap!NEW_SECURE_PASSWORD\r\n  # command in /etc/nagios-plugins/config/snmp.cfg\r\n}</code></pre>\r\n<h3 id=\"check-servers-for-updates\">Check servers for updates</h3>\r\n<p>Nagios has plugins that can check if there are system updates required.</p>\r\n<ul>\r\n<li>Number of updates</li>\r\n<li>Check will be CRITICAL if any of the updates are security related.</li>\r\n<li>Is a reboot required to load the latest kernel.</li>\r\n</ul>\r\n<p>The check plugin is installed on the remote server. The plugin for Debian based systems is <code>nagios-plugins-contrib</code> or <code>nagios-plugins-check-updates</code> for Red Hat based systems.</p>\r\n<p>The command definitions are below. Since the plugins take longer to run, you will probably need to modify the nagios plugin timeout.</p>\r\n<pre><code>define command {\r\n    command_name check_yum\r\n        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -t 120 -u root -C &quot;/usr/lib64/nagios/plugins/check_updates -t120&quot;\r\n    }\r\ndefine command {\r\n       command_name check_apt\r\n       command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -t 120 -u nagios-ssh -C &quot;/usr/lib/nagios/plugins/check_apt -t60&quot;\r\n        }</code></pre>\r\n<p>That\'s probably all the nagios I can handle for now. Leave a comment if there are nagios topics you would like to hear about. Thanks for listening and I will see you next time.</p>\r\n',342,0,0,'CC-BY-SA','nagios,bash,snmp',0,0,1),
(3308,'2021-04-07','let\'s talk about Thunderbird',2005,'Using Thunderbird to manage emails.','<p>Thunder bird, the wonderful email client. I share how I use and enjoy the Thunderbird email client.</p>\r\n<p>use `hpr391` as the subject for all emails.  If not, junk filter.</p>',391,0,0,'CC-BY-SA','email, Thunderbird',0,0,1),
(3307,'2021-04-06','Git worktree',1507,'How to use git worktree','<h2>Create a new worktree</h2>\r\n\r\n<pre><code>\r\n$ git branch | tee\r\n* dev\r\ntrunk\r\n$ git worktree add -b hotfix ~/demo/penguin.tree trunk\r\nPreparing ../penguin.tree (identifier penguin.tree)\r\nHEAD is now at 62a2daf commit\r\n</code>\r\n</pre>\r\n\r\n<h2>List existing worktrees</h2>\r\n\r\n<pre><code>\r\n$ git worktree list\r\n/home/tux/demo/penguin.git       15fca84 [dev]\r\n/home/tux/demo/penguin.tree     09e585d [trunk]\r\n</code>\r\n</pre>\r\n\r\n<h2>Move a worktree</h2>\r\n\r\n<pre><code>\r\n$ git worktree move penguin.tree ~/Temp\r\n</code>\r\n</pre>\r\n\r\n<h2>Remove a worktree</h2>\r\n<pre><code>\r\n$ git worktree remove penguin.tree\r\n</code>\r\n</pre>\r\n\r\n',78,104,0,'CC-BY-SA','git,tree,trunk,branch',0,0,1),
(3311,'2021-04-12','Bradley M. Kuhn\'s article from 2019 on Richard M. Stallman',1584,'This text to speech article requires listener discretion.','<hr />\r\n<h3>Counter Point</h3>\r\n<p>This show has a counter point: <a href=\"https://hackerpublicradio.org/eps.php?id=3316\">hpr3316 :: FSF and RMS on election of Richard Stallman</a>\r\n</p>\r\n<hr />\r\n\r\n<p>Warning This show contains information that may not be suitable for all. Listener discretion is advised.</p>\r\n<p>Recently Richard M. Stallman, announced that he has rejoined the Free Software Foundation’s board of directors. An <a href=\"https://rms-open-letter.github.io/\">open letter on github</a> called for him to be removed again, and for the FSF’s entire board to resign.</p>\r\n<p>When he resigned in 2019, Bradley M. Kuhn (from the <a href=\"https://faif.us/\">Free as in Freedom podcast</a>) wrote an article titled \"On Recent Controversial Events\" about the issue. I am submitting that article here under the terms of the Creative Commons Attribution-Share Alike 3.0 United States License. The post contains many links and is available in the shownotes for this show. Some examples are included at the end of the blog post, and listener discretion is advised.</p>\r\n<h1>\r\n<a href=\"https://ebb.org/bkuhn/blog/2019/10/15/fsf-rms.html\">On Recent Controversial Events</a>\r\n</h1>\r\n<p class=\"topAttributionWithDate\">\r\nTuesday 15 October 2019 by Bradley M. Kuhn\r\n</p>\r\n<p>\r\nThe last 33 days have been unprecedentedly difficult for the software freedom community and for me personally. Folks have been emailing, phoning, texting, tagging me on social media (— the last of which has been funny, because all my social media accounts are placeholder accounts). But, just about everyone has urged me to comment on the serious issues that the software freedom community now faces. Until now, I have stayed silent regarding all these current topics: from Richard M. Stallman (RMS)’s public statements, to <a href=\"https://www.fsf.org/news/richard-m-stallman-resigns\">his resignation from the Free Software Foundation (FSF)</a>, to the Epstein scandal and its connection to MIT. I’ve also avoided generally commenting on software freedom organizational governance during this period. I did this for good reason, which is explained below. However, in this blog post, I now share my primary comments on the matters that seem to currently be of the utmost attention of the Open Source and Free Software communities.\r\n</p>\r\n<p>\r\nI have been silent the last month because, until two days ago, I was an at-large member of <a href=\"https://www.fsf.org/about/staff-and-board\">FSF’s Board of Directors</a>, and a <a href=\"https://static.fsf.org/nosvn/fsf-amended-bylaws-current.pdf\">Voting Member</a> of the FSF. As a member of FSF’s two leadership bodies, I was abiding by a reasonable request from the FSF management and my duty to the organization. Specifically, the FSF asked that all communication during the crisis <a href=\"https://www.fsf.org/news/richard-m-stallman-resigns\">come</a> <a href=\"https://www.fsf.org/news/fsf-and-gnu\">directly</a> from FSF officers and not from at-large directors and/or Voting Members. Furthermore, the FSF management asked all Directors and Voting Members to remain silent on this entire matter — even on issues only tangentially related to the current situation, and even when speaking in our own capacity (e.g., on our own blogs like this one). The FSF is an important organization, and I take any request from the FSF seriously — so I abided fully with their request.\r\n</p>\r\n<p>\r\nThe situation was further complicated because folks at my employer, Software Freedom Conservancy (where I also serve on the <a href=\"https://sfconservancy.org/about/board/#bkuhn\">Board of Directors</a>) had strong opinions about this matter as well. Fortunately, the FSF and Conservancy both had already created clear protocols for what I should do if ever there was a disagreement or divergence of views between Conservancy and FSF. I therefore was recused fully from the planning, drafting, and timing of Conservancy’s statement on this matter. I thank my colleagues at the Conservancy for working so carefully to keep me entirely outside the loop on their statement and to diligently assure that it was straight-forward for me to manage any potential organizational disagreements. I also thank those at the FSF who outlined clear protocols (ahead of time, back in March 2019) in case a situation like this ever came up. I also know my colleagues at Conservancy care deeply, as I do, about the health and welfare of the FSF and its mission of fighting for universal software freedom for all. None of us want, nor have, any substantive disagreement over software freedom issues.\r\n</p>\r\n<p>\r\nI take very seriously my duty to the various organizations where I have (or have had) affiliations. More generally, I champion non-profit organizational transparency. Unfortunately, the current crisis left me in a quandary between the overarching goal of community transparency and abiding by FSF management’s directives. Now that I’ve left the FSF Board of Directors, FSF’s Voting Membership, and all my FSF volunteer roles (which ends my 22-year uninterrupted affiliation with the FSF), I can now comment on the substantive issues that face not just the FSF, but the Free Software community as a whole, while continuing to adhere to my past duty of acting in FSF’s best interest. In other words, my affiliation with the FSF has come to an end for many good and useful reasons. The end to this affiliation allows me to speak directly about the core issues at the heart of the community’s current crisis.\r\n</p>\r\n<p>\r\nFirstly, all these events — from RMS’ public comments on the MIT mailing list, to RMS’ resignation from the FSF to RMS’ discussions about the next steps for the GNU project — <em>seem</em> to many to have happened ridiculously quickly. But it wasn’t actually fast at all. In fact, these events were culmination of issues that were slowly growing in concern to many people, including me.\r\n</p>\r\n<p>\r\nFor the last two years, I had been a loud internal voice in the FSF leadership regarding RMS’ Free-Software-unrelated public statements; I felt strongly that it was in the best interest of the FSF to actively seek to limit such statements, and that it was my duty to FSF to speak out about this within the organization. Those who only learned of this story in the last month (understandably) believed <a href=\"https://medium.com/@selamjie/remove-richard-stallman-fec6ec210794\">Selam G.’s Medium post</a> raised an entirely new issue. <a href=\"https://web.archive.org/web/20161107050933/https://www.stallman.org/archives/2016-jul-oct.html#31_October_2016_(Down\'s_syndrome)\">In</a> <a href=\"https://web.archive.org/web/20170202025227/https://www.stallman.org/archives/2016-nov-feb.html#14_December_2016_(Campaign_of_bull-headed_prudery)\">fact</a>, <a href=\"https://web.archive.org/web/20170224174306/https://www.stallman.org/archives/2016-nov-feb.html#23_February_2017_(A_violent_sex_offender)\">RMS’</a> <a href=\"https://web.archive.org/web/20170612074722/https://stallman.org/archives/2017-mar-jun.html#26_May_2017_(Prudish_ignorantism)\">views</a> <a href=\"https://web.archive.org/web/20170616044924/https://www.stallman.org/archives/2017-mar-jun.html#13_June_2017_(Sex_offender_registry)\">and</a> <a href=\"https://web.archive.org/web/20171020041022/https://stallman.org/archives/2017-jul-oct.html#10_October_2017_(Laws_against_having_sex_with_an_animal)\">statements</a> <a href=\"https://web.archive.org/web/20180131020215/https://stallman.org/archives/2017-jul-oct.html#29_October_2017_(Pestering_women)\">posted</a> <a href=\"https://web.archive.org/web/20180104112431/https://www.stallman.org/archives/2017-nov-feb.html#27_November_2017_(Roy_Moore\'s_relationships)\">on</a> <a href=\"https://web.archive.org/web/20180509120046/https://stallman.org/archives/2018-mar-jun.html#30_April_2018_(UN_peacekeepers_in_South_Sudan)\">stallman.org</a> <a href=\"https://web.archive.org/web/20180911075211/https://www.stallman.org/archives/2018-jul-oct.html#17_July_2018_(The_bullshitter\'s_flirting)\">about</a> <a href=\"https://web.archive.org/web/20180911075211/https://www.stallman.org/archives/2018-jul-oct.html#21_August_2018_(Age_and_attraction)\">sexual</a> <a href=\"https://web.archive.org/web/20180924231708/https://stallman.org/archives/2018-jul-oct.html#23_September_2018_(Cody_Wilson)\">morality</a> <a href=\"https://web.archive.org/web/20180919100154/https://stallman.org/antiglossary.html#assult\">escalated</a> <a href=\"https://web.archive.org/web/20181113161736/https://www.stallman.org/archives/2018-sep-dec.html#6_November_2018_(Sex_according_to_porn)\">for</a> <a href=\"https://web.archive.org/web/20190325024048/https://stallman.org/archives/2019-jan-apr.html#14_February_2019_(Respecting_peoples_right_to_say_no)\">the</a> <a href=\"https://www.stallman.org/archives/2019-may-aug.html#11_June_2019_(Stretching_meaning_of_terms)\">worse</a> <a href=\"https://web.archive.org/web/20190801201704/https://stallman.org/archives/2019-may-aug.html#12_June_2019_(Declining_sex_rates)\">over</a> <a href=\"https://web.archive.org/web/20190801201704/https://stallman.org/archives/2019-may-aug.html#30_July_2019_(Al_Franken)\">the</a> <a href=\"https://web.archive.org/web/20190903050208/https://stallman.org/archives/2019-jul-oct.html#27_August_2019_(Me-too_frenzy)\">last</a> <a href=\"https://web.archive.org/web/20191011023557/https://stallman.org/archives/2019-jul-oct.html#21_September_2019_(Sex_workers)\">few</a> <a href=\"https://web.archive.org/web/20180924231708/https://stallman.org/archives/2018-jul-oct.html#23_September_2018_(Cody_Wilson)\">years</a>. When the escalation started, I still considered RMS both a friend and colleague, and I attempted to argue with him at length to convince him that some of his positions were harmful to sexual assault survivors and those who are sex-trafficked, and to the people who devote their lives in service to such individuals. More importantly to the FSF, I attempted to persuade RMS that launching a controversial campaign on sexual behavior and morality was counter to his and FSF’s mission to advance software freedom, and told RMS that my duty as an FSF Director was to assure the best outcome for the FSF, which <acronym title=\"in my opinion\">IMO</acronym> didn’t include having a leader who made such statements. Not only is human sexual behavior not a topic on which RMS has adequate academic expertise, but also his positions appear to ignore significant research and widely available information on the subject. Many of his comments, while occasionally politically intriguing, lack empathy for people who experienced trauma.\r\n</p>\r\n<p>\r\nIMO, this is not and has never been a Free Speech issue. I do believe freedom of speech links directly to software freedom: indeed, I see the freedom to publish software under Free licenses as almost a corollary to the freedom of speech. However, we do not need to follow leadership from those whose views we fundamentally disagree. Moreover, organizations need not and should not elevate spokespeople and leaders who speak regularly on unrelated issues that organizations find do not advance their mission, and/or that alienate important constituents. I, like many other software freedom leaders, curtail my public comments on issues not related to <acronym title=\"Free and Open Source Software\">FOSS</acronym>. (Indeed, I would not even be commenting on <em>this issue</em> if it had not become a central issue of concern to the software freedom community.) Leaders have power, and they must exercise the power of their words with <a href=\"https://lwn.net/Articles/770966/\">restraint, not with impunity</a>.\r\n</p>\r\n<p>\r\nRMS has consistently argued that there was a campaign of \"prudish intimidation\" — seeking to keep him quiet about his views on sexuality. After years of conversing with RMS about how his non-software-freedom views were a distraction, an indulgence, and downright problematic, his general response was to make even more public comments of this nature. The issue is not about RMS’ right to say what he believes, nor is it even about whether or not you agree or disagree with RMS’ statements. The question is whether an organization should have a designated leader who is on a sustained, public campaign advocating about an unrelated issue that many consider controversial. It really doesn’t matter what your view about the controversial issue is; a leader who refuses to stop talking loudly about unrelated issues eventually creates an untenable distraction from the radical activism you’re actively trying to advance. The message of universal software freedom is a radical cause; it’s basically impossible for one individual to effectively push forward two unrelated controversial agendas at once. In short, the radical message of software freedom became overshadowed by RMS’ radical views about sexual morality.\r\n</p>\r\n<p>\r\nAnd here is where I say the thing that may infuriate many but it’s what I believe: I think RMS took a useful step by resigning some of his leadership roles at the FSF. I thank RMS for taking that step, and I wish the FSF Directors well in their efforts to assure that the FSF becomes a welcoming organization to all who care about universal software freedom. The <a href=\"https://www.fsf.org/about/\">FSF’s mission</a> is essential to our technological future, and we should all support that mission. I care deeply about that mission myself and have worked and will continue to work in our community in the best interest of the mission.\r\n</p>\r\n<p>\r\nI’m admittedly struggling to find a way to work again with RMS, given his views on sexual morality and his behaviors stemming from those views. I explicitly do not agree with <a href=\"https://web.archive.org/web/20180919100154/https://stallman.org/antiglossary.html#assult\">this \"(re-)definition\" of sexual assault</a>. Furthermore, I believe uninformed statements about sexual assault are irresponsible and cause harm to victims. #MeToo is <strong><a href=\"https://web.archive.org/web/20190903050208/https://stallman.org/archives/2019-jul-oct.html#27_August_2019_(Me-too_frenzy)\">not a \"frenzy\"</a></strong>; it is a global movement by individuals who have been harmed seeking to hold both bad actors <em>and</em> society-at-large accountable for ignoring systemic wrongs. Nevertheless, I still am proud of the <a href=\"https://www.gnu.org/philosophy/freedom-or-power.en.html\">essay that I co-wrote with RMS</a> and still find <a href=\"https://www.gnu.org/gnu/manifesto.en.html\">many</a> <a href=\"https://www.gnu.org/philosophy/free-sw.html\">of</a> <a href=\"https://www.gnu.org/philosophy/why-free.html\">RMS’</a> <a href=\"https://www.gnu.org/philosophy/pragmatic.html\">other</a> <a href=\"https://www.gnu.org/philosophy/microsoft-old.html\">essays</a> <a href=\"https://www.gnu.org/philosophy/gpl-american-way.html\">compelling</a>, <a href=\"https://www.gnu.org/licenses/why-not-lgpl.html\">important</a>, <a href=\"https://www.gnu.org/philosophy/stallman-kth.en.html\">and</a> <a href=\"https://www.gnu.org/philosophy/who-does-that-server-really-serve.en.html\">relevant</a>.\r\n</p>\r\n<p>\r\nI want the FSF to succeed in its mission and enter a new era of accomplishments. I’ve spent the last 22 years, without a break, dedicating substantial time, effort, care and loyalty to the various FSF roles that I’ve had: including employee, volunteer, at-large Director, and Voting Member. Even though my duties to the FSF are done, and my relationship with the FSF is no longer formal, I still think the FSF is a valuable institution worth helping and saving, specifically because the FSF was founded for a mission that I deeply support. And we should also realize that RMS — a human being (who is flawed like the rest of us) — invented that mission.\r\n</p>\r\n<p>\r\nAs culture change becomes more rapid, I hope we can find reasonable nuance and moderation on our complex analysis about people and their disparate views, while we also hold individuals fully accountable for their actions. That’s the difficulty we face in the post-post-modern culture of the early twenty-first century. Most importantly, I believe we must find a way to stand firm for software freedom while also making a safe environment for victims of sexual assault, sexual abuse, gaslighting, and other deplorable actions.\r\n</p>\r\n<p>\r\n</p>\r\n<p class=\"bottomAttributionWithDate\">\r\nPosted on Tuesday 15 October 2019 at 09:11 by Bradley M. Kuhn.\r\n</p>\r\n<p class=\"comments\">\r\n<p>Submit comments on this post to <a href=\"mailto:bkuhn@ebb.org\">&lt;bkuhn@ebb.org&gt;</a>.</p>\r\n<hr />\r\n<p>The following posts are authored by Richard M. Stallman and are taken from his personal site stallman.org. They were linked to in the piece you have just heard.</p>\r\n<p><a href=\"https://web.archive.org/web/20161107050933/https://www.stallman.org/archives/2016-jul-oct.html#31_October_2016_(Down\'s_syndrome)\">stallman.org 31 October 2016 (Down’s syndrome)</a> A new noninvasive test for Down’s syndrome will eliminate the small risk of the current test. This might lead more women to get tested, and abort fetuses that have Down’s syndrome. Let’s hope so! If you’d like to love and care for a pet that doesn’t have normal human mental capacity, don’t create a handicapped human being to be your pet. Get a dog or a parrot. It will appreciate your love, and it will never feel bad for being less capable than normal humans.</p>\r\n<p><a href=\"https://web.archive.org/web/20170202025227/https://www.stallman.org/archives/2016-nov-feb.html#14_December_2016_(Campaign_of_bull-headed_prudery)\">stallman.org 14 December 2016 (Campaign of bull-headed prudery)</a> A national campaign seeks to make all US states prohibit sex between humans and nonhuman animals. This campaign seems to be sheer bull-headed prudery, using the perverse assumption that sex between a human and an animal hurts the animal. That’s true for some ways of having sex, and false for others. For instance, I’ve heard that some women get dogs to lick them off. That doesn’t hurt the dog at all. Why should it be prohibited? When male dolphins have sex with people, that doesn’t hurt the dolphins. Quite the contrary, they like it very much. Why should it be prohibited? I’ve also read that female gorillas sometimes express desire for sex with men. If they both like it, who is harmed? Why should this be prohibited? The proponents of this law claim that any kind of sex between humans and other species implies that the human is a \"predator\" that we need to lock up. That’s clearly false, for the cases listed above. Making a prohibition based on prejudice, writing it in an overbroad way, is what prissy governments tend to do where sex is concerned. The next step is to interpret it too strongly with \"zero tolerance\". Will people convicted of having dogs lick them off be required to live at least 1000 feet from any dogs? This law should be changed to prohibit only acts in which the animal is physically forced to have sex, or physically injured.</p>\r\n<p><a href=\"https://web.archive.org/web/20170224174306/https://www.stallman.org/archives/2016-nov-feb.html#23_February_2017_(A_violent_sex_offender)\">stallman.org 23 February 2017 (A \"violent sex offender\")</a> The teenager who will have to register as a \"violent sex offender\" had a sexual meeting with a younger teenager. Why do people think there is something wrong with a sexual relationship between people of ages 13 and 18? The principal activity of human adolescents is sex.</p>\r\n<p><a href=\"https://web.archive.org/web/20170612074722/https://stallman.org/archives/2017-mar-jun.html#26_May_2017_(Prudish_ignorantism)\">stallman.org 26 May 2017 (Prudish ignorantism)</a> A British woman is on trial for going to a park and inviting teenage boys to have sex with her there. Her husband acted as a lookout in case someone else passed by. One teenager allegedly visited her at her house repeatedly to have sex with her. None of these acts would be wrong in any sense, provided they took precautions against spreading infections. The idea that adolescents (of whatever sex) need to be \"protected\" from sexual experience they wish to have is prudish ignorantism, and making that experience a crime is perverse.</p>\r\n<p><a href=\"https://web.archive.org/web/20170616044924/https://www.stallman.org/archives/2017-mar-jun.html#13_June_2017_(Sex_offender_registry)\">stallman.org 13 June 2017 (Sex offender registry)</a> The sex offender registry treats any sexual crime as far worse than murder.</p>\r\n<p><a href=\"https://web.archive.org/web/20171020041022/https://stallman.org/archives/2017-jul-oct.html#10_October_2017_(Laws_against_having_sex_with_an_animal)\">stallman.org 10 October 2017 (Laws against having sex with an animal)</a> European countries are passing laws against having sex with an animal. (We are talking about sex practices that don’t physically hurt the animal.) These laws have no rational basis. We know that some animals enjoy sex with humans. Others don’t. But really, if you smear something on your genitals that tastes good to dogs, and have a dog lick you off, it harms no one. Why should this be illegal except mindless religion?</p>\r\n<p><a href=\"https://web.archive.org/web/20180104112431/https://www.stallman.org/archives/2017-nov-feb.html#27_November_2017_(Roy_Moore\'s_relationships)\">stallman.org 27 November 2017 (Roy Moore’s relationships)</a> Senate candidate Roy Moore tried to start dating/sexual relationships with teenagers some decades ago. He tried to lead Ms Corfman step by step into sex, but he always respected \"no\" from her and his other dates. Thus, Moore does not deserve the exaggerated condemnation that he is receiving for this. As an example of exaggeration: one mailing referred to these teenagers as \"children\", even the one that was 18 years old. Many teenagers are minors, but none of them are children. The condemnation is surely sparked by the political motive of wanting to defeat Moore in the coming election, but it draws fuel from ageism and the fashion for overprotectiveness of \"children\". I completely agree with the wish to defeat Moore. Political Christianists such as Moore hold views that conflict essentially with human rights, just as political Islamists do. If Moore, with his extremist policies, gains public office again, he will harm millions of American women, and secondarily society as a whole. Ms Corfman says she was hurt afterward, and attributes this to feelings of guilt based on the belief that she had done something wrong (which, of course, she had not). Is this is another sign of Christianity at work? I sent a check to Doug Jones US Senate a few weeks ago. Please support his campaign too. You can mail a check here: (Address available at original link)</p>\r\n<p><a href=\"https://web.archive.org/web/20180131020215/https://stallman.org/archives/2017-jul-oct.html#29_October_2017_(Pestering_women)\">stallman.org 29 October 2017 (Pestering women)</a> A famous theater director had a habit of pestering women, asking them for sex. As far as I can tell from this article, he didn’t try to force women into sex. When women persistently said no, he does not seem to have tried to punish them. The most he did was ask. He was a pest, but nothing worse than that.</p>\r\n<p><a href=\"https://web.archive.org/web/20180509120046/https://stallman.org/archives/2018-mar-jun.html#30_April_2018_(UN_peacekeepers_in_South_Sudan)\">stallman.org 30 April 2018 (UN peacekeepers in South Sudan)</a> It sounds horrible: \"UN peacekeepers accused of child rape in South Sudan.\" But the article makes it pretty clear that the \"children\" involved were not children. They were teenagers. What about \"rape\"? Was this really rape? Or did they have sex willingly, and prudes want to call it \"rape\" to make it sound like an injustice? We can’t tell from the article which one it is. Rape means coercing someone to have sex. Precisely because that is a grave and clear wrong, using the same name for something much less grave is a distortion.</p>\r\n<p><a href=\"https://web.archive.org/web/20180911075211/https://www.stallman.org/archives/2018-jul-oct.html#17_July_2018_(The_bullshitter\'s_flirting)\">stallman.org 17 July 2018 (The bullshitter’s flirting)</a> We are now invited to despise the bullshitter for telling a 17-year-old woman at a party that he found her attractive. We can hardly assume that the bullshitter’s boasts were true. Even men who are usually honest on other topics have been known to lie about their sexual achievements. However, I wouldn’t assume they were false, or that he did an injustice to anyone at these parties. In a group of 50 models, there could well be some that would eagerly go to bed with a rich man, either to boost their careers or for a lark. If you condemn men for finding teenage female models attractive, you might as well condemn men for being heterosexual. The bully may be predatory, but it appears he didn’t display this overtly at those parties. There are indications that he arbitrarily chose the winners of the Miss USA beauty contest while he owned it. That would be a real wrong, since it would have made the contest dishonest. I understand the desire to condemn the bullshitter on every aspect of his life, but it is no excuse for ageism. If you can understand that we shouldn’t dictate people’s gender preferences, you should understand that we shouldn’t dictate their age preferences either. There are plenty of tremendously important reasons to condemn the bully. He is attacking workers’ rights, abortion rights, non-rich people’s pensions and medical care, the environment, human rights, and democracy, even the idea of truth. Let’s focus on those real reasons.</p>\r\n<p><a href=\"https://web.archive.org/web/20180911075211/https://www.stallman.org/archives/2018-jul-oct.html#21_August_2018_(Age_and_attraction)\">stallman.org 21 August 2018 (Age and attraction)</a> Research found that men generally find females of age 18 the most attractive. This accords with the view that Stendhal reported in France in the 1800s, that a woman’s most beautiful years were from 16 to 20. Although this attitude on men’s part is normal, the author still wants to present it as wrong or perverted, and implicitly demands men somehow control their attraction to direct it elsewhere. Which is as absurd, and as potentially oppressive, as claiming that homosexuals should control their attraction and direct it towards to the other sex. Will men be pressured to undergo \"age conversion therapy\" intended to brainwash them to feel attracted mainly to women of their own age?</p>\r\n<p><a href=\"https://web.archive.org/web/20180919100154/https://stallman.org/antiglossary.html#assult\">stallman.org Anti-Glossary Sexual assault: </a> this term is so broad that using it is misleading. The term includes rape, groping, sexual harassment, and other acts. These acts are not merely different in degree. They are different in kind. Rape is a grave crime. Being groped is unpleasant but not as grave as robbery. Sexual harassment is a not an action at all, but rather a pattern of actions that constitutes economic unfairness. How can it make sense to group these behaviors things together? It never makes sense. News articles, studies, and laws should avoid that term.</p>\r\n<p><a href=\"https://web.archive.org/web/20180924231708/https://stallman.org/archives/2018-jul-oct.html#23_September_2018_(Cody_Wilson)\">stallman.org 23 September 2018 (Cody Wilson)</a> Cody Wilson has been charged with hiring a \"child\" sex worker. Her age has not been announced, but I think she must surely be a teenager, not a child. Calling teenagers \"children\" in this context is a way of smearing people with normal sexual proclivities as \"perverts\". They have accused him of \"sexual assault\", a term so vague that it should never be used at all. With no details, we can’t tell whether the alleged actions deserve that term. What we do know is that the term is often used for a legal lie. She may have had — I expect, did have — entirely willing sex with him, and they would still call it \"assault\". I do not like the idea of 3D-printed guns, but that issue is entirely unrelated to this.</p>\r\n<p><a href=\"https://web.archive.org/web/20181113161736/https://www.stallman.org/archives/2018-sep-dec.html#6_November_2018_(Sex_according_to_porn)\">stallman.org 6 November 2018 (Sex according to porn)</a> The unrealistic picture of sex presented in most porn harms men as well as women in their sex lives (though in different ways). Their sexual miseducation starts in adolescence, but many never learn better. Our society’s taboo cuts adolescents off from any way to learn about sexual relationships and lovemaking other than from porn and from other confused adolescents. Everyone learns the hard way, often slowly, and in many cases learns bad lessons. The more effective the taboo, the deeper the ignorance. In 18th century France, teenage girls of good family emerged totally sexually innocent from education in a convent. Totally innocent and totally exploitable (see Dangerous Liaisons). Contrast this with Marquesan society, where adolescents are not kept ignorant by a taboo on sex. They have various relationships with lovers of their choice, so they have many opportunities to see what pleases and what doesn’t. Any one lover can please them more, or please them less, but can’t mislead them — they have standards for comparison. In that society, even adolescents understand lovemaking better than a lot of American adults. Inevitably, everyone starts out ignorant; the question is, how can society offer people a path which leads them to learn to do things well, rather than learning painfully to do them badly.</p>\r\n<p><a href=\"https://web.archive.org/web/20190325024048/https://stallman.org/archives/2019-jan-apr.html#14_February_2019_(Respecting_peoples_right_to_say_no)\">stallman.org 14 February 2019 (Respecting people’s right to say no)</a> Writer Yann Moix said that he cannot be attracted to women in their 50s, and people are condemning him, claiming he has an obligation to be attracted to them. You might as well demand that a homosexual be attracted to people not of the same sex. Or that a heterosexual be attracted to people that are of the same sex. There is no arguing about tastes. If we respect people’s right to say no, we should not rebuke them when they do. Of course, many people (especially men, but not only) despise those they find unattractive. That is a mean way to treat people who haven’t done anything wrong. But being unattracted by someone is not the same as despising per. Yann Moix understands this.</p>\r\n<p><a href=\"https://web.archive.org/web/20190801201704/https://stallman.org/archives/2019-may-aug.html#12_June_2019_(Declining_sex_rates)\">stallman.org 12 June 2019 (Declining sex rates)</a> Many demographic categories report having sex less now than in the past. It might be due to the general stress and anxiety of life in the advanced countries. I suspect it is also due to the lack of any generally accepted way for men to express romantic or sexual interest in women. By \"generally accepted\", I mean that he can count on a woman who declines his interest not to revile him for expressing it that way.</p>\r\n<p><a href=\"https://web.archive.org/web/20190801201704/https://stallman.org/archives/2019-may-aug.html#30_July_2019_(Al_Franken)\">stallman.org 30 July 2019 (Al Franken)</a> Al Franken now regrets resigning from the Senate. Some senators that pushed him to resign now regret that too. The first (main) article does not state clearly whether Franken touched Tweeden in the process of making the photo, but it seems he did not. If that is correct, it was not a sexual act at all. It was self-mocking humor. The photograph depicted a fictional sexual act without her fictional consent, but making the photo wasn’t a sexual act. If it is true that he persistently pressured her to kiss him, on stage and off, if he stuck his tongue into her mouth despite her objections, that could well be sexual harassment. He should have accepted no for an answer the first time she said it. However, calling a kiss \"sexual assault\" is an exaggeration, an attempt to equate it to much graver acts, that are crimes. The term \"sexual assault\" encourages that injustice, and I believe it has been popularized specifically with that intention. That is why I reject that term. Meanwhile, Franken says he did not do those things, and the other actors he previously did the same USO skit with said it was not harassment, just acting. Tweeden’s store is clearly false in many details. Should we assume Tweeden was honest? With so many demonstrated falsehoods in her accusations, and given that she planned them with other right-wing activists, and that all of them follow a leader who lies as a tactic every day, I have to suspect that she decided to falsify accusations through exaggeration so as to kick a strong Democrat out of the Senate. I have no proof of that suspicion. It is possible that she made the accusations honestly. Also, in a hypothetical world, someone might really have done them. Supposing for the moment that those accusations were true, should Franken have resigned over them? I don’t think so. They are misjudgments, not crimes. Franken deserved the chance to learn from the criticism that surprised him. Zero tolerance is a very bad way to judge people. However, the most important point is to reject the position that if B feels hurt by what A said or did, then automatically A is wrong. People judged Franken that way, and he judged himself that way. But that way degrades the concept of \"wrong\" into a mere expression of subjective disapproval. What can legitimately be asserted subjectively can legitimately be ignored subjectively too. To judge A that way is to set B up as a tyrant. If B’s feelings were hurt, that’s unfortunate – but is that A’s fault? If so, was it culpable, or just a mistake? That is what we have to judge, and if we want others to think our judgments worth following, they must be based on objective facts and objective standards, including objective standards for what words and gestures objectively mean. Traister is wrestling with a solvable problem. She says, \"When you change rules, you end up penalizing people who were caught behaving according to the old rules.\" Maybe people do, but that is a sign of carelessness. It isn’t really hard to change the rules and then judge old actions by the old rules. We just have to remember to do so.</p>\r\n<p><a href=\"https://web.archive.org/web/20190903050208/https://stallman.org/archives/2019-jul-oct.html#27_August_2019_(Me-too_frenzy)\">stallman.org 27 August 2019 (Me-too frenzy)</a> In \"me-too\" frenzy, crossed signals about sex can easily be inflated into \"rape\". If people rush to judgment, in an informal way, that can destroy a man’s career without any trial in which to clear his name.</p>\r\n<p><a href=\"https://web.archive.org/web/20191011023557/https://stallman.org/archives/2019-jul-oct.html#21_September_2019_(Sex_workers)\">stallman.org 21 September 2019 (Sex workers)</a> Today’s Sex Workers, Like Their Victorian Sisters, Don’t Want \"saving\". Feminism today is drifting off the track into a campaign of prudery that harms everyone, except those who are asexual.</p>\r\n<p><a href=\"https://www.stallman.org/archives/2019-may-aug.html#11_June_2019_(Stretching_meaning_of_terms)\">stallman.org 11 June 2019 (Stretching meaning of terms)</a> Should we accept stretching the terms \"sexual abuse\" and \"molestation\" to include looking without touching? I do not accept it.</p>\r\n\r\n',393,0,1,'CC-BY-SA','Bradley M. Kuhn, Richard M. Stallman, RMS, FSF, Free Software Foundation',0,0,1),
(3304,'2021-04-01','Newsflash 21/01/04',178,'An upgrade to some standard information formats','<h2 id=\"introduction\">Introduction</h2>\r\n<p>After many years of confusion it has been decided to produce a common standard for dates and times between Europe and the United States of America.</p>\r\n<p>When encountering a USA date such as 03/14/2021 (known as <em>Pi Day</em> in the USA) there has been ambiguity over which part of the date is the day and which the month. There can also be confusion as to the year if the two-digit form is used.</p>\r\n<p>Standardisation is a way in which these sorts of ambiguities can be resolved. Having a common method of representation avoids confusion.</p>\r\n<p>Therefore, starting in 2021, in the spirit of clarity and prevention of misunderstanding, the EU has decided to standardise on compatible formats wherever possible.</p>\r\n<h3 id=\"dates\">Dates</h3>\r\n<p>Henceforward dates will be represented in one of the following forms:</p>\r\n<pre><code>MM/DD/YY    month/day of month/two-digit year\r\n\r\nYY/DD/MM    two-digit year/day of month/month</code></pre>\r\n<p>Thus, 21/14/03 or 03/14/21 will be universally recognised as <em>Pi Day</em>.</p>\r\n<h3 id=\"times\">Times</h3>\r\n<p>The break from the previous tyranny of <b>large</b>|<b>medium</b>|<b>small</b> or <b>small</b>|<b>medium</b>|<b>large</b> formats has been extended to 24-hour time representations.</p>\r\n<p>Henceforward 24-hour times will be represented in one of the following forms:</p>\r\n<pre><code>SS:HH:MM    seconds:hours:minutes\r\n\r\nMM:HH:SS    minutes:hours:seconds</code></pre>\r\n<h3 id=\"support\">Support</h3>\r\n<p>Bash already introduced support last year. You will need to update to Ubuntu Falex to get the latest version.</p>\r\n<h3 id=\"future-plans\">Future plans</h3>\r\n<p>The Standardisation Working Group will be planning other measures.</p>\r\n<p>Forthcoming rationalisations will be:</p>\r\n<ul>\r\n<li>Weights and Measures:\r\n<ul>\r\n<li>Discrepancies such as the US pint (16 fluid ounces) versus the British pint (20 fluid ounces)</li>\r\n</ul></li>\r\n<li>Temperature:\r\n<ul>\r\n<li>Fahrenheit versus Centigrade, replaced by the new <em>Eurotemp</em> which straddles both ranges. The choice might be the Rankine scale (°R), but this has yet to be decided.</li>\r\n</ul></li>\r\n</ul>\r\n',393,0,0,'CC-BY-SA','date,time,formats',0,0,1),
(3312,'2021-04-13','COVID Doldrums',4288,'MrX and Dave Morriss have a chat over Mumble in these trying times','<h2 id=\"introduction\">Introduction</h2>\r\n<p>Hosts:</p>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0201.html\">MrX</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\r\n</ul>\r\n<p>We had some issues with getting Mumble to work, for reasons we couldn’t quite fathom. Both ends needed to be restarted several times until all worked properly.</p>\r\n<p>We recorded this on Sunday March 7<sup>th</sup> 2021. The last time we set up a chat like this was back in August 2020, surprisingly!</p>\r\n<p><small>Note on the title: the term <em>the doldrums</em> refers to a belt around the equator where sailing ships used to be becalmed due to the lack of wind. It also means a state of inactivity or stagnation, or a dull, listless, depressed mood; low spirits. </small></p>\r\n<h2 id=\"topics-discussed\">Topics discussed</h2>\r\n<ul>\r\n<li>Pandemic (1):\r\n<ul>\r\n<li>Planning for pandemics</li>\r\n<li>Years ago parents used to let children catch chickenpox when it was known somebody had it (<a href=\"https://en.wikipedia.org/wiki/Pox_party\">pox party</a>).</li>\r\n<li>Did COVID-catching parties really happen? <a href=\"https://en.wikipedia.org/wiki/Coronavirus_party\">Wikipedia page on alleged COVID parties</a>.</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Christmas/New Year:\r\n<ul>\r\n<li>Dave:\r\n<ul>\r\n<li>Cooked a fancy vegetarian meal twice! On Boxing Day and New Years Day. Second time was a joint effort. Getting everything coordinated is easier when there are several contributors!</li>\r\n</ul></li>\r\n<li>MrX:\r\n<ul>\r\n<li>Had long break because like many I hadn’t taken many holidays</li>\r\n<li>Spent first part of holiday upgrading devices around the house</li>\r\n<li>I had a nice relaxing break and spent Christmas with my mother, she lives on her own.</li>\r\n<li>Visit to the dentist was interesting, wondering how they were going to cope with aerosol spray from the drill. The answer was they didn’t. Rough edge smoothed, they told me they will contact me when things settle down and said I was right to get it checked. If any pain or further break then will be moved into a different category where they do use drill with full PPE.</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Pandemic (2):\r\n<ul>\r\n<li>Dave:\r\n<ul>\r\n<li>Vaccination received on 2020-02-02 (<a href=\"https://en.wikipedia.org/wiki/Oxford%E2%80%93AstraZeneca_COVID-19_vaccine\">Oxford/AstraZeneca</a>)</li>\r\n<li>Probably getting second in late April or early May; not heard yet</li>\r\n<li>Still avoiding going out for the moment</li>\r\n<li>The deleterious effects of the lock down; trying to walk on a regular basis to counteract these and get exercise</li>\r\n<li>Meeting up with the rest of the family several times per week for dinner, etc.</li>\r\n</ul></li>\r\n<li>MrX:\r\n<ul>\r\n<li>Horizon things we now know about COVID</li>\r\n<li>Don’t know how long the vaccine protects against virus spreading but likely to protect against serious illness for a good long time.</li>\r\n<li>12 weeks between jabs: 2nd jab does not provoke a stronger response; it’s that the 1st jab produces good responses and poor responses but by waiting 12 weeks for the 2nd jab it only provokes the good responses.</li>\r\n<li>Think the UK has among the worst death rate in Europe</li>\r\n<li>Like Dave continuing to avoid the virus as before.</li>\r\n<li>Seems to be getting more difficult coping with lock down</li>\r\n<li>Haven’t been into work since last November, working from home</li>\r\n<li>Home working, clutter, stress, not taking enough breaks</li>\r\n<li>Glad I didn’t need to drive during all the bad weather</li>\r\n<li>Think I heard on a podcast recently that Linux use had dropped by 50%, could this be linked to people working from home. I would say this is true for myself</li>\r\n<li>Except for me all immediate family have been vaccinated</li>\r\n<li>Way to stay positive tip from something Mrs X read\r\n<ul>\r\n<li>Three things at the end of each day that were a highlight or something that we are grateful for.</li>\r\n<li>This may say something about my personality but for me the highlights often relate to food.</li>\r\n</ul></li>\r\n<li>Can’t go outside our own region.</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Weather in &amp; around Edinburgh:\r\n<ul>\r\n<li>Some snow in the past few months. More than Edinburgh tends to have.</li>\r\n<li>Methods of clearing snow on driveways. Snow shovels - mainly plastic unfortunately.</li>\r\n<li>Thoughts about making a home-made shovel out of metal for durability.</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li><em>To Do</em> lists and <code>Taskwarrior</code>:\r\n<ul>\r\n<li>Jeroen Baten did a <a href=\"https://hackerpublicradio.org/eps.php?id=3226\">show about Taskwarrior</a> in December 2020.</li>\r\n<li>Dave has been trying to use <a href=\"https://taskwarrior.org/\"><code>taskwarrior</code></a> regularly. There’s a feeling of achievement when a task is done!</li>\r\n<li>MrX has tried various solutions including paper. Taskwarrior doesn’t fit with many modes of working.</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Laptops and Chromebooks:\r\n<ul>\r\n<li>MrX has money to spend on either of these, and is debating what to buy</li>\r\n<li>Dave has an Entroware laptop but mainly uses a desktop system</li>\r\n</ul></li>\r\n</ul>\r\n<ul>\r\n<li>Technology:\r\n<ul>\r\n<li>Hand warmers:\r\n<ul>\r\n<li>MrX has a new electric hand warmer</li>\r\n<li>Dave only has experience of the reusable gel ones that release heat as they crystallise</li>\r\n<li>Talk of other technologies: single use warmers, fuelled Zippo warmers</li>\r\n</ul></li>\r\n<li><a href=\"https://www.raspberrypi.org/blog/raspberry-pi-silicon-pico-now-on-sale/\">Raspberry Pi Pico</a>:\r\n<ul>\r\n<li>Dave has one of these. It’s a microcontroller that costs £3.60. Not in use yet though.</li>\r\n<li>The keypad isn’t 16×16 but 4×4 – 16 keys, not 256! It’s from Pimoroni, the <a href=\"https://shop.pimoroni.com/products/pico-rgb-keypad-base\">RGB Keypad Base</a>.</li>\r\n</ul></li>\r\n<li>The <a href=\"https://en.wikipedia.org/wiki/R_(programming_language)\">R Programming Language</a></li>\r\n</ul></li>\r\n</ul>\r\n',225,0,1,'CC-BY-SA','COVID-19',0,0,1),
(3317,'2021-04-20','Reading a manifesto: Towards A Cooperative Technology Movement',1015,'If open source misses the point of free software philosophy, what point is free software missing?','<p>Three good decades ago, Richard Stallman founded the free software movement and gave it a name.</p>\r\n<p>Two good decades ago there was a fork and Eric S. Raymond, Bruce Perens and others founded the open\r\nsource software movement, and neglected to tell us who gave it a name.\r\n(it was Christine Peterson<a href=\"#footnote0\">[0]</a>)</p>\r\n<p>Ever since then, the free software side of the two movements has been careful to guard the boundary\r\nbetween the two, see Richard Stallman\'s essay \"<em>Open Source Misses the Point</em>\".<a href=\"#footnote1\">[1]</a></p>\r\n<p>But lately a lot of people have increasingly been feeling that <em>free software</em> misses the point.\r\nIronically a lot of this has been coming from the <em>open source</em> side of things, as the official free\r\nsoftware philosophy has been firmly anchored with Stallman, and he hasn\'t been interested in moving\r\nhis philosophy in more inclusive directions.</p>\r\n<p>For sure, there are a lot of people in free software who have been wanting to go in this direction\r\nas well. I\'ve been thinking of it as a \"free software plus\", as it builds on the free software\r\nphilosophy, but adds aspects of social responsibility. The fact that Stallman was forced to resign\r\nfrom being Free Software Foundation president two years ago was a sign that people inside free\r\nsoftware cared about more than just the code and what freedoms it gives the recipient.</p>\r\n<p>A month ago, if you are listening to this on April the 20th 2021,\r\na manifesto was published called \"<em>Towards A Communal Software Movement</em>\", and I\'ll get to\r\nthat in a minute. I mentioned the names of the drivers of the previous movements, but this author\r\nhas said \"I intentionally left authors\' names out of it\"<a href=\"#footnote2\">[2]</a>, and I think that makes sense. Part of the\r\nproblems with previous movements has been this Great Man of History fallacy, which may have kept\r\nthem focused and on track, but it has also held them back.</p>\r\n<p>The movement is young and has already changed names once as I was writing about it. The manifesto is\r\nnow \"<em>Towards A Cooperative Technology Movement</em>\", and I have updated the shownotes and my commentary\r\nto reflect that.</p>\r\n<p><a href=\"https://misskey.de/notes/8k0igd5tcd\">https://misskey.de/notes/8k0igd5tcd</a></p>\r\n<p>I see the difference between free software and cooperative technology similarly as the difference\r\nbetween open source and free software.</p>\r\n<p>There are certainly people within open source and on the Open Source Initiative board that look\r\nfurther than just the license, and treat open source like just another brand name for free software.</p>\r\n<p>But at its core, the Open Source Definition is all about the licensing and that document is the\r\nshared common ground for all open source. People write code for different reasons and there\'s a\r\nlicense and contribution model that allow them to come together without those differences of purpose\r\ngetting too much in the way.</p>\r\n<p>So if the software and the license is \"what\" we\'re building, the philosophical documents of free\r\nsoftware provide the guidance on \"why\" we are building it: We want to get away from proprietary\r\nsoftware, we want to control our own computing, we want the freedoms to use, learn, modify and\r\nshare, etc. Free software is about our freedoms.</p>\r\n<p>So just like \"free\" is right there in the name, maybe the \"community\" in \"communal software\" or\r\nthe \"cooperative\" in \"cooperative technology\" is\r\nall about the \"who\": Who gets the freedom, who has the influence, who is affected.</p>\r\n<p>And again, lots of people in free software do care about community principles beyond code, care about\r\nsocial responsibility, but the shared baseline is the care for formal, technical and individual user\r\nfreedom: If <em>you</em> receive the code, <em>you</em> are allowed the <em>technical rights</em> to update the code, the\r\ncode or license should not restrict <em>your</em> freedoms, you, the recipient of the software, the hacker,\r\nthe code contributor. It says nothing about <em>practical</em> user freedom and it says nothing about the\r\ncommunity beyond the immediate user.</p>\r\n<hr>\r\n<p>That was my commentary. Now let\'s read the manifesto.</p>\r\n<p><a href=\"https://cooperativetechnology.codeberg.page/\">https://cooperativetechnology.codeberg.page/</a></p>\r\n<hr>\r\n<p>Before I saw the manifesto, I had written a draft list of aspects beyond licensing and contribution\r\nthat determine the social good of your project:\r\n<a href=\"https://libranet.de/display/0b6b25a8-3060-61f6-28df-cae554943983\">https://libranet.de/display/0b6b25a8-3060-61f6-28df-cae554943983</a></p>\r\n<p>The conversations that led directly to the creation of the manifesto:\r\n<a href=\"https://social.polymerwitch.com/@polymerwitch/105934078911643041\">https://social.polymerwitch.com/@polymerwitch/105934078911643041</a>\r\n<a href=\"https://fosstodon.org/@be/105952735879246194\">https://fosstodon.org/@be/105952735879246194</a></p>\r\n<p><a name=\"footnote0\">[0]</a> <a href=\"https://opensource.com/article/18/2/coining-term-open-source-software\">https://opensource.com/article/18/2/coining-term-open-source-software</a></p>\r\n<p><a name=\"footnote1\">[1]</a> <a href=\"https://www.gnu.org/philosophy/open-source-misses-the-point.en.html\">https://www.gnu.org/philosophy/open-source-misses-the-point.en.html</a></p>\r\n<p><a name=\"footnote2\">[2]</a> <a href=\"https://fosstodon.org/@be/105952960559032774\">https://fosstodon.org/@be/105952960559032774</a></p>\r\n<hr>\r\n<h1 id=\"towards-a-cooperative-technology-movement\">Towards A Cooperative Technology Movement</h1>\r\n<p>In response to the surprise, undemocratic reinstatement of Richard Stallman to the board of directors of the Free Software Foundation after his resignation in September 2019, the Free and Open Source Software movement is in the midst of a reckoning.\r\nThe authors of this document recognize and honor the contributions Richard Stallman has made to this movement while unequivocally condemning his harmful behavior which has pushed many capable, dedicated people away from the movement.</p>\r\n<p>Regardless of what happens in the Free Software Foundation, we believe it is time to reflect on the shortcomings of our advocacy so we can grow into a more effective and inclusive movement for justice.\r\nTowards this end, we believe the movement will benefit from new terminology to describe what we do and what we aim for.\r\nRichard Stallman authored the <a href=\"https://gnu.org/philosophy/free-sw.html\">free software definition</a> in 1986.\r\nThis term has always created difficulties communicating the ideas behind it because of the different meanings of the word \"free\" in English.\r\nMoreover, it is not the freedom of machines we are concerned with, but the freedom of humans.\r\nIn response to this and other issues, in 1998, the term <a href=\"https://opensource.org/docs/osd\">open source</a> was promoted using an adapted version of the <a href=\"https://www.debian.org/social_contract#guidelines\">Debian Free Software Guidelines</a>.\r\nThe history of computing in the past 23 years have validated critiques that the term \"open source\" is insufficient for communicating the values behind it.\r\nThe term \"open source\" and the ecosystem of Free and Open Source Software (FOSS) is today used by powerful companies, governments, and other institutions to harm people on enormous scales through <a href=\"https://www.youtube.com/watch?v=0hLjuVyIIrs\">surveillance</a> and <a href=\"https://www.theverge.com/2019/10/9/20906213/github-ice-microsoft-software-email-contract-immigration-nonprofit-donation\">violence</a>.\r\nThese institutions use FOSS to minimize economic costs by benefitting from decades of work done by others, much of which was done by unpaid volunteers motivated by curiosity, passion, and the ideals of the FOSS movement.</p>\r\n<p>We believe a significant reason for the failures of both \"free software\" and \"open source\" to prevent this cooptation is that the men who coined and initially promoted these terms did not and do not critique capitalism.\r\nRichard Stallman has generally <a href=\"https://www.gnu.org/gnu/byte-interview.html\">dodged</a> <a href=\"https://www.gnu.org/gnu/manifesto.html#competition\">the</a> <a href=\"https://www.gnu.org/philosophy/bill-gates-and-other-communists.en.html\">question</a> of whether free software is opposed to capitalism.\r\nIn the historical context of the United States in the 1980s, that may have been a wise decision.\r\nBut that was then, and now it is 2021.\r\nThe promoters of \"open source\" <a href=\"https://www.youtube.com/watch?v=4vW62KqKJ5A&amp;t=2186s\">emphasize its compatibility with capitalism</a> and <a href=\"https://www.youtube.com/watch?v=4vW62KqKJ5A&amp;t=3824s\">go out of their way to distance \"open source\" from critiques of capitalism</a>.\r\nWe believe we need to build on the FOSS movement with an explicitly anticapitalist political movement which proactively collaborates with other movements for justice.</p>\r\n<p>We propose the term \"cooperative technology\" for this movement.\r\nBy \"cooperative technology\", we mean technology that is constructed by and for the people whose lives are affected by its use.\r\nWhile this builds on the Free and Open Source Software movement, we aim to apply the same principles to hardware as well, although the criteria by which we evaluate hardware and software will of course not be identical.\r\nIt is not sufficient to narrowly focus on the people who directly interact with computers.\r\nCooperative software which is run on a server should not be controlled solely by the administrator of the server, but also by the people who interact with the server over a network.\r\nSimilarly, the data generated by the technology and the data which it requires to function should be in the control of the people who are affected by the technology.\r\nCooperative software that uses cameras should not be controlled solely by the people who own the cameras, but also the people who are observed by the cameras.\r\nCooperative electronic medical record systems should not be designed for the interests of insurance companies or hospital administrators, but for the interests of patients and the clinicians who directly use it.</p>\r\n<p>We aim for a world in which all technology is cooperative technology and recognize that any amount of proprietary technology is in conflict with this goal.\r\nAs an anticapitalist movement, we recognize that any institution which motivates people to put money, power, or self-interest above the welfare of humans is in conflict with our goals.\r\nCorporations are beholden to their shareholders who can hold the corporation legally liable for spending money in a way that is not intended to further enrich the shareholders.\r\nOther capitalist forms of enterprise have similar problems, incentivizing the profit of an elite few over the impact their activities have on others.</p>\r\n<p>We are not opposed to exchanges of money being involved in the creation or distribution of software or hardware.\r\nHowever, we should carefully consider the motivational structures of the institutions which fund technology development.\r\nWho benefits from the technology and who determines the priorities of its development and design?\r\nThese are questions we ask about technology whether money is involved or not.\r\nIt is in our interest to use safeguards to ensure that technology always remains controlled by the community which develops and uses it.\r\nCopyleft is one such safeguard, but it is insufficient on its own to prevent cooptation of our movement.\r\nAny cooperative technology project that receives funding from a for-profit enterprise must institute governance structures which prioritize community interests over profit in case there is a conflict between the two.\r\nWe oppose business models which are in conflict with community interests such as <a href=\"https://media.libreplanet.org/u/libreplanet/m/why-i-forked-my-own-project-and-my-own-company-31c3/\">\"open core\"</a>/<a href=\"https://sfconservancy.org/blog/2020/jan/06/copyleft-equality/\">proprietary relicensing</a>.</p>\r\n<p>Similarly, we are opposed to authoritarian and hierarchical governance structures of technology projects such as \"benevolent dictators for life\".\r\nCooperative technology is developed democratically; no single individual should have ultimate authority in cooperative projects.\r\nWhile we recognize the need for leadership and private communication, discussions regarding cooperative technology should take place in public unless there is a specific reason for communications to be private.\r\nOrganizations which advocate for cooperative technology should likewise operate democratically and transparently.</p>\r\n<p>We recognize that creating high quality technology requires much more than engineering skills.\r\nCooperative technology is not only for people who have the skills of writing code (unless the software is for writing code such as a compiler) nor the skills to design hardware.\r\nCooperative technology strives to be easy to use, including for people with disabilities, and acknowledges that this is best accomplished by continual dialog between engineers and users.\r\nProviding such feedback is a valuable way to contribute to the construction of cooperative technology without needing engineering skills.\r\nIdeally, the engineers of the technology should also be using it themselves.\r\nMoreover, there are many ways to contribute to cooperative technology without programming skills such as imagining ideas for new features, reporting bugs, writing documentation, graphic design, translation, promotion, and financial support.</p>\r\n<p>The free software movement has <a href=\"https://archive.fosdem.org/2019/schedule/event/full_software_freedom/\">failed to create a world in which humans in technological societies can live without using proprietary software unless one chooses to live the ascetic lifestyle of Richard Stallman</a>.\r\nExpecting people to not use any proprietary technology and judging people for not meeting this standard pushes people away from our movement.\r\nPeople who are coerced into using proprietary technology deserve our empathy and invitation into our movement, not condescension.\r\nLet us criticize institutions which pressure people into using proprietary technology, not the people who choose to use it.\r\nTo that end, we strive to use cooperative technology tools as much as possible in our efforts to build cooperative technology.</p>\r\n<p>The purpose of this document is <em>not</em> to proclaim a legalistic set of criteria for determining what technology is cooperative and what technology is not.\r\nHistory has demonstrated that this is not an effective political tactic for the reasons explained above.\r\nThe <a href=\"https://gnu.org/philosophy/free-sw.html\">free software definition</a> and the <a href=\"https://opensource.org/docs/osd\">open source definition</a> are useful criteria for evaluating copyright licenses for code, but an effective political movement cannot be so narrowly focused on legalistic and binary judgements of copyright licenses to judge whether certain technology aligns with our goals.\r\nWe believe the focus of the cooperative technology movement should be on the practical impacts that the use of technology has on humans and the universe we inhabit.\r\nThe scope of this extends beyond humans and must consider the <a href=\"https://www.bbc.com/news/technology-56012952\">environment around us</a>.\r\nMoreover, we believe it is counterproductive to have a small self-appointed group of privileged men determine what our movement\'s terminology, goals, and tactics are.\r\nWe encourage anyone interested in building a better world through technology to engage in discussions with your own communities about what you want \"cooperative technology\" to mean.</p>\r\n<p>While we agree with the Ethical Software Movement that we must resist when our efforts are coopted for unjust purposes, we reject putting restrictions on the ways people may use software through copyright licenses as a wise tactic for achieving our goals.\r\nThe history of the Free and Open Source Software movement has shown that the proliferation of incompatible copyright licenses which prohibit software from being legally combined creates more obstacles than opportunities for our movement.\r\nAny new copyright licenses for use with cooperative software must be written with this consideration in mind to intentionally avoid fracturing the software ecosystem.\r\nAdopting incompatible copyright licenses for different software would make it easy for our adversaries to divide and suppress the movement.</p>\r\n<p>Language is constructed collectively and is always evolving.\r\nIt is counterproductive to our movement to refuse to collaborate with people because they use the words \"open source\" or \"free software\" to describe their work.\r\nThey may even disagree with the entire premise of this document.\r\nThat does not mean we should not work together towards shared goals, but we should be conscious that our goals may not perfectly align and this may cause tension in our communities from time to time.\r\nWe invite anyone to collaborate with us who is interested in building a better world and treats us and others in our communities with dignity and respect.</p>\r\n<p>This document is licensed under the <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">CC0 license</a>. Contributions are welcome on <a href=\"https://codeberg.org/CooperativeTechnology/website\">Codeberg</a>. If you disagree with parts of this, feel free to fork it and say what <em>you</em> want to say.</p>\r\n',311,0,0,'CC-0','open source, free software, communal software, cooperative technology, politics, philosophy',0,0,1),
(3315,'2021-04-16','tesseract optical character recognition',128,'How to use this amazing tool','<h3>Tesseract (software)</h3>\r\n<em>From Wikipedia, the free encyclopedia</em>\r\n<p>\r\nTesseract is an optical character recognition engine for various operating systems. It is free software, released under the Apache License. Originally developed by Hewlett-Packard as proprietary software in the 1980s, it was released as open source in 2005 and development has been sponsored by Google since 2006.<br />\r\nIn 2006, Tesseract was considered one of the most accurate open-source OCR engines then available.\r\n</p>\r\n<pre>\r\n<code>\r\n$ tesseract -l eng english-page.jpg english\r\n$ tesseract -l nld dutch-page.jpg dutch\r\n$ ls\r\ndutch.txt english.txt \r\n</code>\r\n</pre>',30,0,0,'CC-BY-SA','Tesseract, OCR, optical character recognition',0,0,1),
(3319,'2021-04-22','Linux Inlaws S01E28: Politicians and artificial intelligence part 1',4023,'Part 1 of a miniseries on AI, ML, DL and other fun','<p>In this episode, our two heroes explore the realm of artificial intelligence, paying special attention to deep learning (hoping that some\r\nof the stuff may rub on them :-). In this first part of a three-part mini-series the chaps discuss the foundation including networks, neurons\r\nand other topics of advanced black magic, carefully avoiding the temptations of introducing too much maths (we\'ll leave this to the Grumpy Old Coders :-).</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Artificial intelligence: <a href=\"https://en.wikipedia.org/wiki/Artificial_intelligence\" target=\"_blank\">https://en.wikipedia.org/wiki/Artificial_intelligence</a>\r\n</li>\r\n<li>Machine learning: <a href=\"https://www.mygreatlearning.com/blog/machine-learning-tutorial\" target=\"_blank\">https://www.mygreatlearning.com/blog/machine-learning-tutorial</a>\r\n</li>\r\n<li>Deep learning: <a href=\"https://www.guru99.com/deep-learning-tutorial.html\" target=\"_blank\">https://www.guru99.com/deep-learning-tutorial.html</a>\r\n</li>\r\n<li>Artificial neural networks (ANN): <a href=\"https://www.asimovinstitute.org/neural-network-zoo\" target=\"_blank\">https://www.asimovinstitute.org/neural-network-zoo</a>\r\n</li>\r\n<li>Back-propagation ANNs (BPN): <a href=\"https://en.wikipedia.org/wiki/Backpropagation\" target=\"_blank\">https://en.wikipedia.org/wiki/Backpropagation</a>\r\n</li>\r\n<li>DWAVE: <a href=\"https://www.dwavesys.com/quantum-computing\" target=\"_blank\">https://www.dwavesys.com/quantum-computing</a>\r\n</li>\r\n<li>Convolutional neural networks (CNNs): <a href=\"https://en.wikipedia.org/wiki/Convolutional_neural_network\" target=\"_blank\">https://en.wikipedia.org/wiki/Convolutional_neural_network</a>\r\n</li>\r\n<li>Generative adversarial network (GAN): <a href=\"https://en.wikipedia.org/wiki/Generative_adversarial_network\" target=\"_blank\">https://en.wikipedia.org/wiki/Generative_adversarial_network</a>\r\n</li>\r\n<li>Spy vs. Spy: <a href=\"https://toonopedia.com/spyvsspy.htm\" target=\"_blank\">https://toonopedia.com/spyvsspy.htm</a>\r\n</li>\r\n<li>Atlantik Ale: <a href=\"https://www.stoertebeker.com/stoertebeker-atlantik-ale.html\" target=\"_blank\">https://www.stoertebeker.com/stoertebeker-atlantik-ale.html</a>\r\n</li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Policitians, artificial intelligence, deep learning, convolutions',0,0,1),
(3313,'2021-04-14','Zoom Update',102,'Scripted Zoom Update with History on Fedora.','<ul>\r\n<li>Script and instruction at <a href=\"https://james.toebesacademy.com/ZoomUpdate.html\" class=\"uri\">https://james.toebesacademy.com/ZoomUpdate.html</a></li>\r\n<li>GitHub Repo: <a href=\"https://github.com/ToeJet/Scripts/tree/main/ZOOMUPDATE\" class=\"uri\">https://github.com/ToeJet/Scripts/tree/main/ZOOMUPDATE</a></li>\r\n</ul>\r\n<p>Zoom does not provide a standard Fedora repo for updating. To get around that, this script will check the zoom fedora download link. If an update is found, it will download the new version, stop the current version from running, then install the updated package. All versions are downloaded to the same folder as the script. Filename is changed to match datestamp.</p>\r\n<p>I leave my linux machine always running. I schedule this to run just after midnight. If no update, nothing happens. If zoom is not running when I unlock, I launch zoom as normal.</p>\r\n<ul>\r\n<li>Bash Script.</li>\r\n<li>Uses wget</li>\r\n<li>Cron for scheduling</li>\r\n<li>Download, cron, forget...</li>\r\n<li>Periodically review log to see update history</li>\r\n</ul>\r\n<p>james@toebesacademy.com<br />\r\n<a href=\"https://james.toebesacademy.com\" class=\"uri\">https://james.toebesacademy.com</a><br />\r\nLet me know what you think.</p>\r\n',273,108,1,'CC-BY-SA','zoom update,sysadmin automation',0,0,1),
(3318,'2021-04-21','Modding a Wii classic with a DNS exploit',457,'Modding a Wii with a DNS exploit and using a USB drive to save games','<ol type=\"1\">\r\n<li>Wii Options &gt; Wii Settings</li>\r\n<li>Verify version is 4.3\r\n<ul>\r\n<li>If not,</li>\r\n<li>Is the Wii connected to the internet</li>\r\n<li>If not, go to Connection Settings\r\n<ul>\r\n<li>Pick Connection 1</li>\r\n<li>Enter wifi connection info</li>\r\n<li>perform Wii System Update (Page 3 of Wii Settings)</li>\r\n</ul></li>\r\n</ul></li>\r\n<li>Wii Settings &gt; Internet\r\n<ul>\r\n<li>Go to Change Settings</li>\r\n<li>A few pages over is Auto-Obtain DNS\r\n<ul>\r\n<li>Select No and Advanced Settings</li>\r\n<li>Enter Primary DNS: 97.74.103.14</li>\r\n<li>Enter Secondary DNS: 173.201.71.14</li>\r\n</ul></li>\r\n<li>Confirm and Save Settings</li>\r\n<li>Press Ok to perform Connection Test</li>\r\n<li>This does take a while, be patient because the Wii is slow</li>\r\n<li>Go back a couple of pages to Internet Settings</li>\r\n<li>Go to User Agreements\r\n<ul>\r\n<li>Would you like to use the Wii Shop Channel and WiiConnect24?</li>\r\n<li>Select Yes</li>\r\n<li>You must review the User Agreements before using the Wii network services.</li>\r\n<li>Select Next</li>\r\n<li>Connecting to Internet... Please wait a moment.</li>\r\n<li>Another screen will appear with message to \"Please wait, this will take 1-2 minutes.\"\r\n<ul>\r\n<li>Do NOT press I Accept at this point, or it will go to the previous screen.</li>\r\n<li>These next two screens will show up, one with console text, which is the exploit, and the next look like static. This is ok</li>\r\n<li>The next screen is a message not to be scammed by buying a copy of HackMii. Wait for the option to press \'1\' to continue.</li>\r\n<li>The HackMii menu will now appear, press \'A\' to continue.</li>\r\n<li>On the HackMii installer screen, use the D-pad on the Wii to arrow up to Install The HomeBrew Channel.</li>\r\n</ul></li>\r\n</ul></li>\r\n<li>At this point the Wii can be powered off.</li>\r\n</ul></li>\r\n<li>Install Wii Homebrew Browser <a href=\"https://oscwii.org/\" class=\"uri\">https://oscwii.org/</a>\r\n<ul>\r\n<li>I have read that a 2gb non-hd sd card was needed, but found that up to a 32gb card works just fine.</li>\r\n<li>Remove the sd card and download and extract the zip file on the main page.</li>\r\n<li>Move the folder on the root of the sd card (i.e. <code>apps/homebrew_browser/</code>).</li>\r\n<li>More applications can now be accessed from the Homebrew Browser.</li>\r\n</ul></li>\r\n<li>Adding roms (i.e. Nintendo 64 games)\r\n<ul>\r\n<li>From the Homebrew Browser, add the not64 emulator, as the Wii64 would not save games for me. This is an updated version of the Wii64 emulator.</li>\r\n<li>At the root of the sd card, if it is not already there, create a not64/roms folder and place the roms in here.</li>\r\n</ul></li>\r\n<li>Play Wii games from a USB drive\r\n<ul>\r\n<li>First need to install cIOS (custom OS)\r\n<ul>\r\n<li>Will be installing:\r\n<ul>\r\n<li>cIOS 249 base 56 v10 beta52, some guides say cIOS 249 base 56 beta52-alt, YMMV.</li>\r\n<li>cIOS 250 base 57 v10 beta52</li>\r\n</ul></li>\r\n</ul></li>\r\n<li>From the Homebrew Browser, go to the Utilities tab and install USBLoader and the d2x cIOS installer.</li>\r\n<li>Wait for the app to load.</li>\r\n<li>You will see the main screen, press A\r\n<ul>\r\n<li>Change the following:\r\n<ul>\r\n<li>cIOS to v10 beta 52 d2x-v10-beta52-alt</li>\r\n<li>base to 56</li>\r\n<li>slot to 249</li>\r\n<li>revision to 65535</li>\r\n</ul></li>\r\n<li>Press A to load these values</li>\r\n</ul></li>\r\n<li>The app will go back to the main screen, just go right back into the app.\r\n<ul>\r\n<li>Change the following:\r\n<ul>\r\n<li>cIOS to v10 beta 52 d2x-v10-beta52</li>\r\n<li>base to 57</li>\r\n<li>slot to 250</li>\r\n<li>revision to 65535</li>\r\n</ul></li>\r\n<li>Press A to load these values</li>\r\n</ul></li>\r\n<li>You are now ready to format the external USB drive\r\n<ul>\r\n<li>This can be either FAT32 or ext4</li>\r\n<li>Plug in the USB drive afterwards and load the USBloader</li>\r\n<li>It only works in one USB slot, so if this is not recognized the first time, move the plug to the other slot.</li>\r\n<li>Now you can save games from Wii disks, or load roms from the same drive</li>\r\n<li>Roms are placed at the root of the USB drive with the format of <emulator>/roms/</li>\r\n</ul></li>\r\n</ul></li>\r\n<li>That\'s all.</li>\r\n</ol>\r\n<h3 id=\"sources\">Sources:</h3>\r\n<ul>\r\n<li><p>Homebrew the Nintendo Wii WITHOUT an SD Card or the Internet Channel! (str2hax Tutorial)<br />\r\n<a href=\"https://www.youtube.com/watch?v=Y3jq8dVe2ug&amp;list=PLXCLabMctsBdCKq6d-lpkzVLxIK9W8hjV&amp;index=2\" class=\"uri\">https://www.youtube.com/watch?v=Y3jq8dVe2ug&amp;list=PLXCLabMctsBdCKq6d-lpkzVLxIK9W8hjV&amp;index=2</a></p></li>\r\n<li><p>WiiBrew wiki - Configuring applications<br />\r\n<a href=\"https://wiibrew.org/wiki/Homebrew_Channel#Configuring_Applications\" class=\"uri\">https://wiibrew.org/wiki/Homebrew_Channel#Configuring_Applications</a></p></li>\r\n<li><p>Backup &amp; Play Wii Games on a USB Drive! - USBLoader GX Tutorial<br />\r\n<a href=\"https://www.youtube.com/watch?v=D66pyQLQCmg&amp;list=PLXCLabMctsBdCKq6d-lpkzVLxIK9W8hjV&amp;index=3\" class=\"uri\">https://www.youtube.com/watch?v=D66pyQLQCmg&amp;list=PLXCLabMctsBdCKq6d-lpkzVLxIK9W8hjV&amp;index=3</a></p></li>\r\n<li><p>cIOS Installation<br />\r\n<a href=\"https://sites.google.com/site/completesg/backup-launchers/installation\" class=\"uri\">https://sites.google.com/site/completesg/backup-launchers/installation</a></p></li>\r\n<li><p>str2hax is an exploit for the EULA app in the Wii that doesn\'t require an SD card.<br />\r\n<a href=\"https://www.wiibrew.org/wiki/Str2hax\" class=\"uri\">https://www.wiibrew.org/wiki/Str2hax</a></p></li>\r\n</ul>\r\n<h3 id=\"more-reading\">More reading</h3>\r\n<ul>\r\n<li>WiiBrew main wiki page<br />\r\n<a href=\"https://www.wiibrew.org/wiki/Main_Page\" class=\"uri\">https://www.wiibrew.org/wiki/Main_Page</a></li>\r\n</ul>\r\n<!--\r\nvim: syntax=markdown:ts=8:sw=4:ai:et:tw=78:fo=tcqn:fdm=marker:com+=fb\\:-\r\n-->\r\n',318,0,0,'CC-BY-SA','games, wii console',0,0,1),
(3321,'2021-04-26','DNS66 URANDOM RANDOM',1911,'I talk about D N S 66 and go over some comments from Urandom episode ','<ul>\r\n<li><p>DNS66 apk<br />\r\n<a href=\"https://f-droid.org/packages/org.jak_linux.dns66/\" class=\"uri\">https://f-droid.org/packages/org.jak_linux.dns66/</a></p></li>\r\n<li><p>for more ads:<br />\r\n<a href=\"https://adaway.org/hosts.txt\" class=\"uri\">https://adaway.org/hosts.txt</a></p></li>\r\n<li><p>for blocking pinterest<br />\r\n<a href=\"https://rmccurdy.com/.scripts/hosts.file.pinterest.txt\" class=\"uri\">https://rmccurdy.com/.scripts/hosts.file.pinterest.txt</a></p></li>\r\n<li><p><a href=\"https://www.reddit.com/r/browsers/comments/jr6k6d/is_brave_browser_really_that_bad/\" class=\"uri\">https://www.reddit.com/r/browsers/comments/jr6k6d/is_brave_browser_really_that_bad/</a></p></li>\r\n<li><p><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</ul>\r\n',36,0,0,'CC-BY-SA','block ads,ads,android,youtube,media,streaming',0,0,1),
(3314,'2021-04-15','Introduction... A little bit about me',226,'My first HPR episode, introducing myself and sharing a bit about me','<p>Inoffensive in every region of the world. Meeting me is a completely different story.</p>\r\n<p>Name is Trey. I have been listening to HPR for about a year and after hearing repeated pleas for episodes, I thought I would record some of my own.</p>\r\n<p>I cannot guarantee quality of production nor content, but I hope you find them entertaining.</p>\r\n<p>This episode is simply an introduction with a little bit of information about me</p>\r\n<p>My love of computers began 40 years ago when my parents scrimped and saved to purchase a Texas Instruments TI-99/4a computer. I began programming in BASIC, saving programs to audio cassette tapes. I remember buying magazines to get new programs to enter, save, edit, and turn into something different.</p>\r\n<p>Soon I expanded the computer to include 32K of RAM and an RS232 card which allowed me to connect a 300 BAUD modem and connect to bulletin board systems (BBS). BBS became my connection to the world.</p>\r\n<p>I later upgraded to a Commodore 64, which gave me a floppy disk. Much faster than saving to tape. I studied electronics &amp; computers in college, then went to work for a large computer vendor, traveling all over fixing computers, networks, and peripherals.</p>\r\n<p>After about a decade, I joined a different company where I worked in systems administration and engineering, with a focus on information security. I have worked as security analyst, incident responder, security engineer, and security architect, then built out and managed the SOC for a large organization.</p>\r\n<p>Today, I am still focused on information security and I also dabble in clock repair, Ham radio, electronics, and photography. I may record some episodes on some of these topics in the future.</p>\r\n<p>Thank you for listening to me prattle on about myself, and have an awesome day.</p>\r\n',394,0,0,'CC-BY-SA','Introduction',0,0,1),
(3316,'2021-04-19','FSF and RMS on election of Richard Stallman',841,'The Free Software Foundation (FSF) and Richard Stallman have released statements on the matter','<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=3311\">hpr3311 :: Bradley M. Kuhn\'s article from 2019 on Richard M. Stallman</a>\r\n</p>\r\n<hr />\r\n<p><a href=\"https://en.wikipedia.org/wiki/Richard_Stallman\">From Wikipedia, the free encyclopedia</a> <quote> In September 2019, Richard Stallman resigned as president of the FSF and left his “visiting scientist” role at MIT after making controversial comments about Marvin Minsky’s alleged role in the Jeffrey Epstein sex trafficking scandal. Stallman remained head of the GNU Project nevertheless and, in 2021, he returned to the FSF board of directors. </quote></p>\r\n<p>Since the show was submitted both the Free Software Foundation (FSF) and Richard Stallman have released statements on the matter.</p>\r\n<p>I am submitting those statements here under the terms of the <a href=\"https://creativecommons.org/licenses/by-nd/3.0/\">Creative Commons Attribution-No Derivative Works 3.0 license</a>. The statements contains many links which are available in the shownotes for this show.</p>\r\n<h1 id=\"statement-of-fsf-board-on-election-of-richard-stallman\">Statement of FSF board on election of Richard Stallman</h1>\r\n<p>Published on Apr 12, 2021 10:25 AM by <a href=\"https://www.fsf.org/author/fsfweb\">Free Software Foundation</a></p>\r\n<p>\r\nThe voting members of the Free Software Foundation, which include the board of directors, voted to appoint Richard Stallman to a board seat after several months of thorough discussion and thoughtful deliberation.\r\n</p>\r\n<p>\r\nWe decided to bring RMS back because we missed his wisdom. His historical, legal and technical acumen on free software is unrivaled. He has a deep sensitivity to the ways that technologies can contribute to both the enhancement and the diminution of basic human rights. His global network of connections is invaluable. He remains the most articulate philosopher and an unquestionably dedicated advocate of freedom in computing.\r\n</p>\r\n<p>\r\n<a href=\"https://www.fsf.org/news/rms-addresses-the-free-software-community\">RMS acknowledges that he has made mistakes.</a> He has sincere regrets, especially at how anger toward him personally has negatively impacted the reputation and mission of FSF. While his personal style remains troubling for some, a majority of the board feel his behavior has moderated and believe that his thinking strengthens the work of the FSF in pursuit of its mission.\r\n</p>\r\n<p>\r\nWe take full responsibility for how badly we handled the news of his election to a board seat. We had planned a flow of information that was not executed in a timely manner or delivered in the proper sequence.\r\n</p>\r\n<p>\r\nFSF staff should have been informed and consulted first. The announcement by RMS at LibrePlanet was a complete surprise to staff, all those who worked so hard to organize a great event, to LibrePlanet speakers and to the exhibitors. We had hoped for a more inclusive and thoughtful process and we apologize that this did not occur.\r\n</p>\r\n<p>\r\nIn his position on the board, RMS has the same responsibilities as other members. He is an unpaid volunteer and subject to the organization’s policies, including prohibitions against conflicts of interest and sexual harassment and those outlining whistleblower processes and fiduciary duties. The responsibilities of the board are described at <a href=\"https://www.fsf.org/about/the-role-of-the-fsfs-board-of-directors\">https://www.fsf.org/about/the-role-of-the-fsfs-board-of-directors</a>.\r\n</p>\r\n<p>\r\nWe believe his views will be critical to the FSF as we advance the mission and confront the challenges that software freedom faces.\r\n</p>\r\n<p>\r\nIn recent weeks, the board has <a href=\"https://www.fsf.org/news/preliminary-board-statement-on-fsf-governance\">committed to a series of changes</a> related to <a href=\"https://www.fsf.org/news/update-on-work-to-improve-governance-at-the-fsf\">organizational governance</a>, including plans to adopt a transparent, formal process for identifying appropriate candidates to become new board members, future changes to the organization’s bylaws, and the addition of a staff representative to the board of directors.\r\n</p>\r\n<p>\r\nSelected by FSF’s unionized staff, senior systems administrator <a href=\"https://www.fsf.org/news/welcoming-ian-kelling-to-staff-seat-on-fsfs-board-of-directors\">Ian Kelling was elected</a> to a newly created staff seat on the board of directors as a voting member on March 28.\r\n</p>\r\n<p>\r\nThe FSF board will continue to pursue additional ideas and actions designed to improve transparency and accountability.\r\n</p>\r\n<p>\r\nThere is still considerable work to be done. We recognize the need to attract a new generation of activists for software freedom and to grow the movement. We will report our discussions and activities to the community as we move forward.\r\n</p>\r\n<p>\r\nAs we work on these issues, let’s not forget the purpose of our movement, or the great work of our staff and all the good people of the free software community who are dedicated to users’ freedom.\r\n</p>\r\n<hr />\r\n<h1 id=\"rms-addresses-the-free-software-community\">RMS addresses the free software community</h1>\r\n<p>Published on Apr 12, 2021 10:24 AM by <a href=\"https://www.fsf.org/author/rms\">Richard Stallman</a></p>\r\n<p>\r\nEver since my teenage years, I felt as if there were a filmy curtain separating me from other people my age. I understood the words of their conversations, but I could not grasp why they said what they did. Much later I realized that I didn’t understand the subtle cues that other people were responding to.\r\n</p>\r\n<p>\r\nLater in life, I discovered that some people had negative reactions to my behavior, which I did not even know about. Tending to be direct and honest with my thoughts, I sometimes made others uncomfortable or even offended them – especially women. This was not a choice: I didn’t understand the problem enough to know which choices there were.\r\n</p>\r\n<p>\r\nSometimes I lost my temper because I didn’t have the social skills to avoid it. Some people could cope with this; others were hurt. I apologize to each of them. Please direct your criticism at me, <a href=\"https://www.fsf.org/news/statement-of-fsf-board-on-election-of-richard-stallman\">not at the Free Software Foundation</a>.\r\n</p>\r\n<p>\r\nOccasionally I learned something about relationships and social skills, so over the years I’ve found ways to get better at these situations. When people help me understand an aspect of what went wrong, and that shows me a way of treating people better, I teach myself to recognize when I should act that way. I keep making this effort, and over time, I improve.\r\n</p>\r\n<p>\r\nSome have described me as being “tone-deaf,” and that is fair. With my difficulty in understanding social cues, that tends to happen. For instance, I defended Professor Minsky on an M.I.T. mailing list after someone leaped to the conclusion that he was just guilty as Jeffrey Epstein. To my surprise, some thought my message defended Epstein. As I had stated previously, Epstein is a serial rapist, and rapists should be punished. I wish for his victims and those harmed by him to receive justice.\r\n</p>\r\n<p>\r\nFalse accusations – real or imaginary, against me or against others – especially anger me. I knew Minsky only distantly, but seeing him unjustly accused made me spring to his defense. I would have done it for anyone. Police brutality makes me angry, but when the cops lie about their victims afterwards, that false accusation is the ultimate outrage for me. I condemn racism and sexism, including their systemic forms, so when people say I don’t, that hurts too.\r\n</p>\r\n<p>\r\nIt was right for me to talk about the injustice to Minsky, but it was tone-deaf that I didn’t acknowledge as context the injustice that Epstein did to women or the pain that caused.\r\n</p>\r\n<p>\r\nI’ve learned something from this about how to be kind to people who have been hurt. In the future, that will help me be kind to people in other situations, which is what I hope to do.\r\n</p>\r\n<hr />\r\n<h1 id=\"the-role-of-the-fsfs-board-of-directors\">The role of the FSF’s board of directors</h1>\r\n<p>Published on Mar 22, 2021 10:55 PM by <a href=\"https://www.fsf.org/author/fsfweb\">Free Software Foundation</a></p>\r\n<p>\r\nThe FSF board believes it is its responsibility – to free software community members, donors, movement organizations, and the general public – to be a model of good governance.\r\n</p>\r\n<p>\r\nGood governance starts with the board of directors, which oversees the organization and is ultimately responsible for its success. The board’s role (and legal obligation) is to oversee the management of the organization and ensure that the organization fulfills its mission.\r\n</p>\r\n<p>\r\nThe board enables good management by overseeing the President and executive director, who in turn manages staff. The board’s oversight role includes decision-making, monitoring and leadership.\r\n</p>\r\n<p>\r\nIn its decision-making capacity, the board:\r\n</p>\r\n<ul>\r\n<li>\r\n<p>\r\ndetermines the mission and purposes of the FSF;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\ndrives the FSF’s long-term strategy and goals;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nformulates and regularly reviews significant corporate policies;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nselects and evaluates the President, executive director and other officers, including determining compensation based on relevant data for the paid positions; and\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\ncreates and maintains effective succession plans for the FSF’s leadership positions.\r\n</p>\r\n</li>\r\n</ul>\r\n<p>\r\nIn its monitoring capacity, the board:\r\n</p>\r\n<ul>\r\n<li>\r\n<p>\r\nevaluates how well the FSF is fulfilling its mission, values, goals, and vision, including evaluating relevant risks;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nmonitors the FSF’s financial performance and use of assets, including approving the annual budget;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nconducts regular reviews of the FSF’s internal controls and financial reporting;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\noversees compliance with legal obligations and organizational policies, such as those against conflicts of interest; and\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\ndiscusses its own performance as the leading governing body.\r\n</p>\r\n</li>\r\n</ul>\r\n<p>\r\nIn its leadership capacity, the board:\r\n</p>\r\n<ul>\r\n<li>\r\n<p>\r\nmaintains the legal and ethical integrity of the organization;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nenhances and protects the FSF’s public image;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nadvises and provides guidance to the President, executive director, and other officers, drawing on relevant board member expertise;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nparticipates in fundraising to develop resources for a robust and strong organization;\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nrecruits and orients new board members; and\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nworks with the President and executive director to help communicate the FSF’s direction and activities to the public.\r\n</p>\r\n</li>\r\n</ul>\r\n<p>\r\nFSF board members are not compensated for their board service, and are not permitted to receive any personal financial benefit from FSF funds or other assets. Board members may be reimbursed for reasonable and appropriate expenses incurred in connection with their board service.\r\n</p>\r\n<p>\r\nFor further information, see the <a href=\"https://static.fsf.org/nosvn/fsf-amended-bylaws-current.pdf\">FSF’s bylaws</a>.\r\n</p>\r\n<hr />\r\n<h1 id=\"preliminary-board-statement-on-fsf-governance\">Preliminary board statement on FSF governance</h1>\r\n<p>Published on Mar 25, 2021 12:00 AM by <a href=\"https://www.fsf.org/author/fsfweb\">Free Software Foundation</a></p>\r\n<p>\r\nOn Wednesday, the FSF board of directors committed to a series of changes related to organizational governance and the appointment of members to its board of directors:\r\n</p>\r\n<ul>\r\n<li>\r\n<p>\r\nWe will adopt a transparent, formal process for identifying candidates and appointing new board members who are wise, capable, and committed to the FSF’s mission. We will establish ways for our supporters to contribute to the discussion.\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nWe will require all existing board members to go through this process as soon as possible, in stages, to decide which of them remain on the board.\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nWe will add a staff representative to the board of directors. The FSF staff will elect that person.\r\n</p>\r\n</li>\r\n<li>\r\n<p>\r\nThe directors will consult with legal counsel about changes to the organization’s by-laws to implement these changes. We have set ourselves a deadline of thirty days for making these changes.\r\n</p>\r\n</li>\r\n</ul>\r\n<p>\r\nThe board will meet again Thursday, March 25, to consider further decisions.\r\n</p>\r\n<hr />\r\n<h1 id=\"update-on-work-to-improve-governance-at-the-fsf\">Update on work to improve governance at the FSF</h1>\r\n<p>Published on Mar 25, 2021 11:52 PM by <a href=\"https://www.fsf.org/author/fsfweb\">Free Software Foundation</a></p>\r\n<h3>\r\nSummary of actions from the board and voting member meetings of Thursday, March 25, 2021:\r\n</h3>\r\n<p>\r\nThe voting members unanimously agreed to elect a union staff member, selected by the FSF union staff, to be a full voting member and director. The first such representative will be elected as soon as the staff chooses one. The FSF will adopt by-law changes to implement this as a requirement going forward.\r\n</p>\r\n<p>\r\nThe board of directors is soliciting proposals from qualified consultants to assist in creating a transparent, formal process for identifying candidates and appointing board members who are wise, capable, and committed to the FSF’s mission. The FSF intends to rewrite the by-laws in a way that binds the organization to transparency in its choice of directors. This process will establish ways for FSF associate members and supporters to meaningfully contribute to the discussion. The board is looking for proposals to be received by Friday, April 2, 2021. Please email <a href=\"mailto:info@fsf.org\">info@fsf.org</a> with the subject “Director Transparency Engagement” for details.\r\n</p>\r\n<p>\r\nFSF president Geoffrey Knauth announced, “I commit myself to resign as an FSF officer, director, and voting member as soon as there is a clear path for new leadership assuring continuity of the FSF’s mission and compliance with fiduciary requirements.”\r\n</p>\r\n<p>\r\nThe board of directors will continue this work at its next meeting, scheduled for Sunday, March 28.\r\n</p>\r\n<p>\r\n<p><a href=\"https://www.fsf.org/news/preliminary-board-statement-on-fsf-governance\">Read yesterday’s preliminary board statement.</a></p>\r\n<hr />\r\n<h1 id=\"welcoming-ian-kelling-to-staff-seat-on-fsfs-board-of-directors\">Welcoming Ian Kelling to staff seat on FSF’s board of directors</h1>\r\n<p>by <a href=\"https://www.fsf.org/author/fsfweb\">Free Software Foundation</a> Published on Mar 28, 2021 09:21 PM</p>\r\n<p>\r\n<em>by Geoffrey Knauth, FSF president</em>\r\n</p>\r\n<p>\r\nAs the next step to implement the plan outlined in the board’s announcements last <a href=\"https://www.fsf.org/news/preliminary-board-statement-on-fsf-governance\">Wednesday</a> and <a href=\"https://www.fsf.org/news/update-on-work-to-improve-governance-at-the-fsf\">Friday</a> to improve governance at the FSF, at today’s meeting we officially elected the staff’s selection for their newly created seats on the board of directors and voting members.\r\n</p>\r\n<p>\r\nUnion staff selected senior systems administrator Ian Kelling to be the first in this role. At the end of today’s board meeting, we officially welcomed Ian to both bodies. The board and voting members look forward to having the participation of the staff via this designated seat in our future deliberations. This is an important step in the FSF’s effort to recognize and support new leadership, to connect that leadership to the community, to improve transparency and accountability, and to build trust. There is still considerable work to be done, and that work will continue.\r\n</p>\r\n<p>\r\nI have always known that the FSF has good and hard-working staff, but with the success of LibrePlanet 2021, and in talking with staff during the controversy that unfolded immediately afterward, I have no doubt it is essential to involve staff much more in decision-making and strategy discussions. The advice they have offered in the last week alone has been invaluable. I sincerely believe this step in improving FSF governance will lead to better outcomes going forward. In all my interactions with Ian so far, he has demonstrated abundant wisdom and intelligence.\r\n</p>\r\n<p>\r\nKat Walsh announced her resignation from the board of directors last week and it became effective at the end of our board meeting on Sunday, March 28, 2021. Kat has been a great help in discussing difficult issues over the years. We appreciate the expert knowledge and service she gave us and offer Kat our best wishes and sincere thanks.\r\n</p>\r\n<p>\r\nThe FSF board will meet again on Monday, March 29, 2021.\r\n</p>\r\n<hr />\r\n<p>Note: This show was submitted anonymously by Ken.</p>\r\n',393,0,0,'CC-BY-SA','FSF, RMS',0,0,1),
(3324,'2021-04-29','Infosec Podcasts Part 1  News and Current Events ',438,'Presenting my favorite information security news and current events podcasts','<p>Inoffensive in every region of the world</p>\r\n<p>Hello, again. This is Trey. This is part 1 of a 6 part series related to information security podcasts.</p>\r\n<p>Why am I recording this series?</p>\r\n<p>\"What podcasts you listen to\" was on the list of recommended topics</p>\r\n<p>I am passionate about information security</p>\r\n<p>We desperately need people to fill infosec jobs in many different specialties</p>\r\n<p>Infosec is a rapidly changing field, and it is critical to stay current</p>\r\n<p>As a result I listen to TONS of infosec related podcasts</p>\r\n<p>Because there are so many podcasts to list, I will break them down into 6 different episodes based on topics:</p>\r\n<ul>\r\n<li>Part 1 – News &amp; Current Events</li>\r\n<li>Part 2 – General Information Security</li>\r\n<li>Part 3 - Career &amp; Personal Development</li>\r\n<li>Part 4 – Social Engineering</li>\r\n<li>Part 5 -\r\n<ul>\r\n<li>Hacks &amp; Attacks</li>\r\n<li>Technical Information &amp; Learning</li>\r\n<li>Infosec Community / Social / History</li>\r\n</ul></li>\r\n<li>Part 6 – Infosec Leadership</li>\r\n</ul>\r\n<h2 id=\"part-1\">Part 1</h2>\r\n<p>Infosec News / current events podcasts – Why?</p>\r\n<p>Stay aware of what is happening for your own personal growth</p>\r\n<p>If you already work in IT or Infosec, you can have early awareness about attacks to look for indicators of compromise, or learn new tools and techniques</p>\r\n<p>You can get a head start answering questions from leadership, when they ask about something they heard on the news or from a peer.</p>\r\n<ul>\r\n<li><p>SANS Internet Stormcenter Stormcast - Dr. Johannes Ullrich (Daily M-F)<br />\r\nThe latest Cybersecurity news<br />\r\n<a href=\"https://isc.sans.edu/podcast.html\" class=\"uri\">https://isc.sans.edu/podcast.html</a></p></li>\r\n<li><p>Cyber Security Headlines (Daily M-F)<br />\r\nDaily podcast with the latest Cybersecurity news<br />\r\nCaps off Friday with a weekly review<br />\r\n<a href=\"https://cisoseries.com/category/podcast/cyber-security-headlines/\" class=\"uri\">https://cisoseries.com/category/podcast/cyber-security-headlines/</a><br />\r\n</p></li>\r\n<li><p>The Cyberwire - Dave Bitner (Daily M-F – Drops in afternoon)<br />\r\nDaily podcast with the latest Cybersecurity news<br />\r\n<a href=\"https://thecyberwire.com/podcasts\" class=\"uri\">https://thecyberwire.com/podcasts</a></p></li>\r\n<li><p>Shared Security Show – Tom Eston, Scott Wright, &amp; Kevin Johnson (Weekly)<br />\r\nNews, tips, advice, and interviews with cybersecurity professionals and privacy experts.<br />\r\n<a href=\"https://sharedsecurity.net/\" class=\"uri\">https://sharedsecurity.net/</a></p></li>\r\n<li><p>Transatlantic Cable Podcast – Sponsored by Kaspersky with Jeff Esposito &amp; David Buxton (Weekly)<br />\r\nA weekly infosec news discussion<br />\r\n<a href=\"https://www.kaspersky.com/blog/kaspersky-transatlantic-podcast/\" class=\"uri\">https://www.kaspersky.com/blog/kaspersky-transatlantic-podcast/</a></p></li>\r\n<li><p>Security Now- Steve Gibson, Leo Laporte (Weekly)<br />\r\nPart of the TWIT TV Network<br />\r\nSteve Gibson, the man who coined the term spyware and created the first anti-spyware program, creator of Spinrite and ShieldsUP, discusses the hot topics in security today.<br />\r\nSpinrite has helped me salvage many a hard drive over the last few decades. I\'m a big fan of Steve Gibson<br />\r\nDoes a great job of simplifying technical topics.<br />\r\n<a href=\"https://twit.tv/shows/security-now\" class=\"uri\">https://twit.tv/shows/security-now</a></p></li>\r\n<li><p>The Security Ledger – Paul Roberts (Weekly)<br />\r\nA weekly podcast mixing news and interviews<br />\r\n<a href=\"https://securityledger.com/\" class=\"uri\">https://securityledger.com/</a></p></li>\r\n<li><p>Risky Business podcast - Patrick Gray and Adam Boileau (Weekly)<br />\r\nDiscusses the week\'s security news from the Land Down Under.<br />\r\nAlso includes periodic vendor interviews.<br />\r\nSometimes the discussion may get a bit political.<br />\r\n<a href=\"https://risky.biz/\" class=\"uri\">https://risky.biz/</a></p></li>\r\n</ul>\r\n<p>I hope that this episode has introduced you to some new sources of information. Give some of them a try, and I would love to get your feedback.</p>\r\n<p>Thank you for listening.</p>\r\n',394,74,0,'CC-BY-SA','infosec, podcasts, security',0,0,1),
(3322,'2021-04-27','Tune system performance with tuned',1361,'Introduction to tuned and tuned-adm','<p>\r\nThe tuned-adm command switches profiles to help you fine-tune your Linux system\'s performance.\r\n</p>\r\n\r\n<p>\r\nFor more about performance, see <a target=\"_blank\" href=\"https://01.org/powertop/blogs/ayates1/2016/powertop-linuxcon-2015\">Powertop Linuxcon 2015 presentation</a> and maybe listen to <a href=\"https://gnuworldorder.info/#379\" target=\"_blank\">my GNU World Order episode</a>\r\n</p>',78,0,0,'CC-BY-SA','linux',0,0,1),
(3323,'2021-04-28','The alternate Internet you never knew existed',1757,'I changed my DNS server and you won\'t believe what happened next.','<p>\r\nA not-brief introduction to OpenNIC, the open and democratic domain name and number registry.\r\n</p>',78,0,0,'CC-BY-SA','ICANN, IANA, DNS',0,0,1),
(3325,'2021-04-30','Games and rules',1499,'Talking about the conundrum of rules-light and rules-heavy game systems','<p>There are three nodes. You can choose two.\r\n</p>\r\n\r\n<pre>\r\n<code>\r\n         o Rules\r\n        / \\\r\n       /   \\\r\nTrust ó-----ò Competition\r\n</code>\r\n</pre>',78,95,0,'CC-BY-SA','rpg,rules,game',0,0,1),
(3329,'2021-05-06','Linux Inlaws S01E29: The (one and only) Linux Kernel Contributor Panel',5069,'An eclectic panel of Linux contributors discuss technology, anger management and other things','<p>In this episode, our two ageing heroes host an eclectic panel of kernel\r\ncontributors of a small, mostly unknown operating system called \"Linux\".\r\nThe panelists hail from all over the planet (sadly, no money or love would\r\nbuy Richard\'s or Linus\' way onto that panel :-) but the discussion proves\r\nmore than interesting regardless of these uber-nerds being absent. All\r\nwill be revealed including the true age of Linux, one of Chris\' secret\r\nobsessions (hint: it\'s not software bugs), Linus Torvald\'s thought process\r\nand evolution as such. Never mind Linux\'s second future high-level\r\nprogramming language... Plus: a philosophical discussion of the social\r\nimpact of insulting from a pan-cultural perspective. Don\'t miss out on\r\nthis!</p>\r\n\r\n<h3>Links:</h3>\r\n<ul>\r\n<li>Linux Kernel Archives: <a href=\"https://www.kernel.org\" target=\"_blank\">https://www.kernel.org</a>\r\n</li>\r\n<li>Device Tree System documentation: <a href=\"https://www.kernel.org/doc/html/latest/devicetree/usage-model.html\" target=\"_blank\">https://www.kernel.org/doc/html/latest/devicetree/usage-model.html</a>\r\n</li>\r\n<li>Linux BDFL: <a href=\"https://torvalds-family.blogspot.com\" target=\"_blank\">https://torvalds-family.blogspot.com</a>\r\n</li>\r\n<li>Linux kernel police: <a href=\"https://www.youtube.com/watch?v=zOcwNm7sqlw\" target=\"_blank\">https://www.youtube.com/watch?v=zOcwNm7sqlw</a>\r\n</li>\r\n<li>MythBusters: <a href=\"https://www.imdb.com/title/tt0383126\" target=\"_blank\">https://www.imdb.com/title/tt0383126</a>\r\n</li>\r\n<li>Conflict Resolution Network: <a href=\"https://www.crnhq.org\" target=\"_blank\">https://www.crnhq.org</a>\r\n</li>\r\n<li>Sage Sharp (left the project due to the nature of Linus\' comments): <a href=\"https://sage.thesharps.us\" target=\"_blank\">https://sage.thesharps.us</a>\r\n</li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Linux Kernel',0,0,1),
(3327,'2021-05-04','Looking into Ceph storage solution',818,'We look into what a Ceph implementation entails, what specific use-cases it excels at. ','<p>We look into what a Ceph implementation entails, what specific use-cases it excels at.</p>\r\n<p>And we also talk about the building blocks of the system. What kind of hosts is required for different Ceph daemons and the requirements regarding disk space, CPU, and memory.</p>\r\n<p>The services we are talking about are OSD (Object storage daemon), Monitors, Managers, and MDS (MetaData Services).</p>\r\n<p>Ceph can be used as an S3 compatible object store, disk storage, and even a file system, depending on your setup.</p>\r\n<p>If you are interested in diving deeper into the topic, I have created a couple of videos on the subject that might interest you.</p>\r\n<ul>\r\n<li>Getting started with Ceph storage cluster setup - <a href=\"https://youtu.be/Uvbp3mtOltw\" class=\"uri\">https://youtu.be/Uvbp3mtOltw</a></li>\r\n<li>Using the amazon s3 object storage API for local storage on Ceph - <a href=\"https://youtu.be/XtfjYp8ikaU\" class=\"uri\">https://youtu.be/XtfjYp8ikaU</a></li>\r\n<li>Doing an automatic upgrade of Ceph cluster using CephAdm - <a href=\"https://youtu.be/N1ARNNvv1zY\" class=\"uri\">https://youtu.be/N1ARNNvv1zY</a></li>\r\n<li>Looking into a manual upgrade of Ceph to Pacific - <a href=\"https://youtu.be/RrrS4UU5U6o\" class=\"uri\">https://youtu.be/RrrS4UU5U6o</a></li>\r\n</ul>\r\n',382,0,0,'CC-BY-SA','ceph, storage solution, amazon s3',0,0,1),
(3335,'2021-05-14','For your consideration, the Anarcho Book Club',1348,'This is an example of the podcast that was featured on GNU World Order','<ul>\r\n<li><a href=\"https://gnuworldorder.info/audiophile/gnuWorldOrder_397.opus\">Interview with Herag, from the Anarcho Book Club podcast. </a></li>\r\n<li><a href=\"https://anarchobook.club/pages/about.html\">About the Anarcho Book Club</a></li>\r\n</ul>',30,75,1,'CC-BY-SA','Anarcho Book Club,anarchism,gnuWorldOrder,gwo',0,0,1),
(3586,'2022-05-02','HPR Community News for April 2022',3986,'HPR Volunteers talk about shows released and comments posted in April 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/0403.html\" target=\"_blank\">Lee</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0404.html\" target=\"_blank\">Sarah</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=3565\" target=\"_blank\">3565</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-04-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3565\" target=\"_blank\">Heavy Hacking down in the quarry. </a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0392.html\" target=\"_blank\">timttmy</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3566\" target=\"_blank\">3566</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-04-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3566\" target=\"_blank\">HPR Community News for March 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=3567\" target=\"_blank\">3567</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-04-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3567\" target=\"_blank\">What is NVMe™ and why is it important?</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3568\" target=\"_blank\">3568</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-04-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3568\" target=\"_blank\">PopKorn Episode 2: Programming, Mathematics, and Asymmetric Literacy</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3569\" target=\"_blank\">3569</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-04-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3569\" target=\"_blank\">Linux Inlaws S01E53: Rust Marketing</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3570\" target=\"_blank\">3570</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-04-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3570\" target=\"_blank\">The Filesystem</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=3571\" target=\"_blank\">3571</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-04-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3571\" target=\"_blank\">The Meatball Mystery</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0196.html\" target=\"_blank\">Windigo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3572\" target=\"_blank\">3572</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-04-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3572\" target=\"_blank\">More about NVMe</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3573\" target=\"_blank\">3573</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-04-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3573\" target=\"_blank\">Home Coffee Roasting, part 2</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=3574\" target=\"_blank\">3574</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-04-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3574\" target=\"_blank\">Local Talking Newspapers</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0403.html\" target=\"_blank\">Lee</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3575\" target=\"_blank\">3575</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-04-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3575\" target=\"_blank\">An Edinburgh Blether</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=3576\" target=\"_blank\">3576</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-04-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3576\" target=\"_blank\">First impressions of Ubuntu 22.04 as a daily driver.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3577\" target=\"_blank\">3577</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-04-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3577\" target=\"_blank\">Hello and how I got into tech</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0404.html\" target=\"_blank\">Sarah</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3578\" target=\"_blank\">3578</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-04-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3578\" target=\"_blank\">Linux Inlaws S01E54: Electronic Freedom Never Mind the Civil Rest</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3579\" target=\"_blank\">3579</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-04-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3579\" target=\"_blank\">PINN is not NOOBS</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=3580\" target=\"_blank\">3580</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-04-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3580\" target=\"_blank\">RAW images</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=3581\" target=\"_blank\">3581</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-04-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3581\" target=\"_blank\">My daily Linux driver.</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3582\" target=\"_blank\">3582</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-04-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3582\" target=\"_blank\">Rolling a new character</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0364.html\" target=\"_blank\">Tuula</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3583\" target=\"_blank\">3583</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-04-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3583\" target=\"_blank\">takov751 and dnt talk about browsers</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=3584\" target=\"_blank\">3584</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-04-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3584\" target=\"_blank\">The collective history of RAID controller brands</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3585\" target=\"_blank\">3585</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-04-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3585\" target=\"_blank\">Freedom of speech in open source, 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</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 41 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 10 comments on\n7 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=2881#comments\" target=\"_blank\">hpr2881</a></strong>\n(2019-08-19) \"<em>Automatically split album into tracks in Audacity</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=2881#5\" target=\"_blank\">Comment 5</a>:\nArcher72 on 2022-04-25:\n\"And now I know, and will forget again\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3378#comments\" target=\"_blank\">hpr3378</a></strong>\n(2021-07-14) \"<em>A bit of my experience with Starlink internet service</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0243.html\" target=\"_blank\">Jezra</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3378#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-04-06:\n\"Congratulations!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3534#comments\" target=\"_blank\">hpr3534</a></strong>\n(2022-02-17) \"<em>Vernier caliper</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3534#4\" target=\"_blank\">Comment 4</a>:\nKevin O&#39;Brien on 2022-04-16:\n\"Taking me back\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3554#comments\" target=\"_blank\">hpr3554</a></strong>\n(2022-03-17) \"<em>Guide to the Science and Technology Section of Bitchute</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=3554#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-04-01:\n\"that motor\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3559#comments\" target=\"_blank\">hpr3559</a></strong>\n(2022-03-24) \"<em>Linux Inlaws S01E52: The Zig Project</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3559#1\" target=\"_blank\">Comment 1</a>:\nclacke on 2022-04-18:\n\"The nitty-gritty of US non-profits\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3559#2\" target=\"_blank\">Comment 2</a>:\nclacke on 2022-04-18:\n\"Re: The nitty-gritty of US non-profits\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3563#comments\" target=\"_blank\">hpr3563</a></strong>\n(2022-03-30) \"<em>Home Coffee Roasting, part 1</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3563#2\" target=\"_blank\">Comment 2</a>:\nClaudioM on 2022-04-01:\n\"Enjoyed this Episode while Brewing my Morning Coffee :-)\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3564#comments\" target=\"_blank\">hpr3564</a></strong>\n(2022-03-31) \"<em>Removing EXIF data from an image</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=3564#2\" target=\"_blank\">Comment 2</a>:\nClaudioM on 2022-04-01:\n\"Thanks for the Application Reminder!\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3564#3\" target=\"_blank\">Comment 3</a>:\nXoke on 2022-04-01:\n\"My troubles with EXIF\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3564#4\" target=\"_blank\">Comment 4</a>:\nKevin O&#39;Brien on 2022-04-16:\n\"Orientation in Android\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 31 comments on 10 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3565#comments\" target=\"_blank\">hpr3565</a></strong>\n(2022-04-01) \"<em>Heavy Hacking down in the quarry. </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0392.html\" target=\"_blank\">timttmy</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3565#1\" target=\"_blank\">Comment 1</a>:\nJeremiah Schroeder on 2022-03-28:\n\"Couldn\'t agree more\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3565#2\" target=\"_blank\">Comment 2</a>:\nK. Olin on 2022-03-28:\n\"Great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3565#3\" target=\"_blank\">Comment 3</a>:\nClayton Miner on 2022-03-28:\n\"This brings back memories\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3565#4\" target=\"_blank\">Comment 4</a>:\nWindigo on 2022-04-02:\n\"Thanks for the contribution\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3565#5\" target=\"_blank\">Comment 5</a>:\njezra on 2022-04-05:\n\"I started falling asleep\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3568#comments\" target=\"_blank\">hpr3568</a></strong>\n(2022-04-06) \"<em>PopKorn Episode 2: Programming, Mathematics, and Asymmetric Literacy</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0396.html\" target=\"_blank\">BlacKernel</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3568#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-04-08:\n\"Public Service Announcement\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3570#comments\" target=\"_blank\">hpr3570</a></strong>\n(2022-04-08) \"<em>The Filesystem</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=3570#1\" target=\"_blank\">Comment 1</a>:\nzen_floater2 on 2022-04-08:\n\"Squirrel applause\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3570#2\" target=\"_blank\">Comment 2</a>:\nMiguel on 2022-04-08:\n\"Good blast from the past\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3570#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2022-04-08:\n\"Thank you\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3570#4\" target=\"_blank\">Comment 4</a>:\nSome Guy On The Internet on 2022-04-13:\n\"I\'m not old enough.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3570#5\" target=\"_blank\">Comment 5</a>:\nKevin O&#39;Brien on 2022-04-14:\n\"RAID on DOS\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3571#comments\" target=\"_blank\">hpr3571</a></strong>\n(2022-04-11) \"<em>The Meatball Mystery</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0196.html\" target=\"_blank\">Windigo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3571#1\" target=\"_blank\">Comment 1</a>:\nkinghezy on 2022-04-12:\n\"Meatballs and such\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3571#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2022-04-14:\n\"Thanks\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3572#comments\" target=\"_blank\">hpr3572</a></strong>\n(2022-04-12) \"<em>More about NVMe</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3572#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-04-13:\n\"Thanks for the information.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3574#comments\" target=\"_blank\">hpr3574</a></strong>\n(2022-04-14) \"<em>Local Talking Newspapers</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0403.html\" target=\"_blank\">Lee</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3574#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-04-14:\n\"Enlightening episode\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3574#2\" target=\"_blank\">Comment 2</a>:\nbrian-in-ohio on 2022-04-15:\n\"good show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3574#3\" target=\"_blank\">Comment 3</a>:\nelmussol on 2022-04-24:\n\"elderly relatives et al\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3574#4\" target=\"_blank\">Comment 4</a>:\nelmussol on 2022-04-24:\n\"addendum\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3575#comments\" target=\"_blank\">hpr3575</a></strong>\n(2022-04-15) \"<em>An Edinburgh Blether</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=3575#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-04-15:\n\"Declassified\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3575#2\" target=\"_blank\">Comment 2</a>:\nbrian-in-ohio on 2022-04-15:\n\"show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3576#comments\" target=\"_blank\">hpr3576</a></strong>\n(2022-04-18) \"<em>First impressions of Ubuntu 22.04 as a daily driver.</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3576#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-04-18:\n\"Yikes!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3576#2\" target=\"_blank\">Comment 2</a>:\nZen_floater2 on 2022-04-19:\n\"Your review\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3576#3\" target=\"_blank\">Comment 3</a>:\nKen Fallon on 2022-04-28:\n\"How do you pay for software ?\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3577#comments\" target=\"_blank\">hpr3577</a></strong>\n(2022-04-19) \"<em>Hello and how I got into tech</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0404.html\" target=\"_blank\">Sarah</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3577#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2022-04-19:\n\"welcome\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3577#2\" target=\"_blank\">Comment 2</a>:\nmcnalu on 2022-04-19:\n\"Welcome\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3577#3\" target=\"_blank\">Comment 3</a>:\nLurking Prion on 2022-04-23:\n\"Welcome!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3577#4\" target=\"_blank\">Comment 4</a>:\nKevin O&#39;Brien on 2022-04-24:\n\"Great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3577#5\" target=\"_blank\">Comment 5</a>:\nSarah on 2022-04-25:\n\"@Kevin O\'Brien\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3577#6\" target=\"_blank\">Comment 6</a>:\nKevin O&#39;Brien on 2022-04-25:\n\"@Sarah\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3578#comments\" target=\"_blank\">hpr3578</a></strong>\n(2022-04-20) \"<em>Linux Inlaws S01E54: Electronic Freedom Never Mind the Civil Rest</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3578#1\" target=\"_blank\">Comment 1</a>:\nbittin on 2022-04-11:\n\"More Europe Centric\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3578#2\" target=\"_blank\">Comment 2</a>:\nzen_floater2 on 2022-04-24:\n\"centralized federal power\"</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-April/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-April/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=\"reminders-about-show-submission\">Reminders about show submission</h3>\n<h4 id=\"show-spacing\">Show spacing</h4>\n<p>Please remember that we normally ask that shows submitted by a host be spaced out by at least two weeks - unless the queue is <strong>extremely</strong> short of shows of course!</p>\n<h4 id=\"commas-between-tags\">Commas between tags</h4>\n<p>A number of shows in recent weeks have been arriving with tags lists missing the requested commas. Hosts are requested to use these to separate tags, otherwise it can be difficult to work out where one tag ends and the next begins. How to interpret the following list, for example:</p>\n<pre><code>dog fish custard</code></pre>\n<p>Does it mean: \'<code>dog fish, custard</code>\', \'<code>dog, fish custard</code>\' or \'<code>dog,fish,custard</code>\'?</p>\n<h4 id=\"host-nameshandles-or-series-names-as-tags\">Host names/handles or series names as tags</h4>\n<p>Next, a recommendation about the host name/handle or the series name as a tag. Tags are intended to help with finding shows.</p>\n<p>We have another way of finding shows by host; the host name or handle is a link at the top of the show page which can be clicked to go to a list of all of the shows ever submitted by that host.</p>\n<p>Also, if a show is part of a series, clicking on the series title on the show page will take you to all the shows in that series.</p>\n<p>So, two tags best avoided are: the host name and the series name.</p>\n<h4 id=\"use-of-explicit-only-covers-audio\">Use of <em>Explicit</em> only covers audio</h4>\n<p>Be aware that the selection made during the submission of a new show between <code>\'Explicit\'</code> and <code>\'Clean\'</code> only relates to the audio. Due to the world-wide distribution of shows we need to be sensitive to potential offense caused by swearwords and the like in the notes themselves. We would appreciate all HPR hosts being aware of these issues.</p>\n<h4 id=\"please-do-not-add-your-own-intro-and-outro\">Please do not add your own <em>intro</em> and <em>outro</em></h4>\n<p>A final reminder: it was decided via discussion on the HPR mailing list that we would automate the addition of the intro and outro to show audio. We would appreciate it if hosts did not add these themselves because work is then required to remove them before preparing the show for release.</p>\n<h3 id=\"developments-on-hpr\">Developments on HPR</h3>\n<p>Some work has been going on behind the scenes to improve the workflow which handles incoming shows and adds them to the database.</p>\n<p>We have added a set of state values which indicate the processing flow so that people and software can track progress.</p>\n<p>The <em>calendar</em> page has been adjusted to show some of these state mnemonics in addition to the <em>Locked</em> and <em>Processing</em> indicators we have had before.</p>\n<p>The status mnemonics likely to be seen are:</p>\n<ul>\n<li><b>SHOW_SUBMITTED</b> - upload complete</li>\n<li><b>METADATA_PROCESSED</b> - shownotes processed to html</li>\n<li><b>SHOW_POSTED</b> - show in the database</li>\n<li><b>MEDIA_TRANSCODED</b> - audio all generated</li>\n<li><b>UPLOADED_TO_IA</b> - on the IA and visible</li>\n<li><b>UPLOADED_TO_RSYNC_NET</b> - archived on rsync.net</li>\n</ul>\n<p>The steps required to move from one state to another have been streamlined as much as possible but they still require the intervention of the Janitors, so there is no guarantee about the time between arrival and the availability of shows on the HPR server or archive.org.</p>\n<h3 id=\"access-to-hpr-from-argentina\">Access to HPR from Argentina</h3>\n<p>The problems reported in the last Community News have now been resolved.</p>\n<h3 id=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on archive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to the Internet Archive there are other tasks to perform.</p>\n<p>During the uploading of shows in the range 1-870 we uploaded all the audio versions: wav, ogg, mp3, etc. We also uploaded any other files such as pictures or documentation. We do this for new shows as well.</p>\n<p>The reason for this is to make self-contained shows on the Internet Archive, where previously such shows referred to the HPR server for various components.</p>\n<p>The shows that had been uploaded during 2017 in the range 871 to 2429 did not include all these files. At that point we only had the mp3 versions of the audio, and these were what were uploaded, along with the notes.</p>\n<p>During phase 1 of the upload process a method of turning the mp3 audio into all of the other formats was included, and this method is now being used to re-process shows 871 to 2429.</p>\n<h4 id=\"statistics\">Statistics</h4>\n<p>We will keep a record of progress here as we re-upload shows numbered between 871 and 2429:</p>\n<ul>\n<li>Re-uploads done so far: 131</li>\n<li>Shows remaining to be done: 1428</li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3328,'2021-05-05','Pandas Part 2',719,'Enigma continues his discussion about his favorite Python module Pandas','<p>\r\nPart two in the For the Love of Data series. Enigma covers part 2 of Pandas <br>\r\nThe following topics are discussed <br>\r\n<br>\r\n1) Another way to apply a condition to a field <br>\r\n2) Creating a DataFrame from a dictionary <br>\r\n3) Appending a data frame with another DataFrame <br>\r\n4) Joining DataFrames with merge and join <br>\r\n5) Writing an output to csv <br>\r\n<br>\r\n<a href = \"https://github.com/eth0enigma/PandasPart2\"> Part 2 Sample code </a>\r\n<br>\r\nFollow me on twitter @Ed_N1gma <br>\r\n<br>\r\nCome chat on irc.freenode.net #hackerexchange\r\n</p>',39,38,0,'CC-BY-SA','python, pandas, Data, Data Science',0,0,1),
(3334,'2021-05-13','Infosec Podcasts Part 2 - General Information Security',520,'Presenting my favorite general information security podcasts','<p>Inoffensive in every region of the world</p>\r\n<p>Hello, again. My name is Trey. This is part 2 of a 6 part series related to information security podcasts.</p>\r\n<p>To recap Why am I recording this series?</p>\r\n<p>\"What podcasts you listen to\" was on the list of recommended topics</p>\r\n<p>I am passionate about information security</p>\r\n<p>We desperately need people to fill infosec jobs in many different specialties</p>\r\n<p>Infosec is a rapidly changing field, and it is critical to stay current</p>\r\n<p>As a result I listen to TONS of infosec related podcasts</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 &amp; Current Events</li>\r\n<li>Part 2 – General Information Security</li>\r\n<li>Part 3 - Career &amp; Personal Development</li>\r\n<li>Part 4 – Social Engineering</li>\r\n<li>Part 5 -\r\n<ul>\r\n<li>Hacks &amp; Attacks</li>\r\n<li>Technical Information &amp; Learning</li>\r\n<li>Infosec Community / Social / History</li>\r\n</ul></li>\r\n<li>Part 6 – Infosec Leadership</li>\r\n</ul>\r\n<h2 id=\"part-2\">Part 2</h2>\r\n<ul>\r\n<li><p>General Information Security<br />\r\nCaveat – Dave Bittner &amp; Ben Yelin (Weekly)<br />\r\nWeekly discussion of cybersecurity law and policy, with a particular focus on surveillance and digital privacy<br />\r\n<a href=\"https://thecyberwire.com/podcasts/caveat.html\" class=\"uri\">https://thecyberwire.com/podcasts/caveat.html</a></p></li>\r\n<li><p>Defense in Depth - David Spark &amp; Guests (Weekly)<br />\r\nWeekly podcast digging deeper into a currently trending infosec topic<br />\r\n<a href=\"https://cisoseries.com/subscribe-podcast/\" class=\"uri\">https://cisoseries.com/subscribe-podcast/</a></p></li>\r\n<li><p>Recorded Future - Dave Bittner &amp; Recorded Future (Weekly)<br />\r\nA weekly podcast about practical applications of security intelligence<br />\r\n<a href=\"https://www.recordedfuture.com/resources/podcast/\" class=\"uri\">https://www.recordedfuture.com/resources/podcast/</a></p></li>\r\n<li><p>Brakeing Down Security - Bryan Brake, Brian Boettcher, and Amanda Berlin (Weekly)<br />\r\nA weekly discussion of current infosec topics and events<br />\r\nCovers concepts that aspiring Information Security Professionals need to know, or refresh the memories of the seasoned veterans.<br />\r\n<a href=\"https://www.brakeingsecurity.com/\" class=\"uri\">https://www.brakeingsecurity.com/</a></p></li>\r\n<li><p>Down the Security Rabbit Hole - Rafal Los (Weekly)<br />\r\nA weekly interview based podcast discussing various challenges of implementing infosec<br />\r\n<a href=\"https://podcast.wh1t3rabbit.net/\" class=\"uri\">https://podcast.wh1t3rabbit.net/</a></p></li>\r\n<li><p>Security Weekly Podcast Network - Network of shows with various hosts<br />\r\nA collection of podcasts including: Paul\'s Security Weekly, Enterprise Security Weekly, Business Security Weekly, Application Security Weekly, Security &amp; Compliance Weekly, Security Weekly News, Tradecraft Security Weekly, &amp; Secure Digital Life. Interesting and diverse discussions.<br />\r\nWarning: Discussions sometimes promote the consumption of alcohol and smoking cigars<br />\r\nThese podcasts are long<br />\r\n<a href=\"https://securityweekly.com/\" class=\"uri\">https://securityweekly.com/</a></p></li>\r\n<li><p>Security Stories - Cisco with Hazel Burton, Ben Nahorney, &amp; Noureen Njoroge (Weekly)<br />\r\nA unique weekly interview-based podcast by sponsored by Cisco focusing on infosec stories<br />\r\n<a href=\"https://www.cisco.com/c/en/us/products/security/securitystories.html\" class=\"uri\">https://www.cisco.com/c/en/us/products/security/securitystories.html</a></p></li>\r\n<li><p>The Confident Defense Podcast - Conor Sherman (Weekly)<br />\r\nInterviews with influential and inspirational people in all areas of security<br />\r\n<a href=\"https://linktr.ee/ConfidentDefense\" class=\"uri\">https://linktr.ee/ConfidentDefense</a></p></li>\r\n<li><p>Open Source Security Podcast - Kurt Seifried &amp; Josh Bressers (Weekly)<br />\r\nLighthearted discussions of information security topics related to open source<br />\r\n<a href=\"https://opensourcesecurity.io/category/podcast/\" class=\"uri\">https://opensourcesecurity.io/category/podcast/</a></p></li>\r\n</ul>\r\n<p>See? I told you I listen to lots of podcasts!</p>\r\n<p>I hope that this episode has introduced you to some new sources of information. Give some of them a try, and I would love to get your feedback.</p>\r\n<p>The next episode will be about Information Security Careers &amp; Personal Development</p>\r\n<p>Thank you for listening.</p>\r\n',394,74,0,'CC-BY-SA','infosec, podcasts, security',0,0,1),
(3331,'2021-05-10','Audio for Podcasting: Episode 1 - The Microphone',1399,'Thaj shares tips and tricks on producing quality audio for HPR episodes','<p>The first in a series of episodes concerning recording and audio quality. For this episode I focus on the beginning of the signal chain, the microphone. Tips on choosing a microphone, and how to use it to get the sound you want.</p>\r\n<ul>\r\n<li><a href=\"https://www.samsontech.com/samson/products/microphones/usb-microphones/q2u/\">Samson 2QU</a></li>\r\n<li><a href=\"https://www.audio-technica.com/en-us/atr2100-usb\">ATR 2100</a></li>\r\n</ul>\r\n',270,45,1,'CC-BY-SA','audio production, microphones, audio quality',0,0,1),
(3338,'2021-05-19','Using openssl s_client like telnet',1189,'OpenSSL s_client is the new telnet. Here is how to use it.','<p>\r\nConnect to port 443 and send some HTTP signals:\r\n</p>\r\n\r\n<pre><code>\r\n$ openssl s_client -connect example.com:443\r\n    [...snip...]\r\n    Verify return code: 0 (ok)\r\n    Extended master secret: no\r\n    Max Early Data: 0\r\n---\r\n</code></pre>\r\n\r\n<p>\r\nYou\'re now connected. If you wait too long, your connection will likely time out.\r\nView the default landing page of the site you\'ve connected with:\r\n</p>\r\n\r\n<pre><code>\r\nGET / HTTP/1.1\r\nHOST: example.com\r\n</code></pre>\r\n\r\n<p>\r\nIn return, you get a dump of the HTML source of the default page (usually <code>index.html</code>) in your terminal.\r\n</p>\r\n\r\n<p>\r\nYou can also use OpenSSL s_client for email servers using SSL.\r\nBefore you can send credentials, you must encode your email username and passphrase into Base64. The easiest method I know is this Perl one-liner:\r\n</p>\r\n\r\n<pre><code>\r\n$ perl -MMIME::Base64 -e \'print encode_base64(\"myUserName\");\'\r\n$ perl -MMIME::Base64 -e \'print encode_base64(\"myPassPhrase\");\'\r\n</code></pre>\r\n\r\n<p>\r\nTake note of the results.\r\n</p>\r\n\r\n<p>\r\nThe s_client session, aside from authentication, is basically the same as a telnet session. You can find <a href=\"https://www.redhat.com/sysadmin/telnet-troubleshoot-mail-system\" target=\"_blank\">good telnet tutorials all over the Internet</a>, and aside from sending your credentials, they apply to s_client.\r\n</p>\r\n\r\n<p>\r\nHere\'s a copy-paste of an example session:\r\n</p>\r\n\r\n<pre><code>\r\n$ openssl s_client -starttls smtp -connect email.example.com:587\r\n&#62; ehlo example.com\r\n&#62; auth login\r\n&#35;&#35;paste your user base64 string here&#35;&#35;&#35;&#35;\r\n&#35;&#35;paste your password base64 string here&#35;&#35;&#35;&#35;\r\n\r\n&#62; mail from: noreply@example.com\r\n&#62; rcpt to: admin@example.com\r\n&#62; data\r\n&#62; Subject: Test 001\r\nThis is a test email.\r\n.\r\n&#62; quit\r\n</code></pre>\r\n',78,61,0,'CC-BY-SA','telnet, openssl',0,0,1),
(3332,'2021-05-11','My current Devices',642,'A short list of tablets and phones that I am using these Days','<p>Sadly no Opensource hand held devices these days.<br />\r\nBut Android might count though.</p>\r\n',129,0,0,'CC-BY-SA','Tablet, Phone, kindle',0,0,1),
(3333,'2021-05-12','My TV Stand devices and Pine64.org',1408,'About my TV devices - TV Stand  & Pine64','<h2 id=\"about-pine64\">About Pine64</h2>\r\n<blockquote>\r\n<dl>\r\n<dt><em>None of us is as smart as all of us</em></dt>\r\n<dd>Ken H. Blanchard\r\n</dd>\r\n</dl>\r\n</blockquote>\r\n<p>At the core of our philosophy is the notion that PINE64 is a community platform. A simplistic point of view, often offered up and referenced online, is that ‘PINE64 does hardware while the community does the software’. While this depiction is not inaccurate, it is also a gross oversimplification. The fact that PINE64 is community driven doesn’t simply entail a one-way reliance on the community or partner projects for software support; it means that the community gets to actively shape the devices, as well as the social platform, of PINE64 from the ground up. The goal is to deliver ARM64 devices that you really wish to engage with and a platform that you want to be a part of. As such, the community – PINE64 – and the company PINE Microsystems Inc. are interlocked and intertwined, but separate entities.</p>\r\n<p>What does it mean in practice then? It means that we usually announce what we’re working on well ahead of the shipping date – many months before a device is released – so that you have plenty of time to request product features, suggest changes, ask for/make changes to documentation, etc. before the first iteration of the device rolls of the factory line. It also means that the hardware developments – successes and failures alike – are all in the open. You can follow the process on our forum, the IRC, Discord, Matrix, Telegram the online conversations log and, in some instances, on our partner projects forums. But it also means that anyone who is a part of the community gets to shape anything related to the PINE64 project – including the Wiki or this website – and so, software development is only one area where you can contribute your time and skill. In return for time investment, the community gets fair priced devices that developers wish to spend their time on.</p>\r\n<p>Last, but not least, is our belief in supporting existing SoCs for long periods of time as well as actively developing new devices based on those SOCs. What does this mean for developers then? It means that a developer can start developing software on a PINE64 SBC and, in time, support multiple devices with relative ease. This device convergence is, at the time of writing, most pronounced on the Allwinner A64 SOC used in a number of our devices including the: PINE64-LTS, SOPine, Pinebook and Pinetab. That said, similar convergence is also planned for the Rockchip RK3399, currently used on the RockPro64 and in the Pinebook Pro.</p>\r\n<p>You can always find us in the chats or the forum, so if you have any further questions make sure to drop by and ask about how the PINE64 project actually works.</p>\r\n',129,0,0,'CC-BY-SA','Tablet, phone, desktop, windows, pine64, pinetime',0,0,1),
(3341,'2021-05-24','Linux on a serial Terminal - And Jorome\'s MainFrame Challenge',314,'My experiment with Getty and A Getty Ansi - And wanting to have a Serial Terminal Mainframe','<p>Well its bit of challenge for Jerome to teach me how to do a Mainframe on a PI with serial terminal. I started the project using a old HPE 700/96 terminal amber. I used this site as my prime info.<br />\r\n<a href=\"https://www.cyberciti.biz/hardware/5-linux-unix-commands-for-connecting-to-the-serial-console/\" class=\"uri\">https://www.cyberciti.biz/hardware/5-linux-unix-commands-for-connecting-to-the-serial-console/</a></p>\r\n<ul>\r\n<li>First is seeing if you have a serial port</li>\r\n</ul>\r\n<pre><code>    dmesg | egrep --color &#39;serial|ttyS&#39;</code></pre>\r\n<ul>\r\n<li>Then install getty if its not there</li>\r\n<li>Then add your config line to /etc/gettydefs</li>\r\n<li>Then make work if you reboot.</li>\r\n<li>The do report</li>\r\n<li>Then you have the log in prompt on the terminal</li>\r\n</ul>\r\n',129,0,0,'CC-BY-SA','Terminal, Mainframe, Raspberry PI',0,0,1),
(3336,'2021-05-17','2020-2021 New Years Eve Show Episode 1',6241,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-show\">Welcome to the 9th Annual Hacker Public Radio show</h2>\r\n<p>It is December the 31st 2020 and the time is 10 hundred hours UTC. We start the show by sending Greetings to Christmas Island/Kiribati and Samoa Kiritimati, Apia.</p>\r\n<ul>\r\n<li><p>Covid Covid Covid</p></li>\r\n<li><p>Brexit.<br />\r\nBrexit explained <a href=\"https://en.wikipedia.org/wiki/Brexit\" class=\"uri\">https://en.wikipedia.org/wiki/Brexit</a></p></li>\r\n<li><p>Add ISO 8601 YYYY-MM-DD support for dates in preferences<br />\r\n<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=484860\" class=\"uri\">https://bugzilla.mozilla.org/show_bug.cgi?id=484860</a></p></li>\r\n<li><p>Cannot format date in ISO8601 (YYY-MM-DD) format<br />\r\n<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1492448\" class=\"uri\">https://bugzilla.mozilla.org/show_bug.cgi?id=1492448</a></p></li>\r\n<li><p>Setting date locale no longer works in Thunderbird 60 on linux LC_TIME=en_DK.utf8 behaves differently than it used to<br />\r\n<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1426907\" class=\"uri\">https://bugzilla.mozilla.org/show_bug.cgi?id=1426907</a></p></li>\r\n</ul>\r\n<pre><code>Podcast_________________Last_Active_Date\r\nBoston Bruins ......... ????\r\nTheTechieGeek ......... 2013-12-27\r\nDudmanovi ............. 2016-04-09\r\nGeeks With Guns ....... 2014-04-26\r\nledgerthecat .......... ????\r\nLinux Basix ........... 2014-01-29\r\nLinuXburg ............. 2019-08-16\r\nmintCast .............. Active\r\nNoll Tech Show ........ ????\r\nNollCraft ............. ????\r\nOpen Source Musician .. 2015-02-17\r\nPodBrewers ............ 2016-03-02\r\nPodnutz ............... Active\r\nRevUnity .............. ????\r\nScannerDrome .......... 2020-05-01\r\nSMLR .................. Active\r\nThePythonExperiment ... ????\r\nUnseenStudio .......... Active</code></pre>\r\n<ul>\r\n<li><p>Reverse Engineering the source code of the BioNTech/Pfizer SARS-CoV-2 Vaccine <a href=\"https://berthub.eu/articles/posts/reverse-engineering-source-code-of-the-biontech-pfizer-vaccine/\" class=\"uri\">https://berthub.eu/articles/posts/reverse-engineering-source-code-of-the-biontech-pfizer-vaccine/</a></p></li>\r\n<li><p>Open street map<br />\r\n<a href=\"https://f-droid.org/en/packages/net.osmand.plus/\" class=\"uri\">https://f-droid.org/en/packages/net.osmand.plus/</a><br />\r\n<a href=\"https://www.openstreetmap.org/\" class=\"uri\">https://www.openstreetmap.org/</a></p></li>\r\n<li><p>Farenheit celsius scales<br />\r\n<a href=\"https://commons.wikimedia.org/wiki/File:Fahrenheit_Celsius_scales.svg\" class=\"uri\">https://commons.wikimedia.org/wiki/File:Fahrenheit_Celsius_scales.svg</a></p></li>\r\n<li><p>Soft drink industry levy<br />\r\n<a href=\"https://www.gov.uk/government/news/soft-drinks-industry-levy-comes-into-effect\" class=\"uri\">https://www.gov.uk/government/news/soft-drinks-industry-levy-comes-into-effect</a></p></li>\r\n<li><p>Heroes<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Heroes_(American_TV_series)\" class=\"uri\">https://en.wikipedia.org/wiki/Heroes_(American_TV_series)</a></p></li>\r\n<li><p>Mr Robot<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Mr._Robot\" class=\"uri\">https://en.wikipedia.org/wiki/Mr._Robot</a></p></li>\r\n<li><p>Star Trek Theme Faith of The Heart Remake: Sputnik &amp; yuri gagarin<br />\r\n<a href=\"https://www.youtube.com/watch?v=2y_FcxFseyc\" class=\"uri\">https://www.youtube.com/watch?v=2y_FcxFseyc</a></p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR,community,new years eve',0,0,1),
(3342,'2021-05-25','2020-2021 New Years Eve Show Episode 2',3672,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-new-years-eve-show\">Welcome to the 9th Annual Hacker Public Radio New Years Eve Show</h2>\r\n<ul>\r\n<li><p>heated roads and driveways</p></li>\r\n<li><p>talking about distilling spirits</p></li>\r\n<li><p>geek talk</p></li>\r\n<li><p>single board computers</p></li>\r\n</ul>',159,121,0,'CC-BY-SA','HPR,community,new years eve',0,0,1),
(3346,'2021-05-31','2020-2021 New Years Eve Show Episode 3',10488,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-new-years-eve-show\">Welcome to the 9th Annual Hacker Public Radio New Years Eve Show</h2>\r\n<ul>\r\n<li><p>adjusting nextcloud time and date. Why can\'t I do it? Bug? yes or no?</p></li>\r\n<li><p>We discuss ClaudioM\'s breakfast<br />\r\n<a href=\"https://mastodon.sdf.org/@claudiom/105475213315933382\" class=\"uri\">https://mastodon.sdf.org/@claudiom/105475213315933382</a></p></li>\r\n<li><p><a href=\"https://voicecommandcenter.com/#\" class=\"uri\">https://voicecommandcenter.com/#</a></p></li>\r\n<li><p>Bollywood sci-fi movie <a href=\"https://www.justwatch.com/us/movie/2-0\" class=\"uri\">https://www.justwatch.com/us/movie/2-0</a></p></li>\r\n<li><p>Lineage OS and Android phones</p></li>\r\n<li><p>Librem phone: <a href=\"https://arstechnica.com/gadgets/2020/01/librem-5-phone-hands-on-a-proof-of-concept-for-the-open-source-smartphone/\" class=\"uri\">https://arstechnica.com/gadgets/2020/01/librem-5-phone-hands-on-a-proof-of-concept-for-the-open-source-smartphone/</a><br />\r\n<a href=\"https://shop.puri.sm/shop/librem-5-usa/\" class=\"uri\">https://shop.puri.sm/shop/librem-5-usa/</a></p></li>\r\n<li><p>De-googled Android OS<br />\r\n<a href=\"https://grapheneos.org/\" class=\"uri\">https://grapheneos.org/</a></p></li>\r\n<li><p><a href=\"https://techcrunch.com/2020/12/30/elon-musk-says-spacex-will-attempt-to-recover-super-heavy-rocket-by-catching-it-with-launch-tower/\" class=\"uri\">https://techcrunch.com/2020/12/30/elon-musk-says-spacex-will-attempt-to-recover-super-heavy-rocket-by-catching-it-with-launch-tower/</a></p></li>\r\n<li><p>why do we as a community stick with niche platforms?</p></li>\r\n<li><p><a href=\"https://joinmastodon.org/communities/tech\" class=\"uri\">https://joinmastodon.org/communities/tech</a></p></li>\r\n<li><p><a href=\"https://dev.to/botwiki/introduction-to-mastodon-bots-hfn\" class=\"uri\">https://dev.to/botwiki/introduction-to-mastodon-bots-hfn</a></p></li>\r\n<li><p><a href=\"https://botsin.space/about\" class=\"uri\">https://botsin.space/about</a></p></li>\r\n<li><p><a href=\"https://cdimage.debian.org/cdimage/ports/snapshots/2020-12-03/\" class=\"uri\">https://cdimage.debian.org/cdimage/ports/snapshots/2020-12-03/</a></p></li>\r\n<li><p><a href=\"https://xnux.eu/p-boot-demo/\" class=\"uri\">https://xnux.eu/p-boot-demo/</a></p></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/series/0115.html\" class=\"uri\">https://hackerpublicradio.org/series/0115.html</a> Bicycle Hacking</p></li>\r\n<li><p><a href=\"https://sites.google.com/site/recycledrecumbents/home/the-showroom\" class=\"uri\">https://sites.google.com/site/recycledrecumbents/home/the-showroom</a></p></li>\r\n<li><p>Linux/BSD audio talk</p></li>\r\n<li><p>Pipewire: <a href=\"https://wiki.archlinux.org/index.php/PipeWire\" class=\"uri\">https://wiki.archlinux.org/index.php/PipeWire</a></p></li>\r\n<li><p>Unfa YouTube channel: <a href=\"https://www.youtube.com/user/unfa00\" class=\"uri\">https://www.youtube.com/user/unfa00</a></p></li>\r\n<li><p>Sndio is a small audio and MIDI framework part of the OpenBSD project<br />\r\n<a href=\"https://sndio.org/\" class=\"uri\">https://sndio.org/</a></p></li>\r\n<li><p>Doctor Who</p></li>\r\n<li><p>Data, data structures, and application.</p></li>\r\n<li><p>Audio fun</p></li>\r\n<li><p>nextcloud<br />\r\nDe google with nextcloud - <a href=\"https://nextcloud.com/\" class=\"uri\">https://nextcloud.com/</a></p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR,community,new years eve',0,0,1),
(3352,'2021-06-08','2020-2021 New Years Eve Show Episode 4',3993,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-new-years-eve-show\">Welcome to the 9th Annual Hacker Public Radio New Years Eve Show</h2>\r\n<ul>\r\n<li><p>Text editors</p></li>\r\n<li><p>x11 and wayland</p></li>\r\n<li><p>Linux check for X11/Wayland<br />\r\n</p></li>\r\n</ul>\r\n<pre><code>loginctl show-session $(awk &#39;/tty/ {print $1}&#39; &lt;(loginctl)) -p Type | awk -F= &#39;{print $2}&#39;</code></pre>\r\n<ul>\r\n<li><p>Firefox new tab override - <a href=\"https://addons.mozilla.org/en-US/firefox/addon/new-tab-override/?utm_source=addons.mozilla.org&amp;utm_medium=referral&amp;utm_content=search\" class=\"uri\">https://addons.mozilla.org/en-US/firefox/addon/new-tab-override/?utm_source=addons.mozilla.org&amp;utm_medium=referral&amp;utm_content=search</a></p></li>\r\n<li><p>Distributed Search <a href=\"https://yacy.net/index.html\" class=\"uri\">https://yacy.net/index.html</a></p></li>\r\n<li><p>Join Mastodon - <a href=\"https://joinmastodon.org/\" class=\"uri\">https://joinmastodon.org/</a></p></li>\r\n<li><p>edit correspondent page by posting a new show...</p></li>\r\n<li><p><a href=\"https://distrohoppersdigest.blogspot.com/\" class=\"uri\">https://distrohoppersdigest.blogspot.com/</a></p></li>\r\n<li><p><a href=\"https://addons.mozilla.org/en-US/firefox/addon/open-with/?utm_source=addons.mozilla.org\" class=\"uri\">https://addons.mozilla.org/en-US/firefox/addon/open-with/?utm_source=addons.mozilla.org</a></p></li>\r\n<li><p><a href=\"https://addons.mozilla.org/en-US/firefox/addon/videospeed/?utm_source=addons.mozilla.org\" class=\"uri\">https://addons.mozilla.org/en-US/firefox/addon/videospeed/?utm_source=addons.mozilla.org</a></p></li>\r\n<li><p>X2go Graphical interface over ssh <a href=\"https://wiki.x2go.org/doku.php\" class=\"uri\">https://wiki.x2go.org/doku.php</a></p></li>\r\n<li><p>Filk Music discussion: Filk music is a musical culture, genre, and community tied to science fiction, fantasy and horror fandom and a type of fan labor. The genre has been active since the early 1950s, and played primarily since the mid-1970s.</p></li>\r\n<li><p>Dresden Files and books</p></li>\r\n<li><p>happy new year from the Fallon family</p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR,community,new years eve',0,0,1),
(3356,'2021-06-14','2020-2021 New Years Eve Show Episode 5',16905,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-new-years-eve-show\">Welcome to the 9th Annual Hacker Public Radio New Years Eve Show</h2>\r\n<ul>\r\n<li><p>Vacinations</p></li>\r\n<li><p>covid lock downs</p></li>\r\n<li><p>covid covid covid (no suprise)</p></li>\r\n<li><p>virtual confrences</p></li>\r\n<li><p>Virtual life</p></li>\r\n<li><p>programing languages</p></li>\r\n<li><p>the size of texas - Even the Skunks are Large!</p></li>\r\n<li><p>Religion</p></li>\r\n<li><p>Linux</p></li>\r\n</ul>',159,121,1,'CC-BY-SA','HPR,community,New Years Eve',0,0,1),
(3361,'2021-06-21','2020-2021 New Years Eve Show Episode 6',12738,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-new-years-eve-show\">Welcome to the 9th Annual Hacker Public Radio New Years Eve Show</h2>\r\n<ul>\r\n<li><p>Vaccines</p></li>\r\n<li><p>Discussion about the movies: Jumanji, Wizard of Oz.</p></li>\r\n<li><p>Discussion about facebook, whatsapp, and social networks.</p></li>\r\n<li><p>Filk</p></li>\r\n<li><p>Performance of \"Alice the first woman on the moon\" written by Blind Lemon Chiffon.</p></li>\r\n<li><p>podcasting</p></li>\r\n<li><p>Dungeons and Dragons talk</p></li>\r\n<li><p>History</p></li>\r\n<li><p>staying awake for many hours</p></li>\r\n<li><p>geography</p></li>\r\n<li><p>geology</p></li>\r\n<li><p>languages</p></li>\r\n<li><p>food</p></li>\r\n<li><p>minecraft</p></li>\r\n<li><p>schools</p></li>\r\n<li><p>language</p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR,community,new years eve',0,0,1),
(3366,'2021-06-28','2020-2021 New Years Eve Show Episode 7',9803,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-new-years-eve-show\">Welcome to the 9th Annual Hacker Public Radio New Years Eve Show</h2>\r\n<ul>\r\n<li><p>language</p></li>\r\n<li><p>the murmur server (that was originally run by John Neusteter)</p></li>\r\n<li><p>mintcast</p></li>\r\n<li><p>Linux</p></li>\r\n<li><p>Some chatter about home packing and selling. Struggles with packing and finding places to move to out in the \'country\'.</p></li>\r\n<li><p>Free movement and Irish passports</p></li>\r\n<li><p>D\'n\'D talk. The absence of Klaatu.</p></li>\r\n<li><p>The current mumble server for this New year show is probably going to go away after this year.</p></li>\r\n<li><p>Mordancy makes shirts</p></li>\r\n<li><p>Dave talks about his recipe database</p></li>\r\n<li><p>how the HPR shows get posted</p></li>\r\n<li><p>audio books</p></li>\r\n<li><p>Legos</p></li>\r\n<li><p>Electricity is fun</p></li>\r\n<li><p>fun streaming video</p></li>\r\n<li><p>storage</p></li>\r\n<li><p>video game emulation</p></li>\r\n<li><p>Joe fixes headphones (were all shocked)</p></li>\r\n<li><p>weather</p></li>\r\n<li><p>Hunting</p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR,community,new years eve',0,0,1),
(3372,'2021-07-06','2020-2021 New Years Eve Show Episode 8',5947,'the hpr community stops by for a chat','<h2 id=\"welcome-to-the-9th-annual-hacker-public-radio-new-years-eve-show\">Welcome to the 9th Annual Hacker Public Radio New Years Eve Show</h2>\r\n<ul>\r\n<li><p>Hunting</p></li>\r\n<li><p>food</p></li>\r\n<li><p>cpap machines</p></li>\r\n<li><p>Music</p></li>\r\n<li><p>Audio books</p></li>\r\n<li><p>podcasts</p></li>\r\n<li><p>Archive.org is great (support if possible please)</p></li>\r\n<li><p>Moss has a fun 2020</p></li>\r\n<li><p>Politics</p></li>\r\n<li><p>Health care</p></li>\r\n<li><p>grey hat</p></li>\r\n</ul>\r\n',159,121,1,'CC-BY-SA','HPR,community,new years eve',0,0,1),
(3345,'2021-05-28','Audio for Podcasting: Episode 2 - Equalization',965,'Thaj shares tips and tricks on producing quality audio for HPR episodes','<p>In this episode we discuss equalization in order to improve our audio quality for podcasting. We will use <a href=\"https://www.audacityteam.org/\">Audacity</a> to manipulate our equalization.</p>\r\n<p>The best method of achieving this is to use the Graphic EQ plugin. To use this select the audio you wish to process, then use the \"Effect\" menu to select the Graphic EQ plugin.</p>\r\n<p><img src=\"https://ia601405.us.archive.org/28/items/3_20210430_20210430/HPR1.png\" alt=\"The Graphic EQ plugin\" /> <img src=\"https://archive.org/download/3_20210430_20210430/2.png\" alt=\"An example of removing the bass frequencies in the Graphic EQ plugin\" /> <img src=\"https://archive.org/download/3_20210430_20210430/3.png\" alt=\"An example of boosting the bass frequencies in the Graphic EQ plugin\" /></p>',270,45,1,'CC-BY-SA','audio production, equalization, audio quality',0,0,1),
(3337,'2021-05-18','I like that the boat is stuck',527,'A dramatic reading of a work by Gailey','<p><strong><em>The episode is released under a Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0). HPR has been given non-exclusive rights to create and distribute audio narration with kind permission of the Author. For clarity, permission has not been granted for derivative works, commercial or otherwise, to be created from this narration. This license only applies to the audio narration, not the print version of the essay.</em></strong></p>\r\n<p>I found this piece really fascinating and I like that you can take a huge problem and still consider it simple. It puts a lot of other problems into perspective and I like how this piece is written.</p>\r\n<p><a href=\"https://stone-soup.ghost.io/archive/i-like-that-the-boat-is-stuck/\" class=\"uri\">https://stone-soup.ghost.io/archive/i-like-that-the-boat-is-stuck/</a></p>\r\n\r\n',382,0,0,'CC-BY-NC-ND','news, boat, stuck',0,0,1),
(3611,'2022-06-06','HPR Community News for May 2022',3341,'HPR Volunteers talk about shows released and comments posted in May 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/0405.html\" target=\"_blank\">Lurking Prion</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=3586\" target=\"_blank\">3586</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-05-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3586\" target=\"_blank\">HPR Community News for April 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=3587\" target=\"_blank\">3587</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-05-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3587\" target=\"_blank\">20220406_UDM</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=3588\" target=\"_blank\">3588</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-05-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3588\" target=\"_blank\">Linux Inlaws S01E55: Get yer boots on for a fresh look at init systems</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3589\" target=\"_blank\">3589</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-05-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3589\" target=\"_blank\">Sample of my microphones</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=3590\" target=\"_blank\">3590</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-05-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3590\" target=\"_blank\">Directory Commands</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=3591\" target=\"_blank\">3591</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-05-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3591\" target=\"_blank\">Small Flashlights</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3592\" target=\"_blank\">3592</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-05-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3592\" target=\"_blank\">A quick look at the Surface pro X</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3593\" target=\"_blank\">3593</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-05-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3593\" target=\"_blank\">Home office setup mouse shoulder and Auto Hot Key Scripts</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=3594\" target=\"_blank\">3594</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-05-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3594\" target=\"_blank\">Peely-wally in Edinburgh</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=3595\" target=\"_blank\">3595</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-05-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3595\" target=\"_blank\">I am sure I changed my password last...???</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=3596\" target=\"_blank\">3596</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-05-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3596\" target=\"_blank\">Extracting text, tables and images from docx files using Python</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0300.html\" target=\"_blank\">b-yeezi</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3597\" target=\"_blank\">3597</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-05-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3597\" target=\"_blank\">Good Idea Fairy Hunting</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=3598\" target=\"_blank\">3598</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-05-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3598\" target=\"_blank\">Slackware 15 - 32 bit Operating System from day one.</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=3599\" target=\"_blank\">3599</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-05-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3599\" target=\"_blank\">Linux Inlaws S01E56: Slackware - A User\'s Perspective</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3600\" target=\"_blank\">3600</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-05-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3600\" target=\"_blank\">Digitizing Photos</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=3601\" target=\"_blank\">3601</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-05-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3601\" target=\"_blank\">Re: The Worst Car I Ever Had</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=3602\" target=\"_blank\">3602</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-05-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3602\" target=\"_blank\">Hacker Stories April 20 22</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=3603\" target=\"_blank\">3603</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-05-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3603\" target=\"_blank\">Who the heck is Evil Steve? Part 1\r\n</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=3604\" target=\"_blank\">3604</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-05-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3604\" target=\"_blank\">Everything You Always Wanted to Know About PEX Part 01- Let\'s Talk About PEX - Introduction </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=3605\" target=\"_blank\">3605</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-05-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3605\" target=\"_blank\">Aspire-ing to use 13 year hardware</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=3606\" target=\"_blank\">3606</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-05-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3606\" target=\"_blank\">Infinity is just a big number and other proofs</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=3607\" target=\"_blank\">3607</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-05-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3607\" target=\"_blank\">The Best Eggs in the World</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0128.html\" target=\"_blank\">pokey</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 24 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 5 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3574#comments\" target=\"_blank\">hpr3574</a></strong>\n(2022-04-14) \"<em>Local Talking Newspapers</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0403.html\" target=\"_blank\">Lee</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3574#5\" target=\"_blank\">Comment 5</a>:\nelmussol on 2022-05-09:\n\"correction\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3574#6\" target=\"_blank\">Comment 6</a>:\nDave Morriss on 2022-05-09:\n\"Clitheroe, LANCASHIRE!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3585#comments\" target=\"_blank\">hpr3585</a></strong>\n(2022-04-29) \"<em>Freedom of speech in open source, 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=3585#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2022-05-04:\n\"Open source vs. free software\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3585#2\" target=\"_blank\">Comment 2</a>:\nSome Guy On The Internet on 2022-05-05:\n\"The freedom to Advertise.\"</li>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3585#3\" target=\"_blank\">Comment 3</a>:\nKevin O&#39;Brien on 2022-05-05:\n\"Free Software\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 19 comments on 10 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3586#comments\" target=\"_blank\">hpr3586</a></strong>\n(2022-05-02) \"<em>HPR Community News for April 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=3586#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2022-05-19:\n\"jinx\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3588#comments\" target=\"_blank\">hpr3588</a></strong>\n(2022-05-04) \"<em>Linux Inlaws S01E55: Get yer boots on for a fresh look at init systems</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3588#1\" target=\"_blank\">Comment 1</a>:\ncybergrue on 2022-05-04:\n\"Unix Philosophy\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3588#2\" target=\"_blank\">Comment 2</a>:\nClinton Roy on 2022-05-05:\n\"Debian systemd\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3588#3\" target=\"_blank\">Comment 3</a>:\nbrian-in-ohio on 2022-05-19:\n\"out of your depth\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3592#comments\" target=\"_blank\">hpr3592</a></strong>\n(2022-05-10) \"<em>A quick look at the Surface pro X</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0111.html\" target=\"_blank\">knightwise</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3592#1\" target=\"_blank\">Comment 1</a>:\nRobert on 2022-04-30:\n\"Fine show until ...\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3594#comments\" target=\"_blank\">hpr3594</a></strong>\n(2022-05-12) \"<em>Peely-wally in Edinburgh</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=3594#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2022-05-19:\n\"great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3594#2\" target=\"_blank\">Comment 2</a>:\nBeeza on 2022-05-20:\n\"Pascal\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3594#3\" target=\"_blank\">Comment 3</a>:\nDave on 2022-05-20:\n\"Thanks Brian\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3594#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2022-05-20:\n\"Regarding Pascal\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3597#comments\" target=\"_blank\">hpr3597</a></strong>\n(2022-05-17) \"<em>Good Idea Fairy Hunting</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=3597#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2022-05-18:\n\"Great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3597#2\" target=\"_blank\">Comment 2</a>:\nLurking Prion on 2022-05-19:\n\"Thank you!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3598#comments\" target=\"_blank\">hpr3598</a></strong>\n(2022-05-18) \"<em>Slackware 15 - 32 bit Operating System from day one.</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=3598#1\" target=\"_blank\">Comment 1</a>:\nbittin on 2022-05-18:\n\"Audacious Winamp Skins\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3598#2\" target=\"_blank\">Comment 2</a>:\nlinuxdaddy on 2022-05-18:\n\"32-bit linux\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3598#3\" target=\"_blank\">Comment 3</a>:\nbrian-in-ohio on 2022-05-19:\n\"great show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3598#4\" target=\"_blank\">Comment 4</a>:\nWindigo on 2022-05-21:\n\"Intrigued about slackware\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3599#comments\" target=\"_blank\">hpr3599</a></strong>\n(2022-05-19) \"<em>Linux Inlaws S01E56: Slackware - A User\'s Perspective</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3599#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2022-05-19:\n\"what????\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3602#comments\" target=\"_blank\">hpr3602</a></strong>\n(2022-05-24) \"<em>Hacker Stories April 20 22</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=3602#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-05-24:\n\"The best kind of correct\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3604#comments\" target=\"_blank\">hpr3604</a></strong>\n(2022-05-26) \"<em>Everything You Always Wanted to Know About PEX Part 01- Let\'s Talk About PEX - Introduction </em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3604#1\" target=\"_blank\">Comment 1</a>:\nLurking Prion on 2022-05-26:\n\"Made my heart happy!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3605#comments\" target=\"_blank\">hpr3605</a></strong>\n(2022-05-27) \"<em>Aspire-ing to use 13 year hardware</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=3605#1\" target=\"_blank\">Comment 1</a>:\nTrey on 2022-05-27:\n\"Great show\"</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-May/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-May/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 archive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to the Internet Archive there are other tasks to perform. We are reprocessing and re-uploading shows in the range 871 to 2429 as explained in the Community News show notes released in <a href=\"https://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">May 2022</a>. We are keeping a running total here to show progress:</p>\n<ul>\n<li>Re-uploads done so far: 271</li>\n<li>Shows remaining to be done: 1288</li>\n<li>Shows uploaded by last Community News recording: 131</li>\n<li>Shows added since last recording: 140</li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3339,'2021-05-20','Linux Inlaws S01E30: Politicians and artificial intelligence part 2',3453,'Part 2 of the miniseries on Deep Learning, politicians and other approaches to intelligence (or not)','<p>After successfully navigating through the shallow (or not-so-shallow) depths of the first episode on deep learning fundamentals, our two heroes tackle a more concrete topic in this episode: How to use the damn stuff! No expenses will be spared to bring to the listeners the finer details of tensors, TensorFlow and other frameworks which serve as the basis for modern artificial intelligence / machine learning applications running on back-propagation networks (see the first episode on the foundations). Lifting the curtain even more, all will be revealed about a little corner shop called \"Google\" (well, almost all :-).\r\n</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Torch: <a href=\"https://torch.ch\" target=\"_blank\">https://torch.ch</a>\r\n</li>\r\n<li>PyTorch: <a href=\"https://pytorch.org\" target=\"_blank\">https://pytorch.org</a>\r\n</li>\r\n<li>TensorFlow: <a href=\"https://www.tensorflow.org\" target=\"_blank\">https://www.tensorflow.org</a>\r\n</li>\r\n<li>Lua: <a href=\"https://www.lua.org\" target=\"_blank\">https://www.lua.org</a>\r\n</li>\r\n<li>BigTable: <a href=\"https://en.wikipedia.org/wiki/Bigtable\" target=\"_blank\">https://en.wikipedia.org/wiki/Bigtable</a>\r\n</li>\r\n<li>BigFS: <a href=\"https://en.wikipedia.org/wiki/Google_File_System\" target=\"_blank\">https://en.wikipedia.org/wiki/Google_File_System</a>\r\n</li>\r\n<li>Google\'s inner workings: <a href=\"https://www.panmacmillan.com/authors/david-a-vise/the-google-story/9781509889211\" target=\"_blank\">https://www.panmacmillan.com/authors/david-a-vise/the-google-story/9781509889211</a>\r\n</li>\r\n<li>TPUs: <a href=\"https://en.wikipedia.org/wiki/Tensor_Processing_Unit\" target=\"_blank\">https://en.wikipedia.org/wiki/Tensor_Processing_Unit</a>\r\n</li>\r\n<li>More DL frameworks: <a href=\"https://en.wikipedia.org/wiki/Comparison_of_deep-learning_software\" target=\"_blank\">https://en.wikipedia.org/wiki/Comparison_of_deep-learning_software</a>\r\n</li>\r\n<li>TIOBE index: <a href=\"https://www.tiobe.com/tiobe-index\" target=\"_blank\">https://www.tiobe.com/tiobe-index</a>\r\n</li>\r\n<li>Stackoverflow survey: <a href=\"https://insights.stackoverflow.com/survey/2020\" target=\"_blank\">https://insights.stackoverflow.com/survey/2020</a>\r\n</li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Policitians, artificial intelligence, deep learning',0,0,1),
(3343,'2021-05-26','The Forth programming language',761,'A less than complete history of Forth','<ul>\r\n<li><p>forth the early years<br />\r\n<a href=\"https://worrydream.com/refs/Moore%20-%20Forth%20-%20The%20Early%20Years.pdf\" class=\"uri\">https://worrydream.com/refs/Moore%20-%20Forth%20-%20The%20Early%20Years.pdf</a></p></li>\r\n<li><p><a href=\"https://en.wikipedia.org/wiki/Forth_(programming_language)\" class=\"uri\">https://en.wikipedia.org/wiki/Forth_(programming_language)</a></p></li>\r\n<li><p><a href=\"https://www.forth.com/resources/forth-programming-language/\" class=\"uri\">https://www.forth.com/resources/forth-programming-language/</a></p></li>\r\n<li><p><a href=\"https://colorforth.github.io/\" class=\"uri\">https://colorforth.github.io/</a></p></li>\r\n<li><p>chuck moore on youtube</p>\r\n<ul>\r\n<li>2019 <a href=\"https://youtu.be/81bkIqPpe0g\" class=\"uri\">https://youtu.be/81bkIqPpe0g</a></li>\r\n<li>2018 <a href=\"https://youtu.be/SX3kXbLmwn4\" class=\"uri\">https://youtu.be/SX3kXbLmwn4</a></li>\r\n<li>2008 <a href=\"https://youtu.be/ydeMNRxJ3Y8\" class=\"uri\">https://youtu.be/ydeMNRxJ3Y8</a></li>\r\n</ul></li>\r\n<li><p>klaatu on lisp <a href=\"https://gnuworldorder.info/audiophile/gnuWorldOrder_405.ogg\" class=\"uri\">https://gnuworldorder.info/audiophile/gnuWorldOrder_405.ogg</a></p></li>\r\n</ul>\r\n',326,0,0,'CC-BY-SA','programming, history',0,0,1),
(3440,'2021-10-08','Lighten Layer Modes',1168,'We continue our look at the Layer Modes in GIMP with the Lighten Modes','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We continue with the Lighten Modes, except for Dodge which we will cover in the next tutorial along with Burn. These are the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.24.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Luma_(video)\" class=\"uri\">https://en.wikipedia.org/wiki/Luma_(video)</a></li>\r\n<li><a href=\"https://blog.johnnovak.net/2016/09/21/what-every-coder-should-know-about-gamma/\" class=\"uri\">https://blog.johnnovak.net/2016/09/21/what-every-coder-should-know-about-gamma/</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=Ijwb1R07aa0\" class=\"uri\">https://www.youtube.com/watch?v=Ijwb1R07aa0</a></li>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/lighten-layer-modes/\" class=\"uri\">https://www.ahuka.com/gimp/lighten-layer-modes/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes, Lighten',0,0,1),
(3450,'2021-10-22','Internal Commands',746,'More on DOS. This time it is Internal Commands.','<p>This tutorial looks at DOS Internal Commands, which in some sense are analogous to shell commands in Linux. That means that the command interpreter already has these loaded and ready to go when you boot.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://webopedia.internet.com/TERM/c/command.html\" class=\"uri\">https://webopedia.internet.com/TERM/c/command.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-3-internal-commands/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-3-internal-commands/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, Internal Commands',0,0,1),
(3460,'2021-11-05','Dodge and Burn',1107,'We continue our look at the Layer Modes in GIMP with Dodge and Burn','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We continue with the Dodge and Burn Modes. Dodge is one of the Lighten Modes, while Burn is one of the Darken Modes, but I pulled them out for their own tutorial because they are not only closely related (inverse of each other), but also because I wanted to cover their use as Tool Modes in addition to Layer Modes. These are the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.24.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-tools-paint.html#gimp-tools-paint-options\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-tools-paint.html#gimp-tools-paint-options</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/a-layer-mask-project/\" class=\"uri\">https://www.ahuka.com/gimp/a-layer-mask-project/</a></li>\r\n<li><a href=\"https://digitalmedia.fws.gov/digital/collection/natdiglib/id/14486/rec/210\" class=\"uri\">https://digitalmedia.fws.gov/digital/collection/natdiglib/id/14486/rec/210</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=bbaAEZl7_44\" class=\"uri\">https://www.youtube.com/watch?v=bbaAEZl7_44</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/dodge-and-burn/\" class=\"uri\">https://www.ahuka.com/gimp/dodge-and-burn/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes, Dodge and Burn',0,0,1),
(3470,'2021-11-19','External Commands and Emergency Boot Disk',1008,'More on DOS. This time it is External Commands and Emergency Boot Disk','<p>In our continuing exploration of DOS we come to the topics of External Commands and Emergency Boot Disks. We cover them together because External Commands may not be available on your Emergency Boot Disk unless you take steps to include them, unlike Internal Commands, which are always part of a Boot Disk.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-4-external-commands-emergency-boot-disk/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-4-external-commands-emergency-boot-disk/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, External Commands, Emergency Boot Disk',0,0,1),
(3480,'2021-12-03','Darken Layer Modes',883,'More on Layer Modes in GIMP with the Darken Modes','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We continue with the Darken Modes, except for Burn, which was covered in the previous tutorial. Darken modes do what they say on the tin, they make things darker, and so they are kind of the inverse of the Lighten Modes. These are the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.24. I also take the time to discuss image formats such as JPG, PNG, and RAW.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/gimp/lighten-layer-modes/\" class=\"uri\">https://www.ahuka.com/gimp/lighten-layer-modes/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\" class=\"uri\">https://en.wikipedia.org/wiki/Portable_Network_Graphics</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/JPEG\" class=\"uri\">https://en.wikipedia.org/wiki/JPEG</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Raw_image_format\" class=\"uri\">https://en.wikipedia.org/wiki/Raw_image_format</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=XbcA9iSTudY\" class=\"uri\">https://www.youtube.com/watch?v=XbcA9iSTudY</a></li>\r\n<li><a href=\"https://daviesmediadesign.com/project/open-raw-images-gimp-2-10/\" class=\"uri\">https://daviesmediadesign.com/project/open-raw-images-gimp-2-10/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Dodging_and_burning\" class=\"uri\">https://en.wikipedia.org/wiki/Dodging_and_burning</a></li>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/darken-modes/\" class=\"uri\">https://www.ahuka.com/gimp/darken-modes/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes, Darken Modes',0,0,1),
(3490,'2021-12-17','The Path',906,'More on DOS. This time it is the Path.','<p>In this DOS tutorial we take a look at the Path, an important concept. While the concept continues to be used in modern operating systems like Linux, in DOS you had severe limitations you always had to be conscious of. Remember that this was in the days when 640KB was enough memory for anyone.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-5-the-path/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-5-the-path/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, The Path',0,0,1),
(3349,'2021-06-03','Linux Inlaws S01E31: Interview with Paul Ramsey FOSS aficionado and entrepreneur',3923,'An interview with Paul Ramsey, FLOSS entrepreneur and OpenGeo fame','<p>\r\nIn this episode the inlaws host Paul Ramsey of OpenGeo fame. Apart from his PostgreSQL contributions,\r\nPaul is probably best known for GIS work and geo DB contributions in general (in addition to\r\noff-the-beaten track stuff like URL of his website among other things). Don\'t miss this for nuggets\r\non geo databases and beyond!\r\n</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Paul Ramsey: <a href=\"https://blog.cleverelephant.ca/\" target=_blank>https://blog.cleverelephant.ca/</a></li>\r\n<li>PostgreSQL: <a href=\"https://www.postgresql.org\" target=_blank>https://www.postgresql.org</a></li>\r\n<li>PostGIS: <a href=\"https://postgis.net\" target=_blank>https://postgis.net</a></li>\r\n<li>FOSS4G 2019: <a href=\"https://www.youtube.com/watch?v=NQ5_NnrBHjo\" target=_blank>https://www.youtube.com/watch?v=NQ5_NnrBHjo</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','PostgreSQL,PostGIS',0,0,1),
(3344,'2021-05-27','Infosec Podcasts Part 3 - Infosec Career and Personal Development',366,'Presenting my favorite podcasts related to information security careers and growth','<p>Inoffensive in every region of the world</p>\r\n<p>Infosec Podcasts Part 3 – Infosec Career & Personal Development</p>\r\n<p>Why am I recording this series?</p>\r\n<p>\"What podcasts you listen to\" was on the list of recommended topics</p>\r\n<p>I am passionate about information security</p>\r\n<p>We desperately need people to fill infosec jobs in many different specialties</p>\r\n<p>Infosec is a rapidly changing field, and it is critical to stay current</p>\r\n<p>As a result I listen to TONS of infosec related podcasts</p>\r\n<p>Because there are so many podcasts to list, I will break them down into 6 different episodes based on topics:</p>\r\n<ul>\r\n<li>Part 1 - News & Current Events</li>\r\n<li>Part 2 - General Information Security</li>\r\n<li>Part 3 - Career & Personal Development</li>\r\n<li>Part 4 - Social Engineering</li>\r\n<li>Part 5 -\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</ul></li>\r\n<li>Part 6 - Infosec Leadership</li>\r\n</ul>\r\n<h2 id=\"part-3\">Part 3</h2>\r\n<h3 id=\"career-personal-development\">Career & Personal Development</h3>\r\n<ul>\r\n<li><p>Getting into Infosec - Ayman Elsawah (Monthly)<br />\r\nWas a monthly podcast, but the last recorded episode dropped February 2021<br />\r\nStories of how Infosec and Cybersecurity pros got jobs in the field so you can be inspired, motivated, and educated on your journey<br />\r\n<a href=\"https://gettingintoinfosec.com/\" class=\"uri\">https://gettingintoinfosec.com/</a></p></li>\r\n<li><p>Infosec Career Podcast – Jason Wood (Discontinued March 2020)<br />\r\nInterviews with infosec professionals discussing their career journeys<br />\r\n<a href=\"https://infoseccareer.libsyn.com/\" class=\"uri\">https://infoseccareer.libsyn.com/</a></p></li>\r\n<li><p>Cyber Security Interviews – Douglas Brush (Bi-weekly)<br />\r\nA weekly interview based podcast with top cyber security professionals discussing how they got where they are and their perspectives on the industry<br />\r\n<a href=\"https://cybersecurityinterviews.com/\" class=\"uri\">https://cybersecurityinterviews.com/</a></p></li>\r\n<li><p>Humans of Infosec - Caroline Wong & Mike Shema (Bi-weekly)<br />\r\nA weekly podcast interviewing people from diverse backgrounds involved in infosec.<br />\r\n<a href=\"https://soundcloud.com/humans-of-infosec\" class=\"uri\">https://soundcloud.com/humans-of-infosec</a></p></li>\r\n<li><p>Hacker Valley Studio – Chris Cochran & Ron Eddings (Weekly)<br />\r\nDiscussions of personal growth and maturity within Infosec & life<br />\r\n<a href=\"https://hackervalley.com/\" class=\"uri\">https://hackervalley.com/</a></p></li>\r\n<li><p>We Hack Purple – Tanya Janka (Weekly)<br />\r\nInterview based podcast discussing various infosec careers with a diverse array of guests<br />\r\n<a href=\"https://wehackpurple.com/podcast.html\" class=\"uri\">https://wehackpurple.com/podcast.html</a></p></li>\r\n</ul>\r\n',394,75,0,'CC-BY-SA','infosec, podcasts, security',0,0,1),
(3347,'2021-06-01','Ethical Analysis of Renewable Energy and Conservation',904,'I read a paper I wrote about the ethical issues of renewable energy and conservation efforts.','<h3 id=\"original-essay\">Original essay:</h3>\r\n<p><a href=\"https://hackerpublicradio.org/eps/hpr3347/ethical_analysis_of_renewable_energy_and_conservation.pdf\">https://hackerpublicradio.org/eps/hpr3347/ethical_analysis_of_renewable_energy_and_conservation.pdf</a></p>\r\n<h3 id=\"references\">References</h3>\r\n<ul>\r\n<li>Bedard, Paul (2010, March 23). High Energy Costs for the Poor Might Push Action in Congress. Washington Whispers, U.S. News, Sunday, April 11, 2010 <a href=\"https://www.usnews.com\" class=\"uri\">https://www.usnews.com</a></li>\r\n<li>Colton, Roger D. (1994, July/August). Energy and Low-Income Housing: Part I Energy Policy Hurts The Poor. NHI Shelterforce. Issue #76. Retrieved from <a href=\"https://www.nhi.org\" class=\"uri\">https://www.nhi.org</a></li>\r\n<li>Ellen (2008, October 4). Poverty and Crime [Web log message], retrieved from Defining Canada, <a href=\"https://www.definingcanada.ca\" class=\"uri\">https://www.definingcanada.ca</a></li>\r\n<li>Fellegi, Ivan P. (1997, September). On poverty and low income, retrieved March 31, 2010 from Statistics Canada web site, <a href=\"https://www.statcan.gc.ca/pub/13f0027x/13f0027x1999001-eng.htm\" class=\"uri\">https://www.statcan.gc.ca/pub/13f0027x/13f0027x1999001-eng.htm</a></li>\r\n<li>Minu (2010, April 2). Lamps | Compact Fluorescent Lamps (CFL) [Web log message]. Retrieved from House Construction in India, <a href=\"https://houseconstructionindia.blogspot.com\" class=\"uri\">https://houseconstructionindia.blogspot.com</a></li>\r\n<li>Patel, Julie (2010, March 11). NAACP and FPL: Saving too much energy hurts the poor [web log message], Retrieved from SunSentinel.com, <a href=\"https://weblogs.sun-sentinel.com\" class=\"uri\">https://weblogs.sun-sentinel.com</a></li>\r\n<li>Smith, Adam (1776). An Inquiry into the Nature And Causes of the Wealth of Nations. Public domain.</li>\r\n<li>Toohey, Marty (2009, September 21). Advocates concerned Austin Energy plans will hurt poor, elderly. statesman.com. Retrieved from www.statesman.com</li>\r\n<li>Walsh, Bryan (2009, February 17). Building Green Houses for the Poor. Time. Retrieved from <a href=\"https://www.time.com\" class=\"uri\">https://www.time.com</a>.</li>\r\n</ul>',383,0,0,'CC-BY-SA','Ethics,renewable,energy,poverty,solar,wind,conservation,green',0,0,1),
(3348,'2021-06-02','Feedback on the Article by hedorah about HPR',4420,'Join the policy discussions on the mail list','<p>hedorah posted an article <a href=\"https://foxacid.se/hedorah/posts/hpr/\">https://foxacid.se/hedorah/posts/hpr/</a>, and we read out the mail thread that resulted <a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-April/014931.html\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2021-April/014931.html</a></a>',30,0,1,'CC-BY-SA','HPR, policy decisions',0,0,1),
(3500,'2021-12-31','Contrast Layer Modes',1019,'More on Layer Modes in GIMP with the Contrast Modes','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We continue with the Contrast Modes, which are ways of combining layers that can heighten the contrast my making light pixels lighter and dark pixels darker. These are the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.24.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/darken-modes/\" class=\"uri\">https://www.ahuka.com/gimp/darken-modes/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes, Contrast Modes',0,0,1),
(3510,'2022-01-14','Syntax, Switches, and Help',1215,'We continue our look the old warhorse, DOS. This time it is Syntax, Switches, and Help.','<p>Since DOS is a command line type of operating system, it is really important that you understand the syntax of commands. The good news is that the system will do what you tell it to do. But the bad news is that it will do what you tell it to do. You have to tell it in the precisely correct way, and that means Syntax. And with a number of commands you can modify them using Switches. And where do you learn all about Syntax and Switches? Why, in the HELP system, of course!</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-6-syntax-and-switches-help-system/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-6-syntax-and-switches-help-system/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, syntax, switches, help',0,0,1),
(3520,'2022-01-28','Inversion Layer Modes',1064,'More on Layer Modes in GIMP with the Inversion Modes','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We continue with the Inversion Modes, which in various ways invert the lightness and the color values of the component layers. These are the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.24.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/gimp/lighten-layer-modes/\" class=\"uri\">https://www.ahuka.com/gimp/lighten-layer-modes/</a></li>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/darken-modes/\" class=\"uri\">https://www.ahuka.com/gimp/darken-modes/</a></li>\r\n</ul>',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes, Inversion Modes',0,0,1),
(3530,'2022-02-11','Filenames and ASCII',875,'We continue our look at the old warhorse, DOS. This time it is DOS filenames and ASCII','<p>In a purely text-based operating system you need to pay special attention to naming files. You won\'t have any helpful icons or thumbnails to help you locate things. So we dig into the file naming conventions in DOS, including forbidden characters. And since the possible characters all come from the ASCII character set, we do a small look at that as well.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://webopedia.internet.com/TERM/A/ASCII.html\" class=\"uri\">https://webopedia.internet.com/TERM/A/ASCII.html</a></li>\r\n<li><a href=\"https://www.techweb.com/encyclopedia/defineterm?term=ASCIIchart\" class=\"uri\">https://www.techweb.com/encyclopedia/defineterm?term=ASCIIchart</a></li>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-7-dos-filenames-ascii/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-7-dos-filenames-ascii/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, filenames, ASCII',0,0,1),
(3353,'2021-06-09','My terminal journey, part 01.',2814,'Becoming terminal friendly.','<h2 id=\"book-tlcl\">Book <a href=\"https://sourceforge.net/projects/linuxcommand/files/TLCL/19.01/TLCL-19.01.pdf/download\" title=\"download link\">TLCL</a></h2>\r\n<p>The Linux Command Line: <a href=\"https://www.linuxcommand.org/tlcl.php\">https://www.linuxcommand.org/tlcl.php</a></p>\r\n<h2 id=\"my-bashrc-alias\">My .bashrc alias</h2>\r\n<pre><code># ls aliases\r\nalias la=&#39;ls -Alh --group-directories-first&#39;\r\nalias lr=&#39;ls -lh --group-directories-first --recursive&#39;\r\nalias lar=&#39;ls -Alh --group-directories-first --recursive&#39;\r\n\r\n# safety first ;)\r\nalias rmi=&#39;rm --interactive --verbose&#39;\r\nalias mvi=&#39;mv --interactive --verbose&#39;\r\nalias cpi=&#39;cp --interactive --verbose&#39;\r\n\r\n# cd reverse dir\r\nalias ..=&#39;cd ..&#39;\r\nalias .2=&#39;cd ../..&#39;\r\nalias .3=&#39;cd ../../..&#39;\r\nalias .4=&#39;cd ../../../..&#39;\r\nalias .5=&#39;cd ../../../../..&#39;\r\n\r\n# cd dir\r\nalias cd.d=&#39;cd ~/Documents/.dump&#39;\r\n\r\n# shutdown | reboot\r\nalias ssn=&#39;sudo shutdown -P now&#39;\r\nalias sr=&#39;sudo reboot&#39;\r\n\r\n# Misc\r\nalias nrpt=&#39;echo -e &quot;\\n\\n---\\n\\nNew Report\\n\\n---\\n\\n&quot;&#39;\r\n</code></pre>\r\n<h2 id=\"my-dump-script\">My dump script</h2>\r\n<pre><code>#!/bin/bash\r\n\r\ndump=dump$(date +%m-%d-%Y).txt\r\npdat=$(date +%a_%b_%d_%Y_%T)\r\n\r\ntouch $dump;\r\n\r\necho -e &quot;$pdat&quot; &gt; $dump; echo -e &quot;\\n\\nThis file is used to store terminal output for later use; now get out!\\n\\n&quot; &gt;&gt; $dump;\r\n\r\necho -e &quot;\\n\\nDump file $dump is ready for use (created on $(date +%m-%d-%Y_%T)).\\n\\n&quot;\r\n</code></pre>\r\n<h2 id=\"my-upgrade-script\">My Upgrade script</h2>\r\n<pre><code>#!/bin/bash\r\n\r\ndp=dump$(date +%m-%d-%Y).txt\r\n\r\ndate | tee -a ./$dp; echo -e &quot;\\n&quot; | tee -a ./$dp;\r\n\r\nsudo apt-get update | tee -a ./$dp; echo -e &quot;\\n&quot; | tee -a ./$dp;\r\necho -e &quot;System Update Completed.&quot; | tee -a ./$dp; echo -e &quot;\\n&quot; | tee -a ./$dp;\r\n\r\nsudo apt-get upgrade --yes | tee -a ./$dp; echo -e &quot;\\n&quot; | tee -a ./$dp;\r\necho -e &quot;System Upgrade Completed.&quot; | tee -a ./$dp; echo -e &quot;\\n&quot; | tee -a ./$dp;\r\n</code></pre>\r\n<h2 id=\"commands\">Commands</h2>\r\n<ol>\r\n<li><p>the upgrade example <code>sudo apt-get update | tee -a ~/Documents/.dump/dump05-05-2021.txt; nrpt &gt;&gt; ./dump05-05-2021.txt;</code></p></li>\r\n<li><p>the nmap example (plus the other command I couldn\'t remember while recording) <code>apt-cache search nmap &gt;&gt; ./dump05-05-2021.txt; nrpt &gt;&gt; ./dump05-05-2021.txt;</code> <code>apt-cache showpkg nmap</code></p></li>\r\n<li><p>the depends example <code>apt-cache depends nmap &gt;&gt; ./dump05-05-2021.txt;</code></p></li>\r\n<li><p>the download example <code>sudo apt-get download dict dictd dict-wn dict-gcide artha</code></p></li>\r\n<li><p>vim <code>sudo apt-get vim; vimtutor</code></p></li>\r\n<li><p>Terminal examples <code>~</code>= home folder, <code>CTRL + R</code>= command search , <code>CTRL + L</code>= clear terminal, <code>xdg-open</code>= open files with default app.</p></li>\r\n<li><p>Searching with grep example <code>ls -lhAr ~ | grep -i bash &gt;&gt; ./dump05-05-2021.txt</code></p></li>\r\n<li><p>the dump05-05-2021.txt file</p></li>\r\n</ol>\r\n<pre><code>Wed_May_05_2021_12:22:43\r\n\r\nThis file is used to store terminal output for later use; now get out!\r\n\r\n\r\nHit:1 https://dl.google.com/linux/chrome/deb stable InRelease\r\nIgn:2 https://mirror.cs.jmu.edu/pub/linuxmint/packages ulyana InRelease\r\nGet:3 https://security.ubuntu.com/ubuntu focal-security InRelease [109 kB]\r\nHit:4 https://mirror.cs.jmu.edu/pub/linuxmint/packages ulyana Release\r\nHit:5 https://mirror.cogentco.com/pub/linux/ubuntu focal InRelease\r\nHit:6 https://mirror.cogentco.com/pub/linux/ubuntu focal-updates InRelease\r\nHit:7 https://archive.canonical.com/ubuntu focal InRelease\r\nHit:8 https://mirror.cogentco.com/pub/linux/ubuntu focal-backports InRelease\r\nFetched 109 kB in 1s (158 kB/s)\r\nReading package lists...\r\n\r\n---\r\n\r\nNew Report\r\n\r\n---\r\n\r\nbrutespray - Python bruteforce tool\r\ndindel - determines indel calls from short-read data\r\ndoscan - port scanner for discovering services on large networks\r\nforensics-all - Debian Forensics Environment - essential components (metapackage)\r\nforensics-all-gui - Debian Forensics Environment - GUI components (metapackage)\r\nlibfile-map-perl - Perl module providing simple and safe memory mapping\r\nlibnmap-parser-perl - module to parse nmap scan results with perl\r\nlibwlocate-dev - Library for doing location lookup based on free openwlanmap.org data\r\nlibwlocate0 - Library for doing location lookup based on free openwlanmap.org data\r\nmapsembler2 - bioinformatics targeted assembly software\r\nmasscan - TCP port scanner\r\nncat - NMAP netcat reimplementation\r\nncrack - High-speed network authentication cracking tool\r\nndiff - The Network Mapper - result compare utility\r\nnmap - The Network Mapper\r\nnmap-common - Architecture independent files for nmap\r\nnmapsi4 - graphical interface to nmap, the network scanner\r\np0f - Passive OS fingerprinting tool\r\npads - Passive Asset Detection System\r\npnscan - Multi threaded port scanner\r\npsad - Port Scan Attack Detector\r\npython-libnmap-doc - Python NMAP Library (common documentation)\r\npython3-libnmap - Python 3 NMAP library\r\npython3-nmap - Python3 interface to the Nmap port scanner\r\npython3-scapy - Packet generator/sniffer and network scanner/discovery (Python 3)\r\nsamblaster - marks duplicates, extracts discordant/split reads\r\ntophat-recondition - post-processor for TopHat unmapped reads\r\nxprobe - Remote OS identification\r\nxscreensaver-gl - GL(Mesa) screen saver modules for screensaver frontends\r\n\r\n---\r\n\r\nNew Report\r\n\r\n---\r\n\r\nnmap\r\n  Depends: nmap-common\r\n  Depends: libc6\r\n  Depends: libgcc-s1\r\n  Depends: liblinear4\r\n  Depends: liblua5.3-0\r\n  Depends: libpcap0.8\r\n  Depends: libpcre3\r\n  Depends: libssl1.1\r\n  Depends: libstdc++6\r\n  Depends: lua-lpeg\r\n  Depends: zlib1g\r\n  Suggests: ncat\r\n  Suggests: ndiff\r\n  Suggests: &lt;zenmap&gt;\r\n</code></pre>\r\n<h2 id=\"nato-phonetic-alphabet\">NATO Phonetic Alphabet</h2>\r\n<p>The NATO phonetic alphabet is a Spelling Alphabet; a set of words used instead of letters in oral communication (i.e. over the phone or military radio). Each word (\"code word\") stands for its initial letter (alphabetical \"symbol\"). The 26 code words in the NATO phonetic alphabet are assigned to the 26 letters of the English alphabet in alphabetical order as follows: Symbol, Code Word, Morse Code, Phonic.</p>\r\n<p>(pronunciation)</p>\r\n<pre><code>A, Alfa/Alpha, AL FAH.\r\nB, Bravo, BRAH VOH.\r\nC, Charlie, CHAR LEE.\r\nD, Delta, DELL TAH.\r\nE, Echo, ECK OH.\r\nF, Foxtrot, FOKS TROT.\r\nG, Golf, GOLF.\r\nH, Hotel, HOH TELL.\r\nI, India, IN DEE AH.\r\nJ, Juliett, JEW LEE ETT.\r\nK, Kilo, KEY LOH.\r\nL, Lima, LEE MAH.\r\nM, Mike, MIKE.\r\nN, November, NO VEMBER.\r\nO, Oscar, OSS CAH.\r\nP, Papa, PAH PAH.\r\nQ, Quebec, KEH BECK.\r\nR, Romeo, ROW ME OH.\r\nS, Sierra, SEE AIRRAH.\r\nT, Tango, TANG OH.\r\nU, Uniform, YOU NEE FORM.\r\nV, Victor, VIK TAH.\r\nW, Whiskey, WISS KEY.\r\nX, X-ray, ECKS RAY.\r\nY, Yankee, YANG KEY.\r\nZ, Zulu, ZOO LOO.\r\n</code></pre>\r\n<h1 id=\"hacker-public-radio\">Hacker Public Radio</h1>\r\n<p><strong>Correspondent:</strong> <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" title=\"Darwin works too.\">Some Guy On The Internet.</a> <strong>Host ID:</strong> 391 <strong>E-mail:</strong> <a href=\"Lyunpaw@gmail.com\" title=\"use  hpr391  as the email subject.\">Lyunpaw@gmail.com</a></p>\r\n<ul>\r\n<li>use <code>hpr391</code> as the subject for all emails. If not, junk filter.</li>\r\n</ul>\r\n<p><strong>license:</strong> <a href=\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\" title=\"CC BY-SA 4.0\">Creative Commons Attribution-ShareAlike 4.0 International</a></p>\r\n<p><strong>Shows:</strong></p>\r\n<ol>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3272\" title=\"hpr3272\">In GNU/Linux, there is no \"diversity\", we\'re all just data.</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3272.ogg\">https://hackerpublicradio.org/local/hpr3272.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3272.spx\">https://hackerpublicradio.org/local/hpr3272.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3272.mp3\">https://hackerpublicradio.org/local/hpr3272.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3273\" title=\"hpr3273\">Embrace Firefox</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3273.ogg\">https://hackerpublicradio.org/local/hpr3273.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3273.spx\">https://hackerpublicradio.org/local/hpr3273.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3273.mp3\">https://hackerpublicradio.org/local/hpr3273.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3282\" title=\"hpr3282\">HP Laptop with AMD Ryzen 3 Mobile with Radeon Graphics</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3282.ogg\">https://hackerpublicradio.org/local/hpr3282.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3282.spx\">https://hackerpublicradio.org/local/hpr3282.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3282.mp3\">https://hackerpublicradio.org/local/hpr3282.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3298\" title=\"hpr3298\">Poisoning The Well</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3298.ogg\">https://hackerpublicradio.org/local/hpr3298.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3298.spx\">https://hackerpublicradio.org/local/hpr3298.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3298.mp3\">https://hackerpublicradio.org/local/hpr3298.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3308\" title=\"hpr3308\">let\'s talk about Thunderbird</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3308.ogg\">https://hackerpublicradio.org/local/hpr3308.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3308.spx\">https://hackerpublicradio.org/local/hpr3308.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3308.mp3\">https://hackerpublicradio.org/local/hpr3308.mp3</a></li>\r\n</ul></li>\r\n</ol>\r\n<p><a rel=\"license\" href=\"https://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 work is licensed under a <a rel=\"license\" href=\"https://creativecommons.org/licenses/by-sa/4.0/\">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>\r\n',391,98,0,'CC-BY-SA','terminal, apt-get, apt-cache, .bashrc',0,0,1),
(3354,'2021-06-10','My Devices',1455,'I walk around my house and talk about any interesting Devices i have','N/A\r\n\r\n\r\n<p>\r\n<small>Added by Ken</small><br />\r\noperat0r and Son walk around the house talking about the devices that he has.\r\n</p>\r\n<ol>\r\n<li>Android meeting alarms</li>\r\n<li><a href=\"https://www.mozilla.org/en-US/firefox/new/\">Firefox</a></li>\r\n<li><a href=\"https://privacybadger.org/\">Privacy Badger</a></li>\r\n<li><a href=\"https://ublockorigin.com/\">UBlock Origin</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/eps.php?id=3321\">DNS66</a></li>\r\n<li><a href=\"https://voice.google.com/\">Google Voice</a></li>\r\n<li>CCTV Camera, to Zone Minder</li>\r\n<li><a href=\"https://pjreddie.com/darknet/\">DarkNet</a></li>\r\n<li><a href=\"https://kodi.tv/\">Kodi</a></li>\r\n<li><a href=\"https://sonarr.tv/\">sonarr</a></li>\r\n<li><a href=\"https://radarr.video/\">radarr</a></li>\r\n<li><a href=\"https://ombi.io/\">Ombi</a></li>\r\n<li><a href=\"https://www.plex.tv/\">Plex</a></li>\r\n<li><a href=\"https://www.accuweather.com/\">AccuWeather</a></li>\r\n<li><a href=\"https://blueteamlabs.online/\">Blue Team Labs</a></li>\r\n<li>Admin mode on bluethoot TV</li>\r\n<li>iroso ncf wireless bluetooth headset</li>\r\n<li><a href=\"https://www.amazon.com/Bluetooth-Receiver-Transmitter-Wireless-Headphones/dp/B00VJTIMIS\">Keedox V4.0 Bluetooth Music Receiver Transmitter</a></li>\r\n<li><a href=\"https://www.hunterindustries.com/\">Hunter Irrigation</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Infiniti_G-series_(Q40/Q60)\">Nissan Infiniti Q40</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Wii_U\">Nintendo Wii U</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Nintendo_Switch\">Nintendo Switch</a></li>\r\n<li><a href=\"https://gorillatough.com/\">Gorilla Glue</a></li>\r\n<li>Chargemaster 3000</li>\r\n<li>Get splitbox AC</li>\r\n<li><a href=\"https://steelseries.com/gaming-headsets\">Steel Series HeadSet</a></li>\r\n<li><a href=\"https://www.tindie.com/products/RobG/msp430-nixie-clock-kit/\">MSP430 Nixie Clock kit from RobG on Tindie</a></li>\r\n<li><a href=\"https://play.google.com/store/apps/details?id=co.brili.routines&hl=en_US&gl=US\">Brili Routines - Visual Timer for Kids</a></li>\r\n<li><a href=\"https://www.sonicalert.com/SBB500SS-Alarm-Clock\">Sonic Bomb Alarm Clock</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Chromecast\">Chromecast</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Pulse_oximetry\">Pulse oximetry</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Transcutaneous_electrical_nerve_stimulation\">Transcutaneous electrical nerve stimulation (TENS)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Roomba\">Roomba</a></li>\r\n<li><a href=\"https://www.zircon.com/categories/water-detectors/\">Zircom Wireless Water Detectors</a></li>\r\n</ol>',36,0,0,'CC-BY-SA','devices',0,0,1),
(3357,'2021-06-15','My terminal journey, part 02.',1890,'Becoming terminal friendly.','<h2 id=\"discovering-the-packages-vertical-lists\">Discovering the packages; vertical lists.</h2>\r\n<p><a href=\"https://en.wikipedia.org/wiki/APT_(software)\" title=\"wiki\">apt package manager</a></p>\r\n<ul>\r\n<li><p><strong>First Command:</strong> <code>sudo apt list --upgradeable</code></p></li>\r\n<li><p><strong>Command Breakdown:</strong></p>\r\n<ul>\r\n<li><code>sudo</code> is <strong>root privileges</strong> (to become admin for a single command).</li>\r\n<li><code>apt</code> is the Command Name.</li>\r\n<li><code>list</code> to display a list of packages satisfying certain <strong>criteria</strong>.</li>\r\n<li><code>--upgradeable</code> the <strong>criteria</strong></li>\r\n</ul></li>\r\n<li><p>Command Standard Output: (abridged)</p>\r\n<pre><code>Listing...\r\nalsa-ucm-conf/focal-updates,focal-updates 1.2.2-1ubuntu0.7 all [upgradable from: 1.2.2-1ubuntu0.6]\r\nalsa-utils/focal-updates 1.2.2-1ubuntu2.1 amd64 [upgradable from: 1.2.2-1ubuntu2]\r\nbluetooth/focal-updates,focal-updates 5.53-0ubuntu3.1 all [upgradable from: 5.53-0ubuntu3]\r\ngir1.2-webkit2-4.0/focal-updates,focal-security 2.32.0-0ubuntu0.20.04.1 amd64 [upgradable from: 2.30.6-0ubuntu0.20.04.1]\r\ngoogle-chrome-stable/stable 90.0.4430.212-1 amd64 [upgradable from: 90.0.4430.93-1]\r\niio-sensor-proxy/focal-updates 2.8-1ubuntu1 amd64 [upgradable from: 2.8-1]\r\nqemu-system-x86/focal-updates 1:4.2-3ubuntu6.16 amd64 [upgradable from: 1:4.2-3ubuntu6.15]\r\nqemu-utils/focal-updates 1:4.2-3ubuntu6.16 amd64 [upgradable from: 1:4.2-3ubuntu6.15]\r\nsamba-common-bin/focal-updates,focal-security 2:4.11.6+dfsg-0ubuntu1.8 amd64 [upgradable from:     2:4.11.6+dfsg-0ubuntu1.6]\r\n</code></pre></li>\r\n</ul>\r\n<hr />\r\n<h2 id=\"discovering-the-packages-horizontal-list\">Discovering the packages; horizontal list.</h2>\r\n<p><a href=\"https://linux.die.net/man/8/apt-get\" title=\"apt-get manpage\">apt-get package manager</a></p>\r\n<ul>\r\n<li><p><strong>Second Command:</strong> <code>sudo apt-get -u upgrade --assume-no</code></p></li>\r\n<li><p><strong>Command Breakdown:</strong></p>\r\n<ul>\r\n<li><code>sudo</code> is <strong>root privileges</strong> (to become admin for a single command).</li>\r\n<li><code>apt-get</code> is the Command Name.</li>\r\n<li><code>-u</code> or <code>--show-upgraded</code> list of packages that are to be upgraded; must be used with <code>upgrade</code>.</li>\r\n<li><code>upgrade</code> is used to install the newest versions of all packages currently installed.</li>\r\n<li><code>--assume-no</code> Automatically answers \"No\" when the command asks, “Do you want to continue? [Y/n]”. (Do you want to upgrade at this moment? No. You get it).</li>\r\n</ul></li>\r\n<li><p><strong>Note:</strong> Linux Mint 20 manpage for <code>apt-get</code> does not include the <code>-u</code> option or description.</p>\r\n<pre><code>-u, --show-upgraded\r\nShow upgraded packages. Print out a list of all packages that are to be upgraded.\r\n</code></pre></li>\r\n<li><p>Command Standard Output:</p>\r\n<pre><code>Reading package lists...\r\nBuilding dependency tree...\r\nReading state information...\r\nCalculating upgrade...\r\nThe following packages were automatically installed and are no longer required:\r\n  libllvm10 libllvm10:i386 libnvidia-common-450 libnvidia-compute-455:i386\r\n  libnvidia-decode-455:i386 libnvidia-encode-455:i386 libnvidia-fbc1-455:i386\r\n  libnvidia-gl-455:i386 libnvidia-ifr1-455:i386 nvidia-kernel-common-455\r\n  nvidia-kernel-source-455 nvidia-utils-455 xserver-xorg-video-nvidia-455\r\nUse &#39;sudo apt autoremove&#39; to remove them.\r\nThe following packages have been kept back:\r\n  libnvidia-common-450 libnvidia-common-460 linux-generic\r\n  linux-headers-generic linux-image-generic\r\nThe following packages will be upgraded:\r\n  alsa-ucm-conf alsa-utils bluetooth bluez bluez-cups bluez-obexd firefox\r\n  firefox-locale-en flatpak gir1.2-flatpak-1.0 gir1.2-javascriptcoregtk-4.0\r\n  gir1.2-webkit2-4.0 google-chrome-stable iio-sensor-proxy libasound2\r\n  libasound2-data libatopology2 libbluetooth3 libexiv2-27 libflatpak0\r\n  libjavascriptcoregtk-4.0-18 liblightdm-gobject-1-0 libmysqlclient21\r\n  libnetplan0 libsmbclient libvirt-clients libvirt-daemon\r\n  libvirt-daemon-driver-qemu libvirt-daemon-driver-storage-rbd\r\n  libvirt-daemon-system libvirt-daemon-system-systemd libvirt0 libwacom-bin\r\n  libwacom-common libwacom2 libwbclient0 libwebkit2gtk-4.0-37 libxmlb1 lightdm\r\n  linux-firmware linux-libc-dev netplan.io openvpn python3-apport\r\n  python3-problem-report python3-samba python3-yaml qemu-block-extra qemu-kvm\r\n  qemu-system-common qemu-system-data qemu-system-gui qemu-system-x86\r\n  qemu-utils samba-common samba-common-bin samba-libs smbclient thermald\r\n  xul-ext-lightning\r\n60 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.\r\nNeed to get 295 MB of archives.\r\nAfter this operation, 4,023 kB of additional disk space will be used.\r\nDo you want to continue? [Y/n] N\r\nAbort.\r\n</code></pre></li>\r\n</ul>\r\n<hr />\r\n<h2 id=\"discovering-the-packages-colums--rows\">Discovering the packages; colums &amp; rows.</h2>\r\n<p><a href=\"https://linux.die.net/man/1/dpkg-query\" title=\"dpkg\">dpkg-query</a></p>\r\n<ul>\r\n<li><p><strong>Third Command:</strong> <code>dpkg-query -l</code></p></li>\r\n<li><p><strong>Command Breakdown:</strong></p>\r\n<ul>\r\n<li><code>dpkg-query</code> is the Command Name.</li>\r\n<li><code>-l</code> or <code>--list</code> list all installed packages on your system.</li>\r\n</ul></li>\r\n<li><p><strong>Fourth Command:</strong> <code>dpkg-query -L add-apt-key</code></p></li>\r\n<li><p><strong>Command Breakdown:</strong></p>\r\n<ul>\r\n<li><code>dpkg-query</code> is the Command Name.</li>\r\n<li><code>-L</code> or <code>--listfiles</code> list specific package, <strong>add-apt-key</strong> in this example, installed on your system.</li>\r\n</ul></li>\r\n<li><p>Command Standard Output: (abridged)</p>\r\n<ul>\r\n<li><code>dpkg-query -l</code> all installed packages.\r\n<pre><code>Desired=Unknown/Install/Remove/Purge/Hold\r\n| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend\r\n|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)\r\n||/ Name                                              Version                               Architecture Description\r\n+++-=================================================-=====================================-============-======================================================================================================\r\nii  accountsservice                                   0.6.55-0ubuntu12~20.04.4              amd64        query and manipulate user account information\r\nii  acl                                               2.2.53-6                              amd64        access control list - utilities\r\nii  acpi-support                                      0.143                                 amd64        scripts for handling many ACPI events\r\nii  acpid                                             1:2.0.32-1ubuntu1                     amd64        Advanced Configuration and Power Interface event daemon\r\nii  add-apt-key                                       1.0-0.5                               all          Command line tool to add GPG keys to the APT keyring\r\nii  adduser                                           3.118ubuntu2                          all          add and remove users and groups\r\nii  adwaita-icon-theme                                3.36.1-2ubuntu0.20.04.2               all          default icon theme of GNOME (small subset)\r\nii  adwaita-icon-theme-full                           3.36.1-2ubuntu0.20.04.2               all          default icon theme of GNOME\r\n</code></pre></li>\r\n<li><code>dpkg-query -L add-apt-key</code> single package.\r\n<pre><code>/.\r\n/usr\r\n/usr/share\r\n/usr/share/doc\r\n/usr/share/doc/add-apt-key\r\n/usr/share/doc/add-apt-key/README\r\n/usr/share/doc/add-apt-key/AUTHORS\r\n/usr/share/doc/add-apt-key/README.Debian\r\n/usr/share/doc/add-apt-key/copyright\r\n/usr/share/doc/add-apt-key/changelog.Debian.gz\r\n/usr/share/man\r\n/usr/share/man/man8\r\n/usr/share/man/man8/add-apt-key.8.gz\r\n/usr/sbin\r\n/usr/sbin/add-apt-key\r\n/etc\r\n/etc/default\r\n/etc/default/add-apt-key\r\n</code></pre></li>\r\n</ul></li>\r\n</ul>\r\n<hr />\r\n<h2 id=\"marking-the-packages-hold\">Marking the packages; hold.</h2>\r\n<p><a href=\"https://manpages.debian.org/stretch/apt/apt-mark.8.en.html\" title=\"apt-mark\">apt-mark</a></p>\r\n<ul>\r\n<li><p><strong>Fifth &amp; Sixth Commands:</strong> <code>sudo apt-mark hold google-chrome-stable; sudo apt-mark showhold</code></p></li>\r\n<li><p><strong>Command Breakdown:</strong></p>\r\n<ul>\r\n<li><code>sudo</code> is <strong>root privileges</strong> (to become admin for a single command).</li>\r\n<li><code>apt-mark</code> is the Command Name.</li>\r\n<li><code>hold</code> will <strong>prevent</strong> the package from being automatically installed, upgraded or removed.</li>\r\n<li><code>google-chrome-stable</code> is the package effected by hold.</li>\r\n<li><code>;</code> is the end of a command; command seperation.</li>\r\n<li><code>sudo</code> is <strong>root privileges</strong> (to become admin for a single command).</li>\r\n<li><code>apt-mark</code> is the Command Name.</li>\r\n<li><code>showhold</code> will print a list of packages effected by <code>hold</code>.</li>\r\n</ul></li>\r\n<li><p>Command Standard Output: (abridged)</p>\r\n<pre><code>google-chrome-stable set on hold.\r\n</code></pre></li>\r\n</ul>\r\n<hr />\r\n<h2 id=\"marking-the-packages-unhold\">Marking the packages; unhold.</h2>\r\n<p><a href=\"https://manpages.debian.org/stretch/apt/apt-mark.8.en.html\" title=\"apt-mark\">apt-mark</a></p>\r\n<ul>\r\n<li><p><strong>Seventh Command:</strong> <code>sudo apt-mark unhold google-chrome-stable</code></p></li>\r\n<li><p><strong>Command Breakdown:</strong></p>\r\n<ul>\r\n<li><code>sudo</code> is <strong>root privileges</strong> (to become admin for a single command).</li>\r\n<li><code>apt-mark</code> is the Command Name.</li>\r\n<li><code>unhold</code> will remove <code>hold</code>, allowing the package to be automatically installed, upgraded or removed.</li>\r\n<li><code>google-chrome-stable</code> is the package once effected by hold; no longer due to <code>unhold</code>.</li>\r\n</ul></li>\r\n<li><p><strong>Note:</strong> <code>showhold</code> will now print blank/nothing because packages are no longer effected by <code>hold</code>.</p></li>\r\n</ul>\r\n<hr />\r\n<h2 id=\"exporting-manpage-to-text-file\">Exporting Manpage to text file.</h2>\r\n<ul>\r\n<li><strong>Bonus Command:</strong> it\'s a big one.</li>\r\n</ul>\r\n<pre><code>touch apt-get01.txt; date &gt; ~/Documents/apt-get01.txt; echo -e &quot;\\n&quot; &gt;&gt; ~/Documents/apt-get01.txt; apt-get --version &gt;&gt; ~/Documents/apt-get01.txt; echo -e &quot;\\n\\napt-get --help\\n\\n&quot; &gt;&gt; ~/Documents/apt-get01.txt; apt-get --help &gt;&gt; ~/Documents/apt-get01.txt; echo -e &quot;\\n\\nman apt-get\\n\\n&quot; &gt;&gt; ~/Documents/apt-get01.txt; man apt-get &gt;&gt; ~/Documents/apt-get01.txt; echo -e &quot;\\n\\nCompleted.&quot;;\r\n</code></pre>\r\n<ul>\r\n<li><strong>Command Breakdown:</strong>\r\n<ul>\r\n<li><p><code>touch apt-get01.txt;</code> this command will create the \"apt-get01.txt\" file.</p></li>\r\n<li><p><code>date &gt; ~/Documents/apt-get01.txt;</code> this command stores the date and time with the \"apt-get01.txt\" file.</p></li>\r\n<li><p><code>echo -e \"\\n\" &gt;&gt; ~/Documents/apt-get01.txt;</code> this command gives us a blank line or new line within the \"apt-get01.txt\" file.</p></li>\r\n<li><p><code>apt-get --version &gt;&gt; ~/Documents/apt-get01.txt;</code> this command adds the version of <code>apt-get</code> we have installed to the \"apt-get01.txt\" file.</p></li>\r\n<li><p><code>echo -e \"\\n\\napt-get --help\\n\\n\" &gt;&gt; ~/Documents/apt-get01.txt;</code> this command adds to new lines or blank lines to the file then, adds the label \"apt-get -- help\" to the \"apt-get01.txt\" file.</p></li>\r\n<li><p><code>apt-get --help &gt;&gt; ~/Documents/apt-get01.txt;</code> this command adds the standard output of <code>apt-get --help</code> to the \"apt-get01.txt\" file.</p></li>\r\n<li><p><code>echo -e \"\\n\\nman apt-get\\n\\n\" &gt;&gt; ~/Documents/apt-get01.txt;</code> intentionally left blank.</p></li>\r\n<li><p><code>man apt-get &gt;&gt; ~/Documents/apt-get01.txt;</code> intentionally left blank.</p></li>\r\n<li><p><code>echo -e \"\\n\\nCompleted.\";</code> intentionally left blank.</p></li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"nato-phonetic-alphabet\">NATO Phonetic Alphabet</h2>\r\n<p>The NATO phonetic alphabet is a Spelling Alphabet; a set of words used instead of letters in oral communication (i.e. over the phone or military radio). Each word (\"code word\") stands for its initial letter (alphabetical \"symbol\"). The 26 code words in the NATO phonetic alphabet are assigned to the 26 letters of the English alphabet in alphabetical order as follows: Symbol, Code Word, Morse Code, Phonic.</p>\r\n<p>(pronunciation)</p>\r\n<pre><code>A, Alfa/Alpha, AL FAH.\r\nB, Bravo, BRAH VOH.\r\nC, Charlie, CHAR LEE.\r\nD, Delta, DELL TAH.\r\nE, Echo, ECK OH.\r\nF, Foxtrot, FOKS TROT.\r\nG, Golf, GOLF.\r\nH, Hotel, HOH TELL.\r\nI, India, IN DEE AH.\r\nJ, Juliett, JEW LEE ETT.\r\nK, Kilo, KEY LOH.\r\nL, Lima, LEE MAH.\r\nM, Mike, MIKE.\r\nN, November, NO VEMBER.\r\nO, Oscar, OSS CAH.\r\nP, Papa, PAH PAH.\r\nQ, Quebec, KEH BECK.\r\nR, Romeo, ROW ME OH.\r\nS, Sierra, SEE AIRRAH.\r\nT, Tango, TANG OH.\r\nU, Uniform, YOU NEE FORM.\r\nV, Victor, VIK TAH.\r\nW, Whiskey, WISS KEY.\r\nX, X-ray, ECKS RAY.\r\nY, Yankee, YANG KEY.\r\nZ, Zulu, ZOO LOO.\r\n</code></pre>\r\n<h1 id=\"hacker-public-radio\">Hacker Public Radio</h1>\r\n<p><strong>Correspondent:</strong> <a href=\"https://hackerpublicradio.org/correspondents/0391.html\" title=\"Darwin works too.\">Some Guy On The Internet.</a> <strong>Host ID:</strong> 391 <strong>E-mail:</strong> <a href=\"Lyunpaw@gmail.com\" title=\"use  hpr391  as the email subject.\">Lyunpaw@gmail.com</a></p>\r\n<ul>\r\n<li>use <code>hpr391</code> as the subject for all emails. If not, junk filter.</li>\r\n</ul>\r\n<p><strong>license:</strong> <a href=\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\" title=\"CC BY-SA 4.0\">Creative Commons Attribution-ShareAlike 4.0 International</a></p>\r\n<p><strong>Shows:</strong></p>\r\n<ol>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3272\" title=\"hpr3272\">In GNU/Linux, there is no \"diversity\", we\'re all just data.</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3272.ogg\">https://hackerpublicradio.org/local/hpr3272.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3272.spx\">https://hackerpublicradio.org/local/hpr3272.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3272.mp3\">https://hackerpublicradio.org/local/hpr3272.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3273\" title=\"hpr3273\">Embrace Firefox</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3273.ogg\">https://hackerpublicradio.org/local/hpr3273.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3273.spx\">https://hackerpublicradio.org/local/hpr3273.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3273.mp3\">https://hackerpublicradio.org/local/hpr3273.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3282\" title=\"hpr3282\">HP Laptop with AMD Ryzen 3 Mobile with Radeon Graphics</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3282.ogg\">https://hackerpublicradio.org/local/hpr3282.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3282.spx\">https://hackerpublicradio.org/local/hpr3282.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3282.mp3\">https://hackerpublicradio.org/local/hpr3282.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3298\" title=\"hpr3298\">Poisoning The Well</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3298.ogg\">https://hackerpublicradio.org/local/hpr3298.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3298.spx\">https://hackerpublicradio.org/local/hpr3298.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3298.mp3\">https://hackerpublicradio.org/local/hpr3298.mp3</a></li>\r\n</ul></li>\r\n<li><p><a href=\"https://hackerpublicradio.org/eps.php?id=3308\" title=\"hpr3308\">let\'s talk about Thunderbird</a></p>\r\n<ul>\r\n<li>ogg: <a href=\"https://hackerpublicradio.org/local/hpr3308.ogg\">https://hackerpublicradio.org/local/hpr3308.ogg</a></li>\r\n<li>spx: <a href=\"https://hackerpublicradio.org/local/hpr3308.spx\">https://hackerpublicradio.org/local/hpr3308.spx</a></li>\r\n<li>mp3: <a href=\"https://hackerpublicradio.org/local/hpr3308.mp3\">https://hackerpublicradio.org/local/hpr3308.mp3</a></li>\r\n</ul></li>\r\n</ol>\r\n<p><a rel=\"license\" href=\"https://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 work is licensed under a <a rel=\"license\" href=\"https://creativecommons.org/licenses/by-sa/4.0/\">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>\r\n',391,98,0,'CC-BY-SA','terminal, apt-get, apt-cache, apt-mark, dpkg',0,0,1),
(3358,'2021-06-16','BlastEm! A wicked awesome Sega Genesis/Megadrive emulator',1320,'This is an interview with the author of BlastEm, a Sega Genesis/Megadrive emulator','<p>In this Hacker Public Radio we talk to Mike about his emulator, BlastEm.</p>\r\n<p>This is the official BlastEm url: <a href=\"https://www.retrodev.com/blastem/\" class=\"uri\">https://www.retrodev.com/blastem/</a></p>\r\n',115,0,0,'CC-BY-SA','genesis megadrive emulation',0,0,1),
(3355,'2021-06-11','Tiki Hell',761,'I talk about my thoughts on outdoor torches','<p>Don\'t buy Tiki anything...</p>\r\n',36,0,0,'CC-BY-SA','outdoor, tiki',0,0,1),
(3367,'2021-06-29','Making books with linux - part 1',3367,'A discussion about assembling books using simple tools commonly found in most linux distros.','<p>Andrew and Dave describe a common itch they have been scratching. Andrew talks through his approach to document creation in this episode and Dave will describe his in the next episode.</p>\r\n<p>Andrew was inspired by a simple and elegant approach to eBook creation by Jon Kulp, possibly from listening to <a href=\"https://hackerpublicradio.org/eps.php?id=1909\">HPR 1909</a> several years ago.</p>\r\n<p>In Andrew\'s approach, bash and python scripts assemble various text files into the book, inserting figures and tables using a simple home-brew tag system to generate reference numbers such as Figure 3.7 or Table 2.2. Such auto-numbering functionality is of course provided by many other document authoring systems, such as LaTeX, but the script also uses the tags to hunt down data in CSV files and convert them into the figures. In this way, nearly all information in the book can start off as text and then be processed into anything — prose, graphics, sound or even movies — that can be included with HTML. Also a clean separation between content and appearance is kept by using a CSS file.</p>\r\n<p>This is not WYSIWYG (what you see is what you get) but using the <em>entr</em> command to monitor file changes can allow auto-generation of the HTML and even a browser refresh (using a feature found in Midori and Falkon but not many other browsers).</p>\r\n<p>Dave describes how he achieves something similar to what Andrew has created by using <em>make</em> to co-ordinate the processing. The process of compiling the source text files into a final document does have some similarities with code compilation.</p>\r\n<p>Dave and Andrew discuss how useful their methods might be to others. Some of Andrew\'s scripts are too bespoke to his use for wider consumption but the figure processing code is available online as part of the content and code of his book <a href=\"https://github.com/mcnalu/howscotlandworks\">How Scotland Works</a>.</p>\r\n<p>Andrew describes the horror of the suggestion that a non-fiction book does not need an index which prompted him to create his simple code to generate an index from a PDF. This was also motivated by laziness and a reluctance to read his own writing for the umpteenth time. Andrew then describes how this code works. The code itself can be found <a href=\"https://github.com/mcnalu/howscotlandworks/tree/master/scripts/index\">here</a>.</p>\r\n<p>Dave brings up the issue of other formats such as epub which have no concept of pages, or at least do not insist on it natively.</p>\r\n<p>The discussion moves on to other tools for document and text processing that are relevant to the tasks involved such as pandoc, LaTex and ASCIIdoc. In particular, Dave mentions that the \"look\" of LaTeX is simpler to control these days, at least as compared to the 1990s!</p>\r\n',268,0,0,'CC-BY-SA','linux,books,ebooks,scripts',0,0,1),
(3359,'2021-06-17','Linux Inlaws S01E32: Politicians and artificial intelligence part 3',2830,'Part 3 of the miniseries on Deep Learning, politicians and other approaches to intelligence (or not)','<p>In part three of the 27.64 episodes long mini-series on artificial intelligences, machine and deep learning\r\nand other hipster topics around machines trying to imitate humans (marketing made us do these :-), our\r\ntwo heroes discuss domain-specific frameworks on top of (more generic) infrastructure like TensorFlow or PyTorch.\r\nAs usual, all will be revealed and no details be spared (apart from a very few) including how to\r\ntell animals apart from humans (a tricky feat as any journalist can tell you who\'s ever faced a\r\nstampeding horde of angry politicians!).</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Keras: <a href=\"https://keras.io\" target=_blank>https://keras.io</a></li>\r\n<li>Image recognition in Keras: <a href=\"https://keras.io/examples/vision/image_classification_from_scratch\" target=_blank>https://keras.io/examples/vision/image_classification_from_scratch</a></li>\r\n<li>Facial recognition using convolutional neural networks (CNN): <a href=\"https://www.sitepoint.com/keras-face-detection-recognition\" target=_blank>https://www.sitepoint.com/keras-face-detection-recognition</a></li>\r\n<li>PETA: <a href=\"https://www.peta.org\" target=_blank>https://www.peta.org</a></li>\r\n<li>User recognition based on mouse movements and deep learning: <a href=\"https://www.acta.sapientia.ro/acta-info/C12-1/info12-1-3.pdf\" target=_blank>https://www.acta.sapientia.ro/acta-info/C12-1/info12-1-3.pdf</a></li>\r\n<li>Comparison of deep learning software: <a href=\"https://en.wikipedia.org/wiki/Comparison_of_deep-learning_software\" target=_blank>https://en.wikipedia.org/wiki/Comparison_of_deep-learning_software</a></li>\r\n<li>Apache\'s mxnet: <a href=\"https://mxnet.apache.org/versions/1.8.0\" target=_blank>https://mxnet.apache.org/versions/1.8.0</a></li>\r\n<li>Classification with deep belief networks: <a href=\"https://www.ki.tu-berlin.de/fileadmin/fg135/publikationen/Hebbo_2013_CDB.pdf\" target=_blank>https://www.ki.tu-berlin.de/fileadmin/fg135/publikationen/Hebbo_2013_CDB.pdf</a></li>\r\n<li>scikit-learn: <a href=\"https://scikit-learn.org/stable\" target=_blank>https://scikit-learn.org/stable</a></li>\r\n<li>Life on Mars: <a href=\"https://www.bbc.co.uk/lifeonmars/index_non_flash.shtml\" target=_blank>https://www.bbc.co.uk/lifeonmars/index_non_flash.shtml</a></li>\r\n<li>Limitless: <a href=\"https://www.imdb.com/title/tt1219289/?ref_=fn_al_tt_1\" target=_blank>https://www.imdb.com/title/tt1219289/?ref_=fn_al_tt_1</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Keras, scitkit-learn, neural networks, Mars, Twix, Limitless, Life',0,0,1),
(3363,'2021-06-23','Electronics podcasts I listen to',319,'I go over the 4 electronics podcasts I am currently listening to.','<h2 id=\"electronics-podcasts\">Electronics podcasts</h2>\r\n<ol type=\"1\">\r\n<li><p>Hackaday podcast</p>\r\n<p>Hackaday Editors take a look at all of the interesting uses of technology that pop up on the internet each week. Topics cover a wide range like bending consumer electronics to your will, designing circuit boards, building robots, writing software, 3D printing interesting objects, and using machine tools. Get your fix of geeky goodness from new episodes every Friday morning.</p>\r\n<p>Ep 117: Chiptunes in an RCA Plug, an Arduino Floppy Drive, $50 CNC, and Wireless Switches</p>\r\n<p><a href=\"https://hackaday.libsyn.com/ep-117-chiptunes-in-an-rca-plug-an-arduino-floppy-drive-50-cnc-and-wireless-switches\" class=\"uri\">https://hackaday.libsyn.com/ep-117-chiptunes-in-an-rca-plug-an-arduino-floppy-drive-50-cnc-and-wireless-switches</a></p></li>\r\n<li><p>Embedded.fm</p>\r\n<p>Embedded.fm is a site dedicated to the many aspects of engineering. We talk about the how, why, and what of engineering, usually devices.</p>\r\n<p>The site includes a weekly audio show created and hosted by Elecia White and Christopher White. Our guests include makers, entrepreneurs, educators, and normal, traditional engineers. The show is a product of Logical Elegance, an embedded software consulting company.</p>\r\n<p>The site also includes a blog written by Elecia White, Christopher White, Andrei Chichak, and Chris Svec.</p>\r\n<p><a href=\"https://embedded.fm/about-us\" class=\"uri\">https://embedded.fm/about-us</a></p>\r\n<p>371: All Martian Things Considered</p>\r\n<p><a href=\"https://embedded.fm/episodes/371\" class=\"uri\">https://embedded.fm/episodes/371</a></p>\r\n<p>The best paper for learning more is from NASA’s JPL site:<br />\r\nThe Mars Science Laboratory Engineering Cameras<br />\r\n<a href=\"https://www-robotics.jpl.nasa.gov/publications/Mark_Maimone/fulltext.pdf\" class=\"uri\">https://www-robotics.jpl.nasa.gov/publications/Mark_Maimone/fulltext.pdf</a></p>\r\n<p>Mars rovers wiki<br />\r\n<a href=\"https://en.wikipedia.org/wiki/Mars_rover\" class=\"uri\">https://en.wikipedia.org/wiki/Mars_rover</a></p>\r\n<p>142: New and Improved Appendages</p>\r\n<p>Sarah is a kinetic artist and some of her projects include a robot army (built your own from parts printed out or purchased at robot-army.com) <a href=\"https://robot-army.com/\" class=\"uri\">https://robot-army.com/</a></p></li>\r\n<li><p>The Amp Hour Electronics Podcast</p>\r\n<p>Dave Jones from the EEVblog in Sydney (Australia), and Chris Gammell from Contextual Electronics in Chicago (USA) discuss the world of electronics design in an hour long(ish) weekly show, recorded “live” without editing or a mute button! We are also joined every other week by guests throughout the electronics industry.</p>\r\n<p>The Amp Hour is a non-scripted off-the-cuff format show that usually airs every Sunday evening US time (recorded earlier in the week). It is the worlds largest and most respected electronics oriented radio show. Discussions range from hobbyist electronics to the state of the electronics industry, components, circuit design, and general on and off-topic rants.</p>\r\n<p><a href=\"https://theamphour.com/about\" class=\"uri\">https://theamphour.com/about</a></p>\r\n<p><a href=\"https://theamphour.com/the-amp-hour-539-the-king-of-trash-with-big-clive\" class=\"uri\">https://theamphour.com/the-amp-hour-539-the-king-of-trash-with-big-clive</a></p>\r\n<p>Youtube channel: bigclivedotcom</p>\r\n<p><a href=\"https://www.youtube.com/user/bigclivedotcom\" class=\"uri\">https://www.youtube.com/user/bigclivedotcom</a></p></li>\r\n<li><p>The Contextual Electronics Podcast</p>\r\n<p>The CE Podcast is a video and audio podcast that posts twice per month. We discuss more than how electronics work and talk to our guests about why they are building them in the first place. we cover topics inside and outside the field of electronics and try to bring more context to the field.</p>\r\n<p>CEP012 – Mixed Media with Becky Stern</p>\r\n<p><a href=\"https://contextualelectronics.com/cep012-mixed-media-with-becky-stern\" class=\"uri\">https://contextualelectronics.com/cep012-mixed-media-with-becky-stern</a></p>\r\n<p>Becky is an artist and content producer who works electronics into projects using a wide variety of media and construction techniques. Becky also teaches a class on electronics at SVA in NYC. She is a product manager at Instructables.</p></li>\r\n</ol>\r\n',318,75,0,'CC-BY-SA','electronics, robots, space exploration, engineering',0,0,1),
(3362,'2021-06-22','Spam Bot Honey Pot: Eating your own dog food',1148,'Reviewing some stats and the accessibility by screen reader of this spam filter method.','<p>\r\nIn this episode, I revisit my spam bot honey pot method of spam detection for \r\nweb forms. The first part of the episode is a response to rtsn comment asking \r\nfor a follow up on how the method worked out. In the second part of the podcast \r\nI use the built-in screen reader of my Pop_OS system to review my test form and \r\nmy work form for audible accessibility and to check that the spam catching URL \r\nfield is not reveled by a screen reader.  \r\n</p>\r\n<p>\r\nFor my work site, I pushed the spam catcher to production on 16 February 2021. \r\nThe total submitted form messages from that day until today, 29 May 2021, is 661.\r\nOf the total submitted, the method identified 527 spam messages, and passed \r\nalong 134 messages. Of those 134, 38 messages were uncaught spam--while the \r\nremaining 96 messages were valid inquiries. Overall, it seems to be doing a \r\ngood job. At one point, I thought about closing down the form, but the data \r\ndoes show we are receiving enough valid messages to make it worth keeping around \r\nand this method makes finding the good messages much easier.\r\n</p>\r\n<p>\r\nDuring the second part of the podcast, I find using a screen reader, like any \r\ntool, takes some practice. It also reveals that making a form audibly accessible \r\ndoes take some care, and should be reviewed with a screen reader. My method \r\nfor hiding the honey pot URL field from the screen reader was effective, but my \r\noverall implementation to make it accessible needs more work.\r\n</p>',293,0,0,'CC-BY-SA','Spam,HTML,Forms,accessibility,screen reader',0,0,1),
(3369,'2021-07-01','Linux Inlaws S01E33: The Return of the Rust',3869,'A show with Steve Klabnik on corroded metal, hipster programming languages and the analogue world','<p>In this episode - aptly named \"The return of the Rust\" our two heroes host\r\na very special guest: no other than Steve Klabnik of Rust fame himself.\r\nNeedless to say, this hipster programming language which is on everbody\'s mind\r\nat the moment (apart maybe from a few lost souls still crying over spilled\r\ncoffee) plays a very important role in this show in addition to the newly\r\nfounded Rust Foundation hosting such eclectic members such as Microsoft,\r\nMozilla, Google and Facebook just to name a few looking after the language.</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Rust: <a href=\"https://www.rust-lang.org\" target=_blank>https://www.rust-lang.org</a></li>\r\n<li>Rust Foundation: <a href=\"https://foundation.rust-lang.org\" target=_blank>https://foundation.rust-lang.org</a></li>\r\n<li>Steve Klabnik: <a href=\"https://steveklabnik.com\" target=_blank>https://steveklabnik.com</a></li>\r\n<li>Ruby on Rails: <a href=\"https://rubyonrails.org\" target=_blank>https://rubyonrails.org</a></li>\r\n<li>PyOxidizer: <a href=\"https://github.com/indygreg/PyOxidizer\" target=_blank>https://github.com/indygreg/PyOxidizer</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>actix controversy: <a href=\"https://github.com/actix/actix-web/issues/289\" target=_blank>https://github.com/actix/actix-web/issues/289</a></li>\r\n<li>OpenSearch: <a href=\"https://aws.amazon.com/blogs/opensource/introducing-opensearch\" target=_blank>https://aws.amazon.com/blogs/opensource/introducing-opensearch</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','Rust, actix, unsafe code, bulleted lists, pubs, OpenSearch',0,0,1),
(3631,'2022-07-04','HPR Community News for June 2022',7033,'HPR Volunteers talk about shows released and comments posted in June 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=3608\" target=\"_blank\">3608</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-06-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3608\" target=\"_blank\">Battling with English - part 5</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=3609\" target=\"_blank\">3609</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-06-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3609\" target=\"_blank\">Linux Inlaws S01E57: Operating System Level Virtualisation and Martin\'s Faith</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3610\" target=\"_blank\">3610</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-06-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3610\" target=\"_blank\">DOS Wildcards; File Attributes</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=3611\" target=\"_blank\">3611</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-06-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3611\" target=\"_blank\">HPR Community News for May 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=3612\" target=\"_blank\">3612</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-06-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3612\" target=\"_blank\">Who is Evil Steve? Part 2</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=3613\" target=\"_blank\">3613</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-06-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3613\" target=\"_blank\">Man buys cheap Adirondack chair</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=3614\" target=\"_blank\">3614</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-06-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3614\" target=\"_blank\">Everything You Always Wanted to Know About PEX Part 02- The Joy of PEX - What is it and how is it us</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=3615\" target=\"_blank\">3615</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-06-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3615\" target=\"_blank\">I am a troll and I\'m trolling HPR, trolling HPR, trolling HPR.</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=3616\" target=\"_blank\">3616</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-06-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3616\" target=\"_blank\">Filling free Slots from the Reserve Queue</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=3617\" target=\"_blank\">3617</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-06-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3617\" target=\"_blank\">admin admin S01E05: To Do List - 2FA</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=3618\" target=\"_blank\">3618</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-06-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3618\" target=\"_blank\">The nnn terminal file 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=3619\" target=\"_blank\">3619</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-06-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3619\" target=\"_blank\">Linux Inlaws S01E58: Kubernetes and Friends and Sarah</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3620\" target=\"_blank\">3620</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-06-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3620\" target=\"_blank\">Photo storage, backups, and workflow</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=3621\" target=\"_blank\">3621</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-06-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3621\" target=\"_blank\">Watching YouTube in 2022</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=3622\" target=\"_blank\">3622</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-06-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3622\" target=\"_blank\">My Network Setup.</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=3623\" target=\"_blank\">3623</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-06-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3623\" target=\"_blank\">Internet Security - Child Edition</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=3624\" target=\"_blank\">3624</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-06-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3624\" target=\"_blank\">Everything You Always Wanted to Know About PEX Parts 3 & 4</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=3625\" target=\"_blank\">3625</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-06-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3625\" target=\"_blank\">Shell Tips and Snippets - Collaborative Effort</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0380.html\" target=\"_blank\">Carl</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3626\" target=\"_blank\">3626</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-06-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3626\" target=\"_blank\">The stuff Evil Steve doesn\'t want you to know S01E06: Use a Password Manager</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=3627\" target=\"_blank\">3627</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-06-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3627\" target=\"_blank\">Only Key Duo</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=3628\" target=\"_blank\">3628</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-06-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3628\" target=\"_blank\">Building a Mobile Computer Battlestation: Extended Power Supply</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=3629\" target=\"_blank\">3629</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-06-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3629\" target=\"_blank\">Linux Inlaws S01E59: The Show with Red Pandas Mosaic Killers and Metal Corrosion</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</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 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3531#comments\" target=\"_blank\">hpr3531</a></strong>\n(2022-02-14) \"<em>Barrier: Software KVM</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0196.html\" target=\"_blank\">Windigo</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3531#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2022-06-30:\n\"Excellent !\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3606#comments\" target=\"_blank\">hpr3606</a></strong>\n(2022-05-30) \"<em>Infinity is just a big number and other proofs</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3606#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2022-06-01:\n\"Not like me\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 23 comments on 10 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3608#comments\" target=\"_blank\">hpr3608</a></strong>\n(2022-06-01) \"<em>Battling with English - part 5</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=3608#1\" target=\"_blank\">Comment 1</a>:\nStache_AF on 2022-06-01:\n\"The Eggcorn That Gets Me\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3608#2\" target=\"_blank\">Comment 2</a>:\nWindigo on 2022-06-01:\n\"Eggcorns\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3608#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2022-06-01:\n\"Champing and chomping\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3608#4\" target=\"_blank\">Comment 4</a>:\nDave Morriss on 2022-06-01:\n\"A robot did it and ran away\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3609#comments\" target=\"_blank\">hpr3609</a></strong>\n(2022-06-02) \"<em>Linux Inlaws S01E57: Operating System Level Virtualisation and Martin\'s Faith</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3609#1\" target=\"_blank\">Comment 1</a>:\nMechatroniac on 2022-06-22:\n\"Unite Germany and Russia\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3613#comments\" target=\"_blank\">hpr3613</a></strong>\n(2022-06-08) \"<em>Man buys cheap Adirondack chair</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=3613#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-06-08:\n\"Adirondack chairs\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3613#2\" target=\"_blank\">Comment 2</a>:\ndnt on 2022-06-08:\n\"Re: Adirondack chairs\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3615#comments\" target=\"_blank\">hpr3615</a></strong>\n(2022-06-10) \"<em>I am a troll and I\'m trolling HPR, trolling HPR, trolling HPR.</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=3615#1\" target=\"_blank\">Comment 1</a>:\nWindigo on 2022-06-10:\n\"Disappointing\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3615#2\" target=\"_blank\">Comment 2</a>:\nFXB on 2022-06-12:\n\"A Troll is a Troll.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3615#3\" target=\"_blank\">Comment 3</a>:\nMechatroniac on 2022-06-13:\n\"fucking bullshit\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3617#comments\" target=\"_blank\">hpr3617</a></strong>\n(2022-06-14) \"<em>admin admin S01E05: To Do List - 2FA</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=3617#1\" target=\"_blank\">Comment 1</a>:\nStache_AF on 2022-06-14:\n\"Google Authenticator\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3617#2\" target=\"_blank\">Comment 2</a>:\nLurking Prion on 2022-06-15:\n\"Google Authenticator Improvements\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3617#3\" target=\"_blank\">Comment 3</a>:\nSome Guy On The Internet on 2022-06-18:\n\"I agree.\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3617#4\" target=\"_blank\">Comment 4</a>:\nLurkingPrion on 2022-06-22:\n\"No Security..?\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3617#5\" target=\"_blank\">Comment 5</a>:\none_of_spoons on 2022-06-26:\n\"Two factor authentication : \"andOTP\"\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3619#comments\" target=\"_blank\">hpr3619</a></strong>\n(2022-06-16) \"<em>Linux Inlaws S01E58: Kubernetes and Friends and Sarah</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3619#1\" target=\"_blank\">Comment 1</a>:\nSarah on 2022-06-22:\n\"Hello!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3620#comments\" target=\"_blank\">hpr3620</a></strong>\n(2022-06-17) \"<em>Photo storage, backups, and workflow</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=3620#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-06-18:\n\"Great Show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3620#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-06-18:\n\"Glad I could help\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3621#comments\" target=\"_blank\">hpr3621</a></strong>\n(2022-06-20) \"<em>Watching YouTube in 2022</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=3621#1\" target=\"_blank\">Comment 1</a>:\nMechatroniac on 2022-06-22:\n\"Youtube is no good anymore\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3621#2\" target=\"_blank\">Comment 2</a>:\nMechatroniac on 2022-06-23:\n\"Mr Teslonian\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3624#comments\" target=\"_blank\">hpr3624</a></strong>\n(2022-06-23) \"<em>Everything You Always Wanted to Know About PEX Parts 3 & 4</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3624#1\" target=\"_blank\">Comment 1</a>:\nb-yeezi on 2022-06-26:\n\"Unexpected relevance\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3625#comments\" target=\"_blank\">hpr3625</a></strong>\n(2022-06-24) \"<em>Shell Tips and Snippets - Collaborative Effort</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0380.html\" target=\"_blank\">Carl</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3625#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-06-25:\n\"shift\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3625#2\" target=\"_blank\">Comment 2</a>:\nCarl on 2022-06-27:\n\"Thanks\"</li></ul><br/>\n</li></ul>\n\n<h2>Mailing List discussions</h2>\n<p>\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the <a href=\"https://hackerpublicradio.org/maillist\"\ntarget=\"_blank\">Mail List</a> which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/\">Mailman</a>.\n</p>\n<p>The threaded discussions this month can be found here:</p>\n<a href=\"https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-June/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-June/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=\"publishing-code-for-the-hpr-site\">Publishing code for the HPR site</h3>\n<p>The question came up during the month - is the HPR site code <em>open source</em>, and if so where is it?</p>\n<h3 id=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on archive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to the Internet Archive there are other tasks to perform. We are reprocessing and re-uploading shows in the range 871 to 2429 as explained in the Community News show notes released in <a href=\"https://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">May 2022</a>. We are keeping a running total here to show progress:</p>\n<ul>\n<li>Re-uploads done so far: 431</li>\n<li>Shows remaining to be done: 1128</li>\n<li>Shows uploaded by last Community News recording: 271</li>\n<li>Shows added since last recording: 160</li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3651,'2022-08-01','HPR Community News for July 2022',2963,'HPR Volunteers talk about shows released and comments posted in July 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/0406.html\" target=\"_blank\">binrc</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0407.html\" target=\"_blank\">Celeste</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=3630\" target=\"_blank\">3630</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-07-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3630\" target=\"_blank\">Planning an RV Trip</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=3631\" target=\"_blank\">3631</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-07-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3631\" target=\"_blank\">HPR Community News for June 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=3632\" target=\"_blank\">3632</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-07-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3632\" target=\"_blank\">Intro to web scraping with Python</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=3633\" target=\"_blank\">3633</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-07-06</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3633\" target=\"_blank\">The collective history of RAID controller brands</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3634\" target=\"_blank\">3634</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-07-07</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3634\" target=\"_blank\">Everything You Always Wanted to Know About PEX Part 05 - PEX and the Single Installer</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=3635\" target=\"_blank\">3635</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-07-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3635\" target=\"_blank\">A short podcast on a nice tool called system-monitoring-center</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=3636\" target=\"_blank\">3636</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-07-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3636\" target=\"_blank\">The Importance of Data Reduction</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=3637\" target=\"_blank\">3637</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-07-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3637\" target=\"_blank\">HPR feed to Sqlite</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=3638\" target=\"_blank\">3638</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-07-13</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3638\" target=\"_blank\">Ken drops a bear on his android phone</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=3639\" target=\"_blank\">3639</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-07-14</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3639\" target=\"_blank\">Linux Inlaws S01E60: The Job Interview</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3640\" target=\"_blank\">3640</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-07-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3640\" target=\"_blank\">Expert DIR use</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=3641\" target=\"_blank\">3641</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-07-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3641\" target=\"_blank\">Turntable audio capture Part 2</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=3642\" target=\"_blank\">3642</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-07-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3642\" target=\"_blank\">Interview with a Hacker: Vitaliy</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=3643\" target=\"_blank\">3643</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-07-20</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3643\" target=\"_blank\">My computing history and the software I use</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=3644\" target=\"_blank\">3644</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-07-21</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3644\" target=\"_blank\">Pinball Machine Repair Tips</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=3645\" target=\"_blank\">3645</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-07-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3645\" target=\"_blank\">How to set up a small Linux Wireguard VPN</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=3646\" target=\"_blank\">3646</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-07-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3646\" target=\"_blank\">arm, slackware, forth oh my!</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0326.html\" target=\"_blank\">Brian in Ohio</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3647\" target=\"_blank\">3647</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-07-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3647\" target=\"_blank\">Weekend projects</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=3648\" target=\"_blank\">3648</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-07-27</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3648\" target=\"_blank\">A response to tomorrows show</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=3649\" target=\"_blank\">3649</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-07-28</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3649\" target=\"_blank\">Linux Inlaws S01E61: 20 years in review</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3650\" target=\"_blank\">3650</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-07-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3650\" target=\"_blank\">Major Destinations</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 18 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 2 comments on\n2 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3226#comments\" target=\"_blank\">hpr3226</a></strong>\n(2020-12-14) \"<em>Using taskwarrior to structurize your work</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0369.html\" target=\"_blank\">Jeroen Baten</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3226#3\" target=\"_blank\">Comment 3</a>:\ndnt on 2022-07-09:\n\"the urgency\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3627#comments\" target=\"_blank\">hpr3627</a></strong>\n(2022-06-28) \"<em>Only Key Duo</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3627#1\" target=\"_blank\">Comment 1</a>:\noperat0r on 2022-07-06:\n\"Installer Changed ...\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 16 comments on 9 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3630#comments\" target=\"_blank\">hpr3630</a></strong>\n(2022-07-01) \"<em>Planning an RV Trip</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=3630#1\" target=\"_blank\">Comment 1</a>:\nbrian-in-ohio on 2022-07-05:\n\"enjoyed the show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3630#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-07-06:\n\"Photos\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3632#comments\" target=\"_blank\">hpr3632</a></strong>\n(2022-07-05) \"<em>Intro to web scraping with Python</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=3632#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-07-08:\n\"Thank you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3634#comments\" target=\"_blank\">hpr3634</a></strong>\n(2022-07-07) \"<em>Everything You Always Wanted to Know About PEX Part 05 - PEX and the Single Installer</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0394.html\" target=\"_blank\">Trey</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3634#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-07-09:\n\"a hacker\'s plumbing system\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3637#comments\" target=\"_blank\">hpr3637</a></strong>\n(2022-07-12) \"<em>HPR feed to Sqlite</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><li><a href=\"https://hackerpublicradio.org/eps.php?id=3637#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-07-20:\n\"Daily Database Dump in SQL Format\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3642#comments\" target=\"_blank\">hpr3642</a></strong>\n(2022-07-19) \"<em>Interview with a Hacker: Vitaliy</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=3642#1\" target=\"_blank\">Comment 1</a>:\nKevin O&#39;Brien on 2022-07-20:\n\"Great show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3643#comments\" target=\"_blank\">hpr3643</a></strong>\n(2022-07-20) \"<em>My computing history and the software I use</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=3643#1\" target=\"_blank\">Comment 1</a>:\nArcher72 on 2022-07-08:\n\"First show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3643#2\" target=\"_blank\">Comment 2</a>:\nnorrist on 2022-07-20:\n\"Plan9\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3643#3\" target=\"_blank\">Comment 3</a>:\nDave Morriss on 2022-07-20:\n\"An excellent first show\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3643#4\" target=\"_blank\">Comment 4</a>:\nbrian-in-ohio on 2022-07-24:\n\"future show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3644#comments\" target=\"_blank\">hpr3644</a></strong>\n(2022-07-21) \"<em>Pinball Machine Repair Tips</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=3644#1\" target=\"_blank\">Comment 1</a>:\nArcher72 on 2022-07-16:\n\"Pinball machines and English\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3644#2\" target=\"_blank\">Comment 2</a>:\nTrey on 2022-07-21:\n\"Welcome!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3644#3\" target=\"_blank\">Comment 3</a>:\nbrian-in-ohio on 2022-07-24:\n\"soundscape\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3648#comments\" target=\"_blank\">hpr3648</a></strong>\n(2022-07-27) \"<em>A response to tomorrows show</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=3648#1\" target=\"_blank\">Comment 1</a>:\nLongTimeLurker on 2022-07-27:\n\"Known Unknowns\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3648#2\" target=\"_blank\">Comment 2</a>:\nE-/-y on 2022-07-28:\n\"Only the Interviews\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3649#comments\" target=\"_blank\">hpr3649</a></strong>\n(2022-07-28) \"<em>Linux Inlaws S01E61: 20 years in review</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3649#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-06-24:\n\"response show\"</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-July/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-July/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=\"olly-clark\">Olly Clark</h3>\n<p>The UK Tech community has been saddened to hear of the death of Oliver (Olly) Clark, a well known presence at OggCamp, Barcamp and Raspberry Pi meetings. He apparently died in November 2021 as a consequence of COVID-19. His family did not know who to contact in the wider community, so this news only became apparent recently.</p>\n<ul>\n<li>Twitter: <span class=\"citation\" data-cites=\"ollyclarkdotorg\">@ollyclarkdotorg</span> (<a href=\"https://twitter.com/ollyclarkdotorg\" class=\"uri\">https://twitter.com/ollyclarkdotorg</a>)</li>\n<li>Mastodon: <a href=\"https://mastodon.sdf.org/@ollyclarkdotorg\" class=\"uri\">https://mastodon.sdf.org/@ollyclarkdotorg</a></li>\n<li>Flickr: <a href=\"https://www.flickr.com/people/ollyclarkdotorg/\" class=\"uri\">https://www.flickr.com/people/ollyclarkdotorg/</a></li>\n<li>Web site: <a href=\"http://www.ollyclark.org/\" class=\"uri\">http://www.ollyclark.org/</a> (currently unavailable, but archived on the Wayback Machine at <a href=\"https://web.archive.org/web/20210801015127/https://www.ollyclark.org/\" class=\"uri\">https://web.archive.org/web/20210801015127/https://www.ollyclark.org/</a>)</li>\n</ul>\n<h3 id=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on archive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to the Internet Archive there are other tasks to perform. We are reprocessing and re-uploading shows in the range 871 to 2429 as explained in the Community News show notes released in <a href=\"http://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">May 2022</a>. We are keeping a running total here to show progress:</p>\n<ul>\n<li>Re-uploads done so far: 576</li>\n<li>Shows remaining to be done: 983</li>\n<li>Shows uploaded by last Community News recording: 431</li>\n<li>Shows added since last recording: 145</li>\n</ul>\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3540,'2022-02-25','HSV Components Layer Modes',1216,'More on Layer Modes in GIMP with the HSV Components Modes','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We continue with the HSV Components Modes, which brings us to yet another color model, in this case the Hue, Saturation, and Value model. We\'ve already looked at RGB, which is the model used for most broadcast and online uses, and the CMYK model which is used for printing. These are the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.24.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html</a></li>\r\n<li><a href=\"https://www.linuxtopia.org/online_books/graphics_tools/gimp_advanced_guide/gimp_guide_node55_004.html\" class=\"uri\">https://www.linuxtopia.org/online_books/graphics_tools/gimp_advanced_guide/gimp_guide_node55_004.html</a></li>\r\n<li><a href=\"https://www.youtube.com/watch?v=17Iivi0tmug&amp;t=1734s\" class=\"uri\">https://www.youtube.com/watch?v=17Iivi0tmug&amp;t=1734s</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/RGB_color_model\" class=\"uri\">https://en.wikipedia.org/wiki/RGB_color_model</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Subtractive_color\" class=\"uri\">https://en.wikipedia.org/wiki/Subtractive_color</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Color_model\" class=\"uri\">https://en.wikipedia.org/wiki/Color_model</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/HSL_and_HSV\" class=\"uri\">https://en.wikipedia.org/wiki/HSL_and_HSV</a></li>\r\n<li><a href=\"https://snappygoat.com/\" class=\"uri\">https://snappygoat.com/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/hsv-components-layer-modes/\" class=\"uri\">https://www.ahuka.com/gimp/hsv-components-layer-modes/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes, HSV Components Modes',0,0,1),
(3550,'2022-03-11','Format; Copy; Diskcopy; Xcopy',1202,'We continue our look at the old warhorse, DOS. This time it is Format and Copy commands','<p>This tutorial is mostly about working with floppy disks, or diskettes, though we also mention the formatting of hard drives, which generally required the use of a floppy drive and diskette to accomplish.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Floppy_disk\" class=\"uri\">https://en.wikipedia.org/wiki/Floppy_disk</a></li>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, Format, Copy, Diskcopy, Xcopy',0,0,1),
(3560,'2022-03-25','LCh Components Layer Modes',758,'More on Layer Modes in GIMP with the LCh Components Modes','<p>Layer Modes, sometimes called Blending Modes, allow you to combine layers in a variety of ways. We continue with the LCh Components Modes, which brings us to yet another color model, in this case the Hue, Saturation, and Value model. We\'ve already looked at RGB, which is the model used for most broadcast and online uses, and the CMYK model which is used for printing, and in the previous tutorial we looked at the HSV model. This wraps up our look at color models, and also concluded our look at Layer Modes (or Blending Modes). These are the Layer Modes available on the latest (at the time I write this) version of GIMP, 2.10.24.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html\" class=\"uri\">https://docs.gimp.org/2.10/en/gimp-concepts-layer-modes.html</a></li>\r\n<li><a href=\"https://ninedegreesbelow.com/photography/determine-image-tonality-and-palette-part-1.html\" class=\"uri\">https://ninedegreesbelow.com/photography/determine-image-tonality-and-palette-part-1.html</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/CIELAB_color_space\" class=\"uri\">https://en.wikipedia.org/wiki/CIELAB_color_space</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/CIELUV#Cylindrical_representation_.28CIELCH.29\" class=\"uri\">https://en.wikipedia.org/wiki/CIELUV#Cylindrical_representation_.28CIELCH.29</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/List_of_color_spaces_and_their_uses\" class=\"uri\">https://en.wikipedia.org/wiki/List_of_color_spaces_and_their_uses</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Luminance\" class=\"uri\">https://en.wikipedia.org/wiki/Luminance</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/lch-components-layer-modes/\" class=\"uri\">https://www.ahuka.com/gimp/lch-components-layer-modes/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Layer Modes, Blending Modes, LCh Components Modes',0,0,1),
(3570,'2022-04-08','The Filesystem',1412,'We continue our look at the old warhorse, DOS. This time it is the file system.','<p>One key to working with DOS is to understand the file system. This is not just about organizing files, though that is certainly a part of it, but also about keeping your system running smoothly and recovering lost files in some circumstances.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/File_Allocation_Table\" class=\"uri\">https://en.wikipedia.org/wiki/File_Allocation_Table</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Disk_sector\" class=\"uri\">https://en.wikipedia.org/wiki/Disk_sector</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Track_(disk_drive)\" class=\"uri\">https://en.wikipedia.org/wiki/Track_(disk_drive)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Data_cluster\" class=\"uri\">https://en.wikipedia.org/wiki/Data_cluster</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/File_system_fragmentation\" class=\"uri\">https://en.wikipedia.org/wiki/File_system_fragmentation</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Root_directory\" class=\"uri\">https://en.wikipedia.org/wiki/Root_directory</a></li>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-9-the-file-system/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-9-the-file-system/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, file system',0,0,1),
(3364,'2021-06-24','Part One - all the covid crap',99,'My new coffee pot, covid motivation','<p>So, I\'m currently listening to the \"Feedback on the Article\" show, and am feeling like I should contribute a show.</p>\r\n<p>A long time ago now, I bought a new coffee machine for home, on the basis that I was going to be working from home for a while, and I was really missing my daily hits of actual coffee. I drink maybe four or five cups a day, depending on how early I get into work. I do try to have all this coffee in the morning, and am pretty good at not having any after lunch.</p>\r\n<p>Now, I do need to recognise where I am, Australia, overall we\'ve had a pretty good response to covid, fatalities have been very low by world standards. Having said that, I live in the part of Australia that has had the largest number and by far, longest lockdowns. Our longest one was 112 days.</p>\r\n<p>I\'ve also travelled back home, and got caught in a lockdown in my home state of Queensland over Christmas.</p>\r\n<p>Eventually, the lockdowns ended, we were allowed go back to work, and I started using my home coffee machine less and less, and I lost motivation to do this show.</p>\r\n<p>Then, of course, we had another inevitable hotel quarantine leak, and that spread to Victoria, we\'re now looking at a breakout of around sixty cases and Victoria is back on lockdown so this is my fifth lockdown, and I\'m back to working from home, and once again, I\'m appreciating my new coffee pot, and once again I have motivation to do a story on it.</p>\r\n<p>What I really want to do is to disentangle the two topics, this episode will deal with all the covid stuff, the second episode will only deal with coffee.</p>\r\n<p>So this covid rant ends here, and now I need to start writing the script for the second part of the show, before lockdown ends..</p>\r\n',315,0,0,'CC-BY-SA','covid19,coffee',0,0,1),
(3365,'2021-06-25','Diablo 2 Portable and Modding',452,'I talk about Diablo 2 and modding','<p>\r\n<a href=\"https://en.wikipedia.org/wiki/Diablo_II\">Diablo II</a>\r\n</p>\r\n<p>\r\nDiablo II is an action role-playing hack-and-slash computer video game developed by Blizzard North and published by Blizzard Entertainment in 2000 for Microsoft Windows, Classic Mac OS, and macOS. The game, with its dark fantasy and horror themes, was conceptualized and designed by David Brevik and Erich Schaefer, who, with Max Schaefer, acted as project leads on the game. The producers were Matthew Householder and Bill Roper. The game was developed over a 3 year period, with a crunch time of 1.5 years long\r\n</p>\r\n\r\n<p>\r\nSearch for \"Registry patch  diablo 2\", \"borderless gaming diablo 2\"\r\n</p>\r\n\r\n<p>\r\n<a href=\"https://diablo-archive.fandom.com/wiki/PlugY\">PlugY</a> <br />\r\nPlugY is a mod whose primary purpose is to increase the stash size for Diablo II characters. Over the years it has grown to include numerous other useful functions, such as enabling Ladder Only Rune Words outside of the Battle.net Ladder, enabling the Uber quests outside of Battle.net and various other small tweaks and additions. PlugY is not a conversion of the original Diablo, and it doesn\'t alter gameplay by changing monster stats, skills, maps or items. \r\n</p>\r\n\r\n<p>\r\n<a href=\"https://www.median-xl.com/\">median xl</a><br />\r\nThe most popular Diablo II overhaul modification, Median XL is an action RPG with extensive endgame content, deep character customisation and challenging gameplay. It offers thousands of new items, new skills for all classes, and multiple improvements to the Diablo II engine.\r\n</p>',36,0,0,'CC-BY-SA','diablo 2,video games,gaming,modding,hacking,median xl,plug y',0,0,1),
(3375,'2021-07-09','Car ODB2 Fun and Fail',617,'I try to figure out ODB2 stuff again','<p>\r\n<a href=\"https://en.wikipedia.org/wiki/On-board_diagnostics\">On-board diagnostics (OBD)</a><br />\r\nFrom Wikipedia, the free encyclopedia<br />\r\nOn-board diagnostics (OBD) is an automotive term referring to a vehicle\'s self-diagnostic and reporting capability. OBD systems give the vehicle owner or repair technician access to the status of the various vehicle sub-systems. The amount of diagnostic information available via OBD has varied widely since its introduction in the early 1980s versions of on-board vehicle computers. Early versions of OBD would simply illuminate a malfunction indicator light or \"idiot light\" if a problem was detected but would not provide any information as to the nature of the problem. Modern OBD implementations use a standardized digital communications port to provide real-time data in addition to a standardized series of diagnostic trouble codes, or DTCs, which allow a person to rapidly identify and remedy malfunctions within the vehicle. \r\n</p>\r\n<p>\r\n<a href=\"https://play.google.com/store/apps/details?id=org.prowl.torque&hl=en_US&gl=US\">Torque Pro (OBD 2 and Car)</a><br />\r\nSee what your car is doing in realtime, get OBD fault codes, car performance, sensor data and more!\r\nTorque is a vehicle / car performance / diagnostics tool and scanner that uses an OBD II Bluetooth adapter to connect to your OBD2 engine management / ECU\r\n</p>\r\n<p>\r\n<a href=\"https://www.myg37.com/forums/engine-drivetrain-and-forced-induction/298338-vdc-stays-on-randomly.html\">Forum Thread</a>\r\n</p>\r\n<p>\r\n<a href=\"https://www.nicoclub.com/search#gsc.tab=0&gsc.q=infinity&gsc.sort=\">Search on NicoClub.com for Infinity Manuals</a>\r\n</p>\r\n',36,0,0,'CC-BY-SA','car,auto,odb2',0,0,1),
(3385,'2021-07-23','DIY Cat feeder!',824,'I talk about 3d printed cat feeders','<p>\r\nIn this episode operat0r builds a <a href=\"https://www.thingiverse.com/thing:27854\">cat feeder based on thingiverse.com</a>\r\n</p>',36,0,0,'CC-BY-SA','cats,3d printing,hacking,arduino',0,0,1),
(3395,'2021-08-06','Hacking Stories with Reacted: part 1',1979,'I talk about some old old old pentesting stories from days old!','<p>\r\nI talk about some old old old pentesting stories from days old!\r\n</p>',36,0,1,'CC-BY-SA','hackhacking,pentesting,red team,hacking storiesing',0,0,1),
(3405,'2021-08-20','Hacking Stories with Reacted: part 2',152,'I talk about some old old old pentesting stories from days old!','<p>\r\nI talk about some old old old pentesting stories from days old!\r\n</p>',36,0,0,'CC-BY-SA','hacking,pentesting,red team,hacking stories',0,0,1),
(3415,'2021-09-03','Hacking Stories with Reacted: part 3',836,'I talk about some old old old pentesting stories from days old!','<p>\r\nI talk about some old old old pentesting stories from days old!\r\n</p>',36,0,1,'CC-BY-SA','hacking,pentesting,red team,hacking stories',0,0,1),
(3425,'2021-09-17','Hacking Stories with Reacted: part 4',1055,'I talk about some old old old pentesting stories from days old!','<p>\r\nI talk about some old old old pentesting stories from days old!\r\n</p>',36,0,0,'CC-BY-SA','hacking,pentesting,red team,hacking stories',0,0,1),
(3435,'2021-10-01','Hacking Stories with Reacted: part 5',1060,'I talk about some old old old pentesting stories from days old!','<p>I talk about some old old old pentesting stories from days old!</p>',36,0,1,'CC-BY-SA','hacking,pentesting,red team,hacking stories',0,0,1),
(3376,'2021-07-12','Making books with Linux - part 2',2919,'Part 2 of a discussion about how two HPR hosts create books','<h2 id=\"hosts\">Hosts</h2>\r\n<ul>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0268.html\">Andrew Conway (<em>mcnalu</em>)</a></li>\r\n<li><a href=\"https://hackerpublicradio.org/correspondents/0225.html\">Dave Morriss</a></li>\r\n</ul>\r\n<h2 id=\"handling-incoming-hpr-shows\">Handling incoming HPR shows</h2>\r\n<ul>\r\n<li>Dave, with his <em>Janitor</em> hat on\r\n<ul>\r\n<li>Processes incoming notes, to generate HTML</li>\r\n<li>Plain text is turned to Markdown. Otherwise various Markdown flavours are acceptable, or an HTML5 fragment</li>\r\n<li>If images are included the Markdown can refer to them with URLs such as: <code>https://hackerpublicradio.org/eps/hprNNNN/name.jpg</code>\r\n<ul>\r\n<li>The <code>hprNNNN</code> element is a directory using the number you chose for your show.</li>\r\n<li>In the directory will be the images you sent.</li>\r\n<li>Other <em>assets</em> will go there too so you can refer to these in your notes as well.</li>\r\n<li>If you’re sending plain text, then markers such as <strong>&gt;&gt; Picture name.jpg here &lt;&lt;</strong> will let me make the appropriate Markdown.</li>\r\n</ul></li>\r\n<li>The directory also needs an <code>index.html</code> file, but my scripts will generate this if needed.</li>\r\n<li>I intend to document this soon.</li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"how-dave-makes-hpr-shownotes\">How Dave makes HPR shownotes</h2>\r\n<ul>\r\n<li>Uses scripts to manage show note generation</li>\r\n<li>Uses Markdown when writing the notes\r\n<ul>\r\n<li>Scripts generate note templates and a <code>Makefile</code></li>\r\n<li>Automation using <code>make</code></li>\r\n</ul></li>\r\n<li>Uses Template Toolkit features inside notes to allow extra features\r\n<ul>\r\n<li>Notes go through a pre-processor (a script with access to the show metadata)</li>\r\n<li>The end product is Markdown which is processed with Pandoc</li>\r\n</ul></li>\r\n<li>Template Toolkit (<em>TT<sup>2</sup></em>)\r\n<ul>\r\n<li>A Perl (and Python) tool kit for making templates</li>\r\n<li>Good for generating HTML, but can generate any text</li>\r\n</ul></li>\r\n<li><em>TT<sup>2</sup></em> macros can be used to display scripts in shows relating to the subject, and to run them and capture the output. This makes it certain that the script on display <strong>really</strong> generated the output shown!</li>\r\n<li>The <code>\'Falkon\'</code> browser (originally called <code>QupZilla</code>) is great for monitoring notes since it updates when the HTML changes.\r\n<ul>\r\n<li>Dave confused it with <code>Pale Moon</code> (a fork of <code>Firefox/Mozilla</code>) when talking about tab grouping features</li>\r\n</ul></li>\r\n<li>Should this (personalised) bundle of software be released to the world?\r\n<ul>\r\n<li>Probably yes, since the thoughts in it may be useful even if the code is not.</li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"consolidating-show-notes-into-a-book\">Consolidating show notes into a book</h2>\r\n<ul>\r\n<li>We had discussed the following topic a little in other contexts, and offline, but didn’t really look at it in this show. In brief, and for the record, the plans are:\r\n<ul>\r\n<li>There was a series on <code>\'sed\'</code>, the stream editor from the GNU project. It was called <em>“Introduction to sed”</em>, and consisted of 5 parts, which ran through 2016.</li>\r\n<li>Each episode had short and long notes as well as several examples.</li>\r\n<li>Work has begun on consolidating all of the long notes into a single document which will be released on the HPR site, in HTML and PDF formats. Perhaps ePub will be included if feasible.</li>\r\n<li>It’s seen as critical that an index be provided so that topics can be found easily. At the moment this is simplest to achieve with the PDF version, using Andrew’s index generator as discussed in part 1 of this pair of shows.</li>\r\n</ul></li>\r\n</ul>\r\n<h2 id=\"digression-about-experiences-in-uk-higher-education\">Digression about experiences in UK Higher Education</h2>\r\n<ul>\r\n<li>Change of funding through the 1980’s to the 2000’s, particularly in IT</li>\r\n<li>Moving from (often very clever) “home-brew” solutions to products from the <em>big</em> players like Microsoft and Oracle.</li>\r\n<li>The change of management style to something more like the industry methods of earlier times, many of which had been discarded.</li>\r\n<li>Perhaps there is scope for more discussion on this subject in another HPR show!</li>\r\n</ul>',225,0,1,'CC-BY-SA','Markdown,Pandoc,Template Toolkit,PDF',0,0,1),
(3373,'2021-07-07','HPR RPG Club reviews Starfinder',5175,'Starfinder is a sci-fi RPG using Dungeons & Dragons 3.5 rules','<p>\r\nYou can <a href=\"https://paizo.com/starfinder\" target=\"_blank\">purchase Starfinder directly from Paizo</a>, and you can usually find <em>Starfinder Society</em> play at your friendly local game store.\r\n</p>\r\n\r\n<p>\r\nThe alternate starship combat rules mentioned in this episode are available from <a href=\"https://www.drivethrurpg.com/product/353682/Simple-Starship-Combat?affiliate_id=845571\" target=\"_blank\">drivethrurpg.com</a> (warning: this is an affiliate link, but any purchases made through it provide Klaatu with store credit so he can buy more RPG books for future HPR Club reviews).\r\n</p>\r\n',78,95,1,'CC-BY-SA','rpg, cyberpunk, science fiction',0,0,1),
(3374,'2021-07-08','Why I love the MacBook Mid 2010',1431,'I talk about the upgrades I made to the machine and how it\'s benefited me since I got it','<p>The upgrades made to the machine were a 500 GB ssd, 16 GB of ram, and went from El Capitan to Catalina.</p>',297,0,0,'CC-BY-SA','technology,Apple,MacBook,laptop',0,0,1);
INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hostid`, `series`, `explicit`, `license`, `tags`, `version`, `downloads`, `valid`) VALUES (3676,'2022-09-05','HPR Community News for August 2022',9576,'HPR Volunteers talk about shows released and comments posted in August 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/0408.html\" target=\"_blank\">Stache_AF</a>, \n    <a href=\"https://hackerpublicradio.org/correspondents/0410.html\" target=\"_blank\">Hipernike</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=3651\" target=\"_blank\">3651</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-08-01</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3651\" target=\"_blank\">HPR Community News for July 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=3652\" target=\"_blank\">3652</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-08-02</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3652\" target=\"_blank\">Registered memory</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0129.html\" target=\"_blank\">JWP</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3653\" target=\"_blank\">3653</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-08-03</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3653\" target=\"_blank\">Hello HPR Community</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=3654\" target=\"_blank\">3654</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-08-04</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3654\" target=\"_blank\">Use the data in the Ogg feed to create a website.</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=3655\" target=\"_blank\">3655</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-08-05</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3655\" target=\"_blank\">BSD for Linux users</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=3656\" target=\"_blank\">3656</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-08-08</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3656\" target=\"_blank\">Importance of Small toy projects</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=3657\" target=\"_blank\">3657</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-08-09</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3657\" target=\"_blank\">Small time sysadmin</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=3658\" target=\"_blank\">3658</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-08-10</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3658\" target=\"_blank\">Linux Inlaws S01E62: HPR\'s inner workings</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3659\" target=\"_blank\">3659</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-08-11</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3659\" target=\"_blank\">Developing an HPR static site generator</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=3660\" target=\"_blank\">3660</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-08-12</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3660\" target=\"_blank\">BASIC</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=3661\" target=\"_blank\">3661</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-08-15</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3661\" target=\"_blank\">Ham Radio testing</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=3662\" target=\"_blank\">3662</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-08-16</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3662\" target=\"_blank\">Hacker Public Radio 2021 - 2022 New Years Show Part 1</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3663\" target=\"_blank\">3663</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-08-17</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3663\" target=\"_blank\">How I got into Tech</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=3664\" target=\"_blank\">3664</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-08-18</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3664\" target=\"_blank\">Secret hat conversations</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=3665\" target=\"_blank\">3665</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-08-19</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3665\" target=\"_blank\">UNIX Is Sublime</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=3666\" target=\"_blank\">3666</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-08-22</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3666\" target=\"_blank\">One Weird Trick</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=3667\" target=\"_blank\">3667</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-08-23</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3667\" target=\"_blank\">Hacker Public Radio 2021 - 2022 New Years Show Part 2</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3668\" target=\"_blank\">3668</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-08-24</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3668\" target=\"_blank\">Linux Inlaws S01E63: John Hawley on kernel dot org and other shenanigans</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3669\" target=\"_blank\">3669</a></strong></td>\n<td>Thu</td>\n<td class=\"shrink\">2022-08-25</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3669\" target=\"_blank\">My First Podcast: My Journey into the Computer World</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0410.html\" target=\"_blank\">Hipernike</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3670\" target=\"_blank\">3670</a></strong></td>\n<td>Fri</td>\n<td class=\"shrink\">2022-08-26</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3670\" target=\"_blank\">Changing Plans</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=3671\" target=\"_blank\">3671</a></strong></td>\n<td>Mon</td>\n<td class=\"shrink\">2022-08-29</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3671\" target=\"_blank\">Response to Episode 3655, \"BSD for Linux Users\"</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=3672\" target=\"_blank\">3672</a></strong></td>\n<td>Tue</td>\n<td class=\"shrink\">2022-08-30</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3672\" target=\"_blank\">Hacker Public Radio 2021 - 2022 New Years Show Part 3</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0269.html\" target=\"_blank\">Honkeymagoo</a></td>\n</tr>\n<tr>\n<td><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3673\" target=\"_blank\">3673</a></strong></td>\n<td>Wed</td>\n<td class=\"shrink\">2022-08-31</td>\n<td><a href=\"https://hackerpublicradio.org/eps.php?id=3673\" target=\"_blank\">Recording for Hacker Public Radio</a></td>\n<td><a href=\"https://hackerpublicradio.org/correspondents/0399.html\" target=\"_blank\">dnt</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 28 comments in total.</p>\n<h3>Past shows</h3>\n<p>There are 4 comments on\n4 previous shows:</p>\n<ul>\n<li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3606#comments\" target=\"_blank\">hpr3606</a></strong>\n(2022-05-30) \"<em>Infinity is just a big number and other proofs</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3606#2\" target=\"_blank\">Comment 2</a>:\nKen Fallon on 2022-08-12:\n\"You see\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3629#comments\" target=\"_blank\">hpr3629</a></strong>\n(2022-06-30) \"<em>Linux Inlaws S01E59: The Show with Red Pandas Mosaic Killers and Metal Corrosion</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3629#1\" target=\"_blank\">Comment 1</a>:\nAaron on 2022-08-12:\n\"Excellent interview\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3643#comments\" target=\"_blank\">hpr3643</a></strong>\n(2022-07-20) \"<em>My computing history and the software I use</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=3643#5\" target=\"_blank\">Comment 5</a>:\nShawn on 2022-08-08:\n\"Key bindings\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3648#comments\" target=\"_blank\">hpr3648</a></strong>\n(2022-07-27) \"<em>A response to tomorrows show</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>\n<li>\n<a href=\"https://hackerpublicradio.org/eps.php?id=3648#3\" target=\"_blank\">Comment 3</a>:\nfolky on 2022-08-10:\n\"Known Unknowns 2.0\"</li></ul><br/>\n</li></ul>\n<h3>This month\'s shows</h3>\n<p>There are 24 comments on 13 of this month\'s shows:</p>\n<ul><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3651#comments\" target=\"_blank\">hpr3651</a></strong>\n(2022-08-01) \"<em>HPR Community News for July 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=3651#1\" target=\"_blank\">Comment 1</a>:\nMike Ray on 2022-08-01:\n\"API\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3651#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-08-11:\n\"High Winds\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3655#comments\" target=\"_blank\">hpr3655</a></strong>\n(2022-08-05) \"<em>BSD for Linux users</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=3655#1\" target=\"_blank\">Comment 1</a>:\nClaudioM on 2022-08-05:\n\"Excellent Breakdown of BSD!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3655#2\" target=\"_blank\">Comment 2</a>:\nnorrist on 2022-08-05:\n\"why I use OpenBSD and FreeBSD\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3655#3\" target=\"_blank\">Comment 3</a>:\nPhoenix on 2022-08-07:\n\"Suggestion\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3655#4\" target=\"_blank\">Comment 4</a>:\nKevin O&#39;Brien on 2022-08-11:\n\"I loved the show\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3656#comments\" target=\"_blank\">hpr3656</a></strong>\n(2022-08-08) \"<em>Importance of Small toy projects</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><li><a href=\"https://hackerpublicradio.org/eps.php?id=3656#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-08-20:\n\"Love this show.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3657#comments\" target=\"_blank\">hpr3657</a></strong>\n(2022-08-09) \"<em>Small time sysadmin</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=3657#1\" target=\"_blank\">Comment 1</a>:\nLurking Prion on 2022-08-13:\n\"Thank you!\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3657#2\" target=\"_blank\">Comment 2</a>:\nKevin O&#39;Brien on 2022-08-13:\n\"Thank you\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3658#comments\" target=\"_blank\">hpr3658</a></strong>\n(2022-08-10) \"<em>Linux Inlaws S01E62: HPR\'s inner workings</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0384.html\" target=\"_blank\">monochromec</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3658#1\" target=\"_blank\">Comment 1</a>:\nTwinn on 2022-08-10:\n\"Painful\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3658#2\" target=\"_blank\">Comment 2</a>:\nSome Guy On The Internet on 2022-08-20:\n\"I have more listeners than stars in the Universe.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3659#comments\" target=\"_blank\">hpr3659</a></strong>\n(2022-08-11) \"<em>Developing an HPR static site generator</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=3659#1\" target=\"_blank\">Comment 1</a>:\nSome Guy On The Internet on 2022-08-20:\n\"More Magic.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3660#comments\" target=\"_blank\">hpr3660</a></strong>\n(2022-08-12) \"<em>BASIC</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=3660#1\" target=\"_blank\">Comment 1</a>:\nBeeza on 2022-08-18:\n\"BASIC lives on\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3660#2\" target=\"_blank\">Comment 2</a>:\nSome Guy On The Internet on 2022-08-20:\n\"Visual Basic 6.0 for the Win.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3661#comments\" target=\"_blank\">hpr3661</a></strong>\n(2022-08-15) \"<em>Ham Radio testing</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=3661#1\" target=\"_blank\">Comment 1</a>:\nArcher72 on 2022-07-24:\n\"Left out a show note\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3663#comments\" target=\"_blank\">hpr3663</a></strong>\n(2022-08-17) \"<em>How I got into Tech</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=3663#1\" target=\"_blank\">Comment 1</a>:\ndnt on 2022-08-31:\n\"Welcome!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3664#comments\" target=\"_blank\">hpr3664</a></strong>\n(2022-08-18) \"<em>Secret hat conversations</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=3664#1\" target=\"_blank\">Comment 1</a>:\none_of_spoons on 2022-08-25:\n\"serious talking\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3665#comments\" target=\"_blank\">hpr3665</a></strong>\n(2022-08-19) \"<em>UNIX Is Sublime</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=3665#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-08-12:\n\"File extensions are valid\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3665#2\" target=\"_blank\">Comment 2</a>:\nhipernike on 2022-08-19:\n\"Bind mount\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3665#3\" target=\"_blank\">Comment 3</a>:\nSome Guy On The Internet on 2022-08-20:\n\"I like file extensions\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3665#4\" target=\"_blank\">Comment 4</a>:\none-of-spoons on 2022-08-20:\n\"Free revision.\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3666#comments\" target=\"_blank\">hpr3666</a></strong>\n(2022-08-22) \"<em>One Weird Trick</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=3666#1\" target=\"_blank\">Comment 1</a>:\nKen Fallon on 2022-08-11:\n\"enthusiasm and willingness to learn\"</li><li><a href=\"https://hackerpublicradio.org/eps.php?id=3666#2\" target=\"_blank\">Comment 2</a>:\nLurking Prion on 2022-08-27:\n\"Rare Gems, indeed!\"</li></ul><br/>\n</li><li><strong><a href=\"https://hackerpublicradio.org/eps.php?id=3671#comments\" target=\"_blank\">hpr3671</a></strong>\n(2022-08-29) \"<em>Response to Episode 3655, \"BSD for Linux Users\"</em>\"\nby <a href=\"https://hackerpublicradio.org/correspondents/0152.html\" target=\"_blank\">Claudio Miranda</a>.</li>\n<li style=\"list-style: none; display: inline\">\n<ul><li><a href=\"https://hackerpublicradio.org/eps.php?id=3671#1\" target=\"_blank\">Comment 1</a>:\nalan86 on 2022-08-30:\n\"Feedback\"</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-August/thread.html\" target=\"_blank\">https://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2022-August/thread.html</a>\n\n\n<h2>Events Calendar</h2>\n<p>With the kind permission of <strong>LWN.net</strong> we are linking to\n<a href=\"https://lwn.net/Calendar/\" target=\"_blank\">The LWN.net Community Calendar</a>.</p>\n<p>Quoting the site:</p>\n<blockquote>This is the LWN.net community event calendar, where we track\nevents of interest to people using and developing Linux and free software.\nClicking on individual events will take you to the appropriate web\npage.</blockquote>\n\n<h2>Any other business</h2>\n<h3 id=\"git-repository-for-hpr-development\">Git repository for HPR development</h3>\n<p>For security reasons the <a href=\"https://gitea.io/en-us/\">Gitea</a> service running on <a href=\"https://repo.anhonesthost.net\" class=\"uri\">https://repo.anhonesthost.net</a> requires people to log in with an account to view the repositories.</p>\n<p>Is this acceptable or do we need to move the code to another location?</p>\n<h3 id=\"older-hpr-shows-on-archive.org-phase-2\">Older HPR shows on archive.org, phase 2</h3>\n<p>Now that all shows from number 1 to the latest have been uploaded to the Internet Archive there are other tasks to perform. We are reprocessing and re-uploading shows in the range 871 to 2429 as explained in the Community News show notes released in <a href=\"http://hackerpublicradio.org/eps.php?id=3586#older-hpr-shows-on-archive.org-phase-2\">May 2022</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</table>\n\n<p><small><small>Updated: 2022-09-03 18:34:16</small></small></p>\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1),
(3377,'2021-07-13','Chromebook support and more',994,'I\'ve run into disaster using my chrome book','<p>\r\nI\'ve made a special show covering the problem with chromebook support.<br />\r\nI cover the latest AntiX release.<br />\r\nI cover the latest NomadBSD release and I cover GUIX 1.3 and what I ended up using GUIX for.\r\n</p>',377,0,1,'CC-BY-SA','chromebook, AntiX, NomadBSD, GUIX, bath',0,0,1),
(3389,'2021-07-29','Tales of a Tagger',366,'Adventures and mishaps tagging past shows','<p><a href=\"https://hackerpublicradio.org/report_missing_tags.php\" class=\"uri\">https://hackerpublicradio.org/report_missing_tags.php</a></p>\r\n<h2 id=\"shows-without-a-summary-andor-tags\">Shows without a summary and/or tags</h2>\r\n<h3 id=\"page-generated-on-2021-06-11-at-204339-utc\">Page generated on 2021-06-11 at 20:43:39 UTC</h3>\r\n<h3 id=\"sort-order-id\">Sort order: id</h3>\r\n<h3 id=\"current-counts\">Current counts</h3>\r\n<ul>\r\n<li>323 shows without summaries</li>\r\n<li>306 shows without tags</li>\r\n<li>275 shows with neither summaries nor tags</li>\r\n<li>354 shows which need work</li>\r\n</ul>\r\n<h3 id=\"instructions\">Instructions</h3>\r\n<ol type=\"1\">\r\n<li>Find a show in the list below</li>\r\n<li>Check in the list which attributes are missing: summary and/or tags</li>\r\n<li>Click the show number or title to visit the show page</li>\r\n<li>Read the show notes and listen to the show to determine the missing information</li>\r\n<li>Submit your updates by email to tags at hackerpublicradio.org</li>\r\n</ol>\r\n<p>Please send simple ASCII email. No HTML please, and no multipart, encrypted or signed messages; the script can\'t handle them at the moment! (We are working on a solution to some of this though). Remember, the internals of an email are complex and the script isn\'t clever enough to deal with all the many possible formats. Please be gentle with it!</p>\r\n<p>Format the message as follows:</p>\r\n<pre><code>show:12345\r\nsummary:Using Linux at Christmas to make tomato soup in a sporran\r\ntags:linux,christmas,sporran,tomato soup\r\n\r\nshow: 12346\r\ntags: sausage,clothing,hairpiece</code></pre>\r\n<ul>\r\n<li>Start with the show:XXXX line (just the show number, no \'hpr\')</li>\r\n<li>If either the summary or the tags are already present on the show you can omit them from the group</li>\r\n<li>It\'s not possible to change existing summaries or tags by this route, only to add missing ones</li>\r\n<li>Ensure the summary text isn\'t longer than 100 characters</li>\r\n<li>The tags need to be separated by commas</li>\r\n<li>If you need to add a tag with a comma in it enclose the tag in double quotes</li>\r\n<li>The length of the tag list can\'t exceed 200 characters</li>\r\n<li>You can update more than one show per email if you want</li>\r\n<li>Blank lines between the groups of show/summary/tags lines are fine (as shown), as are comment lines beginning with \'#\'</li>\r\n</ul>\r\n<p>Updates will be processed with a script, which is run manually, and this page will be refreshed once the changes have been made. The timestamp above shows when it was last refreshed.</p>\r\n<ol type=\"1\">\r\n<li>Got carried away and broke the 100 character rule\r\n<ul>\r\n<li>can be checked in vim by hitting \'$\', goes to the last character in the line. Observe the character count at the bottom of the screen to verify this is less than 100.</li>\r\n</ul></li>\r\n<li>Went a little too far with tags, and went pretty far beyond the 200 character</li>\r\n<li>Found that these are reasonable limits, that if not followed, break the script</li>\r\n<li><strong>Don\'t be like me. Gently use these tools and they will serve you well.</strong></li>\r\n<li>Here are some of the tools I used when tagging was done right.\r\n<ol type=\"1\">\r\n<li>i3 window manager\r\n<ul>\r\n<li>Use mplayer and vim</li>\r\n</ul></li>\r\n<li>Mplayer\r\n<ul>\r\n<li><p>Play audio file faster without pitch increase</p></li>\r\n<li><p><a href=\"https://kenfallon.com/speeding-up-speech-with-mplayer\" class=\"uri\">https://kenfallon.com/speeding-up-speech-with-mplayer</a><br />\r\n{ key will slow down by 50% of the current rate<br />\r\n[ key will slow down by 10% of the current rate<br />\r\nBackspace will return the speed to normal<br />\r\n] key will speed up 10% of the current rate<br />\r\n} key will speed up by 50% of the current rate<br />\r\n9 key will decrease the volume<br />\r\n0 key will increase the volume<br />\r\n</p>\r\n<p><code>alias mplayer=\'mplayer -af scaletempo\'</code></p></li>\r\n</ul></li>\r\n<li>Android - Termux\r\n<ul>\r\n<li>Download a show via wget (Doing this on Firefox does not show progress bar)\r\n<ul>\r\n<li>PodcastAddict</li>\r\n</ul></li>\r\n<li><a href=\"https://podcastaddict.com/app\" class=\"uri\">https://podcastaddict.com/app</a></li>\r\n<li>bookmark tags\r\n<ul>\r\n<li>advantage is having timestamps where you tagged (for reference)</li>\r\n</ul></li>\r\n<li>export tags\r\n<ul>\r\n<li>Share to Pushbullet\r\n<ul>\r\n<li><a href=\"https://play.google.com/store/apps/details?id=com.pushbullet.android\" class=\"uri\">https://play.google.com/store/apps/details?id=com.pushbullet.android</a></li>\r\n<li>edit list of tags</li>\r\n</ul></li>\r\n</ul></li>\r\n</ul></li>\r\n</ol></li>\r\n<li>Enjoy old shows and lend a hand at the same time. :)</li>\r\n</ol>\r\n',318,0,0,'CC-BY-SA','tags,mplayer,Android,Termux,vim,i3 window manager',0,0,1),
(3388,'2021-07-28','Linux Inlaws S01E35: The Free Software Foundation Europe',4695,'An interview with Matthias Kirschner, Free Software Foundation Europe','<p>In this episode our aging heroes host the Free Software Foundation Europe (FSFE). Its president, Matthias\r\nKirschner talk about the past, the present and the future of free and open source software not only\r\nfrom an FSFE perspective. Never mind how he got into computers in the first place. Also, different opinions\r\nabout communism in general and its implementations (and the flaws of the first rounds of implementations)\r\nare touched upon. So historians, FLOSS users and enthusiasts, communists and free spirits: This is your episode!\r\nPlus: Ever wondered what the Towel Day is all about? Check out the second half of the episode! At our guest\'s\r\nrequest: Please note that this episode was recorded on June 1st 2021.</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>Free Software Foundation Europe: <a href=\"https://fsfe.org\" target=_blank>https://fsfe.org</a></li>\r\n<li>Matthias Kirschner: <a href=\"https://fsfe.org/about/people/kirschner/kirschner.en.html\" target=_blank>https://fsfe.org/about/people/kirschner/kirschner.en.html</a></li>\r\n<li>Free Software Foundation: <a href=\"https://fsf.org\" target=_blank>https://fsf.org</a></li>\r\n<li>Open Software Initiative (OSI): <a href=\"https://opensource.org\" target=_blank>https://opensource.org</a></li>\r\n<li>OSI definition of open source: <a href=\"https://opensource.org/osd\" target=_blank>https://opensource.org/osd</a></li>\r\n<li>Public Money Public Code campaign: <a href=\"https://publiccode.eu\" target=_blank>https://publiccode.eu</a></li>\r\n<li>Stallman controversy: <a href=\"https://arstechnica.com/tech-policy/2021/03/richard-stallman-returns-to-fsf-18-months-after-controversial-rape-comments\" target=_blank>https://arstechnica.com/tech-policy/2021/03/richard-stallman-returns-to-fsf-18-months-after-controversial-rape-comments</a></li>\r\n<li>Towel Day: <a href=\"https://en.wikipedia.org/wiki/Towel_Day\" target=_blank>https://en.wikipedia.org/wiki/Towel_Day</a></li>\r\n<li>FSFE podcast: <a href=\"https://fsfe.org/news/podcast.en.html\" target=_blank>https://fsfe.org/news/podcast.en.html</a></li>\r\n<li>Rutger Bregman, Human kind: <a href=\"https://www.amazon.de/Humankind-Hopeful-History-Rutger-Bregman/dp/1408898934\" target=_blank>https://www.amazon.de/Humankind-Hopeful-History-Rutger-Bregman/dp/1408898934</a></li>\r\n<li>Ashes to Ashes: <a href=\"https://www.bbc.co.uk/programmes/b00jhp3l\" target=_blank>https://www.bbc.co.uk/programmes/b00jhp3l</a></li>\r\n<li>UK met office: <a href=\"https://www.metoffice.gov.uk\" target=_blank>https://www.metoffice.gov.uk</a></li>\r\n<li>Karl Marx, A Critique of Political Economy: <a href=\"https://en.wikipedia.org/wiki/Das_Kapital\" target=_blank>https://en.wikipedia.org/wiki/Das_Kapital</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','FSFE, FSF, Stallman, Hackathon, Communism, Towel Day',0,0,1),
(3580,'2022-04-22','RAW images',939,'How to work with unprocessed images in RAW formats','<p>Most of the time we work with JPEG images because that is the most common format for digital images. They have the virtue of decent quality combined with smaller file size, and so won\'t fill up your storage quite as fast. But if you want the highest quality you have to work with unprocessed images, called RAW images. These are simply the actual data recorded by the camera sensors, and they give you some advantages, such as better correction of white balance. But GIMP does not open RAW images directly. But there are some work-arounds which we discuss in this tutorial.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Raw_image_format\" class=\"uri\">https://en.wikipedia.org/wiki/Raw_image_format</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Darktable\" class=\"uri\">https://en.wikipedia.org/wiki/Darktable</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Dcraw\" class=\"uri\">https://en.wikipedia.org/wiki/Dcraw</a></li>\r\n<li><a href=\"https://linux.die.net/man/1/dcraw\" class=\"uri\">https://linux.die.net/man/1/dcraw</a></li>\r\n<li><a href=\"https://krita.org/en/\" class=\"uri\">https://krita.org/en/</a></li>\r\n<li><a href=\"https://www.rawtherapee.com/\" class=\"uri\">https://www.rawtherapee.com/</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/DigiKam\" class=\"uri\">https://en.wikipedia.org/wiki/DigiKam</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/ImageMagick\" class=\"uri\">https://en.wikipedia.org/wiki/ImageMagick</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Shotwell_(software)\" class=\"uri\">https://en.wikipedia.org/wiki/Shotwell_(software)</a></li>\r\n<li><a href=\"https://en.wikipedia.org/wiki/Raw_image_format\" class=\"uri\">https://en.wikipedia.org/wiki/Raw_image_format</a></li>\r\n<li><a href=\"https://howtogimp.com/raw-photos-in-gimp/\" class=\"uri\">https://howtogimp.com/raw-photos-in-gimp/</a></li>\r\n<li><a href=\"https://www.signatureedits.com/free-raw-photos/\" class=\"uri\">https://www.signatureedits.com/free-raw-photos/</a></li>\r\n<li><a href=\"https://www.signatureedits.com/raw-files-license/\" class=\"uri\">https://www.signatureedits.com/raw-files-license/</a></li>\r\n<li><a href=\"https://www.darktable.org/install/\" class=\"uri\">https://www.darktable.org/install/</a></li>\r\n<li><a href=\"https://www.rawtherapee.com/downloads/\" class=\"uri\">https://www.rawtherapee.com/downloads/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/raw-images/\" class=\"uri\">https://www.ahuka.com/gimp/raw-images/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, RAW images, unprocessed images',0,0,1),
(3590,'2022-05-06','Directory Commands',872,'More on DOS. This time it is Directory commands.','<p>As we saw in the last lesson, DOS uses directories to organize the files on your disks. That means we need to use directory commands to create a structure to store our files, and to find the files we have stored there. This tutorial takes us through the various commands you can use to do this.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-10-directory-commands/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-10-directory-commands/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, directory listing',0,0,1),
(3600,'2022-05-20','Digitizing Photos',791,'How to digitize old prints, slides, and negatives','<p>Today most photos are in digital formats, such as those you take with a smartphone, so they can be worked on with GIMP right away. But about old prints, slides, and negatives? Before you can work on them, they need to be digitized in some way. In this tutorial I look at some of the options you have for doing this</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.toptenreviews.com/best-photo-scanning-services\" class=\"uri\">https://www.toptenreviews.com/best-photo-scanning-services</a></li>\r\n<li><a href=\"https://scandigital.com/\" class=\"uri\">https://scandigital.com/</a></li>\r\n<li><a href=\"https://everpresent.com/\" class=\"uri\">https://everpresent.com/</a></li>\r\n<li><a href=\"https://www.scancafe.com/\" class=\"uri\">https://www.scancafe.com/</a></li>\r\n<li><a href=\"https://www.gophoto.com/\" class=\"uri\">https://www.gophoto.com/</a></li>\r\n<li><a href=\"https://www.digitalmemoriesonline.net/\" class=\"uri\">https://www.digitalmemoriesonline.net/</a></li>\r\n<li><a href=\"https://www.scanmyphotos.com/\" class=\"uri\">https://www.scanmyphotos.com/</a></li>\r\n<li><a href=\"https://www.pcmag.com/reviews/google-photoscan\" class=\"uri\">https://www.pcmag.com/reviews/google-photoscan</a></li>\r\n<li><a href=\"https://www.toptenreviews.com/best-slide-to-digital-image-converters\" class=\"uri\">https://www.toptenreviews.com/best-slide-to-digital-image-converters</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/digitizing-photos/\" class=\"uri\">https://www.ahuka.com/gimp/digitizing-photos/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, digitizing, scanning, photos',0,0,1),
(3610,'2022-06-03','DOS Wildcards; File Attributes',907,'More on DOS. This time it is DOS Wildcards and File Attributes.','<p>For this lesson we are going to fill in a couple of concepts that we will need before we go further with directories. Wildcards can let you look for files and directories without specifying the complete name, and look for items with similar names or file extensions. And file attributes are an important part of file management.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-11-dos-wildcards-file-attributes/\" class=\"uri\">https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-11-dos-wildcards-file-attributes/</a></li>\r\n</ul>\r\n',198,117,0,'CC-BY-SA','DOS, early PC computing, wildcards, attributes',0,0,1),
(3620,'2022-06-17','Photo storage, backups, and workflow',1222,'How to keep your photos safe','<p>If you have photos that are important to you, you should take steps to protect them. Every day someone loses a lifetime of memories because they didn\'t take these steps. Don\'t be one of them. In this tutorial I explain how <em>I</em> backup and protect my photos and what my workflow is like. You may find some ideas here that you can use.</p>\r\n<h2 id=\"links\">Links:</h2>\r\n<ul>\r\n<li><a href=\"https://www.amazon.com/Electronic-Automatic-Rotation-Resolution-1280x800IPS/dp/B07QTKQPX4/ref\" class=\"uri\">https://www.amazon.com/Electronic-Automatic-Rotation-Resolution-1280x800IPS/dp/B07QTKQPX4/ref</a></li>\r\n<li><a href=\"https://www.theguardian.com/world/2007/sep/29/argentina.film\" class=\"uri\">https://www.theguardian.com/world/2007/sep/29/argentina.film</a></li>\r\n<li><a href=\"https://www.facebook.com/\" class=\"uri\">https://www.facebook.com/</a></li>\r\n<li><a href=\"https://www.google.com/photos/about/\" class=\"uri\">https://www.google.com/photos/about/</a></li>\r\n<li><a href=\"https://www.flickr.com/\" class=\"uri\">https://www.flickr.com/</a></li>\r\n<li><a href=\"https://www.smugmug.com/plans/\" class=\"uri\">https://www.smugmug.com/plans/</a></li>\r\n<li><a href=\"https://www.shutterfly.com/\" class=\"uri\">https://www.shutterfly.com/</a></li>\r\n<li><a href=\"https://beebom.com/flickr-alternatives/\" class=\"uri\">https://beebom.com/flickr-alternatives/</a></li>\r\n<li><a href=\"https://www.gimp.org/tutorials/GIMPProfile/\" class=\"uri\">https://www.gimp.org/tutorials/GIMPProfile/</a></li>\r\n<li><a href=\"https://www.ahuka.com/gimp/photo-storage-backups-and-workflow/\" class=\"uri\">https://www.ahuka.com/gimp/photo-storage-backups-and-workflow/</a></li>\r\n</ul>\r\n',198,113,0,'CC-BY-SA','GIMP, Photo storage, Photo backup, Photo workflow',0,0,1),
(3379,'2021-07-15','Linux Inlaws S01E34: The one with the intelligence',2716,'Part four of the three-part miniseries on deep learning and artificial intelligence','<p>\r\n    In this fourth part of our three-part miniseries on Deep and Machine Learning our two heroes shed some\r\n    light on a DL architecture called Generative Pre-Trained Transformer (GPT), a pretty sophistic piece\r\n    of software that fools most humans when it comes to authoring text (ideal for budding writers with\r\n    a block in place). Other topics of discussion includes OpenAI (the company behind this framework),\r\n    Elon Musk, Bitcoin, Microsoft and if the GPT can actually pass the Turing test. All will be revealed -\r\n    don\'t miss this episode!\r\n</p>\r\n<h2>Links:</h2>\r\n<ul>\r\n<li>OpenAI: <a href=\"https://openai.com\" target=_blank>https://openai.com</a></li>\r\n<li>GPT: <a href=\"https://openai.com/projects\" target=_blank>https://openai.com/projects</a></li>\r\n<li>The Turing Test: <a href=\"https://en.wikipedia.org/wiki/Turing_test\" target=_blank>https://en.wikipedia.org/wiki/Turing_test</a></li>\r\n<li>GPT-2 source code: <a href=\"https://github.com/openai/gpt-2\" target=_blank>https://github.com/openai/gpt-2</a></li>\r\n<li>GPT meta-progamming: <a href=\"https://www.lesswrong.com/posts/zZLe74DvypRAf7DEQ/meta-programming-gpt-a-route-to-superintelligence\" target=_blank>https://www.lesswrong.com/posts/zZLe74DvypRAf7DEQ/meta-programming-gpt-a-route-to-superintelligence</a></li>\r\n<li>GPT-3 interview: <a href=\"https://www.youtube.com/watch?v=PqbB07n_uQ4\" target=_blank>https://www.youtube.com/watch?v=PqbB07n_uQ4</a></li>\r\n<li>DSDS: <a href=\"https://en.wikipedia.org/wiki/Deutschland_sucht_den_Superstar\" target=_blank>https://en.wikipedia.org/wiki/Deutschland_sucht_den_Superstar</a></li>\r\n<li>GPT-3 sample 1: <a href=\"https://linuxinlaws.eu/files/padawans.txt\" target=_blank>https://linuxinlaws.eu/files/padawans.txt</a></li>\r\n<li>GPT-3 sample 2: <a href=\"https://linuxinlaws.eu/files/HGttG.txt\" target=_blank>https://linuxinlaws.eu/files/HGttG.txt</a></li>\r\n</ul>\r\n',384,111,1,'CC-BY-SA','GPT-3, OpenAI, Elon Musk, Microsoft, Bitcoin, meta-programming',0,0,1),
(3381,'2021-07-19','Learning to skate',2152,'Klaatu goes for a walk, and talks about learning to ride a skateboard','<p>Apologies for the heavy breathing. I chose (unwisely, in terms of audio) to walk up a steep hill.</p>\r\n',78,0,0,'CC-BY-SA','skateboard',0,0,1),
(3378,'2021-07-14','A bit of my experience with Starlink internet service',608,'some ramblings about satellite internet service and how Starlink is different','<p>Starlink website: <a href=\"https://www.starlink.com/\" class=\"uri\">https://www.starlink.com/</a></p>\r\n\r\n<p>Starlink from Wikipedia: <a href=\"https://en.wikipedia.org/wiki/Starlink\" class=\"uri\">https://en.wikipedia.org/wiki/Starlink</a></p>\r\n\r\n<p>\r\nStarlink is a satellite internet constellation being constructed by SpaceX providing satellite Internet access. The constellation will consist of thousands of mass-produced small satellites in low Earth orbit (LEO), which communicate with designated ground transceivers. The SpaceX satellite development facility in Redmond, Washington houses the Starlink research, development, manufacturing, and orbit control teams. The cost of the decade-long project to design, build, and deploy the constellation was estimated by SpaceX in May 2018 to be at least US$10 billion.\r\n</p>\r\n<p>\r\nProduct development began in 2015. Two prototype test-flight satellites were launched in February 2018. Additional test satellites and 60 operational satellites were deployed in May 2019. SpaceX launches up to 60 satellites at a time, aiming to deploy 1,584 of the 260 kg (570 lb) spacecraft to provide near-global service by late 2021 or 2022. SpaceX started a private beta service in the Northern United States in August 2020 and a public beta in October 2020, service beginning at high latitudes between 44° and 52° North.\r\n</p>\r\n<p>\r\nOn 15 October 2019, the United States Federal Communications Commission (FCC) submitted filings to the International Telecommunication Union (ITU) on SpaceX\'s behalf to arrange spectrum for 30,000 additional Starlink satellites to supplement the 12,000 Starlink satellites already approved by the FCC.\r\n</p>\r\n<p>\r\nAstronomers have raised concerns about the constellations’ effect on ground-based astronomy and how the satellites will add to an already jammed orbital environment. In response, SpaceX has implemented several upgrades to Starlink satellites aimed at reducing their brightness during operation. The satellites are equipped with krypton-fueled Hall thrusters which allow them to de-orbit at the end of their life. Additionally, the satellites are designed to autonomously avoid collisions based on uplinked tracking data.\r\n</p>\r\n',243,0,0,'CC-BY-SA','internet, leo, satellites, ISP',0,0,1),
(3382,'2021-07-20','How I fixed a fault on my car for free thanks to YouTube',760,'How I fixed a fault on my car for free and as an added bonus without injuring myself!','<p>I had a spare moment and found this show on my hard drive. Cheers MrX</p>\r\n<p><a href=\"https://www.youtube.com/watch?v=kl1_VM_j5r8\">YouTube video I found that explains how to fix a rattling heat shield for free</a></p>\r\n<p><em>Picture of the fix!</em><br />\r\n<img src=\"https://hackerpublicradio.org/eps/hpr3382/heat-shield-repair.jpg\" alt=\"Picture of the fix!\" /></p>\r\n',201,0,1,'CC-BY-SA','Car, Repair, Hack, DIY',0,0,1),
(3383,'2021-07-21','My gEeeky Experiment - Part 1',1029,'ClaudioM talks about how he revived his lowly Asus Eee PC 901 netbook with OpenBSD.','<ul>\r\n<li>Blog post: <a href=\"https://claudiomiranda.wordpress.com/2020/01/04/my-geeeky-experiment-part-1/\" class=\"uri\">https://claudiomiranda.wordpress.com/2020/01/04/my-geeeky-experiment-part-1/</a></li>\r\n<li>Asus Eee PC 901 info via Wikipedia (first paragraph in link): <a href=\"https://en.wikipedia.org/wiki/Asus_Eee_PC#Other_Eee_90x_models\" class=\"uri\">https://en.wikipedia.org/wiki/Asus_Eee_PC#Other_Eee_90x_models</a></li>\r\n<li>OpenBSD Web Site: <a href=\"https://www.openbsd.org/\" class=\"uri\">https://www.openbsd.org/</a></li>\r\n<li>Duplicating installed packages on another machine, via the OpenBSD FAQ: <a href=\"https://www.openbsd.org/faq/faq15.html#PkgDup\" class=\"uri\">https://www.openbsd.org/faq/faq15.html#PkgDup</a></li>\r\n<li>Video of Eee PC 901 running OpenBSD 6.6: <a href=\"https://imgur.com/KHJj8lK\" class=\"uri\">https://imgur.com/KHJj8lK</a></li>\r\n<li>Mastodon post from <span class=\"citation\" data-cites=\"solene\">@solene</span><span class=\"citation\" data-cites=\"bsd.network\">@bsd.network</span> about the Firefox port on OpenBSD: <a href=\"https://bsd.network/@solene/106481939809930365\" class=\"uri\">https://bsd.network/@solene/106481939809930365</a></li>\r\n</ul>\r\n<p>CPU on my Dell Latitude E6410 via sysctl: hw.model=Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz</p>\r\n',152,0,0,'CC-BY-SA','asus,eeepc,openbsd,bsd,linux',0,0,1),
(3384,'2021-07-22','Page Numbers in EPUB eBook Files',1699,'Response to HPR 3367 I describe how to specify page numbers in an EPUB eBook.','<p>This episode is a response to <a href=\"https://hackerpublicradio.org/eps.php?id=3367\">hpr3367</a> by Andrew Conway and Dave Morriss. One of the topics they brought up was the thorny issue of page numbers in e-books. Most of the time you don\'t need to worry about page numbers in ebooks, if you\'re reading fiction for example. The whole point of an ebook is that the texts can reflow to fit the page no matter what size the screen is or what font-size you\'ve chosen. This is a major accessibility feature of all e-book formats. One reason you might want to specify actual page numbers, though, is if you\'re dealing with a technical or academic book, and you need to be able to refer to specific passages in the book by page number, as you are expected to do in academic research. Or, as Andrew and Dave were discussing, you might need to create an index in your ebook that would send your readers back to specific pages like in a paper book.</p>\r\n\r\n<p>I\'ve thought about this before but never really gotten into the weeds and figured out how to make it happen. In fact, when I was creating the new digital editions of the Counterpoint textbooks like I discussed in <a href=\"https://hackerpublicradio.org/eps.php?id=1512\">hpr1512</a>, I actually took the trouble to put page number anchors through the entire thing, so that at a future date I would be able to enable real page numbers. This was a key part of the source file\'s infrastructure, which helped me quickly find the passages I was working on in my huge HTML file. Those anchors are not quite in the correct format for EPUB, but they are consistent and I will easily be able to write a script to fix them. I haven\'t done that yet, but now that I figured out how to do it on some smaller examples, this is on my to-do list.</p>\r\n\r\n<p>Anyway while I was listening to Dave and Andrew talk about this, I thought I remembered reading somewhere that in the newest ePub specification, EPUB 3, there was support for publisher\'s page numbers to deal with precisely this issue. Their discussion prompted me to see if I could make it work. I\'m happy to report success, although with some qualifications, which I will get into.</p>\r\n\r\n<h3>Converting to EPUB 3</h3>\r\n\r\n<p>The first thing to do is to upgrade your ebook from EPUB2 to EPUB3. There are a couple of ways to do this. The way I did it was to use the ebook editor in a recent version of Calibre. When you open up the EPUB for editing, go to the <code>Tools</code> menu and choose <code>Upgrade book internals</code>. This will create the new navigation file <code>nav.xhtml</code> to replace the old <code>toc.ncx</code> file. You\'ll need to edit this new file later to enable the page numbers.</p>\r\n\r\n<h3>Insert page anchors</h3>\r\n\r\n<p>Next you need to put your page anchors in there. This could be very tedious if you haven\'t done any preparatory work, such as putting visible page numbers in plain sight in square brackets [21] the way I did for a couple of ebooks. It wasn\'t very elegant, but at least it was easy to find where the page breaks were. I have a <a href=\"https://hackerpublicradio.org/eps.php?id=1284\">Blather</a> voice command that triggers a python script to create these things. Here\'s an example of page number anchor, which goes in the main text of the book wherever you want to insert a page number. This will not be visible to the reader inline. This is for page 57:</p>\r\n\r\n<pre>\r\n&lt;span epub:type=&quot;pagebreak&quot; id=&quot;page57&quot; title=&quot;57&quot;&gt;&lt;/span&gt;\r\n</pre>\r\n\r\n<h3>Page List in Navigation File</h3>\r\n\r\n<p>Finally you need to put a <strong>page list</strong> in the new navigation file. This is simply an ordered list with hyperlinks to every page anchor that you put in your ebook. This will not be visible to the reader, but it\'s critical to making everything work. Here\'s a minimal example from my first attempt. This only covers Pages 122 to 126. This is the kind of page numbering you might need if you created an ebook from a five-page article from an academic journal that appeared in the middle of the volume.</p>\r\n\r\n\r\n<pre>\r\n&lt;nav epub:type=&quot;page-list&quot; hidden=&quot;hidden&quot;&gt;\r\n    &lt;ol&gt;\r\n        &lt;li&gt;&lt;a href=&quot;filename.html#page122&quot;&gt;122&lt;/a&gt;&lt;/li&gt;\r\n        &lt;li&gt;&lt;a href=&quot;filename.html#page123&quot;&gt;123&lt;/a&gt;&lt;/li&gt;\r\n        &lt;li&gt;&lt;a href=&quot;filename.html#page124&quot;&gt;124&lt;/a&gt;&lt;/li&gt;\r\n        &lt;li&gt;&lt;a href=&quot;filename.html#page125&quot;&gt;125&lt;/a&gt;&lt;/li&gt;\r\n        &lt;li&gt;&lt;a href=&quot;filename.html#page126&quot;&gt;126&lt;/a&gt;&lt;/li&gt;\r\n    &lt;/ol&gt;\r\n&lt;/nav&gt;\r\n</pre>\r\n\r\n<p>I\'m not sure it matters where you put this navigation block in the <code>nav.xhmtl</code> file, but I put mine between the table of contents and the landmarks blocks.</p>\r\n\r\n<h3>Scripting the creation of page list</h3>\r\n\r\n<p>It could be very tedious to create a page list like this, so of course I wrote a script to automate a lot of the heavy lifting. I\'m sure Dave can write one that\'s more elegant than this, but this is what I came up with in about 5 minutes and it did the job, with the exception of putting the right URL for each link. I did a little bit of post-production to search and replace the URLs generated in the script with what I needed for the specific eBook. I think if you added a third command-line argument with a URL, you can solve this problem. The difficulty with larger books will be when you have more than one internal HTML file in the book, you will have to go through very carefully and make sure that the link goes to the correct file. I saved the script as <code>pagelist.sh</code> and put it in my <code>$PATH</code>.</p>\r\n\r\n<p>Command to run to generate a page list from pages 42 to 61:</p>\r\n\r\n<pre>\r\npagelist.sh 42 61\r\n</pre>\r\n\r\n<p>And here\'s the script:</p>\r\n\r\n<pre>\r\n#!/bin/bash\r\n\r\n# grab beginning and ending pages from 1st and 2nd\r\n# CLI arguments, and specify a tmp file to put stuff\r\nstart=&quot;$1&quot;\r\nend=&quot;$2&quot;\r\nnavfile=/tmp/navfile.txt\r\n\r\n# put the top matter for the nav block\r\necho \'&lt;nav epub:type=&quot;page-list&quot; hidden=&quot;hidden&quot;&gt;\' &gt; $navfile\r\necho &quot;    &lt;ol&gt;&quot; &gt;&gt; $navfile\r\n\r\n# iterate through the page numbers making list item for each one.\r\n# should replace filename with your ebook\'s actual filename\r\nfor i in $(seq $start $end); do\r\n	echo &quot;        &lt;li&gt;&lt;a href=\\&quot;filename.html#page$i\\&quot;&gt;$i&lt;/a&gt;&lt;/li&gt;&quot; &gt;&gt; $navfile\r\ndone\r\n\r\n# close out the list and nav block\r\necho &quot;    &lt;/ol&gt;&quot; &gt;&gt; $navfile\r\necho &quot;&lt;/nav&gt;&quot; &gt;&gt; $navfile\r\n\r\nexit 0\r\n</pre>\r\n\r\nThen you just need to copy and paste what was generated from the script into your editor and make sure all of the URLs are correct, then stick that navigation block into the <code>nav.xhtml</code> file.\r\n\r\n<h3>Conclusions</h3>\r\n\r\n<p>So, once you have the page anchors and the page list in place in your EPUB3 ebook, everything should work. The problem is that so far the only ebook reader I have found that renders the page numbers correctly on the screen is the iBooks app on iOS. I tried it on my Kobo dedicated eReader, on the Marvin ePub reader on iOS and on Overdrive on Android, and none of them displayed my shiny page numbers. iBooks was the only one, but it did so perfectly after choosing \"show publisher page numbers\" on the table of contents menu. It was pretty magical. A quick internet search confirms that there is very little e-book reader or app support for displaying these page numbers.</p>\r\n\r\n<p>However, the embedded page numbers will still be useful if what you want to do is create an index that directs readers back to specific pages. On the one hand, indexes are not as critical as they used to be because you can search through the text of e-books very easily. What you can\'t do easily is <em>browse</em> an eBook the way you can browse a paper book index to see what topics might catch your eye. This might be something only academics do. It\'s not uncommon for an academic to pick up a book and flip right to the bibliography and the index!</p>\r\n\r\n\r\n<h2>Links</h2>\r\n\r\n<ul>\r\n	<li><a href=\"https://kb.daisy.org/publishing/docs/navigation/pagelist.html\">Examples of different page number code formatting</a> from the Accessible Publishing Knowledge Base</li>\r\n	<li><a href=\"https://idpf.org/epub/301/spec/epub-contentdocs.html#sec-xhtml-nav-def-types\">EPUB 3 Specification for navigation document</a>, including page numbers</li>\r\n	<li><a href=\"https://calibre-ebook.com/\">Calibre eBook management software</a></li>\r\n</ul>\r\n',238,0,0,'CC-BY-SA','ebooks, epub, scripting, calibre',0,0,1),
