Embedded

View Original

397: Owl

Transcript from 397: Owl with Elecia White and Christopher White.

EW (00:06):

Welcome to Embedded. I am Elecia White, here with Christopher White. Happy New Year.

CW (00:14):

It's not quite.

EW (00:16):

Almost.

CW (00:18):

Whole day left.

EW (00:19):

For us. Not for them.

CW (00:21):

Why? They're going to get it today.

EW (00:23):

They may not listen to it immediately.

CW (00:25):

Why would they not listen to it immediately?

EW (00:27):

Welcome to the world's most boring podcast.

CW (00:30):

Hey, I'm phoning it in today. I'm just going to say up front. I'm literally phoning it in. I'm going to call in from my phone. I can't make that work.

EW (00:40):

How are you?

CW (00:41):

I'm sleepy.

EW (00:43):

Yes. I assume that's my fault?

CW (00:46):

I don't know. I had strange dreams. I had a dream that involved mixing up the book I'm reading, Halo the video game, and Star Wars. And at some point a badly CGI'd Han Solo appeared in whatever dream I was watching. And I was commenting on how bad the CGI was for de-aging Han Solo. That was my dream.

EW (01:10):

Well, I actually have lots of things to talk about.

CW (01:13):

Other than my dreams?

EW (01:14):

I mean, we can stay on that topic if you -

CW (01:16):

As everyone knows, listening to people describe their dreams is the most exciting thing.

EW (01:21):

Yes.

CW (01:22):

Let's move on to your topics. I think they're better.

EW (01:25):

Okay. I have been talking about autonomous off-road trucks for two years now? More?

CW (01:35):

I mean, you've been working on it. I don't know that you've talked about it all that much on here.

EW (01:39):

I've talked a little bit about it, because it's for a client. So I can't say everything.

CW (01:42):

Sure.

EW (01:44):

But it's self-driving trucks, and they are off-road. So, roads are for wimps, and that makes it all a little bit more exciting. I've gotten to learn a lot of machine learning, mostly programmed in Python. But...I joined the team because I could put all of the hardware together, and I did.

EW (02:10):

And then the team kind of wandered off to other things, and I kind of got to play with whatever I wanted. And it turned out, while they went off to do other things, I made the system do reinforcement learning instead of regular learning, because it sounded like more fun.

CW (02:27):

...Did they ask you to do that, or you just went off and did that yourself?

EW (02:31):

It was the next logical step -

CW (02:34):

Sure.

EW (02:34):

- in their plan.

CW (02:34):

Got you.

EW (02:35):

And since I had finished their plan, I was like, "Well, heck. I can do that."

CW (02:39):

So...stop me if I'm revealing any important secrets. But the way it was learning before was primarily visual, was all visual. It's all visual.

EW (02:49):

It was all visual.

CW (02:50):

It's all visual. But it was doing things...based on having been trained. You'd get all the video data, and then you would train this neural network to learn to drive, or to learn to drive however it's doing it, on a big computer later. And then you'd stick it back on the truck, and see how it did.

EW (03:10):

And the idea was that they would do that every night, and they would partially retrain every night.

CW (03:19):

Yeah.

EW (03:20):

And that was one of the differences, between that and it being a true DNN with no -

CW (03:27):

Supervision.

EW (03:28):

No supervision. No particular features. It was all just camera stuff.

CW (03:33):

And so what you were talking about with what's called reinforcement learning, which you might want to describe, is taking that process and making it continuous while it's actually being driven by a human.

CW (03:45):

And then they can just take their hands off the wheel, and it continues to learn after that point. Is that kind of the highest level description? It learns while it does its own driving?

EW (03:56):

It learns while it's doing its own thing. And when it makes mistakes, that actually gives it more data to learn from.

CW (04:05):

And then the reinforcement part is you bill the car for the damage.

EW (04:10):

No.

CW (04:11):

And so it learns not to do that.

EW (04:14):

No, the reinforcement learning is having it learn all the time. And since this is really a backup system, a safety system, the fact that it can learn all the time is pretty easy, because we usually know what the right answer is. It's only in certain environments where everything has gone horribly wrong that you need our system.

CW (04:34):

Okay.

EW (04:35):

And it means that the system can adapt much better to different environments. As a safety system that only needs to run for 10 or 20 minutes at a time, it's great.

CW (04:46):

So you did that.

EW (04:47):

So I did that, and it's done. I mean -

CW (04:51):

Your project is done.

EW (04:52):

...With Covid, we didn't get to do all the field tests, and I figured we'd have to finish on the simulator. And the simulator's not great, but we did actually, well,...I didn't travel. My boss, manager, went out -

CW (05:12):

Your client.

EW (05:13):

My client, yes -

CW (05:14):

Yeah. He's not your manager or your boss.

EW (05:16):

- went out, and put it on trucks, and went around. And the first day it didn't work, because it's a Robot Operating System system. And those always have tweaks. And because it's a large system with lots of people playing in it. The second day it worked, but it didn't really work all as it should.

EW (05:42):

It worked about as well as it did on the simulator, but that meant the client and I actually spent a lot of time that night trying to get it to work. And we realized that we'd had a communication problem the whole time.

CW (05:56):

It was boats the whole time.

EW (05:59):

No, no. It had to do with colors. Colors.

CW (06:03):

Oh.

EW (06:04):

And once we fixed that, the next day it worked stunningly well. It worked so well that I looked back at the data and made sure that I could reproduce it. Because I was like, "What if we didn't do it right?" But no, it really, really did work that well. And now that the colors are fixed on the simulator, it works really stunningly well.

CW (06:25):

This is the classic problem of what happens to a lot of people when they're doing machine learning classes or projects is -

EW (06:33):

Color.

CW (06:33):

- RGB and BGR. It's a byte swapping thing.

EW (06:36):

And PNGs, and OpenCV, and -

CW (06:38):

And you really can't -

EW (06:39):

- reading versus writing.

CW (06:40):

You really can't tell there's a problem unless you pull up the image data at various stages.

EW (06:48):

Well, we were in TensorFlow, which I don't speak very well.

CW (06:51):

Yeah. You can do it. It's just not fun.

EW (06:53):

I knew it was possible, but I thought we had tried it already in the project. I'm sure we'd tried it in the project.

CW (06:58):

But then you can still convince yourself it's right. Because -

EW (07:00):

Yes.

CW (07:00):

- you're like, "Well, this looks weird to me, but everything was trained on this. So - "

EW (07:05):

So it must be right.

CW (07:05):

It's very confusing.

EW (07:06):

Yes.

CW (07:06):

You have to keep track of everything at every stage...It's like a USB plug. It's always going to be the other one.

EW (07:14):

It's always going to be the other one. So the final report for that goes out January 7th. Then I have, I don't know, 15 hours more of work to do packaging the software up so other people can use it.

