Linux Fu: Customizing Printf

When it comes to programming in C and, sometimes, C++, the printf function is a jack-of-all-trades. It does a nice job of quickly writing output, but it can also do surprisingly intricate formatting. For debugging, it is a quick way to dump some data. But what if you have data that printf can’t format? Sure, you can just write a function to pick things apart into things printf knows about. But if you are using the GNU C library, you can also extend printf to use custom specifications. It isn’t that hard, and it makes using custom data types easier.

An Example

Suppose you are writing a program that studies coin flips. Even numbers are considered tails, and odd numbers are heads. Of course, you could just print out the number or even mask off the least significant bit and print that. But what fun is that?

Here’s a very simple example of using our new printf specifier “%H”:

printf("%H %H %H %H\n",1,2,3,4);
printf("%1H %1H\n",0,1);

When you have a width specification of 1 (like you do in the second line) the output will be H or T. If you have anything else, the output will be HEADS or TAILS.

Continue reading “Linux Fu: Customizing Printf”

Retrotechtacular: The $175,000 Laser Printer

Laser printers today are cheap and readily available. But in 1976, they were the height of printing technology. The IBM 3800 was the $175,000 printer to have in that year. (Video, embedded below.) But you couldn’t have one on your desktop. Even if you could afford it, the thing is the size of a car, and we don’t even want to guess what it weighs. The printer took tractor-fed continuous form paper and could do 167 pages a minute at about 150 dots per inch (actually 180 x 144). For the record, that was as much as 1.7 miles of paper an hour!

In those days, people who would use this printer traditionally had massive banks of noisy impact printers. We imagine this device saved many data processing person’s hearing. Compared to a modern laser printer, though, it needed a lot of maintenance. For example, the initial models needed a xenon flash lamp replaced every month, although later models could go years on one bulb. Looking at some of the hardware in the video, it was probably made closer to the end of life for these printers which were made through 1999.

Continue reading “Retrotechtacular: The $175,000 Laser Printer”

When Is Damascus Steel Not From Damascus?

If you grow up around a working blacksmith’s forge, there are a few subjects related to metalwork on which you’ll occasionally have a heated discussion. Probably the best known is the topic of wrought iron, a subject I’ve covered here in the past, and which comes from the name of a particular material being confused with a catch-all term of all blacksmith-made items. I’ve come to realise over recent years that there may be another term in general use which is a little jarring to metalwork pedants, so-called Damascus steel. Why the Syrian capital should pop up in this way is a fascinating story of medieval metalworking, which can easily consume many days of research.

Damascus? Where’s That?

A section of a knife blade with various silver grey and black layered patterns in the metal.
The banded pattern of the laminate formed from pattern welded layers of differing steels in a modern Damascus steel knife. “DamaszenerKlinge” by Soerfm

The Damascus steel you’ll see in YouTube videos, TV shows, and elsewhere is a steel with complex bands and striations on its surface. It’s often used in knife blades, and it will usually have been chemically treated to enhance the appearance of the patterns. It’s a laminate material made by pattern welding layers of different steels together, and it will usually have been worked and folded many times to produce a huge number of very thin layers of those steels. Sometimes it’s not made from sheets or ingots of steel but from manufactured steel products such as chains, in an attempt to produce a result with more unusual patterns. Continue reading “When Is Damascus Steel Not From Damascus?”

Hackaday Podcast Ep 241: Circuit Bending, Resistor Filing, The Butterfly Keyboard, And The Badge Reveal

Hackaday Editors Elliot Williams and Tom Nardi meet up virtually to talk about the week’s top stories and hacks, such as the fine art of resistor trimming and lessons learned from doing overseas injection molding. They’ll go over circuit bending, self-driving cars, and a solar camera that started as a pandemic project and turned into an obsession. You’ll also hear about Linux on the Arduino, classic ICs etched into slate, and an incredible restoration of one of the most interesting Thinkpads ever made. Stay tuned until the end to hear about a custom USB-C power supply and the long-awaited Hackaday Supercon 2023 Vectorscope badge.

Check out the links below if you want to follow along, and as always, tell us what you think about this episode in the comments!

Download your own, unlimited-edition MP3 of this week’s podcast.

