WEBVTT

1
00:00:04.040 --> 00:00:07.290 A:middle L:90%
We're very, very happy to have Dr. Consel with us

2
00:00:07.299 --> 00:00:10.429 A:middle L:90%
today. Um, he comes from the university and

3
00:00:10.429 --> 00:00:13.699 A:middle L:90%
also works at a research government research lab called Inria

4
00:00:13.710 --> 00:00:16.539 A:middle L:90%
in France. Uh, he has served on the

5
00:00:16.550 --> 00:00:19.870 A:middle L:90%
faculty at Yale at OGI. And at the University

6
00:00:19.870 --> 00:00:22.160 A:middle L:90%
of Rennes in France. Uh, he is a

7
00:00:22.160 --> 00:00:24.219 A:middle L:90%
dear colleague. I've known him for about 20 years

8
00:00:24.219 --> 00:00:28.070 A:middle L:90%
and working in programming languages and domain specific languages.

9
00:00:28.070 --> 00:00:30.370 A:middle L:90%
And today he's going to give us to talk about

10
00:00:30.379 --> 00:00:33.710 A:middle L:90%
some of his newer work in software design that uses

11
00:00:33.710 --> 00:00:36.659 A:middle L:90%
some ideas for programming languages. So [inaudible]

12
00:00:36.659 --> 00:00:40.420 A:middle L:90%
Thank you very much. Thank you so much.

13
00:00:40.420 --> 00:00:42.250 A:middle L:90%
This is, uh this is really great for

14
00:00:42.250 --> 00:00:46.079 A:middle L:90%
me. Uh, it's been 2 days here,

15
00:00:46.090 --> 00:00:48.299 A:middle L:90%
uh, spending, uh, 2 days talking to,

16
00:00:48.310 --> 00:00:52.740 A:middle L:90%
uh to people here. Great discussions. Uh,

17
00:00:52.750 --> 00:00:55.850 A:middle L:90%
and thank you for enlightening me. Thank you so

18
00:00:55.850 --> 00:00:58.520 A:middle L:90%
much. Um, so I'm going to try to

19
00:00:58.520 --> 00:01:02.049 A:middle L:90%
deliver a talk that's going to be at least try

20
00:01:02.539 --> 00:01:04.170 A:middle L:90%
as good as the quality of the discussions I've had

21
00:01:04.170 --> 00:01:08.060 A:middle L:90%
with people here. Uh, So what I'm going

22
00:01:08.060 --> 00:01:11.230 A:middle L:90%
to talk about is, um, Atlanta Research that

23
00:01:11.230 --> 00:01:15.489 A:middle L:90%
we've been working on for the past five years with

24
00:01:15.500 --> 00:01:18.340 A:middle L:90%
quite a few PhD students working on that, and

25
00:01:18.349 --> 00:01:21.959 A:middle L:90%
uh, post docs and researchers. Um,

26
00:01:22.340 --> 00:01:26.209 A:middle L:90%
our goal in this project was to leverage principles and

27
00:01:26.219 --> 00:01:30.769 A:middle L:90%
techniques from programming languages. Um, and especially domain

28
00:01:30.769 --> 00:01:36.280 A:middle L:90%
specific languages, too, uh, to to really

29
00:01:36.280 --> 00:01:40.349 A:middle L:90%
propose, uh, a new software development approach.

30
00:01:40.739 --> 00:01:44.000 A:middle L:90%
Uh, that would, uh, be driven by

31
00:01:44.010 --> 00:01:47.049 A:middle L:90%
uh, design description of the program essentially trying

32
00:01:47.049 --> 00:01:51.450 A:middle L:90%
to design a program rather before programming it for real

33
00:01:52.239 --> 00:01:56.319 A:middle L:90%
Um, for the purpose of this talk,

34
00:01:56.329 --> 00:02:00.920 A:middle L:90%
I'll be using a an example of what I call

35
00:02:00.920 --> 00:02:05.510 A:middle L:90%
a cooker alert. So, uh, just to

36
00:02:05.510 --> 00:02:07.879 A:middle L:90%
give you a little idea of what this, uh

37
00:02:07.890 --> 00:02:09.159 A:middle L:90%
this working example is going to do, Uh

38
00:02:09.169 --> 00:02:12.569 A:middle L:90%
this is something that that this is an application

39
00:02:12.569 --> 00:02:15.590 A:middle L:90%
that will, um, warn a user when the

40
00:02:15.590 --> 00:02:20.750 A:middle L:90%
cooker stays on for too long than some alert is

41
00:02:20.750 --> 00:02:23.060 A:middle L:90%
going to be sent to the user. Uh,

42
00:02:23.069 --> 00:02:25.770 A:middle L:90%
in order to, uh, make a decision as

43
00:02:25.770 --> 00:02:30.560 A:middle L:90%
to whether to turn off the cooker, or,

44
00:02:30.569 --> 00:02:34.889 A:middle L:90%
um, I'll keep it on. Um, So

45
00:02:34.900 --> 00:02:37.620 A:middle L:90%
this this is kind of a typical the kind of

46
00:02:37.620 --> 00:02:39.939 A:middle L:90%
applications that we will be looking at in this talk

47
00:02:39.949 --> 00:02:44.879 A:middle L:90%
where we have, uh, networked entities that we

48
00:02:44.879 --> 00:02:47.949 A:middle L:90%
want to orchestrate to realize a particular task. Okay

49
00:02:49.539 --> 00:02:53.379 A:middle L:90%
Um, so given what I've done before,

50
00:02:53.389 --> 00:02:57.090 A:middle L:90%
the logical thing to do for, uh, an

51
00:02:57.090 --> 00:03:01.280 A:middle L:90%
area like that would be to, uh, to

52
00:03:01.280 --> 00:03:07.349 A:middle L:90%
address this area by developing a domain specific language.

53
00:03:07.360 --> 00:03:10.689 A:middle L:90%
So the idea of a domain specific language briefly described

54
00:03:10.689 --> 00:03:15.469 A:middle L:90%
is you will provide some, uh, domain specific

55
00:03:15.469 --> 00:03:21.879 A:middle L:90%
concepts notations, semantics, um, in the form

56
00:03:21.879 --> 00:03:24.960 A:middle L:90%
of a language. And you realize the implementation of

57
00:03:24.960 --> 00:03:30.099 A:middle L:90%
that language with an interpreter or compiler and the benefits

58
00:03:30.099 --> 00:03:31.280 A:middle L:90%
of the approaches that you will have in terms of

59
00:03:31.280 --> 00:03:35.009 A:middle L:90%
software development. You hope that you're going to have

60
00:03:35.009 --> 00:03:38.840 A:middle L:90%
some language that's going to be concise, you know

61
00:03:38.849 --> 00:03:40.620 A:middle L:90%
abstract enough because a lot of the knowledge has

62
00:03:40.620 --> 00:03:44.960 A:middle L:90%
been kind of captured within the implementation of the language.

63
00:03:45.639 --> 00:03:47.060 A:middle L:90%
Uh, you'll be able to do some interesting

64
00:03:47.069 --> 00:03:51.270 A:middle L:90%
software verification because if you have some critical properties in

65
00:03:51.270 --> 00:03:53.159 A:middle L:90%
that domain, what you want to do is to

66
00:03:53.159 --> 00:03:57.469 A:middle L:90%
design the language such that it includes it. It

67
00:03:57.469 --> 00:04:00.990 A:middle L:90%
takes into account the properties that you are interested in.

68
00:04:00.990 --> 00:04:02.789 A:middle L:90%
So typically, some properties are not decidable

69
00:04:02.789 --> 00:04:05.860 A:middle L:90%
in general, in general purpose languages. But what

70
00:04:05.860 --> 00:04:08.340 A:middle L:90%
you will do is that you, you know,

71
00:04:08.349 --> 00:04:11.909 A:middle L:90%
carefully craft the design of that language such that some

72
00:04:11.909 --> 00:04:15.729 A:middle L:90%
properties can be can be decidable. So verification

73
00:04:15.729 --> 00:04:17.899 A:middle L:90%
is good using domain specific languages. And, of

74
00:04:17.899 --> 00:04:21.839 A:middle L:90%
course, some software execution properties like performance or robustness

75
00:04:21.850 --> 00:04:25.699 A:middle L:90%
of things. You can get there because you have

76
00:04:25.699 --> 00:04:28.879 A:middle L:90%
some kind of, you know, maybe domain specific

77
00:04:28.889 --> 00:04:31.480 A:middle L:90%
optimizations that you can perform, uh, you know

78
00:04:31.480 --> 00:04:35.350 A:middle L:90%
as you and encapsulate in an interpreter or compiler

79
00:04:35.540 --> 00:04:41.819 A:middle L:90%
to get robustness or performance. So this approach is

80
00:04:41.819 --> 00:04:45.259 A:middle L:90%
domain specific language approach has been, uh, studied

81
00:04:45.259 --> 00:04:46.790 A:middle L:90%
for, uh, you know, years, almost

82
00:04:46.790 --> 00:04:50.930 A:middle L:90%
decades now, um, it's been very successful in

83
00:04:50.939 --> 00:04:54.949 A:middle L:90%
in in a wide range of areas. I mean

84
00:04:54.959 --> 00:04:57.740 A:middle L:90%
uh, lots of researchers and and and and

85
00:04:57.740 --> 00:05:00.629 A:middle L:90%
myself, we've We've worked on on this approach in

86
00:05:00.629 --> 00:05:03.769 A:middle L:90%
very different areas, like operating systems networking, multimedia

87
00:05:05.240 --> 00:05:08.810 A:middle L:90%
telephone, Uh, so this is

88
00:05:08.819 --> 00:05:11.720 A:middle L:90%
this has been very, very interesting, but the

89
00:05:11.720 --> 00:05:15.459 A:middle L:90%
problem is that we we see that there's still a

90
00:05:15.459 --> 00:05:21.069 A:middle L:90%
gap between uh huh, the results that we're getting

91
00:05:21.069 --> 00:05:25.230 A:middle L:90%
in domain specific languages and mainstream programming languages. It's

92
00:05:25.230 --> 00:05:27.620 A:middle L:90%
still a niche to some extent. Okay, It's

93
00:05:27.620 --> 00:05:30.269 A:middle L:90%
still attacking, you know, niche areas, and

94
00:05:30.279 --> 00:05:32.810 A:middle L:90%
, uh, and making contributions. There but the

95
00:05:32.810 --> 00:05:35.930 A:middle L:90%
mainstream programming languages is kind of, uh, you

96
00:05:35.930 --> 00:05:40.730 A:middle L:90%
know, as much impacted as we would wish by

97
00:05:40.740 --> 00:05:45.000 A:middle L:90%
this research. So about five years ago, we

98
00:05:45.000 --> 00:05:50.160 A:middle L:90%
decided to try to combine the two and and and

99
00:05:50.939 --> 00:05:53.870 A:middle L:90%
one of the reasons why is that? You know

100
00:05:53.870 --> 00:05:56.069 A:middle L:90%
, usually when you talk about domain specific languages,

101
00:05:56.079 --> 00:05:57.730 A:middle L:90%
people will say, Well, yes, but there

102
00:05:57.730 --> 00:06:00.149 A:middle L:90%
are some non standard concepts that you're proposing in your

103
00:06:00.149 --> 00:06:02.720 A:middle L:90%
domain specific language. There's some some learning curve,

104
00:06:02.730 --> 00:06:06.060 A:middle L:90%
uh, to to use that language or or the

105
00:06:06.060 --> 00:06:09.339 A:middle L:90%
scope is very narrow. For every, you know

106
00:06:09.339 --> 00:06:11.560 A:middle L:90%
, niche. I need to learn a new language

107
00:06:11.639 --> 00:06:15.439 A:middle L:90%
, and that's kind of a problem. Uh,

108
00:06:15.449 --> 00:06:17.149 A:middle L:90%
the problem is the fact that there are lots of

109
00:06:17.149 --> 00:06:19.420 A:middle L:90%
a p I is out there that you want to

110
00:06:19.420 --> 00:06:24.379 A:middle L:90%
use and and the problem is that those DSL s

111
00:06:24.379 --> 00:06:26.980 A:middle L:90%
those domain specific languages are kind of disconnected from all

112
00:06:26.980 --> 00:06:29.430 A:middle L:90%
those a p I s and and that's a problem

113
00:06:29.430 --> 00:06:30.680 A:middle L:90%
because you're not leveraging, you know, the existing

114
00:06:30.689 --> 00:06:33.259 A:middle L:90%
, uh, the existing libraries you have out there

115
00:06:33.439 --> 00:06:36.310 A:middle L:90%
and another problem is the development environment. I mean

116
00:06:36.319 --> 00:06:40.240 A:middle L:90%
, you know, you have very sophisticated, very

117
00:06:40.240 --> 00:06:44.740 A:middle L:90%
rich programming environments like eclipse, for instance, and

118
00:06:44.740 --> 00:06:46.550 A:middle L:90%
what you'd like to do is to benefit from these

119
00:06:46.550 --> 00:06:49.829 A:middle L:90%
tools and again, domain specific language is not really

120
00:06:49.829 --> 00:06:56.970 A:middle L:90%
connect very well with those things. So the question

121
00:06:56.970 --> 00:06:59.110 A:middle L:90%
is, how can we get the best of the

122
00:06:59.110 --> 00:07:00.209 A:middle L:90%
of both worlds so we can get, you know

123
00:07:00.209 --> 00:07:05.829 A:middle L:90%
, domain specific benefits and general purpose languages. So

124
00:07:05.829 --> 00:07:12.550 A:middle L:90%
our approach there is, too is really to,

125
00:07:12.560 --> 00:07:15.470 A:middle L:90%
uh, combine the two. And and one of

126
00:07:15.470 --> 00:07:17.899 A:middle L:90%
the things that we want to do is that the

127
00:07:17.910 --> 00:07:20.399 A:middle L:90%
first thing is, we want to We don't want

128
00:07:20.399 --> 00:07:25.449 A:middle L:90%
to replace general purpose languages. Okay, because it's

129
00:07:25.449 --> 00:07:28.000 A:middle L:90%
just, you know, it's useless to fight against

130
00:07:28.000 --> 00:07:29.680 A:middle L:90%
that. So So what we want to do is

