405: Bacta Tank for Your Brain

Transcript from 405: Bacta Tank for Your Brain with Elecia White and Christopher White.


EW (00:06):

Welcome to Embedded. I am Elecia White, here with Christopher White. We have lots of little things to talk about today.

CW (00:13):

Like the dog?

EW (00:15):

I hope not. He's being good.

CW (00:17):

Is he? He doesn't look very good.

EW (00:20):

Our dog Bear is 16 years old.

CW (00:23):

Maybe 17.

EW (00:25):

Old enough to start buying drinks on his own.

CW (00:29):

Wait, is that the drinking age?

EW (00:32):

Well, in dog years.

CW (00:33):

In dog years? Okay. Why are we here?

EW (00:38):

I have a couple of questions, -

CW (00:39):

Alright.

EW (00:41):

- and I've read a lot of interesting books. And I heard you had an interesting bug, and let's start with burnout.

CW (00:51):

Because at the end of the discussion of burnout, we'll just stop recording, -

EW (00:53):

Exactly.

CW (00:54):

- because we'll have burned out? Okay. Go for it.

EW (00:56):

How do you define burnout?

CW (01:01):

I think at its simplest for me, what I mean by burnout is...not only do I not feel like doing anything, when I try to do things, I am basically ineffective or much less effective than perhaps I am when I'm not burnt out.

EW (01:22):

How long does it take you to get burnt out?

CW (01:24):

It took me one year to get burnt out, and I have not ever become unburnt out.

EW (01:29):

That was 20 years ago?

CW (01:30):

Maybe 30. I don't know, because the getting unburnt out can sometimes happen very rapidly if the reason for the burnout is not necessarily just fatigue. So there have been plenty of times when I've been working at companies, and I would consider myself burnt out.

CW (01:49):

Because the work I was doing wasn't that interesting, or it was very frustrating to get work done. Because there was some process that had been introduced where now doing a simple task took 24 hours instead of 20 minutes, things like that..., or even just having not enough work.

CW (02:07):

There have been places I've been at where the project was just kind of this thing in a giant company, and nobody cared. Nobody showed up. And I basically sat and read news for the whole day, because there was nothing to do. And that kind of burnout can be shifted.

CW (02:24):

And it feels the same me. It feels like I can't do anything. "I don't want to do anything. This sucks." That, for me, has been shifted by just changing surroundings, jobs, whatever, to something more interesting.

CW (02:37):

So I've gone from feeling like I can't do anything one week to the next week being totally engaged in a project, and learning stuff, and making huge progress. Because I'm doing something that seems fun. So that might be a different kind of burnout than just having worked super hard for so long that you need to recharge.

CW (03:00):

And for me, I don't know how long that is, because I honestly have not been able to recharge for three or four years now.

EW (03:06):

So the, "If you do something different, you can be re-energized," I don't think of that as burnout myself. I totally understand it. Definitely, there are times where I'm working on something, and I'm not happy. And there may be politics or I'm just not getting it.

EW (03:27):

And then I go and work on a different piece of the project. And it makes sense, and it's fun. nd I solve the intellectual puzzle, and then I go back to the first one. And it's fine. Because I've recharged my resilience reservoir.

EW (03:44):

And then there's, I think, the burnout we're all experiencing with a constant level, not even a low level, of panic of what's happening in the world. That's really hard to separate. I think it adds a level of exhaustion to everything.

CW (04:01):

Yeah. Well, it's a cognitive load thing, right?

EW (04:04):

Yeah.

CW (04:04):

...I think real burnout involves not being able to deal with the cognitive load. And if there's a chunk of that taken away by something you can't get rid of -

EW (04:19):

Yeah.

CW (04:19):

- then that level of your ability to do things has dropped. Your gas tank is less full. Yeah. And there's no way to fix that, besides ignoring things and pretending they don't exist, which is not actually all that useful. But doing things does help, paradoxically.

CW (04:42):

...Sometimes I find that I can't do something really technical or thinky in that situation. And so I'll go do something else that's manual with my hands or some project that doesn't involve a lot of thinking, but still occupies my entire person without focusing on those other things.

EW (05:02):

So at the end of last year, in January of this year, I was finishing two big projects, and I was teaching class. And I was doing all my normal things of podcasting, and mentoring, and generally trying to keep up with the world. I definitely had less cognitive load due to the state of the stupid world right now.

EW (05:33):

And...I mean, I had been doing those things for nearly six months, doing them intensely for four months, and I could feel myself burn out.

CW (05:48):

So what does that feel like for you?

EW (05:50):

Changing tasks, it didn't matter. There was no recharging. It was all just out. I got so that even origami, which is usually fun for me, was just as draining as anything else.

CW (06:04):

Yeah.

EW (06:05):

It was solving a puzzle. It was sometimes writing code, but more often trying to get my hands and my brain to agree on what something should look like. And there wasn't anything that was recharging. There were a few things that weren't taking more energy, generally reading novels. Learning I could do in spurts.

EW (06:33):

I got a couple of great books for Christmas. And I could read them, and they were interesting. And then I could just feel my brain go, "Yeah, but that's too much." And, I mean, it was definitely depressing.

EW (06:48):

