Embedded

View Original

447: All Sorts of Weird Problems

Transcript from 447: All Sorts of Weird Problems with Chris Gammell, Chris White, and Elecia White.

EW (00:00:06):

Welcome to Embedded. I am Elecia White, alongside Christopher White. But I really want to confuse you today, so we're having Chris Gammell on as well.

CG (00:00:17):

Hi, everybody. I'm back. Thanks for having me back.

CW (00:00:20):

How are you doing? It's been a long time.

CG (00:00:22):

It has been a long time. I will be honest, most of the time I'm hearing both of you at like 2x speed. And so this is down tempo. This is down tempo embedded.fm for me. That's the live thing.

CW (00:00:35):

Well, I'll try to talk lot faster.

EW (00:00:37):

We can talk a lot faster.

CG (00:00:38):

Okay.

EW (00:00:38):

Can you tell me about yourself?

CG (00:00:39):

Sure, sure. I am a longtime electronics person, and I spend a lot of time on the internet as well, in places like the The Amp Hour and Contextual Electronics. And I work for a company called Golioth. I run a consulting forum, and I enjoy talking about electronics on the internet with folks like yourself.

EW (00:01:03):

You don't introduce yourself as an electrical engineer.

CG (00:01:07):

Oh, interesting. Yeah, I guess I haven't done that in a while. Usually when I'm introducing myself in public, I usually just say I design electronics, because that's pretty straight to the point what I want to talk about anyways. Because some people are electrical engineers, they're working on power lines, whatever. And I want people to ask me about electronics.

EW (00:01:30):

Fair enough.

CG (00:01:31):

Is that selfish? It's selfish.

CW (00:01:35):

And the lines have gotten very blurred in recent years.

CG (00:01:38):

Yeah. Yeah. I have been doing more firmware. I was excited to be asked back on here. I've been voraciously listening to this show and all your great guests, and doing more studying, and learning alongside my coworkers. And so I don't consider myself a firmware person yet. But I aspire to be.

EW (00:01:57):

Are you ready for lightning round?

CG (00:02:00):

Sure.

CW (00:02:01):

What is your favorite lightning round question?

CG (00:02:04):

Robot.

CW (00:02:05):

What is your favorite fictional robot?

CG (00:02:07):

Wall-E.

CW (00:02:07):

Okay. I just figured I had to ask it since it was his favorite.

CG (00:02:10):

Yeah.

EW (00:02:11):

You go to an industry conference evening party where you don't know anyone. What do you do?

CG (00:02:18):

Bring out the electronics that I brought with me and start showing it to people.

CW (00:02:22):

I feel like we're starting a role-playing game. Somebody reacts negatively to your electronics.

CG (00:02:25):

You turn left and there's a door.

CW (00:02:26):

Yeah. You forgot your power supply. What do you do next? What is your favorite mic to use yourself for podcasting or anything? I'd say Zoom H1 is the most versatile, because I bring it mobile with me.

EW (00:02:45):

If you didn't have a podcast, would you start one now?

CG (00:02:50):

I'd probably start a video channel now.

CW (00:02:53):

Favorite IoT device?

CG (00:02:57):

Chip set or end device?

CW (00:03:00):

End device.

CG (00:03:02):

Pass.

CW (00:03:03):

Least favorite IoT device.

CG (00:03:06):

Most of them.

EW (00:03:10):

Do you have a favorite kid's toy?

CG (00:03:13):

[Ooh.] It's not technically a kid's toy, but I own a melodica, and my daughter plays it a lot. And I think that's my favorite kid's toy.

CW (00:03:24):

What are your personal feelings about firmware ranked from 1 to 10, one being it should be banned, ten, you'd like to run firmware in your own head?

CG (00:03:29):

Five.

CW (00:03:32):

What would you have answered five years ago?

CG (00:03:36):

Five?

CW (00:03:37):

Oh, all right.

CG (00:03:38):

Yeah. Non-committal. Those were big extremes.

EW (00:03:42):

If you could teach a college class, what would you want to teach? Take your time. This will be 2x.

CG (00:03:51):

Yeah. A how to build anything MIT-style class, but probably I wouldn't be that good. Yeah.

EW (00:03:59):

You shouldn't say what you're qualified to teach. It's what you want to teach.

CG (00:04:02):

Oh yeah. How about this? Can I rephrase -

CW (00:04:04):

Archery.

CG (00:04:04):

- the question. What is the class that I wish I would've had, maybe?

CW (00:04:10):

Okay.

EW (00:04:10):

Sure.

CG (00:04:12):

And it's a mix between how to build anything at MIT and the analog electronics class that Larry Sears taught at my alma mater out of "[The] Art of Electronics." And maybe also Jay Carlson's class too. Can I smush a whole bunch of classes together?

EW (00:04:30):

Sure. I have no problem with that.

CG (00:04:31):

Yeah. Yeah. Okay, great.

EW (00:04:32):

We'll make it a whole semester.

CG (00:04:35):

Yeah. Whole year. Whole college career. How about that?

EW (00:04:39):

So I hear you work at a company called Golioth.

CG (00:04:44):

Nice one. I work at a company called Golioth, and I've heard it pronounced many different ways. Usually it's easy to tell when people are writing without much context, because then they spell it the traditional way with an "A," G-O-L-I-A-T-H.

EW (00:05:03):

Christopher corrected all my notes this morning.

CW (00:05:05):

I went and spell-checked her entire notes this morning.

CG (00:05:08):

Right.

CW (00:05:08):

Because I forgot that it was spelled differently.

CG (00:05:11):

Right. And if people haven't seen the actual spelling, there's IoT in the middle. And I have razzed John Barry, the founder and CEO, many times about it. There are many companies out there, where if you look at the spelling, you're like, "Wait, why is that spelled like that?" And there's usually an IoT in there somewhere, so, what are you going to do?

EW (00:05:34):

What do you do there?

CG (00:05:36):

I am the developer relations lead. And for hardware and firmware people, I often transpose that to be, "It's like being an applications engineer." So I do a lot of reference design hardware. So basically I am kind of the first user of a lot of different things. And I work with my good friend Mike Szczys, former editor of Hackaday, and firmware, par excellence. He's my right-hand man around firmware, and teacher.

CW (00:06:06):

Do you have users come to you and say, "Here's what I'm trying to do. Can you help me," or, "I'm having a problem?" Or are you more on the "push stuff to developer" side?

CG (00:06:18):

Yeah, it's the second one. And actually we're trying to hire the first one right now. So the way we split that up is, if someone came to us and said, "Hey, help me build this thing," it would be a field applications engineer.

CW (00:06:29):

Right. Okay.

CG (00:06:29):

Because they're often kind of reimplementing a lot of the stuff that an applications team at the factory might do. And so Mike and I are making this stuff kind of at the quote unquote factory and just trying to retarget all the Golioth stuff to different platforms, different application spaces, different hardware, different weird visualization things that we can dream up, that sort of thing. So it's really like a playground in the IoT space, which is great.

EW (00:06:59):

Actually, maybe we should do a little bit better definition.

CG (00:07:02):

Sure.

EW (00:07:02):

I mean, we've made jokes about IoT being in the name Golioth, and that's why it's possibly actually pronounced Golioth. But, okay, so there's something to do with IoT. There's something to do with Zephyr. It's got hardware. It's got software. What is it?

CG (00:07:21):

What is it? Yeah, that's a good question. So the way I talk about it is, there's two pieces. The product, the actual thing that people would and hopefully do buy is the server stuff, right? So it's a CoAP gateway. And there's a bunch of databasing stuff, and there's management console, so a website you can log into and see all the devices you have, device management console there.

(00:07:45):

