# =================================================================== # Assignment Metadata Template # =================================================================== # This file is a plain Java properties file that holds the metadata # for this assignment. All of the fields are commented so # that it can serve as a template. # ------------------------------------------------------------------- # Required Properties # ------------------------------------------------------------------- # The properties in this section should always be provided for all # assignments, all the time. # ------------------------------------------------------------------- # A title for this assignment, provided by the contributor. Like a paper # title, it should be as descriptive as possible. However, titles are # not presumed to be unique. # ----- title = A Tetris-playing Robot # A brief, one- or two-sentence description of what this assignment is # about. In other words, a mini-abstract, longer and more informative # than the title but still very concise. Let's say, approximately 30 # words or less. # ----- synopsis = Build a class that represents an automated tetris player, and \ that can be run inside a pre-provided tetris game with a full GUI \ (no GUI programming involved). # The target programming language for this assignment (case-insensitive). # Use the common language name if the assignment (e.g., "java", "c++", # "python", etc.). # ----- programming.language = c++ # Basic contact information. Can be repeated as many times as necessary # with different numeric suffix to cover the number of authors/contributors # involved. # ----- author1.name.first = Stephen H. author1.name.last = Edwards author1.email = edwards@cs.vt.edu author1.url = http://people.cs.vt.edu/~edwards/ author1.affiliation = Virginia Tech, Dept. of Computer Science author1.phone = +1 540 231 5723 # A comma-separated list of one or more languages in which this assignment's # files are written. Values should conform to RFC 4646 (see # http://www.rfc-editor.org/rfc/rfc4646.txt). If no value is # given, then "en" is assumed. # # Individual files within the assignment should use one language only, but # multiple translations within the assignment are fine. Note that the # first entry in this list is considered the "primary" language for # this assignment, and it is expected that all supporting files will be # available in that language. Other languages in the list would # then imply that translations for some or all of those files in the # given language would also be provided as part of this assignment. # ----- languages = en # The copyright holder and date. This can be automatically filled in # when the assignment is submitted (default == current year and # contributor). # ----- copyright = (c) 2008 Virginia Tech Department of Computer Science # The name of the license under which rights to use this assignment # are granted. If omitted, the assumption is "all rights reserved # by the copyright holder". When a new assignment is uploaded, we # can suggest this creative commons license as the default. We can # also provide a drop-down list of the most common choices, including # the creative commons choices and approved OSI open source licenses. # ----- license = Creative Commons Attribution-Noncommercial 3.0 United States License # The URL under which the full text of the license is available on-line. # ----- license.url = http\://creativecommons.org/licenses/by-nc/3.0/us/ # ------------------------------------------------------------------- # Recommended Properties # ------------------------------------------------------------------- # The properties in this section are expected for all assignments, # but stingy or lazy contributors may still fail to provide them # (we'll bug them, but we won't force them). # ------------------------------------------------------------------- # A comma-separated list of keywords or tags provided by # the contributor. # ----- keywords = GUI, JUnit, TDD, test-first coding, \ test-driven development # An element that gives one of the following values, characterizing # the type of deliverable the student will produce. Examples include: # program, class, method, function, block, statement, declaration, etc. # ----- type = program # An optional comma-separated list of keywords or tags intended to identify # the knowledge content that is the focus or context of the assignment, # where appropriate. Be specific. This list not only explains what the # goals of the assignment are, but also implies what prerequisite knowledge # students must have before attempting this assignment. # # If possible, CC2001 (or newer) knowledge units can be used in this # spot, although contributors are also free to use more generic terms, # including any other appropriate labels they feel will be recognizable # by others. # ----- topics = recursion, parameter passing, method decomposition # Specifies the name of a program builder used to compile student # solutions. A controlled, but extensible vocabulary will be used, but # defined later. At a minimum, Web-CAT plug-in names can be used. # For assignments that include a "frame", the builder needs to know # how to interpret the frame correctly. # ----- builder = CppTddPlugin # Specifies the name of a program runner used to execute student # solutions on test data. A controlled, but extensible vocabulary # will be used, but defined later. At a minimum, Web-CAT plug-in # names can be used. # ----- tester = CxxTest # ------------------------------------------------------------------- # Optional Properties # ------------------------------------------------------------------- # Optional properties are not required. We'll give contributors a # chance to provide them, but won't nag. We expect that many # assignments won't provide some or all of these. # ------------------------------------------------------------------- # A free-form text property that provides space for a one- or two-paragraph # abstract of what this assignment is about and why you would want to # use it. It supplements the title and one-sentence synopsis. # ----- abstract = This is a cool game assignment that motivates students ... # A free-form text field that allows the contributor(s) to explain # the educational goals and learning objectives of the assignment in # prose form, as a supplement to the "topics" property. # ----- goals = This assignment is designed to allow students to practice \ writing recursive ... # A free-form text field that allows the contributor(s) to suggest # ways that an assignment can be extended, adapted, enhanced, or improved. # This is a way to capture "future work" ideas, and is explicitly intended # for describing "features" that are not part of the assignment as # written, but that could be created by others. # ----- potential = This assignment lends itself well to contests, where \ student solutions are played against each other. This is an \ excellent way to increase engagement. Consider offering extra \ credit for achieving different levels of performance, or for winning \ a contest. # A URL for a page/site maintained by the contributor with more # information about this assignment. This is another way for contributors # to publicize their own work and efforts related to this and other # assignments, if they want. It is purely optional. # ----- info.url = http\://courses.cs.vt.edu/~cs1705/assignments/tetris.html # If this assignment requires a specific implementation of the target # programming language, specify it in this optional attribute. # ----- programming.language.vendor = GNU g++ # If this assignment requires specific version of the target programming # language, specify it here. Use a suffix of "*" to indicate any version # that begins with the given prefix (e.g., "3.5*" matches 3.5, 3.5.1, and # 3.5.7, but not 3.6 or 4.0), or "+" to indicate any higher version (e.g., # "3.5+" matches 3.5, 3.5.1, e.5.7, 3.6, and 4.0, but not 3.4.9). # ----- programming.language.version = 3.5+ # Identifies the academic course(s) for which this assignment # is targeted. Can be a comma-separated list. Where possible, complete # course numbers and titles should be provided, although contriutors can # also use generic terms (like "CS1") or tags (like "introductory") or # any other appropriate label they feel will be recognizable by others. # ----- course = CS1, CS1705: Introduction to Object-oriented Development I # Gives an estimate of how much experience a student should have in order # to tackle this assignment. The estimate is approximate months of # experience, where 0 means no programming experience of any kind, # 12 means the equivalent of a complete year of academic study in the # target programming language, and so on. Obviously, different curricula # include different topics at varying times, so this estimate presumes that # the necessary prerequisite knowledge has been covered reasonably. When # in doubt, use the position within your course, and the experience level # of students entering your course as a guide (i.e., "3" is a good estimate # for an assignment that might be used in the middle of a one-semester # introductory course, while "15" might be appropriate for an assignment # used in the middle of a second-year course, for example). # ----- estimated.experience = 3 # Gives an estimate of how many hours (or days, or weeks) students should # be given to work on a solution--normally, the difference between when an # assignment is handed out and when it is due. A laboratory assignment # might have an estimated time of 1 or 2 hours, while a longer # programming assignment might have a value of 1 or 2 # weeks. # # The format for this value is an integer followed by a unit name. The # allowed unit names are: hour, hours, day, days, week, and weeks. # ----- estimated.time = 2 weeks # Gives an estimate of how many lines of code (not including comments or # blank lines) students are expected to write to produce a 100% correct # solution. # ----- estimated.size = 250 # ------------------------------------------------------------------- # Repository Properties # ------------------------------------------------------------------- # Repository properties are provided automatically # by a third party, typically when an assignment is uploaded to some # service. These properties are not intended for direct editing by # end users or contributors, but are provided in downloaded assignments # for informational purposes, and to aid in tracking the relationships # between modified/adapted versions of assignments and their original # ancestors. # ------------------------------------------------------------------- # A globally unique identifier for this assignment, generated by the # repository or service to which the assignment is uploaded. The property # also includes a rudimentary checksum-style hash code for error detection # and tamper resistance. # ----- repository.id = catspace.web-cat.org:1234 ab47 # A generated version number for this assignment. The versioning scheme # is really a way to track both changes to an assignment by the original # author and derivations/modifications/adaptations by others who wish # to contribute their work back to the community. The version number is # a sequence of an odd number of positive integers separated alternately # by "b"'s and periods. # # The intent is that the very first submission of an assignment ever # by the original contributor is version "1". The contributor (or any # of the individuals listed as authors, who are all "contributors" from # this perspective) can make changes to an assignment and re-upload at # any time. This simply increments the version number, creating versions # "2", "3", and so on. # # An independent party may download and modify/customize and assignment, # and then wish to share this version. When they do, they are effectively # creating a "branch" from the original. The version number for their # new contribution would be the version number of the source they modified, # with an appended branch number (i.e., a repository-assigned version number # indicating which branch from the original this is), followed by a # version number for this branch. # # In other words, suppose assignment A had been submitted (version 1), and # then revised by the original author three times (now version 4). Now # suppose a new contributor downloads the latest version (4) of assignment A, # modifies it, and then wishes to contribute it back. This would be the # first derived offshoot, or branch, from A's version 4, which we can call # 4b1. Further, this would be the first version of this derived work, so # its full version number would be 4b1.1. # # The author of this derived work could then make a few more changes and # submit again, to create version 4b1.2. In the mean time, yet another # individual could also modify assignment A and submit his completely # independent variation, which would be numbered 4b2.1. Of course, the # original author might also make a change to create version 5. # # Finally, another interprising instructor might take version 4b1.2 and # create her own distinct flavor, which would then be 4b1.2b1.1. In # principle version numbers could be an arbitrarily long sequence of # branch number/version number pairs following the root version number. # Each branch number/version number pair in the chain is written # bNN.MM, where the "b" and "." are merely punctuation, NN is the # branch number, and MM is the version number. # ----- repository.version = 4b1.2 # The repository.id for the original assignment this one was # derived from--i.e., the "root" of the variant/derivation tree to which # this assignment belongs. If this assignment is not derived from # any other, then the repository.root.id = repository.id. # ----- repository.root.id = catspace.web-cat.org:179 cc55 # A publicly accessible URL where people can view information about this # assignment, typically provided by some repository/service to which this # assignment has been uploaded. # ----- repository.url = http\://catspace.web-cat.org/assignment/1234 # A human-readable change history summary for this assignment. If the # repository/service hosting this assignment allows contributors to # briefly describe changes when they upload modified/customized assignments, # then a consolidated presentation of the change history associated with # this particular version can be generated here for informational purposes. # ----- repository.history = # A comma-separated list of identifiers used to enforce access control # restrictions for this assignment at its home repository/service, provided # purely for informational purposes. Changes to this field should be # made directly through the repository interface's access control features. # ----- repository.acl = SomeGroupName # ------------------------------------------------------------------- # Additional Properties # ------------------------------------------------------------------- # We can add more properties as we see fit. # # Contributors can add any properties they want as well.