Embedded - 138: Quit Yer Whining

Episode Date: February 10, 2016

Chris (@stoneymonster) and Elecia (@logicalelegance) answer listener questions about BASIC and their meet-cute story. (Sadly those are unrelated. That would have been cute.) Dennis Jackson at Airware ...is looking for a senior EE and an EE technician. Contact us and we'll connect you to Dennis so he knows to look out for you. Dennis' episode was 94: Don't Be Clever about drones, simple code, and learning. As for other interviews, Elecia was on The Amp Hour and  The Engineering Commons Podcast. Elecia and Chris were both on The Amp Hour's 256th show. 

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to Embedded FM. I'm Elysia White. Christopher White and I are going to chat with each other today. I don't know how you managed to convince me to do this, since we're in a basement. It's dark and cold, and outside it's sunny and warm. We've already been to the beach today. Quit your whining. Speaking of winners, that was the worst, wasn't it? Good segue. Book winner. It was John Morse
Starting point is 00:00:40 and he sent in his favorite robots. There were two. B.O.B. from The Black Hole, which was voiced by Slim Pickens. Really? I should have known that. I remember that robot. He was the shaky beat-up bot that was picked on by the evil robot in The Black Hole. Yes.
Starting point is 00:01:01 And his other favorite robot is one from SantaCon, from the online radio play Robots of the Company, which ends up being ROTC, R-O-T-C. And he likes that one because he voices it. So, no shock there. Thank you to Chris Beck for sponsoring the contest for iRobot. And do check out their jobs. You can still send him resumes at csvec at iRobot.com. Okay, so now I have listener questions. Okay, did you want to mention the other job thing
Starting point is 00:01:36 since we're on the top of the show? Right, Christopher. Christopher has a job offer that he would like to give to you. So, I would like to relate a job offer that he would like to give to you so i would know i'd like to relate a job offer so friend of ours and friend of the show uh who's been on before dennis jackson uh you might remember him from such episodes as 94 don't be clever yeah um his company airware is hiring and they are looking for a double E and a tech and we can
Starting point is 00:02:07 put you in contact with him if you contact us at showatembedded.fm or use the contact link the quick blurb on the company Airware does UAV guidance systems and they say about themselves, Airware develops an operating
Starting point is 00:02:24 system for commercial drones, allowing enterprises to take full advantage of aerial data for any commercial application. Airware's aerial information platform combines hardware, software, and cloud services to enable companies to quickly customize, efficiently manage, and safely and reliably operate commercial drones at scale. So if that sounds like something fun for you to work on and you happen to be a
Starting point is 00:02:45 EE or a engineering tech. Jobs in San Francisco. Right, that's important. And we will post a link in the show notes, but if you're applying, do drop us a note so we can tell Dennis and he'll make sure to look out for you. And I should note the EE is is a senior double E. So. All right. Know what a resistor is. Is that the line? I would have made it know what an inductor is, is the senior line. I thought that was trains had inductors.
Starting point is 00:03:25 No, it's what happens when you are formally allowed to be part of the Hall of Fame. Okay. It's the person who allows you. They're the inductor. Moving right along. Q sent us a message that said simply, that was a good ep. I'm not sure if he meant Dan's or Simone's, but I am pretty pleased with both of those. It applies to anything we like it to. Well, I'm not sure it's going to apply to this one, but that's okay. So please continue to send us vague feedback. Yes, we can
Starting point is 00:03:53 apply to anything. We got a lot more specific feedback from a friend, Dan. He talked about constructors, oh wait a minute, the person who emailed us his name, Dan, he talked about constructors, oh wait a minute, the person who emailed us is named Dan and it was about the show for a different Dan Dan Sachs' C++ show where Dan Sachs talked
Starting point is 00:04:16 about constructors being awesome, but Dan, who is not Dan Sachs, that's going to get confusing, pointed out that his favorite... Well you can't even say Dan S, because that doesn't work. It doesn't work. He pointed out that his favorite feature is automatic destructors. And he went into why that was,
Starting point is 00:04:39 but if you've ever had that point in your code where you end up with a horrific label and go-to system because you need to clean everything up at the end, that is apparently the bestest thing for automatic destructors because they clean themselves up. So the idea here, for people who may not be familiar with C++, is if you have a local variable to your function that's a class and a class instance that is not allocated with new so it's on the stack when you exit the function the destructor is automatically called for anything that you allocated on the stack so you can have some class that runs its constructor does something
Starting point is 00:05:21 but you're guaranteed that at the end of your function, all those classes that you instantiated on the stack will be cleaned up properly, and their destructor is called. And I've used this in the past to make lockers. It's really convenient. You make a locker class that grabs a mutex, and it grabs it in its constructor, and it releases it in its destructor. So all you have to do is, if you have a function that's critical, is you instantiate one of these on the stack at the top of the function, and then you're done,
Starting point is 00:05:53 because it locks at the top, and then it unlocks when the function exits. And you don't have to worry about, oh, did I forget to unlock in this clause of this else if that I just added? So you're looking at me with great skepticism i'm just you don't like runs when i don't call it i can see how amazing that is but it's you know there's a lot of code that runs when you don't call it in your current projects right uh yes i i do know that but i i sort of i mean that's okay what you're saying
Starting point is 00:06:30 is like well you need to be explicit you don't call the class you know foo no yeah you call it you know locker for blah and that seems so cool because it locks for this function and you don't have to have it be in a function and you don't have to have it be in a function if you just put curly braces around the part you want would it bother you less if it was a language feature that in the signature of the function you said critical and gave it a mutex and it and the language handled it yes because that's how i'm used to it it's not about what's better it's about what i'm to. There's a lot of implicit things that happen in C++. I agree.
Starting point is 00:07:06 That can be kind of maddening. You just have to learn it. But I think there's a lot of implicit things that happen in C, too. It's just that people are used to them. For example, operator precedence. Don't get me started. Actually, Dennis sent feedback for the C++ show as well. He only gets one thing a show.
Starting point is 00:07:27 No, no, go ahead. He apparently uses C and thought of the way that Airware, presumably, because he says we, but who knows, maybe it's him and someone else, prevent dynamic memory in embedded applications in C. And it is pragma import underscore underscore use no heap region. That'll be in the notes, I hope. It seems to only be in ARM. I couldn't find an IAR equivalent. You mean Kyle?
Starting point is 00:08:01 Yes, it seems to only be in Kyle. And a couple other ARM processors, compilers. Well, if anybody knows the equivalent in IAR, that'd be interesting. In IAR, you can set the heap to zero, and that causes some compiler things to happen, but I didn't spend a lot of time trying it out. Okay.
Starting point is 00:08:23 Ed from Calgary requested a guest, a person from an interesting company. And I got excited, a nice mix of technical and personality. And I watched some of their videos and wrote a personalized email describing our common background and some things that I thought listeners would find especially interesting about their stuff. And then my favorite part of the invitations, I suggested shows that we have that they might like based on their interests. And the response I got back, sorry, Ed, was remove me from your mailing list. So that was, yeah, I figure I failed the turning test there. Please stop talking to me. I'm going to go sit over here now. That was a bit bad.
Starting point is 00:09:09 Okay, and then all of the rest of these come from Dwight, who decided that we needed to be interviewed and started out with some nice technical questions and then just wanted to know everything. So I'm going to go through these. Thank you, Dwight. This should be quite amusing. All right. First of all, why is BASIC such an apparently bad choice for a programming language? Or is it ever a good choice? I think you'd need to define BASIC. There's like 70 of them. Yeah. There is no BASIC. BAS Basic is, I mean, there might have been at one time.
Starting point is 00:09:47 Somebody's probably going to email and say, well, you know, basic was developed in 1968. But I've used Apple Soft Basic and Microsoft Basic and Microsoft Visual Basic and QBasic. And I'm sure there was a Borland Basic at one time. Oh, yeah. There's no, I mean. VB.net? Yeah. There seems to just be a this is an easy language and so we call it basic and and they do have some similarities but but where are my go-to 10 i think i mean visual basic is more of a what you think of as a normal programming language, right? Very much. Whereas the basics that I think Dwight is referring to,
Starting point is 00:10:29 having learned in the 80s too, like Apple Soft Basic and stuff that came with all the home computers, is like you said, you edit. You put line numbers at the beginning. You edit in line, you don't really have files. There's line numbers for every line, and line numbers are really important because that's how you get from one place to another you don't necessarily have functions or procedures um and the only way to actually have such things is to say
Starting point is 00:10:54 okay go to this line now um so it's not a very i mean overall it's just not a very, I mean, overall, it's just not a very good programming language. It's good to learn where it used to be. I don't think it still is. Well, it was very good for us to learn because it was all that we had and it reflected what the processor was doing pretty closely and yet was high enough that it was human readable. Not really. So, let's take a step back for a second. I wanted to ask this in relation to this question. What order did you learn languages? I almost certainly did basic first. I remember doing basic in elementary school on something with a tape deck.
Starting point is 00:11:39 That could be anything. TRS-80 maybe? Sure. Probably. Whatever was in the library at school. Yeah, yeah. And then I didn't do a lot of programming until I got to college. And they introduced us to Pascal.
Starting point is 00:12:00 And it was funny. It was one of those weird times in my life where I felt sort of dumb because I was taking two classes right then. It was a summer program before school started. And I was really doing poorly in one of the classes. And then there was this computer class that was, I didn't understand why they were asking me to do things so trivial. Until I looked at somebody else's code and they hadn't used any loops and they were printing things out one letter at a time with infinite copy and paste.
Starting point is 00:12:32 It was odd. It was like Pascal made sense and C made sense and C++ all made sense. So I think it was, basic was probably first, Pascal, C, and C++. I don't remember which one came first there. I had them confused for a while, but... CS60 was C++. Okay, then I did C++ during the year, and then C that summer. And then, you know, in school there were a whole bunch of languages.
Starting point is 00:13:08 It was just a tiny bit of Perl. Right. That's fine. We don't have to go, you know, all the way. But then there was Fortran, which was like a step back. And then Assemblies after school when it got down into firmware. And then SQL and AUC, and all of those came much later. Okay.
Starting point is 00:13:32 So what about you? So first computer was an Apple II Plus, and that was Apple Soft Basic. And from there, I learned a lot about 6502 and did 6502 assembly language. Although it wasn't really assembly language, it was more like assembly language on a piece of paper and then converting into opcodes. Oof. Because that's how the command line debugger worked. You could enter bytes and then execute stuff around
Starting point is 00:14:04 and it would disassemble for you, but it wouldn't do any assembly for you. And then, you know, it was pretty much that. I think I did played around with C a little bit and tried to learn it for years. You know, writing little stuff as a kid, maybe high school. And then I took first real computer class in high school was Pascal. And then probably fiddling around with C and C++ a little bit, but not really learning it very well until college. And then same kind of story as you. Well, we did ML and prologue and all sorts of...
Starting point is 00:14:44 I didn't. That was all part of the CS curriculum. I didn't do a lot of the CS curriculum. Right, right. So, I think, yeah, I think a lot of us of a certain age started with BASIC. But trying to come up with a good answer, why it's a bad choice. It's just not a very, and I don't know visual basic that well. So I feel like I'm slagging something that might be, you know, from a programming language
Starting point is 00:15:13 standpoint, reasonable. Last week, Dan Sachs said that C++ was more expressive and you agreed with him. And I didn't really know what you meant until I started thinking about basic and how while I knew the language very well then, less so now, I still couldn't get from here to there. I couldn't imagine something and then come up with a solution easily. And I think that's what you meant by expressive. Yeah.
Starting point is 00:15:44 And so I guess I'm saying basic isn't expressive. Well, there's one thing he says here. Why did basic fall so far in popularity? Why is it a bad choice? It was never destined to be an advanced language because it's just basic, not advanced. Don't get too caught on the name no what I'm heading towards is there's a there's a distinction between advanced and powerful
Starting point is 00:16:11 and basic to do complicated things would require a tremendous amount of code because it it doesn't have a lot of framework behind it. I don't know. So I guess he goes on and asks about, have you used it professionally?
Starting point is 00:16:35 No. I have done Visual Basic in Excel. Okay, so what does Visual Basic look like? Does it look like Pascal? Is it just Pascal by another name? I didn't know it wasn't C Sharp for the longest time. Well, that goes back to what is basic, right? Yeah, I mean, it didn't look anything like the basic that I remembered.
Starting point is 00:16:59 It certainly wasn't all capitalized, and there were no line numbers, and there were no go-tos. It looked very C-like with minor syntactic differences. And what we did there was exceedingly powerful and really amazing. It makes me look at Excel sheets and think, oh, well, yes, I can do a lot of the data analysis that I want to do for small data sets. Now, when you get to bigger data sets, NumPy is the way to go. But that was a Microsoft language, and they called it Visual Basic,
Starting point is 00:17:33 but that was just what they decided to call it. They could have called it B++, and nobody would have said, oh, it's basic, right? I don't think so. Yeah. Was it object-oriented? Not particularly. I mean, it was a little bit because that was our style. But there were subroutines and there was, it was not the basic I remembered.
Starting point is 00:17:59 I guess the main point that I'm going to come back to is there is no basic. There are several basics and programming languages take off when they become a standard that a lot of people attach themselves to. And learning basic is a great way to go. I mean, whether it's learning parallax basic or whether it's playing with data in Excel's macros written in visual basic. It's a fine place to start and it might be a fine place to end up. I don't know. Yeah, I'm thinking about parallax now. You just mentioned that and the basic stamp. See, I don't even think of that as basic. I just thought of it as a shorthand for the machine code because it was so simple. You know, you didn't really, you had the,
Starting point is 00:18:51 I'm going to say it, the basic constructs that you need for programming language, you know, conditionals and loops and such and assignments and some basic, I'm going to say basic every sentence now, and some rudimentary math stuff. And yeah, okay, that's great for some stuff. But where do you go from there? I don't know how hard basic is to write a compiler for.
Starting point is 00:19:17 I mean, I think back to Forth and how trivially easy it was to port that to every darn thing. Well, most of them weren't compiled. Forth? Basics. Oh, basic. They were all interpreted. Yes, that's right.
Starting point is 00:19:31 Apple soft, it took every keyword and turned it in. It was very simple. I mean, and that's why things had to be in a certain position. Forth is usually interpreted too. Yeah, it takes every command and turns it into a token. And then, you know, you have a bytecode that the thing runs through. I don't know if that's how the basic stamp works, but I bet it is. So yeah, I don't know of any.
Starting point is 00:19:53 Maybe Visual Basic had a compiler. I don't know now. So Dwight goes on to say that he finds the PicBasic Pro to be capable for his needs. And he struggles to program in C or C like Arduino. And he tends to go back to a basic. That's going to be a revert to norm. I mean, it's kind of like if you look at my basic, it probably looks like C. I know many of my other
Starting point is 00:20:23 programming languages tend to be C-like. And when I look at Python constructs on Stack Overflow, the ones I always go for are the ones that have comments that say, this isn't the way you do it in Python. You should be more idiomatic. And I'm just like, this is nice. I like the way it looks. Well, it depends on whether you're trying to get something done expediently and not care about...
Starting point is 00:20:49 It's the classic problem, right? Especially when you're stealing code. Stealing, borrowing. Mooching. Copying. Does learning basic lead to difficulty learning other languages? I wouldn't say that it does. I think the principles of programming,
Starting point is 00:21:06 the basic principles of programming are the same in most programming languages unless you're changing to a whole different class of programming, like object-oriented is a little different than you'd be used to going from basic to C, to C++. Functional programming is different.
Starting point is 00:21:25 But for normal programming, the things you learn in BASIC should still apply. So I don't see that there's really a detriment there. I think you don't need to start with BASIC and you get closer to where modern languages are by picking a Python or a C. Oravascript it depends on what you want to do right i mean if you want to write web pages basic is probably i don't want to slide basic too much because javascript javascript exists and that's a terrible language and you know it's running a huge
Starting point is 00:22:00 portion of of the technology we interact with. So, yeah, I think BASIC has fallen out of favor. I don't think that it means it's necessarily a bad place. I don't think it means it was a bad place to start. I would argue that it's probably not a great place to start now. In part because of what you've said before, what is BASIC? I mean, if you put BASIC on your resume, I certainly wouldn't know which part of that language to test you on.
Starting point is 00:22:33 If you buy a computer today, it doesn't come with BASIC. Yeah. It used to. It used to be the thing. That was almost how you interacted with the computer for a number of years. You boot it up and there's a command line and you can write a little silly program or copy it in from a magazine line by line. Those were the days. The Apple magazines used to have assembly language programs, but they'd be in basic.
Starting point is 00:22:55 So it would just be a series of pokes of addresses and values. And you just type that in or they'd have, they'd get smarter and there'd be like a table of numbers and then a for loop to poke those in. And you just have to type this table of hexadecimal numbers in there'd be like a thousand long and then you get like a really fast arcade game you have a good kids sorry uh you you mentioned this just a second ago uh dwight asks that we explain the difference between object orientedoriented and procedural. And there was another one, but I lost the lightning cards. Hopefully we'll find them by next week.
Starting point is 00:23:31 What was the other one? I want to say it's functional, but procedural and functional should be the same, right? No. All right. No. I've totally forgotten that. Okay, so object-oriented. I can do this one.
Starting point is 00:23:45 Okay, so object-oriented. I can do this one. Okay, good. Object-oriented is when you treat every part of the code as though it is a nearly physical object with attributes and abilities. And you can take like an accelerometer. It's hanging off your processor. Maybe you're speaking to it over SPI. And of down, they can be inputs, they can be outputs. Those are states of the GPIO object and functions of the GPIO object. And then there's the SPI that can be an object that contains GPIOs. And it can have its own set of properties. It can be at such and such speed. It can be at such and such speed, it can be master, it can be whether it's clock first or data first, all of the different methods for SPI.
Starting point is 00:24:54 And then you have your accelerometer, which has all of these registers and it speaks over the SPI, but it doesn't necessarily interact with the GPIOs in any particular way. It's a hierarchy, but it's a very contained hierarchy. If somebody else wanted to use your accelerometer using this method, they could just take that whole hierarchy and it would work. On the other hand, if you have a gyroscope over here, I'm using my hands, you should see them. If you have a gyroscope over here and it wants to use the SPI object, it can as long as you've built in a way for them to share. Object-oriented is a good way to make it so that things can't share. It's a good way to hide data so that nobody else has access to it and you don't hopefully get spaghetti code because it's all very, here's a physical thing, here's what interacts with it,
Starting point is 00:25:53 and it's got an inside that is all your code and it's got an outside that other people can see, and there's a sharp delineation between the two. And when I think about object-oriented programming, it's how do all of my pieces stay very separate from each other and yet work together? And that separation is what's key. Okay, so now the difference between functional and procedural. Functional and procedural? Functional is different from everything.
Starting point is 00:26:25 Okay, what's functional? Functional is different from everything. Okay, what's functional? Functional is really weird. Is this the lambda thing? Yes, this is like Lisp and Scheme and Erlang and Haskell. And it's the idea that computation should be mathematical. And so you don't change state, you don't mutate things as you go. So you try, well, the language is structured around the idea that the output of a function
Starting point is 00:26:54 should only depend on its inputs. Sort of like a transfer function, linear time invariant systems. I don't, what? Oh, come on. It was cool. I had a place I was going there. I don't know how you do a general program. It was cool. I had a place I was going to. So, I don't know how you do a general program in a functional language. I've never used a functional language, so don't yell at me.
Starting point is 00:27:12 But. How would you make a stoplight in a functional language? So, you don't have side effects in purely functional functions. So, you can't do memory or IO. So, everything has to be either carried on stack, I guess, or I don't know how a general program works. I think that probably there's non pure functional functions in some functional programming languages that accomplish these things. But generally, the idea is, yeah, there's not a lot of changing state, and it's more of a computer science theoretic approach to programming.
Starting point is 00:27:48 And if somebody knows better or would like to tell us about it, that would be great. I bet there's a lot of recursion there. Recursion, yes. I bet that's where you do binary searches through recursion, because it would be a single line. Right, because you keep passing the same function, which only depends on the inputs and outputs, and there's no side effects. So you can loop it, you can call it recursively. And I bet you could do parsing like that, because once you have parsed something and sent back,
Starting point is 00:28:15 it doesn't matter. So I think there's a lot of applications for it. I don't think you'd write an operating system in it. I would agree with that. Not having any idea how to implement a mutex without side effects. Yeah. Let alone task switching. So, I mean, there's a lot of safety things that come out of that
Starting point is 00:28:37 that are pretty great. Yeah, because you can truly unit test it. Yeah, and you're not going off in the weeds and changing something in the middle of a function that you can't see from the outside of the function. If you see the function return value and you see its parameters, well, that's what happens. Those things get changed.
Starting point is 00:28:56 But yeah, so that's not, I don't want to belabor that too much because I don't really know that much about it, and it's not really relevant to embedded programming. All right. that much about it and it's not really relevant to embedded programming all right do we did we want to say for for for completion say completeness sake what procedural programming is yes uh that's where you have functions and routines and they do stuff and you call them how's that uh i suppose that kind of checks off all of the boxes that weren't yet checked. But I think there is more style to it than that.
Starting point is 00:29:30 Really? I thought so. Don't you have the Wikipedia page up? So it's a list of instructions in each function or procedure, and they can return, and it's just procedural programming. This is the worst. It's like we didn't prepare for this. It's like we went to the beach instead.
Starting point is 00:29:54 Ah, procedural programming derived from structured programming. You guys don't want to listen to me do this. This is me reading the Wikipedia page. Ah, maybe someday. But they do list C and Fortran and Pascal and BASIC. It's your classic programming. You have a list of instructions and
Starting point is 00:30:13 you can organize those into functions and procedures that return things or don't return things. I mean, it's very simple. Well, there was always that CS concept that procedures didn't return things and functions did. Yeah, it was Pascal that CS concept that procedures didn't return things and functions did. Yeah, it was Pascal. Pascal had that. Okay. So I wonder why it's called procedure and the other one's called functional.
Starting point is 00:30:37 Just to annoy you. Yeah, okay. What other criteria would one use to select an appropriate language for a given task? that's a good question skills of the team I would start with what supported well on your hardware that you're targeting but also what do you already know well that helps too
Starting point is 00:31:03 not that you shouldn't learn stuff just that if all of the team... But I wouldn't pick an STM32 and then program it in... Erlang. Right. I'm laughing because somebody has been messaging about... Well, you can. I mean, it's useful to explore that but if you're i mean i wouldn't do that if we're a commercial product right now no um yeah and even though i know
Starting point is 00:31:35 assembly i wouldn't program i would program in the highest language i could get away with because that is the least amount of programming and the less programming i do the fewer bugs there'll be that came out sounding really bad i hope nobody quotes that the less programming i do the fewer bugs true it is true it is you can't write bugs if you don't write code yes Yes. Yeah, I would choose, you know, criteria. So it depends on the hardware you're running on. It depends on the resources available to you on that hardware. It depends on how fast you need the thing to execute. It depends on how much power you are willing to burn
Starting point is 00:32:19 in a high-level language that might be interpreted. There's a ton of factors. Time to market and team. It's easy to say I'm going to choose Python because it's easy to program and I know it and I can get this particular piece of code done in an afternoon. But you stick that Python on a chip that can't deal with
Starting point is 00:32:45 an interpreted language and all the resources, and maybe it lasts a 20th amount of time that it would have had you program that in C. So there's all kinds of considerations there. And you don't want to choose something that's completely off the wall if you're not just doing experiments. Maintenance is a factor. You don't, you know, picking, let's go pick Rust.
Starting point is 00:33:09 If you'd come into a company and said, I'm going to use Rust on a Cortex-M, well, you'd have to have a really good story for why that's a good idea. Because, you know, it's not a Finnish language. Nobody knows it. The same thing that I came up against with in a couple of other places where people were pushing really hard to use.NET for what were ostensibly embedded projects but they were high powered, powerful systems
Starting point is 00:33:33 but I kind of pushed back against it because there aren't that many.NET programmers making device software so the pool of people is very small so that's another consideration. Like you said, what's your team like or who can you hire? If you've chosen something strange, you're going to narrow the pool of applicants or the pool of good people who can program for you too much.
Starting point is 00:34:03 That's why a lot of stuff's done in C. There's a huge number of people who know it. What about scripting languages? What defines as scripting languages and what other categories of languages exist? I think a scripting language these days is anything that's interpreted. And so that's anything that's not compiled.
Starting point is 00:34:26 Yeah, that would be my definition. So Perl, Python, JavaScript, not sort of, even though it's got JavaScript in the name now to make the web fast, they've had to make compilers that run in your browser and do all kinds of stuff. But it's still a scripting language. And you can't compile scripting languages. Yes, you can do Python and compile it, and it becomes a lot faster.
Starting point is 00:34:54 When I think of scripting language, I think in my head, languages that are used to write snippets of code, not applications, or not the brains behind a whole device, right? Like, I need to go through this list of files and I need to search for this keyword and I need to change it to this. I think that's because we got our scripting checkboxes in Perl. And for us, that is...
Starting point is 00:35:26 Well, Python still does. I mean, I use that all the time for pre-build scripts and post-build scripts. But you could easily do an application in it. You can. You can. You could do an application in Perl. Yeah, I know you can. It's just predominantly, I think,
Starting point is 00:35:44 they're used for single purpose manipulation, text manipulation, file manipulation, computational things that aren't necessarily a big program. That's what I think of when I hear the word script. And when I think of Visual Basic in Excel, even though we had built a pretty huge backend at one point, it still started out as, oh, just a little bit of data manipulation, just a little bit of graphing. And then it grew out of that,
Starting point is 00:36:16 which is sort of how most of the Perl things happen, too, is it grows out. All right. That line blurs a lot more than it used to with all of the just-in-time compilers and the faster interpreters. Node.js, which is a whole framework. So you can build client applications in JavaScript. Like all things in computers, there's blurry lines. There's blurry lines between procedural and object-oriented.
Starting point is 00:36:49 There's blurry lines between functional and procedural. Most of the languages out there now have support for functional concepts. They have support for object-oriented concepts. You can choose to program them in any way you kind of feel like because they have kind of subsumed all the features that come out of academia and those other languages that aren't necessarily so popular for industry and that's good for research yeah because i mean if a language has all the stuff well that means you can do anything in it, which sounds great,
Starting point is 00:37:27 but sometimes those limitations are what makes it more powerful because you're sort of herded into the right choices. We should all use BASIC then. Ah, sure. You first. What are the similarities and differences
Starting point is 00:37:43 between various languages? No. I don't think we can answer that. I'm not even sure I could write a book that would answer that. I'm going to say that the similarities and differences between various languages can be summed up with parentheses and semicolons. And tabs. And tabs. Yes, indeed. And tabs. And tabs.
Starting point is 00:38:06 Yes, indeed. I forgot about the tabs. Maybe we should switch that to white spaces. Sure. Okay. How would you evaluate various microcontrollers for an embedded task? That's one for you.
Starting point is 00:38:21 You do that. Oh. Well, step one. What is everybody else using as their microcontroller and use the opposite no no i mean if if all of your competitors are using an 8-bit processor that costs 12 cents then if you try to use a $2 processor that's 32 bits and super powerful and awesome and at two bucks, still a bargain, your bomb cost goes up a lot. So a huge part of how to evaluate microcontrollers is to eliminate all of the ones that aren't within 20% of your price goal. Now you may have to open that up and make it within 50% of your price goal. Now you may have to open that up and make it within 50%
Starting point is 00:39:05 of your price goal because sometimes you get a null set and eventually you just have to fork out what you need. So once you have a general list of, I don't know, 15 families, then it comes down to, well, what else do you need? What peripherals do you need? Do you need SPI? Or are you going to end up writing this as a GPIO version of SPI, which is going to be slow and painful? And why are you writing that code when it's just a couple of registers on this other processor? And speed and access to RAM and flash.
Starting point is 00:39:41 And so if you have a current product, you take the amount of code space you have now and make sure to multiply that by at least 1.25. The chances that your code goes down is small. Chances that your RAM usage goes down, unless you're making an effort to do a cost reduction, that's just not likely to happen. Things tend to get a little bigger and bloated until somebody comes along and says, I'm spending a lot of time fixing this. So now you have some features and you have your cost. Power would be the other thing that would just eliminate most of your options.
Starting point is 00:40:20 Do you have a power sensitive application, a wearable or a battery operated device? That will eliminate some of the higher power processors. And this is the time that you also have to look at other constraints like size. Some processors don't come in itty bitty. They have big ball grid arrays instead of tiny ball grid arrays, or they don't even come in ball grid arrays. And then there's also the manufacturing. Which of these processors can be manufactured according to how you can manufacture? If you are manufacturing these at home, you probably don't want a ball grid array unless you know how to deal with them. You really, really want some sort of pins and maybe not even the fine pitch pins, depending
Starting point is 00:41:12 on your skills and your oven, probably, because you probably do that reflow. What else? Speed. Speed. I kind of chucked that into features but yeah speed would definitely be part of it
Starting point is 00:41:27 I don't think it's a feature I think it's because there's a whole range in a given part family and that's gonna go back and forth with power too
Starting point is 00:41:37 but depending on your application if you pick a Cortex M0 that might be fine if you pick a Cortex M4 or M, that might be fine. If you pick a Cortex-M4 or M7, that might be total overkill. Or you might find that you can't do the thing you want to do
Starting point is 00:41:52 with the given speed of the processor. Maybe you want to do some fancy display stuff or some audio thing. So that's a consideration. I mean, that comes straight from your application. Most things are probably fine with what's out there. I mean, does your application need floating point? Or is it only going to use it like twice? Right.
Starting point is 00:42:12 Does it need to have an external flash controller? Does it need to have it be a parallel bus to that controller? All sorts of what does your system look like is going to drive what does your processor look like. And then when you get down and you have like five processors and say they aren't all in the same family. Let's say they're not all from ST. They're not all in the Cortex-M0 line.
Starting point is 00:42:41 You've got a scatter of different ones. Now you're looking at cost within cents. And how well can you work with this company? Some companies do a lot better if you want them to pre-program your things. Others do better with making sure that you have a small number to start with and you don't have to buy a bazillion of them in your first buy. You can actually do good ramps. Some are available, some aren't available. Yeah.
Starting point is 00:43:14 Now you're getting into the nitty-gritty. What do you have to buy for a compiler? That's another consideration. Yeah, because if you are making a thousand of something and you want 15-cent chips, but your compiler costs $10,000, math does not compute there. So, and then we go back to some of the same things as language, you know? Is it a chip that everybody else uses? Because that helps you know that it's not going to go away right away.
Starting point is 00:43:45 And what are people familiar with? If you're not familiar with ARM, and everybody's familiar with PIX on your team, then that's a strong argument in favor of PIX, if you can find one that matches your application, and vice versa. You know, that argument I don't do as often. TIDSPs, PIX, Atm's, Atmega, ATLines, those are all their own families. But it seems like everybody's going for Cortex now. ARM is just dominating the market right now.
Starting point is 00:44:19 And I can't say I'm all that sorry. I sort of miss my T-I- miss my TITSPs, but yeah. Which brings up another question, and another listener wanted to know more about our feelings on cortex. What are your feelings on the arm cortex types of processors? I think they're fine. I don't know. I don't have feelings about processors. I like them. I mean, I really like them. No, they're very good. I think they, like you said, they're dominating the market
Starting point is 00:44:57 and they're probably doing it for a good reason. They're very power efficient. Very power efficient. They're cheap for what they are. They're gaining a lot of features that they sort of pick from the more modern processor. Well, they're modern, but they're, what's the word I want to use without being derogatory? They're little embedded processors. They're not full featured. So, you know, they're missing things like big caches and certain kinds of buses and flexibility with, you know, how instructions are scheduled and that kind of thing.
Starting point is 00:45:31 But they're slowly kind of picking features like that from the, say, the ARM, the A-line. And they move down market when they can afford to put those features in without blowing up the power budget. So it's interesting to watch that. And there's such an explosion of them. I mean, you can get an ARM
Starting point is 00:45:58 Cortex M0 with this amount of RAM and that amount of flash and these buses. Yeah. And I think that's where companies like Intel are a little bit in trouble because they can come out with an embedded chip, but they're not going to be able to come out with the breadth of parts that ARM is able to do because ARM is a licensee or a licensor.
Starting point is 00:46:23 So you get variations from other companies implementing the ARM spec, whereas Intel's like, okay, I've got, we've got these atoms and they go from this to this, or I don't know what their other ones are. There's the Edison thing, but I think that's actually a platform. And so you don't get a range from the M0
Starting point is 00:46:40 at a couple megahertz to the M7 at 200 megahertz. Well, then you don't get the competition. I mean, you have Atmel and TI and ST and Philips and Maxim all making Cortex-M processors with different features, and they're trying to differentiate, and they're trying to kill each other, which is sort of cool for us and it's really cool for arm because arm gets to have all of these well do you do customers really want a large ram space and a small code space on this particular cortex m zero plus
Starting point is 00:47:20 core it's just they've got so much competition that they're winning, that ARM is winning everything from, and yet they get to have all of these other little battles happen. And Intel can't do that because they can't eat their own lunch. Right.
Starting point is 00:47:38 So, yeah, I like the Cortex because I think they're just a nice way to differentiate. Well, and because they're winning, software support for them is really good. Yes. You can find things from ARM standard libraries that have a lot of nice things if you go poke around in it. The CMSIS that allows you to go from different ARM processors? Well, but it has... Different vendors.
Starting point is 00:48:06 Yes. Different vendors, and it has powerful things like... It's got some math. DSP and other features. You've got support from the open source community. So I think a lot of stuff's going to be built on that, and I don't see anything changing. And one of Dwight's other questions was
Starting point is 00:48:27 how do you differentiate an ARM Cortex-M from a PIC or an ATMEGA? It's been a long time since I used a PIC. The last time I used it the C code was inefficient at best. It was better programmed in assembly, which is what I finally did. In part because the C code had to have all sorts of weird inline vector assembly things. It wasn't a bad processor. I found the Atmel competing version of the Atmega family to be easier assembly just because it matched my mental model.
Starting point is 00:49:08 Sort of like, double E's choose PIX and software engineers choose Atmils. Yeah, I would differentiate them by their lineage. I think the PIX and the Atmegas both came from kind of an 8-bit. Oh, yeah. Most of them still are. Very simple 80s-style architecture, and they've been built upon to become more powerful.
Starting point is 00:49:34 But I think the ARM, the Cortex-M's, have descended from their modern counterparts downward more so. So architecturally, I think, descended from their modern counterparts downward more so. So architecturally, I think there's more in common with a Cortex-M and an Intel Core processor than there is between an AppMega or a PIC and another modern processor. All right. I can see that. Yeah. Okay. And i've used both they they always felt like like you'd expect an embedded processor to feel whereas the cortex m series feels like oh it's a cpu it's a lot roomier yeah it's and it's generally bigger on the inside than it looks is a cortex superior? I don't know it depends on what you're doing
Starting point is 00:50:28 I think we've sort of covered that yeah I wouldn't say there's anything intrinsically superior I think you could look at the architecture and say oh this is a more modern more sophisticated architecture but that doesn't mean it's necessarily the best chip for your application. I will say that the last time I looked at the Arduino Uno chip, the ATmega368? 328?
Starting point is 00:51:00 So sad that I can't remember that. It was very expensive for what it was. That Mega 328. It's size and RAM and power and flash if you looked at all of those versus a Cortex M0 it was just really expensive price wise it was not as good for the metrics I was using but that's not for the metrics I was using, that is the key part of that sentence probably
Starting point is 00:51:44 I think when people look at projects not, you know, for the metrics I was using. That is the key part of that sentence, probably. I think when people look at projects and they see what chips are most applicable for the given criteria, I think the tendency is to probably go more forearm than those other chips. And as time
Starting point is 00:52:02 goes on, I think that will increase. It will increase for me. It would be hard for me to recommend a non-Cortex processor to most of my clients. Occasionally, the TI DSPs in there are really cool signal processing. But even then, I would look for a Cortex with a DSP attached because they exist. And it's kind of clear that the industry is going this way too
Starting point is 00:52:26 because Atmel and Microchip are getting together and Atmel's tied their fortune to ARM recently. Yeah. And Microchip just bought them. So clearly Microchip is interested in ARM, having ARM products. So I wouldn't be surprised if the microchip, portion of microchip shrinks as a result of this acquisition.
Starting point is 00:52:54 It wouldn't surprise me at all. No, I'm a little surprised that that acquisition happened because it's been trying to happen for a number of years. And Atmel has resisted in the past. I mean, they've sort of made fun of Microchip for trying to buy them. I remember that at one Embedded Systems Conference where the Atmel people were saying, yeah, they didn't succeed to buy us,
Starting point is 00:53:18 and look at all the things they said about us, like how our chips are better. All that stuff is beyond me. I mean, that's all business stuff. But yeah, industry's going to harm. Dwight's questions continue, but they're not as technical. Okay. Please consider doing an episode where someone comes on your shows and interviews us so that
Starting point is 00:53:42 listeners can get to know us and our backstory. Our origin story. Yes. It starts out with a radioactive... You're waving, but I got nothing. I was hoping you'd take that baton and go somewhere really cool with it. If you would like an interview with me,
Starting point is 00:54:01 the first time I was on the Amp Hour, they did a great job first time i was on the amp hour they did a great job and i was on the engineering commons where we sort of talked about my backstory uh chris doesn't i don't have a backstory he does he just doesn't like to share uh so you can you can get some of those but here are more questions what did you do in your childhood, Christopher? What did I do in my childhood? How did that influence you and who you are today as a software engineer? Well, you can see in the late 70s.
Starting point is 00:54:34 This is totally Dr. Durf. This is kind of a broad question. I guess I've already talked about my experiences with computers as a kid. I mean, I got an Apple II Plus in 1979 and started programming it once I, you know, could learn to type enough. And continued doing that for a long time. Yeah, I mean, computers were always a part of my life.
Starting point is 00:55:09 So, and my parents were very encouraging of science and technology. I mean, my dad was a ham radio, an amateur radio guy, and he, you know, would go to Heathkit and get kits and stuff. And he had this whole electronics, learning electronics kit. And I played with that.
Starting point is 00:55:27 I probably knew more about electronics when I was nine than I do now. In terms of actually building circuits and understanding what they do. Yeah, and I spent a hell of a lot of time alone in the basement typing. It seems like the same as now, except I get paid for it. You chose the basement. It has a window. A lot of windows. I don't know.
Starting point is 00:55:57 What do you think I should elaborate on? Well, we'll get to school and have we always been computer nerds next, but. How did that influence where I am today as software engineers? I've always been writing software.
Starting point is 00:56:11 So I guess that implies that that influenced me. I was not like that. I was not the sort of person who took things together or put things, took things together.
Starting point is 00:56:24 Or put things apart things together or put things apart yes i like it um i was a bookie sort i mean i i bookish bookish sort i mean i i got into trouble in sixth grade because i brought the Spellsinger trilogy and a hardback to class and they didn't know why someone of that age would have a book that thick. And since I was most of the way through it and hoping to finish it at recess, anyway, yeah, big nerd. I was a big nerd, but I was not really a computer nerd. And I lived entirely in my head. It's amazing what you can do if you can just get through a whole life in an afternoon. I mean, it was pretty cool.
Starting point is 00:57:17 Yeah, okay. How does that influence your software programming? I think from there and to this day, I love stories. I mean, I love jokes too, but I really love stories and I see my programs as stories and I want them to be well-written. I want them to be interesting to read. And so it has influenced me because it has made me a writer whether I meant to be or not and so my code does things it's sort of magical incantations because it is can be writing and it can be good and it can actually have function outside my imagination. So yeah, I think that that did have a huge influence on me. It also had a huge influence
Starting point is 00:58:15 on the fact that I don't necessarily believe in all the norms people talk about you know the whole women in tech thing doesn't bug me as much because i read all of those books about the girl who goes off and is a knight and she never complained about the fact that they didn't treat her as a woman i'm just like christopher's looking at me like i'm totally crazy I don't really want to talk about this but I definitely it shaped part of my personality that you you go off, you do stuff, it's fun you get what fun you can have
Starting point is 00:58:54 and actually I came across that really great quote this week from Tim Federale I should look it up properly but it was about how when your life, the thing that books teach us is that when your life sucks, you just haven't gotten to the good part yet. And I liked that because that really did help for me was, yeah, there's always a sucky part of the book. That's how you get to the end.
Starting point is 00:59:27 Happily ever after doesn't happen unless you battle the dragon first. All right. Where did you go to school and have you always been computer nerds? We know you are. Yes, I suppose you do. Huh. That's weird. Podcast about computers.
Starting point is 00:59:44 Talk about computers all the time. Work on computers. Computer nerds. Where did we go to school? We went to school at Harvey Mudd College. Yes, we did. We both went to school at Harvey Mudd College. Harvey Mudd, some of you who are unfamiliar with us saying this, but who are familiar with the college or sitting there going, yeah, okay, that explains something, which is an odd effect
Starting point is 01:00:10 to have somebody tell you to your face. Like, oh, that explains so much about you. It's an odd little college in Claremont, California that specializes in hard science and engineering. And math. And math. And math. And computer science.
Starting point is 01:00:27 And even biology now. Pretty sure biology is considered a hard science. It wasn't initially. Maybe. There are only a few majors. I think we're up to six now. Mm-hmm. And it's a sort of irreverent school
Starting point is 01:00:46 they don't take the I mean a lot of their people compete with the Caltech and MIT crowd but it's the people who don't do authority very well who end up in Mudd and we met I thought the next question where did you meet each other? Yes, Chris and I were assistant admins for the CS department.
Starting point is 01:01:13 Sophomores, right? Yeah, sophomores. I mean, we had a class together freshman year, but I don't recall that much to my sugar. Well, we must have had like six classes together freshman year, but most of them were like 100 people. Yeah. And you went to class. Yeah, and I went to class. So, big difference there, you know, in terms of meeting difficult when you don't go to class or study.
Starting point is 01:01:39 Yeah. So, we were sysadmins and Chris was sick and went home and somebody asked me to cover his job which I had no idea how to do what was my job? backups and news
Starting point is 01:01:52 oh who cares nobody gets mad when news goes down oh my god they would get so mad when news went down and they were always crying
Starting point is 01:02:02 if they needed to talk to people in backups I was in charge of Usenet, if anybody remembers what that was. And they always wanted that hacker, the 4400 news group. 2600? 2600. Wow, my memory is shot. And I refused to what?
Starting point is 01:02:22 And you refused to do it. To add it? To add it, because it was a non-standard format. Oh, I don't remember. I was probably a jerk back then. And you were like, well, look, it's a non-standard format. And they would be, but we want it. And you were like, if you really want it and you want to get into that level of hacking, run your own news server.
Starting point is 01:02:42 I said that? I don't remember any of this. I remember it was hilarious I just remember you totally losing it oh jeez but yeah when Chris came back from being sick I knew who he was amongst all of the other people
Starting point is 01:02:56 well so so it's really good that I had 17 espressos in one day and screwed my heart up for three weeks I guess it's good we would have met after that had 17 espressos in one day and screwed my heart up for three weeks. I guess it's good. We would have met after that anyway.
Starting point is 01:03:17 So yeah, that was, I don't think we have a meet cute. A what? That's a new thing. Isn't that the zombie? No, a meet cute is the little story you tell about how you met. We were ordered to go get a giant cookie for our boss at the mall. And we went together to get a giant cookie. So there you go.
Starting point is 01:03:39 And we did. We got a giant cookie. I remember the giant cookie. This is the best episode. Yeah got a giant cookie. I remember the giant cookie. This is the best episode. Yeah, yeah, yeah. What kind of hobbies did you have when you were younger? Hobbies, besides computers, reading, model rocketry.
Starting point is 01:03:59 Youth kids. Playing around with electronics and breaking stuff. Surfing, sort of. I'm sure I did something useful. Usual boy sports stuff, baseball, skiing. Yeah. For every one of those entries, it's books. For me, it's like books, books, books, books, books, books, books.
Starting point is 01:04:32 There was a little bit of programming in the library because you couldn't read the whole time. And then there was speech therapy for a lot of that. Don't even get me started until there were speech competitions. And I said, look, I'm not going to therapy if I'm winning competitions, okay? But that was later. Video games, RC cars.
Starting point is 01:04:56 Books, books. All the books. Some TV. I wouldn't say music was a hobby. It was sort of a chore. It was a chore back then. Yeah. Books.
Starting point is 01:05:12 Star Trek The Next Generation. Books. That was not a hobby. I don't even know if I watched that religiously as a kid. It was the first show I watched. Although usually it was while I did homework, but it was the first show that I'm like, I don't
Starting point is 01:05:29 care if my parents are watching it. I don't care how much I have to fight to get a TV in my room. That's the show. Well, do you have anything else you'd like to talk about? I did, but I think we should save it for another show
Starting point is 01:05:45 is this the blog post you mentioned to me earlier about CPU features we should save it for the next show because I think that will happen well there was also one question we got from Frank about freelancers and ethics. Did you see that one? Yes. where his team of 10, all younger than him, are frustrated with an ethically dodgy decision of superiors.
Starting point is 01:06:29 And some of them want to quit, which would be a sad waste of talent from his perspective. And he thinks that their chances of finding another job are not quick due to where they're located. He doesn't want to drop their ethical standards. He doesn't want them to drop their ethical standards, but he also doesn't want great talent disappearing. What's the question?
Starting point is 01:06:58 What do you do? Um, I think you quit. I don't, I don't, I mean, I... It's a very difficult question, but if you truly have ethical standards, then either you attempt to change the company, and failing that,
Starting point is 01:07:24 I don't think you have another choice unless you want to. And I think it's very, it's very toxic to work in that environment too, because everything you're asked to do is going to make you angry. And I've sort of been there, not with things that really were beyond my ethics, but certainly were pushing at the boundaries. And I, you know, I was more in a position to make changes within the company and refuse things without, you know, I was more in a position to make changes within the company and refuse things without, you know, being fired, but it was still enough to be an environment that was sort of unpleasant for a long time. And I, you know, it's certainly a personal decision, but I don't think, I don't think the, and it's not an easy decision, but I don't think you should persist at some place that is causing you to question yourself as your normal day job.
Starting point is 01:08:17 Do you have any strategies for not getting to that point. I mean, saying quit, it does assume a new job. It assumes there's no family to depend on you. Right. It assumes a lot of things. Sure. So how do you not get to that point? Well, first you have to be very careful evaluating where you work before you get to that point so you don't end up in that situation but even if you do that you know interviews aren't always that elucidating and things change at companies management changes direction changes so you can be at a place that's ethically sound and then suddenly it's someplace
Starting point is 01:08:56 that isn't i i know i it's a difficult question but i don't there's no good answer there's no answer that says oh you just do this and suddenly everything's okay. It's a bad situation, and bad situations rarely have quick and easy solutions. It depends on where you are in the company, too. If you're just one of the rank-and-file engineers, oftentimes there isn't much you can do. Now, I mean, one option short of totally quitting
Starting point is 01:09:25 is to band together and say, we five engineers, we 10 engineers are uncomfortable and we're not going to proceed down this direction, which may get you fired. Yeah. But there's also a slight chance that things might change. I mean, that's an option. You know, I've also been in the position
Starting point is 01:09:46 where a bunch of us said, why don't we all quit together and then contract back? Which doesn't solve the ethical question. That's for other questions, but you can ban talent together that way and in other ways. What would you say? I don't i i would say a couple of things um get a reputation for being a goody two-shoes so that people don't ask you to do things that are dodgy sure somebody else at the company may then have to do it um that doesn't really absolve you of anything if you're at the same company that's doing unethical things and you just don't have to do it and somebody else does, that's like saying you're not the hangman because you made
Starting point is 01:10:29 a mechanical axe that you push a button with. Yes, unless you can get everybody else to do that too. And then it just has to flow away. That is not a good solution. I will accept that it is not a good solution, except that it can help you with your own set of ethics, not to cross them.
Starting point is 01:10:51 To really get clear the thing you think is unethical, to get it to be, okay, so not that this has anything to do with what Frank is doing. We didn't talk about what he does. Right. Let's say you're making a baby monitor. And you ask me to make it so that there's a backdoor so that we can always log in to do firmware updates. Which maybe somebody is okay with that. And I'm sitting here going, no.
Starting point is 01:11:24 No, I will not make it so you can log into anybody's baby monitor. That is not going to happen. Absolutely not. That's invasion of privacy. It's unethical. Okay. So I would not do that. I would rather quit. But what else can I do? Well, one thing I can do is to try to find a different solution. Make it so that all baby monitors upon waking up go and check for an update. And then you don't have to log in. It's easier that way. Look, I've created a solution that's better and it's not unethical. Another thing I could do would be to ask you really very clearly about your use case. Why exactly do you want to log into the baby monitors?
Starting point is 01:12:11 How does this help our customer? And try to get a use case that you can work around whatever the ethics are. And as you're doing that, write it down in a notebook that you can't tear pages out of and are numbered and sign it. Because if it comes down to it, that is your legal representation that somebody else knew the ramifications. I mean, maybe the person asking you to do this is not trying to cross the boundaries. Maybe they don't understand that privacy is a thing, or maybe they don't get that what they're doing crosses lines. So, try to figure out if they know that. Because that's a different
Starting point is 01:13:07 thing. If somebody's asking you to do something illegal or unethical, unknowingly, fix unknowingly. And there's a spectrum, right? Oh, absolutely. But then there's also things like, you're giving a specific case
Starting point is 01:13:24 where an engineer is being asked to do something. But there's a whole bunch of cases where your product that you're working on may have no ethical problems, but it may be being used in ways that are unethical. Maybe you're at a medical device company and they're not doing the clinical trial in a way that's above board. There's nothing to do with how you built the product necessarily. And that's far enough away from you that influencing that is very difficult. Other examples, things I've turned down. I did an interview for a company that was doing a big data thing and it was clear that their product was targeted to be used by the NSA.
Starting point is 01:14:04 And I didn't want to be a part of that. And that's not a legal thing. And it's not, I mean, whoever did work on it just has a different set of goals and ethics in their life. Different politics, perhaps. Yeah. So there's those kinds of questions. And I think without, you know, without knowing specifically what the issue is,
Starting point is 01:14:23 it's very hard to to comment except in generalities or say okay there are these classes of problems and but the stuff like the clinical trial i mean you can make noise in meetings and things but people above your pay grade are going to do what they're going to do and so you can either say that's okay they're going to get in trouble and stick with it, which does make you complicit because people get hurt from these things. And if you know that something is wrong, you know, silence. Silence is often agreement.
Starting point is 01:14:58 Right. But that goes, again, back to my documented in a way that you would document something for a patent. Because someday they're going to say, oh, I didn't mean it. I never said that. And if your documentation is good, that takes away a lot of their ability to say that. And hopefully you'll never have to use that. Hopefully that folder will just die a death and a shredder in 10 years. But it's not cover your own butt. It is making sure that you can understand what's going on thoroughly. And once you can understand it, you should do something about it.
Starting point is 01:15:47 Yeah, probably one of these days we should have somebody who knows what they're talking about, an ethicist of some kind. What? If anybody. You don't just want to talk this into the ground? No. All right, fine. But there probably are people who do this for a living,
Starting point is 01:16:02 who think about these things. Yeah, there are. I'll find someone. Okay, so let's wrap up. Maybe we can go back to the beach. Oh, that's so mean. Thank you for listening to this show,
Starting point is 01:16:20 such as it was. I hope you enjoyed it. Do hit the contact link on Embedded FM if you'd likeedded.fm if you'd like to say hello, or if you'd like to let us know that you are applying to Airware and we should let Dennis know so that he can watch out for you. You can also email us show at Embedded.fm. If you do go to Embedded.fm, or if you look in your podcast applications information section, you will get show notes and often links to various things that we talked about.
Starting point is 01:16:54 I don't know what they'll be this week, but who knows? And now a final thought to leave you with, as is traditional for the Chris and Elysia podcasts, that's like this one, it will be from A. A. Milne's. And because I can never remember which one I have already done, I'm just going A. A. Milne. Thank you, Christopher, for pointing out that I said his name wrong. Since I can't remember which one I did last time, I'm just going to start the book and just put bookmarks now. Okay? Is this an audiobook now?
Starting point is 01:17:34 This is a partial audiobook at the end of these. Okay. We'll see how long it takes them to know. Chapter 1, in which we are introduced to Winnie the Pooh, some bees, and the story begins. Here is Edward Bear coming down the stairs now, bump, bump, bump, on the back of his head, behind Christopher Robin. It is, as far as he knows, the only way of coming downstairs. But sometimes he feels that there must be another way. If only he could stop bumping for a moment and think of it. And then he feels that there probably isn't.
Starting point is 01:18:09 Anyhow, here he is at the bottom and ready to be introduced to you, Winnie the Pooh. When I first heard his name, I said, just as you were going to say, but I thought he was a boy. So did I, said Christopher Robin. Then why do you call him Winnie? I don't. But you said, he's Winnie the Pooh. Don't you know what there means?
Starting point is 01:18:31 Ah yes, now I do, I said quickly. And I hope you do too, because that is all the explanation you are likely to get. Embedded FM is an independently produced radio show that focuses on the many aspects of engineering. It is a production of Logical Elegance, an embedded software consulting company in California. If there are advertisements in the show, we did not put them there and do not receive any revenue from them. At this time, our sole sponsor remains Logical Elegance.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.