Planet WeBWorK


Just-In-Time: Adaptive Homework

Geoff Goehle - Fri, 06/06/2014 - 19:10
Another project that I have been working on for the past couple months is a brand new type of assignment which will eventually join traditional Homework Sets and Gateway Quizzes in WeBWorK.  This new set type is called Just-In-Time and is a kind of adaptive homework; different students will experience the set differently depending on their performance.  However, the usual idea behind adaptive homework is that the homework system will analyze a student's performance and generate or select problems based off of how well they are doing.  Just-In-Time sets work a little differently. For Just-In-Time sets all students will have the same basic set of problems, but if they have trouble they will be given additional problems which will provide "just in time" review of the important concepts.  Below I'll present an example of what a Just-In-Time set might look like and will also talk about how these sets can be built in WeBWorK.  Note:  This feature is currently experimental.  Get in touch with me via email if you are interested in trying it out. 

Lets suppose we are a student starting a Just-In-Time type homework set that is intended to bring us up to speed on some common integration techniques.  When a student starts the set they will see something like this.
One of the options for Just-In-Time sets is to restrict problem progression so that students are forced to do their problems in the order presented.  Here Problem 1 is a u-substitution problem for which the student has 4 attempts.  If they are able to solve the problem within the given number of attempts then Problem 2 will open up and they will move on.  If they do not get the right answer after 4 attempts they will need to do some review. 
In this case the student has not successfully solved the problem.  They are then notified about the fact that this problem has open sub-problems and that they may be able to salvage their grade by getting Problem 1.4 correct.  Of course, they will have work to do before they get to 1.4!  In particular if the student hits "Next" or goes to the main problem set page they will see that there are now four new problems, 1.1 through 1.4, which they did not previously have access to.  These problems will provide review and practice, and then allow the student to retry a problem similar to the original.

This review is not automatically generated or anything like that, it must be created by the course instructor.  However it can be done using the standard PG techniques already in place.  For example Problem 1.1 is a video review of u-stubstitution delivered via YouTube.
Notice we ask a simple question at the end to make sure the student watched the video since we are preventing them from proceeding until they get this problem right.  Once they watch the video, Problem 1.2 presents them with an easy substitution problem, which has unlimited attempts.  For this problem the ShowMeAnother feature has been enabled.  So if a student gets the problem wrong often enough they will have the option to see a different version of the same problem, but with the solution available for study.
The next problem, number 1.3, presents a practice trig u-sub problem for the student to work on.  While a student does have unlimited attempts on this problem, after they get it wrong 3 times they will be given access to 1.3.1.  Problem 1.3.1 has some basic trig derivatives and is further review for those who need it.  However, even if they solve 1.3.1 and practice their trig, the student will still need to go back and do Problem 1.3.  If they are able to solve 1.3 without any trouble then Problem 1.3.1 will never appear.

After finally solving 1.3 the student will then get 4 attempts to solve Problem 1.4 which is similar to, but not the same as, Problem 1.  If they get Problem 1.4 correct then their grade for Problem 1 will be recorded as 100% in the gradebook.  If they get it wrong, and if this feature is enabled, then the instructor will be sent an email letting them know that this student was unable to successfully complete Problem 1, even after going through the review sequence.

Whew!  And this is all for Problem 1.  Problems 2 through 4 would contain similar review structures for other integration techniques which would be unlocked only when students are unable to finish the problem, or after a certain number of attempts.  Their final grade for the assignment will be their adjusted status on Problems 1 through 4.  That is, for each problem their score will be the larger of their score for that problem and their average score from the child problems which count for that problem.  The set score is created from that.

Where do all of these problems come from, you might wonder.  As you might guess, setting up a Just-In-Time set is significantly more work than setting up a regular homework set.  Even an assignment with only 5 top level problems might be expected to have 20 or more child problems to serve as review.  What's more these problems have to work together well and many, like the video tutorial, are unlikely to be found in the OPL.  That being said, problems in Just-In-Time sets are written using PG, just like any problem, so anyone familiar with (or interested in) problem authoring can jump right in.   In general adding problems to Just-In-Time sets is done the same as it is for regular or gateway sets. You add problems using the library browser, or the problem editors, or the "add blank problems" field as you normally would. New problems are always added to the end of the set as a new top level problem, so you will most likely have to reorder them after you add them.  Furthermore importing, exporting and assigning homework sets can all be done using the Homework Sets Editor 2 page, just like any other assignment.

One new tool which has been created for Just-In-Time sets is the Problem Set Detail 2 page.  This can be found by visiting a homework set and then clicking the link on the left hand navigation bar that looks like --Set Name.  You should end up at a page which looks like this.

(Notice the link on the left.)  This portion of the page should look pretty familiar. You set parameters here as you normally would.  Just like any set remember that you have to Save your changes for them to take affect.  The main differences are how you order problems. The problem section of the page looks like this.
Notice the nesting in the problem list. This, together with the problem numbers, should indicate the child-parent relationship between the problems. Because just-in-time type sets can have so many problems you can simplify things by clicking the - icon to hide the children of a particular problem and you can click the + icon to show the children of a particular problem. This is very similar to how viewing a directory structure in list mode works.  You can expand or collapse all of the child problems by using the buttons at the top.

To reorder, you drag a problem by clicking on the arrow icon.  When you move a problem you will be shown a little preview box indicating where the problem will go.  You can change whether a problem is a child or not by dragging the problem slightly to the right or left.  (When you do so the preview box should become indented.)  If you delete a problem there may be gaps in your numbers. This is good if you delete something while a set is active (not recommended) but otherwise you can renumber the problems consecutively using the Renumber button.

Another big difference between this and the original Problem Set Detail page is how problems are rendered.   In this editor you click the picture icon near the problem number to render a problem. If you click it again it will hide the problem. The method used to render the problem is determined by the drop down box near the top.  If you want to render all of the problems at the same time you can use the button at the top of the list. Be warned this will take up a lot of vertical space.  Put together, on the fly rendering and the expand collapse feature should make it so that you can focus on one review sequence at a time.  You can read more about how to set up Just-In-Time sets here.  Below I will present some of the parameters associated to Just-In-Time sets.  
Set OptionsThese are the set wide options specific to this type of homework. Many of the other set wide options, such as due date, open date and answer date, will be present. If conditional release and/or reduced credit is enabled then these configuration options will also be present.
Restrict Problem Progression 
This option controls whether students are allowed to proceed to the next parent problem before finishing the current problem, including the current problem’s children if necessary. Note: A student "finishes" a problem if they either get 100% or runs out of attempts.
Email Notification 
When this option is enabled all instructors set to receive feedback emails will be sent a notification when a student finishes a problem, e.g. runs out of attempts on a problem, and all child problems which count for that problem's score, and do not have an adjusted status of 100%. This is to let the instructor know that the review for that problem was unsuccessful.
Problem OptionsThese are options for individual problems. The usual problem variables, such as weight and max attempts, will be present as well.
Att. to Open Children 
This controls how many incorrect attempts are needed before the child problems for this problem become visible to a student. If this is set to 0 then child problems are always visible. If this is set to -1 or a number higher than max attempts then the child problems will become visible after a student runs out of attempts. If this is set to -1 and max attempts is set to unlimited then the child problems will never be open.
Counts For Parent 
This controls whether this problem's score counts towards the score of its parent. In general the adjusted status of a problem is the larger of its status and the weighted average of the status of its child problems with this flag enabled.
While it may not be as fancy as an adaptive system which chooses new problems based on a computer algorithm, this just-in-time assignment type is extremely flexible.  Instructors should be able to make use of the tree structure, as well as the fact that they can control when and how students have access to the homework problems, to do some interesting things.  I know my students would appreciate a short tutorial on the log rules next time we do logarithmic differentiation!
Categories: Planet WeBWorK