131
00:07:29.680 --> 00:07:33.889 A:middle L:90%
to compliment general purpose languages by introducing a phase prior

132
00:07:33.889 --> 00:07:36.339 A:middle L:90%
to programming, which is called designing. Okay,

133
00:07:36.339 --> 00:07:40.370 A:middle L:90%
we okay? It's just designing. What it means

134
00:07:40.370 --> 00:07:42.579 A:middle L:90%
is that we want to essentially raise the level of

135
00:07:42.579 --> 00:07:45.939 A:middle L:90%
obstruction. Not not to to be to express the

136
00:07:45.939 --> 00:07:47.870 A:middle L:90%
intent of the programmer directly, using a programming language

137
00:07:47.870 --> 00:07:50.759 A:middle L:90%
, but to express that intent in a decorative way

138
00:07:51.139 --> 00:07:55.050 A:middle L:90%
. Uh, another thing we want to do is

139
00:07:55.060 --> 00:07:58.220 A:middle L:90%
we don't want to have a design, language or

140
00:07:58.220 --> 00:08:01.709 A:middle L:90%
design approach that is general purpose that we know about

141
00:08:01.720 --> 00:08:05.500 A:middle L:90%
a lot of specification languages, for instance, informal

142
00:08:05.500 --> 00:08:09.170 A:middle L:90%
methods that are general general purpose. The problem you

143
00:08:09.170 --> 00:08:11.370 A:middle L:90%
have there is that, um because this general purpose

144
00:08:11.370 --> 00:08:16.040 A:middle L:90%
when you want to somehow target okay, the approach

145
00:08:16.040 --> 00:08:18.589 A:middle L:90%
to a particular area, it takes a lot of

146
00:08:18.600 --> 00:08:22.129 A:middle L:90%
effort. Okay, So we wanted we wanted to

147
00:08:22.139 --> 00:08:26.639 A:middle L:90%
to propose a paradigm that with our design approach,

148
00:08:26.649 --> 00:08:28.649 A:middle L:90%
Okay. And I'll tell you a little bit about

149
00:08:28.649 --> 00:08:31.580 A:middle L:90%
that afterwards. And the reason One of the reasons

150
00:08:31.580 --> 00:08:33.679 A:middle L:90%
why we wanted to do that was, in fact

151
00:08:33.679 --> 00:08:37.399 A:middle L:90%
, to retain the DSL benefits. Okay, that

152
00:08:37.399 --> 00:08:43.659 A:middle L:90%
we enjoyed in our previous work. Okay, um

153
00:08:43.639 --> 00:08:46.149 A:middle L:90%
, we wanted to have an actual language. So

154
00:08:46.149 --> 00:08:48.740 A:middle L:90%
that's the programming language side of things. Uh,

155
00:08:48.750 --> 00:08:52.799 A:middle L:90%
we wanted really to have an actual language. And

156
00:08:52.799 --> 00:08:56.129 A:middle L:90%
we wanted that language that design language, uh,

157
00:08:56.139 --> 00:09:00.259 A:middle L:90%
to be a paradigm specific in terms of syntax and

158
00:09:00.259 --> 00:09:01.870 A:middle L:90%
in terms of semantics. And I'll show you precisely

159
00:09:01.870 --> 00:09:05.269 A:middle L:90%
what I mean by that, um, and of

160
00:09:05.269 --> 00:09:09.039 A:middle L:90%
course, we wanted to go beyond the kind of

161
00:09:09.039 --> 00:09:11.750 A:middle L:90%
a contemplative approach, um, of, uh,

162
00:09:13.539 --> 00:09:16.470 A:middle L:90%
and we wanted to provide a compilation process that would

163
00:09:16.470 --> 00:09:20.809 A:middle L:90%
take a design would compile. Okay. That design

164
00:09:20.809 --> 00:09:22.990 A:middle L:90%
into something concrete for the programmer. And specifically what

165
00:09:22.990 --> 00:09:28.750 A:middle L:90%
we wanted was to generate a customized programming framework,

166
00:09:28.139 --> 00:09:33.330 A:middle L:90%
Um, customize with respect to the design, of

167
00:09:33.330 --> 00:09:37.169 A:middle L:90%
course, we wanted to have a well defined semantics

168
00:09:37.169 --> 00:09:39.919 A:middle L:90%
for our language so that we could do some verification

169
00:09:39.929 --> 00:09:45.710 A:middle L:90%
and essentially leverage the specificities of our paradigm. I

170
00:09:45.710 --> 00:09:50.860 A:middle L:90%
mean, that's again retaining the domain specific language benefits

171
00:09:50.940 --> 00:09:54.980 A:middle L:90%
. We wanted the programming to be driven by the

172
00:09:54.980 --> 00:09:58.029 A:middle L:90%
design. I mean, if you're spending your time

173
00:09:58.029 --> 00:09:58.980 A:middle L:90%
designing something, you want to get something out of

174
00:09:58.980 --> 00:10:01.000 A:middle L:90%
it. So you want to get programming support?

175
00:10:01.009 --> 00:10:03.649 A:middle L:90%
That's one. But you want to also want to

176
00:10:03.649 --> 00:10:07.960 A:middle L:90%
get some program verification. Okay, So, uh

177
00:10:07.970 --> 00:10:09.960 A:middle L:90%
, so, uh, so the programming, uh

178
00:10:09.970 --> 00:10:13.250 A:middle L:90%
, we want to ensure that the programming is gonna

179
00:10:13.250 --> 00:10:16.730 A:middle L:90%
be, uh, conform is gonna be in conformance

180
00:10:16.730 --> 00:10:18.230 A:middle L:90%
with the design, and and for that, we're

181
00:10:18.230 --> 00:10:22.720 A:middle L:90%
gonna we're gonna leverage the, uh, the programming

182
00:10:22.720 --> 00:10:24.960 A:middle L:90%
support that we're generating the programming framework that we're generating

183
00:10:24.970 --> 00:10:28.750 A:middle L:90%
. And the other thing is that we want again

184
00:10:28.750 --> 00:10:31.950 A:middle L:90%
to bridge, uh, domain specific languages and general

185
00:10:31.950 --> 00:10:35.879 A:middle L:90%
purpose languages by generating this programming framework. And what's

186
00:10:35.879 --> 00:10:39.830 A:middle L:90%
interesting here is that we're going to be able by

187
00:10:39.830 --> 00:10:41.200 A:middle L:90%
doing that that we're going to be able to,

188
00:10:41.210 --> 00:10:46.019 A:middle L:90%
uh, to leverage, uh, the the the

189
00:10:46.019 --> 00:10:50.590 A:middle L:90%
all the all the tools and the runtime environment,

190
00:10:50.600 --> 00:10:54.419 A:middle L:90%
you know, and the host support that we can

191
00:10:54.419 --> 00:10:58.049 A:middle L:90%
have given the target the target and general purpose language

192
00:10:58.049 --> 00:11:00.299 A:middle L:90%
that we're going to choose. So let me show

193
00:11:00.299 --> 00:11:03.080 A:middle L:90%
you how Winston she ate that kind of list of

194
00:11:03.080 --> 00:11:05.529 A:middle L:90%
general ideas here. Uh, so the designing we're

195
00:11:05.529 --> 00:11:09.519 A:middle L:90%
going to have a declarative language. Essentially, uh

196
00:11:09.529 --> 00:11:09.860 A:middle L:90%
, that I'll show you in a minute with a

197
00:11:09.860 --> 00:11:15.860 A:middle L:90%
concrete example. Um, by the way, please

198
00:11:15.870 --> 00:11:16.980 A:middle L:90%
, if you have any questions, uh, don't

199
00:11:16.980 --> 00:11:22.460 A:middle L:90%
hesitate to interrupt as far as the paradigm. So

200
00:11:22.460 --> 00:11:24.519 A:middle L:90%
we chose one paradigm that we thought was general enough

201
00:11:24.519 --> 00:11:28.860 A:middle L:90%
to capture a bunch of areas that we're targeting,

202
00:11:28.870 --> 00:11:31.120 A:middle L:90%
and that's a sense compute control paradigm. And I'll

203
00:11:31.120 --> 00:11:33.419 A:middle L:90%
show you concretely what it is. Uh, next

204
00:11:33.419 --> 00:11:37.039 A:middle L:90%
slide. Uh, the language, the design language

205
00:11:37.039 --> 00:11:37.620 A:middle L:90%
that we came up with has a name. It's

206
00:11:37.620 --> 00:11:39.659 A:middle L:90%
called Dia Spec. And again, we're gonna see

207
00:11:39.840 --> 00:11:45.230 A:middle L:90%
, uh, concrete examples of that. The compilation

208
00:11:45.230 --> 00:11:48.169 A:middle L:90%
work. What we do is that we compile our

209
00:11:48.169 --> 00:11:52.759 A:middle L:90%
dia spec language into Java programming frameworks. Okay,

210
00:11:52.759 --> 00:11:54.960 A:middle L:90%
there are customized with respect to a given design.

211
00:11:56.840 --> 00:11:58.730 A:middle L:90%
We do some verification at design time, compile time

212
00:11:58.730 --> 00:12:01.789 A:middle L:90%
and run time. And as far as programming,

213
00:12:01.799 --> 00:12:05.250 A:middle L:90%
what we can do is that we can somehow enforce

214
00:12:05.639 --> 00:12:09.070 A:middle L:90%
the programmer. Uh, we can we can make

215
00:12:09.070 --> 00:12:13.149 A:middle L:90%
sure that the programmer conforms to the design by leveraging

216
00:12:13.159 --> 00:12:18.179 A:middle L:90%
the type system of Java. Okay. And as

217
00:12:18.179 --> 00:12:22.230 A:middle L:90%
far as support since we're going to we were generating

218
00:12:22.230 --> 00:12:24.929 A:middle L:90%
java code. So then we can have our approach

219
00:12:24.940 --> 00:12:31.529 A:middle L:90%
completely integrated into the development environment of Java, like

220
00:12:31.539 --> 00:12:33.549 A:middle L:90%
eclipse. And we can, of course, use

221
00:12:33.559 --> 00:12:35.149 A:middle L:90%
a P i s and other other tools we have

222
00:12:37.440 --> 00:12:39.379 A:middle L:90%
. Okay, so now, uh, let me

223
00:12:39.379 --> 00:12:43.639 A:middle L:90%
show you what this, uh, sense computer control

224
00:12:43.639 --> 00:12:46.250 A:middle L:90%
paradigm. Looks like it's a very general. Um

225
00:12:46.259 --> 00:12:50.269 A:middle L:90%
, it's a very general approach. Uh, that

226
00:12:50.279 --> 00:12:52.299 A:middle L:90%
is being used in a in A in A in

227
00:12:52.299 --> 00:12:54.039 A:middle L:90%
a range of area. The idea is that you

228
00:12:54.039 --> 00:12:56.779 A:middle L:90%
have some external environment here. Okay, that you

229
00:12:56.779 --> 00:13:01.539 A:middle L:90%
want to do measurements on. So to do measurements

230
00:13:01.539 --> 00:13:03.809 A:middle L:90%
on this environment, you're going to have some entities

231
00:13:03.820 --> 00:13:07.379 A:middle L:90%
. Okay, uh, sensors, typically, sensors

232
00:13:07.379 --> 00:13:11.460 A:middle L:90%
can be hardware sensors or, uh, software sensors

233
00:13:13.539 --> 00:13:16.769 A:middle L:90%
. Um, this is the sense part of the

234
00:13:16.769 --> 00:13:22.519 A:middle L:90%
sense computer control paradigm. You collect raw data,

235
00:13:22.529 --> 00:13:28.509 A:middle L:90%
and you, uh, feed them to other kinds

236
00:13:28.509 --> 00:13:31.149 A:middle L:90%
of components. We call them context components. Those

237
00:13:31.149 --> 00:13:37.070 A:middle L:90%
components will be in charge of essentially processing these raw

238
00:13:37.070 --> 00:13:41.750 A:middle L:90%
data, aggregate them, filter them, interpret them

239
00:13:41.139 --> 00:13:46.669 A:middle L:90%
okay to a century, Um, make them amenable

240
00:13:46.679 --> 00:13:50.240 A:middle L:90%
to the application level. Uh, and that's the

241
00:13:50.240 --> 00:13:54.850 A:middle L:90%
compute phase of the sense compute control paradigm. When

242
00:13:54.850 --> 00:14:00.080 A:middle L:90%
some decision needs to be made, some actions need

243
00:14:00.080 --> 00:14:03.870 A:middle L:90%
to be taken. Then the another, uh,

244
00:14:03.879 --> 00:14:07.269 A:middle L:90%
component kind of component comes into the picture. And

245
00:14:07.269 --> 00:14:11.919 A:middle L:90%
those are controller components. They get context data,

246
00:14:11.929 --> 00:14:15.500 A:middle L:90%
okay. And they're supposed to compute some actions that

247
00:14:15.500 --> 00:14:18.830 A:middle L:90%
will later be performed on the environment. So the

248
00:14:18.840 --> 00:14:24.669 A:middle L:90%
computer orders that go into another facet of those entities

249
00:14:24.679 --> 00:14:26.850 A:middle L:90%
, which is called the actions. So this is

250
00:14:26.850 --> 00:14:30.159 A:middle L:90%
essentially the actuator, uh, facet of these entities

251
00:14:30.740 --> 00:14:33.409 A:middle L:90%
, okay. And that's going to have an effect

252
00:14:33.419 --> 00:14:37.759 A:middle L:90%
on the external environment. And that's the control.

253
00:14:37.769 --> 00:14:41.970 A:middle L:90%
A step of the sense computer control paradigm. Okay

254
00:14:41.980 --> 00:14:43.080 A:middle L:90%
, So, in fact, I mean, you

255
00:14:43.080 --> 00:14:46.299 A:middle L:90%
see that as being a physical environment, but it

256
00:14:46.299 --> 00:14:48.899 A:middle L:90%
could be a, uh, digital environment. I

257
00:14:48.899 --> 00:14:50.970 A:middle L:90%
mean, this could be a network, okay?

258
00:14:50.980 --> 00:14:54.070 A:middle L:90%
And this could be sensors, you know, sensing

