Here we discuss how the grading programs changed between the 1998 version and the 2011 version. Most of this material was written when the 2011 version was first released, so it has a somewhat evangelical air, even after some rewriting. It might be useful to know all the same.
Major changes since the 1998 version
Here's a non-change: valid 1998-style grades files are still valid, and can be read by the 2011 programs. They can also write valid 1998-style files if you ask them to, provided you're not using the 2011-only features, of which there are not many.
Student numbers have ten digits.
Until about 1999, University of Toronto student numbers were nine digits long, and that's what the 1998 grading programs expect. From 1999 to about 2010, student numbers had ten digits, but the first one was zero, so we were able to pretend there was no change. Now however, we have run out of 099… numbers, and nearly every course has students with 100… numbers. (It's not that U of T has really had a billion students, but the explanation is historical and fairly boring.)
The 2011 grading programs assume ten-digit numbers, but can read shorter ones and are happy as long as they have something like five significant digits. Consequently, the 2011 programs can read 1998-style files.
2011 output to grades files uses ten-digit student numbers by default, so those files cannot be read by the 1998 programs. However, you can ask the 2011 programs to produce nine-digit numbers.
- The command-line programs all accept a -9 option.
- The GUI-based grades program has a "Use 9-digit student numbers" setting. This setting is file-specific and (like all grades settings) lasts only for one session.
If you ask to use nine-digit student numbers when working on a grades file containing students with ten-digit numbers — that is, student numbers with a non-zero leading digit — the program will fail with a suitably horrible error message.
Formatted output intended for display to humans always shows ten-digit numbers. The -9 option only affects output data files intended to be read by other grading programs; that is what is needed to let you switch back to the 1998 programs, if you prefer.
The programs are written in Java.
The earlier versions, up to and including 1998, were written in C. The 2011 programs are completely rewritten in Java. This is not intended to affect your user experience, but it does have some moderately significant implications.
- Your initial level of trust in the 2011 version should be lower than your current level of trust in the 1998 version. A great deal of the design carried over, however, so these are not completely new programs; and the operations on lists, of which there are many, use the standard Java libraries rather than home-grown malloc and pointers. Perhaps that will make you feel better.
- You can install the programs on your own computer, provided you have Java 1.6 (or a more recent version) also installed. There are instructions. It should be fairly easy, though currently not quite so easy on a Windows system, since the scripts provided for the command-line programs are for Unix-like systems.
- It took forever to produce these things: 1998 to 2011! I'm reminded of a headline in the Times Literary Supplement: "How long, Leon, how long?" Leon Edel had been taking quite a while on his task, which as a biography of Henry James was admittedly more impressive than a bunch of grading programs. My only defence is that I probably had more administrative duties than Prof. Edel.
There's a GUI-based program, "grades".
It started as a replacement for the old genter, which no longer exists, and grew to be somewhat more general. We hope it helps.
There's a description.
Mid-strength changes
You can set the column widths for "printed" output.
The 1998 programs — specifically, gpr — let you print columns of marks in any width, as long as it was five.
The 2011 version allows you to specify a width for all the columns, using the -W option for gpr or the control for the "Print" command in grades. It also allows you to set per-column widths in the mark definitions (in the grades-file header), overriding the -W option. This should be a help when you want to include longer data such as CDF logins or TAs' names in a grades file.
You can still say nothing and get a width of five.
The error messages are plainer but wordier.
They aren't raw Java exception reports, but you will see names of exception classes. Sadly, the effect of including information on the context where the trouble was found has the effect of making the messages longer and more repetitive than you'd like.
Still, they are so unusually informative that you will probably soon stop making mistakes at all.
New programs
Gupdatedrops lets you update the drop indicators on the basis of new class lists.
Grecol lets you make interestingly general rearrangements of the mark definitions.
Vanished programs
Genter, gnames and goldtonew are gone. For replacements, read about the grades program to find out how to get along without genter, and read "Getting your class list" to find out why you don't need gnames. You don't need goldtonew, because, unlike the more radical 1988 to 1998 transition, the 1998 to 2011 transition doesn't make the old file format unreadable by the new programs.
Changes to the file format and the existing programs
The $pick function can be use to set string values. $Pick calls can contain calls to any function (but that freedom should be used carefully, since the educational meaning probably becomes at best debatable if you don't stick to simple cases).
Plain weighted terms in a mark formula can no longer have explicitly zero weight. You can evade this restriction in a couple of ways, but why would you?
You can now sort by flag character. In the command-line programs, give the option "-k%".
Ghidenames only accepts one input file. It also always sends its output to the standard output, instead of modifying its file argument directly. The previous arrangement seemed dangerous.
Gpr and the programs derived from it (garchive, gdisplay, gpubreport, greport and gstats) have changed in ways that should seem minor. The derived programs are no longer shell scripts, partly so that they will be easier to install on Windows systems. One effect of that is that you can no longer pass them gpr's printing options (apart from the new -W option, in most cases). The derived programs mostly accept selection options, but not all of them accept sorting options; and garchive rejects both selection and sorting options, so as to make it harder for you to surprise the Undergraduate Office. Their shared explanation on a single web page in this guide should clarify the situation. Another effect of avoiding the shell-script implementation is that error messages from the derived programs are slightly less mysterious.
In short-form output, the gpr family trim blanks from marks.
Glint doesn't perform exactly the same checks as in the 1998 version. For example, it now looks for digits at the end of a name, which are often symptoms of missing tab characters. Its checks on names may confuse you, since the name displayed in a student record is "normalized"; the error message includes the raw name too, and that should help.
Gclear, gdelete and gremove (all the same link!) have also changed from shell-script to separate-program implementations, like the gpr family; and similarly, their error messages should be clearer.
Gremove and gdelete -R both accept a -c option specifying that non-empty marks should be cleared before the mark column is removed. Don't confuse -c with the -C (upper-case!) option that tells gdelete to perform clearing as opposed to removal. (In fact, -c isn't allowed with gdelete -C, and you'll see an error message if you try it.)
Gclear, gdelete and gremove allow you to clear or remove more than one mark at a time. Considering that these operations are amputations, maybe you shouldn't.
Gsub has been completely changed; it's not the same program at all. That's because the Faculty of Arts and Science, for which the old gsub was designed, now has a totally different means of submitting marks — its online "e-Marks" system.
Gswap requires you to give its -m option a single string containing the names of the two marks to be swapped, rather than giving -m twice. That is, you do this:
gswap -m "mark1 mark2" ...
and not this:
gswap -m mark1 -m mark2 ... # DON'T DO THIS.
Gswap now changes the header as well as the student records.
Changes you might not even notice
Exponential notation is not accepted for mark values. Unintentionally, it was accepted in the 1998 version. An error message now appears when it seems you might have been trying to use exponential notation.
Sorting on names works slightly better than in the 1998 version, because the last character of the name is never chopped off to preserve length. Also, sorting is new stable. (It wasn't.) Sorting in reverse gets you the reverse of what you'd get sorting in normal order; a little thought makes it so you can't figure out whether this is consistent with the definition of "stable", but it is probably what you want.
Gen in 1998 removed in-line mark comments that were entirely blank, while the 1998 glint, after calculating marks, complained if they differed from the actual values even if the difference was simply in trailing blanks. The result, though seldom seen, was that glint reported errors if there was a blank comment on a calculated mark. The 2011 gen does not remove blank comments, and the 2011 glint does remove them before comparing mark values, so those rare but annoying error messages from glint are gone. It's a double whammy that's positive!
Gcopy no longer allows overwriting existing marks. It does give you the choice of skipping those records or abandoning the copying operation.
Gcopy allows you to select the students whose marks are to be copied. The selector is applied to both the source file and the destination file.
Gdiff doesn't work in quite the same way. The differences should be clearer, because they're more symmetric between the two files. For example, if the two files have different lists of mark names, then both sets of titles are shown.
An oddity, though: in the 1998 version, if a student was labelled 'd' (as an apparent dropout) in the first file and not in the second, and the selector was set to omit students who had dropped, then the difference would appear as a change in the drop flag; in the 2011 version, the difference appears as a student absent from the first file and present in the second, with the entire record displayed. Either interpretation seems reasonable.
Here are a couple of other minor changes to gdiff:
- Flag characters that agree are not displayed.
- If the only difference between a student's records in the two files is in non-in-line comments, then a line giving the student number and name is displayed as well as the line giving the comment.
Gpr in 1998 exited with status 2 if no students were selected and long-form output was requested, with the -L option. That no longer happens; instead, the usual exit status of 0 is returned.
Gsort's usage message no longer says that -r has no effect if the sort key is not set. The old message was wrong.