Embedded

View Original

435: Sad Lack of Gnomes

Transcript from 435: Sad Lack of Gnomes with Chris White and Elecia White.

EW (00:06):

Hello and welcome to Embedded. This week it is just Christopher and myself, chatting with each other.

CW (00:14):

And since it is Thanksgiving, I will be phoning it in. See if you can tell the difference.

EW (00:19):

It is indeed Thanksgiving, at least here in the US. The holiday in which we celebrate turkeys and remembering to feel grateful for the things we have.

CW (00:33):

<laugh> I thought that was headed somewhere else, but, all right.

EW (00:37):

Where was I going to head for?

CW (00:39):

I do not know, remembering something else. Remembering to keep your mouth shut at the dinner table. I do not know.

EW (00:46):

<laugh> Remembering the scripts that Captain Awkward has given us, about how to deal with our family, and all of that.

CW (00:56):

Okay. Well, what is on the stack here? We have, looks like, seven, eight things to talk about.

EW (01:05):

You have new GitHub Codespaces. What is that?

CW (01:08):

Really? We are going to jump into that? That is a very specific little item.

EW (01:12):

You asked me what we are going to talk about, and then you say, "Not that." What do you want to talk about?

CW (01:17):

Did I mention phoning it in?

EW (01:18):

You did, yes.

CW (01:20):

New GitHub Codespaces. So I just ran across this today, accidentally. I was on GitHub looking at some repository, and you know in the upper right hand corner where it has got the thing that says "Code," and you can click on it and you can get the URL for the SSH version, where you get the clone URL.

EW (01:39):

Okay.

CW (01:39):

There is a new tab over there called "Codespaces." If you click on that, what it appears to do, I read some of the docs, is it creates a little container for you with an environment and a web IDE, that you can edit and execute your code inside that. It seems to only work for Python, C#, I think they said Java, a couple other things. So it is not really embedded right now. But it was very interesting.

(02:12):

I have not quite figured out the usefulness of it, except it gives people a place to try a repo without doing anything <laugh>. It is kind of odd. It seems like we are going back to this era of, I do not know, timeshare computing where you do not have a computer. There are just vast computing resources in the, I do not want to call it the cloud, but anyway, fine, the cloud, where you can take a chunk of some virtual computer and do stuff. But anyway, it was interesting. I do not know where they are headed with it.

(02:45):

There is cool stuff you can do with it. Like, within your repo, you can put a configuration file for the codespace, that sets up how it is created, and what resources there are and stuff, and any dependencies. It is like a little configurable, I do not want to say Docker container because I am not sure that is how it works, but little container that is associated with your repo, that you can either share or use for your own development right on GitHub.

(03:16):

It is not exactly free. From my quick reading, it sounded like you get a certain allotment of free time, free resources, every month as a free or pro customer. But then you can go beyond that. But yeah, weird stuff happening. You will never have to leave GitHub soon.

EW (03:40):

So I put it for my origami GitHub. I just logged in and it is creating the codespace. It is funny because in the origami there are mostly Python scripts, but there are Python scripts that run locally and Colab instantiations. Because I use Colab a lot.

CW (03:59):

Yeah. Similar, not similar, but...

EW (04:01):

Similar. I mean, somebody else's computer so that you do not have to install a bunch of stuff to your local.

CW (04:07):

Yeah.

EW (04:08):

I really like Colab for that. It is super handy.

CW (04:13):

And Colab looks a lot like Jupyter Notebooks, right?

EW (04:17):

Colab looks like Jupyter Notebooks, and Jupyter Notebooks often runs on a server.

CW (04:24):

But it does not have to.

EW (04:25):

But it does not have to.

CW (04:28):

I guess the difference for this is it is more of a traditional shell environment. My guess is it comes up with the web version of VSCode as the environment.

EW (04:38):

It does come up with the web version of VSCode. It did not run my Colab directly, and it looks like it is not going to run my other one directly. I would have to type at it. But it gives me a window that I can type at it. It is clearly some sort of Linux-

CW (04:57):

Shell.

EW (04:57):

Machine.

CW (04:57):

All right.

EW (05:01):

That would be really cool. I wonder what packages I would have to install. It would be a pain to have to install each time.

CW (05:11):

I do not know. They have a lot of docs, and there is the configuration file, which I think probably sets up the environment every time.

EW (05:18):

It is funny, that is one of my barriers. I do not like to install stuff, if I do not know what it does.

CW (05:26):

But what if you are installing it to a computer that is not yours, then you do not care about it.

EW (05:30):

Exactly.

CW (05:31):

<laugh> Exactly. Yeah.

EW (05:33):

It lets me try things out without committing.

CW (05:36):

Yeah. You can put tons of malware on GitHub.

EW (05:40):

Not that, just I do not want to have a bunch of-

CW (05:45):

Dependencies.

EW (05:46):

Well, there is the dependencies problem, and then there is the, "I just have a bunch of code that I do not know what it does. I do not remember. It is just mental litter."

CW (05:56):

Mental litter <laugh>.

EW (06:00):

Speaking of mental litter, Mbed. The compiler I used to say, "Okay, you get an Mbed board, it is a step above Arduino because you are writing more directly C code and you are interfacing with different boards, but there are still a lot of libraries out there to make your life easier." Yeah, that compiler has been shuttered.

CW (06:23):

Not just the compiler, the whole thing, right? The compiler and the ecosystem and all of that were together. Is there any Mbed without the compiler?

