\label{Guts_Course_Dir} Courses are assigned to users, not vice versa. Internally, courses are handled like users without login privileges. The username is a unique ID, for example \texttt{msu\_12679c3ed543a25msul1}. Every course in every semester has a unique ID; there is no {}``semester transition'', course expire and other courses take their place. The userdata of the course includes the full name of the course, a pointer to its top-level resource map ({}``course map''), and any associated deadlines, spreadsheets, etc., as well as a course enrollment list. The latter is somewhat redundant, since in principle, this list could be produced by going through the roles of all users, and looking for the valid role of being student in that course, but for performance reasons this is cached. % \begin{figure} \begin{lyxcode} \#>~ls~-alF~/home/httpd/lonUsers/msu/1/2/6/12679c3ed543a25msul1/ -rw-r-{}-{}-{}-{}-~~~1~www~~~~~~users~~~~~~~17155~Apr~25~16:20~classlist.db -rw-r-{}-r-{}-~~~1~www~~~~~~users~~~~~~~60912~Apr~25~16:20~classlist.hist -rw-r-{}-{}-{}-{}-~~~1~www~~~~~~users~~~~~~~12354~Jan~~4~16:40~environment.db -rw-r-{}-r-{}-~~~1~www~~~~~~users~~~~~~~~~~82~Jan~~4~16:40~environment.hist -rw-r-{}-{}-{}-{}-~~~1~www~~~~~~users~~~~~~103030~May~15~14:47~nohist\_calculatedsheets.db -rw-r-{}-{}-{}-{}-~~~1~www~~~~~~users~~~~~~~13050~May~~9~21:04~nohist\_expirationdates.db -rw-r-{}-r-{}-~~~1~www~~~~~~users~~~~~~~~~~~6~Jan~~4~16:40~passwd -rw-r-{}-{}-{}-{}-~~~1~www~~~~~~users~~~~~~~17457~May~~9~21:04~resourcedata.db -rw-r-{}-r-{}-~~~1~www~~~~~~users~~~~~~~~8888~May~~9~21:04~resourcedata.hist~ \end{lyxcode} \caption{Sample course home directory listing} \end{figure} \texttt{classlist} is this list of students in the course, \texttt{environment} includes the course's full name, etc, and \texttt{resourcedata} contains deadlines, parameters for homework, etc.