Tsugi has Converted from Silex to Lumen

The Tsugi project is mostly libraries (i.e. tsugi-php) but it also has a set of LMS like features like Lessons, Badges, Assignments, etc.  (i.e. koseu-php).  Historically the Koseu tools uses the Silex framework because it was lightweight and allowed the mixing of Silex routes with regular PHP patterns on a path-by-path basis.

But alas, Silex (https://silex.symfony.com/) was written by the same folks who wrote Symfony and tey decided that Silex users should just be converted to Symfony.  Which of course is exactly the opposite of why I chose Silex in the first place.

So Tsugi has been running back-leveled software since 2018.  And as things like PHP versions progressed some of our back leveled software ended up with warning messages that we had to work around.  One back-leveled component causes a ripple effect.

So now we have removed the obsolete software and are using the Lumen framework (https://lumen.laravel.com/) and can advance the versions of PHP and our other dependencies so our stack is more modern.

Time will tell if the Lumen framework or Laravel will help move Tsugi forward.  These frameworks tend to have a sweet spot of the “single monolithic application” instead of allowing a series of smaller cooperating “apps” like Tsugi has become.


BREAKING change to Tsugi master branch Monday Jan 18

We have been preparing changes to remove Silex and Twig from Tsugi for some time now and are ready to commit those changes back to master.  Tsugi has used Silex and Twig as a routing and rendering framework for its Koseu tools.  But Silex was abandoned back in 2018:


Tsugi has been holding back some of its dependencies to keep Silex running – but it is time to get back to the present.   We did an evaluation and the closest tool tool to Silex turns out not to be Symfony – but instead a framework called Lumen which comes from the Laravel project:


The *key* thing I liked about Silex was how you could mix Silex Controllers with regular PHP applications with nothing more than a .htaccess and route file.   You could use Silex for *part* of your application – which is nice.  Lumen works the same way.  It is ironic because Silex came out of the Symfony project.

This new set of dependencies has been tested in a branch for some time now.

We will move these changes into the master branch Monday January 18. I will make a tag so if something goes wrong we can back-level with a “git checkout”.

Preparing for the Upgrade

Preparing for the upgrade is pretty easy. Add one line to your config.php and wait.

require_once $dirroot.”/vendor/tsugi/lib/include/pre_config.php”;
$loader = require_once($dirroot.”/vendor/autoload.php”);

Make this change before Monday and your server should seamlessly upgrade.

If you do not make this change and upgrade after Monday – your site will break. To fix it, edit your config and add that one line …. :)

As a side note, if you followed some of my install patterns and include config-dist.php early and do not pull in the auto-loader in config.php file – you actually don’t have to change anything as the config-dist.php file already includes the pre_config.php changes.

Testing before Upgrade

If you want to test the new code before it lands in master (exactly the same as I am doing in four of my production servers) it is very easy to do.

If you find a problem with the new code – let us know immediately on the tsugi-dev list.

First update config.php as above. Then make sure your tsugi folder is on master and a clean checkout – no modified files – no extra files.

cd tsugi
git status # should be clean
get fetch —all
git checkout —force trunk

Test your code and site – please report if anything goes wrong. To go back to the current master:

git checkout —force master

It is easy to go back and forth as long as your git status is clean.

If somehow the files in the vendor folder seem to be fighting with you as you try to switch branches, take the following steps before or after switching your branch:

cd tsugi
rm -r composer.lock vendor
git checkout composer.lock vendor

You can actually do this any time if your vendor folder gets wonky. It might break for 2 seconds but your vendor folder is nice and fresh.

The trunk branch will be tagged and abandoned after the merge and eventually be removed – so after your testing or after Monday, make sure to go back to master.

Feel free to let me know on the tsugi-dev list if there are any questions.

P.S. The name pre_config.php is slight homage to the movie “Minority Report” :)

Tsugi release – 20.12.0 – new release numbering approach

Tsugi is intended as a continuously upgraded cloud deployment. Most of the Dr. Chuck servers have a cron job that does a git pull and runs upgrade.php *every 30 minutes*.  You can see this infrastructure at:


As a result, there are no traditional “feature releases” of Tsugi – the common use case is to be pretty close to the tip of the main branch. Features just come out.

But sometimes, folks want to “hold back” from upgrading for a while. Perhaps they have an old version of PHP and can’t run the latest. It is always risky to hold back too long. Releases are tags – not branches.

