Embedded

View Original

373: Docker! Docker! Docker!

Transcript from 373: Docker! Docker! Docker! with Elecia White and Christopher White.

EW (00:00:06):

Hello, and welcome to Embedded. I am Elecia White, here with Christopher White. This week it's just us.

CW (00:00:14):

Good evening.

EW (00:00:16):

It's afternoon.

CW (00:00:20):

Evening somewhere.

EW (00:00:20):

How are you?

CW (00:00:21):

I'm okay.

EW (00:00:23):

Just okay?

CW (00:00:24):

Yeah.

EW (00:00:25):

Okay.

CW (00:00:26):

Yeah.

EW (00:00:27):

What do you want to talk about?

CW (00:00:29):

Eight things. Eight things and a subthing. That's what the list looks like to me.

EW (00:00:36):

Okay. Which one do you want to start with?

CW (00:00:40):

Let's start with the most timely one, I guess? Which is the conference?

EW (00:00:47):

So the Embedded Online Conference is coming up quickly, assuming you are listening to this when it drops. It is May 17th through the 20th, and I will be speaking on the 20th. We've already recorded that.

CW (00:01:01):

So you're not really speaking on the 20th. You're speaking on the 10th, or the 9th, or -

EW (00:01:06):

But there's a live Q and A after -

CW (00:01:08):

Yeah.

EW (00:01:08):

- the sessions. You can also get the 2020 sessions. And EMBEDDED.FM Works as a coupon for a hundred bucks off, although you really should have signed up when we talked about it with Jacob months ago when it was cheaper.

CW (00:01:21):

Sure. So, there's your talk, and then there's a bunch of other talks. And what other stuff is going on?

EW (00:01:28):

Helen Leigh is going to talk about open source hardware. Kate is going talk about Zephyr, the operating system.

CW (00:01:40):

Right.

EW (00:01:40):

Colin O'Flynn is going to talk about the $5 security wrench, and I think he's going to tell us horrible stories about how anybody can get into our embedded systems if they just have -

CW (00:01:55):

A wrench?

EW (00:01:56):

- some small, cheap device. That's going to be terrifying.

CW (00:02:01):

Anybody can get into anything they want if they have it.

EW (00:02:04):

Well, I mean, because his ChipWhisper's pretty expensive.

CW (00:02:08):

Right.

EW (00:02:08):

And so now if there's a small thing -

CW (00:02:12):

I'm just saying I'm not going to be terrified. I refuse to be terrified.

EW (00:02:15):

That's fine.

CW (00:02:16):

Because you can't even buy chips anyway so nobody can break into them.

EW (00:02:20):

See, that would have been a really good talk..."Where Did All The Chips Go?" Apparently it's not only supply that's the problem. There's an increase in demand.

CW (00:02:32):

Yeah.

EW (00:02:32):

So we're just hosed about getting chips. Buy them early. Buy them often. Sell them quickly.

CW (00:02:38):

Or as early as three months ago.

EW (00:02:39):

Yeah. There are a bunch more talks that sounded interesting. I probably should've pulled it up, but yeah, it should be a good conference. I don't know if there's a networking social aspect to it yet. Probably if I read the website all the way through, I would know that.

CW (00:02:58):

It's celebrating 50 years with a microprocessor, which seems -

EW (00:03:02):

That's Ganssle's speech.

CW (00:03:02):

It seems like not enough years somehow. There's a talk about the Mars Perseverance software.

EW (00:03:10):

Oh yeah, people were very excited about that.

CW (00:03:11):

Jack Ganssle's talking about "The Microprocessor at 50." Yeah. A bunch of talks. RTOS stuff. Wow. This is a lot of stuff...Last time I looked at it, there wasn't quite as much.

EW (00:03:23):

No.

CW (00:03:23):

Modern C++. Yeah, this is a lot. Geez.

EW (00:03:29):

Did you guys -

CW (00:03:29):

There's like a hundred talks here.

EW (00:03:32):

Did you all come to listen to Christopher surf the web?

CW (00:03:34):

Hey,...there's demos of things like the Joulescope and such, so fun.

EW (00:03:39):

It should be good.

CW (00:03:39):

Alright.

EW (00:03:41):

And really, we all need a break from work.

CW (00:03:43):

I don't work anymore.

EW (00:03:46):

That is not true.

CW (00:03:46):

All I do is I hit tail -f. And I watch the text scroll by and hope that a number that starts at one will eventually reach 30,000, so I can run another script to turn that into a PNG. And then I can look at that PNG compared to a different PNG and say, "Eh, these kind of looks similar. So I guess I didn't break anything."

EW (00:04:05):

That actually brings up a topic, -

CW (00:04:10):

Oh, good.

EW (00:04:10):

- not in the list of eight that you asked me, and I have been kind of waffling over the last few days. How do you bill time -

CW (00:04:23):

It's right there. That's number eight.

EW (00:04:23):

Oh, alright. Sorry.

CW (00:04:25):

But yes, let's discuss this.

EW (00:04:26):

How do you bill time when you're waiting for something long to happen? Or this week, I have clients who are in the field testing my code, and it makes me crazy, because I really want to test my code. I don't want them to do it, but I'm on call. And they're on Eastern Time, so I'm on call starting at 6:00 AM my time. And basically I try to respond within 10 seconds, and my phone comes with me everywhere.

CW (00:05:01):

Yeah.

EW (00:05:02):

But how do you bill weird time like that?

CW (00:05:06):

I think you had the suggestion of, between not billing anything at all and billing something, is, would you be doing what you're doing if you weren't -

EW (00:05:17):

Working for this client?

CW (00:05:18):

- working for this client, or right now? So in your case, it's kind of hard, because you're just on call. So do you keep track,...do you...start the clock as soon as you get a new Teams message and then stop it when you've answered the question or - ?

EW (00:05:31):

I mean, because sometimes it's just a "That's in the document, here's - "

CW (00:05:35):

Yeah.

EW (00:05:35):

" - here's the result."

CW (00:05:36):

...So I would say, for that kind of thing, an hour a day of just, "Here's an hour of retainer...for this time," and then everything you normally do on top of that. But it is tough. And like you said, you're getting up at six. Okay. Would you be getting up at six normally? So, no. So I'd probably -

EW (00:06:00):

No, but I sure was glad I did, because they pinged me at 6:20 -

CW (00:06:02):

Yeah.

EW (00:06:02):

- and I didn't have coffee, but at least I'd let the dog out.

CW (00:06:05):

I mean, so I'd probably bill between six and seven, because you're forcing me to be awake for an hour that I normally wouldn't be. It's tough, and you want to be ethical,...but on the other hand, when you're billing on an hourly basis, you can't really bill on an inconvenience basis, right?

CW (00:06:22):

Something could be extremely inconvenient for 15 minutes, right? And so how do you bill for that? It very strange. And the thing I'm doing,...I have to check on something occasionally, and I don't really feel like I can be doing anything else right now.

CW (00:06:36):

Because I've got multiple branches, and I'm making changes to neural network models. And so I have a couple of changes in the hopper, but I'm making changes that I want to test as I go.

CW (00:06:49):

Because I don't want to make six changes and then have something diverge, and then be like, "Okay, which...change caused things to diverge in a way I didn't want to?" So I can't really make progress until I get the results of this test back.

CW (00:07:04):

And then I'm gonna do it again with another change. And so, yeah, I'm just not billing that much this week because I'm -

EW (00:07:10):

Because walking by, -

CW (00:07:11):

- forcefully -

EW (00:07:11):

- looking at the computer in the kitchen isn't actually work.

CW (00:07:14):

Right. I'm just forcefully moving slowly, and well, that's just the way it is. There's other things I could potentially be working on, but I'm not in a headspace right now where I feel like I can multitask a lot. So I don't want to go off and work on,...there's a distinct project I'm working on for this client.

CW (00:07:31):

I don't want to go work on that, because as soon as this is done, I'm going to be back on this. So it's hard. I don't have a good answer, except to basically try to be honest, and say, "Well, I'm just not billing that much."

CW (00:07:45):

And I'm billing a minimum of an hour, hour and a half, for the stuff that I'm not really counting, because I don't want to click a stopwatch every hour for two minutes, right?...But it's really different from salaried work, right?

CW (00:08:02):

Because you wouldn't feel this way if you were in the office and the main thing you had to work on, you had to wait a day to get a response back. What would you do normally?

EW (00:08:14):

I would probably use that time,...education time, because -

CW (00:08:20):

Right. Sure.

EW (00:08:20):

- I think the company probably would like me to be better educated, and -

CW (00:08:24):

Yeah.

EW (00:08:25):

And so I would have that time and -

CW (00:08:26):

And that feels fine, right? But you can't bill that to a -

EW (00:08:28):

But as consultants, we can't bill that.

CW (00:08:30):

We can't bill that. So, yeah, I mean, I spent this week doing some other stuff for myself, but that means I'm not getting paid, so it's kind of awkward.

EW (00:08:41):

Well, and as soon as they messaged me this morning, I went to my computer, responded to them and then kicked off a bunch of other things that I'm working on. Which kind of like yours, requires attention pretty often.

EW (00:08:55):

And so I was helping them, and then whenever they didn't need help, I would go and do the next step and then wait for them to need help, and -

CW (00:09:01):

Yeah, so -

EW (00:09:03):