259
00:14:54.080 --> 00:14:58.850 A:middle L:90%
for instance, uh, the available bandwidth or the

260
00:14:58.860 --> 00:15:00.919 A:middle L:90%
loss of packets and things like that. And you

261
00:15:00.919 --> 00:15:03.340 A:middle L:90%
can take actions by maybe, uh, having an

262
00:15:03.340 --> 00:15:07.750 A:middle L:90%
influence on the the country. The admission control process

263
00:15:07.750 --> 00:15:13.659 A:middle L:90%
, for instance. Okay, so there are many

264
00:15:13.659 --> 00:15:18.120 A:middle L:90%
examples using science complete control paradigm. Like, uh

265
00:15:18.129 --> 00:15:20.769 A:middle L:90%
, you know, robotics is one avionics, uh

266
00:15:20.779 --> 00:15:22.769 A:middle L:90%
, everything that has to do with home automation and

267
00:15:22.769 --> 00:15:26.990 A:middle L:90%
and and some mobile applications. Okay, so let

268
00:15:26.990 --> 00:15:30.799 A:middle L:90%
me then show you a concrete example of an application

269
00:15:30.809 --> 00:15:35.059 A:middle L:90%
. Okay. Being designed and written using our approach

270
00:15:35.440 --> 00:15:37.799 A:middle L:90%
. So, uh, so this is this is

271
00:15:37.799 --> 00:15:41.980 A:middle L:90%
the picture where we have the senses. Here we

272
00:15:41.980 --> 00:15:43.840 A:middle L:90%
have the activities here. We have the context components

273
00:15:43.840 --> 00:15:48.059 A:middle L:90%
here and the controller components here. Okay, we'll

274
00:15:48.059 --> 00:15:52.679 A:middle L:90%
go back to our cooker alert example. Okay.

275
00:15:52.679 --> 00:15:54.679 A:middle L:90%
And we'll look step by step. How we go

276
00:15:54.679 --> 00:16:00.220 A:middle L:90%
about designing this cooker alert example. It's a simplified

277
00:16:00.220 --> 00:16:03.330 A:middle L:90%
version of that cooker alert. There are some evolutions

278
00:16:03.330 --> 00:16:06.600 A:middle L:90%
of that, but I'll show you the simple version

279
00:16:06.600 --> 00:16:11.549 A:middle L:90%
of it. So we start by declaring the sensors

280
00:16:11.549 --> 00:16:17.320 A:middle L:90%
and actuators of our application. So here, for

281
00:16:17.320 --> 00:16:18.529 A:middle L:90%
instance, we have this cooker okay, that has

282
00:16:18.539 --> 00:16:23.860 A:middle L:90%
to two devices attached to it. One that measures

283
00:16:23.860 --> 00:16:26.509 A:middle L:90%
the electric consumption. The other one is a switch

284
00:16:26.519 --> 00:16:30.299 A:middle L:90%
. Essentially. Okay, so here we declare this

285
00:16:30.299 --> 00:16:33.610 A:middle L:90%
device. So here you can see that this is

286
00:16:33.610 --> 00:16:37.100 A:middle L:90%
a very, uh, paradigm specific design language.

287
00:16:37.110 --> 00:16:41.009 A:middle L:90%
We have this keyword device here that declares an electric

288
00:16:41.009 --> 00:16:45.639 A:middle L:90%
meter that extends a class of sensor, which is

289
00:16:45.639 --> 00:16:49.090 A:middle L:90%
the sensor thing here. And all it does is

290
00:16:49.090 --> 00:16:52.610 A:middle L:90%
that it declares a source of information, which is

291
00:16:52.610 --> 00:16:55.450 A:middle L:90%
the current electric consumption as a float. That's all

292
00:16:55.450 --> 00:16:59.049 A:middle L:90%
it does is very high level, kind of interface

293
00:16:59.049 --> 00:17:00.750 A:middle L:90%
, like decoration. As you can see here,

294
00:17:00.750 --> 00:17:06.779 A:middle L:90%
it doesn't say whether we're pulling information from the electric

295
00:17:06.779 --> 00:17:10.359 A:middle L:90%
meter or whether the electric meter is gonna push information

296
00:17:10.539 --> 00:17:12.309 A:middle L:90%
into, uh, its clients. Okay. And

297
00:17:12.309 --> 00:17:17.809 A:middle L:90%
you'll see how we go about expressing that information later

298
00:17:17.809 --> 00:17:18.569 A:middle L:90%
on. Right now, it's just a source of

299
00:17:18.569 --> 00:17:22.720 A:middle L:90%
information. That's all it is. All right,

300
00:17:22.720 --> 00:17:26.519 A:middle L:90%
We have the switch here, which is another device

301
00:17:26.529 --> 00:17:29.099 A:middle L:90%
, which is, uh, it extends the actuator

302
00:17:29.099 --> 00:17:32.390 A:middle L:90%
class, and it has two actions. The on

303
00:17:32.390 --> 00:17:33.910 A:middle L:90%
action and the action. Okay. The actions can

304
00:17:33.910 --> 00:17:40.359 A:middle L:90%
be understood as interfaces interfaces. Okay. All right

305
00:17:41.140 --> 00:17:44.119 A:middle L:90%
. So, of course, there are many other

306
00:17:44.130 --> 00:17:48.769 A:middle L:90%
many other devices here. Um, let me.

307
00:17:48.769 --> 00:17:51.390 A:middle L:90%
Then go a little bit into the details of that

308
00:17:51.390 --> 00:17:53.480 A:middle L:90%
application. You can see you have two devices here

309
00:17:53.490 --> 00:17:56.980 A:middle L:90%
. You have a clock. Okay. That will

310
00:17:56.980 --> 00:18:00.680 A:middle L:90%
periodically, uh, essentially invoke that component here.

311
00:18:00.690 --> 00:18:03.319 A:middle L:90%
Okay, The alert component. And when that's done

312
00:18:03.319 --> 00:18:04.670 A:middle L:90%
, what you want to do is that you want

313
00:18:04.670 --> 00:18:10.250 A:middle L:90%
to see what's the electric consumption? Okay, to

314
00:18:10.250 --> 00:18:12.000 A:middle L:90%
decide whether or not you should send an alert to

315
00:18:12.000 --> 00:18:17.109 A:middle L:90%
the user. Okay, so we're going to define

316
00:18:17.119 --> 00:18:22.069 A:middle L:90%
the alert component. As you can see, this

317
00:18:22.069 --> 00:18:26.549 A:middle L:90%
is a really a component declaration. It says that

318
00:18:26.559 --> 00:18:30.359 A:middle L:90%
that alert component is going to produce integer values.

319
00:18:30.940 --> 00:18:33.990 A:middle L:90%
And here you can see you have what we call

320
00:18:33.990 --> 00:18:40.849 A:middle L:90%
an interaction contract that will provide information about how this

321
00:18:40.849 --> 00:18:45.190 A:middle L:90%
component interacts with other components. Okay, so what

322
00:18:45.190 --> 00:18:48.519 A:middle L:90%
this is saying in a very maybe verbal this way

323
00:18:48.529 --> 00:18:52.250 A:middle L:90%
when provided takes second from clock. So when when

324
00:18:52.250 --> 00:18:56.559 A:middle L:90%
this guy here provides me with some time information,

325
00:18:57.140 --> 00:19:00.980 A:middle L:90%
get the consumption from the electric meter. As you

326
00:19:00.980 --> 00:19:06.079 A:middle L:90%
can see here, we are giving now some details

327
00:19:06.079 --> 00:19:08.119 A:middle L:90%
about who's pushing information. Who is getting information.

328
00:19:08.130 --> 00:19:11.589 A:middle L:90%
Okay. The pull push information here is being given

329
00:19:11.599 --> 00:19:18.490 A:middle L:90%
in this interaction contract here. Okay, And when

330
00:19:18.490 --> 00:19:22.079 A:middle L:90%
that's done, maybe we'll publish some value. Maybe

331
00:19:22.079 --> 00:19:26.359 A:middle L:90%
we'll publish some integer value. Okay. All right

332
00:19:27.539 --> 00:19:32.920 A:middle L:90%
. And we're saying maybe because in fact, we

333
00:19:32.920 --> 00:19:37.069 A:middle L:90%
won't publish any new value if the we realized that

334
00:19:37.069 --> 00:19:41.440 A:middle L:90%
the cooker has been on for, uh, some

335
00:19:41.440 --> 00:19:45.450 A:middle L:90%
time, but not too much. Okay, um

336
00:19:45.339 --> 00:19:48.269 A:middle L:90%
, let me show you the notify component now.

337
00:19:48.269 --> 00:19:52.410 A:middle L:90%
So if we do get a message, uh,

338
00:19:52.420 --> 00:19:56.009 A:middle L:90%
from the alert okay to the notified component. So

339
00:19:56.009 --> 00:20:00.539 A:middle L:90%
here's the specification of that component. What it says

340
00:20:00.539 --> 00:20:04.339 A:middle L:90%
is that when I'm being provided an alert from the

341
00:20:04.339 --> 00:20:08.019 A:middle L:90%
alert component, then I'm going to do an action

342
00:20:08.019 --> 00:20:11.609 A:middle L:90%
, which is to ask a question to a TV

343
00:20:11.609 --> 00:20:14.390 A:middle L:90%
prompter. So this is how we're going to interact

344
00:20:14.390 --> 00:20:17.549 A:middle L:90%
with the user. We're going to prompt the user

345
00:20:17.940 --> 00:20:19.460 A:middle L:90%
, okay? To decide whether or not he or

346
00:20:19.460 --> 00:20:22.549 A:middle L:90%
she wants to turn off the cooker. Okay.

347
00:20:23.539 --> 00:20:27.150 A:middle L:90%
And now we're going to get the answer to that

348
00:20:27.160 --> 00:20:32.470 A:middle L:90%
question through the remote control. Okay, so,

349
00:20:32.480 --> 00:20:34.190 A:middle L:90%
I mean, we we didn't really invent that application

350
00:20:34.200 --> 00:20:37.309 A:middle L:90%
. Uh, this is some work that we're doing

351
00:20:37.309 --> 00:20:42.130 A:middle L:90%
with some some research project we have for assisted living

352
00:20:42.140 --> 00:20:48.650 A:middle L:90%
technology where we're trying to apply that work to uh

353
00:20:48.660 --> 00:20:52.390 A:middle L:90%
, assisted living for the elderly. And, uh

354
00:20:52.400 --> 00:20:56.660 A:middle L:90%
, this is a typical problem that arises, Uh

355
00:20:56.670 --> 00:21:00.130 A:middle L:90%
, with when you have some some cognitive deficiencies is

356
00:21:00.130 --> 00:21:03.569 A:middle L:90%
that to forget about things that you've done like,

357
00:21:03.579 --> 00:21:07.119 A:middle L:90%
and it happens to everybody. I mean, just

358
00:21:07.119 --> 00:21:11.140 A:middle L:90%
forget you just forgot that you forgot you had something

359
00:21:11.150 --> 00:21:15.789 A:middle L:90%
on the stove. And so and the idea that

360
00:21:15.789 --> 00:21:19.759 A:middle L:90%
we had as well was to use devices that were

361
00:21:19.769 --> 00:21:23.769 A:middle L:90%
, uh, common, uh was, uh,

362
00:21:25.240 --> 00:21:27.690 A:middle L:90%
easy to use. Okay. For elderly users.

363
00:21:27.690 --> 00:21:30.579 A:middle L:90%
And, of course, the remote control of the

364
00:21:30.579 --> 00:21:33.059 A:middle L:90%
TV is something very, very easy to use.

365
00:21:33.940 --> 00:21:37.069 A:middle L:90%
Okay, so now we're prompting something okay to the

366
00:21:37.069 --> 00:21:40.789 A:middle L:90%
user, and the user is supposed to give us

367
00:21:40.799 --> 00:21:45.789 A:middle L:90%
an answer. So this remote turn off component here

368
00:21:45.799 --> 00:21:49.299 A:middle L:90%
, okay, is doing is producing a boolean value

369
00:21:49.299 --> 00:21:52.789 A:middle L:90%
. It's maybe published and says when I get an

370
00:21:52.789 --> 00:21:56.549 A:middle L:90%
answer from the user using the remote control. Okay

371
00:21:56.549 --> 00:21:57.750 A:middle L:90%
, well, I get is that I'll just check

372
00:21:57.750 --> 00:22:03.339 A:middle L:90%
that the cooker is still on. Okay. And

373
00:22:03.349 --> 00:22:04.349 A:middle L:90%
, uh, if that's the case, then I'll

374
00:22:04.349 --> 00:22:10.029 A:middle L:90%
just call the turn off component that is supposedly going

375
00:22:10.029 --> 00:22:12.470 A:middle L:90%
to turn off the cooker. So here is the

376
00:22:12.480 --> 00:22:15.529 A:middle L:90%
turn of component. There's something interesting about it is

377
00:22:15.529 --> 00:22:18.579 A:middle L:90%
that when when it gets when it gets a value

378
00:22:18.579 --> 00:22:21.740 A:middle L:90%
from the remote turn of component. As you can

379
00:22:21.740 --> 00:22:26.319 A:middle L:90%
see here, the only action that it's supposed to

380
00:22:26.319 --> 00:22:27.640 A:middle L:90%
do is to turn off the cooker. And right

381
00:22:27.640 --> 00:22:30.349 A:middle L:90%
there you can see already that the designer has given

382
00:22:30.349 --> 00:22:33.480 A:middle L:90%
us some interesting information because what it says essentially,

383
00:22:33.490 --> 00:22:37.190 A:middle L:90%
is that that application. If if I can make

384
00:22:37.190 --> 00:22:41.960 A:middle L:90%
sure that the implementation is in conformance with that design

385
00:22:41.339 --> 00:22:45.190 A:middle L:90%
, what happens that that application is completely unable to

386
00:22:45.190 --> 00:22:49.069 A:middle L:90%
turn on the cooker by itself? Okay, and

387
00:22:49.069 --> 00:22:53.170 A:middle L:90%
that's expressed in a pretty concise way in the design

388
00:22:53.640 --> 00:22:57.349 A:middle L:90%
. Okay, and that's that's important when you're doing

