449: Soldering the Ukulele

Transcript from 449: Soldering the Ukulele with Chris White and Elecia White.

EW (00:00:06):

Hello and welcome to Embedded. I am Elecia White, here with Christopher White. This week we are going to talk about all the things we talk about. Are you ready, Christopher?

CW (00:00:18):

I am ready to talk about all the things.

EW (00:00:22):

Are you actually you? Or are you-

CW (00:00:24):

No, I am me.

EW (00:00:25):

A chat robot?

CW (00:00:26):

I am not an electric ouija board. No.

EW (00:00:29):

Where do you want to get started?

CW (00:00:31):

Well, maybe we should start with the things you have been up to.

EW (00:00:36):

Announcements?

CW (00:00:36):

Announcements, and some things you have done, and things that are coming up that you are going to do. Just go through all the things that you are going to do, from now into perpetuity.

EW (00:00:46):

I only have one upcoming engagement, and that is with the Memfault Interrupt folks. We are doing a panel about "From Concept to Launch: What It Takes to Build and Ship a New Device." Basically, it is all the software and firmware you have to write, that is not the software and firmware you have to ship.

CW (00:01:11):

All the software and firmware you have to write, that is not the software and firmware you want to write?

EW (00:01:15):

Exactly. That will be June 1st. It will be live. There is a sign-up, and then I think they start sending you their newsletter, which is easy to get off, but it is also kind of cool, so maybe. I will be on that panel, I think with Tyler Hoffman, and definitely with Phillip Johnston.

CW (00:01:35):

Cool. You looking forward to that?

EW (00:01:37):

I think so. I have been checking things into a file to talk about. My perspective was immediately very different from theirs. They were more focused on the- I mean, Memfault does the monitoring software.

CW (00:01:58):

Yeah.

EW (00:01:58):

And my response was, "Oh, you mean the manufacturing and production software?"

CW (00:02:03):

 <laugh>

EW (00:02:03):

And so it was just such a different conversation. We passed like ships in the night, until we realized that, "Oh, yeah. It is all one conversation." I also recently did a solder sesh with Carrie Sundra of Alpenglow, where she asked me questions like, "How did you get into STEM? And I answered things like, "I do not know."

CW (00:02:27):

Hmm. Scintillating <laugh>. Exactly.

EW (00:02:31):

But it does include my supervillain origin story.

CW (00:02:35):

I thought it was superhero origin story.

EW (00:02:37):

Well, when it is Exorcist Barbie, I am pretty sure that is a villain story.

CW (00:02:41):

Hmm.

EW (00:02:41):

So that was kind of, yeah. And we did a little bit of origami, and we just chatted, and I showed off some of my toys. I mean, actual LeapFrog toys. So that was fun. There is YouTube evidence of such a thing. There was one thing that I announced on there-

CW (00:03:02):

It was long, right? It was a couple hours, right. So it was a longish-

EW (00:03:06):

It was at least 90 minutes.

CW (00:03:08):

A longish video podcast. So if you have ever wanted to see...

EW (00:03:11):

They do all of the audio as a podcast, even though it is a video podcast. And then on YouTube there are highlights, which are like ten minutes long. And I do not know if they kept the highlight where I told the secret, that I am about to tell here.

CW (00:03:32):

You are giving up on computers forever.

EW (00:03:35):

No, that is your secret.

CW (00:03:37):

Not a secret.

EW (00:03:39):

So I have started a second edition of my book, "Making Embedded Systems."

CW (00:03:45):

Yay.

EW (00:03:46):

I have an O'Reilly editor. I am up to chapter five of ten. It should be on the O'Reilly Learning System this month, May.

CW (00:03:55):

In early access.

EW (00:03:55):

In early access.

CW (00:03:57):

<laugh> You are not finishing the second edition this month.

EW (00:03:59):

<laugh> No, no. And you will get to see the messy, terrible drawings before the artist gets a chance at them. So that might be a reason to look in the early access. I am pretty excited about it. It is going along. Sometimes it is, "Oh my goodness, how did I write it this way and not realize that was terrible?"

CW (00:04:22):

So, tell me a little bit about what doing a second edition means, because I am not sure- When I buy a second edition in a book, I do not know what I am looking for necessarily. And I am not quite sure what has changed sometimes. It is not just you going through and fixing typos, and changing all the references to PICs to STM32.

EW (00:04:43):

<laugh> No. Although I did change from NXP LPC processors to ST processors, but no. I mean, yes, you do go through and fix all the errata, and all the typos, and all the things you wish you had fixed. But teaching Classpert, I came up with things that I wish I had put in the book.

CW (00:05:03):

Okay.

EW (00:05:03):

Some of it was just a different way of looking at some piece, or a diagram that I liked that I developed for class that I had not done for the book. But some of it was things that I did not know then. There is the chapter about- Well, there is the introduction chapter. It is like, "Hello, welcome to Embedded Systems. They are not as easy as you think. By the way, you need cross compilers. Cross compilers are hard." And stuff like that.

CW (00:05:38):

Mm-hmm. <affirmative>

EW (00:05:39):

And then I also- The main question I get from so many people is, "How do I take my Arduino project and ship it?" So I added that to the introduction. It is only like a page and a half of, "Here is what you do beyond this simple Arduino, and here is why that might not work for you. And by the way, go read Alan Cohen's book."

CW (00:06:08):

So, are you adding a lot of stuff?

EW (00:06:14):

Some chapters get a lot more than others.

CW (00:06:16):

Is there anything that you are adding that is- So, stuff you wished you would put in.

EW (00:06:21):

Mm-hmm. <affirmative>

CW (00:06:22):

But is there anything you are adding that is like, "Oh, this was 12 years ago, and now this is new and different and this is updated?"

EW (00:06:31):

Oh, yeah, of course. So chapter five, which is all about state machines and how the system flows, talked about interrupts, talked about state machines, talked a little bit about RTOSs. But he never really said how to set up a main loop. And that was one thing we did in Classpert, where it was like, "Okay, well here is the polling version, here is the interrupt version, here is the event driven version, and here is Miro Samek's Active Objects."

(00:07:02):

Because that is just something that when you get a vendor codebase, that is so common. The first time you see it, it is just mind-bending, because it has got inversion of control, which is all softwarey. It is really important, but it is also hard to break down. And if you go look at active objects, one makes sense, like, "Okay, I understand the message pump, but how does this make a system?"

CW (00:07:29):

Mm-hmm.

EW (00:07:33):

I had a lot of difficulty doing the diagrams for that chapter, because everybody wanted me to do the classical message pump task thing. But what I really wanted to show is, "Okay, you have three of these, how do they work together?" And you have to-

CW (00:07:49):

Because you might have three independent parts of the system.

EW (00:07:52):

Tasks. Yeah.

CW (00:07:53):

