1
00:00:20,340 --> 00:00:22,360
except when you use PHP the right way

2
00:00:22,360 --> 00:00:26,320
anyway all right switch of gears

3
00:00:26,320 --> 00:00:28,900
complete switch of gears we are start

4
00:00:28,900 --> 00:00:30,790
we're starting to talk about naming

5
00:00:30,790 --> 00:00:32,590
right I already gave some hints in the

6
00:00:32,590 --> 00:00:34,870
other lectures that Namie naming might

7
00:00:34,870 --> 00:00:38,050
be something very important right so I

8
00:00:38,050 --> 00:00:39,280
mean first of all what's this naming

9
00:00:39,280 --> 00:00:41,489
story all about it's all about

10
00:00:41,489 --> 00:00:45,120
associating some sort of English like

11
00:00:45,120 --> 00:00:49,540
things to things that otherwise want to

12
00:00:49,540 --> 00:00:52,060
be binary so I mean this is a problem

13
00:00:52,060 --> 00:00:53,860
that's as old as programming computers

14
00:00:53,860 --> 00:00:56,950
and I mean to some extent it existed in

15
00:00:56,950 --> 00:00:58,750
mathematics but in mathematics things

16
00:00:58,750 --> 00:01:00,640
are abstracted away anyway and those

17
00:01:00,640 --> 00:01:01,989
people got used to basically just

18
00:01:01,989 --> 00:01:03,160
writing formulas and calling those

19
00:01:03,160 --> 00:01:07,509
formulas the name that it's not maybe as

20
00:01:07,509 --> 00:01:11,170
crucial and as important but obviously

21
00:01:11,170 --> 00:01:14,050
whenever things get low enough close

22
00:01:14,050 --> 00:01:15,610
enough to the transistors they have to

23
00:01:15,610 --> 00:01:19,960
be bit we don't have any bike I mean

24
00:01:19,960 --> 00:01:21,610
base three base four or any other base

25
00:01:21,610 --> 00:01:23,770
its base to so it's bit its zeros and

26
00:01:23,770 --> 00:01:25,929
ones and zeros and ones are not

27
00:01:25,929 --> 00:01:27,700
something that people are comfortable

28
00:01:27,700 --> 00:01:29,410
with and I give you an example even if

29
00:01:29,410 --> 00:01:31,270
it's not exactly zeros and ones but it

30
00:01:31,270 --> 00:01:32,920
gets close enough IP addresses very few

31
00:01:32,920 --> 00:01:35,619
people know their IP address why because

32
00:01:35,619 --> 00:01:37,780
very hard to memorize now we put up with

33
00:01:37,780 --> 00:01:39,369
memorizing phone numbers and that seems

34
00:01:39,369 --> 00:01:41,350
to be an advert big enough not even

35
00:01:41,350 --> 00:01:43,630
anymore right so how do I deal with

36
00:01:43,630 --> 00:01:46,360
phone numbers now well we asked the

37
00:01:46,360 --> 00:01:49,179
phone and we put a nice contact right we

38
00:01:49,179 --> 00:01:51,910
asked the phone to say you deal with it

39
00:01:51,910 --> 00:01:55,090
I mean right my kid has a new cell phone

40
00:01:55,090 --> 00:01:58,030
and it has an older cell phone both are

41
00:01:58,030 --> 00:02:00,250
numbers I don't know but my phone does

42
00:02:00,250 --> 00:02:02,920
have a nice directory right so in fact

43
00:02:02,920 --> 00:02:05,319
it's a form of naming I associate but

44
00:02:05,319 --> 00:02:07,750
locally I associated the name we have

45
00:02:07,750 --> 00:02:10,149
something that had an ugly name before

46
00:02:10,149 --> 00:02:13,330
okay now why do we have phone numbers

47
00:02:13,330 --> 00:02:15,790
and not names because it's much easier

48
00:02:15,790 --> 00:02:18,069
to implement numbers with the

49
00:02:18,069 --> 00:02:19,599
lower-level technology and the phone

50
00:02:19,599 --> 00:02:20,950
technology is old it's a hundred plus

51
00:02:20,950 --> 00:02:23,170
years old right so it was crucial for

52
00:02:23,170 --> 00:02:24,640
the phone technology to in fact use

53
00:02:24,640 --> 00:02:28,530
numbers and not anything else right now

54
00:02:28,530 --> 00:02:31,210
even before I go into naming for

55
00:02:31,210 --> 00:02:32,560
distributed systems I want you to

56
00:02:32,560 --> 00:02:33,430
understand

57
00:02:33,430 --> 00:02:35,319
naming it's a general problem in

58
00:02:35,319 --> 00:02:37,299
computer science I mean computers not

59
00:02:37,299 --> 00:02:40,920
computer science using computers right

60
00:02:40,920 --> 00:02:45,040
for example I would like to point out

61
00:02:45,040 --> 00:02:46,420
some things about programming languages

62
00:02:46,420 --> 00:02:48,040
what are you in fact have a big naming

63
00:02:48,040 --> 00:02:50,650
problem okay so naming it's all about

64
00:02:50,650 --> 00:02:54,189
nice name versus something more weird

65
00:02:54,189 --> 00:02:55,689
okay so let's dig into some programming

66
00:02:55,689 --> 00:02:57,700
languages and figure out just how useful

67
00:02:57,700 --> 00:03:00,909
these names are and what could we use

68
00:03:00,909 --> 00:03:03,430
instead of a name now another notion

69
00:03:03,430 --> 00:03:05,079
related to name and I want to put it

70
00:03:05,079 --> 00:03:06,459
side-by-side is the notion of

71
00:03:06,459 --> 00:03:10,599
identifiers okay so so what's the

72
00:03:10,599 --> 00:03:11,859
difference you really between a name and

73
00:03:11,859 --> 00:03:14,739
identifiers well we kind of feel that

74
00:03:14,739 --> 00:03:16,269
the identified has to be stronger so

75
00:03:16,269 --> 00:03:17,470
identifiers it has to be something that

76
00:03:17,470 --> 00:03:19,569
looks more unique it pins it down

77
00:03:19,569 --> 00:03:21,639
precisely name can be something

78
00:03:21,639 --> 00:03:23,560
relatively loose and in particularly can

79
00:03:23,560 --> 00:03:25,689
use a aliasing for names possibly but

80
00:03:25,689 --> 00:03:27,639
not necessarily for identifiers so in

81
00:03:27,639 --> 00:03:30,730
fact identifiers it are some sort of

82
00:03:30,730 --> 00:03:32,950
names that have stronger guarantees are

83
00:03:32,950 --> 00:03:34,780
cleaned up at least according to some

84
00:03:34,780 --> 00:03:36,489
people I mean at some point you still

85
00:03:36,489 --> 00:03:38,620
have to declare something to be stronger

86
00:03:38,620 --> 00:03:40,930
right and we declare this identifiers to

87
00:03:40,930 --> 00:03:42,370
be stronger so this could be a possible

88
00:03:42,370 --> 00:03:44,889
definition right so an identifier refers

89
00:03:44,889 --> 00:03:47,709
to at most one entity each entity is

90
00:03:47,709 --> 00:03:49,780
referred to it by at most one identifier

91
00:03:49,780 --> 00:03:52,090
so there's this paired one-to-one

92
00:03:52,090 --> 00:03:54,340
relationship and an identifier always

93
00:03:54,340 --> 00:03:56,260
refers to the same entity there's not to

94
00:03:56,260 --> 00:03:57,909
be extremely important because that

95
00:03:57,909 --> 00:03:59,859
means the life of the name the

96
00:03:59,859 --> 00:04:02,799
identifier is as big as the life of the

97
00:04:02,799 --> 00:04:04,659
object and because you cannot really

98
00:04:04,659 --> 00:04:07,209
reuse them the identifier could be even

99
00:04:07,209 --> 00:04:10,000
much longer than the object right the

100
00:04:10,000 --> 00:04:11,229
object could get created destroyed

101
00:04:11,229 --> 00:04:13,299
created destroyed or switch from in

102
00:04:13,299 --> 00:04:16,209
memory on disk or whatever and but the

103
00:04:16,209 --> 00:04:17,889
identifier is supposed to live forever

104
00:04:17,889 --> 00:04:20,409
now it's hard to get this identifies I

105
00:04:20,409 --> 00:04:23,500
mentioned number of lectures back about

106
00:04:23,500 --> 00:04:25,810
the uui this the universal identifiers

107
00:04:25,810 --> 00:04:29,080
okay that's an attempt to generate these

108
00:04:29,080 --> 00:04:32,289
identifiers that have strong uniqueness

109
00:04:32,289 --> 00:04:34,419
guarantees all right so in some sense

110
00:04:34,419 --> 00:04:35,770
it's not quite a reservation system and

111
00:04:35,770 --> 00:04:38,349
so on all kinds of trickery it's used

112
00:04:38,349 --> 00:04:40,510
including random number generation right

113
00:04:40,510 --> 00:04:42,760
to form this identifies but once you

114
00:04:42,760 --> 00:04:44,710
form one you can associate it with a

115
00:04:44,710 --> 00:04:46,840
certain resource that you have and then

116
00:04:46,840 --> 00:04:48,790
it's gonna be your unique ID now

117
00:04:48,790 --> 00:04:50,650
obviously don't want to use that UUID

118
00:04:50,650 --> 00:04:53,080
it's really big and really ugly right

119
00:04:53,080 --> 00:04:55,360
what you want to do is then put aliasing

120
00:04:55,360 --> 00:04:57,490
on top of it to make it humanly readable

121
00:04:57,490 --> 00:05:00,220
but identify rates at the lower it's at

122
00:05:00,220 --> 00:05:02,680
the lower level so let me ask you I mean

123
00:05:02,680 --> 00:05:03,850
let's go through some questions about

124
00:05:03,850 --> 00:05:05,380
some particular programming languages

125
00:05:05,380 --> 00:05:06,699
and see what could potentially be an

126
00:05:06,699 --> 00:05:10,210
identifier okay and because when you're

127
00:05:10,210 --> 00:05:11,800
taught these programming languages this

128
00:05:11,800 --> 00:05:13,419
ideas are not articulated you might not

129
00:05:13,419 --> 00:05:15,190
even have realized that's the case so

130
00:05:15,190 --> 00:05:20,979
for example in let's say C C++ what so I

131
00:05:20,979 --> 00:05:23,350
have an object I mean I know that can be

132
00:05:23,350 --> 00:05:25,120
a variable that can be anything you want

133
00:05:25,120 --> 00:05:30,220
what's the identifier so what's that

134
00:05:30,220 --> 00:05:34,810
thing that makes the object unique or

135
00:05:34,810 --> 00:05:37,900
what's almost an identifier or when the

136
00:05:37,900 --> 00:05:42,419
identifier in C with respect this

137
00:05:52,060 --> 00:05:54,190
well so this is what I'm saying it's not

138
00:05:54,190 --> 00:05:56,050
pointed out when you're part C and C++

139
00:05:56,050 --> 00:05:58,420
it turns out that C it's close to

140
00:05:58,420 --> 00:06:01,510
assembly and in assembly and in C the

141
00:06:01,510 --> 00:06:03,370
address in memory is really the

142
00:06:03,370 --> 00:06:06,790
identifier okay so you can tell that two

143
00:06:06,790 --> 00:06:08,260
objects are the same only if they have

144
00:06:08,260 --> 00:06:09,790
the same address and that's it and there

145
00:06:09,790 --> 00:06:11,440
is no other way okay

146
00:06:11,440 --> 00:06:13,780
this in fact can produce a very deep

147
00:06:13,780 --> 00:06:16,270
test are these two objects the same a

148
00:06:16,270 --> 00:06:18,430
lot of languages support for example

149
00:06:18,430 --> 00:06:21,040
some very special form of equal because

150
00:06:21,040 --> 00:06:25,480
the identifier and the naming and on the

151
00:06:25,480 --> 00:06:27,100
other side the content are related to

152
00:06:27,100 --> 00:06:28,600
when do you declare two things to be the

153
00:06:28,600 --> 00:06:32,260
same so if if a resource if an object

154
00:06:32,260 --> 00:06:34,150
has an identifier you can essentially

155
00:06:34,150 --> 00:06:36,100
say two objects are the same if they

156
00:06:36,100 --> 00:06:38,350
have the same identifier and if the

157
00:06:38,350 --> 00:06:40,540
identifier is unique that means right if

158
00:06:40,540 --> 00:06:43,570
you allow aliasing when you resolve the

159
00:06:43,570 --> 00:06:45,220
aliasing if you get the same identifier

160
00:06:45,220 --> 00:06:46,660
then the objects are really the same

161
00:06:46,660 --> 00:06:49,630
object that's different than equal right

162
00:06:49,630 --> 00:06:52,600
and a lot of the frustration related to

163
00:06:52,600 --> 00:06:54,040
programming languages for example comes