And then there's a bunch of services, managed services, built on top of it. And then there's the device side, which I'll talk about in a second. But the main thing is, it's a way to kind of translate all the stuff you need to be doing on a small, constrained microcontroller device that's connected to the internet and then kind of make it suitable to talk to things that are very processing-heavy and out in the cloud world, basically.

(00:08:12):

So you think about, someone's running a massive database on AWS, it's not a great idea to do an HTTP call from a little cellular device out in the field that's battery-powered. It's better to do it over CoAP, which is a constrained application protocol, and to put some compression on it, and to talk to this gateway, and then use a bunch of the APIs that are set up to handle all of the data that you want to be sending back and forth to that constrained device.

(00:08:43):

And so Golioth is that cloud stuff. That is the actual product. Then there's a second device-side aspect, which is the enablement. And that's basically, "Now that I have this CoAP gateway and all this stuff that sounds big and scary," which it can be, "how do I actually talk to it from a piece of constrained hardware, like a cellular IoT device?

(00:09:06):

And that is the device side and the enablement piece. That is basically, Golioth has an open source SDK. There are multiple open source SDKs built around nRF Connect Studio, which is based on Zephyr. There's an NXP port, also in Zephyr. There's ModusToolbox SDK, which is really FreeRTOS, and we can talk about the FreeRTOS versus Zephyr thing. And then there's an ESP-IDF SDK as well.

(00:09:34):

So on all of these different vendor ecosystems, all of the things that it takes, a simplification of all the stuff under the hood, not the connectivity, but basically you don't have to open any sockets. You don't have to manage any of the connection stuff. It's basically a single line call. And all you say is, "I want to send this sensor reading to the cloud and I want it to be timestamped."

(00:09:55):

And that then is handled all the way up the chain, all the way through the cloud. And then that data is available for a certain amount of time on the Golioth platform. And then it can also be exported out to these large hyperscaler things and your cloud team that might want to have it passed through in a JSON packet basically over HTTP...

(00:10:24):

I think about it like Golioth helps with that really tight pipe down to your constrained device in the field and then helps that communication between the cloud and your device. And then it turns around...to cloud teams and says, "Hey, now that this data's here, let's make it easier for cloud teams to process it, and put it on an app, and control the device that's out in the field," that sort of thing.

EW (00:10:46):

So there's a lot there.

CG (00:10:48):

Yeah.

EW (00:10:48):

So I'm going to make an example, because I need concrete things. Let's say I have an array of a thousand seismic sensors.

CG (00:10:58):

Okay, that's a great example. Yeah.

EW (00:11:00):

And they're scattered around, let's say California. And I can get GPS readings. I can get good time. I can get the current activity level of tectonics. And so I bundle these up, and I send them to a Golioth server through some magic, through some Zephyr magic that's a single call and super cool. And then Golioth acts as an intermediary so that I don't have to talk directly to an AWS server or some other server that may change.

CG (00:11:43):

Yeah. Yes, that is all correct stuff. Yes.

EW (00:11:48):

And do you handle logging errors and firmware update?

CG (00:11:54):

That's right. Yes. Yeah.

EW (00:11:56):

Okay.

CG (00:11:56):

So let's just stick in the Zephyr world, because that's where I mostly operate with our device-side stuff. So Zephyr is a real-time operating system in an ecosystem. And what we do is, inside the Golioth Zephyr SDK, there's basically hooks into a lot of the stuff that's under the hood.

(00:12:17):

So under the hood in a lot of Zephyr systems, well, I think actually all Zephyr systems, the bootloader is MCUboot, and there's a logging subsystem as well. And so Golioth, then, the Golioth SDK, hooks into the logging subsystem. So...the four levels of logging that you might have, which are usually debug info, warning, and errors that might pop up on a serial console, you basically flip a switch and you say, "I want this to hook into the Golioth SDK."

(00:12:45):

And then all of those logging messages also get pushed up to the Golioth cloud. And they're visible on the console. You can push them out externally if you wanted to. Same thing for the over-the-air updates. You decide you want to use the OTA service. I'll say OTA normally for over-the-air. And you turn on a couple switches. You configure some stuff. You follow some of our example code.

(00:13:13):

And then basically it listens for new firmware updates. It downloads the package to a secondary memory location. And then it uses the MCUboot APIs to say, "Hey, there's a new image here. It's been validated. Go switch from Zone A to Zone B." And I'm sure both of you can relate to it. All of this stuff has always been possible, but it's often been custom.

EW (00:13:41):

But there have been other companies that have been trying to do this. I mean, Electric Imp -

CG (00:13:46):

Sure, yeah.

EW (00:13:47):

- and Particle, and Memfault.

CW (00:13:52):

Memfault is a corner of this though, right? They don't do so much the telemetry.

CG (00:13:58):

Yeah. So Memfault does really great OTA stuff, really great OTA stuff. But yeah, they kind of say, "The data stuff, do that however you want to". And so we know the Memfault folks, they're great. They do a really good job. Some of the other examples you gave there are tied to hardware, and...so there's two big things there. One is, if you want to do custom hardware, you're kind of out on your own there. So some of the other platforms that are vertically integrated, they really depend on having kind of like a daemon sitting on the custom hardware, where there's some part of the code that you don't control.

(00:14:34):

So you're not compiling in the OTA part. It's already been pre-compiled, or it's built into the hardware, or you're doing a two-chip solution there. So that's one thing. And then another thing is, even some of the platforms where maybe it's optional custom hardware, well, the reason that I joined Golioth was actually, John sold me on the thing when you when you go to production, which is, "What happens when you don't want to use Golioth-specific managed servers anymore?

(00:15:05):

"What if you have 10 million devices?" And the answer is Golioth, the Golioth cloud piece, the product piece, that can be packaged up and then licensed to go on anyone's infrastructure. So it can go on your AWS instance. It can go on your server closet in your facility, right, behind a firewall. You can basically take the Golioth product, the software, and deploy that anywhere. And that is not completely rare. There are one or two other companies that do that. But in this specific space with this hardware focus, I had never seen that before.

EW (00:15:42):

So you said licensing. Are you making money by licensing the whole thing so other people can implement their own servers, or by, not the hardware, because you're allowing people to design their own, and the device side is a free API, so where does the money come from?

CG (00:16:10):

Where does the money come from? Good question. Yeah, I think that's always a good question when you're talking to a startup that you're considering using.

CW (00:16:15):

Power harvesting.

CG (00:16:17):

Yeah. Yeah. Tiny, tiny Bitcoin miners.

CW (00:16:22):

No.

CG (00:16:25):

Please don't make that the title of the show.

CW (00:16:27):

No.

CG (00:16:27):

That would be really false advertising, right? I know how you do. Yeah. So, at the beginning, first 50 devices are free. So the Golioth cloud solution right now, the stuff I use every day, I talk specifically to the Golioth cloud version. And that's basically the Golioth software, effectively the Golioth enterprise software running on our own Google Cloud instance.

(00:16:57):

But it could be AWS, it could be Azure, whatever. And that's basically, past 50 devices you start paying per device per year sort of thing. And then, much like Digi-Key, the price drops as you add more units to it. But at a certain point there's a crossover where it makes sense to basically just have...your own version of the cloud.

(00:17:18):

And then that's when licensing comes in. And normally that is still administered by Golioth, but it's your infrastructure. So you're paying for the Amazon EC2 instances or whatever the thing it's installed onto [is], I guess that would actually probably be Kubernetes stuff. I am not in that world, and so I probably sound stupid there. But that would basically be like, you'd be paying your cloud bill and...if your company is big enough to do this sort of thing, you probably already have a cloud team paying a cloud bill. But it doesn't actually matter what that underlying infrastructure is, because it's all abstracted by Kubernetes.

CW (00:17:58):

I have a slight side question before we go back to discussing that.

CG (00:18:01):

Sure.

CW (00:18:02):