EW (06:36):

Well, they have changed it to Keil Studio Cloud.

CW (06:41):

Oh, okay.

EW (06:43):

But it used to be with Mbed, you did have this interface that was very simple. To get a blinking light was-

CW (06:52):

Yeah, I remember.

EW (06:53):

Three lines. But when I logged into the Keil Studio Cloud, getting a blinking light on a particular board was a horrific number of lines <laugh>, which I do not want to see.

CW (07:08):

How many lines is horrific? What is the threshold for merely terrifying, to horrific, in the number of lines of code for a blinking light? Just ballpark.

EW (07:21):

Once you get beyond about 50, to just blink a light. I get pretty disturbed.

CW (07:28):

See, I can blink a light. I need no lines of code. I just can hold the switch and move it up and down.

EW (07:33):

Thanks for that. Yeah.

CW (07:35):

That is why I am better than computers.

EW (07:40):

<pause> You are. You are better than computers.

CW (07:42):

That was a long pause.

EW (07:43):

I am trying to log into Keil to see.

CW (07:45):

I know, but it was a long pause.

EW (07:46):

Yes, I know. You are just going to take advantage of me. That is fine.

CW (07:50):

I do not need to know the exact number of lines, but does sound like a regression. Mbed, I do not feel like it had a lot of stuff behind it in the last few years.

EW (08:01):

No, they stopped working on it.

CW (08:02):

Stopped, yeah.

EW (08:04):

They lost some good people and then they just...

CW (08:07):

I feel like they got leapfrogged by some other things that are maybe better ways to go now.

EW (08:14):

Yeah. I mean, blinky.c has 102 lines as the default. It has an operating system. It has variable names that are confusing.

CW (08:27):

How many cores does blinking light require now?

EW (08:30):

<laugh> I think it is still one core. I do not quite remember which I set this up for. Oh, a disco board, a STM L0.

CW (08:38):

How much flash do you have to have? All right. Well, Mbed is dead, long live whatever comes after.

EW (08:45):

Well, I think long live Codespaces over the Keil Studio Cloud.

CW (08:50):

Well, I do not think Codespaces is going to be useful for devices for a while. Because you cannot write C.

EW (08:56):

Oh, you cannot write C yet.

CW (08:57):

Yeah. I think not. I think it was just a few environments were supported.

EW (09:07):

Speaking of supported environments.

CW (09:11):

Yeah. You are all about the segues.

EW (09:13):

I am. Yeah, segues, zoom zoom. You set up your own Linux node, Lin Node? Linode? Liniodi?

CW (09:27):

This is- You are a few deep in the stack here.

EW (09:31):

Oh, I am sorry. I should have somehow segued to Twitter.

CW (09:35):

Yeah.

EW (09:36):

And then Mastodon.

CW (09:38):

And then. Yeah.

EW (09:39):

Okay. So, Twitter. We are still announcing the show on Twitter, but Chris and I have both moved our personal accounts over to Mastodons.

CW (09:51):

Masto Dons?

EW (09:53):

Mastodonia?

CW (09:54):

<laugh> Mastodonia. Yes.

EW (09:57):

I should register mastodonia.social.

CW (10:01):

<laugh>

EW (10:02):

Anyway.

CW (10:03):

You can't now you've put it out in the ether. Somebody is going to grab it.

EW (10:06):

I have like three hours.

CW (10:08):

All right. That is true. That is true. This is not live! What <laugh>?

EW (10:13):

So with all the shuffle, if you want to find us on Mastodon, I will make sure that that is in the show notes. I will also make sure there is a T-shirt link in the show notes, really this time. I promise really, really, really this time. But, Mastodon has been interesting.

CW (10:30):

Yeah.

EW (10:37):

We have, I have and I think you have, both decided we were not going to invest as much technology into this, and instead focus more on our hobbies.

CW (10:48):

Technology? Oh, technology in terms of topic and what we talk about. Yeah.

EW (10:51):

I mean, I usually on Twitter, I would just put random things, but...

CW (10:55):

Yeah, me too.

EW (10:56):

Now it has been more origami than not.

CW (10:58):

I followed a lot of techie people, and I followed so far everybody who I found from Twitter who I was originally following, which was 30%. I did not follow a lot of people on Twitter, so that is fine. So I get that, I get the LED crew and some of the Hackaday kind of people and some other...

EW (11:19):

Companion bot folks.

CW (11:20):

Yeah. So all that stuff I am still getting, which is nice. Mastodon is an opportunity to start from scratch, and ask why I want to be on social media and what kinds of things I want to see. So I have been looking at different stuff. And the nice thing about Mastodon is it is more hashtag oriented than Twitter, you can discover stuff a little differently. So I have been looking at astronomy and astrophotos, and birds and bird photos, and moss and lichen photos <laugh>, and follow a bunch of those hashtags. I find people who regularly post that stuff and follow them. So it is interesting.

(11:57):

Mastodon has some challenges, and I do not want to get into it, because every other podcast in the universe is talking about it and everyone on Mastodon is talking about it. I am trying to ignore those discussions and just use it for community right now. It has all the usual problems that come with social networks, with moderating. And it has some unique problems with the way it is architected, with federations and how all that works and scales and stuff. But I am trying to ignore that and just use it, and if it does not work out, then I will go somewhere else.

(12:30):