164
00:06:54,040 --> 00:06:55,870
from the fact that you have all kinds of

165
00:06:55,870 --> 00:06:57,340
equals and you don't realize what the

166
00:06:57,340 --> 00:06:58,780
difference between them is most of the

167
00:06:58,780 --> 00:07:00,730
time the normal equal equal it's in fact

168
00:07:00,730 --> 00:07:03,520
not are they the same object but do they

169
00:07:03,520 --> 00:07:05,770
have the same value or can the values be

170
00:07:05,770 --> 00:07:07,780
caused to the same value for example

171
00:07:07,780 --> 00:07:10,690
Java Script is notorious for this the

172
00:07:10,690 --> 00:07:12,670
string that contains the number one will

173
00:07:12,670 --> 00:07:14,440
be equal to the number one because Java

174
00:07:14,440 --> 00:07:16,030
Script finds a way to convert the one

175
00:07:16,030 --> 00:07:17,440
into the string one and the two strings

176
00:07:17,440 --> 00:07:19,030
are the same and poof they are subtly

177
00:07:19,030 --> 00:07:20,350
the same when you might not have

178
00:07:20,350 --> 00:07:22,030
intended to have that and this is why

179
00:07:22,030 --> 00:07:27,940
javascript has a triple equal in in see

180
00:07:27,940 --> 00:07:30,640
things are very simple but in simple as

181
00:07:30,640 --> 00:07:32,500
plus they are not why because it was

182
00:07:32,500 --> 00:07:34,780
first has all those references and it's

183
00:07:34,780 --> 00:07:36,970
going to pull out of his back pocket

184
00:07:36,970 --> 00:07:39,220
all kinds of operators when it thinks

185
00:07:39,220 --> 00:07:42,400
they are appropriate and if it finds an

186
00:07:42,400 --> 00:07:43,930
operator equal equally we'll apply that

187
00:07:43,930 --> 00:07:45,610
and not try to resolve something at the

188
00:07:45,610 --> 00:07:46,990
level of reference and what its pointers

189
00:07:46,990 --> 00:07:49,300
is very clear right so the only thing

190
00:07:49,300 --> 00:07:51,340
you can really hang on to in C++ for

191
00:07:51,340 --> 00:07:52,780
example and comes from C is those

192
00:07:52,780 --> 00:07:53,980
pointers and those pointers are

193
00:07:53,980 --> 00:07:55,840
precisely addresses in memory and the

194
00:07:55,840 --> 00:07:58,060
pointers really make a unique identifier

195
00:07:58,060 --> 00:08:00,190
at least for that specific execution of

196
00:08:00,190 --> 00:08:03,020
the program now

197
00:08:03,020 --> 00:08:05,539
it's a little bit bent it's not exactly

198
00:08:05,539 --> 00:08:08,389
this especially in C so let's see which

199
00:08:08,389 --> 00:08:10,460
ones are correct if the pointer is the

200
00:08:10,460 --> 00:08:12,919
identifying right refers to at most

201
00:08:12,919 --> 00:08:16,669
entity is that true and that's postpone

202
00:08:16,669 --> 00:08:18,319
that one each entity is referred to by

203
00:08:18,319 --> 00:08:20,210
the most one identifier this is true

204
00:08:20,210 --> 00:08:21,470
because everything has a memory location

205
00:08:21,470 --> 00:08:25,639
so anything that exists it's pointed to

206
00:08:25,639 --> 00:08:28,220
by at least one identify identify always

207
00:08:28,220 --> 00:08:31,550
refer to the same entity well it depends

208
00:08:31,550 --> 00:08:32,870
on what you mean by the same entity if

209
00:08:32,870 --> 00:08:34,669
you have a high-level view and you can

210
00:08:34,669 --> 00:08:36,708
move things in memory then that's not

211
00:08:36,708 --> 00:08:38,510
true if you have a low-level view and

212
00:08:38,510 --> 00:08:40,070
only if you're basically at the same

213
00:08:40,070 --> 00:08:41,539
physical object in memory then that's

214
00:08:41,539 --> 00:08:41,990
true

215
00:08:41,990 --> 00:08:43,700
so it's murky but the first one is

216
00:08:43,700 --> 00:08:45,680
problematic in C for example because of

217
00:08:45,680 --> 00:08:47,630
the Union types you can actually make

218
00:08:47,630 --> 00:08:50,870
two virtual objects to live in the same

219
00:08:50,870 --> 00:08:52,850
place and this is used by the C hackers

220
00:08:52,850 --> 00:08:55,610
you can interpret the same bag of bits

221
00:08:55,610 --> 00:08:57,050
in two different ways and this is

222
00:08:57,050 --> 00:08:58,970
exactly what the unions are that's such

223
00:08:58,970 --> 00:09:01,820
a nasty programming addition that you

224
00:09:01,820 --> 00:09:04,130
can run in trouble in really big ways if

225
00:09:04,130 --> 00:09:10,850
you use unions ok so all these

226
00:09:10,850 --> 00:09:12,290
programming languages are struggling

227
00:09:12,290 --> 00:09:15,680
with some sort of naming right high

228
00:09:15,680 --> 00:09:17,420
level programming languages they have

229
00:09:17,420 --> 00:09:19,430
the naming figured out much better but

230
00:09:19,430 --> 00:09:21,050
that doesn't make it less messy on some

231
00:09:21,050 --> 00:09:22,850
torches right so for example in

232
00:09:22,850 --> 00:09:26,690
JavaScript or in PHP you really cannot

233
00:09:26,690 --> 00:09:29,510
find any there is no notion of location

234
00:09:29,510 --> 00:09:31,310
in memory there is no way for you to get

235
00:09:31,310 --> 00:09:32,660
anywhere close to the memory but are

236
00:09:32,660 --> 00:09:34,010
some exceptions for example I type the

237
00:09:34,010 --> 00:09:36,230
race in which you get close enough maybe

238
00:09:36,230 --> 00:09:38,839
right and you have to refer to things by

239
00:09:38,839 --> 00:09:42,920
name right but then you have name and

240
00:09:42,920 --> 00:09:45,200
context so essentially if you give me a

241
00:09:45,200 --> 00:09:46,970
context on a name I can look up the name

242
00:09:46,970 --> 00:09:48,260
in the context and essentially the

243
00:09:48,260 --> 00:09:49,870
context of some sort of dictionaries

244
00:09:49,870 --> 00:09:54,680
right so by so then the identifier is

245
00:09:54,680 --> 00:09:58,940
this pair name and context are for

246
00:09:58,940 --> 00:10:00,680
example how many people ever used art

247
00:10:00,680 --> 00:10:02,810
that's the physical language are is like

248
00:10:02,810 --> 00:10:05,329
this and are explicitly massages those

249
00:10:05,329 --> 00:10:06,589
environments they have even called

250
00:10:06,589 --> 00:10:09,260
environments north context those

251
00:10:09,260 --> 00:10:11,600
environments right so Oh

252
00:10:11,600 --> 00:10:15,440
naming has this nasty property that

253
00:10:15,440 --> 00:10:16,490
every programming language

254
00:10:16,490 --> 00:10:17,870
has to figure out and of course we have

255
00:10:17,870 --> 00:10:19,190
the corresponding thing in distributed

256
00:10:19,190 --> 00:10:21,649
systems right so if we look at the

257
00:10:21,649 --> 00:10:24,380
issues for example related to what's a

258
00:10:24,380 --> 00:10:26,510
web because that's basically everywhere

259
00:10:26,510 --> 00:10:31,390
all right how do you find the resource

260
00:10:31,390 --> 00:10:34,640
how do you locate a resource how the

261
00:10:34,640 --> 00:10:37,570
naming works for example just high level

262
00:10:37,570 --> 00:10:40,760
well so earlier on a decision has been

263
00:10:40,760 --> 00:10:43,339
made to invent this thing called the URL

264
00:10:43,339 --> 00:10:44,990
which is some sort of a naming

265
00:10:44,990 --> 00:10:47,660
convention right now it's not a simple

266
00:10:47,660 --> 00:10:49,279
naming convention I first want to spend

267
00:10:49,279 --> 00:10:50,720
some time on simple naming conventions

268
00:10:50,720 --> 00:10:52,850
it's more of a hierarchical naming

269
00:10:52,850 --> 00:10:55,190
convention and actually it's a very deep

270
00:10:55,190 --> 00:10:58,399
hierarchy right so let's let's just put

271
00:10:58,399 --> 00:10:59,660
this on the board and let's keep in mind

272
00:10:59,660 --> 00:11:01,670
as we go along because this is

273
00:11:01,670 --> 00:11:03,380
definitely one of the very sophisticated

274
00:11:03,380 --> 00:11:05,959
uses of naming right so maybe we should

275
00:11:05,959 --> 00:11:09,170
pull off right so let's let's name a

276
00:11:09,170 --> 00:11:12,140
resource that is a specific webpage on

277
00:11:12,140 --> 00:11:13,820
the department's website let's say I'm

278
00:11:13,820 --> 00:11:16,160
gonna invent half of it but right you

279
00:11:16,160 --> 00:11:20,390
get the idea so that could be a HTTP I'm

280
00:11:20,390 --> 00:11:22,399
gonna write the full name right and then

281
00:11:22,399 --> 00:11:24,190
I'm gonna talk about cheating on naming

282
00:11:24,190 --> 00:11:38,089
so it's gonna be HTTP www.ge.com colon

283
00:11:38,089 --> 00:11:38,570
there now

284
00:11:38,570 --> 00:11:39,890
slash and now I'm continuing that's a

285
00:11:39,890 --> 00:11:42,500
single line right so then it could be I

286
00:11:42,500 --> 00:11:49,959
don't know Kilda slash a dobra slash

287
00:11:49,959 --> 00:11:55,970
index.html let's say alright so this

288
00:11:55,970 --> 00:11:59,690
it's the name of a very specific web

289
00:11:59,690 --> 00:12:03,829
page or so I think okay and I can talk

290
00:12:03,829 --> 00:12:06,350
about how things could be hijacked and

291
00:12:06,350 --> 00:12:08,209
might not be very specific in the end

292
00:12:08,209 --> 00:12:10,130
for because of dynamic languages like

293
00:12:10,130 --> 00:12:13,730
PHP and whatnot okay as a comparison

294
00:12:13,730 --> 00:12:19,120
let's also take this which is cnn.com

295
00:12:19,120 --> 00:12:22,550
okay it turns out that both if you go

296
00:12:22,550 --> 00:12:24,170
into web browser you do this it's

297
00:12:24,170 --> 00:12:25,250
probably going to work I hope I'm not

298
00:12:25,250 --> 00:12:26,750
messing something up in there if you do

299
00:12:26,750 --> 00:12:27,770
this is gonna work

300
00:12:27,770 --> 00:12:29,779
they are both names okay but they look

301
00:12:29,779 --> 00:12:30,400
very different

302
00:12:30,400 --> 00:12:33,160
this looks almost unnaturally short and

303
00:12:33,160 --> 00:12:34,690
it's not clear where this is going at

304
00:12:34,690 --> 00:12:37,030
all I'm gonna explain in a second okay

305
00:12:37,030 --> 00:12:39,400
so when so why is this a complex name

306
00:12:39,400 --> 00:12:41,470
because it's made out of many many many

307
00:12:41,470 --> 00:12:44,770
parts and all of those parts are there

308
00:12:44,770 --> 00:12:46,750
supposedly to help how many people know

309
00:12:46,750 --> 00:12:52,660
about the short URL new waved a new idea

310
00:12:52,660 --> 00:12:55,150
right so they basically said this look

311
00:12:55,150 --> 00:12:57,280
whatever follows there's nothing you can

312
00:12:57,280 --> 00:12:59,800
do about this except tricks for example

313
00:12:59,800 --> 00:13:02,530
what I noticed is I think there is a

314
00:13:02,530 --> 00:13:04,630
domain dodge is right which is some kind

315
00:13:04,630 --> 00:13:08,020
of country and people started to buy the

316
00:13:08,020 --> 00:13:09,610
domain names in the dodge a yes because

317
00:13:09,610 --> 00:13:11,370
it looks so cool right you can have

318
00:13:11,370 --> 00:13:16,420
backbone Jas yeah that's cool has

319
00:13:16,420 --> 00:13:17,830
nothing to do with that whatever Jas

320
00:13:17,830 --> 00:13:19,900
country is or whoever earns the Jas

321
00:13:19,900 --> 00:13:21,340
domain it just looks cool because it's

322
00:13:21,340 --> 00:13:25,980
JavaScript right or YouTube YouTube EE

323
00:13:25,980 --> 00:13:29,230
that's great right now that it really

324
00:13:29,230 --> 00:13:30,780
helps I mean how hard is it to say

325
00:13:30,780 --> 00:13:34,750
youtube.com versus YouTube PE and I

326
00:13:34,750 --> 00:13:36,610
don't know if you know but Google is in

