Good morning, everyone. It's our
We're running a little late here. I just had to post the solutions to the wiki.
Solutions are now up for assignment four.
And I'm going to talk about them shortly.
Because this is our last class.
I'm happy to, so I'm happy to answer questions about past assignments and things in the mid
After going through
After going through the assignment solutions, there were some other
administrative questions, final exam
is…
December 12th.
Yum.
So a general thing, if you're
miss the deadline by a couple of minutes, I'm assuming, and you don't just submit with the solutions I just sent.
I just posted, just sent it to me on Teams now.
There's no validator for assignment four.
let's is that true?
Is that really true?
We'll talk about that.
So 2.5 hours own book over an app, but no AI.
Yeah, so it's midterm
So the code for the final exam will be off demo too.
I'll say.
I realized a bit from my
make the code available somewhere for the wiki and there could always be problems. So, you know, you have to have access to Brightspace.
I'll make sure I have the
zip archives as part of the assignment.
Also.
So make sure by Tuesday morning, you know, the accommodations
You should all see it if you have them.
you know, extra time or whatever.
Just like the midterm, I should have all entered by then.
So…
Anything else?
So let's now, so unless there's any other questions, I think that covers all the logistics stuff. Oh, grading.
So A3, the TAs, they've been getting them to me they're not
quite all there. Yep, that should be there by tomorrow and then i will
get collate those and get those all to you as soon as I can.
So it's assignment three, sine of four.
I'm going to be working on all the missing grades a few of you have like grades, like things that need to be that missed graded, some things that didn't get graded because like
Typically because they came in later, there's some other factor or something.
So those all I will be working on after.
after class today. And so hoping to get that all finalized.
So any other
Questions?
So if not, let's go ahead and
We'll start talking about
So I'm going to go now over the assignment for solutions
One comment before I go is…
there was like…
So as far as not being a validator for being a validator
assigned for it. Yes, there is the code is…
a validator, which actually has even
So let's look at the…
what specifies all the specifics of specifics
Oh, no.
Or…
We're going to off demo and we just go to static and we go to validate a core, which specifies everything
Look at this.
Submission short name, assign for comp 24 six submission short name, foul prefix.
college sign up for. This is all correct.
Except for the number of questions.
So you're sticking an eight and nine and you've got a validator.
And reset the DB, yes, and reset the DB. Yes, you need to start off with a clean DB database.
I was curious if any of you like
I noticed that none of you said you had a
delete
The…
delete the database.
in order to start over.
you really want to get rid of the existing time because it has the wrong format
I would have mentioned this in class. I'm kind of surprised no one asked, but it's like.
If you look up SQL and you go like
How do I delete a table
the syntax comes up.
So one thing to think about is like
Do I have to delete my whole database or do I just have to delete that table?
So.
And we said for it was more so to more work so basically in order to drop the table you literally would type
SQLite 3, the database, submissions, you know.
database and then type
drop table assigned for.
Or you change the table name. That's true. You can also change the table name.
You should look up the XKCD on Johnny Drop Tables.
if you don't if you didn't get that before that
that one should make sense now.
Will marks be deductive does not mention the answer? No, this is not…
No, this won't be, you know, this won't do anything.
So let's now go through the solutions.
Okay, so…
Here are the solutions.
So let's first one we're in
Where an auth demo 2 is the number of submission questions hard-coded.
I just showed that to you. That was invalidator core.
And that was notice that was the reason why I actually made this the first question.
Because if you solve the first question, you had a validator for the assignment.
So…
The number of questions will say implicitly hardcore expected questions, but it's a hard cut with numerous.
Yeah, so.
So all I was looking for is saying something about was hard coded elsewhere other than this and the other versions of the code.
But not in this one.
what is the format of your submission data of the submission data uploaded the server?
This upload is a JSON object with two fields, file name and file constant name. Uploaded file's file name and file contents respectively.
You can see this in the code.
You know, this is what do upload submission. Also, one side of demo two which call the check submission passes two fields
from the submitted object.
You can also make the client and sort of print the data to the console so
You should be able to see the transaction, look at it and
and see what was happening with these.
What happens when a user uploads more than one submission?
what new code is responsible for this behavior.
When a user uploads more than one submission, the new submission replaces the old one.
So this is just so it doesn't say it's not allowed
It just says that it just says
It doesn't do anything. It just quietly inserts it and that's because
we made the so when we say insert or replace
Yeah, I've heard of this portion.
So this here, this query is insert or replace.
into.
This is called an upsert.
That's the general term for this insert or replace. The idea is that if it doesn't exist, it inserts it. If it does exist.
it replaces it. By default, inserts it only if something with that same primary key does not exist.
And if it does, it just generates an error.
Depends on the semantics of the application which you want to use.
Here, I was actually duplicating the semantics of Brightspace where it only remembers your most recently uploaded
assignment.
Can you hear tab?
I don't know if you can hear the tab was scratching at the door and making sounds. I was wondering if the micro
Okay. Yeah. Okay. The microphone can't pick that up. That's fine.
But if I'm a little distracted, it's because tab is
make it a racket.
So one of the things to note is that because
we have this primary key, so when the primary
what was it? That's off table here. So submission table
So the student ID is unique here and that's what does that. Note that the primary key is always unique.
So actually.
I mean, in a sense, you could have changed the design of the database. We don't actually really need the
ID feature anymore.
The ID field was important when we allowed for duplicate submissions.
Because that's what allows them to be extinguished.
But now that the student ID has to be unique.
that could be the primary key. And we actually don't actually need
both of these keys.
But that's what's there.
Does off demo to allow users to upload invalid submissions?
It does allow the upload to be uploaded because of validating and uploading are not directly connected.
So…
This is what it's really
If you look at the code here.
it does allow for uploading an invalid submission.
Because validate submission
is…
maybe was it?
In some versions of the, I don't know if some versions, but in this version of the code, if you calls validate submission.
And then it doesn't upload.
It's like you can just upload an invalid submission.
But if you upload an invalid submission.
Ah.
you know what happens though is
This question just asks if you can.
So you can upload an invalid submission.
But server-side will then
Well, my answer doesn't actually…
Oh, my answer is incomplete. Let's fix that.
Does OptW2 allow users to upload invalid submissions? Yes.
So will such invalid submissions be stored in the server's database?
Okay.
Which error is it rejected with?
year of the count, if Q
Oh, with a…
Which is bad requestes.
So how could you change the analysis page of auth demo 2 so it reports the number of
empty answers for each question.
and do so with minimal code changes.
So what this was saying is
So it turns out DB analyzed submissions already calculates the number of blank submissions.
So we see here the original
So this is the thing I was looking for. When you say analyze submissions.
So this analysis struck that's
the object that's being returned, calculates the count, calculates the student ID list.
And it also calculates the blank questions.
using this function here, which goes through it.
This is calculate questions.
All you have to do is go through
that blank question list
Yeah. You know, so all you do is report this information and show an analysis.
And so what you do is you
add a declaration or make blank question list
Just, you know, in there.
in this make button and the make
and you add the following blank question with a blank question list, and then we define a function, which then builds up
the table entries.
So.
Oh.
Note that you did, so there's a question, did you have to make a new function? No.
I just made a new question.
Because…
the code felt cleaner to me that way.
But I don't require that you structure your code in a certain way.
What I want you to do though is recognize the functionality that's already there.
so if you've
A reasonable question is saying, well, what if I just implement it from scratch and I just did things that was like.
That's really bad. It's a real bad when you go around modifying a program and not understand what it already does. Because what you do in that case
is you mess the program up.
You have a perfectly nicely structured code application. And then someone goes in and just starts making changes and not understanding how it already works and just starts adding things
Oh, a whole new module. That duplicates everything this already module did. You could have just made one little change and you've just
added an entire new module that duplicates things.
it makes the code unmaintainable.
very quickly.
Don't do that.
Yeah, yeah. If you implement it, yeah, it ends up being a lot of code. And that was part of the things we're like.
I've done the work for you, most of the work.
So question six
By looking at the accounts table, can you easily tell if two users
choose the same password in off demo2.
How do you know?
So what I was looking, so you cannot tell
Because the password hashes are salted.
So I did not…
You don't have to say anything about salting.
I'm just giving a full explanation of why. And this is something I talked about in lecture previously.
And so the way you can tell this is by, you know.
look, you should have…
looked at the password hash
for two accounts.
with the same password.
And it turns out these
two accounts that I made happen to have happened
the same password.
And so…
So I'm saying no one free explanation.
seven.
off they will store demos store the logged in user's username in a
What does that Yoft demo 2 store in a cookie to indicate that a user is logged in?
In what way is the solution better? How is it worse?
So…
The difference is, of course.
Off demo 2 has.
a authentic stores a uido
is basically a random number with
dashes at it. And as a session identifier
while off demo
stored the username.
So it's better because now you can have session expiration
And people can't just guess the session and do that.
And you can have personal multiple times like a state associated with them. So it's just in general better.
But you'll notice that our new solution requires the server to maintain a new table.
of a record of sessions. That's additional work.
on the sorts of additional storage.
I mean, nowadays, unless your app is really big, that's probably not a big deal, but it is a load.
um and uh
Especially if you're maintaining
if you have a backend, this can actually
Otherwise, you could have just separated it out.
If you…
What I learned about this, it was very funny if you uh
Look up Amazon. I don't know if they use this anymore because this was years ago, but…
Amazon has a special
had a special distributed database
That's primary use case
was storing shopping carts.
What's a shopping cart? It's essentially per session information
for each user, whether they were logged in or not.
You have a shopping cart and Amazon's like, well, we don't want to lose shopping carts
Because otherwise, because otherwise
you know, people won't buy things or people like they'll forget to buy the thing they wanted to buy
And the database has this funny property
Where it's possible for the distributed system to get separated into multiple pieces
And so you could have
different shopping carts.
for users at different times because they logged in from their work computer logged here and they suddenly get confused. And then, so what it'll actually do is
merge them together so you get all the items in one shopping cart if that ever happens.
But essentially, all that shopping cart database is doing is tracking sessions.
state associated with sessions. That's what a shopping cart is.
So that is additional work for the store to have to maintain. And if you don't have to do that.
It can be nice. And what some applications do
is they encode they encode
all the session information into the cookie and digitally sign it.
And by digitally signing it and maybe encrypted as well. But by digitally signing it, they can know that it came from them. It hasn't been tampered with.
And thus, instead of maintaining a table on the server side, they can just maintain it
on the client.
Of course, then you have to be okay so you can make sure it doesn't get tampered with
But of course, the data can be lost because cookies
You can't count on cookies being there.
But if it's for something that, you know, that doesn't matter.
you know, it can be a viable solution.
So, so…
things to know about online.
Okay, sir. So how long are sessions valid for an off-demo 2?
You should have found this calculation.
you know, line 20 of offdb.js
The session length.
If you just search recession, you'd see it.
And, um.
as specify here, change it to 10 minutes you know
10 times 60 times 1,000.
Yeah, you go like how are session times maintained
Notice where…
That's not where it says. So session likes to hear from you.
So just to recall here, what happens with the expiration when you get a session
It gets the session, gets you here, and then checks to see if it's expired.
If it's expired.
which is the null case, you have no session. It behaves as if that entry isn't there.
We don't delete it.
gleans of pain in databases
But we ignore it and so it's
So you forget about it and then we instead just have this.
So sessions and then nine sessions
How could you change off demos so it's stored the uploading
file name and file contents in the database.
So it already uploads
the file name and file contents of the server
And check submission already adds the following fall counts to the return to object.
So you just need to store the information on the server side.
So you have to change the database.
database table, so we add two fields to it
And get rid of it if you can do that.
Change the SQL statement to include two new fields. So the insert or replace.
now has to include include the
student ID, file name
file contents
And then here, founding file contents.
So that's it.
So you'll notice that you'll notice that
the amount of code
that you had to write for
assignment for was not very much.
I mean, if you look through this and you look like I have the code here it's like
There's that much code there.
you know this does not even code, does not even code. There wasn't much.
But you had to understand the application
and understand what functionality was there.
in order to do this. Yes.
3 was definitely the most difficult one.
And it required more work.
for you all to do it.
But if you put the time in for assignment three, assignment four should have been much more straightforward.
But even though assignment four added in a lot of code.
to do a lot of things.
How?
How difficult did you all find it to understand the code of assignment four when you looked at it?
having done assignment three.
I am kind of curious about that.
Yeah, not hard, yeah.
So, I mean, again, it all depends on like if you had problems with assignment three and didn't really understand it that well.
assignment four was…
probably brutal.
But that's, of course, why I gave you assignment three solutions.
Which hopefully helped you get caught up.
Okay, so now what's left? So I have another
45 minutes.
Yeah, I think so.
Before I have to let you all go, I am happy to answer questions about
other assignments.
Otherwise, I can talk to you in general. I can do a quick review of the concepts that we've
covered in class.
Midterm question 11 again.
Okay.
I'll look up midterm question 11 in one second. I'll bring up the solutions.
How does insert or replace know if it should be inserting or replacing?
So insert or replace is database magic.
But what it actually has to do internally in the database
is look at the table, look up the primary key, see if it's there.
If it's not there, then it initiates an insert. If it is there, it initiates a replace.
So.
Question five of tutorial five. Okay, we can go back
I can look at that. But first let me…
Let's go to the solutions.
Okay, so we are now looking at…
Question 11.
So what I really, so this, I should have said, could you add a new HTTP header
All the stuff with the HTML stuff, just ignore that. That was me trying to be generous alternate.
interpretations.
So that's for alter interpretation. So what question 11 was really
supposed to be about.
was…
I…
All you have to do, how do you have to do
an HTTP header to the code.
that's really what the question is.
So it's about a submit demo. So let's look up submit demo.
DB W2, sorry.
There will be someone in tutorials tomorrow to help check off
Tutorial 9.
Because that can still be submitted.
But not many people. And if there's problems i will
potentially get online to help.
check out but yeah
Did we specify the…
Sorry, Aaron, you were asking about the primary key. What are you talking about there? I'm kind of confused what the context was of that.
question.
So going back to
db demo 2. So for this question here, this is what this is about here. So we want to add, so we look at add record.
This is where ad record is. It has the email
We want to add this email address
as a header so
The way this code's structured, you could add something here
add another field here as another field here
you know basically say like email
and say colon and get the email address and the response here. But remember, this is not the final response object.
This is returned to handler.
This is unlike a lot of…
web frameworks when the pieces return, they normally return the entire response object.
That's not how I have this code structured.
Instead, we have everything and handler is the one that's going to actually return the response.
And it builds up using this sort of thing. So you would have to add in a conditional
which puts in another header here, which is X-email.
And then has the email address for that.
So you have to add that in. And so you have to add in basically just an if
statement here you know if that field, you know, if that exists in the um
in R, then add it in.
Any other questions on other questions?
On question 11, oh, oh, here's on.
Ah.
So, uh.
Aaron, I'll get to your question in a second.
But first, do any more questions? I just want to finish up with question 11 on the midterm.
that I want to go back to insert or replace.
I'm not hearing anything about question 11.
We'll go back to the back
So let's switch now
So the question is about insert or replace.
So he defined the submission table here is there. The primary key of this is
ID, but student ID is unique.
So that's actually that's a
Oh, it's because of the unique constraint.
So when you do the ad
Where's the ad submission?
So when you do an ad submission, insert a replace.
So if we normally, we specify all these values
We don't specify the ID. So we can't insert one with a duplicate ID because the ID is auto incremented.
So that's not what we're doing.
But in the course of inserting this.
it's going to have to make sure all the constraints are met.
So is there a unique
constraint on this? Yes. So like if there wasn't any uniqueness constraints.
this insert or replace doesn't make sense.
Because there's not another record to replace.
Because this is going to be like, it's perfectly valid to have this there. But when we try to do an insert
because the uniqueness constraint, this record would overwrite
an existing record.
if there was one. And so that's what it finds. It's the uniqueness constraint that causes the
the insert or a place to do things.
It's all the engine making sure.
the constraints of the database are satisfied.
Yeah, so it's because of the student ID uniqueness. Exactly.
And in general, that's what insert replace is about.
When you do an insert.
you can specify all kinds of rules about what it means to add a record to it and what
constraints it should have.
if that table says that
any sort of uniqueness constrains. Primary keys have a uniqueness constraint. Of course, other keys can.
Or maybe other constraints. They'll go like, well, if I insert this, it will cause this other record to be overwritten.
And he goes, that's not allowed.
And so that's what the role plays.
what allows for that to happen.
Okay, so…
Okay, so tutorial
Okay, there's a question about fragments.
What was the other one?
Question five of tutorial five.
So questions.
Question five to a row.
change the ad page to not reload the page when the form is submitted should
Up.
Tomorrow's tutorial is just for doing assignment nine, tutorial nine
There'll probably one TA there during tutorial.
And then people will be having office hours again for checkoffs.
So explain question five of tutorial five.
So this question five.
This is the one I assume…
the question was about the question was about
Oh.
change the add picture, reload the page when the form is submitted. Instead, it should submit the form via fetch
hide the form fields on submit.
display the response, which should be adjacent or the flexible is inserted into the database.
This is all this this question is exactly what's there and
Off demo 2 has all this functionality.
Submitting the form via fetch.
Um.
I mean, I can walk you through where all this functionality is.
So let's find that.
It's an off demo too, we go into the
student.
So here's some, you know, here's submitting contents to the server
It's doing it as
This makes it as a JSON stringify.
We've also done it. This is a JSON object. We've also done it as a form.
We have form data. We've done.
this is where we've hide analysis. This is hiding parts of the form
display the response, which JSON objects was inserted into the database.
And then we have…
update tag updates it based on what was
done to the database.
So all that function is that we could implement this but
Again, we've done all this sort of thing.
So this is a good programming exercise if you don't feel like you understand this, but
I've shown you how to do all these pieces.
So there's no question.
Okay, so now there's another question was about URLs.
So the question was about uh question uh question question for question four
Was it tutorial? Yeah, tutorial for question five
Oh, the not reloading the page
That's exactly what the validator does.
because like if you
When you say reloading the page, when we have the ones on um
Well, I think so.
So like, for example here
When you click on a button here.
This causes a new page to be loaded.
When you click on a link that causes a new page to be reloaded. In JavaScript, it is possible to cause the page to just
be refreshed from the service or everything gets reloaded from the server.
When you do fetch.
This happens in the background.
This doesn't affect anything on the display
If you want to change what's happening on the page, the fetch happens and then you have some JavaScript that updates the DOM.
That's what I mean.
by not uploading the page.
But let's go back to
So those two.
what was it tutorial
So it's foreign sword of field, let's just put the flooring class.
So how did you do this?
sort our alpha sort things. So it turns out that if you're
This is all i've…
This is all part of the URL parse. So if you could turn the URL into an object.
it will have these as part of their properties.
I'm trying to remember which values of it but it's like
These are the, you know, it'll have all these arguments
there as part of it. So if you have this as there, you create a URL object and you print out the URL object, you'll see the format
that these are parsed into and then you can just take the fields. So you didn't actually have to parse the URL yourself. You just used
So this URL, this get URL
It'll have everything in there.
you can get more than just the path name out of it.
can get all those arguments.
So that's what's happening with the path but again
I'm not going to, I mean, I'm going to focus on the code. We didn't really do anything with this in the course. It's not there in um
It is on the first assignment.
So technically this stuff is in there but i don't
If I did, I would probably, I'd do it in a pretty gentle way.
Because that's a relatively minor thing.
But it's actually cool.
Just as anything you can do with a form
and data getting uploaded as a form data, all that information value pairs of when you submit a form
can also be submitted with a GET.
And when you submit it with a get.
everything gets encoded into the URL.
So you can actually change a form submission instead of using post to use get.
And then it will take all those things in the
in the form and put them into the URL that's sent to the server. So you could potentially get a very long URL with all these
things encoded.
And standard frameworks.
will make that sort of form submission look the same as
one doing posts. If you're doing it yourself you're going to have to
implement the code because they're coming in either by form data or they're coming by the URL.
Okay, all other questions? One thing I should mention, my last lecture, I messed things up. I fixed it.
in my code.
Just to show you here, when I was talking about the objects, again, this is not in the final exam, but I just
might as well say it here.
The thing I forgot about
when doing things without the
a class is a class
You normally make a function
The function is going to be the thing that kind of becomes the constructor
And once you make this function that's going to return
the object with new object.
you add things to its prototype and so
It's an existing object, so you don't want to change the existing oval.prototype, but you want to add fields to it.
So this pattern is you do oval pro you know do the object prototype dot and what you want to add so
I don't know, name field, add an area functions, you add all your methods this way
And then if you want to do if you want to do
inheritance, you have to call your
superclass instructor or something. So you have to call the, in the chain, you have to call the other constructors. You have to do this manually.
So here, what I'm doing here is I'm calling the constructor
of oval, but I'm telling it to call it
So you can do this call notation if you want to specify what this is going to be.
So now Oval is going to be called with this being there and the rest of it are the regular arguments. So I'm specifying three arguments here.
oval only takes two arguments.
The first argument is
the object that's going to be bound to this.
You can do call for any
function. And when you do, you just get to specify the value of this.
So you can do that and then you can do that
So now circles prototype.
is going to be, I create a new prototype here where it's going to be the um
oval prototype and say it's there so like this
It's messy. You can do basically those things you do with classes, but it gets
messy, but it's very flexible and you can do all kinds of things and it turns out the
There's all this stuff for deciding when you add a constructor for
for a prototypical object, you specify, well, it's a numerable, whether you can see it, whether it's writable, whether
These are all properties of it.
But it's all.
you're getting into the weeds of JavaScript.
I would say mostly you can nowadays ignore that and just use the class declaration
The class syntax is pretty nice and it works well.
There's that.
Any other questions? Anything else I haven't covered?
Ah, there's a question.
about so listen
So how do you do the first pass? You first say
take about half of the time you have for the exam.
figure out how many minutes that means.
you have per questionable.
go through the exam and just go through the
give at most that much time to answering each question.
Either you get an answer or you go like, I don't have enough answer, enough time.
And then you move on to the next question. So the idea is.
This way you've at least looked at all the questions
by the halfway mark.
So let's say
So let's say for the midterm, there are 24 questions
So let's see now. So you've got, so there was 80 minutes
by 24. So let's make this 40 minutes.
So we'll divide it in half. So you now have 1.6 minutes.
So basically you spend one to two minutes
So this is your basic thing.
So I always structure tests. And in general, most tests are structured so that there are some questions that should be relatively easy.
And some questions that are harder.
And…
Sometimes what the instructor thinks is going to be an easy question isn't an easy question
And sometimes they don't necessarily put the easy question at the beginning and the harder question at the end. So you can't count on the order being saying what's hard and what's easy.
You can't even count the point values necessarily being what hard and what's easy. It's all what's
harder, easy to you.
But so you just spend time, answer the questions like, okay, I know how to answer that one. I don't want
So the phase one is really trying to get all the easy points.
You look at a question, go like, oh, I know the answer to this. Let me just quickly write down. You do that, done, move on the next.
And you just keep going. But when you do those answers, you try to do it really fast. You're keeping an eye on the clock.
Because you ideally want to finish that pass
And half the time you have allocated.
You'll have skipped some questions.
that's fine. But you'll have gotten the ones that are relatively easy.
Then you go back.
And you go like, okay, I missed these questions.
I skipped these questions. Let me go back and let me see what the um
what I can do for these. And sometimes you might go like, well, I really have no clue on this one, but I think I know this one. I just need a minute.
You may have to do some triage.
in terms of deciding what's worth spending your time on but you
you got to use your time wisely.
doing a test and linearly going through it
Yeah, you never want to spend a lot of time on any one question.
Unless you've already
made a pass through the entire exam and decided like
looked at all the questions.
One thing I really hate about
a lot of online exam platforms is they force you to go through questions
in a linear order and they make it more difficult for you to go back.
And answer things.
that really, you know.
doesn't let you budget your time appropriately.
It's a…
I mean, expect to have some time constraints.
And answering questions on the final exam, just like the midterm.
you're not going to have time to go and look up questions
all the, you know, look up questions during the exam much. I mean, I make it open books so that if you have a quick question
you can go and look it up.
if you have…
more than just a couple of quick things.
You'll burn your time budget.
So I said.
just don't even treat it as a closed book exam.
second pass
You know how much time you have.
So you want to answer everything you want based on what you know first.
Because anytime you don't think about it, the moment you go to an outside resource and start looking.
Time goes by so fast.
It just burns your budget.
Don't do that.
There's a compromise appeal, so I don't post questions. Yeah, I mean, it's an anti-test taking
And you can devise the you can devise the inter
of those sort of exams in ways that let you go back and forth through it.
It's pain.
Should you be testing your code changes?
you should not be testing your answers.
If you have extra time.
The third pass after you've already given a reasonable answer for all the questions.
then you can go through
test things because remember
If you're doing a test, you probably mostly know the answer.
In order to test it, it will probably take you four times longer.
to test it versus just writing down what you think the answer is.
So yeah, you don't want to
Testing burns time, looking things up burns time.
you don't do that.
until you've got answers for most things and you're going, I don't really know how to do something. If you do it right.
your first pass.
you finish it, you get most of the answers down, and then maybe you spend on your second pass you maybe spend
maybe five minutes on a couple of questions. And then maybe ideally you have like 10 minutes at the end for you to do a last passage
check to make sure you got the right answers.
Yeah, I did not cons.
And if you look at the midterm.
You look at it, it's not structured so you're having to spend a lot of time testing. You should be able to answer these things
by looking at the code and remembering what you did on the assignments and tutorials.
So if you familiarize yourself with the code of the tutorials and what the concepts are in the tutorials and go through all of it because
You coming back on the final exam may be like, oh yeah, I did this. Like where you should be maybe looking stuff up is like.
It shouldn't be on the general web.
Because if you're looking on the general web.
that means I've asked you something that wasn't covered in the course and I'm not going to
do that. You should know where it is
in the course materials. So when you look stuff up, it's like, oh yeah, I think we covered that in assignment three.
Let me go look at the assignment three solutions. And so you go back and look at the assignment three solutions and you go quickly.
You do that after you do that after
You put what you can down from your head.
Now, if you find the test pretty hard, you might get through phase one, through past one really fast because
You left a lot of questions blank.
Okay, that's the way it happens. But at least then you've gotten all the points you know you can get through easily and then
Maybe prioritize the rest of the ones you think you can answer quickly versus
you know you have to kind of do point maxing maybe
bring on things.
I will supply a validator.
I will supply a validator for the final exam.
The code is just the code for assignment four. I'm not giving you any new code.
I might give you a couple of lines of code or something here and there in the final exam, but I'm not going to give you any new code.
I want you to spend time really making sure you understand this code.
Now, to understand it, you may want to understand
on it. I'll tell you there's some bugs in assignment four code.
that you know about. If you look back at previous code we've had.
There's some functionality assignment four that's not in assignment three.
I will give…
Be sure to read the instructions.
The main code that I'll refer to on the final exam is
assignment four. But in terms of concepts and things
The entire semester is game.
But that's the big chunk of code. If I'm going to refer to large chunks of code, it's going to be assignment four.
But one thing is read the instructions on the final exam.
read the instructions.
there might be good things in there.
I'll just provide a valid grade template.
All right.
I think it was probably one and a half times the length of the midterm.
I haven't finished making it up yet, so I can't say. I should have it made up by the review session on Thursday.
Did I mention the review session?
Maybe that's on top there. I said that.
Questions?
Just during the lecture zoom that's still active. That's what I'll be using. That's what I use for interviews.
I figure you all have that and you know how to connect to it so
By the way, what I do…
Yeah.
Anything else?
So it sounds like it.
So this is our last official class.
I will be having a question and answer session
on Tuesday, but I won't have any material prepared there. I will just be answering questions that may have come up in studying.
I will record that and post that as before.
But again, the point is no one comes with any questions and it'll be a very short session.
Yeah, and you just have to answer, again, you just answer what the question is. You don't need to cite any sources or anything.
Unless it's there. It's like the, I mean, it's an exam
there's a lot of questions. You're going to need to answer these questions.
I mean, what is it? If you calculate how much time
How many questions there were? There were 17 questions i think on the
midterm exam in 80 minutes.
So like just a little over four minutes a question.
It's not a lot of time.
Yeah, there's no need to tell the process.
Just tell me the answer.
I'm behind on messages on Teams.
I should be responding to you and things i'm
was trying to do some other things.
But yeah, as I said, if it's a question about grading and stuff, I'm going through and catching up on
If you have a question on grading, I'm getting through all those things.
Doesn't seem like there's any more questions. I'll just say…
I hope you've enjoyed the class.
And…
Good luck on the final exam.
And I will stick around here for
some time to answer questions.
Take care.