Tasks or sensors or things being fed. Yeah.

EW (00:07:57):

So that is new. And then, chapter six is where I am now. So we should not talk about that, because it is in a state of, I have taken it all apart, all the pieces are all around me. I did not take a video as I took it apart. So now I do not know how it goes back together.

CW (00:08:14):

So you just have a Scrabble board on the floor with all the letters?

EW (00:08:16):

Basically, yes, I have a pile of Scrabble letters, and I am not sure how to put them back together. But the next chapter, chapter seven, which used to be just updating code, which is important. At the time, I remember that was new.

CW (00:08:30):

But now it has changed a lot.

EW (00:08:32):

But now it has changed so much. So some of the things that I am doing for the panel for Memfault, one of the reasons I am starting early to put things in a folder is like, "Okay, these are the things I also want to talk about for a chapter about cloud computing and IoT and devices and distributed systems." I do not know what I am going to call it. I do not want to call it "IoT."

CW (00:08:56):

Things of the internet!

EW (00:09:01):

<laugh> "Distributed systems" does not really make anybody very excited to read that chapter.

CW (00:09:07):

No.

EW (00:09:08):

Yeah. So I do not have a name. Most of the titles are a verb, something. So like, "Updating the code" is the name of that chapter, but that is...

CW (00:09:16):

Internetting your thing? No.

EW (00:09:21):

<laugh> Clouding your thing? Nope.

CW (00:09:24):

<laugh> Clouding something would be good.

EW (00:09:27):

Contributing to the cloud?

CW (00:09:29):

<laugh>

EW (00:09:30):

I do not know.

CW (00:09:30):

Is there anything you are removing from the book <laugh>?

EW (00:09:35):

Well...

CW (00:09:36):

After this conversation, your acknowledgement to me.

EW (00:09:39):

No <laugh>.

CW (00:09:40):

<laugh>

EW (00:09:40):

Although, rereading that it was, it was pretty cute.

CW (00:09:43):

Mhm.

EW (00:09:46):

So I am in the peripherals chapter, and there is a really big section about RS-232 and null modems-

CW (00:09:54):

<laugh>

EW (00:09:54):

And DB9s. So I think maybe-

CW (00:09:59):

Even the reference to cross compilers that you just mentioned, is like, "Ah, nobody calls them that anymore." <laugh> When was the last time you said "cross compiler" for anything?

EW (00:10:06):

Well, part of the book is that it is for software engineers get into hardware.

CW (00:10:09):

I know.

EW (00:10:10):

And they do not really know what that means.

CW (00:10:11):

Yeah, I know. It is absolutely the right term, but it is something I have not heard anybody say in a long time, because now, since everybody does it, it is a compiler.

EW (00:10:23):

Sure. I guess so. But-

CW (00:10:24):

No, it is not an important point.

EW (00:10:28):

So yeah, I have lots of things to add. I have- I think the map from my maps talk, the pretty map, is not going to make it in the book.

CW (00:10:38):

Understandable.

EW (00:10:38):

It does not look good without color.

CW (00:10:40):

No. You need a three page fold out color insert.

EW (00:10:44):

<laugh> The centerfold will be the memory map.

CW (00:10:46):

O'Reilly does those, right?

EW (00:10:49):

<laugh> So yeah, lots of little things. Updating the computer science terms for the hardware engineers who read the book, and want to know more about software, and why we talk about modularity so much.

CW (00:11:03):

So are you enjoying the process? How long have you been doing it? It is a couple months? A month? Couple months.

EW (00:11:11):

We signed the contract in March.

CW (00:11:14):

Couple months.

EW (00:11:15):

I think. Maybe late March. I do not remember.

CW (00:11:17):

Okay.

EW (00:11:17):

But yeah, I have been doing it for a couple months, and I have been light on client work, so I have really-

CW (00:11:24):

Briefly.

EW (00:11:24):

I have really been doing it. I say that. No, I totally worked on client work this morning. So I got way ahead of my editor, and that has caused problems, but it is fine. It is kind of fun. It is fun reading the book, because I truly do not remember writing it. It is hilarious when I look at it and say, "That is really good advice. Why do I not do that?"

(00:11:52):

And you have caught me laughing at my own jokes, which is slightly embarrassing, but I do not remember them. In that whole section about the triceratops, that really was awesome <laugh>. I do not know what I was channeling that week, but wow! Or that month. So that is that.

(00:12:11):

For announcements, to continue, Classpert is going to do the self-paced version of the class.

CW (00:12:22):

You can paste yourself.

EW (00:12:24):

Just paste yourself, cut and paste yourself everywhere. So I have to finish a couple things for that, but that is going along. So should you want to listen to me, or want to read what I have written...

CW (00:12:39):

We have multiple avenues <laugh>.

EW (00:12:41):

Listen to me blather on a panel. You can have all the me you want to have.

CW (00:12:45):

Oh. Since people are already listening to us, I think we have selected the audience appropriately. <laugh>

EW (00:12:53):

Let us see. I got the Flexar board from Carl, but I have not tried it yet.

CW (00:12:57):

Oh, what are you going to do with it?

EW (00:13:00):

Well, since the video was origami, I figured I would start there.

CW (00:13:03):

Yeah. But I mean, specifically, what is your plan?

EW (00:13:06):

Carrie wanted to, when we did the solder session, she wanted to do butterflies. So I am a little tempted to make a flapping butterfly, just as the first thing.

CW (00:13:15):

I want to whole mobubil, mobiel? Mobile.

EW (00:13:19):

I know that word.

CW (00:13:20):

Anyway, I want to whole mobile of flapping butterflies. So it slowly rotates, but they are also flapping. So, do them.

EW (00:13:29):

I mean, I have made my first mobile only a couple of weeks ago. I am not sure we can start-

CW (00:13:35):

Hey, if you do not set high goals for yourself, you will not be motivated to achieve them, or something.

EW (00:13:42):

Yeah, motivation has been the problem the whole time.

CW (00:13:45):

The problem the whole time.

EW (00:13:47):

Well, for the last- So, but you have been off work for...?

CW (00:13:54):

<laugh> A few weeks.

EW (00:13:55):

Since the beginning of April.

CW (00:13:56):

Eh, there was a slow drop off in April, so I think mid-April was where I was kind of done. Yeah.

EW (00:14:04):

Yeah, but I saw what you billed for April.

CW (00:14:06):

Wow.

EW (00:14:07):

<laugh> I know there were discussions and stuff.

CW (00:14:12):

Anyway, it takes some time to get fully in the motive. And there were other things going on, if you recall. Yeah, I have been off. What about it? <laugh>

EW (00:14:22):

What is it like living the life of leisure?

CW (00:14:26):

I am really bad at it.

EW (00:14:28):

Are you?

CW (00:14:28):