So, I mean, when we talked about this before...with your training. I suggested you do other things for them, because...if I have a long compile time, or there's a long download time, or there's a unit test, an egregiously long test that we run sometimes,...that's usually when I write the documentation.

CW (00:09:29):

Yeah, yeah.

EW (00:09:29):

But that didn't really work out for you this time. For me it worked out.

CW (00:09:33):

I have to make something up right now, because there's no documentation really pending, and some other stuff is too early for that kind of thing. So yeah, I'd have to make something up, and that feels -

EW (00:09:45):

Wrong.

CW (00:09:45):

- just as wrong as kind of charging for things that I'm not really doing. So, yeah,...I don't want to make up work for an hourly client, because that feels like theft of a kind. Unless it's truly useful, like you're saying. If you have documentation to do, if you have stuff to do that's pending..., yeah, that's the time to do that stuff.

CW (00:10:06):

But I'm kind of out of that. So yeah, it's tough, and it's probably a conversation we should have with the client, to be honest. And I expect this one would be fairly easy-going about it.

EW (00:10:25):

He'd probably be more easy-going than we are.

CW (00:10:25):

Yeah. But on the other hand, I just feel like that's a thing that we have to decide what we're comfortable with.

EW (00:10:33):

Yeah. And for the on-call stuff, I realized that while I may be spending five minutes answering questions, I only walk away for a minute before I have another five minutes.

CW (00:10:47):

Yeah. That's the thing. And your brain is still churning in the background.

EW (00:10:51):

Oh yes. The number of times I've walked back and said, "Wait a minute. There's an easier way to do this."

CW (00:10:55):

Yeah. Hourly work is very strange, because there's been times when I haven't been able to let go of a problem in my head. And so -

EW (00:11:03):

Yeah. Do you charge them for showering?

CW (00:11:05):

Do I charge for the walk up to it where I solved the problem?

EW (00:11:05):

That's where I figured it all out. Yeah.

CW (00:11:07):

Yeah, I do. Because I was thinking about their problem. Just because I didn't have a computer in front of me, or a pad or paper, doesn't mean I wasn't doing work. So yeah.

CW (00:11:17):

I mean with that, the danger is, the jokes about lawyers, the line item, "I crossed the street to say hello to you, but it wasn't you. A hundred dollars." So you just have to kind of use common sense, I think.

EW (00:11:33):

Yeah. Try to do what you would want done if you were the client.

CW (00:11:41):

Yeah.

EW (00:11:43):

Let's see. That actually brings to mind something. You said you couldn't work on another piece of that project, but I wanted help on Docker for a client. And you just read up on Docker.

CW (00:11:57):

A lot more than read up on it. I kind of taught myself enough of it to get by for a minute. Yes.

EW (00:12:04):

Okay. So Docker has been presented to me as a virtual machine, and it has been presented to me as a...alternative to Virtualenv, which is just another environment.

CW (00:12:21):

Yeah. There's more of a continuum. Do you want me to - ?

EW (00:12:22):

Yeah.

CW (00:12:23):

Okay.

EW (00:12:23):

So tell me why I'm wrong.

CW (00:12:24):

So people who use Python are probably familiar with Virtualenv, which is a way of setting up kind of a little bubble in which you can install Python modules, and they live in that environment. And then you can switch to a different environment that has a different set of Python modules.

CW (00:12:42):

And this gets to a problem with Python where there's lots of versioning and requirements issues. So you might have one project that needs one set of things and another project that needs a completely conflicting thing set of things.

CW (00:12:53):

And if you were just installing them on your system, or even as a user, you would quickly find that that's just not tenable.

EW (00:12:59):

And also the Virtulenv makes it easier to send it to someone else, because you do -

CW (00:13:05):

Yeah, kind of. Yeah.

EW (00:13:05):

- the freeze command, and suddenly you have all the versions you need.

CW (00:13:09):

Yeah. So with Virtualenv, you create a new environment, and then you do pip install of all the stuff you want for the project. And then you've got that. So the way that works is basically it creates a directory in your home directory where it installs all that stuff, and then it points everything to that when you switch.

CW (00:13:25):

But...it just works with Python. So if you were to install something else, a set of C libraries, or a new version of Python, that would still be in your system and outside that.

EW (00:13:41):

Apt-get is with your system and pip install is with the Virtualenv.

CW (00:13:45):

Although apt-get, yeah. I'll get to that. So with Virtualenv, if you wanted five different versions of Python, with Virtualenv, they'd still be on system. So you'd have to install them system-wide, and if there was any conflicts there, you'd be in trouble. A step beyond Virtualenv is Conda.

CW (00:14:06):

Conda is just like Virtualenv, except it takes care of more stuff, and there's a whole repository associated with it. So with Conda, you can create a new environment and then specify I want Python 2.7.4. And it'll go grab that and put that in the environment.

CW (00:14:25):

And so each time you create a new environment with Conda, you can specify a different Python, and it'll grab it. And then when you activate the environment, you switch Pythons, and it grabs the one you want. So that's pretty cool, because that solves some other problems.

CW (00:14:38):

And you can also do all the pip installs from a Conda environment, but you can specify other things that you want installed too. I remember at Fitbit, we used Conda, and it installed say, all the GDB JTAG scripts and stuff, and executables, and the SEGGER stuff.

CW (00:14:55):

And so when you activated in the environment, you got the right GCC,...it was great. So you can do more stuff with Conda, but that's still running on your system. And there can be conflicts where if it doesn't find something, it reaches for a system version of it.

CW (00:15:10):

So...if you've pip installed something, there can be a situation where you pip install it system-wide, activate either your Virtualenv or your Conda environment, and it doesn't find it, or if there's a conflict, it'll grab the wrong one.

EW (00:15:27):

Which, I mean, there are ways around that.

CW (00:15:29):

There's ways around that. Yeah, yeah. And the nice thing with Conda is you can make a YAML file, which has all the stuff, and then hand that to somebody, and it'll create the environment the same way, download all the things. But Conda has an installer with it.

CW (00:15:45):

So you can install stuff through Conda, you can install stuff through pip in your Conda environment, and you can go back and forth with that. The nice thing about installing with Conda is you can specify versions down to the point version. So you can say, "I want NumPy 20.1.1, and I want blah, blah, blah."

EW (00:16:06):

You can do that for Virtualenv.

CW (00:16:06):

That's true. Yeah. But -

EW (00:16:07):

Trust me, I know.

CW (00:16:08):

I know.

EW (00:16:08):

I'm installing some pretty old software right now.

CW (00:16:11):

Yeah, yeah. So that's the one thing I don't really understand, is I think they're reaching from different places sometimes. And I think Conda sometimes has a, "Give me...a set of things." There's a canonical set. So you grab one thing, and it grabs a whole bunch of different Python stuff. But Docker is a step beyond that.

EW (00:16:31):

And beyond that is virtual machine. So let's go with virtual machine first.

CW (00:16:35):

Yeah. Well, virtual machine is-

EW (00:16:35):

Because that's easy.

CW (00:16:36):

- what it sounds like. It's a complete computer with virtual hardware, hard drives, virtualized graphics, virtualized device drivers, running on your computer using hardware support. And the CPU is called hypervisor stuff.

CW (00:16:55):

And that, for all intents and purposes, that's a completely separate computer from the computer you're running it on, even though it's using all its resources. So in that sense, you install Windows to that, or you install Ubuntu to that, and it boots up. And you can even see it booting through the fake BIOS and all that stuff.

CW (00:17:11):

So it's a complete computer environment separate from your computer. And that's the heaviest way to create an environment that's sealed off from your system environment.

EW (00:17:22):

It's not a bad way necessarily to create a build environment.

CW (00:17:25):

No, done that all the time.

EW (00:17:26):

Because you can clone it, and everybody gets the same thing.

CW (00:17:29):

Yeah.

EW (00:17:29):

You have IP address weirdness, but maybe DHCP through that.

CW (00:17:34):

Yeah, yeah, that's usually not a problem. Yeah. I've done that at companies where there's a canonical Windows VM, and you go grab it, and it's got IAR, and all the crap you need. And everybody runs it on their Macs for some reason. Because nobody has a Windows machine.

CW (00:17:49):

So Docker was not exactly a mystery to me, but it was an annoyance for a long time. People kept throwing it at me, like, "Oh, you could solve this with Docker! Docker! Docker! Docker!"

EW (00:17:57):

I've heard that so many times. And I tried it on Windows, early on. Let's just say that wasn't pleasant.

CW (00:18:03):

Yeah, most of my experiences were something similar. And...somebody threw it at me at a company. "Here's the Docker for the development environment." I was like, "Oh my God...What is this command line even? It's complicated command line to start it. And I don't even know where I am when I start it, and what is this thing?"

CW (00:18:18):

Because you end up with a root shell sometimes if you do the command they give you, and like, "Why am I compiling in a root shell?" It just didn't make any sense. So, long story short, a thing for the client we're working with required me to use Docker.

CW (00:18:34):

Somebody sent me a thing for a development environment, and I deployed it, and used it. Didn't really understand how to use Docker. I just followed their README, and I was like, "Okay, this works great."

CW (00:18:47):

But there were still questions I had about Docker. In the course of setting some other stuff up on our local machine, I needed to install a new version of TensorFlow. But the new version of TensorFlow required new NVIDIA device drivers and a bunch of other stuff which would break your environment.