389
00:22:57.359 --> 00:23:00.930 A:middle L:90%
, you know, uh, software development. That's

390
00:23:00.930 --> 00:23:04.519 A:middle L:90%
kind of, uh, intertwined with, uh,

391
00:23:04.529 --> 00:23:10.630 A:middle L:90%
vulnerable users. Okay, so let's see what we

392
00:23:10.630 --> 00:23:14.279 A:middle L:90%
get for those decorations. What do we get for

393
00:23:14.279 --> 00:23:18.849 A:middle L:90%
that? Okay, so for every design unit,

394
00:23:18.859 --> 00:23:22.619 A:middle L:90%
Okay, some piece of code is going to be

395
00:23:22.619 --> 00:23:26.349 A:middle L:90%
generated and usually takes the form of an abstract class

396
00:23:26.359 --> 00:23:32.940 A:middle L:90%
in Java. So let's look at this example here

397
00:23:32.950 --> 00:23:34.380 A:middle L:90%
. Okay. The, uh, the alert,

398
00:23:34.390 --> 00:23:41.269 A:middle L:90%
context, component context declaration. We can see that

399
00:23:41.039 --> 00:23:45.009 A:middle L:90%
this thing here is being compiled into an abstract class

400
00:23:45.019 --> 00:23:49.039 A:middle L:90%
okay, which is called abstract alert here. Okay

401
00:23:49.039 --> 00:23:52.599 A:middle L:90%
, but remember, we want I mean, this

402
00:23:52.599 --> 00:23:56.910 A:middle L:90%
is where we actually bridge, uh, the our

403
00:23:56.910 --> 00:24:00.650 A:middle L:90%
design language with the general purpose language. Okay,

404
00:24:00.650 --> 00:24:03.140 A:middle L:90%
this is the place where, okay, you declared

405
00:24:03.150 --> 00:24:04.559 A:middle L:90%
your components. Now you need to implement them.

406
00:24:04.940 --> 00:24:07.190 A:middle L:90%
Okay. And what we're going to do is that

407
00:24:07.190 --> 00:24:11.059 A:middle L:90%
where we will assist you in doing that by generating

408
00:24:11.059 --> 00:24:15.660 A:middle L:90%
those abstracts classes. And what you have to do

409
00:24:15.660 --> 00:24:18.690 A:middle L:90%
is that you have to extend those abstract abstract classes

410
00:24:18.700 --> 00:24:23.619 A:middle L:90%
in order to implement those components. So here,

411
00:24:23.619 --> 00:24:27.349 A:middle L:90%
for instance, we we extend the abstract alert class

412
00:24:27.359 --> 00:24:32.460 A:middle L:90%
, okay. To define this alert class. Okay

413
00:24:33.440 --> 00:24:37.670 A:middle L:90%
, Uh, if you are working in a development

414
00:24:37.670 --> 00:24:40.319 A:middle L:90%
environment like eclipse, what this is going to do

415
00:24:40.319 --> 00:24:41.460 A:middle L:90%
is that this is going to generate a skeleton.

416
00:24:41.470 --> 00:24:45.710 A:middle L:90%
Okay? Where you have to essentially fill the holes

417
00:24:45.720 --> 00:24:48.549 A:middle L:90%
. Okay, that you have to implement in order

418
00:24:48.549 --> 00:24:52.440 A:middle L:90%
to finish your your implementation work. So here,

419
00:24:52.440 --> 00:24:53.880 A:middle L:90%
for instance, we had, of course, this

420
00:24:53.890 --> 00:24:56.960 A:middle L:90%
we have We need to have some kind of a

421
00:24:56.960 --> 00:24:59.799 A:middle L:90%
call back. Okay. Something that says remember here

422
00:24:59.799 --> 00:25:02.880 A:middle L:90%
It says when provided six second. Okay, So

423
00:25:02.880 --> 00:25:04.630 A:middle L:90%
what it means is that that component is going to

424
00:25:04.630 --> 00:25:11.849 A:middle L:90%
be invoked every time the clock. Okay, uh

425
00:25:11.859 --> 00:25:17.400 A:middle L:90%
, generates a tick second. Okay. So,

426
00:25:17.410 --> 00:25:18.569 A:middle L:90%
uh, so this is what's happening here. We

427
00:25:18.569 --> 00:25:22.079 A:middle L:90%
have this, uh, this procedure here that we

428
00:25:22.079 --> 00:25:23.319 A:middle L:90%
have this method here that we have to to,

429
00:25:23.329 --> 00:25:26.069 A:middle L:90%
uh, to implement. Okay, This is because

430
00:25:26.069 --> 00:25:29.339 A:middle L:90%
we have a when provided six seconds. So we

431
00:25:29.339 --> 00:25:32.970 A:middle L:90%
have generated an abstract method that we now have to

432
00:25:32.970 --> 00:25:36.670 A:middle L:90%
implement. Okay. Uh, of course, this

433
00:25:36.670 --> 00:25:37.309 A:middle L:90%
is getting, you know, the tick. Second

434
00:25:37.309 --> 00:25:42.130 A:middle L:90%
, whatever value that device here is generating, okay

435
00:25:42.130 --> 00:25:48.660 A:middle L:90%
, it's producing, and we have discovered parameter here

436
00:25:48.779 --> 00:25:52.190 A:middle L:90%
, okay? And that discovered parameter is going to

437
00:25:52.190 --> 00:25:56.579 A:middle L:90%
be the key thing. Two the enabling parameter to

438
00:25:56.579 --> 00:26:00.799 A:middle L:90%
actually get our hands on the electric meter. Because

439
00:26:00.799 --> 00:26:03.250 A:middle L:90%
so far, we don't have the electric meter.

440
00:26:03.259 --> 00:26:06.509 A:middle L:90%
So we got we got the clock Essentially, that

441
00:26:06.519 --> 00:26:08.420 A:middle L:90%
invoked us, push some value into us. Uh

442
00:26:08.430 --> 00:26:11.119 A:middle L:90%
, in order to find out whether we we go

443
00:26:11.130 --> 00:26:14.769 A:middle L:90%
, We went over the cooker, went over the

444
00:26:14.839 --> 00:26:17.890 A:middle L:90%
the time limit, but now we have to,

445
00:26:17.900 --> 00:26:19.680 A:middle L:90%
uh, we have to get our hands on the

446
00:26:19.680 --> 00:26:22.470 A:middle L:90%
electric meter in order to know whether, uh,

447
00:26:22.480 --> 00:26:25.960 A:middle L:90%
you know, the this this cooker is still on

448
00:26:26.339 --> 00:26:29.849 A:middle L:90%
. Okay, and we have a may be published

449
00:26:29.849 --> 00:26:33.259 A:middle L:90%
here. So this is, uh this is a

450
00:26:33.269 --> 00:26:34.970 A:middle L:90%
type that were generated, which is an alert value

451
00:26:34.970 --> 00:26:41.720 A:middle L:90%
publishable. That's that's all generated by our, uh

452
00:26:41.730 --> 00:26:45.059 A:middle L:90%
, generator of of programming, farm works. Okay

453
00:26:47.440 --> 00:26:48.920 A:middle L:90%
, uh, so let's see how we implement.

454
00:26:48.930 --> 00:26:55.319 A:middle L:90%
Okay, So So, uh, Eclipse, for

455
00:26:55.319 --> 00:26:56.940 A:middle L:90%
instance, generated that skeleton, and now we need

456
00:26:56.940 --> 00:27:00.450 A:middle L:90%
to fill the holes. Okay, so we're essentially

457
00:27:00.450 --> 00:27:04.559 A:middle L:90%
implementing okay, what we're supposed to do, okay

458
00:27:04.569 --> 00:27:12.039 A:middle L:90%
. When the clock invokes that component, Uh,

459
00:27:12.049 --> 00:27:15.869 A:middle L:90%
okay, so we we do some some calculation here

460
00:27:15.869 --> 00:27:18.819 A:middle L:90%
to make sure that, uh, to determine whether

461
00:27:18.819 --> 00:27:21.660 A:middle L:90%
or not, uh, we've went over the limit

462
00:27:22.039 --> 00:27:26.119 A:middle L:90%
. Um, what's interesting here is that this is

463
00:27:26.119 --> 00:27:29.009 A:middle L:90%
this is something that we, uh we need to

464
00:27:29.009 --> 00:27:32.519 A:middle L:90%
do in order to implement. That component is,

465
00:27:32.529 --> 00:27:33.849 A:middle L:90%
as I said, to get our hands on the

466
00:27:33.859 --> 00:27:37.609 A:middle L:90%
the electric meter. Okay. And we do that

467
00:27:37.609 --> 00:27:41.670 A:middle L:90%
by this discover parameter that allows us to with this

468
00:27:44.440 --> 00:27:47.089 A:middle L:90%
with this request here. Okay, What we do

469
00:27:47.089 --> 00:27:49.859 A:middle L:90%
is that we're discovering the electric meter. Okay,

470
00:27:51.240 --> 00:27:52.529 A:middle L:90%
so, I mean, the details are not important

471
00:27:52.529 --> 00:27:56.089 A:middle L:90%
here, but what you should see is that,

472
00:27:56.099 --> 00:27:59.970 A:middle L:90%
uh, we are doing a discovery of the electric

473
00:27:59.970 --> 00:28:03.150 A:middle L:90%
meter by, uh, you know, a symbolic

474
00:28:03.150 --> 00:28:04.069 A:middle L:90%
name here. Okay, So what it means is

475
00:28:04.069 --> 00:28:07.700 A:middle L:90%
that when we installed, okay, the infrastructure for

476
00:28:07.710 --> 00:28:11.009 A:middle L:90%
our user. Okay, we we installed the electric

477
00:28:11.009 --> 00:28:14.950 A:middle L:90%
meter, and we declared the fact that, of

478
00:28:14.950 --> 00:28:15.980 A:middle L:90%
course, the electric meter was in the kitchen.

479
00:28:15.990 --> 00:28:18.579 A:middle L:90%
Okay, So that the application can Then when it

480
00:28:18.589 --> 00:28:22.359 A:middle L:90%
gets deployed, okay, can get the electric meter

481
00:28:22.369 --> 00:28:26.369 A:middle L:90%
of the cooker. Okay. Again, All that

482
00:28:26.369 --> 00:28:30.000 A:middle L:90%
was generated automatically. And one thing that's interesting is

483
00:28:30.000 --> 00:28:34.170 A:middle L:90%
that you can only discover the things that were declared

484
00:28:34.180 --> 00:28:37.569 A:middle L:90%
in your design. Okay, so there's no way

485
00:28:37.569 --> 00:28:41.619 A:middle L:90%
you can mess around with other devices that weren't in

486
00:28:41.619 --> 00:28:44.029 A:middle L:90%
the design. Okay? And that's a That's a

487
00:28:44.029 --> 00:28:45.859 A:middle L:90%
key thing. You can only discover What what is

488
00:28:45.869 --> 00:28:49.259 A:middle L:90%
, uh, in conformance with the design. And

489
00:28:49.259 --> 00:28:55.480 A:middle L:90%
here, Okay, you have to return a value

490
00:28:55.480 --> 00:28:57.980 A:middle L:90%
of the type alert value publishable. And again,

491
00:28:57.980 --> 00:29:03.289 A:middle L:90%
we're leveraging the, uh, type system of java

492
00:29:03.299 --> 00:29:04.170 A:middle L:90%
, you know, to force the programmer to produce

493
00:29:04.170 --> 00:29:07.559 A:middle L:90%
the value of that type. And, uh,

494
00:29:07.569 --> 00:29:11.460 A:middle L:90%
so if we have gone over the time limit of

495
00:29:11.460 --> 00:29:15.960 A:middle L:90%
the cooker being on, then we will publish that

496
00:29:15.960 --> 00:29:18.690 A:middle L:90%
value, uh, to, uh, the component

497
00:29:18.690 --> 00:29:21.059 A:middle L:90%
that will send an alert on the TV, and

498
00:29:21.059 --> 00:29:22.950 A:middle L:90%
that's we're gonna, you know, tag that as

499
00:29:22.950 --> 00:29:26.210 A:middle L:90%
true. Okay, so that means that value gets

500
00:29:26.210 --> 00:29:27.640 A:middle L:90%
published. Otherwise the value gets, uh, this

501
00:29:27.640 --> 00:29:30.769 A:middle L:90%
false value, which means it doesn't get published.

502
00:29:30.339 --> 00:29:36.859 A:middle L:90%
Okay, Um all right, so So that's the

503
00:29:36.859 --> 00:29:40.440 A:middle L:90%
example we I wanted to show you, and and

504
00:29:40.440 --> 00:29:44.529 A:middle L:90%
I wanted to, uh for you to see that

505
00:29:44.539 --> 00:29:48.509 A:middle L:90%
the framework generator actually does a really good job of

506
00:29:48.519 --> 00:29:52.779 A:middle L:90%
generating all the kind of boilerplate code that we don't

507
00:29:52.779 --> 00:29:53.960 A:middle L:90%
want to deal with. Okay? And well,

508
00:29:53.960 --> 00:29:59.779 A:middle L:90%
the programmer concentrates on is really the the application logic

509
00:29:59.789 --> 00:30:02.240 A:middle L:90%
. Okay, All the kind of the bookkeeping and

510
00:30:02.240 --> 00:30:03.769 A:middle L:90%
all that, okay, is completely abstracted away.

511
00:30:04.039 --> 00:30:07.569 A:middle L:90%
Okay, so, uh, as I said,

512
00:30:07.569 --> 00:30:10.329 A:middle L:90%
I mean, this is kind of a project that's

513
00:30:10.329 --> 00:30:12.029 A:middle L:90%
been going on for five years, so we've covered

514
00:30:12.029 --> 00:30:15.690 A:middle L:90%
quite a quite some ground in in this in this

515
00:30:15.690 --> 00:30:19.390 A:middle L:90%
approach. Uh, one thing we did was to

516
00:30:19.400 --> 00:30:23.759 A:middle L:90%
, uh, essentially, uh, define a methodology

517
00:30:23.769 --> 00:30:26.849 A:middle L:90%
. That's kind of driven by this design language.

