Why The IPad Doesn’t Have A Calculator

For the handful among us who have an iPad tablet from Apple, some may have figured out by now that it lacks a feature that has come standard on any operating system since roughly the early 90s: a calculator application. Its absence on the iPad’s iPadOS is strange since the iPhones (iOS) have always had a calculator application built into the system.  Even Apple’s laptop and desktop systems (MacOS/OS X/MacOS) include a calculator.  As [Greg] at [Apple Explained] explains in a 2021 video, this seems to have been initially due to Steve Jobs, who didn’t like the scaled-up iOS calculator that the person in charge of iPad software development – [Scott Forstal] – was working on and set an ultimatum to replace or drop it.

In the video, [Greg] shows sections of an interview with Apple software chief [Craig Federighi], who when confronted with the question of why iPadOS doesn’t have a calculator or weather app, quickly slithers out of the way of the incoming question. He excuses the absence with the idea that Apple won’t do anything unless it makes people go ‘wow’ when they use it. Fast-forward two years, and iPadOS 17 still doesn’t have a version of the Apple Calculator app, making for rich meme fodder. One question that gets raised by some is whether Apple really needs to make such an app at all since you can use Spotlight and Siri to get calculations resolved, in the latter case, using the apparently hidden Calculator app.

These days, you can use Google Search as a calculator, too, with it even throwing up a calculator UI when you ask it to perform a calculation, and the App Store is full of various calculator apps, with or without advertising and/or paid features. In this context, what could Apple do with a calculator that would positively ‘wow’ its users?

Continue reading “Why The IPad Doesn’t Have A Calculator”

render of a sample board produced with help of this plugin. it's pretty, has nice lighting and all!

From KiCad To Blender For A Stunning Render

We love Blender. It brings you 3D modeling, but not in a CAD way — instead, people commonly use it to create animations, movies, games, and even things like VR models. In short, Blender is about all things art and visual expression. Now, what if you want a breathtaking render of your KiCad board? Look no further than the pcb2blender tool from [Bobbe 30350n].

This isn’t the first time we’ve seen KiCad meet Blender. However, compared to the KiCad to Blender paths that people used previously, pcb2blender makes the import process as straightforward and as quick as humanly possible. Install a plugin for both tools, and simply transfer a .pcb3d file out of the KiCad plugin into the Blender plugin. Want to make the surfaces of your design look like they’re meant to look in real life? Use the free2ki plugin to apply materials to your 3D models. In fact, you should check out [30350n]’s Blender plugin collection and overall portfolio, it’s impressive.

There’s no shortage of Blender hacks – just this year we’ve covered a hacker straight up simulating an entire camera inside Blender for the purpose of making renders, and someone else showing how to use Stable Diffusion to texture 3D scenes at lightning speed. We even recently published a comprehensive tutorial on how to animate your robot in Blender ourselves! Want to give it a shot? Check out this quick and simple Red Bull can model design tutorial.

Thanks to [Aki] for sharing this with us!

Developing An App For Reduced-Gravity Flying

You’ve likely heard of the “vomit comet” — an rather graphic nickname for the aircraft used to provide short bursts of near-weightlessness by flying along a parabolic trajectory. They’re used to train astronauts, perform zero-g experiments, and famously let director Ron Howard create the realistic spaceflight scenes for Apollo 13. But you might be surprised to find that, outside of the padding that lines their interior for when the occupants inevitably bump into the walls or ceiling, they aren’t quite as specialized as you might think.

In fact, you can achieve a similar result in a small private aircraft — assuming you’ve got the proper touch on the controls. Which is why [Chaz] has been working on an Android app that assists pilots in finding that sweet spot.

Target trajectory, credit: MikeRun

With his software running, the pilot first puts the plane into a climb, and then noses over and attempts to keep the indicator on the phone’s display green for as long as possible. It’s not easy, but in the video after the break you can see they’re able to pull it off for long enough to get things floating around the cockpit.

Continue reading “Developing An App For Reduced-Gravity Flying”

Using Local AI On The Command Line To Rename Images (And More)

We all have a folder full of images whose filenames resemble line noise. How about renaming those images with the help of a local LLM (large language model) executable on the command line? All that and more is showcased on [Justine Tunney]’s bash one-liners for LLMs, a showcase aimed at giving folks ideas and guidance on using a local (and private) LLM to do actual, useful work.

This is built out from the recent llamafile project, which turns LLMs into single-file executables. This not only makes them more portable and easier to distribute, but the executables are perfectly capable of being called from the command line and sending to standard output like any other UNIX tool. It’s simpler to version control the embedded LLM weights (and therefore their behavior) when it’s all part of the same file as well.

One such tool (the multi-modal LLaVA) is capable of interpreting image content. As an example, we can point it to a local image of the Jolly Wrencher logo using the following command:

