Tsugi in Github

Tsugi has two organizations and a number of repositories. This page serves as an index into those repositories. The tsugiproject organization hosts the varius implementations of Tsugi and the The tsugitools organization hosts ready-to-install Tsugi tools that can be installed using the Tsugi Administration, Developer, and Management Console.

General Tsugi Repositories

  • Tsugi Tools
    When you install Tsugi, it can auto-install tools from this repository into your instance of Tsugi using github from the Administrator interface.

  • Tsugi Static Content
    The static content (JavaScript, Images, CSS, etc.) for Tsugi is shared across the various versions so it is kept in a separate repository. It is also hosted using CloudFlare for high performance cached access worldwide to reduce load on Tsugi application servers. The URL for the static content is:

    https://static.tsugi.org/

    As part of configuring a Tsugi instance, you can control what URL is used to load static content. The default is to pull this content from Cloudflare. If you want ot operate truly offline with no developer connection, you can checkout and change config.php point to a local copy of the static content.

  • The source for the tsugi.org web site
    This is the course code for www.tsugi.org. This web site is also a Tsugi application using Tsugi as an embedded LMS to host and track Tsugi tutorials and badges.

Tsugi in PHP

  • Tsugi Administration, Developer, and Management Console
    This is the starting point for any Tsugi effort. It sets up the databases, manages keys, installs and hosts tools, functions as a test platform, developer test harness and lets you manage your Tsugi installation.

    The Administration console also contains support for an IMS LTI versions a Common Cartridge Export and IMS ContentItem / Deep Linking App Store for all tools.

  • Tsugi PHP Library
    This contains the library code for the Tsugi PHP library. This is used in all of the PHP applications. This library is released on Packagist and can be added to your composer.json as follows:
    "require": {
        "tsugi/lib": ">=0.5.1"
    }
    

  • Koseu LMS/MOOC Platform
    The code to support adding a Tsugi-powered LMS to a web site will be re-factored into into own project named "Koseu (코스)". This will include the lessons, badges, discussion, topics, and gradebook functionality.

  • Tsugi Module (Sample)
    Copy this if you want to start a fresh Tsugi Module from scratch. If you are building a new tool from scratch, you should build it as a "Tsugi Module" following all of the Tsugi style guidance, using the Tsugi browser environment, and making full use of the Tsugi framework. This repository contains a basic "Tsugi Module" you can use as a starting point.

  • Tsugi-Enabled Application (sample)
    You can also use Tsugi as a library and add it to a few places in an existing application. This repository contains sample code showing how to use Tsugi as a library in an existing application.

  • Tsugi Sample Code Snippets
    These are relatively short bits of code that you can look at for example code as you write your own Tsugi Module.

  • Tsugi Developer Exercises
    This is a set of exercises of increasing difficulty suitable for a class or workshop. Working solutions are provided online. Source code for working solutions is only available to inctructors that contact Dr. Chuck.

  • Tsugi Functionality Test
    While there is not yet a Python version of Tsugi, there is a functionality test that exercises the various Tsugi implementations with LTI launches and does validation that they each work with the Tsugi data model properly.

Tsugi In The Cloud

We have a number of repositories that include varius resources for Tsugi into the cloud on Amazon Web services. These scripts are used to construct the various production services at www.tsugicloud.org or www.learnxp.com (a Tsugi commercial partner).

At this point scalable instances are best run on AWS since there are so many supporting services that keep socts low while allowing high scalability. Docker/Kubernetes on Azure or Google Cloud is just so much less mature so production deployments simply take more resources and DevOps talent.

Tsugi In Other Languages

Tsugi is best supported in the PHP languages but these languages are emerging and will evolve as there is interest.

  • Tsugi Java
    This is a reasonably complete implementation of the Tsugi run-time in Java. It shares low level IMS libraries with Sakai and is ready for production use.

Former language efforts in Tsugi beyond PHP and Java are now deprecated.

Deprecated Work

This is initial work that was produced in hopes that a community would emerge around it but when there was insufficient interest, the honest thing to do is deprecate it.

  • Kuberbetes/Docker recipes A great deal of effort was made to host Tsugi at scale using Kubernetes on Google Cloud. The recipes are solid as far as they go but Google Cloud is just too immature to be the suggested technique for hosting Tsugi at scale. Amazon has serverless Aurora, Elastic File System, and Elasticache - they are both very cost effective and simple to deploy and use. At some point if the Google Cloud (or Azure) ends up with a better suite of support services, this effort can be restarted. Alternatvely if there is a region where Kubernetes is the *only* solution available - this can be evolved into production ready capabilities with some additional effort.

  • DynamoDB was initially used for sessions storage / failover but ultimately it was slow and expensive compared to Memcached.

  • Tsugi NodeJS
    - This was pre-emergent code but is deprecated until there is more interest.

  • We developed an early Python 3 Python 3 Tsugi implementation and an example of using this library in Web2Py but this is now deprecated.

  • Tsugi Laravel
    This is the beginnings of a library to make the Tsugi PHP library usable in Laravel applications.

As of late 2018, we are designing and will build a next-generation tool hosting framework based on Tsugi exporting its functionality via web services. This will allow a far greater diversity in tool impementation environment choices and better meet the privacy requirements of the GDPR.