AIM Textbook Workshop – Day 5

Today was the last day of the workshop.  In the morning we began by discussing options for print-on-demand services and other business considerations (e.g. ISBN numbers) that come with the manufacture of a physical instance of a book.  Then we had a panel of three former department chairs, leading a discussion about “professional credit” for authoring open-source texts.

For working groups in the morning, I led an exercise where everyone first authored a 2-page, 4-question examination in XML that they were to make up (with little advance discussion).  Then with some discussion of their choices and design, we turned to writing the XSL to convert their exams to LaTeX and from there to PDF.  We made a lot of progress in about an hour and I think everybody ended up with something they can expand on once they are home.

The afternoon had reports from many of the recent groups, and then a “look to the future” and/or “next steps” discussion.  That was followed by more opportunities to work with each other.

The week has been a great experience.  We began with a very diverse collection of book projects and a diverse collection of skills and experience.  It seems everybody learned a lot, has a better sense of where their projects are headed, and has gained new collaborators and colleagues.  I’d like to thank all the participants for everything they have contributed to make the week work so well, and my co-organizers for all the work to make it happen.

A Close Look at Rare Books

Co-Organizer David Farmer Explains Bad Macros and Good Macros

Co-Organizer Kent Morrison Gets Happy Hour Started

AIM Textbook Workshop – Day 3

We lost Oscar Levin this morning – his wife went into labor four weeks early!  We wish his family the best,  Oscar was a huge help with participants getting started on Windows machines, and was the first to suggest to me structuring an example with both a statement and a solution.

Introductions on Day One

Settling in to the routine.  The morning was a few announcements, followed by a nice presentation Tom Judson made about graphics.  There were general considerations, and some MBX-specific items, which were all presented clearly and thoroughly.  After break, Alex Jordan gave another nice presentation on incorporating WeBWorK problems into a book, and all the various permutations and variations on that theme (an OpenOregon-funded project Alex and I worked on last summer).  There were several impromptu rounds of applause for some of the techcnical achievements.  Robin Cruz and Lynda Danielson (University of Idaho) have the most “webwork-heavy” project and they seemed to like what they saw.

After lunch, David Farmer did the infamous two-round voting procedure for breakout sessions.  Not by design, but I ended up facilitating a group Matt Boelkins proposed to initiate the structure of a book AND use git in a group to accomplish this.  I had to think hard and quickly to design an effective and instructive experiment.

1. Matt built a new repository on GitHub.
2. Dave Rosoff cloned it locally.  Then he made a master file from the sample-book, pointing to seven new, empty chapter files, one for each person in the room.  He pushed these changes to GitHub, and then everybody cloned this two-commit repository.
3. All seven wrote a mock MBX chapterlocally , and commited their changes on a branch of their local repository.  Now the fun began.  How to share the seven new chapters?
4. Matt did a merge of his branch onto master.  Easy, since he was first.  He pushed to master on GitHub.
5. Now everybody pulled Matt’s changes into master on their local copy.  Now everybody (but Matt) had their chapter in a commit branching one step behind master.
6. So Greg Hartmann went next and rebased his chapter branch onto the tip of his master (no conflict since everybody was in different files) and then merged into master.  He pushed his chapter to GitHub and everybody (including Matt) pulled.  Now Matt and Greg were whole, but everybody else had their chapter in a commit branching two steps behind master.
7. Just for conceptual purposes, I had Dave skip the rebase and merge his chapter branch into master, creating a new merge commit, and he pushed that all to GitHub.  Everybody pulled Dave’s chapter.  Michelle Manes was next, then maybe Volcker Ecke and Dimple C.

End goal was all seven chapters, available to process into HTML and LaTeX.  I saw Matt successfully build HTML of five chapters that were available at that point.

Git Help Session

That consumed the afternoon.  For dinner a small group of us found an Ethiopian restaurant on San Carlos Avenue (the Lunch Box), that was so authentic that we were a bit of an oddity.  I almost (almost) felt like I was back in Africa.

Observation of the day:  Jen Nordstom’s “Introduction to Game Theory” text went up as got repository yesterday afternoon.  Today, if I speak “introductory textbook game theory liberal arts” to Google on my pocket computer, then Jen’s repository is the second result.  Amazing.

More Student Copy Editing

The flip side of student copy editing is that sometimes the response time by an open source author can be very rapid.

