The Right Benchmark For GPT

Dan Maloney wanted to design a part for 3D printing. OpenSCAD is a coding language for generating 3D objects. ChatGPT can write code. What could possibly go wrong? You should go read his article because it’s enlightening and hilarious, but the punchline is that it ran afoul of syntax errors, but also gave him enough of a foothold that he could teach himself enough OpenSCAD to get the project done anyway. As with many people who have asked the AI to create some code, Dan finds that it’s not as good as asking someone who knows what they’re doing, but that it’s also better than nothing.

And this is where I start grumbling. When you type your desires into the word-follower machine, your alternative isn’t nothing. Your alternative is to fire up a search engine instead and type “openscad tutorial”. That, for nearly any human endeavor, will get you a few good guides, written by humans who are probably expert in the subject in question, and which are aimed at teaching you the thing that you want to learn. It doesn’t get better than that. You’ll be up and running with your design in no time.

Indeed, if you think about the relevant source material that the LLM was trained on, it’s exactly these tutorials. It can’t possibly do better than the best of them, although the resulting average tutorial might be better than the worst you’ll find. (Some have speculated on what happens when the entire Internet is filled with these generated texts – what will future AIs learn from?)

In Dan’s case, though, he didn’t necessarily want to learn OpenSCAD – he just wanted the latch designed. But in the end, he had to learn enough OpenSCAD to get the AI code compiling without error. He spent an hour learning OpenSCAD and now he’s good to go on his next project too.

So the next time you hear someone say that they got an answer back from a large language model that wasn’t perfect, but it was “better than nothing”, think critically if “nothing” is really the right benchmark.

Do you really want to learn nothing? Do you really have no resources to get started with? I would claim that we have the most amazing set of tutorial resources the world has ever known at our fingertips. Compared to the ability to teach millions of humans to achieve their own goals, that makes the LLM party tricks look kinda weak, in my opinion.

The Right Equipment Makes A Difference For Digital Oscilloscope Music

We all love our cheap digital oscilloscopes, and with good reason. But if there’s one place where analog scopes still shine, it’s anywhere you need X-Y mode. Digitally sampling the inputs and mapping them on the screen as discrete points just isn’t the same as steering an electron beam around a CRT, making X-Y mode work on digital scopes — at least the affordable ones — somewhat lacking.

Thankfully, nobody told [Mark Hughes] that his digital scope would make a lousy X-Y display, so he just plunged ahead and figured out how to make it work anyway. The results are actually pretty good, but it took some doing. His setup begins with OsciStudio, an application built to take 3D shapes and animations and turn them into oscilloscope music. The output from that is piped to a USB sound card; [Mark] used a PreSonus Studio 26c, an adapter with DC-coupled inputs, which he found to be critical to getting good images. Also important was a USB isolator and good-quality cables, which greatly reduced jitter and made the image much more stable.

Displaying the image was as easy as connecting the left and right outputs from the sound card to the two scope inputs — [Mark] used a Keysight EDUX1052G — and setting it to X-Y mode. It took a fair amount of fiddling to get as far as he did, but we think the results speak for themselves. As for the sounds made by these images, he says it’s a bit like a hung sound card when a computer blue-screens. So, yeah — not exactly musical, but still an interesting way to have some fun with your digital scope.

A Game Boy Camera, Without The Game Boy

We all know the Nintendo Game Boy camera peripheral, and we’ve seen plenty of hacks for it on these pages over the years. We like [Raphael Boichot]’s camera then, as instead of including a Game Boy or emulating one, it talks directly to the sensor from an RP2040. The result is a standalone camera with slightly better quality than the original, and with near-limitless storage and easy retrieval of pictures.

For us the interesting revelation from this project comes in the light it sheds on the sensor module, the Mitsubishi M64282FP, but it’s no slouch as a camera beside that. There are motion sensor and timelapse modes, as well the ability to take high dynamic range pictures, and as if that’s not enough it also has all the tweakable things you’d expect from a “proper” camera. The oldest adage in photography is that the best camera in the world is the one in your hand, and we’d say that this one’s better than a real Game Boy Camera should the once-in-a-lifetime picture come while you’re holding it.

Of course, a better Game Boy camera needs a better lens, right?

OLED Display Lets Vintage PC Engage Turbo Mode In Style

Back in the 486 days, it was common to see a “Turbo” button on the front panel of many PCs, which was used to toggle between the CPU’s maximum speed and a slower clock rate that was sometimes necessary for compatibility with older software. Usually an LED would light up to show you were running at this higher speed, or if your machine was very fancy, it might even have a numerical display that would show the current CPU frequency.

[Joshua Woehlke] wanted to add a similar display to his 486, but figured that with modern technology, he could do something a bit more interesting. Especially when he realized that the spot on his case where the two-digit LED display would have originally been mounted was the perfect size to hold a common 0.96″ SSD1306 OLED. From there it was just a matter of wiring it up to an Arduino and writing some code to display different graphics depending on the computer’s current CPU speed.