It is not like- I am trying to get to the point where I do not really need social media. It is just kind of fun to have a place where I can communicate with a bunch of people who are interested in the same things I am.

(12:42):

Whereas with Twitter, even for the last few years, it became mostly people being upset. And I am happy to see- I am not happy- I am happy to see people upset, no! I am not filtering out everyone who is posting things that bother them or having discussions like that, but trying to form a network where it is not just all about that.

(13:09):

To that end, Mastodon is- If you do not know what it is, it is a part of something called the "fediverse" with the "federated universe", or the Federated Group if you remember the eighties. No, Federated Group was a appliance store? And it had Fred Rated, was the mascot guy. Anyway.

(13:31):

Twitter is one company, centralized, everything happens in their data center, everything, connections. Mastodon is open source, there are many, many servers, and they connect together through a protocol called "ActivityPub." Which is this complicated publish-subscribe model thing that is akin to email and Usenet in some ways. Each server talks to each other, and if people follow each other on other servers, then that creates linkages, and so messages and things get around. The user interface looks much like Twitter, some differences, it is a little jankier and more open sourcey.

EW (14:13):

But it is getting better.

CW (14:13):

But it is getting better.

EW (14:14):

Given the incredible inrush of people.

CW (14:18):

Yeah. There is some tension between having lots of small servers and people going to very- and congregating on large servers. There is advantages and disadvantages to both. So there is a lot of stuff that has to work out, on top of the moderation issues, which are sizeable, especially as more people arrive.

EW (14:34):

You went to a big server, one that got closed pretty early.

CW (14:38):

You are also on a huge server.

EW (14:39):

I am also on a huge server, but I am not in the first generation.

CW (14:45):

I actually got a Mastodon account back in 2017, I think.

EW (14:49):

Yeah, I still have that one, but I have never posted-

CW (14:51):

There was some other initial Twitter thing that made me think maybe it was time to leave. That was mastodon.social, which is still one of the biggest, if not the biggest instance. It is run by a guy named Eugen, who is the originator or the main collaborator on the open source project. Right now there are a couple hundred thousand people on there. Yeah, I think it is closed to new sign-ups-

EW (15:19):

Definitely.

CW (15:20):

Except for invites. It is very big, which has the advantage of there are lots of people there, so if you want to see hashtags and things, you will see a lot of stuff in your feed. Disadvantages, it appears right now they do not have very many moderators for the close to a million people or whatever <laugh> they are dealing with, so there are some things happening there that I have seen. So there are a lot of people encouraging people to set up their own little servers. Is that-

EW (15:51):

Sure, we snagged embedded.social, but I did not really want to run a server right away. And it is pretty easy to switch between servers.

CW (15:58):

Yeah. It is easy enough. You can switch and your followers will come with you, but you lose your old posts. There is a cooling off period, so if you do the full switch and move your followers, you can only do that once every 30 days. Yeah, setting up your own server is interesting idea. There are some problems with that too, apart from the idea of, "Oh my God, running a server <laugh>." There are some legal issues and things that you have to be careful about, if you have other people on who you do not have full confidence in.

EW (16:39):

Yeah, I had to agree to follow the laws in Germany or something.

CW (16:42):

No, it was US laws too. So you have to register with the copyright office.

EW (16:47):

Oh, it was not just that I as a user had to agree not to sell everybody's data.

CW (16:53):

No, yeah. If you run a server, you have to, because people can post whatever they want, you have to be registered so that people can report DMCA violations to you.

EW (17:04):

Ah, okay.

CW (17:06):

So there is some stuff to do there, and people suggest getting liability insurance, blah, blah, blah, blah. But if you are running a server for yourself, or just your family or people you know, that is not so much an issue. Long story short, I decided to fire up a server just to see what it would be like.

EW (17:22):

This was stoney.monster, making sure that very few other people are going to sign up with you.

CW (17:28):

Nobody is signing up with me because I blocked it.

EW (17:30):

Well yes, because even I do not want to be logicalelegance@stoney.monster.

CW (17:33):

Exactly.

EW (17:33):

That is just weird. It is not my last name.

CW (17:38):

<laugh>

EW (17:38):

It could be. We could be the Stony-Monsters.

CW (17:41):

Anyway.

EW (17:43):

It sounds like a band though.

CW (17:46):

What would you like to know?

EW (17:48):

Oh, what is Linode? Is it AWS-like?

CW (17:55):

I suppose so. Linode is a company, they have been around for a very long time, since 2003. They were very early in this whole virtualization and ephemeral server market, where you could sign up and get a server in a data center and put your stuff on it.

EW (18:17):

And they are usually fake servers?

CW (18:19):

No, they are-

EW (18:20):

Part of a big server.

CW (18:22):

You can choose. You can get shared CPU servers, which are very virtualized and you are on a machine with a bunch of other virtual servers. You can get dedicated CPUs, you can get dedicated GPUs, all kinds of stuff in between, storage. There are a lot of AWS kind of capabilities, similar, but it is very simple. AWS I have used before for things, and it is not simple.

EW (18:51):

<laugh> No.

CW (18:53):

With Linode, I basically- To do this, you have to have a server on the internet, a Linux server that can run the Mastodon software. It does not take a ton of resources if you are only one person. The more people you have in a server, the more resources that it requires.

(19:09):

