#lang scribble/doc @(require "common.rkt") @title{Client Customization} @itemize[ @item{Rename (or make a copy of) the @filepath{handin-client} collection directory. The new name should describe your class uniquely. For example, @filepath{uu-cs1410} is a good name for CS 1410 at the University of Utah.} @item{Edit the first three definitions of @filepath{info.rkt} in your renamed client collection: @itemize[ @item{For @racket[name], choose a name for the handin tool as it will appear in DrRacket's interface (e.g., the @onscreen{XXX} for the @onscreen{Manage XXX Handin Account...} menu item). Again, make the name specific to the course, in case a student installs multiple handin tools. Do not use @onscreen{Handin} as the last part of the name, since @onscreen{Handin} is always added for button and menu names.} @item{Uncomment the definitions of @racket[tools], @racket[tool-names], and @racket[tool-icons]. (But leave the latter field's definition as @filepath{icon.png}.)} @item{For @racket[server:port], uncomment the line, and use the hostname and port where the server will be running to accept handin submissions.}] Optionally uncomment and edit the next two definitions, @racket[web-menu-name] and @racket[web-address], to add an item to the @onscreen{Help} menu that opens a (course-specific) web page.} @item{Replace @filepath{icon.png} in your renamed directory with a new 32x32 icon. This icon is displayed on startup with DrRacket's splash screen, and it is included at half size on the @onscreen{Handin} button. A school logo is typically useful, as it provides a recognizably local visual cue. If students might use multiple installed handin tools, then make sure to vary the icon according to the course.} @item{Replace @filepath{server-cert.pem} in your renamed directory with a server certificate. The file @filepath{server-cert.pem} in @filepath{handin-client} collection is ok for testing, but the point of this certificate is to make handins secure, so you should generate a new (self-certifying) certificate and keep its key private. (See @secref{server-setup}.)} @item{To create an installable package, run @commandline{raco pack --collect --at-plt ++setup .plt } where @tt{} is the name that you chose for your directory (i.e., whatever you changed @filepath{handin-client} to). You can also add a @tt{--replace} flag to make the installation of the resulting file replace existing files (useful for creating an update package). This directory should exist in your @filepath{collects} directory: this can be done by making sure that the copy is in the same place the original client directory was (see @secref{wheres-the-collection}) or by specifying a value for the @envvar{PLTCOLLECTS} environment variable. For example, if your customized collection directory is called @filepath{cs1} and it is located at @filepath{/home/joe/intro/cs1}, then you can run @commandline{PLTCOLLECTS=/home/joe/intro: raco pack --collect ...} (Don't forget the colon at the end of the @envvar{PLTCOLLECTS} value; it is important!) Note that if you create an updated copy of the client package (that is, students already have an older version installed), then you should use the @DFlag{replace} to indicate that the package should replace existing files instead of throwing an error.} @item{Distribute @filepath{.plt} to students for installation into their copies of DrRacket. The students need not have access to the DrRacket installation directory; the tool will be installed on the filesystem in the student's personal space. If you want to install it once on a shared installation, use setup-plt with the @DFlag{all-users} flag.} ]