2025-12-31 05:00:38

With two cores at 240 MHz and about 8.5 MB of non-banked RAM if you’re using the right ESP32-S3 version, this MCU seems at least in terms of specifications to be quite the mini PC. Obviously this means that it should be capable of self-hosting its compiler, which is exactly what [Valentyn Danylchuk] did with the xcc700 C compiler project.
Targeting the Xtensa Lx7 ISA of the ESP32-S3, this is a minimal C compiler that outputs relocatable ELF binaries. These binaries can subsequently be run with for example the ESP-IDF-based elf_loader component. Obviously, this is best done on an ESP32 platform that has PSRAM, unless your binary fits within the few hundred kB that’s left after all the housekeeping and communication stacks are loaded.
The xcc700 compiler is currently very minimalistic, omitting more complex loop types as well as long and floating point types, for starters. There’s no optimization of the final code either, but considering that it’s 700 lines of code just for a PoC, there seems to be still plenty of room for improvement.
2025-12-31 03:30:00

People say they don’t make em’ like they used to, and while this isn’t always the case, it’s certainly true that old vices rarely die with time. This doesn’t mean they can’t use a refresh. [Marius Hornberger] recently backed that up when he decided to restore an old vice that had seen better days.

When refreshing old tools, you’ll almost always start the same: cleaning up all the layers of grease and ruined paint. The stories that each layer could tell will never be known, but new ones will be made with the care put into it by [Marius]. Bearings for the tightening mechanism had become worn down past saving, requiring new replacements. However, simply swapping them with carbon copies would be no fun.
[Marius] decided to completely rethink the clamping mechanism, allowing for much smoother use. To do this was simple, just machine down new axial bearings, design and print a bearing cage, machine the main rod itself, and finally make a casing. It’s simple really, but he wasn’t done and decided to create a custom torque rod to hammer in his vicing abilities. Importantly, the final finish was done by spraying paint and applying new grease.
Old tools can often be given new life, and we are far from strangers to this concept at Hackaday. Make sure to check out some antique rotary tools from companies before Dremel!
2025-12-31 02:00:02

