418: Answer Me These Questions Three

Transcript from 418: Answer Me These Questions Three with Elecia White and Christopher White.

EW (00:00:06):

Welcome to Embedded. I am Elecia White, here with Christopher White. This is going to be one of those weeks where we just talk with each other.

CW (00:00:15):

Assuming the computers and all of this complicated gear that I have actually lets us talk for more than four seconds.

EW (00:00:22):

We're on intro number four, I think.

CW (00:00:24):

Maybe five. Yes. Sorry. I think we're ready. I think it's working.

EW (00:00:30):

Is this the thing to blame for our little oops on the last episode?

CW (00:00:35):

No, no. The thing to blame for the little oops, several oops, on the last episode is me, and cut and paste, and my finger on the track pad. And somehow some clips that were from the end of the show that were supposed to be deleted got pasted to the middle of the show.

CW (00:00:50):

And then I fixed that, and then reposted it. And then I didn't realize that I had missed one of those little clips that had been randomly pasted. So I had to fix that and re-upload it. Anyway, so everything seems good. I'm sure this is going to be fine unless it comes out and we sound like robots.

EW (00:01:07):

That's fine with me.

CW (00:01:10):

It looks like from our agenda that this is an ask embedded.fm, ask Embedded episode. There's lots of asks.

EW (00:01:18):

Yes. We foolishly asked what people wanted us to talk about. And then they gave us a ton of questions, many of which we cannot answer.

CW (00:01:26):

But we can try, or we can at least say why we can't answer them, or don't want to answer them, or why the question is improperly formed.

EW (00:01:34):

So I'm finishing up my Classpert cohort. And we did a retrospective where I asked the students what could be better. And it seems like the thing that they really had issues with were the quizzes, that they all seemed like trick questions.

CW (00:01:52):

Is that because they were all trick questions?

EW (00:01:54):

No. It's because writing quizzes is really hard. I had no idea. I mean, because I know what the answer is when I'm writing it. And I have to come up with alternatives that are both relevant and wrong.

CW (00:02:14):

Multiple choice is always difficult for everybody. It's difficult to make good multiple choice questions. And it's difficult to answer them sometimes, because of this thing that you're mentioning, the ambiguity, or the "Well, but actually, sometimes - "

EW (00:02:30):

I'm definitely going to put a disclaimer at the top of all quizzes that say, "The answer is always, 'It depends, - ' "

CW (00:02:35):

Oh, C. Oh, sorry.

EW (00:02:38):

"- and if you feel that way, just try to go with - "

CW (00:02:42):

The best answer.

EW (00:02:43):

" - the best answer."

CW (00:02:43):

That's why sometimes they say, "Select the best answer."

EW (00:02:45):

Right.

CW (00:02:46):

Or the most common answer. "Assuming a perfect world with no corner cases, which of these following four options would you choose?"

EW (00:02:55):

Well, and I think perhaps some of my questions are very dense, and they need to be three questions. And they would be easier to answer as three questions than one very dense question.

CW (00:03:05):

What is the thing from Monty Python? "To get past me, answer these questions three." Okay. So yes. So there'll be questions today, and we will make mouth noises about how the questions make us feel.

EW (00:03:22):

I think first we do need to start with Bicycle Repairman's pictures, which hopefully we will be putting in the show notes.

CW (00:03:33):

Do we really have to talk about this thing? Go ahead. Describe what these pictures are.

EW (00:03:43):

Okay. We'll try to avoid the scatological humor.

CW (00:03:47):

It's a urinal. So there shouldn't be any.

EW (00:03:52):

It is an Android IoT-connected urinal?

CW (00:03:56):

Well, we don't know that it's actually connected to the internet, right? Was that - ?

EW (00:04:00):

There were just so many whys.

CW (00:04:03):

Well, the first why is, "Why?" Why? Why is there a screen at the top of your urinal, a place where I want to put nothing? I don't want to touch anything that's been near there. ... I don't want to touch a picture of this. I don't want to touch things that have touched this. I don't want to touch things that have thought about this.

EW (00:04:25):

I wonder if it's a touch screen.

CW (00:04:27):

Of course it's a touch screen. How else are you going to interact with it?

EW (00:04:30):

Anyway -

CW (00:04:30):

Did you see a little keyboard to the side? A little pee-board? Anyway, this was brought to our attention on the joint Slack, which you can also join for just a dollar on Patreon if you're so inclined. So imagine a place where you, as a male individual, go to, but at the top of it is a computer screen.

CW (00:05:04):

And not only is the computer screen there, which raises most of the questions, but it has an error, and a MAC address.

EW (00:05:13):

It's connected. It has a MAC address.

CW (00:05:17):

My favorite thing about this whole thing is if you look at the picture, there's the brand name at the top, and it's Swiss Invent.

EW (00:05:27):

So if you don't know -

CW (00:05:28):

The Swiss invented this.

EW (00:05:30):

If you don't have a complete picture -

CW (00:05:31):

Their neutrality is now to be questioned.

EW (00:05:33):

It's a crashed urinal. That has to be a title option.

CW (00:05:41):

Apparently it's in Switzerland, because there's another picture of it working. And the text is in German, or Swiss German, or whatever.

EW (00:05:51):

What exactly do you have to do to crash -

CW (00:05:55):

First of all, how much beer do you have to consume to even have the time to interact with this thing in a meaningful manner? This is not a long procedure. How bored do you have to be? What exactly are you going to do? Are you going to buy stuff?

EW (00:06:13):

Well, wait a minute. The German says, "One hand free?"

CW (00:06:17):

Yeah. That's enough. Okay. Moving on. That's plenty. We've discussed this enough. People worked on this, okay?

CW (00:06:26):

People had meetings about this device, long meetings, boring meetings, where they were arguing with people about the right form factor and the right color, -

EW (00:06:36):

The font.

CW (00:06:36):

- and the interaction model, the font, the state machine. People talked about this. People got mad at their managers because of some slight they had about some management detail while they were working on this. So if you ever feel bad about your job, -

EW (00:06:59):

Unless you're the person that did this.

CW (00:07:01):

Let me say one more thing, and then we can move on from this. There is nothing that makes me want to retire and smash every computer in the house more than this. This is it. This is the thing that, is this still recording? Yes.

EW (00:07:22):

Okay. Let's go -

CW (00:07:23):

Let's move on to something -

EW (00:07:23):

- to one of the Twitter ones.

CW (00:07:25):

- that doesn't make me both angry, and sad, and make me laugh at the same time. From Twitter, which one?

EW (00:07:34):

Oh, from Twitter. Let's do, " Do you have a tip everyone should know?"

CW (00:07:37):

Okay. Yeah. Sure.

EW (00:07:38):

We ask our guests that, but we've never really had to answer.

CW (00:07:41):

A tip everyone should know. Wow. I am not prepared for that. Okay. Go ahead.

EW (00:07:47):

I hate to say that patience is key, but it kind of is. And it's not patience that you're waiting for something else. It's patience with yourself as you're trying to figure things out.

CW (00:08:02):

That's a good one. I don't have that, but that's a good one.

EW (00:08:06):

I see people getting frustrated, because it doesn't work. And I think they get stuck with it doesn't work. And the real thing is it doesn't work yet. And that yet is really important.

CW (00:08:22):