There's definitely a level of depression to it, but it wasn't like I was depressed about anything except that my brain was very, very tired. And I could work. I could work for a couple hours, and then it was just like, "No." It wasn't a, "Oh, this is too hard. I don't feel like doing it."

EW (07:08):

It was just a, "No, I have no more cognitive power for you today. You might as well just go to sleep, because we're not doing anything else." It was really hard. And I thought, "Well, I won't have the two big projects. I'll just have class and the podcast, and it will be easier."

EW (07:30):

And unfortunately, when you teach a class, it will suck up all time available. There's always something to do. There's always something better you can put in some way that will be more demonstrative to the students. There's always more you can do. So thinking that that would recharge me was not correct.

EW (07:54):

The students were fantastic, and I wanted to be recharged by them. Because I was learning so much, and everybody was helpful to each other. It was just a really good situation.

EW (08:09):

But it was still a couple hours of grind. And then, "No." And I couldn't find anything else to do. I mean, it wasn't just origami...I mean, I do a lot of random things.

CW (08:23):

Well, I understand that, not wanting to do anything, or not thinking that anything is going to be interesting. Is that what you're talking about? You couldn't find anything else to do meant there was just nothing that you felt like doing?

EW (08:37):

No, I mean,...sometimes, but it wasn't really boredom or depression that way. It was, there were things I kind of wanted to do, but I just couldn't. Drawing seemed too hard.

CW (08:55):

Okay.

EW (08:56):

And definitely writing was not going to happen. Anything to do with a screen got tossed pretty quickly. And like I said, it took me months to get there. And I knew I was doing it. In November, I knew what I was doing.

CW (09:10):

Right.

EW (09:10):

I was using resources that I usually did not expend, because they are my hoarded resources, mental resources. And so...now the question is, "How do you deal with it?"

CW (09:27):

You don't do stuff. You just sit immobile for weeks at a time until you've completely recharged in a capsule. I saw this on Boba Fett.

EW (09:41):

Yeah. And there's the liquid.

CW (09:43):

Yeah. Yeah. The bacta.

EW (09:45):

Yeah.

CW (09:45):

You need a bacta tank.

EW (09:46):

I need a bacta tank for my brain.

CW (09:49):

Title. Yeah, no. I mean, I'm sure there are people who know about this stuff, that study it, who have...some psychological or physiological thing. I mean, most people say, "Go on vacation." It's like, "Okay." Vacation, for me, leads to burnout.

EW (10:11):

Because you let yourself get bored.

CW (10:12):

No,...most people think of vacation as travel.

EW (10:17):

Right.

CW (10:17):

And travel is very stressful for me. And so the definition of vacation, I need to move it toward, "not need to worry about stuff for an extended period of time." And I think that does help sometimes, but you really need to do it. I'm not looking pointedly at you, -

EW (10:35):

He totally is.

CW (10:36):

- and your last vacation. But yeah, you kind of have to just, "Okay, I'm not going to think about anything related to embedded systems, or computers, or C compilers, or anything like that. Here's what I'm going to do. I'm going to go in the garage, and I'm going to finish building that ukulele for a week."

CW (10:56):

And that's what I'm going to do, and listen to podcasts, or music, or something. I don't know. I have found, the times when I've been in that kind of burnout, that...I need to totally disconnect for a while. I did that. Okay. After my first startup, I was completely fried. I left there, and I went to grad school, -

EW (11:17):

Right.

CW (11:18):

- which you would think would not be a way to recover from burnout, but it was. Because...it was a shift of work completely. I wasn't sitting at a computer all day.

EW (11:29):

And it was a difference between output and input.

CW (11:32):

Yeah. And I was thinking about different things. I was responsible to myself instead of being told what to do by a manager. The performance stuff was different. I got instant feedback. "Yes, this is right. No, this is wrong." And there were no larger, overarching, "Oh, I've got to finish this thing," kind of stuff.

CW (11:58):

It was all naturally broken down into, "Okay, I'm learning this. I'm learning this. I'm learning this." And my time was scheduled in a way that was really freeing, because I had time to relax even though I was doing a lot of work.

CW (12:10):

Because I was no longer sitting at a desk from whatever it was, nine to seven back then, or nine to eight, or whatever I was doing, and staring at a laptop by myself. And it was differently social too. Working with students is different than working with coworkers.

CW (12:30):

So it was a major shift. And it was still hard, but I did feel like I recharged pretty quickly from that. I also had some other issues later on, but...I felt like that bounced me back pretty quickly.

EW (12:48):

When you were at the startup, it was all learn and output as soon as possible. And in school it was learn to put into yourself. The output was checking, not producing. So I think there's some element of that, of recharging means putting things back in, instead of a constant life of produce, produce, produce.

EW (13:15):

For me, I'm still kind of burnt out. I'm getting a little better. I did take time off, but time off was teaching class and doing podcast stuff. There's a reason why we have a new homepage...Because I really wanted to do origami. And I got a little bit of stuff done. I can do more open sea snails now.

EW (13:44):

I still haven't quite got conchs, but I think I know how. Anyway, I am trying to recognize that it probably will take me months. And that I need to be more open to input and less work, work work. I kind of wish we'd had a little bit more space between the Red Jellies cohort in Classpert and the Orange Stars.

