Parsing Math In Python

Programming computers used to be harder. Don’t get us wrong — today, people tend to solve harder problems with computers, but the fundamental act of programming is easier. We have high-level languages, toolkits, and even help from our operating systems. Most people never have to figure out how to directly read from a disk drive, deblock the data into records, and perform multiplication using nothing but shifts and adds. While that’s a good thing, sometimes it is good to study the basics. That was [gnebehay’s] thought when his university studies were too high level, so he decided to write an arithmetic expression parser in Python. It came out in about 100 lines of code.

Interpreting math expressions is one of those things that seems simple until you get into it. The first problem is correctly lexing the input — a term that means splitting into tokens. For a human, it seems simple that 5-3 is three tokens, {5, -, and 3} and that’s easy to figure out. But what about 5+-3? That’s also three tokens: {5,+,-3}. Tricky.

Continue reading “Parsing Math In Python”

Comparing Shortwave Antennas With RTL-SDR And Python

Measuring the performance of antennas in absolute terms that can involve a lot of expensive equipment and specialized facilities. For practical applications, especially when building antennas, comparing performance in relative terms is more practical. Using cheap RTL-SDR dongles and Python, [Eric Urban] was able to compare the performance of two shortwave/HF antennas, and documented the entire process.

The two antennas in question was a single band inverted-L and smaller broadband T3FD antenna. [Eric] first gathered performance data for each over few days, connected to separate PCs with RTL-SDRs via low-pass filters. These were set up to receive FT8 transmissions, a popular digital ham radio mode, which allowed [Eric] to automate data collection completely. GQRX, a software receiver, converted the signals to audio, which was then piped into WSJT-X for demodulation.

Data for each received FT8 transmission was recorded to a log file. [Eric] also modified GQRX and WSJT-X to give him all the remote control features he needed to automatically change frequencies. Between the two antenna setups, more than 100,000 FT8 transmissions were logged. Using the recorded data and Python he compared the number of received transmissions, the distance, and the heading to the transmitters, using the location information included in many FT8 transmissions. Where the same transmission was received by both antennas, the signal-to-noise ratios was compared.

From all this data, [Eric] was able to learn that the inverted-L antenna performed better than the T3FD antenna on three of the four frequency bands that were tested. He also discovered that the inverted-L appeared to be “deaf” in one particular direction. Although the tests weren’t perfect, it is impressive how much practical data [Eric] was able to gather with low-cost hardware. Continue reading “Comparing Shortwave Antennas With RTL-SDR And Python”

The Hurricanes Are Coming

It’s hurricane season in the northern hemisphere right now, and plenty of news and weather organizations remain dedicated to alerting people if a storm is about to impact their area. There’s no shortage of ways to receive this information, either. We all have our favorite weather app or forecasting site, and there are emergency alerts to cell phones, TV, and radio stations as well. If none of that suits you, though, you can also roll out your own weather alert readerboard.

[Damaged Dolphin] built a weather alert readerboard using a Raspberry Pi and a 64×128 LED matrix. The Raspberry Pi runs Raspbian and uses a HAT from Adafruit, and once connected to the internet pulls down weather information for a specific area using custom python code. From there it can display any emergency weather alerts instantly on the readerboard screen including alerts for hurricanes. It does rely on data from the National Weather Service though, so if that is not available in your area some modifications will need to be made to the code.

While he notes that you probably shouldn’t rely on his non-professional python code exclusively when getting weather information, it would still be a good way of retrieving information about weather events without having to refresh a browser all the time. Once the storms have passed though, be sure you’re prepared for the days following.

Thanks to [b00tfa|l] for the tip!

Continue reading “The Hurricanes Are Coming”

Busting GPS Exercise Data Out Of Its Garmin-controlled IoT Prison

If you take to the outdoors for your exercise, rather than walking the Sisyphusian stair machine, it’s nice to grab some GPS-packed electronics to quantify your workout. [Bunnie Huang] enjoys paddling the outrigger canoe through the Singapore Strait and recently figured out how to unpack and visualize GPS data from his own Garmin watch.

By now you’ve likely heard that Garmin’s systems were down due to a ransomware attack last Thursday, July 23rd. On the one hand, it’s a minor inconvenience to not be able to see your workout visualized because of the system outage. On the other hand, the services have a lot of your personal data: dates, locations, and biometrics like heart rate. [Bunnie] looked around to see if he could unpack the data stored on his Garmin watch without pledging his privacy to computers in the sky.