EW (07:27):

And...I mean, I guess I'm a little tired too, because this is super exciting to actually have it work. I mean all this time, I wasn't really sure that it would. And then when it gets on the trucks, it -

CW (07:41):

Only has to work once. The report's written. It can stop working on January 8th.

EW (07:45):

No. No. No, now that it works, I want to see it do a lot more. We'll see if the contract for my client is extended. And then the other thing I have going on is, I've been working on an underwater, deep sea science platform, and that's done.

EW (08:07):

I billed the last invoice, and finished the documentation, and I have a couple of questions that I answered today. But it's done. And those are my two big clients.

CW (08:22):

Alright. Well then, time to retire.

EW (08:24):

Well, I'm taking January off except for the other thing I'm doing.

CW (08:29):

January minus a week.

EW (08:31):

Well, that's true. January 7th is when the report gets finished.

CW (08:34):

And off means you're just teaching your class.

EW (08:37):

Right.

CW (08:39):

I just want to establish what off means to you, Elecia. Off means I have one job, not four.

EW (08:45):

It'll be so nice. I'm so burnt out. Sometimes my brain is just like, "No. No, you may not have any more neurons today. It's over. We're tired." And...I know I did this to myself.

CW (08:59):

How do you think brains work? Do you think there's a conveyor belt with neurons that dump them into a fire and the burning of the neurons contributes to thinking?

EW (09:07):

Yes, that's exactly what I think.

CW (09:08):

And then when you run out of neurons, it just doesn't work anymore. And you have to grow some more in a -

EW (09:13):

Vat.

CW (09:14):

I was going to say a forest.

EW (09:16):

Alright.

CW (09:16):

But your way works too.

EW (09:19):

I got a new origami book that I'm super excited about. It's a curved-crease origami book, and it's got some math in it. And it's less, "Here are some pretty patterns. Here's a little bit theory," and more, "Here's a lot of theory and a few pretty patterns." And I am totally excited, except I got it in early December.

EW (09:46):

And several times I've picked it up, wanting to really investigate some stuff. And my brain's just like, "No." And I had one weekend that was relatively light on work. And I actually got through some.

CW (10:03):

Christmas weekend.

EW (10:04):

Was it Christmas weekend?

CW (10:06):

Yeah. Because you didn't have to teach a class that morning.

EW (10:10):

Right. So I'm looking forward to that. There's going to be probably a Matplotlib adventure and differential geometry? Algebraic geometry?

CW (10:22):

No, no, no. He told me what it was.

EW (10:23):

Topology?

CW (10:24):

Here, here, I'll read it. "It would be closer to geometric group theory/topology/geometry in low dimensions. Algebraic geometry is a different field which treats curves as ideals in rings." Which of course I know precisely what that means as everyone does.

EW (10:40):

Yeah. Anyway, we're getting beyond geometry into other things.

CW (10:45):

Ideals in rings is when you have the onion ring, and you get just the right amount of mustard, and just the right amount of ketchup. I have no idea what ideals in rings are. "Further -

EW (10:54):

Manifolds, I think, are what I need.

CW (10:55):

- you can quotient the plane by hexagons, and you get a torus if done right." So I'll leave you to discuss that with him, because -

EW (11:03):

Maybe I need to talk directly to your brother?

CW (11:05):

I don't think doing postgraduate-level math via text message is all that easy, but you enjoy that.

EW (11:16):

Well, I would if I had a little bit more time. So in January, yes. And there'll be some pretty weird origami.

CW (11:24):

You should do some YouTube videos.

EW (11:27):

On what?

CW (11:27):

Origami and whatever that kind of math is.

EW (11:31):

That would require me to understand it.

CW (11:33):

[Nah]. Have you seen some of these YouTube videos? I saw a guy who spent a half an hour trying to make bismuth crystals, and he had a whole chemistry lab. But it was clear he had encountered it maybe once before, the lab part.

EW (11:44):

Was this the Pepto Bismol - ?

CW (11:45):

Yeah. Yeah. He took -

EW (11:47):

- bismuth crystals?

CW (11:48):

- $120 worth of Pepto Bismol,...he bought generic so it would be cheaper, and turned it into a crystal about the size of your thumbnail after nearly blowing up his house, it seemed.

EW (12:01):

Well, now you're starting to make this video sound good.

CW (12:03):

...I'll put it in the link. And I don't want to be too hard on the guy. But he does play fast and loose with safety, and he mentions that he did a bunch of dangerous stuff. He was doing stuff like torching beakers directly.

EW (12:17):

Oh.

CW (12:18):

And it just seemed like a bunch of stuff that should have been done in crucibles, and it was melting into the glass. And it was like, "This is not how you're supposed to be doing stuff." But, anyway. Yeah, no, it was really interesting...Bismuth is an interesting material. The only reason I think of it, wow, we are off topic immediately.

CW (12:33):

It's a metal, and it's an interesting metal. And it's very expensive. It's seven or ten times more rare than silver. So it's a pretty expensive metal, even though they put it in Pepto. They don't put a lot in Pepto. And you can crystallize it. And when you make the crystals, they're really pretty. Because...when it oxidizes, -

EW (12:55):

The rainbow thing.

CW (12:55):

- it does a really neat, thin film effect with the oxidation layer that gives you a rainbow effect. So there's actually a store the guy pointed to on his YouTube video where somebody who has made this into a profession makes these large sculptures out of bismuth. He can control it -

EW (13:13):

But probably not Pepto Bismol.

CW (13:14):

No, I think he sources it in a much more efficient way. But he can control the oxidation so they can be either a rainbow, or he can choose the color. But they're very expensive pieces. They're several hundred dollars a piece, and we think of it as Pepto Bismol. How can that be expensive? But anyway, that is not a topic for today.

EW (13:32):

I don't know. Bismuth is a weird metal.

CW (13:34):

Yeah. Yeah.

EW (13:36):

What is it useful for?

CW (13:38):

Other than Pepto?

EW (13:39):

Yeah.

CW (13:39):

I don't know.

EW (13:41):

Alright. Sorry. What is a looper?

CW (13:46):

Oh, a looper. It's not the movie with Bruce Willis and the guy from Third Rock from the Sun. Why are you asking?

EW (13:57):

Because I heard you got one.

CW (13:58):

No, I didn't. I didn't. I was going to. So this is a music thing. Everyone who doesn't want to hear about music can tune out. They have these things called loop pedals for guitar and other stuff. And basically the short description is -

EW (14:12):

Wait, wait, wait. Qw have to stop there. Because you said pedals for guitars.

CW (14:15):

Yeah.

EW (14:16):

Christopher also showed me a fart pedal for a guitar.

CW (14:20):

I didn't show it to you. I described it.

EW (14:22):

And I so want to get one, and rebrand it, and send it to someone, -

CW (14:26):

Yeah.