Well, that's the key piece of impatience, right? I want this to work now so I can get on to something that I want to do more. And that's something I've been struggling with with music, which I always come back to, because I don't actually like computers.

CW (00:08:35):

So I'll analogize everything to something I do like, but yeah, "Why do I practice? Why am I practicing this thing? Well, I want to play like this person, and I saw them do this amazing thing or this improvisation, and I want to get to that."

CW (00:08:52):

Well, I can't get to that until I spend hours and hours doing things that are kind of boring, or repetitive, or require a lot of concentration. And that stuff's hard, and it doesn't feel good. What would feel good is to be amazing. And that's the same with this is, what would feel good is to have this working so I can add something else to it.

CW (00:09:14):

And ... it's the stupid cliche, the journey is more important than the destination, but you have to get to a point where some parts of the journey are enjoyable and correcting problems, overcoming failures, -

EW (00:09:31):

Reading the datasheet. Reading other people's code.

CW (00:09:35):

Yeah. Stuff like that is actually at some level enjoyable. And you have to have those small wins though, right? You can't just slog forever. So you have to make your work so that both you do the boring stuff, but also the boring stuff does lead to small wins.

CW (00:09:50):

So if you're always feeling like you're in that state of nothing ever works, then you have to ask yourself, "Maybe the way I'm going about things isn't the right way."

EW (00:10:00):

That's a good point. I mean, some of this comes because I'm working on the final report critiques for class. But there were a couple people who got really frustrated, and would move on to something else, and get really frustrated, and move on to something else.

EW (00:10:18):

And I kind of understand that. It's a good approach to not stay frustrated, but then they ended up with a project that was a whole bunch of frustrations that weren't complete instead of one thing done well. And I don't know how to help that.

CW (00:10:35):

Yeah.

EW (00:10:36):

Saying, "Have patience with yourself," it wouldn't have done me any good to hear that.

CW (00:10:42):

No, no. Once you've got somebody telling you that and you're in the mode -

EW (00:10:47):

That's like saying, "Don't stress."

CW (00:10:49):

Don't stress, or -

EW (00:10:50):

Calm down.

CW (00:10:51):

Calm down. I will not calm down. It's really difficult. And ... practice and learning are both skills, and all the things that irritate people about learning other things, irritate people about learning how to learn properly. It's all very meta, but if you don't know how to learn properly, which, I don't profess to know how to learn properly.

CW (00:11:19):

I get into this state very often where I'm very frustrated. But if you don't know how to learn properly, then you can expend tremendous effort doing what you think is learning and getting not very far.

CW (00:11:32):

And that's one of the things I've been working on for a long time and trying to work on more recently is, how do I spend my time learning more efficiently?

EW (00:11:43):

You're taking a drum class on how to learn -

CW (00:11:47):

I'm taking a drum class on how to practice.

EW (00:11:49):

On how to practice.

CW (00:11:50):

So there's no exercises about drums or anything. It's not applicable just to drums, but it happens to be from a drum instructor.

CW (00:11:57):

And it's about how to practice and how to structure practice in such a way that there are these small wins, how to find the most important things to work on to the exclusion of all else without having a scattered brain, and, "Oh, I've got to learn this. Oh, I've got learn that. Oh, God. Oh, this doesn't work. I've got to practice that."

CW (00:12:19):

... There's only so much time you're effective while practicing things and physical things are different from mental things. But I think it applies. Once you've been doing homework for an hour straight or something, or working on a technical thing, your brain starts to get tired.

CW (00:12:39):

And so do you want to keep repeating the things, keep working on the things, that aren't doing a lot for you in that first, very effective hour, or do you want to move the stuff that's really effective to the first part where you're fresh?

CW (00:12:56):

So there's things like that. And it may not be applicable to all things, but that was kind of an important insight to me was, "Oh, yeah. After 40 minutes, I'm kind of tired, and it's harder to do certain things while I'm practicing."

CW (00:13:12):

But in that first 20 minutes, I've wasted 20 minutes warming up, wasted 20 minutes just doing rolls and things or rudiments on the snare drum to warm up. But that time is gone, and I haven't learned anything. All I've done is -

EW (00:13:27):

And it was fresh, good time.

CW (00:13:28):

It was fresh, good time. And I spent that time doing something I already know how to do.

EW (00:13:32):

It's like when I read datasheets, I usually read them at the end of the day when I'm very tired -

CW (00:13:37):

Yes.

EW (00:13:38):

- in order to get an idea of what's in them. And then the next morning having internalized, what's where, that's where I start reading the datasheets so I can implement code with them.

CW (00:13:48):

Yeah. And sometimes it just comes down to, when are you working on stuff? Are you working on your projects after a long day of work, working on computers?

EW (00:14:00):

Are you working on your projects right before lunch and aren't really focused on it?

CW (00:14:04):

Yeah. So that's a tip everyone should know, learn how to learn.

EW (00:14:11):

Well, it leads into what Carrie asked.

CW (00:14:15):

Well, I didn't get to give my tips.

EW (00:14:16):

Oh, I'm sorry. I'm sorry. I thought your tip was learn drums.

CW (00:14:21):

No, I would never want people to do that. It's hard and frustrating.

EW (00:14:24):

Okay. I'm sorry. What is a tip - ?

CW (00:14:25):

I have two tips for everyone.

EW (00:14:27):

Okay. Okay.

CW (00:14:27):

They're very short. One is if you're on a Mac, and these are not existential tips.

CW (00:14:32):

If you're on a Mac, and you're in terminal, the terminal or command line, your Bash shell thing, your Z shell or your T shell, whatever's in the thing where you're typey typey, ... if you've got a long command line there, and you want to edit something, like you've got a bunch of arguments and you want to go back to the first one, you don't have to hold down the button or know a bunch of weird key chord combinations to skip from word to word or go to the beginning of the line.

CW (00:14:58):

Just hold down option and your mouse and you can put the cursor anywhere in the line, edit that you want with one click. I love that. Second tip. Always do the homework.

EW (00:15:13):

Really?

CW (00:15:14):

Yes.

EW (00:15:15):

From you?

CW (00:15:16):

Yes.

EW (00:15:17):

Do you do it in the first five minutes of class?

CW (00:15:20):

No. That won't get it done.

EW (00:15:25):

I mean, I went to school with you.

CW (00:15:27):

That only works in high school.

EW (00:15:30):

I saw you write a 20-page paper on tank warfare -

CW (00:15:33):

That wasn't homework. That was a paper.

EW (00:15:37):

- in an hour. It was impressive. And you had -

CW (00:15:40):

Look, ... that was the last thing I had to do before graduating. It was the last day of school. And I did not care.

EW (00:15:50):

I think he made up the references, but he did have footnotes.

CW (00:15:52):

I did not make up the references. The references were all good. It was all about to Tobruk. Go look it up. Yeah, no, do the homework, because this applies back to your tip. You can't learn to do things without doing things.

CW (00:16:07):

And sometimes you have to do things over and over. And that works with math. It works with computers and all that other stuff. So much to my dismay, do the homework. That's the end for tips.

EW (00:16:24):

[Music]. And now a word from our sponsor. Why choose Newark for electronic components? From humble beginnings as a small electronics shop in 1934, Newark has grown into a leading international distributor of electronics and industrial components.

