Frequently Asked Questions
Common questions and tips ‘n tricks that may not appear elsewhere in the documentation.
Plom Client software
Some windows/dialogs are awkward to resize on Gnome Desktop
You could try disabling “Attach Modal Dialogs” in the “Gnome Tweaks” app, but mostly this has been fixed recently by improving the way we use modal dialogs.
Test Preparation
For self-submitted work, should I start each question on a new page?
Yes. This is important because it makes it easier for markers to find the answers, especially if they need to use the rearrange pages dialog.
While preparing the test, we suggest writing something like “Please start a new page NOW” at the start of each question.
Marking
Does Plom support fractional marks?
Plom now has preliminary support for “half-marks” and in principle finer divisions. “+½” and “-½” delta rubrics can be added to your server under “Rubric management”. More complete support, for example including full clientside creating/editing of fractional rubrics could be added by future energetic co-developers.
Why do you have “+0” and “-0” as possible delta-marks?
(Current versions of Plom do not expose this feature.)
Mathematics use “epsilon” to represent small number, often in the context of limits. Some markers like to indicate to students via (say) “-0” that there is a small error in their work but it is too small to reduce their overall mark. Similarly some markers use “+0” to indicate that a small amount of progress has been made, but not enough to be worth a full point.
How can I review the work of a marker?
There are several ways to do this, in various stages of development. Suppose we wish to check all the marking by Yakov on Question 2 version 2. We have at least three options:
Reset the password for Yakov. Use their account in the client to look at and adjust marking as needed.
Login to the web interface as a manager or lead marker. Search by question and username. Look over each task.
You can “reassign” any tasks that need regrading to another marker, say, Sierra.
Or you can “tag” tasks (e.g., with “regrade”) and ask Yakov to revisit them.
Or you can “reset”, removing all annotations and putting the task back in the pool.
In either case, Sierra and/or Yakov can use Plom Client to do the regrading. They might find it useful to sort tasks in the Client by tags.
When working on the same tasks in the Client and the web interface, it will be helpful to “refresh” the task list in the Client.
In the client—as a lead marker—toggle “show all tasks”. You can look at all tasks for the current question and version. In current development is the ability reassign any tasks to yourself, which will allow you to further edit the annotations.
Scanning
Do I need to carefully pick out just the right pages when rescanning a bundle?
It depends. Suppose we have scanned “BundleA1” but have some page misfeeds (e.g., pages stuck together) or pages that somehow do not appear correctly in the resulting PDF file. If the bundle has been uploaded to the staging area but not pushed, we can simply rescan the whole bundle. Use a new bundle name, say “BundleA1-rescan”. Now process as usual.
On the other hand, If you’re already pushed an incomplete bundle, it might be easier to rescan only the appropriate pages, to avoid needing to discard the colliding pages.
Server administration
My legacy server sometimes has random disk I/O errors
Like this peewee.OperationalError: disk I/O error
The Plom legacy server uses an SQLite database; it
should not be run on NFS storage.
Apparently “people” know this but we were just as “thrilled” as you probably
are to discover it on a production server.
Legacy: How can I get past SSL certificate errors?
E.g.,:
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:997)'))
Or plom-create status might be showing you:
[!] insecure connection (self-signed or invalid SSL cert)
SSL is used to securely verify the identity of the server you are
connecting too.
If you’re only experimenting, you can bypass the checks by setting a
special environment variable, e.g., in bash:
export PLOM_NO_SSL_VERIFY=1.
The desktop Plom Client offers a mechanism to
ignore SSL errors (at you and your users’ own risks).
For production servers, you’ll need to investigate how to setup SSL certificates.
Ok, how do I setup SSL certificates?
LetsEncrypt is probably a good place to start.
How can I clone a legacy server?
For example, how can I make another copy of a running legacy server? One way
is to copy the filesystem of the running server, then modify
serverDetails.toml to change the port.
Its also possible to make a new server from scratch that accepts scans
intended for the old server. This is discussed next.
How do I change the public code and/or private seed of my server?
This can be done provided you have not yet made PDF files (whose QR-codes would contain that public Code).
On the new Django-based server, login as any Admin user, then go to /admin. This gives your direct access to most of the raw database tables. Find the Specification and change the publicCode and/or privateSeed.
One should be very carefully doing this sort of thing: the publicCode exists to make it difficult to accidentally upload the papers to the wrong server. This question shows you how to defeat that mechanism.
How do I reset my legacy server to the pre-scanned state?
You need two things: the question_version_map.csv file which you
can get with the command line tools: plom-create get-ver-map.
This is important because Plom needs to know which versions to expect
for which question. You can upload this to your new server using
plom-create make-db --from-file old_qvmap.csv.
You will also need the verifiedSpec.toml which is harder to get:
it can be extracted from the file system of your old server by copying
specAndDatabase/verifiedSpec.toml.
There are two fields in verifiedSpec.toml that are probably not
in your original spec file:
privateSeed = "0052084227513987"
publicCode = "302386"
Calling plom-create uploadspec verifiedSpec.toml to push this spec
into the new server will (currently) populate those fields as-is,
thus ensuring the server will be able to read in physical papers
printed from the original server. In future, this might require
more effort such as passing a --force.
If you do not have access to the file system of your old server, it
should be possible to extract the publicCode from the QR codes of
the printed pages. See the source code plom/tpv_utils.py for
hints on how to do this. The privateSeed should not be necessary
for this procedure.
Caution
One should be very carefully doing this sort of thing: the publicCode exists to make it difficult to accidentally upload the papers to the wrong server. This question shows you how to defeat that mechanism.
I messed up by double-scanning some papers and uploading and now I have collisions
If there are only collisions in your bundle, you can remove the bundle without pushing it.
If there are some non-colliding pages in the bundle that you want to keep, one approach might be to find those papers in the physical bundle and rescan them. The other option is to discard all the colliding pages, so that you can push the remaining non-colliding pages.
I messed up by double-printing some papers, now I have collisions
This is a serious problem which you should avoid getting into… If two students have written on (say) paper number 20, then you will get collisions at upload time.
Let’s suppose the scanned bundles are contiguous: that is, the two paper number 20s are not interleaved in the scanning process. For example, they are in two separate bundles. (If this is not so, have a little cry and then consider sorting and rescanning?)
At this point you have paper 20 “A” scanned into the system. Now upload paper 20 “B”. You will not be able to push it because of the collisions.
Next: if you have only one version, you can discard all the pages then convert to known pages of some unused paper number, say 107 (assuming you have spares; if not see below).
I messed up by double-printing and I’m using multiple versions
This is similar to the above but we cannot simply push paper number 20 “B” into a spare unused paper slot (say 107). This is because paper number 107 will have different versions than 20.
We need to instantiate a new row of the database using the versions of
paper number 20. Extract the version map. Use the relevant values to
make a csv file with one row, using a completely new paper number:
say 1020. Next we need command line access to the server, a topic that needs its own FAQ entry…
Using the command line access, use django-command plom-qvmap and
see the append option. Now you should be able to assign the
conflicting work to paper 1020.
If the command line access is not feasible, another option is:
Clone the server from the pre-scanning state (see question elsewhere).
Update the duplicated papers into the 2nd server.
Have your grading team grade on both (alternatively, have them do most of the grading on Server 1, then download the rubrics and push those rubrics to Server 2.
Changing the spec later
Students have already written my assessment, can I split one of my questions up? Can I merge two questions?
Yes, although there is some work. Keep the old server up for now (“Server A”). Make a new server (“Server B”). Hack the spec to duplicate the public code from A to B (see instructions above for “resetting a server to the pre-named state”). Change the spec as you wish (with in the constraints of the papers you already have). If you have mono-versioned test, nothing else is required: upload the papers to Server B.
- If you have a multiversioned test, its a bit harder:
extract the version map from Server A.
modify that version map for your new paper layout. For example, if you are splitting “Q5” (physically laid out as 5(a) on Page 11 and 5(b) on Page 12) into separate “Q5” and “Q6”, then they must both have the same version as the original Q5.
upload that version map to Server B when making the database.
Upload the papers to Server B.
I have already uploaded scans, can I split one of my questions up? Can I merge two questions?
Not easily. Currently we would suggest re-uploading to a new server following the instructions above.