Yeah, I am really bad at it.

EW (00:14:29):

That comes as not a shock to me.

CW (00:14:30):

Yeah. I am having some trouble. The trouble is, I have a lot of things I want to do. I have a lot of music stuff I am working on. I have a lot of things in the queue, that I poke at. I have some music classes I am doing that are self-paced.

(00:14:44):

I went through yesterday or the day before, all the songs I have in progress. And I have like a whole EP of my own songs I could make. I have three or four or five, maybe half the next 12AX7 album written, that I could do. I have probably like a dozen songs. It is hard to pick one and focus on it. And-

EW (00:15:06):

But you did do some studio work for other people, and finished that.

CW (00:15:10):

I have done some session work for some other people, and that is out and I am done with it. So that is true. You know, I forget about stuff I do too. So it is like, "Oh yeah. I spent many, many hours doing that, but that is done now, so it no longer exists in my brain." So I am still hard at myself even if I accomplished things, because the accomplishments dissipate like a-

EW (00:15:33):

Yeah. Once you are done, it does not-

CW (00:15:34):

Little cloud.

EW (00:15:35):

Once you are done, it was easy. It is over.

CW (00:15:39):

Trying to relax, while I am trying to do classes or educate myself or do hard things, it is hard. So, yeah <laugh>.

EW (00:15:50):

When I took some time off, I had to do the relaxation first.

CW (00:15:53):

Yeah.

EW (00:15:53):

And then once I was relaxed enough, the hard stuff started to sound like fun.

CW (00:15:58):

Mm. Maybe, I mean, these are things that should be fun though. Like the ukulele project I am still working on. That should be fun. It is just woodworking. There is nothing hard about that. It is a mindful activity.

EW (00:16:12):

Except that it has been cold in the garage. And you have had to solder- Or you have had to sand a bunch.

CW (00:16:16):

I should not be soldering ukulele.

EW (00:16:17):

No, no. But there was some tricky putting it together, and then having to sand away the edges without hurting anything. Yes, it should be fun, but most fun things have an element of- They have to be fun enough to get over the hurdle of...

CW (00:16:40):

I guess. I do not know. It is just I find myself wasting whole mornings, and I am not doing stuff that is relaxing necessarily.

EW (00:16:49):

No, not when you are playing on the internet.

CW (00:16:52):

Playing. Yeah. I think there is a longer stretch of <laugh>. Maybe I need to disconnect from the internet or something for longer periods. But my dopamine system is not calibrated properly.

EW (00:17:07):

But you are going to get some from the ukulele soon, because it is starting to look like a ukulele.

CW (00:17:12):

<laugh> Yeah. Sanding is hard <laugh>. So the step I am on, the body is put together and I had some problems with that. But the body is basically some curved wood sides that are very thin, in the outline shape of the instrument body. And then it has a flat top and a flat bottom.

(00:17:32):

You have to glue all that stuff together, and gluing it together is difficult for a lot of reasons. Clamping is difficult. You have to apply a lot of force to glue the top and the sides together. And I screwed up and I cracked the top when I was doing that, so that was frustrating.

EW (00:17:53):

But it is little tiny crack.

CW (00:17:53):

No, it is about five inches.

EW (00:17:55):

Well, yes, but the other direction. It is not open.

CW (00:17:59):

Well, no, it is not a hole. It is a crack.

EW (00:18:02):

Okay. Yeah. Yeah.

CW (00:18:03):

<laugh> But it is still significant. So I had to figure out how to fix that. I am not sure I did. But then the top and the bottom have a little bit of an overhang. You do not want them to be exactly the right size, because you will never get it glued together even.

EW (00:18:18):

Mm-hmm. <affirmative>

CW (00:18:19):

So they have overhang, which has to be dealt with. And that is just a very slow process, because if you screw it up, you will dig into the sides with whatever tool you are using, whether you are using a chisel or a knife to carve that away. Want to get that down low enough that I can now sand it flush. I think I have, but sanding takes a really long time. I was just going slow and I am trying to go slow, partially because I do not want to screw it up and go too far. So anyway, it is not that exciting.

(00:18:49):

That sort of thing should be the perfect relaxation exercise, because I can put a podcast on or something, or watch a old episode of Star Trek, with a sanding block. But I am not bringing myself to do that either <laugh>.

EW (00:19:02):

You spent like two hours on that, day before yesterday.

CW (00:19:05):

See, I just forget these things. Anyway, yes, I am a month-ish into some time off, and I am still mad at myself.

EW (00:19:17):

I think I will take away the internet.

CW (00:19:18):

Zelda comes out tomorrow, so then I can just excuse away the rest of my time off by saying I was playing Zelda.

EW (00:19:25):

<laugh> That is probably actually good. Let us see. Oh, I did want to mention that I was doing better with the whole burnout, and then I started to get worse and very droopy. Christopher finally said, "You know, you are really droopy. Maybe you should talk to your doctor." And it turns out there are vitamins and minerals which you actually need to function.

CW (00:19:50):

Huh! What are some of them?

EW (00:19:54):

Well, there is salt.

CW (00:19:57):

Salt, <laugh> salt. Were you low on salt?

EW (00:20:00):

No. I was low on iron.

CW (00:20:03):

You were under seasoned.

EW (00:20:05):

Makes sense given my diet and gender.

CW (00:20:11):

Low on iron.

EW (00:20:12):

Low on iron.

CW (00:20:12):

Okay.

EW (00:20:12):

But I mean, there is vitamin D and potassium, magnesium, all these things, Bs and stuff.

CW (00:20:18):

But those were all fine. It is just that-

EW (00:20:19):

That for me, yes. But I am saying that at some point, you really should see a doctor and say, "Are there chemicals I am missing?"

CW (00:20:32):

Yes, you are very low on plutonium.

EW (00:20:35):

Motivation? No, plutonium?

CW (00:20:39):

Zircon. <laugh>

EW (00:20:42):

I do not think so.

CW (00:20:43):

Do they have a test for those? I mean, you do need some weird trace elements. Do they have tests for like zircon?

EW (00:20:50):

Or iodine.

CW (00:20:51):

Well, iodine, yes. That is fun.

EW (00:20:54):

I mean, it is really important. But now that we are all eating gourmet salts, we do not get as much iodine as we used to.

CW (00:21:01):

I do not think we all are.

EW (00:21:02):

Oh, come on. I did a taste test between the blue box with the yellow person.

CW (00:21:10):

The umbrella girl.

EW (00:21:11):

The umbrella one.

CW (00:21:11):

Yeah. Morton Salt.

EW (00:21:12):

Versus like different-

CW (00:21:14):

This podcast brought to you by Morton Salt.

EW (00:21:16):

Different salts. And wow, that salt tastes terrible.

CW (00:21:22):

So you prefer the pink dirt salt.