Automated Install

Geoff Goehle - Fri, 05/30/2014 - 07:57
Its been a while since my last post.  However the semester ended a couple of weeks ago and summer is here, which means that I can get more WeBWorK stuff done.  I'm going to put up a number of posts over the next several months.  A lot of what I will talk about was spurred by the recent code camp at Asheville, hosted by Western Carolina University.  You can read more about that here.

In this post I will be discussing recent strides that were made with the automated WeBWorK install script, ww_install, recently developed by Jason Aubrey.  I'll talk about what improvements we made and walk you through the installation process.

First off, ww_install is an automated installation script that is meant to get a vanilla WeBWorK server running on a fresh linux installation with as little fuss as possible.  It is ideal for those interested in trying WeBWorK out using a virtual machine, or doing development on multiple machines.  It is also good for initially setting up production machines.  Be aware, however, that most production machines will require manual configuration to set up things like SSL, or alternative authentication methods, or an email server, and so on.

This script was actually developed a little while ago by Jason Aubrey can be found at this github repository.  The current master branch on that repository supports the current WeBWorK master branch.  Neither it, nor the WeBWorK master branch, support Apache version 2.4, however.  (The 2.4 version comes standard with the newest editions of Ubuntu and Fedora.)  One of the main improvements we made to the install script during the code camp was to upgrade the installer to handle WeBWorK branches release/2.9 and develop, both of which do offer Apache 2.4 support.  (Another big improvement is a surprise!  Scroll to the end to see what it is...)

As of now the most recent branch of the installer, named ww3, supports the following distributions:
  • Debian 7 - Wheezy
  • Ubuntu 14.04 - Trusty Tahr
  • CentOS 6 - <No Cute Name>
  • Fedora 20 - Heisenburg
This reflects the general policy of WeBWorK moving forward.  We will concentrate on supporting the stable Debian version, the current CentOS version (and the equivalent RedHat), Ubuntu Long Term Support Versions, and (recent-ish) Fedora versions.    While we will not promise that things should work on the most recent Ubuntu or Fedora versions all the time, we do want people to let us know when something goes wrong.  Problems with those distributions will become problems for the officially supported distributions sooner rather than later. 
So lets get to the good stuff.  I'm going to walk you through the process of installing a WeBWorK server on a virtual machine.  Start by installing your favorite (supported) linux distribution...In this example we will be installing Debian onto a VirtualBox virtual machine.   While you can install the full version of Debian, for virtual machines I recommend working with a smaller set of features.Here I am only installing an SSH server and the standard system utilities.  I am not setting up a desktop environment.  You can run a desktop environment through the virtual machine but it slows things down.  I prefer to set up port forwarding so that I can use the host machine's terminal and browser, which are generally more responsive.  Next set up your initial user.  I recommend using wwadmin but you can use whatever user you like, even root.  Now I set up port forwarding.  Here I am forwarding port 2222 to 22 on the guest machine, and 8888 to 80 on the guest machine so that I can access ssh and apache.  (Using this setup you can even access your WeBWorK installation remotely from another machine via ssh tunnelling.)  Once the installation is finished (it should be pretty quick with this few packages) start your virtual machine (you can even do so in headless mode using VBoxHeadless) and log into it using a terminal on the host machine withssh -p 2222 wwadmin@localhost Now you will want to get the installation script and run it.  Notice that we get the script from the ww3 branch, since that contains the latest changes.  (Eventually ww3 will be merged into master and you will just get that branch.)  
wget --no-check-config \
sudo bash Of course, there is a corresponding curl command which you can use to get the file.  Now you wait while the script installs all of the necessary prerequisites.
  • You will be asked to configure your mysqul server
  • It may look like the script has stalled while installing perl modules.  This may be because the script is asking you a question but you can't see the prompt.  When in doubt ... just press Enter.
Eventually you will get through the installation process and the real fun begins.

The installation script will ask you a bunch of questions.  Things like:  "Where do you want to install WeBWorK?", "What is the URL of this site?", "Do you want to create a WeBWorK administrator account, or does one already exist?"  You should always read the prompts, but its also usually safe to just press enter.  There will always be a confirmation prompt and the default settings are usually pretty good.  The only time you will absolutely have to provide input is when you are creating the database.  Here you will be asked for the mysql root user password, and to set the WeBWorK database password.  Note:  On some terminals the prompts can be cut off.  Again, just press Enter if you are in doubt.  After this is done, the script will ask where you want to fetch the WeBWorK code from (you should choose the defaults), and will get to work.  Some parts of this can take a long time....
Once you are done with the installation, hopefully it finished without errors, you can find the installation log in your root WeBWorK directory.  Usually this is /opt/webwork/webwork_install.log.  This log is a pretty extensive list of everything that the installer script did.  Its useful to keep around so that you can troubleshoot a broken installation, or just modify it so that it suits your needs better.  If the install fails for any reason feel free to post your issue here or ask your question on the forums or the irc channel.  