EW (14:26):

- and then ask them how they like their guitar pedal. But I have a limited number of people -

CW (14:31):

Are you keeping track of these links? You have bismuth, fart pedal.

EW (14:36):

Okay. Okay. Looper guitar pedal.

CW (14:40):

This is a looper. So the short description is it will record a short segment as you play, and then it will start playing it back. And then you can record on top of that. And so you can improvise these layers of a song, and they continue to play. So you can play a whole chord progression say, and then just let that go.

CW (14:59):

And then you can solo over it to practice, or you can layer chords, and some percussion, and some other things. And you've got a whole song, piece, that you can kind of improvise over. And then you can save that, and you can piece songs together this way, or a lot of people do it live.

CW (15:13):

...People who are busking or are playing in small clubs will often be like a one-man band with just a loop box. And they'll start building up a song as they go. And then it's this rich kind of thing once they've got several going. So I got a gift certificate for Sweetwater, which is a music store, and I didn't know what with it.

CW (15:31):

And I'd been thinking about loop pedals for a while for playing with synths, and guitar, and even doing some drum stuff. But they were pretty expensive, and I had kind of decided on one, but the pedals themselves have limitations.

CW (15:44):

And I realized there must be some stuff for the iPad that does this. And I looked, and there were several really nice apps that had more features than the pedals that cost $5 -

EW (15:54):

Ouch.

CW (15:56):

- instead of several hundred. The really, really full-featured loop pedals were six or seven hundred dollars. And you can get an -

EW (16:03):

Wow.

CW (16:03):

- okay one for 100 to 200. Anyway, so, I decided, "Well, I could just use that, but then I don't have the pedal part." It's really hard to start and stop recording of a loop...if there're multiple loops. You can have multiple loops going, and you can switch to them, and start them recording.

CW (16:25):

So to arm recording or turn off things, you need to interact with the app...If it's an iPad, it's touch, but you kind of need your hands. You're playing guitar. Especially if something's running in real time, like a loop thing. So...if you want to do something in time, like start recording a loop, you can't push the button and then -

EW (16:43):

Oh, when you showed it to me, you were pushing the buttons with your hands and it didn't look natural.

CW (16:48):

Right, right. So you need a foot switch, and I realized, "Well, there was that project I was going to build on the Nucleo board." I think I talked about it early last year maybe? I don't know when I started it, but I abandoned it.

CW (17:05):

And the idea was to have a foot pedal that could just be configured to arbitrarily send MIDI messages, which is Musical Instrument Digital Interface, which is a serial protocol to control all kinds of musical equipment, but also software.

CW (17:18):

I was going to have a foot pedal with a bunch of buttons that I could configure to send those messages, so I could control anything and configure it. And so I said, "Somebody's got to have built that already." So I went and looked around, and there were several available already.

CW (17:33):

And I found a really cool one that has little screens for every button, has six buttons, it's completely configurable by an app. I can hook it into the iPad via Bluetooth. So I don't have to plug it in, and then I can push the buttons. And it talks to the looper app on the iPad.

CW (17:46):

And I've got a more than full-featured loop pedal system than if I'd bought a standalone. Plus it's upgradeable, because I can just switch out the app for a different app or get the next version. And it cost me less than a really good loop pedal. So that's kind of the description of the whole loop saga.

EW (18:06):

Is that your favorite Christmas present?

CW (18:08):

No.

EW (18:09):

You sound so offended.

CW (18:11):

Well, my favorite Christmas present is not going to be one I bought myself.

EW (18:14):

Mental note : don't tell him that my favorite Christmas present is the curved origami book I bought myself. Okay, go ahead. What was your favorite Christmas present?

CW (18:25):

I think the NASA art book has got to be up there, that you got me. It is a book of all of the concept art that...some of the space systems contractors and NASA folks made to kind of sell missions to NASA or to other -

EW (18:51):

To the public. Yeah.

CW (18:51):

- approval bodies or to the public. So it's really a history from the beginning of all the different ships, and lunar landers, and stuff. And this isn't engineering drawings. This is paintings of what they think the stuff will look like. And -

EW (19:07):

But some of them were based on engineering drawings.

CW (19:09):

Yeah. And some of them were way out there...There was one for a space shuttle that was from 1964...It looked like the hanger scene from Star Wars. So somebody had seen that when they were doing designs for the first Star Wars movie.

CW (19:26):

And it even had spherical space stations...outside the hanger opening. And they had a big Delta Wing. Anyway, so there's some fanciful stuff in there too, but a lot of it's pretty interesting. Yeah. I keep meaning to sit down and thoroughly go through that.

EW (19:46):

Yeah. We both got good books. Let's see. Oh, I have a note here to tell people about the newsletter, where formally we had a newsletter that was basically hacked together, -

CW (20:02):

The RSS feed.

EW (20:02):

- RSS feed that went occasionally and often -

CW (20:06):

Didn't work at all.

EW (20:07):

- didn't work at all. We now have a proper newsletter that tells what's happening, what happened last week, what happens next week, maybe a couple of quotes, maybe a couple of off-topic, entertaining anecdotes.

EW (20:22):

So if you would like to sign up for the newsletter and know what shows have happened recently, what transcripts are available, or what shows are going to happen, it's on our website.

CW (20:33):

Yeah. And we're starting small.

EW (20:36):

Subscribe.

CW (20:37):

We're kind of adding to it maybe as time goes on.

EW (20:39):

Yes...I actually have expansion plans, but at this point I'm still just trying to make sure it goes every week.

CW (20:49):

Our website is terrible, and I cannot see where to subscribe to this.

EW (20:54):

It should be under subscribe.

CW (20:56):

It is, but it's at the very bottom. And on mine, it doesn't render that part until you scroll down, so we might want to bubble that up to somewhere...more useful, put it on top or something. But if you go to Embedded FM, embedded.fm/subscribe, that is the place to sign up. It's free.

EW (21:19):

Oh yeah. It's totally free.

CW (21:22):

People have to pay for newsletters now. I don't understand.

EW (21:25):

If you would like to support the show, you can go to Patreon/embedded, or embeddedfm, or something.

CW (21:35):

It's /embedded.

EW (21:36):

/embedded. And you can sign up there.

CW (21:41):

And join our -

EW (21:42):

Join our Slack if you want to, but you don't have to.

CW (21:45):

But you can.

EW (21:45):

But you can.

CW (21:45):

But you don't have to.

EW (21:47):

Job board is there, and people talk. And it's really cool.

CW (21:52):

Okay. What's next?

EW (21:54):

Class, I guess.

CW (21:56):

Alright. What's going on with class? You're teaching this class. You're about at the halfway point?

EW (22:00):

We are at the halfway point.

CW (22:01):

Halfway point. Okay.

EW (22:02):

We're starting to get into final projects. So today I was trying to write down what their final project should be and how it would be graded.