CW (00:19:06):

And so I ended up creating a new Ubuntu install on a separate disk, and I still had trouble with getting the right versions of NVIDIA stuff. And so I finally looked it all up, and Nvidia says, "Use Docker. This is our new supported way of having the right requirements and dependencies installed for a particular system.

EW (00:19:26):

And drivers.

CW (00:19:26):

And sort of the drivers. Yes. I think the drivers are part of the container somehow, but anyway. So I said, "Fine, I'll do it your way." And in the course of doing that, I finally just went to the Docker site and some other places. And I read about the damn thing and tried to answer the questions I had.

CW (00:19:47):

So I'm now a rank amateur instead of an idiot on using Docker, but I got it to work. And it's working, and I understand it a little bit better. And the difference between all these other things is Docker is closer to the virtual machine side of things. It doesn't share anything with your system unless you tell it to.

CW (00:20:08):

And when you create the environment, it goes and grabs everything it needs for that environment. So you can start a new container. Container is the word for the thing that's run.

EW (00:20:18):

Like virtual machine is a virtual machine.

CW (00:20:20):

Yeah.

EW (00:20:20):

Container is -

CW (00:20:20):

...So you say, base it on Ubuntu, and it'll go grab a base Ubuntu install, put that in the container, and then you can add other stuff later. And then you run those containers. And when you execute the Docker command to start a container, you give it the command you want it to run.

CW (00:20:38):

If you give it bash, you get to log in to the container, as root comes up and you can shell around. If you give it "start Jupyter Notebook," it just does that. And there's no interact with shell at that point.

CW (00:20:49):

So it's nice in that it can do some more...system-level kinds of things than Conda or Virtualenv. So for example, the TensorFlow thing, if I need to have something that deals with GPU at a different version than maybe I have on the system, I can do that.

CW (00:21:08):

I can grab the base Docker container from NVIDIA for a specific version of TensorFlow with the GPU. It'll go grab that, install the stuff it needs, and then I can install my particular development environment on top of that.

EW (00:21:24):

But you're running code that is native to the processor -

CW (00:21:27):

Yeah. Yeah. Yeah.

EW (00:21:28):

- you are on.

CW (00:21:29):

Yeah.

EW (00:21:29):

Unlike a virtual machine, where you may not be running code. If you have a Windows virtual machine in Mac -

CW (00:21:36):

That's still the same CPU.

EW (00:21:37):

It's the same CPU, but it's, I don't know.

CW (00:21:42):

It's not emulating.

EW (00:21:43):

It's not really emulating.

CW (00:21:43):

Virtual machines do not emulate. That's -

EW (00:21:45):

...Okay.

CW (00:21:45):

- why they're fast, is because there's support in the CPU to just partition things off. But they're still running native instructions.

EW (00:21:52):

But they are partitioned.

CW (00:21:55):

Yes. And Docker's partitioned.

EW (00:21:56):

Oh, okay.

CW (00:21:57):

When you start it up, it by default doesn't have access to the rest of your file system. You...have to kind of map in directories if you want them to be seen. So it is partitioned, and kind of sandboxed off.

EW (00:22:14):

Virtual machines are pretty slow.

CW (00:22:16):

No, they're not.

EW (00:22:17):

On my computer.

CW (00:22:18):

I don't know why that is. I mean -

EW (00:22:22):

Virtual machines have never been fast for me.

CW (00:22:25):

I have never had a performance issue with a virtual machine unless it's [inaudible] -

EW (00:22:29):

I'm using VirtualBox. Are you using something better?

CW (00:22:31):

Yes. I usually use Parallels. I used VMware Fusion in the past, and it was similar performance to Parallels, but it had other problems.

EW (00:22:39):

Huh.

CW (00:22:41):

But they shouldn't be slow. I mean, the reasons they're slow usually is you don't give them enough RAM, or you don't give them enough CPU cores.

EW (00:22:51):

I mean, I gave it more than half of my computer.

CW (00:22:54):

Yeah, how much does your computer have?

EW (00:22:56):

Well,...I believe that's topic number six.

CW (00:22:59):

Yeah. If you have eight gigs, then four gigs is probably not a lot for -

EW (00:23:04):

I have 16. Thank you very much.

CW (00:23:07):

Yeah, I don't know. I've never really had an issue with performance.

EW (00:23:12):

Okay.

CW (00:23:13):

But...I've also never run a VM on Windows, so -

EW (00:23:17):

Wow. Blame it on Windows.

CW (00:23:18):

And that's the other thing with Docker, is my experience with Docker was not great on Mac early on. It was terrible on Windows. But part of the reason for that is the support for Docker, the system-level support to make Docker work, is really well-tied into Linux.

CW (00:23:35):

And I think it's fairly well-tied into Mac now, but I don't know that it's good or has ever been good on Windows. Because they probably have to jump through some hoops and do more of a VM-y kind of thing to make it work there.

CW (00:23:53):

I could be completely wrong with that. But my experience with Windows is that a lot of the things you want to do are not as easy or performant, especially if you want to use the GPU in a Docker container.

EW (00:24:05):

I just log in to an Ubuntu machine.

CW (00:24:08):

Yeah. And that's the other option if you've got it.

EW (00:24:11):

Or reboot to Ubuntu.

CW (00:24:12):

But the problem I'm having is I made an Ubuntu to do the work I needed and tried to install the things I needed. And then somebody said, "Well, you have to use a container for that." It's like, "Why? Can't I just install your stuff?" "Nope, nope. This is how we're doing it from now on, because everybody yells at us too much," I guess.

EW (00:24:29):

So one of the things that confused me about Docker is that there are more steps -

CW (00:24:33):

Yes.

EW (00:24:34):

- than usual.

CW (00:24:36):

Yes, yes.

EW (00:24:36):

Because if I do a Virtualenv or a Conda, I basically say "Start my environment."

CW (00:24:44):

Yes, but you still built one before that.

EW (00:24:46):

No, the first time. Let's talk about it from the first time.

CW (00:24:49):

Yeah.

EW (00:24:49):

I'm putting together a base system now where...I build my Virtualenv and then I pip install a bunch of stuff.

CW (00:24:57):

Yeah. Well -

EW (00:24:57):

And then at the end, I can give other people -

CW (00:25:03):

Right.

EW (00:25:03):

- the list of requirements.

CW (00:25:04):

Yeah.

EW (00:25:05):

But I have to install all this stuff, and maybe pip would install all of it in a perfect world. But right now I'm just building up what I need.

CW (00:25:16):

Okay. Conda works similarly, but...with Conda, you can write a YAML file that has all the stuff you need. And when you build the environment for that you hand it to it.

EW (00:25:26):

Yeah. Like the requirements.txt from Virtualenv. Does it actually work for - ?

CW (00:25:32):

Yeah.

EW (00:25:32):

I bet Virtualenv works for most people. I just -

CW (00:25:35):

But with Conda you can also export it. So if you've got an environment, you can say export this environment and it'll create a YAML file. So if you want to install stuff by hand and then -

EW (00:25:43):

Okay. So we -

CW (00:25:45):

We agree.

EW (00:25:45):

We start out with the text file.

CW (00:25:47):

Yeah, yeah.

EW (00:25:47):

And in Docker too, you start out with the text file.

CW (00:25:49):

Yeah.

EW (00:25:50):

And then you decide you're going to start using this container.

CW (00:25:57):

Well, there's a long step in Docker first though.

EW (00:25:59):

Okay.

CW (00:25:59):

A lot longer...Even though Conda will install stuff from YAML, you have to have the Docker file with some sort of base.

EW (00:26:07):

Okay.

CW (00:26:07):

Otherwise it's just...an empty computer. So you can save from Ubuntu in the Docker file, and that's all. And it'll grab, they have their own repository system too, I don't quite understand that, or where there's alternatives to point with. Anyway, I think I had to do something to get the NVIDIA ones, set up a new apt-key, or something, but -

EW (00:26:30):

Yeah, you have to do that with Virtualenv too.

CW (00:26:30):

So anyway -

EW (00:26:32):

And pip.

CW (00:26:32):

- with Docker, you're building...kind of a real system, so you need to have a basis for it. And that will go off and grab that and install all that stuff.

CW (00:26:44):

And...it's better to install the things you need from that Docker file description than to do it by hand, because, this is a scenario I'm still fuzzy on, is the persistence of the images,...the persistence of the container.

EW (00:27:00):

That's where I was headed.

CW (00:27:01):

Yeah.

EW (00:27:02):

So once I finish my Virtualenv or my Conda, anytime I want to be in that environment, I type the magic numbers,...magic incantation.

CW (00:27:15):

Yeah, yeah.

EW (00:27:15):

And now I'm in that environment, and I can compile, or whatever I need to do.

CW (00:27:20):

Yeah.

EW (00:27:20):

And I get access to my drive.

CW (00:27:22):

Yeah.

EW (00:27:22):

And I'm just -

CW (00:27:24):

Yeah.

EW (00:27:24):

It's like it changed all my paths, basically, -

CW (00:27:26):

Yeah. Pretty much.

EW (00:27:26):

- is what I think of it.

CW (00:27:27):

Yeah, yeah.

EW (00:27:28):

But in Docker you build it, and then you have a container.

CW (00:27:34):

You have an image.

EW (00:27:35):

Okay. You have an image.

CW (00:27:36):

Yeah. So it builds an image -

