General Communications
I can’t join piazza, can you add me / give me the code?
L
There’s no need to join. You will be added once you create register your handin account (it might take some time, since it’s a manual step).
I used a non-NEU email, and now i have problems with piazza,
should I change my email?
L
No, you don’t need to change your email. Piazza has a feature that allows you to link another email account which would allow you to login using your personal one, and be the same user as your NEU account.
I have a question about an open homework, who should I ask?
L
- Your first place to ask (all) questions is piazza (see the description, and the Email and Piazza Policies page). That should cover most questions — you can even ask anonymously to the class if that helps.
- If your question involves homework code, then the first thing to do is to ask yourself if this is a real question, rather than “here’s my answer is it correct?” kind of a thing (aka “help me debug my code”). If it is, you should avoid it. Not only are these questions unfair to the other students, part of learning is dealing with your own bugs.
- If you still want to ask your question, then you should, of course, avoid a public question that shows your code — piazza allows you to ask a private question. Please use “Instructors” to include the whole course staff instead of relying on a particular person.
- But note that private questions are only for real questions — in other cases, you should just send out email.
I have some error that I can’t figure out, what should I do?
L
Your first stop is always piazza, possibly in the form of a private question if there’s bits of your solution in the error. In some rare cases you can also email me and/or anyone on the course staff.
In any case, before you reach out to your screenshot tool, please consider doing so a very-last resort. Read the policy page for more details. Specifically, the error that you’re talking about is a few characters on the screen that you can always copy (even from error popups (with a right-click)) and paste, which would make it easier to send, easier to read, and easier to handle.
I have a question about my graded homework, who should I ask?
L
Start with the grader who went over your code (indicated at the top of
the file). Be sure to include the Grading File
label that appears at
the top of the file since grading is anonymous. See also the “Grade
Questions” section below.
Can I meet you?
L
Sure. First, try to catch me at the end of class. If that doesn’t work for you, or if you need more time, you can catch me at my online office hours. If that doesn’t fit your schedule too, schedule a meeting (online).
Terms to use when asking questions?
L
This is not really a question, but rather a common issue that many students have. Just like the material, it’s best if you use precise language. Specifically, avoid the following often-misused terms (unless you really mean them):
- “Variable”. As discussed in class, almost the whole semester (and homework) will not use mutations, and therefore we’re going to have “identifiers” that are “bound” to values. These values will not vary, and therefore don’t call them “variables”.
- “Statement”. Many mainstream-ish languages have a distinction
between “an expression” and “a statement”. This is best seen by the
fact that there’s a distinction between “an
if
statement” and “a ternary conditional expression”. Like many modern functional languages, Racket does not have that distinction: instead, everything is an expression. This greatly simplifies things (languages with statements and expressions pretty much always have a BNF with a separate “expression” non-terminal), so we’re going to follow that and have no statements in our languages. - “Method”. A “method” is an OOP term for a function that is
associated with a specific object, possibly via a class. It is
identified by having such an object as an implicit (usually)
this
orself
argument. Unless you’re talking about these things in particular, you should use the term “function” instead.
Lectures & Notes
I can’t come to class because of 〈reasons〉, where can I join
remotely?
L
The class is designated as an in-person class, so it’s neither remote, nor hybrid. This is a university requirement since in-person attendance is related to various bureaucratic needs (e.g., visa requirements for foreign students etc).
We might have a few (very few, as in 1-2) remote classes on rare occasions, like just before a break or the end of the semester when many people might want to travel early. If you think this is the case, bring it up in class / office hours.
The answer is therefore: you cannot — unless it happens on such a day.
I can’t come to class because of 〈reasons〉, can I do the PLQ
remotely?
L
No, for the same reason as above. But note that some number of PLQs will be auto-dropped, to cover exceptional cases.
I missed a class because of 〈reasons〉, where can I see the
recording?
L
Recordings are generally not made, so you cannot see a past recording. See the previous answer for details. However, please make sure to go over the class material by going over the posted class notes.
Can I take a “wellness” day off?
L
You can, but there no real need for that: the reason for auto-dropping PLQs is to cover wellness days too, in a way that is uniform for all students (including master students in CS5400). As above, please go over the class notes when they’re posted.
See also the next two questions.
I have a medical emergency which prevents me from coming to
class, what should I do?
L
Usually, you don’t need to do anything at all. The class notes will be posted so you can go through them, and the lack of PLQ will get auto-dropped. If you have multiple occasions when this happens, collect some documentation (dr’s note, etc) and email me to ask for extra droppage.
What about religious holidays, weddings, etc?
L
All of these are generally the same as above: the PLQ auto-dropping is designed to cover for unforeseen events. If you have multiple cases, try to provide some documentation for events that are normally considered as valid reasons for missing classes.
Handin Account
I forgot my handin password, what should I do?
L
Unfortunately, there is no way to recover a forgotten password. However, you can catch me after class or email me, and I will reset the password to something you know. (If you email me, then include a phone number that I can call back to ask you what to reset your password to.)
How do I change my email?
L
Just use the “Manage” menu option to get the handin account — in the “change info” tab enter your password and click “get current info” to get the information and to change it. But please also make sure that it’s an email that you’re actually using, since I’m assuming that emailing at the handin address actually reaches you.
How do I change my username?
L
This can be problematic, since the username is used in many places in the system. So it’s best to avoid this unless it’s early in the semester.
Homework Issues
I’m trying to do some future homework, and there’s a red link to
»whatever« which I need…?
L
The homework are intended to mostly go along as we go over the material. A red link is for stuff that is not available yet. If you really want to some future homework now, then you can dig through the future class notes and find what’s needed. But this is not recommended, and even less so if code from these notes is needed.
If you think that this is a mistake then ask on piazza.
The deadline is tomorrow / in 2/3/4 days, and I think that it’s
not enough time. Can I get an extension?
L
Please just do the best you can and when we get closer to the deadline, if you still need more time, then ask for it then. I usually try to accommodate such requests when they’re reasonable and when possible. (In some cases the next homework depends on the solution for the current one, so I need to publish the solution, which would make it impossible to continue working on the HW.)
But if it’s because of some reason that affects many people (for example, there’s some university event that I’m not aware of), please post a note on piazza so that other’s can +1 it, and I’ll move the due time for everyone.
OMG! The deadline is in 10 minutes, and I forgot my password!
L
Calm down, take a deep breath, and email me — either I’ll answer you and resolve it as above, or I’m off-line and in that case I won’t close the submission.
I cannot submit my homework because »reasons«, can I email it?
L
No! If you do that, I end up trying to figure out what’s wrong and submit it for you, and if I don’t have time for that I won’t… Instead, just email me and I’ll try to help you resolve the problem. (This is assuming some technical problem, of course, not a missing answer.)
I couldn’t get the whole homework implemented,
what should I do?
L
First, write a comment at the top of the file clearly describing the part(s) that you couldn’t implement. Next, make sure that you have complete test coverage for what you have implemented to avoid a penalty. Finally, try to submit: if the server complains about some missing binding, add it as a stub (usually you’ll need a stub function to still have the correct arity since the server checks that too), and add a dummy test for the stub so that you don’t get penalized for incomplete coverage. Repeat the process until the server accepts your submission.
I got penalized for missing tests, but I had complete coverage,
is this a mistake?
L
You should read the comments for these penalties: the problem is not coverage, but “obvious tests” (usually edge cases) that you should have tested. For example, testing an empty input value (empty string / list), or in case of a numeric input: zero / positive / negative / etc.
To be clear, complete coverage is something that is checked mechanically by the server: and in case you don’t have it, the server will warn you at the time of submission, and if you do submit, it will auto-apply a 20% penalty regardless of what the graders do later.
The deadline has passed but the homework submission is still
open, can I submit it?
L
I don’t give penalties for late submissions, and I usually close homework manually. So it’s quite possible that a submission is possible past the deadline, and submissions are fine at that time. But you should not rely on this so if the deadline is approaching, be sure to submit whatever you have, and if you need more time, then ask me.
But more generally, for best results, don’t start working on a homework the day it is due. Start much earlier, and be done with it earlier. You’ll feel better.
Can I submit after a homework is closed? For a penalty?
L
No. When a homework is closed, its solution gets posted to the handin server, so it doesn’t make sense to accept late submissions. (And the reason the solutions are posted after a homework is closed is not just to learn from it, it’s also sometimes needed for a followup homework.) However, see the previous answer if it’s past the due date but the submission is not closed.
What’s this “scratch” submission directory?
L
It’s a handin directory that accepts anything, and can be conveniently used in two common situations:
- You try to submit and it turns out that there are still problems. Switch to scratch and get a server-backed copy so you can work without ever saving local files.
- Later on it will be useful as a kind of a shared space where you can synchronize work with your partner.
Note, BTW, that I reset the scratch space from time to time, so it’s intended for working on your submissions, not as a generic storage thing. (But I do keep backups, in case you lose something…)
I’m trying to submit a scratch file, but the server complains
about an existing submission—?
L
The system is designed so that every username has at most one submission, and this applies to scratch submissions too. This means that if you have a scratch submission with your username (A) and you try to submit another one with your partner (A+B), the server will complain. If this happens, email me and I’ll move the old scratch submission out.
Homework Pairs
I prefer to work alone, is that possible?
L
Sometimes. Having pairs is also useful to make it possible for the graders to go over all submissions, so we prefer that everyone is paired up. If you prefer to work alone, ask for it in your email, and we’ll see if it’s possible to make it work.
X and myself want to work together even but I’m in 5400 and X is
in 4400, is that OK?
L
Sometimes. First of all, while the additional 5400 homework are still optional for 4400 students, usually people don’t do them — so you should expect to do have of the homework by yourself. In addition, if you pair up, you might leave another couple of stranded 5400/4400 students which in the best case inflicts a similar problem on someone else.
We have a team of three people and we’re used to working
together. Can we register as a triplet?
L
In almost all cases the answer is no. While pair-programming can often be beneficial for both people, having a triplet means that one of the three gets left behind, not programming and not following the work.
Grade & Grading
I got some points taken off for a style issue, but it’s not
mentioned in the style guide!
L
The Style Guide is not intended to be an exhaustive list of everything you should ever know to avoid such penalties. Attempts to make it so are inherently futile and frustrating. On one hand, they are futile since there can always be another way to write code badly, making it a never-ending chase after some notion of completeness that is never achieved. However, such a chase will make it more and more verbose, leaving students with a huge list of rules to go over, which will lead to frustration all around: students will be frustrated by its length, or by the verbosity of the precise-but-verbose language that will result from generations of fixes, or by the fact that the grading will look more like a list of mistakes on your tax return forms. Graders will also be frustrated with finding the places where some rule is mentioned, and the chore of keeping the list updated.
Finally, what if such a list did exist, was painfully comprehensive, and people could read and follow it completely? Even that supposedly ideal outcome is not good at all: taking out all human considerations from making your code readable means that you’ll stop thinking about how to make your code nice and readable for the people you work with. There’s different expression styles, both at the lowest level of indenting your code through the highest level of code design and organization. You really should learn to think about all aspects of your code and make it as readable as you can.
That’s not to say that there is no place in the world for style guides. They’re useful in getting the obvious details laid out for newbies, they can help in settling on certain decisions when there are different opinions, and they are therefore first and foremost a useful tool for humans to communicate with each other. In your case, you are expected to ask when something is unclear or debatable, and you need to learn good habit and respect how code is written. Just as a quick example: you should grow to be careful to respect the style in any project you work with. For example, in modern JS/Python/etc projects you get to decide on using single-quotes or double-quotes for strings — and in almost all cases, the people who work on a project have a specific preference; it is therefore good to read existing code and see what the convention are even when the project doesn’t have its own style guide. In time, you would hopefully grow to a point of appreciating such issues enough to write your own guide for people who want to work with you.
There’s a mistake in the grading of my homework, what now?
L
Look in the graded file (graded.rkt
) — it has two important bits of
information in the header section at the top: first, a Graded by
comment should show you which grader did the grading and therefore should
be your contact point (see the table). The
second important bit is a Grading File
comment: the graders receive
anonymized filenames, so you need to identify your file in case of
grading questions.
Please realize that grading resources are limited, and in some cases a grading mistake should apply to other students too, so dealing with such problems might take a while.
What can I do to improve my grades?
L
Did you go over the Tips page? Pay extra attention to the Keeping Up section.
A good way to significantly boost your overall knowledge is to become a tutor. It might seem that understanding the material is difficult for you to follow — but if you’re teaching someone else, it will help you organize what you know, and as you’re explaining it, things will become clearer to yourself too.
I’m stressing about my grade — what should I do?
L
First: Don’t Panic!
Remember that you have many ways to evaluate your performance. In
particular, use the grades.txt
file (when it becomes available in the
“Summary” row on the Handin server) to see your current estimated
numbers: your grade, the possible grade range from now to the end of the
semester, and your percentile. Remember to also compare your numbers
against the class charts.
If you’re worried about PLQ grades, then read through the About PLQ page. It has a thorough explanation of the format. In many cases students are unaware of these details resulting in being redundantly over-stressed about it. A great way to improve your performance is to suggest a question!
If you’re still worried about your performance, please do schedule a meeting to review your performance and discuss what could be done to improve things (if needed). People are often over-stressing for many reasons, and in many cases they have nothing to be worried about — going over your numbers in a meeting is a good way to avoid such stress and be more focused on the material.
The end of the semester is coming up, and I’m not doing well.
Can I do some extra project or something to improve my grade?
L
Short answer: no.
Long answer: such projects, extra homework, etc are problematic in several ways. First, a problem with these end-of-semester requests is that doing anything after the semester is done is technically difficult enough to be impractical. At that point there is no course staff so it’s only me who would need to handle such things.
A more severe problem is that such things are inherently unfair to other students. It might be that you’re looking at a potential failure so you’re more stressed, but if there’s an option to improve grades via extra work then almost everyone will want to do it, even ones that have very good grades. This means that these kind of extras become regular homework, not really extras — and this means that you’re actually asking for another homework for everyone.
It’s the end of the semester and my karma grade is low — was
there some problem that made me get such a grade?
L
The karma grade is special in that it doesn’t follow the same rules as homework/PLQ. For PLQs, the grading is “positive grading”, where you’re getting some points for doing things right; and for homework it’s usually “negative grading” where your grade starts from a 100 and you get penalized for problems. The karma grades, however, are neither of these. There is no list of things that you should do to get a 100, and there is no tracking of bad things you did with penalties.
So the bottom line is that it’s just a combination of a bunch of numbers that are factored in (for example, various piazza stats, grading bonuses, etc), combined into a single number and the whole thing is done so the final number is somewhere on a range that looks like a normal grade — and like everything else, used in the context of all grades.
I had autodropped PLQs that aren’t the lowest, is this a bug?
L
The autodropping algorithm chooses the PLQs that did the most damage to maximize your grade. Different PLQs have different weights, so these are not always the lowest grades.
Technical Issues (Network, PLQ, etc)
How do I install the PLQ web-app on iOS?
L
- Access the PLQ page on Safari (must be Safari, since it’s the only one that is permitted to install things on your home screen).
- Tap the icon in the bottom-middle of the screen (the one that looks like a box with an arrow coming out of the top).
- Scroll down and tap “Add to Home Screen”, which will install the site as a PWA.
DrRacket cannot connect to the handin server…
L
-
Check that you’re on a network that allows high ports (e.g., if you use Nuwave-guest without a login it considers you a “guest” user, and the ports that you can use are restricted to a few well-known ones like
http
andssh
). -
Make sure that you’re using the current Racket version, and that your OS is updated (specifically, that its root certificates are all in order).
-
To check for errors, you can try to use some utility to get a more precise diagnostic. For example, you can run this in DrRacket or just plain Racket:
(require pl/client)
(define h (handin-connect "pl.barzilay.org" 9770))
(handin-disconnect h)and see what it complains about.
-
The handin server uses a certificate that is signed by
letsencrypt.org
. This should be included in your OS root certificates, but make sure that your OS is updated if there are problems.
I can’t see any files on the handin server…
L
If you have any ad blocker (like AdGuard), try to disable it.
Racket / DrRacket
How can I use the DrRacket debugger?
L
The debugger that is included with DrRacket is somewhat unlike other debuggers that you’re used to, and somewhat under-maintained. It is therefore not recommended to use it. This is, BTW, a common theme with functional languages: these languages are usually easier to debug by experimenting on the REPL, and adding an occasional print to follow code.
Racket looks like a great language, how can I learn how to do
real stuff in it?
L
Racket is indeed well fitted for any job, in many cases more than other languages. If you’re interested, then start from the Racket Documentation, where you can find many useful guides and manuals. Specifically, the Systems Programming Guide guide will walk you through implementing a web-server, or you can read the Continue guide to learn how to implement a web-app using Racket’s web-server.