CW (14:08):

...You're going to have to tell people what that means.

EW (14:11):

Oh, so it's a cohort-based class. And the groups have names, and I needed to be able to tell which group it was. And I just didn't want to do 1, 2, 3, because boring. And so they're color-coded Roy G. Biv. So red, orange, and then a sea creature.

EW (14:30):

And the sea creatures are random. The next one is yellow seahorses, which, I think the icon for that is going to be a dragon because of a Japanese anime we saw once. And so that makes sense to me.

CW (14:44):

Okay. But...you were talking about the break between semesters or class groups as being too short.

EW (14:53):

It was too short, which was my doing. I should have pushed it, partially because the class projects took forever to grade. And I mentioned this -

CW (15:05):

Grading is hard. Grading is real hard.

EW (15:08):

Well, and I mean, nobody failed.

CW (15:12):

Yeah.

EW (15:12):

Because they were all really good, but it's still, how do you give good critiques?

CW (15:19):

Yep. And you have to do it at a reasonable pace so that you're not giving a really good critique to everyone. So you'll get done grading in six months.

EW (15:29):

That was kind of what happened. The mentors all went through the list of what they were supposed to do and filled out the project rubric. And then they were supposed to give a paragraph or two of comments. And mostly they gave six paragraphs.

CW (15:45):

Yeah.

EW (15:45):

And I was supposed to go through their review just to make sure it was okay and then to take a look at a high level at the projects. But of course I looked at the code, because I wanted to know. And so I was supposed to give one or two sentences, and I gave one or two paragraphs.

EW (16:02):

But even as Classpert was saying, "Do a worse job on this, and you won't feel so burnt out." I was like, "I can't. I can't do a worse job on that," or "I can't be me and do a worse job on that"

CW (16:19):

Yeah. Yeah.

EW (16:20):

It was a lot like the Hackaday Prize, although there were fewer submissions, and I did more in depth analysis. And yeah, the next cohort starts on March 19th of 2022, which is a week after this posts. We expect to sell out.

EW (16:42):

It'll be a little better than the Red Jellies, because we have some pacing problems, I think, fixed. We're not using Mbed. Instead we are using Uri Shaked's Wokwi, and it is simulating the Raspberry Pi Pico. We had him on the show a while ago.

EW (17:00):

And one of the things about the whole simulating the processor and then letting people run code on the cloud to run on that processor was that it was all Arduino-covered.

CW (17:14):

Right. Because he targeted toward hobbyists to start with.

EW (17:18):

Yeah. And everything was setup and loop. But Uri and I have been talking since he was on the podcast, and he now has a Raspberry Pi Pico simulator that you can run C code on. So that's what we're going to use for the simulator.

EW (17:38):

And that changes some of my classes. But I'm kind of excited about it, because his simulator is so detailed, lots of stuff with that.

CW (17:48):

So that's cool. I mean that's cool beyond the class.

EW (17:50):

Yeah, no. It's totally cool, beyond the class. You don't have to be in the class to play with the Raspberry Pi Pico running C. You can do that on your own.

CW (17:59):

Cool.

EW (18:00):

And then another reason the class was too close was because I did that live session with "Beyond Arduino."

CW (18:05):

That was about looking at what Arduino is made up of in terms of electronics and the software a little bit, instead of just, "Here's how to use Arduino," or,...I didn't watch it.

EW (18:16):

That's okay. It is available in a video, but unfortunately the first couple minutes were cut off, and that was where I told people -

CW (18:27):

Right.

EW (18:27):

- that they were supposed to ask questions. And I had it all set up to do this "choose your own adventure" with people asking questions, and I'd go to different parts. And it totally different didn't work, because nobody heard that part.

CW (18:38):

Right.

EW (18:39):

But it was about looking at the Arduino schematics as if you were looking at a development board, -

CW (18:45):

Oh, okay.

EW (18:46):

- and then looking at the processor like you would if you were looking at an STM32 development board and you were looking at the processor. "Let's look at the datasheet. Look, there are application notes."

EW (18:57):

And then considering the difference between looking at the Arduino as a black box to looking at it as a engineering tool and what don't get with that, like a debugger, and what you might get with something else.

EW (19:15):

And...I mean, I had fun preparing it, but most of the fun I had preparing it was the whole choose your own adventure part that didn't end up working. But I might try that again, because it was kind of hilarious. Oh, I have one more thing to say about Classpert, and then we'll be done with them.

CW (19:33):

Okay.

EW (19:33):

They are now on Qualcomm's internal...accepted training list.

CW (19:43):

Oh.

EW (19:44):

And what that means is you will get reimbursed if you take the class and you're at Qualcomm. So my question is, how do we get on everybody's list?

CW (19:54):

I don't have the lists.

EW (19:55):

Because really this is better if your employer pays for it.

CW (19:58):

Yes.

EW (19:58):

And they should, because it will make you more effective at work.

CW (20:03):

Need to get on the government list to get some of that sweet taxpayer money.

EW (20:09):

Wait, wait. That's my, what? Okay.

CW (20:13):

Alright.

EW (20:14):