EW (00:16:41):

They offer products, services, and solutions that support customers in a wide variety of applications: industrial manufacturing and maintenance, medical product design, automotive, avionics, telecommunications, security, and more.

EW (00:16:55):

From design and testing to production and maintenance, discover why so many choose to partner with Newark! Newark has operations in the U.S., Canada, and Mexico. They are serviced from a regional distribution hub in South Carolina.

EW (00:17:11):

Newark is committed to supporting local language, currency, product, and shipping needs across North America and around the world. As part of a global business, Newark has access to stock and strong relationships with electronic manufacturers. They can easily serve all of your industrial electronics needs.

EW (00:17:33):

Learn more at newark.com. That's n-e-w-a-r-k.com. And we have a coupon for those of you in the U.S.: PODSAVE20 will get you 20% off. That's P-O-D-S-A-V-E-2-0. Thank you to Newark for sponsoring this show. [Music].

CW (00:17:57):

Okay. Let's move on to other questions.

EW (00:18:00):

Okay. So related to all of this, Carrie asked how we'd approach learning new skills or leveling up existing skills if you don't have a mentor at your workplace. I'm not sure how the mentor makes a difference.

CW (00:18:15):

I'm reading that as you don't have somebody in person to help you or teach you, or somebody to call up and ask questions, if you have to learn purely from open source materials, I mean, on the broad sense, like books or open source materials.

EW (00:18:37):

I would actually say books is a great thing. When I learn things on the internet, sometimes they are without basis. I mean, they're good, and they're useful for what I'm working on. But because they aren't connected to other things, I will lose them quickly.

EW (00:18:58):

And so a book is somebody's long effort to make something clear in a way you can retain it. Somebody's blog post is their reminder for how to do it themselves. And possibly they're trying to help you too. But to some extent they're writing it for themselves.

CW (00:19:18):

Yeah. I would add into that, which I think is good, and this goes back to the homework thing, find ways to practice. So if you have a book that has no exercises, you're going to have to come up with some exercises.

CW (00:19:34):

So let's say you're trying to learn some new technical thing to work on your project, to incorporate in your projects, a code thing, or some electronics thing. Well, do you have a project that you want to use that on?

CW (00:19:48):

Because what I've found is that it's very hard for me to learn things with no, I don't want to say goal, but nowhere to apply it in the near term. And that was really hard with school with certain abstract things. It's math, "When am I ever going to use this?" Well, it turns out eight years from now. Not really motivating, but true sometimes.

EW (00:20:14):

And it's easier to learn the second, third and fourth time.

CW (00:20:16):

Yeah. So having a project, or a sub-project, or something where you can take a technique, and immediately work with it, and try it, practice, apply it in a few different ways, but just do it immediately is way better.

CW (00:20:32):

Because you get that little dopamine hit of, "Oh, okay. I see. I see how this works," or, "I don't see how this works. What am I doing wrong?" Because that's a piece that you can miss from just purely reading is, "Oh, I understand this."

EW (00:20:44):

Oh, yeah.

CW (00:20:45):

And then you go to apply it. And it's like, "Well that made sense in the book, but now I have it in this other code, and these don't connect. I don't understand."

CW (00:20:55):

So either learn to make up ways to practice on your own that feel good, or find sources that have that built in with exercises at the end of chapters ... There are project books where you learn stuff that way.

EW (00:21:16):

It's very hard to learn new skills if you're not using them.

CW (00:21:18):

Yeah. And I found it easier to learn new skills at work when I had to.

EW (00:21:26):

Yes.

CW (00:21:26):

Pressure and guilt actually work pretty well on me for that for short periods of time. Because this is my job, and I have to learn this. I have to make this work or else people are going to be mad at me, which isn't a great motivator. So if you can try to do the other thing before that happens, that's good.

EW (00:21:46):

The whole curiosity in practice?

CW (00:21:48):

Yeah.

EW (00:21:49):

That's hard. You don't always get the opportunity for that.

CW (00:21:52):

No, no. It's rare. That's why you have to make the opportunities.

EW (00:21:56):

Are there other ways to level up skills?

CW (00:22:01):

Teach them.

EW (00:22:03):

Oh, yes.

CW (00:22:04):

That is one of the biggest, fastest ways to learn is to have to, or try to teach someone else. I learned freshman physics concepts way better than I ever had and fully integrated them into my understanding when I had to teach freshman physics.

CW (00:22:27):

And I thought I understood them before, but until you've got a bunch of kids asking you random questions that you have to answer, because you are the teacher, -

EW (00:22:37):

Yes.

CW (00:22:38):

- that is a focus that is rare.

EW (00:22:45):

Every week with teaching class is a pop quiz on the material that I thought I understood. And it's a pop quiz that you can't just say, "I'm happy missing these points." You have to answer.

CW (00:23:03):

I don't really know the answer. I'll get back to you.

EW (00:23:05):

Yeah. You can only do that a couple times before they stop -

CW (00:23:08):

Are you the teacher or not?

EW (00:23:09):

Yes, exactly.

CW (00:23:11):

Yeah. So I don't know how to find a way to teach, depending on the skill, but becoming a mentor for someone else you ask, "If there are no mentors in the workplace," well, make yourself one, and -

EW (00:23:21):

That's going to be very effective for learning new skills, because you have to stay ahead of them.

CW (00:23:27):

Or a slight step down from that is, pick something you're really interested in that you want to learn and make a presentation. Make a YouTube video teaching it. Because that will focus your learning capabilities when you're on the hook to actually explain something. And the whole explanation process, if you were just explaining it to a rock -

EW (00:23:51):

The rock doesn't ask questions?

CW (00:23:53):

Right. The rock doesn't ask questions, but even just the process of thinking slightly differently. "Oh, I need to explain this rather than I need to learn this -

EW (00:23:59):

Yes.

CW (00:24:00):

- can be helpful.

EW (00:24:02):

Going back to, you said making a video, you made a video recently.

CW (00:24:06):

Ohm yeah. We don't need to talk about that, do we?

EW (00:24:09):

Yes. Because you worked hard on it.

CW (00:24:11):

Ask me questions then. I'm not going to -

EW (00:24:12):

Okay. You made a video recently.

CW (00:24:15):

There's a blue thing rolling down our driveway. Okay. It's done now. I made a video. I did make a video.

EW (00:24:27):

You made a video recently.

CW (00:24:28):

Yes.

EW (00:24:28):

What song did you play?

CW (00:24:29):

It is a song from The Meters. It was an older funk song, kind of progenitors of funk called Cissy Strut.

EW (00:24:37):

And you played drums on it?

CW (00:24:39):

I played drums on it. That was my original intention was just to do a drum cover, because it's a tricky drum part that sounds simple, but is actually quite difficult. And I don't think I actually nailed the feel. But I spent some time learning it, because I wanted to.

EW (00:24:51):

And then you also played bass on it.

CW (00:24:54):

I just decided to play everything on it. Yes.

EW (00:24:56):

Keyboards, and guitar, -

CW (00:24:57):

Yeah.

EW (00:24:57):

- and bass.

CW (00:24:58):

Yes.

EW (00:24:59):

And then you learned the song.

CW (00:25:01):

Yes.

EW (00:25:02):

And then you took a video -

CW (00:25:04):

Yes.