327
00:13:36,610 --> 00:13:39,340
fact pushing for short names they

328
00:13:39,340 --> 00:13:40,930
essentially say it's nonsensical why do

329
00:13:40,930 --> 00:13:43,900
we have this calm dossier cdot UFL none

330
00:13:43,900 --> 00:13:46,420
of them else why not flat names why not

331
00:13:46,420 --> 00:13:48,700
modify whatever this naming is to

332
00:13:48,700 --> 00:13:50,830
provide short names in particular for

333
00:13:50,830 --> 00:13:53,140
the big things right so ideally you

334
00:13:53,140 --> 00:13:56,290
would like to say Google slash something

335
00:13:56,290 --> 00:13:58,840
why am i saying google.com or are the

336
00:13:58,840 --> 00:14:01,410
weird there's no points in front right

337
00:14:01,410 --> 00:14:04,180
even though it looks human readable it's

338
00:14:04,180 --> 00:14:06,430
not necessarily easy to remember by any

339
00:14:06,430 --> 00:14:08,980
stretch of imagination so naming even

340
00:14:08,980 --> 00:14:11,080
though sometimes it starts small and

341
00:14:11,080 --> 00:14:13,450
manageable it can become big and

342
00:14:13,450 --> 00:14:17,800
unmanageable nevertheless right and

343
00:14:17,800 --> 00:14:20,080
especially whatever follows in here and

344
00:14:20,080 --> 00:14:21,880
especially because of other facilities

345
00:14:21,880 --> 00:14:24,030
that exist

346
00:14:24,030 --> 00:14:26,530
naming at least in this form becomes

347
00:14:26,530 --> 00:14:29,050
less and less and less relevant right so

348
00:14:29,050 --> 00:14:31,930
how many of you really know I mean

349
00:14:31,930 --> 00:14:33,880
beyond big websites in which you have

350
00:14:33,880 --> 00:14:35,110
short names how many of you remember

351
00:14:35,110 --> 00:14:38,670
longer URLs that are not your homepage I

352
00:14:38,670 --> 00:14:41,320
mean even remembering the class homepage

353
00:14:41,320 --> 00:14:43,420
for me it takes 30 seconds I have to

354
00:14:43,420 --> 00:14:44,350
burn some

355
00:14:44,350 --> 00:14:46,360
serious neurons to remember the class

356
00:14:46,360 --> 00:14:48,120
website so it's not necessarily

357
00:14:48,120 --> 00:14:50,620
particularly good naming I mean it looks

358
00:14:50,620 --> 00:14:52,120
very systematic and we have very

359
00:14:52,120 --> 00:14:53,980
systematic names for the class class

360
00:14:53,980 --> 00:14:55,510
names but you see the trouble is I have

361
00:14:55,510 --> 00:14:58,300
to remember what class am i teaching was

362
00:14:58,300 --> 00:14:59,680
the decimal point of the class oh I know

363
00:14:59,680 --> 00:15:01,600
I'm teaching the distributed systems

364
00:15:01,600 --> 00:15:04,270
class I don't remember that it's Co P 56

365
00:15:04,270 --> 00:15:06,310
and then I'm not sure but is maybe 15

366
00:15:06,310 --> 00:15:09,520
right so it's a struggle

367
00:15:09,520 --> 00:15:11,890
so naming that's supposed to help is not

368
00:15:11,890 --> 00:15:14,440
really helping that much so what do we

369
00:15:14,440 --> 00:15:16,210
end up doing quite often and I want you

370
00:15:16,210 --> 00:15:18,040
to understand this because no matter

371
00:15:18,040 --> 00:15:19,720
what you do you're gonna bump into

372
00:15:19,720 --> 00:15:21,340
naming and if you bump into naming

373
00:15:21,340 --> 00:15:23,140
you're gonna you have to be realistic

374
00:15:23,140 --> 00:15:24,550
about what they achieve and what they

375
00:15:24,550 --> 00:15:25,870
don't achieve so what do you what do you

376
00:15:25,870 --> 00:15:26,830
really do in the end

377
00:15:26,830 --> 00:15:28,660
well most often I find myself doing the

378
00:15:28,660 --> 00:15:30,700
following thing and it's as fast as as

379
00:15:30,700 --> 00:15:33,880
typing the URL and the browsers help now

380
00:15:33,880 --> 00:15:35,950
because the browser bar so Google

381
00:15:35,950 --> 00:15:39,400
recognized that people might not know

382
00:15:39,400 --> 00:15:42,370
where they go and what they try to do is

383
00:15:42,370 --> 00:15:44,590
the browser tries to interpret whatever

384
00:15:44,590 --> 00:15:46,480
you write at the top at some sort of URL

385
00:15:46,480 --> 00:15:48,910
and if it doesn't look like a URL or if

386
00:15:48,910 --> 00:15:50,350
it tries to get it and it's not there

387
00:15:50,350 --> 00:15:53,500
we'll pass it to Google search and I

388
00:15:53,500 --> 00:15:56,350
found myself in a situation in which I

389
00:15:56,350 --> 00:15:58,360
don't even try to remember URLs

390
00:15:58,360 --> 00:16:00,940
I just tried I just put keywords there

391
00:16:00,940 --> 00:16:02,980
knowing that Google does its magic and

392
00:16:02,980 --> 00:16:04,330
one of the first hits which I'm gonna

393
00:16:04,330 --> 00:16:06,040
recognize on the first page is going to

394
00:16:06,040 --> 00:16:09,880
be what I'm looking for right so for

395
00:16:09,880 --> 00:16:11,230
example something I always had trouble

396
00:16:11,230 --> 00:16:13,240
with is finding the website of the

397
00:16:13,240 --> 00:16:16,710
purchased purchasing department in UF

398
00:16:16,710 --> 00:16:18,790
until I figured out that all I need to

399
00:16:18,790 --> 00:16:20,770
do is put in the bar you have purchasing

400
00:16:20,770 --> 00:16:22,480
and Google first hit it's exactly what

401
00:16:22,480 --> 00:16:25,210
they want right so to a large extent a

402
00:16:25,210 --> 00:16:26,980
very powerful search can actually

403
00:16:26,980 --> 00:16:30,010
replace naming altogether right and

404
00:16:30,010 --> 00:16:31,900
that's a powerful thing and this is why

405
00:16:31,900 --> 00:16:33,760
Google is changing things I mean once

406
00:16:33,760 --> 00:16:37,030
you become synonymous with even finding

407
00:16:37,030 --> 00:16:39,790
things at the lowest naming level right

408
00:16:39,790 --> 00:16:41,650
that's when you win I mean you're you're

409
00:16:41,650 --> 00:16:43,030
part of the fabric of the Internet I

410
00:16:43,030 --> 00:16:44,350
mean this is why Google it's in a unique

411
00:16:44,350 --> 00:16:46,750
position I believe ok so what's

412
00:16:46,750 --> 00:16:48,160
happening when you do this when you do

413
00:16:48,160 --> 00:16:49,000
cnn.com

414
00:16:49,000 --> 00:16:52,980
because it's in fact not a complete name

415
00:16:53,839 --> 00:16:56,670
so whenever you talk about naming you're

416
00:16:56,670 --> 00:16:58,050
talking about convenience and whenever

417
00:16:58,050 --> 00:16:59,940
you talk about convenience and name and

418
00:16:59,940 --> 00:17:02,670
you have to talk about things that could

419
00:17:02,670 --> 00:17:04,559
be done by default that cover most of

420
00:17:04,559 --> 00:17:06,569
the cases that could be okay and could

421
00:17:06,569 --> 00:17:09,750
match what the user in fact refers to

422
00:17:09,750 --> 00:17:11,579
and you see this all over the place in

423
00:17:11,579 --> 00:17:13,050
programming languages and now you see it

424
00:17:13,050 --> 00:17:16,020
here on the web and this is actually

425
00:17:16,020 --> 00:17:19,859
what the users expect right so there are

426
00:17:19,859 --> 00:17:21,959
defaults that go in front there are two

427
00:17:21,959 --> 00:17:24,030
defaults that will go in front here okay

428
00:17:24,030 --> 00:17:27,179
one of them I mean first of all the www

429
00:17:27,179 --> 00:17:28,890
can be hijacked and you have to do a

430
00:17:28,890 --> 00:17:30,900
little bit of magic on whatever CNN is

431
00:17:30,900 --> 00:17:33,210
to do it but it's not Google will put it

432
00:17:33,210 --> 00:17:34,890
as a default if it doesn't work like

433
00:17:34,890 --> 00:17:37,920
this and we'll try www and HTTP in front

434
00:17:37,920 --> 00:17:42,090
it's also a default it's by far the most

435
00:17:42,090 --> 00:17:49,200
used type of protocol now HTTP starts to

436
00:17:49,200 --> 00:17:51,450
be used but they automatically switch

437
00:17:51,450 --> 00:17:53,130
from HTTP to HTTPS nobody really

438
00:17:53,130 --> 00:17:55,350
remembers watch the HTTP and was HTTP

439
00:17:55,350 --> 00:17:56,910
and when to use one versus the other and

440
00:17:56,910 --> 00:17:59,400
all that kind of stuff also once you get

441
00:17:59,400 --> 00:18:01,890
in you get hijacked and pushed a lot

442
00:18:01,890 --> 00:18:05,190
about deeper but it's it's actually much

443
00:18:05,190 --> 00:18:07,830
more than this you see this might not in

444
00:18:07,830 --> 00:18:09,809
fact be the name of a resource might be

445
00:18:09,809 --> 00:18:13,460
the name of some abstract entity because

446
00:18:13,460 --> 00:18:16,410
Akamai and I had a little quiz and asked

447
00:18:16,410 --> 00:18:17,460
you what else I can I do

448
00:18:17,460 --> 00:18:20,280
ekam I might in fact hijack cnn.com at

449
00:18:20,280 --> 00:18:22,200
your ISP and serve your local page of

450
00:18:22,200 --> 00:18:24,660
the CNN or not the main CNN so cnn.com

451
00:18:24,660 --> 00:18:26,400
might not mean at all the server's at

452
00:18:26,400 --> 00:18:28,410
CNN has whatever they have service might

453
00:18:28,410 --> 00:18:32,130
actually mean the servers that Cox has

454
00:18:32,130 --> 00:18:34,650
here in Gainesville and they serve you a

455
00:18:34,650 --> 00:18:38,669
local version of CNN right so by any

456
00:18:38,669 --> 00:18:40,380
stretch of imagination none of these

457
00:18:40,380 --> 00:18:43,290
things are in fact identifiers but then

458
00:18:43,290 --> 00:18:47,059
what's an identifier for those things

459
00:18:47,270 --> 00:18:50,760
you see the problem is very it's very

460
00:18:50,760 --> 00:18:52,320
tricky and I want you to understand it's

461
00:18:52,320 --> 00:18:53,309
very tricky I mean at some point you

462
00:18:53,309 --> 00:18:54,600
have to give up and say I don't even

463
00:18:54,600 --> 00:18:55,980
really need identifies I have these

464
00:18:55,980 --> 00:18:57,419
logical things that I'm trying to find

465
00:18:57,419 --> 00:18:59,640
and I just hope that the magic works so

466
00:18:59,640 --> 00:19:01,919
the problem is a lot of this might be

467
00:19:01,919 --> 00:19:04,650
so-called dynamical content it simply

468
00:19:04,650 --> 00:19:06,760
doesn't exist until you access it

469
00:19:06,760 --> 00:19:10,180
it does it's some recipe to extract it

470
00:19:10,180 --> 00:19:13,300
from some sort of database that itself

471
00:19:13,300 --> 00:19:15,490
it's gonna change over time

472
00:19:15,490 --> 00:19:20,290
right so for example let's say auctions

473
00:19:20,290 --> 00:19:22,360
on eBay they come and go and come and go

474
00:19:22,360 --> 00:19:24,970
and come and go and eBay might reuse

475
00:19:24,970 --> 00:19:26,440
actually they are identifiers we do this

476
00:19:26,440 --> 00:19:29,220
kind of nasty thing why I don't know

477
00:19:29,220 --> 00:19:33,340
right reusing identifiers you see refers

478
00:19:33,340 --> 00:19:34,990
to the same entity and it's kind of you

479
00:19:34,990 --> 00:19:36,430
know it's unique through the life of the

480
00:19:36,430 --> 00:19:37,890
universe that's the ideal situation

481
00:19:37,890 --> 00:19:40,780
reusing identifiers is one of the

482
00:19:40,780 --> 00:19:43,210
biggest sources of bugs programming

483
00:19:43,210 --> 00:19:45,570
languages or accessing resources

484
00:19:45,570 --> 00:19:48,910
suddenly at the same page you have very

485
00:19:48,910 --> 00:19:51,610
different things missing identifiers I

486
00:19:51,610 --> 00:19:53,200
mean missing resources when you follow

487
00:19:53,200 --> 00:19:54,610
identifiers that's another very annoying