A couple weeks ago Hayden Harper asked a question in class about Exercise 21 from Chapter 19 of Tom Judson‘s Abstract Algebra: Theory and Applications. His confusion about the problem boiled down to the smallest element of a Boolean algebra being mistakenly typeset as the numeral zero “0” rather than an upper case letter “O.”

8:13 AM PDT I suggested Hayden send me an email about it. Yes, in class. Yes, now. Finally he could tell I was serious and used his phone to send me the details.

9:37 AM PDT Back in my office after class, I forwarded Hayden’s message to Judson.

11:04 AM PDT The git commit shows Tom made the change official less than 90 minutes later.

Noon PDT Back to my office after my second class, and I got an acknowledgment from Tom, “Fixed!,” which I forwarded to Hayden.

Try that with your commercial text!

Open Source Copy Editing

My students are excellent copy editors.  They scrutinize the material carefully, frequently asking themselves if the material makes sense.  So I pay my students when they report mistakes.  Which often happens the night before examinations.  Originally I paid $0.50,$1, $2, as my open source linear text evolved. As mistakes got harder to find, I upped the ante on “mathematically significant” mistakes they found.$5, $10, then in Spring 2014 it was$25.  I expected to pay off on about four that semester, it ended up being six.  The mistake can be very simple (like a missing subscript), but if it makes the mathematics wrong in any way it is “payable.”  The offer this semester is $50. Rachel Chaiser is the first to find a qualifying$50 mistake.  She found a stray addition sign in the proof of Theorem PSPHS.  Just one character.  Thanks, Rachel.

I like to say that open source books can be better than commercial texts. One advantage is the ability to correct mistakes quickly and easily, and the interest of readers to give something back in the way of simple corrections when they see them. I had a very subtle error pointed out to me this summer by 45-year-old Italian, Marco Milletti, that had no doubt been present for many, many years.  Thanks, Marco.

Pennies a Day for SageMathCloud

7.4 cents per day to be exact.  That is what the new student course plan for SageMathCloud costs a student at $9 total for four months of members-only hosting, with network access, 1 GB of RAM and 3 GB of disk storage. As an instructor you get all the advantages of assigning, collecting, marking, and returning assignments with the well-designed course interface. This is an update of my detailed explanation of how to set up, and use, SageMathCloud to run a course that features computation. If you have not read that, it would be the best place to start. A few things have changed, and I have a few new comments, but the vast majority of that post is still applicable. Skip below to the “Course Plan” section if you are just curious about how the$9 plan works from an instructor’s view.

The course functionality went very smoothly last term.  No one lost any work and generally everything came in on time.  Grading was very easy procedurally, and there is not much I could think of to make grading much more streamlined.  (But then, I have small classes and no TA’s to supervise.)

Abstract Algebra

My upper-division course in abstract algebra continues with regular Sage worksheet assignments from Judson’s open source textbook.  Last semester, I pushed out blank Sage worksheets for them to use for their submitted work, which had boilerplate instructions about the %html magic and exhortations for them to explain their work.  Two students decided they liked to submit Jupyter notebooks instead, which was fine with me.  They named them things like “GradeMe.ipynb”.  The point is, you can have students just make a new worksheet in the folder you push out and have them name it clearly (and with the default sort order by time, it is usually the last thing they have touched so at the top of the file list in their collected folder).

If you grade Jupyter notebooks, you’ll want to know Esc-A and Esc-B for new cell above or below, Esc-M for making a new cell into Markdown format, and then put some HTML for color and size of a div element onto your clipboard manager for quick pasting.

Last semester I strongly advised these students to purchase the $7/month Standard Plan for 3 or 4 months. So they have done their part as early supporters of SMC. I support SMC with a$49/month Premium Plan, which has more firepower than I need, though I am slowly becoming addicted to the upgrades.  With 16 members-only project upgrades, and as owner of the student’s course projects, and with a slightly smaller returning group, I was able to give each student a members-only upgrade for the semester (which I will claw back in May).

This is one of the things I really like about the upgrades and quotas – you can distribute them temporarily to collaborators: students, TA’s, research students, and colleagues anywhere.

Linear Algebra

My linear algebra students are mostly new to me.  They will be learning lots of Sage, they will be using a very limited subset of Sage during exams via the Sage Cell Server on their laptops, and they have fourteen proofs to write, and re-write, in LaTeX until they are rock solid.

