Quick Start

  1. Cd to the course web calendar subdirectory (e.g.: cd /cse/web/courses/cse401/18sp/calendar)
  2. Run the command: createcal
  3. Find output (html and ics files) in the current (calendar) directory.
  4. Edit files ./inputFiles/*.ini to indicate your actual course calendar content, then repeat step 2.


  1. createcal Outputs

    1. Calendars

      createcal produces html and ical calendars. Students can view the html calendar as part of the course web. Students can subscribe to the ical calendar to add course events to their personal calendars, for example, in Google calendar.

      createcal uses university web services to obtain lecture, section, and lab meeting times and locations, and (in most cases) final exam schedule. The initial calendars, created as part of quarterly course web setup, contain this information. The instructional staff can then augment them with lecture topics, links to lecture materials, reading, assignments, office hours, and the like.

      The html version of a sample course calendar looks like this (or view it live):

      Subscribing in Google calendar to the course calendars for the lectures, one of the sections, and the office hours results in this:
    2. Lists

      In addition to calendars, createcal also produces html lists of lecture, section, and lab meetings, in case you prefer that format. They look like this:
    3. HTML customizations

      createcal's HTML output pages can be customized in two ways:
      • by editing calstyle.css. Nearly all output elements can be controlled by the style sheet.
      • by embedding them in other pages. createcal produces the body of HTML calendars and lists as files that can then be included into whatever HTML wrapper you want.
      See the HTML output details page for more information.
  2. createcal Inputs

    1. Single Event Information: lectures.ini, sections.ini, etc.

      The instructor-supplied information for an event is expressed using blocks. The first three lectures in the sample course are described in file lectures.ini by these three blocks:
      # [Auto DateHint] 2011-03-28
        Description Introduction
        Materials  M1: <a href="../lectures/1-intro.pdf">Slides</a>
      # [Auto DateHint] 2011-03-30
        Description More Intro
        Reading     Text: Chapter 1
      # [Auto DateHint] 2011-04-01
        Description Arch Support for OS
        Reading     Text: Chapter 2
        Materials   M2: <a href="../lectures/2-arch.pdf">Slides</a>
      The [Auto DateHint] lines are comments, automatically produced by createcal, to make it easier to locate the block that corresponds to a particular lecture. They are updated each time createcal is run.

      It's important to note that a content description file does not contain date information used as input by createcal - the comment lines are comments, to be read by humans, and are hints, in the sense that they go out of date if you insert or delete events, until they are updated the next time you run createcal. The absence of dates in the content file means that you can add or delete lecture topics in the content file without having to edit the dates of all following lectures. It also means that the content file for an earlier offering of the course can simply be copied to a new offering's web to create a complete, initial list of topics, with no editing required.

      There is a file of information blocks for each type of event, with self-explanatory names like lectures.ini, sections.ini, exams.ini, and so on. Like all files that are inputs to createcal, they are located in subdirectory inputFiles.

    2. Date Information: schedule.ini

      Single event information blocks don't contain dates. Instead, dates are obtained from a course schedule file, schedule.ini. The start of that file for the example course is:
        # Week 1
        2011-03-28  lecture hw
        2011-03-30  lecture hw
        2011-03-31  section
        2011-04-01  lecture
        # Week 2
        2011-04-04  lecture hw hw
        2011-04-06  lecture
        2011-04-07  section
        2011-04-08  lecture hw
      This means there is a lecture and a homework event on 2011-03-28, the same on 2011-03-30, a section on 2011-03-31, etc. The instructional staff has added the homework tags, but the rest of the file was generated automatically as part of course web setup.

      Much of the calendar is created by stepping through the schedule file. Each tag that is encountered is associated with the next successive block in the tag-specific data file. The schedule file excerpt above consumes the first six blocks from lectures.ini, the first two blocks from sections.ini, and the first five blocks from hws.ini.

    3. Regular Meetings: Lectures, Sections, Labs, and config.ini

      An event time and location can be specified in the information block for an event. For example, the automatically generated entry in exams.ini describing the final exam for the sample course specifies its time:
        Date       2011-06-08
        Lectureid  A
        Summary    Final exam
        Time       14:30 16:20
      Some event types, like lectures and sections, occur at a regular time in a fixed location. Rather than repeating that information in every event information block, it can be listed once, in file config.ini. config.ini contains blocks. The block name indicates the type of event the information pertains to. For instance:
        Days       Monday Wednesday Friday
        Lectureid  A
        Location   JHN 111
        Summary    Lecture
        Time       11:30 12:20
      This means that lecture section A generally meets in JHN 111 from 11:30-12:20. Exceptions for individual events can be made by declaring new values for these properties in the event-specific information block (e.g., in lectures.ini). This would allow a single lecture to be in a distinct room from the rest, for instance.

      (Warning: the Days property is not used to generate event dates. The lecture event dates are determined by the entries in schedule.ini.)

    4. Multiple Regular Meetings: Lectures, Sections, Labs, and config.ini

      It is common for a course to have more than one section meeting. In addition, some courses have more than one lecture meeting. createcal is designed to optimize the case where these multiple meetings have the same content by generating an event instance for each lecture/section mentioned in config.ini each time a (single) corresponding tag is found in schedule.ini

      For instance, config.ini for the sample course contains this:

        Days       Thursday
        Location   EEB 054
        Sectionid  AA
        Summary    Section
        Time       12:30 13:20
        Days       Thursday
        Location   EEB 054
        Sectionid  AB
        Summary    Section
        Time       13:30 14:20
      This line in schedule.ini:
        2011-03-31  section
      generates two events, one for section AA and one for section AB. The event information is taken from a single information block in sections.ini, but the event times and locations differ.

      How to deal with multiple, identical meetings that take place on distinct days is addressed in the How Do I... document.

    5. Office Hours: [every]

      All office hour information must be entered by the instructional staff, since there is no information about them in university databases. To make that as simple as possible in the common case, there is an optimization: the [every] block.

      The office hours in the example course were specified by putting this in file ohs.ini:

        Days Monday
        Time 14:00 15:00
        Summary  OH (jz)
        Location CSE 534
        Days Wednesday
        Time 13:30 14:30
        Summary OH (owen)
        Days Thursday
        Except 2011-04-21
        Time 11:30 12:30
        Summary OH (ethan)
      If the event occurs at the same time and location on multiple days, you can give those days as a space separated list in a single [every] block. If the time or location varies depending on the day, use distinct [every] blocks.

      [every] is self-contained: there are no tags required in the schedule.ini file for the events. Similarly, no information blocks are consumed (from ohs.ini). [every] can be mixed with the mechanisms explained earlier, though: there can be oh tags in schedule.ini and corresponding information blocks in ohs.ini, for office hours beyond the regularly scheduled ones.

      Finally, note that there is an exception mechanism for [every]: the Except property shown in the example above prevents the Thursday office hour from being generated on 2011-04-21. If there is more than one exception, the days are given as a space separated vector:

        Except 2011-04-21 2011-04-28 2011-05-05

[comments to support at]