(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),