Obviously this isn’t [Bunnie’s] first rodeo, but in the end you don’t need to be a 1337 haxor to pull this one off. An Open Source program called GPSBabel lets you convert proprietary data formats from a hundred or so different GPS receivers into .GPX files that are then easy to work with. From there he whipped up less than 200 lines of Python to plot the GPS data on a map and display it as a webpage. The key libraries at work here are Folium which provides the pretty browsable map data, and Matplotlib to plot the data.

These IoT devices are by all accounts amazing, listening for satellite pings to show us how far and how fast we’ve gone on web-based interfaces that are sharable, searchable, and any number of other good things ending in “able”. But the flip side is that you may not be the only person seeing the data. Two years ago Strava exposed military locations because of an opt-out policy for public data sharing of exercise trackers. Now Garmin says they don’t have any indications that data was stolen in the ransomware attack, but it’s not a stretch to think there was a potential there for such a data breach. It’s nice to see there are Open Source options for those who want access to exercise analytics and visualizations without being required to first hand over the data.

RGB Minecraft Sign Isn’t Just For Looks

This laser cut and LED illuminated version of the Minecraft logo created by [Geeksmithing] looks good enough to occupy a place of honor on any gamer’s shelf. But it’s not just decoration: it can also notify you about your Minecraft’s server status and tell you when players are online by way of its addressable LEDs.

In the first half of the video after the break, [Geeksmithing] shows how the logo itself was built by cutting out pieces of white and black acrylic on his laser cutter. When stacked up together, it creates an impressive 3D effect but also isolates each letter. With carefully aligned rows of RGB LEDs behind the stack, each individual letter can be lit in its own color (or not at all) without the light bleeding into either side.

Once he had a way of lighting up each letter individually, it was just a matter of writing some code for the Raspberry Pi that can do something useful with them. Notifying him when the server goes down is easy enough, just blink them all red. But the code [Geeksmithing] came up with also associates each letter with one of the friends he plays with, and lights them up when they go online. So at a glance he can not only tell how many friends are already in the game, but which ones they are. Naturally this means the display can only show the status of nine friends…but hey, that’s more than we have anyway.

We’ve been seeing people connect the real world to Minecraft in weird and wonderful ways for years now, and it doesn’t seem like there’s any sign of things slowing down. While we recognize the game isn’t for everyone, but you’ve got to respect the incredible creativity it’s inspired in young and old players alike.

Continue reading “RGB Minecraft Sign Isn’t Just For Looks”

Custom Weather Camera Feed With Software Tricks

With a gorgeous view of the Italian seaside, we’re not surprised [Danilo Larizza] had a couple IP cameras set up to pull in real-time views. But using a Raspberry Pi, an environmental sensor, and some software trickery to overlay the current (and naturally, perfect) weather conditions over the images? Now he’s just teasing us.

Whatever his motives are, we have to admit that the end result is very nice. Especially when you find out that there’s no complex hardware or software at work here. An original Raspberry Pi is doing all the heavy lifting by pulling a frame from the external IP camera using ffmpeg, polling the I2C-connected BME280 temperature and humidity sensor with a Python script, and then producing a final snapshot with the environmental data laid over top using ImageMagick.

[Danilo] gives the exact commands he’s using for each step of the process, making it easy to follow along and see how everything comes together in the end. That also makes it much easier to adapt for your own purposes should you feel so inclined. Once you see how all the pieces fit together, where the data and images come from is up to you.

We’ve previously shown how some simple Python code can be used to turn your raw data into attractive images, and combining that with real-world photographs is an excellent way of turning a text file full of values into a display worth showing off.

Gaming In Different Languages

One of the perks of using older hardware is its comparative simplicity and extensive documentation. After years or decades of users programming on a platform, the amount of knowledge available for it can become extensive. This is certainly the case with the 6502 microprocessor, used in old Apple computers and some video game systems from the ’80s. The extensive amount of resources available make it a prime candidate in exploring various programming languages, and their advantages and disadvantage.

This project looks into those differences using a robot game, which has been programmed four different ways in three languages. [Joey] created the game in Python first and then began to port it to the 65C02, a CMOS variant of the 6502. The first iteration is its assembly language, and then a second iteration with optimized assembly code. From there, he ports it to C and then finally to Forth. Each version of the game is available to play in a browser using an emulator to run the 6502 hardware.

Since the games run in the browser, other tools are available to examine the way the game runs in each language. Registers can be viewed in real time, as well as the values stored in the memory. It’s an interesting look at an old piece of hardware and of its inner workings. For an even deeper dive into the 6502, it’s possible to build a working computer on breadboards using one.