There is no intent to ever back-port anything in Tsugi to a prior release unless the adopting community wants to make a branch and maintain it. Dr. Chuck follows the “first rule of Italian driving” when it comes to cloud based software development.

But to help those running Tsugi that want to hold back, a series of versions / tags are maintained as “safe plateaus”. These tags are often snapped right before a significant upgrade or data model change and announced on the dev list.

These versions originally were the classic geek-style ‘0.x.0’ releases that pretended that we never reach 1.0 .

As of December 2020, we are switching to a year.month.patch approach to Tsugi versioning, adapting from the Linux model.

The releases will continue to be snapped at stable places, often right before significant new development is going to be merged.

I just snapped the 20.12.0 release – because it is December and I wanted a 2020 release.

Getting Apache2 mod_dir redirect to http instead of https behind load balancer like CloudFlare

So I use Cloudflare a lot to protect my servers, terminate SSL, and cache stuff at scale.  One of the problems I run into is when the mod_dir module in my Apache thinks it is running http (which it is since Cloudflare is terminating my https) and Apache issues 301 redirects to http instead of https when you access a folder without a trailing slash.

The solution on ubuntu is to edit:

vi /etc/apache2/sites-available/000-default.conf

And add a ServerName with an https:// like this:

ServerName https://www.py4e.com

And run apachectl restart

This is a problem when running Tsugi behind a loadbalancer.  If you are using the tsugi-build approach – make sure to set the $APACHE_SERVER_NAME variable so it is automatically dropped in.

What is the “Next Next LMS?”

There is a certain restlessness for any university using any LMS. Faculty and students generally love their LMS after they have used it for 3-4 years and are opposed the idea of switching to a new LMS, often the IT organization starts to get restless about that time and starts a “Next LMS” evaluation effort. Perhaps there is a new Chief Information Officer and they want to “make their mark”. Perhaps the IT organization has gotten tired of broken promises from their old commercial LMS vendor and are looking for a new vendor who will again tell them sweet little lies. Perhaps, it is just that the beginning of a new relationship is just “so exciting”. In many ways by changing LMS systems every 5-10 years IT gets a “do over”.

It seems as though as soon as any commercial LMS vendor reaches a threshold of market share, they slow down, begin to take their customers for granted, and prioritize “shareholder value” . There is always the ascendant “Shiny LMS” and the descending “Rusty LMS” and the inevitable transition from shiny to rusty to restart the process. There is an active consulting business to advise CIOs on the rusty to shiny transition. Here is a simple table of these commercial LMS’s over time:

Year Rusty        Shiny
1997 emacs        Blackboard
2001 Blackboard   WebCT
2006 WebCT        Angel
2008 Angel        MoodleRooms
2012 MoodleRooms  Canvas
2019 Canvas       Desire2Learn

By this analysis – everyone should just choose Desire2Learn as their “Next LMS”. At this point with Canvas and Blackboard owned by private equity and focused on paying off $1B+ loans through revenue and profits – both are in the “Rusty” category.

The shiny to rusty transition of Canvas was pretty quick. Two years ago, they announced that they had a lot of learner data and “AI was the future”, then they did a “hostile sale” to private equity to cash out, and then announced that “AI was not the future” – but the damage was done. I know of at least one school that had selected Canvas during this time and as Canvas rusted before our very eyes, they called their consultants back and asked them to hurry back and re-advise the school to go to Desire2Learn instead. Whew! Skipped one unnecessary commercial LMS switch!

It is kind of scary that Desire2Learn (with a 15% and growing marketshare) is the only major commercial LMS vendors with its founder(s) still involved and not owned by anonymous billionaires. I have liked working with and partnering with all of the commercial LMS systems over the past 15 years – when their founders were still part of the company. I loved working with Michael Chasen, Chris Vento, David Mills, Phil Miller, and Brian Whitmer. They are gone – their companies are gone or run by accountants. John Baker is the “last founder standing”. D2L is the last commercial LMS vendor with “values” that go beyond shareholder value. For the time being.