I heard you had a tough bug recently.

CW (20:16):

I did. And it made me,...this is what happens when we try to record the podcast before 10. I cannot speak. Yes, I had a bug, and you helped me with it. And also somebody on the Slack helped me with it, and I should find who they were so that I can credit them. So give me one second here to find the person who helped me. Yes. Okay.

CW (20:40):

So anyway, so I've been working on embedded stuff for my client, which I have not been doing in a while. So that might explain why I had a little trouble figuring out what was going on. But without details of what the product is or the device I was talking to, to set the state, I have a device that is basically an ADC.

CW (21:00):

And you can configure it to have a certain fixed rate of conversions on multiple channels. And so there's a fair amount of data that the device has that I need to get from it. It's a SPI device, and it has its own internal hardware FIFO.

CW (21:18):

And so the way I had it set up was you can set a watermark on the FIFO to say, "Hey, when this is half full, send me an interrupt, and I'll go get the stuff out of the FIFO. Pretty standard stuff, which is why I'm describing the bug. Because it's actually all pretty standard stuff, and other people could get tripped up by this.

CW (21:38):

So that was working mostly fine. So I'd get the interrupt, and I would go and do a long SPI transaction. And the way you get the stuff out of the FIFO on the device is you write ff, the command, and then you just write whatever -

EW (21:52):

You just write, and it will keep -

CW (21:53):

Yeah, yeah.

EW (21:53):

- giving you data for as long as -

CW (21:54):

And it responds on MISO for as long as you've got stuff in there. So if I know how long the FIFO is full, then I read that many bytes. So I'm using Cypress, and the command I'm using right now as part of their low-level API. And it's basically write array.

CW (22:14):

And what that means is I give it a buffer of a certain number of bytes corresponding to the number of bytes I want to read plus the command, and I call this write array function. And it just does it.

EW (22:26):

Sure.

CW (22:26):

And then when that's done, and I know it's done, I read stuff out of Cypress's FIFO. Now this is where things get interesting...The Cypress devices have these little reprogrammable logic blocks, which is -

EW (22:42):

It's a PSoC.

CW (22:42):

Yeah, a PSoC. And they are like little FPGAs, but that's how they do all their peripheral configuration.

EW (22:52):

So you get the Arm core, and then you can use their library of VHDL, Verilog, some hardware-ish language that does FPGAs.

CW (23:03):

And it's all abstracted up. So you don't have to really think about that if you don't want to.

EW (23:06):

Yeah. You just plop in, "Here's a SPI device."

CW (23:08):

Yeah. So there's this graphical thing, and you drop in, "Okay, I want a SPI here and I2C here. And I want a GPIO here on these pins." And you route all the pins, and it's completely reprogrammable, which is really cool.

EW (23:18):

The flexibility is incredible.

CW (23:20):

So their little SPI block, you go in, and you configure it. And it's got a FIFO of its own. And so if you dig into how their API works, when you do that write array function, it's basically a for loop. And it takes each byte from your array and it stores it in a hardware register that corresponds to the FIFO.

CW (23:37):

So every time you say register equals byte three, four or five, that takes that byte and stuffs it in the hardware FIFO. And then the state machine and the actual SPI block in the FPGA bit handles taking that FIFO and starting to transmit it over SPI.

CW (24:00):

Okay. So what was happening was this was all working great, but times within 30 seconds to a minute my whole data capture state machine loop would just stop. I was no longer getting interrupts saying, "The FIFO is full, and you need to read stuff."

CW (24:20):

It was just like, "The device is done." So that was super weird. So I pulled out my Saleae on your suggestion after being very flumoxed by this, because it just didn't make any sense. Actually the first suggestion you had, instead of writing zeros to the device when I'm intending to read, is to write ffs.

CW (24:43):

And it never stopped when I wrote ffs in that big array. And the reason was because somehow the device was interpreting zero. Zero is a badly designed device. Zero, turns out, is the command that turns the FIFO off. So, "Aha."

CW (25:03):

Somehow the device, when I was intending to read from it, was interpreting some of the zeros that I was using to trigger SPI read as an actual command. And it was saying, "Oh, I'll turn the FIFO off." So I at least had the mechanism for what was going on.

CW (25:16):

So on your suggestion, after that, I took the Saleae, and lo and behold, I could see that I would write ff and then immediately have...a few zeros to read out, but then it would stop and chip select would go up. And then 30, 40 microseconds later chip select would go back down.

CW (25:37):

And then it would just start writing zeros, like it was finishing the rest of the array. So I was a little bit confused by this. And I let myself get confused by the fact that, "Oh, this SPI thing is hardware. And so how could it be interrupted by the RTOS?"

CW (25:55):

And it turns out it was interrupted by the RTOS. And I put too much faith in hardwareness to just be this autonomous unit that can't be interrupted, because think back to how it works. And Mitch on the -

EW (26:10):

On the Patreon Slack.

CW (26:11):

- on the Patreon Slack, he kind of pointed me in this direction very easily. Because he's worked with this before, and he's seen it. So what's happening is, like I said, it's a for loop that takes every byte out of my array and puts it into that FIFO.

CW (26:28):