EW (00:27:37):

What's the difference between image and container?

CW (00:27:40):

Container...is an instance of the running image.

EW (00:27:43):

Okay.

CW (00:27:44):

So you create an image, and what that does is...it loads up a container and then executes the command in the Docker file to install stuff. And then it saves the image off and gets rid of the container that it did that in.

EW (00:27:59):

Okay.

CW (00:28:00):

So you just have an image, which is...like a virtual hard drive, I guess, with all the stuff. And then when you want to start a container based on that image, you execute a different command. It starts it up, loads that image.

CW (00:28:15):

So you can have five containers running off the same image, but I don't think they're sharing the same backing store file system kind of thing. So as soon as you leave your container, exit it, that's it for it. So if you go in -

EW (00:28:29):

It stops existing.

CW (00:28:31):

It stops existing.

EW (00:28:31):

This part really boggles my mind.

CW (00:28:33):

...Well, this is an area I'm fuzzy on, as I said. I think there's ways to get around that. I think there's other ways to do it. I think there's probably ways to write to an image, and then write to the image while you're in a container, and have that persist.

CW (00:28:45):

So people who know how to use Docker, feel free to yell at me.

EW (00:28:49):

Quit shouting at your radios.

CW (00:28:49):

But, yeah, so there's a lot of ways...I was just trying to get to a point where I understood enough to do the things I needed to do.

EW (00:28:57):

But this whole, "You can start an environment, and it doesn't persist."

CW (00:29:01):

Yeah.

EW (00:29:02):

That happens when I use Google Collab.

CW (00:29:04):

Right. Yeah.

EW (00:29:05):

And it happened when I was using AWS machines.

CW (00:29:11):

Yeah.

EW (00:29:11):

...And I think that was one of the things I didn't understand, because I would get everything installed. And now it was finally ready to run, and they would charge me if -

CW (00:29:24):

[Affirmative].

EW (00:29:24):

- if I left it the way it was. And I'm like, "But it took me an hour and a half to set it up."

CW (00:29:29):

Yeah.

EW (00:29:30):

"You can't charge me for both." And that's why we have a house server...So the containers don't persist, and you have to figure out how to get your persistent information into -

CW (00:29:45):

Yeah, so, you can map a directory.

EW (00:29:45):

Yeah.

CW (00:29:46):

So you could say, on your computer, there's "home projects" or something. You can map that into your container as "projects," or "home projects," or something.

CW (00:29:55):

And then when you come in to your container that directory is there, and anything you write to that passes through as it normally would. And you're great.

EW (00:30:02):

Now you have a Mac, and I have a Windows.

CW (00:30:04):

Yes. "I have a Windows." [Laughter].

EW (00:30:07):

If you wanted to give me a Docker, would you give me the Docker file, or would you give me the image?

CW (00:30:15):

...Oh, I would give you the Docker file, because the image is large. Because it's installing a base of stuff -

EW (00:30:23):

Okay.

CW (00:30:23):

- for an OS. You wouldn't want me to hand you four gigs worth of stuff. And I don't know if it would work cross-platform like that.

EW (00:30:30):

That was my question. Okay.

CW (00:30:34):

So you can see how it would be useful. You can hand somebody a Docker file, and you can include other stuff...alongside the Docker file. Let's say you've got a bunch of .debs to install particular versions of something, or some RPMs, if you're on Red Hat, or a zip file, or something.

CW (00:30:52):

So if you've got particular tools that aren't easily downloadable as a set of shell script commands, while you're building the image, you can include those alongside. And then you can kind of unpack those and install them from the local file system into the Docker image.

CW (00:31:09):

So if you had a particular version of ROS or something that had been modified, right? That you need. You could include that alongside it.

EW (00:31:18):

Yeah. ROS is special. Robot operating system.

CW (00:31:20):

I was just coming up with -

EW (00:31:20):

But yeah.

CW (00:31:21):

Yeah.

CW (00:31:22):

So it's very useful, because you can have this completely self-contained thing, with all the stuff you need, that's installed. And it's not going to have a dependency mismatch with anything else on your system. That's the thing.

CW (00:31:36):

So l if you need 14 different versions of GCC for some god-awful reason, you can have them in different containers. And you don't have to have 14 GCCs on your computer, and they never see each other. So if you're doing -

EW (00:31:48):

And they never see each other.

CW (00:31:50):

Yeah.

EW (00:31:50):

But even if they all used the same program for something. Maybe they all use the same version of Make.

CW (00:31:57):

Yeah.

EW (00:31:57):

You have 14 different instances of Make installed as well.

CW (00:32:02):

Yeah.

EW (00:32:04):

And so you do have some disk space overhead with that.

CW (00:32:11):

Oh, sure. Yeah. Yeah. No. I mean the whole premise of stuff like this is disk is cheap and -

EW (00:32:15):

And network is cheap. I mean, because all of that -

CW (00:32:17):

Yeah.

EW (00:32:17):

- downloading. Network must be -

CW (00:32:19):

Yeah, yeah.

EW (00:32:19):

-free and disk is free.

CW (00:32:20):

Yeah...And I used it some in that ML class too. They had a Docker thing, and I kind of remember now that I used that. But...the hard thing about Docker for me is it's conceptually weird. The user interface is not particularly friendly. It has a lot of jargon, containers, images, that don't really say much about what they are.

CW (00:32:45):

A container certainly doesn't sound like a running thing to me.

EW (00:32:50):

Yeah, container is a box. It's not -

CW (00:32:50):

It sounds like the image. Image and container are interchangeable in my mind. The command line is weird. Everything's very command line. I'm sure there are GUI tools to manage this stuff, but I haven't really looked at them.

CW (00:33:02):

So it's just kind of off-putting when you start using it. And then there's weird stuff like when you bash into your container, it's your root, which makes me feel weird.

CW (00:33:15):

And you have to do things like if you don't want root spamming files all over your shared directory, you have to map your user ID as part of the command line, which is an ugly Unix-y option. So it's just stuff like that.

CW (00:33:33):

It's just like, "Eh,...it's fine." I understand this all, but...I guess as I get older, I get more irritated with people wanting me to learn things. That came out wrong. I get more irritated with, what's the sentiment here?

EW (00:33:47):

With the people who feel like, "It doesn't matter how it looks, because I understand how it works."

CW (00:33:55):

Yeah, I just -

EW (00:33:55):

It's almost a form of gate-keeping.

CW (00:33:57):

Yeah.

EW (00:33:57):

"I'm going to make this so complicated. You won't understand it. And then once you do, you'll be part of my tribe."

CW (00:34:03):

I need this car,...because I have a job that requires me to drive somewhere. So I have to transport myself in this car. But I also do not want to have to adjust the timing on the car.

EW (00:34:14):

Yes. I just want to use it.

CW (00:34:14):

And deal with the spark plugs. Some people like that. I don't. So I want an automatic transmission car when I'm commuting, because I don't want to drive a Lamborghini and try to shift gears when I'm going 20 miles an hour on a freeway for two hours. It's not very much fun.

EW (00:34:29):

And there are times the Lamborghini would be awesome.

CW (00:34:31):

Right. Well, Docker's never a Lamborghini as far as I'm concerned, but that's how I feel about some of these things. It's like, "Here's a whole 'nother thing you have to learn." And this isn't my job. My job...right now is to make neural network model modifications and test them.

CW (00:34:50):

In order to do that, I had to spend three days learning how to make a container system work, and the ins and outs of it. And enough of it that I didn't run into a lot of trouble, which means I had to learn more of it than just the example tutorial stuff, is I guess what I'm saying.

CW (00:35:07):

A lot of times you can get by with stuff like this with the how-to guide that's a page long, and, "Here are the major commands." I didn't feel like that with Docker. I felt like I had to dig a little deeper, because I had to understand some of the command line options, and the jargon, and some other things, to make sure I wasn't using it wrong.

CW (00:35:23):

Because I did use it wrong several times, just because I didn't know what the hell I was doing. So that's kind of an irritant. And I don't feel that way with virtual machines, because virtual machines is like, "Well, okay, here's this program. Here are the options and dialog boxes. You can add in or not add in what hardware you want."

CW (00:35:41):

It's all kind of intuitive if you know how a computer works, and then you start it up, and it's another computer. I don't have to learn anything else. It's the same garbage I've dealt with for a hundred thousand years.

CW (00:35:53):

In Virtualenv and Conda, I did feel a little bit intimidated by them at first, but they're so simple. There's not a lot you can really do with them.

EW (00:36:01):

Once I started thinking of them as basically path changers, which isn't what they are, because they -

CW (00:36:05):

Well, to some extent, it is. But yeah.

EW (00:36:09):

They do install their version of stuff -

CW (00:36:11):

Yeah.

EW (00:36:11):

- to their local areas. But it is kind of just, "Okay, if I just changed all my paths - "

CW (00:36:19):

You could do the same thing with chroot, basically, if you really wanted to. You could build your own Conda, or you could build your own Virtualenv -

EW (00:36:28):

Yeah, I think so.

CW (00:36:28):

- in an afternoon with some shell scripts. If you were so inclined, which is again, like building your own car engine.

EW (00:36:34):

I don't want to do that. I want to -

CW (00:36:36):

Right.

EW (00:36:36):

- see what's going to happen to my code.

CW (00:36:38):