CW (22:12):

But...they can choose what they want to do. It's just...the elements it has to have and how you're going to kind of grade it.

EW (22:21):

Yeah.

CW (22:22):

It's not, "You have to go build a submarine."

EW (22:25):

No. No, no, no. That's been one of the things that I wasn't sure about with the class, was giving such a wide open, free-range option for the final project. But this actually turned out to be pretty cool, because the students learn more from each other than they do from me sometimes.

EW (22:42):

No, they have to turn in a video, and a write-up report, and some code, and the idea is the final project will be something they can take to a job interview.

CW (22:53):

Okay. So it doesn't even have to be polished or fully working.

EW (22:58):

No, I want it to be something they've thought about and that they can talk about. And it doesn't have to be perfect. It isn't a product. It's a job interview.

CW (23:07):

Yeah. Okay.

EW (23:09):

So...do you grade them on completeness or on clarity? Does it matter if their code is super spiffy? I don't really care if their video is super spiffy. I just want that to make sure that the system works.

EW (23:24):

Because I'm not going to read the code enough to figure out if it works. Anyway, that's what I've been working on this week. But next week I have to do chapter seven.

CW (23:36):

What's chapter seven? Is that bankruptcy?

EW (23:39):

No, it's uploading code. It's my least favorite chapter in the whole book.

CW (23:45):

You just git push main. Git push origin main, and you type your credentials.

EW (23:50):

What?

CW (23:50):

To upload code.

EW (23:52):

Yeah. Anyway -

CW (23:55):

...So this is -

EW (23:58):

Chapter seven is about bootloaders.

CW (24:01):

Bootloaders. I just say download code.

EW (24:04):

Download code.

CW (24:05):

Yeah.

EW (24:05):

Upload code.

CW (24:06):

It doesn't matter. It just -

EW (24:06):

Over-the-air updates.

CW (24:08):

Putting the thing -

EW (24:09):

Fwup.

CW (24:09):

Taking the bits and putting the bits in the bops.

EW (24:15):

But the thing is, this is my least favorite chapter in the book, because it doesn't go over the right things. If you have a bootloader, it implies so much else about your system. Being able to update code means you have an Internet of Things sort of system.

CW (24:32):

It means you have a certain kind of flash, maybe certain flash with capabilities to store, and -

EW (24:38):

Well, the book kind of goes over that.

CW (24:40):

Okay.

EW (24:40):

It's more, "Well, if you can update code, you probably need to be to talking about heartbeats, and logging remotely, and how to deal with millions of systems, and distributed systems, and Internet of Things," all the things Tyler talked about.

CW (24:55):

Do you really need millions of systems though? Because I have lots of things that are probably hundreds or thousands volumes that can do that. My stupid MIDI pedal. I doubt they've sold more than a couple thousand of those. And it does firmware update -

EW (25:10):

But they do need to know which units have firmware updated. And if there are any problems attributable to a certain version.

CW (25:18):

I think that's something that's very desirable and people should do. I still think there's a lot of companies that aren't doing that.

EW (25:23):

It should be something that was in the book.

CW (25:25):

Okay.

EW (25:26):

And then the other part of that was security. That was touched on in the book, like, "Don't forget." But for the lecture, I don't really want to talk about uploading code, because for the most part, I don't talk about whatever the book has. I try to extend it somehow.

EW (25:46):

And I can't decide whether to talk about IoT management or security. On one hand I want to talk about security and all the easy things you can and should do. On the other hand, I kind of think IoT management is something that's more useful going forward.

CW (26:03):

So do you think chapter seven was lacking because it was ten years ago now, and things have become a little more sophisticated in that realm? I mean, in 2011, I wasn't thinking a lot about IoT management even at places that should have been thinking about it.

EW (26:20):

I mean, I'd been at ShotSpotter, so I already had experience with trying to manage large systems -

CW (26:25):

Yeah.

EW (26:26):

- with limited data limited and limited communication, and we'd done a code update. And so -

CW (26:34):

But it still was kind of rare.

EW (26:36):

Oh, yeah.

CW (26:36):

Yeah.

EW (26:36):

No, it was kind of rare.

CW (26:38):

Well, okay. So I mean,...the nice thing is some of the IoT management stuff is now packaged. There's places that do it. So you could say, "Here are several places to go and learn about this. Here's what it does," spend two slides on that, and then talk more about security. I don't think you should not talk about either one at all.

EW (27:04):

So I should just go ahead and do a grab bag instead of trying to focus on something?

CW (27:08):

Yeah. But I think you can gloss over the IoT management part just to say what it means and some places to learn more and where that would be provided, because you can't really do it on your own.

CW (27:20):

If you're going to get to that point, your students are going to be in a company with a lot of people that are choosing a platform with which to do that. They're not going to build it themselves.

CW (27:33):

So the meaning of that is more important than the "how you do this," because the "how you do this" is going to depend on what they end up choosing. Am I making sense? I wouldn't spend a lecture teaching how to do IoT management, because the answer to that is quicksand.

EW (27:51):

And changing.

CW (27:54):

That's what I meant.

EW (27:55):

Well, both that you can get lost in it and whatever I say will be out of date in six months, because it's a landscape that's changing quickly.

CW (28:05):

Whereas security, there's several bedrock concepts.

EW (28:11):

And...I mean, I want to talk about -Wall, and static checkers, and what it means when your stack overflows, -

CW (28:18):

Oh, so -

EW (28:21):

- what does that actually mean?

CW (28:22):

...Oh, okay. So that that's even further down than I was thinking...When you were talking about firmware update, I was thinking, well, digital signatures, and certificates, and stuff.

EW (28:34):

Oh, I think that's in the book, or I'll cover that at least a little bit. But that's back to, for the most part, you do whatever your vendor tells you to do.

CW (28:42):

...The things you're talking about seem like a separate topic from uploading code.

EW (28:48):

Well, the -Wall, and the static checkers, and the security, understanding buffer overflows, those all fall into hacking code, how code gets hacked, how code goes from a distributed network to a botnet.

EW (29:07):

And I do associate that with firmware update, because it's one of those areas that it's easy to hack somebody's code if you can do a firmware update.

CW (29:18):

Okay. I mean, it's not limited to that. There are exploits that don't require them to replace the firmware on things, but, yeah.

EW (29:29):

No, but it's good to understand how those things are related.

CW (29:33):

Sure. Yeah.

EW (29:34):

And that there are top ten security checklists, and they're for designing, and for coding, and you should pay attention to them.

CW (29:41):

And that's where...the cryptographic and digital signature stuff comes in. Because if you're doing proper checking, and somebody modifies the firmware, you can flag that.

EW (29:51):

Yeah. And you should use your hardware for that as best you can. Okay. So you think I should just do everything. This is why my lectures keep getting longer and longer.

CW (30:01):