Well, the RTOS comes along sometimes, and maybe for ten milliseconds that for loop isn't running, but the hardware is running autonomously. So it was actually not helping me to be autonomously running, because, let's say I wrote eight bytes into the FIFO, and it starts its SPI engine going, and now the RTOS comes along.

CW (26:49):

And my for loop pushing stuff into the Cypress FIFO is interrupted while the hardware is still transmitting. And so its FIFO is emptied, and now it thinks it's done. So it moves chips select up. And then when the RTOs comes back, we continue our for loop and start filling the FIFO again.

CW (27:09):

But...the hardware SPI controller block thinks, "Oh this is the start of a new transaction. My FIFO just got filled again, move chip select down, and we will go." So it was the RTOS all along.

CW (27:19):

But it was really kind of subtle, because it's this interaction between the peripheral doing its thing, a whole bunch of asynchronous things happening in such a way that I underflowed the FIFO on the SPI peripheral in a way that made it split up my transaction into two bits with catastrophic effect.

EW (27:43):

Is your RTOS preemptive?

CW (27:46):

Yeah.

EW (27:46):

Really?

CW (27:48):

It's FreeRTOS.

EW (27:49):

Well, I mean, you can still configure it to be -

CW (27:51):

Well, an interrupt comes in, then it doesn't matter what happened.

EW (27:55):

And so you just need to add a critical section around that.

CW (27:58):

That's what I've done, and Mitch points out that he usually uses... so there's a configuration in those SPI blocks where you can have the hardware control chip select, or you can control chip select for software.

CW (28:11):

So that's the other way to get around it is, "Okay, I'm putting chip select under my control," which means that even if I take a break in transmitting bytes, I'm not going to flip that chip select, which is going to make the device think the transaction is over.

CW (28:24):

So that's probably the easiest and least destructive way to do it in terms of not having a big, critical section where you're writing out a whole bunch of data for a long period of time and blocking other stuff.

EW (28:36):

But isn't that just a memcopy from your internal RAM to your SPI FIFO?

CW (28:44):

No. Because the SPI FIFO register's one byte wide.

EW (28:48):

Oh, so you are really blocking.

CW (28:49):

So it has to be a for loop.

EW (28:51):

Oh, it has to be a for loop, but that for loop shouldn't be taking any time.

CW (28:57):

Sure.

EW (28:57):

It should just be a -

CW (28:59):

But you get preempted by an interrupt. That's all it needs.

EW (29:01):

No, that's true. I just am surprised that what should be taking almost no time takes long enough -

CW (29:09):

And I only need to be preempted for maybe a microsecond or whatever.

EW (29:13):

That's true.

CW (29:13):

...It's an eight megahertz SPI. You can do the math of how long it takes to transmit, say, seven or eight bytes. It's not very long.

EW (29:26):

But you aren't transmitting them. You're putting them in a FIFO for later transmission.

CW (29:30):

Right. But the hardware block is transmitting them. So all it needs to do is be idle long enough for those eight bytes to have gone out and nothing else to be left.

EW (29:40):

Yeah.

CW (29:42):

No, it's tricky. I feel kind of dumb, but it's one of those embedded things that, "Oh yeah. You just make a SPI thing, and then you do your thing." It's like, "Well, yes, but -"

EW (29:55):

Alright.

CW (29:56):

No further comments?

EW (29:57):

I have many, but I don't really think that they're necessary.

CW (30:01):

Go ahead, do it.

EW (30:01):

And...you have ways to solve it, including DMA.

CW (30:04):

Oh, yeah...I'm planning to go to DMA. Well, maybe. There's other details about this device that I won't go into, but I had planned to use DMA. But yeah, no, there's a lot of ways to solve it. It's just getting to the point of understanding so that you can solve it is tough sometimes.

EW (30:23):

Oh.

CW (30:23):

Because you have to understand how each of these pieces work to know how they're not working.

EW (30:28):

And I mean, that's why we feel stupid so often. Because you have a bug, and once you understand the bug, the fix is two lines, maybe two characters. But until you understand what's going on, you can't do anything.

CW (30:45):

And I have a little bit of a bias, a little bit of a prejudice to think, "Well, this should be easy. It's just SPI...It gave me an API. I wrote the stuff. Their API should be tolerant," right?

EW (31:00):

You see, -

CW (31:00):

But no.

EW (31:00):

I have such a bias against RTOSs. I'm like, "Well, if something's going wrong, did it screw up something - "

CW (31:06):

It's the RTOS.

EW (31:06):

" - with the RTOS?"

CW (31:08):

Yeah. And to be fair, I don't know how the RTOS is configured. I usually assume things are preemptive unless told otherwise, because that's the most safe assumption in terms of, "things can be screwed up."

CW (31:20):

But there's always a source of preemption, even if you're not running a preemptive scheduler. Yeah. So, fun things. I'm sure there'll be more fun things like that. But, yeah...Embedded is hard even if you've been doing it a while.

EW (31:38):

You've been having fun with this project though.

CW (31:40):

Yeah.

EW (31:42):

Newsletters.

CW (31:43):

Newsletters.

EW (31:44):

