426: Equivalently Annoying

Transcript from 426: Equivalently Annoying with Chris White and Elecia White.

EW (00:00:06):

Welcome to Embedded. I am Elecia White, here with Christopher White. I asked on Twitter what we should talk about since we are just chatting amongst ourselves today. I threatened that if I didn't get a response, we would be discussing our vacation pictures.

CW (00:00:23):

On a podcast.

EW (00:00:25):

And I didn't get a response.

CW (00:00:27):

All right, let's go through it. We've got some pictures here. Looks like of a forest.

EW (00:00:33):

Forest, flowers, otters.

CW (00:00:36):

Birds, some waves.

EW (00:00:38):

The giant squid painted on the large crane-like machinery.

CW (00:00:43):

Giant squid on the side of a building. Some sand, a few rocks.

EW (00:00:53):

I have a cute picture of a bee and a flower. There were three pictures. There's the bee on top. And in the third one, you can just barely see its little bee butt.

CW (00:01:02):

I think we should pick one photo and go into really good detail about it, describing each section individually, the colors, the contrast and that sort of thing.

EW (00:01:12):

Don't we have a book club for that? Yes, I did convince our book club to read a picture book. It was hilarious - the best!

CW (00:01:21):

It's not a kid's picture book!

EW (00:01:23):

It's a picture book.

CW (00:01:24):

But it's a book of pictures. A picture is one thing. A book of pictures is something else.

EW (00:01:31):

Anyway, this week, I think we're going to have some introspection about burnout, class, the podcast, vacation.

CW (00:01:39):

That's what we do every week.

EW (00:01:39):

But there's also going to be some random advice.

CW (00:01:42):

Random advice.

EW (00:01:44):

Go ahead.

CW (00:01:44):

Don't stick forks in electrical outlets.

EW (00:01:48):

That is slightly random.

CW (00:01:52):

What are we talking about?

EW (00:01:53):

Well, I wanted to touch on a couple of things we've talked about in the past.

CW (00:01:58):

Right! Let's do it. Let's keep this to a tight 49.

EW (00:02:03):

Okay. Class is going and we're headed into Micro Madness and hardware. So that's going along.

CW (00:02:13):

What's Micro Madness?

EW (00:02:16):

I guess the students don't know this either, but it's okay. I assign them all boards. They are all ARM Cortex boards of different varieties: M7s to M0s. They have to learn about the board, including the processor. Then when we have live class, I ask them completely arbitrary things about their processors and put them into a March madness NCAA-style basketball tournament. They compete on these completely arbitrary qualifications. Realistically, when we choose processors, sometimes it feels really arbitrary. It has to be the smallest of the two. It has to be the least expensive. It has to have the most number of pins.

CW (00:03:07):

It has to have the nicest silk screen.

EW (00:03:10):

I don't think so. I don't think that's one of them, but I do believe the number of vowels in the part number might be one of them, just to show how silly it can get. Some of the criteria are based on the boards and some are based on the processors. This is a chapter about learning to read the datasheets, and learning to understand the documentation that surrounds the processors and the boards, and what you look for when you buy things. We end up having this competition and if you lose to somebody else's board, you become part of their team. So, now you have to learn about some other processors. It's really silly and fun and kind of frenetic. But the goal is trying to get a view of the industry.

CW (00:03:55):

It helps them read specs and part sheets and stuff. And if people haven't done that before, it's kind of a pain!

EW (00:04:03):

The interaction of being there and getting asked questions that you don't know the answer to and have to look them up relatively quickly feels just like meetings sometimes.

CW (00:04:13):

Right. Why shouldn't I order 10,000 of these right now? Well, because you can't buy 10,000 of anything, but that's fine.

EW (00:04:21):

Actually, last time, we had trouble buying boards in quantity. But this time we didn't have trouble. So, I feel like the parts are loosening up, some?

CW (00:04:33):

I think I've heard that, but I haven't had to buy anything.

EW (00:04:38):

Well, you bought something!

CW (00:04:40):

Yeah, but that's not related. Next?

EW (00:04:48):

I was going to...

CW (00:04:49):

No, I'm not gonna talk about my consumer product purchases.

EW (00:04:52):

Well, let's just say Wendell, thanks a lot for this. Anybody who wants to check that call back.

CW (00:04:58):

<laugh>

EW (00:05:01):

We also had a show about burnout.

CW (00:05:03):

Yes we did. That was last week's show.

EW (00:05:07):

It was confusing because we had actually recorded it...

CW (00:05:10):

A couple of weeks before that.

EW (00:05:12):

Then we went on vacation.

CW (00:05:14):

But it was last week's show.

EW (00:05:14):

To everybody else, it was last week's show. Yeah, that was good for me.

CW (00:05:20):

Good for you? How so? What did you learn?

EW (00:05:23):

Well, we did that show and then we went on vacation.

CW (00:05:28):

Right.

EW (00:05:29):

We recorded it on Friday and the next week was off. Which made me think about all the things we brought up. Like, what are your values? I took five online quizzes about what my values were. And I thought about all of these things, and things that I don't like to do. And I didn't have work, and suddenly I was actually quite a bit happier. So, it really is work-related. Another four or five weeks of vacation, I think I would've felt a lot better. It was only one week, though.

EW (00:06:04):

There are things I like to do. I actually like Twitter. Of course, I use it mostly as an output-only device. I don't read it a lot. But I also realize that there are things I do that are shoved between other things that I consider work. Like the transcript review, monitoring the podcast, social media, and the newsletter. It ends up with those being chores. I don't see them as a priority, and that's kind of not good because those are the things that I want to be happy about. But I'm spending all of my time on things that I don't really want to be doing. Anyway, the burnout show is really good because it's making me look at these things, and making me realize that I can't just keep pushing the boulder down the street, and saying, "This is hard!" I actually need to probably talk to a professional of some sort.

CW (00:07:02):

All right. Yeah.

EW (00:07:03):

Which I was gonna do today, but we have the podcast. So I decided to push it off to next week.

CW (00:07:09):

I thought it was a good show. I thought it had some pretty cool insights. I don't know that it helped me very much because I don't really know that I'm burnt out, or if I've just always been this way. I have never been super engaged with work for long periods of time. I'm very bursty and always have been. So I don't think that's really burnout. I think that's just the way I work.

EW (00:07:35):

Yeah, one of our listeners was surprised that it was me talking about burnout.

CW (00:07:40):

<laugh>

EW (00:07:42):

And they expected it would be about you.

CW (00:07:45):

I'm just cranky.

EW (00:07:45):

You've always worked like this.

CW (00:07:46):