EW (00:21:24):

Do you want to share the information you have about the pink dirt?

CW (00:21:27):

Himalayan salt is just dirty salt from some- It is not from Himalayas. It is like some scam that somebody came up with to sell-

EW (00:21:36):

It is not pure enough to sell as salt.

CW (00:21:38):

To sell garbage salt. Yeah. But it has probably got a lot of iron in it.

EW (00:21:42):

<laugh> With the pink there. Yeah, maybe.

CW (00:21:44):

<laugh>

EW (00:21:48):

Okay, let us see. You picked up some questions from Slack. Do you want to...

CW (00:21:52):

Sure. There are a lot of them. Some of them are very broad and could be topics of whole shows.

EW (00:21:58):

What exactly is GDB? Yeah, maybe that is a whole show.

CW (00:22:03):

Let me start with an easy one from, and I apologize if I mispronounce your name, I think it is Guyrandy Jean-Gilles. "I recall an episode where you talked about installing an antenna to talk to your dad. How did that go/is going?"

(00:22:14):

See previous section about how my projects are going. I have purchased all the elements for this system, and they have arrived. I have a receiver that I need to solder together, which I just remembered now. I have an antenna and stuff. I still need to learn enough Morse code to actually do this, which I am also not doing. See, this is the thing-

EW (00:22:39):

But you have got up to like five letters.

CW (00:22:41):

I am at five letters. There are only like 40 more to go. So I am doing good. At this rate, I will be done in 2063.

EW (00:22:48):

Why do you think there are 35, 45 letters? 35 letters.

CW (00:22:52):

There are 26 letters, there are ten numbers, and there are a whole bunch of other little symbols and garbage. Then short little things. So it is around 40.

EW (00:23:06):

Okay.

CW (00:23:07):

Anyway, there are a whole bunch of little ten minute a day tasks I should be doing. Like maybe three of them, which if you do the math on that, that is 30 whole minutes. And I am not doing them. I do not understand why I cannot motivate myself to do something for five minutes, ten minutes. Anyway, that is not going. Thank you for reminding me. And I will...

EW (00:23:29):

Maybe he will start soldering the kit together.

CW (00:23:31):

Maybe I will start soldering the kit together.

EW (00:23:32):

The weather is nice, so-

CW (00:23:33):

Maybe if the kit is done, I will be more motivated to learn Morse code.

EW (00:23:37):

You could make a little device that would take typing and make it into Morse code. Sorry.

CW (00:23:44):

Yeah. And I could just call people on the phone. That is not the point.

EW (00:23:49):

I understand. I do understand.

CW (00:23:51):

I am not sure that you do.

EW (00:23:52):

I am just trying to, you know, where the blockers are.

CW (00:23:55):

I do not think that is how you are supposed to do code. Yes, I could plug it into a computer, but what?

EW (00:24:01):

No, you would not plug it into a computer.

CW (00:24:04):

Yeah?

EW (00:24:04):

You would like use the Flexar-

CW (00:24:07):

Uh-huh.

EW (00:24:07):

Flappy paddle to hit it, and-

CW (00:24:09):

And then how would I understand what people were saying to me?

EW (00:24:13):

I do not know. That, I have no idea.

CW (00:24:16):

Next question, in descending order of complexity, let us see, from Steve. Steve G?

EW (00:24:28):

This is why I only say their first names. <laugh>

CW (00:24:29):

From Steve. Steve Gigl, I think. Yeah, let us go with that.

EW (00:24:34):

I think it is "giggle."

CW (00:24:35):

I doubt it is. Steve G I G L. I apologize. "Tips on getting back up to speed with development systems, IDE, compiler, debugger, you have not worked with in a while."

EW (00:24:45):

Step one, install. And if it is CubeMX-

CW (00:24:48):

Uninstall.

EW (00:24:48):

Go have lunch, because it is- Yeah. Anyway.

CW (00:24:54):

And then there is a parenthetical addition to this question, "Sort of a separate topic, things you have never worked with." I mean the short answer is they are all kind of the same. Most IDEs anyway are organized in a similar way, where you have got the editor and then you have got various panes. They are all single window kind of things, and you have got a debug pane, or maybe a view that switches between panes. And you got compile and run and all that stuff. They are not that different.

(00:25:29):

I think debuggers are where things get real different, but that is mostly a front end kind of thing. Like the IAR front end, the debugger, might look different than you are used to from GEB. But even then GDB front ends tend to graphicalize things when you are sitting in an IDE. I do not know. This is not something I think about a lot, because once I dive into an IDE, I kind of remap what functions are where, and they are all sort of the same functions. Do you have a better?

EW (00:26:06):

No, I agree with you.

CW (00:26:08):

I mean VS Code actually is weird, compared to historical IDEs. That one took some more getting used to, because it is more like Emacs in a way. In the way it looks and behaves, in the way it is customizable. Versus something like IAR, where I think of IAR as the canonical graphical IDE. Same as every other one that has been around since 1990.

EW (00:26:30):

I guess I agree with you. I am thinking of the ones that I have used in the last 18 months. There are two areas of difference. The first is configuration and setup.

CW (00:26:44):

Yeah.

EW (00:26:45):

Not just the configuration you can do with VS Code, which is extensive. But how do you set up a board? The difference between an IR compiler setting up an ST board, versus a CubeMX, versus Keil. Those are all actually-

CW (00:27:02):

Versus doing it from scratch.

EW (00:27:07):

Versus VS Code, which is totally the hardest one on that.

CW (00:27:10):

But getting easier. But, yeah.

EW (00:27:13):

And so that part is difficult, and I do not think there is an easy way to translate between them.

CW (00:27:20):

No, I mean the Cypress thing was similar to Cube in some ways, but also was very idiosyncratic, and different. Yeah, in terms of jumping back into ones you had used before, and getting up to speed...

EW (00:27:38):

It is a matter of-

CW (00:27:38):

Like anything else.

EW (00:27:39):

Time in chair. There is no trick. I mean, if you are using one that has a lot of key commands, printing out a cheat sheet is always helpful. Printing out a GDB cheat sheet, if you need one, because you have been using graphical.

CW (00:27:55):

If you are motivated, reconfiguring all the key commands, if you can, to be a set that you always use. And sometimes that is-

EW (00:28:00):

I would never do that.

CW (00:28:01):

Sometimes you can do that.

EW (00:28:02):

That means that your co-workers cannot come up to your desk and do anything.

CW (00:28:05):

Exactly.

EW (00:28:07):

Yeah. Exactly.

CW (00:28:08):

First of all, if co-workers are coming up to my desk, now, I am calling the police.

EW (00:28:12):

<laugh>

CW (00:28:12):

Because they are trespassing.

EW (00:28:14):

