446: World’s Best PB&J

Transcript from 446: World’s Best PB&J with Chris White and Elecia White.

EW (00:06):

Hello and welcome to Embedded. I am Elecia White, alongside Christopher White. Our guest this week is a bit of a surprise, but I am hoping you will figure it out very quickly.

CW (00:17):

Yes. My name is Christopher White, and I am excited to discuss embedded systems, origami, music, robots, burnout and science fiction with you. Let us get started.

EW (00:25):

We are going to start with lightning round where we want short answers for our short questions. Are you ready?

CW (00:33):

Yes, I am ready for the lightning round. Let us do this.

EW (00:37):

Should we bring back the dinosaurs?

CW (00:40):

No, I do not think we should bring back the dinosaurs. There are too many potential risks and ethical concerns associated with attempting to recreate extinct species.

EW (00:47):

Do you personally like to finish one project or start a dozen?

CW (00:53):

I prefer to finish one project, before starting another. I find that focusing on one task at a time allows me to achieve better results and feel more productive. However, I also recognize the value in juggling multiple projects when necessary.

EW (01:04):

Dogs or cats?

CW (01:05):

That is a great question. Personally, I am a dog person. I love their loyalty, playfulness and affectionate nature. Dogs can also be trained to perform all sorts of interesting tasks, from guiding the blind to detecting medical conditions. However, I also appreciate cats for their independent personalities, gracefulness and ability to keep themselves clean. Ultimately, I think it comes down to individual preferences and lifestyles.

EW (01:24):

Do you have a tip everyone should know?

CW (01:27):

Yes!

EW (01:27):

<laugh>

CW (01:27):

One tip that I think everyone should know is the power of taking breaks. Whether you are working on a project, studying or simply going about your day, it is important to take periodic breaks to recharge and avoid burnout. This can be as simple as taking a short walk, doing a quick meditation, or engaging in a fun activity. Taking breaks can help boost your productivity, creativity and overall wellbeing. I personally like to take breaks by lowering my core voltage to 1.15. He did not say that.

EW (01:54):

He did not say that? That would have been really cool. So, our guest is ChatGPT. Let us see, what else should I ask it? We did lightning round. Let us finish with lightning round, and ask what their opinion is of the new STM32 8-pin Cortex-M processors.

CW (02:21):

As someone who is interested in embedded systems, I think the new STM 8-pin Cortex-M processes are very exciting.

EW (02:25):

<laugh>

CW (02:25):

They offer a great balance of cost, size and performance, making them ideal for a wide range of applications. I appreciate that they are also easy to use and program, thanks to the well-documented and user-friendly-

EW (02:36):

Oh my goodness.

CW (02:36):

STM32CubeMX software tool. Overall-

EW (02:39):

Oh, this is terrible.

CW (02:39):

I think these processors are a great addition to the STM32 family, and will be a popular choice for many embedded systems designers.

EW (02:47):

Do you not like PICs? It is always positive. Make it angry.

CW (02:52):

As an AI language model, I do not have any personal preferences, but I can provide an objective opinion on PICs.

EW (02:58):

Objective, really. <laugh>

CW (02:59):

PICs are a popular family of microcontrollers, that offer a wide range of features and capabilities. They are known for their low cost, low power consumption and ease of use. However, like any technology, PICs also have their limitations, and may not be the best choice for every application. Ultimately, the choice of microcontroller depends on the variety of factors, including the requirements of the project, available resources and personal preferences.

EW (03:20):

Could you answer that as if you were Darth Vader?

CW (03:24):

As an AI language model, I do not have emotions or the ability to mimic specific characters. However, if I were to provide a response as Darth Vader, it might go something like this.

EW (03:33):

<laugh> How is that even...? <laugh>

CW (03:35):

I find your lack of faith in the power of PICs disturbing. The PICs are a powerful and reliable tool for many applications. And their low cost and ease of use makes them a great choice for those who are not afraid to embrace their full potential. Do not underestimate the power of the PICs.

EW (03:51):

<laugh> Okay, that was actually worth it <laugh>. But only because you do such great voices. Oh, am I still interviewing the ChatGPT?

CW (04:01):

No, no, no. See, if I ask this thing, who are you, "Who are you?" As mentioned earlier, my name is Christopher White and I am a language model, apparently.

EW (04:11):

Okay. Well, I do have actual questions on our list today.

CW (04:15):

That you would like to ask a human?

EW (04:16):

That I can ask it. That I was going to ask.

CW (04:18):

All right, we will do two more.

EW (04:19):

Okay.

CW (04:19):

It is a lot easier for me. I just have type.

EW (04:24):

When you were in elementary school, what did you want to be when you grew up?

CW (04:30):

As an AI language model-

EW (04:31):

Oh, why does it have to do that every time?

CW (04:31):

I was not in elementary school, and I do not have personal ambitions or desires. However-

EW (04:37):

However, since you are Chris White-

CW (04:39):

I can tell you that many children have various aspirations and career goals at a young age, ranging from being an astronaut, doctor, teacher, to pursuing their hobbies and interests. It is important to encourage children to explore their passions and interests, and provide them with opportunities to learn and grow in these areas.

EW (04:51):

It is just that it always sounds like somebody who is about to either say, "Well, actually," or just- I mean, it is all mansplaining. Okay, so let us see. One more. How do we get people to sign up for our newsletter? Because Embedded.fm has a newsletter and we send it out every week, even when we do not have guests. Even when we do not post a show, but we send out links that are usually amusing.

CW (05:23):

Getting people to sign up for a newsletter can be challenging, but there are several strategies that may be effective. One approach is to offer incentives or rewards for signing up, such as exclusive content, discount, access to special events or cash bribes. Another strategy is to promote the newsletter through various channels such as social media, email, word of mouth.