Linode has some very nice, very small servers in the five to $10 a month range. And you can scale that up until you are paying thousands of dollars, I am sure. For the $10 a month range, you get a Linux box that is yours, that you can log into and install stuff. It is accessible on the internet, if you hook up your DNS record to it for your domain and all that good stuff. As soon as I fired it up, you get to choose what distribution you want, Ubuntu whatever, Debian, CentOS, they have a whole list, and you just pick, "I want this server with this OS." You click a button and like 30 seconds later it is booted and it is yours.

(19:55):

They have other stuff where you can install from their marketplace. So if you want WordPress, you can go and say, "Okay, give me a server with WordPress, now." And that all gets installed and set up and you can just get in there. It is kind of cool. It is not very expensive. Ten bucks a month is the, "I can fool around with this for a couple of months and see what happens" price range. So that experience was very, very easy. I was really surprised. Anytime I need something on the internet, that is going to be something I think about.

(20:31):

Setting up Mastodon was not super easy. I do not know if it was just because I am an idiot, not super familiar with deploying web stack stuff. Or if I tried to do it through Docker, which was not super familiar with some of the fancy Docker stuff that is happening.

(20:51):

Part of the problem is- So Linode actually has a "how to install Mastodon on a Linode server with Ubuntu whatever." So I followed that guide to the letter, but I think Mastodon version changed since that guide was written and things did not work following that guide verbatim. I eventually found a GitHub that had somebody who had done all the configuration properly, and had a Docker composed YAML file, which-

(21:19):

Anyway, I got it installed and it is working. I am going to play with it some, I have not moved there. I have an account there that does not do anything. I want to try upgrading the Mastodon version, and see how painful that is and if I lose anything <laugh>. I want to try setting up backups and see how that works, before I move anything. It is interesting. Mastodon aside, I think the experience of using Linode and trying that out was educational for me.

EW (21:55):

Our service provider for Logical Elegance has virtual private servers.

CW (22:00):

Yep. But they were twice as expensive for less resources. It was like 20 bucks a month.

EW (22:06):

I thought I have used our virtual private server.

CW (22:09):

No, you have a shell account.

EW (22:12):

Oh.

CW (22:12):

You have a shell account on one of their major servers. They would not enjoy you setting up a Mastodon server on that.

EW (22:19):

That makes sense. Yes. I just had something that would run something occasionally.

CW (22:22):

And you certainly cannot point your DNS to it.

EW (22:25):

Okay. Yeah.

CW (22:27):

So you need your own slice of- You need root on it.

EW (22:31):

Okay. And that you definitely do not get on most of the virtual-

CW (22:34):

Yeah. And an IP address that can be yours, and point DNS at.

EW (22:39):

Do you remember when we used to have v4 IP addresses that we could have for a while?

CW (22:47):

I have got one now. You just need to- I mean, the Comcast one does not change.

EW (22:51):

It does not change. But it could.

CW (22:53):

You could, yeah. You can pay extra for one.

EW (22:55):

They are a lot now.

CW (22:56):

Yeah.

EW (23:01):

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

(23:18):

They offer products, services, and solutions that support customers in a wide variety of applications. Industrial manufacturing and maintenance, medical product design, automotive, avionics, telecommunications, security, and more. From design and testing, to production and maintenance. Discover why so many choose to partner with Newark.

(23:40):

Newark has operations in the US, Canada, and Mexico. They are serviced from a regional distribution hub in South Carolina. Newark is committed to supporting local language, currency, product and shipping needs across North America and around the world. As part of a global business, Newark has access to stock and strong relationships with electronic manufacturers. They can easily serve all of your industrial electronic needs.

(24:09):

Learn more at newark.com. That is N E W A R K .com. Thank you to Newark for sponsoring this show. <music>

(24:23):

Other things that are happening include the end of my "Making Embedded Systems" class at Classpert.

CW (24:31):

Oh, the end, the end.

EW (24:33):

Well, I mean, the classes are done. My Saturdays are free. I am still critiquing projects, but they are interesting and I am excited about that. Actually I am waiting for the mentors to critique the project, and then I will critique the mentors and the projects, which is pretty fun actually. Now that it is at an end, I am kind of sad, but also pretty happy. I think if I do it again, there are a bunch of things I want to redo.

CW (25:05):

Mm hmm. Like what?

EW (25:07):

Well, I do not use Mbed in the course, but I do use Mbed to look at how hardware abstraction layers build up, and why they get so complicated. And I do a deep dive into Mbed, and show how it supports so many different boards, and how there are different layers to it, and what the different layers do as far as adapting versus wrapping. And now I could use it, it is not terrible, but I probably will do the same thing with Zephyr or something that is relevant to their future.

CW (25:44):

Yeah.

EW (25:46):

And there was one lesson I was talking about state machines and I used a toy to show it off, which I am still happy with, but that toy was so irritating. <laugh>

CW (25:58):

What was it?

EW (25:59):

It was the Drive and Learn toy.

CW (26:01):

Oh, a kid's toy. The little, little kid's toy, that you push the buttons and it squeaks or squawks and honks or- Okay. Yeah, I can see how that would be irritating <laugh>.

EW (26:12):

But it is funny with this one- So with the first- So we have had three cohorts. The first cohort, the Saturday live class, I did not know what I was doing. I thought I was just answering questions then. Like a flipped classroom, they have lectures offline and then you get to class and you ask questions and do homework, which sometimes was good, but we did not really get enough questions.

CW (26:39):

Oh.

EW (26:40):