<laugh>. Ah, yeah. So the other big thing is the debugging. That, I think, it breaks into a GDB style that is less graphical, and an Ozone style that is entirely graphical. For me that is, when I have to do GDB I usually have a worksheet up. And I have the weird habit of typing "GDB worksheet" into Google and then searching. And then choosing a different one each time, so that I can find the commands that I would not otherwise find. That is my strategy. It is not a great one.

CW (00:29:03):

There are some things with compilers occasionally. Once you get down to that level, and you are tweaking the build system, or flags and stuff. Like IRs had limits on...

EW (00:29:14):

File pathname?

CW (00:29:14):

Multiprocessor stuff.

EW (00:29:18):

Oh.

CW (00:29:18):

Yeah. And Clang is a little different than- But really, once you are at that level, it is- I try not to have to remember things that I do not need to remember. Like I do not have a bunch of GDB flags in my head that I want on a build process. And the difference between those, and the same kind of things on Clang. Just look it up. The short answer for me is, "Okay, look stuff up when I get stuck." Maybe that is a flip answer, but...

EW (00:29:55):

I will say that in the last few years, instead of always using the client interface, I am doing more programming in VS Code, and then swapping over to compile.

CW (00:30:08):

Well, that is just because the editor is better <laugh>.

EW (00:30:09):

Yeah. I think that taking VS Code away from me now would be very hard. Because I am just so used to how it searches through files, and how it deals with Git, and differencing things. These are the tools I needed.

CW (00:30:25):

Just to be able to- The way it does split windows and stuff, which again is not a novel feature, but it does it in a nice way that I like and appreciate.

EW (00:30:34):

Because you can have as many as you want.

CW (00:30:35):

And remote SSH, which depending on the projects you are working on-

EW (00:30:39):

Ohh, that is the best feature.

CW (00:30:40):

Is really super important.

EW (00:30:42):

Okay, Steve, I do not think we answered your question.

CW (00:30:44):

Nope. Sorry.

EW (00:30:44):

Good luck. What is next?

CW (00:30:46):

I will let you choose the next one.

EW (00:30:48):

I am just going to go down to the next one on the list, which is from Ben. "When should you put the interface for a project directly on the device, and when would it make more sense to support a remote control or control by phone?"

CW (00:31:02):

Hmm. I asked follow up on this, whether he was talking about personal or product. Mostly personal, but I think, for product is also a question. For me, from a design point of view, it depends on what the device does <laugh>. Right?

EW (00:31:23):

Let us talk about lights, because this is something that we have in the house that do both.

CW (00:31:28):

Sure. Okay.

EW (00:31:29):

We have lights that you control with the phone, and you can change them in different colors and turn them on and off. We have light switches, which been around for a long time. We also, for the outdoor lights, we have the little remote that you go and you point the complicated remote-

CW (00:31:47):

An actual IR remote for the-

EW (00:31:49):

At each of the lights to get them to do whatever it is you want.

CW (00:31:52):

But that is just to change their color and stuff. Not to turn them on and off. But yes, that is an IR remote.

EW (00:31:59):

So the light switch is the direct interaction. The phone is a remote, and the remote is a remote.

CW (00:32:13):

I would even argue that a light switches a remote.

EW (00:32:16):

Okay. Unscrewing the light bulb? Is that where we are going?

CW (00:32:18):

<laugh> Just in terms of geographical proximity. You are not going up to the light and tapping on it <laugh>.

EW (00:32:26):

To some extent using the little handheld remote to change the colors is more directly interfacing.

CW (00:32:34):

<laugh> Yes. Continue.

EW (00:32:35):

We have no LEDs, no lights that have embedded display controllers.

CW (00:32:40):

That is correct <laugh>.

EW (00:32:41):

Because why? And yet I can totally think of reasons why.

CW (00:32:47):

No, you would not. Staring into a bright bulb trying to look at the display. Okay. Where are you headed with this analogy <laugh>?

EW (00:32:59):

We have something that is super common, ubiquitous, everybody has them, and we have all of the interfaces.

CW (00:33:06):

Yeah. So that is why he is saying, "When should you use one versus the other?"

EW (00:33:13):

We have the different interfaces for very good reason. We have some that are very simple to use, like light switches. We have some that are very complicated to use, and can be used to do programmatic things. And those are the remote things. And we have the outdoor lights with the remote, that have a special feature, that if you tried to put it on the device it would be too complicated. So you used this complicated thing to go from device to device.

CW (00:33:44):

I think that is a key point. So thinking about your device and complexity, it used to be there was no choice. If you wanted to have a device that you interacted with or customized in some way, you would have to put an interface of some kind. Even if it was a knob, set of rotary switches, or depending on the complexity, a display with a menuing system and buttons. And that is all hard to do on an embedded device. It is not hard, but it is a lot of work.

EW (00:34:15):

And cost, if you are talking about production.

CW (00:34:18):

Yeah. And now you can outsource, for lack of me thinking of a better word, a lot of that complexity and display, to something that is not on your device, your phone, at the cost of implementing a communication protocol like Bluetooth. So I actually have- The should is a mix of what makes for a good interface, and also what makes for difficult development. An example, I have a little guitar practice amp I just got.

EW (00:34:51):

Mhm. Yes.

CW (00:34:52):

And if you think of guitar amps, they usually have a lot of knobs and controls and stuff. But this is very small. It is about, I do not know...

EW (00:35:01):

Smaller than a bread box.

CW (00:35:02):

Twice the volume of- It is like half the size of a Kleenex box, maybe a little bit bigger. So it is really small, and it is great for practicing. It has got a rechargeable battery, so you can just take it anywhere. But it has like three knobs. It does not have any tone knob, it does not have any base, treble, drive. It does not have any of that stuff.

(00:35:24):

It has one knob for switching between amplifier models, one knob for the volume control of your guitar sound, and one knob for the volume control of anything that is being streamed over Bluetooth, that you are listening to while you are practicing. And that is it! Those are the controls. It is very minimal from a guitar standpoint. But it has tons of controls that you can access through the phone, where it brings up this whole virtual amp with-

EW (00:35:53):

You can have as many pedals as you want.

CW (00:35:54):

Dozen pedals, all of which have virtual knobs. And an amplifier with all of the normal knobs on it, dozen knobs. So that is a case where it is form dictating your interface, because there is just not enough room on there for them to put that many knobs. Or if they did, they would be tiny little fiddly things. It would be very uncomfortable to use.

EW (00:36:13):

Little tiny buttons.

CW (00:36:15):

So I think, sometimes form will dictate whether you displace those interfaces to some remote device. As it gets easier to make smaller things, I think that just becomes a lot more of a common choice where, "Okay, I am making-" Even if you are making something like an LED display thing, say a big LED array, or a piece of wearable jewelry, you do not want an interface on those things, because that gets in the way of their form. And so we have to take function and move it somewhere else that is not on the device. Since that has become easier, I think that is just going to become more common.