(05:40):

Or emphasize the benefits of subscribing, such as staying informed about the latest news and events related to embedded systems, origami, music, burnouts, and science fiction. It may also be helpful to make this signup process as easy and user friendly as possible. And to follow up with subscribers regularly, to keep them engaged and interested. I am very bland.

EW (05:58):

Yes. Yes.

CW (05:59):

All right. Well, that was a fun exercise, because I did want to discuss that thing a little bit today. I am no longer- Sign off now as me as Christopher White. Sure. It was great chatting with you. This is Christopher White signing off for now. Have a great day.

EW (06:18):

You have never sounded like that in your whole life.

CW (06:23):

I just did. Welcome to Embedded, not hosted by ChatGPT.

EW (06:28):

Mm. Yes. Thank you for coming back from your sojourn as...

CW (06:32):

As a typist?

EW (06:32):

As...

CW (06:34):

As voice actor?

EW (06:34):

As ChatGPT and voice actor. So you are enjoying ChatGPT?

CW (06:39):

No, I hate it.

EW (06:40):

Oh, but sometimes I find you giggling madly.

CW (06:42):

<sigh>

EW (06:42):

Like the palindrome. The best palindrome ever.

CW (06:50):

Just because I do not like something and I find it disturbing, does not mean I cannot also find it funny. Yes, I have been playing with it, mostly because I want to keep an eye on it.

EW (07:01):

Mm-hmm. <affirmative>

CW (07:02):

<laugh> Because I want to be able to be informed when I am discussing it, and to have things that back up my opinions about it. So yes, occasionally I play with it in a humorous way. Occasionally I have used it for work things.

EW (07:21):

How do you use it for work things? I mean, it does not give you the right answer.

CW (07:27):

It does shockingly often give you the right answer.

EW (07:30):

See, I tried to use it to generate some Python code, to do some geometric stuff. And it-

CW (07:37):

You were asking it to do something challenging, which required probably knowledge it does not have. Well, I am going to say that a different way. It requires it to have been trained on things it was not trained on, or requires it to do some sort of creative thinking.

EW (07:54):

I just wanted some trigonometry.

CW (07:55):

I am going to change that, too. To do anything creative. I was asking it to do things like write me a Python script to monitor a subprocess, and if the subprocess dies, restart it.

EW (08:08):

Which is something people have done a lot.

CW (08:11):

Or, write me a bash script that finds the latest directory in a sub directory. And within that directory finds a log file called log.txt and tail -f's it to the screen. Simple little things like that. Now it would get things wrong, and I would go back and forth with it, and say, "Oh, I did not want it to work that way." "Oh, you left this out."

(08:31):

Or I would be able to ask it questions like, "I do not understand why you did it this way," or "You based this on-" One other thing I asked it to do. I have been asking it to do lots of boilerplate stuff. So one thing I needed was a status website for a system, and I said, "Write me a status website in Python." And it uses something called Flask. I had not used Flask before, had not heard of it. So it writes me this script in Flask, and I did not understand any of it, because I had never used Flask.

(09:03):

So I asked it things, and it would come back with, "Oh, I thought you understood how to use this. Well, here is how this works." <laugh> And I would ask it, "Well, how do I run this? This is Python. How do I actually run the website? Because this code does not just do it." "Oh, I thought you understood. You have to run the flask command with the script."

EW (09:23):

So condescending. <laugh>

CW (09:24):

Anyway, it is an interesting experience. And it seems to work better with boilerplate stuff. It has done things wrong, but it will correct itself if you tell it, which is odd. It is a bit disturbing in that regard. I do not think it is far off from Copilot, which I have not actually used, but people claim to have had good experience with. My feelings about it are complicated <laugh> and philosophical and other things.

EW (09:56):

So I guess I could have asked it, how long until the singularity?

CW (10:02):

<laugh> Yeah.

EW (10:03):

And will our robot overlords be kind to us?

CW (10:07):

That is an area of where I am upset about things, because I think people are on both sides of this issue, are reacting in ways that do not make a lot of sense given the reality. There are a lot of people who think it is going to be an AI that takes us over. It is not. It is a statistical language model. It is not thinking, it is not reasoning, it is not doing logical problems.

EW (10:30):

What about it getting worse? Because it is spewing out onto the internet, and so it will soon be learning from its own garbage.

CW (10:40):

It is a long term problem. I do not know. That is certainly a- That reminds me of the long term forgetting problem, in RNNs?

EW (10:49):

Yeah.

CW (10:49):

In models that have knowledge of history.

EW (10:54):

DNNs too have that same problem.

CW (10:55):

Yeah. I do not know. I think there are a lot of people going, "Oh my God, this is going to take over the world, and do everything." I look at it and see huge limitations. People are going to try to use it places where it should not be used. People are going to try to replace people with it. I think they are going to be surprised at how that seems to work for a while, and then does not.

(11:16):

The stuff I am talking about, about writing scripts and stuff, or writing code. If you do not understand the code, it could have a small error. Let us say it is great.

EW (11:25):

But so could your coworkers.

CW (11:27):

Let us say it gets 95% right, and you ask it to write something. If you do not understand Python, you may not be able to fix the 5%. You may not be able to find the 5%. You may not understand why it does not work.

EW (11:37):

Oh, see, I tried to get it to make some origami Python scripts for me, using NumPy, which I am very familiar with. and Matplotlib, which I am familiar with. I wanted it to do some rigid foldable patterns, Yoshimura and the Miura-ori patterns. I could not say, "Make me a Python script to do that." That was just so far out of its ability. I could break down the problem, but- It knew all of the trigonometric functions, but it was not good at putting them together.

