Archive for the ‘Uncategorized’ Category.

How I build Open Textbooks

I am often asked how I build textbooks. I am a little weird in that I am radically open and refuse to use a commercial service or any non-open software. I prefer a line-oriented format in github,using open software and a process that I run myself.

The best example of how I write open books is here:

I write my books in Pandoc Markdown

I do pay for and use OmniGraffle for figures (InkScape is free – but super hard to use):

I export the figures export them to SVG and EPS:

Then I use pandoc (which uses LaTeX) to produce PDF and epub

Then I upload the PDF to CreateSpace and the epub to Amazon and it is auto-converted to mobi:

This is perhaps a more complex process that using Word, pressbooks or gitbook but I prefer a pipeline that I completely own and control and can adjust. Other methods are easier – I prefer control ownership and introspection over ease of use.

The worst not-spam DNS Verification Email Ever – DreamHost /

I am putting this post up as a public service since most of the results on the web are wrong for this topic.

Lately I have been moving a few domains to DreamHost because they have a super simple and 100% free way to use LetsEncrypt certificates on my domains.

This is my first experience with DreamHost and I am super impressed with the simplicity of their management UI, the competence of their tech support, and their free LetsEncrypt Certificates. I can have SSL even on domains that are only a HTTP redirect (I have a lot of those).

Transferring Domains

When you transfer a domain, there are lots of emails that go back and forth. Most of those make perfect sense sense. But there is one mail you get *after* the transfer is complete that completely looks like spam but turns out to be essential.

The mail is from (not what the DreamHost documentation claims) and has a subject line of:


And the text looks something like this (yes the question marks are there).

Fran?ais  Italiano  Portugu?s  Espa?ol  Deutsch  Polskie  Srpski

As of January 1, 2014, the Internet Corporation for Assigned Names
and Numbers (ICANN) has mandated that all ICANN accredited registrars
begin verifying the WHOIS contact information for all new domain
registrations and Registrant contact modifications.

The following Registrant contact information for one or more of
your domains has not yet been verified:

You are supposed to click on a link to to verify the domain. Here is a screen shot of the mail.

My “WOAH THERE THIS MUST BE SPAM” detector went off like crazy. I Googled around a bit and many folks felt it was Spam. So I just deleted them and went about my day.

TL;DR This message is not spam

Somewhat later I went into my DreamHost account and saw this under Domains -> Registrations


So I resent the mail and the spam-like message immediately showed up. At that point I should have just assumed it was not spam. But just to be sure I talked to DreamHost tech support and they verified it was OK.

I clicked on the verification link to in the email and it said “thanks” – and then after about 60 seconds the “need to verify” message went away in my DreamHost UI.

So this message is legit. It is an interesting question as to the possible harm that we do when legit messages look so much like spam and then turn out not to be spam. It took me 3 weeks to figure this out.


A Recent Tsugi Talk I gave at Oxford University

This is a recording of a talk I gave at Oxford University about Tsugi, Sakai, Canvas, and IMS Content Item back in June:

Doing a certbot renew when a site is behind CloudFlare

I have lots of my web sites behind CloudFlare – which is nice because I get free auto-updated SSL certs and all the other benefits of CloudFlare.

But in case I want to bypass CloudFlare, I like to keep a solid SSL cert on the original server. So I logged in and ran a:

sudo certbot renew --dry-run

And got this error message:

Attempting to renew cert from /etc/letsencrypt/renewal/ produced an unexpected error: Failed authorization procedure. (tls-sni-01): urn:acme:error:tls :: The server experienced a TLS error during domain verification :: remote error: tls: handshake failure. Skipping.

The solution was to log in to CloudFlare and reconfigure my to temporarily bypass the proxy and then re-run:

sudo certbot renew --dry-run

Then the renewal worked just fine and afterwards – I restored Cloudflare as my proxy.

Of course you might need a few minutes whilst the DNS changes propagate.

New Coursera Specialization – Web Applications For Everybody

Now that we are well into the rollout of the Python 3.0 version of Python for Everybody. It is a good time to let you know about our next big thing beyond PY4E.