So I would send them off to discussion groups, and a few people thought that was not as useful as it could be. So I started to work out plans for what to do when I do not have questions. That led to mini lectures that I could expand or talk about or do whatever, that were not critically tied to a certain chapter, but could be sprinkled in as needed. Then as each cohort went through, I added to the mini lecturers.

(27:15):

And now I have several conference talks that are three-quarters prepared. So I need to do some of that and maybe do a couple of conferences. But I am still fully remote, and I do not want to go anywhere in person, so we will see.

CW (27:35):

Just put them up for videos on Squarespace and charge people. I do not know why I am charging people. Put them on YouTube.

EW (27:45):

Yes, but that means video editing.

CW (27:47):

Have your own conference, The Elecia Conference. Guest speakers, Elecia, Elecia and Elecia.

EW (27:56):

No, I would have a panel discussion.

CW (27:58):

Panel discussion with five Elecias <laugh>. Has that and the class experience, has that informed how you are thinking about doing a second edition of your book?

EW (28:13):

Oh, definitely. There are things that I wish were covered better in the book. There are things in the book- Nothing in the book really got out of date, which is just mind boggling to me. I am so happy with that. A technical book that is not truly and horribly out of date is pretty magical to me.

(28:33):

But there were device pieces that I wanted to add, about debugging and hard faults and how to set up your main loop. We are used to the Arduino setup and loop. That kind of makes sense. And then there is the whole "while 1 check this, do that, check this, do that," polling sort of event loop. And then there is the interrupt-based event loop and all of those. I do not think I really described those as well as I could have in the book.

CW (29:12):

Okay.

EW (29:12):

That is one of the conference talks that really worked out well this year, or mini lectures. But I do not know how I would do it at a conference. I prepped slides to go through different main loops, and how they could be structured and interrupts and callbacks and schedulers. Then I told them I had not written the lecture, and that they had to give the lecture. And it was really fun! It made me realize that when I do give lectures, I go much too fast. But having them talk about what they knew, and different people had different perspectives, and I would look at the different ones. I mean, I had an idea of what I wanted them to get through, but it was really way more participatory than just having me spew out information. So I really liked that.

CW (30:08):

Do you have any projects that you can talk about without identifying anyone? Or would you rather not?

EW (30:20):

I do not know who is making their projects public.

CW (30:22):

Okay.

EW (30:22):

So I do not think so. One of my mentors actually ended up doing a project and it is really good. So I am hoping we can talk more about that, but not yet.

CW (30:38):

Okay.

EW (30:41):

Let us see, what else do we have? Oh, I found an origami for people who want to try things out. It is not really origami. It is a James Webb Space Telescope pop-up card. Gives you all the instructions on how to make a little card that has the telescope go up <laugh>.

CW (31:01):

Oh, it is neat. Okay.

EW (31:02):

It was really cute.

CW (31:03):

Yeah. Although...

EW (31:05):

It is pretty hands on.

CW (31:08):

Yeah! And you need some cool papers to make it work, right? Or to make it look right.

EW (31:13):

Yeah. You need a gold foil paper. I wish they had said you could do that with tin foil if you wanted. Or other shortcuts. I will put that in a link in the show notes. I have been doing a lot of origami lately. I think my brain fog, my brain fatigue, my burnout...

CW (31:46):

Starts with a "b".

EW (31:48):

Is getting better, because now I have more energy for origami after doing work. Of course, I have not been doing a lot of work this week, so maybe that is not true.

CW (31:59):

Do you think the frighteningly painful and high pitched, high volume, acoustic modem sounds that you have been subjecting yourself and the neighborhood to...

EW (32:11):

<laugh>

CW (32:11):

Have perhaps cleared out some plaques or something in your brain, allowing you to function better?

EW (32:19):

Uh, no.

CW (32:21):

Oh, okay.

EW (32:23):

Are you telling me you want me to close the door, when I am working with the acoustic modems?

CW (32:29):

No, I just want people to understand that embedded systems is sometimes a field with irritation.

EW (32:37):

Yes. I am having fun working on that project. it is...

CW (32:45):

That is because that is what the project tells you to feel.

EW (32:48):

Maybe. Maybe it is reprogramming my brain with the little chirps.

CW (32:52):

<laugh> The chirps are okay. It is when it really gets into it, when you are transferring data, that is when it really- They are so loud! I guess they have to be. When they are underwater- Now we are off topic. When they are underwater, it is very high pitch. It has got to be like six or eight kilohertz. It is something, it is a brake squealing, that frequency range.

EW (33:21):

They sound like modems used to do.

CW (33:23):

No, modems were far lower, because they were more constrained by the telephone line bandwidth, an analog bandwidth. They could not get that high. I think. They were very low. These are much more painful than modems. I listened to a lot of modems as a kid. I used to talk to the modem, and try to see if I could get it to- If you call a fax machine, you can make the "eeee" sound. And sometimes I could do it just right, and get it to try to connect to me. Anyway. No, yours are worse. To sum up.

EW (33:58):

I am sending data pretty slowly.

CW (34:01):

Yeah. But I think the encoding, where it is put it in the-

EW (34:05):

Yes. It does have a bunch of features for multipath detection and removal. Yeah, they are really loud underwater and I do not really understand. I have got two right now so they can talk to each other. I put one on super low power and it is still very loud. The other one is very quiet and it is not on super low power. So that is kind of confusing. Maybe I can make the loud one quieter somehow.

CW (34:37):

We were going to talk about something else, right?

EW (34:39):