EW (00:25:05):

- of you playing each of these instruments.

CW (00:25:07):

Yes.

EW (00:25:08):

And not once. You did a couple of takes

CW (00:25:11):

More than a couple, but yes.

EW (00:25:13):

And then you clipped this together -

CW (00:25:15):

Yes.

EW (00:25:15):

- so that you would have a little music video of you -

CW (00:25:19):

Yes.

EW (00:25:19):

- in different shirts, which I found hilarious.

CW (00:25:21):

No, it's -

EW (00:25:21):

Because you would go change the shirts.

CW (00:25:22):

Well, no, that was different days.

EW (00:25:25):

Not always.

CW (00:25:26):

Alright.

EW (00:25:27):

And you clipped together a video of you playing all of these.

CW (00:25:31):

Yes. I did.

EW (00:25:32):

Are you happy with how it came out?

CW (00:25:33):

It's fine. I think my drums could have been better. The other instruments, I felt pretty good about. I didn't quite get the, yeah, nobody cares, but -

EW (00:25:44):

Why did you do this?

CW (00:25:46):

Why? Well, it goes back to practice. And having a project in mind helps you learn things. So that was a song I've wanted to learn for a number of years and hadn't really spent the time to do it. And I found a couple of videos of the original drummer, whose name is Zigaboo Modeliste, playing it.

CW (00:26:09):

That changed the way I thought about it and made me think I could probably do it. And so I started spending time learning it. And I have been trying to put out more video stuff, because it focuses the mind. Much like teaching, it's putting yourself out in public. And you don't want to put yourself out in public and embarrass yourself.

CW (00:26:32):

So that makes me practice harder. It makes me focus more on the playing. It makes me more critical of things I'm doing wrong, that I can -

EW (00:26:39):

It makes you finish something.

CW (00:26:41):

- feed back into my playing in practice and makes me finish something. So, yes.

EW (00:26:46):

Do you think you'll look back on it in six months or a year and be happy you finished it?

CW (00:26:53):

I'll be happy I finished it. I'm hoping in six months to a year, I will be less happy about my playing.

EW (00:26:58):

Fair enough.

CW (00:26:59):

Because then I will have learned more and be able to recognize more things I was not doing as well.

EW (00:27:04):

How often do you look back and say, "Oh, a year ago, I didn't know how to do that. And now I did through my own efforts of hard work?"

CW (00:27:11):

Not as often as I should. I can listen to that first record that I'm on and cringe throughout the entire thing compared to later work. So, I mean -

EW (00:27:20):

It was still a fun record.

CW (00:27:21):

Well, fun is, yeah.

EW (00:27:24):

It's enough for people like me who listen.

CW (00:27:27):

That's fine. Anyway. Yeah, so that's why I did it. And if people want to check it out, they can look at my YouTube channel.

EW (00:27:35):

Okay.

CW (00:27:35):

Please don't look at my YouTube channel.

EW (00:27:37):

Let's see. Niels also asked if we should bring back the dinosaurs.

CW (00:27:44):

No.

EW (00:27:46):

No?

CW (00:27:47):

No.

EW (00:27:47):

Well, we talked about a cassowary recently, so I feel like we have the dinosaurs.

CW (00:27:51):

Yeah. So we don't need to bring them back. And I don't like them.

EW (00:27:54):

We watched the David Attenborough -

CW (00:27:57):

Dinosaur documentary.

EW (00:27:58):

- dinosaur documentary, which was very strange, very cool. And dinosaurs are scary.

CW (00:28:07):

Yeah. And sharp.

EW (00:28:08):

And sharp. Very, very sharp. Like cassowaries.

CW (00:28:11):

Yes. Yes.

EW (00:28:13):

"What's an often overlooked aspect during development of an embedded system?" This one's from Peter.

CW (00:28:20):

Do you want to take a crack at that, or do you want me to?

EW (00:28:23):

Sure. I'll get started. In class, I know I'm bringing everything back to class, because I was working on class stuff -

CW (00:28:30):

That's alright. I bring everything back to drums.

EW (00:28:32):

- before we started. And so, my brain's there. But we had Chris Svec come and talk to us about digital design. And then we got to talking about iRobot and what he does. And he said that up to a third of the time is spent on tools, and I was a little shocked by that.

EW (00:28:57):

The students were a little shocked and kind of relieved, because they'd been dealing with tools all week. And I know we talk about it a lot here. I mean, we we've talked to Tyler a couple of times and, and we do talk about compilers and everything.

EW (00:29:15):

Yeah. I think that that's a tough area that is often overlooked, partially because once you have one, you never have to change.

CW (00:29:23):

Well, that's the thing. That's what I was going to say is, I agree that a lot of time, I don't know how to quantify it, but say 30% is spent on tools. That's because for the first three months of your project, 90% of your time is spent on tools.

CW (00:29:38):

But yeah, that was going to be one of my answers too, is tools and getting a streamlined workflow that everyone agrees on, everyone is happy with, and that everyone can deviate from without causing a fuss.

CW (00:29:56):

So having it so people can use their own editors and stuff and configure it the way they like, I don't mean so that everybody's got a different number of spaces for tabs and stuff like that. Your code has to look the same, but everybody wants a different theme or a different key thing.

CW (00:30:10):

So if you're enforcing an IDE, I really don't like that. And if you can find a way not to do that, that allows people to be more efficient, because they're more comfortable. It's like enforcing having everybody in the same chair or something. So yeah, tools, good.

EW (00:30:25):

Security, over-the-air downloads -

CW (00:30:29):

Yeah. Those are tactical things. I don't think those are overlooked so much as ... -

EW (00:30:34):

Shoved in the end?

CW (00:30:35):

- people look at them, and they're out of the corner of the eye. And they hope they're not coming up behind them.

EW (00:30:40):

Testing.

CW (00:30:43):

Testing, yeah, I'm going to say integration.

EW (00:30:47):

I have a project that I might work on. I don't know. And the actual what I need to do sounded pretty simple, but then my next question is, "Okay, how do I test this to make sure it works, because it's in a giant system? And how do I make sure?"

CW (00:31:10):

Yeah.

EW (00:31:11):

And if that hadn't been one of my first questions, the whole contract likely would have gone very differently. Because how it was pitched to me, sure, that's an afternoon's worth of work. But now that I think about testing it, I'm like, "Okay, that's three weeks worth of work."

CW (00:31:31):

Yeah, yeah. Yeah. The reason I say integration is because a lot of projects is multiple teams and stuff comes together at weird times. And the question was things that are overlooked. And that makes me think things are not put in the schedule ... or things that people get mad when you say, "Oh, we have to do this."

CW (00:31:54):

And it's the end of the project. And they just want to ship. So integration is one of those where it's like, "You need time." Once boards come back, once the final boards come back, once the housings come back, the software, the firmware, you need time for all of that to be put together.

CW (00:32:10):

Because you didn't have time when they were in their parallel development to test them together or easy ways to do that. And that can take a lot of time where things are just like, "Oh, this doesn't work. And now we have to re-architect how this piece of hardware talks to this other piece of hardware," or stuff like that.

CW (00:32:32):

So integration is a big one. And that's been a big pain point at several companies I've been at, because all the parts come into the building and the software is done. And then suddenly it's like, "This doesn't work."

EW (00:32:44):