We are preparing a new specialization called “Web Applications for Everybody” (WA4E) that covers HTML, CSS, PHP, MySQL, JavaScript and JQuery to develop web applications. WA4E assumes that you have a basic understanding of programming at least through Chapter 10 of Python for Everybody (Course #1 and #2 in the Specialization).

We teach both back end and front-end Web Application development. There are extensive auto-graders just like in PY4E and all of the course material is freely reusable under Creative Commons so you can use the material to teach your own classes if you like. There is a preview web site at where you can get a sense of what will be contained in the specialization.

We expect that the specialization will be available for registration in a few weeks and the first session should be starting by October 1 (subject to change).

If you have completed Python For Everybody and want to prepare for the new Web Applications for Everybody (WA4E) specialization, I highly recommend that you take Colleen van Lent’s Web Design for Everybody (WD4E).

Colleen and I have been planning a coordinated track of three specializations that can take you from knowing no programming at all through being ready to work as an entry level web developer. It has taken us two years to cover this this multi-specialization curriculum for beginning developers:

Internet History, Technology, and Security (IHTS)
Python for Everybody (PY4E)
Web Design for Everybody (WD4E)
– Web Applications for Everybody (WA4E)

Colleen and I are both personally committed to making technology education available to anyone who wants to put in the time and effort.

I will do a quick review/summary of HTML and CSS at the beginning of the WA4E specialization but I highly recommend taking Colleen’s WD4E specialization since she covers essential front-end skills like UI layout, responsive design and accessibility. If you want to valuable as a professional web developer, you should be able to build solid front-end (Colleen’s WD4E) code and solid back-end (WA4E) code.

I need to thank all of the people who have helped make this new specialization possible. Building the new specialization has been very much a team effort including the staff at the University of Michigan, the current mentors in Python for Everybody, and the staff at Coursera. It is an honor to work with such a talented and dedicated team.

Stay tuned for further announcements and I hope to see you online.

Sakai-12 ContentItem in the Rich Text Editor

The Sakai ContentItem Support in the text editor is now in master and on nightly:

It features a very pretty integration between Sakai and Tsugi using Content Item.

Here is a video demo:

Here is the JIRA:

Here is the test plan:

And if you have five hours you can watch the most boring video in the world – I live streamed much of the work last week to make this work in Sakai:

It is super boring. It is an experiment I am playing with in live coding. I rarely narrate because I am concentrating but you can see what I do. Sometimes I swear – be warned.

Experiment: Live Streaming Coding – SakaiJuly 2017

I am going to do a weird experiment in July. Sakai-12 is code freezing at the end of the month and I am going to put some work into adding some pretty cool features into Sakai-12 in terms of standards compliance. The first bits will be around ContentItem and if I have time I will work on the Outcomes and Membership services.

But one thing I am going to do is live stream my coding efforts. I will announce the streams on Twitter @drchuck.

I also have a PlayList where the recorded streams will be stored. I have a few there already.

The Best Meeting Ever (Sakai 12 Planning)

IMG_6792In the Sakai community we regularly have open meetings of the sakai governance group – the Sakai Project Management Committee (PMC) to plan upcoming releases and strategize about how to best meet user requirements with Sakai. Our most recent open Sakai PMC meeting was June 8, 2017, the day after the end of the Open Apereo 2017 Conference in Philadelphia, PA.

As the current Chair of the Sakai PMC, it was one of the best meetings I have ever participated in my life. I was amazed at how our community has grown and matured since we became part of Apereo in 2012.

While nearly all of the PMC members were present and participating, this was a meeting of the community – not the PMC. Some of the people in the room have over a decade of expertise in Sakai software development, others in the room were customers of Sakai commercial affiliates, others were technical support specialists, we had faculty members, and a number in the room were first-time participants in the meeting.

Neal Caidin, the Sakai Community Coordinator ran the meeting and kept us moving through our topics but made sure to have a very inclusive discussion all along. We had a lot of big issues to cover like:

– When would we code freeze the Sakai 12 release?
– What would be the scope of the Sakai 12 release?
– Where did the NoodleTools contributions fit in the Sakai 12 release?
– Could we remove the legacy Grade Book UI from Sakai 12?
– What were the community hot buttons in terms of “things to fix” before Sakai 12?
– What were the major “holes” that could be filled by Sakai 12?

We had the advantage that we were coming off a great Open Apereo conference and there had been lots of discussion about Sakai in presentations, in BOFs, at Karaoke, and in hallways – so in many ways the post-conference meeting was bringing a lot of threads together to form a plan of action.

We had about four hours to talk so we did not need to rush and could allow lots of people the time they needed to talk. Virtually everyone in the room talked on one or more topics regardless of seniority, role, or experience. The most senior developers spent a lot of time listening and reflecting and helping to add a sense of resource costs / availability to each of the ideas as they moved throughout the room.


Here is some notes from the meeting:

Among many small decisions and ideas, we decided to freeze Sakai 12 at the end of July, and that the old grade book UI would be removed, and that we would try very hard to get the Noodle Partners work into core by Sakai 12 and others.

But what impressed me is how much fun we were having together while discussing these very significant and consequential product decisions that might tie a company product manager in knots. Neal would bring up a topic, the conversation take its time and wander around the room gaining lots of diverse perspectives and wind its way to a decision and then we would move on the the next topic and the pattern would repeat.

All very relaxed and enjoyable – and at the end we had an impressive roadmap for Sakai 12 that was responsive to the community needs and practical in terms of timing and resources. In a way it was the “iron triangle” done properly – together we collectively balanced, time, resources, and features. No one got everything they wanted but we were able to arrive at a balanced plan for the next year.

An Open Invitation

What bothers me as we move into the LMS Vendor Conference season, is how little mainstream commercial vendors actually talk to their users and give the members of the community of adopters and users a seat at the table where final and ultimate decisions are made in regards to the product they are paying 100’s of thousands of dollars for. This is one of the aspects of “Sakai is 100% Open” that makes me most proud.

The commercial LMS vendors are great at throwing parties with an open bar and musical entertainment that runs long into the night. What I would hope customers of these vendors try to do a little bit is see through the parties that are distracting you from the fact that you and your school has very little involvement in the direction of your most important software product on their campuses.

What I would hope is that sometime, that technical support people from a few of these Canvas or Blackboard customers would come to a Sakai meeting and see how it can be done differently and in the open. Just come and sit in the back and listen – or participate if you like. You would be welcome even if you are a Canvas or Blackboard customer. You could come to our Summer Open Apereo meeting or even our Sakai Camp. Sakai Camp is in January and is two days dedicated to the kind of collective meeting to plan for Sakai. You need to register early for Sakai Camp because we have a size limitation. Sakai Camp is more fun because it is 3 days of nothing but Sakai planning – just like the meeting above.

If you come to Sakai Camp you will sit next to and talk the leading lights in the Sakai Community, from our QA leadership, support experts, pedagogy experts, UI/UX experts, end users, and core developers. There is no “hierarchy”, there is no “pecking order”, everyone is encouraged to participate, talk, and share your opinions.

What you would learn from those few days is how a community that cares deeply about each other can work together to produce a world-class learning management system with the best strategy and path towards a truly next-generation learning environment.

Tsugi DB Upgrade Required Upgrade in Master (start of 0.4.x)

Attention Tsugi Production folks.

If you have been following along and doing database upgrades when I told you – my Tsugi commits this morning:

Will not even be noticed. These commits are the first that *depend* on the recent database upgrades being in place.

If you have been ignoring my messages and upgrade from a master a month ago to current master with a git pull, your LTI launches will break because there is now SQL in LTIX in master that depends on:


As well as “deleted” columns in all of the core tables.

If you upgrade and “brick” your Tsugi (which I highly doubt will happen), there are two ways to unbrick a Tsugi:

(1) Go straight to the admin UI

This code specifically tries to limit how much of Tsugi is working (i.e. there are no LTI launches involved in this page) for the admin interface to work. So go to admin, enter the password and do the database upgrade and things should pop back to normal. This is the preferred unbrick trick and works almost all the time.

(2) Log in and drop back to a tag if you are checking out my Tsugi – I made a tag/release with the code that adds all the needed fields, but does not depend on those fields. It can work before or after a database upgrade:

A simple

git checkout 0.3.2

Should do this trick. Launches should work even with a pretty old non-upgraded DB. Log in, upgrade the database, and then re-checkout master and all should be well. You might need a tiny DB upgrade after going back to master – but it does not affect the LTIX runtime.

All my servers,, and my Coursera auto grader are all running master solidly as of an hour ago.

If you get stuck, let me know – I will be watching my email.

Sakai 11.4 released!

This message is from Neal Caidin, Sakai Community Coordinator.

Dear Community,

I’m pleased to announce on behalf of the worldwide community of participants that Sakai 11.4 is released and available for use [1] !

Sakai 11.4 has 144 improvements, mostly bug fixes, [2] including:

18 fixes to the interface (aka Morpheus)
15 fixes for the Lessons tool
14 fixes for Samigo Test and Quiz tool
8 fixes for Assignments tool
7 fixes for the Gradebook tool
6 fixes for Accessibility issues (a11y)

Improvements (features or enhancements) added in this maintenance release include:
Support for Melete Import (LSNBLDR-311)
New property to override the system default and reset tools during navigation (off by default) (SAK-31389)
Improved display option for subset menus (SAK-31824)
Email sent by Messages tool links directly to the specific message sent in Sakai, making it easier to respond to the message (SAK-32240)
Drag and Drop upload enhanced to allow overwriting of existing files (SAK-30924)
Searching on scores improved in Samigo Tests and Quizzes (SAM-3130)

Other areas improved include (in alphabetical order):

Citations Helper
Delegated Access
External Tools (LTI)
PA System
Resources (Content)
Site Archive
Site Info
Sites Admin

Three security issues were fixed in 11.4 (details will be sent shortly to the Sakai Security Announcements list)

[1] Downloading information available at –

2a. Improvements in 11.4

2b. or look directly in the Jira filter –

2c. Github issues (for GradebookNG only)