In an effort to make our newsletter better, we started looking at other newsletters. And Chris Svec, who is not the host of this show, recommended The Prepared, which is an engineering, infrastructure, and manufacturing newsletter, weekly, free, kind of entertaining too. So pretty fun, links and links to blogs.

EW (32:12):

It's kind of an aggregation. You get to see lots of other things happening. It's not necessarily them doing them, where our ours is usually 97 links to Embedded and whatever our show notes have. So that one, I've been enjoying that.

EW (32:32):

I also found TheAnalog.io, which is founded by the CEO of inspectAR, inspectAR, that we talked to a while ago. We didn't talk to the CEO. We talked to engineers that work there, but he has a newsletter that is lots of general stuff, hardware-related.

EW (32:55):

And he asked me for an interview. So I did that. It was pretty fun. Let's see. Oh, I wanted to tell people about "Thanks for the Feedback," which is a book I read.

CW (33:07):

You weren't thanking people for their feedback. This is a book called "Thanks for your Feedback."

EW (33:10):

Right.

CW (33:11):

Okay.

EW (33:12):

It's about how to receive feedback, which was kind of odd. There are so many other things out there about how to give critiques and how to give feedback, but this is how to accept it, which was kind of weird.

CW (33:28):

A lot of people are bad at accepting both positive and negative feedback, right?

EW (33:34):

Oh, yes. And I am definitely one of them. Even, I mean, positive feedback makes me uncomfortable. Negative feedback makes me defensive. So either way -

CW (33:45):

Don't give any feedback -

EW (33:48):

- just no feedback.

CW (33:48):

- to Elecia. Just stare blankly, try and make no moves.

EW (33:52):

No eye contact either. In fact, let's just type. This would be so much easier for both of us. But the book actually went through a lot of scripts. So people tend to get defensive.

EW (34:05):

Because they don't agree with the truth of a piece of feedback, because they don't agree that the person who is giving it to them has good reason to give it to them, or because it hurts their identity in some fashion.

EW (34:21):

If you say, "That was an unkind thing to do," that makes the person trigger back to, "I'm a kind person, so what you say must not be right." They also broke it into three different kinds of feedback,...and this is a piece that if I had had earlier in my life, it would've been so much easier.

EW (34:43):

There's appreciation, which is obvious. People are saying, "Thanks." And it motivates you. And it generally lets people know that you notice them. Appreciation, I think, we all understand. And then there's feedback that is coaching. "Here's a better way. I want to help you grow."

EW (35:03):

And the last one is evaluation, and that's assessment. "Here's where you stand. Here's where you are compared to other people. Here's where you are compared to some rubric or list of criteria." And so many times people have been trying to give me coaching, and I hear evaluation. People try to say, "It would be easier if you did X " and I hear, "You're not doing it right."

EW (35:34):

And since I'm getting it done, then I trigger back and get defensive about, "You're not correct. That's not the truth. I'm doing it fine." But the thing with the book is that, I mean, there are these things, this is...the first chapter, but it goes through scripts of, "How do you break that down?"

EW (36:00):

How do you break the cycle of getting defensive? How do you figure out what they're commenting on when what they're saying is, 'You are unkind?' That sort of thing, that's a label. It doesn't tell me what I can improve on.

EW (36:15):

So, "Give me an example," or even, "That's not how I see myself. Let's talk about why you feel that's true." And the scripts, the giving me words of how to respond, so that the part of my brain that says, "No, no, no, no. Fire alarm. Oh, my God. This person doesn't like me," is quieter.

EW (36:40):

Because I can shut that person away and go towards the, "This person may have something useful to tell me." And...gosh, scripts are amazing. I didn't know growing up that there were scripts. Do you use them? Do you look for them?

CW (36:58):

I have been told to use them in the past, but I don't. Well, not for dealing with other people. No. I have learned how to deal with people through trial and error.

EW (37:11):

Does that work?

CW (37:12):

Yes, eventually.

EW (37:16):

I find scripts magical. The, "If this happens, these are the three things I could say, and these are the outputs that I will probably get from them."

CW (37:24):

But don't you find that sometimes can lead you into trouble if things don't go according to script. There are times where I've kind of pre-gamed out difficult conversations to the point of possibly a script, but they almost never proceed in a way that that works.

EW (37:45):

No -

CW (37:45):

And maybe it's the people who I'm employing that technique against. But sometimes things go so differently that I'm off script, and now I'm just back to, "Okay. Making stuff up as I go along and trying to salvage the situation."

EW (38:01):

Well, there's a difference between pre-gaming or pre-considering a conversation and trying to identify what can go wrong, and what can go right, and how you would respond if they respond to that. Scripts are more when I don't know what to say, or I realize that what I'm about to say is not what I want to say really.

CW (38:26):

Sure.

EW (38:27):

What do I fall back on? And they sometimes sound really canned. Like, "That's not how I see myself. Let's figure out where the discrepancy is."

CW (38:38):

Yeah...Yeah. Yeah, no, I get that. I get that. I'm not pooh-poohing the idea. I'm just imagining scenarios where I would've applied that. In those circumstances, the other person needed a script too, because, yeah. I guess a lot of this presupposes that at least one person is being rational in the conversation.

EW (39:04):

Well, that was the goal for me, was to be the rational person.

