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.

Episodes

  1. 4d ago

    HPR4710: Civilization VI

    This show has been flagged as Clean by the host. Civilization VI, released in 2016, was a further evolution of the franchise that added interesting new features. We introduce it in this episode. Civilization VI Released in 2016, Civ VI is probably still the most played version of the game. Although there has been a general gap of 5-6 years between versions, the effects of the Covid-19 pandemic slowed down many things. Since early 2025 we have had Civilization VII come out, but in my opinion it is still being tweaked and refined. In the meantime, Civilization VI is the game I play now when I play Civ. I’ve played all of them from the first, and put in many hours here. Since I now play Civ on Steam mostly, I have statistics! I played Civ V for a total of 769 hours, and so far I have played Civ VI for 689 hours, but since this is what I play for now I will probably exceed my Civ V hours pretty soon. BTW, I probably have well over 1000 hours on Civ II, which I think I have played the most, and certainly more than 3000 hours total over all all versions. I’m going to cover this without worrying too much about whether it is the base game or an expansion. Fact is, Firaxis have started moving to something more akin to a subscription model when they introduced the New Frontier Pass, which works very well when you are on Steam. The idea was that you bought this pass, and very few months got new content, and on Steam it would automatically be downloaded to your account. That is not to say that there weren’t actual expansions, but since the last thing they released was this “pass”, i’m kind of wondering what they will do with Civ VII. In any case, let’s take a look at this. Gameplay Again, you start with a tribe in 4000BC which founds your first city, and you immediately begin building units, exploring, researching, and developing your city. this is a time-tested mechanic that never changes. but there are some interesting changes that make this game fascinating. First, in the earlier versions of Civ you thought of yourself as playing a particular civ, which came with a particular leader. In different versions of Civ the name of the leader might change, like for France you might have Napoleon on some versions, or Joan of Arc in another, but in each case one civ gets one leader, so you tended to think of yourself as playing the nation. Rome might be Caesar in one version, Augustus in another, or Trajan in yet another. (Fun fact: Sid Meier says he always plays as Rome because it just feels right to him). In Civ VI this linkage is broken. One leader, Eleanor of Aquitaine, can be played as the Queen of England, or she can be played as the Queen of France. And each version has different abilities and strengths. If you want a fairly easy Culture victory, play her as Queen of France, and watch as other players’ cities rebel and join your Empire because they admire you so much. Teddy Roosevelt also has two different manifestations, Rough Rider Teddy, and Big Stick Teddy, when you have all the expansions. China has two possible leaders, with different strengths: Qin Shi Huang, and Kublai Khan. And Kublai Khan can be either Chinese or Mongolian, with different strengths. So in Civ VI you don’t think of what Civ you want to play, you think of which leader you want to play. Every leader comes with a Civilization Ability, a Unique Unit, and a Unique Infrastructure. These matter a lot. For example, take John Curtin, the leader of the Australian civilization. His Civilization Ability is called Land Down Under, and it gives him +3 Housing in coastalcities. Building a Pasture triggers a Culture Bomb, claiming surrounding tiles. Campus, Commercial Hub, Holy Site, and Theater Squaredistricts gain +1 to their yields in tiles with Charming Appeal, and +3 in tiles with Breathtaking Appeal. Then his Unique Unit is the Digger, a melee military unit that replaces the Infantry unit. And his Unique Infrastructure is tile improvement called the Outback Station. This gives you increased food, production, and housing, some of which varies according to what is on surrounding tiles. The point is that each leader gives you very specific advantages that you should play to. In Civ VI it is even more important to tailor your strategy to the particular leader. Leaders like Frederic Barbarossa or Simon Bolivar are very good for Domination, while Peter the Great and Saladin are very good for Religious victories. If you take a random leader be ready to adapt your play style and strategy to fit, or alternatively decide what kind of victory you want to achieve and pick a leader who is good at it. Or if you want a real challenge, pick a leader who is not suited to the victory condition you are aiming at. But keep in mind that the game may take you in places you didn’t expect. One game I picked Wilfrid Laurier of Canada, who is ideal for Diplomatic and Cultural victories, and I thought I would be going for a Cultural victory. But Wilfrid’s strengths come from his advantages on Tundra land tiles, and I somehow managed to spawn in the middle of the map with no Tundra tiles at all in my empire. I had work hard to manage a Science victory in that case. Districts This is a major change in Civ. In earlier versions you built buildings inside of cities, and you tended to build the same buildings in most or all cities. You were only limited by your ability to generate Production to get them done. Civ VI is different. You have to place Districts on specific tiles, and and you can then develop the district with added buildings. If you want to develop your industry, you can place an Industrial Zone, and then add a Workshop, then a Factory, then a Power plant, and so on, each one increasing your Production. For Science you place down a Campus District, then a Library, then a University, then a Research Lab. And the game mechanic means you cannot built everything in every city. You can place one district at the start, then one more when your city reaches a population of 4, then a third one when you reach 7, and so on with each added population of three allowing one more district. The point is to force you to make choices. Districts get adjacency bonuses which increase their output. The Campus (generates Science) and the Holy Site (generates Faith) both benefit from adjacent Mountains, and the effect is additive. So if you find a tile with three mountains around it, you will want to place one of these districts there. Districts also get adjacency bonuses from other districts, so the planning the layout of your cities is really important to maximize these bonuses. And they can get bonuses even with adjacent Districts that belong to a different city! Another key district is the Encampment, which let you build better, more veteran military units. Since building units requires Production, you should build build an Encampment in a city which has a lot of Production, and that probably means one with an Industrial Zone. A Harbor District would go in a city with coastal tiles, of course. All of this requires planning. Expert players will usually start out by exploring to see what the map looks like around them, what terrain features they have to work with, what resources are available, and so on. Then, around turn ten they will plan out their next cities, and figure out where they want to place districts and so on. There is a built-in “map pin” system for this, and it can be improved by installing the right mod. While you don’t have to do this, it does help you to be successful. Maps and Terrain Terrain features matter a lot in this game. We already mentioned adjacency bonuses of Mountains for Holy Sites and Campuses, but there is much more. The map is divided into Continents, and it is quite normal for a contiguous land mass to contain two or more continents if it is large enough. Think of how Europe and Asia are really just one large land mass to see what I mean. This matters because certain units may defend differently depending on which continent they are on, or some civilizations may be affected from having cities on a different continent. Terrain features like Rivers are extremely important for the placement of cities because they provide fresh water. You can sometimes get around that by building an Aqueduct to bring water from a Lake or a Mountain, but that means using up one of your city tiles, and spending production to build it. If you can place your city on a river you can avoid that problem and get off to a fast start. But the downside is that rivers can flood, and that can wreck your improvements. A big idea for terrain is Appeal. Each tile has an Appeal level ranging from Disgusting to Breathtaking, and it is determined by a combination of the tile’s features themselves and by adjacencies. The modifiers are added together to determine the Appeal level of the tile, and there is a lens you use to view your Appeal levels on all tiles, which are color coded. This matters particularly if you are trying for a Culture victory. Culture victories are own by generating Tourism, and while some that can come from things like Museums and Wonders, you will really want to maximize your Tourism to win this game, and two good ways to do that are building National Parks and Seaside Resorts. You can only do that if the appeal is at least Charming (or even better, Breathtaking). If you find you cannot build them in what seems like a good spot, chances are Appeal is the problem. So check that out. You can, for instance, remove marshes (which give negative appeal), and plant forests (which add appeal), and that might be all it takes to get these going. The underlying issue in managing your cities is that you only have so many tiles, and a tile that might be great for a farm might also be great for a District. You need food to grow, and you need to grow to put down Districts, so you are always making choices about this, and th

  2. 6d ago

    HPR4708: Programmable Logic Controls - Episode 1

    This show has been flagged as Clean by the host. Introduction 01 This is the first episode in an 8 part series. 02 This series is on programmable logic controllers, or PLCs as they are commonly known. What is a PLC you ask? In short, it is a general purpose programmable industrial control device. They are used all through industry in factories, utilities, and anywhere industrial machines need to be controlled. 03 They are a fully integrated system of hardware, software, and development environment tailored specifically for automatic industrial equipment. It is probably easiest to describe them by first giving a bit of historical background as to what preceded them. 04 The Early Days of Automation You have probably heard of the Jacquard loom of the early 19th century and its use of punch cards with respect to it being one of the technologies which eventually lead to computing. However, for our purposes here, its significance is that it was an early form of industrial automation control system, since it was after all controlling a machine in a factory. 05 For other types of machines, a common purely mechanical means of having the various parts of a complex machine move in a coordinated manner was through the use of shafts and cams. A series of cams located on a shaft or set of shafts connected by gears, could move parts of a machine, turn valves on or off, and generally coordinate the parts of a machine. With the spread of the use of electricity in factories in the early 20th century, it was now possible to use the new electrical technology to perform control and automation functions. 06 The Background of Relay Logic I will need to explain some electromechanical terminology here as it is necessary to understand these terms and the concepts behind them in order to understand PLCs, as the latter is an evolution of its predecessors and uses the same terms. What preceded PLCs was what was commonly known as "relay logic". 07 What is a Relay A relay is an electromechanical device that responds to and controls the flow of electric current. A relay has a "coil" which as the name implies is a coil of conductive wire. When you energize the coil, that is you apply electric current to it, it forms an electromagnet. 08 This electromagnet draws in an armature. The armature is a moving piece of metal which is attracted to the coil when the latter is energized. The relay being activated is referred to as closing. Deactivating is referred to as opening. Alternative names for these states are "pulls in" and "drops out" respectively. 09 The armature in turn is attached to one or more contacts. You can think of a contact as being like a switch. When the switch is turned one way, the electrical path is closed and current can flow. When it is turned the other way, the electrical path is broken and current flow is interrupted. 10 Contacts can be normally open, in which case the path is closed and current can flow when the relay turns on. Alternatively, they can be normally closed, in which case the path is closed and current can flow when the relay turns off. A relay can, and typically does, have multiple contacts, including both normally open and normally closed. Remember these terms, coil, contact, normally open, and normally closed. 11 What is a Latching Relay There is a special type of relay known as a latching relay. This was only occasionally used in relay control circuits, but the concepts behind it will become more important when we talk about actual PLCs. A latching relay has two coils. One coil is used to turn on or "set" the relay. The other coil is used to turn off or "reset" the relay. 12 The relay has either a mechanical latching mechanism or a magnet which is used to hold the relay in the set (or in other words, closed) position even if the set coil is de-energized. You must energize the reset coil in order to reset or "open" the relay. A latching relay provides the equivalent of one "bit" of memory which retains its last state even if the power to the machine is turned off. 13 Latching relays were used in applications where it was important that the relay logic circuit remember its last state. While not frequently used in relay control circuits due to their greater cost and complexity, the concept was to be more extensively used in PLC programs when set and reset instructions were provided which performed the equivalent function in software where there were no similar cost considerations to worry about. 14 Thus set and reset were to be much more frequently used in PLC programs than they were when they were actual relays. Add these terms to your list of things to remember - latch, unlatch, set and reset. 15 What is a Contactor I will mention another term now in case it happens to come up later. This is "contactor". A contactor is basically just a large relay. It is typically used to control large electrical loads such as motors and heaters. 16 Smaller relays are typically just called "relays", or sometimes "control relays". These be used to create either logic circuits or control smaller electrical loads such as lights or pneumatic or hydraulic valves. This may seem like a lot of jargon, but bear with me, I will make analogies to computers when appropriate. 17 Input and Output Devices If you want to do some useful work, you will need some I/O. Typical input devices include the following. 18 Push buttons. These are buttons which are pressed by the operator to command the machine to do something. 19 Selector switches. These are switches which are typically rotated to turn on or off and maintain their position. These can have multiple positions, each of which can activate a separate input. 20 Pilot lights. These are lights which are used to provide feedback to the operator. 21 Limit switches. These are mechanical switches which parts of the machine activate, rather than the operator activating them. This can be used to determine what position the various parts of the machine are in at any given time. 22 Proximity sensors. These are essentially solid state limit switches which are more reliable than mechanical switches as they are less subject to wear and tear. These are often colloquially abbreviated as "proxies". 23 Solenoid valves. These are like relays in that an electromagnetic coil is activated. However, instead of activating another electrical contact, it activates a pneumatic or hydraulic valve. This valve in turn typically allows air or hydraulic fluid to move a piston within a cylinder, which then moves some mechanical part of the machine. A typical machine will have lots and lots of proximity sensors and solenoid valves. 24 Relay Logic All of these inputs and outputs require some sort of logic to coordinate them. This is where control relays came in. 25 If having the output of one electrical device being able to control another electrical device sounds a bit like a transistor, then yes relays are analogous to electronic transistors. However, while transistors are a mid 20th century invention, relays date from the mid 19th century. 26 Like with transistors, it is possible to encode logic into a network of wires connecting relays together, along with inputs from switches and other input devices. By wiring sensors and relays together in the right order, it is possible to create reasonably complex sequences of operation to control a machine in an automatic manner. 27 Relay Boolean Logic Wiring relay contacts in series creates "and" conditions. Wiring them in parallel creates "or" conditions. Using normally closed relay contacts creates "not" conditions. By feeding a relay's own contacts back into the circuit leading up to its coil, it is possible to have a relay remember its own state. Each relay therefore could be thought of as one bit of logic in a boolean logic circuit. 28 Timers and Counters Special timing relays could be used to create a time delay between the relay energizing or de-energizing, and the contacts closing or opening. A timing relay which imposed a delay after being energized is an "on delay timer". A timing relay which imposed a delay after being de-energized is an "off delay timer". 29 Timing relays were often pneumatic. They had a small rubber bellows that leaked air slowly through a adjustable orifice. The bellows would prevent the relay from opening or closing, depending on the type, until enough air had leaked out for it to close or open. For more accuracy or for longer time delays, motor driven clock timers could be used. 30 Special counter relays could be used to require an input to turn on or off a specified number of times before activating the relay outputs. Counters typically used a ratchet mechanism to count up to a preset before activating. 31 Later timing and counting relays used electronic timers and counters, but these arrived relatively late at a time when relay logic was on its way out. 32 Electrical Panels Large numbers of relays would be mounted on panels in large electrical enclosures, with the wires running between them, and also out to the limit switches, valves, and other devices mounted on the machine. 33 Designing the Logic Circuit The logic or program would be encoded in the selection of the devices and in the wires running between them. To design and document this logic, the designer wo

  3. Aug 18

    HPR4707: UNIX Curio #12 - expr

    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. Arithmetic is something that one would normally expect computers to be able to do. With UNIX, one could of course always write a program to perform a calculation, but for people like me who are bad at programming, it would be nice to have a tool that makes things a bit easier. First Edition UNIX in 1971 included such a tool, called dc , which stands for "desk calculator" 1 . This utility performed integer arithmetic (though later versions can handle real numbers) using reverse Polish notation. To divide 11 by 4 with this method, instead of entering "11 ÷ 4 =", you would key in "11 ENTER 4 ENTER ÷". The very first calculator I ever used, one made by Hewlett-Packard that my father brought home from work a few times, employed reverse Polish notation but I have never gotten used to it. All the calculators I have made significant use of and bought for myself used the more common infix notation "11 ÷ 4"—I also prefer computer utilities following that pattern, so I almost never use dc . For reasons explained in the rationale for the bc utility 2 , dc has not been standardized in POSIX despite its long tenure. However, while it doesn't seem to get a lot of attention, I still would not consider dc to be a UNIX Curio. Today, it is possible to do integer arithmetic in a standard POSIX shell without any outside utilities. This is called "arithmetic expansion" and is described in references or manual pages for many shells. It wasn't always this way, however. Before a shell was available that supported arithmetic expansion, you needed to call another utility for your calculations, and expr was one of those 3 . That program is the UNIX Curio for this episode. Some people might pronounce this name, but I find it awkward to say, so I just spell out expr the same as I would do with dc . Its name is an abbreviation of "expression", and it takes arguments representing an expression. An expression is formed by combining integers or strings with zero or more operator symbols. There is quite a variety of operators—some are mathematical, some perform comparisons, one matches a regular expression, and others are used for grouping or logical tests. Since we started this episode talking about arithmetic, let's tackle those first. The "+", "-", "*", and "/" symbols are for performing addition, subtraction, multiplication, and division respectively, as is common in many programming and scripting languages. The "%" produces the remainder of integer division. So, expr 11 / 4 would output 2 ; it only does integer calculations. The command expr 11 % 4 would output 3 —in this case, the remainder left after "4" is removed from "11" twice. Take note that expr expects the integers or strings and operators it is given to all be separate arguments. Running expr 11/4 would just output the string 11/4 because the slash is not treated as being an operator. You also need to be careful with characters that have meaning to the shell— expr 11 * 4 would probably result in an error because the shell will expand the asterisk to a list of files in the current directory. You would have to use expr 11 \* 4 or expr 11 "*" 4 instead to multiply those numbers. It is possible for each integer to be preceded by a hyphen (with no spaces in between), meaning the number is negative. However, you need to be careful here, too. The command expr $a + 1 could potentially fail if the value of $a is -1 —some implementations might treat the -1 as being an option to expr . (While POSIX does not specify any options, an implementation of the utility could add them as an extension.) The safer method is to make sure the variable doesn't appear first: expr 1 + $a would work, as would expr \( $a \) + 1 . Parentheses can be used for grouping; in this example, they just prevent the value of $a from being the first argument. Another way to prevent a value from being treated as an option is to put the standard two hyphens after expr , signaling the end of options (for example, expr -- $a + 1 ). The result of evaluating the expression is printed to standard output. The exit status of expr is also set based on the result—if the expression is evaluated successfully and the result is not zero or the null string, the exit status will be 0. The exit status is 1 if evaluation is successful and results in either zero or the null string. When the expression is invalid, the exit status will be 2 and if some other error occurs, it will be greater than 2. A script using expr can therefore potentially take some action depending on its exit status, the value it outputs, or both. The next set of operators recognized by expr consists of comparison operators. These include "=", "!=", ">", ">=", " operators to the test utility in 2024 5 — earlier versions just offered = and != 6 , so expr guaranteed more functionality up until just recently. There is a semantic difference between how = and != in the two utilities behave with strings. In test , those operators mean "is (or is not) identical", while in expr they mean "collates (or does not collate) the same in the current locale". If this is important to you, there is no way to get the other behavior under standard POSIX with either of these utilities, so you have to choose the right one. I have to say that it is unclear to me how "collates the same" is applied in practice; some examples I tried did not reflect what I expected. My reading of the Unicode standards would imply that the presence of a ZERO WIDTH SPACE character (Unicode code point U+200B, represented in octal escape sequences as \342\200\213) does not affect how a string collates. However, expr seems not to ignore it. The below was obtained on Debian 12 using the en_US.UTF-8 (US English) locale, but I got the same results on FreeBSD 15.0. Reminder: in the output of expr , 1 means true and 0 means false. $ printf 'abcd\n' abcd $ printf 'ab\342\200\213cd\n' ab​cd $ expr "abcd" = "$(printf 'ab\342\200\213cd')" 0 $ expr "abcd" \> "$(printf 'ab\342\200\213cd')" 1 Another section of the same Unicode reference outright states that the three code points U+212B, U+00C5, and A followed by U+030A are equivalent. I tried the below on Debian 12, using the da_DK.UTF-8 (Danish) locale to be sure this character was not excluded. These were not treated as being the same by expr . All three had a different appearance in the terminal program I was using (Konsole). $ printf '\342\204\253\n' Å $ printf '\303\205\n' Å $ printf 'A\314\212\n' Å $ expr "$(printf '\342\204\253')" = "$(printf '\303\205')" 0 $ expr "$(printf '\342\204\253')" \ "$(printf 'A\314\212')" 1 $ expr "$(printf '\342\204\253')" = "$(printf 'A\314\212')" 0 $ expr "$(printf '\342\204\253')" \> "$(printf 'A\314\212')" 1 Another difference is that test has two separate sets of comparison operators—one set does numerical comparisons and the other does string comparisons. Normally in a script, you would want to be as explicit as possible about the type of comparison you want. However, there might be circumstances where you want the type of comparison to depend on what the two values are. That is how expr works, so in that situation you might want to use it instead. It would be possible to use a case construct in the shell to choose, based on the values, whether to use the arithmetic or string comparison operators with test , but expr does that for you automatically (see the Appendix for an example of duplicating its behavior). For matching using the : operator, expr offers a syntax that is slightly less flexible than grep . On some systems, expr can be a smaller binary, but at most I've seen it be about 80 kilobytes smaller, so that's unlikely to be a real savings in practice. To get the length of a regular expression match, one could use the match() function of awk instead. The ability of expr to return a subexpression match is neat, but sed can also accomplish that. The expr utility first appeared 7 in a version of UNIX from Bell Laboratories called the Programmer's Workbench 8 1.0, released in 1977. From there, it made its way into 1979's Seventh Edition UNIX 9 , which is where the test utility made its first appearance 10 . The overlap between the capabilities of the two utilities seems a little strange to me, but I haven't dug into details of the history—perhaps they were developed separately and just happened to meet in Seventh Edition. It took substantially longer for arithmetic to be a feature built directly into the shell, at least on versions of UNIX from Bell Laboratories/AT&T. The Korn shell (ksh), included with Eighth Edition UNIX 11 in 1985, offered it with the let keyword or (( ... )) syntax, but these have not been adopted by POSIX. I couldn't track down exactly when the standard shell gained the syntax $(( ... )) for arithmetic expansion used today—it was not present in 1989's Tenth Edition UNIX 12 , but did appear in The Open Group's CAE Specification from 1994 13 (a standard that existed alongside POSIX), so presumably it showed up somewhere in between. Separately, BSD's C shell (csh) included arithmetic expressions from its first appearance in 2BSD 14 in 1979, very much in line with that shell adopting syntax from the C programming language, so the concept was not new. My overall conclusion is that almost everything that expr does can be performed with another, better-known utility. The exception would be the way the = and != operators behave, which to my knowledge isn't duplicated by another stand

  4. Aug 17

    HPR4706: Quirks and Customisations

    This show has been flagged as Clean by the host. System Quirks & Tweaks System Info:- CPU: 16-core AMD Ryzen 9 3950X (-MT MCP-) speed/min/max: 2433/2200/4761 MHz Kernel: 6.8.0-134-generic x86_64 Up: 18h 28m Mem: 17.58/62.73 GiB (28.0%) Storage: 3.64 TiB (81.9% used) Procs: 616 Shell: Bash inxi: 3.3.34 Some of the hacks:- Shell & Terminal Setup Visual Host Identifiers: I use custom terminal prompt colors and styles on different boxes so I can immediately see which machine I am logged into. Command Line Overrides: Standard tools are aliased to modern alternatives ( cat to batcat , df to duf , du to dust , ls to eza ). Word-Break Tweak: My shell config strips - and . from word-break rules so tab-completion handles hyphenated or dotted filenames as single words. History Search: I mapped Ctrl+F (instead of Ctrl+R ) to run a custom, colorized, interactive fuzzy history search using fzf . Local AI Tooling: I use AI coding interfaces, with ollama aliased to run Qwen Coder by default. Complex Toolchains: My system runs multiple co-existing environments, including conflicting Java runtimes (8 and 17), Android SDK, Rust, Go, and local Perl/Python libraries. Autostart & Background Services Audio & RGB Tweaks: Custom services handle Bluetooth switching for my Bose QC35 headphones, and cycled my keyboard lighting profiles based on the time of day. Passive Time Tracker: A custom background system tracks files via inotifywait and polls network connections to log my work hours into a 15-minute rounded log file. Typo Alert Keylogger: A root-owned background script buffered my keystrokes globally to run a spellcheck, firing a desktop alert when I made a typo. Work/Life Balance: Discord is configured to launch only on weekends or after 17:30 on weekdays. Custom Applications & Launchers Local LLM Voice Assistant: A desktop launcher opened "Marvin," a private local voice-chat assistant. Custom Remote Control: A custom script used ADB and Monkeyrunner to mirror and control an Android tablet screen in a local window. KWin Layout Fixes: Joplin is set to bypass the taskbar. Custom Panel Widgets Weather & Brightness: Custom scripts feed my desktop panel with weather emojis from the 7Timer! API and let me change external monitor brightness using ddcutil over I2C. Notification Pipelines: Custom shell scripts polled for SMS and email alerts, using MD5 hashes of the text blocks to ensure I never got duplicate notifications. Fake GPS Server: A tiny local server on port 22222 returns my home coordinates to any local app requesting geolocation. Repurposed "Radio" Panel Hardware Recycling: An old Android tablet with a broken screen is used as a green-screen terminal. It runs a custom WebView app to display ambient data. Gmail Push Pipeline: A local PHP script runs via cron every 10 minutes to fetch new email alerts and send them to the tablet over the local network. Provide feedback on this episode.

  5. Aug 14

    HPR4705: Free Software Is Wasted On You Teens

    This show has been flagged as Explicit by the host. Freedom 0–3 (verbatim reference) The four freedoms, GNU/FSF: https://www.gnu.org/philosophy/free-sw.html Richard Stallman: https://www.stallman.org/ Named FOSS figures (freedom 3 list) Linus Torvalds (Linux): https://en.wikipedia.org/wiki/Linus_Torvalds Dries Buytaert (Drupal): https://dri.es Guido van Rossum (Python): https://gvanrossum.github.io Ian Murdock (Debian): https://en.wikipedia.org/wiki/Ian_Murdock Brian Behlendorf (Apache): https://en.wikipedia.org/wiki/Brian_Behlendorf Miguel de Icaza (GNOME/Mono): https://en.wikipedia.org/wiki/Miguel_de_Icaza Infrastructure block (post beer 1) curl / Daniel Stenberg: https://curl.se and https://daniel.haxx.se xkcd 2347 (dependency comic): https://xkcd.com/2347/ xz backdoor, CVE-2024-3094: https://en.wikipedia.org/wiki/XZ_Utils_backdoor Andres Freund's original disclosure: https://www.openwall.com/lists/oss-security/2024/03/29/4 Licensing block (beer 2–3) GPL: https://www.gnu.org/licenses/gpl-3.0.html MIT License: https://opensource.org/license/mit FreeBSD: https://www.freebsd.org macOS/Darwin BSD lineage: https://en.wikipedia.org/wiki/Darwin_(operating_system) PlayStation using FreeBSD (Orbis OS): https://en.wikipedia.org/wiki/Orbis_OS Industry acquisitions (beer 4) Microsoft acquires GitHub, 2018, $7.5B: https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/ FOSDEM field report (beer 4–5) FOSDEM: https://fosdem.org Ladybird browser / Andreas Kling: https://ladybird.org Godot Engine: https://godotengine.org Home Assistant: https://www.home-assistant.io Redis → Valkey fork: https://valkey.io Terraform → OpenTofu fork: https://opentofu.org Homework block (beer 5) Ollama: https://ollama.com Codeberg: https://codeberg.org LibreOffice: https://www.libreoffice.org Firefox: https://www.mozilla.org/firefox Provide feedback on this episode.

  6. Aug 12

    HPR4703: Ebooks and Audiobooks

    This show has been flagged as Clean by the host. I tend to prefer Ebook and Audiobooks to physical books, and these are some of the apps I use, and some of the sources I go to to find Ebooks or Audiobooks. These can be inexpensive, or in the case of Public Domain, free. Ebooks and Audiobooks I no longer wish to devote space to accumulating and storing physical books. As a former college professor I had more of them than most people, and tended to fill the house with bookcases and shelves. That made a certain sense in the pre-Internet years since I would often want to go back to them to look up things. But now I have more information at my fingertips than I ever had in those days, and I find it more convenient to just look up anything I need to know. And with Ebooks I can take my library with me anywhere I go. This means if I am sitting in a waiting room for a Doctor’s appointment (and at my age that happens often enough) I can just pull out my phone and open up a book. I always have at least one. Right now on my phone I have apps for Kindle , Google Play , Barnes & Noble Nook , Kobo Cantook (successor to Aldiko), Bookshop.org , and Calibre . As for devices other than my phone, I own a kindle, I once owned a Nook, and I will buy a Kobo reader when Trump is gone. Kobo is Canadian, and last time I looked Trump had put on a tariff that was twice what the device costs. And finally I have the Bookshop.org app and Calibre. I started collecting Ebooks some years back, and at first the only option seemed to be buying them from large corporations. That has changed now, but I still have collections On Kindle, Google Play, Nook, and Kobo. I have all four because it seemed prudent to not put all my eggs in one basket. But now there are other options. One I like to use when possible is Bookshop.org. It is group of independent bookstores and I would rather support them than some giant corporation. And they seem to have all of the popular titles. Another similar site is Books-a-Million , which lets you order online and pick up at a local store if you need a physical book. Cantook and Calibre are both good for holding any miscellaneous Ebooks you have, and you can give them your Ebooks from the other sellers, though I have found that the native apps tend to work better. These days I rarely purchase books on Kindle, etc. But sometimes they have a special deals. If you want to build your library, there are some good places to try. One is BookBub which will send you emails with deals on books. On any one e-mail you may not see anything you want, but I found that once or twice a month I did see books I wanted and at good prices. And Books-a-Million has 99 cent deals to check out. But if you want to get free books, you have several options. If you want a chance to read a popular Ebook but don’t need to own it, see what your local Library offers. Mine offers Hoopla which is good for Ebooks, Audiobooks, and streaming music. What you can find depends on what your library has in its collection, but my wife uses it almost daily for audiobooks. Then there are the works that have become part of the Public Domain. This varies somewhat by your country, but you might be surprised to learn how much is available. For Ebooks one of the biggest sites is Project Gutenberg . They follow US Copyright law for their collection, and they are a non-profit that can always use some support, so if you use them, give them a few Dollars or Euros. They tend to be the source for many or most other sites for Public Domain Ebooks They have over 75,000 free Ebooks. A newer site is Faded Page which is much smaller but focused on Canadian works. Standard Ebooks is a site that pulls from Project Gutenberg but does some additional formatting and is very easy to read online in your browser. For Audiobooks a good source is Open Culture , which advertises it has 1,000 free Audiobooks. We should also mention LibriVox , which also pulls from Project Gutenberg for its texts, but then turns them into Public Domain Audiobooks. They are always looking for volunteers who have a microphone and a computer to record Public Domain audiobooks. And last but not least the Internet Archive has tons of Ebooks and Audiobooks that are free. Links https://www.amazon.com/kindle/ https://play.google.com/store/books?hl=en_US&pli=1 https://www.barnesandnoble.com/b/ebooks-nook/_/N-8qa https://www.kobo.com/us/en?srsltid=AfmBOoquJmiNH_aVTUx22AIRlBH8CF4iir4H8qpTKjQ4dZ-fSMCDAaD7 https://market.cantook.com/ https://bookshop.org/ebooks https://calibre-ebook.com/ https://www.booksamillion.com/ https://www.bookbub.com/ https://www.hoopladigital.com/ https://www.gutenberg.org/ https://www.fadedpage.com/ https://standardebooks.org/ https://www.openculture.com/freeaudiobooks https://librivox.org/ https://archive.org/ https://www.palain.com/ebooks-and-audiobooks/ Provide feedback on this episode.

4.2
out of 5
34 Ratings

About

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.

You Might Also Like