I'm just cranky.

EW (00:07:48):

Me not liking work is new and weird and kind of unpleasant.

CW (00:07:52):

I've been genuinely burnt out, but I don't think that's my current state right now.

EW (00:07:56):

What are your values?

CW (00:07:57):

Yeah, I have no...

EW (00:07:58):

That was such a hard question, and kind of a dumb question. I mean, the online things, like intelligence is a value, but kindness isn't?

CW (00:08:07):

Like I said to you earlier, those online tests are very silly. They're very vague, broad categories of values. Like you could value origami, right? That's a more specific thing. Like, I like doing origami. I value that as a part of what I like to do. And so I'm going to do things to make it so I can do more origami or whatever, just as an example. But saying I value creativity, that's not really all that actionable, right? Or I value intelligence. Great. Good for you. Most people do. I wouldn't take those online quizzes as an indication, surveying, trying to figure out, what your values are. It is a useless activity.

EW (00:08:56):

Wait a minute. Those online quizzes aren't the end all, be all, of all medical and social and psychological things?

CW (00:09:05):

That's what I hear.

EW (00:09:07):

Man!

CW (00:09:08):

Yeah. It kind of just talked to me, because it turns out I'm a type A extrovert.

EW (00:09:16):

I did take five of them and average the results. That works, right?

CW (00:09:19):

That's probably better. Yeah. If you take total garbage and average it over a long time, then the data becomes good. That's what I've heard.

EW (00:09:27):

It works sometimes for an ADC. Occasionally.

CW (00:09:30):

No, total garbage. If your signals-to-noise ratio is zero, and you keep averaging it, it's still going to be zero.

EW (00:09:40):

Did you enjoy our vacation?

CW (00:09:41):

I did. It also made me think I need to rethink how I do work and stuff. 'Cause I do spend a lot of time dreading work and doing not much.

EW (00:09:53):

Because you're dreading it?

CW (00:09:54):

Because I'm dreading work, but I should be working. So, I don't do anything else because I'm too guilty to do something I would enjoy. I tend to push things toward the end of the day when I'm "done working", like music, or exercise, or going to the beach. I tend to push them out. Well, it's around four, it's time to knock off work. That's the end of the day because that's how things work. But maybe I didn't even start until 10. And so I wasted a couple hours in the morning sitting around, waiting for work to commence.

EW (00:10:31):

But you wasted those because you didn't do something you enjoy!

CW (00:10:33):

Sometimes. Sometimes I'm catching up on blogs and RSS feeds and stuff. That's stuff I do enjoy at some level, but is it stuff I enjoy more than playing some guitar or something? I don't know. So that's where values comes into. It's like, how much do you value this creative activity that you're not making time for, versus real idle time? Maybe real idle time is more valuable to you, but you should be conscious of that.

EW (00:11:02):

Well, if it's gonna be idle time, it should be idle time that is energizing, instead of idle time that is...

CW (00:11:10):

I mean, idle time is good. I don't think we should be doing something all the time.

EW (00:11:16):

No, but sometimes they play stupid games or read books that aren't making me happier. They're just passing time, which is not fun. Anything else about our vacation?

CW (00:11:33):

No, I'm trying to get into astronomy again. Sort of. Slowly. It's not going well. But, stars are cool, planets are cool. But it's all expensive and painful.

EW (00:11:47):

Then there was that guy with the huge Dobsonian who takes backyard planet pictures that are just amazing!

CW (00:11:54):

I'll put a link to that in the show notes. There's a guy on the astrophotography subreddit, who has been posting some photos. He does photos and videos of planets, particularly Jupiter is one of the good ones. They look like stuff from, well, if you'd showed this photo to somebody in the eighties, they'd say, "Oh, Hubble's doing real well". And it's just a backyard telescope. It's a big telescope. It's a 16 inch Dobsonian, which is quite large. With a few hundred dollars video camera, and he does a lot of processing and stuff. It's not easy. The kinds of things you can get for your backyard, if you have the skills are quite impressive.

EW (00:12:34):

You need the camera and telescope.

CW (00:12:37):

Camera's the easy part.

EW (00:12:38):

And the dark skies, which is one of the harder things, isn't it?

CW (00:12:42):

No, you don't need dark skies for planet.

EW (00:12:43):

Really?

CW (00:12:45):

Planets are very bright. You can do all sorts of planet stuff without dark skies. Think of the moon. Nobody needs dark skies to take pictures of the moon. You need brighter skies to tone it down.

EW (00:12:59):

So you get better earth shine.

CW (00:13:00):

But the planets are super bright. What you need is good seeing, which is steady skies, but that's independent of dark skies usually. I'm not sure our seeing is very good being so close to the beach. Anyway, I've been pursuing how to figure out how to do astronomy again without... The other problem is everything is so heavy. The gear I have, which is old, is 80 pounds for the telescope plus the amount. By the time I get that outside in the afternoon, preparing for the evening, I don't want to do anything ever again. So, I have a lot of equipment to get rid of. That's going to be one thing that's a little challenging, because not that many people want 80 pound telescope mounts. So, if anybody wants an 80 pound telescope mount, that's a computerized an [Orion] EQ-2 German equatorial mount...

EW (00:13:48):

And is willing to pick it up.

CW (00:13:49):

Willing to pick it up, here. Let me know. I'll throw in the telescope.

EW (00:13:58):

Yeah, we started a swap meet channel on our Slack and Chris actually has sold things. So that's very funny.

CW (00:14:06):

I think I'm the only person who successfully sold things. So I feel a little bad about that.

EW (00:14:14):

We are working on having t-shirts. Expect to see a link up for that in the next month. We have the design, which is super good, but we haven't chosen the vendor or the t-shirts or the collars or...

CW (00:14:32):

Or how much to charge.

EW (00:14:35):

It's not like we make much on the shirts. I don't usually price them to be fundraisers. It's more just kind of cool to be able to see somebody and say, "Oh, you like embedded too?" Which is my reminder to say, if you like the show, please tell a friend.

CW (00:14:55):

Or an enemy.

EW (00:14:57):

Or...

CW (00:14:57):

Tell anyone!

EW (00:15:01):

We are abandoning our Instagram and Facebook accounts, I think.

CW (00:15:10):

We're not deleting them, but we're not going to update them as regular as we used to.

EW (00:15:15):

I will try to keep the list of episodes up to date, which is one of those things that our transcription and social media person was doing, but she has left us for a better and greener pastures.

CW (00:15:31):

I've got the newsletter now. So if there's any complaints, if it's late, if there's weird typos, if I discuss something that's completely unrelated to the show, that's all my fault.