But...I think five minutes on IoT management is more than enough.

EW (30:06):

Okay.

CW (30:06):

Just define it, say what parts there are, say, what it can do for you, say where you can learn more, and who provides that kind of service. And then you're out.

EW (30:14):

Yeah. It looks like I have a slide that's just a list of vendors at this point. Okay. So that's class for next week and class for last week. Oh, DMA. Did you like what I did with DMA? I made you read it five times.

CW (30:33):

It was good. It was good. It's a very difficult topic. I think it may be...one of the most intimidating things, at least for me was one of the most intimidating things to kind of learn about. And I'd known what it was for a long time, because I think on IBM PCs, you had to mess with it for certain expansion cards sometimes.

CW (30:56):

There was some DMA thing in the BIOS. And anyway, I don't remember if the Apple II had any DMA, I don't think it did. That would be way before DMA was a common thing.

EW (31:10):

Well, and DMA in computers and DMA in microcontrollers is a bit different. I mean, it isn't really, but the way it's used is often different. No?

CW (31:19):

I don't really think so. When I was doing it for one job, it was setting up descriptors and...talking to a data acquisition board, just a high-speed DAQ or ADC. It was very similar. I mean, they had an API that made it a little bit easier, but it was still, "Here's some buffers. Tell me when you're done," which is pretty much what DMA is.

CW (31:45):

"Here's some buffers. And tell me what you're done." No, I liked your stuff. And...there's two parts of DMA, and both of them can be confusing.

CW (31:57):

One is...just what it is, and...what it means structurally, like this unit has autonomy to take memory and to put things in memory or take things out of memory, and how that looks kind of visually in a block diagram. I think that's an important part of understanding what DMA is.

CW (32:17):

But the hard part for me has always been, "How do I do it? How do I structure a program that uses DMA?" Because it always verges into that area that I've never been great at, which is asynchronous I/O, where you fire something off.

CW (32:33):

And then somebody comes back and tells you, when you're in the middle of something else, perhaps, "Oh, hey, that stuff you asked for is here." It's always been difficult for me to try to structure code, because I come from learning to code back when Pac-Man was new and -

EW (32:49):

Not true.

CW (32:50):

- everything was kind of logical flow, immediate mode, kind of this do this, and this, and this, if-then-else, and then maybe loop. Asynchronous stuff has always been just a little bit, makes my head itch, because it's like, "Well, okay, how do I structure code if something can happen at any time?"

EW (33:07):

Oh.

CW (33:07):

So that's the hard part about DMA...for me, it's like, "Okay, how do I structure code if I could get this message from the serial port at any time? What does that look like?"

EW (33:19):

You said that, and then I tried to implement...some of your notes, but I didn't understand what you were saying. Because I approach it from the perspective of battery systems. If your goal is to always be asleep, -

CW (33:37):

Sure, sure.

EW (33:38):

- and you wake up on DMA interrupts, that makes so much sense.

CW (33:43):

Oh, it makes sense to me too. It makes sense to me too.

EW (33:46):

But that's the asynchronous I/O is, yeah, sure. You handle it when you get a chance. But most importantly, you set these things up so you can go to sleep and wake up when they're done.

CW (33:56):

Sure. And that all makes sense. And I know how to do this now. But even now, sometimes I have a little hiccup and realize that, "Oh,...you have to structure it as an event-handling system."

EW (34:07):

Yes. Yes.

CW (34:08):

And so just talking about DMA, off in a corner, I don't think is sufficient. I think it kind of -

EW (34:15):

Oh, okay.

CW (34:15):

- puts tendrils out into the architecture of your program, saying, "Okay, you have to have an event-handling system or some structure to your program that makes DMA meaningful." Because I've seen a lot of people use DMA. And it's like, "Why are you doing this? You're polling, waiting for the DMA to complete. You shouldn't have bothered."

EW (34:35):

You should have been asleep.

CW (34:36):

Should have been asleep or doing something else.

EW (34:38):

Right.

CW (34:38):

I mean the point of DMA is the CPU is either free to be asleep or free to be doing something else.

CW (34:45):

Keeping your UI interactive, that's one big thing that people don't understand sometimes is, if your CPU's doing a lot of I/O, and you have a display and a touchscreen maybe, and you have a user interface, all these microcontrollers only have one core usually these days. No, they have more sometimes.

CW (35:03):

So it's hard to write a program that's snappy if you're handling all that stuff kind of on demand and with polling. And DMA allows you to just fire stuff off and have it taken care of for you, and then your UI can be updating and stuff while that's happening. And so that's a big piece.

CW (35:22):

That's almost like multi-threaded code, except your thread is your SPI master controller or your DAQ that can handle DMA. You're kind of saying, "Okay, you're a thread that can gather data and put it in memory."

CW (35:39):

But that leads to all the usual thread problems of, "This is happening out of order," or I'm getting a notification when I may be in the middle of something else.

EW (35:51):

They always find that the difficulty for DMA for a lot of people is just the setup, the configuration.

CW (36:00):

Which is also difficult. Yes.

EW (36:03):

And so that was -

CW (36:03):

And it's different on every processor, right?

EW (36:05):

Right.

CW (36:05):

Yeah.

EW (36:06):

And...I decided to do a metaphor about DMA standing for dry cleaning micro-assistance.

CW (36:14):

Okay.

EW (36:15):

And you get a minion. You get an assistant...Because you normally pick up your dry cleaning, and take it home, and put it in your closet. But once you have an assistant, it's often harder to explain what you want to do to someone else than to do it yourself.

EW (36:33):

But eventually if you get busy enough, you go ahead and try to explain to the assistant, "This is where my dry cleaners is. This is where I want you to put it in my closet. This is what I want you to do if my closet's full. This is how many items you should be picking up."

EW (36:48):

"Oh, here's my ticket. Go, go, go. Go get my clothes, and text me when you're done." And all of these things are kind of like what the DMA is doing. You're setting it up so that a minion thread is -

CW (37:01):

Well, it's not really a thread. I don't want to get that confused.

EW (37:04):

The peripheral.

CW (37:04):

Yeah.

EW (37:04):

Something not -

CW (37:06):

Some other autonomous unit.

EW (37:07):

- important. Autonomous unit. I'm going to go back to minion -

CW (37:11):

Minion's better.

EW (37:13):

- is doing something. And for the most part, that can be a huge luxury if you need it. But if you don't need it, it's just a pain in the neck -

CW (37:22):

Oh, yeah.

EW (37:22):

- to have somebody else do it.

CW (37:23):

Yeah.

EW (37:25):

So yeah, I'm looking forward to fine tuning that analogy. We'll see how the students like it.

CW (37:33):

Yeah. That's a tough topic. And it's tough, because it covers a lot of different use cases too.

EW (37:40):