Marcelo asked, "What would the perfect programming language be?"

CW (00:32:51):

Applesoft BASIC, 1979. I don't think that's an answerable question, because every programming language has different applications. It's designed to deal with different goals, different performance, trade-offs, different -

EW (00:33:15):

I have an answer.

CW (00:33:16):

Okay. Go for it.

EW (00:33:18):

Something my entire team knew well.

CW (00:33:21):

Okay. Well, sure. But if your entire team knows Pascal, that's going to be a problem, and that's it.

EW (00:33:29):

Not always. Okay. Pascal. Yeah, no. Yeah. I don't think there's a perfect language.

CW (00:33:37):

I think a lot of the problem is that people keep trying to write one.

EW (00:33:41):

I have trouble with people knowing the surface of a language and not being able to dive deeper. And that causes more problems than trying to find the perfect language.

EW (00:33:58):

I don't know that many programming languages, but I have had enough experience with a number that I like. I like some things about C. I don't like some things about C. I like C++. Python has many excellent qualities. AWK was awkward.

CW (00:34:25):

I'm not sure AWK is a programming language.

EW (00:34:27):

It was the way I used it.

CW (00:34:30):

Yeah, no. No, I totally agree. In some sense it's like, "What's the perfect four-wheeled vehicle?"

EW (00:34:37):

I mean, if we had John Cats [Catsoulis] on again, he would say Forth is the perfect language, but -

CW (00:34:43):

Yeah.

EW (00:34:44):

I'm not so, you have one way.

CW (00:34:46):

I mean, it depends on your definition of perfect.

EW (00:34:48):

Yes.

CW (00:34:48):

Is there a language that you can solve most any problem in? Sure. That's probably C. You're not going to -

EW (00:34:52):

Binary, man. Go straight for the binary.

CW (00:34:55):

Yeah. You can't say solve -

EW (00:34:55):

Everything's a Turning test.

CW (00:34:57):

Yeah, okay.

EW (00:34:57):

A Turing machine.

CW (00:35:00):

But then C, given enough time and effort, not an infinite amount of time, you can probably write any kind of application you want.

EW (00:35:08):

Sure. Because you can write almost any compiler in C.

CW (00:35:12):

Well, now, that's cheating, but yeah. Yeah, yeah. But you can do a lot in C. It's just, do you want to do it efficiently from your time point of view? I mean, so, yeah.

EW (00:35:22):

But if you're writing or web application, the perfect language is not C.

CW (00:35:26):

Right. That's why I'm saying, "What's the definition of perfect?" Something that could conceivably be used everywhere? Sure. But that's not, yeah. Next.

EW (00:35:36):

Grumpy Old Man asked if we were ever going to have a follow-up with the cat.

CW (00:35:42):

No, because the cat would be, if she was still alive, 23 years old now, which would be really stretching it. So we'd have to get a new cat.

EW (00:35:53):

Which I'm not opposed to. But given the amount of hate mail we got for that, probably not.

CW (00:36:03):

But think of how much more we'd get now.

EW (00:36:05):

I know. That was early.

CW (00:36:07):

Yeah. Yeah.

EW (00:36:09):

"If you could design your own microcontroller, what would it look like in terms of peripherals, cores, and other features?" We have another email that's sort of on that same topic. Do you want to answer that or go through the email?

CW (00:36:20):

How about we try to answer it, and then we can bring the email up. I have purposely not thought about this before right now.

EW (00:36:27):

Even though on Twitter, you said, "I should think about this before answering."

CW (00:36:30):

Well, I think I said on Twitter, "I should think about it, but I won't."

EW (00:36:33):

Oh, alright. Okay.

CW (00:36:34):

So the thing about microcontrollers is they suffer from kind of the same thing that programming languages do sometimes, where they try to be the perfect thing by having a lot of features and a lot of peripherals. If I was to design my own microcontroller, given a blank sheet, and you can have whatever you want, it would be application-specific.

EW (00:37:01):

Exactly. I'm not going to design a microcontroller without knowing how it's going to be used.

CW (00:37:05):

And I would choose not only how much RAM, but what kind of RAM I needed, how fast it needed to be, whether there were trade-offs in power and things like that for my application. Maybe I want 64K of fast RAM and a megabyte of slow RAM.

EW (00:37:22):

And zero wait state flash.

CW (00:37:25):

Yeah.

EW (00:37:25):

Zero wait.

CW (00:37:25):

And the peripherals, I would probably not include any I2C so that the electrical engineers could not use any I2C parts.

EW (00:37:37):

Still mad at I2C, I see.

CW (00:37:40):

Yeah. But, yeah -

EW (00:37:41):

Did you know that the transcription translates I2C to ice cream? So it's the ice cream bus?

CW (00:37:51):

Yes. And this would have two ice cream buses, but yeah. So there's things I like on microcontrollers, so certainly I can answer those sorts of things, like I prefer SPI to I2C wherever possible, -

EW (00:38:06):

FIFOs or not FIFOs? Not FIFOs means you have to do DMA, which is kind of good, and FIFOs can lead to latency. But on the other hand, if you're not going to do bother doing DMA, FIFOs are really nice.

CW (00:38:19):

I have not enjoyed using FIFOs. They kind of suck, but I don't know. Again, it depends. It depends. Yeah. I don't know. Seeing this question from scratch, what would you say to it? It sounds like you would have a similar answer, but -

EW (00:38:37):

Oh, no, it would totally depend on what the application was. I mean, a low-power application has vastly different requirements from one that you plug into the wall. And one that needs to be cheap is greatly different than the Large Hadron Collider, which doesn't need to be cheap, but it has other requirements.

CW (00:39:02):

Am I having a display on it with fancy graphics? Then I need some extra stuff and DSP. And so, yeah, it's hard.

EW (00:39:09):

I think before I can design my own microcontroller, I have to design my own application.

CW (00:39:13):

Right. Which I'm not going to do, because I don't like computers. And I regret bringing more of them into existence. Yeah. Yeah. Yeah.

CW (00:39:24):

And to take the question the other way, if I just had no application to design my perfect microcontroller, it would probably end up being something like a Homer car from the Simpsons, with all kinds of weird features that I thought were fun, useless to nobody or useless to, well, useless to both nobody and anybody.

CW (00:39:49):

But this kind of leads into this other thing, this little rant here. Is that right?

EW (00:39:54):

Yeah. Chris L wrote an email in which he ranted -

CW (00:40:01):

Which, to be fair, he said, "I'm about to rant."

EW (00:40:05):

Yes. I mean, I'm not putting that word into his mouth. I'm not sure what led to this, but it was amusing. It had to do with the SAMD21, which is a Cortex-M processor and from Microchip/Atmel. Could they separate again, and we can have Atmel back?

CW (00:40:36):

Anyway. So the crux of it seems to be the documentation is terrible. Oh, wait. No, there's more. Wow. Okay. Do we want to go through, summarize some of the highlights of this rant?

EW (00:40:48):

Sure. I mean, one is the documentation is terrible. Having used NXP and STM, the Microchip documentation was incredibly detailed at the peripheral level, almost annoyingly so.

EW (00:41:03):

Do we really need a table of 32 identical registers printed out, but the documents lacked quality at a higher level. How do you connect up these three peripherals to measure a pulse width?