EW (00:36:56):

Thinking about Fitbit and interfaces there. There were three products I am thinking about. The smartwatch, which had all the interface. The one which had a screen about the size of your finger, half the size of your finger, it depends on how big your finger is. It had one button that you toggled through things.

CW (00:37:22):

Yeah.

EW (00:37:23):

And then there was one-

CW (00:37:24):

It was mostly just display. There was nothing you could do with it, except display.

EW (00:37:28):

Right. And then there was one, I do not remember what the little tiny one was

CW (00:37:34):

That had no display, it had LEDs.

EW (00:37:36):

That had four LEDs that told you how, or five LEDs that told you how full your exercise was. But it had no other display.

CW (00:37:44):

Right. And I think it did not even have a button. Did you not tap it?

EW (00:37:46):

It did not have a button.

CW (00:37:47):

Accelerometer taps would show you the lights.

EW (00:37:51):

And some of the difference between those is cost, which is pretty obvious how the cost there will be balanced. Some of it was form, because the little tiny ones they were talking about putting into jewelry, which never happened. And I was always so sad.

CW (00:38:10):

And the watch is a watch, and you have to want a watch.

EW (00:38:13):

Right.

CW (00:38:14):

If that form is okay with you, then you get some additional interface.

EW (00:38:17):

It is the form and cost.

CW (00:38:18):

Yeah.

EW (00:38:20):

So there is that axis, and then there is the other axis of how many devices do you have? Because if you have a lot of complicated things you want to do, and you are going to have ten devices, it is simpler to have one interface. But if you have a lot of complicated things you want to do on one thing, like the synthesizers, you kind of want it to be there.

CW (00:38:44):

Okay, so that is a point that I wanted to bring up, which is direct control. When direct control is important, because it is a pain in the butt to use your phone to talk to things. I mean, it can be nice, but phones are all touchscreen. So when you put these skeuomorphic interfaces up with knobs and things, you kind of ehh, poke at them, and it is not great.

(00:39:07):

The synthesizers are good example, because when you are using a synthesizer you are often performing or recording something. And each of these knobs does something to the sound that you might want to do in real time. And so the more knobs you have-

EW (00:39:27):

The immediacy.

CW (00:39:28):

The more immediacy you have, and the more options you have, without diving into a menu three levels deep, to find, "Oh, I want to set this filter to X." Or even having a virtual control where there is a knob that is assignable. Sometimes that is a pain in the neck.

(00:39:44):

So that is the other kind of consideration, is what kind of a device is it, and is it something where you are going to be changing parameters a lot. If it is something where you are going to be changing parameters a lot, that is something you want to have as a primary direct interface if you can.

EW (00:40:02):

Okay. So cost, size, immediacy of change, the complexity of the interface, and the number of units you have.

CW (00:40:11):

How much you have to- The immediacy of change, I guess a corollary to that is how much you actually have to do with it. Is it something that you put in a corner and it monitors things, and you just go talk to it once in a while? That thing probably does not need any interface. You do not want to look at it ever. Like a thermometer or a humidity sensor, weather station. Do not want to walk up to a weather station and look at it.

EW (00:40:34):

You do though, do you not?

CW (00:40:36):

Does not have anything on it.

EW (00:40:38):

I know, but if the rain gauge had a little rain output sensor thing, that displayed what its current- I do not know.

CW (00:40:46):

Why would I want to do that?

EW (00:40:49):

So you had an excuse to go wander around in the rain?

CW (00:40:52):

Yeah, exactly <laugh>. Has enough trouble being filled with spiders.

EW (00:40:57):

Ah, let us see. Okay Ben, I hope that was an answer.

CW (00:41:00):

That is not to say that the remote stuff is easy, because if you do phone stuff, then you have got to write an app, at minimum.

EW (00:41:10):

And if you want to have it web interfaceable, if you are doing home things.

CW (00:41:16):

Well, that is another way to do it. And that is getting easier. Yeah.

EW (00:41:19):

But that is still, you have a website you have to interact with.

CW (00:41:24):

Well, CircuitPython, I showed you how easy that was.

EW (00:41:28):

That is true.

CW (00:41:28):

You do not have to write an app, I guess, if you are doing...

EW (00:41:33):

But you do have to have Wi-Fi.

CW (00:41:34):

Right.

EW (00:41:34):

Which means that it may not be easy to get to from your phone. It depends on where you are when you want to use it.

CW (00:41:44):

Yeah. Anyway. Good question.

EW (00:41:46):

If you control it remotely, how do you make it user or future proof?

CW (00:41:52):

I do not.

EW (00:41:52):

Versioning. It is very important.

CW (00:41:57):

I do not know.

EW (00:41:58):

Versioning and end of life-ing. <laugh>

CW (00:42:00):

Nothing is future proof. There is the answer <laugh>. Sorry, I am reading a lot of Kurt Vonnegut. <laugh>

EW (00:42:07):

Oh yeah. That is going to make you happy.

CW (00:42:10):

It is actually- In a twisted way, it does. We have got a few more questions here, some of which are long-ish. I think Sila, we should bank those questions for a different time, because those all go together and that would be a good whole show I think.

EW (00:42:33):

Good with the documentation one.

CW (00:42:35):

One?

EW (00:42:36):

At the end.

CW (00:42:37):

Sila Ozer says, "Documentation tips and tricks for legacy software, and how to deal with uninteresting projects." <laugh>

EW (00:42:46):

<laugh>

CW (00:42:46):

I do not know if you have been listening Sila, but I have enough trouble dealing with interesting projects! Documentation tips and tricks for legacy software. There are applications that help with that. I think?

EW (00:43:00):

ChatGPT?

CW (00:43:02):

God, no!

EW (00:43:02):

<laugh> Okay, so how to deal with uninteresting projects.

CW (00:43:13):

You are just going to skip the documentation one. Okay. How do I deal with uninteresting projects? Go for it. Tell me how to do it.

EW (00:43:18):

Okay, so there is internal motivation and external motivation. External motivation is your salary, but you forget about it, so it does not really work.

CW (00:43:27):

What about your manager, who might yell at you?

EW (00:43:29):

External motivation might be good, but the manager is going to yell at you either way. So why bother?

CW (00:43:35):

Wow. Okay.

EW (00:43:36):

I have not had a manager in a long time, but I have had some really good ones, but I have also had some that would yell at me either way. So, eh. So you have to figure out why you are doing this. Not why you are doing this for the company, but why you are willing to do this.

(00:43:54):

A good part of that is because they pay you. In which case make that more immediate, "If I work on this for six hours, I will buy myself some small thing. If I work on this for a whole week and I make visible progress, I will buy Christopher a new amp."