488
00:19:54,610 --> 00:19:57,940
thing is the 404 errors right so this is

489
00:19:57,940 --> 00:20:00,130
why again on the web you can start

490
00:20:00,130 --> 00:20:03,220
seeing efforts which are different than

491
00:20:03,220 --> 00:20:05,260
short URLs but they usually going hand

492
00:20:05,260 --> 00:20:07,240
in hand with your urls permanent links

493
00:20:07,240 --> 00:20:09,690
so what are those permanent links

494
00:20:09,690 --> 00:20:11,920
they're essentially promises that we

495
00:20:11,920 --> 00:20:14,380
will never reuse that name for any

496
00:20:14,380 --> 00:20:17,380
resource ever until we change our mind

497
00:20:17,380 --> 00:20:21,520
it's always kind of a right but more and

498
00:20:21,520 --> 00:20:23,380
more websites start to say you know what

499
00:20:23,380 --> 00:20:25,720
this specific thing has a life of its

500
00:20:25,720 --> 00:20:28,630
own and we dedicate a permanent name for

501
00:20:28,630 --> 00:20:30,520
now the problem with the permanent names

502
00:20:30,520 --> 00:20:32,890
is if you use a nice naming technique

503
00:20:32,890 --> 00:20:34,900
somebody's gonna mess up and somebody's

504
00:20:34,900 --> 00:20:36,730
going to reuse the nice space if you

505
00:20:36,730 --> 00:20:39,400
pair it up with this ugly looking oops

506
00:20:39,400 --> 00:20:45,700
sorry about this I should remember to

507
00:20:45,700 --> 00:20:50,650
turn off my phone sorry if right if you

508
00:20:50,650 --> 00:20:52,960
have ugly URLs especially if you pair

509
00:20:52,960 --> 00:20:55,330
them up with you UI it is then you can

510
00:20:55,330 --> 00:20:56,890
actually afford to have a permanent link

511
00:20:56,890 --> 00:20:59,050
and not reuse the same thing again right

512
00:20:59,050 --> 00:21:03,280
so very something soft subtle that goes

513
00:21:03,280 --> 00:21:04,840
on in here I want you to appreciate it

514
00:21:04,840 --> 00:21:06,460
okay we are gonna go through all kinds

515
00:21:06,460 --> 00:21:09,340
of techniques and so on but what people

516
00:21:09,340 --> 00:21:12,640
thought would be okay at some point it

517
00:21:12,640 --> 00:21:14,940
starting to have a life of its own and

518
00:21:14,940 --> 00:21:17,650
shifted and became very ugly and very

519
00:21:17,650 --> 00:21:20,080
and very nasty and then it converted

520
00:21:20,080 --> 00:21:20,680
into something

521
00:21:20,680 --> 00:21:24,670
right if you think about it the Agra

522
00:21:24,670 --> 00:21:28,990
fine URLs are about as bad as the IP

523
00:21:28,990 --> 00:21:32,470
addresses right so we go from ugly to

524
00:21:32,470 --> 00:21:36,310
nice to ugly again but then you have to

525
00:21:36,310 --> 00:21:38,200
rely on a completely different mechanism

526
00:21:38,200 --> 00:21:42,010
to find the resource and more and more

527
00:21:42,010 --> 00:21:44,020
that inevitably ends our being some sort

528
00:21:44,020 --> 00:21:48,280
of search okay so naming it's

529
00:21:48,280 --> 00:21:50,020
interrelated to search and I want you to

530
00:21:50,020 --> 00:21:51,760
keep this in mind as we go through

531
00:21:51,760 --> 00:21:53,800
various kind of materials because the

532
00:21:53,800 --> 00:21:55,420
only reason you need the name is because

533
00:21:55,420 --> 00:21:56,860
you want to find a resource pointed by

534
00:21:56,860 --> 00:21:58,210
the name it doesn't matter that's alias

535
00:21:58,210 --> 00:21:59,650
not alias identified or not identified

536
00:21:59,650 --> 00:22:02,380
right you have no reason to name

537
00:22:02,380 --> 00:22:05,470
anything unless you want to go back and

538
00:22:05,470 --> 00:22:08,650
find that resource and do something with

539
00:22:08,650 --> 00:22:10,120
that tree so but that's a different kind

540
00:22:10,120 --> 00:22:13,750
of deal okay but search could replace

541
00:22:13,750 --> 00:22:17,850
naming right what exactly search

542
00:22:17,850 --> 00:22:23,320
ultimately going from some sort of a

543
00:22:23,320 --> 00:22:26,320
description of properties and was some

544
00:22:26,320 --> 00:22:28,390
ranking and whatnot - who has the

545
00:22:28,390 --> 00:22:30,460
resource you see if you have search you

546
00:22:30,460 --> 00:22:32,680
don't really need nice names you simply

547
00:22:32,680 --> 00:22:34,900
don't I mean okay because you the

548
00:22:34,900 --> 00:22:36,220
interface is in such a way that you

549
00:22:36,220 --> 00:22:38,440
don't click on something you only care

550
00:22:38,440 --> 00:22:40,030
about nice structure in the names if you

551
00:22:40,030 --> 00:22:41,560
want to fully automate the process with

552
00:22:41,560 --> 00:22:43,420
some kind of scripts to do something but

553
00:22:43,420 --> 00:22:46,210
if you have a search service and the

554
00:22:46,210 --> 00:22:48,400
search service says oh for this ideas

555
00:22:48,400 --> 00:22:50,170
you these are the resources you can

556
00:22:50,170 --> 00:22:53,590
access then you shouldn't care now there

557
00:22:53,590 --> 00:22:56,320
is something else that's much more

558
00:22:56,320 --> 00:22:59,050
subtle but very important when it comes

559
00:22:59,050 --> 00:23:01,720
to these ugly names ugly names can

560
00:23:01,720 --> 00:23:03,670
actually achieve multiple things one of

561
00:23:03,670 --> 00:23:05,320
them is you can dedicate an ugly name

562
00:23:05,320 --> 00:23:06,730
forever to a resource so you never have

563
00:23:06,730 --> 00:23:09,280
to reuse it okay but there is something

564
00:23:09,280 --> 00:23:12,400
else you can in fact significantly

565
00:23:12,400 --> 00:23:14,110
improve the security of the system we

566
00:23:14,110 --> 00:23:15,700
are going to talk about this later all

567
00:23:15,700 --> 00:23:16,030
right

568
00:23:16,030 --> 00:23:22,380
so you see if the name is scrambled and

569
00:23:22,380 --> 00:23:24,820
knowing the exact name of a resource

570
00:23:24,820 --> 00:23:27,130
it's a prerequisite to find a resource

571
00:23:27,130 --> 00:23:29,560
then you can make sure that the resource

572
00:23:29,560 --> 00:23:31,930
cannot be accessed by external entities

573
00:23:31,930 --> 00:23:34,419
and as we know the magic ingredients

574
00:23:34,419 --> 00:23:37,480
in the name right and this can be used

575
00:23:37,480 --> 00:23:40,389
to a great effect for security and this

576
00:23:40,389 --> 00:23:42,220
is in fact used for various kinds of

577
00:23:42,220 --> 00:23:43,720
security on the web for example I

578
00:23:43,720 --> 00:23:45,730
noticed to my surprise it's very

579
00:23:45,730 --> 00:23:47,230
surprising when the large company do the

580
00:23:47,230 --> 00:23:50,019
right thing right so for example I

581
00:23:50,019 --> 00:23:52,450
noticed that for example on Flickr if

582
00:23:52,450 --> 00:23:54,929
you have pictures or if you have albums

583
00:23:54,929 --> 00:23:58,239
the actual URL is going to contain this

584
00:23:58,239 --> 00:24:00,909
monstrously large very ugly looking

585
00:24:00,909 --> 00:24:03,730
strings what are those well it's very

586
00:24:03,730 --> 00:24:04,899
easy and we're going to talk about this

587
00:24:04,899 --> 00:24:05,980
when we talk about security it's very

588
00:24:05,980 --> 00:24:07,210
easy to produce one of those ugly things

589
00:24:07,210 --> 00:24:09,460
you take a nice name and you push it

590
00:24:09,460 --> 00:24:11,019
through cryptographically secure method

591
00:24:11,019 --> 00:24:14,950
for example or to hashing right that way

592
00:24:14,950 --> 00:24:16,869
you obtain an ugly thing we know that

593
00:24:16,869 --> 00:24:19,359
those are extremely hard to revert right

594
00:24:19,359 --> 00:24:22,210
now the thing is the following if your

595
00:24:22,210 --> 00:24:25,570
namespace it's relatively small you can

596
00:24:25,570 --> 00:24:28,359
find resources by throwing darts and by

597
00:24:28,359 --> 00:24:31,600
chance and this is used to to a great

598
00:24:31,600 --> 00:24:33,489
extent when people are trying to attack

599
00:24:33,489 --> 00:24:36,100
things domains and whatnot right all you

600
00:24:36,100 --> 00:24:38,109
need to do is speak from the four

601
00:24:38,109 --> 00:24:40,269
billion IP addresses I just try your

602
00:24:40,269 --> 00:24:43,570
luck right that's not necessarily a bad

603
00:24:43,570 --> 00:24:45,309
thing I mean a lot of attack succeeded

604
00:24:45,309 --> 00:24:46,690
very nice like this you don't even have

605
00:24:46,690 --> 00:24:49,269
to go through the DNS but if the space

606
00:24:49,269 --> 00:24:51,039
is very large if the naming space is

607
00:24:51,039 --> 00:24:52,869
large and it's paired up with this ugly

608
00:24:52,869 --> 00:24:58,529
fire right then in fact you make the

609
00:24:58,529 --> 00:25:01,450
randomly try technique fail miserably

610
00:25:01,450 --> 00:25:03,609
right I mean first you can apply the

611
00:25:03,609 --> 00:25:04,960
following very simple techniques based

612
00:25:04,960 --> 00:25:06,159
on naming and this is I want you to

613
00:25:06,159 --> 00:25:07,570
understand this is related to naming and

614
00:25:07,570 --> 00:25:08,739
all programming language will do

615
00:25:08,739 --> 00:25:10,749
something else if you're just randomly

616
00:25:10,749 --> 00:25:12,820
trying names you can basically detect

617
00:25:12,820 --> 00:25:14,649
this mechanism and say if you try more

618
00:25:14,649 --> 00:25:16,359
than a hundred but if you have more than

619
00:25:16,359 --> 00:25:18,369
100 failures per second I'm gonna shut

620
00:25:18,369 --> 00:25:21,669
you off for ten minutes right the same

621
00:25:21,669 --> 00:25:23,830
is happening when it comes to port I

622
00:25:23,830 --> 00:25:26,409
think about the for example the port

623
00:25:26,409 --> 00:25:28,090
numbers you have IP addresses which are

624
00:25:28,090 --> 00:25:29,499
at the low level and then you have the

625
00:25:29,499 --> 00:25:31,350
port numbers but that's naming as well I

626
00:25:31,350 --> 00:25:34,169
mean ultimately everything is naming

627
00:25:34,169 --> 00:25:37,869
well I would argue that even the address

628
00:25:37,869 --> 00:25:39,940
in memory it's some sort of naming

629
00:25:39,940 --> 00:25:41,499
because it's virtual you're dealing

630
00:25:41,499 --> 00:25:43,119
about with the virtual memory address

631
00:25:43,119 --> 00:25:44,289
the physical memory address only the

632
00:25:44,289 --> 00:25:45,759
operating system really knows where it

633
00:25:45,759 --> 00:25:48,250
is right so

634
00:25:48,250 --> 00:25:50,440
naming it's part of the fabric of

635
00:25:50,440 --> 00:25:51,790
everything we do in computer science

636
00:25:51,790 --> 00:25:53,280
it's everywhere

637
00:25:53,280 --> 00:25:55,540
high-level naming uses lower-level

638
00:25:55,540 --> 00:25:57,130
naming which is lower level naming and

639
00:25:57,130 --> 00:25:58,540
eventually somebody gets to some sort of

640
00:25:58,540 --> 00:26:00,850
bits and gets the work done okay by the

641
00:26:00,850 --> 00:26:04,390
stack it's actually quite high okay all

642
00:26:04,390 --> 00:26:06,550
right so that's basically naming for you

643
00:26:06,550 --> 00:26:08,440
and for example a lot of programming

644
00:26:08,440 --> 00:26:10,270
language that they do what they organize

645
00:26:10,270 --> 00:26:12,340
names into some sort of super domains

646
00:26:12,340 --> 00:26:15,640
right so for example c plus plus well

647
00:26:15,640 --> 00:26:16,690
you have a notion of local variables

648
00:26:16,690 --> 00:26:18,190
which are things that live on the stack

649
00:26:18,190 --> 00:26:20,230
and i kept on getting rewritten but then

650
00:26:20,230 --> 00:26:21,760
you have things on the heap for example