Since you get to see all this stuff, and presumably you get to see what customers are doing. You mentioned you could conceivably deploy all this to your own infrastructure, your really own infrastructure behind your own firewall. Has there been any movement away from quote the big cloud to, "Oh, I'm going to host my own stuff," or is it just pretty much still all people trusting AWS?

EW (00:18:27):

And Azure. Don't forget Azure.

CW (00:18:29):

Excuse me.

CG (00:18:30):

And Azure, Azure's huge. I mean, it's getting so big.

CW (00:18:32):

Yeah. Yeah.

CG (00:18:32):

They're eating the market. Yeah, I think there is that move, but it's usually teams that are so big that they have their own internal cloud teams basically making something that looks like Golioth.

CW (00:18:46):

Yeah.

CG (00:18:47):

And really that's when you get big enough, right? So John, the founder, used to be at Nest and they had this, but it was many, many hundreds of people doing that sort of thing. And building out a lot of the infrastructure. Because it was early on. Same kind of thing, you could build some of this stuff, but it's not accessible to small teams. And so, again, the reason I was excited about it, because it was me as a hardware consultant. I could deliver stuff that I had just never been able to do before.

(00:19:15):

I had projects where I would hire a firmware person, hire a cloud person, that sort of thing. And even still, that was kind of risky, just having three people doing that sort of thing. Now it's like you actually have these capabilities without needing to have your first couple cloud people.

EW (00:19:30):

Okay. So this sounds like software. I mean, it all sounds like a lot of software.

CG (00:19:37):

Yep. Yes.

EW (00:19:41):

But you say electronics.

CG (00:19:43):

Well, yeah. So when I go to trade shows -

EW (00:19:45):

Have we lured you to the dark side?

CG (00:19:47):

Yeah, it is a lot of software. Another reason I was excited is because I was excited to get better at firmware. I was consulting for three years in the hardware space, and one thing I talk about is, it was super choppy work, right? You do hardware, and I'd go hard on a project, and design a board, and it would be maybe a month of all the way through.

(00:20:10):

And maybe I'd have a couple people doing that, but then I wasn't doing the firmware, so it was like, "Alright, now I wait for the firmware person to go and tell me what I messed up and turn the crank three months from now." That sort of thing. And it was just super choppy work. And I started wanting to do more of it. And then I kind of had an opportunity to do more of it at Golioth. So that's another reason I was excited about the opportunity, learn more about RTOSs, learn more about firmware, learn more about deployment, that sort of thing.

EW (00:20:37):

So for RTOSs, Zephyr or FreeRTOS?

CG (00:20:42):

¿Por qué no los dos? I think it's important actually to make distinctions about ecosystem versus RTOS. That's one thing I've been doing a lot more lately. Because Zephyr is an RTOS, but it's really an ecosystem. It's both, whereas FreeRTOS is an RTOS first, and there's no ecosystem unless you put one around it. So ESP-IDF is an ecosystem built on top of FreeRTOS, and ModusToolbox is the Infineon ecosystem built on top of FreeRTOS, that sort of thing.

EW (00:21:14):

And Zephyr is both.

CG (00:21:16):

And Zephyr is both. That's right. Yep.

CW (00:21:20):

And we've talked about Zephyr. It takes its cues more from the Linux world than the traditional RTOS world.

EW (00:21:26):

Yes. But it's still an RTOS.

CW (00:21:28):

Right. It's still an RTOS. Yeah.

EW (00:21:29):

It's still small.

CW (00:21:30):

It's not Linux, but many of its design choices and things -

CG (00:21:36):

Have you tried Zephyr, or no?

EW (00:21:38):

Just a little bit.

CG (00:21:40):

Yeah.

EW (00:21:40):

Mostly I had some students when I was teaching use it, and that made me go investigate more. And I mean, it actually seemed a little nicer than FreeRTOS, definitely more integrated into the nRF. And so -

CG (00:21:58):

Yeah. Yeah.

EW (00:21:58):

It depended on which chip you were using. Modus, you definitely would use FreeRTOS. And last time I looked ST seemed easier with FreeRTOS.

CW (00:22:12):

I'm being so good right now.

CG (00:22:14):

Why?

CW (00:22:14):

Because you guys keep saying Modus.

EW (00:22:16):

And you just want to barf on it, don't you?

CW (00:22:18):

Well, that's a bit extreme, but -

EW (00:22:21):

Make gagging sounds?

CG (00:22:22):

Maybe. They're trying. It's better than the previous IDE system -

CW (00:22:31):

Yeah.

CG (00:22:31):

- that they had.

CW (00:22:31):

Yeah.

EW (00:22:32):

Okay. So where were we? Zephyr -

CW (00:22:37):

We were talking about Zephyr and then you asked him why he became a firmware engineer.

EW (00:22:43):

No, it was, "It seems like the RTOS you choose is in large part dependent on the chip you choose."

CW (00:22:50):

Right.

CG (00:22:52):

Yeah. I think there's a happy path for each chip vendor, and I'm doing some of the silicon partnership stuff for Golioth in early days as well. So I know a lot of the people in those companies I mentioned, and it's actually kind of cool, meeting them and stuff. But I'd be curious to hear if you can relate to this. But once you're in a chip ecosystem, once you decide on your micro, I feel like that kind of defines so many other things about the project.

CW (00:23:23):

Yes.

EW (00:23:23):

Yes.

CW (00:23:23):

And it's distressing, especially, well, some micros are more about that than others. The Infineon stuff is very opinionated, I feel like. ST is -

EW (00:23:35):

And so is Nordic. Nordic is super opinionated.

CW (00:23:37):

57- probably the least opinionated, where people kind of can do what they want -

CG (00:23:40):

Yeah.

CW (00:23:40):

- even though Cube is what they recommend, but you can always do more.

CG (00:23:44):

Yeah.

CW (00:23:45):

But I felt like doing projects. We did a recent project with Cy, Infineon, sorry, I keep trying to say Cypress.

CG (00:23:54):

Same. Same. They are merged, for people that don't know that they bought Cypress. Yeah.

CW (00:23:58):

If you wanted to do something different than they wanted, it was like, "You spent a great amount of time switching us to GCC"

CG (00:24:04):

Yeah.

CW (00:24:04):

And that was really, really hard compared to doing that for ST, I think. Would you say so?

EW (00:24:10):

Oh, yeah.

CW (00:24:11):

Yeah.

CG (00:24:11):

Yeah.

CW (00:24:11):

All sorts of weird problems. So yeah, definitely. And clients, forgive me for going on about this, but clients tend to like that, I think. It's like, "Oh, we got this chip, and we got all this stuff. And we don't have to think about it."

CG (00:24:25):

Yeah.

CW (00:24:25):

And so there's been a number of clients I've gone into, and I was like, "Well, we chose this, and here's what it is. And we hate it, but also we love it."

CG (00:24:32):

Yeah. One thing I think about is, I look upon my past choices with a bit of guilt. And so much of it is, "I am just specsmanship, and just looking at datasheets," and, "Oh, this one has this peripheral," and I sell myself. I'm like, "Oh, I really need six USARTs, and I really need this DMA thing that's super fancy," whatever.

(00:24:53):

And I gave no thought to the firmware person's feelings.

CW (00:24:59):

Also, you have to program it in Fortran.

CG (00:25:01):

Right, exactly. Exactly. And now I am that firmware person. I'm like, "Oh, yeah." And I think increasingly over time that companies are still going to do this, especially ones that are super-siloed, right, where there's a hardware team, and there's a firmware team. And they talk during integration, and that's about it.

(00:25:18):

But talk to your hardware folks, firmware folks, and ask them to be nicer about this. Man, I wish I would've been a little bit more empathetic on this side of things...I love Nordic. A lot of the stuff I listed, they all have ups and downs, but the Nordic stuff is what I'm using most often right now.

(00:25:41):