If the installation succeeded you should be able to access your server by visiting http://localhost:8888/webwork2 on your host machine's browser. 
And now for the surprise (you didn't peek did you...).  By default this version of the installation script installs the new prototype interface WeBWorK3.  You can try it out by visiting the WeBWorK3 link on the left hand side of the page.  You should end up at something which looks like this: 
While its still in the early stages, one of the main features of this new interface is that it is responsive.  No more form based "submit my changes" editor pages.  This interface records your changes as you make them, making it feel much more interactive.  Its not feature complete yet, but a lot of the big things are there.  You can read about the technical side of things here and if you run into problems you can visit the WeBWorK irc channel or email Peter Staab, the main developer.  If you want to back out of the (maybe slightly unstable) ww3 branch you can do so very easily using git.  Just use the command
git checkout release/2.9in your main webwork2 directory, probably /opt/webwork/webwork2.  Note: release/2.9 will be merged into develop sometime over the summer, as will the ww3 branch of ww_install, so these instructions may get slightly out of date.  

Categories: Planet WeBWorK

WeBWorK::Asheville May 19 - 22, 2014

Michael Gage - Mon, 05/26/2014 - 19:24
WeBWorK::Asheville   May 19 - 22, 2014
WeBWorK::Asheville::2014 was held at Western Carolina University from Monday, May 19 through Thursday May 22, 2014.   Thanks very much to Geoff Goehle at WCU for organizing the code camp.  
This was a small focused code camp attended by Mike Gage, Geoff Goehle, Peter Staab, Bruce Romano, Jason Aubrey  and John Travis and devoted principally to making progress on 
  • WeBWorK 3 -- the new AJAX based interface being developed by Peter Staab
  • the install script -- automatically installing the entire WeBWorK stack being developed by Jason Aubrey

In addition we made a start on writing a grant proposal for dissemination of WeBWorK to community colleges and to high schools, worked on refining examples that use both MultiAnswers and Scaffolding (sequential or compound problems) in the same WeBWorK question, and created a first draft of a procedure to be followed when checking in new code to the repository.  

This camp  and previous code camps are supported by the NSF through a national dissemination grant to the MAA. 
Read more »
Categories: Planet WeBWorK

WeBWorK sessions at JMM 2014

John Travis - Wed, 01/08/2014 - 09:43
There are a number of sessions involving WeBWorK scheduled for the upcoming Joint Mathematics Meeting in Baltimore next week.

The Exhibit Hall display will be available from Wednesday noon through Saturday noon. Be sure to drop by and chat and perhaps volunteer to staff the exhibit for an hour or so during the meeting. If you can make plans to staff the booth, please send a note to to have access to the planning document.

Minicourse #9. WeBWorK: An open source alternative for generating and delivering online homework problems, will be on Wednesday and Friday and presented by John Travis, Jason Aubrey, and Paul Pearson. The first session will be on Wednesday, 2:15 p.m.–4:15 p.m. and the second on Friday, 1:00–3:00 p.m.. There are currently a relatively large number of registered participants but there may be a few slots left in this mini-course designed to introduce WeBWorK and basic problem authoring. Any experienced WeBWorK folks are welcome to drop by and chip in to help these new users.

A NSF poster session on Wednesday includes three poster displays related to various WeBWorK projects:

Several presentations related to WeBWorK are scheduled for various paper sessions:

There will also be several possible informal gatherings during the meeting.  The first will be at 5:30pm on Wednesday. Meet at the exhibit hall booth or entrance. Also, stop by the exhibit booth and check on dates and times for any other gatherings as well to grab a new WeBWorK business card!
Categories: Planet WeBWorK

WeBWorK accessibility projects

Michael Gage - Fri, 11/01/2013 - 06:41

There are a number of centers using WeBWorK that are interested insuring that our online homework system is accessible, that it meets universal design goals and can be used as widely as possible.  Using MathJax to represent mathematical equations has been a big boost in that direction.

Here is a post from Portland Community College one of the active centers working on the accessibility aspect of WeBWorK.  The summer MathFest conference will be held in Portland, OR in August 7-10, 2013 and there are tentative plans to hold a code camp in Portland devoted to WeBWorK accessibility on the three days proceeding MathFest. Details are still being worked out but if you are interested or have ideas or suggestions email me or Alex Jordan at Portland Community College.

Below is the report.

-- Mike

Report from Portland Community College
Kaela Parks: Director of Disability ServicesKaren Sorensen: Accessibility Advocate for online courses
Chris Hughes, Scot Leavitt, Alex Jordan: Math faculty
Making Math More Accessible at Portland Community College
At Portland Community College (PCC), Disability Services (DS) is tasked with ensuring the accommodation process unfolds appropriately across and throughout a district serving approximately 90,000 students per year, 50,000 of whom are seeking credit.  In recent years the options for curricular content format and delivery have changed considerably, bringing new barriers, but also new opportunities for making math more accessible. Many courses are now designed around online engagement points that tap vast databases, generating individualized browsing sessions any time of day or night, giving users valuable and almost instantaneous feedback. While Disability Services can convert known problem sets ahead of time, and hire aides to serve as readers and scribes, it is not practical, nor does it provide equally effective communication, to try and address barriers on the fly.
The truth is that while there will always be some need for individualized accommodation, for example creating tactile representations of graphs, there is much that can and should be done on the front end to minimize the need for manual adjustments. If online engagement points comply with established Web Content Accessibility Guidelines and use proper structural markup for math content, users who rely on text to speech, braille translation, magnification, or voice recognition, can still typically get what they need. The content is built for flexibility. However, when these best practices are not honored, there is often no way DS professionals can ensure equally effective communication. We can’t reach behind the firewall and “fix” content by adding descriptions to images, putting equations into MathML, or redesigning the interface to ensure keyboard navigation.  What DS can do, and should do, is partner with Faculty, Instructional Support, and other stakeholders to help the institution recognize our shared responsibility to ensure equal access through ethical course design and curricular material adoption processes.
At PCC, online instructors develop their own courses within the learning management system. They choose the color and formatting of their text, the media, publisher materials and third party web sites and applications to use in their courses. And since the spring of 2012, all new and revised online courses paid for development by the Distance Education (DE) department are reviewed for accessibility. But how is an instructor supposed to know what’s accessible and what isn’t?
The Distance Education department has seen accessibility as an area that instructors need support. To that end, they hired an Accessibility Advocate who trains instructors and reviews courses for accessibility. And last fall (2012) the DE department co-sponsored with the Math department, two math faculty in their study of accessible mathematics. This subject specific study was so successful that the DE department hopes to emulate it with other academic program areas, especially in the STEM fields.
Math faculty members, Scot Leavitt and Chris Hughes investigated both the accessibility of content generated by the instructor and that which is delivered by homework management systems. In addition to studying commercial homework management systems such as MyMathLab, they ran a battery of accessibility tests (assisted by Math faculty Alex Jordan) on WeBWorK. The results from the WeBWorK experiments were superb- the screen reader JAWS was able to navigate easily around the web page and, most importantly, could read even the most complicated mathematical expression with the greatest of clarity.
WeBWorK is currently the only math homework management system fully endorsed by the Disability Services Office at PCC, and they are providing strong support in the creation of a dedicated server to host it. The server should be fully functional by the end of Summer 2013, and ready for wide-spread use across the college at some point within a year. Supporting WeBWorK in this way allows PCC to provide instructors with an alternative to commercial offerings that have known accessibility issues. By establishing our own WeBWorK server we ensure our community has access to a powerful homework management system that is more usable to more people more of the time. It also provides the institution with a means to ensure access for students who are enrolled in sections built around inaccessible engagement points by providing an equally effective alternative. 

Details of the Math accessibility study and other resources can be found at
Categories: Planet WeBWorK

Past Answers

Geoff Goehle - Wed, 10/30/2013 - 12:05
Its been a while since I've written something here, so I thought I would make a short post about a WeBWorK page which has always surprised me because of how much it is used.  I am talking about the Answer Log page.  After the jump I'll show off some improvements we have made to the Answer Log which will be arriving in the upcoming 2.8 release.

Instructors have always been able to get to the answer log page by following the "Show Past Answers" link at the bottom of any problem page.  Something which is less well known is that instructors can make it so that students can also see past answers.  This is done by setting "Allowed to view past answers" to "student" on the Permissions section of the Course Configuration page.    When instructors view the past answers page it will now look something like this:
The form at the top is to allow instructors to view answers for any student and any homework set.  The problems are colored according to correctness and now they are also formatted using the AsciiMath functionality of MathJax.  This should improve the readability of the past answers page.  It's important to note that when students look at the page they will not have the ability to view other students answers, and the answers will not be colored by correctness.  Another couple of readability features (in math4 at least) are the striped table rows (since the past answer rows can get very wide) and the extra bold bars which separate answers whose difference in submission times is greater than the WeBWorK timeout time.  The page also looks reasonably good when mixed with essay answers:
The one caveat is that if students are "creative" in how they typeset their mathematics in essay answers, MathJax may not render things correctly.

The final new feature, which will only be helpful to instructors, is that the answer log form now supports a variety of regular expressions:
For the User and Set field you may use the following:

  • * - this wildcard can stand for any number of characters.
  • ? - this wildcard can stand for one character. 
  • | - this is an or statement.  Its mostly useful for comparing the answers of two students. 
For the problem field you can use comma separated lists of numbers or number ranges.  Be warned, doing a very broad search (like User: * and Set: * and Problem: 1-1000) can return a great many past answer entries.

Categories: Planet WeBWorK

MAA PREP workshop: Problem Authoring (WeBWorK)

Anneke Bart - Sat, 10/12/2013 - 06:47

Last summer I did a PREP workshop on authoring problems in WeBWorK. The presentations by John Travis, Davide Cervone, Gavin Larose, Paul Pearson, and others were wonderful. This MAA sponsored workshop was conducted online and ran for several weeks on Mondays.
If you had told me even two years ago that I would be attempting to write problems I would have shaken my head sadly, and muttered something along the lines of “the poor dear is delusional”. But here I was learning about writing essay questions, multiple choice and multiple select questions and how to randomize the variables.
I was really glad to hear that one of my colleagues had decided to jump into authoring problems at the same time. It was really nice to have someone to compare notes with and ask questions of.
The initial “intimidation factor” may be there for many out there, but take it from someone who has taken the jump: It is not as hard as it looks. My advice would be:
  • If you can find a colleague to work with, then that is a big plus. Being able to trouble shoot with someone close by is really useful.
  • If you do not have someone close by, you can still get a lot of help from the online forum. WeBWork Forum Link
  • Start with existing problems and modify them. I would look for problems similar to what I wanted to do and then just adapt them to my needs. This includes finding a problem and adding random variables, modifying multiple select questions, etc. I have even passed on templates to colleagues who are now coding their own reading questions.
  • Writing you own problems from scratch is hard (well, for me it is). If you cannot find a template in the problem library, then go to the WeBWorK wiki and browse through the author pages there. There are many templates available and I have found it relatively easy to adapt them. Link to WeBWork Author Resources
  • Do take your time. It can take a while to write a good problem (even when adapting an already existing one). And document your work. Include what course this is for, what text it is from (if applicable), and write the solution part. It is sometimes tempting to skip the latter when in a hurry, but then that may never get done and the comments may be very useful to students!

I have been writing questions myself for reading quizzes I give my students, and to create questions for placement tests. But that is something I will talk about in later posts.
- Anneke
Categories: Planet WeBWorK

WeBWorK::Rochester::2013 October 4 - 7, 2013

Michael Gage - Wed, 10/09/2013 - 17:44
WeBWorK::Rochester::2013, held at the University of Rochester from Friday October 4 through Monday October 7, was dedicated to
  • putting final touches on release/2.8 of WeBWorK 
  • integrating the new user interface created by Peter Staab into the development branch of WeBWorK
A small group of experienced WeBWorK developers participated in this code camp: Davide Cervone, David Gage, Mike Gage, Geoff Goehle, John Jones and Peter Staab. My thanks to all of them for their contributions to a very successful weekend.  My thanks also to Louise Wingrove for organizing the lodging and meals for participants.

This camp  and previous code camps are supported by the NSF through a national dissemination grant to the MAA. ( link to  once it is back up and running again. :-)  )