Our computers can display an astonishing range of symbols. Unicode alone defines more than 150,000 characters, covering everything from mathematical operators and phonetic alphabets to emoji and obscure historical scripts. Our keyboards, on the other hand, remain stubbornly limited to a few dozen keys.
On Windows, the traditional workaround involves memorizing numeric codes or digging through character maps. Linux, being Linux, offers something far more flexible: XCompose. It’s one of those powerful, quietly brilliant features that’s been around forever, works almost everywhere, and somehow still feels like a secret.
XCompose is part of the X11 input system. It lets you define compose sequences: short key sequences that produce a Unicode character. Think of it as a programmable “dead key” system on steroids. This can be as simple as programming an ‘E’ to produce a Euro sign or as complex as converting “flower” into a little flower emoji. Even though the system originated with X11, I’ve been told that it mostly works with Wayland, too. So let’s look deeper.
The secret is the Compose or Multi-key. You press it to essentially escape into XCompose mode, so when you type “flower”, it knows you don’t want to insert those literal letters in. You can pick which keyboard key is your compose key in your system settings. The Right Alt or Ctrl key is a common choice. I use my Caps Lock key, since I never really use it for anything else.
You can set the Compose key in other ways, too, including in ~/.XCompose, but it is usually easier to set it in the system settings. However, ~/.XCompose is one place you can set up custom rules.
By default, though, you should have some useful combos. For example, <Compose> ' e it should give you é and <Compose> " o should give you ö. The default rules are in /usr/share/X11/locale/*/Compose, where the * is your locale of choice.
The defaults usually cover a lot of ground. But you may want to define your own. You can do that by creating or editing ~/.XCompose. This file can contain rules or include other rule files. I have heard, however, that Wayland doesn’t do includes, so if you use that, it is something to keep in mind.
The file format is simple enough, with each line being a definition:
<Multi_key><a><e> : "æ"
Don’t make the mistake of trying to write something like <@>. All the special characters need the names from X11’s keysymdef.h file like <at> or <asterisk>.
When you make a custom file, you’ll usually start with:
include "%L"
This tells the system to load the defaults for your locale. You can also use %H for your home directory or %S for the system directory. When using some systems, you may have to include “/%L” instead.
Formally, the configuration line looks like this:
<EVENT>... : <RESULT> # comment
The <EVENT> allows you to not only specify keys but also modifiers that must be or must not be present. The <RESULT> can be a string or a character, and you can even insert an octal or hex number to be sure you get the key you want. For more, read the man page.
It is worth noting that any definition you provide will override the system ones, so if you don’t like something, it is easy to redefine it to something else. One nice thing is that the result doesn’t have to be a single character. You can use an entire string system. So:
<Multi_key> <c> <q> : "CQ de WD5GNR K"
As far as I know, there’s no way to embed a newline in the result that always works. You can try using something like \xa, for example, but \n doesn’t work. Also, no substitutions work on password/PIN entry, and that’s by design.
You can build up strings that make sense to you. But you know someone’s already done it. The repo has a core file of interesting definitions and some extra ones, too. My suggestion: don’t use their install function, which only gives you the core. Just create your own file like this, adjusting for wherever you put the files:
include "%L" include "/home/xxx/xcompose/dotXCompose" include "/home/xxx/xcompose/frakturcompose" include "/home/xxx/xcompose/emoji.compose" include "/home/xxx/xcompose/modletters.compose" include "/home/xxx/xcompose/parens.compose"
Keep in mind that when you change this file, it will only apply to GUI apps you started after the change. Try <Compose> : ) to get
among others.
And if you don’t like that collection, there are others.
Music? Try ♭ (#b) or ♯ (##). You can even make notes like ♪ (#e). Prefer math? How about ≠ (/=) or a square root symbol √ (v/). If your math runs more to accounting, you can write about Euros (€ – =E) or Yen (¥ – =Y). Hams will appreciate /O which produces Ø (note, that is an upper case O on the input).
There are plenty of other ones, too. The best way to know is to look in the files you are using and experiment.
<Multi_key> <3> <3> : "¯\_(ツ)_/¯" # Shrug
It is easy to code up things like your name, your e-mail address, and more. Since you can use names instead of cryptic keystrokes, it is much easier to use. For example, I forget that my name is on Macro+F5, but <Compose>@name is easy to remember. I find it makes it easy to remember if I prefix all (or most of ) my personal commands with some character like “@.” So I might have @name, @add, @tel, and @email, for example. Just don’t forget, the actual rules have to use the key names:
<Multi_key><at><n><a><m><e>:"Al Williams"
Some applications, notably GTK apps, won’t work with XCompose without some tweaking. In particular, you may need to override the default input method. If this problem bites you, a quick search for “XCompose and GTK” should give you some advice. There’s always a chance your app, or even some input fields in your app, won’t work with XCompose. That’s life.
Keep in mind that XCompose only works in the GUI. It isn’t context-aware. It doesn’t allow you to insert multiple lines. If you need scripting and other advanced features, this isn’t the right place to be. Want to just map keys sometimes? You can do it, but not with this tool.
But for nearly universal keyboard remappings, it works quite well, once you get used to the syntax. Have a favorite line in your .XCompose? Share it in the comments!
2025-12-31 00:30:00

The USB port which first appeared on our computers some time in the mid-1990s has made interfacing peripherals an easy task, save for the occasional upside down connector. But in the days before USB there were a plethora of plugs and sockets for peripherals, often requiring their own expansion card. Among these were mice, and [Robert Smallshire] is here with a potted history of the many incompatible standards which confuse the retrocomputing enthusiast to this day.
The first widely available mice in the 1980s used a quadrature interface, in which the output from mechanical encoders coupled to the mouse ball is fed directly to the computer interface which contains some form of hardware or microcontroller decoder. These were gradually superseded by serial mice that used an RS-232 port, then PS/2 mice, and finally the USB variant you probably use today.
Among those quadrature mice — or bus mice, as early Microsoft marketing referred to them — were an annoying variety of interfaces. Microsoft, Commodore, and Atari mice are similar electrically and have the same 9-pin D connector, yet remain incompatible with each other. The write-up takes a dive into the interface cards, where we find the familiar 8255 I/O port at play. We’d quite like to have heard about the Sun optical mice with their special mouse pad too, but perhaps their omission illustrates the breadth of the bus mouse world.
This piece has certainly broadened our knowledge of quadrature mice, and we used a few of them back in the day. If you only have a USB mouse and your computer expects one of these rarities, don’t worry, there’s an adapter for that.
2025-12-30 23:00:18

A friend of mine is producing a series of HOWTO videos for an open source project, and discovered that he needed a better microphone than the one built into his laptop. Upon searching, he was faced with a bewildering array of peripherals aimed at would-be podcasters, influencers, and content creators, many of which appeared to be well-packaged versions of very cheap genericised items such as you can find on AliExpress.
If an experienced electronic engineer finds himself baffled when buying a microphone, what chance does a less-informed member of the public have! It’s time to shed some light on the matter, and to move for the first time in this series from the playback into the recording half of the audio world. Let’s consider the microphone.
A microphone is simply a device for converting the pressure variations in the air created by sounds, into electrical impulses that can be recorded. They will always be accompanied by some kind of signal conditioning preamplifier, but in this instance we’re considering the physical microphone itself. There are a variety of different types of microphone in use, and after a short look at microphone history and a discussion of what makes a good microphone, we’ll consider a few of them in detail.

The development of the microphone in the late 19th century is intimately associated with that of the telephone rather than the phonograph, as these recording devices were mechanical only and had no electrical component. The first practical microphones for the telephone were carbon microphones, a container of carbon granules mechanically coupled to a metal diaphragm, which formed a crude variable resistor modified by the sound waves. They were especially suitable for the standing DC current of a telephone line and though they are too noisy for good quality audio they continued in use for telephones into recent decades. The ancestors of the microphones we use today would arrive in the early years of the 20th century along with the development of electronic amplification and recording.

The job of a microphone is to take the sounds surrounding it and convert them into electrical signals, and invariably that starts with some form of lightweight diaphragm which vibrates in response to the air around it. The idea is that the mass of the diaphragm is as low as possible such that its physical properties have a minimal effect on the quality of the audio it captures. This diaphragm will be surrounded by whatever supporting structure it needs as well as any other components such as magnets, and the structure surrounding it will be designed to minimise vibration and shape the polar pattern over which it is sensitive.
Depending on the application there are microphone designs with a variety of patterns, from an omnidirectional when recording a room, through bidirectional figure-of-eight used in some studio environments, to cardioid microphones for vocals and speech with a kidney-shaped pattern, to extremely directional microphones used by filmmakers. Of those the cardioid pattern is the one most likely to find itself in everyday use by someone like my friend recording voice-overs for video.
Having some idea of microphone history and principles, it’s time to look at some real microphones. We’re not going to cover every single type of microphone, instead we’re going to cover the three most common, to represent the ones you are likely to find for affordable prices. These are dynamic microphones, condenser microphones, and their electret cousins.

A dynamic microphone takes a coil of wire and suspends it from a diaphragm in a magnetic field. The diaphragm moves the coil, and thus an audio voltage is generated. The diaphragm will typically be a polymer such as Mylar, and it will usually be suspended around its edge by a folded section in a similar manner to what you may have seen on the edge of a loudspeaker cone. The output impedance depends upon the winding of the coil, but is typically in the range of a few hundred ohms. They have a low level output in the region of millivolts, and thus it is normal for them to connect to some kind of preamplifier which may be built in to a mixing desk or similar. The microphone cartridge pictured is from a cheap plastic bodied one bundled with a sound card. You can see the clear plastic diaphragm, as well as the coil. The magnet is the shiny metal object in the centre.

A capacitor microphone is, as its name suggests, a capacitor in which one plate is formed by a diaphragm.This diaphragm is usually an extremely thin polymer, metalised on one side.
The sound vibrations vary the capacitance of the device, and this can be retrieved as a voltage by maintaining a constant charge across the microphone. This is typically achieved with a DC voltage in the order of a few hundred volts. Since the charge remains constant while the capacitance changes with the sound, the voltage on the microphone will change at the audio frequency. Capacitor microphones have a high impedance, and will always have an accompanying preamplifier and power supply circuit as a result.

Electret microphones are a special class of capacitor microphone in which the charge comes from an electret material, one which holds a permanent electric charge. They thus forgo the high voltage power supply for their DC bias, and usually have a built-in FET preamp in the cartridge needing a low voltage supply such as a small battery. The attraction is that electret cartridges can be had for very little money indeed, and that the cheap electret cartridges are of surprisingly high quality for their price.
So yes, even knowing a bit about microphones, you’re still left just as confused when browsing the options. The questions you need to ask yourself aside from your budget then are these: what do I want to use if for, and what do I want to plug it in to? Let’s talk practicalities.

There are a variety of different physical form factors for microphones, usually at the cheaper end of the market a styling thing emulating famous more expensive models. Often the ones aimed at content creators have a built-in desk stand, however you may prefer the flexibility of your own stand. There are also all manner of pop filters and other accessories, some of which appear to be more for show than utility.
You will need to ask yourself what polar pattern you are looking for, and the answer is cardioid if you are recording your speech — its directional pattern rejects background noise, and focuses on what comes out of your mouth. You might also think about robustness; are you taking this microphone out on the road? A stage microphone makes a better choice if it will see a hard life, while a desktop microphone might make more sense if it rarely leaves your computer.
In front of me where this is being written is my microphone. I take it out on the road with me so I needed a robust device, plus I like the look of a traditional handheld microphone. The standard stage vocal dynamic microphones is unquestionably the Shure SM58, a robust and high-performance device that has stood the test of time. At £100, it’s out of my price range, so I have a cheaper mic from another well-known professional audio manufacturer that is obviously their take on the same formula. It is plugged in to a high-quality musician’s USB microphone interface, a USB sound card and mixer all-in-one. It serves me well, and if you’ve caught a Hackaday podcast with me on it you’ll have heard it in action.
If you’re not going to invest into an audio interface, you will be looking for something with a built-in amplifier and ADC, and probably something that plugs straight into USB. These are myriad, and the quality varies all over the place. For voice recording, a cardioid pattern makes sense, and an amplifier with low self-noise is desirable. If the amplifier picks up the USB bus noise, move on.
So in this piece I hope I’ve answered the questions of both my friend from earlier, and you the reader. It’s no primer for equipping a high-end studio, but if you’re doing that it’s likely you’ll already know a lot about microphones anyway.
2025-12-30 20:00:17

During the 1990s, everyone wanted to surf the information super-highway — also known as the World Wide Web or just ‘Internet’ — but not everyone was interested in getting one of those newfangled personal computers when they already had a perfect good television set. This opened a market for TV-connected thin clients that could browse the web with a much lower entry fee, with the WebTV service being launched in 1996. Bought by Microsoft in 1997 and renamed MSN TV, it lasted until 2013. Yet rather than this being the end, the service is now being revived by members of the community through the WebTV Redialed project.

The project, which was recently featured in a video by [MattKC], replaces the original back-end services that the thin clients connected to via their dial-up modems, with the first revision using a proprietary protocol. The later and much more powerful MSN TV 2 devices relied on a standard HTTP-based protocol running on Microsoft’s Internet Information Services (IIS) web server and Windows.
What’s interesting about this new project is that it allows you to not just reconnect your vintage WebTV/MSN TV box, but also use a Windows-based viewer and more. What difficulty level you pick depends on the chosen hardware and connection method. For example, you can pair the Raspberry Pi with a USB modem to get online thanks to the DeamPi project.
Interestingly, DreamPi was created to get the Sega Dreamcast back online, with said console also having its own WebTV port that can be revived this way. Just in case you really want to get the full Dreamcast experience.