651
00:26:21,760 --> 00:26:23,950
but for things on the heap in principle

652
00:26:23,950 --> 00:26:25,420
you could have a flattening hierarchy

653
00:26:25,420 --> 00:26:27,760
all right but you prefer not to you

654
00:26:27,760 --> 00:26:28,870
prefer to organize it now into

655
00:26:28,870 --> 00:26:30,610
namespaces or something right you you

656
00:26:30,610 --> 00:26:33,130
prefer to say I want to within this

657
00:26:33,130 --> 00:26:35,050
namespace I'm gonna have this kind of

658
00:26:35,050 --> 00:26:36,580
resource maybe an instance of a class

659
00:26:36,580 --> 00:26:38,710
and within the class I have this member

660
00:26:38,710 --> 00:26:41,980
and then the name it's really the

661
00:26:41,980 --> 00:26:44,230
namespace the name of the class or the

662
00:26:44,230 --> 00:26:46,480
name of the object and then the name of

663
00:26:46,480 --> 00:26:50,280
the support not very dissimilar from

664
00:26:50,280 --> 00:26:54,580
what the URLs are all about okay right

665
00:26:54,580 --> 00:26:57,520
now even before I go into the discussion

666
00:26:57,520 --> 00:27:03,400
one very important thing is if you could

667
00:27:03,400 --> 00:27:05,980
reuse I mean first of all naming it's to

668
00:27:05,980 --> 00:27:07,420
some extent overrated because search

669
00:27:07,420 --> 00:27:09,400
becomes much more important once you buy

670
00:27:09,400 --> 00:27:11,110
into that I think things become a lot

671
00:27:11,110 --> 00:27:13,720
more relaxed okay when it comes to

672
00:27:13,720 --> 00:27:15,400
finally coming up with your own name I

673
00:27:15,400 --> 00:27:17,290
think you have to name things all the

674
00:27:17,290 --> 00:27:18,790
time and you have to talk about

675
00:27:18,790 --> 00:27:22,000
resources all the time if you're talking

676
00:27:22,000 --> 00:27:23,470
about local resources and you

677
00:27:23,470 --> 00:27:24,610
programming some programming languages

678
00:27:24,610 --> 00:27:26,050
then it's gonna impose on you some sort

679
00:27:26,050 --> 00:27:27,190
of naming or you can make your own

680
00:27:27,190 --> 00:27:28,630
conventions how you're not going to name

681
00:27:28,630 --> 00:27:30,310
things how many people here know about

682
00:27:30,310 --> 00:27:32,500
the Hungarian notation that Microsoft

683
00:27:32,500 --> 00:27:34,330
was using for a long time and what's

684
00:27:34,330 --> 00:27:37,620
that Hungarian notation all about

685
00:27:39,650 --> 00:27:41,720
right so who why do they call it Hank

686
00:27:41,720 --> 00:27:43,870
Aaron tation and who came up with it

687
00:27:43,870 --> 00:27:48,470
well so you see a number of people were

688
00:27:48,470 --> 00:27:50,570
there at the beginning of Microsoft and

689
00:27:50,570 --> 00:27:52,160
one of them and I don't remember his

690
00:27:52,160 --> 00:27:55,550
name is this Hungarian guy and he was

691
00:27:55,550 --> 00:27:57,620
the heavyweight programmer on Windows at

692
00:27:57,620 --> 00:27:59,000
the beginning and this is the guy that

693
00:27:59,000 --> 00:28:01,490
said we are dealing with the language

694
00:28:01,490 --> 00:28:03,940
that's very nasty with respect to types

695
00:28:03,940 --> 00:28:06,470
by the way in Scala for example types

696
00:28:06,470 --> 00:28:08,570
are part of the name essentially right

697
00:28:08,570 --> 00:28:10,970
the naming and tapping and in C++ and

698
00:28:10,970 --> 00:28:13,040
this is what creates a mess when you go

699
00:28:13,040 --> 00:28:15,350
from c to c plus plus because types

700
00:28:15,350 --> 00:28:18,080
become part of the name so in c types

701
00:28:18,080 --> 00:28:19,460
are not part of the name by any stretch

702
00:28:19,460 --> 00:28:20,990
of imagination and when I give you a

703
00:28:20,990 --> 00:28:24,650
function there is no way for you to tell

704
00:28:24,650 --> 00:28:26,570
what are the inputs of that function or

705
00:28:26,570 --> 00:28:28,850
the outputs of that function right the

706
00:28:28,850 --> 00:28:30,800
trouble is there is no way for the

707
00:28:30,800 --> 00:28:33,710
compiler to tell and then you can have

708
00:28:33,710 --> 00:28:35,390
these very subtle bugs in which you can

709
00:28:35,390 --> 00:28:37,540
call functions with the wrong arguments

710
00:28:37,540 --> 00:28:42,110
in order to alleviate that the guy at

711
00:28:42,110 --> 00:28:43,670
Microsoft where I came up with a set of

712
00:28:43,670 --> 00:28:46,820
conventions to name functions but that

713
00:28:46,820 --> 00:28:49,100
produces monstrously looking names right

714
00:28:49,100 --> 00:28:51,410
so that the programmer all the time has

715
00:28:51,410 --> 00:28:54,140
it seen fail in his face what does that

716
00:28:54,140 --> 00:28:55,730
function do especially what it returns

717
00:28:55,730 --> 00:28:57,770
the return type can be devastating if

718
00:28:57,770 --> 00:28:59,360
you get it wrong for a lot of the things

719
00:28:59,360 --> 00:29:03,200
and C has no checks whatsoever right why

720
00:29:03,200 --> 00:29:05,900
ultimately everything it's a bag of bits

721
00:29:05,900 --> 00:29:07,880
to these local level languages you can

722
00:29:07,880 --> 00:29:09,530
put whatever name you want on it I don't

723
00:29:09,530 --> 00:29:10,910
care I'm not gonna do any checks as a

724
00:29:10,910 --> 00:29:12,920
bag of bits so if you tell me later that

725
00:29:12,920 --> 00:29:15,020
the bag of bits means an integer I'll

726
00:29:15,020 --> 00:29:16,460
interpret it as an integer if you tell

727
00:29:16,460 --> 00:29:19,100
me that it means a float I'm interpreted

728
00:29:19,100 --> 00:29:20,660
as a float and this is how you get very

729
00:29:20,660 --> 00:29:23,540
strange-looking integers right you go

730
00:29:23,540 --> 00:29:25,640
and program especially in C and you say

731
00:29:25,640 --> 00:29:27,890
look this is impossible I put the number

732
00:29:27,890 --> 00:29:31,370
3 here and what I got here is this

733
00:29:31,370 --> 00:29:33,830
scramble looking thing the compiler

734
00:29:33,830 --> 00:29:36,620
hates me well it's the typing that's not

735
00:29:36,620 --> 00:29:38,990
enforced in there so why am I saying

736
00:29:38,990 --> 00:29:41,390
that the typing is the typing is part of

737
00:29:41,390 --> 00:29:42,590
the naming and high-level programming

738
00:29:42,590 --> 00:29:47,090
languages again that's one trick you can

739
00:29:47,090 --> 00:29:49,010
apply to simulate the Hungarian notation

740
00:29:49,010 --> 00:29:51,800
to enforce types this is what c++ does

741
00:29:51,800 --> 00:29:53,360
and this is why it's so hard

742
00:29:53,360 --> 00:29:55,970
to connect C++ with anything it's not

743
00:29:55,970 --> 00:29:57,830
hard for C++ to connect to anything it's

744
00:29:57,830 --> 00:30:01,510
hard for anybody else to connect to C++

745
00:30:01,510 --> 00:30:04,150
how many people here know about the name

746
00:30:04,150 --> 00:30:09,679
name mingling in C++ right so what's

747
00:30:09,679 --> 00:30:12,400
that name English

748
00:30:25,110 --> 00:30:28,650
right so she has a unique problem and

749
00:30:28,650 --> 00:30:30,990
it's related to naming and the attempt

750
00:30:30,990 --> 00:30:32,760
to end extra information to the name to

751
00:30:32,760 --> 00:30:35,220
properly use it later right so I mean in

752
00:30:35,220 --> 00:30:36,900
some sense if I put HTTP here I'm

753
00:30:36,900 --> 00:30:38,880
indicating how this should be accessed

754
00:30:38,880 --> 00:30:42,390
how this should be used so one way to

755
00:30:42,390 --> 00:30:44,040
really get a lot of information in any

756
00:30:44,040 --> 00:30:46,500
identifier and to even enforce some

757
00:30:46,500 --> 00:30:48,390
rules about how it should be used is to

758
00:30:48,390 --> 00:30:50,820
mix up in the name of the identifying

759
00:30:50,820 --> 00:30:52,200
information about how it should be used

760
00:30:52,200 --> 00:30:55,230
in C in C++ I'm sorry that's information

761
00:30:55,230 --> 00:30:57,390
about for example to what class so

762
00:30:57,390 --> 00:31:02,130
ultimately okay so you might not realize

763
00:31:02,130 --> 00:31:03,090
that this is true and this is a

764
00:31:03,090 --> 00:31:04,230
fundamental difference by the way

765
00:31:04,230 --> 00:31:08,460
between Java and C++ on the surface they

766
00:31:08,460 --> 00:31:10,350
look very similar but deep inside this

767
00:31:10,350 --> 00:31:12,680
is truly fundamental difference right

768
00:31:12,680 --> 00:31:15,300
C++ designers so how many people know

769
00:31:15,300 --> 00:31:17,070
about the history of C++ oh by the way

770
00:31:17,070 --> 00:31:18,330
I'm mentioning all of these things

771
00:31:18,330 --> 00:31:20,040
because it's all related to the history

772
00:31:20,040 --> 00:31:21,630
it's all something that happened in the

773
00:31:21,630 --> 00:31:23,880
past that just makes it fruit so

774
00:31:23,880 --> 00:31:25,680
whatever you bump into that you hate now

775
00:31:25,680 --> 00:31:28,980
has a point of origin somewhere at least

776
00:31:28,980 --> 00:31:30,750
that knowing what the point of origin is

777
00:31:30,750 --> 00:31:32,670
you might it might alleviate the pain

778
00:31:32,670 --> 00:31:34,500
you're going through now to deal with it

779
00:31:34,500 --> 00:31:36,690
right it turns out that C++ was

780
00:31:36,690 --> 00:31:40,470
essentially some sort of super library

781
00:31:40,470 --> 00:31:43,290
built on top of C the first C++ compiler

782
00:31:43,290 --> 00:31:45,180
was written in the preprocessor and was

783
00:31:45,180 --> 00:31:47,340
trans translating through pre-processing

784
00:31:47,340 --> 00:31:48,000
techniques

785
00:31:48,000 --> 00:31:50,820
high-level C++ like concepts into row C

786
00:31:50,820 --> 00:31:52,650
and the row C then compiled and push

787
00:31:52,650 --> 00:31:54,350
through and that's still true today

788
00:31:54,350 --> 00:31:57,900
essentially because in fact the

789
00:31:57,900 --> 00:31:59,790
low-level linker who knows what a linker

790
00:31:59,790 --> 00:32:03,030
is what does a linker do by the way I'm

791
00:32:03,030 --> 00:32:05,490
not trying to go all the way out and not

792
00:32:05,490 --> 00:32:07,110
even to avoid talking about what I need

793
00:32:07,110 --> 00:32:10,080
to talk about one of the core issues in

794
00:32:10,080 --> 00:32:13,020
a linker is naming so what does a linker

795
00:32:13,020 --> 00:32:19,020
do the linker the role of the linker is

796
00:32:19,020 --> 00:32:22,020
to resolve names okay so that means

797
00:32:22,020 --> 00:32:24,510
precisely the following thing I give you

798
00:32:24,510 --> 00:32:27,900
a big bundle in the bundle I'm gonna

799
00:32:27,900 --> 00:32:31,230
have name to whatever actual executes

800
00:32:31,230 --> 00:32:34,320
snippets of executable code so that if

801
00:32:34,320 --> 00:32:36,450
the programing counter jumps layer is

802
00:32:36,450 --> 00:32:37,650
going to do something

803
00:32:37,650 --> 00:32:39,960
now the problem is the following you

804
00:32:39,960 --> 00:32:41,910
cannot fully generate the program that

805
00:32:41,910 --> 00:32:45,000
you're supposed to run in most modern

806
00:32:45,000 --> 00:32:47,040
systems because that essentially means

807
00:32:47,040 --> 00:32:49,260
gather all your resources in a single

808
00:32:49,260 --> 00:32:52,050
shot and produce this pristine bag of

809
00:32:52,050 --> 00:32:53,430
bits that's fully independent of

810
00:32:53,430 --> 00:32:54,720
anything else in the system maybe with

811
00:32:54,720 --> 00:32:56,520
the exception of system calls okay

812
00:32:56,520 --> 00:32:58,770
that's not the way it works the way it