The first outcome of the camp is an updated release/2.8 which we plan to merge with the master branch on December 1, 2013.  We combined the original release/2.8 with most of the fixes and small features which have been submitted to the develop branch over the last three months.  Both release/2.8 and the develop branch have been running smoothly under moderate course loads on the MAA testcourse site and on the hosted2 site at the University of Rochester.  The activity devoted to release/2.8 over the next few months will be responding to bug fix requests, minor adjustments of features and general polishing of the instructor experience.  Very little has changed in the student interface and there have been very few requests for changes in this aspect of WeBWorK.  While not specifically adapted to mobile devices the student view of WeBWorK works acceptably well on iPhones, iPads and Android mobile devices.

Features of release/2.8 are listed on the wiki at:  
(You can type release/ 2.8 into the search box of the wiki to find it.)

You can also view all of the work involved in creating release/2.8, step by step,
viewing the commits page on github.
The most recent commits are at the bottom.

The will be more exposition about new features in release/2.8 (and some under advertised features of release/2.7) in subsequent blog posts.

It should be noted that LibraryBrowser1, although it has not changed its name, has received substantial improvements in release/2.8 from the work of John Jones.  In general it should be much faster because some of the ajax calls used in librarybrowsers2&3 have been used to speed up rendering of individual problems on a library page.  When enabled, the library page also allows for the easy tagging of library problems.  (see for more details)

The second outcome of WeBWorK::Rochester::2013 is the integration of a new AJAX/javaScript
instructor interface, largely created by Peter Staab at Fitchburg State University, which has been merged into the develop branch of WeBWorK.  This interface provides instructors with behavior that feels more like a "google app" instead of the form based interface that we have been  used to since the mid 2000's.  Peter began work on this project during WeBWorK::Rochester::2012 held a year ago June.

One of the early outcomes was "ClasslistEditor3" which has been available as an option in both release/2.7 and release/2.8.  The current version includes the ClasslistManager (renamed and improved from ClasslistEditor3) and HomeworkManager which combines the duties of the Library Browsers, the HomeworkSetsEditors(1&2) and the Instructor tools page. The HomeworkManager's library browsing functions are built on the experience gained from the prototype LibraryBrowser2 and LibraryBrowser3 which were written by David Gage.  All of these tools have been available for testing in their embryo form on previous releases, but they have now progressed to the point where they can usefully speed up many standard instructor tasks.

WeBWorK::Rochester::2013 allowed Peter to explain in person his work and his vision to several of the other core WeBWorK developers. (Peter has not been able to attend any of the code camps since last June.)  We now have a clearer idea of what has to be done to finish the transition.  We were able to make significant strides in improving reliability during the code camp itself but much more remains to be done.

The net effect of using ClasslistManager and HomeworkManager is that instructors can manipulate classlists -- add students, change passwords, or homework assignments -- create, assign, etc. immediately.  The updates of these changes to the back end server are done asynchronously and are invisible to the user.