EW (00:15:42):

This week you put in your favorite VSCode.

CW (00:15:46):

Yeah...

EW (00:15:48):

Extensions.

CW (00:15:48):

Throw something in there...

EW (00:15:51):

Just in case somebody actually gets to the bottom.

CW (00:15:53):

Yeah, some exciting little bonus material. I went through what I had installed on VSCode that I regularly use, and that isn't just one of the usual C++ extension or Python or whatever. Just a few kind of cool little things that I liked. Oh, you want me to go through them now?

EW (00:16:16):

What are they Christopher?

CW (00:16:17):

Oh, I see. Instead of saying, sign up for the newsletter?

EW (00:16:21):

I don't know how they get the back newsletters. I'm pretty sure they can, but I don't know how. And if I don't know how, I don't think they know how.

CW (00:16:27):

Here is the list in what appears to be alphabetical order. I didn't try to do it that way. So alphabetical order, no other meaning behind the order. Autoscroll.

EW (00:16:39):

What does that do?

CW (00:16:40):

So, I do a lot of machine learning training or things that have log files that are spitting stuff out constantly.

EW (00:16:50):

Oh, okay.

CW (00:16:51):

And so normally if you open a log file, VSCode does keep up. Like, if it changes on disc, it will update the tab that has the log file in it, but it won't keep you at the bottom. So it'll keep scrolling and you'll have to keep page down or grab the scroll bar to get the bottom. Autoscroll says for files like that, it keeps track and anytime it's updated it scrolls to the bottom. So, you've always got the latest thing right on the screen, or how big it is. So pretty simple. I think that one has a few weird interactions with some built-in VSCode stuff. So you may have to disable it sometimes when you're doing regular code work, because every time I try to command-click to a symbol, it goes to the file, it goes to where the symbol is, and it scrolls to the bottom. So I'm pretty sure that's a bug there. Let's see, the next one, Doxygen documentation generator, for places that require you to have Doxygen comments in the headers.

EW (00:17:55):

Is that one you have to install separately? Because I didn't think I did that, but when I type /** (slash star star), it automatically fills in.

CW (00:18:06):

I haven't installed Doxygen. I think you installed it.

EW (00:18:10):

That's probably that I installed it, yes.

CW (00:18:12):

Anyway, what it does is, if you've got the prototype for your function in your header and the cursor is right above it, line up, and you slash star star, it makes the header and it finds all the parameters and stuff, and fills in all those little at things for you. All you have to do is tab over and type the brief description and fill in some description stuff, but it formats the whole thing. So it saves some time with asterisks and slashes and...

EW (00:18:43):

And?

CW (00:18:43):

ASCII drawing.

EW (00:18:44):

And the cut and paste error of copying the previous one.

CW (00:18:49):

Yeah. The next one's cool, there's GitHub pull requests and issues. And if you do stuff on GitHub, this links up with your GitHub account. And so you can see your pull requests, other people's pull requests for the particular repository, your working directory is in, and you can do reviews in line in your editor, and respond to comments and stuff, and mark stuff as done, right there. So that's pretty cool. The next one is also Git-related, GitLens. This is really cool. It allows you to see revision history and who edited each line of a file right in the editor. You'd think that would really intrusive, but it's really cool the way they do it. It's just a very light gray, if you hover over the line, and it puts it in a place where it's unobtrusive, so you can see it, and then you can also dig a little deeper. It has some other features for digging deeper into the history of particular sets of lines or lines in the code.

EW (00:19:43):

I didn't believe him on that one, but I did install it. It's light gray for me. I have a dark background and it's light gray letters you can barely see. But when you're walking through and you're like, oh, how, why did this happen? And you actually look at the line suddenly, it tells you.

CW (00:20:01):

Two months ago, so-and-so...

EW (00:20:03):

You committed it.

CW (00:20:04):

...on this commit.

EW (00:20:06):

And the comment says, "I shouldn't do this. I don't know why I'm doing this."

CW (00:20:11):

This one's really silly. I'm surprised that VSCode doesn't have it built in. Maybe it does. It's called header source switch. It gives you a keyboard shortcut to switch from the C file to the header file or vice versa. So if you're sitting in the C file and you have to get to the header, you can either command P and type the header file name and click over. But this is just one keystroke and it opens and switches to the header file. So that's cool.

EW (00:20:40):

Okay. I'm wondering about the utility of that, but I'm installing it anyway.

CW (00:20:43):

Well, it's actually a built in, in a bunch of other editors I've always used, like XCode. You don't find yourself in a C file wanting to get back to the header?

EW (00:20:53):

I usually split the screen and the headers are here.

CW (00:20:56):

What if you don't have it open?

EW (00:20:58):

Well, then I control P and type.

CW (00:21:00):

Exactly. Now all I have to do is hit ALT whatever, and...

EW (00:21:04):

ALT O.

CW (00:21:05):

Yeah, which you can change. And the last one, TODO Highlight. You don't have to do this one, but I like it. It takes all the comments with, TODO or FIXME in them, and it highlights them in orange and puts them in the gutter. It puts little orange pips in the gutter, the scroll area, to show you where they are. If you open a file and you're scrolling around, they're orange or highlighted some color. So as you're scrolling through, you can quickly see the TODOs and note that maybe there's 50 in a file and somebody should deal with that. Like, just remove 'em all. Don't bother to say anything.

EW (00:21:50):

There's a comment today, and I asked the author what the heck? The author said, well, that's old, we should get rid of it. I'm like, yes, you should have gotten rid of it, before I asked, you should have gotten rid of it. Now we've both wasted our time. <laugh>

CW (00:22:09):

Anyway, that's six that I use a lot. I have a few more, but those are the main kind of off the wall ones that I like.

EW (00:22:16):

And you have Cortex-Debug.

CW (00:22:18):

You have to have Cortex-Debug if you're going to debug on a cortex. That's why I didn't include stuff like that. These are just quality of life improvement things that you can live without. There's a whole bunch of good extensions out there. Sometimes I have some that I just needed for a minute. Like, CSV file. There's lots of great ones for CSV file, JSON editing, YAML, lot of specific file ones that are really nice. Occasionally there's weird stuff out there for very specific purposes. There's a Docker one. I don't really know what that one does. I thought of installing it when I was doing a lot of Docker stuff. And then I figured maybe I shouldn't move close to the Docker light, any closer.

EW (00:23:09):

CSV-to-table and Rainbow CSV?

CW (00:23:12):

Yeah, I think I've got one or two of those.

EW (00:23:15):

But you couldn't find a serial port interface.

CW (00:23:19):