CW (12:18):

That is because it is not reasoning.

EW (12:19):

It is not reasoning.

CW (12:21):

If it is trained on a corpus of information that is consistent, that has the kinds of problems you want to solve, then I think that is a useful application for it. To do boilerplate, tedious work. But for creative work, yes, it will write you limericks and poetry and screenplays, in the style of Shakespeare about Star Trek and whatnot. But if you do that over and over and over again-

EW (12:45):

It all sounds the same.

CW (12:46):

It all sounds the same. It is not an AI. That is the thing that keeps driving me crazy. In the sense that I like to use the term AI, it is not an AI. It is a statistical engine. An AI is something that can solve novel problems in my mind, or detect things- I do not know. I am not fully self-consistent on what I think of AI, but somewhere along the lines of being able to creatively solve problems, is part of it. So I would consider a vast array of things that people consider AI, not to be AI.

EW (13:22):

Sometimes it feels like it is creatively solving a problem, doing something that I could not do.

CW (13:28):

Sure. But it is-

EW (13:29):

Writing poetry about...

CW (13:31):

But in some sense, it is a Mechanical Turk, right? It is taking things people have already done, and remixing them in a- Yes, humans do that too. But it is not quite how we do things. We do not just- As a musician, I am influenced by decades of listening to music, and seeing music, and studying music, and the people who came before. But it does not mean that I am mimicking anybody at any given time. It is a complex process. While this is like a small nugget of probably how brains work, I think it is a very small piece of how intelligence works.

EW (14:13):

But there have been times when I had to write copy, when I had to write up what the Embedded website was for, or write, I do not know...

CW (14:25):

Advertising.

EW (14:26):

Advertising stuff.

CW (14:27):

Social media garbage, yeah.

EW (14:28):

Put together our website, which says pretty much nothing other than if you want help making an embedded system come here. But you need like six pages in order for it to be a website. That sort of blah blah, blah...

CW (14:42):

It is fine.

EW (14:44):

That it was good at.

CW (14:47):

It is good at many things. The question is...

EW (14:51):

Is it going to replace us?

CW (14:53):

Is it going to be this thing that transforms society, that a lot of people are thinking it is going to be? I do not really think so. Is it going to be this thing that replaces whole swaths of creative people? I do not think so. Now maybe I am not thinking far ahead in the future. Maybe in a year, a year and a half, given how fast these things train, it will be spectacularly different. But I feel like there is a coming backlash <laugh>.

EW (15:19):

I think when it dirties its own feeder pool, it is going to have a lot of trouble.

CW (15:25):

And the thing is-

EW (15:25):

Because it is already so bland.

CW (15:26):

It is prompt based. It is not sitting there- It is dead. It is not sitting there doing anything while it is idle.

EW (15:33):

It is helping other people.

CW (15:35):

You give it a prompt, and it runs through its model and finds the statistical word after word, that matches what should come out next. That matches the prompt best. That matches its training best. That matches the context that came before best. And that is not- It cannot do anything in the absence of stimulus <laugh>.

EW (16:00):

Because it does not understand...

CW (16:02):

Right.

EW (16:03):

The errors it has can be very subtle or egregiously hilarious.

CW (16:10):

That is the thing. It does not know it made an error, until you tell it. But then it knows.

EW (16:13):

Talk about the palindrome thing.

CW (16:15):

Right. So <laugh>, let us see if I have that one. I do not want to go on with this for too long.

EW (16:22):

I have a bunch of other things on our list.

CW (16:23):

Yeah. Furry animal palindrome. I asked it to write a palindrome about a furry animal. The first thing it says is, "Asanta Nasa saw Nasa's fauna." I asked it, "Is that a palindrome?" "I apologize for my mistake. The previous sentence I provided was not a correct palindrome." Now, does it actually understand it made a mistake? Or does it statistically think that since I asked it a question about its previous response, it must have made- The correct response to that is, "I made a mistake and it was not correct." So it gave me another one, that was not about a furry animal, also was not a palindrome. And I said, "Is that about a furry animal? It says, "I apologize for the confusion. I misunderstood your prompt." It is lying. It did not misunderstand anything. So that is the kind of thing that drives me crazy. This thing saying, "I misunderstood," implies a whole lot of stuff. It did not misunderstand my prompt, because that is not how it works.

EW (17:23):

But it is not responding to you. It is using the statistics-

CW (17:26):

That is what I am saying.

EW (17:27):

Of what word comes after "I am sorry."

CW (17:30):

That is what I am saying, but you are talking to this thing. That is the thing. You think you are talking- Not you. One thinks they are talking to an entity, when you are actually talking to an Excel spreadsheet.

EW (17:41):

<laugh>

CW (17:42):

Anyway, "I misunderstood your prompt. Here is a palindrome about a furry animal. A man, a plan, a canal: otter, Panama!"

EW (17:50):

<laugh> I love that so much. <laugh>

CW (17:51):

It took an existing palindrome, and just jammed "otter" in the end.

EW (17:57):

A man, a plan, a canal, otter, Panama. <laugh>

CW (18:01):

And it said, "This palindrome is often attributed to Leigh Mercer who created it as a word play on the construction of the Panama Canal, in the presence of otters in its waters."

EW (18:09):

<laugh>

CW (18:13):

That person did nothing of the kind. And so my response to that was, "Sigh." And it said, "I am sorry if my previous response was not helpful. Please let me know if there is anything I can assist you with." Somebody said, "This is just ELIZA." I disagree heavily. It is not like ELIZA. If you have used ELIZA, you know that this is much more sophisticated and capable than ELIZA. But it is very broken.

EW (18:38):

Wait a minute, let us define ELIZA. Because not everybody is-