At the moment the develop branch is fairly wild.  Some actions don't behave as you expect or as they should;  there are many features of the older editors and browsers that have not yet been implemented in the new interface. In some cases things that work fine on small sets or classes slow down drastically when the scale is increased. We expect that it will take many months before this develop branch is ready for use on a regular basis.

On the upside -- the student interface is not affected, and so far at least there is no affect on stored data.  Since the old editors are still available one can simply switch to them for features that are not yet implemented and then switch back to the new "managers" for their added convenience on tasks where they work well.

One other thing we need to watch out for.  The new javaScript interface will initially be a step backward as far as localization (translation in other languages) is concerned.  We will be enlisting all the help we can for the translating effort but there is a lot of new and quite different code that has to be internationalized.  Similarly we are concerned about whether accessibility is helped or hurt by the switch to interactive apps.  We are using standard libraries, all of which are concerned with accessibility issues, but it will take time and we look for a lot of constructive feedback to preserve the gains in accessibility that we achieved between release/2.5 and release/2.8 and insure that these gains are not lost in this next release (most likely to be called WeBWorK3 ).

For those helping with development:

  1. submit bug fixes and small feature tweaks to the release/2.8 branch
  2. submit new features to the develop branch

In all cases make sure that your are in sync with the branch you will submit to before you
send a pull request.  If the commit does not merge cleanly it will be returned for more work before it is even reviewed.

-- Mike

Categories: Planet WeBWorK


Geoff Goehle - Mon, 08/05/2013 - 13:26
Its been a while since my last post, so I wanted to fill the space by writing something about a side project I've been working on.  Its an upgrade to the existing mathview equation editor.  The main features are bootstrap integration, real time equation rendering, and autocompletion of common functions.  Hit the jump to see more.

The main change from the existing mathview program is the integration with bootstrap and with mathjax.  The mathview feature will only work with bootstrap enabled themes (math3 and math4) and mathjax has to be installed on the server.  Under these conditions you will be presented with a Use Mathview? option in the Display Options sidebar.  When enabled, inputs for problems will have an button attached to them as shown below.
If you click on the icon the Equation Editor (i.e. mathview) will pop up.  At this point you have several options.

  • You can type your answer directly into the answer box.  The result will be rendered in real time in the Equation Editor preview area. (See image below)..  
  • You can click one of the functions and have it inserted into the answer box.  You can also browse the available function categories using the Operations drop down.  
  • You can drag the equation editor out of the way to a more suitable location.

Put together, all of this basically replicates the older mathview functionality.  There are a couple of new features, however.  The most obvious is the autocompletion of functions.  Now when you are typing an answer and you write, say, "co", you will be presented with a list of standard functions which start with "co", as shown below.
You can then select which function you want with the arrow keys and hit enter to complete the function in the input bar.  This is nice because it helps remind people what functions are available and also keeps the browser from populating the list with previous answers like it usually does.

The second new feature is behind the scenes.  Since there are a lot of different standards for mathematical notation ( e.g. arcsin vs sin^(-1) ), the new mathview is locale ready.  By setting the option ${pg}{options}{mathViewLocale} you can use a different locale js file.  I won't describe the contents of this file here, but it allows the administrator to change which functions are displayed, what the categories are, what the names are, what functions can be autocompleted, what the notation is, and so on.  This can be set on a per class basis using the course config files, although the system administrator will have to make sure the appropriate locale js files actually exist.

Categories: Planet WeBWorK

WeBWorK::Vancouver - June 27 - 30, 2013

Michael Gage - Wed, 07/17/2013 - 09:51
Hi again,

Close on the heels of our participation Sage Edu Days comes the code camp at Vancouver.

We had a significant number of first time participants at this code camp:  Alex Jordan and Chris Huges, Portland Community College; Liz Brauer, ECE department at Northern Arizona University, Nandor Sieben, Math Dept at Northern Arizona University; Nora Franzova, Langara College, Vancouver; Aori Nevo, Stevens Institute of Technology, NJ.  One of the purposes of these code camp is to widen the pool of developers who feel comfortable making contributions to the WeBWorK code base.

Additional guests dropped in for part of the code camp: Davor Cubranic, Statistics dept at UBC; John Hsu, Center for Teaching, Learning and Technology at UBC; and Steven Wittens, developer of MathBox.

The remaining participants were Anneke Bart, St. Louis University; Robert Beezer, U. of Puget Sound; Mike Gage, U. of Rochester; David Gage, U. of Waterloo; Djun Kim, Myplanet Digital; Arnie Pizer, U. of Rochester and John Travis, Mississippi College.

Here are a few highlights from the code camp:

  • Yoav Freund and Matt Elkerj from UCSD gave a presentation via Skype on using webwork and machine learning to discover patterns in the past_answer log that indicate that a student is floundering and to step in before this occurs with additional scaffolding. They have a video on you tube at which presents this very well. There is clearly a lot more that can be done but this is a very intriguing start.
  • Greg Kraus from NCSU gave a presentation on the accessibility of WeBWorK including both strengths (of which there are many -- especially when using MathJax) and weakness that can be improved. He has an initial document at 
    • listing specific items that can be fixed in the presentation layer.  
      • If you would like access to this document (and in particular if you might have time to work on some of the fixes) please write Greg (greg_kraus) at
    • Aori Nevo has already started preliminary work on this and contributed a few patches to github.
    • Alex Jordan and Chris Hughes from Portland Community College report that their IT/accessibility team is delighted with WeBWorK particularly compared to MyMathLab. I've asked them to write a blog post on their findings when they get a chance.
  • Steven Wittens gave a marvelous demonstration of MathBox, a mathematics presentation tool built on top of three.js which allows you to "show" not explain. Examples of a similar presentations are at:
  • David Gage created a package for Vagrant which allows you to set up a development site for WeBWorK on your own computer in about 5 mouse clicks and in 5 minutes. Watch David's blogpost for more details. 
  • David Gage and Aori Nevo worked on a prototype white board that allows many students to draw and the drawings are echoed on the instructors board. It's built with web components which simplifies the code. There is a lot of potential here. 
  • John Travis and Jason Aubrey presented two different ways in which Sage and WeBWorK can interact.
    • JT has a number of examples of using sage as an applet (sagelets?). The technology is available in WeBWorK-2.7 (the current master branch) 
    • Jason has added a macro that will take a program written for Sage (essentially in python) and ship it off to the sage engine to be processed and to return an answer. You might use this to symbolically integrate a function which WeBWorK would not be able to do. (This is available in release/2.8 and develop branches). 
    • Both of these approaches integrate WeBWorK and the sage cell server being developed by Jason Grout and others. The technology works very well once all the connections are set up. It could still use some work with graceful failure and error reporting when one or the other of the webservices is not connecting properly.
  • Alex and Chris also worked on the surprisingly difficult problem of correctly checking factored polynomials in the context of algebra and pre-calculus. It's difficult because one does not want to accept mathematically equivalent answers (e.g. unfactored polynomials) but the exact definition of simplified form is not well defined. (is 2x+1 correct? or 2(x+1/2). How about 2x+2 and 2(x+1)?). They are using Sage as one approach to the answer. It also gave rise to some serious but amusing questions about factoring polynomials over finite fields as possible approaches to the solution. I'm sure the algebra/pre-calculus students will be thrilled.
  • Mike and Nandor added code that makes much more portable. (Chromatic requires a compiled C program in order to check coloring on graphs.) This should make Nandor's graph theory questions (in the NAU sublibrary) much more widely available.
  • Nora was able to convert the entire placement test for Langara College into WeBWorK format.
  • Liz was adding to her collection of Electrical engineering problems (in the NAU subsection of the OPL). Thanks to Davide Cervone we are dealing successfully with the use of j as the representative of the square root of minus one. :-)
  • There were additional tweaks to the Library Browser, the OPL and also to MathView -- the very recent HTML5 based equation editor which is