CW (39:06):

I see. Yeah. Okay. Okay.

EW (39:08):

I don't want to go with my first impulses...When people say, "You should do this better," and I say, "Do you have a podcast," and they say, "No," and I say, "Well, then I'm not going to take audio advice from somebody like that," I fail to say, "Oh, you're a professional producer of podcasts," or I can ask more questions if I don't immediately go to "No."

EW (39:40):

And I so often go to no. And this gave me a list of questions to go beyond that. And it gave me ways to ask for feedback instead of saying, "Can you give me feedback?" It's like, "What one thing could I be doing better to get out of my own way?"

CW (39:56):

Yeah, sure.

EW (39:58):

Because just asking for feedback is really hard. It's like, "I don't know. You did fine," or "You did terrible, but I don't really want to talk to you about it for the next hour so I'm going to say you did fine." It's been a really good book for me. I recommend it.

CW (40:13):

No, it's an important skill. And it is probably a skill for a lot of people to develop, because feedback is something, in our professional lives, we get a lot. And a lot of the worst professional disagreements, and arguments, and near fights, and things that I've seen, not necessarily been a part of, have been over technical kind of things.

CW (40:41):

Like, "Oh, here's your code review," and, "Here's the feedback on what you should do differently," and people not taking that well or not giving it well...

CW (40:52):

I mean, "Thanks for the Feedback" seems like it's tailored towards accepting feedback, but giving feedback is also quite difficult to do in a way that doesn't get people's hackles up a lot of times, depending on the person, of course.

CW (41:08):

But that's another thing you need to be aware of, is how individuals take feedback. You can't just go, "No, this sucks," to somebody's PR, but I've seen that.

EW (41:22):

Yes.

CW (41:22):

And there's very few people who are going to take that well. And so you have to ask, what was the intent of the feedback? So it's a two-way street, but it is hard to take feedback sometimes. And I think that's an interesting thing to focus on.

EW (41:37):

It discusses some about how to give feedback or how to deal with feedback that is completely baffling. And it also had a section, which I think is important for me, is sometimes you don't take the feedback. Sometimes you listen. You understand, and you just say, "Okay, I'm not defensive about it. I just don't want to do that."

CW (42:03):

Well, my response to that kind of feedback is noted.

EW (42:06):

Yes. Thank you for your -

CW (42:10):

Input.

EW (42:10):

- input. I love that for you.

CW (42:16):

Well, it doesn't really work, but -

EW (42:19):

No.

CW (42:19):

Bless your heart. Yeah, those don't apply, but I appreciate noted, especially if you say it in a slightly, slightly flat, irritated tone.

EW (42:28):

That's passive aggressive.

CW (42:30):

Oh, did they say that's not good?

EW (42:33):

No, I'm saying.

CW (42:36):

There isn't a big chapter on improving your passive aggressiveness?

EW (42:41):

They do talk about passive aggressive and whether or not that gets you where you want to be.

CW (42:46):

It doesn't necessarily get me where I want to be, but it feels really good.

EW (42:49):

Yes. Yes, indeed. Let's see. We got some nice emails. Kurt, and Alison, and Dan Matthews all sent me emails that will be going into the folder for days when I have a bad day, because their emails were very nice. We got some links to various things.

EW (43:08):

The Serial Wombat that's having a Kickstarter soon. that's a PIC-based, Arduino-like thing. Yeah. I needed more of a, "What is that?"

CW (43:20):

Maybe.

EW (43:22):

If you're taking feedback, I would put right at the beginning, "What would I use this for," which I think you've tried to do, but I still couldn't quite. But it might be interesting if you are a PIC fan.

CW (43:35):

It's an expander. It's a peripheral expander. So -

EW (43:41):

For I2C and UART.

CW (43:42):

Yeah. So if you run out of stuff, you can add one of these, and it adds some peripherals. It's like...the GPIO extenders, but it does more stuff than that.

EW (43:59):

Yeah. And it's easy to program from Arduino.

CW (44:02):

Yeah. So there you go. Serial Wombat.

EW (44:05):

So you're not -

CW (44:06):

And it's a little chip.

EW (44:07):

You're not developing for the PIC. You're developing for the Arduino, which talks to the PIC.

CW (44:13):

Yeah. So it adds A to D and GPIOs. And so if you've got a really small thing that might have, let's say...a small number of GPIOs, or no ADCs, or small a ADC, this is a little 8-pin guy, and you can add a whole bunch of them on I2C and talk to a whole bunch of other stuff.

EW (44:38):

And it's pretty smart about these things.

CW (44:39):

Yeah. Yeah.

EW (44:41):

We also had Nick send us a link about Cyanobyte, which is meant to define machine-readable datasheets.

CW (44:54):

Oh yes, yes. I did see this. This is -

EW (44:56):

Device registers are defined with other pieces of metadata, command line to generate usable code depending on your hardware platform, Arduino, Raspberry Pi.

CW (45:09):

This was the sort of thing I was demanding a few shows ago, because I was dealing with, I think, the LIS2DH datasheet, which was annoying. And all datasheets are annoying in terms of, well, the one I just did has hundreds of registers, and they're all sparsely populated. And...you have to configure a lot of them.