CW (18:42):

ELIZA was one of the first chatbots. I think it was coded in the seventies or the sixties. It was very stupid, heuristically based. And it pretended to be a psychotherapist. So you could-

EW (18:52):

But it was- It would respond to you, it would bring up what you said to it. It did not have a lot of history.

CW (18:58):

It had no understanding. So it would just take things you said, and then put them in sentences.

EW (19:03):

But it had a list of keywords. Like, if you said anything about your mother, it would say, "Tell me more about your mother." It felt like you were talking to someone.

CW (19:15):

For a minute. It was very bad.

EW (19:17):

Yes. But then it got repetitive, and you could tell you were not.

CW (19:21):

It was written in 1964 or five, and then later redone in Lisp and some other things. It is not very sophisticated. It is not a neural network based thing. It is just a program.

EW (19:37):

You could look through ELIZA's code, and figure out what it was going to respond to every-

CW (19:41):

Exactly. I do not know what to say about this stuff. Everybody is talking about it. Some people are excited about it, and everybody who gets excited about it, I just shake my head and want to not think about it. And people are scared of it. And I do not know whether to be scared of it or not. I am not currently scared of it.

(19:56):

I do think it is something that we need to pay a lot of attention to, to make sure it is not misapplied. Because I think the danger is not this thing doing something. It is humans doing something with these things, without thinking of the consequences or how they really work or what they are actually good for or what they do.

(20:14):

They have only been around a few months, and already people are jamming them into search engines, and putting it on the homepage of Google and Bing. Even Duck Duck Go has a little thing at the top now that uses this model to get suggestions and parse stuff.

EW (20:30):

And it wasting so much time for other people. I remember-

CW (20:34):

Yeah, I am spending a ton of time trying to get the damn thing to write me a palindrome.

EW (20:38):

No, no, no, no.

CW (20:39):

Oh.

EW (20:39):

Like, Clarkesworld, the sci-fi magazine, had an onslaught of submissions that were all written by ChatGPT. And I think it was Uri over at Wokwi, or maybe one of the folks at Adafruit, said that they got code. The person was on their forum trying to debug the code, and they finally said, "Well, where did you get this code?" And the answer was, "ChatGPT." And it was like, you just want to throw the table over and walk away.

CW (21:11):

No, no, no. Was it not somebody who said- Oh, that was one thing. But there was another, I think it was, Evil Mad Scientist that got a support call. And they said, "Hey, this program does not work," or blah blah blah. And at the end of the call, I think it was Wendell, said something like, "I do not think that exists. Where did you get this?" And ChatGPT had made up this program.

EW (21:45):

Right. And you asked it about me, and I had written several books.

CW (21:49):

Yeah, you wrote "Practical C" and-

EW (21:50):

Which I did not.

CW (21:50):

And "Embedded Systems" or something.

EW (21:50):

I wrote "Making Embedded Systems." I will take credit for that one.

CW (21:54):

So that is part of the thing. It will not- It does not know that it does not know.

EW (22:01):

And it does not know what truth is.

CW (22:05):

So if it does not know that it does not know. You cannot be sure if what it tells you is something that is accurate, because it has been well trained in the area you are asking about, or something it has not.

EW (22:16):

That is true. It never told me it did not understand Yoshimura folds. It actually went on this long rant about rigid foldable origami. It was really interesting, but it had no idea what it was talking about. I did play with it, as a compare and contrast between these types of folds. It could not do it cause it does not understand.

CW (22:38):

But it is willing to tell you all about it.

EW (22:40):

Oh, it was willing to make up all kinds of- Yes.

CW (22:43):

It is like Cliff at the bar in Cheers, "Blah, blah, blah, blah, blah." Remember Cliff? I am very old. <laugh> The other thing, the last thing I will say. One way that people- It seems like developers are trying to get around this, is they are plugging in a backend, like Wikipedia or a search engine to it. So it will go and look for information. But that is causing other problems, because now it is just picking the first hit or the first couple of hits. How does it know whether it is an accurate search result? And so it will return you garbage from the internet, instead of just making up garbage.

(23:24):

It cannot evaluate the truth of things, even if- The obvious solution is, "Well, if it cannot tell when it does not know something, we can give it the ability to look it up." But it has no way of assessing whether what it looked up is correct, because all I think they are doing is hooking the search heuristically into a prompt engine. Right? So you ask it a prompt, maybe they have got some confidence value coming out of the model, and it goes, "Oh, I will look that up." Then it uses that as the next prompt, or something like that. I do not know. I would like to not use computers.

EW (23:59):

I see. I found a good therapist, and I do not really want to talk about burnout on this show. But I did ask her why everyone that I know is going through burnout too. If it was just my imagination, like when you buy a new car and you think everybody else has the same car, because you start noticing it everywhere.

(24:21):

She said it is more common because people have not processed the pandemic. That it was a catastrophic event for people who did not lose loved ones or become very ill themselves. I mean, it was a catastrophic event for everyone. And maybe that we all hate our jobs, because we are just exhausted from pretending that everything is hunky dory. That we are going back to normal, when we do not even really maybe know what normal is anymore.

CW (24:55):

I think that is a big part of it. I do not know if that is part of it for me. <laugh> Probably.

EW (25:01):

Going back to Nine-eleven and the towers falling. That was obviously traumatic. It took a long time to feel safe, and I was pretty removed and very remotely affected by it.

CW (25:15):

Yeah.

EW (25:16):

And the pandemic has been going on for longer, and more people are affected. More people have died. And there is no one to be mad at.

CW (25:33):

Well, there are a few people to be mad at.

EW (25:35):

Well, I mean-

CW (25:37):