llava-v1.5-7b-q4-main.llamafile --image logo.jpg --temp 0 -e -p '### User: The image has...\n### Assistant:'

Which produces the following response:

The image has a black background with a white skull and crossbones symbol.

With a different prompt (“What do you see?” instead of “The image has…”) the LLM even picks out the wrenches, but one can already see that the right pieces exist to do some useful work.

Check out [Justine]’s rename-pictures.sh script, which cleverly evaluates image filenames. If an image’s given filename already looks like readable English (also a job for a local LLM) the image is left alone. Otherwise, the picture is fed to an LLM whose output guides the generation of a new short and descriptive English filename in lowercase, with underscores for spaces.

What about the fact that LLM output isn’t entirely predictable? That’s easy to deal with. [Justine] suggests always calling these tools with the --temp 0 parameter. Setting the temperature to zero makes the model deterministic, ensuring that a same input always yields the same output.

There’s more neat examples on the Bash One-Liners for LLMs that demonstrate different ways to use a local LLM that lives in a single-file executable, so be sure to give it a look and see if you get any new ideas. After all, we have previously shown how automating tasks is almost always worth the time invested.

Dial Up Over Discord

Some hacks are useful and some are just… well… for the fun of it, and we can appreciate that. Take, for example, [Cool Blog’s] recent experiments with dialup networking. If you think about it, the BBS systems of yesterday have been replaced with more modern tools like Discord. So why not run modems using audio chat over Discord and get the best of both worlds?

This was both easier and harder than we would have expected. The first hurdle was the lack of any actual modems. Luckily, there are software modem emulators like minimodem that makes a PC soundcard work like a modem. It supports some basic protocols, and that’s probably a good thing since the digital audio channel is probably unable to support anything too sophisticated.

Using some crude audio routing 300 baud data did flow. Increasing the baud rate all the way to 2,100 worked reliably. Combining some more sophisticated audio flows and managing sockets with systemd made the process easier. The goal was to, eventually, telnet over the link but that never worked. We would guess that it could work if you spent enough time.

But the proof is in the pudding, and the basic idea works. Why do it? We can’t think of a good reason. But if you want to give it a shot, you can find what you need on GitHub.

Hams still use modems. While we tend to have a soft spot for retrocomputing gear, we don’t miss acoustic couplers at all.

X86 ENTER: What’s That Second Parameter?

[Raymond Chen] wondered why the x86 ENTER instruction had a strange second parameter that seems to always be set to zero. If you’ve ever wondered, [Raymond] explains what he learned in a recent blog post.

If you’ve ever taken apart the output of a C compiler or written assembly programs,  you probably know that ENTER is supposed to set up a new stack frame. Presumably, you are in a subroutine, and some arguments were pushed on the stack for you. The instruction puts the pointer to those arguments in EBP and then adjusts the stack pointer to account for your local variables. That local variable size is the first argument to ENTER.

The reason you rarely see it set to a non-zero value is that the final argument is made for other languages that are not as frequently seen these days. In a simple way of thinking, C functions live at a global scope. Sure, there are namespaces and methods for classes and instances. But you don’t normally have a C compiler that allows a function to define another function, right?

Turns out, gcc does support this as an extension (but not g++). However, looking at the output code shows it doesn’t use this feature, but it could. The idea is that a nested function can “see” any local variables that belong to the enclosing function. This works, for example, if you allow gcc to use its extensions:

#include <stdio.h>

void test()
{
   int a=10;
   /* nested function */
   void testloop(int n)
   {
      int x=a;
      while(n--) printf("%d\n",x);
   }
   testloop(3);
   printf("Again\n");
   testloop(2);
   printf("and now\n");
   a=33;
   testloop(5);
}

void main(int argc, char*argv[])
{
   test();
}

Continue reading “X86 ENTER: What’s That Second Parameter?”

Terminal-Based Image Viewer, and Multi-OS Binary, and Under 100kb

[Justine Tunney]’s printimage.com is a program capable of splatting full-color images to text mode terminal sessions, but that’s not even its neatest trick. It’s also a small binary executable capable of running on six different operating systems: Linux, Windows, MacOS, FreeBSD, OpenBSD, and NetBSD. All without having to be installed or otherwise compiled first. On top of it all, it’s less than 100 kb.

How is this possible? It’s thanks to [Justine]’s αcτµαlly pδrταblε εxεcµταblε format, implemented by a project called Cosmopolitan which aims to turn C into a build-once-run-anywhere language. The printimage.com source code is included within the Cosmopolitan project.

If the name sounds a bit familiar, it’s probably because the Cosmopolitan project is a key piece of a tool we recently covered: llamafile, which allows people to package up an LLM (large language model) as a single-file, multi-OS executable.

As printimage.com shows, terminal windows are capable of more than just text. Still, plain ASCII has its appeal. Check out the ASCII art STL file viewer which might just make your next sick ASCII art banner a bit easier to generate.