And their software focus, they're becoming a software company that makes hardware, which is interesting. And I think the chip companies that win over the long term do that. And to their credit, Espressif is doing that too, which is interesting. They have a very strong development team. So, yeah.

EW (00:26:00):

Espressif came out and they had a super cheap, interesting chip that was a Wi-Fi chip, and people just adored it. And I never really got into it, because it didn't seem professional level. It seemed like a great hobby thing, but didn't have all of the features I wanted for clients.

CG (00:26:27):

Firmware or hardware features?

CW (00:26:28):

Or the polish, maybe?

EW (00:26:31):

The firmware features. The software features.

CW (00:26:33):

Yeah. Okay. Sure.

EW (00:26:33):

It was a little buggy. You had to play in their playground. The firmware update was [waah].

CW (00:26:41):

The Wi-Fi API was weird too, -

EW (00:26:42):

Wi-Fi API -

CW (00:26:43):

- at least initially.Yeah.

EW (00:26:45):

To set the user's Wi-Fi was totally dorky. But I also know that -

CG (00:26:53):

...That's such a user-focused thing though, -

EW (00:26:55):

Yes.

CG (00:26:55):

- that if you don't get that right, that can be really impactful.

EW (00:26:58):

And it's the first thing the user does. So if it looks bad, -

CG (00:27:00):

Yeah. Yep.

EW (00:27:00):

- it just all looks bad.

CG (00:27:02):

Yeah.

EW (00:27:02):

And there wasn't an easy way to change it. But I mean, I don't even want to say a dozen years ago, because I don't know how long ago it was, but that was their first foray, and it made a pretty big splash. But I never got into it. And I know Espressif has changed a lot since then.

CG (00:27:22):

Yeah. Yeah. They keep investing quite a bit...I feel like most people come to Espressif in kind of the Arduino context, increasingly the PlatformIO context, which is usually using Arduino core. And making that switch, I remember, Bart Dring, who's a Chicago friend, he was using ESP-IDF. And I just remember looking and being like, "I have no idea what you're doing."

(00:27:44):

But he was getting really into [it], as that was getting built up. And I think they've invested a lot in that ecosystem, and increasingly, like I said, it's ecosystem level. They're introducing a kind of marketplace for sensor drivers and things like that. So all of these things are making it a better experience, I feel like, for pro-level developers. But I think most people are still coming to it from Arduino. So there's different expectations. And then they also have a Zephyr team. So they've continued to port to Zephyr as well. So kind of a dual solution there.

CW (00:28:26):

It's an interesting device. Because I feel like it lives in its own architectural corner compared to the other ones, which have traditional -

EW (00:28:33):

They're Cortex-Ms now.

CW (00:28:35):

Oh.

CG (00:28:36):

They're RISC-V now .They're RISC-V.

EW (00:28:38):

Oh, they're RISC-V.

CW (00:28:39):

Yeah, okay, well -

EW (00:28:39):

So, yes -

CG (00:28:39):

The C3 is a RISC-V.

CW (00:28:40):

Yeah. Right.

CG (00:28:41):

But it's the smaller part and lower powered. They still have Xtensa on some of the newer stuff.

CW (00:28:45):

Right. That's what I was thinking about.

CG (00:28:46):

The H2 is one of their new 802.15.4 chips. So that can run Thread and ZigBee, and they're getting big into Matter. And, that is, I believe RISC-V. And I think all of them have kind of a low-power RISC-V part as well.

CW (00:29:07):

It's funny, because I keep seeing ESP parts being taped onto low-power parts as the Wi-Fi.

CG (00:29:15):

Yeah.

CW (00:29:15):

So it's this thing with, I don't know, 200 megahertz and 32-bit tons of power attached to -

CG (00:29:20):

Yeah.

CW (00:29:20):

- the Raspberry Pi 2040.

CG (00:29:22):

Right.

CW (00:29:24):

It's just so funny. Why are you doing this?

CG (00:29:26):

Right. Right, right. And they still use it, and they slap the ESP-AT firmware image on there. And then they just talked it over AT command.

CW (00:29:34):

Yeah.

CG (00:29:36):

I mean, to go back to the IoT thing, that's how a lot of stuff still operates, right? So if you want to use AWS IoT, but you want to still use your PIC18 -

CW (00:29:45):

Yeah.

CG (00:29:45):

- while you grab a ESP-32, or you get a Quectel modem, -

CW (00:29:49):

Yeah.

CG (00:29:49):

- and there's images that you can flash onto these things that, again, you're just sending AT commands, effectively, to it. But then there's added cost.There's added power. So all of these architectural decisions that get made very, very early on can really impact your product performance when you really get to the optimization stage.

CW (00:30:09):

You have an RV towing a Mini.

EW (00:30:14):

Yeah. It's worse when the Mini tows the RV.

CW (00:30:15):

Yeah.

CG (00:30:16):

Yeah, it's true.

EW (00:30:19):

Okay, so -

CW (00:30:20):

I had a couple more -

EW (00:30:21):

Oh, go ahead. Go ahead.

CW (00:30:22):

- Golioth questions. So something I was curious about, you talked about how the API is super simple and you just send to the cloud. But having done some projects that do IoT stuff, there's a lot of security and certificate stuff that needs to be managed. How do you make that easy if you did?

CG (00:30:47):

...So if you're booting a Golioth program right now, I'd say don't use certificates for prototype.

CW (00:30:56):

Oh, okay. Right, right. Sure. Sure. Yeah.

CG (00:30:57):

So we have pre-shared key IDs and pre-shared keys, PSK ID, PSK, which is basically username, password.

CW (00:31:04):

Yeah.

CG (00:31:05):

And so Zephyr has a bunch of shells in it, which is awesome. So...the way that we normally do it, and when I say we, I mean Mike does it, and then I go and type in stuff after he's done it. But basically there's a settings service and a settings shell inside of Zephyr, right? So you turn that on in the prj.conf files, which are basically the Kconfig, basically how you turn things on and off.

(00:31:34):

And so you turn on the shell there, and then you say, in one of the other configuration files, "Hey, I'm going to set the Golioth credentials in over the UART. And so then when your device boots up, you go onto the serial terminal, you type in your PSK, PSK ID, and then you are validated onto the Golioth cloud using Mbed TLS. It's actually a DTLS encryption, not encryption, authentication.

CW (00:32:03):

Authentication, encryption.

CG (00:32:03):

It's DTLS connection.

CW (00:32:07):

Yeah.

CG (00:32:07):

Because it is UDP instead of TCP, so it has to be DTLS. I've learned a lot of these things over time. I still don't quite get it, but I know, so basically, you can't connect to Golioth unencrypted. But that's kind of the simple way to do it. Then, like you said, certificates are this big hassle.

(00:32:26):

But it's pretty easy, so we have a new certificate generation feature as well, so that you can generate and then you'd have to have your private key store, or what is it called?

CW (00:32:41):

Vault?

CG (00:32:43):

PKI?

CW (00:32:43):

I don't know.

CG (00:32:43):

Private key infrastructure.

CW (00:32:44):

Right, right.

CG (00:32:46):

Yeah. Basically like a vault where you would have your private keys stored somewhere secure. And then you would have the public keys. You would never upload the private keys to Golioth. You would only upload the public keys. You would never upload the private keys.

CW (00:32:59):

No, you put the private keys in GitHub.

CG (00:32:59):

Yeah. Right, right. Put them on Twitter. Why not? Nobody goes there anymore.

EW (00:33:04):

And so Golioth wouldn't have access to my data then.

CG (00:33:08):

Golioth would have access to your data, because it would be decrypted once it hits the CoAP endpoint.

EW (00:33:19):

What if I didn't want it to be?

CG (00:33:21):

Then you probably wouldn't send packets to Golioth, because we visualize the data that comes through Golioth.

EW (00:33:27):

 Oh.