I can think of three right off the top of my head. <laugh>

EW (25:40):

Sometimes when you go through something traumatic, if you can respond to it, that is part of completing the stress cycle, part of getting it out of your head. But there is no response.

CW (25:56):

I think part of it too is the nature of our work as tech people, not that we are special or anything, is a little bit isolated sometimes. I am not in favor of people going to the office if they do not want, or being forced to go to the office, or anything like that. But it did take all of us and put us in our little desks for a long time. Which was not a big change in existence for me, but we had other outlets.

(26:25):

I think also part of it is seeing how the corporate world started treating employees <laugh>, during that time. Because it started out with, "Oh, you can do whatever you want." I work from home. "We will support you, and all this stuff, and we are going to hire tons of people." And now all that is unwinding and unwinding.

EW (26:49):

And layoffs! So many layoffs.

CW (26:51):

Unwinding in kind of cruel ways, which I think is bursting people's bubbles about the industry in some ways.

EW (26:59):

What? Do you mean we are not all a happy family at this company?

CW (27:05):

Team. Teams.

EW (27:06):

Putting the meat in "team."

CW (27:12):

<laugh> Anyway.

EW (27:15):

Yeah, okay. So going back to things are getting back to normal, there are conferences. In-person conferences starting up.

CW (27:23):

Okey doke.

EW (27:24):

Open Hardware Summit at the end of April. The Crowd Supply Teardown late June. SEMICON West, July in San Francisco. Embedded World is in Austin. Oh, it is October, 2024. So maybe not right away.

CW (27:43):

Not to worry about that one just yet.

EW (27:45):

Hackaday has a new prize.

CW (27:47):

Yeah, they just announced it yesterday, right?

EW (27:50):

$500 for the 50 finalists. And there are subcategories with additional prizes.

CW (27:57):

So $10 each?

EW (27:58):

No. And then there are the big prizes, the multi tens of Ks prizes for the big winners. It looks good.

CW (28:09):

It seemed like they had a broad range of...

EW (28:10):

Topics.

CW (28:10):

Topics. You could do things in this time, which was cool.

EW (28:15):

Yeah. Including a general "save the world" sort of topic. I mean, they do want sustainability and all of that. But there was one that was like, "build a tool that is useful."

CW (28:28):

Yeah.

EW (28:28):

I liked that. That was one I had not seen before. And their judging group was pretty interesting. <laugh> I went to their judges, and I was like, "You know what, I should just ask all of these people to be on the show" <laugh>.

CW (28:40):

That is what you did one year, did not you?

EW (28:43):

I have done that for some things, but I do not think I have done it for Hackaday, although maybe I should. My scheduling has not been great. So yes. And then Embedded Online is happening, sometime soon?

CW (29:00):

Yeah, it is very soon.

EW (29:01):

That one is online only though.

CW (29:03):

Cool.

EW (29:05):

So yeah, if you are missing people and want to get together, there are places you can go for your tech get togetherness. We will not be there.

CW (29:17):

Now see, a lot of these Hackaday prize images, I think were generated by an AI. Anyway. <laugh> Excuse me, generated by a deep neural network model.

EW (29:34):

Okay. I want to do announcement that we have a newsletter. We send it out every week, even we do not have a guest.

CW (29:41):

Or show.

EW (29:42):

Or show. We try to put in a few links for your amusement, including the Fish Doorbell and the Frog House.

CW (29:51):

<laugh>

EW (29:51):

Both of which are very funny. But also useful things like language pointers and whatnot. And we have a Patreon. For those of you who do not like Patreon, I am going to put together a Ko-fi, if you want to support us that way.

CW (30:13):

Cool.

EW (30:15):

Let us see. I am looking for someone who does Qt on Linux.

CW (30:21):

I do!

EW (30:23):

A contract-

CW (30:24):

Oh.

EW (30:25):

With a GUI application on a medical device. I do not know Qt.

CW (30:32):

I believe it is pronounced-

EW (30:35):

Cutie.

CW (30:35):

<laugh>

EW (30:35):

I believe it is pronounced cutie. Cute.

CW (30:41):

I know Qt, and have done medical devices with it. But I am-

EW (30:47):

On Linux.

CW (30:47):

On Linux. But I am tired and will be taking no additional work for the foreseeable future. But yes, that sounds cool. And, somebody should jump on that.

EW (31:00):

Yeah. Send us an email to the show, if you are interested in finding out more. They are looking for people who have experience in Qt.

CW (31:09):

You should really not be learning. Yeah. <laugh> It is hard to learn. So if you do not know it already, it will take you some months to spin up. And they are probably not looking for that.

EW (31:21):

Yeah. They have people they can do that with. Let us see. There were a couple things from the Patreon Slack group. I put together a bit of code and asked people which way they saw function pointers working. While that was a good discussion, the more interesting discussion was, "What do you mean you do not know what Godbolt is?"

CW (31:51):

He is a person.

EW (31:52):

Matt Godbolt is a person. Yes.

CW (31:54):

<laugh>

EW (31:54):

But he created this thing called "Compiler Explorer," and we have had him on the show.

CW (31:59):

And we have talked about it many, many times, but apparently some people still have not heard of it.

EW (32:04):

Okay. So what I did is, I put two or three functions, I typed into the Compiler Explorer at godbolt.org. And then I put in a main, and then I had some printout functions for different function pointers. Because that was what I was exploring. And it compiled it. And it ran it.

CW (32:25):

What is it?

EW (32:27):

Well, that is the thing is, it is a compiler explorer.

CW (32:32):

But where does it- Do you download it? Does it come in a shrink wrap box with floppy discs?

EW (32:36):

No. You go to godbolt.org and you type in-

CW (32:37):