518
00:30:26.859 --> 00:30:30.599 A:middle L:90%
Okay, Uh, and that that is what exactly

519
00:30:30.599 --> 00:30:33.680 A:middle L:90%
should you do? And how should you? Should

520
00:30:33.680 --> 00:30:37.690 A:middle L:90%
you leverage the suite of tools that we're providing you

521
00:30:37.690 --> 00:30:41.170 A:middle L:90%
with? Okay. To develop applications. Um,

522
00:30:41.640 --> 00:30:48.500 A:middle L:90%
what we did as well was to, uh uh

523
00:30:48.500 --> 00:30:52.519 A:middle L:90%
huh. To define precisely what we meant by this

524
00:30:52.529 --> 00:30:56.019 A:middle L:90%
functional design. And this is what I showed you

525
00:30:56.019 --> 00:30:59.589 A:middle L:90%
in those interaction contracts. Okay, so we we

526
00:30:59.599 --> 00:31:03.289 A:middle L:90%
we came up with this this way of expressing the

527
00:31:03.299 --> 00:31:06.819 A:middle L:90%
functional design of an application, and we showed the

528
00:31:06.819 --> 00:31:10.450 A:middle L:90%
kind of program verifications that could be done based on

529
00:31:10.539 --> 00:31:18.250 A:middle L:90%
this contract declaration. Um, we also showed how

530
00:31:18.250 --> 00:31:23.259 A:middle L:90%
you can leverage those decorations to generate programming frameworks.

531
00:31:23.269 --> 00:31:26.400 A:middle L:90%
Okay. And that that's very important in the sense

532
00:31:26.400 --> 00:31:29.900 A:middle L:90%
that, uh, as I said, it supports

533
00:31:29.900 --> 00:31:33.069 A:middle L:90%
the programming, but also, it kind of forces

534
00:31:33.069 --> 00:31:38.339 A:middle L:90%
the programmer to implement, uh, certain aspects of

535
00:31:38.339 --> 00:31:41.460 A:middle L:90%
the application. And for that, we're leveraging again

536
00:31:41.470 --> 00:31:47.730 A:middle L:90%
. The type system of Java. Yes, language

537
00:31:47.740 --> 00:31:53.509 A:middle L:90%
. Is there more to Yes. Yes, yes

538
00:31:53.519 --> 00:31:56.930 A:middle L:90%
, yes. There are other things. Like,

539
00:31:56.940 --> 00:32:00.740 A:middle L:90%
you know, you can You can, um You

540
00:32:00.740 --> 00:32:02.049 A:middle L:90%
can, For instance, um, so I said

541
00:32:02.049 --> 00:32:06.480 A:middle L:90%
, maybe published, but there's also always published or

542
00:32:06.480 --> 00:32:08.259 A:middle L:90%
not published, So you may wonder why we insisted

543
00:32:08.259 --> 00:32:12.420 A:middle L:90%
on all these variations Is because sometimes you want to

544
00:32:12.420 --> 00:32:15.160 A:middle L:90%
make sure that, for instance, if you're getting

545
00:32:15.160 --> 00:32:20.759 A:middle L:90%
some, uh, some critical, Um uh signal

546
00:32:20.769 --> 00:32:22.309 A:middle L:90%
from a from a sensor. You want to make

547
00:32:22.309 --> 00:32:27.259 A:middle L:90%
sure that that there will be a functional chain Okay

548
00:32:27.269 --> 00:32:30.119 A:middle L:90%
, up to some, uh, actuator. Okay

549
00:32:30.130 --> 00:32:32.269 A:middle L:90%
, for some critical situations. So, for instance

550
00:32:32.269 --> 00:32:36.809 A:middle L:90%
, the sure that the fire detector, for instance

551
00:32:36.819 --> 00:32:40.230 A:middle L:90%
, is always linked to some alarm, for instance

552
00:32:40.240 --> 00:32:43.190 A:middle L:90%
. Okay, that you will trigger, uh,

553
00:32:43.200 --> 00:32:45.940 A:middle L:90%
whenever you know, that guy sends a signal.

554
00:32:45.950 --> 00:32:47.430 A:middle L:90%
Okay. Uh, what I was thinking about is

555
00:32:47.430 --> 00:32:51.099 A:middle L:90%
, is there any way to represent state? So

556
00:32:51.109 --> 00:32:52.529 A:middle L:90%
, for example, in this figure, supposed that

557
00:32:52.539 --> 00:32:55.089 A:middle L:90%
you wanted to model the safety requirement that if the

558
00:32:55.099 --> 00:32:59.619 A:middle L:90%
user ignores five requests, you're going to turn the

559
00:32:59.740 --> 00:33:01.980 A:middle L:90%
car off regardless of anything else. Okay. You

560
00:33:01.980 --> 00:33:06.890 A:middle L:90%
need some state? Yes. Yes, you can

561
00:33:06.890 --> 00:33:09.029 A:middle L:90%
express it, but you can express it at the

562
00:33:09.029 --> 00:33:13.859 A:middle L:90%
Java level. Okay. Uh, it is not

563
00:33:13.869 --> 00:33:15.940 A:middle L:90%
as it is now. It is not is not

564
00:33:15.940 --> 00:33:17.599 A:middle L:90%
the case. So I understand. Uh, so

565
00:33:17.599 --> 00:33:20.759 A:middle L:90%
this is a This is a discussion I had yesterday

566
00:33:20.759 --> 00:33:22.680 A:middle L:90%
, and and there's there's some details that I'm kind

567
00:33:22.680 --> 00:33:25.349 A:middle L:90%
of grossing over here, which is that there's one

568
00:33:25.349 --> 00:33:30.829 A:middle L:90%
thing that's really critical is exactly where you're going to

569
00:33:30.839 --> 00:33:32.920 A:middle L:90%
You're going to You're going to position the design language

570
00:33:32.920 --> 00:33:36.880 A:middle L:90%
I mean, if you say too little, okay

571
00:33:36.890 --> 00:33:38.390 A:middle L:90%
, you won't generate much. And the programmer is

572
00:33:38.390 --> 00:33:40.690 A:middle L:90%
not going to have, you know, some benefit

573
00:33:40.690 --> 00:33:45.750 A:middle L:90%
for the time spend designing things. If you say

574
00:33:45.750 --> 00:33:49.519 A:middle L:90%
too much, then the programming is useless. I

575
00:33:49.519 --> 00:33:51.309 A:middle L:90%
mean, there's nothing to be done there. It's

576
00:33:51.309 --> 00:33:53.569 A:middle L:90%
and you are somehow, you know, replicating the

577
00:33:53.569 --> 00:33:57.589 A:middle L:90%
work of a of A programming language. So there's

578
00:33:57.589 --> 00:34:00.980 A:middle L:90%
really a balance to strike between those two things.

579
00:34:00.980 --> 00:34:02.119 A:middle L:90%
And you're right. I mean, this could be

580
00:34:02.130 --> 00:34:08.130 A:middle L:90%
a very critical requirement in a particular domain. Okay

581
00:34:08.139 --> 00:34:13.329 A:middle L:90%
? And one could imagine that adding that, you

582
00:34:13.329 --> 00:34:15.119 A:middle L:90%
know, dimension to our design language. If it

583
00:34:15.119 --> 00:34:19.420 A:middle L:90%
were critical in in the in the in the particular

584
00:34:19.420 --> 00:34:22.260 A:middle L:90%
domain. Yes. Yes. Yeah. Um,

585
00:34:23.239 --> 00:34:27.940 A:middle L:90%
okay. So? So that generative programming approach here

586
00:34:27.949 --> 00:34:30.670 A:middle L:90%
is interesting. In a sense that you you really

587
00:34:30.670 --> 00:34:34.289 A:middle L:90%
can, um, uh, generate a lot of

588
00:34:34.289 --> 00:34:37.079 A:middle L:90%
code that obstructs over things like, um uh,

589
00:34:37.090 --> 00:34:40.820 A:middle L:90%
for instance, Uh, we we we've seen we've

590
00:34:40.820 --> 00:34:44.559 A:middle L:90%
seen devices here, but nothing tells us whether there

591
00:34:44.559 --> 00:34:46.800 A:middle L:90%
are real devices or simulated devices. Okay, So

592
00:34:46.800 --> 00:34:49.389 A:middle L:90%
, in fact, we built something. I'll show

593
00:34:49.389 --> 00:34:52.110 A:middle L:90%
you very small video where you can see that we

594
00:34:52.110 --> 00:34:57.000 A:middle L:90%
can simulate actually uh, an environment. Okay.

595
00:34:57.000 --> 00:34:59.369 A:middle L:90%
A physical environment. We don't have to have,

596
00:34:59.380 --> 00:35:01.489 A:middle L:90%
uh, uh, you know, only concrete devices

597
00:35:01.489 --> 00:35:02.969 A:middle L:90%
, or it can be a mixture of the two

598
00:35:04.239 --> 00:35:06.079 A:middle L:90%
. Okay, so we have done some work on

599
00:35:06.079 --> 00:35:09.239 A:middle L:90%
simulation. Okay, Um, we also did some

600
00:35:09.239 --> 00:35:13.969 A:middle L:90%
work on having different kind of underlying distributed technology.

601
00:35:13.969 --> 00:35:15.150 A:middle L:90%
So we use, uh, we use sip,

602
00:35:15.150 --> 00:35:17.429 A:middle L:90%
which is a session initiation protocol. We used corba

603
00:35:17.429 --> 00:35:20.719 A:middle L:90%
. We use web services. We don't know what's

604
00:35:20.719 --> 00:35:24.409 A:middle L:90%
the underlying distributed technology? Um, we did some

605
00:35:24.409 --> 00:35:29.489 A:middle L:90%
work on non functional design as well. So some

606
00:35:29.489 --> 00:35:31.630 A:middle L:90%
work on declaring air handling okay, at the design

607
00:35:31.630 --> 00:35:35.519 A:middle L:90%
level, which is, which is something that people

608
00:35:35.519 --> 00:35:38.489 A:middle L:90%
hadn't really uh, investigated before? Like, how

609
00:35:38.489 --> 00:35:42.719 A:middle L:90%
can you express air handling? Usually you do that

610
00:35:42.730 --> 00:35:45.179 A:middle L:90%
, uh, using, try and catch directly in

611
00:35:45.179 --> 00:35:46.360 A:middle L:90%
the program. And everybody knows that this is,

612
00:35:46.539 --> 00:35:49.880 A:middle L:90%
you know, it's it's it's getting the code is

613
00:35:49.880 --> 00:35:52.190 A:middle L:90%
getting very messy with that, And and there are

614
00:35:52.190 --> 00:35:53.760 A:middle L:90%
some critical decisions that are buried in the code.

615
00:35:53.769 --> 00:35:57.210 A:middle L:90%
You would like to raise the level of that into

616
00:35:57.210 --> 00:36:00.300 A:middle L:90%
the design so that things become more easier to reason

617
00:36:00.300 --> 00:36:01.619 A:middle L:90%
about. And, uh So So we did some

618
00:36:01.619 --> 00:36:05.079 A:middle L:90%
work there. We did some work in quality of

619
00:36:05.079 --> 00:36:08.329 A:middle L:90%
service contracts as well, because again functional. Once

620
00:36:08.340 --> 00:36:12.139 A:middle L:90%
you get the functional design, it's a great vehicle

621
00:36:12.150 --> 00:36:15.659 A:middle L:90%
to actually express other dimensions of the design. Okay

622
00:36:15.670 --> 00:36:17.559 A:middle L:90%
, so we did things in quality of service contracts

623
00:36:17.559 --> 00:36:20.429 A:middle L:90%
as well. And this is to explain to give

624
00:36:20.429 --> 00:36:22.739 A:middle L:90%
a little context here. We were working with a

625
00:36:22.750 --> 00:36:27.179 A:middle L:90%
company in the UNIX domain, and this is this

626
00:36:27.179 --> 00:36:30.230 A:middle L:90%
is really, uh, concerns that they had and

627
00:36:30.230 --> 00:36:32.719 A:middle L:90%
and in fact, we we ended up doing some

628
00:36:32.719 --> 00:36:36.630 A:middle L:90%
some some some piece of work where we we kind

629
00:36:36.630 --> 00:36:38.190 A:middle L:90%
of gathered, uh, the functional and non functional

630
00:36:38.190 --> 00:36:43.050 A:middle L:90%
design for a particular application, which is the autopilot

631
00:36:43.059 --> 00:36:45.849 A:middle L:90%
kind of showing the, you know, how are

632
00:36:45.860 --> 00:36:47.369 A:middle L:90%
, you know, pieces of of of research here

633
00:36:47.380 --> 00:36:52.130 A:middle L:90%
kind of fit together in a in a full fledged

634
00:36:52.139 --> 00:36:57.039 A:middle L:90%
realistic application. Uh, and and there's some work

635
00:36:57.039 --> 00:37:00.110 A:middle L:90%
that we reported on the on the description of the

636
00:37:00.110 --> 00:37:02.289 A:middle L:90%
whole too sweet. Okay, so that's kind of

637
00:37:02.289 --> 00:37:07.570 A:middle L:90%
give you a picture of what we've done. Let

638
00:37:07.570 --> 00:37:09.320 A:middle L:90%
me show you a little example here on the access

639
00:37:09.320 --> 00:37:12.900 A:middle L:90%
control, you'll see how we do the simulation.

640
00:37:12.909 --> 00:37:15.000 A:middle L:90%
What we wanna do here is to control the access

641
00:37:15.000 --> 00:37:19.300 A:middle L:90%
to, uh, rooms in the building. We

642
00:37:19.300 --> 00:37:22.510 A:middle L:90%
do some simulation of a digital building of agents moving

643
00:37:22.510 --> 00:37:25.039 A:middle L:90%
around. So I'll show you what what our tool

644
00:37:25.039 --> 00:37:28.530 A:middle L:90%
does. And it's a hybrid simulation, because here

645
00:37:28.530 --> 00:37:30.460 A:middle L:90%
you have some components that are actual software components running

646
00:37:30.460 --> 00:37:35.860 A:middle L:90%
for real. Um, so here's what we have

647
00:37:35.869 --> 00:37:37.389 A:middle L:90%
. Uh, so this is this is the layout