Well, I was going to talk more about origami.

CW (34:40):

Yes. Origami.

EW (34:41):

I finally made a form for my family and friends who want origami, because I can never tell. Okay. Back up. The last few times that I have seen people in person, a client that I have been friends with, came over to drop things off for Christopher. One of my mentors who listens to the show picked up something locally, even though he lives far away. For these people, I gave them origami whether they wanted it or not. They come, I give them origami in a jar, whether they want it or not. They always say, "Neat." You know? Because you cannot not.

(35:30):

And last year I packed Christopher's parents' gifts in all of my excess origami, which I wanted them to tell me if they wanted any good origami of that sort. But instead they strung it into a garland. That was not what I wanted at all, because those were all bad origamis.

CW (35:55):

What you need, you need like a business card that just says, "Do you want origami?" Then you can just hand that to people and avoid the conversation. And then, if they say, "Yes," then you...

EW (36:09):

Well, I made a form and it says, "I do not know whether you want origami, whether you just love it for me and not for you. Or if it is all just smiling politely." And I have people, so they can say whether they want a tiny one, a tiny one in a jar, a wall sized one. I have actually been pretty surprised by the people who want the larger ones. Not many people have wanted the brain sculptures though.

CW (36:39):

Really? Brain sculptures? Oh, these are the ones where they are all curve foldy? They do not look like brains that much.

EW (36:51):

Well, not that one, but the first one did.

CW (36:53):

Oh, I see. You are not going to be publicizing this everywhere, because...

EW (36:58):

No. This is not going to be a general form for everybody, because I cannot even send you all stickers anymore. I would like to, but...

CW (37:06):

We probably ought to.

EW (37:07):

And we probably ought to. And I have new stickers. I just. I have not. I am doing origami and I am getting better with burnout. We are not going to add more things.

CW (37:19):

Okay.

EW (37:22):

Anyways, I am very pleased with the form. I am pleased because it is okay for people to say, "No, I do not really want origami. I do like it. Keep up the pictures, but do not send me any little dustcatchers."

CW (37:33):

You made some breakthroughs.

EW (37:35):

I did.

CW (37:38):

Because you have been trying to do something with the curved crease origami for a while, and we are kind of stuck.

EW (37:47):

Yes. So you put sine waves on a piece of paper, and then you fold along the sine waves. It is not just putting them on, you have to precrease them, you have to push down hard. And then you get this piece of paper that has little waves on it. Kind of cool. It goes up and down. Your folds should go a mountain fold and then a valley fold and then a mountain fold, like a fan or an accordion. When you are done, it is kind of cool.

(38:21):

If you squeeze one side, it does things to the other side that are a little non-intuitive, making it kind of a gripper form sort of thing. I have done this before, and you can do sign waves, you can do different patterns, and some of them look really cool. But I saw someone had this thing that she was calling a "spine"?

CW (38:49):

Mm-hmm <affirmative>.

EW (38:51):

It turns out that was not really what she was calling it. I eventually found a paper she wrote in an origami conference book. Yeah, that exists. I am shocked.

CW (39:02):

<laugh>

EW (39:02):

I found the paper and started to understand that the lower the amplitude of the sine wave, the more you can rotate the paper and compress it.

CW (39:15):

Okay.

EW (39:17):

So you have the sine waves, and when they are all up and down, compressing it in line with the sine waves kind of makes sense, because you are making the fold more prominent.

CW (39:28):

Sure.

EW (39:28):

But if you take that and then along some of the areas you twist, if your amplitude is low enough, then it will allow you to twist and it will compress itself. If you keep doing this, you end up with really, really weird things, which do not always stay. I had to fix them in place and then put water on them and then they will stay.

CW (40:02):

Okay.

EW (40:02):

Although I was thinking about going to a humid environment, I may have to put spray paint or other fixative on them, so that they do not unravel in humidity. I think some are going to Hawaii, so maybe I will find out.

(40:15):

So yes, origami. It has been weird. I still have one pattern I do not know how to do, but I have ideas and I have excitement. I am making a little cute terrarium with the jellyfish and all kinds of adorable things inside the bottle. I am happier. It is nice. I guess we should do the whole Thanksgiving thing. What are you thankful for?

CW (40:51):

I am never prepared for this. Uh, I am thankful for that my family has stayed healthy for the last few years. I am thankful that vaccines exist. I am thankful that I have, despite my complaining, a pretty good work situation that allows me to do other things, even if I am too tired to do them. <laugh> Yeah. I am thankful for my Dinosaur Converse All Stars...

EW (41:33):

<laugh>

CW (41:33):

Which is the coolest thing I have acquired in the last six weeks.

EW (41:42):

He designed them himself.

CW (41:44):

Well, had to choose a pattern.

EW (41:47):

And you made the tongue a different color. Yeah, they are his drumming shoes. He should be thankful for his drums too. And new synthesizers?

CW (41:59):

Whah! Nah. There are always new synthesizers.

EW (42:02):

Buy two, get one free.

CW (42:04):

They had a buy two, get one free, okay?

EW (42:05):

I cannot believe you fell for that.

CW (42:06):

Buy two, get one free, and they were already kind of inexpensive. The deal I could not refuse. What are you thankful for?

EW (42:21):

For this show. I am thankful for the patrons and the sponsor that we had this year. And the listeners and they talk to us, which is pretty fun. For myself, I am in a good work situation, even when I am not happy with work. And we live in a very nice place. And the beach is there. And fossils, I am thankful for fossils.