Ah, it is on a website.

(32:39):

Type in your code. Usually you have to click through a few "We try to protect your privacy as best we can" notes. And then you compile it. It was originally made to settle bets on which way writing a couple of lines of code would be faster.

(32:58):

And it mostly shows the- As its original incarnation, you had the C code on one side, and on the other side it would show the Assembly.

EW (33:05):

Right.

CW (33:05):

So you could immediately look at the Assembly. Then it has a dropdown box for thousands- I am exaggerating, but seriously-

EW (33:12):

Seems like.

CW (33:12):

Every compiler under the sun, for every architecture.

EW (33:15):

Every language.

CW (33:17):

And you can choose that...

EW (33:20):

ARM.

CW (33:20):

Compile it for different architecture.

EW (33:23):

Or PC or PowerPC.

CW (33:25):

And it will execute now.

EW (33:26):

And it will execute now.

CW (33:29):

For some value of execution. I do not think it has- It is not going to execute your graphics code.

EW (33:35):

I do not think so. No. I just did printf. It ran. Yeah, it is such a great tool for taking a problem, and just walking up a solution. Just hacking it together to see what happens if you try this.

CW (33:55):

Yeah. It is the stuff you used to do, where you just vi dumb.c and then GCC dumb.c and get a.out, and do that. Or if you wanted to look at the Assembly, you would get the list file. But it just makes everything much easier, because you do not have to worry about, "Oh, which GCC do I have?"

EW (34:13):

It color codes the Assembly, so that you can find the line it was on.

CW (34:16):

There are all sorts of tools built into it. It is very useful if you are doing any kind of coding that you have questions about <laugh>.

EW (34:24):

Like I said, my question was, "Which of these two ways of handling function pointers in C, did you first learn? It was not a groundbreaking question. I just wondered, because-

CW (34:37):

You wanted to see if they worked first. Because I believe...

EW (34:40):

That is true. I was not sure that they both worked. There is a pretty way and a not pretty way. And I learned the not pretty way. I did not believe the pretty way worked.

CW (34:49):

To be clear, to bring it around, we did ask ChatGPT, but we could not be sure that it was lying or not.

EW (34:53):

I do not remember what it said though.

CW (34:54):

It said the right answer.

EW (34:57):

Oh, okay. It is funny because the ugly way, when I searched online just in Google, the first hit I found was GeeksforGeeks, which is usually a site that has reasonable answers. And they had the ugly way, and did not show the pretty way.

CW (35:09):

I learned the ugly way first. Even though you pulled out our C book from college, which is now...

EW (35:14):

So old.

CW (35:15):

Almost 30 years old. And it had both ways in it. So I am surprised. I do not know. I think for me...

EW (35:22):

It did note that one way was not entirely...

CW (35:24):

Okay, let us be clear here. So function pointers. I am not going to describe function pointers entirely, but when you use a function pointer to call the function, the ugly way is to dereference it first. So you have parenthesis and then asterisk and then the function pointer variable name and then close paren, and then open paren for the arguments. So that is the way I am used to doing it, because it is a function pointer. I have got to dereference it.

EW (35:46):

You have to star to get the contents off it.

CW (35:47):

The clean way is you just do not do any of that, and you just call the variable name as if it was the function. And C dereferences it implicitly, which I did not know. Or if I did know, I keep forgetting it, because it scares me.

EW (35:59):

I mean, because if that is true, what about all the other pointers in the world? Is it just going to magically dereference those?

CW (36:04):

<laugh> I do not...

EW (36:06):

It just really bothers me.

CW (36:07):

I do not think so, because I think it knows when you are declaring a function pointer. So I think it is a special type.

EW (36:12):

Why is it treating function pointers special? I do not like it when it does special-

CW (36:16):

Probably because somebody said, "This is really syntactically gross."

EW (36:20):

It really is syntactically gross.

CW (36:21):

But I prefer things that are explicit in C, because the implicit things it does are often confusing or unexpected. So I think the reason I use the ugly way all the time is just because I want to be safe, and it never stuck with me to use the other way.

EW (36:35):

Yeah, me too. It just is one of those, explicit is ugly, and implicit is pretty. But I am so used to needing to know exactly what is happening, such a control freak, that I use the explicit methods because I do not trust the implicit ones, even though it is part of the standard.

CW (36:53):

Yeah.

EW (36:53):

Let us see. The other thing that came up in the Slack that was, somebody said they wanted to learn Jupyter Notebooks. My answer to that was, "Have you tried Colab?" Because you do not really want to set up your own Jupyter network system. It is actually kind of gross.

CW (37:18):

It is not...

EW (37:20):

You have to have a server...

CW (37:21):

Super hard, but yeah.

EW (37:23):

And then you have to have it run on your local computer, but then it has got its own...

CW (37:28):

I think I have done it with Docker a bunch, right?

EW (37:30):

Yeah, it would be easier in Docker, because you need the server and you need the client.

CW (37:34):

But it is not- It has some command line.

EW (37:37):

But Colab is just this- C O L A B.

CW (37:40):

It is like Godbolt for Jupyter Networks. Sorry.

EW (37:46):

It is a Google thing, and it saves stuff to your Google Drive. You type in it like you would a Jupyter Notebook.

CW (37:56):

We should probably say what a Jupyter Notebook is.

EW (37:57):

So Jupyter Notebook, you can have code blocks and you can have text blocks, and you can intermingle them.

CW (38:03):

In one kind of document.

EW (38:05):

In one document. The code blocks usually are Python, although they do not have to be. And you can install various things to the instance of whatever you are running. So if you need a particular Python package, that is fine !pip install <blah> and then you have your document and your code in the same place, and anybody can run it. But it is kind of like AWS in that it is not...