Yeah. I only ended up doing DMA into the memory and I talk a little bit about memory to memory DMA as a fast memcpy, but I don't really talk about DMA out. And I talk about DMA and circular buffers, but I don't -

CW (37:56):

That's probably good, because that's pretty hard.

EW (37:59):

I don't know if I got into enough detail there. Anyway. Yes. Class. Class is going to take infinite amounts of time for the rest of my life.

CW (38:09):

It can't.

EW (38:10):

It can't.

CW (38:11):

You're done it in five weeks. And then you just repeat it, unless you're going to start from scratch.

EW (38:18):

Well -

CW (38:19):

What do you mean "Well?"

EW (38:21):

I'm not going to start from scratch, but there are things I want to change.

CW (38:24):

Sure. But that's not infinite.

EW (38:26):

No. It feels infinite right now, but it's not. So that's what I am up to. If you would like to hire me, don't even consider contacting me until February. And by the way, somebody asked me to do something involving a conference. And I thought it was kind of interesting, but it was for January 23rd. And I said, "No."

CW (38:45):

That was after we talked about it?

EW (38:48):

Well, yes.

CW (38:49):

You're telling me like I didn't know about this already.

EW (38:52):

I know, but...I didn't click "Yes."

CW (38:56):

But you were thinking about it.

EW (38:57):

Well, it was kind of interesting, but I didn't really want to do it. I mean, it was kind of interesting. I didn't really want to do it. I'd rather do origami for sure.

CW (39:08):

I clicked "Yes." So I should be ridiculed.

EW (39:12):

Christopher has a new contract. Christopher has a new contract.

CW (39:16):

Yeah. So we'll see how that goes.

EW (39:20):

I may help out if you want. In February. It is so hard to work the last two weeks when everybody's been off. And I've just been trying to grind out all the things I needed to do by the end of the year.

CW (39:37):

Yeah.

EW (39:38):

It has been so hard.

CW (39:38):

Having two contracts wrap up at the same time in early January seemed like a interesting bit of planning on someone's part.

EW (39:46):

Well -

CW (39:46):

I'm not saying it was your idea, but -

EW (39:48):

I mean, the trucks were supposed to be over in October.

CW (39:50):

Yeah.

EW (39:50):

But then we got an extension.

CW (39:51):

Yeah.

EW (39:51):

And then we got to drive them, and that was super exciting.

CW (39:54):

Yeah.

EW (39:55):

Yeah. And the science platform I was done with in October.

CW (40:02):

2019.

EW (40:03):

Well, no, no, no. I finished everything in October. But they didn't start testing it until December 15th. So that led to a lot of -

CW (40:11):

Yeah.

EW (40:12):

- back and forthing. So yes. Origami would be very exciting. Oh, I should put a link in to the origami book in case anybody wants to talk to me about it.

CW (40:23):

And the NASA book.

EW (40:25):

The book.

CW (40:26):

I don't know if there was anything else. Anyway. Yeah.

EW (40:30):

Did you learn anything interesting this year?

CW (40:32):

Did I learn anything interesting this year? I learned, what did I learn? Nothing technical really. I did learn that practicing actually works, and this has taken me a long time to learn. Much like I learned that doing homework allows you to get better grades, which I learned at 19. Was it 19? Roughly 19.

EW (41:00):

Yeah.

CW (41:01):

19 or 20.

EW (41:01):

When did we start dating?

CW (41:03):

I think I was 19. Much like that, although it's taken me 40 years to learn, is that sustained practice for a very long time allows you to get better at things. Whereas I thought if you just do a half an hour, a few times a week, maybe, working on some exercises, this is with music, I can sustain a high level of professional playing,

CW (41:32):

But it turns out if you play two hours or three hours every day, I'm not quite making that, but if you get closer to that, you can actually improve, which is a sad realization. Because I hate practicing.

EW (41:47):

Most people do.

CW (41:49):

So that's one thing I've actually learned this year is that, I don't want to say practice makes perfect, because that's stupid, but focused practice actually. And you can practice wrong too. And I think I've done that before. That's the other thing is you can practice wrong.

CW (42:06):

Because I can come down here, and practice for two hours on drums every day, and not get any better if I just noodle, do some exercises, don't record, and play back, and self criticize. But if you practice the right way with the right focus and allow yourself to have some iteration cycles, you can actually get better at things.

EW (42:28):

The critical feedback is very important.

CW (42:31):

Yeah.

EW (42:32):

And horrible. Truly awful.

CW (42:34):

Well, and it's hard to get good at doing it to yourself.

EW (42:37):

Yeah.

CW (42:38):

Which is why teachers are useful. But, yeah. But yeah, I think that's the big thing I've learned this year. Oh, oh. The other thing. The other thing. There are two things I learned this year that I've hated knowing and resisted. One is the practicing and the other is exercise. It's good for you.

CW (43:04):

I've always been a person who struggles with various mental health problems, and I expected to do much worse this year than I have done. And part of reason I've done better is I'm exercising every day at a higher level of intensity than I used to.

EW (43:22):

Some of which is drum practice.

CW (43:24):

Some of which is drum practice, but not a lot of it. Maybe 30% is drum practice. But yeah, I wouldn't say I feel great mentally, but the peaks are smoothed out, and the -

EW (43:39):

Troughs.

CW (43:40):

The troughs are smoothed out...Yeah. So it's been interesting.

EW (43:46):

Yeah. Yeah. I think the exercises helped me too. Chris got a rowing machine, and I was mostly just going along because why argue.

CW (43:57):

No, one of the things I was supposed to be doing as part of my mental health stuff was more intense exercise, because, full disclosure, I have anxiety around intense exercise. So in order to get -

EW (44:14):

Around your heart.

CW (44:15):

Yeah. Around heart rate and stuff. So in order to get over that, I needed to do things that made me anxious about that so I can kind of get exposure therapy around that. And we have an exercise bike, but it's not quite the same. And I got very used to riding it. And it doesn't do anything for your upper body.

CW (44:33):

And the rowing, I thought, "Well, okay, this is something people recommend that works out a huge quantity of your body all at once. And that's likely to be a very intense thing, and it'll be different. So I won't have anxiety associated with it yet." Anyway, too much detail. But rowing was the choice for a reason.

EW (44:53):

But...I was just like, "Yeah, sure, whatever. I'll just keep walking my two to four miles in the hilly area and not worry about it," got to say hello to all the neighbors in relatively Covid-safe times. But then I started using the rowing machine. It is exhausting, but I have more muscles now.

CW (45:21):

I think you have the same number.

EW (45:23):

It feels like more. And I get the post-workout achiness, but I don't get as many joint achinesses as I was starting to get.

CW (45:34):

Well, that's the thing. The other thing is I was having a lot of problem with my leg earlier this year.

EW (45:39):

Yeah.

CW (45:39):

