Skip to content
Artwork for Hacker Public Radio
TechnologyTech NewsEducationExplicit

Hacker Public Radio

Hacker Public Radio

Hacker Public Radio is an podcast that releases shows every weekday Monday through Friday. Our shows are produced by the community (you) and can be on any topic that are of interest to hackers and hobbyists.

Play
  • 61 episodes
  • daily
  • English
Counted on this page — what you have heard stays on this device, so it is not something the list can be paged by.
  • Today · length unknown

    HPR4755: Blender

    This show has been flagged as Explicit by the host. Blender - https://www.blender.org/ Python - https://www.python.org/ Anthropic Claude - https://claude.ai Linden Lab SecondLife - https://secondlife.com/ Go Language - https://go.dev/ Apologies for squirrels and silliness, no mystical middle-earth beings were harmed in the making of this episode Provide feedback on this episode.

  • Yesterday · length unknown

    HPR4754: BruCon interviews part2: Lockpicking

    This show has been flagged as Clean by the host. TOOOL T he O pen O rganisation O f L ockpickers https://toool.nl/Toool MIT Guide to Lock Picking: https://www.lockwiki.com/index.php/MIT_Guide_to_Lock_Picking Provide feedback on this episode.

  • Wednesday · length unknown

    HPR4753: HPR Beer Garden 22 - Bitter

    This show has been flagged as Clean by the host. With Tuxjam Half-cut in Manchester now just a memory, the trio fo Kevie, Dave and Paul sample the classic English beer style known as Bitter. Kevie tries out Chiltern's Beechwood Best Bitter , Dave samples Morrison's Original Bitter and Paul opts for Boddingtons Draught Bitter . Connect with the guys on Untappd : Dave Paul Kevie The intro sounds for the show are used from: https://freesound.org/people/mixtus/sounds/329806/ https://freesound.org/people/j1987/sounds/123003/ https://freesound.org/people/greatsoundstube/sounds/628437/ The next 3 beer styles to be reviewed: Pale Ale Trappist Dunkel Provide feedback on this episode.

  • Tuesday · length unknown

    HPR4752: Static Addict Episode 2: Metal Machine Music

    This show has been flagged as Explicit by the host. Digital Release (can also be found on youtube and Spotify) https://tidal.com/album/50021 Physical Release (can also be found on Ebay and Amazon) https://www.discogs.com/master/44287-Lou-Reed-Metal-Machine-Music Sources Again, I'm a hack and I use Wikipedia https://en.wikipedia.org/wiki/Metal_Machine_Music Next Album I'm Reviewing https://dreamcrusher.bandcamp.com/album/incinerator-2013 Provide feedback on this episode.

  • Monday · length unknown

    HPR4751: Real Live AI Use Case

    This show has been flagged as Explicit by the host. No views Sep 11, 2026 #AI #ArtificialIntelligence #TechDemo Watch a real-world demonstration of AI in action. See how artificial intelligence is being applied to solve practical problems in everyday scenarios. CHAPTERS: 0:00 - Introduction 1:30 - Setting up the AI tool 3:45 - First use case demo 6:20 - Advanced features 8:50 - Results & takeaways 10:30 - Conclusion H@cker Public Radio: https://hackerpublicradio.org/corresp... Agent system prompt: https://github.com/freeload101/Protoc... PI Agent kagi_search Kagi Quick Search * you can adapt/refactor to anything like google : https://github.com/freeload101/Protoc... Uniview_API_IPC3628SR-ADF28KM-WP_get_Last.py https://github.com/freeload101/Python... HASHTAGS: Provide feedback on this episode.

  • October 16 · length unknown

    HPR4750: Playing Civilization VI Part 2

    This show has been flagged as Clean by the host. Civilization VI brought in one new Victory type, Religious, and made modifications to the other familiar types. So in thie episode we do a survey of different ways you can win this game. Playing Civilization VI, Part 2 Victory Types Another area with some changes from previous versions is Victory Types. Of course, some things stay the same. You can always win by building a big military and going on a rampage and wiping out all opposition. This never changes, and it can be a lot of fun. But the existing Victory types have received some modifications, and one brand new one, Religious victory, has been added. In this discussion I will assume you are at least up to the Gathering Storm expansion, since that has the latest Victory rules. Science Victory This is still basedon getting out to the stars, but the details have changed, Up to Civ V it was based on building or launching a spaceship, with Building being the major part of it. But in Civ 6 it is more based on achieving certain projects before anyone else. It all starts with researching Rocketry, then building a Spaceport, and then completing the Launch Earth Satellite project. But that is only Phase 1. You then need to research Satellites. And you might wonder why that isn’t necessary to research before you do the Launch Earth Satellite project. Well, the answer is they did it this way, so deal with it. Think of it as the difference between simply achieving a launch, like Sputnik, and developing the advanced satellite technologies like Remote Sensing, Communications, GPS, etc. In any case, once you have researched Satellites, you can do the Launch Moon Landing project. Then you research Nanotechnology, which lets you complete the Launch Mars Colony project. From there you research Smart Materials, and that lets you finish the Exoplanet Expedition project. This expedition then needs to travel 50 light years, and normally it travels one light year per turn, so you would need to wait 50 turns to win. Meanwhile, any other player could win while you are waiting. But you can speed up your expedition by building Laser facilities, some in orbit, others on Earth. While you obviously need to do a lot of research to get to these technologies, you also need a lot of Production to build the projects. So make sure you have a high production city and place your Spaceport there for maximum benefit. And make sure your enemies cannot take out your Spaceport. Culture Victory Although it is called a Culture victory, it is more technically a Tourism victory in terms of the mechanics. This is a fun Victory type to go after. What you want to do is make all of your cultural offerings so compelling that your own people would stay home rather than travel abroad, and so that you attract tourists from other players. Keeping your tourists home is your defense against other players, and attracting their tourists is your offense. If your number of tourists attracted from other players exceeds any other player’s domestic tourists, you become culturally dominant over them. And when you are culturally dominant over all other players you win a Culture victory. So how do you do this? Mainly by focusing on things tourists like to visit. This can be great works of Art, Writing, and Music, but it can also be things like National Parks and Seaside Resorts. And there are Policy cards that can increase your Tourism. Domination This should be simple, just build a lot military units and start laying waste, right? Well, of course isn’t that simple. While you are doing this you don’t want your future victims to gang up on you. The basic criterion for a Domination victory is that you control all of the original capitals of the original players, whether or not they are still in the game. Original capitals cannot be destroyed or plundered, but they can be captured. Now, capturing someone’s original capital is likely to cause harsh feelings on their part. But if Player A has captured player B’s original capital you can then conquer it without the same level of penalties. And there are penalties built in to the process. If you are viewed as a warmonger other players wil start to gang up on you. So what you want to do is never fight a 2-front war, to begin with. Only have one war going on at any time, and ideally allow a cooling off period after you capture the original capital. You want to keep the other empires on your side as much as possible. and a good way to do that is wait until you have a Casus Belli with them. This means they have done something to you that entitles you to righteous reaction. There are a number of them, but one my favorites is when they steal one of your technologies and are identified as the thief. That will give you a Casus Belli. If I would rather be at peace, I will usually ignore that, but if I wanted to go to war I would gratefully sieze the excuse. Also note, your objective is to get original capitals, not to wipe them out totally. Conquering the last city of another empire will give you major warmonger penalties. Religion This is another major change in Civilization VI. The whole Religion thing is completely new, and there is a Religion victory you can win. This is another fun victory type to experiment with. The victory condition is simple to state, you just need to have your religion be the majority religion in every empire still in the game. It is how you get there that makes this very interesting. Some of your religion spreads naturally from your cities to other cities nearby, but you can also create Missionary and Apostle units to speed up the process. But there is a defense to this as well. The other empire can create their own Missionary and Apostle units to evangelize against you. And they can engage in Theological Combat. This can only be initiated by Apostles and Inquisitors, but it can result in the losing unit being killed. Think of it as if they are calling on God to smite the devilish heathens and it actually happens. And in some circumstances when an Apostle is killed in theological combat a Holy Relic is created, and this can add to your Culture and Tourism. We’ll talk more about Religion and Theological Combat in a more detailed look at Religion in this game. Diplomatic This is a bit different from the Civ V Diplomatic victory. Instead of winning a vote in the World Congress/United Nations, you accumulate Diplomatic Victory Points. If you accumulate 20 Diplomatic Vicgtory Points you win the game. So where are these to be gathered? The first is that being on the winning side of a vote to Target or to cause an Outcome in the World Congress is worth 1 Diplomatic Victory Point for each such vote. Building certain Wonders. The Mahabohdi Temple is worth 2 points, the Potala Palace is worth 1 point, and the Statue of Liberty is worth 4! Since machinations in the World Congress can take away points, a good strategy is to get within 2-3 points of Victory and then complete the Statue of Liberty. Seasteads, a Future Era Tech, and Global Warming mitigation, a Future Era Civic, each are worth 1 point. Periodically you will get a chance to respond to an aid request from another player in the World Congress. If you provide the most aid, you get 2 points. Having a big Treaasury makes it a lot easier to pull this off. Score Should no player win by any of the above Victory types, the winner will be the person with the highest score. This doesn’t happen often, but it can happen. Changing Horses You should also be flexible. Circumstances can change as the game goes on, and the original Victory type you were aiming for is looking like bad bet. When that happens you should re-evaluate your options and perhaps pursue a different Victory type. And I have played games where a different Victory type just kind of happened. But any decision you make should be an informed decision, and the game interface is helpful here. In the upper right there are a few buttons, and one of them is called World Rankings. Clicking this button will tell you where you are versus your competitors for each of the Victory types. This is is a popup window that you should consult periodically as the game gets going. One thing you need to watch out for is that you might be leading for your planned Victory, but another player may be moving quickly to a different Victory. It is nice to be heading toward your Diplomatic Victory, but if one of your competitors is doing Space projects for a Science Victory that can be a bad thing for you. Of course, you can just play it for fun and not worry about who is winning, but I suspect most people would like to win a game after they have put in something like 10-12 hours playing Links https://civilization.fandom.com/wiki/Casus_Belli_(Civ6) https://civilization.fandom.com/wiki/Theological_combat_(Civ6) https://www.palain.com/gaming/civilization-vi/playing-civilization-vi-part-2/ Provide feedback on this episode.

  • October 15 · length unknown

    HPR4749: murph gives a presentation talk about Hacker Public Radio at the OLF conference

    This show has been flagged as Clean by the host. murph talks about Hacker Public Radio at the Open Libre Free Conference in Columbus, Ohio in December 2025. (Formerly Ohio Linux Fest) He has been a slacker, and took nearly a year to publish this. Special Thanks to Ken for getting the audio, and Archer72 for prodding me into doing it. The Open Libre Free Conference is a yearly conference that happens in the fall or Winter in Columbus, OH, and is a great community event that anyone with a hacker mindset would enjoy. https://olfconference.org Provide feedback on this episode.

  • October 14 · length unknown

    HPR4748: Programmable Logic Controls - Episode 5

    This show has been flagged as Clean by the host. -------------------- 01 Introduction This is the fifth episode in an 8 part series. 02 In the previous two episodes we looked at the Allen Bradley PLC 2 and the Siemens S5 series of PLCs. In those episodes we mentioned I/O modules, but didn't really go into any detail on them. Instead we looked at the CPU units and focused on things from the programmer's perspective. 03 In this episode we will look at the I/O modules, what they are, how they work, and the purpose that they serve in the system. In addition to this, I will discuss machine safety systems and also claims made by certain people about cyber security and industrial safety. -------------------- 04 What is I/O? First though, we must address the question of what I/O is. While the CPU module may run the program, in order for the program to do anything useful it must interact with the real world outside the PLC. It must sense the state of the machine it is controlling through inputs, and it must affect the operation of the machine through outputs. 05 A Simple Example Let's take a very simple example to try to make the above a bit more tangible. Assume that we wish to press two parts together, such as pressing a bearing into a housing. This is a very common industrial process. 06 Let us assume we have the following items which connect to the inputs. * An emergency stop circuit. * A safety system to protect the operator. * A part presence sensor used to detect that the housing was correctly placed in the tooling. * Another part presence sensor used to detect that the bearing was correctly placed in the tooling. 07 * A sensor which indicates the hydraulic cylinder is fully retracted. * Another sensor which indicates the hydraulic cylinder is fully extended and the part was fully pressed home. * A button which the operator uses to initiate the press cycle. * Another button which the operator can use to abort the press cycle in the event of a fault. 08 We also have the following items which connect to the outputs * A hydraulic valve with two solenoids (down and up). * A pilot light which tells the operator that the cycle was completed successfully and the part is good. * A pilot light which tells the operator that the cycle was not completed successfully and the part is bad. This gives us a total of 8 inputs and 4 outputs. 09 A typical very small PLC would be suitable for this application. The PLC program would look at the state of the inputs, and apply the necessary logic to turn the outputs on or off at the appropriate time. As you can see, what makes a PLC useful is its ability to control I/O. 10 Small PLCs typically have a limited amount of I/O built into the same package as the CPU and can be used as is right out of the box. Medium to large PLCs will interface to racks of I/O, and the number of I/O points can be in the dozens to hundreds and even the thousands. -------------------- 11 Types of I/O The above example is very simple. There are in fact many types of I/O. I will outline the most common ones here. 12 Digital I/O The first is "digital" I/O. This is overwhelmingly the most common type. Digital I/O are basic on-off signals. A digital input will detect if a switch is on or off. A digital output will turn a relay or valve on or off. 13 Digital I/O comes in three main types categorized by the type of electronic device used. These are * AC * Relay * DC 14 AC AC I/O was the earliest type, but has largely faded away by now. This works with 100 to120 VAC or 230 VAC. Inputs detect the presence or absence of these voltages, and outputs output these voltages when turned on. The relay logic that PLCs replaced was largely driven by these voltages, so being able to interface with existing systems was an important design consideration for early PLCs. 15 Relay Relay outputs were an alternative to triac devices used for solid state AC outputs. These were very small relays built into the output modules. Their main attraction was they were usually somewhat cheaper than solid state outputs. However, they suffered from being much less durable and had a shorter life. 16 DC By the 1980s and 1990s, AC and relay I/O had been largely replaced in new applications by 24VDC. This allowed for more compact and less expensive control wiring, and fewer electrical safety concerns. Both inputs and outputs worked with 24VDC. All of the standard sensors, solenoid valves, relays, push buttons, lights, and pretty much all other devices were designed to be compatible with 24VDC. In cases where you had large motor contactors or relays, or large solenoid valves which required higher voltages for practical reasons, an additional interposing relay could be used to amplify the control signal. 17 I/O modules or cards came in 8, 16, 32 point sizes, and there were modules which combined both inputs and outputs in a single module. -------------------- 18 Analogue I/O As well as simple on-off voltages, PLCs could also work with variable voltages, where the actual voltage or current represents a measurable value, such as temperature or dimension. These are known as analogue values. These can be inputs or outputs and are known as analogue inputs or analogue outputs. 19 The simplest is voltage. The most common standard voltage ranges are * 0 to 10V. * Plus or minus 10V. * 0 to 5V. * 1 to 5V. 20 Another type is current. This is where the amount of current rather than the level of the voltage is what is significant. Current has an advantage over voltage in that it is less affected by resistance losses in long wiring runs and is also less prone to being influenced by electrical noise due to the lower impedance. 21 The most common standard current ranges are 4 to 20 mA. 0 to 20 mA. 22 Another common type is thermocouple inputs. These have special circuitry built into them to interface with thermocouple devices, which are a common device used to measure temperature by measuring the voltage generated when two dissimilar metals are heated in contact with each other. -------------------- 23 Serial Communications A number of PLCs have serial communications ports, mainly used to interface with things like label printers or bar code readers. Some of these have even had basic interpreters built into them, mainly to allow for better string formatting or parsing. 24 Servo and Stepper Another category of I/O are servo and stepper motor controllers. 25 High Speed Counter Timer Another type are counter/timer modules, which allow for high speed counting of events, or very precise timing of events in hardware, or interfacing with rotary or linear encoders. Encoders are measuring devices which have a series of very small but precise marks which interrupt beams of light when they move, allowing measurements to be made. 26 Networking Many PLCs also support some sort of networking. I won't go into any detail on that here, but will instead address this area in another episode. However, network ports may be built into the CPU, or may reside in separate network I/O modules. 27 Specialty As well as the preceding there are many other specialty modules which I won't bother to describe here. -------------------- 28 Operator Panels The original operator panels were arrays of push buttons, pilot lights, and other basic operator controls mounted in boxes for an operator to interact with the machine. Later on these were replaced by specialty electronic devices which were also known as operator panels as they served the same function. 29 Modern operator panels are screens and keypads which are used to display information to an operator or to allow data to be entered into the PLC. While not strictly speaking a type of I/O, operator panels typically look like I/O to the PLC CPU. Buttons on a touch screen may be effectively the same thing as actual hardware buttons from the PLC's perspective, and analogue values output to the operator panel for display are like hardware analogue devices. 30 All of these data are mapped to memory locations in the PLC, with the details of how this is done varying according to the make and model of PLC. 31 I won't go into any detail on this as this could be a separate subject on its own. Generally though, you would use software to create screens to display on the operator panel. The indicators and buttons defined in your screens would be mapped to addresses in the PLC, either directly or indirectly. This configuration would then be downloaded into the operator panel. Your PLC program could then interact with the operator panel using ordinary ladder logic. -------------------- 32 Safety Systems Up to now I have mentioned only PLCs in any detail. There is however more to a complete machine control system than just a PLC. One of these is safety systems. 33 I will leave out historical safety systems and just focus on modern ones. I will also leave out large process industries involving things like boilers or chemical reactors and just focus on assembly operations in industries such as automobiles, appliances, and other similar things. This won't be a tutorial on safety design, just a very brief overview. 34 An industrial machine must be designed with safety as one of its fundamental design principles. If the machine cannot be operated safely, then it cannot be put into use. Safety must take into account the operators, bystanders, and maintainers. You must assume that people will be inattentive or make mistakes. 35 You must also assume that the PLC program will have bugs and that the electronics will fail in a state which could cause a hazard if it is permitted to. In other words, the PLC and your PLC program are not part of the safety system. 36 The safety system will decide when the PLC will be permitted to act and when it will not. The PLC in turn must monitor the safety system in order to understand when it can and cannot act. Your PLC program must take this into account so that it can differentiate between not being able to act because the safety system has decided it is not safe to cycle, versus there being something wrong with the machine which prevents it from operating. 37 A Few Basic Safety Devices Here are a few basic safety devices. I will not attempt to be comprehensive. Rather, I am just giving a few common examples so that you will understand the environment in which the PLC can operate. 38 Emergency Stop Circuit A basic element of nearly all industrial machines is some sort of emergency stop circuit. When the "on" button is pressed, a relay will close and hold itself on. This will enable power to the machine, including the compressed air supply if there is one. If the "stop" or "e-stop" button is pressed, the relay will open and remove energy from the machine, rendering it safe. If the electrical power supply to the machine goes off, due to for example the building losing electrical power, the emergency stop circuit will also "drop out" or open, and remain off until the start button is pressed again. 39 While every, or nearly every, machine will have an emergency stop circuit, is it often not sufficient on its own. In other words, it is necessary, but not always sufficient. 40 Guard Switches Equipment hazards must be enclosed by protective guarding. Movable guards, such as access doors, must be interlocked with the safety circuit such that when the guard is opened, the machine is rendered safe. To achieve this, there will be safety rated switches on each access door which are connected to the safety circuits of the machine. 41 Two Hand Control Another common safety circuit is two hand control, often called "anti tie down", although that latter phrase actually describes one of the design principles rather than being the proper name. With two hand control, the operator station will have two large buttons which the operator must press simultaneously and hold to enable the machine to operate. 42 With both hands on the buttons, you know where the operator's hands are. The operator must remove both hands from the buttons in order to enable the circuit again. If one button remains closed and the operator attempts to activate the machine again with the other button, then the safety system will detect this and refuse to enable the machine again until both buttons are de-activated. 43 This is the "anti tie down" feature. The operator cannot tie one button down and cycle the machine repeatedly with just the other button. The buttons will be connected to a special relay which monitors and self tests to ensure it operates correctly. 44 The PLC will monitor an auxiliary contact on this relay so that it knows when to start its sequence of operation, but the redundant safety contacts on the relay lie in between the PLC and whatever hazards are being guarded against. The safety device has ultimate control over whether the machine moves or not. 45 Light Curtain Another basic safety device is the light curtain. This has a series of closely spaced light beams across the opening which forms the operator's access to the working area of the machine. 46 If any of these light beams is interrupted, the light curtain controller will not permit the machine to move. Light curtains can usually be used in places where two hand control systems can be used. They have an advantage over two hand control in that the operator can be performing other tasks while the machine is cycling instead of being occupied with holding the two hand control buttons down. This allows for productivity improvements which can usually more than pay for the higher cost of the light curtain compared to simple two hand control. 47 Other Devices There are many other safety devices, many of which address niche applications. I won't bother listing any more than I have so far however, as you should understand the basic principles by now. 48 Safety PLCs There are special safety PLCs which have redundant CPUs which monitor one another, and which have redundant mutually interlocked I/O, and which run safety reviewed software. Anything connected to a safety PLC must itself be safety rated if it could affect the safety of the machine. However, these are quite rare and are only used in certain special industries. 49 These are normally used in places where some programmed sequence of operations is required to render a system safe. This is more commonly found in places such as oil refineries, chemical plants, or electric power generating plants than in typical factories. -------------------- 50 Safety and Cyber Security This is a good place to bring up the question of safety and cyber security. There have been a number of articles in the IT press recently about how PLCs could be indirectly affected by computer viruses and how this could cause dangerous safety problems in manufacturing equipment. 51 The premise is that they found security holes in software which runs on personal computers running Windows operating systems which are used to do things like record production data. There are a number of software systems which are designed for this purpose, although SCADA systems are usually the ones mentioned. 52 I will briefly describe SCADA systems in a later episode. For our purposes here however, just understand it as specialized industrial software that runs on a PC and conducts monitoring and display using data from a PLC that it is networked to. 53 According to these security researchers, a virus could exploit these security holes to send commands to the PLC and cause it to do arbitrary things which could cause injury or death. The PLCs being referred to in this instance are ordinary PLCs, not safety PLCs. 54 I find these claims to be highly implausible for the reasons that I have stated above when describing safety systems. An ordinary PLC is not a safety device, and so the safety of the machine should not be affected by a malfunctioning PLC, regardless of whether any viruses were involved or not. 55 I have seen PLCs malfunction due to memory corruption errors, but these posed loss of production problems, not safety problems. A malfunctioning PLC may cause property damage to the machine and loss of money, but the control system, of which the PLC is only a part, should not permit it to pose a hazard to personnel. 56 I have not seen any of these security researchers offer any plausible mechanism by which their claims of safety problems may be realized. As a result of this, I take all such claims with a very, very, very, large grain of salt. -------------------- 57 Conclusion In this episode we looked at the I/O modules, what they are, how they work, and the purpose that they serve in the system. In addition to this, we discussed machine safety systems and also claims made by certain people about cyber security and industrial safety. 58 In the next episode I will cover networking, including a detailed look at one industrial network protocol, called Modbus. 59 This has been the fifth episode in an 8 part series. -------------------- Provide feedback on this episode.

  • October 13 · length unknown

    HPR4747: UNIX Curio #13 - Replacements for cat

    This show has been flagged as Clean by the host. This series is dedicated to exploring little-known—and occasionally useful—trinkets lurking in the dusty corners of UNIX-like operating systems. Thirteen is one of my favorite numbers, so I am going to use this episode to indulge myself. As part of UNIX Curio #8 ( HPR episode 4657 ), I went on a little flight of fancy and suggested that the comm utility could be used in place of cat . On further reflection, I realized that there are quite a few utilities that can do that job, almost. This episode is the result of me investigating how many possible ways there are to replace that functionality with standard utilities. Imagine that some prankster has deleted the cat utility from your machine, and you need a way to restore that capability without re-installing it. I should warn you that as opposed to the rest of the series, this episode will not focus heavily on obscure tools, and it is unlikely the examples given will be very useful. Also, I am not going to dive into the history of any of these commands. However, you might still learn something, and it could be a little entertaining to hear about the ways some utilities can be twisted to this purpose. Let's start by reviewing what the functionality of cat [1] is. Under POSIX, all it does is read the data provided on standard input or from each file named as an argument, and writes it to standard output. Briefly, it con cat enates all of the entries. The only option required by the standard is -u , which causes cat to write data without any delay (if that option were not given, the program could choose to buffer the data). While many implementations offer additional options that modify the output, I am going to completely ignore them and just focus on that one job. The files named as arguments are processed in the order in which they are named. One or more of these can be - , in which case cat will use the data provided on standard input and then continue to the next file in the argument list. I will actually narrow things even further and allow discussion of cases where only one file is involved, or where cat is reading from standard input via redirection from a file. I will start off with the TL;DR conclusion—none of the standard utilities are able to fully duplicate its functionality on their own. Some of them come close, but can't quite be relied on in all respects. One important reason for this lies with the POSIX definition of a text file [2]. This is a file treated as being separated into lines, divided by newline characters. There are three limitations: none of the lines can contain a NUL byte (value 0), the lines cannot exceed the maximum line length defined by the system (required to be at least 4096 bytes including the trailing newline), and the file must end with a newline character. (The last rule is implied by the definition of "line" , which states a newline must appear at the end of a line.) It might seem strange, but a text file may contain non-ASCII data; the only restriction on the values of bytes is that they cannot be NUL. Many of the standard utilities are only required to operate on text files and therefore cannot necessarily be relied on to handle arbitrary data. While a particular implementation might not have these limitations, there is no guarantee of that. I should note that both cut and paste are only required by POSIX to operate on text files, but with the exception that the lines can be of any length. In addition to cat , the only utilities covered in this episode that are required by POSIX to handle any arbitrary file are dd , tail (when used with the -c option), tee , tr , and uuencode . The wording for the compress utility does not specifically say it must handle any file, but in practice I think this is true. However, all of these utilities have at least one limitation of their own: they cannot handle more than one file or they can only operate on standard input. Some other utilities are able to deal with multiple files, standard input, or both, but those are only required to operate on text files. In practice, this typically means that if an input file does not end with a newline character, the program will add one to the output, destroying the idea that the output of cat should be identical to the input. Let's start with the least-capable options and work our way towards those that could serve as closer drop-in replacements. The first candidate is a utility that I thought might be persuaded to work, but it doesn't quite. This is nl , a command used to number lines of files or standard input [3]. It normally prints the content of this input and, on the left, prints the number of each line. It is possible to turn off the numbering, and to set the separator between the numbers and the text to a null string. However, it does not seem to be possible to have absolutely nothing appear in front of each line. The POSIX specification states that the -w option can be given to define how many characters to the left of each line will be reserved for the line numbers—while the default value is six, it says nothing about what values must be accepted. I tested several implementations (specifically, from GNU, FreeBSD, NetBSD, and OpenIndiana, which is an open-source derivative of System V) and none of them allow setting the width of the space for line numbers to be less than one. Even if it were possible to remove the preceding space entirely, POSIX only requires nl to accept one file argument and to operate on text files, so it would still be limited. In the examples for this episode, myfile is used to represent the name of the file being operated on. The text myfile ... means a filename possibly followed by other filenames (with no limitation on the number). The nl example below prints a single space in front of each line. nl -b n -s "" -w 1 myfile Next up are methods that actually work, but are only usable with standard input. When combined with input redirection from a file, they can accept a single file and send it to standard output. The read utility [4] takes a line of input and assigns it to a shell variable. It requires a little help, however—it can't output what it reads, so it has to be paired with something like echo or printf . Because it reads input one line at a time, it needs to be used in a loop to read the entirety of the data. In addition, the IFS shell variable must be set to a null string to prevent read from doing field splitting; we don't want it to modify the data being read at all. The shell loop while IFS="" read -r foo; do echo "$foo"; done < myfile will do the job, except that read is only required to handle text files. It is not clear to me whether POSIX allows the shell to have a limit on how much data can be stuffed into a variable; if it does, that could be a problem even if your implementation of read can handle lines longer than the maximum length. The tr utility [5] is another one that only works with standard input. It takes the input, replaces any characters in the first string argument with the corresponding characters in the second string argument, and sends the result to standard output. If the first and second strings are the same, such as tr a a < myfile , it will behave like cat . The tee command [6] also fits into this category. It copies standard input to standard output, just like cat does. It also sends a copy to any filename arguments given. If none of these are present, it just passes the data through untouched. You could use tee < myfile to print a file. Be careful, however, not to enter your filename as an argument (as in tee myfile ), as that will cause it to be overwritten! The good news with both tr and tee is that they aren't limited to working with text files. Let's now consider a couple of options that only work on a file, not with standard input. In addition, they can only handle one single file. This might seem to defeat the purpose of cat , which can combine multiple files, but cat is often used with only one file. These are ed [7] and ex [8], two text editors. By feeding them the right command sequence on standard input, they can be convinced to output the entire file and then exit. The appropriate invocations would be printf '%s\n' '1,$p' Q | ed -s myfile and printf '%s\n' '1,$p' 'q!' | ex -s myfile . The POSIX specification for ex indicates that more than one filename can be given as an argument. I attempted to take advantage of this with the command line while true ; do printf '%s\n' '1,$p' 'n!' ; done | ex -s myfile ... , which should print the first file named as an argument to standard output and move to the next one. In my reading of the specification, once the last file has been printed, the n! command (meaning "next") should result in an error, causing the program to exit. However, the implementations that I tested don't exit and just stay on the last file, printing it out endlessly. Perhaps I'm misunderstanding how ex works, but regardless, both it and ed are only required to handle text files, so can't completely serve in place of cat anyway. The following category of replacements is capable of using either standard input or a file, but they can only work with one file. Let's start with comm [9], which was responsible for me exploring this question. The command comm myfile /dev/null will send myfile to standard output. If you want to use standard input instead of a file, you need to replace the first filename with a hyphen (as in comm - /dev/null < myfile ). The paste utility [10] works similarly. It can only be used with one file because if more are given, it will try to interleave the lines of these files together. Another possibility is tail [11]. When used with the -c +1 option, it outputs the entirety of the file. Unlike other implementations I tried, the NetBSD version of tail is capable of taking multiple filenames as arguments. However, in that case, it precedes the content of each file with the filename like head does, so doesn't produce a clean copy. The sort utility [12] used with the -m option, which I talked about in UNIX Curio #11 ( HPR 4687 ), can also do the job. All of these are only required to handle text files by POSIX except tail , which must handle any arbitrary file when the -c option is used. One more utility that can take either one file or standard input is dd [13]. It is a bit different from these others in a couple ways. First, it writes statistics about the data processed to standard error, so you would need to redirect that to /dev/null to replicate the behavior of cat . To use standard input, no arguments are needed. The syntax for arguments is unusual compared to other UNIX utilities; for this purpose, dd if=myfile 2>/dev/null would be the command to use. The compress [14] and uuencode [15] utilities are in the same category, but do a lot more processing on the data along the way. The purpose of these is described respectively in UNIX Curios #7 ( HPR 4647 ) and #1 ( HPR 4587 ). Their output can be piped into a corresponding uncompress or uudecode utility to get back the original data and send it to standard output. The two commands would be compress -c myfile | uncompress -c and uuencode myfile /dev/stdout | uudecode —if you wanted to use standard input instead, just omit the filename arguments. I should point out that when I tested the uuencode method on FreeBSD 15.0, it didn't work; however, it did work on NetBSD 10.1 and OpenIndiana 2025.10. Next, we have two possibilities that come very close, but don't quite behave exactly like cat . They send to standard output either the files named as arguments in order, or, if there are none, standard input. However, POSIX does not require them to take a hyphen as an argument, representing standard input. First up, we have sed [16]; when called with an empty script (as in sed "" myfile ... or sed :a myfile ... ), it just prints out the contents without any transformations. The grep utility [17] works the same way—when given an empty regular expression (as in grep "" myfile ... ), it treats that as matching anything and prints each line of input to standard output. Finally, we have arrived at the utilities that can fully replace cat , albeit only for text files. They can be given one or more files, including a hyphen representing standard input, and will output them in the order they are given as arguments. If no filename arguments are given, they just use standard input instead. Starting out, we have awk [18]. While an empty pattern matches every line of input and an empty action prints the entire line, POSIX states that if both the pattern and action are empty, the utility is to simply exit without reading or writing anything. Therefore, we need to at least provide a pattern or an action—a pattern, as in awk "/.*/" myfile ... , can be shorter. Another one that has the capabilities is cut -b 1- myfile ... [19]. However, as noted earlier, these will add a newline character if the input doesn't already end with one, so they aren't exact replacements. I was hoping that a simple invocation of one of the standard utilities could be used in place of the cat program that our prankster has deleted; however, I think I've demonstrated that isn't possible. Let's return to those utilities that can handle arbitrary files, but can't take more than one at a time. It would be possible to write a shell script to manage any options and arguments, then use the utility to do the actual work of sending through the data file by file. In my view, tail would be the best fit because it can take a bare filename as an argument and, unlike dd , uses the standard syntax for UNIX utilities. The following script does just that—unfortunately, it is not really something simple that could be typed in from memory. So probably it would be easier in most situations to just re-install cat on your system instead of looking up this script, typing it in, and saving it where cat used to be. #!/bin/sh # Exit if any option other than -u is given; 'getopts' will issue an error # message. We don't actually do anything different if -u is given. while getopts u catopt do if [ "X$catopt" != "Xu" ] then exit 1 fi done # Reset the positional parameters to remove any options given. shift $(($OPTIND - 1)) case $# in 0) tail -c +1 ;; *) for fname do case "$fname" in -) # Single hyphen represents standard input, same as with no arguments. tail -c +1 ;; *) # The -- ensures that $fname will be treated by 'tail' as an argument, # not an option. tail -c +1 -- "$fname" esac done esac It might be tempting to implement this substitute as an alias or a shell function rather than as a script, but those only exist in the current shell execution environment (and its subshells) and are not inherited by utilities and scripts run by you or others. So the easiest way to get it to be used by other scripts such as cron jobs would be to save a copy of it on your system where cat normally lives, making sure that the "execute" file mode bits are set . There are certainly other widespread tools, such as Perl, that could also be used in place of cat . However, I wanted to focus only on utilities that are so ubiquitous that they appear in the POSIX standard. It should be noted that even some of these, such as compress and uuencode , aren't always present on modern systems. References: Cat specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html Definitions: Text File https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403 Nl specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nl.html Read specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html Tr specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html Tee specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/tee.html Ed specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ed.html Ex specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html Comm specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/comm.html Paste specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/paste.html Tail specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/tail.html Sort specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html Dd specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/dd.html Compress specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/compress.html Uuencode specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html Sed specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html Grep specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html Awk specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html Cut specification https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html Provide feedback on this episode.

  • October 12 · length unknown

    HPR4746: Monotone

    This show has been flagged as Clean by the host. Python and its libraries 1. librosa — loading and resampling audio def load_audio(path): y, sr = librosa.load(path, sr=SR, mono=True) return y, sr Every episode, regardless of its original sample rate or channel count, gets loaded down to a single mono stream at 16kHz (SR = 16000). That's one line of librosa, resampling, and folding stereo to mono. It made every downstream tool (VAD, pitch tracking, MFCC extraction) operate on a consistent, predictable input regardless of what an MP3 encoder or podcast host originally used. 2. parselmouth (Praat bindings) — pitch and voice-quality tracking def pitch_and_hnr(y, sr): snd = parselmouth.Sound(y, sampling_frequency=sr) pitch = snd.to_pitch(time_step=PITCH_TIME_STEP, pitch_floor=PITCH_FLOOR, pitch_ceiling=PITCH_CEILING) f0 = pitch.selected_array["frequency"] times = pitch.xs() try: harmonicity = snd.to_harmonicity_cc(time_step=PITCH_TIME_STEP) hnr = np.array([harmonicity.get_value(t) for t in times]) hnr = np.nan_to_num(hnr, nan=-999.0) exceptException: hnr = np.full_like(f0, 999.0) # fail open if HNR extraction errors return f0, hnr, times parselmouth is a Python wrapper around Praat, the standard tool in phonetics research. This is the heart of the whole vocal-monotony measurement: to_pitch() gives fundamental frequency (F0, roughly "pitch") every 20ms, and to_harmonicity_cc() gives harmonics-to-noise ratio (HNR) at the same timestamps — a signal-quality score used later to throw out pitch estimates taken from noisy or badly-compressed audio rather than let bad audio masquerade as "flat" pitch. 3. webrtcvad — deciding which frames are actually speech def vad_speech_mask(y, sr, aggressiveness=2): vad = webrtcvad.Vad(aggressiveness) pcm16 = (np.clip(y, -1.0, 1.0) *32767).astype(np.int16) n_frames =len(pcm16) // VAD_FRAME_LEN mask = np.zeros(n_frames, dtype=bool) for i inrange(n_frames): chunk = pcm16[i * VAD_FRAME_LEN:(i +1) * VAD_FRAME_LEN] raw = struct.pack("%dh"%len(chunk), *chunk) try: mask[i] = vad.is_speech(raw, sr) exceptException: mask[i] =False return mask, times webrtcvad is the voice-activity detector out of Google's WebRTC project — a frame-by-frame classifier ("is this 30ms chunk speech or not"). It needs raw 16-bit PCM bytes, not floats, hence the np.clip and struct.pack conversion. 4. librosa.feature — telling music apart from speech flatness = librosa.feature.spectral_flatness(y=y, hop_length=hop)[0] chroma = librosa.feature.chroma_stft(y=y, sr=sr, hop_length=hop) onset_env = librosa.onset.onset_strength(y=y, sr=sr, hop_length=hop) ... chroma_diff = np.mean(np.linalg.norm(np.diff(chroma_win, axis=1), axis=0)) chroma_stability =1.0/ (1.0+ chroma_diff) ... scores[w] =0.4* chroma_stability +0.35* periodicity +0.25*min(flat_mean *3, 1.0) Podcast intros/outros are often music, and music has a very different pitch profile than speech — including it would bias the "monotone" measurement. Rather than train a classifier, three librosa features were combined with hand-tuned weights: spectral flatness (music tends to have more tonal structure, less noise-like spectrum), chroma stability (sustained harmony vs. constantly-changing speech formants), and onset periodicity (a regular beat vs. speech's irregular rhythm). 5. librosa.feature.mfcc + sklearn.cluster.KMeans + sklearn.metrics.silhouette_score — an unsupervised speaker-count attempt mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13, hop_length=hop) ... chunk_vecs.append(np.concatenate([seg.mean(axis=1), seg.std(axis=1)])) ... X = np.array(chunk_vecs) X = (X - X.mean(axis=0)) / (X.std(axis=0) +1e-9) best_k, best_score =1, -1.0 for k inrange(2, min(MAX_SPEAKERS, len(X) -1) +1): labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X) iflen(set(labels)) <2: continue score = silhouette_score(X, labels) if score > best_score: best_k, best_score = k, score estimated = best_k if best_score >= SILHOUETTE_MIN else1 MFCCs (Mel-frequency cepstral coefficients) summarize the shape of a short audio window's spectrum — a rough "voice fingerprint" widely used in speech tasks. The idea: chop each episode into 2-second chunks, turn each into a fingerprint vector, standardize (z-score) the features, then use KMeans to see if the chunks naturally split into 2+ clusters (different voices) rather than 1 (a single voice throughout). silhouette_score scores how well-separated the clusters are, and picks the best k — or falls back to "1 speaker" if no clustering clears a minimum quality bar. This part of the investigation did not work, as it picked up noise as another host. 6. scipy.stats.mannwhitneyu + a hand-written Cliff's delta — comparing two groups without assuming a normal distribution def cliffs_delta(a, b): a, b = np.asarray(a), np.asarray(b) gt =sum((x > y) for x in a for y in b) lt =sum((x < y) for x in a for y in b) return (gt - lt) / (len(a) *len(b)) def compare_group(df, metric, label): hpr = df[df.corpus =="hpr"][metric].dropna() cmp= df[df.corpus =="comparison"][metric].dropna() u, p = stats.mannwhitneyu(hpr, cmp, alternative="two-sided") delta = cliffs_delta(hpr.values, cmp.values) iflen(hpr) *len(cmp) <200000elseNone scipy.stats.mannwhitneyu is a statistical test: it compares two groups of numbers (HPR vs. comparison podcasts, per metric) without assuming they're normally distributed — appropriate for skewed, real-world data like pitch-range measurements. scipy doesn't ship an effect-size measure alongside it, so Cliff's delta — "of all possible (HPR episode, comparison episode) pairs, how much more often is HPR's value the smaller one?" This pairing (a significance test plus an effect-size number) was used throughout because a low p-value alone doesn't say whether the difference is actually big enough to matter. 7. pandas — grouping, stratifying, and cross-tabulating results print(df.groupby("corpus")["retained_fraction"].describe()) ... print(pd.crosstab(df["corpus"], df["register"])) Once data/results.jsonl (one JSON object per analyzed episode) is loaded into a pandas.DataFrame, two one-liners answer two different questions that would otherwise need custom code: .groupby(...).describe() gives a distribution summary (count, mean, std, quartiles) of audio-quality coverage per corpus, in one call, and pd.crosstab() cross-tabulates HPR vs. comparison against male-typical/female-typical register — a quick sanity check that the two collections of podcasts had a similar gender-register mix. 8. matplotlib — box plots for the headline comparison fig, ax = plt.subplots(figsize=(6, 4)) data = [df[(df.corpus == c) & df[metric].notna()][metric].values for c in ["hpr", "comparison"]] ax.boxplot(data, tick_labels=["HPR", "Comparison"], showmeans=True) A box plot per pitch-range metric, HPR next to comparison podcasts, mean marked as well as the median. 9. spacy word vectors — measuring topic drift, not just word choice nlp = get_nlp() # spacy.load("en_core_web_md") ... chunk_docs = [nlp(c) for c in chunks] chunk_vecs = [] for d in chunk_docs: v = d.vector norm = np.linalg.norm(v) if norm >1e-6: chunk_vecs.append(v / norm) ... adj_sims = [float(np.dot(V[i], V[i +1])) for i inrange(n -1)] Each ~130-word chunk of a transcript is embedded as a single vector using spaCy's medium English model (en_core_web_md, which has built-in word vectors), then L2-normalized so a dot product between two vectors is their cosine similarity. Comparing consecutive chunks' similarity gives a "does the topic barely move between one chunk and the next" score. 10. lexicalrichness — vocabulary diversity that doesn't cheat on transcript length lr = LexicalRichness(text) try: mtld = lr.mtld(threshold=0.72) exceptException: mtld =None A naive vocabulary-diversity score (unique words ÷ total words) gets worse the longer a text runs, because of how the metric is defined — not because the speaker is actually repeating themselves more. MTLD (Measure of Textual Lexical Diversity) avoids that by sweeping through the text and counting how many words it takes before diversity drops below a threshold, then averaging — a metric designed specifically to stay comparable between a 10-minute and a 40-minute episode. 11. vaderSentiment — a lexicon-based sentiment score vader = get_vader() # SentimentIntensityAnalyzer() sentiments = [vader.polarity_scores(c)["compound"] for c in chunks] ... "sentiment_std": float(np.std(sentiments)) iflen(sentiments) >1elseNone, VADER scores each chunk's sentiment from -1 to +1 using a hand-built lexicon and rule set (not a neural network) — chosen for being fast, deterministic, and cheap enough to run per-chunk across hundreds of episodes. The value then used isn't the average sentiment — it's the standard deviation of sentiment across an episode's chunks: does the emotional tone ever move, or does it stay flat throughout? 12. zlib (standard library) — compression ratio as a gauge for entropy def compression_ratio(text): raw = text.encode("utf-8") iflen(raw) <200: returnNone compressed = zlib.compress(raw, level=9) returnlen(compressed) /len(raw) No third-party NLP library involved at all — just the standard-library zlib module. A gzip-style compressor finds and exploits repeated patterns; if it can squash a transcript down a lot, that transcript was relatively repetitive and predictable, and if it can barely compress it, the wording was more varied. This is roughly tells you "verbal monotony." 13. re (standard library) — turning "does HPR favour solo hosts" into a checkable heuristic MULTI_PRESENTER_PATTERNS = [ r"\bco-?host(?:s|ed|ing)?\b", r"\bguest\b", r"\binterview(?:s|ed|ing)?\b", r"\btalks? with\b", r"\bjoins? me\b", ... ] CORRESPONDENT_LINK_RE = re.compile(r'correspondents/(\d+)\.html') def multi_presenter_score(summary, notes): text = (summary or"") +" "+ (notes or"") hits = [p for p in MULTI_PRESENTER_PATTERNS if re.search(p, text, re.IGNORECASE)] summary_links =set(CORRESPONDENT_LINK_RE.findall(summary or"")) return { "flagged_multi_presenter": bool(hits) orlen(summary_links) >1, } Rather than the acoustic speaker-clustering attempt (item 5, which turned out to be unreliable), a more trustworthy stat came from plain text: HPR's own episode metadata (pulled from a local knowledge-base repo) has host-written summaries, and a short list of regex patterns ("guest", "interview", "joins me", etc.) plus counting linked correspondent profiles was enough to flag likely multi-presenter episodes. 14. multiprocessing.Pool — running the same analysis over hundreds of files without waiting hundreds of times over work = [(r, local_paths[r["id"]]) for r in batch] with mp.Pool(args.workers) as pool, open(args.out, "a") as out_f: for result in pool.imap_unordered(_worker, work): out_f.write(json.dumps(result) +"\n") out_f.flush() Every batch pipeline (acoustic pitch analysis, speaker-count pass) used the same shape: Pool(workers).imap_unordered(...) to run the per-episode function across multiple CPU cores at once, streaming results out to a JSON-lines file as each one finishes rather than waiting for the whole batch. imap_unordered was chosen over map so a single slow episode couldn't hold up writing out the results that had already finished. 15. subprocess + a resumable batch loop — working within a disk-space limit def load_done_ids(results_path): ifnot os.path.exists(results_path): returnset() done =set() withopen(results_path) as f: for line in f: ... done.add(json.loads(line)["id"]) return done ... rows = [r for r in rows if r["id"] notin done] ... for batch_start inrange(0, len(rows), args.batch_size): batch = rows[batch_start:batch_start + args.batch_size] local_paths = fetch_batch(batch, args.scratch) # scp from the remote host ... for p in local_paths.values(): os.remove(p) # delete before next batch All the podcasts (~220GB) didn't fit on local disk (~54GB free). The fix was a loop: scp (via subprocess) one batch of audio in, analyze it, delete it, move to the next batch. load_done_ids() makes the whole pipeline resumable by reading back what's already in the output file, so a crash or a deliberate stop partway doesn't lose completed stuff. Links https://news.ycombinator.com/item?id=49110547 https://mastodon.social/@ngate/117009495478432200 Ah yes, the riveting world of Hacker Public Radio: a quaint little corner where tech wizards ✨️ divulge their magical secrets ✨️ to each other in the most riveting monotone known to man. Who knew endless "community" podcasts could be so... utterly riveting? 📻️🎙️ Apparently, everyone is just dying to contribute to this cacophony once a year—what a privilege! 😂 https://hackerpublicradio.org/ #HackerPublicRadio #techCommunity #podcasting #MonotoneMagic #rivetingContent #HackerNews #ngated Provide feedback on this episode.

  • October 9 · length unknown

    HPR4745: BruCON interview 1: The BruCON organization

    This show has been flagged as Clean by the host. BruCON: https://brucon.org BruCON is an annual security and hacker conference providing two days of an interesting atmosphere for open discussions of critical infosec issues, privacy, information technology and its cultural/technical implications on society. Organized in Belgium, BruCON offers a high quality line up of speakers, security challenges and interesting workshops. BruCON is a conference by and for the security and hacker community. ​The conference tries to create bridges between the various actors active in computer security world, included but not limited to hackers, security professionals, security communities, non-profit organizations, CERTs, students, law enforcement agencies, etc….. https://www.youtube.com/@brucontalks/videos Provide feedback on this episode.

  • October 8 · length unknown

    HPR4744: HPR Beer Garden 21 - Mild

    This show has been flagged as Clean by the host. In this episode we look at a very old style of beer known as Mild. Paul, in the absence of any locally available Milds has a Guinness, Dave tastes Banks's Mild and Kevie Samples 1950s Burton Ruby Mild . Connect with the guys on Untappd : Dave Paul Kevie The intro sounds for the show are used from: https://freesound.org/people/mixtus/sounds/329806/ https://freesound.org/people/j1987/sounds/123003/ https://freesound.org/people/greatsoundstube/sounds/628437/ The next 3 beer styles to be reviewed: Bitter Pale Ale Trappist Provide feedback on this episode.

  • October 7 · length unknown

    HPR4743: wl-copy

    This show has been flagged as Clean by the host. wl-copy is a command in the wl-clipboard package, and allows you to copy and paste data from your Linux Terminal on a Wayland desktop. Copy an arbitrary string to your clipboard using wl-copy: $ wl-copy "hello world" Paste it anywhere on your system as usual (with Ctrl+Shift+V or a right-click and Paste). You can copy from output, too: $ echo "hello wide world" | wl-copy You can redirect to wl-copy: $ echo "hello world" > example.txt $ wl-copy < example.txt You can use wl-paste to paste from your system clipboard: $ wl-paste "hello world" Provide feedback on this episode.

  • October 6 · length unknown

    HPR4742: OLF Call for presentations open

    This show has been flagged as Clean by the host. OLF Conference The Conference the artist previously known as the Ohio Linux Festival, is returning to it's 2003 beginnings on the campus of Dreese Laboratories at Ohio State University Starting at noon on Friday Nov 20 and running all day Saturday 21 Nov 2026, during this event, Open Source projects, developers and visitors can exchange ideas and knowledge. Interviewees HPR is no stranger to OLF , and we interview the team as a call for presentations is now open. Vance has been using Linux since 1997 and was active in the Western Pennsylvania Linux Users Group from 2003 to 2017. In addition to general desktop use, he has an interest in system and network administration. Vance currently lives in Pittsburgh and works in quality assurance for safety equipment. Vance first began volunteering with Ohio LinuxFest in 2006. He worked on producing audio recordings of sessions starting in 2009, served as Speaker Chair for the 2014 through 2017 conferences, and was Birds of a Feather Chair from 2018 to 2020. He took on the Conference Chair role from 2021 through 2023, then returned as Speaker Chair starting in 2024. Email Beth Lynn currently lives in Pittsburgh and works as Senior System Engineer. She has over twenty years experience in managing, building and collaborating with teams within Free Software Expertise in GNU/Linux distributions such as Red Hat Enterprise Linux, Fedora, Ubuntu, and SUSE. From 2002 to 2011 Beth Lynn led the Western PA Linux Users Group, which began at Carnegie Mellon University. Beth Lynn first came to OLF as an attendee in 2003. She immediately signed up to help at future conferences. When a mix up occurred in the venue early in the OLF history, Beth contacted Jon “maddog” Hall and others for help, which saved that year’s conference (close to the date of the event). Due to her longevity with OLF over the years she has been a speaker, conference chairperson, and fundraiser. When the original conference chairpersons retired from leadership roles, Beth Lynn stepped up to keep the conference running smoothly as the Director. In 2007 Beth applied and defended 501(c)(3) non-profit status for the organization. Beth Lynn Eicher is passionate about the ideals of FOSS and in growing community across the country and world in this movement. She attends other Linux- FOSS conferences and is well known across the country. In 2013 she was asked to speak at the Free Software Foundation Conference held at Harvard University on the topic of “Closing the Digital Divide”. There she reported on the successful deployment of 100 Edubuntu PCs to schools in Ghana, Africa that served mostly orphaned children. Beth Lynn went to Ghana with a team from Computereach, training in networking, pc repair, the GNU/Linux command-line, and the Edubuntu desktop environment. Email Links Main web site: https://olfconference.org/ News page (announcements): https://olfconference.org/news/ RSS Feed of news: https://olfconference.org/feed/ CFP: https://olfconference.org/call-for-presentations/ YouTube channel: https://www.youtube.com/@OLFConference Livestream videos: https://www.youtube.com/@OLFConference/streams Edited videos: https://www.youtube.com/@OLFConference/videos Facebook: https://www.facebook.com/ohiolinux/ LinkedIn: https://www.linkedin.com/groups/1828509 X/Twitter: https://x.com/ohiolinux Matrix (unofficial): https://matrix.to/#/#olf:matrix.org Mailing list (announcements only): https://lists.ohiolinux.org/mailman/listinfo/olf-attendees https://hackerpublicradio.org/correspondents/0459.html https://www.osu.edu/ FreedomBox hpr4256 :: Birds of a Feather Talk at OLF 2024 Travel Times Country Typical Travel Method Example Destination Approx Duration Typical Budget Cost (One Way) USACarCincinnati, Ohio1h 40m–2h 10m$20–40 USABusCincinnati, Ohio2h–3h$20–45 USATrainCincinnati, Ohio2h–3h$25–60 USAAeroplaneChicago, Illinois1h 10m flight$70–180 USACarCleveland, Ohio2h–2h 45m$25–50 USABusCleveland, Ohio2h 45m–4h$25–55 USATrainCleveland, Ohio2h 30m–4h$25–70 USAAeroplaneDetroit, Michigan1h flight$70–180 USACarDayton, Ohio1h 15m–2h$15–30 USABusDayton, Ohio1h 30m–2h 30m$15–35 USATrainToledo, Ohio2h 30m–3h 30m$25–60 USAAeroplanePittsburgh, Pennsylvania1h flight$70–180 USACarPittsburgh, Pennsylvania3h–3h 30m$35–65 USABusPittsburgh, Pennsylvania3h 30m–5h$25–60 USATrainPittsburgh, Pennsylvania3h 30m–5h$30–70 USACarIndianapolis, Indiana2h 45m–3h 15m$30–55 USABusIndianapolis, Indiana3h 30m–5h$30–65 USATrainIndianapolis, Indiana4h+$40–80 USAAeroplaneIndianapolis, Indiana~1h flight$70–180 USACarFort Wayne, Indiana2h 30m–3h$30–50 USABusFort Wayne, Indiana3h 30m–5h$25–60 USACarErie, Pennsylvania2h 30m–3h$25–50 USABusErie, Pennsylvania3h 30m–5h$25–60 USATrainErie, Pennsylvania3h–4h 30m$25–65 USACarCharleston, West Virginia2h 45m–3h$30–55 USABusCharleston, West Virginia4h–5h 30m$30–70 USACarLouisville, Kentucky3h–3h 30m$35–60 USABusLouisville, Kentucky4h–5h 30m$30–70 USAAeroplaneLouisville, Kentucky~1h flight$70–180 CanadaCarWindsor, Ontario3h–3h 30m$35–65 CanadaBusWindsor, Ontario4h–6h$40–80 CanadaAeroplaneToronto, Ontario~1h 15m flight$100–250 Provide feedback on this episode.

  • October 5 · length unknown

    HPR4741: HPR Community News for September 2026

    This show has been flagged as Explicit by the host. New hosts Welcome to our new hosts: Trurl Last Month's Shows Id Day Date Title Host 4717 Tue 2026-09-01 Visit with a blind Ham operator Archer72 4718 Wed 2026-09-02 Programmable Logic Controls - Episode 2 Whiskeyjack 4719 Thu 2026-09-03 How to use a multimeter, introduction and basic usage number9 4720 Fri 2026-09-04 Robert A. Heinlein: Earlier Novels Ahuka 4721 Mon 2026-09-07 HPR Community News for August 2026 HPR Volunteers 4722 Tue 2026-09-08 Show and tell: AI tropes Trollercoaster 4723 Wed 2026-09-09 friedcamp interviews part 3: The fried telephone system Kristoff 4724 Thu 2026-09-10 HPR Beer Garden 19 - Lager Kevie 4725 Fri 2026-09-11 HPR Beer Garden - Tasting and reviewing beers Kevie 4726 Mon 2026-09-14 Trurl's intro show Trurl 4727 Tue 2026-09-15 friedcamp interviews part 4: The free Lantern Kristoff 4728 Wed 2026-09-16 Programmable Logic Controls - Episode 3 Whiskeyjack 4729 Thu 2026-09-17 Living under a rock MrX 4730 Fri 2026-09-18 Playing Civilization VI Part 1 Ahuka 4731 Mon 2026-09-21 A Website Hacked Lee 4732 Tue 2026-09-22 Webp Klaatu 4733 Wed 2026-09-23 Static Adict Episode 1: Pulse Demon TheDUDE 4734 Thu 2026-09-24 HPR Beer Garden 20 - TuxJam Half-cut Special Kevie 4735 Fri 2026-09-25 hpr4715 :: friedcamp interviews part 5: Yvon Masyn Kristoff 4736 Mon 2026-09-28 How to replace the battery in a car key fob Ken Fallon 4737 Tue 2026-09-29 Keep spare parts for Ethernet run Archer72 4738 Wed 2026-09-30 Programmable Logic Controls - Episode 4 Whiskeyjack Comments this month Past shows hpr4673 (2026-07-01) "First contact conversation" by Archer72. Dave Lee (thelovebug) said: "Baofeng naming conventions" (2026-09-16 07:07:02) hpr4677 (2026-07-07) "UNIX Curio #10 - Checksums and Hashes" by Vance. Cli said: "Systemd Topics" (2026-09-13 05:19:58) hpr4702 (2026-08-11) "MakeACopy is an open-source document scanner app for Android" by Ken Fallon. Archer72 said: "What's not to like? " (2026-09-09 21:55:48) hpr4709 (2026-08-20) "Peertube: my two penneth" by Kevie. Kevie said: "links" (2026-09-08 08:15:24) This month's shows hpr4718 (2026-09-02) "Programmable Logic Controls - Episode 2 " by Whiskeyjack. Trey said: "OpenPLC" (2026-09-02 22:40:23) Whiskeyjack said: "Reply to Trey on OpenPLC" (2026-09-03 16:05:35) hpr4719 (2026-09-03) "How to use a multimeter, introduction and basic usage" by number9. Ken Fallon said: "Thanks !" (2026-09-03 07:43:52) Archer72 said: "Thanks! Quite interesting!" (2026-09-03 09:49:32) Trey said: "Excellent episode" (2026-09-03 12:52:57) xmanmonk said: "Great show!" (2026-09-03 19:14:51) Whiskeyjack said: "Fluke Meters" (2026-09-03 22:39:30) brian-in-ohio said: "welcome" (2026-09-06 12:54:51) Kevin O'Brien said: "Endorsing comment" (2026-09-06 14:25:11) Jim DeVore said: "I learned a few things!" (2026-09-07 21:15:48) hpr4721 (2026-09-07) "HPR Community News for August 2026" by HPR Volunteers. Th3Dud3 said: "Sorry for getting your name wrong Kevie" (2026-09-09 16:27:10) hpr4722 (2026-09-08) "Show and tell: AI tropes" by Trollercoaster. Trey said: "This is so true" (2026-09-08 10:57:10) Steve Barnes said: "Re: This is so true" (2026-09-08 20:13:53) Ben said: "Great text" (2026-09-10 21:08:25) Antoine said: "AI writes very well" (2026-09-11 00:11:36) Trollercoaster said: "Re: This is so true" (2026-09-12 08:10:11) Trollercoaster said: "Re: Great Text" (2026-09-12 08:25:13) Trollercoaster said: "Re: AI writes very well" (2026-09-12 22:45:17) Antoine said: "Re #7 - Brazilian ... logic?" (2026-09-13 15:09:10) candycanearter07 said: "cool ep" (2026-09-13 20:05:22) Trollercoaster said: "Re: cool ep" (2026-09-15 17:50:02) hpr4723 (2026-09-09) "friedcamp interviews part 3: The fried telephone system" by Kristoff. Cli said: "Background noise." (2026-09-13 05:22:10) Whiskeyjack said: "Dial telephones" (2026-09-26 21:15:53) hpr4724 (2026-09-10) "HPR Beer Garden 19 - Lager" by Kevie. Gan Ainm said: "Märzen" (2026-09-14 15:32:33) Th3Dud3 said: "The reason why the USA uses Adjuncts in our Lager" (2026-09-14 18:07:03) hpr4726 (2026-09-14) "Trurl's intro show" by Trurl. candycanearter07 said: "hello!" (2026-09-15 23:22:59) hpr4732 (2026-09-22) "Webp" by Klaatu. Henrik Hemrin said: "Now I will consider webp as an alternative." (2026-09-26 17:16:21) hpr4733 (2026-09-23) "Static Adict Episode 1: Pulse Demon" by TheDUDE. brian-in-ohio said: "good show" (2026-09-23 14:44:12) Antoine said: "Never listened about" (2026-09-23 22:41:53) hpr4736 (2026-09-28) "How to replace the battery in a car key fob" by Ken Fallon. Lee said: "Replacing battery" (2026-09-29 20:24:03) Mailing List discussions Policy decisions surrounding HPR are taken by the community as a whole. This discussion takes place on the Mailing List which is open to all HPR listeners and contributors. The discussions are open and available on the HPR server under Mailman. The threaded discussions this month can be found here: https://lists.hackerpublicradio.com/pipermail/hpr/2026-September/thread.html Events Calendar With the kind permission of LWN.net we are linking to The LWN.net Community Calendar. Quoting the site: This is the LWN.net community event calendar, where we track events of interest to people using and developing Linux and free software. Clicking on individual events will take you to the appropriate web page. Provide feedback on this episode.

  • October 2 · length unknown

    HPR4740: Robert A. Heinlein in the 1960s

    This show has been flagged as Clean by the host. The 1960s were when Heinlein produced some of his most famous works. And they started to bring him fame outside the Science Fiction community, which was most unusual. Heinlein in the 1960s Heinlein had interests that he tended to keep hidden in the early years while he was establishing himself as a writer, particularly as he was feeding the lucrative Juvenile market. These included things like sex, nudism, and unusual political and religious views. But when Scribners rejected Starship Troopers he not only abandoned writing Juveniles, but decided he could be a lot more open about his views. And this resulted in his most famous novel. This is the one novel that people who are not science fiction fans are likely to have read, particularly in the 1960s. Stranger In A Strange Land (1961) This novel won just about every award possible: Hugo, Locus, Prometheus. It was the first science fiction novel to crack the New York Times Best Seller list. And the Library of Congress named it as one of 88 “books that shaped America”. And it even introduced a new word to the English language: grok. The stranger in the title is Valentine Michael Smith, an infant born to one of the astronauts, and then raised by Martians. He is brought back to Earth by a later mission, and his adventures in this strange land are what the book is mostly about. But in so doing, Heinlein writes a satire on religion and also espouses very different approach to love and sexuality than was considered proper at the time. And this attracted the hippies of the 1960s, for whom it became a Bible, much to the annoyance of Heinlein who did not appreciate them knocking on his door. The book had the original title of “The Heretic”, and was intended to challenge social norms about religion and monogamy. Heinlein’s own take on the reaction to the novel was that he was surprised that some readers thought the book described how he believed society should be organized, explaining: “I was not giving answers. I was trying to shake the reader loose from some preconceptions and induce him to think for himself, along new and fresh lines. In consequence, each reader gets something different out of that book because he himself supplies the answers … It is an invitation to think – not to believe.” The book also exemplifies the characters that Heinlein managed to put into most of his stories. Michael is the naive young man who needs to learn better, and Jubal Harshaw is the wise old man who becomes his mentor. Podkayne of Mars (1963) The heroine of this book, Podkayne, is a teenage girl who is invited along with her younger brother on a luxury cruise with their uncle Tom from their home on Mars to go to Earth. We learn along the way that Mars was once a prison colony (echoing Australia), and that Podkayne’s family are of Maori ancestry. In the United States, at least, this would count as “colored”, and reflects Heinlein’s subversion of racist ideas in his works. Much of the travelogue on the luxury liner reflects Heinlein’s own experiences as depicted in his non-fiction book Tramp Royale which covers his own world cruise. But old uncle Tom is actually a diplomat using the kids as cover, and they get kidnapped by people who want him to take a certain position at talks to held at Luna. Podkayne’s brother Clarke is portrayed as a genius but lacking certain qualities of empathy, and in the end he manages to get her killed. The publisher rejected this ending an insisted on one where she lived. Later Heinlein published a version with both endings and invited people to vote on which one they preferred, and the one where she died won. Heinlein’s own objection was that it was like changing the ending to Romeo and Juliet into one where they both lived happily ever after. Since then the book has been published with Heinlein’s preferred ending. Orphans of the Sky (1963) This is basically a couple of novellas from 1941put together as a complete novel. The first novella, Universe, was recognized by the Science Fiction Writers of America by including it in their volume The Science Fiction Hall of Fame, Volume Two. This is a story about a generation ship, i.e. a ship that will take generations to arrive due the speed of light limit. In this case, the people who understood what this was all about are long dead, and we learn that at one point there was a mutiny and the the ship’s officers were killed. In Universe, the descendants of the remaining people think the ship is all there is, it is the Universe to them. In the second novella, Common Sense, a few people find some of the old records and work out what the situation is. Then, seeing a star growing larger ahead of them, they take a life boat and land on a habitable moon of a giant planet. This is part of the Future History, as Rhysling and his “Green Hills of Earth” are brought up, and it is also referred to in Time Enough For Love, where it is revealed that this ship is the sister ship to the one the Howard Families stole in Methusaleh’s Children. But being that this is from 1941 it does not show the polish and mastery of Heinlein’s other work of the 1960s. Glory Road (1963) Some stories make you wonder if they are Fantasy or if they are Science Fiction, and this is one of them. Of course, Heinlein would just call it Speculative Fiction and not worry about it. A former soldier has just been discharged from a war in Southeast Asia. The country is not mentioned, but this is 1963 and Vietnam was just bubbling up into people’s consciousness. With nothing to do, he meets up with a gorgeous woman who invites him on a quest. This takes them to other worlds and involves a certain amount of swordplay, culminating in a sword fight against Cyrano de Bergerac. The woman turns out to be the Empress of many worlds, and the quest was to retrieve the Egg of the Phoenix, a cybernetic device containing the memories and personalities of most of her predecessors, and now she has to absorb all of this, which is fine for her but leaves or hero pretty useless. Finally he goes looking for another quest. This is a really good novel, and was nominated for the Hugo, but it lost out to Clifford Simak’s Way Station. We should probably discuss Simak at some point, he was an important writer with a distinct style. Farnhams’ Freehold (1964) This novel attempts to be satire on race relations, but is in my view a failure. A nuclear war happens, and a group of people in a fallout shelter find that they have been transported into the future (or is it an alternative universe?). The war pretty much destroyed the societies of the northern hemisphere, leaving things open for the Africans and other southerners to become dominant. And of course the blacks enslave the whites and re-enact the worst excesses of the ante-bellum American South. When I am in the mood to go back and re-read some Heinlein, this is not one I pick. The Moon Is A Harsh Mistress (1966) This is one of Heinlein’s best novels, set on a lunar colony. The moon has been used as a penal colony, but of course most of the people there now are descendants of the people originally exiled there. The Warden runs things, but as long as the grain shipments are on schedule he doesn’t bother much with the affairs of the “Loonies”. The background here is fascinating, describing a nearly anarchic society. Men out number women two to one, leading to some interesting marriage customs, including something called “line marriage” which is a type of group marriage. The wise old man role is played by Professor Bernardo de la Paz (Prof), while the young man he mentors is Manuel O’Kelly-Davis (Mannie). Mannie is computer technician who discovers the big mainframe computer that runs everything has become sentient. And since the computer has the acronym HOLMES, he names it Mycroft Holmes (Mike), for Sherlock’s smarter brother. They all become involved in a revolution against the Earth government, which in theory is led by Prof, but in fact is led by Mike. Since he is a computer, and keeps his sentience a secret, he creates a persona of Adam Selene to be the figurehead I said that the background of this lunar colony is fascinating in itself, but the book is also a discourse on the nature of government, libertarianism, and what it means to be free. That was something Heinlein was prone to do, and it did not always work well. In some of his last works he tended to pontificate in a way that left the story behind, but in this novel the story is interesting all the way through. This the novel that popularized the acronym TANSTAAFL, which means There Ain’t No Such Thing As A Free Lunch, and which is the motto of the Loonies. Hazel Stone, of The Rolling Stones, appears here as a 12-year-old girl involved in the revolution, and both she and Mike also appear in later works of Heinlein. I recommend this book highly. This novel won the Hugo award (by the fans), was nominated for the Nebula Award (by the writers), was named one of the Top 10 novels in the Locus poll, and won the Prometheus Hall of Fame Award. Links https://en.wikipedia.org/wiki/Stranger_in_a_Strange_Land https://en.wikipedia.org/wiki/Podkayne_of_Mars https://en.wikipedia.org/wiki/Orphans_of_the_Sky https://en.wikipedia.org/wiki/Glory_Road https://en.wikipedia.org/wiki/Farnham%27s_Freehold https://en.wikipedia.org/wiki/The_Moon_Is_a_Harsh_Mistress https://www.palain.com/science-fiction/the-golden-age/robert-a-heinlein/heinlein-in-the-1960s/ Provide feedback on this episode.

  • October 1 · length unknown

    HPR4739: Happy by shower # 3

    This show has been flagged as Explicit by the host. We focused, until now, on things external as examples. Let’s proceed to internal. Before, I want to note that any of these is a formula. It’s not like we can repeat a past experience we ourselves or someone lived, and feel the same thing. It’s not a guarantee, and not even the idea in sharing. It’s only this: to share and to provoke reflection. I was abused as a child. Hard as it is, and unerasarable, also hard was to tell someone important and do not be trusted. Child abuse is associated with multiple disorders further in life. Remembering what I passed is a relief in what gives respect to where I am now. Not to authorize me to feel anger, or as a free pass to throw everything to the air without feeling guilty — that would make something, but not good after all —, but to recognize better what is real and what is important now, and that’s much more relevant, and influential to my being in the world, than that past experience. Coincidences sometimes make me “wow”. When I ask, and even when I don’t directly ask, specific direction in choices, or in what to trust, it’s not rare to receive something that I see as very clear. Even when it comes as a reproach, remembering me about what I should and could be doing, but am not because of many excuses, even then, I’m still impressed, and feeling loved, because someone cares specifically – about – me . In general, remembering something that gave me a bad taste when thinking about before, and then, as of now, feeling differently about that event, gives me a sense of maturity. Like, what a child I was to pay so much attention to this, or to that, and now those things, unimportant as they are, don’t matter any more. I find myself trying to remember a word, or a concept or memorized Bible verse. Sometimes I forget, and then I go to a chain of thoughts about and end up remembering, or forget about and it comes to mind minutes or hours later. Those are “aha!” moments, as discovering something, very beautiful, for the first time. Some people have a wrong notion of memory, as if it was created once and evoked latter. No, every moment one evokes a piece of information, he is reworking that piece, and every experience after the creation of the memory potentially affects that bit of information we call a part of the memory. It’s not static, it’s dynamic. And so it’s not objective, is it? Yeah, that’s it. Thank you and bye bye. Provide feedback on this episode.

  • September 30 · length unknown

    HPR4738: Programmable Logic Controls - Episode 4

    This show has been flagged as Clean by the host. -------------------- 01 Introduction This is the fourth episode in an 8 part series. 02 In the previous episode we looked at the Allen Bradley PLC2, one of the very early successful Programmable Logic Controllers. In this episode we will look at another early PLC, the Siemens S5 series, and use it as an example of both how PLCs became more sophisticated, as well as an example of a different approach to the overall software architecture. Again, I will only touch on this topic lightly, this is not a course on how to program PLCs. However, I will give you enough technical detail to give you are rough idea of what they were like. -------------------- 03 S5 Historical Background Siemens are the largest PLC vendor on a global basis, and have been since the early days. Their first PLC was the S3, released in 1975, two years before Allen Bradley released the PLC2. There seems to be almost no information available on the S3, so I can't say much about it. In 1978 or 1979, sources are unclear about the exact date, Siemens released the S5 series. This was a huge step forward in capability and was the foundation of their PLC product line until replaced by the S7 series in the mid 1990s. In this episode I will focus on the U series, which were an upgrade to the original S5. -------------------- 04 A Complete Family of PLCs Fully developed, the Siemens S5 series was a complete family of products covering the entire size spectrum from smallest to largest. Siemens covered the entire industrial control market, and there was almost nothing they didn't have somewhere in their catalogue. You could spend an entire career using nothing but Siemens products for everything. 05 At the lowest end were the S5-100 series, consisting of the S5-100, 102, 103, 90, and 95. These covered everything from the small "shoebox" all in one form factor to ones which overlapped the mid range in terms of capability except for their compact I/O cards which were smaller and slower than the full size models. The S5-115 formed the mid range, coming in a "full size" form factor in terms of packaging and rack size. The S5-135 and S5-155 extended the S5-115 in terms of speed and memory. 06 In this episode I will focus on the lower end S5-100 series for the sake of simplicity, and will not make any reference to any additional capabilities of the larger models. It will be much too time consuming and confusing to try to cover everything, and there wouldn't be much point to it. -------------------- 07 Data Memory Types If you recall the previous episode, the Allen Bradley PLC2 had a data table, or memory system, that was a single linear range of memory with all I/O and internal capabilities mapped into fixed numerical addresses. Allen Bradley were to abandon this approach in their later PLC5 series introduced in the mid to late 1980s, but we won't cover that here. The Siemens S5 series however took the approach of having different types of memory addresses for different purposes. I will describe those for the S5-100 series now. 08 Input and Output Addresses The standard I/O modules for these compact PLCs had 8 inputs or 8 outputs per I/O module. These module plugged into a flat bus (as opposed to an enclosed rack) with slots numbered from 0 through 31 in decimal. Each of these slots had an associated byte number, and each I/O point on the individual modules had a bit number. 09 Input and output addresses had the following format. Letter , number, decimal point, number. The letter was either I or Q. I indicated inputs. Q indicated outputs. The first number was the byte number, which corresponded to the physical I/O module slot. The second number was the bit number within the byte, starting from zero. 10 So "I2.3" indicated an input module located in the third slot (numbered from zero) and addressed the fourth input (numbered from zero) on that module. Outputs worked the same way. For example "Q 5.1" 11 Analogue modules could be located slots 0 through 7. Analogue if you recall, refers to voltages which have varying levels rather than just on or off, and can represent things like temperature. Each analogue module was assigned 8 bytes per slot, starting at address 64 and going up to 127. In practice many of these so called "analogue" modules had nothing to do with actual analogue voltages, but rather any advanced module which needed more address space was used here. Even later high density digital I/O used these addresses. 12 Each of these addresses could be addressed as bytes or words. In this case input bytes were indicated by an "IB" prefix, and input words were indicated by a "IW" prefix. Output bytes used a "QB" prefix and output words used a "QW" prefix. 13 Flags Flags are individual bits of internal memory that are used for storing intermediate logic values. These began with an "F" prefix. An S5-103 had a total of 2048, numbered from F0.0 to F255.7. 14 Counters Counters started with a "C" prefix. An S5-103 had 128 of these numbered from C0 to C127. 15 Timers Timers started with a "T" prefix. An S5-103 had 128 of these numbered from T0 to T127. 16 Data Blocks Programs needing to deal with byte and word memory could create what were known as "Data Blocks". These were blocks of PLC memory that could be created as the discretion of the programmer. An S5-103 could have a maximum of 254 data blocks numbered from DB2 to DB255. Two additional data blocks were reserved for the PLC's internal operations. Data blocks could contain up to 255 16 bit words. 17 However, the actual number and size of data blocks would in practice be limited by available memory. Even 20 kilo bytes was considered to be a large memory, and this had to be shared with the program. A data block would be "called" to make it the current data block. Then individual words would be addressed with the "DW" prefix. For example "DW5". -------------------- 18 Program Blocks If you recall with the PLC2, there was a "main" program and a series of optional numbered subroutines. In the S5, programs were split into "blocks". These were Organization Blocks Program Blocks Function Blocks Sequence Blocks An S5-103 could have up to 256 of each of these blocks. 19 Organization Blocks When the PLC started up, it would look for Organization Block 1 and begin execution there. You could consider this to be the equivalent of the "main" function in a C program. Organization blocks had an OB prefix. For example OB1. With a very simple program in a very small S5 PLC, all of the program logic could be simply put in OB1. However, with larger programs , it was convention to put the logic in subroutines and simply have OB1 call each subroutine. 20 Program Blocks These had a PB prefix. For example PB10. Normal ladder logic style programming would go in these. It was convention to split up a program into pieces and put piece in its own program block. Normal practice was to have a program block correspond to a particular part of the machine. 21 Function Blocks These had an FB prefix. For example FB64. Function blocks differed from program blocks in that they could take parameters. This allowed you to write an FB that performed some sort of complex data transforms and re-use it by calling it with different parameters. Some instructions could only be used in FBs, not in other types of blocks. There were also built in FBs in some CPU models which performed certain operations such as converting BCD (or Binary Coded Decimal) to normal integer. 22 Sequence Blocks These has an SB prefix. For example, SB25. These were like PBs, but were intended for controlling sequences of operations where each SB performed as single step of the sequence and multiple blocks were used for a sequence. -------------------- 23 Programming Languages The S5 series offered four different programming languages. These were Ladder (abbreviated as LAD) Statement List (abbreviated as STL) Control System Flowchart (abbreviated as SCF) GRAPH 5 24 You should be familiar with ladder if you listened to previous episodes. Briefly however, it is a graphical programming language which followed the appearance of electrical ladder wiring diagrams which were familiar to engineers, technicians and electricians working with manufacturing equipment. 25 Statement List is a text based programming language which resembles an assembly language for an abstract processor architecture. Boolean logic results were calculated and saved on a stack, while integer values were operated on directly from memory or in two accumulators, ACCU1 and ACCU 2. 26 Control System Flowchart is a graphical language that takes the form of rectangular blocks with one or more inputs and an output. These blocks are laid out on a screen and then wired together rather like logic gates in a electronic schematic. 27 GRAPH 5 is Siemens' implementation of the GRAFCET (Graphe Fonctionnel de Commande Étapes Transitions) IEC 60848 flow chart standard. The IEC are the International Electrotechnical Commission, an international standards organization. 28 I will focus on Ladder and Statement List, as these were by far the most commonly used and we have limited time to discuss the S5. -------------------- 29 Statement List As mentioned above, Statement List can be thought of as the assembly language for an abstract CPU architecture. The firmware in the S5 PLC will run the instructions in an interpreter. 30 The RLO Boolean or bit oriented instructions operate on a logic stack known as the RLO, or Result of Logic Operation. Boolean operations typically take one operand. When a boolean operation is executed, if the RLO is empty it simply loads the operand onto the RLO. If the RLO is not empty, then the instruction is executed using the operand and the RLO, and the result replaces the value on the top of the RLO stack. Some boolean instructions do not take an operand, but rather work on the two topmost values on the RLO. If you are familiar with languages such as FORTH, this should sound very familiar. 31 The Accumulators Word oriented instructions work on two accumulators, ACCU 1 and ACCU 2. A load instruction will load a word or byte value from a memory location or a constant into ACCU 1. The value that was in ACCU 1 then gets shifted into ACCU 2. A transfer instruction will write the value in ACCU 1 to memory. The remaining word oriented instructions will operate on the values in ACCU 1 and ACCU 2, and place their result in ACCU 1, overwriting the existing contents. So for example, an add instruction will add the value in ACCU 2 to the value in ACCU 1, leaving the sum in ACCU 1. 32 Ladder As mentioned above, ladder is a graphical programming language which has the appearance of an electrical control ladder diagram as used with actual relays. The is by far the most common programming language used with PLCs. A ladder program however is just another way of presenting statement list. 33 To put it another way, a statement list program can be displayed on a computer screen as either lines of text, or a graphical symbols laid out in a meaningful pattern. All valid ladder programs can be represented as statement list. However, not all valid statement list sequences can be represented as ladder. Statement list is inherently more flexible than ladder, which means that you simply can't always translate both ways fully. 34 None the less, most typical control logic can be represented as ladder, and ladder is the preferred representation as it is quicker to understand at a glance when debugging a software or hardware problem. On the other hand, some statement list instructions have no ladder equivalent, or the algorithm may not lend itself to being represented in ladder. In these cases normal practice is to put the simple control logic in ladder in Program Blocks, and put the non-translatable statement list logic in Function Blocks. 35 Control System Flowchart and GRAPH 5 Like ladder, CSF and GRAPH 5 are actually implemented in statement list, and many of the considerations mentioned above apply to those as well. However, I won't go into any further detail on these here. -------------------- 36 Programming Software and Hardware There were two ways of entering a program into an S5 PLC. One way was the hand held programming terminal. The other was via the STEP 5 programming software. 37 Hand Held Terminal Like many if not most PLC vendors, Siemens sold a hand held programming terminal. There were a series of these, an example being the PG 605. This was a box like a large calculator which had buttons and a small display. The buttons corresponded to various instructions and a numeric keypad, and the display would show the current instruction being entered. To use it you would plug a cable attached to the hand held terminal into the programming port on the front of the PLC CPU module. You could then enter or view the program, one instruction at a time. 38 STEP 5 Programming Software The other way of programming was to use software running on a PC. Siemens called their software STEP 5. This was an integrated editing and debugging program. Originally it ran on CP/M. 39 Siemens sold their own portable PCs with the software preloaded, and with additional built in hardware features such as an EPROM burner. These computers were also known as "PGs". STEP 5 was later ported to MS-DOS by running it on a CP/M emulator which people would use to run it on an off the shelf PC such as a laptop. Later still a native MS-DOS port was produced. 40 This had modes for Statement List. Ladder, and Control System Flowchart. GRAPH 5 was a separate program. You could toggle between STL, LAD, and CSF modes, and if the software could translate what was there form one mode to another, it would. 41 The PC would be connected to the PLC by a cable which had an interface box in the middle. This could be used to download a program to the PLC, upload a program to take a backup, modify a running program, or debug a running program. -------------------- 42 Instructions I won't list all the instructions, as that would take too long. I will instead give a brief overview of them. I will deliberately skip over obscure instructions that would take too long to explain. 43 Basic Operations Boolean Operations There is a full set of boolean operations including and, and not, or, or not, set, reset, and assign. The assign operation would assign the RLO value to the address of the specified operand. 44 Load and Transfer The Load instruction would load the value of a memory address word or byte or a constant into accumulator 1. There are about 2 dozen variations on the load instruction. The transfer operation would write a word or byte from accumulator 1 into memory. There are about a dozen variations of the transfer operation. 45 Timers and Counters There are 5 different types of timers. Timers take the value in accumulator 1 as their preset when started. There are up counters and down counters, which count up and down respectively. Again, these take the value in accumulator 1 as the preset. 46 Arithmetic Operations The only native arithmetic operations in the S5-100U series are addition and subtraction. These add or subtract the values in accumulator 1 and 2. Another set of add instructions allows adding a constant. However, the 103 and 95 CPUs offered integer multiple and divide as integrated function blocks, FB242 and FB243. You would call these function blocks with the desired parameters and they would return their results in other parameters. 47 Comparison Operations There are a complete set of integer comparison operations which operate on the values in the two accumulators. These include greater than, greater than or equal to, etc. The boolean result is saved on the RLO. 48 Block Call and Return There is a complete set of unconditional and conditional call operations to call all of the various types of blocks. There are also unconditional and conditional return operations. Calling a data block makes it the current data block, for load and transfer operations on data words 49 NOP or No Op As implied these instructions have no result. 50 Stop This stops the program executing 51 Binary Word Operations These operate on words in the accumulators. These include AND, OR, XOR, Shift Left, and Shift Right. 52 Bit Operations These test, set, or reset individual bits in data words or in timers and counters. 53 Conversion Instructions There are instructions to perform one's complement or two's complement of the value in accumulator 1. 54 Jump Operations There are unconditional and conditional operations to jump forward or back to a label. This is equivalent to a GOTO operation. 55 Indirect Addressing or "DO" operations These instructions allow jumping to a block or selecting a data word or flag word according to a number stored in another address. Essentially, these instructions are like pointers. 56 Miscellaneous There are also various other instructions that do things like copy blocks of words, or swap the contents of the accumulators, 57 Other Instructions There are still more instructions which I have skipped over as it would take too much time to explain them. 58 Instruction Summary As you can see the S5 PLC offers a very comprehensive set of operations which go well beyond what most people would think of as what a PLC does. This is a very powerful instruction set. 59 On the one hand this is a good thing, as you can do nearly anything. On the other hand, this is a bad thing, as some people take this as license to do nearly anything. In the hands of the wrong person, this results in a complex mass of spaghetti code that not even the person who wrote it can figure out later. 60 This goes against the philosophy of PLC programming, which is to make things as simple and obvious as possible. With a PLC program, perfection is achieved not when it has as many advanced features as possible, but rather when it is not possible to make it any simpler. 61 While Siemens gave the programmer a range of powerful low level instructions from which he could construct nearly anything, many other vendors took a different approach. They instead studied what was needed in major market segments and provided the programmer with instructions that operated at a higher level of abstraction, allowing programs to be written in less time and with fewer instructions. -------------------- 62 Execution Speed Execution speed of instructions varied depending on the PLC CPU model. Here are some typical values for the low end S5-100 series CPUs. 63 A boolean AND instruction executed in 70 microseconds on a S5-100U, or in 4 microseconds on an S5-102U, or in 1.6 microseconds on an S5-103U. 64 Adding two words in the accumulators executed in 55 microseconds on a S5-100U, or in 23 microseconds on an S5-102U, or in 1.6 microseconds on an S5-103U. 65 The S5-103U had a custom logic coprocessor chip, known as the M5. Instructions that were executed on the M5 coprocessor tended to take a uniform 1.6 microseconds. However, complex instructions that were not executed on the M5 coprocessor were often slower than on CPUs that didn't have a coprocessor, such as the 100 or 102. I suspect this is due to some sort of overhead relating to coordination of the two processors. 66 However, most instructions in a normal program are boolean logic, so very fast boolean execution time is what matters. Since every instruction is executed every scan cycle, large programs require faster instruction execution in order to keep up with demand. -------------------- 67 The S7 Series Replaces the S5 In the mid 1990s, Siemens began introducing the S7 series which would ultimately replace the S5, although that took a number of years to happen. 68 The hardware was all new, but from a programmer's perspective, the S7 was an evolution of the S5. Some statement list instructions were dropped and others were added. Most of the basic concepts however remained the same. Porting an S5 program to an S7 was a complete re-write, but it was a fairly straightforward one. 69 The exception to this was the S7-200 series, which came into Siemens from the outside as part of their take over of of the PLC division of Texas Instruments. The S7-200 was an American knock off of a Japanese PLC and sold as a German product. It was none the less an excellent PLC and sold in very large numbers. The S7-200 was eventually replaced by something that was compatible with the rest of the S7 line 70 The S7 series has gone through a number of hardware revisions and remains Siemens' main PLC line today. It can via the S5 trace its lineage back to the 1970s and the early days of PLCs. -------------------- 71 Other Developments Japanese PLC Vendors I haven't covered any Japanese PLC vendors in the same way that I covered the PLC2 or S5. I had planned on doing another episode on one but I don't think it would really add much to what we have already discussed. However, PLCs from Japan are among the top sellers world wide and are generally very highly regarded. 72 Pace of Innovation In terms of general history across the industry, in the early days of PLCs evolution was fairly rapid. Later on, innovation slowed down as compatibility with the existing install base became a bigger factor. Technology has become fairly static, but that isn't necessarily a bad thing from a business perspective. I will return to this subject later however. -------------------- 73 Conclusion In this episode we covered the Siemens S5 series of PLCs. We covered the history of the S5, it memory and addressing, the different types of subroutines, programming languages, the instructions, and how it was succeeded by the S7 series. 74 We saw how PLCs had rapidly evolved from their very early relay-replacement origins to become powerful programmable devices. In the next episode we will look at I/O modules and how they allow a PLC CPU to interface to hardware and control machines. 75 This has been the fourth episode in an 8 part series. -------------------- Provide feedback on this episode.

  • September 29 · length unknown

    HPR4737: Keep spare parts for Ethernet run

    This show has been flagged as Clean by the host. Quick show on what I used to run 25 feet of Ethernet cable Amazon Cable Matters 10Gbps Snagless Cat 6 Ethernet Cable, 25ft, Blue 24 AWG Bare Copper, Gold-Plated RJ45, PoE++, 550MHz Other supplies • 1/2 inch length of blue pex tubing from local hardware store Leftover from previous project • Electrical tape • Extendable pole which has a clamp and a trigger mechanism for use with wasp spray • Hyper Tough 3/4 inch Hex Shank Spade Drill Bit • Random Hyper Tough (maybe 3/8 inch) drill bit All purpose • White silicone sealant Reference hpr4654 :: What's in my component Box? Images First part of cable run, internet router side. Ethernet cable, with electrical tape to pex pipe. Extension pole with pex pipe attached by electrical tape. Angle cut on pex pipe. Taped pex pipe with cable, ready to feed to other side. Extension to other side of the mobile home. Success! Fed through the other side. 8 foot extension, suitable to hang an antenna. Silicone to seal the holes. Provide feedback on this episode.

  • September 28 · length unknown

    HPR4736: How to replace the battery in a car key fob

    This show has been flagged as Clean by the host. Replacing battery Remove the emergency key Pry open the fob around the seam with a blunt knife or similar Note the polarity of the battery, ie which way up the battery is. Replace the battery and close. Emergency usage Use the emergency key to enter the car. Hold the key fob to the Start/Stop button Press the Start/Stop button Links https://en.wikipedia.org/wiki/Nissan_Micra#Fifth_generation_(K14;_2016) https://en.wikipedia.org/wiki/Button_cell https://en.wikipedia.org/wiki/Near-field_communication https://www.youtube.com/watch?v=IBP5EEm1oSI Provide feedback on this episode.

Showing 1–20 of 61 episodes