Author Archives: Charles Severance

Django For Everybody – Autograder Server Outage

We are just over a week into the Django for Everybody Specialization and we have a server outage. This server outage affects all of the autograders which run on a server outside Coursera – ( This is *not* a problem with the Coursera servers this is my server.  Coursera servers are doing just great.

The outage may last as long as Sunday 5PM Eastern United States Time.

When I saw the server down today Friday at 5PM, I figured that it was because the crush of students in DJ4E had overrun it with all of their enthusiastic load. And then I realized that it has plenty of performance to spare – but instead it was in a server room where the electric company is re-doing the power into the building this weekend. So it will be a while.

Once the server comes back up – I will move this server to our Amazon hosted systems. These systems are still University of Michigan operated and professionally maintained and care deeply about protecting your private data.

When I taught this material on campus, it was fine to run this course using our on-campus resources, but before we released this as a world-wide MOOC – I should have moved the server from UM on campus resources to UM Amazon resources. Once the server comes back up I can do that move in less than an hour and with no loss of data. I won’t do that right away – when it comes back up – I will just leave it alone for a bit and then migrate to a new server room after things settle down.

So I apologize personally for this outage and will make sure to keep such an outage from happening in the future and once this comes back up we can all get back to learning Django.

While you are waiting, you can binge-watch all of my office hours or my car racing playlist on YouTube:

Thanks for being part of the first week of Django for Everybody.

Sakai Racing Team – 24 Hours of Lemons – RustBelt GP 2020

This is a summary of the Sakai Racing Team at 24 Hours of Lemons – RustBelt GP 2020 race this past weekend (July 26-28).

It was a furious two weeks of preparation before the race that  led to an epic all-nighter Wednesday night before the race.  Neon 2 (2.0 DOHC) had been running smoothly for over a month after the engine replacement but that was not the car we wanted to run.   We tend to get in trouble because of its soft suspension so we want to run a Neon with coilovers and the 2.4L engine swap (Neon1 or Neon3).

Neon3 had the Independent Throttle Bodies which were 100% custom – so every little bit of the setup was custom – making and debugging a custom fuel rail took about a week and a half.  I spend the last two weeks painting body panels for Neon 3 so it at least looked like a Sakaiger.  We knew it would be close.

Since Neon3 was too close – Scott and Chris started working furiously on the stalling problem in Neon 1.   The car was running great except it would stall after 5-20 miles and not restart for 20-30 minutes – then start right up.  We had checked everything – we put a 100% rebuilt wiring harness into the car – and still intermittent stalling.  For the two weeks prior to the race we would test run it with a chase car and then try to guess what went wrong.

On the  last weekend before the race we zeroed in on the O2 sensor setup – we only had hooked one up and had put it into one of the header tubes.   So we installed two new bungs in the header collector, so we could put both the upstream and downstream sensors in.  Once that was done, Scott and Chris discovered that the new wiring harness had put an upstream connector on both the upstream and downstream wires.  Then since the sensor moved about 18 inches further toward the back of the car, the (very high temperature) wiring needed to be extended.  Also running with a missing O2 sensor had caused it to lean out and the sensors themselves were cooked – and we did not have time to get new ones.   So some adaptation was done – taking more time.   Wednesday evening it started working and about 10PM I heard a loud engine pull up to my house.   Scott had driven Neon1 20 miles to my house with Chris in the chase truck and it had no problems.  They went back and wrapped things up – I got my last email of the night from Scott at 4:38 AM:

The oxygen sensor and new injectors cleaned up the air fuel mixture problem almost entirely. The car runs much better with far more power, smoother acceleration, idles better and the air fuel stays in range. I drove it hard around the block and it never showed dashes. I am removing it from double secret probation. Not a totally clean bill of health but very close. Chris is going to work on a thermostatic fan switch in the future. For now no extended idling. So it was late when I dropped the T-trailer off at Jake’s. I forgot the tie down straps. We should drop them off in the morning.  I also need to pick up a tire from Jake that I dropped off for him to work on clearance. Neon 1 currently has one mismatched wheel. We need to load tools for tire changes and other stuff in the morning. We need to load tents and stuff you want as well. We need to load 4 gas cans for neon 3 so Jake can tune it on 93 octane. After he is done we could put on 100 or 110 octane from the track and see what Jake can tune it to if we wanted, Meh. I picked up the trailer at Doc’s and forgot to drop off some parts for him. We could/should drive by Docs and pick up your Grand Prix. Drop your Volt there and we will trade back when we return. I would like to drop some parts in the back of the truck off at Doc’s as well. I say get here fairly early. Load up go to Jake’s then Doc’s then head down 94 to Gingerman’s or Lane’s or whatever. Shoot for 11 to 12 am arrival at Gingerman. Maybe earlier.
I do not think Jake will have Neon 3 ready at noon or until I get there and discuss the fuel problem with Jake. He is missing the clip on the top of the fuel injector that clips to the fuel rail. I will have to machine a slot in the rail and grind two tabs off a bunch of clips I have hanging around and use these clips to hold the injectors to the fuel rail with a death grip. I just realized I never dealt with a rail that did not have these clips. There is 50 PSI above each of four injector totaling over 1 square inch of surface area. There could be upwards of eighty pounds of total force upward on the fuel rail and zip ties and plumbers tape will not cut it in that application.

So Wednesday morning we had a running Neon1 in the trailer and started our journey.  First we took a look at the fuel rail problem with Neon3 – by the time we got there, Jake had solved it with aircraft-grade stainless steel tie wire.   But Jake was waiting for some JB-weld to seal up some pin-holes in the radiator so it would take about an hour before Jake could start the car.  Also the fire suppression system was totally discharged so we needed a new one.

So Scott and I took off for Gingerman with Neon 1 in the trailer and me driving the Pontiac GXP in hopes that I could get to Lane Automotive and buy the fire supression kit and then Scott and I would meet at Gingerman for the track day.  Lane had one fire suppression kit so I bought it and made it to Gingerman around 2PM.

We pulled Neon 1 out and started running it in each of our 20 minute track slots.  It ran great.   Fast, sticky.  Scott was timing me and I set a new team lap record at 1:58 – of course having so few cars on the track helps lap times.

Mid-afternoon Jake texted and said that Neon 3 had started and run great – and they finally got to 178HP at the wheel – and the transmission ate its own lunch – so Neon 3 was off the table and Neon 1 was our only hope.   But all day Thursday Neon 1 ran excellent so we thought our stalling problems were behind us.

I developed a driving technique where I decided to see how well I could run without leaving fourth gear.   You lost a touch of pop coming out of turns – but I just started accelerating earlier and I set my own personal best lap time driving with only one shift into fifth on the back straight – the rest of the lap I would just use 4th as if it were an automatic.   The nice thing is that when I was using 3-4-5 the water temp got up to 220 and if I did the 4-5 only the temp stayed around 200.   Since overheating was the cause of all of Neon 1’s catastrophic failures – I made a team decision that we would “use the fourth” as a driving approach to save the car so we could finish a complete race.

Friday morning was a Lemons track day and Greg and Mark each got stints in Neon 1 that went flawlessly.  So we retired early (no bars because Covid) and got a decent night’s sleep for Saturday morning start.

Saturday morning we let Greg start the first run.  He ran great – car ran great – several sub-2:00 laps – this time with traffic on the course.   After about 90 minutes Greg came in because he felt that a tire was letting go – which it was so he came in and we put on new tires.  When we put Mark in to go back out, the starter was dead – sheesh.  We had to teach him how to pop the clutch to start the car and sent him out.  After about 30 minutes, Mark called in on the radio – he was dead on the side of the road and needed a tow.  The stalling gremlins were back.

By the time Mark was towed in the car again started perfectly.  We decided that we might just give it another try – the O2 sensors were looking really good and it ran great.   So I suited up and went back out.  After 1.5 laps I was on the side of the track stalled again.  I was on the inside of turn 10 well off the track and it was a great place to watch the action in a fire suit + cool suit + roll cage.  All the cars were accelerating on the backstretch so I saw a lot of good racing.

When I finally got towed in, we called Scott (who was already driving back to Jackson to get more tires) to bring Neon 2 back to the track.   He decided the quickest way was to drive Neon 2 back to the track – he did not have a GPS so he got lost and got back around 3PM.  Interestingly Neon 2 had a nice set of tires so we got another set of tires as well.

When Neon 2 arrived, we put Matt in the car.  He went out and started doing laps.  After about an hour he got in a wreck caused by another super aggressive driver.  He had to come off for an inspection but things looked good – so we sent him back out to finish the race for the day.

About 15 minutes before the end of the race, Matt called in – something let go and oiled the track in turn 1 and about five cars spun off the track.   It was such a mess that they stopped the race 15 minutes early.  We assumed that it was a another thrown rod.  But after he came in and things cooled off – we realized the transmission blew up.  The engine started and ran perfectly.

That was weird – two (quite reliable) Neon manual transmission failures within 24 hours.

At the end of the first day we were shell-shocked.  The day had started so optimistic and just like last October by the end of day 1 – we had one car with stalling problems and one car that had a hole in a part “where the rain came in”.  We just sat around and had a beer – it looked like we were packing up at the end day 1 and going home for the second time in two races.

Scott brought a starter from home – we installed it in Neon 1 and no start – so we took the starter out of Neon 2 and it did not fit.  Then we tested the starter we took out of Neon 1 and it was fine but when we tested the wires the voltage seemed wrong – so we started back tracking – checked all the fuses – and replaced a starter relay from Neon 1 and then just fiddled with how the wiring was hooked up and then it started.   We fiddled so much that we have no idea what actually fixed it.

Then we started to think more about the stalling problem and came up with three hypothesis:

– I pulled the codes and saw a (P1493) battery hot code – it said that the ECM detects hot battery and slows charging.  Interestingly we did not have a battery sensor because the batter was in the back.  But it threw a code anyways.  Which was weird.

– I was sending OBD data to a live web site and Greg wondered if the OBD reader (Carista) was overheating and confusing things

– Greg also had a problem in another vehicle he owned where he had a marginal battery with an internal structural problem that would bounce and  momentarily short inside the battery killing the engine

– Scott had brought back the original Syked ECU – so we swapped ECUs as well

So we decided that we would remove the Carista, find an temp sensor, plug it in and zip tie it somewhere there was cool air and swap batteries with Neon 2.

We drove home Saturday night, with Neon 2 in the trailer, and dropped it off at the transmission shop at midnight, then got to Scott’s about 12:30 and I went home.  While I was driving Scott figured out that the temperature sensor was not likely to be in stock anywhere – but it might be at the O’Reilly store in South Haven.  But he also woke Chris up at 1AM to look at the Mitchell’s and figure out how to make a fake sensor from a resistor which he decided that a 10K was the right choice.  You can’t buy resistors in a store any more (sad to see Radio Shack go) – but Chris had one in stock.

So bright Sunday morning at 7AM – Scott went and got a resistor and drove two hours to the track.  I drove to the O’Reilly’s and found they did not have the temperature sensor.

We go to the track, installed the temperature sensor override resistor and removed the Carista.  We also quickly installed the cool suit pump / reservoir since it was going to be a really hot day.

We sent Matt out and he drove for the morning session from 9:30 – 11:00. And the car ran great – but about 10 minutes before the end of the session – the exhaust got really loud and Matt came in.  We had lost all the bolts from the header to the the exhaust pipe. I borrowed some grade 8 bolts from a neighbor and we had the car back together about 11:30.

Still during the 11-12 break, Scott and Matt changed the camber because we kept wearing the insides of the tires.  Why we did not do this earlier I will never know.

When the race restarted at noon, I went out – I loved the new camber and was doing solid laps and having a great time.  I drove for about 90 minutes and then came in for a driver change to Mark.   Mark drove for about an hour and we came in for a driver change and let Scott drive about an hour and take the checkered flag.

Normally during the last driver shift we start to pack up all the stuff – but we were just so worn down from all the changes / failures of the past three days, we just relaxed and counted down the last few laps.

It was a heck of a weekend – I was so bummed at the end of Saturday – I wondered if we should just give up racing all together.  But at that same moment – we might have brought all our minds together and solved the “ghosts in the wires” of Neon 1.   So Saturday was the worst of times and Sunday was much better times.

We need to replace the transmission in Neon 2.   I think I will put coil overs in Neon2.  Neon 2 needs body work – which I will get done.  We will take Neon 1 to every track day we can and drive the crap out of it – to see if we can get it to stall again.

My hope is to have Neon 1 and Neon 2 race ready.  I am starting to think that Neon 3 will never see a Lemons race – because it is too “one-of-a-kind” and I won’t be willing to have it wrecked.   So it might just be my track-day show-off toy.


Email Answer: Can I translate Python for Everybody?

I really enjoy getting my cup of coffee in the morning and composing a letter to someone who has inquired about translating my Python textbook.   Here is how it goes.

Nice to meet you,

I agree with you that it is important to translate introductory materials to a students own language and want to support translation efforts in every way I can.

I have written a document that captures most of the details of translation the book and course materials:

The simple answer to your licensing question is ‘yes’  – everything in my github repository except the book is CC-BY.  Electronic copies of the book are CC-BY-SA because of the prior copyrights of the materials I used to build the book.  Print copies of the book are CC-BY-NC – which means the only thing that you need permission from me is to sell print copies of the resulting book which I will give once I see that the translation is complete and of high quality.

Simply charging credit for the courses does *not* trigger the NC clause.   You are welcome to use my materials and charge for the course.  You could even print the book and sell it at cost of printing (no profit) if you like.

So that should give you the permission that you need.  But how these translations usually work out is that they become a collaborative effort with me providing some technical assistance for things like automatic generation of the book files, help getting the book on Amazon, help making a new translated cover for the book,  help getting the book on Amazon, and even hosting a web site like if the translation goes beyond just the book.

So you have my permission – but in addition you have my offer of help, support and promotion of your work.

I look forward to seeing your translation of our book.

Charles Severance

Open Apereo 2020 is fully online – With financial aid so anyone in the world can participate

The challenges facing Higher Education have never been greater. As institutions pivot to online delivery and adapt to face those challenges, cost control and adaptability are key factors. That’s where open source software can help. Open source adoption means an investment in retaining capacity in your institution.
Open Apereo 2020 Online (June 15th-19th)  is the premier event for learning about open source software in the service of education. The Apereo Foundation is home to a range of software created by education to be tailored to the needs of education, including:

  • Next generation environments to support collaboration and learning
  • Portfolio solutions
  • A flexible platform for video capture, management and distribution
  • Calendaring, scheduling and timetable management
  • Learning content creation, storage and retrieval – for interactive and accessible content
  • Portal and notifications ecosystem
  • Single sign-on
  • Learning analytics based retention solutions
We’ve cut the cost of attending Open Apereo 2020 Online! Thanks to our generous sponsors at Entornos de Formación Global , Learning Experiences and Longsight we have cut registration fees for Open Apereo 2020 to range from $19 to $79. Financial assistance is available for those who need it on a “first come” basis. See for more details.
Open Apereo 2020 Online is a flexible, modular event that takes place from 15th to 19th June. Modules include

  • An overview of sixteen open source software solutions in the Apereo software family. Get a high-level view of functionality and real-world use!
  • Community presentations exploring the use of open source software in Higher Education around the world. Have a problem to solve? Need a way of controlling costs and extending online services? This is for you!
  • Designing for Resilience Workshop, an open-source focused edition of Michael Feldstein’s Resilience Network  conversations that are happening at virtual gatherings across the educational tech field.  Michael will be in conversation with Aria Chernik from the Open Source Pedagogy Research + Innovation network (OSPRI), a Red Hat supported initiative housed at Duke University, about how institutions can process the lessons learned from the pivot to emergency remote instruction this spring. Participants will join a rapid-iteration networking round of discussions, then generate a final set of lessons learned/best practices for the Resilience Network resource collection.
  • Hax-Camp Workshop, providing a space for collaboration, discussion, and sharing of best practices for those exploring web components. Web components are a W3C standard way of allowing developers to create and attach their own, custom HTML element definitions. Their ability to stack like reusable lego pieces, is the realization of the promise of a modular, reusable, and sustainable web. Working across libraries, they “hack” traditional ways of doing silo’ed front-end application development. And thus, we will all be HAX’ing how we used to work, building new reusable pieces that work across our applications!
  • AnnotatED Workshop: Social Annotation in Teaching and Learning with Hypothesis. Workshop attendees will join facilitators from educational institutions who are already using Hypothesis to support student engagement by transforming the fundamental scholarly practice of reading from an invisible, solitary act into a social activity located directly on texts
Open Apereo 2020 Online is arranged so that key sessions take place in the US Eastern timezone mornings – thus allowing easier access for those in Europe and Africa.
Alan Regan, Chair Open Apereo 2020 Planning Committee
Martin Ramsay, Vice-Chair Open Apereo 2020 Planning Committee
Jenn Cummings, Concentra Conference Planning
Ian Dolphin, Apereo Foundation Executive Director

Sakai 20 Released!

This is a note from Wilma Hodges – the Sakai PMC member and Community Coordinator announcing Sakai 20 general availability.

Dear Community,

Congratulations to our amazing worldwide community!

I’m pleased to announce that Sakai 20.0 is now available!

A HUGE THANK YOU goes out to everyone involved with developing, testing, and documenting the latest release. Even during a pandemic, our world-wide community has kept the momentum going and produced another Sakai release packed with exciting new features and enhancements. That is a tremendous accomplishment during these unprecedented times!

Our community wiki has both functional [1] and technical [2] release notes.

Download instructions are also available of course [3] .

New in Sakai 20

  • In Assignments: New Sakai Grader UI with document preview in the browser for student file submissions, as well as a progress bar for student submissions

  • OneDrive and Google Drive integration in the Sakai file picker

  • In Site Info: the Date Manager allows instructors to update all due dates in a single page, and Auto-Groups enhancements simplify the process of creating groups in a site

  • Several Gradebook enhancements, including: equally weighted items within a weighted category, full screen mode, resizable columns, a new Section column, and the ability to Message Students directly from the Gradebook

  • User Activity tab in Statistics provides detailed user data for instructors, and students also get a view of their own activity

  • In Tests & Quizzes: ability to restore deleted assessments, flag individual questions as extra credit, and schedule assessment feedback display start/end dates

  • New CK Editor templates available throughout Sakai in the rich text editor

  • Student name pronunciation feature in Profile

  • “To the top” button to jump back up to the top of the page

  • Updated UI in Podcast tool

  • And more! [4]

[1] Functional release notes –

[2] Technical Release notes –

[3] Download instructions –

[4] Complete Feature Summary –

Wilma Hodges, Ed.D.

Sakai PMC – Community Coordinator

Building a Home Academic Studio

Now that we all will be teaching and meeting from home for a while, I figure I should share my approach for building a home studio.  I have pictures of my studio at the end.

This list is kind of in priority order – the biggest wins are near the top and the more difficult and less necessary items are further down.

10-Inch Pro Studio VILTROX 2000LM Bi-Color LED Lights ($129)  – It is important to set up the lights asymmetrically and adjust the light level to model your face so it looks 3-dimensional – look at this – if you only have two lights – just do key and fill. Have your fill light less bright than your key light to the point that you can see a very soft shadow of your nose.

If you have a window, it is probably best in front of you or to one side – I would make my key light the same side as your window if it is to one side. Put the shades / blinds down – eliminate as much of the window light as you can – you want your night recordings to look like your during the day recordings and you don’t want your recordings to look weird as clouds cover and uncover the sun.

If you want to scribble on your screen recordings Wacom Cintiq: ($694.93) i – I have used a lot of scribbling software – sadly the best software (OmniDazzle) is no longer available so I just PowerPoint’s pen and don’t change colors. It is easy to code the Wacom’s buttons to turn the pen on and off, clear the screen and page up / down.

Also replace all the lights in the room you will be originating from with daylight balanced LED bulbs available from Lowes/Home Depot, etc.  – Often the room lights will be behind you and give you back light.  If you can put a dimmer on your lights that is nice.  If you have three adjustable LED lights at night you can turn your room lights and end up with a really sharp look and let the darker background be a little darker.

The Mac built camera is a lot happier with daylight balanced lighting and a nice key/fill setup. If you use a built in camera, either put your laptop up so the camera is close to the level of your face or if you have a desk that goes up and down – adjust the desk or in a pinch and for a short period of time – move your chair down. I use my adjustable desk more to get my camera at the right level than I use it to stand up :)