I have about twenty Sage worksheets I use as demonstrations in class.  The first one was about constructing matrices and getting back reduced row-echelon form, which was a tool they could use on their first exam (two days ago), though they had to row-reduce one simple matrix “by-hand.”  The second one illustrated the dichotomy of linear systems with nonsingular versus singular coefficient matrices.  I put these in a single folder which I push out as an assignment.  Better, as suggested by SMC founder William Stein, is to use a separate folder for each worksheet.  That’ll minimize the chance that an update will overwrite student work.  This has not been a problem yet with my students, as they seem to understand that they need to make copies if they want to experiment.

Feedback from my students years ago suggests they don’t like to see you just step through a canned worksheet.  So I manufacture some things carefully in advance (like singular matrices) and create other things randomly (either at the keboard, or with Billy Wonderley’s random matrix commands in Sage).  I enter many of the commands I need live in class, so they can see me interacting with the system, and I can respond to their suggestions and questions.  So I make an “-inclass” version in advance, do my work there and save it at the end of class.  So the students get a virgin version of the worksheet that is incomplete, and a transcript of the class session.

For their proof-writing, the LaTeX editing and compilation is excellent, and I’ve used this as the rationale for required them to sign up for the course plan.  I spent about 10 minutes each of the first four class days, building up a demo/scratch LaTeX document with most of the basic features I thought they would need.  So I pushed out in their assignment a progression: DayOne.tex, DayTwo.tex, DayThree.tex, DayFour.tex.  Be sure to teach them about “commenting out” lines to locate compilation problems.

Before their first proofs were due, I had them make a test document, where the only requirement was that it had some math.  Of course, they were very creative with such loose guidelines.  I wanted them to get the result out as a PDF, saved locally, and emailed to me.  They submit their proofs on paper, since I have an elaborate system for the rewrites which I have failed at organizing electronically once already.  I’ve had trouble in the past with students who could not download and print a PDF before the first due date, so I get that out of the way with this mock exercise.

I had thought to hold “LaTeX Office Hours” the evening before their first LaTeX’ed proofs were due.  Timing was wrong, but I could conceivably have been at home after dinner, and as owner of their projects I could pop in and edit their LaTeX in SMC over the network, while they watched and let them also edit simultaneously.  Turned out fine, all their LaTeX looked quite good and only one student had a real question.

Course Plan

Now in your course “Settings”, find the first box, “Require students to upgrade (students pay)”.  Then set a date by which they must pay.  Be sure to customize the email invitation (off to the right) – I missed it the first time.  Done.  It is that easy.

I set the end of the trial period to be our “Last Day to Drop Without Record” day, which is about two weeks in to the semester.  60% have paid already.  I believe it is very clear in the student view how much time is left, and I’ll give them one in-class reminder tomorrow.