Nope, there is not one.

EW (00:23:21):

It's funny when you were telling me that, I was running Python PySerial and typing at a terminal in VSCode.

CW (00:23:30):

Right.

EW (00:23:31):

But it was a terminal of my own making through a Python script that I was building. I couldn't find anything.

CW (00:23:39):

What I want, and it doesn't exist as far as I can tell, is a good serial terminal emulator that I can stick in a tab. It's dead simple. Maybe I should just write it myself, but it's really stupid. It should be stupid, simple, but maybe it's not, 'cause it doesn't exist. There was one thing for, I think, platformIO or Arduino, but it was very specific to that framework. What I want is putty or whatever the Windows thing or Minicom or Teraterm, whatever you call 'em. I want that in a VSCode tab, cause I've already got terminals. I mean, I can pull up Minicom in a terminal on there I guess, but it'd be pretty convenient to have it just be a thing.

EW (00:24:28):

Huh. There was one released in June.

CW (00:24:32):

Oh, I'll go look for that.

EW (00:24:33):

Send and receive text from serial ports.

CW (00:24:37):

What's it called?

EW (00:24:39):

Serial monitor. That's one of those trickily named ones.

CW (00:24:43):

Trickily? I don't think that's the right word.

EW (00:24:48):

What is the right word? It's not just tricky because...

CW (00:24:51):

it's an adverb.

EW (00:24:51):

Right.

CW (00:24:56):

Trisky? That's the Chris stuff. "Chris likes" section of the date today's show. Well, this is all over the place today.

EW (00:25:10):

We should still be talking about our pictures. I have some really great flower pictures and I got photobombed by a hummingbird twice. Well, two hummingbirds, where I was taking pictures of flowers and the hummingbird just like showed up. Let's see, I mentioned Cortex-debug, which now I have learned how to do change configurations, which...

CW (00:25:30):

Sounds awful.

EW (00:25:32):

They're really powerful, and probably as a regular app developer, they totally make sense. But as an embedded developer, it was a little hard to figure out. But now that I have them figured out, it's like, okay, that's totally easy.

CW (00:25:47):

You should charge for that specific information. <laugh>

EW (00:25:52):

Ah...

CW (00:25:52):

You should have a little, minicourse - how to set up chain configurations, and we'll sell it on the website.

EW (00:25:59):

Yeah, I don't know about courses. I mean, I like the course I'm teaching.

CW (00:26:02):

It's not a course. It's a 15 minute YouTube video. And instead of giving it to people for free, which is what most people do on YouTube, we will host it ourselves and charge a lot of money for it.

EW (00:26:14):

More likely I would just write a blog post and give it away for free.

CW (00:26:19):

All right.

EW (00:26:21):

But I needed to do that because we've been using the PSoC chips, the Cypress PSoC chips,

CW (00:26:27):

P chop!

EW (00:26:28):

That have a Cortex-M[4] and a Cortex-[M]0. And they have to be booted in a certain order.

CW (00:26:33):

They are both Cortex-Ms, there is a 4 and a 0.

EW (00:26:34):

Right. There's an M0 and an M4, and they have to be booted in the right order. And one controls the other and blah, blah, blah, blah, blah. But as I was wondering about that, on the complainatorium.

CW (00:26:47):

Another Slack channel.

EW (00:26:50):

Somebody asked what is PSoC and why would somebody want to use it given our extreme amount of whining?

CW (00:26:58):

Well, there's no good answer for the second question.

EW (00:27:00):

Well, first we have to talk about what a PSoC is. Programmable system on a chip.

CW (00:27:06):

That's what I guess the P stands for. I suppose it could stand for peripheral system on a chip. I mean, remember PICs didn't stand for anything that made sense for a long time. They kept changing it.

EW (00:27:14):

Well, PSoC was a term before Cypress trademarked it.

CW (00:27:20):

I know.

EW (00:27:23):

There used to be a time when you would get a microprocessor and then you would get RAM and you would get flash...

CW (00:27:31):

And a clock, and you have to hook all that to a bus.

EW (00:27:34):

Everythings, all separate.

CW (00:27:37):

Yeah. That's not a microcontroller.

EW (00:27:38):

And then a microcontroller was when you combine them all together, but sometimes you could combine them all together and call it a system on a chip or a programmable system on a chip if you had flash because you were programming the system on a chip. But that's not what people are complaining about when they're complaining about PSoC these days.

CW (00:27:55):

People being us. Yeah.

EW (00:27:58):

<laugh>. And some others.

CW (00:28:01):

And others who will remain nameless <laugh>. Yeah. The hardware's probably fine. The hardware is fine. I think the hardware's fine. I haven't had any weird issues with the hardware.

EW (00:28:13):

Why is it special?

CW (00:28:16):

The PSoC?

EW (00:28:16):

Yeah.

CW (00:28:18):

I don't know. It had some... Nope, not gonna go with that joke. <laugh> It's special because... Okay. You know how you get an STM32 and it's got a bunch of timers and a UART and a couple I2Cs and a couple of SPIs, and maybe you can route the I2C and SPIs to a couple different places, but that's the limit of that. And all your peripherals are laid out and they go to specific pins usually. Right? Well, that's not how the PSoC works. PSoC works by having a surrounding penumbra, an aura, an enveloping umbrella of programmable logic outside the actual CPU. And that programmable logic is used to implement most of the peripherals.

EW (00:29:13):

So if you want to have a hundred UARTs, you just need to have all of the pins that can support that.

CW (00:29:18):

And enough logic elements in the FPGA thing.

EW (00:29:21):

Right.

CW (00:29:21):

Which they probably don't.

EW (00:29:24):

But if you want to have five UARTs, you totally can do that.

CW (00:29:26):

Yeah. You can do that. You can have a bunch of hardware timers, and you can link those up onto interrupt pins. You can bus interrupt pins together. You can put a bus on it. You could say these eight pins are now a parallel bus that I'm talking to in LCD display, which is actually pretty hard to do on an STM32, I think, unless they have a specific TFT interface on them, usually TFT 8-bit interface. On paper, it sounds great. You can even do more stuff because it's a real FPGA interface. So if you really want to dig down, you can build your logic out of elements and put an actual schematic together that does something. Say you wanted to debounce a button in hardware or have some comparator or some logic that's specific logic to do something.

EW (00:30:21):

Cameras are a good place where you can actually do some things to the data in hardware.

CW (00:30:31):

Not sure it's that capable.

EW (00:30:32):

Oh, really? I haven't played with that layer very much.

CW (00:30:35):

I don't know.

EW (00:30:36):

