Embedded - 138: Quit Yer Whining
Episode Date: February 10, 2016Chris (@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)
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
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.
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
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
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
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
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.
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
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
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,
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
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,
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
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.
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.
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?
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.
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.
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.
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,
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
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.
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.
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.
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.
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.
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
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...
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
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.
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
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?
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.
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,
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.
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,
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.
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.
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.
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
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...
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,
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.
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
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.
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.
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.
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.
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.
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,
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.
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
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.
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.
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,
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
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.
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.
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.
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
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.
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
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
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
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
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.
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
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.
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.
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.
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...
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,
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,
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.
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,
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
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.
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.
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%
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.
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.
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
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
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
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
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.
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.
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.
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.
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.
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
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.
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
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.
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
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
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.
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.
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
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.
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.
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
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?
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
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
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
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.
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,
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
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,
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.
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.
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.
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.
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.
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.
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.
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
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
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.
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.
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
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.
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
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.
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.
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
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
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?
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.
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
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.
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.
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.
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.
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.
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.
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
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
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.
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?
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,
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.
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
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
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
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
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.
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.
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?
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
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
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.
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,
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.
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.
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,
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,
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.
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?
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.
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?
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.