The Logitech 920 is a little better than the built-in Mac camera and you can put it on a tripod to be at eye level.  I would avoid using the LogiTech microphone. It is too far from your mouth and since it points at the wall behind you so you will get echos.

Microphone – Audio-Technica ATR-3350IS Lavalier – A clip on mic is important to reduce echo in a non-soundproofed room and limit background noise – in a non-sound proof room, how close the mic it to our mouth is more important than a fancy microphone – I buy two because there are so cheap. Also the built-in mac mic is surprisingly good and interestingly it points upwards which is an advantage when it comes to hearing sounds bouncing off walls. The built-in mac mic will generally be better than the Logitech mic.

Sabrent USB External Stereo Sound Adapter – I can never get audio-in work on any of my computers so I use USB – this unit is rock solid.

These are more for the advanced setups:

If you are doing audio only and you want sound like butta, my favorite setup is a Shure PG58 microphone, adjustable microphone stand, and XLR-to-USB adapter.  Like Butta.

You can splurge and get your own Teleprompter ($700) – I like the UltraLight 12 iPad Pro Teleprompter with the HDMI reversing monitor from Prompter People.

If you have an HD Camcorder that has an HDMI out you can use it instead of the Logitech and digitize the video with this USB 3.0 HD Video Capture Dongle Model make sure your camera can turn off its data overlay to its HDMI out. I use a Sony CX560 – which is only available used but I like it and know how it works.