Yes. So this is the sort of area where I feel like if there's a tools person at your company, this is the sort of thing they should be helping to make easier and do. Because it's extremely powerful, and it can solve a lot of problems. Especially...when you're doing embedded stuff, and the tools are weird, and there's just version issues, and -

EW (00:37:02):

And for me, I'm fixed on a set of tools.

CW (00:37:04):

Yeah.

EW (00:37:04):

And I cannot change.

CW (00:37:05):

Yeah.

EW (00:37:05):

Because I have units in the field, and I have to make them interchangeable.

CW (00:37:09):

And you can stick that definition for that set of tools somewhere else. And then always get back to it if you need to and get back to that exact thing. Which is great for people who work in medical space and things -

EW (00:37:18):

Yeah.

CW (00:37:18):

- where it's like, "We need to freeze this set of things around this version we produced, because the FDA or whoever is going to want us to be able to prove that we can rebuild this exactly the same way. So it makes a lot of that a lot easier, but there's a bit of a learning curve to deal with it.

CW (00:37:36):

So I'm tentatively taking steps to being in favor of Docker, but I'm not happy about it.

EW (00:37:45):

Yeah. So if you are the tools person at your company, realize there's a reason people are running away every time you say Docker. It's kind of complicated if you don't know.

CW (00:37:57):

...Yeah.

EW (00:37:57):

And it's not pretty. It's not friendly. It's not one line, here, it all works.

CW (00:38:02):

And on Linux,...this is going to sound weird, but it's a little bit easier to deal with because it feels like a Linux-y thing.

EW (00:38:09):

It feels like another shell.

CW (00:38:10):

...Well, but the commands, they're just as ugly as all the other commands.

EW (00:38:14):

Yeah.

CW (00:38:14):

When I installed it on Mac, I think I had to install it on my Mac to do the build environment for the company a couple of years ago, I had to install this menu bar thing and this Docker thing that sits there. And...all this crap. It's this whole infrastructure. And it's like, "What is all this stuff?"

CW (00:38:33):

And...I actually just uninstalled it from my Mac, because..I realized it was still there. There was no uninstall. I had to go through in a shell, and go to the library, and a whole bunch of subdirectories, and delete 50 files by hand to uninstall it.

CW (00:38:49):

So that was not cool. Linux is a little bit better about that, but I did not appreciate that. And that was one of the things that turned me off on it, was like, "Here's this giant infrastructure. And all I want to do is run a container. I don't care about your support for stuff in the cloud."

CW (00:39:08):

Because there's Docker, and then there's the whole world of Docker, which is much, much bigger. And...there's stuff happening in data centers where containers and images are moving around between systems and blades. And I don't know what those people do, but -

EW (00:39:23):

Well, that's kind of what's happening with AWS still.

CW (00:39:26):

Yeah. Exactly.

EW (00:39:26):

They're all containers.

CW (00:39:27):

Enough about that. It's interesting. And if you have an unsolvable kind of tools, versioning, and requirements problem, it might be something that can solve that pretty quickly once you get used to it. And I'm sure people are just screaming at me, "You're an idiot. This is super easy."

EW (00:39:44):

Where do you want to go to next on this list?

CW (00:39:47):

Oh, God. I don't know. You had this stuff about the podcast. Introspection stuff.

EW (00:39:57):

Oh yes. Okay. So we have mentioned that we are doing more social media in an effort to grow our audience, which is kind of weird. We're definitely not marketers. I don't know if you've noticed that. But it's hard to do promotion. It's hard to do self promotion.

EW (00:40:20):

And I really do believe in the show. I think that it has helped people. And I think that it has helped people stay in engineering. And I hope that it has been informative, and entertaining, and amusing, while also helping people get into engineering.

CW (00:40:37):

If for nothing else, the handful of people who've talked to us about jobs they got, or career changes they made they were happy about because of the show, makes it all very worth it. But, I'd like to help more people.

EW (00:40:51):

Yeah.

CW (00:40:51):

And I don't know if we should say, but our audience has kind of plateaued for a while.

EW (00:40:58):

But some of that's because of the pandemic, I think, because nobody's commuting anymore.

CW (00:41:02):

I think there's two things happening, but yes, I think pandemic didn't help.

EW (00:41:05):

It is possible everybody's bored of us, which is totally fine. If you all leave, we'll stop doing this.

CW (00:41:14):

[Laughter]. Title.

EW (00:41:15):

Okay. So our social media person sent us some questions, and many of them are unanswerable, but I wanted to go over the questions just so that we can kind of baseline what we want. They asked for a new survey, which we haven't done since episode 200 -

CW (00:41:39):

Yeah.

EW (00:41:40):

- to ask people what they'd like to see more of or less of. And if they want to see more Instagram, Twitter, LinkedIn, Facebook stuff.

CW (00:41:54):

I think the answer to that is probably not really. I think most of the people who are our current audience are into the show and listening to the show...I don't know the actual answer to that, but that's just my guess.

EW (00:42:10):

She asked me to provide a list of goals, which I kind of already had, and then prioritize them.

CW (00:42:20):

[Affirmative].

EW (00:42:20):

And so the first one was get more listeners. Because that's a measurable metric. We may not know exactly how many listeners we are, but we can average over downloads per show.

CW (00:42:32):

Yeah.

EW (00:42:34):

And this can be specific numbers, but for me it's always 10%, or 5%, or whatever makes sense in growth numbers.

CW (00:42:45):

[Affirmative].

EW (00:42:45):

But how do you do that?

CW (00:42:48):

Yeah. And the question is, have we saturated the people who would normally find us through the means that we use like -

EW (00:42:57):

Twitter.

CW (00:42:58):

- Twitter, or doing more conference talks, or blog posts or stuff like that. Which we haven't really been doing a lot of.

EW (00:43:08):

No. We haven't been doing that sort of outreach.

CW (00:43:11):

So, just...people finding the show organically through searching through the podcast directories or whatever, I don't think that's really viable anymore.

EW (00:43:22):

There's so many podcasts out there.

CW (00:43:24):

There's a lot of podcasts and ours is fairly niche. So, yeah. So I think we have to try different things that maybe we haven't tried or don't know how to do.

EW (00:43:35):

Which is why we have a social media person now.

CW (00:43:40):

Yep, yep, yep, yep.

EW (00:43:40):

The second priority was promote STEM diversity, and they argued for STEAM diversity.

CW (00:43:50):

Sure. Whatever.

EW (00:43:51):

How do you feel about STEAM versus STEM?

CW (00:43:55):

[Uhhh].

EW (00:43:55):

The "A" is for art, if anybody's not -

CW (00:43:57):

I don't have strong feelings.

EW (00:44:00):

Okay.

CW (00:44:00):

There's enough people doing arty things with technology that I think it's fine if, I mean, certainly our show and the guests we have tend to occasionally have an art bent, and I would feel weird leaving that out deliberately as what we're promoting.

EW (00:44:19):

I like the "A" in STEAM surrounded by the other letters. I like that technology and art can draw more people -

CW (00:44:32):

Yeah, yeah, yeah.

EW (00:44:32):

- to science, technology -

CW (00:44:34):

Yeah.

EW (00:44:34):

- engineering and math, but I don't think we're ever going to have a painter on the show who is just doing.

CW (00:44:41):

I mean, if Bob Ross was still alive, you would have him on the show.

EW (00:44:43):

I totally would. I totally would.

CW (00:44:44):

So I just -

EW (00:44:46):

Alright.

CW (00:44:46):

I just demolished your argument right there.

EW (00:44:47):

Yeah. And then we asked Robert Lang on the show and only talked to him about origami. What am I saying? Of course. With respect to this, what positive outcomes can you already point to that you would like to continue in order to promote STEAM diversity?

CW (00:45:04):

Hm. Well, several people who have been on our show went on to be extremely famous people.

EW (00:45:10):

Simone Giertz.

CW (00:45:10):

And I'm sure it was all about us. [Laughter].

EW (00:45:18):

Janelle Shane. Yes.

CW (00:45:21):

I'm not taking credit for any of that.

EW (00:45:23):

No.

CW (00:45:25):

More seriously. Well, I don't know. I mean, we get feedback from people all the time that the show has helped them in various ways or inspired them to do something. So I think that's great, but I'm not quite sure that that's what's being asked?

EW (00:45:42):

Positive outcomes you can point to, with regard to promoting STEAM diversity.

CW (00:45:50):

I don't know.

EW (00:45:50):

We get emails occasionally.

CW (00:45:52):

I mean, yeah. So that's what I'm talking about.

EW (00:45:55):

We do promote STEAM diversity, because we do have a lot more women on the show proportionally than there are necessarily in engineering. Because I do work on that, and I do try to find people who are not necessarily the normal engineer that we think of.

CW (00:46:14):

Yeah. I don't know.

EW (00:46:20):

Interest and engage people in STEAM. This is so hard.

CW (00:46:25):

Yeah. So, I mean, I don't know how to answer some of these questions, and I don't know what the goal of answering some of these questions is. What is going to be done with the answer to "Do you have examples of outcomes?"

CW (00:46:38):

Is that going to be put into an ad? Because we can't do that with some of them. They're private. So, yeah. The last question, "What is the best way to measure progress for this goal?" No idea.

EW (00:46:50):

Yeah, exactly.

CW (00:46:51):

No idea.

EW (00:46:53):