813
00:32:58,770 --> 00:33:01,380
works now is we have many many many

814
00:33:01,380 --> 00:33:03,090
parts that need to be assembled when an

815
00:33:03,090 --> 00:33:04,590
executable runs they're called libraries

816
00:33:04,590 --> 00:33:06,960
right is the dll's so how many people

817
00:33:06,960 --> 00:33:10,020
know about the DLL hell in Windows now

818
00:33:10,020 --> 00:33:12,330
it's better right but about 10 years ago

819
00:33:12,330 --> 00:33:14,580
it was a truly horrible problem right

820
00:33:14,580 --> 00:33:17,190
and what was the problem where are those

821
00:33:17,190 --> 00:33:18,660
dealers that we need what are those

822
00:33:18,660 --> 00:33:21,450
dll's dynamically linked libraries the

823
00:33:21,450 --> 00:33:24,420
answers in in Venus so what are these

824
00:33:24,420 --> 00:33:27,120
dynamically linked libraries and it all

825
00:33:27,120 --> 00:33:28,920
goes down eventually to how the linker

826
00:33:28,920 --> 00:33:30,360
works right so this dynamically linked

827
00:33:30,360 --> 00:33:32,010
libraries are these bundles that have

828
00:33:32,010 --> 00:33:36,330
symbolic name again naming to beg

829
00:33:36,330 --> 00:33:38,220
updates and it's essentially they

830
00:33:38,220 --> 00:33:40,380
contain enough information for the

831
00:33:40,380 --> 00:33:42,360
linking process to happen the linking

832
00:33:42,360 --> 00:33:43,800
happens like this and by the way you can

833
00:33:43,800 --> 00:33:45,150
actually see it in action and you can

834
00:33:45,150 --> 00:33:46,770
use this we use this for example in that

835
00:33:46,770 --> 00:33:49,740
database engine we develop any new code

836
00:33:49,740 --> 00:33:51,540
you want to run at execution time so

837
00:33:51,540 --> 00:33:52,890
when you run the code what you produce

838
00:33:52,890 --> 00:33:55,440
is a library you dynamically linked make

839
00:33:55,440 --> 00:33:57,690
the library into the running program so

840
00:33:57,690 --> 00:33:59,429
you add parts as the program runs and

841
00:33:59,429 --> 00:34:02,370
then you you call the things inside and

842
00:34:02,370 --> 00:34:03,900
you see in order for me to call the

843
00:34:03,900 --> 00:34:05,340
things inside I have to know how they

844
00:34:05,340 --> 00:34:06,020
are called

845
00:34:06,020 --> 00:34:08,489
this is what's essentially needed for

846
00:34:08,489 --> 00:34:11,550
the linking right somebody has to know

847
00:34:11,550 --> 00:34:14,780
under what name the resource is

848
00:34:14,780 --> 00:34:17,040
mentioned in the big bag of bits and

849
00:34:17,040 --> 00:34:18,719
then the low-level linker takes over

850
00:34:18,719 --> 00:34:20,909
right and the low-level linker will do

851
00:34:20,909 --> 00:34:23,520
the following thing it figures out that

852
00:34:23,520 --> 00:34:25,980
you need a function named foo let's say

853
00:34:25,980 --> 00:34:28,500
we'll find where is it in the loaded

854
00:34:28,500 --> 00:34:31,080
library and we'll replace that foo by

855
00:34:31,080 --> 00:34:32,610
the pointer to the function because

856
00:34:32,610 --> 00:34:33,780
ultimately at the low level you only

857
00:34:33,780 --> 00:34:36,149
have this role pointers or void pointers

858
00:34:36,149 --> 00:34:39,600
right so it's all about resolving names

859
00:34:39,600 --> 00:34:42,149
there which means it's a fundamental

860
00:34:42,149 --> 00:34:45,330
naming problem because if you don't have

861
00:34:45,330 --> 00:34:46,830
the right name you're gonna not you're

862
00:34:46,830 --> 00:34:48,780
not gonna load the right thing now in

863
00:34:48,780 --> 00:34:50,960
seed the naming is very simple the

864
00:34:50,960 --> 00:34:52,820
you can see it's flat we're going to

865
00:34:52,820 --> 00:34:54,290
talk about flat names it looks like I'm

866
00:34:54,290 --> 00:34:55,940
gonna talk about most of the meet next

867
00:34:55,940 --> 00:34:58,430
time which is fine so EC names are flat

868
00:34:58,430 --> 00:35:00,589
which means the name you see is the name

869
00:35:00,589 --> 00:35:05,950
you get in C if you call a function foo

870
00:35:05,950 --> 00:35:09,410
literally the name in the object reduced

871
00:35:09,410 --> 00:35:10,940
or the library if it's one tool in a

872
00:35:10,940 --> 00:35:12,680
library or whatever it's gonna be full

873
00:35:12,680 --> 00:35:16,400
and that's it okay but that's not true

874
00:35:16,400 --> 00:35:18,440
in C++ because of all these additions

875
00:35:18,440 --> 00:35:20,260
you want to put on top of it to know

876
00:35:20,260 --> 00:35:25,369
what the type is okay in C++ and now I

877
00:35:25,369 --> 00:35:27,410
wish I could tell you what C++ does but

878
00:35:27,410 --> 00:35:29,660
it turns out that that has never been

879
00:35:29,660 --> 00:35:31,130
standardized and this is a fundamental

880
00:35:31,130 --> 00:35:35,119
problem with C++ okay so not only and I

881
00:35:35,119 --> 00:35:37,460
mentioned this maybe before but not only

882
00:35:37,460 --> 00:35:39,890
different compilers have a different way

883
00:35:39,890 --> 00:35:42,109
to produce the ugly name from the nice

884
00:35:42,109 --> 00:35:44,180
name you see in C++ this will have full

885
00:35:44,180 --> 00:35:45,710
string in it but will have a lot more

886
00:35:45,710 --> 00:35:48,800
stuff right you can see this by the way

887
00:35:48,800 --> 00:35:51,050
if you compile a C++ program and then

888
00:35:51,050 --> 00:35:52,460
you look in the library with one of the

889
00:35:52,460 --> 00:35:54,080
programs that dump the symbols in a

890
00:35:54,080 --> 00:35:56,390
library right you do that you're going

891
00:35:56,390 --> 00:35:58,190
to see foo and lots of things at the

892
00:35:58,190 --> 00:35:59,599
beginning foo and lots of things at the

893
00:35:59,599 --> 00:36:01,670
end now here's the nasty thing in C++

894
00:36:01,670 --> 00:36:03,020
and that's the thing in C++ and that's

895
00:36:03,020 --> 00:36:04,460
because fundamentally the naming issue

896
00:36:04,460 --> 00:36:06,859
has not been resolved in a standard way

897
00:36:06,859 --> 00:36:09,619
is not only different compilers have

898
00:36:09,619 --> 00:36:12,050
different way to to mangle the names but

899
00:36:12,050 --> 00:36:15,250
even the same compiler in a new version

900
00:36:15,250 --> 00:36:17,270
right so for example GCC

901
00:36:17,270 --> 00:36:18,680
four-point-seven has a different

902
00:36:18,680 --> 00:36:23,180
mangling technique than the 4.8 this is

903
00:36:23,180 --> 00:36:24,560
essentially madness you're not even

904
00:36:24,560 --> 00:36:26,450
consistent with slightly older versions

905
00:36:26,450 --> 00:36:28,550
of yourself why is that the case because

906
00:36:28,550 --> 00:36:29,990
they are in I don't care mode and

907
00:36:29,990 --> 00:36:31,310
recompile everything with a new compiler

908
00:36:31,310 --> 00:36:34,280
right that creates tremendous problems

909
00:36:34,280 --> 00:36:35,900
for example if you want to produce

910
00:36:35,900 --> 00:36:39,109
compatible compilers right so one one

911
00:36:39,109 --> 00:36:41,240
issue and that's a pure naming issue one

912
00:36:41,240 --> 00:36:43,400
issue for example is I don't know if you

913
00:36:43,400 --> 00:36:45,260
know but the whole industry is dominated

914
00:36:45,260 --> 00:36:47,900
in now by GCC so we move from a world in

915
00:36:47,900 --> 00:36:51,190
which the king of the road was the

916
00:36:51,190 --> 00:36:55,400
visual C++ now you have a lot of web

917
00:36:55,400 --> 00:36:56,900
development and whatnot that's driven by

918
00:36:56,900 --> 00:36:59,420
UNIX systems and in UNIX systems GCC is

919
00:36:59,420 --> 00:37:02,060
king if Jesus if that's something

920
00:37:02,060 --> 00:37:03,960
everybody else has to follow

921
00:37:03,960 --> 00:37:05,520
you're not compatible with GCC you're

922
00:37:05,520 --> 00:37:07,950
dead you cannot sell your compiler why

923
00:37:07,950 --> 00:37:09,660
vast majority of the programs are

924
00:37:09,660 --> 00:37:11,430
compiled with GCC and in order for

925
00:37:11,430 --> 00:37:14,099
people to justify using another compiler

926
00:37:14,099 --> 00:37:15,570
even if it's good it has to be a drop-in

927
00:37:15,570 --> 00:37:17,730
replacement for GCC but you see that

928
00:37:17,730 --> 00:37:20,700
creates a naming problem because you

929
00:37:20,700 --> 00:37:24,180
need to figure out how GCC produces

930
00:37:24,180 --> 00:37:26,730
those names because if you don't follow

931
00:37:26,730 --> 00:37:28,290
the same convention you're not going to

932
00:37:28,290 --> 00:37:30,660
produce the same names which means you

933
00:37:30,660 --> 00:37:32,160
need to figure out how to produce the

934
00:37:32,160 --> 00:37:33,089
identifiers

935
00:37:33,089 --> 00:37:35,910
it's an identifier issue right if you

936
00:37:35,910 --> 00:37:37,140
take another program if you don't

937
00:37:37,140 --> 00:37:38,369
produce the correct identifier the

938
00:37:38,369 --> 00:37:41,339
linker will fail and say but when you

939
00:37:41,339 --> 00:37:44,220
have linker errors you have extremely

940
00:37:44,220 --> 00:37:46,440
nasty issues to deal with I mean

941
00:37:46,440 --> 00:37:47,880
everything looks scrambled then nothing

942
00:37:47,880 --> 00:37:51,240
makes sense even if you've done this for

943
00:37:51,240 --> 00:37:53,670
15 years I look at okay the thing I'm

944
00:37:53,670 --> 00:37:55,830
most afraid of is linking problems my

945
00:37:55,830 --> 00:37:57,810
calculation I can read in kind of deal

946
00:37:57,810 --> 00:37:59,420
with but linking it can be disastrous

947
00:37:59,420 --> 00:38:02,130
you don't even know where to start okay

948
00:38:02,130 --> 00:38:04,260
so most of the compilers for example

949
00:38:04,260 --> 00:38:05,790
will try to detect which version of GCC

950
00:38:05,790 --> 00:38:07,260
you have installed on the system or have

951
00:38:07,260 --> 00:38:09,540
extra options to say hey pretend you're

952
00:38:09,540 --> 00:38:12,119
GCC 4.7 because actually have different

953
00:38:12,119 --> 00:38:14,490
mingling than 4.8 which has vastly

954
00:38:14,490 --> 00:38:17,640
different mingling than 4.0 right but it

955
00:38:17,640 --> 00:38:19,859
all boils down to the naming in fact

956
00:38:19,859 --> 00:38:21,900
okay so naming it's a very powerful

957
00:38:21,900 --> 00:38:24,119
thing because it's not only some sort of

958
00:38:24,119 --> 00:38:26,300
something you can carry meaning like

959
00:38:26,300 --> 00:38:32,940
type information right in this URLs a

960
00:38:32,940 --> 00:38:35,490
bit first of all the URL got extended to

961
00:38:35,490 --> 00:38:36,839
allow you to even pass parameters as

962
00:38:36,839 --> 00:38:39,300
part of the name right but because I

963
00:38:39,300 --> 00:38:41,190
mean probably most of you have not done

964
00:38:41,190 --> 00:38:44,580
more serious web web programming these

965
00:38:44,580 --> 00:38:46,830
things might not refer in fact to any

966
00:38:46,830 --> 00:38:49,380
resource might refer to things that look

967
00:38:49,380 --> 00:38:51,300
more like processes like functions like

968
00:38:51,300 --> 00:38:54,420
ways to generate stuff and some of them

969
00:38:54,420 --> 00:38:57,089
might in fact not even be resources at

970
00:38:57,089 --> 00:38:59,099
all but some kind of secret ingredients

971
00:38:59,099 --> 00:39:00,330
there to make sure you know what you're

972
00:39:00,330 --> 00:39:03,210
talking about so it looks like just a

973
00:39:03,210 --> 00:39:06,869
simple name but in fact some of this

974
00:39:06,869 --> 00:39:09,119
could be the password that allows you to