CW (00:44:19):

Why are you buying me things for doing your work?

EW (00:44:21):

This is way more fun to buy you things.

CW (00:44:23):

Wow, this is a good scam. How do I get this to...

EW (00:44:27):

If you are doing it to get to the next thing. If money is not your motivator, or snacks, then try to do the same thing. You are bribing yourself. You are trying to, "I am going to work on this for two hours, and then I am going to look at the new stuff. I am going to work on this for a few hours, and then I will get to look at the new stuff."

CW (00:44:52):

Yeah. I think that is key, is not trying to do it all at once too.

EW (00:44:55):

Yeah. Admit you are bored and find ways around that. I used to get new albums. That was like the best thing for documenting and stuff.

CW (00:45:09):

 <laugh> Back when albums were something people buy.

EW (00:45:10):

Back when getting a new album was exciting, and that is sad that it is not.

CW (00:45:15):

Lots of new albums.

EW (00:45:17):

Yeah. But I do not require and consume them the same way. Music is more background for me, unless I am doing something specific with it. Which is kind of sad. Let us see. There is also motivating yourself with who are you doing this for.

CW (00:45:36):

Why did the word "cheese" just pop into my head?

EW (00:45:40):

Christopher thinks you should use cheese.

CW (00:45:42):

Motivating yourself. There is also motivating yourself with cheese. I do not know why. That just popped in my head. Sorry. Continue <laugh>.

EW (00:45:49):

This is the way.

CW (00:45:52):

Mm.

EW (00:45:53):

Sorry. That was a show title. I am sorry. Okay. So who are you doing this for? There is a good argument to be made for realizing that what you are doing is helping other people, in which case do it so that it helps other people.

(00:46:10):

Like, if you are documenting something and it is boring, put yourself in the shoes of the new programmer who has to take care of this, and try to be nice to them. Not only try to make it thorough, but also understandable. Challenge yourself with making it interesting. Challenge yourself with making it educational.

CW (00:46:32):

"Gosh darn it, I know documentation is stupid and boring and everybody hates it, but I am going to do a good job. This is going to be better than anybody else's documentation, they have ever seen."

EW (00:46:42):

There is that, although do not polish the turd too much. But there is making it interesting for you, by giving you a different perspective.

CW (00:46:58):

Yeah.

EW (00:46:58):

Let us see.

CW (00:47:02):

But tactical tips and tricks. When I see "documentation tips and tricks for legacy software," what I hear is somebody is dropped into a codebase that is not well documented, and asked to document it. Or wants to document it so that they understand it better, so they can work with something they are unfamiliar with.

EW (00:47:22):

Oh, like Doxygen call trees? I love those.

CW (00:47:25):

Yeah, but assume it does not have Doxygen.

EW (00:47:28):

Well, you do not need Doxygen to do the call tree part.

CW (00:47:30):

Okay. So, that is one of the tools I am talking about. It is, starting with something that maps-

EW (00:47:35):

Oh, actual tools.

CW (00:47:35):

Starting with getting a map for the software layout. I mean, the first map for the software layout is the file system.

EW (00:47:44):

Yes.

CW (00:47:45):

And so look at that, print out the directories, and then categorize what each file is, and those will tell you hopefully what the modules of the system are. Then you can start writing a block diagram. So maybe for every .c and .h pair, you would draw a box.

EW (00:48:01):

That works. And you can go the other way with the schematic, and do it that way first, so that you know what boxes you need to fill in.

CW (00:48:08):

Assuming there is a schematic.

EW (00:48:09):

Assuming.

CW (00:48:11):

Then you can start look in those files. The .h files, again, if it is properly organized, has the APIs and the interfaces. So then you can start drawing lines between those boxes you have drawn, based on that slightly deeper information, to see how those modules connect.

(00:48:28):

Then you can go from there and drill down, and do an iterative process in each file the same way. Like, "Okay, here is the list of functions now, and how do they interact?" That is a broad breadth first kind of search thing.

EW (00:48:49):

Block first.

CW (00:48:51):

And I would not go too far on that. I would get that to a state where, "Okay, here are all the blocks and maybe some arrows." And then you want to find main.

EW (00:48:58):

That was what I was going to say. Follow the control, follow where main goes. You can do some of that by just walking through the code, which I have to say is probably the best thing you can do.

(00:49:11):

But if you can put it with a profiler of some kind, like there is already a profiler. Do not invent one for this, but if there is an easy way to profile it, where is the code spending most of the time? That is an interesting question of what is most important.

(00:49:27):

Then looking at where there can be layers. This is kind of once you have the blocks, can you separate it into hardware abstraction layer? A data layer or-

CW (00:49:47):

User interface data model.

EW (00:49:50):

Yeah. Just kind of tear it apart, because once you have that it will be simpler. And I like diagrams a lot, because it does not feel as much like documentation. It feels like doodling, which I admit I do when I am reading boring things anyway.

CW (00:50:05):

Well, a visual representation is a lot better than text for a lot of technical things.

EW (00:50:10):

Especially when you have already got 10,000 lines of code.

CW (00:50:14):

The other option, probably later, is to step through certain sections with a debugger.

EW (00:50:19):

When I am bored of just trying to read the code. The debugger step is really good. Because it feels different than just trying to read it. It feels like you are being led along a path.

(00:50:34):

I guess that goes back to, as you are trying to figure out motivations, switch what you are doing relatively often, so you do not get too deep into, "Okay, this is the 57th file I have opened today, and they all have 10,000 lines in them."

CW (00:50:51):

That is actually really good advice. And it is advice I just learned and had not really thought about, from a class I am taking in guitar. That is because that is all I do. It was about how to practice and stuff. The guy said, "Do not spend more than five minutes on anything." But it was not like-

EW (00:51:07):

Do not go that far <laugh>.

CW (00:51:09):

No, it is exactly what you are saying. It was not- And this is different. For music it is obviously slightly different. But it was more of a mix it up some. Do not sit there playing a scale for 30 minutes or 45 minutes, do five minutes of one thing, and then five minutes of another, or ten minutes, whatever.

(00:51:29):

But if you find yourself sitting there for six hours, going through the file system, you are going to...

EW (00:51:38):

Oh, that is, yeah.

CW (00:51:38):

Burn your brain out. So maybe do 20 minutes of that, and then 20 minutes, and then have each of these pieces come together. I am actually finding that, yeah, one of my problems with practice, is I spend too long on any given thing. This is practice related, but you do not see improvement. Right.

EW (00:51:57):

Not until you get to the end of a class, and you are like, "Ohh. Now I can do all of these things." It was pretty hilarious when you started a new class and it was like, "This class used to be so hard and now it is easy."

CW (00:52:08):

But like-

EW (00:52:09):

Because you had taken three other classes between them.

CW (00:52:10):