CG (00:33:29):

So where would you want it to go in that case? I mean, so let's go back to the seismology example that you gave. So you'd want to have encrypted accelerometer data that doesn't get displayed in Golioth?

EW (00:33:43):

Yeah.

CG (00:33:43):

And it just forwards it along?

EW (00:33:45):

Yeah. I mean, I don't want you to be able to see my data, because nobody will ever know what my seismic sensors are actually doing.

CG (00:33:57):

Where is it getting decrypted?

EW (00:33:59):

On my servers, those servers that are supposed to pick up the data from Golioth?

CW (00:34:05):

Right. Yeah, yeah.

CG (00:34:07):

I don't have a good answer to that one, because I've never seen anyone do that. It kind of defeats the purpose too, right?

CW (00:34:11):

Yeah.

CG (00:34:11):

So you might have kind of the constrained pipe at that point, but at that point you would just kind of set up your own CoAP endpoint on your servers, and then you would just talk directly to that, right?

(00:34:22):

So you're assuming all these little sensors are cellular-based, right? They have a connection to Golioth over CoAP, right? And they have a certificate or a PSK, PSK ID, talking to the Golioth servers. And maybe you just want OTA updates from the server. That's fine. You could just do that. But then if you wanted to only send your data somewhere else, because you didn't want Golioth to have access to it, then I'd say just bypass Golioth and go around, and have your own CoAP server. But then you're paying for infrastructure twice at that point. And you'd have to manage your own CoAP endpoint, which is non-trivial.

EW (00:35:02):

There's some good reasons to do that. But I have a couple questions before I get to them.

CG (00:35:05):

Sure.

EW (00:35:06):

What about health checking? Do you check heartbeats? Do you plot sensors that are rebooting constantly, or is that all Memfault?

CG (00:35:20):

So there is a heartbeat that gets checked on the console. Basically you can see kind of last connection time, that sort of thing. In terms of trace data, off the actual processor, that's where Memfault is just fantastic. So that kind of thing, you probably want to do Memfault for that, the kind of lowest level.

(00:35:43):

But if you're okay with just logging messages, connection status, that sort of thing, that's kind of where we don't have any of that stuff today. So, sorry, we have logging and connection status. We don't have the trace kind of stuff, because Memfault's a really great solution for that sort of thing.

EW (00:36:02):

But if I had a thousand sensors, and I needed to know which one was offline, I could probably do that.

CG (00:36:10):

That is accessible from Golioth. Yeah. Yep. And it's accessible from the REST API too, right?...So a common context in a lot of IoT things where people are like, "Well, I can set up my own MQTT broker," I'm like, "Yes. Yes, you can. And that is great," but an MQTT broker kind of sitting out in the world, say you just had a Raspberry Pi in your home office running an MQTT broker. Yes, you could use that as a IoT kind of concentrator of sensor data, and you could connect to it. But there's a couple things missing from there. One is the databasing aspect, right? So there's a caching timeout on an MQTT broker.

(00:36:53):

So you say the temperature is 23, and you're sending that from afar to this broker. And maybe something's listening and saying, "Oh, I just saw that sensor 55 just updated and says its temperature is 23." But sensor 55 now sends the temperature went up by a degree. That last reading's gone, right?

(00:37:15):

So unless you're doing some kind of databasing on that MQTT broker, that data, it doesn't persist, at least as far as I understand it. Again, maybe I'm wrong about that sort of thing, but I'm pretty sure that's correct. So you need to basically be doing that databasing yourself. You need to listen for data. Often I hear people say, "Oh, I write Python scripts, and I put it into a CockroachDB or whatever.

(00:37:38):

And it's totally possible to do it. But writing scripts to do that sort of thing is very fragile from my perspective, especially if I'm writing them. And then the other thing is, then how do I access that data? So you think about, maybe my device out in the world is speaking over MQTT, which is its own protocol, or sorry, network layer. And no, it's protocol. It's protocol. And so that sensor 55 is out in the world, and it's giving me temperatures over MQTT. Well, if I want to be listening to that, I also need to be speaking MQTT to listen to it. And it's possible to do that.

(00:38:19):

You can have interfaces. But at some point, it's usually better to have something like a REST API. So basically you think about an app, an app on your phone probably doesn't want to be speaking MQTT to some broker somewhere. Instead it wants to do a call to an API that is kind of fixed in time, and then it can go and fetch the data. And so that's kind of the REST API layer. So again, things that are external to the service, whatever it is, if not Golioth, you have an app, you have a website, whatever, you want some kind of generalized interface to access that data and hopefully control the devices out in the field. Because you want it to be bidirectional.

EW (00:38:59):

So back to the private data. Let's say it's someone's heartbeat or someone's location, any personal information you don't want Golioth to have access to.

CG (00:39:10):

Okay.

EW (00:39:12):

You're just not handling that case right now?

CG (00:39:18):

Yeah, all data sent through the Golioth SDK to the Golioth console is decrypted and displayed for your convenience. So yeah, that is -

EW (00:39:29):

I mean, I think about companies like Fitbit where that was a huge deal for them that -

CG (00:39:34):

Sure, sure.

EW (00:39:34):

- it was encrypted end to end, or ShotSpotter, where they absolutely would not let you have any data, but they would've loved the monitoring service. Which actually reminds me, can I burst data to Golioth? If I get a seismic event, can I then send you high quality data that covers 60 seconds? Or is it really just one piece of information at some constant frequency?

CG (00:40:05):

That is determined only by the tier of service that you have. So there's different tiers of service based on how often you can send data, but there are burst limits as well. So yeah, it is possible.

EW (00:40:19):

Okay.

CG (00:40:22):

...So basically, if you think about it, the CoAP endpoint, if you're validated to send data to that CoAP endpoint,  you can kind of send it as often as you want. If you send way too much, it's going to start rejecting calls, because we had an early user who said, "Yeah, something's not working with this device." And we went and looked at it, and they were writing this really tight loop on an ESP32, and they were sending 20,000 data points a second. And we're like, "Yeah, that's too much. That's too much. You would never, ever do that." And yeah, that's why it didn't work for them.

EW (00:40:56):

You said CoAP endpoint a bunch, and I should have asked, what exactly is that?

CG (00:41:01):

So CoAP is Constrained Application Protocol, and basically it is a lower overhead, networking layer. I think I'm saying this right. But basically it's kind of an alternative to MQTT that has lower overhead. It's UDP based. And it runs a lot of things, it's optimized for cellular. That's kind of where Golioth started, was in the cellular space. And it also works on things like Thread. So I keep saying CoAP endpoint, but that part is invisible to the user. You won't have to be thinking about it.

CW (00:41:49):

Yeah, we used it at Fitbit in the later days. But yeah, it's just another networking protocol that tries to take some of the overhead out of what people were doing with, like you said, HTTP.

CG (00:42:04):

Yeah. Another thing that's built into the SDK as well is...compression as well. So there's CBOR compression. So again, really you're just using the API, but then you can basically say, if you want it to be JSON, or if you want it to be CBOR, which is serialization compression. And that saves another 20% overhead as well. So again, if you're doing cellular stuff, that really starts to add up on your cell bill, and your power, and all that other stuff.

EW (00:42:37):

So do most of your users use cell modems? Or are they heading towards Wi-Fi?

CG (00:42:47):

Because it's a lot of industrial users, there's a lot of cellular, but it's a healthy mix. So the four things that we support are cellular, Wi-Fi, Thread and Ethernet.

EW (00:42:59):

Not ZigBee.

CG (00:43:02):

ZigBee doesn't have an IP address, and so, yeah, no.

EW (00:43:06):

I mean, they have -

CG (00:43:07):

So the only reason, yeah -

EW (00:43:08):

Sorry, I'm not going to argue with you about that. ZigBee does have addresses, but not IP addresses. Why would I say anything different? Okay, go ahead.