To the point where I was having difficulty walking, sitting for a long time, lots of stuff was causing a serious problem with my leg and started rowing, and it was difficult to row with my leg.

CW (45:51):

But after about two months of doing it, my leg was completely fixed. So I think part of it was Covid and sitting on my butt for, at that point, a year and a half.

EW (46:05):

Anyway, buy our rowing machine.

CW (46:06):

What? No.

EW (46:07):

No. Here's an Amazon associate link to our rowing machine. No, I'm not going to do that.

CW (46:13):

You asked me what I learned this year. Those are the things I learned this year. They're irritating things that people tell you all the time. Practice is important. Practicing correctly is important. And exercise actually is helpful for a number of things. So, sorry.

EW (46:27):

No, I asked.

CW (46:27):

...No, the audience.

EW (46:29):

Oh.

CW (46:29):

If you were hoping that either of those things were false, because I've been hoping those things were false for my whole life.

EW (46:34):

And flossing is important? Are you going to go with that one too? You have no empirical proof of that, because your teeth are freaking perfect.

CW (46:41):

They're not perfect.

EW (46:43):

Annoyingly perfect.

CW (46:43):

I was about to go to the dentist before the latest disaster struck. They're not perfect. My teeth are shifting because of the clenching I do every night I think. Yeah. I can tell how well I slept by whether or not my teeth fit together in the morning.

EW (47:03):

How many cavities have you had in your life?

CW (47:05):

One.

EW (47:06):

Yeah.

CW (47:07):

I probably have 17 right now, but there's no way to know.

EW (47:10):

Until you know about them, they don't exist. Schrodinger's cavities.

CW (47:18):

But yeah, I have one filling. To be fair, I had braces, which makes up for a great deal of dental work on the balance in terms of -

EW (47:29):

No, I'm just saying -

CW (47:29):

- pain and suffering.

EW (47:31):

- you got good genes for -

CW (47:32):

I got good genes, but...the teeth were not oriented correctly. And so, while some people might have to have fillings, I had to have a medieval rack in my palate for six months. So it depends on which you'd prefer.

EW (47:48):

Do you think this is why people listen to the show?

CW (47:50):

I don't care.

EW (47:50):

Why do people listen to the show?

CW (47:51):

I don't care. It's New Year's week. Nobody's going to listen to this.

EW (47:54):

Almost New Year's Eve.

CW (47:54):

This isn't even going to air. I'm not going to put this out.

EW (47:56):

What?

CW (47:57):

Yeah.

EW (47:58):

Oh.

CW (47:58):

I'll put it on our SoundCloud.

EW (48:01):

We don't have a SoundCloud.

CW (48:02):

Precisely.

EW (48:05):

Fine. I will go back and read "Geometry with an Introduction to Cosmic Topology."

CW (48:09):

We aren't done yet. We've got to put in ten minutes. Yeah.

EW (48:13):

We don't have to do anything.

CW (48:14):

Have we covered everything?

EW (48:16):

We covered everything that was on my list.

CW (48:18):

We didn't talk about what I was doing. We only talked about what you were doing.

EW (48:20):

Oh, wait. No, you're right. You're right. You're right. You're right...Well, we talked that you have a new client, but what are you working on these days, Christopher?

CW (48:28):

Well, my old client, the whole radar thing. That's all working.

EW (48:31):

Yeah.

CW (48:31):

Speaking of things that work.

EW (48:33):

And it's exciting to have things work.

CW (48:34):

Yeah. So I got that working with the CAN bus, and the radar, and driving around with the video, and collecting data. So that's all -

EW (48:41):

I get to drive. It's so fun.

CW (48:41):

- real cool. I got to learn some 3D printing...So I had point-to-point wiring from the Xavier. The Xavier is the computer I'm using. It's from NVIDIA. It's a little brick. Maybe, I don't know, 3x4x4 inches, something like that. And it's got a Raspberry Pi style interface on the side.

CW (49:04):

It's not a Raspberry Pi. It's a high-powered ARM thing with a GPU, but Raspberry Pi style connector on the side that the CAN bus stuff comes out of. So I connected that with point-to-point, what do you call them, jumpers.

EW (49:18):

Jumper wires.

CW (49:19):

Jumper wires to the transceivers with more jumper wires, and then to some DB9s with jumper wires that connected to the actual radar sensor, and now to the vehicle.

EW (49:28):

And when he wanted to clean it up, my solution was, "Oh, just hot glue it all in place."

CW (49:32):

I decided to not follow that advice. Instead I got a protoboard, and I soldered everything to the protoboard appropriately, cleanly, and with connectors and things.

CW (49:46):

And so now there's a Raspberry Pi connector on a protoboard that just goes into the Raspberry Pi header on the Xavier and snaps on there like a little memory expansion card on the back of a old computer or a game cartridge, something like that. So it just plugs on there.

CW (50:05):

And right now it's covered in Kapton tape, because I've been trying to encloses it in an enclosure. So I went off to learn Fusion 360 to do that. And I actually got some stuff that was close, but I've kind of given up, because the clearances on the Xavier are terrible.

CW (50:20):

There's no way to clear the box, and the protoboard, and then have the USB C interface on the back of the Xavier actually not interfere. And there were some other issues. So then I tried it with ribbon cable and stuff.

CW (50:33):

Anyway, long story short, I got all this cleaned up. The hardware is nice and clean, software works, collecting good data, figured out a whole bunch of things about the radar. So now it's actually working really well. So we can do that.

CW (50:45):

And so this week I've actually on the software side and making a little visualizer that can play back all the data in real time, just from the collected data. And so you can adjust a lot of the post-processing parameters in real time and see field of view and stuff...

CW (50:59):

There's alignment issues between the radar and the video. And it's much easier to deal with if you can edit those. So I had to learn since everything is in Python. I had to figure out, "Oh, I've never done a GUI in Python. So what does that look like?"

EW (51:11):

I have done a GUI Python, and I did it with Pi Tickle.

CW (51:16):

Tkinter.

EW (51:17):

Tkinter. Yes. Sorry.

CW (51:20):

Tcl/Tk for Python.

EW (51:21):

Right.

CW (51:22):

Plus some other junk. I don't know. There's a few modules. I don't understand what they all are. There's Tk, which yeah, okay. Tk. Tcl/Tk. And there's Ttk, which is another module that has different widgets that are more native to whatever.

CW (51:34):

Anyway. So I've been learning that, and like most UI libraries, it's a UI library. So it does everything that a UI library does.

EW (51:43):

You didn't go for PyQt. PyQt?

CW (51:45):

No, I didn't want to. So I've done a lot of Qt development in the past, and it's harder. There's more to it. I just wanted a crappy user interface.

EW (51:58):

Yeah. This wasn't for -

CW (52:00):

Yeah. This just has to work.

EW (52:02):

Consumers. This was just -

CW (52:02):