648
00:37:37.389 --> 00:37:39.340 A:middle L:90%
. We have a we have some, some physical

649
00:37:39.340 --> 00:37:42.820 A:middle L:90%
layout, and we have logical layout on the top

650
00:37:42.820 --> 00:37:45.579 A:middle L:90%
of it to show limits of rooms and things like

651
00:37:45.579 --> 00:37:47.289 A:middle L:90%
that. And we have little agents here that we

652
00:37:47.289 --> 00:37:51.349 A:middle L:90%
can move around. Um, and here you have

653
00:37:51.349 --> 00:37:54.000 A:middle L:90%
the timeline. Uh, and right. You have

654
00:37:54.000 --> 00:37:59.869 A:middle L:90%
location and other other things. Um, miss,

655
00:37:59.869 --> 00:38:04.050 A:middle L:90%
you killed? Yeah. Yeah. So the first

656
00:38:04.050 --> 00:38:07.659 A:middle L:90%
thing here is Agnes are Our agent is gonna so

657
00:38:07.659 --> 00:38:08.809 A:middle L:90%
you can see here. You have a motion detector

658
00:38:08.820 --> 00:38:10.860 A:middle L:90%
that went on, and you can see the visualization

659
00:38:10.860 --> 00:38:15.070 A:middle L:90%
of that. So then we can move agents around

660
00:38:15.079 --> 00:38:15.820 A:middle L:90%
. So here, for instance, we locked those

661
00:38:15.820 --> 00:38:19.469 A:middle L:90%
two rooms, okay? And when Agnes is gonna

662
00:38:19.469 --> 00:38:22.030 A:middle L:90%
go around, she's gonna be denied the access of

663
00:38:22.030 --> 00:38:25.300 A:middle L:90%
this room. Um right. And then then we're

664
00:38:25.309 --> 00:38:30.030 A:middle L:90%
unlocking those doors and and and allowing Agnes to enter

665
00:38:30.030 --> 00:38:31.219 A:middle L:90%
a room. And here you will see that the

666
00:38:31.219 --> 00:38:35.940 A:middle L:90%
motion detector. So here the lock is open,

667
00:38:35.940 --> 00:38:37.289 A:middle L:90%
and then the motion detector. Uh, Okay,

668
00:38:37.289 --> 00:38:39.010 A:middle L:90%
So this is just an example to show you that

669
00:38:39.019 --> 00:38:43.679 A:middle L:90%
, actually, the this code, this application okay

670
00:38:43.690 --> 00:38:45.630 A:middle L:90%
, is the same, whether it's simulated or whether

671
00:38:45.630 --> 00:38:49.440 A:middle L:90%
it's run on the on the real on the real

672
00:38:49.449 --> 00:38:52.780 A:middle L:90%
, uh, environment. Okay. And the other

673
00:38:52.780 --> 00:38:55.380 A:middle L:90%
example, uh, how am I doing in terms

674
00:38:55.380 --> 00:39:00.039 A:middle L:90%
of time? Uh, Okay. So just wrap

675
00:39:00.039 --> 00:39:05.820 A:middle L:90%
it up 15 minutes. Okay. Good. Uh

676
00:39:05.829 --> 00:39:08.230 A:middle L:90%
, so a little bit of time to explain what

677
00:39:08.230 --> 00:39:10.670 A:middle L:90%
the autopilot is. It's a real It's a real

678
00:39:10.670 --> 00:39:14.630 A:middle L:90%
size application that we actually spend a lot of time

679
00:39:14.639 --> 00:39:15.940 A:middle L:90%
working with. The people in Talas, this unique

680
00:39:15.949 --> 00:39:22.340 A:middle L:90%
company. Um, I wanted to get the requirements

681
00:39:22.340 --> 00:39:25.010 A:middle L:90%
that they're using in real life. Um, it's

682
00:39:25.010 --> 00:39:28.690 A:middle L:90%
safety. Critical system. Of course. We wanted

683
00:39:28.690 --> 00:39:31.329 A:middle L:90%
to capture the functional and nonfunctional requirements, and we

684
00:39:31.329 --> 00:39:34.139 A:middle L:90%
used, of course, we didn't use a real

685
00:39:34.139 --> 00:39:37.260 A:middle L:90%
plane. We used a realistic simulator, which is

686
00:39:37.260 --> 00:39:39.800 A:middle L:90%
flight gear. Maybe some of some of you know

687
00:39:39.800 --> 00:39:43.710 A:middle L:90%
that, uh, and interestingly, we did a

688
00:39:43.719 --> 00:39:45.710 A:middle L:90%
kind of we duplicated that work for not a pilot

689
00:39:45.710 --> 00:39:51.690 A:middle L:90%
for drones. The drones. Um Right, so

690
00:39:51.699 --> 00:39:53.099 A:middle L:90%
So this is this is, uh this is part

691
00:39:53.099 --> 00:39:58.239 A:middle L:90%
actually of the autopilot. A visual representation of that

692
00:39:58.250 --> 00:40:00.489 A:middle L:90%
in our dia spec language. So I won't go

693
00:40:00.489 --> 00:40:01.769 A:middle L:90%
into the details of the whole thing. But just

694
00:40:01.780 --> 00:40:06.130 A:middle L:90%
you have some some senses here that are, um

695
00:40:06.130 --> 00:40:07.739 A:middle L:90%
, kind of multi functionality. The initial unit.

696
00:40:07.909 --> 00:40:10.320 A:middle L:90%
Uh, there's the air unit and and and so

697
00:40:10.320 --> 00:40:14.190 A:middle L:90%
on, so forth, the autopilot and a route

698
00:40:14.190 --> 00:40:16.309 A:middle L:90%
manager. And I'll show you a little video afterwards

699
00:40:16.309 --> 00:40:20.400 A:middle L:90%
where you will see those panels, especially the autopilot

700
00:40:20.409 --> 00:40:22.909 A:middle L:90%
gooey. And the route manager that will be shown

701
00:40:22.909 --> 00:40:25.190 A:middle L:90%
on the screen. And the initial unit is a

702
00:40:25.190 --> 00:40:29.289 A:middle L:90%
critical component of an autopilot. Okay, It has

703
00:40:29.289 --> 00:40:32.590 A:middle L:90%
the position of the of the plane, the role

704
00:40:32.599 --> 00:40:36.440 A:middle L:90%
, the heading. So this is a critical component

705
00:40:36.449 --> 00:40:38.599 A:middle L:90%
. And when that component fails, Okay, the

706
00:40:38.610 --> 00:40:44.079 A:middle L:90%
the autopilot needs to be, uh, turned off

707
00:40:44.090 --> 00:40:45.489 A:middle L:90%
. Essentially. Okay. And that's a requirement.

708
00:40:45.489 --> 00:40:47.329 A:middle L:90%
I mean, there are lots of requirements about this

709
00:40:47.340 --> 00:40:50.480 A:middle L:90%
, but this is like the one I want to

710
00:40:50.480 --> 00:40:53.550 A:middle L:90%
illustrate. Uh, today, Um Okay, so

711
00:40:53.559 --> 00:40:55.590 A:middle L:90%
right. So we can have a failure here and

712
00:40:55.590 --> 00:40:58.550 A:middle L:90%
what we need to do in order to be in

713
00:40:58.550 --> 00:41:01.440 A:middle L:90%
conformance with the requirements is that we want to have

714
00:41:01.449 --> 00:41:06.639 A:middle L:90%
on the side here. Still in in our language

715
00:41:06.650 --> 00:41:09.010 A:middle L:90%
. Okay. This kind of, uh, supervisory

716
00:41:09.019 --> 00:41:14.199 A:middle L:90%
layer that's gonna monitor, uh, so this is

717
00:41:14.199 --> 00:41:19.130 A:middle L:90%
really directly using our approach for declaring errors. Okay

718
00:41:19.139 --> 00:41:22.920 A:middle L:90%
, So we want to capture here a failure of

719
00:41:22.920 --> 00:41:24.659 A:middle L:90%
those key components and what we want to do in

720
00:41:24.659 --> 00:41:30.769 A:middle L:90%
accordance to the requirements is to eventually deactivate the autopilot

721
00:41:30.780 --> 00:41:30.960 A:middle L:90%
. And again, this is something you want to

722
00:41:30.960 --> 00:41:34.530 A:middle L:90%
see in the design because this is something that appears

723
00:41:34.539 --> 00:41:37.920 A:middle L:90%
in the requirements. Um, interestingly, for the

724
00:41:37.920 --> 00:41:42.289 A:middle L:90%
purpose of the simulation, we have some, uh

725
00:41:42.300 --> 00:41:45.130 A:middle L:90%
, senses that are emulated, okay. And others

726
00:41:45.130 --> 00:41:49.130 A:middle L:90%
that are real, uh, real, uh,

727
00:41:49.139 --> 00:41:52.719 A:middle L:90%
real devices. So the route manager and the autopilot

728
00:41:52.800 --> 00:41:54.940 A:middle L:90%
, we are actual gooey that that are implemented.

729
00:41:55.110 --> 00:41:58.179 A:middle L:90%
Uh, well, on the on the desktop,

730
00:41:58.190 --> 00:42:02.530 A:middle L:90%
but right and and right that right. So it's

731
00:42:02.530 --> 00:42:07.530 A:middle L:90%
a hybrid simulation that regard. Okay, so So

732
00:42:07.530 --> 00:42:09.230 A:middle L:90%
here, let me show you a bit about what

733
00:42:09.230 --> 00:42:13.360 A:middle L:90%
we have here is the route manager here that we're

734
00:42:13.360 --> 00:42:15.059 A:middle L:90%
gonna use. Okay, This would be what the

735
00:42:15.059 --> 00:42:17.929 A:middle L:90%
pilot would have to to to to use so so

736
00:42:19.099 --> 00:42:22.429 A:middle L:90%
it can change intermittent points. It can change the

737
00:42:22.440 --> 00:42:25.010 A:middle L:90%
final heading. Uh, and as you as you

738
00:42:25.010 --> 00:42:29.110 A:middle L:90%
change those guys, then the essentially the plane is

739
00:42:29.110 --> 00:42:32.889 A:middle L:90%
gonna is gonna change route. Uh, here we

740
00:42:32.889 --> 00:42:37.889 A:middle L:90%
have the control display unit, Uh, that the

741
00:42:37.889 --> 00:42:40.320 A:middle L:90%
pilot will have, and this is essentially saying how

742
00:42:40.320 --> 00:42:45.329 A:middle L:90%
those devices are behaving. Okay, so if one

743
00:42:45.329 --> 00:42:46.690 A:middle L:90%
fails, Okay, the pilot sees that it's failing

744
00:42:46.699 --> 00:42:50.130 A:middle L:90%
, and this is our panel that we added to

745
00:42:50.130 --> 00:42:53.920 A:middle L:90%
inject faults. Okay. Um right. And And

746
00:42:53.920 --> 00:42:58.099 A:middle L:90%
this is this is the the autopilot Okay, that

747
00:42:58.099 --> 00:43:00.429 A:middle L:90%
we can, uh, we can control, so

748
00:43:01.099 --> 00:43:05.059 A:middle L:90%
So we can engage the autopilot. So this is

749
00:43:05.059 --> 00:43:08.010 A:middle L:90%
going to start with the the autopilot being engaged.

750
00:43:08.400 --> 00:43:14.780 A:middle L:90%
Uh, oops. No. Okay, So the

751
00:43:14.780 --> 00:43:15.849 A:middle L:90%
autopilot is engaged, and we're going to show you

752
00:43:15.849 --> 00:43:22.090 A:middle L:90%
that the autopilot is indeed engaged by moving the route

753
00:43:22.090 --> 00:43:23.719 A:middle L:90%
here. Okay. And as you can see,

754
00:43:23.719 --> 00:43:28.289 A:middle L:90%
when you move that, uh, the the plane

755
00:43:28.289 --> 00:43:30.679 A:middle L:90%
changes its route. OK, then we're going to

756
00:43:30.679 --> 00:43:36.380 A:middle L:90%
inject a fault in the inertial unit. So that's

757
00:43:36.380 --> 00:43:38.500 A:middle L:90%
being detected. That's of course, one thing that

758
00:43:38.500 --> 00:43:40.840 A:middle L:90%
that is in the requirement, and as you can

759
00:43:40.840 --> 00:43:44.250 A:middle L:90%
see now, we're changing the route, OK?

760
00:43:44.250 --> 00:43:45.929 A:middle L:90%
And the plane doesn't change Okay, so that's what

761
00:43:45.929 --> 00:43:50.019 A:middle L:90%
you want as a behavior. Um, Then we're

762
00:43:50.019 --> 00:43:54.119 A:middle L:90%
gonna make you know, uh, trigger backup initial

763
00:43:54.119 --> 00:43:59.389 A:middle L:90%
unit. We're gonna engage the autopilot, okay?

764
00:43:59.400 --> 00:44:01.050 A:middle L:90%
And and and and now it can be re engaged

765
00:44:01.050 --> 00:44:04.150 A:middle L:90%
. It can be active because everything is fine.

766
00:44:04.159 --> 00:44:07.389 A:middle L:90%
And now you can see that the autopilot is back

767
00:44:07.389 --> 00:44:09.610 A:middle L:90%
on, okay, It's just to show you that

768
00:44:09.989 --> 00:44:12.739 A:middle L:90%
, you know. So it was kind of interesting

769
00:44:12.739 --> 00:44:17.269 A:middle L:90%
, because again, it's not. It's interesting because

770
00:44:17.269 --> 00:44:20.559 A:middle L:90%
you have this abstraction layer that allows you to run

771
00:44:20.559 --> 00:44:22.809 A:middle L:90%
on a simulator. And it's interesting because you can

772
00:44:22.809 --> 00:44:28.070 A:middle L:90%
test your software prior to deploying it, and and

773
00:44:28.070 --> 00:44:30.980 A:middle L:90%
it's interesting as well because we were able to show

774
00:44:30.989 --> 00:44:34.099 A:middle L:90%
to these people that they could actually see the requirements

775
00:44:34.099 --> 00:44:36.500 A:middle L:90%
being expressed in the design at a high level.

776
00:44:37.690 --> 00:44:40.320 A:middle L:90%
Okay, Uh, so so we're actually using this

