and some parts going to have like microcontrollers.
microcontrollers.
So you want to be able to subscribe to
the information you want. You want that
to be push notificied to you. You may
have different rates how often you want
information and things like that.
And once you have that subscriber, you
can then on your local chip in your
local memory have you know a partial
state of the world right and you can
then use that to um make decisions right
and then you can even you know when you
when you build this system you can say
well we might want to have different
ways of encoding this information
between the subscriber and the
authorative core because we may have
different types of cables different
types of you know hardware
connectors basically, right? We might
want to support multiple of those with
different bandwidth, different
requirements, what have you, right?
But this still means that if you're
building a piece of equipment for this,
you now have a stable API, an API you
can call to know what's going on and to
send information. So if you're building
a radar, you can, you know, get the
humidity or whatever you need from the
system and then you can send all the
contacts you find to the authorative
core and the authorative core can send
that on to, you know, the pilot or the
visualization system or the screens or
the head-up display or whatever system
is interested in that information.
Okay, so it's not really a storage
system here. Like here's a pass through
system, right? you're passing data from
one end of the plane to the other. Um,
and you can obviously store as well if
you if if that's a requirement. Um, and
here is a really important thing um that
goes for all of these project and that's
if you build something like this, you
want to do a lot of tooling, right? So,
let's say we're building a new jet
fighter. Um, we haven't figured out what
it's going to look like, but we build
this core, right? and we're going to
have all these different contractors and
people building missiles and things and
they all have to somehow connect to this
thing. How do we do that? Right? They
can't like how do you how do you test a
missile when the button in the uh that
the pilot is going to press isn't done
yet, right? So therefore, you want to
have lots of toolings, right? So you
want to be able to take all the input
from various things and record it,
right? So now you have a blackbox
recorder, right? Because all the
information goes through this thing. So
you can have a little recorder that
subscribes to all the information and
stores that, right? Great. And then you
can have a playback. So now if you have,
you know, your first flight, you can
record information and then you can put
that to a missile and say behave. Here's
a real flight that we recorded. Here's
all the data from it. Now we can
simulate that, right? You may want a
Python API because maybe you want to,
you know, when you test a certain thing,
you want to simulate that, you know, um,
something happens like what happens if
this goes away or the radar stops
working or whatever. Now, you can
simulate things like you want a logger
so you can see what's going on. Maybe
I'm just implementing my radar and I
need to be able to see when the radar
outputs that it outputs correctly, that
the the data coming into the system is
correctly. Just having something that
can print it on screen is like super
useful. Um, you can have visualizer to
see what's going on. You can have full
simulators, right? And all this code
that I'm showing on on the slide are
stuff that never actually going to go
into the jet fighter, but they're going
to be really, really helpful because it
allows all these separate people who are
trying to write to this code to be able
to get the code to do what they want so
they can test their code, right? And
that's going to help them once you
actually start putting the plane
together and all these pieces talk to
each other. You know, if you can have a
missile and you can simulate what the
cockpit does and then you can record
what the missile does, you can send that
recording to the people who make the um
the cockpit and they can say, "Okay,
this is what we're expecting to get from
the the missile when when the missile is
firing or when the missile is finding a
lock or whatever the missile does, right?
right?
And and this would go for almost all the
projects I've talked about, like almost
like always write a bunch of tools that
that you can get your data out of your
black boxes and and or your core boxes
and and make them do things. Um at this
point, um this black box doesn't
actually know anything about aircraft,
right? It does it can't actually do
anything. It doesn't do, you know,
avionics. It doesn't do target tracking.
It doesn't do it doesn't visualize
anything. It it doesn't it doesn't do
anything. It just passes data through
it, right? And we're not actually giving
away anything secret here, right? So,
this could actually be open source,
right? You could give this away to
anybody, right? You could put it on a
website and says this, you know, we're
not going to tell you how far our
missile goes, but here's how our missile
tells the system how far it can go,
right? And that means you can have all
these contractors that can have these
manuals and go out and try to build
parts and you can have an open uh
bidding for making stuff that fits into
this plane, right? And and that makes it
a lot easier to to do things. Um because
you you've removed all the secret stuff.
You're just saying this is how we
collaborate. Um but you know um um the actual secrets and how it actually works
actual secrets and how it actually works that's up up to the end points and yes
that's up up to the end points and yes yes I know that no real military would
yes I know that no real military would ever make anything you know um open
ever make anything you know um open source because they don't understand
source because they don't understand this kind of things. Um, so yeah, now
this kind of things. Um, so yeah, now people can add all these bits. Now
people can add all these bits. Now people can add sensors and weapons and
people can add sensors and weapons and UIs and connectors and all kinds of
UIs and connectors and all kinds of stuff, right? But then you say, well,
stuff, right? But then you say, well, this is a crappy system because now we
this is a crappy system because now we have everything centralized. It's bad,
have everything centralized. It's bad, bad, bad. Like what if, you know,
bad, bad. Like what if, you know, somebody blows off this computer that is
somebody blows off this computer that is running the core thing now everything is
running the core thing now everything is terrible. You know, the plane crashes,
terrible. You know, the plane crashes, nothing works. That's true, right? So
nothing works. That's true, right? So that's a requirement for a jet. Like
that's a requirement for a jet. Like jets have redundant systems. So you
jets have redundant systems. So you can't have like one central core where
can't have like one central core where everything goes through, right? That
everything goes through, right? That wouldn't work. Well, you could easily
wouldn't work. Well, you could easily build multiple cores. The the thing here
build multiple cores. The the thing here is that you can have any number of cores
is that you can have any number of cores that sits on lots of different
that sits on lots of different computers. You can have lots of
computers. You can have lots of interconnects between all these systems
interconnects between all these systems that are redundant and over redundant,
that are redundant and over redundant, but the subscribers get their
but the subscribers get their information through the same API. Right?
information through the same API. Right? So that means you can make a single core
So that means you can make a single core that's very simple to implement. You can
that's very simple to implement. You can implement that, give that to everybody.
implement that, give that to everybody. They can get started on their missiles
They can get started on their missiles and equipment and all this stuff and
and equipment and all this stuff and then you can spend three years making
then you can spend three years making this advanced system that has multiple
this advanced system that has multiple cores that vote on which is one that can
cores that vote on which is one that can detect which one has been blown up and
detect which one has been blown up and doesn't work. And you can build all that
doesn't work. And you can build all that and then you present to the same people
and then you present to the same people here's the same API the same way you get
here's the same API the same way you get the same information. It's a drop in
the same information. It's a drop in replacement, right? But instead of
replacement, right? But instead of waiting three years to get that,
waiting three years to get that, everybody could get it, you know, in six
everybody could get it, you know, in six months, right? And that's really, really
months, right? And that's really, really core to this blackbox thinking. You can
core to this blackbox thinking. You can redesign the inner core to be more
redesign the inner core to be more complicated. And sometimes you do that,
complicated. And sometimes you do that, you know, because you figure things out
you know, because you figure things out and sometimes you do it because you need
and sometimes you do it because you need to get product out. So this is this is
to get product out. So this is this is exactly the same thing as we did with
exactly the same thing as we did with the text rendering. We started with
the text rendering. We started with simple text rendering but with the same
simple text rendering but with the same API and then we made nice text rendering
API and then we made nice text rendering afterwards but the users of that API
afterwards but the users of that API didn't need to change anything because
didn't need to change anything because it just works right
it just works right okay so here's a cool thing you could
okay so here's a cool thing you could put this in a tank now right it doesn't
put this in a tank now right it doesn't have to be in a plane it could be on
have to be in a plane it could be on anything right if you now that you have
anything right if you now that you have connection between things you can
connection between things you can connect multiple planes together they
connect multiple planes together they can share this information right so now
can share this information right so now instead of saying you know I got a radar
instead of saying you know I got a radar lock because my radar found this enemy.
lock because my radar found this enemy. You can have my neighbor, the other
You can have my neighbor, the other ship, you know, fighter found it or the
ship, you know, fighter found it or the ground radar found it or anything found
ground radar found it or anything found it. It doesn't matter, right? Because
it. It doesn't matter, right? Because now you have a way to communicate about
now you have a way to communicate about the state of the world, right? And
the state of the world, right? And you're obviously going to have lots of
you're obviously going to have lots of encryption and lots of things to control
encryption and lots of things to control what you want to get in and out. But
what you want to get in and out. But really, once you have a system like
really, once you have a system like this, you can, you know, make it very
this, you can, you know, make it very generalized. It doesn't have to be in a
generalized. It doesn't have to be in a fighter jet. It could be on transport
fighter jet. It could be on transport jet. It could be, you know, on a tank.
jet. It could be, you know, on a tank. It could be on anything. And that means
It could be on anything. And that means that now the people who make missiles,
that now the people who make missiles, they may want to make a missile that can
they may want to make a missile that can be launched from a tank and be launched
be launched from a tank and be launched from a plane and they have the same
from a plane and they have the same interconnect, right? they don't have to
interconnect, right? they don't have to write two software stacks to control
write two software stacks to control these two different things in two
these two different things in two different um things and things become a
different um things and things become a lot more interconnected and even if
lot more interconnected and even if there's going to be lots of differences
there's going to be lots of differences you can actually have the same knowhow
you can actually have the same knowhow and people will know people can move
and people will know people can move from different you know different
from different you know different projects and they know oh when I talk to
projects and they know oh when I talk to the system this is the API this is how
the system this is the API this is how you talk even though the thing I'm doing
you talk even though the thing I'm doing now is completely different
now is completely different hardware-wise or capability wise from
hardware-wise or capability wise from the last thing I was
Okay, so let's wrap up. Um I've talked for a long time. Um so um
for a long time. Um so um this is really uh
this is really uh can I make this smaller? There we go. Um
can I make this smaller? There we go. Um core to all software design in my
core to all software design in my opinion is format design. And format
opinion is format design. And format design is something that isn't really
design is something that isn't really taught and I wish people would teach it.
taught and I wish people would teach it. Uh, I'm trying to write a really long
Uh, I'm trying to write a really long article in a book about this because
article in a book about this because it's it's really is what we do as
it's it's really is what we do as software developers and a lot of things
software developers and a lot of things are formats if you think about it. An
are formats if you think about it. An API is a format. It's a format for
API is a format. It's a format for sending calls to some code. Files are a
sending calls to some code. Files are a format. It's a format of how you store
format. It's a format of how you store things in a file. Protocols like network
things in a file. Protocols like network is how do I store information in in a
is how do I store information in in a way that's a format. Programming
way that's a format. Programming languages are formats. It's a way you
languages are formats. It's a way you store how you know instructions for a
store how you know instructions for a computer and um it's also you know you
computer and um it's also you know you write in that instruction language. It's
write in that instruction language. It's a format of of what you can and what you
a format of of what you can and what you cannot do in this way to describe in
cannot do in this way to describe in instructions.
instructions. So formats are really important. There
So formats are really important. There are some things you should think about.
are some things you should think about. One is the difference between uh
One is the difference between uh semantics and structure. Right? So
semantics and structure. Right? So sometimes um you store semantics only.
sometimes um you store semantics only. So for instance uh the metric system is
So for instance uh the metric system is only semantics. If I tell you 3 m
only semantics. If I tell you 3 m everybody can figure out what 3 meters
everybody can figure out what 3 meters is. But I'm not giving you you know how
is. But I'm not giving you you know how do I structure that? I gave you that
do I structure that? I gave you that through words that came in sound. That's
through words that came in sound. That's not defined. You can write it down on a
not defined. You can write it down on a piece of paper. You can you know type it
piece of paper. You can you know type it into a computer. Doesn't matter. A meter
into a computer. Doesn't matter. A meter is a meter. Right? We we describe what
is a meter. Right? We we describe what semantically it means but not
semantically it means but not structurally how we send it right and
structurally how we send it right and reversely you can think of something
reversely you can think of something like JSON JSON is a format gives you a
like JSON JSON is a format gives you a structure for storing data but doesn't
structure for storing data but doesn't tell you anything what that data means
tell you anything what that data means there has no semantic meaning it's an
there has no semantic meaning it's an array of things but it doesn't say what
array of things but it doesn't say what those things are right so you need to
those things are right so you need to think about these things and what you
think about these things and what you make semantic and what you make
make semantic and what you make structure a lot of times you want to
structure a lot of times you want to have a simple structure
have a simple structure and then you can have more complicated
and then you can have more complicated semantics because then you can reuse
semantics because then you can reuse code that reads uh the semantics right
code that reads uh the semantics right so JSON again a JSON loader can load any
so JSON again a JSON loader can load any JSON it can store healthcare data or you
JSON it can store healthcare data or you know weapons data or um or video editing
know weapons data or um or video editing data doesn't matter right semantics
data doesn't matter right semantics doesn't matter you can use the same
doesn't matter you can use the same loader for all these kinds of things and
loader for all these kinds of things and that's kind of useful right but it also
that's kind of useful right but it also has its limits because yeah you can load
has its limits because yeah you can load it but you can't really do anything with
it but you can't really do anything with it because you don't understand it right
it because you don't understand it right you don't know what it means
you don't know what it means and formats need to be implementable and
and formats need to be implementable and this is really really key right it's
this is really really key right it's like if you want all these people to
like if you want all these people to come together and work if the API or the
come together and work if the API or the format is too complex it becomes really
format is too complex it becomes really really hard right if I'm going to make a
really hard right if I'm going to make a a UI and the data that I'm trying to
a UI and the data that I'm trying to make a UI for is super super complex
make a UI for is super super complex text then I'm going to halfass it and I
text then I'm going to halfass it and I make a UI that can only display like
make a UI that can only display like simple stuff right and then you start
simple stuff right and then you start getting incompatibilities right people
getting incompatibilities right people start saying you know oh I I don't
start saying you know oh I I don't support those things and languages are a
support those things and languages are a great example right the larger a
great example right the larger a language you have the the fewer
language you have the the fewer implementations you get or the more bugs
implementations you get or the more bugs you get in your implementations or you
you get in your implementations or you know there's more things that you know
know there's more things that you know more people can't read it it gets more
more people can't read it it gets more and more complicated right smaller
and more complicated right smaller formats are easier to implement and
formats are easier to implement and therefore the quality of implementation
therefore the quality of implementation are generally better, right? So you want
are generally better, right? So you want to pack as much power as mo possible
to pack as much power as mo possible into a simple interface, right? A simple
into a simple interface, right? A simple format.
format. And that's the thing is is formats are
And that's the thing is is formats are are two-ended, right? It's like if you
are two-ended, right? It's like if you save a file, you have to load a file. If
save a file, you have to load a file. If you send a network pack, you have to
you send a network pack, you have to load a network package. And if you make
load a network package. And if you make a complicated API, u somebody has gonna
a complicated API, u somebody has gonna have to use that complicated API, right?
have to use that complicated API, right? So it's like a language, right? So the
So it's like a language, right? So the more you make it complicated for your,
more you make it complicated for your, you know, other people, you make it more
you know, other people, you make it more complicated for yourself. And it it sort
complicated for yourself. And it it sort of squares a lot of times, right? If you
of squares a lot of times, right? If you have 10 different people and they each
have 10 different people and they each want a feature, you're going to get, you
want a feature, you're going to get, you know, 10 features and now everybody has
know, 10 features and now everybody has to implement this. And a very common
to implement this. And a very common thing is to say people say you know I
thing is to say people say you know I wish this file format um you know let's
wish this file format um you know let's say we have polygons and nerves and some
say we have polygons and nerves and some people think polygons are good and some
people think polygons are good and some people think nerbs are good and they say
people think nerbs are good and they say I wish this was nerbs and not you know
I wish this was nerbs and not you know but the problem is if you support both
but the problem is if you support both polygons and nerbs even if you want
polygons and nerbs even if you want nerbs you're going to have to implement
nerbs you're going to have to implement nerbs and polygons and the other end is
nerbs and polygons and the other end is going to have to implement polygons and
going to have to implement polygons and nerbs. So now both have to implement the
nerbs. So now both have to implement the the system they don't like and the
the system they don't like and the system they do like, right? So everybody
system they do like, right? So everybody has to do more work and it's actually
has to do more work and it's actually better to just pick one of them and then
better to just pick one of them and then some people are going to be less happy.
some people are going to be less happy. But even if they're less happy, they
But even if they're less happy, they only have to implement one thing. They
only have to implement one thing. They don't have to implement two things. Even
don't have to implement two things. Even though, you know, it's better to
though, you know, it's better to implement one bad thing than implement
implement one bad thing than implement one bad thing and a good thing. That's
one bad thing and a good thing. That's more work, right? So you really want to
more work, right? So you really want to make it as small as possible.
make it as small as possible. Um, so make choices. That's really
Um, so make choices. That's really important, right? Like a lot of people
important, right? Like a lot of people when it comes to formats, it's like,
when it comes to formats, it's like, look, my format can do a million things.
look, my format can do a million things. And whenever I see that, that's like
And whenever I see that, that's like your format's going to fail because
your format's going to fail because nobody's going to implement all those
nobody's going to implement all those things, right? Um, so um, and also
things, right? Um, so um, and also manage constraints like what can I
manage constraints like what can I require, what's the requirements of this
require, what's the requirements of this format? If I know certain things, then
format? If I know certain things, then that helps, right? If I know that all
that helps, right? If I know that all the data coming from the the core of the
the data coming from the the core of the fighter jet is in metric, that's great.
fighter jet is in metric, that's great. I can, you know, do that. Or even if I
I can, you know, do that. Or even if I don't like metric, maybe the core lets
don't like metric, maybe the core lets me choose and I know that I can be
me choose and I know that I can be guaranteed that it gives me feet if I
guaranteed that it gives me feet if I want feet and and meters if I want
want feet and and meters if I want meters and the core is going to handle
meters and the core is going to handle that for me. That's great. I can rely on
that for me. That's great. I can rely on that. it's, you know, I don't have to
that. it's, you know, I don't have to think about it. Um,
think about it. Um, think about interactions. That's that's
think about interactions. That's that's a very core thing. You know, if we're
a very core thing. You know, if we're making a video editor, we have a
making a video editor, we have a timeline or do we have multiple
timeline or do we have multiple timelines? Do we have a video stream or
timelines? Do we have a video stream or maybe want to support multiple video
maybe want to support multiple video streams? Are are we supporting
streams? Are are we supporting stereoscopic video or we maybe we want
stereoscopic video or we maybe we want to have like video all around us like 50
to have like video all around us like 50 displays at the same time. Can we edit
displays at the same time. Can we edit that? Can we you know and and this is
that? Can we you know and and this is really important like how many
really important like how many interactions do you have right and it
interactions do you have right and it goes for almost everything like can you
goes for almost everything like can you can can this fighter jet have one radar
can can this fighter jet have one radar or many radars or can it have a world
or many radars or can it have a world view or can it have multiple world
view or can it have multiple world views? Can I you know should the pilot
views? Can I you know should the pilot be able to pull up a world view from
be able to pull up a world view from another plane? Is that a useful thing?
another plane? Is that a useful thing? Or do they live in the same world? Like
Or do they live in the same world? Like who knows, right? These are things you
who knows, right? These are things you have to decide and it's really easy to
have to decide and it's really easy to forget to to split them up and get too
forget to to split them up and get too little interaction but it's also really
little interaction but it's also really easy to have too many levels of
easy to have too many levels of interaction so it's like gets really
interaction so it's like gets really really complicated to traverse and find
really complicated to traverse and find the thing you want right
the thing you want right um and then you want implementation
um and then you want implementation freedom and I talked a little bit about
freedom and I talked a little bit about that about the health care system you
that about the health care system you want to basically say this is how you
want to basically say this is how you talk to me about health care but how I
talk to me about health care but how I implement healthare is none of your
implement healthare is none of your business Right? I there's many many
business Right? I there's many many different ways to build build a server
different ways to build build a server farm that holds healthcare data and I
farm that holds healthcare data and I want to be able to change that and I
want to be able to change that and I don't want to in my API say you know oh
don't want to in my API say you know oh you can you know if my API has a a
you can you know if my API has a a function that says oh you can send in
function that says oh you can send in your own SQL query right and I allow you
your own SQL query right and I allow you to do that well then all sudden now I'm
to do that well then all sudden now I'm required to have an SQL query language
required to have an SQL query language and if they start sending queries for
and if they start sending queries for certain properties. Those properties
certain properties. Those properties have to be in that SQL query and work.
have to be in that SQL query and work. And now I've locked myself into SQL on
And now I've locked myself into SQL on the back end. Right now I I'm screwed.
the back end. Right now I I'm screwed. Right? And if I want to move to a
Right? And if I want to move to a backend that doesn't use SQL, game over,
backend that doesn't use SQL, game over, right? So you really really want to make
right? So you really really want to make sure that that you you put locks between
sure that that you you put locks between these things. And basically it's same
these things. And basically it's same thing with text rendering, right? You
thing with text rendering, right? You can do it as a bit map. You can do it as
can do it as a bit map. You can do it as curves or polygons or whatever. The user
curves or polygons or whatever. The user just draws text. They don't have to know
just draws text. They don't have to know how it's implemented. So if you want to
how it's implemented. So if you want to change our implementation approach in
change our implementation approach in the future, we can do that.
the future, we can do that. Okay. Uh another big question is plug-in
Okay. Uh another big question is plug-in systems. So do you want a plug-in system
systems. So do you want a plug-in system where you plug yourself in or you get
where you plug yourself in or you get plugged in? Right. So um I tend to think
plugged in? Right. So um I tend to think if you can make things that can get
if you can make things that can get plugged in that's good because um you
plugged in that's good because um you don't want other system to dictate how
don't want other system to dictate how your code works. And I I I said this for
your code works. And I I I said this for it's like you don't want to live in
it's like you don't want to live in somebody else's world. You want to live
somebody else's world. You want to live in your world and accept other people
in your world and accept other people into your world. You don't want to go in
into your world. You don't want to go in somebody else's world and live in their
somebody else's world and live in their world. So when you make a plugin that
world. So when you make a plugin that plugin lives in your world. it lives in
plugin lives in your world. it lives in the world of the the thing it plugs
the world of the the thing it plugs into, right? So, if you can make things
into, right? So, if you can make things that are not plugins, um, then that's a
that are not plugins, um, then that's a good thing. If you can make them as
good thing. If you can make them as modules that are standalone that do not
modules that are standalone that do not require to be plugged into something,
require to be plugged into something, that's a great thing. But a lot of times
that's a great thing. But a lot of times that's not possible. So, therefore,
that's not possible. So, therefore, plug-in interfaces are often the right
plug-in interfaces are often the right right way to go. But uh if you can try
right way to go. But uh if you can try to make things um that can be plugged in
to make things um that can be plugged in can be reused and plugged into other
can be reused and plugged into other things.
things. Um that's it. Um that's my talk. So I
Um that's it. Um that's my talk. So I would definitely like to thank everybody
would definitely like to thank everybody for watching and um you can always find
for watching and um you can always find me on stream on Twitch uh or keels.com
me on stream on Twitch uh or keels.com or on my Twitter or all the other
or on my Twitter or all the other socials at Kelsar. Thank you for
socials at Kelsar. Thank you for watching. Bye everybody.
Click on any text or timestamp to jump to that moment in the video
Share:
Most transcripts ready in under 5 seconds
One-Click Copy125+ LanguagesSearch ContentJump to Timestamps
Paste YouTube URL
Enter any YouTube video link to get the full transcript
Transcript Extraction Form
Most transcripts ready in under 5 seconds
Get Our Chrome Extension
Get transcripts instantly without leaving YouTube. Install our Chrome extension for one-click access to any video's transcript directly on the watch page.