Thanks to all who participated in another very successful code camp.  And our particular thanks
to Nora Franzova at Langara College and to Djun Kim from UBC/Myplanet Digital  for making all of the local arrangements.

Those who will be at MathFest in Hartford, Connecticut this August should drop by the WeBWorK
exhibit (part of the MAA exhibit) and say hi to John Travis and any other WeBWorKers who show up.

-- Mike

Categories: Planet WeBWorK

Sage Edu Days 5, June 19 - 21, 2013

Michael Gage - Fri, 07/05/2013 - 08:43
Thanks very much to the folks at Sage and at UTMOST for inviting us to participate in the Sage Edu Days 5 in Seattle, WA  June 19 - 21.  Jason Aubrey, Mike Gage and John Travis from the WeBWorK team participated.  This is the third year that we have collaborated with Sage to augment the interaction between the two software applications.

As a result we have a new macro file "" which simplifies the creation of sagelets -- plugin interacts that augment the power of WeBWorK questions.  In addition Jason Aubrey created AskSage(), a new subroutine which allows WeBWorK to query an instance of sage to have an expression evaluated.  These provide two different mechanisms for  providing high level CAS support to WeBWorK questions by remotely accessing a sage cell server.  The sage cell server has been under development by Jason Grout and the rest of the Sage team over the last three to four years.

The new sage interaction features are available in WeBWorK  release/2.8 which is now "on deck" in the webwork github site: Release/2.8 is undergoing final testing and bug squashing before being merged into the "master" branch.   To try it out you will want to use  the branch release/2.8 of both webwork2 and pg.  These are available by simply executing "git fetch" on an up-to-date installation of WeBWorK.  (See Github   and  release/2.7 for details.) While you are at it you should download the new changes to webwork-open-problem-library and run OPL-update to update the library database so as to incorporate the improvements made at the WeBWorK OPL workshop in Charlottesville, VA earlier this month. Preliminary release notes are available at

More refinements and many more examples demonstrating the new sage interaction features are expected from the upcoming work at WeBWorK::Vancouver June 27-30  and the PREP13 model course workshop in Washington, DC, July 10-13.

Release/2.7 was incorporated into the "master" branch on June 15, 2013.  The separate 2.7 branch on the openwebwork site will soon be removed.

-- Mike
Categories: Planet WeBWorK

WeBWorK OPL Workshop - Charlottesville, VA - June 2013

John Jones - Mon, 07/01/2013 - 09:59
This was the first in a series of workshops to improve the organization of the Open Problem Library for WeBWorK.  The standard way to search the OPL is by a taxonomy of mathematics with three levels: Subject, Chapter, and Section.  In the past, problem writers were freely allowed to expand this, and as a result, there are many overlapping parts to the taxonomy.

For the workshop, we selected 3 "Chapters" which included 5000 OPL problems (from single variable, differential calculus).  The participants worked in groups to revise the taxonomy for those chapters, then reclassified the relevant problems into the new taxonomy.

We have also introduced the notion of "level" to WeBWorK problems, and described 6 levels.  Participants classified problems by level as well.  In the development version of WeBWorK, one can now use level as a search criterion (on the Advanced Search part of the Library Browser), and there is an information link located there to describe the different levels.

Next, we went through problems looking for ones which were essentially duplicates, and ones which were very similar.  The criteria is

  • given two similar problems, if one cannot make a reasonable pedagogical argument as to why people would want each of the problems (given the existence of the other), then one problem would be flagged for removal.  
  • if we have a group of two or more problems where different people might want to assign different problems from the group, but they are all very similar, then they were marked as a "more like this group".

Mathematicians are often have very strong views on even minor differences in problems.  The OPL strives to be useful to everyone, but it cannot contain everyone's variation on a specific problem.  There will always be a place for people to make minor modifications to OPL problems to suit their courses.  So, in deciding if two problems are duplicates, we had to use some judgement: if only one in a hundred math teachers would need a particular variation of a problem, we marked one as a duplicate.  If we thought one in ten might want the variation, we kept it (and marked the problems as a more like this group).

When problem A is marked as a duplicate of problem B, problem A is replaced with a special "pointer file".  If someone uses problem A in a homework set, the student gets problem B.  Also, problem A will no longer show up in the library browser.

More Like This

In picking "more like this" groups of problems, we would also pick out a good example from the bunch and marked it as the leader of that group.  In a sufficiently recent version of the library browser, if a "more like this" group is encountered, only the leader is shown.  It is has an "M" in the list of action icons for the problem.  Clicking on the M reveals the other problems from the group (and the M becomes an L).  Clicking on the L hides all but the leader again.  The time to reveal/hide the more-like-this problems is very short, so teachers can easily peek at the problems to see if there are things of interest, but reduce the clutter of problems in general.

Locking the Taxonomy

As mentioned above, in the past the OPL Subject/Chapter/Section taxonomy could be expanded dynamically.  We plan to essentially fix it.  New problems contributed to the OPL will either need to be tagged using the existing taxonomy, or have approval from an OPL editor to expand the taxonomy.  The current version is stored in a file called Taxonomy, which comes with the OPL (it is next to the Textbooks file at the top of the OPL).  It is easy to read/write by both computers and humans.  It also specifies the order the entries will appear in the OPL menus, so they can be in a more logical order (in the past it has been alphabetical).