You can get a processor or two, depending on what model you buy. It's a normal microcontroller with flash and all these things. Now it can have as many peripherals of whatever type you want it to. It's the chip that you want and nothing else.

CW (00:30:58):

Yeah.

EW (00:31:00):

Kind of like Batman is the hero that you deserve or whatever.

CW (00:31:04):

But don't need, or no, that's not right.

EW (00:31:06):

Yeah. You need something.

CW (00:31:08):

That all sounds great. Except you have to do this. You have to do this.

EW (00:31:14):

Even if you have a bog standard system.

CW (00:31:16):

You have to go in and define your peripherals. Which means going into the schematic interface, which isn't difficult for the peripherals, for the most part, once you get the hang of it, it's mostly dropping little toy Lego blocks of things in.

EW (00:31:30):

Because they've implemented almost all of the peripherals you want, unless you want to do something really spiffy.

CW (00:31:34):

Yeah, some of the nasty stuff that you have to deal with, with the HAL and STM is in that, is instead on PSoC inside the GUI for that. So if you want to adjust the SPI clock and the phasing and all that, you just click around in there and that goes in that programmable hardware thing, and it generates the driver for the HAL and it generates the logic for the FPGA block, but you have to do this. The problem with you have to do this, is now you have to use their tool to do this, and their tool to do this is not, in my opinion, an A+ tool.

EW (00:32:08):

<laugh> That's how we're saying that these days.

CW (00:32:11):

The editor is kind of janky. I know they have a new one called ModusToolbox, and I haven't tried that yet. I'm using PSoC Creator, which I think is deprecated now. So it's kind of unfair. But the editor is kind of annoying.

EW (00:32:25):

Even if it wasn't that the editor was annoying, you get to have all of these peripherals and you have to do this definition. You can change things in the definition, which means that it trick-. And because it changes the hardware layer, the programmable layer, and it generates all of these files for you around the drivers, the hardware abstraction layer. Now, every time you breathe on it, it generates a hundred files, which it then has to compile. And zero lines changed!

CW (00:32:58):

Right. So the thing is with all flexibility comes a cost. Right?

EW (00:33:04):

And complexity.

CW (00:33:05):

Complexity, and with complexity comes errors and time. Like you said, if you change something in the schematic at all, if you change a SPI clock, it has to do the FPGA thing again. And the FPGA thing is not a C compiler. It's single-threaded. It's slow.

EW (00:33:25):

It tries to optimize things.

CW (00:33:27):

That's all mostly fine, because on a lot of projects, you're not gonna be going in there too often.

EW (00:33:32):

Yeah. Once it's set up, you're not.

CW (00:33:33):

Once you set up, you got your peripherals, you're mostly done. Depends on the project. On some projects where something's complex and you're really, really getting into that, that can be a problem. The other issue is, it's all kind of binary and XML files. So it's not really compatible with source control in a very friendly way.

EW (00:33:55):

I edit my XML files pretty often.

CW (00:33:58):

If you do make changes, good luck merging or rebasing. You're not going to be able to. What's gonna have to happen, what has to be done is, if you've got two people heading the top schematic, that's what they called the FPG editor thing, one person has to go in and then the other person has to. Let's say they were late. They made some changes. They've got a manually go in and redo their changes, on top of main, because there's no merge. You're not gonna merge. Forget it, doesn't work. It's very painful that way. So, with all flexibility comes a cost. And I think the cost is quite high, depending on the kind of project you're doing.

EW (00:34:39):

We have good computers. It shouldn't take five minutes for it to do anything!

CW (00:34:43):

Well, FPGA stuff is hard. I think that there's a lot of computation involved with that.

EW (00:34:50):

One of the advantages to the PSoC is that it has been available when no other chip has been. And we can tell you why.

CW (00:34:57):

<Laugh> Because it's hard! Other than that, I have not really had big complaints about the HAL, versus STM32. I think they're equivalently annoying.

EW (00:35:12):

Equivalently annoying. That probably should be the title!

CW (00:35:15):

There was definitely bugs in the HAL, and things that people complained about six years ago that they said they fixed and they didn't and stuff like that, but that's pretty common across the industry. I'm not saying don't choose it, but definitely go in with your eyes open. And maybe grab a dev board and play around with it some, to kind of get a feel for things. Because it's a different kind of chip and, like all vendor tools, they put the minimal effort required into making them usable by actual engineers.

EW (00:35:51):

Okay. Going on? We have a question from Carson who had recently listened to episode 19.

CW (00:36:02):

How? I thought we deleted all of those. You're not allowed to listen to those earlier ones!

EW (00:36:07):

In which we talked about the Embedded System Conference, Design West. Carson wanted to know if that conference still happens. And the answer is yes, sometimes. He then went on to ask, are there other conferences? Yes. There are many conferences and at this point I don't want to make a list because it will immediately go out of date. There are some other lists out there. Qt had a list that wasn't bad.

EW (00:36:36):

Search "embedded systems conference", and your major metropolitan area or "makers conference". Actually, "maker conference in Los Angeles" led me to this event page that had just hundreds of them. It was pretty cool. And "maker conference in New York" led me to the Maker Faire, and "embedded systems conference in New York" led me to some international distributed systems conference. They are there. I know that there's Minnesota, Las Vegas, Los Angeles, Silicon Valley, New York. Realistically, I think it's more than that. I think you can find the littler ones all around and somewhere online, like Embedded Online, and Hardware.io usually has an online component. SuperCon is coming up. There's some other conference coming up that I don't know the name too, but I keep hearing people want to go. Did you ever figure out what that one was?

CW (00:37:43):

Super Secret, Super Special Conference that we probably shouldn't talk about. But I can't talk about, because I don't know what it is. I assume it's taking place at my house and I don't know about it. I'm just gonna wake up one morning and there's gonna be out these people in my house and I'm gonna tell 'em to get out!

EW (00:37:58):

Okay, I have one more question for us.

CW (00:38:00):

One more question for us. Okay.

EW (00:38:02):

This is from Ricardo, who sounded like he was in a bit of a hard spot, started a new job. In your opinion, what is the best way of understanding firmware that's built on custom hardware for which there is no documentation, and the author who is more experienced, isn't too keen on answering questions? When the questions are somewhat answered, the answers are often more confusing than the firmware itself. What do you do as a junior engineer?

CW (00:38:40):

This is giving me flashbacks to the first actual technical job I had. I was an unpaid intern at a place called the San Juan Capistrano Research Institute. It was between senior year of high school and freshman year of college. I walk into this place and they need help with various things. They decided, "Hey, we have this mass spectrometer, we got off the back of a truck, but we can't make it work. And we don't have a manual." <laugh>