So interest and engage people, one option would be to catalog the episodes by different categories and direct people with different interests, make playlists, all the artists -

CW (00:47:03):

Yeah. I think we can, playlists and -

EW (00:47:05):

All the artists, all the basics, all the very technical ones, all the engineering -

CW (00:47:10):

Yeah.

EW (00:47:10):

- advice, career ones.

CW (00:47:11):

Yeah. No, I think that's a great idea, is having some intro packs, because...I mean, we still get emails about people finding mistakes in episodes five years ago, right? So...people are listening to the older episodes, which is great.

CW (00:47:26):

And so maybe it would be helpful to say, "Hey, if you're interested in this topic, here's a half dozen episodes that you might find interesting." I don't think that's going to drive much new listenership, but -

EW (00:47:37):

I guess the idea there was to promote it to other communities.

CW (00:47:41):

Yeah. Okay.

EW (00:47:44):

If we have an artist playlist, then we can promote it to more of an artist audience.

CW (00:47:51):

Sure, sure.

EW (00:47:53):

Or a musician audience.

CW (00:47:54):

Sure, sure. Okay.

EW (00:47:54):

She asks if one of my goals is to widen the guest base with more famous guests. I'm iffy on that.

CW (00:48:04):

Famous guests. Some of them can be good. Some of them can be merely famous.

EW (00:48:09):

Okay. So famous guests,...they fall into categories. Either they are perfect guests and they have...everything together -

CW (00:48:17):

Or they don't care about the show and wonder why we're bothering them.

EW (00:48:21):

Yes. And it's really hard for me to know which is which.

CW (00:48:23):

We often don't know until minute two of the podcast.

EW (00:48:26):

Well no, because usually I do get a sense of whether or not they respond to my emails.

CW (00:48:31):

Well, yes. There's that. Yeah.

EW (00:48:31):

But...yeah, it's just really tough with the famous guests, and what is fame?

CW (00:48:39):

And they don't tend to bring much in. We get a bump of the stats, when we have a very popular guest, that lasts for a week. And then we revert to the mean. So we're not getting long lasting people from that.

EW (00:48:54):

And when we do ask people,...what are their favorite shows, because that was one of the ones that I did have in the last survey -

CW (00:49:02):

Yeah, yeah.

EW (00:49:03):

- every show was listed by somebody.

CW (00:49:06):

Yeah, I know.

EW (00:49:06):

Even shows we weren't really proud of. Or we didn't think worked.

CW (00:49:10):

Yeah.

EW (00:49:12):

Somebody -

CW (00:49:13):

Like this one.

EW (00:49:13):

[Laughter]. I know. People say they like it when we talk to each other. But yeah, so it's kind of weird -

CW (00:49:22):

Yeah.

EW (00:49:22):

- that we can't say who's famous, because it depends on who's listening.

CW (00:49:29):

I will say that I think one of the solutions is to be more visible, and that's hard...I mean literally visible, go where the people are on YouTube. Because I think a lot of...where people are looking for stuff these days is not podcasts.

CW (00:49:48):

It's YouTube and stuff. So I don't know what kinds of things we would put there, or even if we would want to do that. But I do think finding areas outside of the podcast to be visible, such that the podcast itself gets more visibility, is perhaps the way to do it, but I don't have a good roadmap for how to do that.

EW (00:50:06):

Go to more conferences.

CW (00:50:08):

[Bleh].

EW (00:50:08):

Go to -

CW (00:50:11):

We love conferences. Sorry.

EW (00:50:12):

I mean, there's the Embedded Online Conference. That's one of the reasons I'm presenting.

CW (00:50:15):

Yeah.

EW (00:50:16):

Supercon's fun, although it's very exciting, which is kind of exhausting.

CW (00:50:24):

I mean, the last year has not been great for -

EW (00:50:27):

Yeah.

CW (00:50:27):

- conferences. There's going on other podcasts -

EW (00:50:31):

Yes.

CW (00:50:31):

- which sometimes works, I guess. Maybe.

EW (00:50:34):

I think that's been okay. We just don't do it very often.

CW (00:50:37):

It's certainly where we got our initial listenership, from crossover from The Amp Hour.

EW (00:50:41):

Yeah.

CW (00:50:42):

But...yeah, I don't know. So if anybody has any ideas, or would like us to just stop worrying about this, that's fine. But yeah, it's a challenge.

CW (00:50:55):

All promotion's a challenge, because it both feels gross, and on the other hand, you want to be reaching more people if you feel like you're doing something that's worthwhile, and it's helping people, or that people enjoy.

CW (00:51:10):

And you feel like more people should see it. And we had a fair amount of growth for a few years, and then it kind of stopped.

EW (00:51:19):

I mean, we have a great audience, both in -

CW (00:51:22):

Yeah, yeah.

EW (00:51:22):

- terms of size and in terms of people.

CW (00:51:24):

So part of the question is why do we want a bigger audience, and mainly it's so I don't have to work anymore.

EW (00:51:31):

Having people support more on Patreon was one of the questioned goals. And I was like, "Yeah. As long as they continue to pay for you, it's fine."

CW (00:51:43):

Yeah. Not a big deal. So we're going to continue thinking about this. I mean, we've talked about other things, like having different subpodcasts just to -

EW (00:51:53):

Yeah. She had that on the list, but unfortunately it was the week I was preparing my conference talk -

CW (00:51:58):

Yeah, yeah.

EW (00:51:58):

- and I was like, "No. No more things can happen."

CW (00:52:02):

Right, right. So, that's fine. Okay. I'm declaring that topic well and truly discussed.

EW (00:52:11):

Okay.

CW (00:52:12):

What do we got next?

EW (00:52:14):

Do you want to talk about map files?

CW (00:52:16):

What would you like to talk about map files, given that you're going to talk about map files in your conference talk?

EW (00:52:22):

Oh, right. I can't really give this talk right now.

CW (00:52:26):

I mean -

EW (00:52:27):

Because -

CW (00:52:28):

It's 40 minutes long.

EW (00:52:30):

Well no, I was going to go over the highlights, but yeah. Okay. Well maybe we'll talk about map files later.

CW (00:52:37):

I think we should talk about it after you've released it publicly, if I'm allowed to say that that's a thing that happens.

EW (00:52:43):

Yeah...So the slides will go up when I give my talk. But that will have a huge component missing. Because...there's times where I look at files.

CW (00:52:56):

[Affirmative].

EW (00:52:56):

And then I think we'll release it less than a month after the conference.

CW (00:53:04):

Okay.

EW (00:53:06):

I'm hoping June 1st, but I'm not sure when it's going to happen for sure.

CW (00:53:09):

That's only a couple weeks after the conference.

EW (00:53:10):

Yeah. So it's kind of -

CW (00:53:13):

And you're going to stomp on my Kickstarter.

EW (00:53:15):

Oh, well then, maybe -

CW (00:53:16):

[Laughter]. I was kidding. I'm totally kidding. It's not like they overlap at all.

EW (00:53:19):

So you're really going to do the Kickstarter June 1st?

CW (00:53:22):

Oh God, no, I haven't picked a date.

EW (00:53:24):

Oh.

CW (00:53:24):

I mean, somewhere around there. We've got some stuff to do before then, but I'm hoping to start it in June-ish, June-ish timeframe.

EW (00:53:33):

And this is for your album.

CW (00:53:34):

Yeah, yeah. For the 12AX7 album. So yeah. Most most of the prep work is done, kind of. We've got to do a video, a campaign video, although some musicians didn't do those, or they did ones which were -

EW (00:53:46):

It was hilarious. I said, "Do you want to watch a movie this afternoon?" It was Sunday or something. And he said, "Well, I have to watch some Kickstarter videos. And then during the movie, I'll sketch out what we're going to do."

EW (00:53:58):

And 10 minutes later, he's watched some, and he's like, "Some of these people don't have them. Some of them just play music for two minutes solid and don't say anything -

CW (00:54:08):

Six, six minutes.

EW (00:54:09):

Six minutes solid.

CW (00:54:10):

There's nothing about their campaign. It was just a live performance in a room. I was like, "I don't understand." Anyway, some of them -

EW (00:54:17):

Suddenly, it became much easier.

CW (00:54:18):

The bar was lower. So I worried about that a little bit less. But anyway, I don't want to talk about that too much, but -

EW (00:54:23):

Speaking of the bar being lower -

CW (00:54:26):

What?

EW (00:54:26):

- and you.

CW (00:54:29):

What?

EW (00:54:29):

You know -

CW (00:54:30):

What!?

EW (00:54:30):

My conference presentation.

CW (00:54:32):

Yeah.

EW (00:54:34):

Okay. So my plan with my conference presentation really was never to...be a head on the screen.

CW (00:54:39):

Your plan was to give it as a puppet frog.

EW (00:54:42):

That was a joke. I wasn't going to have anything on the screen.

CW (00:54:45):

You would have done it if people had let you.

EW (00:54:47):

That might be true. But I was just going to voiceover and computer screen record. That would have been easy.

CW (00:54:56):

That's not a conference talk. That's a webinar. That's a webinar from 1998 before they had cameras.

EW (00:55:04):

That's not true. I gave a webinar and did just that in -

CW (00:55:08):

Yeah -

EW (00:55:10):

- 2010.

CW (00:55:10):

I don't think that's what they're expecting for conferences though.

EW (00:55:12):