If I spend an hour on an exercise...

EW (00:52:13):

Yeah?

CW (00:52:14):

I am not going to be good at it at the end of one hour. But I am going to be more tired than if I spent ten minutes on it, five times. And I let my brain reset in between.

EW (00:52:25):

There is interrupted learning? I think is what it is called. And that is supposed to be one of the best ways to do it, is to learn a little and then come back to it. Like for languages, you should not take five years of Spanish. You should take one year of Spanish, separated by a year, and then another year or whatever. I do not think it is a year even.

CW (00:52:46):

Sorry for the diversion, but you reminded me of that by saying, "Do not spend too much time on any one thing." I think that is just broad advice. I know I get locked into stuff. After a couple hours of working on one thing, it feels bad <laugh>.

EW (00:53:08):

That is why I get so excited when I actually am in the flow state, and it does not feel bad.

CW (00:53:13):

Yeah.

EW (00:53:14):

Like, "Oh, I can make this all dance to my tune. I can make it all work the way I want."

CW (00:53:20):

But I think that flow state is just an extension of that. I think flow state is when you are working on something, where you are seeing little changes, and it is maintaining its novelty as you work on it. Whereas documentation, I believe there is no flow state.

EW (00:53:38):

Okay. And then if at the end, and you are working on documentation, and none of these other things have worked, set yourself a stupid goal. Like do not use the word "the.

CW (00:53:49):

<laugh>

EW (00:53:49):

I am serious. If you want to have a hard time writing, do not use the word "the," or keep the number of Es to a certain number in a sentence. Just stupid game crap!

CW (00:54:06):

Hmm.

EW (00:54:06):

And if you are just grinding, it is not going to make great documentation, but it will amuse you for those times when you just cannot get any further.

CW (00:54:19):

That is the thing, is sometimes documentation just needs to be done.

EW (00:54:24):

Depends on what you are documenting for.

CW (00:54:26):

Sometimes you just need to describe something, in the driest possible way, accurately. It does not have to be great.

EW (00:54:32):

Yeah.

CW (00:54:34):

Okay.

EW (00:54:35):

Okay. I think we need a GDB expert to come on and tell us about what it is and how you...

CW (00:54:44):

It is the GNU debugger. And GNU stands for "GNU is not Unix." So it is the "GNU is not Unix debugger." I feel like we have answered that question.

EW (00:54:54):

Good job. Maybe Peter will come back and talk to us. He did the black magic probe. So I think he has a lot of experience with that.

CW (00:55:05):

Yes. So preview that question. "What exactly is GDB?" Well, that is long. "How does one get started setting up a tool chain to use it for bugging?" That is long. I am remembering all that stuff like loading the symbols, and if you are doing it by hand and things. Things that IDE- So the thing is, IDEs are pretty good at abstracting away all of GDB's complexities. So I do not really think about that stuff anymore.

EW (00:55:30):

Having set up GDB under VS Code recently, so that other people could enjoy the abstraction. I can say that it is still not easy.

CW (00:55:42):

Yeah. You did it for Cypress though?

EW (00:55:44):

Yes, I did.

CW (00:55:46):

It is broken.

EW (00:55:47):

Multicore was interesting.

CW (00:55:50):

But I remember, I used to do things in the very old days, like in the nineties, if I needed a GDB something at Cisco, GDB did not run on the thing, it had a GDB server. You had to remote connect from your GDB that was running on your workstation, over UDP or TCP using some protocol, I do not know what it was, to some little shim layer that ran on the router that translated all the GDB stuff. It was really weird to be GDB-ing something, and halt it, but it was communicating over the network.

(00:56:31):

I do not know, I guess people probably still do that, but I have not come across that very recently. I guess it is usually over SWD, and direct interfaces, rather than over the network. Just doing it over the network always weirded me out. Sorry. There is a lot of complexity over GDB you can get into.

EW (00:56:52):

Yeah, there is. And it is interesting because it supports so many different processors, so many different languages, so many different options. And everybody needs it do this thing and not that thing. And it is quite the bucket of tools.

CW (00:57:09):

Yeah. So we should have a GDB show. "What would you tell recent EE or CS grad, who has never used a debugger on an embedded system before?" You should use a debugger.

EW (00:57:16):

<laugh> Step through debugging will change your life.

CW (00:57:22):

It is like you can drive a car without a steering wheel, if you had a lever that you moved with your knees. But would not a steering wheel be better? I am comparing printf to driving. Anyway. Yeah, that one we should defer to talk about longer. So I think that just about covers-

(00:57:45):

Oh, well, the other long question was, "What exactly are the compiler and linker? Who sets memory locations? Allocates memory? Which parts of RAM are data and program stored? All the memory stuff, plus how the compiler and linker uses that." So I think that is a really good topic, that we have kind of gone into with memory maps.

EW (00:58:09):

But I think you would like my book, and we have some blog posts that cover some of that. And I think it is a much longer show, that would be fun to have with one of our regular guests.

CW (00:58:21):

Okay.

EW (00:58:23):

What are you going to do this afternoon?

CW (00:58:25):

I am going to edit this podcast.

EW (00:58:27):

What are you going to do that is fun this afternoon?

CW (00:58:28):

<sigh>

EW (00:58:28):

You could build an antenna thingy-bob.

CW (00:58:36):

Mm-hmm. <affirmative>.

EW (00:58:38):

You could lay it out in the yard, just for fun.

CW (00:58:40):

The antenna is, I mean, that is just wire.

EW (00:58:43):

You could work on your ukulele.

CW (00:58:44):

Yeah. A ton of music to do.

EW (00:58:44):

You could play music. You could just bash on the drums. You could play FIFA.

CW (00:58:54):

I do not know.

EW (00:58:55):

Read a book. Go to the beach. Take a walk.

CW (00:58:59):

<laugh> They are all very good options. I do not know.

EW (00:59:03):

Oh wait, your birthday.

CW (00:59:05):

What about it?

EW (00:59:07):

What do you want for your birthday?

CW (00:59:08):

I do not know. To be six years younger.

EW (00:59:12):

Six?

CW (00:59:13):

Yeah. It is just a number.

EW (00:59:15):

That is all birthdays are. All right. Well, then, Christopher does not want anything for his birthday.

CW (00:59:21):

I want a cake.

EW (00:59:22):

Really?

CW (00:59:22):

Yeah.

EW (00:59:22):

Like, ice cream cake? Chocolate cake?

CW (00:59:28):

<sigh>

EW (00:59:34):

Thank you for listening.

CW (00:59:35):

<laugh>

EW (00:59:35):

Thank you to Christopher for producing and co-hosting. If you would like to contact us, hit the contact link on embedded.fm or email us at show@embedded.fm. And now some Winnie the Pooh.

(00:59:49):

[Winnie the Pooh excerpt]