Two Esoteric Programming Languages, One Interpreter

Many of you will have heard of the esoteric programming language Brainf**k_. It’s an example language that’s nearly impossible to use because it’s too simple. It’s basically a Turing computer in code – you can essentially put characters into an array, read them out, increment, decrement, and branch. The rest is up to you. Good luck!

What could be worse? Befunge, a language that parses code not just left-to-right or top-to-bottom, but in any direction depending on the use of ^, v, >, and <. (We love the way that GOTO 10 looks like a garden path in the example.)

Uniting the two, [rsheldiii] brings us BrainFunge, a Brainf**k_ interpreter written in Befunge. And surprisingly, the resulting write-up sheds enough light on both of the esoteric programming languages that they make a little bit of sense. If you try to read along, you’ll definitely be helped out by Esolang Park, which was new to us, and accommodates the non-traditional parsing while displaying the contents of the stack.

If you get a taste of the esoteric, and you find that you’d like a little more, we have a great survey of some of the oddest for you. After cutting your teeth on Befunge, for example, we bet you’ll be ready for Piet.

Blender Builds LEGO Models

Blender is a free and open source computer graphics package that’s used in the production of everything from video games to feature films. Now, as demonstrated by [Joey Carlino], the popular program can even be used to convert models into LEGO.

This new feature available in Blender 3.4 allows for the use of instance attributes in a way that a large number of points on a model can be created without causing undue strain on (and possible crashing of) the software. Essentially, an existing model is split into discrete points at specific intervals. The spacing of the intervals is set to be exactly that of LEGO bricks, which gives the model the low-resolution look of a real LEGO set. From there, a model brick is created and placed at each of these points, and then colors can be transferred to the bricks individually.

The demonstration that [Joey] uses is converting a beach ball model to LEGO, but using these tools on other models delivers some striking results. He goes over a lot of the details on how to create these, and it would only be a short step from there to ordering the bricks themselves. Or, using these models and sending them over to a 3D printer straight from Blender itself. Not bad for free software!

Continue reading “Blender Builds LEGO Models”

Screenshot of the Arduino Lab for MicroPython

Arduino Brings A MicroPython IDE

Both Arduino and MicroPython are giants when it comes to the electronics education area, and each one of them represents something you can’t pass up on as an educator. Arduino offers you a broad ecosystem of cheap hardware with a beginner-friendly IDE, helped by forum posts explaining every single problem that you could and will stumble upon. MicroPython, on the other hand, offers a powerful programming environment ripe for experimentation, and doesn’t unleash a machine gun fire of triangle brackets if you try to parse JSON slightly incorrectly. They look like a match made in heaven, and today, from heaven descends the Arduino Lab for MicroPython.

This is not an Arduino IDE extension – it’s a separate Arduino IDE-shaped app that does MicroPython editing and uploads code to your board from a friendly environment. It works over a serial port, and as such, the venerable ESP8266-based boards shouldn’t be be left out – it even offers file manager capabilities! Arduino states that this is an experimental effort – it doesn’t yet have syntax checks, for instance, and no promises are made. That said, it already is a wonderful MicroPython IDE for beginner purposes, and absolutely a move in the right direction. Want to try? Download it here, there’s even a Linux build!

High-level languages let you build projects faster – perfect fit for someone getting into microcontrollers. Hopefully, what follows is a MicroPython library manager and repository! We’ve first tried out MicroPython in 2016, and it’s come a long way since then – we’ve seen quite a few beginner-friendly MicroPython intros, from a gaming handheld programming course, to a bipedal robot programming MicroPython exploration. And, of course, you can bring your C libraries with you.

Dial-Up Internet Over WhatsApp

As we returned from Supercon 2022, we noticed many airlines offer free in-flight messaging. While the messages are handy for complaining about the seat size, it isn’t quite as exciting as access to the internet. In the air, we wondered how hard it would be to tunnel an internet connection over messaging. Funny enough, [Aleix Rodríguez Alameda] has a project that does exactly that by tunneling traffic over Whatsapp.

In [Aleix]’s case, cell carriers are pretty stingy with internet data when traveling in South America but often give unlimited WhatsApp data. So, ahead of time, two accounts are set up. A server is on one account and acts as a proxy to the broader internet and listens to messages to the server account. Then when in a restricted access setting, the client connects with a WebSocket and sends messages. The real trick for turning the WhatsApp messages into an internet connection the client can use is exposing a port from a local nodeJS web server. It connects to the WhatsApp API through a WebSocket and then acts as a proxy. Then, you set up traffic to be redirected through that port with curl or Firefox.