975
00:39:09,119 --> 00:39:11,070
authenticate yourself and go on and do

976
00:39:11,070 --> 00:39:12,390
something now most of the time that's

977
00:39:12,390 --> 00:39:13,890
done by other means like cookies and

978
00:39:13,890 --> 00:39:16,109
whatnot but it's it's relatively easy to

979
00:39:16,109 --> 00:39:17,550
do it in the form of URLs

980
00:39:17,550 --> 00:39:22,070
okay and the precise meaning of what

981
00:39:22,070 --> 00:39:24,000
something-something is you have to push

982
00:39:24,000 --> 00:39:25,200
it through the actual execution engine

983
00:39:25,200 --> 00:39:27,450
so what's now very common for example is

984
00:39:27,450 --> 00:39:30,540
to have portions this is not the case

985
00:39:30,540 --> 00:39:32,280
here but to have portions of the URL to

986
00:39:32,280 --> 00:39:34,200
indicate what function has to be called

987
00:39:34,200 --> 00:39:35,670
for example in PHP or whatever framework

988
00:39:35,670 --> 00:39:37,620
you have and whatever follows after to

989
00:39:37,620 --> 00:39:39,600
be the parameters now if suddenly you're

990
00:39:39,600 --> 00:39:40,620
talking about functions and parameters

991
00:39:40,620 --> 00:39:43,770
as part of the name it's clear that

992
00:39:43,770 --> 00:39:46,290
whatever we think a name is is very far

993
00:39:46,290 --> 00:39:48,480
from what in fact would end up being

994
00:39:48,480 --> 00:39:53,430
right so for the entire discussion about

995
00:39:53,430 --> 00:39:54,960
naming we have to pay attention to these

996
00:39:54,960 --> 00:39:56,880
things the hardest thing is if you have

997
00:39:56,880 --> 00:39:58,590
some idea what you want or a fool idea

998
00:39:58,590 --> 00:40:00,720
what you want is how do you find it and

999
00:40:00,720 --> 00:40:03,810
usually you have some high level names

1000
00:40:03,810 --> 00:40:05,850
or search or whatever and some low level

1001
00:40:05,850 --> 00:40:07,650
names you're going to have the low level

1002
00:40:07,650 --> 00:40:08,790
one is gonna be some sort of an

1003
00:40:08,790 --> 00:40:10,860
identifier if enough ingredients are put

1004
00:40:10,860 --> 00:40:11,760
together this is not a form an

1005
00:40:11,760 --> 00:40:12,450
identifier

1006
00:40:12,450 --> 00:40:14,340
right getting from the high level part

1007
00:40:14,340 --> 00:40:15,660
to the low level part it's what

1008
00:40:15,660 --> 00:40:17,520
resolving the name it's all about and it

1009
00:40:17,520 --> 00:40:19,650
could be potentially very complex

1010
00:40:19,650 --> 00:40:20,970
exercise including push it through

1011
00:40:20,970 --> 00:40:23,690
search for example I mentioned this that

1012
00:40:23,690 --> 00:40:27,680
at the beginning of the class right

1013
00:40:27,680 --> 00:40:31,710
ultimately so if well once you get low

1014
00:40:31,710 --> 00:40:34,290
level enough you bump into TCP and TCP

1015
00:40:34,290 --> 00:40:37,380
imposes a certain low level naming

1016
00:40:37,380 --> 00:40:40,230
scheme right so what's the naming scheme

1017
00:40:40,230 --> 00:40:42,570
that TCP imposes actually both TCP and

1018
00:40:42,570 --> 00:40:44,250
UDP enforce the same because it's in

1019
00:40:44,250 --> 00:40:47,850
fact enforced by IP it's gonna be IP

1020
00:40:47,850 --> 00:40:50,700
address and that can be ipv4 or ipv6 now

1021
00:40:50,700 --> 00:40:53,240
what happened why happy v5 by the way

1022
00:40:53,240 --> 00:40:55,560
well what's about to happen with ipv6

1023
00:40:55,560 --> 00:40:57,990
namely it became irrelevant and they

1024
00:40:57,990 --> 00:40:59,760
found a better one but it's still not

1025
00:40:59,760 --> 00:41:01,020
fully deployed okay

1026
00:41:01,020 --> 00:41:03,840
IP right so the IP is basically just a

1027
00:41:03,840 --> 00:41:06,420
fancy way to represent a 32-bit number

1028
00:41:06,420 --> 00:41:09,740
or 128-bit number for ipv6 and then what

1029
00:41:09,740 --> 00:41:13,110
the port number so the port number is

1030
00:41:13,110 --> 00:41:16,560
part of the low-level naming of IP right

1031
00:41:16,560 --> 00:41:18,930
now we know at least that we can rely on

1032
00:41:18,930 --> 00:41:21,060
that because it remained unchanged if

1033
00:41:21,060 --> 00:41:24,000
you talk about ipv4 and imports for 30

1034
00:41:24,000 --> 00:41:26,940
years that's the more stable part of the

1035
00:41:26,940 --> 00:41:29,070
entire system everything else could

1036
00:41:29,070 --> 00:41:30,150
change tomorrow

1037
00:41:30,150 --> 00:41:33,940
okay literally if Google gets it this

1038
00:41:33,940 --> 00:41:37,239
their way and they just say actually

1039
00:41:37,239 --> 00:41:38,950
Google already got it their way let me

1040
00:41:38,950 --> 00:41:45,880
point out how you see DNS is only a

1041
00:41:45,880 --> 00:41:48,759
standard and can only control things if

1042
00:41:48,759 --> 00:41:50,920
it's used Google started more and more

1043
00:41:50,920 --> 00:41:53,799
not to use it at least not in the way

1044
00:41:53,799 --> 00:41:56,529
the DNS people hope right so I just want

1045
00:41:56,529 --> 00:41:58,150
to point out that's how interesting

1046
00:41:58,150 --> 00:42:00,700
things are getting right because Google

1047
00:42:00,700 --> 00:42:02,829
Chrome has 40 something percent of the

1048
00:42:02,829 --> 00:42:06,160
market in terms of browsers they in fact

1049
00:42:06,160 --> 00:42:08,819
make the rules

1050
00:42:08,819 --> 00:42:11,650
Microsoft tried this before and it ended

1051
00:42:11,650 --> 00:42:14,349
up in a disaster right I will see if

1052
00:42:14,349 --> 00:42:16,180
Google exercise ends up in a disaster or

1053
00:42:16,180 --> 00:42:18,970
not but in effect Google now allows you

1054
00:42:18,970 --> 00:42:21,910
to access resources without really going

1055
00:42:21,910 --> 00:42:24,519
through DNS service now you're

1056
00:42:24,519 --> 00:42:25,930
ultimately kind of go through DNS

1057
00:42:25,930 --> 00:42:27,130
service because they don't want to

1058
00:42:27,130 --> 00:42:29,109
bother to resolve everything but they

1059
00:42:29,109 --> 00:42:31,180
could in fact resolve everything and go

1060
00:42:31,180 --> 00:42:34,450
down to IP addresses and in fact bypass

1061
00:42:34,450 --> 00:42:36,069
completely any attempt to do the

1062
00:42:36,069 --> 00:42:38,289
analysis in that way at least for the

1063
00:42:38,289 --> 00:42:40,569
normal web browsing ok they still the

1064
00:42:40,569 --> 00:42:41,890
DNS is unimportant because most other

1065
00:42:41,890 --> 00:42:43,269
applications won't go necessarily

1066
00:42:43,269 --> 00:42:44,529
through Google but if you go through

1067
00:42:44,529 --> 00:42:46,630
Google they could get you down all could

1068
00:42:46,630 --> 00:42:48,430
get you all the way down why because

1069
00:42:48,430 --> 00:42:49,719
there is a convention that essentially

1070
00:42:49,719 --> 00:42:53,559
says that if you put here an IP address

1071
00:42:53,559 --> 00:42:56,440
that can be recognized and then there is

1072
00:42:56,440 --> 00:42:58,089
no need to go through a dns you can go

1073
00:42:58,089 --> 00:42:59,710
out the level at lowest level for an IP

1074
00:42:59,710 --> 00:43:02,109
address that's something that the

1075
00:43:02,109 --> 00:43:03,519
browser's do the browser's will try to

1076
00:43:03,519 --> 00:43:05,799
identify whether the name here it's a

1077
00:43:05,799 --> 00:43:07,539
high level name or a low level name and

1078
00:43:07,539 --> 00:43:08,979
if it's a low level name will not go

1079
00:43:08,979 --> 00:43:11,200
from being Ursus okay and we'll just

1080
00:43:11,200 --> 00:43:16,229
resolve it at the lowest level right

1081
00:43:16,739 --> 00:43:21,239
good so

1082
00:43:21,270 --> 00:43:24,880
well let not talked about this I wanted

1083
00:43:24,880 --> 00:43:27,329
to say something else important here

1084
00:43:27,329 --> 00:43:32,380
somehow right so let's think about some

1085
00:43:32,380 --> 00:43:33,700
other instances with the naming and then

1086
00:43:33,700 --> 00:43:34,720
we are gonna see the more formal

1087
00:43:34,720 --> 00:43:37,030
treatment next time right so for example

1088
00:43:37,030 --> 00:43:40,480
imagine other things this peer-to-peer

1089
00:43:40,480 --> 00:43:45,760
systems right so very high level what

1090
00:43:45,760 --> 00:43:49,329
are various ways to find something so to

1091
00:43:49,329 --> 00:43:50,890
find something really means I give you

1092
00:43:50,890 --> 00:43:52,359
something that might or might not look

1093
00:43:52,359 --> 00:43:54,809
like a name or enough of that for you to

1094
00:43:54,809 --> 00:43:57,700
come up at least with alternatives and

1095
00:43:57,700 --> 00:43:58,839
you are supposed to find me resources

1096
00:43:58,839 --> 00:44:00,640
search comes to mind but let's let's

1097
00:44:00,640 --> 00:44:02,369
let's say I give you an in fact

1098
00:44:02,369 --> 00:44:05,710
something that looks like a name you

1099
00:44:05,710 --> 00:44:07,690
must have some sort of a naming service

1100
00:44:07,690 --> 00:44:09,280
and this is what the discussion next

1101
00:44:09,280 --> 00:44:10,809
time is gonna be it's how those naming

1102
00:44:10,809 --> 00:44:12,970
services look like what do they do how

1103
00:44:12,970 --> 00:44:16,750
could they work I mean if you are born

1104
00:44:16,750 --> 00:44:20,049
with iPad in your hands things just work

1105
00:44:20,049 --> 00:44:22,240
right I mean the internet just exists

1106
00:44:22,240 --> 00:44:25,630
it just works why question anything it

1107
00:44:25,630 --> 00:44:27,670
works right well we are engineers and

1108
00:44:27,670 --> 00:44:28,839
you're going to be in a position where

1109
00:44:28,839 --> 00:44:31,420
you have your own opportunity to create

1110
00:44:31,420 --> 00:44:33,130
things that in the long run will mess up

1111
00:44:33,130 --> 00:44:34,750
many things so this is why I'm telling

1112
00:44:34,750 --> 00:44:36,280
you it's how to think about it and how

1113
00:44:36,280 --> 00:44:38,589
to to decide what's important and what's

1114
00:44:38,589 --> 00:44:42,790
not important right so if you start

1115
00:44:42,790 --> 00:44:44,829
digging inside in how this naming works

1116
00:44:44,829 --> 00:44:47,619
you have to ask questions related to how

1117
00:44:47,619 --> 00:44:50,799
can I provide an efficient mechanism

1118
00:44:50,799 --> 00:44:54,430
that map's names so that I mean why does

1119
00:44:54,430 --> 00:44:57,460
it have to be efficient so a naming

1120
00:44:57,460 --> 00:45:01,619
mechanism has to find a good answer

1121
00:45:01,619 --> 00:45:04,000
right if it's search then it's very

1122
00:45:04,000 --> 00:45:05,470
important to have a good definition of

1123
00:45:05,470 --> 00:45:07,210
what good answer means if it truly it's

1124
00:45:07,210 --> 00:45:08,650
an identifier for the name that that

1125
00:45:08,650 --> 00:45:11,920
means well not map it in the wrong way

1126
00:45:11,920 --> 00:45:14,920
right but it also has to be efficient

1127
00:45:14,920 --> 00:45:16,980
well you see

1128
00:45:16,980 --> 00:45:20,829
efficiency is something that none of you

1129
00:45:20,829 --> 00:45:25,150
care about until it's missing right so

1130
00:45:25,150 --> 00:45:27,819
if you have a really bad name I mean not

1131
00:45:27,819 --> 00:45:29,140
a really bad a really slow naming

1132
00:45:29,140 --> 00:45:30,309
technique it doesn't matter how fast the

1133
00:45:30,309 --> 00:45:32,950
internet is you can actually take down

