Embedded - 94: Don't Be Clever
Episode Date: March 25, 2015The linker post for this episode is Be Excellent to Each Other. Dennis Jackson spoke with us about drones (and Airware), simple code, and learning. Hobbyist drones and UAVs on Amazon: tiny and chea...p, medium (Christopher's gift), andplease-I'm-drooling-right-now. Only the last one may be an Airware platform (Dennis could neither confirm nor deny). Airware's breakdown of proposed FAA rules Simple code: Cyclomatic complexity Chris Svec's episode on empathy driven design (he'll also be at ESC Boston!) Test Driven Development for Embedded C by James Grenning Don't Make Me Think: A Common Sense Approach to Web Usability Dennis has also worked on DEKA's iBOT and at Avinger's OCT system. Dennis had a list of suggested articles and blogs on safety critical software development: 30 Pitfalls for Real Time Systems (part 1 and part 2) Rules for defensive C programming Joel Spolsky's blog (see top 10) Why are you still using C The Power of Ten -- 10 Rules for Writing Safety Critical Code Dennis' other suggested reading (ongoing blogs): Coding Horror Jason Sachs's Embedded Systems The Old New Thing Rands in Repose (management and leadership)
Transcript
Discussion (0)
Welcome to Embedded, the show for people who love building gadgets.
I'm Elysia White, alongside Christopher White, and we are finally joined by Dennis Jackson.
Although, I have no idea what we're going to talk about.
Hi Dennis, it's great to have you here.
Hey Chris, hey Elysia, it's great to finally show up.
Could you tell us a bit about yourself?
So I've been writing software for about 15 years, maybe actually longer.
Okay, I graduated way longer than I thought.
I've always worked in medical devices.
I've always wanted to work on something that basically helped people.
I've now joined my first non-medical device company,
but it's still a regulated company in theory.
It's up at Airware in San Francisco.
And I like writing software.
So embedded software, bigger software, small software, anything.
Web software?
No.
Not that big.
Make that clear.
We need to bound it.
Yeah, yeah.
No, I enjoy writing software. Actually, I enjoy writing software actually I like writing software
I like flying, I like robotics
so I've always worked on software that
has some kind of physical interaction with the world
I totally agree with that of course
and what languages do you use?
it's always been C or C++
for scripting
I had Perl a long time ago
but now Python
but always C and C++ for scripting. I had Perl a long time ago, but now Python.
But always C and C++.
I think that that may be the definition of embedded soon.
You know, it's funny because people have these Linux system on chips, and they're like, oh,
I'm doing embedded.
I'm like, what are you using?
They're like, oh, I use Python, or I use Erlang, or I use... Scratch.
Yeah, everything.
I like Scratch.
It's great. I've scratch it's great i haven't
i've heard of it i haven't seen it and everyone's saying oh i do embedded software and i i use this
interpreted language i'm like okay that's the that's the world we live in now is like you can
buy a basically a full computer that runs on a chip and yeah well even the electric imp and
there's another one that's similar that run either
on javascript or squirrel which are all interpreted or semi-interpreted where they go to a byte code
that runs on it but yeah yeah i think it's awesome because it does give more people access to it i
mean they you know you can run your software in something that is interacting with the physical
world um and i don't want to say hey you know you're not really writing embedded software if You can run your software in something that is interacting with the physical world.
And I don't want to say, hey, you're not really writing embedded software if you're not writing all the way down at the assembly level
or you're thinking about bytecode or individual bytes.
You're not writing binary. You're not writing it properly.
We'll allow you to write in fourth.
Yeah.
So anyway, I don't want to be an embedded snob,
but I always find that when people start doing things and they're like, yeah, we need more performance, they always fall back to C and C++.
So it's the foundation.
So I meant to ask you, what does Airware do?
That is your current company.
Yes.
So we are working on basically an operating system for drones.
Wait a minute. We're not,
we have to say that again.
Drones.
Drones.
Watch out.
There's a drone coming.
UAVs,
drones,
UFOs.
It's the hot,
that's the hot new thing.
But,
you know,
if you look around,
they're coming.
We're not aiming,
not right now.
Chris flinched.
They're coming. They uh you know there's the
hobbyist market is really ramping up you can buy you can go on amazon and buy like a 40 maybe even
cheaper now just a little hobbyist drone like you throw on a battery you got a little it actually
plugs in usb powers up and you can take off.
Wait a minute.
If they're on Amazon for $40, why was that other one so much more expensive, Christopher?
Because that one was probably way better.
It was only like $80.
It was a big one.
It was bigger.
I see.
I also have the $40 one.
It's right here.
But you can do it.
I mean, you can spend from tens of dollars to hundreds of dollars to thousands of dollars on hardware.
So there's the hobbyist market that's coming up, and then there's the military market,
which they're all highly customized, and they go off and blow things up.
Well, they do monitoring, too.
Yeah.
Well, originally they were for blowing things up.
Now they're doing monitoring.
But Airware is looking for everything in between.
We're looking for that whole commercial market.
And there's a lot of things.
It is actually already big in Europe, but it'll be coming to the U.S. soon.
It's agriculture, infrastructure, monitoring, all kinds of things you can use them for.
Right now, you can send someone out and go record something,
go measure something,
but it'd be really great if you could do it from the air.
You can do that.
You can go rent a helicopter.
You can go hire a pilot.
You're going to pay a lot of money for it. But if you had a drone where you could load up whatever your sensors were,
whatever thing you wanted to record and describe a flight plan and just take it
out there, put it on the ground, hit go, it goes off, flies the whole thing.
You collect all your data, you go back, you do your analysis on it.
And then you say, maybe it's a, you know, a farm.
You want to go do it like every week well getting a pilot
lined up making sure your conditions are right like that's going to be a real pain in the butt
but if you're a farmer and you have a drone that can just do it for you you put it out there hit
the button takes off you get your data and you do that every week and now you have something you
have a it's you have like a real-time real-time quote-unquote control system for your farm that
you are providing the feedback for that you can use to
figure out what you need to do next whether it's water more or take care of infestations or
any of that because instead of traveling a thousand acres every week you have something that
can do that for you. Yeah, exactly.
But you're not making the drones.
No.
So Airware doesn't make any flying hardware.
We make basically the brains that live in there.
We make the autopilot and the modules that you'll plug your sensors into or that we've already provided or control your motors.
And we have some other things coming down the line as well but um we actually don't make like you can't call up airware and say
hey i want a quadcopter or i want to you know i want to fix wing the aircraft i want a quadcopter
that will monitor the water levels on this these three reservoirs that are 20 miles apart uh so
we'll give you some people you can call and recommend and
they're using the airware hardware inside so so you're like the the gyros and the imu and the gps
the gps and all the route planning and that kind of thing so we have we have the embedded hardware
we actually have um desktop software so you can do all your flight planning um your you know your
job planning or whatever whatever is that you want to do with your flight planning um your you know your job planning or
whatever whatever is that you want to do with your aircraft um and then we have a way of getting that
all back into you know the cloud the the latest latest latest hot thing oh so do you help them
take data as well yep that's pretty cool so there's going to be i mean we're building an entire
infrastructure for it.
So my role in it is on the embedded software that actually flies the aircraft.
We actually have some.
Flight control.
Yes, flight controls.
We actually have flight controls engineers who actually work on the flying algorithms, the control laws.
The Quaternion, the Kalman, the super fun stuff.
Yep, yep.
And, you know, I've played with that in the past, way back in my day.
But now I'm working on, you know, myself and my team work on the,
all the other hardware that supports the flight group.
So we work on, the way I describe it.
Synchronous sampling of the accelerometers and gyroscopes.
Sampling of the gyroscopes. We provide them the data.
The way I always describe it to interview candidates who come in is the flight
control guys are the brains. My team is the nerves and the muscles.
So we take all the sensor data. We provide it to them. They figure out, Hey,
we want to bank. We want to, we want to, you know, we want to bank.
We want to land. We want to, we want to we want to you know we want a bank we want to land we want to we want to do something and then they say okay in order to do that we have to
power this motor or you know spin the props up or do something and they go back and tell us okay go
do this so and you do it in a safe manner that ensures that it doesn't fall from the sky and
that they didn't just say fly to the center of the earth as fast as you can.
Yes.
Don't aim low.
So, would a FAA, I mean, there was a question, I was getting to it.
Hasn't the FAA said, no, you can't do commercial stuff?
So, the Fa has and doesn't the faa like rule the whole world so this doesn't matter and what no well every every so the faa has
come out with rules come out with what they're planning on to be the rules uh they did that just
a few weeks ago and there And there are rules to it.
I don't know all the details of them.
But what they've basically said is you can fly during the daytime, line of sight.
There's some other stuff in there, too.
That was the annoying one, the line of sight. The line of sight one.
Because Airware would allow you to fly on line of sight.
It's all autonomous, yeah.
I think also licensed pilot either was or was going to be one of the rules.
It was one of the rules, and they relaxed it, I believe.
Well, it didn't make much sense because the commercial requirements were very strict.
Licensed pilot, line of sight, you know, those sorts of things.
But for hobbyists flying the exact same hardware, it was do whatever you want.
Yeah, that's the funny rule right now is you can stick a,
you can stick a camera on your quad.
You can fly up and look over your roof.
Like maybe you want to look,
look at the gutters on your roof and say,
Hey,
look at the gutters are clogged,
but it's now your neighbor says,
Hey,
that's really cool.
Can you do that for me?
And I'll buy you a pizza.
You're now a commercial operation.
The FBA can come in and say,
well,
we're going to shut you down.
Like I was just looking at my neighbor's gutters,
and we're going to have pizza later.
So it's still very, there needs to be more definition,
and it's going to come.
It's just standard FAA doesn't operate at light speed.
I think last week Amazon was granted a preliminary okay
to go ahead and start trying their delivery service,
subject to these rules.
So it still has to be line of sight and everything.
But the FAA said, go ahead and start working on this.
And part of that was they have to submit the type of air.
There were a lot of restrictions on it, like the type of aircraft.
If they go and make modifications to that aircraft, they have to get a reapproval for it.
Wow.
It's really, really strict.
So it's going to change.
I mean, these are all preliminary rules.
It was basically get them out for comment.
So all these different organizations.
And boy, were there some comments.
There were some comments.
So it's going to be a whole process to figure out what's going on.
It must be a big additional challenge because you've worked on FDA stuff before with me.
Yes.
And, you know, the rules were the rules.
Yeah.
And they'd sometimes change every three years or so, but it would be not a big change.
It would be sometimes relaxing of regulations.
Yes.
But this is, we have no idea.
We're writing the rules as you're making your product.
It's actually been really tough.
So I started there a year ago in March.
And when I started, everyone said, hey, it's a safety critical system.
We're going to have all these FAA rules.
So I came in with the mindset of, okay, I've only worked, I mean,
I've worked on class three and class two medical devices.
And safety critical is always like,
it's been ingrained in me since I started working.
Like that's the only thing i've ever worked on um and so i came in and said okay you these are
all the things you have to do like system level requirements um your your hardware requirements
your software requirements your design descriptions your traceability all across the entire thing
and people looked at me like just blank stairs i'm like they're, they're like, what are you talking about? I'm like,
what are you talking about? Isn't this going to be a safety critical system?
And they're like, Oh yeah, totally, totally safety critical. And,
and then it meant something entirely different.
Didn't have to do with killing people at all.
Yeah. And so that's been one of the growing pains and transitions for me.
But what, what it is,
is we think,
without knowing exactly what the FAA
is going to put on these requirements
for drones,
we are trying to write
as safe software as possible,
but we're not following exact,
there's no plan yet to say,
these are all the requirements
that you have to meet
for a safety
critical system to fly in a drone aircraft until that comes out it's probably going to be
um uh 178 um it's probably gonna be some subset of that but we don't know what it is probably not a
b would still be too high too high it might be b it might be c you
don't really have that much documentation anymore and it no i think they'll make a class i think
it'll be a new one i think it'll be a new one c and a half c minus c plus um the uh so Um, the, uh, so as a culture, especially at Airware, like we, we keep in mind, like we
test everything.
Um, we, we do have requirements not to the level that I would personally like.
Um, like for example, when I started, I was working on as one part of the software and
it's like, Hey, here are the requirements.
And it was like 10 requirements.
I'm like, but just in the description that you gave me, like I heard 10 more.
So, you know, I expanded on all of those.
And, you know, things can always be made better.
There's always more requirements that you can figure out.
The software can always be made a little bit, you know, you can optimize it.
You can clean it up.
There's all these things you can do.
You just have to know when to draw the line.
Like this is good enough for what we're going to use it for and it's safe.
So that's been a big struggle.
But the FAA side of it is we just don't know what they're going to say yet.
So we're writing it to a level that we find acceptable.
And it's not just like, hey, we wrote it in a flu.
We do have a lot of feedback inside.
We have continuous integration testing.
We have a QA group that takes it and runs it on local hardware.
We have an integration group that runs it on our own systems, and they fly those.
And we get feedback from everyone all the way back to the software about, okay, this was unexpected behavior or did this.
It's a bug in the software, or we would like you to do something different.
So we have all that feedback loop in there.
So when they fly for testing, is that commercial flight?
So you can have, so one, we do some stuff at Airware.
We do some testing inside the building.
So that's, that's on our property.
I hear there's a hangar you can rent in Mountain View. It's very large.
Yes, I've seen that one from the highway.
Basically, you can get exemptions for flying on private
land. You should hope so.
Yeah, you can. But then that should cover farms.
There's probably some way.
There's probably some way.
It's probably not commercial use if you're doing it for yourself.
Yeah.
I don't know.
I don't think they know.
We are not lawyers.
Did we mention that?
I am not a lawyer either.
This is not legal at all.
I write software.
But so, there's some locations we can fly. fly so we can take our aircraft out and test them.
Is that fun?
Is that like a field trip and everybody's goofing off?
Or is that like a really stressful when you used to go test on?
I haven't gone on one yet.
So I don't know.
But usually they bring back videos.
And depending on how things are going,
it's from what I hear,
it's,
it can go back and forth.
The first couple of ones are very stressful because it's like,
is everything going to work?
I mean,
they did all the building,
you know,
they,
they ran it without props in the building.
They ran it with props inside a netted cage and,
you know,
it flew,
but now you're outside,
you're away from all the engineers.
There's a wind.
Yeah. There's, you know, uncontrolled. engineers. There's wind. Yeah, there's...
Uncontrolled RF.
Yeah, there's all kinds of stuff.
So those ones are a little more stressful.
I do know where they...
One of the locations they go, there are a lot of cows
and there's apparently one cow in particular
that's really interested in their drones.
So he's always coming over and checking things out
and they have to like, you have to go away, go away.
We really should be able to make a title out of cows and drones
or something here.
Our integration group has said, hey, we want to make sure
everyone gets out in the field at some point,
but I just haven't gotten yet.
There's a lot to do.
Well, in field tests, can feel like boondoggles interspersed with moments of terror
that it's your fault it's broken yeah it's true um i i actually do want to do one because
i've gone on you know first in man studies first in human studies before and that's always really interesting because now you're in an operating room um and like your software is running and there's a person on a table
that is you know depending on what the device is or you know you really want to have that
software really good so let's let's actually explore that for a second not
not the good software part i want to get back to that but you uh you mentioned fda experience and
i know you worked with christopher on oct optical coherence tomography yep is that right yes good
and that's like um well putting it in in fiction terms, that's a lot like the cameras.
It's like a camera that can go inside your artery.
Yeah, I always describe it to people as a, it's like putting an x-ray machine on a catheter that you can put inside your artery.
Because you can see about three millimeters in the tissue.
So it's like, yeah yeah it's totally science fiction it's like i'm using a
laser beam to look inside your artery to see inside the tissue itself and putting it on the screen so
a doctor can figure out what to do it's pretty cool and one of the things they could do was to
clear plaque in people's legs so that they didn't lose their legs yes yes and you went on some of
those yeah i did uh first in man studies in poland and first
in man studies for a different device in uh paraguay yeah i was very glad to have hired you
because then you could go do those things yes chris's aversions the flight is uh well known
and so you have brought some of the FDA rigor to your work at Airware.
I've tried.
With some success.
Yes.
So one thing that's really nice is our lead QA, she came from the satellite world.
And you don't get a lot of chances to screw that one up, do you?
No.
And that's the thing I really like about her is that it's like you put this in and you ship it off, like it's not coming back.
You can't go hit the reset button.
So she is very much on regression testing, thorough testing, automated testing so that someone someone checks something in it runs on hardware
so she's put a lot like her and the rest of the group have put in a lot of effort to make it so
that we don't have to think about it we just say hey we make changes and we push them and
they either pass or fail and we get that information back so this may be a question
you don't want to or can't answer but do you have like a simulated flight environment so you can run the compile down to an application that we can run on the computer and feed in synthetic flight data.
So here's your GPS.
Here's a wind coming into it, and it'll respond to it.
And you can use our ground control station software to monitor the flight
and tell it to take off and land.
And, okay, I want you to fly this route.
So we can do a lot of testing that way too, of the control laws.
Silsim, software in the loop.
Yes.
Okay.
And Hilsim, what is the sum part?
Hardware in the loop, I understand.
Simulation.
Oh, okay.
I'm just saying it wrong.
Sim, sim, S-I-M.
That was me probably misspeaking.
And so I know at ShotSpotter,
we had one device that we had ripped out some of the sensors
and fed in electrical signals instead of sensors.
And then we would put our new code onto that hardware and have it run.
And that would be hardware in the loop simulation. Because even though it's a black box at that point, a physical box,
we also had the software in loop simulation.
We called it a sandbox, but everybody has different names.
Yeah, yeah.
That's the beauty of writing software,
is everyone has a different name for everything.
Everyone ends up saying the same thing, just differently.
And then they argue about it.
Yeah.
They argue about it yeah they argue about it so do you fly um uavs or drones in your free time the first time i ever flew a uav was on my interview at airwear was that part was that
one of the questions can you fly this they came in at the very end they had one of the little like
the the amazon 20 ones or something.
The controls are super fine.
And you can only fly them inside.
They're too sensitive to wind.
Yeah, you look at it wrong, and it falls over.
And so the interview went well, and they came in.
I don't even remember who it was now.
He came in.
He said, here's the final part.
You've got to fly this thing.
And I remember being nervous because I'd never even touched one of these things before.
I'm like, OK, here we go.
And I picked it up.
And he's like, OK, the right stick is your vertical and whatever.
And I pushed it.
And it took off.
I'm like, cool.
And then it just went dove right into the table.
And he's like, oh, that always happens.
OK, put it back up.
And I got a little bit higher.
And I got about, I don't know know my longest flight was probably like six seconds so that wasn't a requirement for the job no which is good um but uh i have one now um
it was one of the so at the holiday party they had a whole bunch of they had some drones they
had some some other hardware that that when they called names,
you could go up and grab something.
So I figured I should own one at some point.
And so I took it to my in-law's house and charged it up
and then put the props on, took off,
and promptly broke one of the props because I crashed it.
I put the prop guards on right after that.
After that.
Software is about writing instructions for things that we can't do so that something else can do them yeah
that's right that's right you don't have to be able to yeah yeah uh but the amazing thing is um
uh our integration team like all those guys all the people in that team all fly like they do it
on the weekends they do it at work.
And the funny thing to me is they're working on a system that says,
you don't actually have to be there.
We're going to make it all autonomous.
But they have so much feedback to it.
And there's always manual control as well.
And they've brought in some videos.
They go for these things.
They call them fun flies on the weekend.
And just once a month, they go to a field somewhere and go flying.
And like, these guys are amazing.
Like what they can do.
I'm like, okay, you guys know what you're talking about.
So, I mean, the people that are working there like love flying.
So it's really cool.
So how small of a device does AirWear work on?
How small of a device?
Well, you said the $20, $40 tiny indoor things.
Yeah, that's going to be too small.
Yeah.
Our main autopilot is probably, I don't know the exact dimensions,
it's probably two and a half, three inches by one inch by inch and a half.
Sorry for anyone not in inches.
It's the world I'm stuck in, sorry. It sounds like it's about the size
of one of the half-size Altoids,
the small Altoids.
A little bit bigger than that.
It's definitely tall.
Maybe a full Altoid.
So it could run a fairly small craft.
Yeah, I was thinking the DJI Phantoms,
but that's actually much bigger
than you need yeah um i mean most aircraft we have at work that it flies on are probably you
know a foot and a half two feet in diameter i mean i mean they're most of right now we're flying
our quads quadcopters quadcopters so you know well, now it's a square, so two foot on the side, maybe a little less.
So I mean, the autopilot itself, you have the autopilot and you have some other board,
like you have an actuator board, the GPS board.
We've separated the components to make it a more modular system.
And so you have to have room for all that.
Your batteries are probably going to be the biggest constraint.
So did this sort of outwith tin-ish size include the batteries in the GPS modules or those additional parts?
The batteries are always...
So we run off whatever the system power is.
So whatever batteries you're going to fly your aircraft, we use that same power.
You could have an alternate battery in there too, but you get the Airware components and you don't get a battery.
Battery is not included.
We should actually put that on the box.
How do you – this is going to come out wrong,
so I'll just go ahead and say it.
How do you make your software lighter?
I mean, fewer ones, fewer zeros?
Ones are really, really heavy.
But you do have to think about that.
Like how to make it more power efficient,
how to make it run on a smaller processor that needs less actual.
That's the funny thing.
It's actually really funny because I was just thinking about this the other day.
When I was at Avenger, we had wall power.
Avenger is the OCT company.
Yes, Avenger is the OCT company.
And we had infinite power. We just didn't care because we were plugged into the wall company yes i've injured the oct company and we had you know we had
infinite power we just didn't care we were plugged into the wall um and you had a big computer there
yeah that was quote embedded it was the pc inside of the chassis um um at i worked at st june medical
and um there you're running on it like if you're working on a pacemaker that thing's got to run for 10 years so there you really consider power like you think about every piece of power that anything
that's going to use power in there when I was at Decker Research when I worked on the iBot that
was plugged that was we were also running on batteries there you had to plug it in every day
so it wasn't a matter of you had to run multiple days.
But you did consider that.
But the motors in that system was going to eat way more power than the processor ever was.
So when I got the Airware, I was thinking, okay, we've got to think about low power modes. When we land and we don't use power that's unnecessary, and everyone's like, don't worry about the power.
I was like, what?
They're like, the motors draw so much power.
It's a drop in the bucket.
So we could spend all kinds of engineering time figuring out how to do all this stuff.
That doesn't matter.
Don't optimize the milliwatts when you have actual watts to worry about.
Now, are we going to do that long term?
I don't know.
Right now, we just don't even think about it.
And I know our hardware guys think about it.
They think about how much power the board's drawing. They think about it but they have not put the requirement on us like okay when the aircraft is not flying you got to make sure
everything comes down to the lowest power mode so we conserve you know milliwatts like we just
we haven't even had that conversation um i want to go back to you asked if he flew drones on the weekends, but I know you're actually a private actual airplane pilot.
Oh, right. I forgot about that.
Technically, I am not. I saw on our website it says I am.
You're working towards it. You have experience.
I have experience. I've actually done my solos.
I did my short solo. I did my long solo.
I did everything except for the three tests that you have to do.
I was trying to cram those in.
The written tests?
The written, the oral test, and the flying test.
And so, yeah, I should have done the written a long time ago
because I could have just knocked that out and done.
I was trying to get all three of them done.
And then, well.
Life intruded?
Life intruded.
My son was born.
And literally like two or three weeks before my son was born um i thought i talked to my wife and said hey uh i can i can line up a time to go fly
with this guy she's like no absolutely not i'm like i'm like all right yeah that makes sense
yeah so uh so i kind of put on hold since since he's been born, I think I've flown two or three times.
And I remember talking to a guy when I was taking my lessons.
He's like, yeah, I got 80% of the way through,
and I just had to do a little bit more, and I didn't finish.
I'm like, how could you not finish?
I'm like, oh, that's how you don't finish.
So a lot of guys, I keep saying guys in a general sense,
but a lot of the folks I work with actually are pilots.
I just need to finish those tests.
Does that inform any of your experience there,
knowing principles of flight?
It does.
It helps in conversations.
The stuff I'm working on right now,
you know, I'm far enough in my career that I understand like things have, there's certain
things that have to be done no matter what, like someone has to write the software that
turns the motor on and off or turns the light on and off. Like those are the things that gets,
that's just has things that have to work it's not sexy it's not the coolest
thing but these things have to work and so i i spend a lot of time working on the things that
in my group we we we do all the things that have to work in order to get the aircraft in the sky
so we're not worried about you know what's the angle of attack what's the air speed like we have
the sensors i'll tell them that but we're like let's make sure we get the right data. Let's make sure
we get, you know, this thing could be sitting on a desk. It could be sitting in an aircraft. I don't
know where it's going to run, but it's got to run correctly no matter where it is. But I mean,
in terms of conversation with people, it helps a lot you know like when they start talking about actually i missed the con i missed the the brown bag lunch lunch and learn um our our cto talked
about um control filters controls and flight controls and uh i was i overheard someone else
the next day or the week after i was talking about how oh yeah i had to look up all these terms
because i just never heard him before. And he's talking about,
you know,
yaw and pitch compared,
like how they interact.
And I'm like,
oh yeah,
I just thought everyone knew that.
But I mean,
it's just one of those things,
like you just assume everyone else knows
all the,
all the things that you know,
but not really.
That's a very engineering personality quirk.
Hmm.
But Chris,
you did used to fly.
You do still fly occasionally.
Not actual things.
No, not actual things.
Not him in the aircraft.
That's disallowed.
I flew RC planes for a while and I have a couple of drones,
but just little cheapy ones.
Cool.
Christmas presents.
Yeah.
When I was growing up up we had a neighbor had
flew um rc planes and i remember he'd go out there and test the engines on the block and it was so
loud and i always wanted to go see him fly and i never did well those were the gas ones yeah those
days are gone yeah nobody flies gas anymore yeah well i'm now i'm dating myself um but um
yeah so i never actually got to go see him fly,
and I never got to fly him.
So now I work at a company that does it all.
So it all comes around.
Although when we talk about delivery, and Chris mentioned Amazon,
everybody looks at it as like the next super freakishly popular thing.
That's the way it looks like it's going right now
like every day i see an article on drones i know but between safety concerns and just pure energy
efficiency i'm not sure i buy it i as a as a data collection system unbeaten just absolutely
phenomenal but as a delivery system that system... I don't know yet.
The hardest thing on all of this is power.
It's exactly like your phone.
Anything that's not plugged into a wall, the limiting factor is always power.
And with a drone, you can get more power on it by putting more batteries.
But, oh, now you need more power to fly it.
So it's the same thing. Now you're going to start saying to start saying oh i'm gonna put cargo on this and fly it like you know is amazon going to deliver a gallon of milk is going to take a pretty darn big plane
yeah i doubt they're going to start with groceries or books you know the thing that they started
so i don't know i mean in terms of other things drones are going to be used for They already fixed that problem. They just delivered those. Well, that's true.
So I don't know.
I mean, in terms of other things drones are going to be used for,
I mean, they're already doing it a lot in Europe where they do infrastructure.
Actually, one that I didn't know about until recently,
there's a company that does mine inspections, open mine inspections.
So what they do is they fly over every day.
They use LIDAR.
They measure it.
And they say, this is how much was mine today.
And then they go out the next day and do it again.
Like, this is how much was mine today.
And you calculate the volume of it.
You subtract it from the previous day.
This is how much you took out of the ground.
I was like, that makes complete sense.
It totally does.
At the end of the day, go fly over and give us the measurements.
It's just like, oh, I never thought of that.
I think there's going to be just tons of applications that people haven't even considered yet that are like that.
Yeah.
And that's so, I mean, a little plug for Airware, but that's where we're, I said it before, we're going for that commercial.
There's the hobbyist, there's DGI, and there's some other ones too and then there's a military side but there's this whole thing in
the middle um that no one's really going after right now and actually there probably are we
just haven't heard of them yet um but what airway is trying to do is is put ourself in there so that
everyone's using our stuff and going back to this is a hard problem to solve yeah i mean i've done inertial
systems and well everyone and even your inertial gps fusion and yet we still didn't control anything
we only displayed yeah like this is where this is where you are and this is how your your your
orientation orientation is um yeah now now you're going to control it. But going back to the FAA, kind of what we see is the FAA is not going to want a thousand different vendors doing aircraft.
They're going to want a few.
And they're going to want a few people saying, you know, ideally they want one, which happens to be called Airware.
But there's some options involved.
But it's the same thing with the FDA and the FAA.
People always are like, oh, regulation is bad.
But regulation makes things easy for them because they have to certify these things.
We're not sure what the FAA is going to say on on drones yet but there's going to be some kind of certification
just what level it is we don't know um but they have to they're going to have to certify that
whatever's running that aircraft in whatever way you want to use it if there are a thousand
different vendors that's a thousand different things they have to certify now if, if you have to pay for certification, that's a great thing.
But then if something goes wrong, they have to track it down.
They have to be involved in everything.
So if there's a few vendors, it makes their lives a whole lot easier.
And this is why there are only a few major aircraft vendors.
Yeah, exactly.
It's just too hard to go out alone.
Yeah.
And they do have companies that feed into them, but even the smaller companies often will work with the larger ones to get the certification because it's just really hard to do on your own.
Yeah.
So moving along from drones, unless you have more you'd like to add.
Let's move on.
What is important to know about writing mission-critical software in general?
And not really in theory, but more, say, somebody's graduating from college.
How do they figure out what's important to know?
I have a whole list of articles that I always give to people.
Excuse me, I need to start typing then.
And I'll send them to you too uh it's
articles i've collected over the years and um
i wish i could remember like there's there's like a few simple rules um
don't be clever is a big one no seriously it is is. Don't be clever. I tell this to my team all the time.
I'm a simple guy.
I like simple code.
I want to sit down.
I want to just look through it and understand it.
I don't want to have to go jump through all kinds of hoops to fully figure out what's going on with something.
I want you to be able to explain it to me over lunch or in a few-minute conversation.
Now, it doesn't mean like – obviously, I'm first in the subject.
So you don't have to explain to me, like, this is what a compiler is and this is what a data structure is.
Like, I understand those things.
But in terms of the solution space that we're looking at,
which I can't believe I just said that, but like,
it has to make sense for that.
And when you do something that's clever, it was like, when you're like, Oh,
this is, this was really neat. I did this one way that like,
I figured out this way to do something. Like I flip bits around. I'm like,
that's just asking for trouble. Like like because you're going to be working
on you you know it right now because you just did it it's in your head and now you're going to go
work on something else and someone else has to come along and maintain that are they going to
get it right away are they going to look at it and say oh that's really weird like why did they
shift these things like why did they shift these bits this way do this math and push them right
back like unless it's
really really well documented they're going to say well that's kind of weird um and hopefully
there's a unit test at my companies there's going to be a unit test so they can see if they broke it
but um if the next guy coming along and the next guy might be you in six months when you've gone
off and done something else and you come back and look at your code, and you're like, who wrote this? And you're like, ah, crap, I wrote this.
We've been there.
I've been there so many times.
When you do clever things,
when you make things complicated,
you just make more work for yourself
or whoever comes after you down the line.
There should at least be good justification.
Yeah.
Because one could say that a Kalman filter is pretty clever.
Yeah.
And that's a very sophisticated piece of machinery.
But it's a thing that was developed over years with research.
Right.
It's a thing.
And you can explain it.
Yeah.
And you can explain it.
But saying, well, I invented my own filter.
And it works twice as fast and does this.
And nobody else in the company has any clue how you did that.
Yeah.
Or even if it's right.
Yeah. Yeah. and does this and nobody else in the company has any clue how you did that or even if it's right yeah yeah uh actually it reminds me of um one of your one of your recent podcasts where they're talking about do you write your own operating system or not your own real-time operating system
or not i'm like why would you do that there are so many to choose from like the hard thing is
choosing the one that you want to use but like yeah it's a cool project to do and you know anyway so my background is actually
physics i studied computer science as my minor all my all my teachers all my physics professors
thought i was actually a computer science person taking physics classes um and when i graduated
that turned out to be true didn't it it actually did when i graduated with a physics degree and
they're like whoa. Who are you?
I'm like, whoa, welcome to the department.
I was always in the department, but I was always writing software.
But I forget where I was going with this.
Well, let me interject a story here.
Damn.
While you think.
Because it's related to the don't be clever.
It reminded me of when I learned to drive.
My stepdad was a professional truck driver.
And so even though he did not teach me how to drive,
when I was learning, I asked him,
okay, there are all these rules and I'm learning.
What is the most important thing for me to do?
And I really, I was such a klutz.
I expected him to say, don't trip over your feet or something along those lines.
And he said, don't be clever.
He said, you're a smart girl and you can optimize all of the paths
and you can figure out how to do all of this.
But the thing you need to do is to be as predictable as possible.
Yes.
Predictability is really important in anything.
I started looking at what I was thinking about driving and how other people drove.
And it was important because what I do now, the reason I indicate changed lanes is because then I'm predictable and it's
not about being a jerk.
It's about letting other people understand what's happening.
And maybe that is a good software idea too,
is to not be clever,
to be predictable,
to do simple things.
Yeah.
It's,
it's,
it's really about making it. So the next i i say this to my team all the time
make it just be nice to the person that comes after you yeah we had a a show you asked me for
a couple of shows you'd like and you probably would like the one with chris veck from last fall
where we talked about empathy driven development. And the idea is you have,
you don't treat your coworkers like they're stupid.
And,
and because it is going to be you next.
Yeah.
Yeah.
You had some other ideas about simple software.
Can you share some?
Sure.
So it really comes all the way back to what you learn in school.
Like a module should have do one thing.
A function should do one thing.
Functions should be short.
All these things are,
everyone knows because they learned it in school.
When you start getting in the real world,
you start, like the real world always intrudes.
Like, okay, this function does this,
you know, goes off and reads this sensor.
But oh, you know,
it's got to do some processing of it too.
And maybe it's got to average it.
So let me add these other little, some helper,
some helper bits in here and do some more work.
And all of a sudden now this function has gotten really large and it's going to
be hard. It's harder to maintain.
And actually going back to talking about, we haven't talked about it yet,
but we talked about earlier about test driven design.
The nice thing about that is it helps. I think it helps you write better code
from the fact that since you always have to test your code, you're always thinking about,
if I add this little bit in here, if I add this for loop or this if statement or this,
you know, some kind of branching mechanism, how am I going to check all the different possibilities?
So going back,, keeping it simple,
a function does the thing it needs to do.
If you're using C++, the class does the thing it needs to do.
You're not trying to cram everything into one file
so that you don't have to worry about,
okay, I have to look in this file, I have to look in this file.
Break it down so that the thing is easy to understand
and easy to test.
That's a tall order, though.
I mean, you end up with, so you think,
okay, I don't want it to be complex,
so I'm going to put it all in one file.
But then I don't want it to be complex,
so I'm going to put it in 10 files.
That's all about trade-offs.
Yeah.
And I think you and I and Chris are all on the same page that there isn't a single
right way yeah and that's that's i think one thing you learn as you i've i've learned as i've
gotten older and seen more software is that there is no one right way everyone does something
slightly different um and it's just a matter of learning to adapt to what you,
what your coworkers are doing and coming to a consensus.
That's one thing I think about my team is really great is that, you know,
we will go, sometimes we'll go into a room and say, you know,
this is the way I want to do something.
And the other people on the team will say, I think that's great.
Or someone else will say, ah, you know,
I really don't like that because of some esoteric reason.
But we don't come out of the room fighting and yelling.
We're like, what does the group decide?
Okay, we're going to put the opening curly bracket on the line instead of the afterline.
Okay, I don't like that, but you do.
Everyone else seems to like it.
Let's just go.
We're not here to argue over minor little details.
Religious wars!
Yeah.
Religious wars just have no place.
Curly braces must go here,
and they must have a space after and a space before.
They're supposed to have spaces,
and they're supposed to be on the next line.
I'm so sick of that.
The one thing that I cannot abide
is the space after parentheses and before the parentheses.
I find that...
Oh.
What?
No, that's...
I love that.
That's a...
Oh, that's when you have...
That's me.
That's our Avenger days coming back together.
If X, and you have to put a space, you know...
If I have, paren, space, A, space, equal, equal, space, one, paren, space, paren space a space
equal equal
space one
space paren
so lots
I love white space
I love horizontal white space
I love vertical white space
some other people don't
and the curly bracket
goes on the next line
that's just wrong
but
so
the style is different
a little bit different
everywhere
we have lots of
horizontal space
not so much vertical space.
That's my next project.
Is it?
I mean, are coding standards worth it?
I know in medical products and in FAA, you have to have a coding standard.
Some people use it as an opportunity to specify curly brace location.
But you don't have to.
No, almost every coding standard i've seen
says it somewhere in there like where where certain things are going to go i don't think
it's as important as people think it is i don't need the code to be that uniform i'd rather it
was simple than uniform the um so i i think coding standards are important so that people
write their code in a similar similar way like in terms of formatting, there's tools for that.
I get really, like, so I am guilty of when I'm doing code reviews,
like I see spelling errors, I call them out.
Yeah.
I do too.
Because I can't help it.
I read so much.
I've read so much my entire life, like from a kid on, like spelling error.
And, yes, I make spelling mistakes
and I love when people call me out
I'm like damn how did I miss that
but
a lot of times I'll call out a spelling error
but I'll let them go by
until I find an actual error
once I find an error then I'm going to call all your spelling errors out
because you're already going to go edit that file. So might as well fix all this other little
stuff too. But like formatting stuff, there's tools for that. This is, let's not argue over
that. I, when I see people in code reviews, you're like, Hey, you're clearly practicing
the wrong space. I'm like, okay, thanks for wasting all of our time when we have a tool
that does that for us. But I think coding standards are important from the point of how you name things, how
you, like, are you
like, if you're doing C++, like, how many
things can you inherit from, or can
you use templates, or to what scope
can you use templates, and
you know,
things about the language, like, we do not
on an embedded system, especially
on a safety-critical system, you can't use
malloc. You can't use dynamic memory.
And if your tool supports the way to verify that you're not using any dynamic memory, you should definitely turn it on.
Because it's really easy to slip that in, and that can cause all kinds of issues.
So I think coding standards are important from that point of view,
but getting down to the nitty gritty about,
even on spacing.
You do know, I'm just giving you a hard time.
Oh, I know.
I've worked with you long enough to know this.
And that's why I still talk with you.
I like you.
You're on my list too.
This is on tape now.
I know.
And the fact that you're on my list is on tape too.
And the fact that I have a list.
At lunch, we were talking about lists of people we would like to work with again.
Or people we'd like to poach and all make a company that would be great.
And so that we collect these sort of lists of people and maybe it doesn't go anywhere.
But you're on my list is not a bad thing.
I have two lists.
You're on the good list.
I have a bad list too.
That list is very short.
Fortunately.
Mine is too.
I do have a few people I would never work with again.
That if I found out they were at a company I was going to,
I would just say,
Oh,
thank you.
Bye.
Yeah.
But it isn't a very long list.
It's well, and you can shorten that list.
What?
The bad list?
Yeah.
I'm not killing people.
That's recorded now, too.
But back to coding standards.
I think it's important to have something, something in place so people just have an idea.
But the rule, I always tell my team, and I try and follow myself, though.
Sometimes I impose my rules a little bit on other people.
But when some people leave a company
and then they come back as a contractor,
I get to impose the rules.
That's true.
Is write like what you see.
So if you go into a file that hasn't been touched,
unless you're going to change the entire thing to the new format or naming conventions or whatever, write like it is.
Don't make your code stand out from everything else.
I had a client recently who gave me a pretty detailed,
and it was a fine coding standard.
But then I said, you also wanted me to use this other code.
And it looks nothing like what your standard says.
Do you want to pay me to translate?
Or do you want me to match their style?
Because I don't think I should put your style in what I change in theirs.
And they came back with, you should match the surrounding style.
That's the highest importance in coding standards.
Consistency is far, far more important than specifics.
Yeah.
And then, so if I'm working in a file that came from a vendor
and we're keeping it in the same style,
I usually demote it or mark it up with um you know
edited but at airwear or something to say hey yeah this looks exactly like the rest of the file but
i mean i know your your revision control tool will tell you who wrote it but when you're reading a
file like you're just going through like trying to figure out why something's working or not working
you're not going through the repository saying who wrote this was this written by someone that you know the person that
sits right next to me that i can go ask them or is this something at a company i'm never going to
meet so i like i like to leave a little tag saying hey we did this just so we know if you if you
modifying a vendor file in like six spots or some small number of spots
I like to have those because
then when the vendor updates their files
you can copy it
and it's not just about version control
it's if you
XXX
vendor or company
modification here it makes life
so much easier later
that's an empathy driven development thing
we create patches too,
but will they ever apply again?
Who knows?
They'll never be perfect.
Yeah, having that tag there says...
And why you made that change there.
Yeah, yeah.
So do you measure code complexity?
I mean, we talk about simple,
but the opposite's complex.
Do you have measurements?
So we technically do,
and I looked at them early on, and I haven't looked at them in months. Do you have measurements? So we technically do, and I looked at them early on,
and I haven't looked at them in months.
Do you remember anything about them?
No.
That's fine.
At Park, they introduced me to that as a concept
that they were desperately trying to simplify
the complexity of their system.
And one of the takeaways was they were building an API.
And they looked at the number of different words in their API.
Like when you write a story and it tells you the complexity,
like the reading level of the story?
It was sort of like that.
Okay.
I mean, they had different complexity measures,
but that was the one that really stuck with me.
That, you know, if they were going to use, you know, say, sent, they only used the word sent and not transceived, not anything else.
It was always very, very consistent.
And then they started looking at verbs and nouns and other words and really trying to make it all very simple.
When you're learning this API, you don't have to learn 97 different ways to do it.
Once you see packet sent, you know what packet means because it can only ever mean one thing.
It means the headers on there.
It means the tails on there.
And if it didn't have those, it would be called something else.
I really liked that, but I haven't come across other stuff like that.
I guess I should ask the park guys to be back on
i mean so as you were talking i remember like um cyclometric complexity yes that that was another
thing they were talking about yeah that's the one uh i used to we used to get it reported when i was
at saint jude medical um the tooling that we use there uh tooling that we use here at airwear does
report it and i remember looking at it when I first started,
and then it was one of those things I realized no one else was.
And it just wasn't – we're not at the phase right now
where that's as important.
So cyclomatic complexity, according to Wikipedia,
has to do with the number of branches you have.
You want each function to have a single path through,
maybe two paths through.
But you don't want if this, if this, else if, else if,
until you have 27 paths you might be going through
because that's really hard to test.
It's hard to write a unit test for.
Yes.
It's always interesting in an embedded system because
inevitably you have some kind of message handler um which is going to have some huge switch
statement in it or some other way of saying you know checking out the id of the message came in
and it goes off the different handlers and that thing always grows so you know you can have the retro system down to um you know one and two your count
your psychomatic complexity measurement you know very small numbers and then you have this one
function that has like 50 you're like what is that like oh that's that's the message handler
yeah and the only way around that is to have a state machine have state dependent uh message
which has other different right different kind of No, you put those all in a table, in a variable.
And the tool can't see it.
And then it's a for statement,
and then the tool can't see it at all.
There's ways around it.
You can totally cheat.
Yeah, I mean, but with any tool,
any tool, anything that you're measuring,
you can always game the system,
but it's not about like... It's better off system, but you're, it's not about like,
it's better off to go ahead and say,
it's a switch statement.
It's a message.
It's complicated.
And this is why,
and this is how we're going to test it.
Yeah.
Like,
you know,
I,
when you,
you meet a lot of people are like,
these are the rules we have to follow them exactly.
Where in reality is like,
we follow the best we can.
And where there's exceptions,
you write, this is an exception to the rule. And this is why we follow the best we can. And where there's exceptions, you write,
this is an exception to the rule.
And this is why we're taking the exception.
Even when you have to deal with complex things like quaternions and Kalman
filters,
you,
you try to have a,
this is not that simple here.
Go read this page,
go read this book,
and it will give you the basis you need to make it.
So that this code that I've tried to make
is obvious and simple as possible.
I can't explain it to a third grader.
I can't explain it to somebody
who doesn't have this background.
But once you have this background,
it won't be too complicated.
Yeah, and it goes back to what we were saying earlier
about when you describe your code to me,
understand that I also,
I understand the system we're working on.
Now, if I go, like I did controls work 15 years ago like I understand control loops I understand filtering
like there's things I like I now a lot of these things are on words to me but I have some
background in them so I'm not going to go sit down and write the controllers for our aircraft there's
there's no way that's it's not going to happen but if they start talking to me
about it i'm like if i like i'm going to be rusty i'm like okay i asked the right questions and like
okay i got a good enough understanding to understand it um but i'm not going to go like
do a critical review of the controllers they're going to do that amongst themselves because
they're the experts in it but they can explain to me in a way that I can understand and I can implement software around it.
So it's just knowing your audience.
And when I say simple software,
it's simple for the audience that it's going to be for.
And you do need that caveat.
Oh, I remember the operating system one.
Okay.
It was, would you write your own operating system or not? And it comes down to the,
well, we can write our own thing here, but what's your core business? Is your core business going to
be writing operating system or is your core business going to be, I don't know, making an
autopilot? That being said, we're not writing our own operating system. But I hear this conversation a lot, not just, I mean,
I've heard it either, you know, when I've read things online,
when I've been at a company that I've been in, like,
should we write our own code that does this? I'm like,
does someone already do this? Are they much better at it than us?
Let's just buy it.
It's tough. I mean, our tosses in particular can be hideously expensive,
although last week's was free, which was really amazing.
But I had this experience.
I interviewed at ShotSpotter, making the gunshot location system, which is such a cool idea.
And when I interviewed, I made fun of a previous company that I had stayed at for only a few weeks because they were writing their own GPS parser and they were writing their own software-defined radio.
And neither one of those things had anything to do with what they were making.
And I didn't understand why they were writing them.
I thought they should just buy them off the shelf and not discuss it.
After it's shipped and we talk about cost reduction,
we can talk about redoing those parts or expanding our business.
And as I was, you know, spouting off, pretty much ranting just like this,
during the interview with like four people,
because it was one of those group parts of the interview,
and the room got quiet.
We really were crickets.
It's like we're writing our own.
And later, after I had gotten hired,
one of the guys told me that they had,
with that interview conversation,
stopped talking about doing their own radios.
That's awesome.
And just went for buying them.
They just stopped discussion.
I think it's a bigger problem with smaller companies and startups
where you get a small group.
You don't have any money.
Well, that's one issue, but you also get a small group of
maybe five or six really smart people
and now they feel free.
They feel like they have a lot of power
and so it's like, well, hey, I've always
wanted to make my own 2D graphics library.
Let's do that instead of looking
and buying another one. I'm sure I can do it better.
Yeah.
I totally understand.
There's so many things.
It'd be so fun to write this thing,
but that's actually not really what I want to...
I think what happens a lot of times
is people say,
I can do this,
and I can do it in a very short amount of time,
but they don't understand
that you have to maintain that forever.
Yeah.
And it's like, yeah.
It's a product. It's a product at that point and you know internal product which means they know where you sit
they know where you sit and you're going to be the expert on it and if something goes wrong you
have to fix it it's not a matter of well i mean it's not even about blaming a vendor it's like
you have like now now in addition to all the other stuff that you have to do you have to
maintain this other thing it's like when i was at avenger like hey we want to do something
with uh pdfs and you know you can go download the pdf spec and you can do all this stuff for
rendering it or you can go spend a couple thousand dollars buy a license from whoever i bought it
from and plug it in. And Hey,
you asked for PDFs yesterday and now they're in the system done.
And that's,
and it's a cost benefit analysis to people don't run too.
It's like,
Oh,
we have the in-house talent,
so we should be able to write this ourselves.
And it's free.
Yeah.
Free.
It's free times.
It's free.
Plus all of the money that you're paying those developers to do that
instead of make the thing that your job is the opportunity cost the maintenance cost and nobody
does that and says oh you know two thousand dollars that's you know whatever three days of
you know a small team yeah versus you know and it's like you said instantly having it
and you're done and you've got somebody who's supporting you yeah and there's always
integration issues there's always like okay their software works a little bit differently than
exactly the way we want it but you know what you can probably adapt to it make versus buy if you're
small enough everybody feels like they should be making it all but what they really should be doing
is buying as much as they can yeah in support of shipping their idea. And I think that was one of the things that when Chris introduced us,
it was like, oh, yeah, this is a guy who shipped things.
And that's kind of a checkbox.
We were talking at lunch about your transitioning into a management role.
Yes.
And my question was, have you—
Transition to plate, I end up a role. Yes. And my question was, have you... Transitioning to plate
is where I end up a lot.
Yeah.
It either says
I'm not a good software developer
or I have some decent people skills.
Well, in project management
and all of the other...
Yeah.
But I said,
have you written performance reviews?
And you said,
not yet, but soon.
I'm like...
Well, not yet at this company.
We'll give you the manager title
when you...
We'll check that box off.
And then when you've laid somebody off or you've fired them,
then we'll check that off in our box.
And it's like, have you shipped things is one of those boxes that for me makes it,
it's a little more comfortable.
You know that projects don't end when you push the release button.
Yeah.
Everyone's excited about shipping. You know that projects don't end when you push the release button. Yeah. Yeah.
Everyone's excited about shipping.
And I'm like, that's when it gets harder.
Now you have customers.
And if they don't like something, then you have to deal with it.
And it's super important.
It's really nice when it's still in-house.
So do I get a big checkbox for have you shipped things that the president wears?
Christopher's new product, the one he worked on with Fitbit,
it ended up in the news
on President Obama's wrist.
And he put it on himself.
We didn't shoot it at him.
It wasn't just stuck on.
Can you say shoot at the president?
I didn't say shoot at the president.
I said shoot at him.
But you were talking about the president,
so the pronoun.
And I was talking about shooting a watch at low velocity.
Yeah, anyway.
President Clinton stood next to the iBot when it was balancing.
That was pretty cool.
I don't know if he ever wrote it.
But yes, it's been seen multiple times on his wrist.
That's awesome.
It must have gotten stuck.
It's really kind of cool.
So actually, we were talking earlier about medical devices and now airwear fa devices like
everything i've ever worked on has been a medical device and everything i've ever worked on is
something i don't want any of my friends or family to ever have to use yeah so this is actually really
cool about working at airwear it's like it's the first thing i was like i want people to use this
um and if they say yeah use your stuff i'm like oh that's awesome
um but like before it was like hey i have your pacemaker impl your stuff i'm like oh that's awesome um but like before it was
like hey i have your pacemaker implanted me i'm like i'm sorry or or uh you know uh
well the avenger was pretty cool because i mean yeah that was a medical device and it saved
people's legs so it was like hey i didn't have to get my leg amputated. I'm like, well, that's really cool.
But it is really cool.
And yet you're still like,
Oh,
sorry.
You had to have surgery.
Yeah.
Yeah.
But so I'm,
I'm really excited about,
you know,
when airwear eventually launches something that we,
you know,
people are using it and,
you know,
we,
we have have little stickers
that say maybe there's a
powered by airware on there
or something.
Hopefully there's a way of knowing it.
Actually, back to the operating system one.
That's the one that's most fresh in my mind.
Joel from Artem
said, you asked him,
there's no way to know what operating system is running
inside something.
So maybe they should have stickers.
Well, actually...
Powered by Artem.
I'm sort of glad you brought that up
because I forgot to do the element 14 header,
so I'll just stick in the commercial now.
That's sort of what I wrote about for Joel
was how hard it would be to work on applications
that weren't nifty and cool
and how difficult it would be to not be able to see your stuff
in other things that were nifty and cool.
The episode before, we talked to Lane of Osh Park,
and he said one of the reasons he did these brilliantly purple boards
is so that he could see them when he walked up.
I mean, other people's projects, he's like, oh, I had a little hand in that.
And Joel doesn't get as much of that.
But he did get a Mars Curiosity mug, so that's kind of cool.
So I think we're almost out of time, but I have just another couple quick questions.
Sure.
You mentioned unit testing, and I am a proponent of unit testing, and I often do it,
but I don't do it all the time. How do you manage to help everybody understand the importance? How
do you make the time? What do you use for framework? How do you get started? What's
unit testing embedded systems? Make it so we're better unit testers.
Yes, please. So I will first admit,
I learned unit testing when I was at DECA
and I use the same style I use it there.
So that was like your first job?
That was my first job, yeah.
Yeah, I always fear that it's something
you have to get right away.
Yeah, and well, so I will, like I said,
I'm the first to admit that
given the ability to not unit test something,
it's very easy for me to fall back into that trap.
Because it's like, I wrote it, I tested it, yeah, it works.
I tested it once.
Yeah.
And I'm very thorough.
I try and be very thorough.
That's why it's really good to have a good solid QA guy behind you.
Yeah.
Or sitting next to you.
Sitting next to you, yeah.
But what we do at Airware is you can't,
your code's not done until all the test coverage.
It's part of the whole process.
It's not a matter of I developed this module and it's now in there and I'll get to the testing later.
As you commit it, the review says,
okay, where's the testing that goes along with it?
And we did the same thing at DECA.
Testing was a deliverable.
It wasn't done until you had that.
And also documentation.
We're not at that point yet.
But it's really setting up the infrastructure, setting up the CPPU test, that's what we use.
And that's the same framework that James Grunning has in his test-driven development in Embedded C.
Yeah, so actually after listening to that podcast, I knew that someone had that book, our QA person had that on her desk at work.
I went in the next day and said, I need to borrow this.
And I went home and read it.
And now everyone on my team has read it now too.
So the testing on the embedded system side,
we do testing on our actual local processor,
like on our PCs.
We've run all our unit tests there.
And then we do what we call functional tests on the embedded software,
where we have the framework as part of it,
and we run the test and verify that um the test still
passed we're not running so when i was at deca we actually ran the exact same unit test on the
hardware and here we're running a slightly different variation on it and i don't know
which way is better yet maybe neither one of them is better um but i do know uh for all the
uh errors that all the bugs that have been filed against our system,
we don't have that many on anything that my team has touched.
That's gratifying.
Yeah, it is.
And now, you know, you could argue our boards
are a lot simpler than the other boards in the system,
but we're also maintaining more boards.
Did Airware have unit tests before you got there?
Yes.
So it wasn't, yeah, that was actually one thing that was really nice coming in.
Like the framework was already in, the continuous integration server was already running, and it was all part of the whole process.
Now, listening to the podcast about TDD and reading the book, it was really interesting to learn how to do drivers.
I haven't done it myself yet.
We were talking earlier about tech lead versus manager.
I lead a team.
I also still write a lot of software.
But like just yesterday I was updating some software and I was like, okay,
I go in to fix a test.
I'm like, okay, what are, how do I do this again?
Like what are the pieces?
Like I'm just really rusty and it hasn't been that long.
It's only, you know, it's been a couple of months since I've worked on that one the pieces? I'm just really rusty. And it hasn't been that long. It's only been a couple months
since I've worked on that one little piece,
but it goes really quickly.
But one guy on my team read the book
and was like, wow, this is amazing.
I'm going to do all this for all of our drivers
from here on out.
And he's just been doing it.
And it's just,
if you don't find anything, it's not a problem.
But now if anyone goes and change that and breaks it,
like we know right away,
it's just,
it's fantastic.
He just,
he soaked it right up and he took it right to heart.
It's been,
it's really awesome.
And he's not someone like,
who's just right out of school and like,
like,
okay,
I have to learn everything is possibly new and apply everything new.
Like he's been developing for a number of years and said,
wow,
I just never knew about this.
And now that I see it, I see why it's better and I will do it.
So he's much better than me because I will very easily put something together.
I'm like, yeah, it works.
I think what you said was important too is having the infrastructure
and making it easy to do so that you don't feel like,
oh, I have to figure out this with CPPU test and do this
and I'll have to put it in a
script which is a pain in the neck i have to do something by hand yeah if it's just okay i write
this piece of code that goes along with my code it goes here and it integrates in the system and
then the the server takes care of running it and verifying that's great i mean because if you can
reduce friction out of the things that are tedious and a little bit boring sounding you know on the
face of it it'll be more likely that people use it
yeah and making it simple to run too it's like you want to build the the application make you
want to make the test make test like it has to be there you can't go through a whole lot of hoops
in order to do it like it just has to be really simple well that was one of the things granny
in his book was trying to do was to make the framework simpler yeah it's tough to set up but once it's set up the
idea is that it's not very tough to use yeah yeah so well cool i will let james know that you're
using it i think he'd be quite pleased i think he would i hope he is because i mean we're all
excited about it that is very cool that's very cool so do you have any last thoughts you'd like
to leave us with?
You know, standard, leave the world a better place than you found it.
Boy scouts.
It's the same thing with code.
Make it look consistent and just try and clean it up as you go along.
Make it nicer.
Is Airware still hiring?
Yes, we are.
Am I hiring? Yes, I am.
What are you hiring for?
I'm specifically hiring for an embedded software engineer.
There may be a few who listen to this show.
We actually are hiring.
In Silicon Valley, in the Bay Area, when people say we have a full stack,
they're usually talking about a Linux system, a database, some web interface.
At Airware, we have the full stack.
We have hardware engineers all the way up to people writing web stuff.
And we have everything in between.
And we're hiring across the board.
And so do people email you?
Do they email me for an intro?
Do you have a... You can email me.
We actually have recruiters.
Actually, if you email me
and it comes through embeddededded from the podcast,
then I'll put a little star on it.
Okay.
So go ahead and email show at embedded.fm and we'll pass it along to Dennis
and let us know that that's why you're emailing it.
Or, of course, you can hit the contact link and I will just introduce you to
Dennis.
That'll work too.
My guest has been Dennis Jackson, Embedded
Software Tech Lead at
Airware. I'm happy he
finally agreed to be on the show as he's been a friend
to Chris and me for
years. He was the first person to
send me a picture of his kid reading
my book and it made my day.
Who was six months
old at the time? It might
have been staged.
If you have a physical copy of my book and can send a picture along, it would make me smile.
Show at embedded.fm will let you attach the picture.
But you can hit the contact link if you want stickers or just to say hello.
Thank you for listening and thank you to Christopher White for co-hosting and producing.
And for introducing me to Dennis. Christopher White for co-hosting and producing and for introducing me to
Dennis. Well, thank you for having me on.
And
a final thought for this week?
Let's go with Shakespeare.
A fool thinks
himself to be wise, but a wise
man knows himself to be a fool.
God knows all my software
makes me feel like that.
So we turned off the mics and we talked about our show title
but Dennis and Chris and I always have a lot to talk about
one of the things that I did want to get on the mics was about
maker stuff
this is going to be a short segment
you don't do any uh extracurricular no i i read a lot um so yeah i don't go home
and i don't i don't build anything at home i don't write software at home um you do still
have a small child i do have a small child but even before even before him he doesn't write
he doesn't write software yet yet doesn't write software yet. Yet.
Although, you know, my wife is an electrical engineer, so he could have a hardware.
He could have a hardware side on him.
He's definitely going to be an engineer, though.
Like, you see him checking out tires or looking at how things work.
He's also got a little bit of an OCD tendency.
Like, things have to be lined up right. So we're a little nervous about that, but not too nervous.
But, yeah, even before he came along, I didn't, you know, I think I've done a little bit of scripting at home, like maybe to do something on my machine.
I can't remember.
The last thing I, I mean, really the last thing I remember writing was something to synchronize iTunes playing on two different computers.
This was before like Apple came out with their airplay and their remote
speakers,
like a couple of years before that.
So I could have,
we were having a party and we wanted music playing on both ends of the
house.
And so we didn't have anything wired between them.
The only way I could do is like this.
And then it was just enough of a phase change between them.
We're like,
nevermind,
turn it off.
But I mean,
I just don't write software at home.
I write a lot of software at work, but I read a lot.
Like I read blogs, I read...
Technical?
Technical stuff.
Mostly fiction, nonfiction?
Both.
I mean, the nonfiction, or sorry, the fiction,
I read a lot of, I used to read a lot of science fiction.
Like I go on vacation, I usually read a couple novels.
But this has always been true you've never
even when you were out of college yeah work at work and then yeah technology is yeah i mean i
mean i read i read technical blogs when i'm at like i used to when i was commuting down the
peninsula i'd read them on the train now like sometimes also uh my son wakes up usually around 7. I, unfortunately, wake up usually around 6 or 6.30.
I think I've reached the age in life where I just start waking up early.
You're not that old, I know, because I think you're younger than I am.
Only by a little bit.
Yeah, like a month.
Yes.
Yeah, you two youngsters.
You're like eight months older.
Right.
But so, I mean, I read about stuff.
I mean, I read about software development.
I read about best practices.
I just read.
So, it's interesting because we have the podcast
and we're more hooked into the maker community than we used to be
and a lot more i feel a certain amount of pressure to do technology stuff outside of work and it's a
little weird for me because i'm a contractor so my hours are strange and i'm never sure when i'm
working or when i'm not working but um you do feel that pressure that other people are doing these amazing things
outside of their day jobs.
And so, yeah, I don't know what to make of that exactly.
And I'm not sure if that's necessary to make you a better engineer
because you do home projects or don't.
So, I mean, for anyone who's going to be sending me, you know,
happens to send resumes, like if you're fresh out of school
or only have a couple years experience,
as I'm looking at resumes and talking to people,
I really like seeing that experience.
The projects, the home projects?
Yeah, or like projects that you did at school that you really owned.
Like I had to do this thing because it was like part of like –
I was on a team with six people.
Yeah.
Those are not as good.
If you led that team or if you were a major contributor that's
good but i i want to see that you're you're you're trying to learn the things that you you don't have
that experience because you were in school that you're going to get in the first few years that
you work now if you're coming in as a senior developer and like you say yeah i don't work
on home projects i'm like okay that's cool because i don't either but you have a lot of product
history and you've shipped products and you've done all this work and you can talk about it and you can point to things like, yeah, I have code in there or I have hardware in there.
We're still going to do a coding test because I want to make sure you can still do it.
But I'm not going to hold that against you.
Where does that transition from I want to see home projects to not home projects?
I don't know.
I don't know.
About year three? Yeah, three, four years in probably. And I work with guys that,
I work with folks that they, they go home and they work on, they work on projects there.
The thing is like, I, I, I really like to focus my energy on making the place I work,
the best place I can work, the software, the best I can make it. Like I think about our build system.
I think about our tooling. I think about all these things. Cause I, it's funny. Cause I actually
don't want to think, you know, and there's that book. Don't, don't make me think I read that one
years ago. And it's about user interface design, but I actually apply that. And again, I tell my
team this all the time. Like I, when I, when I, when I use our tools, when I use our software,
I don't want to think about it. I don't want to have to think i have to do this esoteric command
in order to do something i want to hit one or two keys and i want it to work yeah think ahead
of time so you don't have to think later yeah yeah and think once and think thoroughly yeah
and then just sleepwalk there really is i mean i come back from vacation a vacation i don't have
to relearn how to do
all this stuff. I just say, oh yeah, I hit this thing
and it works. Just don't make me think.
There's all these things I have
to think about already. Don't make me think about more things.
I wanted to
record this part because
at least
one person thinks that
when I get done with my day
at contracting,
I go into the lab and start tinkering.
And that's not true.
I do.
I mean, I have this thing here that a dentist can see,
and it's got wires coming out of it, sparkly tape,
and it's in a tennis canister.
So it's clearly not a pay for
sort of project but it's for a conference presentation and uh and it's sort of my
my test thing so i can show people don't yeah i did that off hours and my conference presentation
is sort of off hours but that is sort of advertising for the business and
all that yeah but i don't on average do much technical work that i don't get paid for yeah
and i i don't want to be one of these people that is pressuring other people if you want to get a
dev kit and you want to play with it you want to learn raspberry pi your son is actually going to
be programming soon maybe
it's time for you to start scratch in the next 18 months before he learns how to type i'll just have
have have benjamin teach it to you i mean yeah exactly yeah yeah um but there shouldn't be a
huge pressure you should learn what you want to learn yeah i early so really early in my career, when I started at DECA, I thought, okay, I go home, I'm going to work on this thing, and I work hard all day long. I net was early, but I would surf the web. I'd be reading things. I'd be doing these things.
I don't want to be thinking about how do I turn on this GPIO pin
in order to turn this thing on.
I don't want to do that at home.
Well, and it's hard for me too because unless you have something
you really want to make.
Yes.
That's the other thing.
Well, I want to learn this, but it's impossible to learn something
if you don't have a goal in mind.
Yeah, and that's the other thing too.
I'm far enough in my career. I have a certain number of hours per day.
I make a certain amount of money.
I can trade those two things off.
Yeah.
So if I need this thing to light up the room when we turn the lights off, well, I'm going to go buy a nightlight.
I want to spend a few dollars and be done with it.
Like not have some photo sensor that I read and then I turn on LEDs in order
to do a certain pattern.
I'm like, I just really want to light on.
Okay.
I'm going to go buy a $5 nightlight.
And yet if, if your son said, I want a nightlight that is purple and lights up a dragon, you
might at that point take that opportunity to think,
okay, yeah, I can show him that I can do this.
Yeah, well, that's also, that would be a goal.
It would be a goal.
And he would ask me for it.
Yes.
I don't personally want to light up purple dragon right now,
so I'm not going to make that. It's easier if you have a goal.
The little guy asked me.
Somebody else.
And most of my
even my little home projects
you know
I have
I wore my ring
to your birthday party
that gives
when you tap it
it gives you a new word
and
I did that for myself
because I wanted to learn
the micro view
but also
I had a goal
there were a couple of parties
I was going to go to
I know that I'm awkward
at parties
I know that the words
would crack me up
even if
and you were between contracts.
And I was between contracts, so I had time.
I wasn't doing
it after
putting in eight hours at a job.
I don't know. I just kind of wanted to make
sure people heard that it's okay.
It's okay either way.
No, no. I think it's great. And actually,
truthfully, I'm
jealous of that.
People have that drive.
Because I just have the idea and go home and do it.
I used to work with a guy.
He'd come home.
He'd come in on Monday.
I'm like, what did you do over the weekend?
He's like, I made a satellite receiver out of measuring tape.
I'm like, what?
This is a thing?
He's like, yeah. And you cut it to a certain length. And you use measuring tape because I'm like, what? This is a thing. He's like,
yeah.
And you cut it to a certain length and you'd measure tape.
Cause it already has the measurements on there.
I'm like,
okay,
that's really awesome.
And he like received like a Noah data signal,
a national ocean weather information.
And like with his,
with his media,
his measuring tape satellite dish.
I'm like,
okay,
that is really cool.
But it's not something I'm going to go home next weekend
and work on. I'm going to go over to your house
and I'm going to check it out.
Yeah, exactly.
It's amazing.
And when I hear people who do that
and they're hitting out,
am I just not as efficient as them?
Or are they just, do they drink way more coffee?
I don't drink coffee, so maybe I should drink coffee.
I recently started drinking coffee. I haven't done any yeah well i do more music
oh it's like when i was actually back to the goal thing like i i used to play i played trumpet all
through school all through college and i played a few years after and then i stopped meeting the
people that play like i if i didn't have a concert I was practicing for
or a gig that was coming up, I didn't play.
So I think it's the same thing.
It's like I don't have something going in that direction.
I'm like, I'm going to go work.
I'm going to do something else.
Well, my brain gets tired.
I mean, it gets tired in different ways.
If I had to spend the whole day at work reading,
then maybe after work I might code.
Or when I was a manager,
I was more likely to code after work.
But when I'm coding at work,
I want to go home and I want to do something different.
Yeah.
I think you have to, to reset.
Yeah.
And different coding isn't enough reset for me.
Yeah, yeah.
That's where spy novels and fantasy novels
and mystery novels
all the novels
all the books
I do worry about that with some people who are always
making and I'm sure people can do it but you've got to have that
down time to let things soak back in in order to get back
up to a good level like at work when i do have the time and inclination to make stuff it does
help my work so i think you shouldn't like forbid it because it is very useful yeah totally but i
don't think that it is required and i don't think we should make it an industry requirement that we're on 24 hours a day.
And we only get paid for eight of them.
That's a whole other conversation right there.
And how do you feel about open offices?
Well, that was the question.
But that's what Cisco was like when I first started working there a long time ago.
Yeah, which time?
The first time.
Right out of college.
And, you know, I'd go there and I'd work and then I'd go home.
And then I'd come in the next day and somebody would say,
well, you know, I went home and I had dinner
and then spent a half an hour with my wife.
And then, you know, I coded until 2 a.m. and I made this.
And they would do that like every day.
It was just like they'd get up in the morning,
they'd come to Cisco, they'd code at the office,
then they'd go home and then they'd, you know, eat.
And then they'd code until they fell asleep.
And those weren't even make projects.
That was just work.
We're just working on it.
And it was a big company.
It wasn't a startup.
It wasn't like, oh, my God, if we don't get this done, we're all going to be looking for new jobs.
And that's a kind of passion that I respect, but I just couldn't make sense of it.
Yeah. And the other thing, too, is like when I work at a place and I'm working on a project, I think about it probably an unhealthy amount.
Yeah.
Like, that's like, again, on my train commutes, I would solve a lot of problems on the train because I had a laptop, but I just wouldn't open it.
I would stare and I'd be reading something or looking out the window i'm like ah that's how we're gonna do that you mean
actually thinking about a problem it happens sometimes instead of just typing on it yeah
that works um but like at my current gig i i go home and i'm still thinking about okay how can
we make all this better how can we make it all work and i i think about all the time so and so you can do a lot of stuff
without fingers to keyboard yeah and i think the making parts of it you can do a lot without
fingers to keyboard there too yeah and you don't have to build things yes you can just think up
something and then make somebody else do it that's you become a tech lead or a manager hey i had this
idea last night in the shower i I think you should implement it.
Open offices are the great lie of our century,
of our time.
I think that's for another show.