Packets are split to prevent you from sending too many messages, as in their testing, [Aleix]’s accounts were banned quickly. You shouldn’t expect massively fast speeds, as 300kbps was pretty typical during testing, which according to Wikipedia, is about what dial-up got with V.44 compression.

Which is around the same speed as TCP/IP tunneled over NRF23L01 radios.

The demo toot screenshot, showing a text-only message sent from the ESP32 using the library.

Moved Off Twitter? Make Your ESP32 Toot

Since Twitter was officially taken over by Elon Musk a few days ago, there’s been significant staff cuts, a stream of questionable decisions, and uncertainty about the social media platform’s future. So it’s little surprise that a notable number of people, those in the tech and hacker scenes in particular, have decided to move over to (or at least bridge their accounts with) the distributed and open source Mastodon service.

Of course, the hacks would follow closely, and [Toby] shares a simple ESP32-based Mastodon client library for us to start with. Instead of “tweets”, messages on Mastodon instances are called “toots”, in line with the platform’s mammoth-like mascot. The library, called Luyba, is able to send toots and includes a demo firmware. Built using C++ and with support for Platform.IO, it should fit into quite a few projects out there, letting you easily send toots to whichever instance you find your home, as the library-aided demo toot shows.

What could you do with such a library on your MCU? Turns out, quite a few fun things – a home automation interface, a critter trap, an online BBC Basic interpreter, or, given image support, a camera that tweets whatever it’s pointed at. There’s quite a bit of fun hackers can have given a micro-blogging service API access and a bit of code that works with it. That said, for all the good that Twitter brought us over the years, there’s a lot that Mastodon can easily do better, between easily game-able “Trending” sidebar, bias found in auto-cropping algorithms and disarrayed internal security policies.

Play DOOM On Seven-Segment Displays

Getting DOOM to run on a computer it was never meant to run on is a fun trope in the world of esoteric retro computers. By now we’ve seen it run on everything from old NES systems to microwaves, treadmills, and basically anything with a computer inside of it. What we don’t often see are the displays themselves being set up specifically to run the classic shooter. This build might run the game itself on ordinary hardware, but the impressive part is that it’s able to be displayed on this seven-segment display.

This build makes extensive use of multiplexers to drive enough seven-segment displays to use as a passable screen. There are 1152 seven segment digits arranged in a 48 by 24 array, powered by a network of daisy-chained MAX7219 chips. A Python script running on a Raspberry Pi correlates actual image data with the digit to be displayed on each of the segments, and the Raspberry Pi sends all of that information out to the screen. The final result is a display that’s fast enough and accurate enough to play DOOM in a truly unique way.

There is much more information available about this project on their project page, and they have made everything open source for those who wish to follow along as well. The project includes more than just the ability to play DOOM, too. There’s a built-in video player and a few arcade programs programmed specifically to make use of this display. Perhaps one day we will also see something like this ported to sixteen-segment displays instead of the more common seven-segment.

3D Printer Slicing In The Manufacturing World

It is no secret that the way you build things in your garage is rarely how big companies build things at scale. But sometimes new techniques on the production floor leak over to the hobby builder and vice versa, so it pays to keep an eye on what the other side is doing. Maybe that was the idea behind [Carolyn Schwaar’s] post on All3DP entitled “Beyond Cura Slicer: 3D Printing Build Prep Software for Pros.” In it, she looks at a few programs that commercial-grade 3D printers use for slicing.

The differences in the software we typically use and those meant to work with a dedicated high-end machine are pretty marked, but maybe not in the way you would expect. While you might expect them to have tight integration with their target machine, you might not expect that they usually offer less control over parameters than a product like Cura. As a quote in the post points out, Cura has over 400 settings. Commercial 3D printers don’t have time to tweak those settings endlessly. So the emphasis is more on canned profiles that just work.

Not all of the programs are tied to machines, though. Commercial CAD offerings are becoming more capable with 3D printers and can sometimes slice and send jobs to printers directly. Regardless of software type, though, everyone needs certain functions: design, repair, simulation, build plate layout, and more.

If you are looking for a hobby-grade slicer other than Cura, we’ve been using SuperSlicer which is a fork of PrusaSlicer, which is a fork of Slic3r lately.