CG (00:43:16):

Yeah. The only reason that Thread works is because the border router in a Thread context kind of makes that stuff invisible. And then all of the Thread devices all have IPv6 addresses, but the border router has to have a NAT64 translation layer, or else it won't work. Because you need to go from IPv6 to IPv4.

EW (00:43:38):

Somebody could totally make a ZigBee router to do that, but -

CG (00:43:42):

Yeah. Yeah.

CW (00:43:42):

Well, Thread's going to win.

EW (00:43:43):

- I don't want to do that.

CW (00:43:44):

Thread's going to win. Everyone's implementing Thread.

CG (00:43:45):

Right.

EW (00:43:45):

That's good.

CG (00:43:47):

Yeah.

EW (00:43:50):

Well I have more questions about Golioth, but I also want to ask you questions about other things. So, let's see. Are you still doing that podcast you used to do?

CG (00:44:04):

Which one?

EW (00:44:06):

Oh, well that was -

CG (00:44:06):

The Amp Hour?

EW (00:44:07):

Yes. The Amp Hour.

CG (00:44:08):

I still do The Amp Hour.

EW (00:44:09):

Yes.

CG (00:44:09):

I still do The Amp Hour. And I did the Contextual Electronics Podcast for a while, but that fell away once my daughter was born. And maybe we'll go back to it someday, but yes, still have The Amp Hour, and have interesting guests on, and yeah. Good times.

EW (00:44:33):

For folks who haven't heard The Amp Hour, all three of them who listen to this show, tell me about it.

CG (00:44:41):

Sure. It is a mostly weekly podcast about designing electronics and people that are in the industry doing novel things. Increasingly we talk about AI stuff, which bugs me, but we're not alone in that, I hear.

CW (00:45:01):

I'm not going be talking about it much more.

CG (00:45:02):

Yeah. And yeah, trying to find things that are interesting in the space, because there's just so many different areas. You think about the differentiation between someone talking about a super, super low overhead RISC-V processor versus someone who's doing 250 kilovolt power line installation type thing.

CW (00:45:34):

Yeah.

CG (00:45:34):

They're just so disparate and yet it all still kind of falls into the same general area. And so there is a lot of interesting stuff out there, and we're just trying to still find some commonality amongst it. Mostly it's just whatever I like to be honest.

EW (00:45:49):

Yeah. I understand. I was going to say, "Well, how does AI fit in there?" But really, it's whatever you like.

CG (00:45:55):

Yeah.

CW (00:45:55):

It's hard not to talk about AI these days, because the AI -

CG (00:45:58):

Yeah, it's kind of [inaudible].

CW (00:45:59):

- tells me to talk about it. So, yeah.

EW (00:46:03):

Are you still having shows with Dave very often?

CG (00:46:06):

Yeah, we do about every other week. Yeah. Dave's busy. I'm busy, so sometimes we miss,  but, yeah.

CW (00:46:16):

How are you feeling about podcasting in general?

CG (00:46:18):

That is a good question. I will start with, I am incredibly grateful and amazed that people still listen.

CW (00:46:31):

Yeah.

CG (00:46:31):

And for everybody who is listening, thank you. It warms my heart. I don't think I'm alone here. We've never been doing it for the money. I still think it's a great way to convince people to talk to me for an hour.

EW (00:46:48):

Yes.

CG (00:46:50):

Whereas they might not, if it was just a random LinkedIn ping. So from all those things, it is still great. Whether it is a medium that's going to keep up, or whether anyone seeks out new shows anymore, I don't really have much visibility into that, but I think much like both of you, I don't spend much time on the marketing aspect. And I'm a lot better off psychologically if I'm not like worried about whether or not people are listening. I think it's just focusing on the people that do and enjoying that.

CW (00:47:27):

Yeah. I think I agree with everything you've said. That's pretty much how I feel. And I feel like we've built a little community around the show, and people give us feedback, -

CG (00:47:36):

Yeah.

CW (00:47:36):

- and talk about things, and that's very gratifying. And there were probably times a few years ago when I was thinking, "Well, what can we build this into?

CG (00:47:43):

Yeah.

CW (00:47:43):

And not so much thinking about that. It's like, "Okay, this is what it is, and it's very enjoyable." And we've backed off a little bit, because it was getting challenging to keep up at the pace we were going.

CG (00:47:56):

Yeah.

CW (00:47:57):

But yeah, I don't know what's happening. I mean, I feel like podcasting as a medium has kind of plateaued a bit. There was the whole explosion around all these very famous people doing things and the whole Spotify thing. And that seems to have been a miss, I think, in broad strokes. And so yeah, I think it'll probably continue as a successful medium, but I think it's past the hype stage.

CG (00:48:22):

Yeah. Yeah. I think that's right. Yeah, I have been listening with a bit of concern with both of you and the burnout, and I'm hoping you're doing a little better.

CW (00:48:35):

No.

EW (00:48:37):

Well, Chris just started his rest. And I am doing better, but it's easy for me to backslide still.

CW (00:48:50):

I was very burned out. I was reaching levels of high burnout two or three weeks ago, and then I had to push really hard to finish something for three weeks solid. And now I am totally fried.

CG (00:49:04):

Yeah.

CW (00:49:04):

So I am hoping that some rest will -

EW (00:49:07):

But you're taking a month or two -

CW (00:49:09):

Yes, but I'm not good at rest.

EW (00:49:11):

- or more off.

CW (00:49:11):

My brain is full of, "Well, now that I'm not working, look at all these things I should do."

CG (00:49:14):

Right. "Look at how much time I have," yeah.

CW (00:49:15):

"Look at how much music I could do."

CG (00:49:16):

"I could start more projects."

CW (00:49:16):

Yes.

CG (00:49:16):

Finish one project, or start a dozen, right?

CW (00:49:20):

Yeah.

EW (00:49:21):

Work on the ukulele, -

CW (00:49:22):

I have two -

EW (00:49:22):

- bass for that guy, -

CW (00:49:24):

- woodworking projects to do. I have session work to do for bass. I have another album to start writing, all that stuff. But I'm like, "But also, I could watch YouTube for six hours straight on the couch."

CG (00:49:36):

Yeah. I've never watched on the couch before. That's not good. I wouldn't do well there. I mean, I would, I would melt into the couch at that point.

CW (00:49:44):

That's exactly, yes.

CG (00:49:46):

YouTube is mostly lunchtime for me. That's my main time -

EW (00:49:51):

What do you watch on YouTube?

CG (00:49:53):

- when I allow myself to watch. A lot of Colbert and late night shows, just clips from that. I like their monologues. That's kind of how I get my news as well, which is for better or worse, if I'm not laughing, I'm crying kind of thing. And then I really like Wendover Productions. Do you watch that one?

CW (00:50:12):

I don't think I've heard of that one.

CG (00:50:14):

Oh, it's so good. It's about a lot logistics. So Wendover and -

CW (00:50:19):

Oh, oh, yeah. Yeah. Okay. I think I know what that is.

CG (00:50:21):

Yeah, a lot of airlines.

CW (00:50:22):

Right.

CG (00:50:22):

And just weird stuff. Real engineering. CGP Grey. Do you watch CGP Grey?

CW (00:50:28):

I have watched CGP Grey. I haven't recently.

CG (00:50:30):

There is a video that just came out about state flags, obviously U.S. centric, but it's a critiquing of state flags. He's grading the states in a class. It is 18 minutes, and it's fantastic. Highly, highly, highly recommend it. I can send the link after this if you want to add that in. It was just so snarky and fun.

CW (00:50:52):

I'll have to watch that one.

CG (00:50:53):

Yeah.

EW (00:50:54):

Yeah. I do like that guy. I mean, there are some I like for particular reasons, like if I have a math problem that I don't understand, 3Blue1Brown is my go-to for that if they have an answer.