Here are some pictures of my setup.



Chrome 80’s change to cookie policy will break lots of LTI tools – but not Tsugi tools

This is the latest news from IMS about the changes to Chrome that will likely cause a lot of LTI providers to break.

The good news is that Tsugi tools do not use cookies *at all* to maintain their session.  This design choice makes it more difficult to develop Tsugi apps but has several advantages:
  • Tsugi apps can function within multiple iframes simultaneously on the same page
  • Tsugi apps can be logged on different accounts across multiple tabs
  • Tsugi apps should be unaffected as Chrome and the rest of the browser market tightens down the use of cookies
This works for both PHP and Python / Python Tsugi tools.
It was not easy – I when PHP 7.0 came out – they broke the feature so I filed and got fixed some arcane PHP bugs. In the Django world there was a cookiless session module that was 1.x only so I helped get that upgraded and am contributing improvements to the product so that the cookieless code in Django is actually superior to the PHP code for cookiless sessions.
The mistake that 99% of the LTI developers make is that they assume LTI a Single-Sign-On – which is absolutely not true – leading to some really poorly designed cookie-based LTI integrations  that Chrome is about to punish.
This is why using a framework for LTI applications is so important.

Abstract: Tsugi Update: Progress towards the NGDLE (Abstract)

This session will review the progress to date in the Tsugi and Koseu projects as well as lay out plans going forward. Tsugi was the first scalable production tool to be certified as LTI Advantage. Tsugi was used as a LTI Advantage test harness by all of the major LMS vendors. With LTI Advantage support complete, the Tsugi PHP code base has become quite stable. Significant effort has been put into structuring Tsugi to run at scale in a multi-tenant environment. Tsugi also has made significant advances in improving how student data is handled over time and serves in many ways as a best practice the other LTI tools should emulate. The ability to write Tsugi tools in Python and Django has advanced to the point where production tools in Django have been deployed and run in production. There will be much to talk about for the roadmap for Tsugi and Koseu for the next few years.