It doesn't have to look good. I mean, this can be -

EW (52:04):

Internal development tool.

CW (52:05):

- factory floor garbage user interface designed by -

EW (52:10):

Hot glue.

CW (52:11):

Yes. The software equivalent of hot glue. So now Qt, you have to rearchitect your software a little bit. Because it has signals and stuff...I didn't want to deal with it. And I didn't want to put that dependency on the client.

CW (52:29):

And Tk is already a big enough dependency. It's just weird to be using Tcl/Tk again, because the last time I used it was 1995.

EW (52:38):

I was very disturbed to find Tk a few years ago when I had to do the interface because it was -

CW (52:46):

I just feel like some should things go away.

EW (52:49):

It wasn't that it was bad.

CW (52:50):

No, it's fine. It's totally fine.

EW (52:51):

It's just, are we still here?

CW (52:54):

Yes, yes. Yes. I felt old and not old.

EW (53:00):

Old and knowledgeable at the same time.

CW (53:02):

Well, I remember nothing about it.

EW (53:04):

I know. Me neither.

CW (53:05):

And back then we were using it in C? No, what were we doing? Oh, we had it all -

EW (53:10):

It was scripts.

CW (53:11):

Oh, Tcl was its own scripting -

EW (53:13):

Yeah.

CW (53:13):

- language, and Tk was the GUI thing.

EW (53:16):

Yeah.

CW (53:16):

So they took Tk and put it in. Okay. Okay. I remember now. Yeah. So we wrote a bunch of stuff in Tcl too, okay, back then. And then there was Expect that went along with it -

EW (53:25):

Yep.

CW (53:25):

- for communicating. Expect was great. What happened to that?

EW (53:29):

I thought it was part of -

CW (53:32):

Yeah, but it was -

EW (53:32):

Tcl or Tk.

CW (53:32):

I just don't remember why I never used it again. Because it was really useful for scripting serial interfaces and stuff.

EW (53:38):

I think it's part of some of the web interfaces -

CW (53:42):

Yeah. I don't know.

EW (53:42):

- and some of the unit tests systems, which, I mean, was what we were using Tcl/Tk for, we just didn't have those words yet.

CW (53:50):

For unit tests?

EW (53:52):

For manufacturing tests.

CW (53:54):

For the clinic project?

EW (53:56):

Oh, I used it at HP. Sorry.

CW (53:58):

Oh yeah, yeah. Yeah. I used it for our clinic project in school.

EW (54:03):

I ditched your clinic project after -

CW (54:05):

Yeah.

EW (54:05):

- the first semester.

CW (54:06):

So did two other people who stayed on.

EW (54:08):

Well, exactly. At least I left the class.

CW (54:10):

Yeah. So a couple of us kind of -

EW (54:12):

Went on and -

CW (54:13):

- finished it.

EW (54:14):

- did a thesis instead.

CW (54:15):

[Huh]? Oh you...did a thesis. Yeah. Well. That's fine for you.

EW (54:22):

It was. It was interesting.

CW (54:23):

Yeah. It was fun. I did a thesis as well, and a clinic project.

EW (54:29):

Well, your thesis was for a master's degree.

CW (54:31):

No, I didn't do a master thesis.

EW (54:33):

Did you do a thesis at Mudd?

CW (54:35):

Yeah, because I was a math major, not a CS major.

EW (54:40):

What was your -

CW (54:41):

I did CS clinic, and I had math research.

EW (54:44):

What was your math research?

CW (54:46):

It was kind of a implementation and review of an algebraic method for determining network reliability.

EW (54:56):

Oh, I do remember that. Okay. Sorry. Sorry.

CW (55:01):

Okay. Well that's enough of this.

EW (55:03):

I'm sorry. I'm a terrible person.

CW (55:06):

You can talk about your origami geometric typology all day. But as soon as I bring up something practical. I wrote a whole software thing that reduced networks and did all kinds of cool stuff. It was hard, especially hard because I did not care. This last semester of senior year, I did not care to do anything.

CW (55:28):

And it turns out I kind of had to do something, because you had to present this paper in front of people. And so it had to do something. But I did learn that if you get good enough at LaTeX..., you can make a paper look good enough that people won't bother to read it.

EW (55:51):

I came across a paper today, it was in PostScript, and I was reading it. And I'm like, "This is crap. Why did they bother to go from PostScript to PDF?" Because it looked pretty, but it's, yeah. Yeah. I believe they wrote it in LaTeX.

CW (56:11):

Yeah. LaTeX went to PostScript.

EW (56:13):

Right.

CW (56:13):

Yeah. Anyway. Are we done? Are we done? Can we put a pin in 2021?

EW (56:22):

I could be okay with being done with 2020 and 2021. Both of them. I mean, they haven't been terrible for us, but they have been tough. So yes, we can be done with that. Thank you for, I don't know, being on the show? Doing the show? For listening to the show? I guess, thank you for listening to the show, to the listeners.

CW (56:46):

[Ah], that's better. Yeah. Yeah.

EW (56:47):

And to the dog for sleeping.

CW (56:48):

Thanking me for being on the show, that's kind of -

EW (56:51):

It's weird. I know.

CW (56:53):

That's like saying thanks for being an employee, which I am not.

EW (56:56):

Anyway, if you would like to contact the show, it's show@embedded.fm.

CW (57:03):

By mail. Email.

EW (57:05):

By email?

CW (57:06):

Email. That's email.

EW (57:07):

Oh, if you'd like to contact us by mail, there is a -

CW (57:11):

No, no, no.

EW (57:11):

- a P.O. Box at -

CW (57:13):

No, no.

EW (57:13):

- the bottom of our newsletter.

CW (57:14):

I was just saying show@embedded.fm is our email address. That's all. I was just adding useless additional context for no reason.

EW (57:21):

So the address is at the bottom of the newsletter, which you sign up for on embedded.fm/subscribe. It's at the bottom of that page. And now our newsletter will be prettier. And if you send anything to our P.O. box, the chances we receive it are very, very small.

EW (57:37):

...Not that it won't get to us, just that you kind of have to email us and tell us you sent us something, because otherwise we won't go and check the box.

CW (57:48):

Anyway. Yes. Well, thank you everyone for listening to us for another year, and we will have more shows next year.

EW (57:57):

Including show 400.

CW (58:00):

Yeah.

EW (58:01):

400. When we had show 300, we had a party, a big party. We are not going to do that for 400. Kind of sad.

CW (58:08):

We could have a Zoom party.

EW (58:11):

We could have a call-in show. Big Zoom party.

CW (58:14):

That's work for me.

EW (58:16):

Okay.

CW (58:17):

I don't want to do a call-in show, because I have to figure out how to do a call-in show.

EW (58:22):

[Winnie the Pooh excerpt in which Elecia uses a weirdly high voice for Owl much to the hilarity of Christopher].