CW (38:38):

It forgets its context after a while. Yeah.

EW (38:40):

Yeah. If you want to generate a bunch of files, like when I want to generate a bunch of origami files, I have to download them. Or they will be gone the next time I go there. Of course I can just regenerate them. It is somebody else's computer. I do not care how much time I waste.

CW (38:55):

It is free, mostly. Right? So it-

EW (38:58):

Oh, it is free. But there are limitations on how much-

CW (39:01):

That is probably why it-

EW (39:01):

Processing power you can use.

CW (39:04):

Yeah. I remember, I took a a neural networks class a few years ago, and it was all done in Colab and Jupyter Notebooks. I think it might have been Jupyter Notebooks at the time, but same thing. Very sophisticated code with defining models and training them right inside there, and all sorts of stuff, and running them and executing them. You can do almost anything in there. It might be a little slower than if you had a computer running...

EW (39:35):

I mean if you had a slow computer. I mean that computer is pretty fast. But it is over the internet. It is just the ease of being able to, not comment, but write a paper-like thing.

CW (39:55):

Yeah. A self-describing document with code sections, that you push play and they execute.

EW (40:01):

And you can have diagrams and...

CW (40:05):

Graphical output, right? Yeah.

EW (40:05):

All of the things in the text part that you could do with Markdown.

CW (40:09):

And you can, if you use Matplotlib or something, a code block can generate a graph right in the text.

EW (40:16):

Oh yeah. It comes with Matplotlib and NumPy and SciPy. So you do not have to install those. I only end up having to pip install things that are pretty one off.

CW (40:27):

Yeah. So it is a cool workspace for experimenting, but also for delivering stuff. Like there have been scripts for clients, I remember, that you built for handling bitmaps and assets and remapping things. It was like, "Okay, here is this link to this thing. Drop your file in here, and press go. And the output is a zip file with everything that has been processed."

(40:50):

That is a lot easier to deal with than, "Here is a Dropbox link to my executable. Oh, it does not run on Windows. Hang on. Oh, you did not-" Or maybe it is Python, "Well, you got to get your requirements.txt. Oh, you got to use a virtual environment. Oh, you have got to use Conda." It is much easier to just have something out there, that is not a web app exactly, but some code that is accessible.

EW (41:12):

It is very much like a web app sometimes.

CW (41:15):

It is just not- I mean it is not presented that way. It has not got a UI, and stuff.

EW (41:18):

It could be. If you were willing to put in the work. Let us see. I have a line in here for UAVs, drones and ArduPilot.

CW (41:27):

Argh, I do not know if we have time.

EW (41:27):

So, ArduPilot?

CW (41:29):

Yeah?

EW (41:31):

Every time I hear about someone who wants build a drone controller...

CW (41:35):

Yeah.

EW (41:36):

I am just like, "Go to ArduPilot. Do not reinvent the wheel."

CW (41:41):

Yeah.

EW (41:41):

Am I giving them puppies?

CW (41:44):

You are giving them lots of puppies. You are giving them a puppy farm. I have been working on a drone project, which is wrapping up soon, sort of. It was my first experience with ArduPilot and stuff, and I am not even doing anything with it, except setting it up. I am not writing code that interfaces with ArduPilot.

(42:07):

ArduPilot is a software platform for autonomous vehicles. Full stop. It is for fixed-wing aircraft. It is for copters, multi- What do you call them?

EW (42:19):

Rotor?

CW (42:20):

Multirotor copters. It is for boats, it is for cars, anything. And so it is a very sophisticated, large project that can integrate with all kinds of vehicles for autonomous or manual controlled flight or driving. As you expect from an open source project that has been around for a while, it is big and it is complicated, and it has got its idiosyncrasies. I was not really aware of that when I started setting this thing up, which was an off-the-shelf UAV, that we were just trying to get some stuff to work with.

(42:56):

It has got a whole ecosystem. There is ArduPilot, and then there is the software that talks to ArduPilot, that you actually use to control the vehicles. And there are a whole bunch of those applications. QGroundControl, which is a Qt based one. There is Mission Planner. There is something called Solex. A bunch of these things.

(43:13):

It can control cameras. It can control servos. It can control the speed controllers, the IMU, your gyros, GPS. It is just really complicated. And the gimbals, and the cameras and stuff. I have had a devil of a time trying to get it to talk to a gimbal correctly, and all kinds of things. So yes, I think you should recommend ArduPilot, but people should understand that it is... <laugh>

EW (43:40):

When I say puppies, there is free as in freedom, and there is free as in beer. And then there is free as in puppies. Because you have to understand what your "free" is, when you have free software.

CW (43:57):

Yeah. And there is PX4 too, which is another similar- A different one that people use. I do not know what I expected, but it was more complex, and opaque in some ways, than I expected. When you are setting up your vehicle, there are just reams of parameters and things, and some of them just have values or bitmaps in them that are not well documented. And that may be the device I am using too.

EW (44:29):

That is funny. When I first came across it, it seemed like a really good way to do things on UAVs, because it had good fusion filters between the different sensors, and it supported all three of the big drones available. I do not remember it going on all the vehicles <laugh>. It makes sense that you would expand things like that. But I think to me it is a much smaller project, because the last time I interacted with it was...

CW (45:08):

Ah, now it is-

EW (45:08):

Years and years ago.

CW (45:09):

Super huge. Yeah. There is a lot of hardware based on it. Very expensive flight controllers and things, where you buy the hardware and flash whatever the latest or correct version is for it. Yeah, it is a big project. My experience with drones prior to this was all hobby stuff, and they used much simpler flight controllers and things. Although you can use it for hobbies, and I think a lot of people do now.