EW (00:39:08):

Let's give it to the intern.

CW (00:39:10):

Why don't you take a look at this thing and see if you can make it work. I spent a few weeks with a laptop. A laptop in 1992. Whew. Don't know how I had a laptop. Maybe it wasn't a laptop. No, it must have been a laptop. Trying to hook to this thing's serial port and get it to talk to me in any way, shape or form. I think I was trying on the rudimentary, like CompuServe, and other things to find documentation. Anyway, did not succeed at all! I felt very guilty. I'm sorry San Juan Capistrano Research Institute, that spectrometer is never gonna work. Yeah. So the advantage here is you have the code, right? I'm assuming he has the code.

EW (00:39:52):

Yes, access to the code. Wait a minute, let's answer this from the other side. Why would you act like the jerk senior engineer? In what cases would you not want to answer things?

CW (00:40:08):

Ooh, that's a really interesting question. Okay, there's a lot of reasons. Let's take "I'm just a contrary jerk" out of the equation. That's a possibility. One is, I am extremely busy. I am already being asked to do things that I can't do. And somebody is now asking me to do more things. And they're asking questions about things that I fully understand and therefore, why don't they understand? And the code is right there.

CW (00:40:43):

So there's that aspect of it, which is a bit of a non-empathetic response.

EW (00:40:50):

But when you're tired and at the end of your rope, wanting to help other people is not often the first thing that comes to mind.

CW (00:40:58):

Yes. And the flip side of that is the more people you help, the less work you have to do.

EW (00:41:04):

But it also sometimes feels like the more people you help, the less work you get done.

CW (00:41:08):

But I don't want to get work done. I want to get as little work done to fulfill my job at a high level as I can.

EW (00:41:15):

No, no. The goal is to get a maximum amount of work done, but you don't have to do it all if you help people.

CW (00:41:22):

Yeah!

EW (00:41:23):

Exactly. We're in agreement <laugh>. But there's also the case where you get someone new...

CW (00:41:34):

Why, why, why? Why, why, why? Yes, but I don't think that-

EW (00:41:40):

I don't want to justify it because the truth is I did it because the other way didn't work and I never figured it out. Or I did it because they told me they were gonna need some other feature and they never wanted it. And now it's in this kind of crappy state and I don't want to explain.

CW (00:41:54):

Yeah. But given all that, it does sound like, to just take what he said as...

EW (00:42:01):

As the whole fact.

CW (00:42:02):

That's a difficult situation because he said there's no documentation.

EW (00:42:06):

So we're back to helping the new person.

CW (00:42:09):

Yes. Back to-

EW (00:42:10):

Instead of being the cranky engineer.

CW (00:42:11):

Giving advice, instead of being empathetic to the gray beard.

EW (00:42:16):

Okay.

CW (00:42:19):

Okay, so we said there's no documentation?

EW (00:42:22):

There's no documentation. There is firmware, but it's big, it's built on custom hardware.

CW (00:42:30):

Well, the first thing I would do is ask what your job is.

EW (00:42:32):

That's a good one.

CW (00:42:33):

Is your job to understand all the firmware? Because I don't understand all the firmware on any of the projects I work on. And I'm, I think a fairly senior engineer at this point, I have a lot of gray hairs. So that's part A, is kind of understand what you need to know, what you need to understand, because if you're trying to understand the entire firm, that may be a fool's errand.

EW (00:42:59):

But understanding the idea of the firmware, understanding what the users are supposed to-

CW (00:43:05):

Certainly you should understand what the product is, and what it looks like from the outside, what it does, what its purpose is, what its inputs and outputs are. That sort of thing. What I'm saying is, if your task as the junior engineer is to work on bugs related to...

EW (00:43:26):

The UI.

CW (00:43:26):

The display, right, the UI, then you probably don't need to go learning about how the Bluetooth subsystem works, right now. Or the file system necessarily, or the innards of some of these other lower level systems.

EW (00:43:38):

The whole frequency processing system. You may not need to know right now.

CW (00:43:42):

What you do need to know, is probably how do I get to the UI? So what's the init sequence and how does that follow? That can be learned through a debugger. Or through adding logging as the system boots up. Or if there isn't logging- Or if there is already logging, just looking through that and finding where those messages come out, throughout the system. Then diagram that, so this is the init flow and here's how to get to my piece. Once you've defined your piece, then you can start looking at the code for that. It's a lot less, usually, depending on the code is written, it's a lot less of a nightmare because you're not trying to get this whole gestalt of the firmware into your head and all the interactions and things. That'd be my advice. Figure out what you're responsible for. Figure out how the system gets to what you're responsible for. Then figure out how from that central point, things get connected. What are the events and the inputs, outputs, and kind of the block diagram with that central point, the heliocentric model where you're part is the center of the solar system and the other stuff, maybe planets, you don't need to know everything about.

EW (00:44:51):

I would say they need the schematic and the user manual.

CW (00:44:55):

It depends on what they are doing. I have rarely needed the schematic.

EW (00:45:00):

Just need the schematic to like clutch, just in case.

CW (00:45:07):

I would certainly try to get it.

EW (00:45:09):

It's nice to have, even if you don't need it regularly. But the user manual, as you said, you need to know what it is trying to do. And there's a giant box between what it is, what the schematic says it is.

CW (00:45:27):

The schematic?

EW (00:45:29):

Or the hardware block diagram, I would take that. I'm assuming that none of the senior engineers will talk. So give me the schematic.

CW (00:45:36):

Get all the information you can, certainly. And the schematic, sometimes you can map the software block diagram onto the schematic.

EW (00:45:43):

Yeah. Because if there is a SPI flash on the schematic, there's going to be code somewhere.

CW (00:45:48):

There's a SPI flash driver. Yeah.

EW (00:45:50):

You get an idea of what the hardware is, and then you get an idea of what it's being used for. Over time, you try to fill in the giant gap between them. Maybe that's looking at the file names and trying to figure out what that means. You have something called SPI flash driver, or SPIFlash.c and then you have something called kvstore.c If you know that a kv-store is a key-value-store and that usually lives on a SPI flash, now you're going through. If you don't know that, then you probably don't need to play with it until somebody says, I have a bug here. And you figure out, okay, so the SPI flash is here and it's used by this and that.

CW (00:46:38):

I'm just thinking back to my early experiences as a junior engineer. This was at Cisco, and these were big complex devices.

EW (00:46:46):

Those were big complex devices.

CW (00:46:48):

