Number Bases Stretch The Mind

Some of us might solve crossword puzzles or Sudoko games to exercise our minds, but [Nathan Nichols] plays with exotic number systems to keep the brain cells in shape. He wrote the Hanoi C99 library while in high school, implementing several of his favorites.

We have all been using decimal (base 10) and duodecimal (base 12, as in clocks) since before grade school. Us computer geeks are also adept at various computer-friendly systems like binary, octal, and hexadecimal. The true nerds among us will be familiar with systems like vigesimal (base 20 Mayan numerals) and sexagesimal (base 60 Babylonian numbers). We ourselves espoused the virtues of seximal (base 6) a couple of years ago. But if you really want to stretch your mind, take a dive into the weird number systems that [Nathan] has been exploring.

Negabinary (base -2)

The lowest level of weirdness in the group, this one is almost normal. Its the same as binary, except the bit weights have alternating signs: { 1, -2, 4, -8, ... }.

Binarions (base -1+i)

Or base -1+j if you studied electrical engineering. The use of complex numbers as radices was proposed by Donald Knuth way back in 1955. We find it really hard to imagine this one being helpful.

Fibonacci base

Numbers can also be represented by the summation of a sequence of Fibonacci numbers. Using this system, a number can sometimes be represented more than one way, so watch out.

Stern-Brocot tree

A number is represented by its path down the Stern-Brocot tree. One feature of this system is that numbers can be exact. For example, the Stern-Brocot tree representation of one-third has a finite number of digits.

While [Nathan]’s library only performs conversion at input or output, we wonder if someone will take this further and implement an arithmetic unit inside an FPGA. Besides being a fun exercise, it would baffle someone casually trying to reverse engineer your secret calculations. Let us know of any strange number systems you have used or encountered.

C++ Compiler Targets The Web

It is a common problem these days. You have a piece of code in C or C++. Maybe it is older code. Or maybe you prefer prototyping your ideas using C. But, inevitably, someone now wants your code to run in a Web browser. The options for making this happen have expanded quite a bit lately and one possibility is Cheerp, an open-source compiler that handles up to C++ 17 and can output to WebAssembly, JavaScript, or asm.js.

The compiler is free to use for GPLv2 projects. If you aren’t open yourself, it looks like you have to cut a deal to use Cheerp with its maker, Learning Technologies.

Continue reading “C++ Compiler Targets The Web” →

BASH Template Promises Safer Scripts

Many bash scripts start out as something quick and dirty but then become so useful that they live for years, indeed sometimes seeing more use than our traditional programs. Now that you can even run bash well under Windows (although, you’ve always been able to run it there if you tried), there are even more opportunities for your five-minute bash script to proliferate. [Maciej] decided he was tired of always having to patch up his quick and dirty scripts to be more robust, so he created (and shared) his boilerplate template for scripts.

Probably most of us have at least some basic template we start with, even if it just our last script project. What’s nice about [Maciej’s] template is that he documents what’s going on with each part of it. It is also relatively short without a lot of excess stuff. Of course, you’ll probably customize it, but it is a great place to start.

Continue reading “BASH Template Promises Safer Scripts” →

Learn Compilers Online From Cornell

It sounds like the start of a joke, but what’s the difference between taking Cornell’s CS6120 online and in-person? The instructor, [Adrian Samspon] notes that the real class has deadlines, an end-of-semester project, and a discussion board that is only open to real-life students. He also notes that you only earn “imagination credits.”

Still, this is a great opportunity to essentially audit a PhD-level computer science class on a fascinating topic. The course consists of videos, papers, and open source projects using LLVM and a custom internal representation based on JSON that is made for the class. It is all open source, too. You do however need access to the papers, some of which are behind paywalls. Your local library can help if you can’t otherwise find copies of the papers.

Continue reading “Learn Compilers Online From Cornell” →

Real Hackers Videoconference In Terminal

At some point or another, many of us have tried to see how much of our digital lives could be accessed from the comfort of a terminal. We’ve tried Alpine for email, W3M for web browsing, and even watched Star Wars via telnet. But, in the increasingly socially-distant world we find ourselves in today, we find ourselves asking: what about video calling?

Okay, we weren’t asking that. But thankfully [Andy Kong] was, and saw fit to implement it when he and a friend created AsciiZOOM, a “secure, text-based videoconferencing app, accessible from the safety of your terminal.”

As you may have guessed, [Andy]’s solution replaces the conventional video stream we’re all used to with realtime animated ASCII art. The system works by capturing a video stream from a webcam, “compressing” each pixel by converting it into an ASCII character, and stuffing the entire frame into a TCP packet. Each client is connected to a server (meeting room?) which coordinates the packets, sending them back and forth appropriately.

As impressive as it is impractical, the only area in which the project lacks is in audio. [Andy] suggests using Discord to solve that, but here’s hoping we see subtitles in version 2! Will AsciiZOOM be replacing our favorite videoconferencing suite any time soon? No. Are we glad it exists? You betcha.

Continue reading “Real Hackers Videoconference In Terminal” →

A 3D – To – 2D Converter To Make Plots From STLs.

We’ve become used to finding models on websites such as Thingiverse and downloading them to print. After all, whose hackerspace doesn’t have a pile of novelty prints? How about printing them on paper? For the plotter enthusiast that can be particularly annoying. Never fear, [Trammell Hudson] is here with an online 3D to 2D converter just for plotters. [Trammell’s] creation makes a vector image suitable for a plotter while eliminating spurious behind-the-scenes lines.

Plotter drawings are the pen-and-paper equivalent of a vector CRT display, in which the graphics are printed as continuous strokes. Rendering a 3D model as a wireframe for a plotter requires the removal of any pen strokes that comes from the 3D space behind the surface in view. Loading various models into the web page seemed to do a pretty good job of this, though the ubiquitous Benchy 3d printer test model lived up to its billing as a torture test in taking several minutes to render.

As anyone who has followed the #PlotterTwitter social media hashtag will know, there is a considerable community of pen plotter enthusiasts who are pushing the boundaries of what their machines can do. [Trammell] has posted his plotter producing some of the work created with this tool, and we can see that it’s likely to work better with lower-poly models.

We’ve featured a lot of plotters over the years as they seem to be a popular project. If you’d like one then they can be made from the most available parts, including those scavenged from scrap DVD drives, or printers.

Inside CHIP-8

Certain old computers — most frequently those using the RCA 1802 — were fond of using an early form of byte-code interpreter for programs, especially games. The interpreter, CHIP-8, was very simple to create but offered high-level features that were tedious to recreate in the native assembly language. Because there are a fair number of simple games written in CHIP-8, there are of course, emulators for it, and [River Gillis] decided to look inside the CHIP-8 byte code interpreter.

Part of the power of CHIP-8 was it only had 35 virtual instructions. That was important when you were trying to shoehorn a game and the interpreter into a very small memory. Remember, in those days 1K of memory wasn’t an unusual number, although the prototypical CHIP-8 host would have 4K.

Continue reading “Inside CHIP-8” →