The problem is that the CIO sheep are going to run from rusty Canvas to shiny D2L like they have always done. When enough switch so D2L has a 40% market share, then D2L will begin to rust and as things start to nose down, someone will write a $2B check for D2L and at that point 85% of the higher education marketplace will be owned by soulless billionaires. They won’t make the mistake that Blackboard made and forced new “recruits” to switch software – they will slow innovation to a crawl and put skeleton maintenance crews on Blackboard, Canvas, and D2L and drain higher education dry for a decade to pay off their $6B of loans.

It is difficult to imagine a new Canvas-like startup in a garage somewhere in 2020 that has any chance of success. You get your version 0.1 wander into the marketplace fighting Blackboard, Canvas, and D2L. The open source lane is well covered by Sakai and Moodle. The K12 market is no longer available as Google Classroom and Microsoft Teams have won. Community colleges have little interest in anything other than using the same thing they have always used. And R1 schools in higher education – decided to “outsource it all” to the big-three commercial cloud-vendors.

This suggests that by around 2025, the commercial LMS market will start feel like the opening sequence to Joe Versus the Volcano.

It seems inevitable – :(

Abstract: Pedagogy and Privacy in a Pandemic

This presentation will look at how teaching and educational technology has and will continue to change during the Pandemic. When the pandemic hit, there was very little time to prepare for the move toward increasing use of technology. In many ways the world did not have the luxury of being concerned about impacts to pedagogy or privacy – we just dove in and started solving problems. As the pandemic continues it has brought a lot of focus on concerns for student privacy and ways to improve pedagogy. The speakers will discuss issues of pedagogy, privacy and technology in light of the pandemic.

Laura Gibbs is a long-time online instructor at the University of Oklahoma teaching Gen. Ed. Humanities courses. She is the author of Aesop’s Fables: A New Translation (Oxford World’s Classics) and the Tiny Tales book series; you can find out more at TinyTales.LauraGibbs.net.

Charles is a Clinical Professor and teaches in the School of Information at the University of Michigan. He is the Chair of the Sakai Project Management Committee (PMC). Previously he was the Executive Director of the Sakai Foundation and the Chief Architect of the Sakai Project and worked with the IMS Global Learning Consortium promoting and developing standards for teaching and learning technology. He teaches 21 popular MOOCs and three specializations to students worldwide on the Coursera, edX, and FutureLearn platforms and is a long-time advocate of open educational resources to empower teachers.

This abstract was for the 2020 Sakai Virtual Conference – Recorded Video

Email Answer: Can you help me with my learning or one of your free / open classes that I am taking?

I get a number of messages per week from students who take my courses online.  I have well over a half million online students so I don’t have time to individually respond to all the messages I get via Twitter, Email, or LinkedIn.

I do skim all the messages I get – but only reply to a few.

Before I talk about the messages that I don’t answer, let me talk about the messages that I *do* answer like the following:

  • I am using an auto-grader in your course and it is broken.  If you have a screen shot where my code has an error message – I want to know about it and want to fix it.  I will bug you and ask you to keep testing the problem until I verify it is fixed.
  • If you find a typo or mistake in one of my web sites or books – I would like to hear about it.  I like to fix little things so the quality of the materials is kept high.
  • If you want to translate some of my course material to a new language – that is really cool and I want to hear about that.
  • You are a teacher and want to adopt or have used my materials for a course you are teaching.  I love that and want to hear about it.

The following types of messages are read – but I rarely reply to them:

  • Can you write a recommendation for me?  I only write recommendations for students I work with outside of class.  I don’t even write recommendations for students who take my courses on-campus at University of Michigan.   I *understand* that recommendations are difficult to get.  I just feel really bad writing a recommendation that says “I had Tony in class, and because he did not cause any trouble I would not even recognize Tony if he came up to me.”   I love writing recommendations for students when there is real collaboration.
  • Could you design a plan of study for me? Could you give me career advice?   I have some videos about career advice in some of my courses but don’t have time to be an individual career counselor.
  • Can you be my mentor?  I only mentor about 2-4 students per year – and I work with students because their interests (i.e. educational technology, open source, and open content) align with my interests and I get help from the students on my work.
  • Any question about Coursera, edX, or FutureLearn payments, dates, sessions, etc.   I provide my material to these MOOC platforms and they run the courses.  I don’t have veto power over what the platforms do or when the courses run or what the due dates are for each assignment.
  • Could you sign a certificate of attendance so I can get reimbursement?  This is an issue with the MOOC providers – I do not check ID nor take attendance in these courses so I can not and certify anything.
  • Any message about an honor code violation where you “mistakenly” uploaded something that was not your own work and you got caught.  These messages usually weave some long intricate story and want “one more chance” – I ignore these messages.   Read the assignments, do your own work and don’t take short cuts.
  • Can we connect on LinkedIn?  I only connect on LinkedIn to people I know professionally.  I don’t connect to students at all until I have worked with them on a project.

As I said above – I do see virtually every message and skim them all.  Sometimes something in a message will jump out at me.  Skimming a message is pretty quick but writing a reply takes a lot of time that I just don’t have.

It does not make me happy to ignore these messages – I wish I had time to reply to them all.  If I replied to every message it would take more time than I have in a day and I would get nothing done :(

So I apologize in advance.






How to build a JSR-168 Portlet in Sakai

Using JSR-168 portlets is the only way to have a page (like Overview) with multiple tools on the page rendered without iframes.  The portal only removes iframes when a page has one tool.  If there are > 1 tools – it uses iframes.   But JSR-168 tools never use iframes no matter how many there are on the page.

It is pretty easy to convert a servlet-style tool to portlet-style – in particular if the tool uses either JSP or Velocity templates, t is pretty simple.

Here is an example of a tool that uses Velocity:



This was a direct conversion from an old iframe+servlet style tool used in earlier versions of Sakai:


If you want to use JSP as your templating language, the following is a sample JSR-168 portlet:



The portlet model sends GETs go to “view” methods and POSTs to “action” methods.  Our Velocity tools have the same concept of action and view – but they are hand-layered on top of a servlet using convention and classes like VelocityPortletPaneledAction so the pattern will be familiar for those who wander through old Sakai code.

Another interesting bit of Portlets is that they have view “modes” like “Help” and “Edit” that are part of the spec.  Velocity “portlets” have panels but they are not as formally defined.

For example if you see a JSR-168  portlet in Sakai (image)  (Home Information is a portlet) , there is a “Edit” button that comes from the *portal* in the portal title line.  That edit is not part of the portlet’s markup – the portlet simply declares one of its views as “the edit view” and Sakai puts up the button and wires it up.

For an old-school Velocity servlet pretending to be a portlet in an iframe (like Message of the in the image) the “edit mode” is just another panel in the tool and the tool puts out markup with a link to its “edit view” in “Options” below.

It is surprisingly easy to convert from the old to the new because the view/panel and action patterns already are pretty parallel – the velocity servlet that is a fake portlet was one of the inspirations for  JSR-168 so the similarity is not random.  Both were “cool” MVC approaches in 2001-2003.

I love the JSR-168 pattern for multiple independent rectangles on a page.  There is a clever pattern that allows all of the rectangles to handle the back button and refresh in a consistent manner for all three rectangles simultaneously.  I would love it if all the Sakai tools were rewritten as portlets – but with the magic iframe inlining since Sakai 11 – it is only really beneficial for synoptic tools.

Beyond an Accessible LMS – An Accessible LMS Community

TL;DR: Chris Knapp’s Post about two weeks of his experiences in the Sakai community

For over 15 years, the Sakai Learning Management System has been committed to building a product that not only meets the legal requirements of accessibility – but has the higher goal of making the Sakai user experience “excellent” for visually impaired learners.   We feel that an LMS must take that extra step because access to a good education is not a luxury – it is a fundamental human right.

Sakai greatly benefited from having Jutta Treviranus on our board during our early days.   Jutta helped us understand that accessibility for an LMS was not just a “checkbox”.  She not only inspired us to make Sakai a great product for visually impaired learners (i.e. all of us), she shared her research and innovation (i.e. https://idrc.ocadu.ca/ )  with us to give us the tools to achieve those goals.

Sakai is beginning an effort to take the next steps in becoming an accessible community.  Our goal is to make special efforts to being visually impaired contributors in as regular members of the community.  Our goal is for VI members to participate in all aspects of Sakai from development, to quality assurance and community leadership.  Of course one of their contributions will help us maintain the high standard for accessibility in the Sakai product – but our goals are broader than that.

My company (Learning Experiences) has retained Chris Knapp of Knapp Strategic to be embedded in the community and help us improve the accessibility of all of our processes and tools.   He will be integrated as part of the Sakai QA team (Chris is not a coder) and help us adapt all aspects of our human processes and/or tool chains to make them more accessible.

Once Chris works through how to be a visually impaired Sakai contributor, we will begin to recruit and Learning Experiences will pay other visually impaired people to be Sakai contributors.  We are just getting started with this but we have high hopes for the effort.

Chris wrote a blog post that summarizes his first few weeks of his involvement as a VI contributor in Sakai.

I will just say that it has been only a few weeks but has been great fun for me.  So far one of my favorite eye-opening moments was when Chris attended our weekly Marketing meeting.  We got to talking about an upcoming social media launch and we were talking about how images of the Sakaiger might be best used in the campaign.

Sitting in the Zoom meeting, I realized that Chris had absolutely no idea what the Sakaiger looked like.  And he had no idea even what the “rings of water” Sakai logo looked like.   So I sent him a stuffed Sakaiger and several knit caps with the Sakai “Jewel” logo on them.

A stuffed Sakaiger is an accessible three-dimensional version of a mascot image!  I never would have thought of that – except that once Chris was in a meeting with us – it was immediately obvious. Pretty cool.




Enabling a Just Education and Educational Technology Future

Enabling a Just Education and Educational Technology Future
PI: Dr. Charles R. Severance, University of Michigan School of Information
Unsolicited Funding Proposal – 2020-09

The Andrew W. Mellon Foundation support for the $2.4 million dollar Sakai Project to the University of Michigan and others in 2004, is probably the most impactful philanthropic investment in educational technology of all time.  The Sakai Project set out to solve the problems of software interoperability and data portability by developing an open source Learning Management system that would implement and demonstrate best practices to the educational technology industry.

In 2004 and 2005, by leveraging its Andrew W. Mellon Foundation support, Sakai quickly delivered on all three of its core goals.  We released four versions of Sakai (1.0, 1.5, 2.0, and 2.1). In late 2004, Sakai worked with IMS to form the IMS Tools Interoperability working group and in mid-2005, Sakai worked with IMS to form the IMS Common Cartridge Working Group.

Fifteen years later, these efforts have matured into an LMS market place committed to standards and interoperability.  When the latest version of IMS Learning Tools Interoperability (LTI Advantage) was released in 2019, five leading LMS vendors (Sakai, Moodle,  D2L,  Blackboard, and Canvas) announced support for the standard on the same day.

While the software interoperability efforts created by Sakai are a great success, there are larger concerns in the LMS and educational technology market that must be addressed to assure fair,  safe, and just access to education – particularly students in at-risk populations and for students outside the US/Europe:

  • At this point, 60% of the LMS marketplace is using proprietary cloud-only solutions owned by private-equity companies.  While these solutions are convenient for higher education, handing sensitive and private student activity data to these third parties who treat it as an asset is a concerning trend.
  • The lack of an open-source and standards-based learning object repository (LOR) continues to leave high quality material stuck in LMS systems.  When we reduce barriers to content reuse, we can broaden access to education regardless of geography or economic situation.
  • The lack of a MOOC platform that is interoperable, easy-to-use, and based on standards restricts MOOC-like approaches to the privileged, wealthy and proprietary.  None of the current MOOC platforms participate in educational technology standards activities.

The Sakai, Tsugi, and Apereo open source efforts will be able to achieve these goals with a reasonable level of investment.  Sakai is a mature LMS with some of the highest satisfaction ratings in the market, Tsugi is a simple, standards based learning object repository (LOR) and Massively Open Online Course (MOOC) hosting platform.  Tsugi has many technical aspects of LOR and LMS integration solved but so far has not had enough UI/UX investment to be used directly by a non-technical teacher.

Our open-source efforts are already working on these goals as fast as we can.  This proposal seeks funds to greatly accelerate efforts to (1) maximum protection of private student activity data, (2) standards and open source infrastructure to support reusable learning content, and (3) a MOOC platform that makes the creation and teaching of free and open educational experiences available to every teacher and student in the world.  It is a bold vision and we are well positioned to achieve these goals with sufficient resources.

Note: I wrote this as a response to an RFI with a goal of ensuring a Just Educational Future from an unnamed funding agency.  The RFI turned out to be aimed at an audience that did not include me so I  made it a blog post.  If any funding agency is interested in funding the work – let me know.  I am looking for about $5M over a three years period.