Good morning. So first off, solutions.
folks too.
Solutions are posted.
So just in general with the tutorials, so we've extended tutorial and tutorial for because there are some issues with
Office hours seem like some people couldn't get into the Zoom room, didn't know if it was happening and stuff. So we've implemented um
uh…
So we've created an office hours channel. Like if you're having trouble with office hours, just go there, post your thing and
you know will respond or if there's any issue, we at least know that you had an issue and we can later
meet with you privately if it turns out that you are doing everything right or something but
But in general, for tutorials.
Don't wait for the last minute.
to get checked off. This is a large class.
400 something people
So if you come to
if you come to
the last day and trying to get checked off. Other people are probably, there's only so many TAs and stuff and they have to look at your work. I mean, this is why we have the tutorials and they go around and
If you actually attend the tutorials, you can get checked off right there. You don't have to have gotten through all the material.
But if you come to office hours, you're going to have to show that you actually did the work.
And it takes longer.
go to good officers.
So I'll be going through assignment two solutions.
is the
But if you need to take the midterm at a
a different time
that's let me know.
you've got to have a clear
reason not to. I know some people are taking this class asynchronously, so they may not have time free in their schedule then, and that's fine. And probably so
so i'll be
So I'll be doing these
So there was another little question about um
So we assign, we'll go up next week and you get the actual submission or the actual no
No, I mean, the midterm, I was in the midterm assignment, I mean, it's just that's what the classification is in bright space
it'll go up so you can see
when it will open and when it will close. You should see the start and end time.
for it. You won't actually be able to see
you know see the exam or anything else.
won't even probably be part of it.
Are you getting a practice midterm? No.
If you want to see what my old midterms look like, you can look at my old
old versions of the web class. But basically the practice
question. I'll post stats on what it is.
I haven't decided exactly how large it is because I haven't put it together.
But it will be designed to
that you should be able to comfortably finish it
In 80 minutes.
I normally shoot for my things that you know that um
good students should finish it at about
40, 30 to 40 minutes.
And then other students can take more time to think about it. So it shouldn't be rushed.
In terms of the best way to, you know, so a number of questions, it kind of depends on the length of things but
What's the best way to prepare? Make sure you
Okay.
Okay, so.
That's really, this is the way to really understand. Make sure you understand the assignment code line by line
makes you understand the assignment solutions.
maybe try coding some things, try adding some additional features.
you know just do straightforward things but
Really, it's about the assignments.
That's what I base this all on.
So to that end.
We're going over assignment two solutions right now.
You'll need to, the assignment will have a validator
So you need to
satisfy the the um
midterm validator, which will basically be the same as
as the assignment validators. So yes.
You need to make sure it's in line feeds.
But…
If you're having trouble figuring out how to convert that, there's
you know if you're on Windows, you should be able to figure that out. If you're having trouble, let me know and i can
you know but that should not be a big challenge at this point.
Was there any other things.
So let's start, let's go do these solutions so
Here are the solutions. Let's the
The midterms on October 29th.
What was the issue with the Mitchum? It is on October 29th.
What's your question? I mean, next week is fall break.
Oh, sorry. Did I say next week? No. Next week is fall break.
There's no class next week, so it's right after. The next class will be.
Oh, we'll be it.
So, hon.
Let me switch this and make sure.
Beautiful.
Yep, as a next class in mid-Shorectober 29th.
Okay, so we're now talking about let's
Find out.
Keeping the code here for reference.
is the call to DB execute on lines 24 to 33 necessary.
Why or why not? Be sure to specify you arrived at your answer.
So what you should have done
So what this does is this
if you're just doing this dbfile new one, it will create the database.
on disk, but it's just an empty database. It's just a file.
Oh, so there's a question. I might do a missed lecture during the reading week
Ah, that's a good question.
Right.
I will do one later in the week.
a Q&A session, but it's not going to be a lecture. If you don't have questions.
So if you come with your questions, if you've got questions, I'll answer them.
I will record it.
But if there are no questions, there won't be anything to ask about.
So.
So I will record it, but if people don't come and ask questions, then…
it won't be very useful.
I would definitely suggest that home.
Check to see what my schedule is looking like.
Make sure.
I'll probably just do at the same time, 1130 to 1 on Thursday.
which is the 24th.
So, yeah, because I do want to do a question answer session, especially since I missed a lecture. So I will be there
Happy to talk about anything from the class, but I'm not going to be covering new material. And if people don't ask questions, I won't
talk about anything.
So I've already done a full review on Tuesday, went through all the code, and now I'm going through assignment two solutions so
And I went through assignment one solutions earlier, so I'm not quite sure what else I would talk about without talking about new material. And I don't want to talk about new material because you've got a midterm.
Anyway, so going back to
the solutions.
So why are these necessary? So what this does is
This will create a file on disk, but that file will have no tables. It won't be
Yeah, there's not going to be anything there. It's just a base initialized um
SQI database.
This creates a table in it and that table
And with the primary key of ID with integers, that's what's going to be ordered by in the database. By default, the retrieve records will be ordered by that. And that also makes sure that each record is unique because they'll each have a unique number to them.
And you generally want
records in any table to
have a unique
to be unique in some way.
And then, because we can't guarantee these won't be duplicated.
So there's a name, city, country, email, a birthday email. Those are all text fields.
So this is what sets up the table.
If the table already exists.
You don't need this.
So it only needs if you're starting off fresh, if you just ran the program always with the database I provided with dbtable.
you wouldn't actually need this at all. You just delete it.
That's why I wanted you to explain.
what this is doing.
And the way you would figure this out is by taking the code out, running it and seeing if it works and going.
this create table, you'd have to have to delete the database and then see how the program crashes
Because it gets an error when it doesn't work.
Is there a pattern to um
Is there a pattern to the page titles for all the pages in db demo too?
And so what I'm here I was talking about is if you look at
the title here, this is app title. This is the title of all the web pages.
And if you look at where app tile is used.
It's used here is the title
Plus, it's that title plus whatever title is passed in the template header.
And we'll get the calls for template.
you see like page not found
record just added.
List of records.
analysis like these all this is you know this is how these things show up. You have comp two
you know come to our six db demo
colon and then that title.
that's how, so if you want to change that title
you can just change this and it would work.
However, it wouldn't change all the pages.
Because there is a static directory and you have these guys and they have the title hard coded
So you would have to change it here too.
You don't change in these pussy. You've changed these files manually, any HTML file in the static directory
Plus those, you know, plus changing the app title variable
In the…
you know in the main program.
style CSS is used by all? Yes.
Celsius is used all, but for the page
Titles.
I didn't say the page headers.
They said the page titles.
Specifically.
this is the title.
the style was in the header.
But that's not the title.
If you talk more of the template header instead of the app title.
We'll see how the, you know, that'll be up to the TAs when, you know, when they grade the question.
by art, so.
The big thing I wanted you to notice is that some of the pages are dynamically generated, dynamically generated pages.
you can have this common element so they're all generated in a consistent way.
any static pages
you have to do it manually.
So what we have
there's a big fashion now
It used to be a lot of
things like blogs and things or a lot of websites, the idea was it would be purely
programmatic. And so you would have a
have a database.
that we consulted when a page request comes in
And then it builds a file based on the contents of the database, which is exactly what this application does, except for the static files.
But there's a trend now
to have what are known as static site generators.
Well, these have been around for a while.
But the idea is that when the web service simple
The web server just serves files.
But the files are programmatically generated.
but offline.
So in effect, like you have your own blog
you would create a new blog entry and then you'd run your static site generator and it would turn it into a web page.
And then that would just be a file that's served.
Now, there's some really nice performance
performance and security benefits
from doing things with a static site generator where
you know, pages are really not dynamic at all.
And that makes sense if it's a read-only site for most people.
If you're doing a web application where it actually has interactive process data and things, then of course it doesn't make sense.
Anyway.
So that was two.
then there's how is add and add HTML treated differently in db demo two
So you have to realize that
So this is add.html
which is a static file that's just loaded.
And since it's a static file.
it's, of course, processed
If you look here, it's going to be processed. It's not going to be processed by route. It's going to be served by file data.
And that's what's going to return it to the client.
In contrast.
God is a post route so when a
post request comes in.
to the server, it will then return
this record you know it'll return the results of calling ad record which doesn't so
The big thing to note is that add.html is a static file, add is a dynamic page, add is only a post
add that HTML is actually replied to for a get and a post
request because you'll notice that this code doesn't
It doesn't differentiate between get and post.
for
for doing static files.
So.
That's add.
And then…
how does the behavior of db demo2 change if line 338
Call the ACA board is deleted.
Why? Again, explain how you arrived at or verified your answer.
So here we're talking about
you know there's this AC signal thing we set up here and then there's this call to AC abort here
So I'm saying, what happens if we delete that call?
If what you should have done is tried running it.
And if you ran it, you should have seen that control C no longer kills the web server.
You have now an unkillable web server.
I'd be curious to know how you dealt with that. One way is if you have an unkillable thing that intercepts control C,
If it doesn't intercept other things like control Z.
You hit control Z, you get stopped.
And then you can type kill per person you know
kill 1% and then it will you know work but
That's what happened when you delete this is it doesn't die because you have a single handler
The single-handed responds to it and you hit control C, you'll say second received
But then it doesn't terminate because it never sends a message to the
to the loop that, you know, to the um
the event loop that's waiting for incoming requests.
That's what the sale does. This tells it
to stop.
And that message was never sent. So it just keeps happily chugging along.
So I would have, so that's why I wanted to talk about with four
With five, is there a maximum number of records
that will be shown by list.
And if so, what is it?
How would you verify that your answer is correct?
Maximum number of records returned by a list is
slash 50. It's…
And the way you should be able to tell this, if you look at this last list.
So list calls, list records.
So list records
calls get all records db this is where the actual content is so
Here's get all records.
And if you look here.
We have the select. So the select means looking a little retrieve records from
the table order by name. So it's going to be sorted by name
ascending, so ASC, so order by the ascending, because I could have said descending so
And then, you know.
descending the reverse alphabetical, ascending is alphabetical order.
Limit 50. So this will return at most 50 records.
So how could you test this? Well.
You could put over 50 records and see if they were returned, or you just change that number to something smaller.
And see if it returns that many records rather than the total number of records in the database.
So you should have like walked looking through the code. You should have found this
And then you should have changed it or, you know, and did tests or just
filled up your database with 50 records.
And you can see this is where this can be very useful.
you know.
That's just saying that when you do your for loop here.
this iter will terminate at a certain point.
Now, you technically don't have to do that. You could have gotten rid of this and just limited your iteration here.
And just stopped when I maintain a count of 50 but this
This ensures that you just
We're telling it, I don't want more than this.
Is it a little odd to name the function get all records
DB.
uh…
Is it the best name? No.
I'm trying to make the names descriptive.
Hi.
I wanted to say get all records simply because just to be descriptive saying like this gets all the records. It's not limiting it.
It's a more general get records might be nice if it also took a query string.
And that would allow you to limit
what records you're getting from it.
But yeah, get records is fine.
It's always possible to make these names shorter. I'm not
I've seen much more awkward
names and real world code.
how could you alphabetize the list
of…
How could you alphabetize? I mean, I was really looking to make sure that I'm getting all the records and not just all of them.
Oh, that's okay, yeah.
That's true. The limit is there so like
That's a good point. It doesn't get all the records if they have a limit.
The original version, of course, didn't have that limit.
So that's really what it is. Because if you look at this function is the same as in db demo
Okay.
So this is, of course, the original version.
this function gets all the records.
But…
this now technically
doesn't get all the records.
Yeah, this…
This is surprisingly common.
This is actually a really good example of
functions get named.
when they're originally created.
But all code evolves over time.
And it's very possible that functions evolve to
have different semantics than were originally envisioned.
And the name often doesn't change.
So…
Is that wrong? No. And now you might say, why don't I rename the function? Well, you could rename the function, but then you've changed out the code base.
Well, maybe that's okay. You were an IDE. You can change it throughout and that's fine that's
a reasonable thing to do in refactoring your code.
But…
what if it's part of an API or something
then it's not so simple.
And then, of course, we look like, wait, what happened to that function? I always use that one. I use that method. Where'd it go and then
Like, well, we renamed it. It's now this.
So.
that invalidates people's old knowledge of the code.
Which people tend to get annoyed by.
Anyway, uh.
But fair point. How could you alphabetize the list of cities shown by analyze by using JavaScript code?
Simply the array sort method.
you don't test your answer.
I don't know if I have, let's see.
Sure.
So…
I was wondering if I had a sort for that? No, I don't.
what do you do for this? You just go here.
Okay, so we go to add the following to analyze records DB. So analyze record has
count, city list
just add a line right here.
Analysis City List Sort.
So the built-in JavaScript
sort functions, kind of fun.
By default, it'll just take the type and assumes that there's an ordering for that whatever that
the elements of the array are and just
sorts them in ascending order.
If you want to do anything different, you supply a function that acts as a comparison thing.
takes two elements and says whether one is bigger or smaller.
And so in that way, you can basically implement any kind of sort you want.
And it will do the sort for you. So it's
So that's simple. And of course, you should do this and then
test it and I report it now I do my tests.
Now, the question, how could you alphabetize listed cities shown out by using the SQL code?
So…
So the SQL code. So how do I do the SQL code remember
If you were reading the code and looking at it.
I already have an order by name ascending.
So you just have to add that
to um
to uh what do you call it? So…
So here we can just add and now see this
add it in your select distinct city from this
And then say order by city.
That's it. So you…
Now.
should you do this? So there's a general question of
should you do this?
on when you get after you get the data back
Or should the database do it?
Um.
kind of depends on the application.
If you're streaming through the data.
like you're not going to download all the data. Otherwise, the front end might not be able to sort it.
So you might need to ask the database to do the sort for you. But if you're going to get all the data, then you sort of get things like.
If it saves the database time, but maybe the database already had it in the right order.
where they had an index for that so
It just sort of depends.
Then I'm going to
how could you add a list of unique countries, the analysis page? Again, this is just duplicating
duplicate what we had for duplicate
Let's say this here. So we say
This is select distinct cities from that
We just do exactly the same thing and make a country list.
item.
it isn't sorted, but this question didn't ask for it to be sorted. We can make it sorted using by changing the query there.
And then we need to
We do this whole thing of joining them with this. We do exactly the same thing out for country list
And then here we've got the city less here, just duplicate this thing.
to make it countries.
So this question really is just saying, do you understand how Cityless was built?
duplicate it for countries.
That was pretty simple.
And they test it, you should have tried running something to see if you got it.
got the results.
if you didn't completely understand the code, this might have been
you know this sort of would have forced you to kind of try to understand that bit of code
But, you know, report what happened.
how could you add the number of unique cities and countries to your analysis page?
So
cities and countries so first
account records with unique values.
So that's the thing you had to
So questions that are not related to lecture or something that you just need to answer at some point, it's probably better to send me a message on Teams. I can answer later.
So.
Just as a note.
this.
to solve this. So what do we need to do? You had to figure this out. This requires you to do a little research.
How do you find this?
So it turns out that SQL thing is select count
distinctly. So you already just saw distinctly
And I think we saw
So you could have actually figured this out if you combine the other things because
SQL is that kind of language. So select count, oh, I want to see, you know, I want to touch the city, but the distinct cities
from people.
By the way, SQL is technically case
insensitive for the most part
Traditionally, people often do it all caps.
I often just do it. I'm not consistent.
Sometimes I feel like doing it all caps sometimes not but
So that's how you get the list of
you count the records so then
And the way I actually developed this is I just did it on the command line because I wasn't sure what the syntax was.
And I just played with, I looked it up like, is that what it is? And I played with the SQLite command line thing and then
Okay, yeah, that's working. Now I can go incorporate it into my program.
And so here we have analysis counts.
So I did something a little fancy.
I decided to do one query that did all the counts in one go.
So we have select count star, select count distinct city, and select count distinct country.
And then so here's a funny quirk of the API, which I figured out in my testing.
was that this, I thought this would just return an array of numbers.
But no, it returns an array.
with one element in it, and that's an array of the number values.
Not really sure why that is.
But it consistently works.
I don't know the i'm sure there's something else that we return at that high level ray
for some values.
Oh, I guess maybe if I had separate
No, I don't know how that would work.
So that analysis count.
you know, gets the first element.
city count, country count. And I just put that all into the struct.
And then once I have those numbers, I just add these two lines
to the template cities and countries
And then check to make sure of it.
I personally use this reference for
SQL.
Was there an easier way to do this that didn't use SQL
Oh.
The way you would do this without using SQL code
would be to um
you'd have to grab all the records and process the array.
in JavaScript.
the question technically didn't say uh
that you had to do it in SQL.
So he probably can give you full credit for that but you really
the point of this question was for you to do it in SQL.
Yeah.
Oh, I guess that's…
So notice you couldn't do, well, actually you could just do length. Like you already built the country list
If you combined it with the previous question.
And said, you get the array and then just count the length for it.
Yeah, that's absolutely true. You've already retrieved the elements.
you can just do that. That's actually quite fair.
that you already did one query and you got the data. Why don't you just count the data that you have?
So now I'll tell you why in general you don't want to do that.
Because oftentimes if you're dealing with a database, you may have huge amounts of data.
And like, you might say, I want to get a list of the unique things or something. Okay, maybe there's 20,000 unique elements.
And so you retrieve it and by default, the query limits at 100. You think, oh, I've got them all.
But no, there's actually 20,000, not 100.
So you'd have to make sure. So the nice thing about these count values, the database does the counting, you know you have a full count of everything in the database.
So.
Just in general, that's what you should be doing there.
But yeah, but that's fair. That's a fair solution to this.
What is one way you could ensure that
Any added birthday is valid date. How did you go up your solution? So for this one.
I tried to give a couple of options on how I do it.
there's more solutions. Certainly, you could have grabbed a regular expression
from the web that
that told you how to validate a date.
it gets kind of messy.
those things. And I always worry about those sort of things like
Is that really right? Just because it's on Stack Overflow doesn't necessarily mean it's correcting. You act in the AI for it. You really don't know if it works unless you validated it. So it's nice to use it.
a library or something where you kind of have some assurance that
someone actually checked to make sure the code works.
Now, in terms of how you do the validation, so you can do it client side or server side.
and proper web apps
should do it both places. You do it client-side to make sure the um
The UI works well so the user knows whether they've given valid data, but the server can't trust the client because this
Remember, you could just construct
getting post things on the command line. It doesn't have to go through a web page. So you can completely bypass
any client-side validation. So the server has to always validate data.
very important to realize.
And so if you want to do client-side validation, it's really easy. You just put a date picker
And then you can only enter a date.
Done.
Is it the fanciest thing? No, but it's always there on web pages.
Now, you say, I want a nicer date picker. Well, there's
you can definitely get nicer date pickers installed on you.
That's much of what the modern web is like
Well, there's a standard widget to do this, but it's kind of ugly, so I'm going to use a nicer one.
And so then you download this code that implements.
the widgets.
So you do that. Now, how do i do it
server side. So if you're doing it server side, there's two basic ways of doing it.
You could do it when processing the form data. So you've gotten the data from the client and the server
before you deal with the database, you can validate it there.
Or the database itself could validate it.
Now, there are good reasons to have the database do validation.
But…
It depends on the application, whether you want it. And SQL has all these methods for
validating things up.
SQL, SQLite's a little funny
Because it doesn't have types.
It has very loosely typed
data types and stored in the database so um
a lot of data, this will automatically validate. It's like, oh, you didn't give me a you know
this part before because this was a date field and you didn't give me a date so I can reject it.
SQLite doesn't have
a date type for a column.
But you can add in constraints that would do that.
we will potentially talk about that stuff later. I didn't want to go into the solution that's here too much.
There are standard JavaScript libraries
for doing date manipulation
Unless you do all kinds of cool things with validation.
moments and actually an older library for using it. Actually, I looked it up now and it's actually
kind of in maintenance mode and
But the same authors, they have another suggestion for one to use and stuff.
could use that.
All you need.
Really? Well, you know that the date's coming in this format, so you could have a regular expression. This is where you can check it and other things.
But I found the simplest thing to do was just use date parse.
This is a built-in JavaScript function.
you call date parse, and it will either return
the
the date in a parsed fashion or return not a number. So we can check to see if it's not a number or not
And based on that, we know what's valid. Now, I did this and I actually messed up my implementation because I tried comparing the return of this with not a number. And I thought, oh, it's equal to non-number, I can do this.
Trouble is not a number, it's not a number. Not a number is not equal to anything, including another, not a number, because it doesn't make sense if it's not a number, you really can't test it for equality.
It's a thing. If you look at floating point numbers and how they're represented and you think about it.
you know, a bit about the math. But the main thing is
you can never say, well, there's something that's equal to non-number. You can only say whether it's
Not that. But the way you test for it is not a number evaluates to false.
in JavaScript.
all you do is check to just do an if statements, if date parse
And if it is, then that's true. You add it. And if it's not.
then you have this bad request.
And Battlecrest Informa. And I put this constant at the top status bad request at the top.
So you have to decide what's the proper
return code for this is.
What did I say?
So, I mean, did you have to set your own status thing and do that?
Not really. I went a little
a little extra with that but
Again, this is the proper thing with a web application.
has to tell the client that something
that happens. So if you submit a form
that doesn't have a properly formatted date, like you don't do the client-side validation, you just get back the return bad request, improperly formatted birthday.
So I just tell here about my mistake that I made.
This lesson there.
But if someone submitted the form directly via post in the command line, what does that post look like?
You can't tell it from the server that it came from
there are some ways to kind of detect it by the refer fields and other things but
It takes some work.
But in general, you can just the command line come you have
You use wget method post
And there's, I think, an option for specifying a file or something for the body of the post.
And yeah, you can synthesize it completely.
on the command line and duplicate any get or post thing. That's cool thing about
HTTP.
So, yeah.
campaign.
Anyway, that's it for the solutions.
I am happy to answer any questions. I tried not to
I mean this
The hardest part of this one should have been the sequel stuff.
But the other stuff shouldn't have been too bad. I mean, of course, this assignment is talking about dynamic web pages and SQL.
where the first assignment was really more static web serving.
JSD.
Oh, JS Date automatically validates a date when creating a date object. That's another way of doing it, yeah.
I didn't, yeah.
It's true, it's not very precise.
So I did not say that is…
Oftentimes, if you wanted to validate a date.
you don't really want to validate
you want to date in a very specific form.
format. So one natural thing you could do
is use a regular expression to make sure it's like the right number of digits.
you know so it's year dash month dash
day. And once you validated that just using a very simple regular expression
you then call something like, you know, make a data object and see if we turn into a valid data object. If both those things work.
then you're fine. Having a really complex regular expression
to validate a date.
Unless you've got a test suite associated with it to make sure it's doing the right thing, it just seems like such a bad idea because
There's so many corner cases you could miss because what is a valid date i mean
is, you know, June 32nd you know
you know you know june 32nd
you know that you know with a negative year or something i mean that's not a valid date, but, you know, the numbers might match up
Depending on how you're validating things.
So there's some questions on like different answers and stuff
The TAs will be evaluating. One thing my instructions to the TA in evaluating
Assignment eight is I just really need
If you describe your process.
and you have a valid way of validating a date.
That's fine. If your method does not actually make sure that it's a legal date.
then you're going to get partial marks.
So I got a question. How would I keep a database like this secure?
Oh, that's a big question. You have to find what you mean by secure.
I will say the nature of SQLite is nice because it's an embedded database. It's part of your application.
as long as as long as no one can access your local files
That shouldn't. And your web application does things, your database is actually, you know, has been locked down along with the rest of your web application.
where you can have security issues.
I mean, of course, there's also SQL injection attacks and things that's a
Separate topic we will talk about later.
But if you with traditional databases, the database is this whole separate server
that has to basically have its own separate security policy.
So that's access control, network controls, things that
can get complicated.
So it's nice that with something like SQLite, we don't have to deal with such things.
But that's all I was planning on talking about today. I just want to talk about assignment two. I've talked about what's got the midterm. I don't want to cover any more material.
Because again.
I want you to focus on getting ready for the midterm.
I know for some of you, I feel like
this test will actually be pretty simple.
Especially if you've had some background in web development and you've taken this class, I'm guessing a lot of the stuff is pretty easy.
If you haven't, however, there's all i mean
just to be understand.
In this code.
there is three languages.
There's SQL.
There's HTML.
And there's JavaScript.
And then on the client, and then there's also CSS.
So there's a lot going on here.
So if this all isn't making sense to you, you probably don't have as much background and that's okay
But that's why I wanted to have the assignment due before reading week so you have a week.
to prepare
for the midterm to really process it and stuff and
I don't want you really working on any assignments. I want you to be
trying to understand what you did and understand the solutions.
before the midterm.
And remember, if you blew this assignment too, you didn't have enough time.
you couldn't…
don't stress about blowing anyone
thing in this class.
I have a lot of grades and I do funny things with grading at the end of the term. I definitely follow the
the rubric I specified at the beginning of the term, but I do alternate grading schemes as well.
And those alternative grading schemes are there to
Basically, if you do
I give you the best grade in any of the grading schemes I consider.
That's why it's fair for everyone. I'm not doing a different grading scheme just for some people.
Anyone gets better growth than these green schemes, you get that grade. And so doing that.
if you demonstrate that you've mastered the material.
at some point in this class, your pals.
I can't guarantee you'll get an A, but if you demonstrate at any point that you actually have learned the material.
you should pass so um
So just try to learn it.
Oh, so I look at the Deno2. So Deno2 has been released.
I have not tried running it but
it's supposed to be completely backwards compatible, and I don't see any reason why it should break anything.
I will be playing with it when I develop the next tutorial. I'll probably do that in demo too.
Hey, weirdness is i'll let you all know but
shouldn't have a problem if you upgrade.
So timeline for grades coming back. So my hope is for all this to get graded before your
midterm so you know where you stand before you take the midterm.
Beyond that, I'm not promising anything. I'm going to be talking with the TAs trying to get assignment one done soon and then
Ideally, the assignment to do. Because again, after assignment two is done, then there's going to be the midterm and they've got to grade that so
We can't get too far behind here.
Oh, so what has the tutorials missed on Monday? Will the any tutorials for T5 after the break?
So notice.
you should go to another tutorial where you can.
to get T5 checked off.
Tutorial six will come after the midterm
But notice technically like there's new tutorials for today and for tomorrow where people can still get checked off for tutorial three and four.
Come there for tutorial five. Like if you had tutorial on monday
come to a Thursday or Friday one.
this week and get checked off.
Or you can get checked off
on the Monday, if you wanted to, come in the Monday before…
the midterm
TAs will be around there mostly to answer questions to get ready for
the midterm, but if you want to get checked off for tutorial five then you can. So there's lots of opportunities to get checked out for tutorial five.
If you lost that Monday time.
So the only tutorial, the tutorials are still running
But there's no new material.
I'm not, I mean, I could have in principle released a tutorial six
For now, but there's the midterm coming up.
So go.
get ready for the midterm.
We don't have participation marks for the tutorial.
there are no the only marks for the tutorial are the getting checked off for the tutorial.
you know the t3 t4
That's the only grades we have there
The tutorial time is the time to do it.
and to get checked off, but
We don't force that, although some people don't do it and they put it off and then they've come to office hours and they go like, wow, these office hours are really full and I can't get in to talk to a TA.
That's why we have tutorial time when there's all these tas and there's
Play people to talk to you and stuff so
Come to your scheduled tutorial and do things and
It's good.
Any other questions?
But no other questions, I will end lecture early.
So good luck studying for the midterm. I will be online.
Post your questions to Teams.
I will…
I will definitely respond, maybe not immediately, but I will respond.
Oh.
Yeah, I know there's other things for other classes.
I'm not claiming that you should only be working on this, but
Yeah.
Hello, yeah.
taking second and third year class at the same time tends to get messy.
Good luck. I will stop the recording here and I'll stick around for individual questions if people want to ask.
Otherwise, have a great reading week. Good luck studying.
I will maybe see you a week from today for
question and answer session.
and um
Well, it was good luck on the midterm.