1134
00:45:32,950 --> 00:45:34,000
the whole internet

1135
00:45:34,000 --> 00:45:36,970
but by killing name naming services at

1136
00:45:36,970 --> 00:45:40,030
the IP level everything works just

1137
00:45:40,030 --> 00:45:42,870
nobody knows how to find the right IP

1138
00:45:42,870 --> 00:45:45,640
also by the way that can be used as a

1139
00:45:45,640 --> 00:45:47,680
mechanism to create a so-called dark

1140
00:45:47,680 --> 00:45:49,570
Internet anybody knows about what dark

1141
00:45:49,570 --> 00:45:53,290
internals refers to its parts of the

1142
00:45:53,290 --> 00:45:55,600
internet that are not mapped by the

1143
00:45:55,600 --> 00:45:57,550
search engines and they don't have nice

1144
00:45:57,550 --> 00:45:59,260
names corresponding to DNS

1145
00:45:59,260 --> 00:46:03,280
you see in fact you have no strict

1146
00:46:03,280 --> 00:46:05,620
requirement to obtain a domain name to

1147
00:46:05,620 --> 00:46:06,520
have a nice name

1148
00:46:06,520 --> 00:46:08,530
who says you should have a nice name and

1149
00:46:08,530 --> 00:46:10,150
a lot for example of hackers most of the

1150
00:46:10,150 --> 00:46:11,530
time they don't use a nice name we don't

1151
00:46:11,530 --> 00:46:13,570
never register a domain they just

1152
00:46:13,570 --> 00:46:16,300
memorize IP addresses right or they have

1153
00:46:16,300 --> 00:46:18,130
their own super-secret cryptographically

1154
00:46:18,130 --> 00:46:19,960
secure naming servers in which if you

1155
00:46:19,960 --> 00:46:21,220
don't login in the right way I'm not

1156
00:46:21,220 --> 00:46:22,810
gonna tell you what IP corresponds to

1157
00:46:22,810 --> 00:46:25,300
what high level name right and who says

1158
00:46:25,300 --> 00:46:26,740
you should use DNS for name you know you

1159
00:46:26,740 --> 00:46:29,230
can use anything you want in fact you

1160
00:46:29,230 --> 00:46:31,540
can decide which DNS server to use for

1161
00:46:31,540 --> 00:46:34,360
example by the way even if you sign up

1162
00:46:34,360 --> 00:46:37,150
we say for cable you can put your

1163
00:46:37,150 --> 00:46:39,640
own DNS and there is a large project

1164
00:46:39,640 --> 00:46:41,710
called the Open DNS which means any DNS

1165
00:46:41,710 --> 00:46:43,840
request goes to Open DNS servers not to

1166
00:46:43,840 --> 00:46:47,380
the service by the way really

1167
00:46:47,380 --> 00:46:53,200
likes to mess with the domain name not

1168
00:46:53,200 --> 00:46:55,360
but in general the ISPs are known

1169
00:46:55,360 --> 00:46:57,970
to even injecting traffic all kinds of

1170
00:46:57,970 --> 00:46:59,770
things and so on for example advertising

1171
00:46:59,770 --> 00:47:00,940
in traffic they experimented with things

1172
00:47:00,940 --> 00:47:02,920
like this right and the only way they

1173
00:47:02,920 --> 00:47:05,170
can do that is when they notice when you

1174
00:47:05,170 --> 00:47:06,580
go through their DNS server what

1175
00:47:06,580 --> 00:47:08,500
resource you want to get if you're going

1176
00:47:08,500 --> 00:47:11,100
straight on an IP address reverse IP

1177
00:47:11,100 --> 00:47:13,450
lookups are possible but much more

1178
00:47:13,450 --> 00:47:14,440
difficult because it's not something

1179
00:47:14,440 --> 00:47:15,910
that normally happens and it's not an

1180
00:47:15,910 --> 00:47:17,980
efficient mechanism so it's very hard

1181
00:47:17,980 --> 00:47:19,990
for Cox to say oh you're going to this

1182
00:47:19,990 --> 00:47:22,060
IP I know you're going to CNN not to

1183
00:47:22,060 --> 00:47:23,260
mention it's very very complex

1184
00:47:23,260 --> 00:47:24,730
Akamai intercepts and does things and

1185
00:47:24,730 --> 00:47:27,070
whatnot but if you go to cnn.com and

1186
00:47:27,070 --> 00:47:29,800
they see that they say ah I know that I

1187
00:47:29,800 --> 00:47:31,180
need to put some stuff in your traffic

1188
00:47:31,180 --> 00:47:34,060
or to do things right so ultimately a

1189
00:47:34,060 --> 00:47:36,940
lot hangs on this idea that naming works

1190
00:47:36,940 --> 00:47:38,380
in a certain way can be hijacked in a

1191
00:47:38,380 --> 00:47:39,880
certain way and lot can be circumvented

1192
00:47:39,880 --> 00:47:41,260
by essentially using that the name

1193
00:47:41,260 --> 00:47:42,880
servers and hackers have a completely

1194
00:47:42,880 --> 00:47:44,530
different naming

1195
00:47:44,530 --> 00:47:47,070
right

1196
00:47:48,620 --> 00:47:51,060
so that's DNS what about something

1197
00:47:51,060 --> 00:47:53,490
peer-to-peer networks we're going to

1198
00:47:53,490 --> 00:47:55,050
talk about them in peer-to-peer networks

1199
00:47:55,050 --> 00:47:57,090
naming is one of the major issues once

1200
00:47:57,090 --> 00:47:58,380
you know that somebody has a resource

1201
00:47:58,380 --> 00:48:00,180
you can form a tcp/ip connection and

1202
00:48:00,180 --> 00:48:03,270
just get the resource but peer-to-peer

1203
00:48:03,270 --> 00:48:05,370
networks are only about naming nothing

1204
00:48:05,370 --> 00:48:06,840
else matters because everything else can

1205
00:48:06,840 --> 00:48:09,230
be resolved mostly by direct connections

1206
00:48:09,230 --> 00:48:12,000
okay and it is resolved by direct

1207
00:48:12,000 --> 00:48:13,470
connections you have no reason to form a

1208
00:48:13,470 --> 00:48:16,620
chain of tcp/ip connections unless

1209
00:48:16,620 --> 00:48:18,150
you're trying to hack into a system and

1210
00:48:18,150 --> 00:48:19,530
you're trying to hide your trail

1211
00:48:19,530 --> 00:48:22,110
maybe but other than that a direct

1212
00:48:22,110 --> 00:48:25,670
connection if you found the low-level

1213
00:48:25,670 --> 00:48:27,840
address the low-level name of the

1214
00:48:27,840 --> 00:48:29,070
resource IP address and port number

1215
00:48:29,070 --> 00:48:30,660
that's the only thing that matters the

1216
00:48:30,660 --> 00:48:33,420
rest is parameters that are passed with

1217
00:48:33,420 --> 00:48:34,650
the program that listens at the end of

1218
00:48:34,650 --> 00:48:36,750
the port right so the moment you resolve

1219
00:48:36,750 --> 00:48:38,160
that you solve the problem so we're

1220
00:48:38,160 --> 00:48:39,390
going to see peer-to-peer networks and

1221
00:48:39,390 --> 00:48:40,410
essentially the discussion is going to

1222
00:48:40,410 --> 00:48:42,510
be about naming about how do you find

1223
00:48:42,510 --> 00:48:45,420
things in a peer-to-peer network one

1224
00:48:45,420 --> 00:48:47,850
specific way to find things which is not

1225
00:48:47,850 --> 00:48:50,640
necessarily bad until the network

1226
00:48:50,640 --> 00:48:52,800
becomes large is to simply shout and say

1227
00:48:52,800 --> 00:48:56,610
who has this resource it's called

1228
00:48:56,610 --> 00:48:59,970
broadcasting it sounds dumb but arguably

1229
00:48:59,970 --> 00:49:01,560
at the lowest level you have to do this

1230
00:49:01,560 --> 00:49:02,850
I'm gonna come back to this next time

1231
00:49:02,850 --> 00:49:05,340
you see everything is nice and dandy

1232
00:49:05,340 --> 00:49:06,810
once you have an infrastructure put out

1233
00:49:06,810 --> 00:49:08,610
but to even put infrastructure up you

1234
00:49:08,610 --> 00:49:11,700
have to do some shouting okay and for

1235
00:49:11,700 --> 00:49:13,680
example when my phone wants to connect

1236
00:49:13,680 --> 00:49:15,750
to the Internet has to shout hey is

1237
00:49:15,750 --> 00:49:17,400
anybody there listening and so they

1238
00:49:17,400 --> 00:49:19,650
could give me direct access once they

1239
00:49:19,650 --> 00:49:21,390
found somebody they can try to run some

1240
00:49:21,390 --> 00:49:23,370
protocol that allows some kind of an

1241
00:49:23,370 --> 00:49:24,570
internet connection to be established

1242
00:49:24,570 --> 00:49:26,010
but some shouting is needed at least at

1243
00:49:26,010 --> 00:49:27,330
the local level and we're going to talk

1244
00:49:27,330 --> 00:49:29,130
about that is the ARP protocol in the

1245
00:49:29,130 --> 00:49:31,170
Ethernet and the similar protocol for

1246
00:49:31,170 --> 00:49:33,060
the wireless network but you could shout

1247
00:49:33,060 --> 00:49:34,620
a much larger networks and for example a

1248
00:49:34,620 --> 00:49:36,060
lot of peer-to-peer systems work like

1249
00:49:36,060 --> 00:49:38,700
this right you essentially start sending

1250
00:49:38,700 --> 00:49:41,070
this message that gets broadcast it or

1251
00:49:41,070 --> 00:49:42,810
maybe some limited broadcast and to say

1252
00:49:42,810 --> 00:49:45,060
hey anybody has this movie because I

1253
00:49:45,060 --> 00:49:47,180
want to download it or whatever right

1254
00:49:47,180 --> 00:49:50,400
there has a magic advantage you can in

1255
00:49:50,400 --> 00:49:51,840
fact do some form of powerful search

1256
00:49:51,840 --> 00:49:53,370
then and it's not really just naming

1257
00:49:53,370 --> 00:49:55,020
right for example you can resolve

1258
00:49:55,020 --> 00:49:56,520
partial names you can try to do

1259
00:49:56,520 --> 00:49:58,170
approximate matches and whatnot which

1260
00:49:58,170 --> 00:49:59,579
are virtually impossible to do in the

1261
00:49:59,579 --> 00:50:01,680
by the way it's it's structured so when

1262
00:50:01,680 --> 00:50:03,150
you have performance usually you give up

1263
00:50:03,150 --> 00:50:04,709
on other things for example do I have a

1264
00:50:04,709 --> 00:50:08,400
relaxed naming scheme or not I alright

1265
00:50:08,400 --> 00:50:10,410
all of that is gonna come next time so

1266
00:50:10,410 --> 00:50:11,940
think about this naming a little bit of

1267
00:50:11,940 --> 00:50:13,229
course work on the project you have to

1268
00:50:13,229 --> 00:50:14,130
work on right

1269
00:50:14,130 --> 00:50:16,079
just remember the naming it's absolutely

1270
00:50:16,079 --> 00:50:17,239
everywhere and you have to seriously

1271
00:50:17,239 --> 00:50:19,859
patch everything together when you

1272
00:50:19,859 --> 00:50:21,809
decide how to name things because I can

1273
00:50:21,809 --> 00:50:26,430
have extremely long repercussions on how

1274
00:50:26,430 --> 00:50:27,839
things work something that looks good

1275
00:50:27,839 --> 00:50:29,339
now could be a complete disaster five

1276
00:50:29,339 --> 00:50:31,049
year down the road if people really

1277
00:50:31,049 --> 00:50:32,849
start to use it okay so I'll see you

1278
00:50:32,849 --> 00:50:35,819
okay so for the quiz naming is gonna be

1279
00:50:35,819 --> 00:50:37,289
some kind of high high level fluffy

1280
00:50:37,289 --> 00:50:39,089
questions maybe one question the rest of

1281
00:50:39,089 --> 00:50:40,410
it is gonna be about the communication

1282
00:50:40,410 --> 00:50:42,630
again okay I'm gonna have a quiz for

1283
00:50:42,630 --> 00:50:44,969
questions same format about three

1284
00:50:44,969 --> 00:50:46,859
questions about communication and one

1285
00:50:46,859 --> 00:50:48,299
high-level question about naming these

1286
00:50:48,299 --> 00:50:50,969
things like what if which one does not

1287
00:50:50,969 --> 00:50:52,440
characterize naming I like the not

1288
00:50:52,440 --> 00:50:54,359
questions because that forces you to

1289
00:50:54,359 --> 00:50:56,309
really read my questions and my

1290
00:50:56,309 --> 00:50:58,829
sentences alright I'll see you all

1291
00:50:58,829 --> 00:00:00,000
Tuesday