It's hard to call them embedded systems, but they were. They had no screens or anything. They were purpose built devices with custom hardware. They ran a fully custom OS with lots of complexity that, at the point I got there, was probably ten years old at least. The stuff I was working on was very focused. I spent most of my time in two or three C files for a year. I learned about some things outside of those, but only very briefly. I never got a real sense for the whole system there. So if you're being asked to do that, then that seems a little odd to me, because as a junior engineer you should not be expected to understand and be able to be productive anywhere in the system.

EW (00:47:40):

That's fair. I always needed to have at least an image of what the whole system was. Even if I didn't understand the details. I needed the highest level, here's how it works.

CW (00:47:54):

It depends on the complexity of the system.

EW (00:47:56):

It really does depend on the complexity.

CW (00:47:57):

There's a lot of systems where this is a chip with these sensors and this kind of display, and it does this. But if it's something much more complicated running a bigger OS, or... Embedded systems comprise a lot. For all we know he's talking about a system with an A series Cortex, an A series ARM and Linux, and a bunch of other stuff. In which case, good luck understanding all of that!

EW (00:48:25):

I always go back to sketches, you know? These are all the parts. These are what they talk to. This is where the software goes. Knowing that there are big blocks I don't understand, that's okay. When I get there, I will look into them. But right now, it's just something I don't need to know.

CW (00:48:44):

It's a cartography project. You've got to put the dragons out, figure out where you're gonna let the dragons live. Then, whatever coastline you need to get it, fine detail, figure out what that is.

EW (00:48:56):

Did you ever use Doxygen call graph stuff? I've used it a couple times, but I've never found it as helpful as I wanted it to be.

CW (00:49:02):

I find Doxygen to be a pro forma formality. That is basically useless.

EW (00:49:10):

All right.

CW (00:49:11):

The best thing I can say about Doxygen is, if people use it, it forces them to make nice function comments that can give you an API description. I'm not even gonna say documentation, because documentation usually involves prose, which Doxygen does not encourage. I have used Doxygen rarely as a consumer. I think there was one project I kind of used it. I've never found it all that useful. When I go to projects that depend on it for their documentation, I'm always irritated.

EW (00:49:48):

Oh, the HALs. The HALs.

CW (00:49:51):

Yeah, I could have looked at the header file.

EW (00:49:54):

I totally agree with you about looking through the boot logs, walking through main, trying to figure out where things go, that way. Until you get to the part where you need to be in the debugger. Then you need to change variables and see what paths change. Just generally you have to get your debugger working. The other thing, the reason I asked about, why would you be the grumpy, unhelpful person? Because there are times that that happens. The engineer, if they aren't a jerk, would like to help you.

CW (00:50:36):

Let's face it, most engineers are jerks.

EW (00:50:38):

They view training you as time that isn't spent getting things done. If you want to be the teacher's pet, which I know some of us do, try to be helpful to them. Not get coat, not get coffee.

CW (00:51:02):

Not get coffee!

EW (00:51:03):

I don't mean be obsequious.

CW (00:51:05):

Bring them cake! Bring me a cake!

EW (00:51:07):

Bring cake, that's always good.

CW (00:51:09):

Give me their phone number. I'll call 'em and say they should be nice to you.

EW (00:51:14):

When they give you some information, try to understand as much as you can about it.

CW (00:51:21):

I agree, that's good advice. It is the company's job to give you a path to productivity. If they've hired you, they want you to get things done. If the company is not providing you the resources to get up to speed, that's a company problem. I know you're a junior and there's not much you can do about it. I'm just saying, putting this all on the senior engineer, or vice versa on the junior person trying to extract information for the senior engineer, or wherever... there needs to be other support systems. Some companies are better than others at this. To just be dumped into the deep end as a junior engineer is a failing of the company.

EW (00:52:06):

As a junior engineer, I agree. As someone who ends up going, working with little companies who-

CW (00:52:14):

That's totally separate.

EW (00:52:15):

Whose engineers have left and now they need someone to make a change. And nobody remembers how to build the system...

CW (00:52:22):

Yeah, that's our job.

EW (00:52:23):

And someone else's code is totally overwhelming. I break it apart until I understand what I need to get working. Just as you were saying. But you're right, that's my job. That's my job because it is something I have worked to be good at. As a junior engineer-

CW (00:52:41):

And it costs the money. It's expensive. Right? The last thing a company wants from one of its employees, is to have an employee be it costs suck because they're stuck or lost or unable to make progress because somebody won't talk to them. I guess what I'm saying is, there should be other resources you can go to and say, I need help getting up to speed on the system. And that person goes and talks to whoever needs to talk to you, instead of you going to them.

EW (00:53:14):

But it isn't about getting everything fed to you. Which I don't think Ricardo was in that boat at all. But I did have an experience recently where somebody wanted help, and the truth was they wanted me to spoon feed it to them. And I wasn't going to. I wasn't interested. I gave you the resources, I don't care if you want-

CW (00:53:38):

You gave them the resources.

EW (00:53:40):

I don't care if you want to pay me to read them aloud to you. I don't want to read them aloud to you.

CW (00:53:46):

But you have the resources.

EW (00:53:47):

I totally gave the resources. Then was irritated when they came back and said, well, that requires a login. And I'm like, yeah. I don't work for the company that does the logins free. Get a fake email account. I don't care! Why are you talking to me, still? Go, go! Sorry, traumatic.

CW (00:54:08):

<laugh> All right. Without knowing the details of the situation, and what resources are available, and what the system's complexity is, and what the management structure of the company is, that's about the extent of what I can contribute, I think. As suggestions.

EW (00:54:26):

Me too. There are a whole bunch of unknowns, but it is a relatively common thing to do. And a common feeling to have. I definitely have felt like that. The engineer that I'm supposed to be asking question to is pretty much said, go away kid, you're bothering me. And I don't know what I'm supposed to do. And I feel bad because I'm afraid they're gonna fire me, because I'm not getting anything done. But I don't know how to get anything done. And it just becomes this... To some extent, have a little patience. You need eight hours of training. Your senior engineer has one hour a day. That doesn't mean that the time is wasted. It just means it's not gonna happen as fast as you want.

CW (00:55:09):

We're assuming they're giving them any time. But yeah.

EW (00:55:13):

For me, if I had understood that I was not going to be fired because I was only getting trained one hour a day and I needed eight hours of training, that would have helped me. Because I wouldn't have felt like I'm not getting anything done and that this job is so important.

CW (00:55:31):

I've also had that situation, and I quit a job for that reason. After six or eight months.

EW (00:55:40):

That was different.

CW (00:55:41):