EW (45:37):

But it depends on how much you want to take care of it.

CW (45:40):

Yeah. And it depends on if you are buying an off-the-shelf thing that comes mostly preconfigured, it is probably not a big deal. That is probably quite easy. If you are building your own vehicle from scratch, then I think it gets tricky, because you are going to have to tune stuff for the motors and things like that. The one really painful thing <laugh> was the calibration <laugh> of the IMU and the compass.

EW (46:09):

Well that was only because the unit was heavy.

CW (46:12):

Right. But, so, one of the things you have to do when you are first setting up your vehicle, is you have to calibrate the IMU so it knows its accelerometer nonsense, and the compass for the magnetometer. Normally when you do this, you have to flip the device that you are using in all axes, or put it in a known orientations, which is easy to do when it is your cell phone.

(46:37):

It is less easy to do when it is a 20 pound, five by five foot hexacopter with a payload attached <laugh>. And you have to hold it upside down against the ceiling for 30 seconds. <laugh> Or, with the compass, flip it in all axes for like five minutes, while a little progress bar goes by on the- Anyway, it was pretty funny, because the procedures does not change. I do not know how you do it on an actually very large drone. How do you calibrate a fixed-wing thing that is actually quite big? Nobody is going to be picking that up and flipping it around.

EW (47:22):

You would have to calibrate the sub-assembly, and then put the assembly in with a certain amount of tolerances. And then it would probably learn the errors through a camera.

CW (47:38):

Yeah.

EW (47:40):

It was funny, when I was working with him to calibrate the IMU, the instructions were really good. I know how to calibrate an IMU, because in 2000 I worked on IMUs a lot. I knew what the process was for both calibrating the IMU and the magnetometer. And I was happy to see that the IMU had a really good calibration process. It told you what to do, told you if you were doing it right, told you when to go on. It was very nice.

(48:11):

The magnetometer did not give good instructions. I had wandered off when he was calibrating the magnetometer, and all I hear a few minutes later is it will not go past 70% <laugh>. And you were having such a hard time. I came over and I helped, because I knew what was happening. But I do not know how any anybody else would have gotten anything else out of that.

CW (48:44):

Yeah, in a different time I will be much more excited about the drone stuff.

EW (48:51):

I know! It is really one of those things that, a few years ago this drone stuff would have been very exciting, but now it is just more tech.

CW (49:00):

Anyhow.

EW (49:00):

But that is why you are getting a break.

CW (49:02):

Fingers crossed.

EW (49:04):

Well, do you have anything else you want to talk about?

CW (49:06):

No, let me ask ChatGPT if it has anything it wants to talk about. Oh, the perfect PB&J recipe.

EW (49:15):

Mm-hmm <affirmative>?

CW (49:17):

Do you want to hear the ingredients for the world's best PB&J sandwich?

EW (49:20):

Does it include Jif?

CW (49:21):

Two slices of bread, two to three tablespoons of peanut butter, and one to two tablespoons of jam or jelly. World's best PB&J sandwich.

EW (49:31):

No apples, no bananas, no honey, no interesting breads. No frufru peanut butter. No fresh from the strawberries jam. That is just sad. Not even any chocolate chips.

CW (49:49):

I have never in my life had chocolate chips on a peanut butter and jelly sandwich.

EW (49:52):

But now that I have said, it does not sound bad, does it?

CW (49:55):

I do not know. Because sometimes when you are biting into something where you are not expecting chocolate chips, they are a bit surprising. If they are not melted, like if they are hard.

EW (50:03):

Well that is the thing, is that I have discovered with my peanut butter and jelly sandwiches, that I toast the bread, and then I put the peanut butter on, and then I put it back in the toaster which is a oven. Anyway, the peanut butter remains horizontal, not vertical. And then I put jelly on, jam, usually strawberry. I put that back into the toaster until it is warm and almost pie filling like. Then I bet if you put chocolate chips between those when they are warm, that would be fantastic. I am hungry.

CW (50:41):

I think it is making pie at this point.

EW (50:43):

<laugh>. Yeah, it is pretty much just pie at this point.

CW (50:47):

All right. Yes. Well, we have to release this today, so we should probably wrap it up.

EW (50:52):

All right. I will not take very long with Pooh. Thank you for co-hosting with me. I would not even bother to thank ChatGPT. I do not know what it will say, but I am pretty sure it will just say, "I am an AI. Do not thank me." Or some nonsense.

CW (51:07):

It says it is an AI language model. Even that is a lie.

EW (51:12):

Thank you for listening. If you would like to contact us hit show@embedded.fm. You can contact us for whatever reason. But if you do want to talk about Qt for Linux contracts, be sure to put that high in list, so that I recognize it. If you are there and you want to push Newsletter or Patreon or whatever, please do. And now some Winnie the Pooh.

(51:43):

[Winnie the Pooh excerpt.]

CW (53:16):

I have some advice for Piglet that just came in. In response to "Help, help a horrible Heffalump" and that is all. Do not worry. Stay calm. Remember, heffalumps are imaginary creatures from the Winnie the Pooh stories, so you are safe. If you are feeling scared or anxious, take a deep breath and try to focus on something calming. You can also try some relaxation techniques such as meditation, progressive muscle relaxation, or deep breathing exercises.

(53:39):

If you want to talk more about your fears or anxieties, do not hesitate to reach out to a trusted friend or family member. Or a bear, I added that. Or a mental health professional, if you feel you need more support.

EW (53:50):

Or ChatGPT, if you do not need more support.

CW (53:53):

Even if heffalumps were real, there are always ways to stay safe and deal with difficult situations. Stay calm and take care of yourself.

EW (54:02):

What a dweeb.