CW (42:53):

Everyone should be, because without them we would not know anything about creatures. Can you imagine if there were no fossils, what would that be like? Okay. Hang on. You done?

EW (43:07):

Go ahead. Yeah.

CW (43:09):

Imagine there were no fossils. We would have zero historical record of- Okay, when do the bones go away? So let us say bones do not fossilize at all. So pretty much anything from, I do not know, ten or 20,000 years ago, would not be known, because right stuff from the ice age was fossilized mammoth bones and things.

EW (43:35):

So things can be frozen, but they do not trade their calcium for harder mineral.

CW (43:41):

Yeah. So eventually it breaks down. So where is the cutoff, where we would not have any evidence of things? Probably 30, somewhere around there, right? 30 or 40,000 years?

EW (43:53):

I guess so. There are just so many different methods of fossilation.

CW (43:58):

Yes, but I am eliminating all of them. This is my stupid idea. <laugh>

EW (44:01):

Okay. So you are eliminating all of them. Even some of the soft bodies? They have got fossils of those, which is pretty neat.

CW (44:07):

I know. But we would not have any evidence of mass extinctions. We would not have any evidence of- Would we have known to go look for massive asteroid collision evidence? It is interesting. I do not know. Guess so. Thankful for fossils <laugh>. You said you were thankful for them. I was trying to figure out why <laugh>.

EW (44:29):

I was just thinking, I like picking them up and seeing how neat they are. But you have gone a different direction. So, cool.

CW (44:36):

What would life be like without fossils? I bet there are some important things, beyond just our own understanding of our place in the world, that would be missing scientifically otherwise.

EW (44:48):

I think the paleontologists would agree with you.

CW (44:51):

Yeah. <laugh>

EW (44:57):

So back to our own fields. You have an item here for weird stuff in C?

CW (45:02):

Oh yeah. That just popped up on the Slack today. Actually, it was a few days ago and I just noticed it. I think a person named Lennart posted it. It is a gist and there is a link for it. It is a gist called "Quirks of C" and it is by somebody called fay59. I do not know who they are. It is a list of about dozen or two dozen weird little things in C, not C#. Little language features that, some of which I did not know about, some of which are horrifying, and some of which I use all the time. And I am like, "That is a quirk?"

EW (45:38):

Yeah, I was with that too. Yeah.

CW (45:41):

It goes from everything from like, if you declare a struct with a struct, you can use the inner struct as a type, without referencing the outer struct. So like, "Okay, fine." That is just the type system as far as I am concerned. It had seen the inner struct, so it allows you to use it.

(46:00):

But there are other things like compound literals, which I had never heard of. It is hard to describe, but basically it allows you to declare a variable without a name. So if you have a struct, and you want an instance of that struct, you do the type name followed by curly braces, empty curly braces, and it grabs you that variable and you can get a pointer to it. So where is this useful? Probably nowhere.

(46:29):

But it is nice for, if you like have a function that takes structs as arguments, you can pass that initialized struct without having an intermediate variable. It just instantiates it on the stack and there is no reference to it by name anywhere. Except once you are inside the function, of course. It will be have the parameter name.

EW (46:50):

No, this is a terrible idea. Some of these I agree with, I use, but that one...

CW (46:53):

It is probably a terrible idea. Well there are some other examples elsewhere, that made it seem not so terrible. But anyway, it has got some other useful and some scary things. One of the ones I use all the time, or used to, was flexible array members, where as the last element of a struct, you have an array with no dimensions.

EW (47:15):

Mm-hmm <affirmative>.

CW (47:16):

And to me you are like, "Oh, well how else are you going to do packets?"

EW (47:19):

Yeah.

CW (47:20):

<laugh> There are some scary things and...

EW (47:25):

The whole "no void globals".

CW (47:30):

That was weird!

EW (47:32):

I mean, that is how you hide things.

CW (47:35):

Yeah. I guess I have done that. I guess it is all right. Yeah, it is an interesting thing to look through, to see some stuff. I think the weirdest thing definitely was the <laugh> compound literals. Because that feels like a non C feature that somehow crept in.

EW (47:59):

I think the weirdest thing for me was that typedefs can go anywhere. That seemed like something I should know, and is totally wrong. So normally I do typedef, the type that I am going to use, you know, unsigned int, and then the name, so u32.

CW (48:20):

Yeah.

EW (48:22):

Turns out that the word "typedef" can go at the beginning. It can go between unsigned and int or it can go after unsigned and int.

CW (48:30):

No, I am not buying that.

EW (48:32):

I mean, that just seems very bad.

CW (48:34):

Oh, the other one I wanted to call out was, there are a couple things that to me seem like safety features, that I either kind of was aware of, or not fully aware of, with arrays. So if you typedef an array with a dimension...

EW (48:49):

Mm-hmm <affirmative>.

CW (48:49):

Then if you try to use that, and get the dimension wrong, it will not let you.

EW (48:57):

Yeah.

CW (48:57):

So if you say typedef int, my array name, and then bracket, I do not know, 15, and then you have a function that takes that type as a parameter, and you pass it an array with 14, it will catch you.

EW (49:13):

At compiled time.

CW (49:14):

Yeah. And you can also do that in the argument definition for a function. You can specify the length of the array and it will- I think it says it restricts it to at least that long, so you cannot pass in a shorter one. But those are nice safety features that I have not really used much. It is not bounds checking, but it is not, not bounds checking <laugh>.