Abstract – Submitted to Open Apereo 2020

New Approaches to Protecting the Privacy of Student Learning Data in the Cloud (Abstract)

Moving core IT Services to the cloud has been a trend for the past decade. Moving a Learning Management Systems from self-hosting to the cloud has many benefits. Hardware acquisition and replacement lifecycle is simpler. Local technical staff can be replaced by vended solutions, moving responsibility for software reliability and upgrades away from campus IT, greatly reducing the burden on the CIO and IT organization. Most schools see this move as a pure positive, but we do need to look closely at the long term privacy, curation, ownership, and retention of student data. Universities are around for hundreds of years, in the educational technology field, many vendors come and go in less than a decade. Sometimes a vendor that originally was retained to provide a service announces that their business will begin to mine student data for their benefit. Regulations like FERPA and GDPR provide a legal framework to govern how data must not be released to third parties but does not cover what those vendors do with the data within their organizations. This presentation will explore a few current issues and concerns about a “pure outsource” approach to hosting and software that holds student data and propose an alternative approach where cloud compute resources are uses, and vended software solutions are possible but the University retains all present and future ownership of the data. In this new model we can separate the source of the software support and upgrades from the ownership of the data and keep all short-term and long-term data decisions under control of the University and not the vendor.

How will the presentation engender interactivity: The presentation will be done in as few slides as possible. We will present the issues, encourage discussion about the issues and then present possible solutions for discussion. By keeping the slide ware to the absolute minimum, discussion will be maximized.