Okay. So the next option would have been a webcam of me in the corner with just my head -

CW (00:55:21):

Yeah.

EW (00:55:21):

- and the slides.

CW (00:55:24):

Yeah.

EW (00:55:24):

I mean, I suspect that's what most other people are going to do.

CW (00:55:28):

Yeah.

EW (00:55:28):

If I was going to really go above and beyond, I might actually light myself, so people could see me, and I wasn't backlit like I am in the -

CW (00:55:36):

Yeah. But you would have lit yourself with a USB plugged in LED lamp.

EW (00:55:42):

Yeah. But it's a circle. So it doesn't have spots.

CW (00:55:45):

It's two inches wide.

EW (00:55:48):

Okay. So I wasn't allowed that.

CW (00:55:51):

You're acting like I forced you to do this.

EW (00:55:53):

Well, every time I turned around the bar was a little higher.

CW (00:55:58):

I had been researching.

EW (00:56:00):

Exactly. So suddenly we have a 10 foot by 10 foot green screen. It's just a sheet really that he hung up.

CW (00:56:10):

False. The green screen had been purchased prior to your conference talk ever being a thing, because I needed it for my music videos.

EW (00:56:17):

Okay. We have a green screen.

CW (00:56:21):

Uh-huh.

EW (00:56:21):

And I'm going to stand in front of the green screen.

CW (00:56:23):

Yup.

EW (00:56:24):

And I'm going to give my talk. And he asked me if I wanted a teleprompter. Where we would have gotten a teleprompter, I don't know. And I probably should have said yes, because I do look down a lot.

CW (00:56:35):

I was going to make one. I have a very large monitor, and I was going to put it on a stand.

EW (00:56:39):

And then suddenly we have these umbrella light things.

CW (00:56:43):

They cost $50 for the whole set.

EW (00:56:46):

And a whole bunch of new Logic plug-ins.

CW (00:56:50):

I already had those before.

EW (00:56:53):

I don't think you had all of them. And so... -

CW (00:56:59):

And the camera, the DSLR and everything I already had.

EW (00:57:02):

We did have all that. Yes. And so suddenly I'm spending a day, instead of a t-shirt while I narrate my slides that nobody's going to see, I have to dress up,...because people are actually going to see me.

EW (00:57:19):

And then there's the question of, they're going to see all of me, or just the shoulders and stuff. And now, with the green screen, I appear to be floating on the slides.

CW (00:57:35):

Floating. If I wanted to make you float, I could have done that.

EW (00:57:39):

And on the version we're releasing, I get to be a hologram, including the stripes with the Star Wars stripes.

CW (00:57:45):

I'm not convinced that's what we're doing yet, but okay.

EW (00:57:48):

It may be.

CW (00:57:51):

Yeah? Where's all this headed?

EW (00:57:53):

I'm just saying you set the bar for the video.

CW (00:57:57):

I feel like you're setting high expectations that probably the video doesn't need.

EW (00:58:02):

...Yeah. Every time I turned around, he raised the bar on the video. And since he did all the video work, I can't really complain.

CW (00:58:12):

I just...don't like some things, and I don't want them to exist. Those things are audio that sounds bad and video that looks bad. And so I made sure to get you good sound -

EW (00:58:25):

And you did.

CW (00:58:26):

- and to make the video look good. I don't understand the complaint here.

EW (00:58:32):

My only complaint is that I was expecting something very low-key, and I ended up with something very professional and polished.

CW (00:58:39):

Well, okay. Next time we'll do it with the puppet.

EW (00:58:45):

I mean,...we even have bloopers, which we might release.

CW (00:58:49):

I haven't edited those yet, but those are hilarious.

EW (00:58:56):

Okay.

CW (00:58:57):

But to be fair, on the sacrifice I have made, my laptop's hard drive is three-quarters full with just your presentation video crap. And I cannot wait until it is released and done, so I can free up the 275 gigabytes of video.

CW (00:59:14):

Man, what is going on with video? It takes a lot of space. And every time I blinked, it just grabbed another 50 gig for some reason.

EW (00:59:25):

Well, and every time I watched the video, more stuff was added to it. So the first time there's just me and the slides. And then there was me and transitions into different slides, so they were all very smooth.

EW (00:59:39):

And then there was a part where I said the wrong thing. And then there was a bubble that corrected what I was going to say. And then there was music added at the end.

CW (00:59:50):

Yeah. Yeah. You still haven't said anything about the dinosaur, that chomps your head off after the credits.

EW (00:59:54):

I haven't seen that yet.

CW (00:59:56):

That's not there.

EW (00:59:59):

It was pretty cool. Thank you for doing it.

CW (01:00:01):

I mean, yeah.

EW (01:00:02):

I know you did it so you could learn how to use Logic for your music video.

CW (01:00:08):

I know how to use Logic. Final Cut.

EW (01:00:10):

Final Cut. Final Cut. I'm sorry. Oh, and it wasn't Logic plug-ins. It was Final Cut plug-ins. Okay. So yeah. Video. Also watching yourself on video.

CW (01:00:20):

For hours.

EW (01:00:21):

Oh my God.

CW (01:00:22):

Pretty good. Yeah, yeah.

EW (01:00:22):

That was awful. I mean, I don't even like to listen to myself.

CW (01:00:25):

Well, not in your defense. You did...watch it at half-speed a bunch, which I think is probably not healthy.

EW (01:00:36):

Two-thirds speed, because I was trying to get a snapshot, but every time the screen happened, my eyes were closed, or I looked completely demonic. And then if you play it at two-thirds speed, I sound so extremely drunk. It's pretty funny.

EW (01:00:52):

And if you play it at 2X speed, it's pretty good. I mean, that was the speed I think everybody should listen at, is 2X.

CW (01:00:59):

Alright. Well, anything wrong with the video, it falls in my lap, and there's -

EW (01:01:06):

No.

CW (01:01:06):

Yes. No, no. Seriously. I mean, you did a great presentation, and if there's problems with it, it's in the production, not the presentation.

EW (01:01:18):

Do you think people are going to be mad about the pirate jokes?

CW (01:01:20):

That there aren't any?

EW (01:01:22):

Yeah.

CW (01:01:23):

I was.

EW (01:01:26):

There is one but only in the slide deck.

CW (01:01:29):

Yeah.

EW (01:01:31):

Okay. So we did get an email from Suku, saying it was "very refreshing to hear another engineer's honest professional pain - "

CW (01:01:43):

[Laughter]. That's great.

EW (01:01:44):

- from the last time you and I talked. "I feel the industry has too many people trying to make things look easy so they can look more talented or more senior." I think this was a compliment.

CW (01:01:55):

Yeah, that's a compliment. I take it that way.

EW (01:01:57):

Okay.

CW (01:01:57):

I wish people realized that computers and everything to do with them are awful, and terrible, and spiky, and pointy, and they hurt.

CW (01:02:05):

And it's unpleasant for most of the time. And it's only offset by that hit of dopamine you get occasionally when something works, when you haven't ruined it subsequently by typing a different command.

CW (01:02:19):

But yeah, if people have the impression that things are easy or fun, then -

EW (01:02:26):

Some things are fun.

CW (01:02:28):

- I feel like they're doing it wrong...Yes. Things are fun. But every fun thing is proceeded by something -

EW (01:02:38):

Docker.

CW (01:02:39):

- painful, or after doing the fun thing, you switch onto a new thing that is not fun until you go through the pain. I mean, yeah, there's a lot of fun to be had and sometimes solving problems is cool.

CW (01:02:53):

The difference between solving problems that are cool, and I find fun, and the problems I don't find cool, I don't really, I don't really know what the difference is. But there's a lot of times where I can't stop solving something, because I'm so into it.

EW (01:03:04):

Yeah.

CW (01:03:05):

But there's a lot of times where...I have a problem, and I'm like, "This has just got to stop. I hate this." And I don't know what the difference is, but I think maybe it's stuff like if I'm solving what I feel is a puzzle...Something like not mathematical in nature, but I'm trying to create something that hasn't been done before.

CW (01:03:23):

And I don't know how exactly to do it, or to piece the things together to make it work. Versus struggling with something that already exists, and I'm trying to kind of hammer into doing what I want, like a new tool or something.

CW (01:03:38):

...Like setting up continuous integration, or getting the right install for a stupid tool chain, or something like that. Those are puzzles too. But I find those just drive me completely insane, and I hate them. Whereas trying to solve a math problem or something, or make some new piece of software, do something cool. That's the fun bit.

EW (01:04:01):

Yeah. And I like it when the hardware does what I tell it.

CW (01:04:05):

Yeah.

EW (01:04:05):

Or when it's optimal -

CW (01:04:07):

Yeah.

EW (01:04:07):

- in some way. But yeah, the tools actually is a big weakness for me too, because...I know some people are interested in making sure that the continuous integration works, and -

CW (01:04:22):

Yeah, yeah.

EW (01:04:22):

- I think it's important. I really do think it's important. And I think that that setting up the test system is very important, but it is the least fun thing.

CW (01:04:34):

I think that's...maybe not a great example for me, because I mean, if that was my goal to get continuous integration working, I can kind of foresee feeling pretty good about that once I got it set up. But I think it's when things are in the way.

EW (01:04:45):

Yeah. The in the way.

CW (01:04:47):

Yeah.

EW (01:04:47):

The in the way, and it should have just already worked.