777
00:44:40.320 --> 00:44:46.320 A:middle L:90%
technology for the for assisted living in general and and

778
00:44:46.320 --> 00:44:50.199 A:middle L:90%
home automation Home automation in general. Uh, we

779
00:44:50.199 --> 00:44:51.809 A:middle L:90%
We we see that as a kind of an app

780
00:44:51.809 --> 00:44:53.179 A:middle L:90%
store of applications. Okay, that you can you

781
00:44:53.179 --> 00:44:57.550 A:middle L:90%
can actually deploy. And we have this independence with

782
00:44:57.550 --> 00:45:00.869 A:middle L:90%
respect to the devices because we have this abstraction layer

783
00:45:00.880 --> 00:45:02.909 A:middle L:90%
. That's pretty useful because we can be very technology

784
00:45:02.909 --> 00:45:08.380 A:middle L:90%
independent. Um, okay. Expanding on that work

785
00:45:08.389 --> 00:45:13.579 A:middle L:90%
, uh, we are doing, uh we're doing

786
00:45:13.579 --> 00:45:16.630 A:middle L:90%
some work on user evaluation of design driven software development

787
00:45:16.630 --> 00:45:19.340 A:middle L:90%
. I mean, one thing we want to show

788
00:45:19.340 --> 00:45:21.530 A:middle L:90%
is whether or not we're You know how much we're

789
00:45:21.530 --> 00:45:25.090 A:middle L:90%
gaining by doing this design driven software development. Okay

790
00:45:25.099 --> 00:45:29.250 A:middle L:90%
, compared to doing java from scratch. Okay,

791
00:45:29.250 --> 00:45:30.809 A:middle L:90%
so you have no design, uh, phase.

792
00:45:30.820 --> 00:45:34.260 A:middle L:90%
Okay. Uh, so we started some work.

793
00:45:34.260 --> 00:45:37.610 A:middle L:90%
Unfortunately, the postdoc working on that left, So

794
00:45:37.619 --> 00:45:40.019 A:middle L:90%
we, we we we stopped. But hopefully we'll

795
00:45:40.019 --> 00:45:45.059 A:middle L:90%
start again on scalability. We have some work going

796
00:45:45.059 --> 00:45:47.059 A:middle L:90%
on because we are part of a project. I'm

797
00:45:47.059 --> 00:45:50.550 A:middle L:90%
sure there are projects like that here. It's a

798
00:45:50.550 --> 00:45:54.340 A:middle L:90%
smart city project where it's an interesting technology, actually

799
00:45:54.340 --> 00:45:58.420 A:middle L:90%
. That's being deployed in France. It's actually deployed

800
00:45:58.789 --> 00:46:00.210 A:middle L:90%
. Uh, you know, like, as of

801
00:46:00.210 --> 00:46:02.090 A:middle L:90%
now, it's already deployed in France. You have

802
00:46:02.090 --> 00:46:06.679 A:middle L:90%
the senses, and later on, we'll have activities

803
00:46:06.690 --> 00:46:08.789 A:middle L:90%
that are essentially spread everywhere in the city. There

804
00:46:08.789 --> 00:46:17.659 A:middle L:90%
are low band with senses, and they, uh

805
00:46:17.670 --> 00:46:22.059 A:middle L:90%
, they only require very few antennas. Okay,

806
00:46:22.059 --> 00:46:25.000 A:middle L:90%
so for the whole city of Bordeaux, which is

807
00:46:25.000 --> 00:46:29.219 A:middle L:90%
about one million people, uh, you have.

808
00:46:29.219 --> 00:46:31.030 A:middle L:90%
I think something like four or five antennas, which

809
00:46:31.030 --> 00:46:36.380 A:middle L:90%
is not much. Uh, and that's that's the

810
00:46:36.389 --> 00:46:39.239 A:middle L:90%
force of this technology and the census because they don't

811
00:46:39.250 --> 00:46:43.530 A:middle L:90%
emit too much. Okay, uh, they don't

812
00:46:43.530 --> 00:46:46.110 A:middle L:90%
consume battery much, so their lifetime is about,

813
00:46:46.119 --> 00:46:49.300 A:middle L:90%
I think, five or 10 years I can't remember

814
00:46:49.480 --> 00:46:52.139 A:middle L:90%
because they emit, like, every, you know

815
00:46:52.139 --> 00:46:53.110 A:middle L:90%
, three minutes or something like that. So So

816
00:46:53.110 --> 00:46:54.750 A:middle L:90%
it can be deployed just about everywhere. It can

817
00:46:54.750 --> 00:46:57.840 A:middle L:90%
be deployed in a say, uh, you have

818
00:46:57.840 --> 00:47:00.389 A:middle L:90%
some a billboard, for instance. Okay. And

819
00:47:00.389 --> 00:47:02.170 A:middle L:90%
that you can put a little, you know,

820
00:47:02.170 --> 00:47:05.079 A:middle L:90%
censor there. That's going to make sure that you

821
00:47:05.079 --> 00:47:07.150 A:middle L:90%
know that billboard is functioning, for instance. Okay

822
00:47:07.159 --> 00:47:10.179 A:middle L:90%
, you can put that just about everywhere. Uh

823
00:47:10.190 --> 00:47:13.860 A:middle L:90%
, and so So we're part of this consortium.

824
00:47:13.869 --> 00:47:16.010 A:middle L:90%
Uh, and, uh, the idea there is

825
00:47:16.010 --> 00:47:19.409 A:middle L:90%
that we're gonna have lots of senses, of course

826
00:47:19.679 --> 00:47:22.860 A:middle L:90%
, spread across the city. And there's some scalability

827
00:47:22.869 --> 00:47:25.469 A:middle L:90%
, uh, thing that we will be interested in

828
00:47:25.469 --> 00:47:29.300 A:middle L:90%
doing because we are part of this consortium in order

829
00:47:29.300 --> 00:47:31.599 A:middle L:90%
to bring the kind of app store, if you

830
00:47:31.599 --> 00:47:35.659 A:middle L:90%
wish. Idea. Okay. Like there is this

831
00:47:35.659 --> 00:47:37.829 A:middle L:90%
great technology. Fine. We need to have lots

832
00:47:37.829 --> 00:47:40.829 A:middle L:90%
of applications that will leverage that infrastructure and provide services

833
00:47:40.829 --> 00:47:44.630 A:middle L:90%
to users whether they be, you know, municipalities

834
00:47:44.630 --> 00:47:45.389 A:middle L:90%
or, you know, officials like, uh,

835
00:47:45.400 --> 00:47:50.940 A:middle L:90%
you know, government organizations or whatever or commercial companies

836
00:47:50.949 --> 00:47:52.619 A:middle L:90%
. So we need that. And so they were

837
00:47:52.619 --> 00:47:54.789 A:middle L:90%
most interested in this APP store idea. Um,

838
00:47:55.480 --> 00:48:00.829 A:middle L:90%
okay, leveraging further leveraging the design is for certification

839
00:48:00.829 --> 00:48:04.239 A:middle L:90%
. This is what we're doing with the avionics company

840
00:48:04.250 --> 00:48:06.829 A:middle L:90%
. Design driven evolution, the design driven testing,

841
00:48:06.840 --> 00:48:07.989 A:middle L:90%
you know, just again leveraging the design to do

842
00:48:07.989 --> 00:48:10.889 A:middle L:90%
more. Uh, and and then there's one thing

843
00:48:10.889 --> 00:48:14.110 A:middle L:90%
that, uh, one piece of work that we

844
00:48:14.110 --> 00:48:15.559 A:middle L:90%
just finished that well, we just finished. We

845
00:48:15.559 --> 00:48:20.570 A:middle L:90%
finished one step of it because this much more to

846
00:48:20.570 --> 00:48:22.019 A:middle L:90%
come. Uh, and and that's the idea.

847
00:48:22.019 --> 00:48:24.320 A:middle L:90%
Is that so? We we have this design paradigm

848
00:48:24.320 --> 00:48:27.690 A:middle L:90%
and we do functional design. We do non functional

849
00:48:27.690 --> 00:48:29.829 A:middle L:90%
design, and that's fine. This is more or

850
00:48:29.829 --> 00:48:32.739 A:middle L:90%
less what I showed you very quickly. The problem

851
00:48:32.739 --> 00:48:36.559 A:middle L:90%
is that we are not, um, remember,

852
00:48:36.559 --> 00:48:37.579 A:middle L:90%
we were interested in, in in, in having

853
00:48:37.579 --> 00:48:42.639 A:middle L:90%
a software that's deployed with vulnerable users. Okay,

854
00:48:42.639 --> 00:48:44.920 A:middle L:90%
that's kind of embedded in their life in their daily

855
00:48:44.920 --> 00:48:46.150 A:middle L:90%
activities. And in order to do that in a

856
00:48:46.150 --> 00:48:50.349 A:middle L:90%
safe way we really want to take into account in

857
00:48:50.349 --> 00:48:53.039 A:middle L:90%
the design user interaction dimension. Okay, So what

858
00:48:53.039 --> 00:48:58.309 A:middle L:90%
we did was to introduce in our design language this

859
00:48:58.320 --> 00:49:01.369 A:middle L:90%
this user interaction. Okay, uh, enabling a

860
00:49:01.369 --> 00:49:07.030 A:middle L:90%
designer to express what an application requires as far as

861
00:49:07.030 --> 00:49:12.380 A:middle L:90%
interaction with the user. Okay, so that's part

862
00:49:12.380 --> 00:49:14.110 A:middle L:90%
of the thing. Okay? Part of the of

863
00:49:14.110 --> 00:49:16.380 A:middle L:90%
our approach, Another part of the approach is whenever

864
00:49:16.380 --> 00:49:21.760 A:middle L:90%
we target a group of users, Okay, we

865
00:49:21.760 --> 00:49:23.880 A:middle L:90%
want to characterize this group of users. Okay,

866
00:49:23.889 --> 00:49:29.429 A:middle L:90%
There's this group of users have memory problems. Uh

867
00:49:29.440 --> 00:49:31.309 A:middle L:90%
, executive function problem. Uh, you know,

868
00:49:31.309 --> 00:49:35.179 A:middle L:90%
sensory problems. Okay. We want to characterize that

869
00:49:35.179 --> 00:49:37.789 A:middle L:90%
group of population that the group of users that we're

870
00:49:37.789 --> 00:49:40.210 A:middle L:90%
targeting a set of applications for okay, in order

871
00:49:40.210 --> 00:49:45.480 A:middle L:90%
to then be able to match. Okay, The

872
00:49:45.489 --> 00:49:47.510 A:middle L:90%
what the application requires from the user and what the

873
00:49:47.510 --> 00:49:52.489 A:middle L:90%
user is capable of of providing. Okay, Yes

874
00:49:52.500 --> 00:49:54.820 A:middle L:90%
, I've actually done so. So we're doing We're

875
00:49:54.820 --> 00:50:00.079 A:middle L:90%
doing that with some, uh, cognitive scientists in

876
00:50:00.090 --> 00:50:04.650 A:middle L:90%
Bordeaux. Yes. So this is my last slide

877
00:50:04.650 --> 00:50:13.989 A:middle L:90%
. So please, if you have questions, Yeah

878
00:50:14.639 --> 00:50:15.579 A:middle L:90%
, that we have time for a couple of questions

879
00:50:27.309 --> 00:50:30.070 A:middle L:90%
so earlier. I can describe this a paradigm.

880
00:50:30.960 --> 00:50:34.239 A:middle L:90%
So what I took that to mean is that what

881
00:50:34.239 --> 00:50:38.860 A:middle L:90%
you envision here is potentially standing. The model that

882
00:50:38.860 --> 00:50:42.800 A:middle L:90%
you develop, as we were language into other kinds

883
00:50:42.800 --> 00:50:46.949 A:middle L:90%
of applications remains. You're not proposing a fixed target

884
00:50:46.960 --> 00:50:51.800 A:middle L:90%
for all applications, but but do you have thoughts

885
00:50:51.800 --> 00:50:53.670 A:middle L:90%
about what other kinds of applications were made? You

886
00:50:53.670 --> 00:50:58.679 A:middle L:90%
might be able to incorporate Paradigm? Yeah. I

887
00:50:58.679 --> 00:51:01.949 A:middle L:90%
mean, so So, so far, we're working

888
00:51:01.949 --> 00:51:06.960 A:middle L:90%
on different, different directions. One is, um

889
00:51:06.969 --> 00:51:08.610 A:middle L:90%
, simple, you know, building home automation.

890
00:51:08.619 --> 00:51:12.630 A:middle L:90%
Actually, the the former student of mine is doing

891
00:51:12.630 --> 00:51:15.400 A:middle L:90%
this technology transfer, and this is where they're they're

892
00:51:15.400 --> 00:51:16.980 A:middle L:90%
heading as far as creating a startup on using the

893
00:51:16.980 --> 00:51:21.769 A:middle L:90%
company. Uh, using this technology, Um,

894
00:51:21.780 --> 00:51:24.690 A:middle L:90%
another track is assisted living. I mean, this

895
00:51:24.690 --> 00:51:28.840 A:middle L:90%
is what I talked about. Yet another one is

896
00:51:28.849 --> 00:51:30.389 A:middle L:90%
, um, avionics. I mean, this is

897
00:51:30.400 --> 00:51:35.110 A:middle L:90%
the other the other track I talked about, but

898
00:51:35.119 --> 00:51:37.070 A:middle L:90%
I I think it's pretty open. I mean,

899
00:51:37.079 --> 00:51:38.679 A:middle L:90%
we we we did some work on, uh,

900
00:51:38.690 --> 00:51:40.940 A:middle L:90%
mobile applications as well, because, you know,

901
00:51:40.949 --> 00:51:45.489 A:middle L:90%
a smartphone has a lot of senses and activities,

902
00:51:45.500 --> 00:51:47.230 A:middle L:90%
so you can imagine that a bunch of applications could

903
00:51:47.230 --> 00:51:52.099 A:middle L:90%
be nicely expressed using that, uh, using that

904
00:51:52.110 --> 00:51:55.840 A:middle L:90%
paradigm. Okay, so and really, the rest

905
00:51:55.840 --> 00:51:58.449 A:middle L:90%
is open. I mean, we've had some contacts