Why should an attendee come to the the session:  I would say that protecting student privacy is a benefit to all students, but in particular, universities should be particularly interested in protecting the student data of at-risk populations such as refugees or other populations that governments might want to track. As an example, it feels quite wrong that a Syrian refugee going to school in Europe is forced to hand all of their private learning data (not just PII) to a US-owned corporation as a condition of attending school.

Any further comments to reviewers: I am guessing that very few in higher education have really thought through the consequences 10 or 20 years from now of letting vendors retain all of our student’s learning data. I think it is a conversation that should start to happen.

Abstract – Submitted to Educause ELI 2020


LTI 2.0 Removed from Sakai-20 master and nightly

LTI 2.0 has been removed from Sakai in anticipation of Sakai-20 (

It is up in master on github and the Sakai-20 nightly server.

It took most of one day (Last Thursday at LAMP Camp) and the rest was testing and making sure.

I removed over 20% of the LTI code in Sakai (>7000 lines removed).

I updated all the QA test plans and wrote some test plans, and wrote some “how to documentation”.

With help from Andrea I went through all the QA tests to make sure they were up-to-date and to my surprise everything worked in my testing. I did find and fix two small bugs that had crept into the remaining LTI 1.x code – so that was nice. These fixes are already in master this morning as well.

While it has worked great in my testing, I want everyone to be vigilant and test LTI in Sakai as much as you can. We will definitely do a solid QA of LTI as part of Sakai-20 but if something feels weird let me know.

For the Tsugi folks using Java tsugi-util library from the Tsugi distribution, I will wait a few weeks and then port these changes to tsugi-util master:

It is mostly deletions. The only real change is that the ContentItem class in tsugi-util went from the org.sakaiproject.lti2 package to the org.sakaiproject.basicltii package. It never belonged in the lti2 package – but I built it while I was building lti2 so I put it there.


It is kind of bittersweet in that it took me three years of almost 100% of my Sakai effort to develop the LTI 2.0 spec and build the Sakai implementation and less than six hours to remove it. But it is always good to remove complex and unused code from production software.

One of these mornings with a good cup of coffee and a little time, I will write a blog post about the lessons we can learn from the failure of the LTI 2.0 spec – but for now we are moving on to focus on LTI Advantage – as it should be.