CW (01:04:50):

Yeah.

EW (01:04:51):

If I type install GCC, I don't want to still be there 20 minutes later trying to get LLVM installed properly.

CW (01:04:59):

Right. Or the TensorFlow stuff, I was arguing -

EW (01:05:02):

[Oof].

CW (01:05:02):

This is I think what he was talking about, but the TensorFlow stuff I was talking about, it's like, "I need to get this so I can run my code."

EW (01:05:10):

Yeah

CW (01:05:10):

"And I cannot run my code, because some other organization has decided not to make it easy to make the tools work." And that's the kind of thing where I cannot get into the puzzle-solving mindset, because I know there's a solution, but the solution sucks, and it's not going to be a solution that's something that can be shared anywhere.

CW (01:05:29):

Like, "I solved this! Now everybody can have it solved." Because in another week there'll be a different version, and everything will be broken in a different way. So it's that kind of stuff where it's like, "Okay, I've got to fix this brittle thing...to move on, but it's not a lasting solution to anything. I haven't done anything new for the universe."

CW (01:05:45):

I've just kind of -

EW (01:05:46):

It's not even likely to work for that long, because it is brittle.

CW (01:05:49):

"I've made a bridge out of grass - "

EW (01:05:52):

Yeah.

CW (01:05:52):

" - across this chasm, and it's going to fall down next week, but I had to get across the chasm, and I'm not dead. But that's all I can say about the problem." Yeah. Anyway,

EW (01:06:08):

So yeah...How much time do we have?

CW (01:06:14):

We've got as much time as you want.

EW (01:06:16):

How much time have we already talked?

CW (01:06:19):

More than an hour and less than two.

EW (01:06:21):

Alright. Then I'm not going to talk about Python.

CW (01:06:24):

You want to talk about laptops real quick?

EW (01:06:26):

If you really want.

CW (01:06:27):

You need a new laptop.

EW (01:06:30):

Yes. I need a new laptop.

CW (01:06:32):

Yours has bubbled up again.

EW (01:06:34):

So my battery expands, and then my mouse stops clicking. I can still move it around the screen, but -

CW (01:06:41):

Because you're pushing onto a battery that's full of toxic gas with your mouse.

EW (01:06:46):

I mean, if you want to look at it that way.

CW (01:06:48):

[Affirmative]. Yeah.

EW (01:06:50):

And so we got a new battery before, and that worked for 18 months. And now we have a new battery again, but he wants me to get a new computer. But if I get a new computer, I have to install every damn thing.

CW (01:07:00):

Oh, right. Because it's Windows. I'm sorry.

EW (01:07:05):

See?

CW (01:07:05):

Yeah. See, with Macs I never have to do that, because I just transfer it from the old one to the new one. I think this one has files on it from 2006. [Hmm]. You can't do that sort of thing with Windows?

EW (01:07:18):

I think there's something, but -

CW (01:07:21):

Yeah, but it's just a pain. Anyway, but your computer's six years old, and it's getting kind of on in years.

EW (01:07:28):

So I looked for new computers, and that led me down the rathole of processor, GPU -

CW (01:07:37):

Yeah.

EW (01:07:37):

- all of the parameters.

CW (01:07:39):

All the new stuff, too, that I haven't been paying any attention to.

EW (01:07:42):

And then I decided I really needed a better GPU. But then I realized the most important thing about my laptop is that it cannot run its fans all the time. Quieter is better.

EW (01:07:55):

And then I found a 17-inch one that probably has fans that run too loud, but it was really cool. But then I realized that it was basically a desktop computer if you wanted to move it around.

CW (01:08:08):

Yeah.

EW (01:08:10):

Which, I mean, I don't move my laptop -

CW (01:08:11):

Which one was that?

EW (01:08:12):

- that often. The Dell XPS 17.

CW (01:08:15):

Oh, the XPS...I don't know how big that one actually is, because it has no bezels. So it might not be terribly bigger than a 15-inch.

EW (01:08:21):

A lot of people complained.

CW (01:08:21):

Oh, did they? Okay.

EW (01:08:24):

That it was enormous and heavy. And so,...I remember the days of having the HP OmniBook, or the Sony VAIO, and they were just so small and cute.

CW (01:08:35):

Yeah.

EW (01:08:35):

But then does my iPad fit that need? I don't know.

CW (01:08:40):

Well, you can't run TI'S Code Composer on an iPad.

EW (01:08:43):

No, but can I really code on a 13-inch screen anymore, unless I actually get reading glasses?

CW (01:08:50):

I don't know. Yeah. The screen stuff's highly personal...

EW (01:08:53):

I used to only program on my computer screen, and now I have the external monitor -

CW (01:08:57):

Yeah.

EW (01:08:57):

- and it's like I can't work without it. It's weird.

CW (01:09:01):

Depends on what you're doing, how much stuff you've got to reference.

EW (01:09:04):

So I need a Windows machine...That's a requirement.

CW (01:09:08):

Yep.

EW (01:09:10):

I need it to have at least 16 gigs of RAM, but I think 32. Because I do actually have problems running virtual machines and compiling at the same time.

EW (01:09:22):

And it cannot be a Lenovo, because I destroy...their keyboards very quickly. They're just not compatible with me. What are my other specs? Quiet. I really, really want quiet.

CW (01:09:40):

You don't care about the screen, but I don't believe you. You said you didn't care if it was low-resolution, but I don't believe you. I think if you saw a 1920 by 1080 screen these days on the normal screen sizes, you'd notice it was not very pleasant.

EW (01:09:56):

Okay. So apparently I need a 4K screen?

CW (01:09:59):

...Something around there. Yeah.

EW (01:10:01):

I don't really care too much about battery life. I mean, it's got to last a couple of hours, but it doesn't have to last for 16 or anything.

CW (01:10:07):

Well, the trouble with ones that have bad battery life is they blow through the batteries quickly.

EW (01:10:12):

I'm looking at you, computer.

CW (01:10:16):

Because they go through more cycles than one that lasts longer.

EW (01:10:22):

But mine's almost always charged, which I guess isn't a great state for it.

CW (01:10:25):

Which is actually why it explodes, but yes. Yeah. So, I mean, if people have laptops they love, -

EW (01:10:32):

Yeah.

CW (01:10:32):

- very quiet being the primary requirement.

EW (01:10:37):

I think I'm going for very quiet -

CW (01:10:38):

Yeah.

EW (01:10:38):

- over GPUs. I really, really wanted an NVIDIA 2080, but I can get that outside of my computer. And that means it's going to be more pleasant to use my computer.

CW (01:10:53):

Yeah.

EW (01:10:54):

It is true that 85% of the time I'm using my computer, I'm just typing something,...and yet I still do need the processing power to run a virtual machine and some compilers. Oh, and Chrome, and Slack, because apparently they take a lot, but no worries about them.

EW (01:11:16):

I should just...uninstall them.

CW (01:11:19):

Yeah.

EW (01:11:21):

Yeah. I'm sure you're really excited to hear my laptop woes. I definitely am very able to go through the whole parametric chart search.

CW (01:11:31):

Yeah, but then you ended up with I want either a 13-inch or a 17-inch...I felt like your chart -

EW (01:11:39):

Well, and it -

CW (01:11:40):

- didn't lead you to a conclusion.

EW (01:11:41):

It's really hard with the whole, "I want it to be quiet." Because that's not something that's listed in the specifications.

CW (01:11:46):

No, it's usually in the reviews, and then the reviews are like, "Okay, well what do they do?"

EW (01:11:50):

And the reviews,...I mean, one will say it's quiet, and one will say it's loud. And everyone will say that Dell's quality sucks. But my Dell has been okay for me. I mean -

CW (01:12:03):

Yeah. Except for the battery, it's been pretty good.

EW (01:12:05):

After the Lenovo keyboard crises of -

CW (01:12:11):

[Laughter]. I don't know what you did to those things.

EW (01:12:13):

I was so happy to get the MacBook Pro, even though I was running Windows on it. That keyboard was just awesome. I liked the aluminum.

CW (01:12:23):

Get an M1 Mac, and run ARM Windows in a VM.

EW (01:12:25):

I know. I can't.

CW (01:12:25):

It probably wouldn't work very well.

EW (01:12:28):

No. No, because I'd run ARM Windows in a VM. And then I would try to run VirtualBox Ubuntu in a VM on top of that.

CW (01:12:38):

No, you'd run Parallels Ubuntu. That's not a really a solution. I've managed to make stuff work doing that, but there's still some -

EW (01:12:47):

Issues.

CW (01:12:47):

- corners that, things just aren't built for ARM turns out, even in the Linux world. It's like, "Oh, can't get that...The vendor didn't bother to compile an ARM thing.

EW (01:12:58):

I mean, I found that for TX2 as well.

CW (01:13:00):

Or the NVIDIA TensorFlow stuff, they only build it for their ARM.

EW (01:13:06):

Yeah.

CW (01:13:07):

Alright. We've kept everybody long enough.

EW (01:13:10):

Well, thank you for chatting with me, and thank you for producing.

CW (01:13:13):

[Affirmative].

EW (01:13:13):

Thank you, all of you listening, for listening, and for being great listeners. If you'd like to contact us, show@embedded.fm, or hit the contact link on embedded.fm. And now some Winnie the Pooh to leave you with.

[Winnie the Pooh excerpt].