CG (00:51:10):

Oh.

EW (00:51:13):

But if I am trying to rot my brain, there's this woodworking guy, I think it's Black Table, black something?

CG (00:51:25):

Oh.

EW (00:51:27):

And he does woodworking, and it's just so soothing.

CG (00:51:32):

Yeah. Yeah. That and then John, the Golioth founder got me into vintage tool repair, you ever watch those?

EW (00:51:39):

Yes.

CW (00:51:39):

I've watched some of those. I'm not sure it's the same channel. There's a couple of them, but yeah, yeah.

CG (00:51:43):

There's a couple of them. Yeah. Yeah. Yeah. And then the Applied Sciences, the WORLD, and the Mark Robers, and all of the sciencey kind of stuff. That's great too. Yeah.

EW (00:51:56):

Yeah. Well, and I mean, we didn't mention Ze Frank, because that's just a given, right?

CG (00:52:01):

Yep. Yep. Jeff Geerling. Yeah, I'm just going through my channels now. So, yeah. So many good ones, really a lot of good stuff out there. And I could just keep going.

CW (00:52:11):

I need to get my recommendations to stop just giving me music theory YouTubes.

CG (00:52:15):

Oh, yeah.

CW (00:52:15):

Because they can be relaxing and fun, because some of them go through, "Oh, here's eight songs that use this chord progression, and here's how it works," and stuff. And those are fun to watch.

EW (00:52:24):

Well, there was the one about there being an H.

CW (00:52:27):

Oh, the H note.

EW (00:52:28):

The H note.

CW (00:52:29):

Yeah, that was pretty -

EW (00:52:29):

That there's in fact an H note.

CG (00:52:31):

Oh.

CW (00:52:31):

Yeah.

CG (00:52:31):

Really.

EW (00:52:31):

It's not just ABCDEFG for the chord.

CW (00:52:33):

It made me so mad. It made me so mad though.

EW (00:52:35):

It was so awesome. It's so much fun.

CG (00:52:38):

Adam Neely, I'm guessing you watch Adam Neely too.

CW (00:52:39):

Yeah, I've watched some of Adam Neely, and he's got a ecosystem of other YouTubers that kind of -

CG (00:52:45):

Oh yeah, that's right.

CW (00:52:46):

- that he interacts with, yeah. But yeah, for the garbage stuff, I tend to, yeah, like you, I watch clips of late night shows, especially old ones, stuff from the eighties. It's like, "Oh, it's David Byrne -"

CG (00:52:57):

Oh yeah.

CW (00:52:58):

"- in 1982 on Letterman or something. It's like, "Oh my God, "

CG (00:53:02):

Yeah, that's great.

CW (00:53:02):

" this is so weird to watch."

CG (00:53:03):

Yeah.

EW (00:53:04):

I could watch Grace Hopper on Letterman on repeat.

CG (00:53:07):

Oh, yes.

EW (00:53:07):

She was so funny.

CG (00:53:09):

So good. Yes. That's great.

EW (00:53:12):

Okay. But when you aren't podcasting, and you aren't working, and you aren't hanging out with the kid, you also, how is there a time for this? There's Contextual Electronics.

CG (00:53:27):

There's not a lot of time for that. That has been on the downside. So yeah, I've been thinking about it more. So I talked about this on The Amp Hour two weeks ago. Like I mentioned here, I'm doing more partnership-type stuff. And just edging away from technical stuff always kind of gets my hackles up a little bit, because I want to stay sharp and engaged, and I'm just happiest when I'm doing technical stuff. And so I've been kind of putting together curriculum for myself, and then I started thinking, "Oh, some of this would be good if I made this curriculum for The Amp Hour or for Contextual Electronics rather." And it's like, "Oh, bad Chris. No, don't do that."

EW (00:54:08):

Well, what is the curriculum you're looking at?

CG (00:54:12):

So I have a couple of goals for myself around CI/CD type stuff. So Shawn Hymel has a really good series on Digi-Key, and I want to be putting some toolchains on there just to get better at having standardized firmware builds and things like that. But then also just firmware stuff, hardware stuff. I have all these things that I want to be learning and getting better at.

CW (00:54:42):

Hang on to that, Chris.

CG (00:54:45):

It's not really curriculum. Yeah, it's not really curriculum.

CW (00:54:47):

Hang on to that.

CG (00:54:49):

Yeah.

CW (00:54:49):

Don't ever give that up. I did, but don't ever give it up. No. No, it's, yeah.

CG (00:54:54):

I don't know. I feel like you're going to get back there.

CW (00:54:56):

I hope so. I hope so.

CG (00:54:56):

You're going to get back there.

CW (00:54:56):

I hope so. Yeah, it's hard, because I want to be excited about technical things.

CG (00:55:04):

Yeah, I was thinking about Elecia's class actually, and I wanted to ask about it actually. So when you prompt the students, you're not doing the class anymore, right?

EW (00:55:15):

Not, but there might be more.

CG (00:55:17):

Okay.

EW (00:55:17):

And so I'm trying to figure out how much to say. So go ahead. I'll figure out -

CG (00:55:21):

Okay.Oh, sure. So how about the past classes? Let's just talk about that. In past classes, when you prompted them, what was the prompt of things they were supposed to build? Because I remember it wasn't a specific hardware platform, right?

EW (00:55:32):

Right. It was something that had a Cortex-M that had at least one button, at least two different peripherals, like SPI or PWM, had a UART debug console. Oh, and it had an interesting algorithmic component.

CG (00:55:55):

Okay.

EW (00:55:56):

And so, it was a -

CG (00:55:57):

That's good. Yeah.

CW (00:55:58):

It was very open-ended, but with, "You must at least do these things."

EW (00:56:02):

Yes.

CW (00:56:02):

Yeah.

CG (00:56:03):

Yeah. Okay. Yeah, no, that's great. I think, it is always kind of that balance of, how prescriptive are you? So compared to Jay Carlson's college class that he taught was with the EFM8 specifically, right? And they had set curriculum, and the nice thing about that is that, well, there is kind of fewer ways to do things. So maybe TAing that kind of thing is slightly easier.

EW (00:56:27):

Yes.

CW (00:56:27):

Yeah.

EW (00:56:28):

My poor TAs.

CG (00:56:29):

Yeah. Right. Exactly. But then the opposite is you don't get as much variety, and people are more constrained into what the output could be. So I was kind of thinking about, "Well, what if Contextual Electronics was prompting people, like, "Go and build this thing," and then kind of showing how I did it, and seeing how people change stuff. It's tough, especially with people coming in with different contexts of, "Well, I've never built any hardware before." It's like, oh, okay, well that's going to be different than, "I've built some hardware, but I want to get better at the microcontroller piece of it," and kind of just all the balancing there.

EW (00:57:03):

Yeah. I mean, it would've been easier to grade something that was more consistent. I think the ecosystems were the thing that was the hardest for the TAs, because I didn't limit them to any particular ecosystem.

CG (00:57:20):

Yeah.

EW (00:57:20):

And some people -

CG (00:57:20):

Did you say no Arduino?

EW (00:57:22):

Yeah. I said no Arduino.

CG (00:57:23):

Okay.

EW (00:57:23):

I said it has to be something you can step through.

CG (00:57:26):

Yeah. That's a good -

CW (00:57:28):

I can step through Arduino, if you just go in and you take the clock off the chip.

CG (00:57:32):

No, no, they have it now.

CW (00:57:34):

Yeah, I know.

CG (00:57:34):

Arduino has that built in now.

CW (00:57:35):

Yeah. Yeah. Yeah.

EW (00:57:36):

And so not having the consistent overall thing made it more difficult, but the variety of what the students came up with and how they got to talk, I mean, I didn't have to tell them very much about the different processors. Because they told each other about the different processors based on what they were using, and that part worked out really well. And we also did Micro Madness where everybody -

