tweaked.info

tweaked.info is a Course Definition Format and ecosystem of tools.

History of the Project

tweaked.info started life as the data format for an experimental cloud-based LMS called Impressory, that was shortlisted in The Australian Innovation Challenge a few years ago. Impressory bridges in-class and out-of-class interaction, and took advantage of there being a great wealth of social sites to draw in content from. In-class, it lets students chat up onto the main lecture screen, answering each others' questions as a side-channel to the lecture content. Out-of-class, it resembles a social news stream, with the same side chat-channel so the conversation could continue.

The same format was then used for a system for smart and social assessment, Assessory. This started out supporting critique processes for studio courses, so that students can present and respond to each others' work while the work is still in progress.

However, as the same format had proved useful for two quite different ed-tech systems, it became apparent that it'd be useful to extract the course definition format. That way, courses could be placed under version control and tracked and developed in a more coherent manner, rather than the current situation in most universities (where course definitions are fragmented across the unit catalogue, internal committee documents and approval systems, the LMS, and probably several assessment systems).

It also drew somewhat from noticing that when edX was first built (in a hurry), they used an XML definition language, and when it was re-engineered, some of the original teams didn't want to move away from it. OpenEdX does now have an (XML) definition language, but apart from XML being a little unwieldy these days, it's also too closely tied to a single LMS.

Some additional possibilities were presented at StartupWeekend Edu in Sydney in 2014, but for the moment we'll start with course modelling, course self-publishing, and simple tools for course-planning.

Modelling

This is a bit on how the models were developed. As the code is ported across into repositories under "tweakedinfo", it'll change to show the projects...

Scala case classes

The fundamental domain items (courses, content items, pre-requisite structures, etc) were first modelled as Scala case classes. This isn't intended to be the end-user format, but gives a concise, clear, and type-checkable central definition that also translates easily into other formats and can be used across the JVM (via Scala) and JavaScript (via Scala.js)

This also allows automated tests to be written, for example to ensure that course plans are possible given the pre-requsite structures and offerings of the subjects within them.

BSON and JSON formats

These evolved naturally -- BSON as the storage format in MongoDB, and JSON as the wire format for messaging between the server and client in Impressory and Assessory. This means we already have a number of serialisers and deserialisers for for both JavaScript and JVM languages for the case classes in question.

The intended definition format is HJSON, as it is a little more friendly than strict JSON, allows comments and other aspects that would be useful to allow users to keep in the definition files, and has serialisation libraries for most platforms. This lets us write a system where as well as interacting via the tooling, it is perfectly viable and supported to edit the definition files directly using any text editor (even for non-programmers such as learning designers or administrators involved in the course planning process).

It is also possible to construct courses directly from code (eg, in Groovy or Scala), which gives a very compact and useful format (often one I use for personal purposes). That's not intended to be the eventual storage format, however, as even though the format can be made friendly and readable, it would still allow inclusion of arbitrary code in course definition files, which could create security headaches down the track.

Pre-requisite DSL

Pre-requisites have previously been constructed as structures from the code format. Though that's quite compact and readable when writing a course in code (eg, FOO100 and FOO101 and cp(12)), it becomes more awkward to write in HJSON which does not natively support DSLs. Accordingly, there are going to be two ways to do this:

  • As structures, laid down in HJSON
  • As an expression parsed from a string

Additionally, in modern universities there are two kinds of pre-requisites

  • Those which assume you have been studying at the same institution (eg, credit point requirements and requirements on particular units), and
  • those which only assume prior knowledge (eg, pre-requisites for first year units where your previous study is likely to have been at school, another university, or in employment)

While at StartupWeekend Edu, we talked about pre-requisites as a bipartate graph between topics and courses that require or supply them, tweaked.info is going to support both.

Tooling

Though the format has been around for a while (Impressory is more than five years old now), I've built prototypes of a number of tools using the course format, including:

  • Course preview sites
  • Course accreditation mappings (AQF and ACS CBOK)
  • Automated testing of recommended course plans against pre-requisites and offerings
  • Interactive course planners for students

Repositories

As we port the code across and develop it, there are a number of GitHub repositories, under the tweakedinfo organisation:

  • tweaked-core-scala
    A place for porting the scala case classes representing courses, content items, etc. Submodules also provide serialisation libraries for JVM and JS ecosystems.

  • old-courseexplorer-2017 Rendering models into a web front end using Veautiful and Scala.js to produce mapping explorer for ACS accreditation data

  • old-acadvisor-2016 Small experiment producing course previews and an automated student course plan tool using React.js