CW (00:41:15):

Yeah, that's the thing I've had a lot of trouble with is, there's a lot of documentation about the guts of these things and not a lot of app notes.

EW (00:41:27):

Sometimes. And sometimes there are app notes, and people don't read them.

CW (00:41:31):

Depends on the microcontroller.

EW (00:41:34):

Indeed. Chris L also fussed about the examples, that STM and NXP had better examples, better sample code.

CW (00:41:44):

Sure.

EW (00:41:46):

Even the name searching for SAM, or SAMD, or SAME just crazy. Why couldn't they make better abbreviations to distinguish the TC and TCC peripherals? This caused no end of confusion. Yes. Yes, indeed.

CW (00:42:02):

So is this just a Microchip Atmel rant or - ?

EW (00:42:06):

It does seem to be a Microchip rant. I always find these amusing. Next person to send me a Rust rant that's opposed to Rust, they may get a prize. I know. I know.

CW (00:42:20):

You haven't encountered Rust in six months. Why are you bringing -

EW (00:42:24):

No, that's not true. Actually, class registration is open for August 20th, and someone messaged the person in charge of answering questions there, could they do their final project in Rust. And so Jason had to message me. And I had to say, "Maybe. I'm not going say no, but we're not going to help you with Rust.

CW (00:42:51):

Yeah. Sure.

EW (00:42:52):

So I have encountered Rust in the last few days and I actually went out to make sure that the board that we're recommending will support Rust. So it wasn't like I just said, "Maybe." I actually worked for that maybe.

CW (00:43:07):

Yeah. Rust is fine.

EW (00:43:08):

Rust is fine.

CW (00:43:09):

It's fine. Yeah, so I mean, microcontrollers are bad. Various companies that make them could do better. The only problem now is you get the chip that you can get. So you're going to have to put up with a lot.

EW (00:43:23):

Yes.

CW (00:43:25):

I'm not quite enjoying the chip I'm working on, which is from a different company. You can go to past episodes to glean what that is, but yeah. And ST stuff is good, but it's also a lot. I mean, the HAL's difficult to understand, and it has mistakes.

EW (00:43:47):

It's 97 layers deep, because they try to cover all of their peripherals with the same interface, and they never take anything out.

CW (00:43:56):

And all these micros want you to use some weird [bleep], weird-butt IDE that they control. And the only thing I can say, he has a little thing about, doesn't like the IDE, -

EW (00:44:13):

That's the Atmel Studio.

CW (00:44:14):

- you've got to spend that 30% tools time to come up with a setup that doesn't depend on that stuff as best you can.

EW (00:44:22):

I mean, at least it was Atmel Studio and not MPLAB.

CW (00:44:26):

Alright. Enough of this.

EW (00:44:29):

Okay. Peter asked about Code Composer Studio, which is TI's IDE. "Is it any good? How does it compare with other IDEs? Is it worth learning if you want to work with TI parts? Are there hidden limitations you'll discover later, like with the Arduino IDE?"

CW (00:44:45):

I have never used it. So, go ahead.

EW (00:44:49):

The embedded compilers currently or recently on my laptop include TI Code Composer, VSCode with PlatformIO, VSCode with STM32 and Cortex-Debug, VSCode with Nordic, VSCode with Cypress and Cortex-Debug, MPLab for PICs, STM32 CubeMx IDE, Arduino processing Atmel Studio 7.0, and PSoC Creator.

CW (00:45:13):

No wonder your fans are always running, because all of those are trying to update in the background.

EW (00:45:18):

Yeah. So, how does it compare? It's an Eclipse-based, so it's going to look a little bit like STM32 CubeMx -

CW (00:45:32):

IDE.

EW (00:45:32):

- IDE, and it's not terrible. It's not great. It's what you want to use if you're working with TI parts. They have their environment, and if you play in it, it will be much easier than if you try to take it over to some other platform.

EW (00:45:54):

So I would definitely use Code Composer if you are using TI. I would not use Code Composer if you're not using TI. I don't even know how that would work. But when we say Eclipse-based, Eclipse was like VSCode before VSCode existed and much worse.

CW (00:46:16):

I was using Eclipse in 2004. So it's not new.

EW (00:46:22):

It's not new. It shows its age.

CW (00:46:24):

It's Java-based. It's cool, because it was kind of the first cross-platform IDE that you could really do a lot in. And in the early days it was really slow, because it was Java-based, and computers were the horsepower of what you've got on your watch now.

CW (00:46:43):

And so it was nice, because it was open source and people could build their proprietary IDEs on top of them. And a lot of people have done that. And it's mostly fine, but since it is a little long in the tooth, and Java-based, and a few other things, it tends to be kind of mediocre in a lot of ways.

EW (00:47:06):

It goes back to the STM32 HAL. At some point, if you're trying to support everything, you get to start seeing the crusty bits, because you're not doing a good job on anything. You're doing a fine job. You're just not doing a good job.

CW (00:47:20):

It's fine.

EW (00:47:21):

It's fine. Oh, we got a nice email from somebody who says, "By training, I'm a CS guy, but have veered heavily into low-speed scientific computing (Python on heavy metal.)"

CW (00:47:34):

Yeah.

EW (00:47:35):

About as far as I can imagine from being in the same field and away from what your topics and guests would be, but every single episode you or your guests somehow managed to say something that cuts right to the core of something I'm struggling with, gives me a new perspective I desperately needed."

CW (00:47:52):

That's nice.

EW (00:47:53):

That was very nice. Thank you for that.

CW (00:47:55):

Do you want to try this question about overlays?

EW (00:48:00):

Oh, sure. I have no problem with that question. You shouldn't either. You've done this.

CW (00:48:04):

Well, let's read the question, and then I can explain what I've done and what I haven't done.

CW (00:48:10):

Simon says, "How do you write Arm Cortex-M projects that use overlays to dynamically allocate new sections of code at runtime? Can you discuss that please? Yeah, somebody else asked, "What does it mean to dynamically allocate new code sections?" And the analogy here is how do you dynamically link -

EW (00:48:27):

Object.

CW (00:48:27):

- .so files in Linux at runtime, but for bare metal or RTOS projects on Arm Cortex-M, I have been near this happening. So I think I can talk about the details of this. It's been years, right?

EW (00:48:45):

Yeah.

CW (00:48:45):

So, at Fitbit, on the Fitbit watch, there are apps.

EW (00:48:51):

Third-party apps.

CW (00:48:52):

Third-party apps. But there were also first-party apps that use the same mechanism. And as you might expect, running arbitrary code on a Cortex-M requires something difficult, because you need to load new stuff into somewhere. You need to pull it into RAM. You need to start it.

CW (00:49:14):

Like on a desktop, you have to move things into memory and start executing them. And that has a lot of complexities associated with it that you may not think about. So that's what we did at Fitbit. We did exactly this. We had dynamic linking to pull in new code at runtime. In this case, it wasn't a RAM.

CW (00:49:37):

And what I'm going to say is, it's extremely difficult and advanced. So if you're going to take on this project, prepare to learn a lot, and research a lot, and fall down a lot, because it's hard. One of the key difficult things is you need a dynamic linker running on the system.

CW (00:49:58):

And what a linker does, you want to describe what a linker does? I'm not going to do it well.

EW (00:50:07):