I was not getting help. I could not figure out how to make progress in the code. Didn't understand anything. There was no way to figure it out. The documentation was hundreds of pages of FPGA specifications that a driver was supposed to be built. Just forget it! This was not tenable.

EW (00:56:00):

You were also lost between two teams.

CW (00:56:02):

I was lost between two teams, but the most irritating part of it was...

EW (00:56:05):

Was not being able to continue.

CW (00:56:06):

The person I actually worked for, who was not the person I was supposed to be working for, was demanding work in a system that was impenetrable. And there was nobody there to help me, because the team didn't want to talk to me.

EW (00:56:18):

Because you were supposed to be working for someone else. Why invest time in training you, when as soon as they train you, you're gonna go work for somebody else.

CW (00:56:25):

I know that feeling of, here's a wall of code, here is five years of work of a hundred engineers. Go make some progress on this feature, which is a one line descriptions. The other thing is, aside from that, it's not clear for me, the problem is getting lost in the code, or just getting set up. Is there a problem getting your ID configured? All the stuff installed, is that well documented? Junior people have a lot of trouble with that sometimes too.

EW (00:57:02):

Rightfully so.

CW (00:57:03):

Right. Because it's usually at most-

EW (00:57:05):

One of the hardest things.

CW (00:57:07):

It shouldn't be, but most companies have a completely fly by night, here's a Dropbox folder with eight installers, three of them are out of date, two are missing and here's a word doc that was written once, but never updated.

EW (00:57:23):

Even though everybody knows that you have to skip step six.

CW (00:57:25):

Guides you through the process. Instead of, here is a conda or here is a Docker or here is some very simple installer that has everything you need. Rant over on that. If that's a problem, then that has different requirements. Sometimes you do need a senior engineer to help you with that, depending on how poorly they've documented their install system. That's another one of those things where it's like, can't make progress and I can't make this process up from whole cloth. So management, the person you report to, is the person who is responsible for your success. If they're not helping, or if you haven't talked to them, then that's a problem.

EW (00:58:10):

Speaking of Docker, you've been using Docker more.

CW (00:58:15):

Yeah.

EW (00:58:17):

It works the same on all the computers you're using. Right? You should see him. It's not like he's turning purple. He's just so sad now. He's like Eeyore. I feel like I'm already reading Winnie the Pooh to you because Eeyore is here. Tell me about it, Eeyore.

CW (00:58:33):

The problem is not Docker.

EW (00:58:35):

Right.

CW (00:58:36):

The problem is Nvidia drivers and that sort of thing. And CUDA drivers and various other drivers that are outside of Docker.

EW (00:58:47):

Ah, I just heard the swearing.

CW (00:58:49):

Those are responsible for the things that are different. The nice thing about Docker, to flip it around on you, is that I can run the same things on two different computers and see that one isn't working as well. That has nothing to do with Docker. It is an indication that something's different about the computer.

EW (00:59:07):

Ah.

CW (00:59:09):

Not to say I love Docker, but I do understand it a little better and I have been using it somewhat successfully.

EW (00:59:15):

When I started using it last summer, it was really useful. Still don't think I would even attempt Windows, but on Linux it makes a lot of sense. Do you want to talk about your adventures in hardware, comparative studies?

CW (00:59:35):

Not really. There's not much to tell. I have two systems. TensorFlow training machine learning models. One computer. Both Docker. Same Docker, by which I mean installed from the same Docker file. Same hardware, GPU. From what I can tell, similar hardware for the CPU and all that stuff. Both Linux machines. And one is twice as slow as the other. I'm trying to figure out what's that going on there. And it's not that easy. I have some ideas and I've run some benchmarks, but nothing's coming up as a red flag saying, this is the thing. I suspected it's something silly that I haven't found yet. That's what I've been doing for the last couple days.

EW (01:00:26):

Do you need to turn off the air conditioning bit, like you used to in old cars?

CW (01:00:29):

The what, now?

EW (01:00:31):

That was the turbo button. You turned off the air conditioning. <Laugh>

CW (01:00:35):

Oh God. I don't think so. I don't know that they have those.

EW (01:00:40):

You know that client, which we have shared? One time I had a similar problem and it was because a fan failed on a CPU. So the CPU wasn't going fast enough.

CW (01:00:52):

Could be. They've claimed to have looked at things like that.

EW (01:00:56):

There's always the disk being different. One time with a problem like that, I had two discs with different page sizes. That made a difference because my files were all very small. That was awful. It took me forever to figure out that it was page sizes.

CW (01:01:15):

I did benchmark the drive on both of them, that I thought the data was coming on. But now I think about it, might have been the wrong drive.

EW (01:01:25):

Because there's the running drive and there's the data drive.

CW (01:01:27):

Yeah, and the model that caches all the images in the model directory, which is in my home directory, which is not where it's benchmarked. Could be there. I'll look. Doing Linuxy sysevent stuff for some reason. Does a side project.

EW (01:01:42):

Get paid for it.

CW (01:01:45):

Yeah. After vacation, to bring it all around, back to the beginning, I'm kind of looking forward to maybe not doing so much for a little while.

EW (01:01:57):

Yeah. I think we'll both have some time, October-ish, and maybe we are not fishing for clients right away. Maybe we're taking a little time off.

CW (01:02:09):

Yeah.

EW (01:02:10):

Because October in Santa Cruz is the best month.

CW (01:02:14):

Hopefully. Maybe it'll be the hottest month. All right, we are well over my 49, this is not a tight 49 anymore.

EW (01:02:23):

Okay. Thank you to Christopher for producing. And of course for cohosting. Thank you for listening. You can always contact us at show@embedded.fm, or hit the contact link on embedded.fm.

CW (01:02:47):

Yeah, you got it.

EW (01:02:49):

There may be a couple of links to this show, but there's not a lot.

CW (01:02:53):

I was gonna post the Astrophotography guy, so I'll keep that in my head.

EW (01:02:57):

We are still doing transcripts, although they may be late and not all shows may have them. The burnout show did, and it was very good. If you missed that show or you want to check some fact in there, you should go back to the transcript.

CW (01:03:13):

We have a newsletter that you can sign up for on the website. It comes out once a week. Usually it's just stuff about the show and the upcoming show. So you get a little sneak peek of what's coming up in a couple of days. I'm gonna try to collect things that might be of interest to our listeners to throw in there, that are either tangentially related to the show or things that other people suggest. If you have suggestions for interesting topics or articles, things to link to, you can always send that to me, and I will throw them in there, assuming I like them.

EW (01:03:48):

At embedded.fm, that's how you reach him too. Gets to both of us.

EW (01:03:51):

[Winnie-the-pooh except]