906
00:51:58.449 --> 00:52:01.500 A:middle L:90%
with the automobile industry as well. I mean,

907
00:52:01.500 --> 00:52:05.340 A:middle L:90%
they're they're, you know, they're they're essentially,

908
00:52:05.349 --> 00:52:07.309 A:middle L:90%
you know, there are problems there. I mean

909
00:52:07.309 --> 00:52:07.699 A:middle L:90%
, I don't know how it is here, but

910
00:52:07.699 --> 00:52:09.920 A:middle L:90%
there's this trends in in, uh, in Europe

911
00:52:09.920 --> 00:52:14.840 A:middle L:90%
, where they try to have the equivalent of an

912
00:52:14.840 --> 00:52:19.110 A:middle L:90%
app store in the car where you can essentially,

913
00:52:19.119 --> 00:52:22.170 A:middle L:90%
you know, get some interesting applications using using information

914
00:52:22.179 --> 00:52:24.949 A:middle L:90%
, using the sensors and actuators of the of the

915
00:52:24.949 --> 00:52:28.550 A:middle L:90%
car. So you use the GPS, you use

916
00:52:28.550 --> 00:52:30.619 A:middle L:90%
some information about how much gas you have. You

917
00:52:30.619 --> 00:52:32.980 A:middle L:90%
know what's your favorite? You know, a gas

918
00:52:32.980 --> 00:52:37.820 A:middle L:90%
station or restaurants or whatever. And you can you

919
00:52:37.820 --> 00:52:38.820 A:middle L:90%
can, you know, imagine lots of things that

920
00:52:38.820 --> 00:52:43.349 A:middle L:90%
will use senses of the car. Like you know

921
00:52:43.349 --> 00:52:45.710 A:middle L:90%
how it's functioning or use. You know, other

922
00:52:45.710 --> 00:52:49.409 A:middle L:90%
things, like GPS or, you know, screens

923
00:52:49.409 --> 00:52:51.449 A:middle L:90%
or, uh and so on and so forth.

924
00:52:51.449 --> 00:52:53.659 A:middle L:90%
So So, um, you know this This is

925
00:52:53.670 --> 00:52:57.690 A:middle L:90%
, uh yeah, it seems pretty. It seems

926
00:52:57.690 --> 00:53:00.710 A:middle L:90%
pretty, uh, pretty open. And, uh

927
00:53:00.719 --> 00:53:01.170 A:middle L:90%
, I guess the way I like to see it

928
00:53:01.179 --> 00:53:05.050 A:middle L:90%
is that there's a lot of problems can be solved

929
00:53:05.059 --> 00:53:07.659 A:middle L:90%
with this paradigm. And it's just like the object

930
00:53:07.659 --> 00:53:09.059 A:middle L:90%
oriented paradigm. You have to kind of, you

931
00:53:09.059 --> 00:53:12.909 A:middle L:90%
know, frame your brain into this thing. And

932
00:53:12.909 --> 00:53:14.780 A:middle L:90%
then and then you know, the solution can be

933
00:53:14.780 --> 00:53:20.679 A:middle L:90%
expressed more or less. Yeah, just go.

934
00:53:21.150 --> 00:53:23.780 A:middle L:90%
I was about to say Okay, Sean, if

935
00:53:23.780 --> 00:53:30.480 A:middle L:90%
you have a domain that is veterans, president,

936
00:53:30.349 --> 00:53:34.789 A:middle L:90%
non imperative language, White job, for example,

937
00:53:34.800 --> 00:53:38.469 A:middle L:90%
you would express it in collected language. Or perhaps

938
00:53:38.480 --> 00:53:45.400 A:middle L:90%
in first one when you, um first of all

939
00:53:45.409 --> 00:53:49.480 A:middle L:90%
, I guess what skin is your approach to?

940
00:53:50.050 --> 00:53:53.219 A:middle L:90%
Designed to blind? Um, is it more amenable

941
00:53:53.469 --> 00:53:58.289 A:middle L:90%
at the top end DSL itself, or would you

942
00:53:58.300 --> 00:54:01.909 A:middle L:90%
change the underlying implementation? Well for you? So

943
00:54:01.909 --> 00:54:05.739 A:middle L:90%
if I had to to to to target a different

944
00:54:05.739 --> 00:54:12.250 A:middle L:90%
language than than than an object oriented language, right

945
00:54:12.260 --> 00:54:16.059 A:middle L:90%
? Uh, so I think one thing we we

946
00:54:16.070 --> 00:54:19.559 A:middle L:90%
we I mean the requirements. If we had to

947
00:54:19.559 --> 00:54:22.480 A:middle L:90%
change the target language, the requirements would be to

948
00:54:22.480 --> 00:54:27.559 A:middle L:90%
have a type system that would allow us to,

949
00:54:27.570 --> 00:54:31.860 A:middle L:90%
uh uh and force the design declarations. You know

950
00:54:31.869 --> 00:54:36.199 A:middle L:90%
, uh, during the programming phase. I mean

951
00:54:36.210 --> 00:54:38.130 A:middle L:90%
, this is really what we want is is in

952
00:54:38.130 --> 00:54:40.099 A:middle L:90%
order to leverage. I mean, you want to

953
00:54:40.099 --> 00:54:44.079 A:middle L:90%
leverage the design as much as possible. And the

954
00:54:44.090 --> 00:54:45.079 A:middle L:90%
thing that the way you can do that is by

955
00:54:45.079 --> 00:54:50.190 A:middle L:90%
leveraging the type system. So So this would this

956
00:54:50.190 --> 00:54:54.090 A:middle L:90%
would be a requirement, Uh, and definitely programming

957
00:54:54.090 --> 00:54:57.170 A:middle L:90%
frameworks. I mean, this is something that we

958
00:54:57.539 --> 00:55:00.449 A:middle L:90%
, you know. I mean, your question is

959
00:55:00.449 --> 00:55:04.590 A:middle L:90%
really right on target because we were really trying to

960
00:55:04.590 --> 00:55:07.469 A:middle L:90%
see how we can generalize that idea, uh,

961
00:55:07.480 --> 00:55:10.480 A:middle L:90%
to generalize in terms of different paradigms and and generalize

962
00:55:10.480 --> 00:55:15.730 A:middle L:90%
in terms of different target language. And indeed,

963
00:55:15.730 --> 00:55:17.550 A:middle L:90%
there is a kind of almost a philosophical question,

964
00:55:17.559 --> 00:55:21.239 A:middle L:90%
which is, you know, what constitutes a programming

965
00:55:21.239 --> 00:55:23.460 A:middle L:90%
framework and, you know, and it's an open

966
00:55:23.460 --> 00:55:25.280 A:middle L:90%
question. I mean, we've looked at the literature

967
00:55:25.329 --> 00:55:29.659 A:middle L:90%
and we we didn't find, you know, uh

968
00:55:30.239 --> 00:55:31.599 A:middle L:90%
, anything, you know, specific as to.

969
00:55:31.610 --> 00:55:36.940 A:middle L:90%
So we we understand intuitively what a programming framework is

970
00:55:36.949 --> 00:55:38.050 A:middle L:90%
, but we don't have any neither, you know

971
00:55:38.059 --> 00:55:40.820 A:middle L:90%
, formal definition or, you know, something that

972
00:55:40.829 --> 00:55:45.050 A:middle L:90%
that that goes across languages. So, for instance

973
00:55:45.050 --> 00:55:46.449 A:middle L:90%
, what is a programming framework in a functional language

974
00:55:46.460 --> 00:55:49.050 A:middle L:90%
? I mean, that's that's an open question.

975
00:55:49.440 --> 00:55:55.070 A:middle L:90%
Uh, it isn't just it isn't just Dr scheme

976
00:55:55.070 --> 00:55:57.969 A:middle L:90%
. I agree. I agree. So so?

977
00:55:57.980 --> 00:56:00.110 A:middle L:90%
So I I don't have any good answer to your

978
00:56:00.110 --> 00:56:01.670 A:middle L:90%
question. Uh, but, uh I mean,

979
00:56:01.670 --> 00:56:05.949 A:middle L:90%
this is definitely something that we're most interested in exploring

980
00:56:05.960 --> 00:56:12.719 A:middle L:90%
is yeah. Uh, I was years ago.

981
00:56:12.730 --> 00:56:17.159 A:middle L:90%
So when when they claim devices using extends actuator,

982
00:56:17.929 --> 00:56:22.469 A:middle L:90%
I forget. Oh, I was only inviting.

983
00:56:22.480 --> 00:56:24.460 A:middle L:90%
Why did use implements us? Because there's some devices

984
00:56:24.929 --> 00:56:30.460 A:middle L:90%
. Mhm, actually there. Oh, they are

985
00:56:30.829 --> 00:56:31.460 A:middle L:90%
. Yes. Yes, there are. There are

986
00:56:31.469 --> 00:56:34.829 A:middle L:90%
. There are. So we use a range of

987
00:56:34.829 --> 00:56:37.150 A:middle L:90%
technology. We use a Z wave. We use

988
00:56:37.159 --> 00:56:39.170 A:middle L:90%
zig b we use I mean all those all those

989
00:56:39.179 --> 00:56:43.130 A:middle L:90%
technology and are available in, uh, you know

990
00:56:43.130 --> 00:56:46.559 A:middle L:90%
, in the stores. Uh, I can you

991
00:56:46.559 --> 00:56:49.360 A:middle L:90%
know, they have those, um, those,

992
00:56:49.369 --> 00:56:57.469 A:middle L:90%
um uh uh How's he called? Plug, plug

993
00:56:57.480 --> 00:56:59.949 A:middle L:90%
. Remote plug. Okay, essentially something where you

994
00:56:59.949 --> 00:57:02.800 A:middle L:90%
can you can You can control the electricity. Okay

995
00:57:02.809 --> 00:57:07.039 A:middle L:90%
. Um so you you put that in your in

996
00:57:07.039 --> 00:57:09.610 A:middle L:90%
your socket? Uh, and and and then you

997
00:57:09.610 --> 00:57:13.250 A:middle L:90%
can You have that in the Z wave technology,

998
00:57:13.250 --> 00:57:15.150 A:middle L:90%
for instance. And you can control the you can

999
00:57:15.150 --> 00:57:16.840 A:middle L:90%
control the light. For instance, you can you

1000
00:57:16.840 --> 00:57:20.300 A:middle L:90%
can you can branch something and you can plug something

1001
00:57:20.309 --> 00:57:21.739 A:middle L:90%
, and then you can control, but you can

1002
00:57:21.739 --> 00:57:22.670 A:middle L:90%
do two things with that. You can you can

1003
00:57:22.670 --> 00:57:24.949 A:middle L:90%
turn on and off. Okay? And you can

1004
00:57:24.949 --> 00:57:29.039 A:middle L:90%
also, uh, so this is the accurate aside

1005
00:57:29.230 --> 00:57:30.809 A:middle L:90%
. Okay? But you have also a sensing side

1006
00:57:30.820 --> 00:57:34.559 A:middle L:90%
in a sense that those, uh, module,

1007
00:57:34.570 --> 00:57:37.349 A:middle L:90%
uh, those modules allow you to also test the

1008
00:57:37.349 --> 00:57:40.250 A:middle L:90%
electricity, the electric meter. So they have a

1009
00:57:40.250 --> 00:57:44.320 A:middle L:90%
sensor side of things. What was your question about

1010
00:57:44.329 --> 00:57:47.349 A:middle L:90%
the target language? I'm sorry, extending the class

1011
00:57:47.349 --> 00:57:52.360 A:middle L:90%
rather than using an interface. Oh, I'm sorry

1012
00:57:52.369 --> 00:57:57.909 A:middle L:90%
. So the interface could allow functionality for either kind

1013
00:57:57.909 --> 00:58:02.780 A:middle L:90%
of a sensor or actuator? Yes, to the

1014
00:58:02.780 --> 00:58:08.440 A:middle L:90%
extent restricted your Oh, right, right, right

1015
00:58:08.889 --> 00:58:13.710 A:middle L:90%
. You're right. In fact, so this is

1016
00:58:13.710 --> 00:58:16.199 A:middle L:90%
kind of a toy example, but in the in

1017
00:58:16.199 --> 00:58:21.250 A:middle L:90%
the description we have, you do extend device,

1018
00:58:21.420 --> 00:58:23.800 A:middle L:90%
okay. As opposed to extend sensor or extend actuator

1019
00:58:23.809 --> 00:58:29.230 A:middle L:90%
, you extend the device, okay. And and

1020
00:58:29.230 --> 00:58:30.230 A:middle L:90%
in fact, the device can have, you know

1021
00:58:30.239 --> 00:58:34.420 A:middle L:90%
, in the same decoration, you can have actuate

1022
00:58:34.420 --> 00:58:37.250 A:middle L:90%
ng kind of the, uh, decoration of actuators

1023
00:58:37.260 --> 00:58:39.590 A:middle L:90%
and decoration of sources of information. So So in

1024
00:58:39.590 --> 00:58:43.289 A:middle L:90%
the same declaration, the language allows you to declare

1025
00:58:43.289 --> 00:58:46.400 A:middle L:90%
devices that have those many facets In fact, many

1026
00:58:46.400 --> 00:58:50.579 A:middle L:90%
sensing facets, many activating facets. Is that is

1027
00:58:50.579 --> 00:58:53.409 A:middle L:90%
that AM I answering your question? So I just

1028
00:58:53.409 --> 00:59:01.909 A:middle L:90%
want to remind everybody because close down that this afternoon

1029
00:59:02.309 --> 00:59:07.119 A:middle L:90%
from 4-5 and I think there's cider and goodies or

1030
00:59:07.119 --> 00:59:09.800 A:middle L:90%
something like that And he really welcomes, uh,

1031
00:59:09.809 --> 00:59:15.119 A:middle L:90%
meeting students here. So anyone here, people who

1032
00:59:15.130 --> 00:59:16.539 A:middle L:90%
didn't make the talks are invited to come and meet

1033
00:59:16.539 --> 00:59:19.940 A:middle L:90%
him again and talk to him more length. So

1034
00:59:19.949 --> 00:59:24.730 A:middle L:90%
thank you very much, yes.

