Local And Remote Debugging With GDB

As a debugger, GDB is a veritable Swiss Army knife. And just like exploring all of the non-obvious uses of a those knives, your initial response to the scope of GDB’s feature set is likely to be one of bewilderment, subsequent confusion, and occasional laughter. This is an understandable reaction in the case of the Swiss Army knife as one is unlikely to be in the midst of an army campaign or trapped in the wilderness. Similarly, it takes a tricky debugging session to really learn to appreciate GDB’s feature set.

If you have already used GDB to debug some code, it was likely wrapped in the comfort blanket of an IDE. This is of course one way to use GDB, but limits the available features to what the IDE exposes. Fortunately, the command line interface (CLI) of GDB has no such limitations. Learning the CLI GDB commands also has the advantage that one can perform that critical remote debug session even in the field via an SSH session over the 9600 baud satellite modem inside your Swiss Army knife, Cyber Edition.

Have I carried this analogy too far? Probably. But learning the full potential of GDB is well worth your time so today, let’s dive in to sharpen our digital toolsets.

Continue reading “Local And Remote Debugging With GDB”

Axe Hacks: Spinning Knobs And Flipping Switches

From a guitar hacking point of view, the two major parts that are interesting to us are the pickups and the volume/tone control circuit that lets you adjust the sound while playing. Today, I’ll get into the latter part and take a close look at the components involved — potentiometers, switches, and a few other passive components — and show how they function, what alternative options we have, and how we can re-purpose them altogether.

In that sense, it’s time to heat up the soldering iron, get out the screwdriver, and take off that pick guard / open up that back cover and continue our quest for new electric guitar sounds. And if the thought of that sounds uncomfortable, skip the soldering iron and grab some alligator clips and a breadboard. It may not be the ideal environment, but it’ll work.

Continue reading “Axe Hacks: Spinning Knobs And Flipping Switches”

How To Shoot A Great Project Video

Creating projects is fun, but the real value, as far as the imaginary Internet points are concerned, is how well you show them off for the clout. Taking a few snaps is fine, but if you want to produce a quality video of your project, it pays to put some thought and effort into the process.

Telling The Story

Before setting out to document your project on video, think about what you’re trying to communicate to the viewer. Are you attempting to create a step-by-step guide on how to recreate what you’ve done, or are you simply trying to show off the awesome finished product? These are two very different types of video, and will require different content and delivery entirely. It also guides how you shoot your video.

If you want to show off your build process, you’ll need to shoot as you go. This can be time consuming, but also a great way to show the reality of what goes into your work. I always like it when people convey the pitfalls and successes they faced along the way, and get people involved in the story. It also means that you’ll end up shooting a lot of footage and you’ll spend plenty of time editing it all together. Continue reading “How To Shoot A Great Project Video”

Choosing The Right RTC For Your Project

When it comes to measuring time on microcontrollers, there’s plenty of ways to go about things. For most quick and dirty purposes, such as debounce delays or other wait states, merely counting away a few cycles of the main clock will serve the purpose.  Accurate to the tens of milliseconds, they get the average utility jobs done without too much fuss.

However, many projects are far more exacting in their requirements. When you’re building a clock, or a datalogger, or anything that relies on a stable sense of passing time for more than a few minutes, you’ll want a Real Time Clock. So called due to their nature of dealing with real time, as we humans tend to conceive it, these devices take it upon themselves to provide timekeeping services with a high degree of accuracy. We’ve compiled a guide to common parts and their potential applications so you can get things right the first time, every time.

Continue reading “Choosing The Right RTC For Your Project”

Linux Fu: Moving /usr

Linux has changed. Originally inspired by Unix, there were certain well understood but not well enforced rules that everyone understood. Programs did small things and used pipes to communicate. X Windows servers didn’t always run on your local machine. Nothing in /usr contributed to booting up the system.

These days, we have systemd controlling everything. If you run Chrome on one display, it is locked to that display and it really wants that to be the local video card. And moving /usr to another partition will easily prevent you from booting up, unless you take precautions. I moved /usr and I lived to tell about it. If you ever need to do it, you’ll want to hear my story.

A lot of people are critical of systemd — including me — but really it isn’t systemd’s fault. It is the loss of these principles as we get more programmers and many of them are influenced by other systems where things work differently. I’m not just ranting, though. I recently had an experience that brought all this to mind and, along the way, I learned a few things about the modern state of the boot process. The story starts with a friend giving me an Intel Compute Stick. But the problems I had were not specific to that hardware, but rather how modern Linux distributions manage their start-up process.

Continue reading “Linux Fu: Moving /usr”

Beyond Printf(): Better Logging Practices For Faster Debugging

All of us who do some programming know that logging is a time-tested way to output messages about the internal state of our code. With varying degrees of adjustable granularity, these messages allow us to keep track of not only the state of the application, but also its overall health. When things do end up going FUBAR, these log messages are usually the first thing we look at as a software equivalent of a Flight Data Recorder in an airplane.

Spending some time and care in not only designing the logging system, but also in deciding what should be logged and at what level, can make our future self appreciate life a lot more. We’re all familiar with the practice of ‘printf-debugging’, where logging is added as part of the usual post-crash autopsy as one tries to figure out what exactly went wrong. It’s one way of doing it, and eventually it works, but we can do much better.

People are lazy, and you’re only going to stick to good logging practices if they are at least as easy if not easier than sprinkling printf() statement throughout the code. Yet at the same time we want to be able to handle things like log levels and newlines without too much extra typing. The most successful logging libraries are built with this

Continue reading “Beyond Printf(): Better Logging Practices For Faster Debugging”

Printed It: Print-in-Place PCB Gripper

The goal of Printed It is to showcase creations that truly embrace the possibilities offered by desktop 3D printing. The most obvious examples are designs that can be printed quickly and cheaply enough that they’re a valid alternative to commercially available products. But as previous entries into the series have shown, there are also technical considerations. Is it simply a duplicate of something that could be produced via traditional means, or does the design really benefit from the unique nature of 3D printing?

A perfect example is the Print-in-Place PCB Holder/Gripper created by SunShine. This design is able to hold onto PCBs (or really, whatever you wish) without any additional components. Just pull it off the bed, and put it to work. While having to add a rubber band or generic spring would hardly be an inconvenience, there’s always something to be said for a design that’s truly 100% printable.

The secret is the dual flat spiral springs integrated into the device’s jaws. While most of the common thermoplastics used in desktop 3D printing are relatively stiff, the springs have been designed in such a way that they can be printed in standard PLA. The backside of the jaws have teeth that mesh together, so the energy of the springs is combined to provide a clamping force. Serrations have been added to the jaws to catch the edge of the PCB and help stabilize it.

Visually, it’s certainly striking. The design largely eschews right angles, giving it an almost biological appearance. Many have compared it to the head of a mantis, or perhaps some piece of alien technology.

There’s no question that the design leverages the strengths of 3D printing either; there’s no other way to produce its intricate interlocking components, especially without the use of any sort of fasteners. In short, this design is an ideal candidate for Printed It. But there’s still one question to answer: does it actually work?

Continue reading “Printed It: Print-in-Place PCB Gripper”