Just like the frequency indicators of yore, the Arduino doesn’t actually measure the CPU’s frequency, it’s simply reading the state of the Turbo LED on the front panel. When the LED is off the Arduino shows an image of a i8088 CPU on the screen to indicate the computer is running in compatibility mode, and when the LED is on, the screen shows the Cyrix Cx486 DX2 logo. When the button hasn’t been pressed in awhile, the display defaults to a star field screensaver.

Regular readers may recall we recently covered a similar project that used an Arduino to add a little flair to an era appropriate seven-segment LED display. We’d say there’s still a good deal of romanticism about computers having a big “TURBO” button you can smash whenever you feel the need for speed.

Understanding And Using Unicode

Computer engineer [Marco Cilloni] realized a lot of developers today still have trouble dealing with Unicode in their programs, especially in the C/C++ world. He wrote an excellent guide that summarizes many of the issues surrounding Unicode and its encoding called “Unicode is harder than you think“. He first presents a brief history of Unicode and how it came about, so you can understand the reasons for the frustrating edge cases you’re bound to encounter.

There have been a variety of Unicode encoding methods over the years, but modern programs dealing with strings will probably be using UTF-8 encoding — and you should too. This multibyte encoding scheme has the convenient property of not changing the original character values when dealing with 7-bit ASCII text. We were surprised to read that there is actually an EBCDIC version of UTF still officially on the books today:

UTF-EBCDIC, a variable-width encoding that uses 1-byte characters designed for IBM’s EBCDIC systems (note: I think it’s safe to argue that using EBCDIC in 2023 edges very close to being a felony)

Continue reading “Understanding And Using Unicode”

The ESP32 Doesn’t Need Much

For those looking to add wireless connectivity to embedded projects or to build IoT devices, there is perhaps no more popular module than the ESP32. A dual-core option exists for processor intensive applications, the built-in WiFi and Bluetooth simplify designs, and it has plenty of I/O, memory, and interoperability for most applications. With so much built into the chip itself, [atomic14] wondered how much support circuitry it really needed and set about building the most minimalist ESP32 development board possible.

Starting with the recommended schematic for the ESP32, the most obvious things to remove are a number of the interfacing components like the USB to UART chip and the JTAG interface. The ESP32 has USB capabilities built in, so the data lines from a USB port can be directly soldered to the chip instead of using a go-between. A 3.3V regulator eliminates the need for many of the decoupling capacitors, and the external oscillator support circuitry can also be eliminated when using the internal oscillator. The only thing [atomic14] adds that isn’t strictly necessary is an LED connected to one of the GPIO pins, but he figures the bare minimum required to show the dev board can receive and run programs is blinking an LED.

Building the circuit on a breadboard shows that this minimalist design works, but instead of building a tiny PCB to solder the ESP32 module to he attempted to build a sort of dead-bug support circuit on the back of the ESP32. This didn’t work particularly well so a tiny dev board was eventually created to host this small number of components. But with that, the ESP32 is up and running. These modules are small and compact enough that it’s actually possible to build an entire dev board setup inside a USB module for a Framework laptop, too.

Continue reading “The ESP32 Doesn’t Need Much”

Splitting 3D Prints Into Parts Can Add Strength

One of the great things about 3D printers is their ability to make a single part all at once. Separating a part into multiple pieces is usually done to split up objects that are too big to fit on the 3D printer’s print bed. But [Peter] at Markforged (manufacturers of high-end 3D printers) has a video explaining another reason: multi-part prints can benefit from improved strength.

This part can be easily printed as a single piece, but it can be made nearly twice as strong when printed as two, and combined.

The idea is this: filament-based 3D printers generally create parts that are strongest along their X-Y axis (relative to their manufacture) and weakest in the Z direction. [Peter] proposes splitting a part into pieces with this in mind. Not because the part is inconveniently large or has tricky geometry, but so the individual pieces can be printed in orientations that provide the best mechanical strength.

This is demonstrated with the simple part shown here. The usual way to print this part would be flat on a print bed, but by splitting the parts into two and printing each in their optimal orientation, the combined part withstands nearly twice as much force before failing.

[Peter]’s examples use Markforged’s own filaments, but gives advice on more common polymers as well and the same principles apply. This idea is one worth keeping in mind the next time one is seeking to optimize strength. because of how simple it is.

We’ve seen a variety of methods to toughen up or ruggedize prints in the past, but they’re usually more complex (or at least messier.) Examples include embedding braided steel cable, embedding fiberglass mesh, applying electroplating to a printed structure, and plain old embedding some bolts and washers to buffer load-bearing areas.

Continue reading “Splitting 3D Prints Into Parts Can Add Strength”