It links things. Okay, so a linker takes your object files -

CW (00:50:14):

Which have your code in them and references to things.

EW (00:50:18):

Right. And so each object file says, "This is my code. This is how you call my code. These are the things I call." And a linker tries to make sure that everything that someone calls ends up in the final code, final HEX file.

EW (00:50:38):

And so that's why sometimes if you have a global variable or a function with a typo in it, it's after the linker. It says, "I can't find this function." And that's because until then the compiler believed that function existed somewhere.

CW (00:50:57):

Right, right. It's just setting a reference to, "Go find this. Go connect these things later."

EW (00:51:01):

The linker connects all of the references.

CW (00:51:04):

And so what it's doing is, it's taking an abstract reference and based on the link map or some other knowledge, it's taking those references in the code and rewriting them to be specific things. So if your code comes out and it says, "Oh, read from this table," the object code is going to have a reference to that table.

CW (00:51:26):

But the linker going to say, "That table's at this address." And so most codes you generate for microcontrollers is what's called, I don't want to say position-dependent, but it's the opposite of position-independent. It puts defined memory things in the code.

CW (00:51:48):

So if you think about what it means to put code in at runtime, the code at runtime may go somewhere random or to a memory location that's different than when it was compiled. And so it's going to have those references, but they're going to point to different places.

CW (00:52:06):

And if the code isn't structured right, if it hasn't been generated right, you can't fix that. That has to be done at runtime where you load the code in on your microcontroller, it goes to RAM, and then another process, or thread, or piece of code looks through and says, "Okay, here's these references, and I need to rewrite these."

CW (00:52:23):

And so you have to generate position-independent code that can be dynamically linked. And that takes some steps in your tool setup. And then you also have to write a dynamic linker for your device to handle that position-independent code and fix up the references so that they can match wherever it is in RAM.

EW (00:52:47):

It's funny how we can have the same career, for 25 years, -

CW (00:52:55):

Let's call it 25 years.

EW (00:52:57):

- and yet have entirely different views of this.

CW (00:53:01):

Okay.

EW (00:53:03):

My view comes from thinking about it as, if you want to have dynamic applications, thinking about it -

CW (00:53:15):

Not necessarily dynamic, not even necessarily applications, just more abstract. Like, "I'm out of RAM, but my system does one thing for half of its life and a different thing for half of its life while it's on."

EW (00:53:30):

It has two different applications.

CW (00:53:31):

Okay, fine.

EW (00:53:32):

I'm sticking with applications.

CW (00:53:33):

Fine. That's fine.

EW (00:53:34):

But it's what you say.

CW (00:53:35):

Yeah.

EW (00:53:35):

I have a device, and I want it to be drastically different. And I'm willing to take a little bit of time for that difference to be put into effect. And it may just be a little bit of time, but -

CW (00:53:48):

Sure.

EW (00:53:49):

- when I think about that, I think about bootloaders and what they run. Because that is an example of two applications running on a device.

CW (00:53:58):

Sure.

EW (00:53:59):

And you are going from one to the other and you have very limited pipe between them.

CW (00:54:06):

Yeah.

EW (00:54:07):

The bootloader knows where the application gets loaded to. And at some point the bootloader jumps to the application, and the application runs.

CW (00:54:15):

Sure.

EW (00:54:17):

So that's one way to do it, and -

CW (00:54:19):

But that's -

EW (00:54:20):

Wait. If you have an application running, and you want to run something different, you can go back to the bootloader and say, "Hey, bootloader, run the thing at this other address."

EW (00:54:38):

And so you could cycle through applications that way, but we aren't really sharing anything yet, are we? You wanted the dynamic linking.

CW (00:54:46):

Right.

EW (00:54:46):

Because otherwise each of these has to be their own program.

CW (00:54:49):

I wanna blow away existing code and replace it with something completely different.

EW (00:54:57):

I mean, so you could do that by having this whole boot loader application thing -

CW (00:55:01):

Sure.

EW (00:55:01):

- where the application is in external flash, and when you say, "Hey, bootloader, I'm done running, please run something else," you say, "And that something else is in this address, - "

CW (00:55:11):

Okay. Yeah.

EW (00:55:11):

- and it gets loaded in. Okay. But all of that is not sharing the library -

CW (00:55:17):

Right.

EW (00:55:17):

- that you want to share, -

CW (00:55:19):

Right.

EW (00:55:19):

- which may be a graphics library. It may be a communications library. It may be all of these things. Going back to TI Code Composer, that is where I learned how to do most of the things that you seem to be wanting to do with this dynamic allocation.

EW (00:55:38):

I came across it many, many years ago as part of their BIOS, which is what they're calling their operating system. And it's very obvious in the way they do their BLE handling. So if you want to go look up specific code on this, look at their BLE.

EW (00:55:57):

And what they do is they take a list of functions, specific functions that somebody else might want to use, so let's say init display, and you make a chart of those functions, a chart, a list, -

CW (00:56:17):

Table.

EW (00:56:18):

- a table, a table of function pointers.

CW (00:56:20):

Yeah.

EW (00:56:21):

And you have a special thing, special handler, so that when you want to call init display, you actually say, "I want to call a system call number three, which translates to init display."

CW (00:56:36):

Oh, you use the system call interface. Alright.

EW (00:56:39):

And now I can call whatever I want, if it's in that table. And that table can change. If I do a table that has the number that I'm calling and the function table, then I can search through it. But that's not usually a good idea, because you don't want that to change.

EW (00:56:57):

You just have a list of functions and somewhere some header knows the list order. Now when you compile something, you compile it assuming that that table is at a fixed address in memory.

CW (00:57:14):

Yeah. Yeah. And I'm trying to go a step beyond that.

EW (00:57:18):

You are. The other way to do it is to not have that list, but to have that library in flash and not allow its memory locations to change. We're not allowing dynamic really at this point, we're allowing the applications to change, but that library is fixed at a location.

CW (00:57:41):

Yeah.

EW (00:57:42):

That involves changing more of your project files.

CW (00:57:44):

Yeah.

EW (00:57:45):

The first way involves changing your linker file. But after that you need the system handling interface and then you're good to go. Forcing your library to be at a location and for your linker to know what the functions are in that library, usually that's an extra file or two.

CW (00:58:05):

But the point of all this is code has to be where it's supposed to be.

EW (00:58:09):

Right.

CW (00:58:10):

You cannot change the location of where the application code is or any the libraries. It's just that you can swap those things out, and they're all compiled in the same way for the same target addresses. And so the linker is fine putting in fixed addresses for the memory references. Yeah. Okay.

EW (00:58:29):

Either you put in fixed addresses for the memory address, you put in fixed addresses for the references for the linker, -

CW (00:58:36):

Yeah.

EW (00:58:37):

- or you put in an abstraction layer -

CW (00:58:39):

Sure.

EW (00:58:40):

- that hides those functions.

CW (00:58:41):

And your abstraction layer is basically a dynamic linker, -

EW (00:58:45):

Exactly.

CW (00:58:45):

- just, it's running at runtime.

EW (00:58:47):

Yes.

CW (00:58:47):

Yeah. No. Okay. That makes sense. That's a better halfway. Depending on the application, that's a better halfway measure than going all the way, which is difficult.

EW (00:58:57):