The setup is really flexible.  David Roe asked on the sage-cloud list:   What happens for students who don’t pay the $9? Will they still be able to access their projects with a free “membership”? William Stein replied: No. However: 1. They could of course copy the files out to another project. 2. They do get full access again (for free) when the course is over. 3. You can set a start time at any point in the future (the default is one week). 4. As the instructor, you can change the start time or remove the students-must-pay restriction instantly at any time with a click. This takes effect immediately. Maybe your school does not allow you to require extra fees of students. There is an option for “Upgrade all student projects (you pay)”, which did not exist when I set up my Abstract Algebra course, so I do not yet have any experience with it, but it should be straightforward. Jupyter Notebooks, XBox Controllers and Mathematics At Sage Days 70, Sylvain Corlay showed some Jupyter notebooks using an XBox gamepad controller as an input device. I couldn’t resist. First hurdle: a wireless controller (my son’s) with an add-on USB cable is not the same thing as a “wired controller.” So I ordered a new one. Work says they’ll reimburse me (“instructional supplies”). Three lines of code, plug your controller into a USB port and you’re good to go. 4 variable inputs from the two joysticks, two more variable inputs (the triggers are on 6 and 7, untested) and 13 binary buttons (10, 11 seem unused). I think this is mostly code in your browser, Firefox or Chrome (I did this all in Chrome). Perhaps see gamepad.js for more. Second hurdle: Sylvain has public code showing how to connect a regular iPython slider to react to the controller, but there is some subtle issue so the iPython interact does not behave as you would like. So finally, I figured out to (a) read the controller input values (easy), (b) display text in Text() widgets (not hard), (c) create a matplotlib PNG image as a byte string and display it in an Image() widget (StackOverflow to the rescue), (d) specify a routine to react to any change in the controller’s state (understand Sylvain’s example code). Third hurdle: every time I changed the plot update routine, I had to restart the kernel or my changes were not evident. I’m sure there is a better way. As a demonstration, I created a sine curve, parameterized by amplitude, frequency, horizontal shift and vertical shift. So the two joysticks (“four axes”) control all the parameters. With 500 points for each curve, the display updates smoothly, though seems to lag just a bit. The equation of the current plot is specified as LaTeX and rendered with MathJax in the notebook. The notebook is here: http://buzzard.ups.edu/demos/xbox-controller-sine.ipynb (which you will want to download with “Save Link As…” or similar) I had to justify missing two days of class to travel to Sage Days, so when I got home I told my classes I’d get a demo together. I asked a student in each of my classes to control a version of the notebook, before I did anything and with no explanation of which joystick controlled which property. It was fun to see them experiment in front of the class to see how it behaved. All the math here is just the sine function from numpy. I’m really looking forward to using the Jupyter server in SageMathCloud, and having all the mathematics and plotting code from Sage available to control via the ipywidgets Controller() object. (I did this with Jupyter notebook server 4.0.6 installed locally, while SageMathCloud is at 4.0.4.) THANKS to Sylvain for several patient emails while I got this sorted. Grading in SageMathCloud (There is an update to this post, which you should read after this one.) I’ve been assigning Sage assignments for several years in my (standard) undergraduate abstract algebra course. (They are all available now in Judson’s open source text.) Mid-term last Spring I switched over to using the new “course” functionality in SageMathCloud (SMC). William Stein and several of his colleagues and students have greatly improved SMC over the summer and courses work really well now. Today I graded my class’ second assignment. (The first was just procedural so we made sure their accounts were all in place and we knew the workflow.) It was the least painless grading session I’ve ever had. Very smooth and efficient. “Low friction,” in today’s parlance. So here is a guide on getting started and how it all works (and why I like it so much). Registration Have your students signup for a free account. But most important – have them use their real name and have them use their principal university email address with a canonical domain name (e.g. @pugetsound.edu). You’ll search for them later via the email address, and the names they enter themselves will show up in score reports, etc. I have an entire SMC project I creatively call “Courses.” I pay the$7 monthly fee to be on a members-only server without all the free accounts around competing for resources.  It has lots of top-level subdirectories organized by semesters.  Make a new SMC “course” file inside of a new top-level directory in your project’s file system.  Mine is named 2015-Fall/Math433.course.  Open your new course and add a title and description via the “Settings” tab (wrench icon, not gear).  Then find a search box for “adding” new students under the student tab and off to the right.  (Do not confuse this with the box for “finding” — this is local to your course and you do not have any students yet to find.)  It is easy for me to get a comma-delimited list of my students from our administrative systems (this is about the only easy thing to do there).  Manufacture such a list and dump it all at once into the add box.  Real names will come up for all the students who have followed your signup instructions and you can add them to your course (select several, or all).  You’ll then get a very easy-to-manage list of students under the students tab.

Your students will also each then get a new project automatically in their project list.  It has your course name and their real name in the title.  You are the owner of the project, and they are a junior partner, a “collaborator.”  This gives you a lot of power to help them remotely and to look at their work in-progress (for each student on your list there is a button that you can use to open their project).  Snapshots of student projects can sometimes be very helpful (as the student cannot change them since they are not the owner).

Assignments

I made another top-level directory for my current abstract algebra course to contain assignments and demos the student will see, with a name the students will recognize as their course (e.g. Math433F15).  Making this at the top-level will make a better experience for the students, see below.

For each new assignment, make a subdirectory for just that assignment (eg Chapter02).  You can put lots of things in this folder that will all go to all of the students.  But be sure to put in a mostly empty Sage worksheet.  For example I called mine 02-Math433-turnin.sagews.

In this worksheet I put a header (using HTML with an “h2” tag) with the course name, chapter, etc.  Then I put in some basic instructions, based on my experience doing these kinds of assignments with Sage Notebooks.  Here it is, modulo wrestling with WordPress:

Work the exercises for the chapter in this file. It will be collected automatically after the 6 AM deadline on the day it is due.

• Work the problems in order.
• Clearly label which part of your work is for which problem (or subproblem).

When a question asks for an explanation, provide a well-written response. That means complete sentences, correct grammar and spelling, and you address the question that was asked. In SageMathCloud you can format your writing nicely. Follow the directions below and while editing you will get some buttons above your worksheet to help with formatting, or you can just type in the formatting codes yourself with some help from the editor (which you can configure in your user settings). Notice that you can use $$\mathrm{\LaTeX}$$ syntax to get nice typesetting of any mathemtics you want to use.

