From 5cc10a9b04636b3b8f407db28b5aaa16083e50a3 Mon Sep 17 00:00:00 2001 From: Ken Fallon Date: Mon, 31 Jul 2023 09:12:25 +0200 Subject: [PATCH] database changed --- sql/hpr.sql | 61 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/sql/hpr.sql b/sql/hpr.sql index 1daca35..5da92e1 100644 --- a/sql/hpr.sql +++ b/sql/hpr.sql @@ -11806,8 +11806,38 @@ INSERT INTO `assets` (`episode_id`, `filename`, `extension`, `size`, `sha1sum`, (3882,'hpr3882.flac','flac',54360165,'e60818c0a46437e1179d93996eb74d7271fb8a29','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 136909306 samples'), (3882,'hpr3882.opus','opus',6727905,'9be328c07dbe2b1d64aaaf6f4cff328e3f05e613','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), (3882,'hpr3882.wav','wav',273820004,'6fdc5731efabab479eb01e8c2586024df7f41dc2','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), -(3911,'hpr3911.wav','wav',513148682,'93f2932f3275e5a884cc074f650e673b99528223','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), -(3911,'hpr3911.opus','opus',10876322,'604ab331a0454b637c5e1e97a1fafb1d45aaec3f','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3917,'hpr3917.wav','wav',187856318,'f8fcb49409f7b9d508289bb2d951e21e2ee074b4','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), +(3917,'hpr3917.opus','opus',4982379,'082e449432f5046924b657f708ac8c176d6b0160','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3917,'hpr3917.flac','flac',35664453,'63fd6dd9c0a34239e31691794332e2d3f7317648','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 93927428 samples'), +(3917,'hpr3917.spx','spx',1848310,'a854b19b826f804481edbd705920707cb6f6d66b','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), +(3917,'hpr3917.ogg','ogg',4982064,'e92ad8021377be57d173dbfe7a1e76c8876a23c8','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3917,'hpr3917.mp3','mp3',3915614,'163171f2db9efaca1060595e5a9732aa8b454bb7','audio/mpeg; charset=binary','setgid Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Monaural'), +(3915,'hpr3915.wav','wav',339085788,'313f438dfecf1e0fe79649fa03772cbde5000326','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), +(3915,'hpr3915.opus','opus',8825441,'7fb5511f45b31e4235b1f3db6622fdfa3f448320','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3915,'hpr3915.flac','flac',59134249,'811da40f0442f568548e7d6a6d8a233b1a615da6','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 169542183 samples'), +(3915,'hpr3915.spx','spx',3335733,'ca502f72d4e35079effc07c4f3c358bfcf9689d3','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), +(3915,'hpr3915.ogg','ogg',8825166,'ed11b97b23d0b238086e76b8e6c4377dddcac0ca','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3915,'hpr3915.mp3','mp3',7066294,'58b069b4657f3bf7b5d31fe8f46b632e4e89690c','audio/mpeg; charset=binary','setgid Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Monaural'), +(3914,'hpr3914.wav','wav',131837262,'5ad9d9a3dc94aa29551b6e1f2460a2e6fe5256ac','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), +(3914,'hpr3914.opus','opus',3156114,'02ee281d04484890d6d418e6b16e6e9223d92378','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3914,'hpr3914.flac','flac',26396808,'4681dee781ebab3090717a3b31c4b81b76e113b1','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 65917928 samples'), +(3914,'hpr3914.spx','spx',1297263,'081486aa4fc215b9891ff6e91cfb4d212be034ae','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), +(3914,'hpr3914.ogg','ogg',3155854,'641642f2923ae9b4933565a5cc3d53e862af6839','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3914,'hpr3914.mp3','mp3',2748583,'b0201ace41c0727f0bccd4fcfd0d2fc811158c43','audio/mpeg; charset=binary','setgid Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Monaural'), +(3913,'hpr3913.wav','wav',152473014,'c8f35fa2087113c5a63ecdbb1d537f6a54f3fd29','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), +(3913,'hpr3913.opus','opus',3666070,'d060345284f6c1197cddac5d1f2170e1decfaa00','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3913,'hpr3913.ogg','ogg',3665783,'d55b2f94611dabde01c351bd3275c2686c28438d','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3913,'hpr3913.spx','spx',1500273,'04af17678176dd3fc48941c066516ec7e17c2918','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), +(3913,'hpr3913.flac','flac',29058349,'687b673a3cceafe03676dae6a1e581664b40e52e','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 76235790 samples'), +(3912,'hpr3912.opus','opus',2943529,'8b52e1a62cf15cddd239fed087dd6dd1337ad3fa','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3912,'hpr3912.wav','wav',120510008,'53d4f74b56a5d29bf2eb34d337737de728d1151f','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), +(3913,'hpr3913.mp3','mp3',3178498,'7796f6756a740aac076bafbf69f268cc440185f3','audio/mpeg; charset=binary','setgid Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Monaural'), +(3912,'hpr3912.flac','flac',23751862,'ce013a32eb350b3599e6958432af2b0354e78901','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 60254285 samples'), +(3912,'hpr3912.ogg','ogg',2943238,'1b45c0a821d741e0dd6a4b9cda60791843da086b','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3912,'hpr3912.spx','spx',1185859,'b2d0f6ce6e30be2505755f6ba543ffa5294a63da','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), +(3912,'hpr3912.mp3','mp3',2512646,'a9e1fe253a86da69ada4edcda87cd20eec2b29e7','audio/mpeg; charset=binary','setgid Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Monaural'), +(3911,'hpr3911.wav','wav',513148682,'93f2932f3275e5a884cc074f650e673b99528223','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'); +INSERT INTO `assets` (`episode_id`, `filename`, `extension`, `size`, `sha1sum`, `mime_type`, `file_type`) VALUES (3911,'hpr3911.opus','opus',10876322,'604ab331a0454b637c5e1e97a1fafb1d45aaec3f','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), (3911,'hpr3911.flac','flac',110219633,'cd90467374ddaa60368ed640cf048a909d8dff5c','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 256573628 samples'), (3911,'hpr3911.spx','spx',5047843,'e078ec0a9a3be203a76f9fd7557e19b14645e06f','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), (3911,'hpr3911.mp3','mp3',10692602,'8308f5f474be43e9727ccafbb68007683202f2de','audio/mpeg; charset=binary','setgid Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Monaural'), @@ -11836,8 +11866,8 @@ INSERT INTO `assets` (`episode_id`, `filename`, `extension`, `size`, `sha1sum`, (3907,'hpr3907.spx','spx',4660478,'fda59e684c2f3de3018bc90a4952c712c0c739a7','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), (3907,'hpr3907.ogg','ogg',10420362,'6030efc0bc1e573e7aed0727c4a632fb2c14fdc8','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), (3907,'hpr3907.mp3','mp3',9872127,'a87a1f13834a36dfabca3b1e17afc0d5f937aabd','audio/mpeg; charset=binary','setgid Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Monaural'), -(3906,'hpr3906.opus','opus',16836657,'5417251e9ec069fddde80d10c2831dfd17a59e19','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'); -INSERT INTO `assets` (`episode_id`, `filename`, `extension`, `size`, `sha1sum`, `mime_type`, `file_type`) VALUES (3906,'hpr3906.wav','wav',699501690,'e072d436f9694533f0ca96e41bee396a8eba5fb1','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), +(3906,'hpr3906.opus','opus',16836657,'5417251e9ec069fddde80d10c2831dfd17a59e19','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), +(3906,'hpr3906.wav','wav',699501690,'e072d436f9694533f0ca96e41bee396a8eba5fb1','audio/x-wav; charset=binary','setgid RIFF (little-endian) data, WAVE audio, mono 192000 Hz'), (3906,'hpr3906.spx','spx',6880715,'007e994ff273f11f06a8b9fa865233aa93d8cd3c','audio/ogg; charset=binary','setgid Ogg data, Speex audio'), (3906,'hpr3906.flac','flac',140014547,'4945a658a11f64a924b15d1574976263f7075df5','audio/flac; charset=binary','setgid FLAC audio bitstream data, 16 bit, mono, 192 kHz, 349750144 samples'), (3906,'hpr3906.ogg','ogg',16836401,'47625058a4c126034eddb9e2537e37b396d66db3','audio/ogg; charset=binary','setgid Ogg data, Opus audio,'), @@ -12214,7 +12244,7 @@ CREATE TABLE `comments` ( `last_changed` datetime NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`id`), KEY `comments_eps_id_idx` (`eps_id`) -) ENGINE=MyISAM AUTO_INCREMENT=3778 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='New comments table populated from c5t_* tables'; +) ENGINE=MyISAM AUTO_INCREMENT=3785 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='New comments table populated from c5t_* tables'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -15997,7 +16027,13 @@ INSERT INTO `comments` (`id`, `eps_id`, `comment_timestamp`, `comment_author_nam (3774,3883,'2023-07-15 18:53:39','dnt','Clap!','This was fun and new to me. I reproduced this experiment twice. A very opportune time for this show to reach the main feed, only a few days after a famous implosion of a different kind (if you are reading this is the distant future, see \"OceanGate\"). Thanks for this!','2023-07-15 19:53:28'), (3775,3900,'2023-07-16 15:58:48','Eugene','No need for podcast preprocessing','Hi Ahuka,\r\n\r\nI listen to podcasts on a Sansa Clip+ synced from gPodder too! It\'s an excellent little player.\r\n\r\nSpeaking of the preprocessing, there is no need to do that if you install the open source Rockbox firmware on the player, https://www.rockbox.org/wiki/SansaClip. It works great and has a lot of features! There is a control to increase/decrease pitch and speed while playing; you need to enable the Timestretch option to change them separately (https://download.rockbox.org/daily/manual/rockbox-sansaclipplus/rockbox-buildch4.html#x7-640004.3.3). It took me years before I figured out it was possible to separate the two.\r\n\r\nAlso great for podcasts are: auto resume from the previously paused place, and the ability to make the left/right buttons skip N seconds instead of to the prev/next track.\r\n\r\nHave a good day!','2023-07-16 16:32:47'), (3776,3900,'2023-07-17 12:04:50','Kevin O\'Brien','Sansa Clip+','I used a Sansa Clip+ with Rockbox for a long time, but now the Sansa Clip+ is unavailable. The way I do it now, I can use any MP3 player.','2023-07-17 15:57:57'), -(3777,3901,'2023-07-18 16:51:36','Reto','aCalendar on Android','Hi operat0r,\r\n\r\nI am in the same boat about forgetting appointments.\r\n\r\naCalendar is what I use for years and I like to say, it is the best calendar.\r\nI mention to you just one function: To copy an entry is as simple as it gets and so I you keep your history, instead of moving an entry. It also offers to create several entries, instead of a series. \r\nhttp://play.google.com/store/apps/details?id=org.withouthat.acalendar\r\n\r\nThe website for more information: http://acalendar.tapirapps.de\r\n\r\n\r\nNot synced with Google, I created a calendar that is as private as it gets. So I have to make backups. Backup your calendar with: iCal Import/Export CalDAV \r\nhttp://play.google.com/store/apps/details?id=tk.drlue.icalimportexport.premium\r\n\r\nThe Website: http://ical.drlue.at/\r\n\r\nTo support the developer I had to get the Pro Version, now it runs automated backups. Very useful app for me.\r\n\r\nMy two cents to your show.\r\n\r\nBr,\r\nReto','2023-07-18 17:01:42'); +(3777,3901,'2023-07-18 16:51:36','Reto','aCalendar on Android','Hi operat0r,\r\n\r\nI am in the same boat about forgetting appointments.\r\n\r\naCalendar is what I use for years and I like to say, it is the best calendar.\r\nI mention to you just one function: To copy an entry is as simple as it gets and so I you keep your history, instead of moving an entry. It also offers to create several entries, instead of a series. \r\nhttp://play.google.com/store/apps/details?id=org.withouthat.acalendar\r\n\r\nThe website for more information: http://acalendar.tapirapps.de\r\n\r\n\r\nNot synced with Google, I created a calendar that is as private as it gets. So I have to make backups. Backup your calendar with: iCal Import/Export CalDAV \r\nhttp://play.google.com/store/apps/details?id=tk.drlue.icalimportexport.premium\r\n\r\nThe Website: http://ical.drlue.at/\r\n\r\nTo support the developer I had to get the Pro Version, now it runs automated backups. Very useful app for me.\r\n\r\nMy two cents to your show.\r\n\r\nBr,\r\nReto','2023-07-18 17:01:42'), +(3778,3909,'2023-07-29 20:13:11','dnt','Great show, keep em coming!','Thanks for this! Well done, and plenty for the listener to think about! Looking forward to more.','2023-07-29 21:20:16'), +(3780,3910,'2023-07-29 20:15:03','dnt','Game mechanics','This was interesting, I like your discussion of the game mechanics. This is why these games are so engrossing, when you get into them!','2023-07-29 21:20:16'), +(3781,3904,'2023-07-29 20:16:37','dnt','Friends','Thanks for this! I listened to it on the way home from work and continued to think about it well into the evening.','2023-07-29 21:20:17'), +(3782,3902,'2023-07-29 20:18:55','dnt','ffmpeg','I\'m looking forward to more of this. I haven\'t used ffmpeg much anymore, but it was essential to me in my videographer and video editor days. It\'s one of those applications that it\'s hard to imagine being without it, and amazing that we have it. Thanks!','2023-07-29 21:20:17'), +(3783,3903,'2023-07-29 20:20:23','dnt','systemd','I think this was an excellent perspective on systemd. Something that\'s good for servers and for the overall enterprise linux world is not necessarily good for my laptop and it turns out that\'s ok. Great stuff!','2023-07-29 21:20:17'), +(3784,3896,'2023-07-29 20:23:31','dnt','Ruins','Thanks for sharing this! I did not know about it. I have long hoped to visit Skara Brae someday, so here\'s another potential stop for me. I would enjoy hearing more of this.','2023-07-29 21:20:17'); /*!40000 ALTER TABLE `comments` ENABLE KEYS */; UNLOCK TABLES; /*!50003 SET @saved_cs_client = @@character_set_client */ ; @@ -19725,7 +19761,7 @@ INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hosti (3645,'2022-07-22','How to set up a small Linux Wireguard VPN',855,'I set up a small VPN and wrote a blog post about it. This is just an audiorecording of that','

The blogpost where I describe how to set up a Wireguard VPN network:
\nhttps://www.jeroenbaten.nl/the-complete-guide-to-setting-up-a-multi-peer-wireguard-vpn/

\n',369,61,0,'CC-BY-SA','wireguard,linux, vpn',0,0,1), (3648,'2022-07-27','A response to tomorrows show',1682,'Ken brings the DeLorean up to 141.6Kph to address monochromec\'s comment on stats','
\r\n

\r\nCounter Point\r\n

\r\n

\r\nThis show is a counter point to: hpr3649 :: Linux Inlaws S01E61: 20 years in review\r\n

\r\n
\r\n

There are three kinds of lies: Lies, damned lies, and statistics

\r\n

In today\'s show we discover that Hacker Public Radio is not a Podcast Hosting Platform.

\r\n

Each day your show will be heard by as many people as can squeeze into the main auditorium at FOSDEM, or between two and three Airbus A380-800. You know the big double decker passenger plane. Every month we have on average 33,584 downloads, that\'s about 40 fully loaded Airbus A380-800.

\r\n

\"\"

\r\n

Podcast \"Hosting\" Sites, like Spotify, Apple Podcast or Google Podcasts, etc. do not host the media, they are essentially monetizing Hacker Public Radio content. And we are all absolutely fine with that because our shows are released under a Creative Commons Attribution-ShareAlike 3.0 Unported license.

\r\n

\"actual_hpr_downloads\"

\r\n

Every one of those dots is a download that is not without cost, but is provided entirely free of charge to us by our kind hosting Provider AnHonestHost.com and the volunteer project the Internet Archive. Both of which donates terabytes of storage and data transfer to us for free.

\r\n

The people to thank are our own Josh Knapp over at AnHonestHost.com, who provides the Hacker Public Radio web site.

\r\n

And the Internet Archive which is an American digital library with the stated mission of \"universal access to all knowledge\", who provide hosting for the media.

\r\n

\r\nFor more details, see the full show notes.\r\n

\r\n',30,0,1,'CC-BY-SA','statistics,syndication,reality',0,0,1), (3637,'2022-07-12','HPR feed to Sqlite',454,'First step in creating a static copy of HPR','\n

One interesting thing I read during the discussion is Ken said Every thing needed to recreate an HPR site is in the feed

\n\n
git clone https://gitlab.com/norrist/hprfeed2db\ncd hprfeed2db/\npython3 -m venv venv\nsource venv/bin/activate\npip install feedparser peewee\npython data_models.py\npython feed.py\nsqlite3 hpr.sqlite "select count(*) from episode"
\n',342,0,0,'CC-BY-SA','python, rss, sqlite',0,0,1), -(3916,'2023-08-07','HPR Community News for July 2023',0,'HPR Volunteers talk about shows released and comments posted in July 2023','\n\n

New hosts

\n

\nWelcome to our new hosts:
\n\n HopperMCS, \n Reto.\n

\n\n

Last Month\'s Shows

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
IdDayDateTitleHost
3891Mon2023-07-03HPR Community News for June 2023HPR Volunteers
3892Tue2023-07-04Emacs package curation, part 1dnt
3893Wed2023-07-05Game card design resourcesKlaatu
3894Thu2023-07-06The Page 42 Show: Ugly News Week, Show\'s Epoch!HopperMCS
3895Fri2023-07-07What\'s in my backpackStache_AF
3896Mon2023-07-10The Brochs of GlenelgAndrew Conway
3897Tue2023-07-11HPR AudioBook Club 22 - Murder at Avedon HillHPR_AudioBookClub
3898Wed2023-07-12The Oh No! News.Some Guy On The Internet
3899Thu2023-07-13Repair corrupt video files for free with untrucPaul Quirk
3900Fri2023-07-14Preparing Podcasts for ListeningAhuka
3901Mon2023-07-17Time Managmentoperat0r
3902Tue2023-07-18Introduction to a new series on FFMPEGMr. Young
3903Wed2023-07-19Why I don\'t love systemd (yet)deepgeek
3904Thu2023-07-20How to make friendsKlaatu
3905Fri2023-07-21Presenting Fred Blackfolky
3906Mon2023-07-24The Oh No! News.Some Guy On The Internet
3907Tue2023-07-25My introduction showReto
3908Wed2023-07-26Emacs package curation, part 2dnt
3909Thu2023-07-27Permission tickets. one_of_spoons
3910Fri2023-07-28Playing Civilization IIAhuka
3911Mon2023-07-31An overview of the \'ack\' commandDave Morriss
\n\n

Comments this month

\n\n

Note to Volunteers: Comments marked in green were read in the last\nCommunity News show and should be ignored in this one.

These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 13 comments in total.

\n

Past shows

\n

There are 4 comments on\n3 previous shows:

\n

Updated on 2023-07-27 15:32:31

\n

This month\'s shows

\n

There are 9 comments on 5 of this month\'s shows:

\n\n\n

Mailing List discussions

\n

\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the Mail List which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\nMailman.\n

\n

The threaded discussions this month can be found here:

\nhttps://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2023-July/thread.html\n\n\n

Events Calendar

\n

With the kind permission of LWN.net we are linking to\nThe LWN.net Community Calendar.

\n

Quoting the site:

\n
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.
\n\n

Any other business

\n

The HPR Static Site

\n

As mentioned in the last Community News episode, the HPR database and\nwebsite was moved to a new server, and the static site generator written\nby Rho`n was used to generated the non-interactive part of\nthe website.

\n

Since then, there has been a process of adapting the software to the\nnew configuration. Unfortunately Rho`n has not been\navailable during this process, but we are gradually learning our way\naround his excellent software and making changes to suit our needs.

\n

If you spot any problems or have ideas for new features, please raise\nissues on the Gitea repository at: https://repo.anhonesthost.net/rho_n/hpr_generator/issues.

\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1), +(3916,'2023-08-07','HPR Community News for July 2023',0,'HPR Volunteers talk about shows released and comments posted in July 2023','\n\n

New hosts

\n

\nWelcome to our new hosts:
\n\n HopperMCS, \n Reto.\n

\n\n

Last Month\'s Shows

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
IdDayDateTitleHost
3891Mon2023-07-03HPR Community News for June 2023HPR Volunteers
3892Tue2023-07-04Emacs package curation, part 1dnt
3893Wed2023-07-05Game card design resourcesKlaatu
3894Thu2023-07-06The Page 42 Show: Ugly News Week, Show\'s Epoch!HopperMCS
3895Fri2023-07-07What\'s in my backpackStache_AF
3896Mon2023-07-10The Brochs of GlenelgAndrew Conway
3897Tue2023-07-11HPR AudioBook Club 22 - Murder at Avedon HillHPR_AudioBookClub
3898Wed2023-07-12The Oh No! News.Some Guy On The Internet
3899Thu2023-07-13Repair corrupt video files for free with untrucPaul Quirk
3900Fri2023-07-14Preparing Podcasts for ListeningAhuka
3901Mon2023-07-17Time Managmentoperat0r
3902Tue2023-07-18Introduction to a new series on FFMPEGMr. Young
3903Wed2023-07-19Why I don\'t love systemd (yet)deepgeek
3904Thu2023-07-20How to make friendsKlaatu
3905Fri2023-07-21Presenting Fred Blackfolky
3906Mon2023-07-24The Oh No! News.Some Guy On The Internet
3907Tue2023-07-25My introduction showReto
3908Wed2023-07-26Emacs package curation, part 2dnt
3909Thu2023-07-27Permission tickets. one_of_spoons
3910Fri2023-07-28Playing Civilization IIAhuka
3911Mon2023-07-31An overview of the \'ack\' commandDave Morriss
\n\n

Comments this month

\n\n

Note to Volunteers: Comments marked in green were read in the last\nCommunity News show and should be ignored in this one.

These are comments which have been made during the past month, either to shows released during the month or to past shows.\nThere are 20 comments in total.

\n

Past shows

\n

There are 4 comments on\n3 previous shows:

\n

Updated on 2023-07-29 23:13:56

\n

This month\'s shows

\n

There are 16 comments on 11 of this month\'s shows:

\n\n\n

Mailing List discussions

\n

\nPolicy decisions surrounding HPR are taken by the community as a whole. This\ndiscussion takes place on the Mail List which is open to all HPR listeners and\ncontributors. The discussions are open and available on the HPR server under\nMailman.\n

\n

The threaded discussions this month can be found here:

\nhttps://hackerpublicradio.org/pipermail/hpr_hackerpublicradio.org/2023-July/thread.html\n\n\n

Events Calendar

\n

With the kind permission of LWN.net we are linking to\nThe LWN.net Community Calendar.

\n

Quoting the site:

\n
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.
\n\n

Any other business

\n

The HPR Static Site

\n

As mentioned in the last Community News episode, the HPR database and\nwebsite was moved to a new server, and the static site generator written\nby Rho`n was used to generated the non-interactive part of\nthe website.

\n

Since then, there has been a process of adapting the software to the\nnew configuration. Unfortunately Rho`n has not been\navailable during this process, but we are gradually learning our way\naround his excellent software and making changes to suit our needs.

\n

If you spot any problems or have ideas for new features, please raise\nissues on the Gitea repository at: https://repo.anhonesthost.net/rho_n/hpr_generator/issues.

\n\n\n',159,47,1,'CC-BY-SA','Community News',0,0,1), (3643,'2022-07-20','My computing history and the software I use',3345,'Rambling about my computing history and tech stack. ','

I introduce myself by describing my computing history and tech stack. Disjointed rambling and tangentially related thoughts ensue.

\n',406,0,1,'CC-BY-SA','UNIX, Linux, first show, BSD, Android',0,0,1), (3658,'2022-08-10','Linux Inlaws S01E62: HPR\'s inner workings',1975,'An overview of HPRs inner workings and stats based on a ludicrous claim by the Inlaws','

In this episode our two ageing heroes explore the inner workings of a podcast (or podcast hosting platform depending on your perspective) called Hacker Public Radio. Yes, the platform that the Inlaws have been using since the very inception of this rapidly growing FLOSS podcast content. Wondering what the heck this episode is all about, why exactly Martin and Chris are talking about this now and the importance of statistics, lies and damned lies? Then just listen to this episode. You may also find out the difference between mere caching and content syndication. Never mind HPR\'s inner workings.

\n

Links:

\n\n',384,111,1,'CC-BY-SA','Lies, damned lies, stats, projections, CDNs, Ford, Ferrari, Monsters, Books',0,0,1), (3679,'2022-09-08','Linux Inlaws S01E64: Non-profits in the US: A closer look at 501(c)s',2177,'The Ins and Outs of 501(c)s','

In this episode, Martin and Chris shed more light on the riveting subject of non-profit\nand not-for-profit organisations especially in the US with a special focus on the all-\nimportant topic of tax implications. Warning: Due to the fast-paced and gripping never\nmind explicit nature of this topic, people with sleeping disabilities or who are easily startled\n/ offended by graphic content should consult a member of the medical profession to ensure\nthat they are capable of handling this episode. You have been warned.

\n

Links:

\n\n',384,111,1,'CC-BY-SA','501(c)3, 501(c)6, non-profits, not-for-profits, Church of Emacs, RMS, Serviettenknödel',0,0,1), @@ -19991,8 +20027,13 @@ INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hosti (3906,'2023-07-24','The Oh No! News.',1741,'Sgoti discusses the threat of convenience.','

The Oh No! news.

\n

Oh No! News is Good\nNews.

\n\n
\n

InfoSec; the language\nof security.

\n\n
\n\n
\n\n',391,74,0,'CC-BY-SA','Oh No News, InfoSec, browser security, session tokens, session id',0,0,1); INSERT INTO `eps` (`id`, `date`, `title`, `duration`, `summary`, `notes`, `hostid`, `series`, `explicit`, `license`, `tags`, `version`, `downloads`, `valid`) VALUES (3908,'2023-07-26','Emacs package curation, part 2',667,'Let\'s go through every single package installed in my Emacs configuration. File 2 of 3.','

We discuss the packages installed in the second of three files that\nmake up my emacs config.

\n
;;; init-base.el ---  The basics\n;;; Commentary:\n;;; Packages for my personal and work laptop, but not termux.\n\n;;; Code:\n\n;;;;;;;;;;;;;;;\n;;; Writing ;;;\n;;;;;;;;;;;;;;;\n\n;; Focused writing mode\n(use-package olivetti\n  :hook (olivetti-mode . typewriter-mode-toggle)\n  :bind ("C-x C-w" . olivetti-mode)\n  :custom (olivetti-body-width 64)\n  :config\n      (defvar-local typewriter-mode nil\n      "Typewriter mode, automatically scroll down to keep cursor in\n      the middle of the screen. Setting this variable explicitly will\n      not do anything, use typewriter-mode-on, typewriter-mode-off\n      and typewriter-mode-toggle instead.")\n      (defun typewriter-mode-on()\n      "Automatically scroll down to keep cursor in the middle of screen."\n        (interactive)\n        (setq-local typewriter-mode t)\n        (centered-cursor-mode +1))\n      (defun typewriter-mode-off()\n      "Automatically scroll down to keep cursor in the middle of screen."\n        (interactive)\n        (kill-local-variable 'typewriter-mode)\n        (centered-cursor-mode -1))\n      (defun typewriter-mode-toggle()\n        "Toggle typewriter scrolling mode on and off."\n        (interactive)\n        (if typewriter-mode (typewriter-mode-off) (typewriter-mode-on))))\n\n(use-package centered-cursor-mode)\n\n;; Check for weasel words and some other simple rules\n(use-package writegood-mode\n  :bind ("C-c g" . writegood-mode))\n\n;; spellchecking\n(use-package flyspell-correct\n  :after flyspell\n  :bind (:map flyspell-mode-map\n              ("C-;" . flyspell-correct-wrapper)))\n\n;; show correction options in a popup instead of the minibuffer\n(use-package flyspell-correct-popup\n  :after (flyspell-correct))\n\n;online thesaurus service from powerthesaurus.org\n(use-package powerthesaurus)\n\n;; WordNet Thesaurus replacement\n(use-package synosaurus\n  :custom (synosaurus-choose-method 'default)\n  :config (when window-system\n            (if (string= (x-server-vendor) "Microsoft Corp.")\n              (setq synosaurus-wordnet--command "C:\\\\Program Files (x86)\\\\WordNet\\\\2.1\\\\bin\\\\wn.exe"))))\n\n;; WordNet search and view\n(use-package wordnut\n  :bind ("C-c s" . wordnut-search)\n  :config (when window-system\n            (if (string= (x-server-vendor) "Microsoft Corp.")\n                (setq wordnut-cmd "C:\\\\Program Files (x86)\\\\WordNet\\\\2.1\\\\bin\\\\wn.exe"))))\n\n;; fill and unfill with the same key\n(use-package unfill\n  :bind ("M-q" . unfill-toggle))\n\n;; Markdown...\n(use-package markdown-mode)\n\n;;;;;;;;;;;;;;\n;;; Coding ;;;\n;;;;;;;;;;;;;;\n\n;; Syntax checking\n(use-package flycheck\n  :diminish\n  :init (global-flycheck-mode))\n\n(use-package flycheck-popup-tip\n  :after (flycheck)\n  :hook (flycheck-mode-hook . flycheck-popup-tip-mode))\n\n;; Web design\n(use-package emmet-mode\n  :hook (sgml-mode . emmet-mode) ;; Auto-start on any markup modes\n        (css-mode . emmet-mode)) ;; enable Emmet's css abbreviation.\n\n(use-package sass-mode)\n\n(use-package web-mode)\n\n;; Python\n(use-package python\n  :mode ("\\\\.py\\\\'" . python-mode)\n  :interpreter ("python" . python-mode))\n\n;; highlight todo items everywhere\n(use-package hl-todo\n  :straight (:host github :repo "tarsius/hl-todo")\n  :custom (hl-todo-keyword-faces\n             `(("FIXME" error bold)\n             ("STUB" error bold)\n             ("REPLACETHIS" error bold)\n             ("REVISIT" error bold)))\n          (hl-todo-exclude-modes nil)\n  :config (add-to-list 'hl-todo-include-modes 'org-mode)\n  :init (global-hl-todo-mode))\n\n;; git\n(use-package magit)\n\n(use-package git-timemachine)\n\n;; rest APIs via org source block\n(use-package ob-restclient)\n\n;;; END ;;;\n\n(provide 'init-base)\n;;; init-base.el ends here
\n',399,0,0,'CC-BY-SA','emacs,elisp',0,0,1), (3918,'2023-08-09','Emacs package curation, part 3',864,'Let\'s go through every single package installed in my Emacs configuration. The last one.','

We discuss the packages installed in the second of three files that\nmake up my emacs config.

\n

Since recording, I pulled in some EXWM (the Emacs X Window Manager,\nthat\'s right), even though I\'m not actually using it, I\'m still using\nstumpWM.

\n

I have also added pass, the password manager, khardel, an emacs\npackage for the khard CLI address book application.

\n

I also moved (server-start) to this file, so that it\'ll only happen\nwhen I\'m on linux.

\n
;;; init-extra.el --- Extra init stuff\n;;; Commentary:\n;;; Stuff just for my personal laptop, not for my work laptop or termux, for example.\n\n;;; Code:\n\n;;;;;;;;;;;;;;;;\n;;; org-roam ;;;\n;;;;;;;;;;;;;;;;\n\n(use-package org-roam\n  :demand t\n  :straight (:host github :repo "org-roam/org-roam"\n             :files (:defaults "extensions/*"))\n  :custom (org-roam-mode-sections (list #'org-roam-backlinks-section\n                                        #'org-roam-reflinks-section\n                                        #'org-roam-unlinked-references-section))\n  :init (setq org-roam-directory "~/org/roam/"\n              org-roam-capture-templates\n                 '(("o" "outline" plain\n                     "%?"\n                     :if-new\n                     (file+head "${slug}.org" "#+title: ${title}\\n#+filetags: :outline:\\n")\n                     :immediate-finish t\n                     :unnarrowed t)\n                  ("r" "reference" plain "%?"\n                     :if-new\n                     (file+head "${slug}.org" "#+title: ${title}\\n")\n                     :immediate-finish t\n                     :unnarrowed t)\n                  ("m" "memo" entry "* ${title}\\n%?"\n                     :if-new\n                     (file "memos.org")\n                     :immediate-finish t\n                     :unnarrowed t)))\n  :bind (("C-c n l" . org-roam-buffer-toggle)\n         ("C-c n f" . org-roam-node-find)\n         ("C-c n g" . org-roam-graph)\n         ("C-c n i" . org-roam-node-insert)\n         ("C-c n c" . org-roam-capture)\n         ;; Dailies\n         ("C-c n j" . org-roam-dailies-capture-today))\n  :config\n  ;; If you're using a vertical completion framework, you might want a more informative completion interface\n  (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))\n  (org-roam-db-autosync-mode)\n  ;; If using org-roam-protocol\n  (require 'org-roam-protocol))\n\n;; citations\n(use-package citar\n  :after org-roam\n  :custom (org-cite-insert-processor 'citar)\n          (org-cite-follow-processor 'citar)\n          (org-cite-activate-processor 'citar)\n          (citar-bibliography '("~/org/biblio.bib"))\n          (citar-notes-paths '("~/org/roam"))\n          (citar-file-note-extensions '("org"))\n  :hook (LaTeX-mode . citar-capf-setup)\n        (org-mode . citar-capf-setup)\n  :bind (("C-c n b" . #'citar-open-notes)\n          :map org-mode-map :package org\n          ("C-c b" . #'org-cite-insert)))\n\n;; view your org-roam notes on a map\n(use-package org-roam-ui\n  :after org-roam\n  :custom (org-roam-ui-sync-theme t)\n          (org-roam-ui-follow t)\n          (org-roam-ui-update-on-save t)\n          (org-roam-ui-open-on-start t))\n\n;; archive web pages in org attachments\n(use-package org-board\n  :after org\n  :custom (org-board-default-browser #'browse-url)\n          (org-board-property "ROAM_REFS")\n  :bind (:map org-mode-map\n          ("C-c B a" . org-board-archive)\n          ("C-c B o" . org-board-open)\n          ("C-c B D" . org-board-delete-all)))\n\n;;;;;;;;;;;;;;;\n;;; Writing ;;;\n;;;;;;;;;;;;;;;\n\n; something like grammarly, but open source\n(use-package langtool)\n\n;; better than docview, for pdf\n(use-package pdf-tools)\n\n;; annotating docs in org files\n(use-package org-noter)\n\n;; epub\n(use-package nov\n :mode ("\\\\.epub$" . nov-mode))\n\n;;; Invoke quick emacs windows to edit anything anywhere.\n;;; bind a key in xorg to ~emacsclient -c (emacs-everywhere)~\n(use-package emacs-everywhere)\n\n;;;;;;;;;;;;;;\n;;; Auctex ;;;\n;;;;;;;;;;;;;;\n(straight-use-package '( auctex\n  :host nil :repo "https://git.savannah.gnu.org/git/auctex.git"\n  :pre-build (("./autogen.sh")\n                  ("./configure" "--without-texmf-dir" "--with-lispdir=.")\n                  ("make"))))\n\n  (setq TeX-data-directory (expand-file-name "straight/repos/auctex" user-emacs-directory)\n      TeX-lisp-directory TeX-data-directory)\n\n  (eval-after-load 'info\n      '(add-to-list 'Info-additional-directory-list\n          (expand-file-name "straight/repos/auctex/doc" user-emacs-directory)))\n  (load (expand-file-name "straight/repos/auctex/auctex.el" user-emacs-directory) nil t t)\n  (load (expand-file-name "straight/repos/auctex/preview-latex.el" user-emacs-directory) nil t t)\n\n(use-package evil-tex)\n\n(use-package latex-preview-pane\n  :custom (latex-preview-pane-use-frame t))\n\n(use-package adaptive-wrap)\n\n;;; END AUCTEX ;;;\n\n;;;;;;;;;;;;;;;;;;;\n;;; Programming ;;;\n;;;;;;;;;;;;;;;;;;;\n\n;; downloading and viewing Dash documentation files\n(use-package dash-docs\n  :init (defun elisp-doc ()\n            (setq-local consult-dash-docsets '("Emacs Lisp")))\n        (add-hook 'emacs-lisp-mode-hook 'elisp-doc)\n  :custom (dash-docs-docsets-path (expand-file-name "docsets" user-emacs-directory))\n          (dash-docs-browse-func 'eww))\n\n(use-package consult-dash\n  :straight (:host codeberg :repo "rahguzar/consult-dash")\n  :bind (("M-s d" . consult-dash))\n  :after consult\n  :config\n  ;; Use the symbol at point as initial search term\n  (consult-customize consult-dash :initial (thing-at-point 'symbol)))\n\n;;;;;;;;;;;;;\n;;; Email ;;;\n;;;;;;;;;;;;;\n\n(use-package notmuch\n  :commands notmuch\n  :config (defun notmuch-show-view-html ()\n            "Open the text/html part of the current message using\n            `notmuch-show-view-part'. From https://emacs.stackexchange.com/a/63457"\n            (interactive)\n            (save-excursion\n                (goto-char (prop-match-beginning\n                            (text-property-search-forward\n                            :notmuch-part "text/html"\n                            (lambda (value notmuch-part)\n                                (equal (plist-get notmuch-part :content-type)\n                            value)))))\n            (notmuch-show-view-part)))\n          ;; Enable link to message via org-store-link\n          (load-file (expand-file-name "org-notmuch.el" user-emacs-directory))\n          (require 'org-notmuch)\n  :bind (:map notmuch-show-mode-map\n              (". v" . notmuch-show-view-html))\n  :custom (notmuch-draft-folder "local/drafts")\n          (notmuch-search-oldest-first nil)\n          (notmuch-fcc-dirs "fastmail/sent")\n          (notmuch-tagging-keys '(("r" ("+receipt" "-inbox") "Receipt")))\n          (sendmail-program (executable-find "msmtp"))\n          (message-sendmail-f-is-evil t)\n          (message-sendmail-extra-arguments '("--read-envelope-from")))\n\n(use-package khardel\n  :after notmuch\n  :bind (:map notmuch-message-mode-map\n         ("C-c M-k" . khardel-insert-email)))\n\n;;;;;;;;;;;;\n;;; PASS ;;;\n;;;;;;;;;;;;\n\n(use-package pass)\n\n;;;;;;;;;;;;\n;;; EXWM ;;;\n;;;;;;;;;;;;\n\n(use-package xelb\n  :disabled t\n  :straight (:host github :repo "ch11ng/xelb"))\n\n(use-package exwm\n  :disabled t\n  :straight (:host github :repo "ch11ng/exwm")\n  :defer t\n  :config (require 'exwm-systemtray)\n          (require 'exwm-randr)\n          (setq xcb:connection-timeout 20)\n          (exwm-systemtray-enable)\n          (add-hook 'exwm-update-class-hook\n                  (lambda ()\n                  (exwm-workspace-rename-buffer exwm-class-name)))\n          (add-hook 'exwm-randr-screen-change-hook\n                    (lambda ()\n                      (start-process-shell-command\n                       "autorandr" nil "autorandr -c")))\n          (defun exwm-randr-mobile()\n          "Load a xrandr profile to use only the laptop screen."\n          (interactive)\n          (start-process-shell-command "xrandr" nil "xrandr --output eDP-1 --auto --output DP-1 --off"))\n          (defun exwm-randr-docked()\n          "Load a xrandr profile to use only the connected external screen DP-1."\n          (interactive)\n          (start-process-shell-command "xrandr" nil "xrandr --output eDP-1 --off --output DP-1 --auto"))\n          (defun exwm-randr-chair()\n          "Load a xrandr profile to use both the laptop screen and the connected screen."\n          (interactive)\n          (start-process-shell-command "xrandr" nil "xrandr --output HDMI-1 --auto --scale 1.3 --output eDP-1 --off"))\n          (defun exwm-randr-all()\n          "Load a xrandr profile to use both the laptop screen and the connected screen."\n          (interactive)\n          (start-process-shell-command "xrandr" nil "xrandr --output eDP-1 --primary --output DP-1 --above eDP-1")\n          (setq exwm-randr-workspace-output-plist '(0 "eDP-1" 1 "DP-1"))\n          )\n          (exwm-randr-enable)\n    :custom (exwm-input-global-keys\n              `((,(kbd "s-r") . exwm-reset)\n                (,(kbd "s-w") . exwm-workspace-switch)\n                (,(kbd "s-a") . exwm-randr-all)\n                (,(kbd "s-c") . exwm-randr-chair)\n                (,(kbd "s-d") . exwm-randr-docked)\n                (,(kbd "s-m") . exwm-randr-mobile)\n                (,(kbd "s-k") . exwm-input-release-keyboard)\n                (,(kbd "s-f") . exwm-layout-toggle-fullscreen)\n                (,(kbd "s-p") . pass)\n                (,(kbd "s-t") . exwm-workspace-switch-to-buffer)\n                (,(kbd "s-&") . (lambda (command)\n                                       (interactive (list (read-shell-command "$ ")))\n                                       (start-process-shell-command command nil command)))\n                ,@(mapcar (lambda (i)\n                       `(,(kbd (format "s-%d" i)) .\n                           (lambda ()\n                               (interactive)\n                               (exwm-workspace-switch-create ,i))))\n                     (number-sequence 0 9))\n                ))\n          )\n\n;; start emacs server\n(server-start)\n\n;;; END ;;;\n\n(provide 'init-extra)\n;;; init-extra.el ends here
\n',399,0,0,'CC-BY-SA','emacs,elisp',0,0,1), -(3909,'2023-07-27','Permission tickets. ',688,'Collective delusions of elective conclusions. ','

No special knowledge nor resources.
\nThis is a preview show for some future, self referential tangle of\ncryptographic distraction.

\n

So far, I see money as some social credit by proxy.
\nI recognise the utility of keeping track of resource recipes.
\nI also see dangers in over abstracting relations beyond robustly\nprovable outcomes.

\n',398,0,1,'CC-BY-SA','ledger , cryptographic , consensus , permission , integrity ',0,0,1), -(3911,'2023-07-31','An overview of the \'ack\' command',1255,'A Perl-based \'grep\'-like tool that can search by file type','
\n

Introduction

\n

I have occasionally been using a tool called ack for a\nfew years now. It’s billed as “an alternative to grep for\nprogrammers”.

\n

There are several features I find particularly useful:

\n\n

It is a very comprehensive and useful tool, though maybe quite\ncomplex to use. Personally I use it in special cases where I need its\npower, and otherwise use the usual grep.

\n

In this episode I will give you the flavour of its capabilities and\notherwise leave you to research more if it sounds interesting.

\n

Installing ack

\n

The tool can be found in repositories. I use Debian, and\nack is in the Debian repo and can be installed with:

\n
sudo apt install ack
\n

Installing it this way the version I have (and am describing here) is\n3.6.0. There is a new version, 3.7.0 available from the website.

\n

The documentation on the website suggests installing it as a Perl\nmodule using CPAN, which is something I will do soon I\nthink.

\n

Perl regular expressions

\n

These are very sophisticated.

\n

A project to convert the Perl regular expression capabilities into a\nportable library form was undertaken by Philip Hazel of Cambridge\nUniversity in 1997, and was called Perl Compatible Regular\nExpressions or PCRE.

\n

Philip Hazel was the originator of the exim mail\ntransfer agent (MTA, or mail server), and wanted to use PCRE within\nit.

\n

Since then PCRE (and later PCRE2) is the way regular expressions are\nimplemented in a lot of other software, which shows how widespread use\nof the Perl RE has become.

\n

The ack documentation refers to the Perl manual for\ndetails of this type of regular expression, and to a tutorial, if you\nwish to gain a deeper understanding.

\n

It should be noted that GNU grep can use Perl compatible\nregular expressions when matching lines in files, but this feature is\nmarked as experimental.

\n

File types

\n

The ack command has rules for recognising file types. It\ndoes this by looking at the name extensions (\'.html\' or\n\'.py\' for example), and in some cases by examining their\ncontents. The complete list of types can be found by running:

\n
ack --help-types
\n

… or, for a more detailed but less readable list:

\n
ack --dump
\n

Some examples are:

\n\n

These names can be used with the options -t TYPE and\n--type=TYPE and also by simply preceding them with two\ndashes (--TYPE). There are also ways of requesting files\nnot of a given type: -T TYPE, --type=noTYPE\nand --noTYPE.

\n

To check files in the current directory of type shell an\nack command like the following might be used and the\nfollowing type of output produced:

\n
$ ack --shell declare\nBash_snippet__using_coproc_with_SQLite/examples/coproc_test.sh\n11:declare -a com=('date +%F' 'whoami' 'id' 'echo "$BASH_VERSION"'
\n

Note that ack reports the file path and numbered lines\nwithin it that match.

\n

You can add your own file types to ack. There is a\nconfiguration file called .ackrc in which new types can be\ndeclared. See below for more information.

\n

The file type feature is one that makes me use ack again\nand again.

\n

The .ackrc file

\n

This file contains “command-line options that are prepended to\nthe command line before processing”.

\n

It’s a useful way to add new types (or even modify existing\nones).

\n

It can be located in a number of places. Mine is\n~/.ackrc with other configuration files in my home\ndirectory.

\n

It’s possible to generate a new .ackrc with the option\n--create-ackrc. This saves all the default settings in the\nfile which makes it simple to adjust anything you need to change.

\n

As an example of a change, I have Markdown files with the extension\n.mkd. However, by default ack only recognises\n.md, and .markdown. To add .mkd\nto the list I can add one of the following to the\n.ackrc:

\n
# Either add `.mkd` to the list\n--type-add=markdown:ext:mkd\n# or replace the list with a new one\n--type-set=markdown:ext:md,mkd,markdown
\n

Note that lines beginning with # are comments. Note also\nthat --type-add and --type-set have to be\nfollowed by an = sign, not a space in this file.

\n

If you examine the settings with ack --dump you will see\nthe default command and the one you have added. If you use\nack --help-types you will see the new extension added to\nthe default list.

\n
markdown     .md .markdown; .mkd
\n

If I use this to search files in the directory where I keep my HPR\nepisodes I see:

\n
$ ack --markdown 'inner ear'\nHacking_my_inner_ear/hpr2109_full_shownotes.mkd\n24:became fascinated by the structure of the human [inner ear][2], and studied it\n28:The human inner ear performs two major functions:\n.\n.\n.
\n

Quick review of selected\nack options

\n

Usage

\n

The ack command is designed to be similar in as many\nrespects as possible to grep. The command is used in\ngeneral as follows:

\n
ack [OPTION]... PATTERN [FILES OR DIRECTORIES]
\n

The [OPTION] part denotes any options (some discussed\nbelow) and PATTERN is the PCRE search pattern. There are\nsome cases where this must be omitted - such as when files of a\nparticular type are being listed. See example 1 below for such a\ncase.

\n

In some cases a particular file is being searched, or all files in\ncertain directories, and that is what\n[FILES OR DIRECTORIES] denotes.

\n

The full documentation for ack can be seen with the\nusual man ack command, and also using\nack --man. There is also an option --help\nwhich gives a summary of all of the available options.

\n

Options

\n

There are many options specific to ack and some in\ncommon with grep, and we’ll look at just a few here:

\n\n

Examples

\n

1. Find all Markdown\nfiles in a directory

\n

Using the -f option:

\n
$ ack --markdown -f Nitecore_Tube_torch/\nNitecore_Tube_torch/README.mkd\nNitecore_Tube_torch/container.mkd\nNitecore_Tube_torch/index.mkd\nNitecore_Tube_torch/shownotes.mkd
\n

Using the -g option:

\n
$ ack -g '\.mkd$' Nitecore_Tube_torch/\nNitecore_Tube_torch/README.mkd\nNitecore_Tube_torch/container.mkd\nNitecore_Tube_torch/index.mkd\nNitecore_Tube_torch/shownotes.mkd
\n

2. Names\nof files that contain a match, with a match count

\n

Using the -l and -c options:

\n
$ ack --markdown -lci '\bear\b'\nHacking_my_inner_ear/hpr2109_full_shownotes.mkd:11\nHacking_my_inner_ear/shownotes.mkd:3\nAn_overview_of_the_ack_command/shownotes.mkd:6
\n

The sequence \'\b\' in Perl regular expressions is a\nboundary such as a word boundary. So the pattern is looking for the word\n\'ear\' as opposed to the characters \'ear\' (as\nin \'pearl\' for example).

\n

Note how the single-letter options -l, -c\nand -i can be concatenated.

\n

3. Searching for words in\na simpler way

\n

In example 2 the \b boundaries ensured the pattern\nmatched words rather than letter sequences. This can be simplified by\nusing the -w option:

\n
$ ack --markdown -lci -w 'ear'\nHacking_my_inner_ear/hpr2109_full_shownotes.mkd:11\nHacking_my_inner_ear/shownotes.mkd:3\nAn_overview_of_the_ack_command/shownotes.mkd:6
\n

Links

\n\n\n\n
\n',225,11,1,'CC-BY-SA','search,grep,regular expression,Perl',0,0,1); +(3909,'2023-07-27','Permission tickets. ',688,'Collective delusions of elective conclusions. ','

No special knowledge nor resources.
\nThis is a preview show for some future, self referential tangle of\ncryptographic distraction.

\n

So far, I see money as some social credit by proxy.
\nI recognise the utility of keeping track of resource recipes.
\nI also see dangers in over abstracting relations beyond robustly\nprovable outcomes.

\n',398,0,1,'CC-BY-SA','ledger,cryptographic,consensus,permission,integrity',0,0,1), +(3911,'2023-07-31','An overview of the \'ack\' command',1255,'A Perl-based \'grep\'-like tool that can search by file type','
\n

Introduction

\n

I have occasionally been using a tool called ack for a\nfew years now. It’s billed as “an alternative to grep for\nprogrammers”.

\n

There are several features I find particularly useful:

\n\n

It is a very comprehensive and useful tool, though maybe quite\ncomplex to use. Personally I use it in special cases where I need its\npower, and otherwise use the usual grep.

\n

In this episode I will give you the flavour of its capabilities and\notherwise leave you to research more if it sounds interesting.

\n

Installing ack

\n

The tool can be found in repositories. I use Debian, and\nack is in the Debian repo and can be installed with:

\n
sudo apt install ack
\n

Installing it this way the version I have (and am describing here) is\n3.6.0. There is a new version, 3.7.0 available from the website.

\n

The documentation on the website suggests installing it as a Perl\nmodule using CPAN, which is something I will do soon I\nthink.

\n

Perl regular expressions

\n

These are very sophisticated.

\n

A project to convert the Perl regular expression capabilities into a\nportable library form was undertaken by Philip Hazel of Cambridge\nUniversity in 1997, and was called Perl Compatible Regular\nExpressions or PCRE.

\n

Philip Hazel was the originator of the exim mail\ntransfer agent (MTA, or mail server), and wanted to use PCRE within\nit.

\n

Since then PCRE (and later PCRE2) is the way regular expressions are\nimplemented in a lot of other software, which shows how widespread use\nof the Perl RE has become.

\n

The ack documentation refers to the Perl manual for\ndetails of this type of regular expression, and to a tutorial, if you\nwish to gain a deeper understanding.

\n

It should be noted that GNU grep can use Perl compatible\nregular expressions when matching lines in files, but this feature is\nmarked as experimental.

\n

File types

\n

The ack command has rules for recognising file types. It\ndoes this by looking at the name extensions (\'.html\' or\n\'.py\' for example), and in some cases by examining their\ncontents. The complete list of types can be found by running:

\n
ack --help-types
\n

… or, for a more detailed but less readable list:

\n
ack --dump
\n

Some examples are:

\n\n

These names can be used with the options -t TYPE and\n--type=TYPE and also by simply preceding them with two\ndashes (--TYPE). There are also ways of requesting files\nnot of a given type: -T TYPE, --type=noTYPE\nand --noTYPE.

\n

To check files in the current directory of type shell an\nack command like the following might be used and the\nfollowing type of output produced:

\n
$ ack --shell declare\nBash_snippet__using_coproc_with_SQLite/examples/coproc_test.sh\n11:declare -a com=('date +%F' 'whoami' 'id' 'echo "$BASH_VERSION"'
\n

Note that ack reports the file path and numbered lines\nwithin it that match.

\n

You can add your own file types to ack. There is a\nconfiguration file called .ackrc in which new types can be\ndeclared. See below for more information.

\n

The file type feature is one that makes me use ack again\nand again.

\n

The .ackrc file

\n

This file contains “command-line options that are prepended to\nthe command line before processing”.

\n

It’s a useful way to add new types (or even modify existing\nones).

\n

It can be located in a number of places. Mine is\n~/.ackrc with other configuration files in my home\ndirectory.

\n

It’s possible to generate a new .ackrc with the option\n--create-ackrc. This saves all the default settings in the\nfile which makes it simple to adjust anything you need to change.

\n

As an example of a change, I have Markdown files with the extension\n.mkd. However, by default ack only recognises\n.md, and .markdown. To add .mkd\nto the list I can add one of the following to the\n.ackrc:

\n
# Either add `.mkd` to the list\n--type-add=markdown:ext:mkd\n# or replace the list with a new one\n--type-set=markdown:ext:md,mkd,markdown
\n

Note that lines beginning with # are comments. Note also\nthat --type-add and --type-set have to be\nfollowed by an = sign, not a space in this file.

\n

If you examine the settings with ack --dump you will see\nthe default command and the one you have added. If you use\nack --help-types you will see the new extension added to\nthe default list.

\n
markdown     .md .markdown; .mkd
\n

If I use this to search files in the directory where I keep my HPR\nepisodes I see:

\n
$ ack --markdown 'inner ear'\nHacking_my_inner_ear/hpr2109_full_shownotes.mkd\n24:became fascinated by the structure of the human [inner ear][2], and studied it\n28:The human inner ear performs two major functions:\n.\n.\n.
\n

Quick review of selected\nack options

\n

Usage

\n

The ack command is designed to be similar in as many\nrespects as possible to grep. The command is used in\ngeneral as follows:

\n
ack [OPTION]... PATTERN [FILES OR DIRECTORIES]
\n

The [OPTION] part denotes any options (some discussed\nbelow) and PATTERN is the PCRE search pattern. There are\nsome cases where this must be omitted - such as when files of a\nparticular type are being listed. See example 1 below for such a\ncase.

\n

In some cases a particular file is being searched, or all files in\ncertain directories, and that is what\n[FILES OR DIRECTORIES] denotes.

\n

The full documentation for ack can be seen with the\nusual man ack command, and also using\nack --man. There is also an option --help\nwhich gives a summary of all of the available options.

\n

Options

\n

There are many options specific to ack and some in\ncommon with grep, and we’ll look at just a few here:

\n\n

Examples

\n

1. Find all Markdown\nfiles in a directory

\n

Using the -f option:

\n
$ ack --markdown -f Nitecore_Tube_torch/\nNitecore_Tube_torch/README.mkd\nNitecore_Tube_torch/container.mkd\nNitecore_Tube_torch/index.mkd\nNitecore_Tube_torch/shownotes.mkd
\n

Using the -g option:

\n
$ ack -g '\.mkd$' Nitecore_Tube_torch/\nNitecore_Tube_torch/README.mkd\nNitecore_Tube_torch/container.mkd\nNitecore_Tube_torch/index.mkd\nNitecore_Tube_torch/shownotes.mkd
\n

2. Names\nof files that contain a match, with a match count

\n

Using the -l and -c options:

\n
$ ack --markdown -lci '\bear\b'\nHacking_my_inner_ear/hpr2109_full_shownotes.mkd:11\nHacking_my_inner_ear/shownotes.mkd:3\nAn_overview_of_the_ack_command/shownotes.mkd:6
\n

The sequence \'\b\' in Perl regular expressions is a\nboundary such as a word boundary. So the pattern is looking for the word\n\'ear\' as opposed to the characters \'ear\' (as\nin \'pearl\' for example).

\n

Note how the single-letter options -l, -c\nand -i can be concatenated.

\n

3. Searching for words in\na simpler way

\n

In example 2 the \b boundaries ensured the pattern\nmatched words rather than letter sequences. This can be simplified by\nusing the -w option:

\n
$ ack --markdown -lci -w 'ear'\nHacking_my_inner_ear/hpr2109_full_shownotes.mkd:11\nHacking_my_inner_ear/shownotes.mkd:3\nAn_overview_of_the_ack_command/shownotes.mkd:6
\n

Links

\n\n\n\n
\n',225,11,1,'CC-BY-SA','search,grep,regular expression,Perl',0,0,1), +(3912,'2023-08-01','Emergency Show: Biltong and Rooibos',233,'Shane brings us a taste of South Africa with some local tea and jerky','

Biltong
\nFrom Wikipedia, the free encyclopedia

\n\n

Biltong is a form of dried, cured meat which originated in Southern African countries (South Africa, Zimbabwe, Malawi, Namibia, Botswana, Eswatini and Zambia). Various types of meat are used to produce it, ranging from beef to game meats such as ostrich or kudu. The cut may also vary being either fillets of meat cut into strips following the grain of the muscle, or flat pieces sliced across the grain. It is related to beef jerky; both are spiced, dried meats; however the typical ingredients, taste, and production processes may differ.

The word \"biltong\" is from the Dutch bil (\"buttock\") and tong (\"strip\" or \"tongue\").

\n\n
\n\n

Rooibos
\nFrom Wikipedia, the free encyclopedia

\n\n

\nRooibos, meaning \"red bush\"), or Aspalathus linearis, is a\nbroom\n-like member of the plant family\nFabaceae\n that grows in\nSouth Africa\n\'s\nfynbos\n biome.\n\n

\n

The leaves are used to make a\nherbal tea\n that is called\nrooibos\n (especially in Southern Africa),\nbush tea\n,\nred tea\n, or\nredbush tea\n (predominantly in Great Britain).\n\n

\n

The tea has been popular in\nSouthern Africa\n for generations, and since the 2000s has gained popularity internationally.\nThe tea has an earthy flavour that is similar to\nyerba mate\n or\ntobacco\n.\n

\n

Rooibos was formerly classified as\n\nPsoralea\n\n but is now thought to be part of\n\nAspalathus\n\n following\nDahlgren\n (1980).\nThe\nspecific name\n of\nlinearis\n was given by\nBurman\n (1759)\nfor the plant\'s linear growing structure and needle-like leaves.\n\n

\n

\n\n\n\n

\n\n',250,0,0,'CC-BY-SA','South Africa,Biltong,Rooibos,Afrikaans',0,0,1), +(3913,'2023-08-02','Lurking Prion Q and A',316,'Lurking Prion answers questions about his name, former career field as an MM','

Add to reserve queue

\n

Lurking Prion answers questions about his name, former career field as an Machinist\'s mate, and breaks down a short bio of his security path thus far.

\n\n',405,74,1,'CC-BY-SA','bio,backgrown,questions,mm,Machinist\'s mate',0,0,1), +(3914,'2023-08-03','how to deal with blisters',262,'a technique my father taught me, for dealing with blisters','

Many years ago, my father taught me how to deal with blisters using a\nneedle and thread.

\n',399,0,0,'CC-BY-SA','first aid',0,0,1), +(3915,'2023-08-04','Why the hell is my audio clipping?',802,'MrX has audio that is clipping but will he be able to fix it?','

This is an emergency show as we are short of shows. I was going to do\nthis show anyway as I noticed my audio was clipping on the last few\nshows I sent in yet I didn\'t notice it on the files I sent to HPR.

\n

In this episode I waffle a bit and read out some of the stuff on the\nHPR site about giving shows. During the recording I introduce increasing\namounts of attenuation each decrease in volume signified by a gong. I\nhope this will allow me to stop the clipping from my audio.

\n',201,0,1,'CC-BY-SA','audio, podcasting, Audacity',0,0,1), +(3917,'2023-08-08','Response to \"Permission Tickets\" by oneofspoons',408,'Hopefully a useful provocation, in response to a recent intriguing show by another HPR host','

A response show to oneofspoons\' hpr3909 ::\nPermission Tickets\".

\n

Reference: Harper\'s\nPodcast -The Writers’ Strike, or: the Writers Strike

\n',399,0,0,'CC-BY-SA','crypto',0,0,1); /*!40000 ALTER TABLE `eps` ENABLE KEYS */; UNLOCK TABLES; @@ -20912,4 +20953,4 @@ UNLOCK TABLES; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2023-07-28 7:42:10 +-- Dump completed on 2023-07-31 7:11:09