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