Well, like I said, I saw it at TI so much that I just kind of got used to it. And once I got over my fear of function pointers -

CW (00:59:03):

Yeah. Sure.

EW (00:59:04):

- things become much easier.

CW (00:59:05):

Yeah. There is a little project on GitHub that I found. And I don't know how good it is, but it kind of describes the problems with going all the way to dynamic linking. And they're doing it for kind of big reasons like, "Oh, I want run Lua, or Python, or JavaScripts and have a loader that can run," or getting around LGPL licensing terms.

CW (00:59:39):

Because you can dynamically link things. Anyway, so, I have link to that. And people can look at that and see what they think of it. I do not endorse it. I have not looked at it in great detail, but it is something that other people have been thinking about. Okay. What's next?

EW (01:00:00):

There's one about Android and aircraft.

CW (01:00:05):

What? Why would you have Android on an aircraft? Is that the urinal again? Was that on an airplane?

EW (01:00:12):

No, it was not.

CW (01:00:13):

Okay.

EW (01:00:13):

I don't think so. Peter asked about airplane entertainment systems that run Linux or Android, how they're kept up to date across a fleet of globally distributed hardware when the kernel exits the support window. Who adapts all of the plane-specific modifications to the new kernel or backports security updates?

CW (01:00:34):

I have an answer. I have an answer. I have an answer and this answer is based on no knowledge. So, I could be very wrong, but I think the answer is no one.

EW (01:00:46):

Yes. I think the answer is no one.

CW (01:00:49):

I don't think those are things that happen.

EW (01:00:51):

How do you make sure the planes get the updates?

CW (01:00:53):

You don't.

EW (01:00:55):

I agree.

CW (01:00:56):

I think they're crusty, the worst code you can imagine running on the entertainment system. And the way it gets replaced is when a new contract is signed with the airline and they get a new entertainment system with the new Linux Colonel.

EW (01:01:11):

Well, this was followed up with Lyriian who said, "I'm curious to know if anyone has ever been on a flight where the entertainment system was the same as the previous flight."

CW (01:01:19):

Okay. I have to admit, wait, wait, I have to admit, I have never been on a flight with an entertainment system.

EW (01:01:26):

Yes. You stopped flying before that.

CW (01:01:27):

Yes, I stopped flying a long time ago. So I've never actually seen one of these. So I can only speculate.

EW (01:01:35):

Lyriian said that in their expectation, even with the same airline and the same class of plane, it's a completely different system -

CW (01:01:41):

Yes.

EW (01:01:42):

- which I thought really answered Peter's question. The only way they're updated is when they're physically updated.

CW (01:01:48):

That's right. It's when they have no choice, but to replace the entire seat.

EW (01:01:53):

Yes.

CW (01:01:54):

Yeah, yeah. No. And it's the same way with cars, right? Before super modern cars that were running all this stuff, when was your stereo head updated? Never.

EW (01:02:09):

Yeah.

CW (01:02:10):

Yeah. That is not a thing that they spend a lot of time thinking about, I think, unless there's a major problem. And hopefully, hopefully, they're divorced from the rest of the plane systems sufficiently so that's not a problem. But anyway, no one.

EW (01:02:25):

Yes. Who's in charge of that? No one. Alright. I think that's about it. I may have some new clients soon.

CW (01:02:35):

You did it again.

EW (01:02:36):

Yeah. But I am taking the summer off from teaching.

CW (01:02:42):

So you can work more for other clients.

EW (01:02:44):

That wasn't what I meant to do.

CW (01:02:47):

I will refer you to our previous show where I discuss this.

EW (01:02:53):

Yes. Saturdays will be mine once again. I'm so looking forward to it. We did a retrospective for media advice, but then Classpert asked me for information about what they had done about the whole development of the course process.

EW (01:03:11):

And one of the questions was, in an effort for them to be able to recruit other authors, what did I get out of the class? And I didn't know how to answer. Why was it good that it was a cohort, in my opinion, for me? And the thing was, I started thinking about it.

EW (01:03:35):

All of the students who have been in the cohorts and participated, I feel about them like I do about the people that I managed at one point in my career. I'm interested. I want to keep in touch. I want to make sure they do well. I want to protect them.

EW (01:03:57):

This cohort thing totally engaged the managerial, protect them, make them do well, mentor forever part of me. And I did not expect the mama bear to come out.

CW (01:04:15):

That's cool.

EW (01:04:18):

If you are interested in attending the class, it's starting around August 20th. Your company should pay for it, definitely, definitely. And if you have 20 people at your company who want to take it, call Classpert. They would love to hear from you.

CW (01:04:35):

Sign up for our newsletter.

EW (01:04:38):

Oh, right. That will come up next week. So we're going to run a contest that has something to do with the newsletter that will be giving away three items. So probably one per social media channel.

CW (01:04:52):

Yeah. Sure.

EW (01:04:53):

And then, we'll do something that says, if you're on the newsletter, we'll randomly choose your email address and ask you if you want prizes.

CW (01:05:01):

Yep. Yep. Yep.

EW (01:05:02):

So we're not penalizing people who are already on the newsletter list, so it's not like you should exit and reenter. It's anybody who's already there at some point.

CW (01:05:15):

Yes.

EW (01:05:15):

The end of July, mid-July.

CW (01:05:17):

We'll figure that out.

EW (01:05:17):

We'll figure that out.

CW (01:05:19):

Alright.

EW (01:05:19):

Alright. I think that's it.

CW (01:05:22):

Yes. Okay.

EW (01:05:22):

Shall we have a little bit of Pooh time? Wait, that goes back to the beginning. Come on. It was hilarious. How was I not going to?

CW (01:05:32):

It's fine. It's fine. ... You didn't do your thank yous.

EW (01:05:38):

... I was going to see if you did it.

CW (01:05:40):

I'm not going to do it. I don't know the rant. Thank you for listening. Thank you to our Patreon supporters, subpoenas, for giving us money.

EW (01:05:58):

And Questions.

CW (01:05:59):

And questions. Thank you to our Slackamoles for giving us questions. Thank you to me for editing this and hopefully not screwing it up this week. And thank you for being patient with the edit last week. And thank you to Bear for not coughing through the show.

EW (01:06:17):

Bear's our dog.

CW (01:06:18):

Oh, thank you to Newark for sponsoring this week's show. We appreciate it ... greatly. Did I miss anything?

EW (01:06:29):

If you'd like to contact the show -

CW (01:06:30):

If you'd like to contact us or the show, you can't contact the show. It won't respond to you. If you'd like to contact us, you can email us at show@embedded.fm, or you could hit the contact link on embedded.fm, which just sends us an email at show@embedded.fm.

CW (01:06:46):

But anyway, you can also reach us on Twitter, @embeddedfm. You can reach us on Instagram @embeddedpodcast. You can reach us through the phone lines by dialing randomly until you manage to get my cell phone number.

EW (01:07:07):

Facebook, LinkedIn.

CW (01:07:09):

You could send a snail mail, but we never check the PO box so don't do that. Yeah, yeah. But, yeah, you can check things out. You can check all sorts of things out. I encourage you to do so.

EW (01:07:24):

We'll have a link to where you can sign up for the newsletter in the show notes. It's also on the website. And now Winnie the Pooh. [Winnie the Pooh excerpt].