CG (00:58:04):

Oh, it's a Final Four kind of thing?

EW (00:58:06):

Exactly.

CG (00:58:06):

Yeah, yeah.

EW (00:58:07):

And everybody had a processor and a dev board that they were assigned. And they were just randomly assigned and told to look up the datasheets. We were talking about how to read datasheets and how to compare processors. And then I asked them totally arbitrary questions. I mean, sure there was price, and size, and power, but then there was also, "How many vowels are in it? How many vowels are in the name?"

CG (00:58:30):

Yeah. Yeah. It matters.

EW (00:58:33):

Just sometimes they're arbitrary, and yeah, we did this basketball style elimination. It was a lot of fun. And when you lost, you went on the team of the person who you lost too.

CG (00:58:47):

Oh, interesting.

EW (00:58:47):

And so then everybody got a little bit more information as they went on about the different processors and the comparison. And they really enjoyed that exercise. And it was a lot of fun for me too, because, I mean, the hardest part for me was every year trying to come up with a different list or at least augment the list so I didn't have the same list time to time. Yeah. And so things like that, I wish I could do more. The "group teaches itself" activities, but those are of course the hardest ones to do.

CW (00:59:23):

And you had to teach a live class to kind of have that group thing.

EW (00:59:28):

Yes.

CG (00:59:28):

Right. Exactly. Yeah. So synchronous versus asynchronous type of stuff too.

EW (00:59:31):

Yes.

CG (00:59:32):

That's another challenge. I feel like the synchronous is very motivating, because there's kind of that social pressure, and just the wanting to interact, and whatever. But then the downside, of course, is time zones, and yeah. Just making sure people are there every week, that sort of thing.

CW (00:59:51):

And getting yourself there every week.

EW (00:59:52):

Yeah.

CG (00:59:53):

Yeah.

CW (00:59:53):

I mean that's -

CG (00:59:54):

Totally.

CW (00:59:54):

- a lot of work.

EW (00:59:56):

So I guess I will mention that I'm not doing another class anytime soon.

CW (01:00:04):

Okay.

EW (01:00:04):

But we are probably going to have a cohort that does it without me, in that they can watch the video. It won't be as expensive.

CW (01:00:14):

Oh, got it.

EW (01:00:14):

But they can watch the videos, and the exercises, and get the quizzes, and work things through things themselves. I think the part we're still working on is how much will they talk to each other? Will there be a Discord? Will there be a forum? Will there be a TA? How much of it will be solo? So I'm working on that, and I'm hoping it comes out in May. But as it's April, and I haven't been working very hard on it, -

CW (01:00:43):

It's April?

EW (01:00:43):

- we'll see.

CG (01:00:45):

It is April. Yeah.

EW (01:00:46):

That's just horrifying.

CG (01:00:46):

It's a week into April, Chris, sorry, sorry. A week later, April Fools.

EW (01:00:54):

Oh, no.

CG (01:00:55):

Yeah. And I think that's kind of where Contextual Electronics is too. All of the recorded content's on there, and there's forum support, but that's it. So, yeah. Nothing new recently.

EW (01:01:11):

And that's hard, because I want to keep adding, but also, there's only so many hours in the day. And I found teaching live to just be exhausting.

CG (01:01:22):

Yeah. Yeah, it's very tough.

EW (01:01:23):

I mean, it was kind of energizing, because the people were neat and it was fun. But I would get off of class, I would then just fall apart for the day.

CW (01:01:32):

They were long classes too, right? It wasn't an hour.

EW (01:01:35):

It was an hour to an hour and a half.

CW (01:01:38):

Oh, okay.

EW (01:01:39):

And usually the TAs would take over. Well, I mean, it was an hour to two hours, and usually the TAs would take over after an hour. And we'd break into groups, and they discussed.

CW (01:01:47):

But sometimes it was a couple hours.

EW (01:01:49):

Yes. And I mean, I really liked the people. I liked meeting them. I liked talking to them, but I'm just not a people person.

CG (01:01:58):

Yeah. Yeah. That's a classic introvert. You can talk to people, but then you've got to recharge.

EW (01:02:03):

And I can talk to one person at a time, and it doesn't bug me too much, but talking to -

CG (01:02:07):

Two people sometimes even too.

EW (01:02:08):

Well, Chris doesn't count.

CW (01:02:10):

I don't count.

EW (01:02:11):

He's inside the bubble.

CG (01:02:13):

I see, I see. Okay, cool. Well, thank you for having me to the bubble. This is a fine bubble you have here.

EW (01:02:21):

It's comfy.

CG (01:02:23):

Yeah. Yeah.

EW (01:02:27):

Is there anything else you want to say about Go, now I can't even say it right, Golioth?

CG (01:02:34):

Here's another interesting thing about pronouncing names. So I was just in Germany for the Embedded World Conference, and I'm not sure what it is about the spelling, but Zephyr, many people in Europe, they say it like, "Sefire. Sefire". I'm not sure if it's just how the vowels are pronounced, but the first couple times that it happened at Embedded World last year, I kind of did a, "What do you say? What is Sapphire? Sapphire?" Nope. Zephyr. Zephyr. Yeah.

EW (01:03:02):

Yeah, I think that's the right pronunciation for the P-H-Y-R.

CW (01:03:07):

"Ire?"

EW (01:03:08):

Yeah.

CG (01:03:10):

Like Fyre Festival? F-Y-R-E.

EW (01:03:16):

But I mean, we say Zephyr. At least we don't say "Zedphyr".

CW (01:03:20):

That doesn't make any sense.

CG (01:03:27):

But Golioth, try it out. Mike and I make a lot of videos and blog posts. And not specific to Golioth, but Zephyr just got a new dev rel person as well, Benjamin Cabé. And he has a great newsletter that I've been really enjoying where he does weekly updates about what's new in the project, so, recommend that as well. He might make a good guest on the show. And yeah, making lots of content. So check it out, blog.golioth.io.

EW (01:04:00):

And Zephyr and Golioth both have very good Discord service.

CG (01:04:03):

Yes, yes. Not a Discord person, myself. I don't like Discord service. We do have one, but I don't, yeah. Not for me. That's synchronous again, right? It's just, I like asynchronous. So there's a forum too.

EW (01:04:19):

What, you mean you don't just drop a question on there and leave until the next day? That's usually what I do.

CW (01:04:25):

That's how you Slack.

EW (01:04:25):

That's how I Slack.

CG (01:04:26):

Well, I'm the person who has to answer a lot of those questions.

CW (01:04:29):

Well, yeah. There is that.

CG (01:04:30):

Yeah. Yeah, yeah.

EW (01:04:32):

Do you have any thoughts you'd like to leave us with?

CG (01:04:36):

I am interested in learning more stuff about firmware. So please point me to resources either in the comments of this episode, or send me a note on Mastodon, or email, or anything like that. I love learning new things, so hit me up.

EW (01:04:57):

Our guest has been Chris Gammell, Developer Relations at Golioth and host of The Amp Hour podcast. He is not our sworn enemy any longer. We like him very much.

CW (01:05:08):

Thanks, Chris.

CG (01:05:10):

I'm keeping the handle though. I'm going to keep calling myself that. Thanks for having me.

CW (01:05:14):

Always great to talk to you.

EW (01:05:16):

Thank you to Christopher for producing and co-hosting. Thank you for listening. And if you'd like to contact us, show@embedded.fm, or hit the contact link on embedded.fm.

CW (01:05:28):

And we have a newsletter.

EW (01:05:29):

And we have a newsletter, and we have a Patreon. If you want to hear more of us at any time, there's more to be had. So now a quote to leave you with, from Dr. Seuss. "Sometimes the questions are complicated and the answers are simple."