We will have several workshops to improve more of the OPL.  If you think you might be interested or have questions, contact Jeff Holt ( or John Jones (
Categories: Planet WeBWorK


Geoff Goehle - Fri, 06/07/2013 - 19:58
Hello everyone.  Another code camp has come and gone and I wanted to write a bit about what I helped out with at Ann Arbor.  My time was, to a large extent, split between three things:  continuing to polish and upgrade the math4 theme, designing the basic objects that will form the core of the next WeBWorK (or WeBWorK::Brewery as it is currently called), and finally prototyping a brand new addition to the achievement system. 

With math4, the biggest issue was getting the most frequently used pages of WeBWorK to validate as html5 when in the math4 theme.  This includes all of the pages that students can see, including the login/logout page, grades, achievements, Problem Sets, Problems, the Problem page and the Gateway Quiz page.   These pages should render more consistently across a wider array of devices and if you plug their html into the w3c validator you get a green bar which is not dissimilar to our own green bar.

  In addition to working on validation, I also put more twitter bootstrap scaffolding into the system.template file.  This will also help the pages render more consistently and allows us to use the bootstrap "responsive" functionality to make WeBWorK look better on phones.  For example, you can see below that when you use a phone to view WeBWorK the page layout is much more vertical and the side navigation bar is hidden.

One additional tweak worth mentioning is the new "Description" field for sets.  This can be edited on the Set Detail page (the page where you can define the set headers).  If you add a description to the text box and save, then it will appear as a tooltip whenever you hover over the set name on either the main Set List page or the HomeworkSetsEditor2 page.  This means that you can now use shorter set names, which look much better, while also having the ability to present a lengthier description of the set in a way that doesn't take up screen space. 

Moving on to the second project, I won't say much here about the results of our database discussion.  That is covered much more thoroughly in David Gage's blog post here and here.  I will mention that the notions of problem pools (a collection of problems from which each student will be assigned a random problem with a random seed) and teams/groups of students are core structures in the new database.  Also the system is intended to be modular enough that (eventually) administrators will be able to choose between several different types of database back-ends when they install WeBWorK.  The general vision is that the database back-end, the WeBWorK code, the PG code, and the web front-end will all be able to function relatively independently of each other and could at some point all be swapped out for alternatives.  The last thing I did was throw together a rough prototype of a new MathPets feature (too rough to show here).  The basic idea is that each student will have a little animated "MathPet" that lives at the bottom of the Problem page (and may eventually travel to other pages).  When they get a problem right or earn an achievement it "feeds" their MathPet and it will grow a little.  On the other hand, if they miss a homework set their pet becomes sad and may get sick.  Every time they earn a level (or at certain levels) their math pet will evolve into a different type of pet (and maybe even into one of several different options).  I think this idea is a lot of fun, but unfortunately it is one of those things which is really sold on the graphics.  While the code for this feature isn't too terrible, my artistic ability is minimal at best.  I will need help if I'm going to realize the full potential of this idea.  So if this feature sounds interesting to you, and you are or know of a good graphics designer that's willing to work on the cheap (i.e. free) be sure to let me know!
Categories: Planet WeBWorK

WeBWorK::AnnArbor, June 1-3, 2013

Michael Gage - Thu, 06/06/2013 - 13:58
Hello everyone.

We've completed another successful three days of concentrated development at the WeBWorK::AnnArbor code camp hosted at the University of Michigan.

As a result  we have a new translation of WeBWorK into Chinese, a new data/database model that will support new and oft requested WeBWorK features, continued work on our collection of turnkey modelCourses and a new version (2.7) of WeBWorK that will become WeBWorK's stable release in a few days.  We also have documentation of the upgrade path for existing WeBWork installations using the SVN repository to the Github repository so that existing installations can take advantage of the new features and bug fixes and more.

Read more »
Categories: Planet WeBWorK

MAA PREP workshop on Problem Authoring in WeBWorK has started

Paul T. Pearson - Wed, 06/05/2013 - 13:38

The first online workshop for learning how to author WeBWorK problems was delivered by Davide Cervone (Union College), Gavin LaRose (University of Michigan), John Travis (Mississippi College) and me (Paul Pearson at Hope College) this past Monday. The first workshop covered Perl and PG and how to write a basic WeBWorK question. There will be three more online workshops during the month of June covering topics such as MathObjects, problem authoring techniques, including interactive features in problems, and other advanced authoring techniques. The workshop has 40+ participants and is very full.

Categories: Planet WeBWorK

WeBWorK code camp at Ann Arbor

Paul T. Pearson - Wed, 06/05/2013 - 13:24

It was an intense and fun weekend for WeBWorK developers who attended the code camp at Ann Arbor this past weekend. I was mostly involved in the project to create a new WeBWorK model course for Ordinary Differential Equations. The people who helped me with editing and updating ODE’s questions from Miami University of Ohio were Barbara Margolius and Felipe Martins of Cleveland State University. Mahesh Agarwal of University of Michigan at Dearborn and Alina Duca of North Carolina State University worked on creating ODE’s problem sets with objectives (and pretty pictures!). I want to thank my ODE’s model course team for all of their help! With some luck and hard work, the ODE model course will be complete by the end of the summer. Also, if anyone is interested in helping create the ODE’s model course, please contact me (we could really use your help!). Also, Paul Seeburger of Monroe Community College worked on multivariable calculus questions that are multi-step problems (rather than just the final answer). He will submit these multivariable calculus questions to the WeBWorK Open Problem Library (WOPL) soon and I am hopeful that they will be incorporated into a model course soon.

Categories: Planet WeBWorK

WeBWorK:AnnArbor epilogue

David Gage - Tue, 06/04/2013 - 14:15

Well WeBWorK::AnnArbor is over and WeBWorK has grown in leaps and bounds… or at least it plans to.

Our group finished a data model that survived scrutiny by the rest of the participants. For those of you in the openwebwork community a link to an editable workflowy document of the data model is buried somewhere in the google doc for WeBWorK::AnnArbor.

With this model, the next iteration of WeBWorK will have some nice new features. One of the more interesting to me is the use of the strategy pattern. At the moment there are two places this is used, both in the Set object. The first will define how the problems are chosen (in terms of random seed, etc.) and generated. The second will determine how the Set and it’s problems are graded. Ambitious future users will be able to define their own strategies for these aspects of a Set and greatly increase the power of WeBWorK.

The other big feature is flexible tagging that will exist at almost every level of the data structure. The hope is that this will make creating and working with groups of objects easy for users. Implementing new functionality associated with tags will also be a powerful result, applying automatic actions to set groups of students for example. It will also give researchers a tool for filtering the massive amount of data that WeBWorK can potentially generate.

WeBWorK now has a new, and empty, BrEWerY repository where I hope to start building our new bouncing baby homework delivery system. For the moment we’re thinking the code base will remain largely perl. The overall system structure will be as modular as possible without going crazy.

The persistence layer of our data model provides abstraction between the database and the main WeBWorK programming API. The persistence layer can then be extended to support multiple types and configurations of databases, enabling users to pick and choose the database they would like to use (so long as the persistence layer supports it… or they’re willing to add that support).

The goal will be a WeBWorK that is extensible, and provides hooks for external applications into its data and functionality.

There was much talk this weekend of using WeBWorK as a tool to gather data about how students learn. We hope that whatever shape the new version of WeBWorK takes, it facilitates the research and progress of math education.

Categories: Planet WeBWorK

WeBWorK:AnnArbor DB day one

David Gage - Sat, 06/01/2013 - 18:14

Here’s our board at the end of the day!

The group so far is made up of myself, Danny, Eric, Brian, Geoff, Aaron, Mark, and Bill (apologies if I’ve missed anyone!). We spent the day descussing user stories, mostly back and forth between Danny, Bill, and Aaron, and doing our best to put together some concept of the under-riding data models that make up the atoms of all of these stories. Some of these stories are up on the WeBWorK Wiki page with more to come, as soon as people write them. I figured user stories would be useful, but I was still stunned by exactly how helpful they were in staying on track and getting a real grasp of what objects are being dealt with in WeBWorK.

Largely for my own reference this is the basic conceptual model, by Eric, of the portion of WeBWorK’s architecture that we are working on. At the moment we’re focused on the “Model” part of the structure. Essentially trying to figure out what things are in webwork, what they look like, and some of how they behave.

Below is the outline of our data models so far. Anything ending in () is a behavior of the model, A/B implies a kind of relationship, everything else is an attribute.

  • User
    • username
    • tags
    • contact/personal info
    • password
    • achievement info
    • addCourse()
    • joinTeam(course,teamID)
    • getTeams()
  • Course
    • start date
    • end date
    • state [open/closed]
    • addUser()
    • Course/Participant
      • tags
      • status [active/inactive]
      • getSets()
      • addSet()
      • description
      • getType
      • Course/User
        • permisions level
        • getGrade()
        • getTeams()
      • Course/Team
        • getMembers()
        • clone()
  • Set
    • Descriptive Info
    • tags
    • template for versioning
    • grading scheme
    • getProblemPoolList() enumerated
    • versioning information
    • grading Information
    • Set/Course
      • Due/Assignment/Answer Date Info
      • overrides for set data
      • IP Restriction Info
      • getAssignedParticipants()
      • Set/Course/Participant
        • overrides for set course data
        • getSetGrade()
  • Problem
    • id
    • .PG info
  • Problem Pool
    • tags
    • problems
    • get random problems()
    • get unique problem()
  • Team
    • student (list)
    • description
    • course
    • grade
  • Attempt
    • time
    • score
Categories: Planet WeBWorK

Achievement Items

Michael Gage - Tue, 05/21/2013 - 12:07

Hello everyone,  Geoff Goehle here on Mike's blog (again).  I wanted to write a post about a new feature which should be coming to the develop branch sometime.  Its the ability for the achievement system to reward students with "items" which they can use to change the parameters of their homework in a limited fashion, i.e. extend a due date or get partial credit on a question. I'll say more about what items are below, and will leave off with a quick description of how they are implemented.  
Read more »
Categories: Planet WeBWorK

Achievement Items

Geoff Goehle - Tue, 05/21/2013 - 11:33

Hello everyone,  Geoff Goehle here on Mike's blog (again).  I wanted to write a post about a new feature which should be coming to the develop branch sometime.  Its the ability for the achievement system to reward students with "items" which they can use to change the parameters of their homework in a limited fashion, i.e. extend a due date or get partial credit on a question. I'll say more about what items are below, and will leave off with a quick description of how they are implemented.  

In the current set-up students get an item every level.  Each level gives a different item and each item can be used once.  Students can see what items they currently have, and use those times, by visiting the existing Achievements page. The below screenshot shows the achievements page in the background (with the updated snazzy math4 theme) and the popup for using an item in the foreground.

The items that students can earn, and a description of what they do follow:
  • Lesser Rod of Revelation - Gives a student an automatic 50% on a single homework problem.
  • Greater Rod of Revelation - Gives a student an automatic 100% on a single homework problem.
  • Box of Transmogrification - Allows a student to change the source file of a single problem to that of a different problem on the same homework set.
  • Potion of Forgetfulness - Resets the incorrect attempts counter to zero for a single problem.
  • Cupcake of Enlargement - Doubles the weight of a single problem on a single homework set (usually from 1 to 2).
  • Ring of Reduction - This uses the reduced credit system to allow a student to extend the due date of a currently open homework set by a certain amount of time (usually 24 hours), but for reduced credit.
  • Tunic of Extension - This allows a student to extend the due date of a currently open homework for 24 hours for full credit.
  • Cake of Enlargement - This doubles the weight of all of the problems on a currently open homework assignment.
  • Scroll of Resurrection - This reopens any homework set (even a closed one) for an additional 24 hours.
  • Mystery Package (with Ribbons) - This simply displays a message to students and can be used to do anything from giving away physical rewards to simply saying congratulations.
There are a couple of ideas driving this feature.  The primary one is that it would be nice to reward students for leveling.  Since we cannot simply "give" them additional mathematical ability an alternative is to instead give them the ability to affect their grade/homework in some way.  I had been using a simple extra credit scheme, but this seems more interesting.  Secondly, Webwork can be frustrating for students and, while the net effect of all of these items on a student's grade will be relatively minor, the ability for students to get a little extra time on a particularly tough homework, or to skip a problem that they just can't solve will hopefully go a long ways to alleviating said frustration.  In general (with the exception of the "Rod of Revelation" items) I've tried to make items which encourage students to put extra work into a homework, or reward them for work they have already done.  Of course, not everyone will want to use this system, which is why it is optional.  Achievement Items will be turned off by default.  In order to turn them on you should enable the achievement system and in the course.conf file set the parameter $achievementItemsEnabled = 1.   In addition you will also need an updated set of level achievements.  These may already be included in the default list, or you may need to download them from here.  (You can tell by clicking the edit icon next to one of the level achievements.  If there is a message about earning an item in the "description" field then you have the latest version.)  This should be enough to get you started with the default setup.  For those interested I will describe more about how the achievement item system works below. Achievement Items are actually subclasses of the WeBWorK::AchievementItem class.  In order to make an achievement item you need to do four things
  1. Create the subclass and the constructor, including the achievement item ID, the name and the description.  These are all kept in the file.  The name and description can be whatever you want them to be, but the ID should be the same as the name of the subclass.  You also need to to add the ID to the constant list at the beginning of the file.
  2. Create the print_form function.  This outputs all of the fields needed to collect the information needed to use the item.  For example, for the Rod of Revelation item the form prints two dropdowns.  The first is a list of open sets and the second is a list of problem numbers.  The problem numbers are kept in sync with the currently selected set via javascript.
  3. Create the use_item function.  This should use the information gleaned from the forms in the previous function to actually implement whatever the item does.  For the Rod of Revelation it simply calls up the appropriate userProblem object and sets the score.   In addition this is where you "remove" the item from the students "inventory".  The system uses the hash in the globalUserAchievement object to keep track of what items a student has.  A student has an item if the $globalData{"Item ID"} is set to one.  The use_item function should set it back to zero.
  4. Choose how the item gets rewarded.  Generally this will be through an achievement, either a level or a normal achievement.  All you need to do is set $globalData{"Item ID"} to be 1 in the achievement code.  You should also change the description to let the student know they earned an item.
Unfortunately, as you can see, right now you need administrator access to create/change achievement items and doing so requires the usual server restart.  If there is interest then a possible future project would be to modify the system so that achievement items are defined using files stored in the templates folder and as such would be editable by instructors on a per course basis.  There are also other possibilities.  Achievements Items could be set up to have multiple uses and there is definitely room for clever/interesting ideas for new items.  
Categories: Planet WeBWorK


Subscribe to WeBWorK aggregator - Planet WeBWorK