Continue reading “Hackaday Podcast Ep 241: Circuit Bending, Resistor Filing, The Butterfly Keyboard, And The Badge Reveal”

This Week In Security: Browser Exploits, Play Protect, And Turn ON Your Firewall!

Google Chrome has done a lot of work on JavaScript performance, pushing the V8 engine to more and more impressive feats. Recently, that optimization has one more piece, the Maglev compiler, which sits between Sparkplug and TurboFan, as a mid-tier optimization step. With a Just In Time (JIT) system, the time saving of code optimization steps has to be carefully weighed against the time costs, and Maglev is another tool in that endless hunt for speed. And with anything this complicated, there’s the occasional flaw found in the system. And of course, because we’re talking about it here, it’s a security vulnerability that results in Remote Code Execution (RCE).

The trick is to use Maglev’s optimization against it. Set up a pair of classes, such that B extends A. Calling new B() results in an attempt to use the constructor from A. Which works, because the compiler checks to make sure that the constructors match before doing so. There’s another way to call a constructor in JS, something like Reflect.construct(B, [], Array);. This calls the B constructor, but indicates that the constructor should return an Array object. You may notice, there’s no array in the A class below. Tricking the compiler into using the parent class constructor in this fashion results in the array being uninitialized, and whatever happens to be in memory will set the length of the array. Continue reading “This Week In Security: Browser Exploits, Play Protect, And Turn ON Your Firewall!”

You’ve Got Mail: Grilled, Scrambled, And Other Delicious Stamps

Well, we’re just zipping right through this series, no? So far we’ve looked at various postal machines and how they work to flip mail around, cancel the postage, and sort it, all in a matter of seconds. We explored the first automated post office and found out why it was a failure, and we learned why it all depends on ZIP code. Now, it’s finally time for some really fun stuff: the stamp trivia.

Now I’m no philatelist by any standard, though I do have a few hundred stamps strewn about the house. The danger in philately is that you learn all sorts of cool things about stamps and their history, and you just want to buy more and more of them. So let’s go!

Continue reading “You’ve Got Mail: Grilled, Scrambled, And Other Delicious Stamps”

2023 Hackaday Supercon Badge: Welcome To The Vectorscope

This year, the Supercon badge goes analog! (Or at least fakes it pretty convincingly.) Taking inspiration from the phosphor scopes of yesteryear, the 2023 Vectorscope badge is part analog audio playground, part art project, and all about prototyping. Who doesn’t like the warm glow and lovely green fade of an old Tektronix tube scope? That’s what we’re after.

Conceptually, the badge is two separate devices in one. Most obvious is the vectorscope, which takes in voltages in the 0 V – 3 V range and plots them out in X-Y mode in glorious fake-phosphor effect on the lovely round IPS screen. We’ve also tied an audio amplifier to the Y input that plays whatever waveform you’re watching.

But you don’t have to bring your own waveforms with you – the other half of the badge is an arbitrary programmable waveform generator that drives two channels. Off the bat, it’s configurable with the front panel controls, so you’re obviously invited to make Lissajous figures and store them in the program memories.

Combining the two halves lets you draw in voltages and time, but not until you connect them together, naturally. You see, this isn’t an analog simulation – it’s the programmable equivalent of the real deal, courtesy of the AK4619 ADC/DAC. Voltages go out on one set of pins and come back in on the other.

And you get to play around with these voltages in through-hole space too, because we’ve included a very generous prototyping board for your analog explorations. Does this instantly suggest a curve tracer to you? Be our guest! Other forms of analog video-mangling? We want to see what you come up with. Make an audio filter and watch it work on the screen in front of your very eyes.

Of course we’re not leaving you code monkeys out in the cold. MicroPython puts the “programming” in the programmable waveform generator. If you’re not content with the four stock waveforms, you’re invited to write your own. And this is where it gets artsy.

You can upload your own repetitive waveforms to the onboard direct digital synth routine, but why stop there? We’ve left most of the processing power of the underlying RP2040 untouched, for you to use. And four buttons on the front panel let you store and play back your code, so you have space to stash your demos, and a sweet joystick with a custom keycap gives you control.

Continue reading “2023 Hackaday Supercon Badge: Welcome To The Vectorscope”