EW (49:43):

And how would we live without function typedefs?

CW (49:46):

Yeah. That one, I do not know what that is doing in there.

EW (49:48):

That is a totally normal feature. That is not a quirk.

CW (49:50):

Anyway. It is in the show notes. It is a cool thing to peruse. There is some digression on what an lvalue is, which, yeah, if you are into languages, you can figure that out.

EW (50:03):

Right. You do not need to learn a new language. You can learn the same language, but even more so.

CW (50:08):

Yeah.

EW (50:08):

I had one more item in here, about software versus hardware breakpoints.

CW (50:15):

Mm-hmm <affirmative>.

EW (50:17):

Do you know how breakpoints work?

CW (50:19):

So there is a little gnome that watches as the instructions go by. And when the instruction at the address that it has on its clipboard goes by, it has an axe and it takes it and it smashes the clock.

EW (50:37):

Does the gnome live in your programmer, or does it live on your microcontroller?

CW (50:41):

On the microcontroller.

EW (50:43):

Yes!

CW (50:45):

Then when you want to continue, it gets a new clock from its backpack, and puts it in and then starts it up. So I guess that is a hardware breakpoint?

EW (50:54):

That is a hardware breakpoint.

CW (50:57):

I guess a software breakpoint is, it is your programmer desperately trying to keep up with what is going on, as your device streams that debug data, and then it tells it to stop when it matches the address it wants.

EW (51:10):

Yes.

CW (51:10):

All right? There you go. And there are only a few gnomes on your microcontroller, but you can have a lot of gnomes on your debugger.

EW (51:18):

Except, the software breakpoints, because they are trying to keep up with your code...

CW (51:25):

Slow down your program.

EW (51:26):

Slow down your program. Which may change the debugging that you are doing.

CW (51:32):

So the difference there is, the software gnomes are standing astride your instructions and telling them to wait. And they ask them, "Which instruction are you? Which address are you?" So it has to check with the clipboard. So it is more like those gnomes are the guys outside the club checking their list, whereas the other gnomes- This is not working.

EW (51:53):

All right. Well, I mean, the hardware gnomes are fast, and the software gnomes have to check everyone.

CW (52:01):

They have to ask. So the hardware gnomes know, they can tell just by looking at you, that you are not allowed in the club. Whereas the software gnomes have to interview you.

EW (52:11):

Sure.

CW (52:13):

I hope that explains it for everybody.

EW (52:15):

I hope we have made software and hardware breakpoints clear. And if we have not actually-

CW (52:22):

There is this blog post that explains it, without using gnomes.

EW (52:26):

Interrupt Memfault's blog post about breakpoints may actually answer your question, but as Christopher pointed out, there is a sad lack of gnomes.

CW (52:36):

All right. Is that it? Is that enough for a holiday show that nobody is going to listen to?

EW (52:41):

I think so. We may be light on shows in December, because it is hard to schedule shows around holidays. So if we miss you, do not worry too much. We are probably just- I want to say eating eggnog, but that is not something either one of us would eat.

CW (53:00):

First of all, I do not generally eat liquids. And second of all, things that have egg in the title without being- And they are cold or liquid, I am not on board with.

EW (53:15):

Okay.

CW (53:16):

Because that implies there is a raw egg somewhere in the mix, and that is not happening. And do not tell me that the alcohol kills anything. It does not. Same with lemon juice and lime juice. You are lying to yourself.

EW (53:28):

Thank you for listening to Christopher's food tips.

CW (53:32):

Cook your food.

EW (53:37):

<laugh> And, <laugh> I lost it <laugh>. Fine. Thank you. Happy holidays. We will talk to you soon. Now for Winnie-the-Pooh. Okay, Winnie-the-Pooh had just eaten all of the honey he was supposed to get.

CW (53:55):

Did he eat- Did he get the honey with the habanero peppers in it?

EW (53:58):

Thank you for that. Christopher gave me gift of honey with habanero peppers in it, and it is good, but it really, really hurts the tongue.

CW (54:10):

Sorry about that.

EW (54:12):

But I still want to eat it, but it hurts. It is kind of a weird experience. It is funny that the honey was spicier than the sriracha he gave me. We have not tried the spicy maple syrup.

(54:33):

Okay, so Pooh ate the honey, his honey, which probably was not spicy, and he wanted to make sure that it was honey all the way down.

(54:44):

'Having made certain of this, he took the jar back to Piglet, and Piglet looked up from the bottom of his very deep pit and said, "Got it?" And Pooh said, "Yes, but it is not quite a full jar," and he threw it down to Piglet. And Piglet said, "No, it is not. Is that all you have got left?" And Pooh said "Yes," because it was. So Piglet put the jar at the bottom of the pit and climbed out, and they went off home together.

(55:13):

"Well, goodnight Pooh," said Piglet, when they had gone to Pooh's house. "And we meet at six o'clock tomorrow morning by the Pine Trees, and see how many heffalumps we have caught in our trap."

(55:23):

"Six o'clock, Piglet. And, have you got any string?" "No, why do you want string?" "To lead them home with." "Oh, I think heffalumps come if you whistle." "Some do, some do not. You can never tell with heffalumps. Well, goodnight."

(55:44):

"Goodnight," and Piglet trotted off to his house TRESPASSER W, while Pooh made his preparations for bed.' -- A. A. Milne.