CW (45:31):

And there's bits all over the place with shifts and masks. And turning that into C code is a multi-day adventure, which you will get most of it wrong, I've discovered in the last two days, just really fiddly and tricky to verify.

CW (45:45):

And it would be nice if the vendor just provided that since they made the table and the datasheet, they already know how. So this is the sort of thing that makes that possible. And I hope some people start adopting this, because it's really cool.

EW (45:58):

You aren't bitter though, are you?

CW (46:00):

It's just a waste of time...From an economics perspective, it's dead weight. It's -

EW (46:08):

It's not secret. It's not trademark.

CW (46:10):

It's imposing a cost that does not to exist -

EW (46:13):

Yeah.

CW (46:13):

- on your clients.

EW (46:16):

It would be trivial to do once and help people appreciate it. But this is how we end up with hardware abstraction layers from ST and -

CW (46:25):

Yeah, but having a system to take your register definition and put it into C code is a one-time thing.

EW (46:33):

Well, especially if this guy gets his way.

CW (46:33):

It's not an abstraction layer. It's a script.

EW (46:37):

Yeah.

CW (46:37):

So, yeah. So I like this, and, please, everyone start doing things like this so I can work less and complain less about computers. I'll still complain, but I'll just fill in with other complaints.

EW (46:51):

I have a few show things before we sign off.

CW (46:55):

Alright.

EW (46:57):

We talked about marketing. Patreon, the Slack group, now has a show and swap which you can swap boards, or you can just show people your hoard and make them jealous. The newsletter continues to improve. We are on Facebook, Instagram, Pinterest.

CW (47:16):

Pinterest.

EW (47:17):

And Twitter.

CW (47:18):

Okay.

EW (47:19):

...Oh, and Chris Lott wrote a very nice piece about Reinhard Keil's episode on Hackaday, so I will link that in.

CW (47:30):

Oh. Thank you, Chris.

EW (47:32):

And according to my Twitter, which of course is the source of truth and knowledge, people want 10 to 20-minute podcasts.

CW (47:42):

What?

EW (47:43):

The 45-minute podcast is too much investment.

CW (47:45):

Well, this right now is five 10-minute podcasts. This is a six-pack.

EW (47:51):

Yes.

CW (47:51):

What are they complaining about?

EW (47:53):

I don't know.

CW (47:55):

Okay. So...people like short podcasts. Okay.

EW (47:59):

And it seems like a whole heck of a lot of work to trim these down to 10 minutes.

CW (48:04):

I'm not going to do that.

EW (48:05):

Okay.

CW (48:06):

I mean, we could take -

EW (48:11):

We could just take the discussion about burnout.

CW (48:14):

Sure. For this episode. But when we have a guest,...that's a trickier prospect. I could take several interesting questions. I mean, it's an editorial thing. I could do it, but...by taking subcontent out of our existing podcast, I feel like that's cannibalizing our podcast. We're not going to get additional listeners, are we?

EW (48:34):

We would get the people who only want to listen to the 10 or 20-minute podcast, because they don't want to invest a whole hour.

CW (48:41):

What if we release the podcast is volumes. We'll just take the existing podcast, divide it up five ways, and release it once a day.

EW (48:50):

I think that that actually might work. I mean, given my new expertise with marketing, having read The Visual MBA book.

CW (48:58):

Of course, it would irritate the people who don't mind listening to long podcasts.

EW (49:02):

No, it would be two streams.

CW (49:04):

Yeah. Okay. Well, that's an idea. We need to think about it more. I'm not against it. I still have a slight preference to doing something additional that's a short podcast, but -

EW (49:16):

He wants us to have a 10 or 15 - podcast that's just us talking about whatever you want us to talk about.

CW (49:23):

Yeah.

EW (49:24):

Which might be whatever the previous guest talked about, but more our opinion.

CW (49:29):

Or something that's happening on the Slack or, yeah.

EW (49:33):

Yes. Today there was a post about LED colors and being able to convert from nanometers to color on your web browser so you can see what your LED colors will be.

CW (49:43):

So, yeah. Give us feedback about that, especially since it's minute 57 of this podcast, and anyone who wants a 10-minute podcast would have stopped listening a long time ago and would not have feedback that's relevant to this question.

EW (49:56):

We're not supposed to just ask for feedback. We're supposed to say, "What's one thing we could do better -"

CW (50:01):

Yeah, but -

EW (50:01):

"- to get out of our own way?"

CW (50:03):

But anybody wants a 20-minute podcast has stopped listening.

EW (50:06):

Has already given up. Yes. Yes. Alright. That's all, right?

CW (50:13):

I guess. So my meeting got canceled so we can keep going.

EW (50:16):

Yes, but our transcriptionist asked us to stop doing the super long episodes.

CW (50:20):

Keep it short. Keep it short. Okay.

EW (50:24):

Thank you for listening. Thank you to our Patreon Slack group for continuing to be amusing. You can join that if you want, Patreon Embedded. And, well, I guess you can still email us, show@embedded.fm, those are getting through again, or hit the contact link on embedded.fm for your "what's something we could do better." But you don't have to give us feedback.

EW (50:51):

[Winnie the Pooh excerpt].