• Use %html on the first line of cell all by itself to have a cell interpret HTML formatting.
• Run the cell to see what it looks like. Double-click in the cell to go back to editing.
• Similarly, %md will allow you to write in Markdown syntax.
• For $\mathrm{\LaTeX}$, use single dollar signs, or use $$and$$, which is preferable.
• For displayed mathematics (centered on a line of its own) you can use double dollar-signs or $and$, which is preferable.

Now, back in your course file, hit the “Assignments” tab.  Use the search box in the top right to select the folder with your “-turnin” file and other materials.  Once you choose this folder, set the “Due Date.”  Then you will be able to use the “Assign to…” button to push a copy of the folder out to all your students.  (Using a top-level directory in your project means the students get a short path to their assignments in their projects.)

Students will see a copy of the folder in their project for the course.  It will have an additional small text file, DUE_DATE.txt, that contains the due date you set.  Instruct your students to do their Sage assignment in the “-turnin” worksheet and to NOT change the filename or move it.

You need to manually collect the assignment, but it is a one-click operation with the “Collect from…” button.  Do it.  Now you get a “Grade” button for each student in your list.  This will give you a file list that is a copy of the folder at the time you collected it, and a text file with the student’s name as the filename, so you don’t lose track of whose work you are looking at.  You can open the “-turnin” worksheet, or any other file.

I make comments on the student’s worksheet, and sometimes copy their code and show them an edited version that I might think is helpful.  I do comments in HTML, you could use Markdown.  I have a template in my clipboard buffer, so comments are clearly visible (red and big). It begins with the line %html and is followed on the next line by a div element with the attribute style="color:red; font-size:141%".  I paste and then fill the div with my comments.

Done with a student’s work, back in your course file, you can enter the grade, which is any string you please – a number, a letter grade, or a short comment.  Under the “Settings” tab of your course, you can get all your grades in CSV format (to import into a spreadsheet), or in a file of Python data structures.  Be sure to “Return” the graded version of the assignment to the students.  They will get a new folder with the graded versions.

Conclusion

This may be TL;DR but the one-time setup is pretty easy, making an assignment goes quickly and grading is very streamlined.  Everything is where you need it and you have good tools at your disposal at each step.  And your students just need to make an account and do their work.  Zero setup and no technical hurdles.  I’m sure the course functionality will change rapidly (for the better), so if you are finding this months later, look around for updates.

I strongly encourage students to sign up for memberships (at \$7/month) because I tell them that overloaded free servers are not an excuse for not completing the assignment.  But I think it is also important for them to recognize that this service has value and should be supported (and their textbook is free!).  Remind them to go to their project’s settings (wrench icon), click on “Adjust Project Quotas” and then use the “Member hosting” checkbox.  When they stop paying, their project will go back to being on the free servers, so they never lose their work or the ability to interact with it.

I know William is working on other models for class accounts, so be in touch with him through the “help” email address if your university wants to support all the students in a course with one payment.

Recognize that this environment supports many different types of technical courses.  Besides Sage, there is R, Jupyter notebooks, full Ubuntu Linux terminals with a complete file system, and a wide variety of installed Python packages for science and engineering.  And don’t forget there is a robust LaTeX installation, with semi-live preview and reverse search for compilation errors, which is great for students new to writing mathematical documents.  Sage worksheets use CodeMirror for editing, with goodies like syntax highlighting and tag completion, so it is also a good environment for programming, and other similar work.

Collaboration

SMC is also great for working with your students.  I’ve got some experiments lined up and will report again soon.

Shuttleworth Flash Grant

I’ve been working some the past year or so with Kathi Fletcher and especially in connection with her projects at the OER-PUB group. Kathi is a Shuttleworth Fellow and recently nominated me for a Shuttleworth Flash Grant. You would think an application would be in order. Nope, apparently Kathi’s support is enough. Done, grant awarded. Fantastic! Thanks Kathi, and Shuttleworth Foundation, for the vote of confidence.

Better yet, the grant conditions do not include any kind of official reporting. When does this ever happen? I am expected to use the Shuttleworth logo (see sidebar), plus “We ask you to live openly, tell us and the world what you have done with the money” and “Share with the world how you used this award to bring your idea forward.” So I will be using posts here to communicate progress, and likely have a project page on the Sage wiki.

Initial details on grant activities in another post shortly.