Skip navigation
All People > Don Bryn > Don Bryn's Blog > 2017 > October > 16

Don Bryn's Blog

October 16, 2017 Previous day Next day

I am tasked with testing students who are incoming to the music theory program at my college.  In the past, all students had to take a paper test when they auditioned for the school, but the audition day was long and tedious, and students tend to trickle in over the summer so appointments for testing had to be made throughout the summer.


Since I am taking over the testing, my goal was to make this an online test so students could take it anywhere, anytime.  First step was to create the test, but then we hit a big obstacle:  The students weren't yet students of the college so I could not register them to take the test! 


Since these students are not yet registered students at our college, they do not have school email addresses.   And without school email addresses, I cannot add them as students to our institution's instance of Canvas.   I realized the way to do this was via the Free-For-Teachers account.   With some help from tech-support (thanks Dale Drees & John Ewing). we managed to get the settings correct and now we have a convenient, online test that students can take anytime, anywhere.


It was important to make the course public, and email detailed instructions to all incoming students that included a link to the public course.  Once students create a canvas account and join the course, I can easily move them in to groups based on their join date and then set test due dates based on the join date.  I can also post information about ways to catch up if their test scores don't qualify them to take the first college theory course.


The biggest issue with this method is that I tend to have to 'chase down' students via email and phone to remind them of deadlines.   And since they are unfamiliar with Canvas, they don't set their preferences to receive notifications in a timely manner.  So I resort to using regular email and phone, but overall, that's not too much work--and probably not more work than having to chase them down to take paper tests.


So Free-For-Teachers really made a difference to our program.  It's the only way to get un-registered students access to Canvas.

By using PHP, you can turn this:

Screen Shot 2016-06-07 at 10.12.57 AM.png

into this:

Screen Shot 2016-06-07 at 9.51.10 AM.png




If you need to create content that is impossible to create in Canvas, you have some options.  There are some external LTI's that might insert the content you need, or possible SCORM, or the option described in this post:  PHP.  This post is not meant to teach you PHP, simply to show some possibilities.


PHP is a server-side scripting language.  That means that the content is at least partially created on-the-fly by the server hosting the web content.  It is possible to create the same content using only HTML, but each question, page, etc, has to be created individually.  By using PHP, you can create huge amounts of content in a fraction of the time by simply passing the information specific to each question or page to the server.  The content that stays the same on each page or question is created by the server at the time the web page is created.


I already know PHP, so this was quick for me, but I realize this solution is not for everyone.  However, it really was the best solution to create the massive amount of content needed for my courses.


Three Main Advantages:

  1. Ability to add content not handled easily or gracefully in Canvas.
  2. Ability to separate common content from question-specific content.
  3. Ability to style content.


1)  Canvas has limitations that prohibit or limit certain types of content and formatting.  For example, in order to insert the mp3 links into the question above, I had to add my mp3 links to a content page, enter the html editor, copy those links, go back to the question editor, enter the html editor, paste those links.  That's a lot of steps to repeat for 700 questions!  And you can see that the question is not easy to navigate and definitely not intuitive for students.


Using PHP, I can use traditional web technologies like javascript , CSS3, and HTML5, allowing me to use things like the media player seen in the second image above.  This allowed me to save a lot of space on the webpage.


2) Changes to one PHP page on my server will affect every one of the 700 questions in Canvas.    In other words, I am able to separate content that is specific to each question from content that is common to each question.   If I decide there are too many animations, it's a simple fix to turn them off and then they disappear in every question.  Only information specific to each question is needed in Canvas.  Everything else is stored on my own server and created via PHP.


3) Styling allows me to control placement of specific elements on the page much more precisely--an important point for creating music questions.  One of the reasons the use of CSS styling is limited for designers is that it can be very dangerous if you are not careful.  Fluid layouts are important in designing for all the different devices on which content will be viewed, and it can get complicated very quickly.  Your page might look great when you design on your desktop computer, but how will it look when viewed on a phone or a tablet?  I usually use jQuery to ensure all of my scripting is cross-browser compatible and test my CSS on various devices.


Two Main Disadvantages:

  • You need your own Secure PHP server to host your pages and content.
  • You need to learn PHP (and any other web technology you wish to use).


My own example:

In order for students to practice ear training, they need drills.  They need to be able to practice random intervals over and over, seeing the answer after each question.  Then at certain times in the semester, they have to take an ear training test where they don't get the answers.


So my task was to create an ear-training drill as well as ear-training quizzes.


The ear-training drill is literally impossible in Canvas because it is necessary for students to see the correct answers after each question, as well as hear the interval again after the question has been answered.  I couldn't find a way to do this unless the quiz only contained one question and the students kept submitting and restarting the quiz.  And even then, the layout of the question was so complicated that it would have made it difficult for students (see first image above), not to mention the difficulty in creating each question.  So my only solution was to create the drill on my own and place it into canvas as an iFrame in a content page.


So I basically created a web app that runs an ear-training drill then inserted it into a canvas page.  I was able to use all of the regular web-design technologies like scripting and animations.  The student selects options for the drill, which causes the page to request JSON lists from the server based on their selections.  Then a drill is created that supplies random questions based on those lists.  I have tried to insert the app here as an iFrame but evidently we are not allowed iFrames in blog posts.  You can see the app inside a canvas page here:  (I really recommend taking a look.  The animations are fun).


The next task was to create a quiz.  This would be more difficult because my web app cannot pass score data back to Canvas.  So that means I have to use Canvas' own quiz engine, which personally I don't like because of it's restricted options.  I understand the restricted options I guess, because it needs to be simple to use to make it accessible to a wide range of users, but if you are accustomed to seeing and creating web content, it is severely limiting.  Specifically, selects in Canvas are always set to a minimum width of 26 (I think) characters.  That means they take up way too much space on a web page, especially if placement of content is important.  In music, the placement of answers is often very important in relationship to the content, though it was not as important in this type of question.


So the solution was to use part of the web app and insert it into the Canvas questions, but still use Canvas' native selects for answers.  That is the 2nd image you see above.  Canvas simply holds an iframe whose source points to the php page on my own server.  This source includes the content-specific information needed by the php server to create  the question:  interval type, clef, starting note.  The php then creates the question.


Voila, it all works.    The final step I had to take was only to create .qti files for each bank--a process that is getting very quick using a good text-editor (I use Textwrangler).  Most of the work is done starting with a template .qti file and using find/replace to change options.  The only part that takes much time is the first file created for each interval where I have to manually change the answer to each question in the bank.  This is still a much faster method than using Canvas' GUI.


The future:

I'm really banking on Canvas providing better support for SCORM because I would like to eventually use the web app and branches of the app to directly supply scores to Canvas.  For this to really be useful, SCORM content would need to be able to be copied between courses, so please vote for that here:



While creating all the necessary content for this large a question bank is still time-consuming, creating the actual questions is not.  And in the end it saves a lot of time for me during the semester as Canvas can automatically grade quizzes I had to manually grade in the past.  AND, because I'm using PHP, changes are very simple to implement.  I just change one PHP page and it populates all of my questions.


If you need to do more than Canvas is capable of providing with the current quiz engine, PHP might be a great option.


If you feel that PHP is too overwhelming, please see my other blog post about the advantages of using iframe in your design:  iFrames are your iFriend

It wasn't until after creating quite a few quizzes that I found a couple simple ways to save time.   So I'll share in case they can save someone time right from the beginning.


If you want to quickly check over the answers in a quiz:

  1. In quiz settings, check "let students see answers" and uncheck "show one question at a time".
  2. Preview the quiz.
  3. Submit the quiz - Canvas will tell you all the answers are blank, but click OK anyway.
  4. Now you can scroll down the page and see all the answers.
  5. Don't forget to go back to quiz settings and set the quiz back to how you want the students to experience the quiz.


To quickly organize questions in a long quiz:

When editing a quiz with a long list of questions, you can move questions more quickly by using the keyboard navigation buttons.


  1. "grab" (click and hold) the question you wish to move.
  2. WHILE STILL HOLDING the question, hit any navigation key on your keyboard.   For example, to move to the top of the page, hit the "home" key.
  3. Make sure the question is where you want it and let go (release the mouse).

This works for "home", "end", "page up", and "page down".  The navigation keys can move you much faster than the mouse scroll wheel.


For example, I was creating a long quiz and then adding instructions from question banks (for creating reusable instructions, see this post: Reusable Question Instructions).


The first set of instructions needed to go to the top of the quiz, so I could grab the instructions, hit "home", and release.   Much faster than scrolling the mouse all the way to the top while trying to hold down the mouse button.


The final instructions needed to go up 10 questions out of 50.   On the first quiz I learned that if I hit the "page up" key 8 times, I was very close to where I needed to drop the instructions, so for every quiz after that I could place the instructions very quickly.   Saved on finger-cramps too!


Whenever possible, use question banks for each quiz.


This is easier to explain if I start with an example.

All of my questions already exist in question banks.   I need to create quizzes that pull questions from various banks to match a textbook.  The real problem with this is that you can't see which questions you are selecting in the popup list, so you end up having to open multiple pages and try to count down to which question you need.


Slow, labor-intensive method:

  1. Create a quiz, click on "questions" and then "find questions."
  2. Scroll through the question banks and notice that there's no way to see which questions you are selecting on the right side of the selection box (unless you've taken the extra time to title hundreds of questions in your banks).
  3. Open the question banks in another browser window, select the question bank you need for the current question.
  4. Count down from the top of the page to find the question you want.
  5. Go back to your quiz creation page and count down the same number of questions you counted in step 4.
  6. Hope you clicked on the correct question. (You won't know until you're done and can preview the quiz).
  7. Repeat for every question you need.


Faster, easier method:

  1. Go to your question banks.
  2. Create a new question bank, titling it the name of your quiz.  Make sure you start your title with a space or underscore so it stays at the top of the list.
  3. Click on the question bank holding your first question.  (I usually Command-click on each bank I'll need so they open in new windows.  Then after I've selected the questions I need from that bank I close the window.)
  4. You'll want to add the questions in the order you want them to appear in the bank, unless you plan on scrambling the questions.
  5. Find the question you need and click "move/copy question to another bank".
  6. In the list of banks that opens, select the quiz bank (should be at the top of the list).
  7. As long as you continue to select questions from that same bank, you can move quickly as Canvas won't need to repopulate the list of question banks in the popup window.
  8. Continue until all of the questions you need have been copied to your new bank, then go back your question banks and select the new bank.
  9. Remove the blank or underscore from the title of your bank.
  10. Go back to quizzes, create your quiz.
  11. Click "Find Questions" and select the question bank you created above.
  12. Click "select all" and "No Group", then click "add Questions"
  13. Finished.


In my question banks I end up with a question bank for each quiz, with a matching title.  It's more banks than I need, but it solves the problem of trying to find the correct questions in a list that doesn't show any question text.


The main drawback with this method is that the questions are no longer linked to the original banks.  So if you update the original questions in the original banks, they will not update in the banks to which the quiz links.  This result is the same as if you had followed the first method above, which the exception that you will still have your hair instead of pulling it all out.


Here is a way to create instructions that can be re-used in quizzes many times.   Using this method means you are also able to update the instructions in one location in Canvas and have them updated automatically in any quiz that uses those instructions.  This is also useful if you're creating quizzes but haven't quite decided on the best wording for instructions yet.   You can insert the instructions now, then come back and edit the instruction bank later and have it update through all of your quizzes.


1) First, create a question bank in a sandbox course.   Title that question bank with the title of your instructions.   I start my instructions with an underscore so I can recognize them right away.


2) Create ONE question in that bank of the type "text (no question)".   Edit the question, entering your instructions how you would like them to look.


3) In any quiz in which you want to place the instructions, add a question group.  In that question group, select 1 question worth 0 (zero) points.  LINK the question group to the bank you created above.  Once you add the group, you can drag it to where you want it in the quiz.


4) You're done.   If you ever want to edit the instructions, just go back to your question bank and edit that question.  It will be updated in any quiz that links to those instructions.



I often have similar quizzes with groups of questions organized like this:


"The following intervals are Ascending Melodic intervals.  Label the interval and select the correct note using SPN"


[Questions 1 through 5]


"The follow intervals are Descending Melodic intervals.  Label the interval and select the correct note using SPN"


[Questions 6 through 10]


"The following intervals are Harmonic Intervals.  Remember that the given note is the bottom note.  Label the interval and select the upper note using SPN."


[Questions 11 through 15]


"The following intervals are cumulative.  This can include any intervals you have practiced up to this point.   Remember that for harmonic intervals, the given note is the bottom note.   Label the interval and select the upper note using SPN."


[Questions 16 through 25.]


So in my question banks I have 4 banks with the following titles:


__instructions Ascending

__instructions Descending

__instructions Harmonic

__instructions Cumulative


I add them to every interval quiz and drag them to the appropriate location in the quiz.   If I ever want to change the wording or add more instruction, I just edit the question banks.

While there are still a few steps to have a truly seamless teaching experience solely with an iPad and a projector, much is possible already.  I no longer carry textbooks, use applications on slow-moving shared computers, and have minimized the amount of paper I give to and receive from students.  As an added bonus, a portion my grading time has been reduced by moving any assignments than can be auto-graded into Canvas.  This is an overview of the components I've used to far to make this happen.  I'm still looking for ways to streamline and improve, so please share your ideas!


First step: iPad

You'll need an iPad.  I happen to have two for my other work, one being an iPad Pro, which I really like using in the classroom.  Having two iPads is not essential, but a good plan in case one loses battery or doesn't work for any reason.


2nd Step:  Projection.

I guess not every teacher will need this, but I find it essential.   I project textbook pages, Canvas pages, Youtube Videos, and other odds and ends.  It's very useful for leading students through technology, like using Canvas.  It's great when a student says, "that page wasn't in Canvas" and I can just hit a button and display it on the screen!   No more lame excuses. . .


This step took some work because the projectors in our class are not airplay compatible and the school is not going to buy new ones.  Our IT department has shown me new teacher podiums with all the latest tech that can project using an AppleTV, but the quote to upgrade our podiums was $12K.  So that is not going to happen soon.  And it doesn't REALLY make it simple because you still have to have the Apple TV in between.   Epson makes some projectors that are advertised to work with iPad, but so far reviews are still sketchy.  It seems they don't actually support airplay so you still have to sign in to them as if you were logging into a remote server.


ANYWAY, the solution we came up with was to install AirServer on all our teacher podium PC's.  It still means I have to boot up and log into the school's snail-pace PC, but once it's running using Airserver is a snap.   I tell Airserver to show a UPC symbol, launch the Connect app on my iPad and scan the UPC code and then I'm set.   All during class anytime I want to display anything on the screen I just swipe up on the iPad and select airPlay.    Just turn it off again when I'm done.


The other great thing about this is that it's a mirroring app--it can display anything I can display on my iPad.


3rd Step:  Textbooks

Thankfully most publishers are catching on to the eBook idea.  The still-annoying catch is that they like to use different formats and apps.   So I have most of my textbooks in the VitalSource Bookshelf App.  A couple others I have as ePub or pdf and those are in my iBooks app.  At least I don't have to change apps during class.  It's very useful to display examples from textbook pages to students in class.


4th Step:  Canvas

This is where it gets interesting and useful.  I use Canvas as the backbone to my entire course.  Both myself and the students live by the course in Canvas.   That means that everything I need to teach the course is built in Canvas, including lesson plans, assignments, quizzes, due dates:  everything.


This is what a typical module looks like to me:

Screen Shot 2016-08-17 at 1.11.26 PM.png


And this is what it looks like to the students (This is still grayed out because they haven't completed the pre-requisite):


Screen Shot 2016-08-17 at 1.27.42 PM.png


So my lesson plans are unpublished so that students cannot see them.   They are all dated and in date order with assignments.  I create an assignment group worth 0% of the final grade and put all the class outlines in there.   I number the class days so that when I copy the course to future semesters I can adjust them in the Calendar. (That process is still not easy in Canvas, but that's a different topic for discussion here:  Dealing with Dates in Canvas needs some love).  It also helps me keep track of where I am in the semester.  If I get a little ahead or behind I always know where I am in terms of number of class days left.


The great thing about these lesson plans is that I can walk into class, open my iPad to Canvas in the browser, and look down the dates to see where I am.   I open the lesson plan and know what I need to cover today, then just click next to see what's next for the students. I can also embed anything I might need to teach that day, like a video (or a link), or sometimes even a page out of a textbook.


The assignments and quizzes are all published and assigned dates.  I can make it easier for students to see by using indentation to separate instruction pages, ungraded assignments and graded assignments.


I have another course in which the exercises are all online on the publisher's website, but the instructions are not.  So I have created instructions and explanation pages that the students can see and to which they can refer when they are working on assignments at home.  Besides some page titles being cut too short in the list (see this discussion:  Allow wrap-around text for content items in a module), it's easy for students to see which pages are instructions, which are practice assignments, and which are graded assignments, as well as due dates.


Screen Shot 2016-08-17 at 1.19.06 PM.png


The main point being that just about anything that I use to teach can be embedded in a page in Canvas.   I no longer have to carry books, papers, or remember links.   Publishing allows me to control what students see, so I can include pages just for myself as well as pages for students to see.  The down-side is that an assignment category--even worth 0% of the grade and unpublished--will appear as an assignment group in the gradebook.  That means students see an empty 0% column called "Lesson Plans".


HINT:  if you want to display a complete pdf in a page, you can store the pdf on a server somewhere (Your own or Amazon), and link to it in an iframe.  If you set the size of the iframe to the size of the pdf, it will display as a complete page and won't be loaded in the "panda box" when you just link to a pdf in the course files.  I've found the Panda Box to be too small and you have to scroll around too much.


I can also give the students hand-outs without actually having to hand them out.  This is an example of a page that is a reference for piano students.  I do not have to hand this out in class anymore.   They can see it in canvas and have the option of viewing it there or printing it out.


Screen Shot 2016-08-17 at 1.25.20 PM.pngScreen Shot 2016-08-17 at 1.25.10 PM.png


5th Step:  Assignments and Quizzes.

This is the step that still needs the most advancement in technology.   There are many types of quizzing that are still either difficult or impossible in Canvas.  I have hopes that some of these will be made possible in the new quizzing engine, but because I teach music which is a very specific discipline for the way notation is used, there are still limitations on the overall technology available.   That's a topic for another blog post.


Still, I have placed as many types of questions as possible into Canvas.  Anything that can be answered with a select (drop-down) I have managed to put into question banks.   I've resorted to creating online apps for ear training for intervals and dictation, as well as banks of theory questions in Canvas so students can practice as much as they want.


For quizzes, I have even put some of the in-class aural quizzes into Canvas in an unpublished state so I can give the quiz from my iPad.  In the past I would have printed out the teacher version of the quiz and played the examples myself or from a youtube video.  Putting the quiz in Canvas means it will sound exactly the same every time, and I can administer from my iPad.  I've also put reminders in Canvas to remind myself to send student quizzes to the campus printer a week before they occur.


I guess this took a lot of time and effort to prep, but because courses can be used over and over, I have save myself a lot of time and effort in the future--both preparing material for students AND grading.


My goal is to use technology to make courses as straightforward and sleek as possible, for both myself and students.  I want to be able to reuse resources and use technology to handle any tasks that don't require intuitive brain work:  like grading questions with exact answers.  I also want to be able to reduce the amount of natural resources used (paper), expand the opportunities for students to learn and study, and make it interesting and as enjoyable as possible for students.  And ultimately, I don't want to carry books around anymore!


If this helps anyone or if anyone has more suggestions to accomplish these goals, please post!

Don Bryn

iFrames are your iFriend

Posted by Don Bryn Oct 15, 2017

Hopefully these images will catch your attention enough to read more!!  Screen Shot 2016-06-21 at 8.06.26 AM.png    I'll explain more below.These pictures show the SAME page inserted into canvas via an iFrame.Each one is displayed with a different theme which the students can select and change on the fly.

Screen Shot 2016-06-21 at 8.06.46 AM.pngScreen Shot 2016-06-21 at 8.06.58 AM.pngScreen Shot 2016-06-21 at 8.07.13 AM.png


If you want to see more without reading, there is a link to an example course below!


Why I Use iFrames

I recently wrote a post called "using PHP in your designs" that was probably jumping in the deep end for many people.  As I've been using my new approach, I realized that the most important step wasn't PHP, but just the fact that I was using iFrames in my page and question design.


An iFrame is simply an HTML element that holds a webpage inside another webpage.  Because it is a webpage, it can be designed like any other webpage--anything you see out there on the web is possible.  All of those cool styled web pages with animations, media players, links to databases, etc. .  ANYTHING is possible.  And Canvas allows iFrames!


In my quest to design in ways that just weren't simply possible in Canvas, an iFrame was the perfect solution.  Since the iFrame can hold content from any secure server, it is not bound by the rules that limit Canvas.  Canvas has limitations on HTML (regular webpage language), CSS (webpage styling language), and Javascript or other scripting languages.  None of those limitations apply to your iFrame.


There are a couple drawbacks to using iFrames that made me think hard about the idea before implementing it.  One was that I had to host all my own content on a different server.  That wasn't much of an issue for me because I already pay to host my own webpage with unlimited storage and access.  The second was that the size of an iFrame is always hard-coded.  In other words, while your content inside the iFrame can be flexible as the browser window is re-sized, the iFrame itself cannot.  This can result in scrollbars in your iframe.  If you are using your iFrame in a page, this can be overcome because your iFrame can fill the whole page.  But if you are using the iFrame in a question then size has to be carefully planned because the page will also hold other content handled by Canvas.


It is also impossible at this stage to pass any sort of answers or grades back to Canvas.  So I am reliant on Canvas' user interface for any type of answer boxes.


For me, the advantages far outweighed the drawbacks, so I jumped in and I'm very glad I did.  I will as much design as possible outside of Canvas and insert it via iFrames from now on.


There are other advantages:  It's much easier to re-use content when hosting it on my own server.  Using PHP is especially useful in that case, but even without PHP I can copy bits of pages around without having to work inside the tiny HTML editor in Canvas.  I also am not worried about future changes to Canvas (or if my institution ever decides to stop using Canvas) because my content is not stored in Canvas.  It is forever my own.


What is Possible with iFrames

I stated above the ANYTHING that is possible on the web is possible in an iFrame.  In other words, if you can design a webpage,  you can do this.  You don't need to be as complex as what I've done.  If you ever come across something you want to do in a page or question that you just can't accomplish directly in Canvas, most likely you will be able to do it in an iFrame.


The main chunks of web design that I wanted to use were:  CSS and Javascript.


CSS is the styling language of the web.  It determines the, position, size, and much more for each element in a webpage.  This is probably the most useful advantage of iFrames for designers.

Javascript is used for anything active in a webpage.  Scripting handles things like animations, changing elements on the fly, user interactions, and hidden functions like keeping a score in a variable.  I find this to be extremely useful, but has a much steeper learning curve for a designer.


The end of this post is just meant to show off some of what I've accomplished.  Hopefully it will give you some ideas of what is possible by using iFrames in Canvas.  I will post pictures, but you can explore the content interactively by visiting this course:  That is the only way to experience the animations.  AND, even if you are not a musician, you can feel free to click around, choose incorrect answers, whatever you like.


Pushing Canvas into the future

I realize that one of the advantages of an LMS is keeping interaction and interface simple.  There needs to be simple (and foolproof) ways of designing content in Canvas.  However, I would also like to see the capability to incorporate more advanced design capabilities for those who have the capability to use it.


This could be something as simple as providing variables that can be used inside the iFrame to pass answers back to Canvas--something like the way we use brackets to place answers for multiple drop-down questions.  I realize the Canvas developers would also have to provide code and an API for interacting between the page and the iFrame.  But just think of the possibilities that would be available if I could not only design my questions in full HTML, CSS and Javascript, but also pass the answers back to Canvas for grading!!    I would be able to design literally ANYTHING I wanted for questions and quizzes.  And by reserving the actual grading functions to Canvas, there is no concern that my iFrames will mess up the gradebook or student data.


Maybe I'm just dreaming. . .



Each drill has an area for the student to select the options they would like to drill:

Screen Shot 2016-06-21 at 9.54.24 AM.png

The drill (and questions) show the starting note and buttons to select which instrument they would like to use to play the example (The player in this picture is playing the string sample):

Screen Shot 2016-06-21 at 9.51.21 AM.png

Upon answering, they immediately get feedback:

Screen Shot 2016-06-21 at 10.18.24 AM.png

And some fun facts:

Screen Shot 2016-06-21 at 10.17.33 AM.png

When they get it correct, the score is updated:

Screen Shot 2016-06-21 at 9.58.09 AM.png


In quiz questions, the students do not see feedback, and the scoring is done by Canvas.

At any point they can change their selections for the drill and start over.


Most interactions are animated:

Screen Shot 2016-06-21 at 9.49.36 AM.png

I realize that animations and fun facts are not integral to the task, but in these days of video games and web surfing, fluff can play a role in getting students interested.


Finally, students can change the theme of the drills and pages on the fly.  The style can be selected via the upper left menu on any page (including quiz questions):

Screen Shot 2016-06-21 at 9.51.51 AM.png


You can see each of the 4 styles I've designed so far in the screen shot above.  The new theme is automatically applied without reloading the page.  This theme will also apply to all future pages until changed via the menu.


Thanks for reading!



Each semester, courses must be copied to new courses and during this process it takes about an hour per course to edit dates for each individual assignment, even using the calendar (isn't it annoying the way the calendar keeps reloading every time you move an assignment?).  Canvas just does not have the tools necessary to edit dates easily.   


James Jones previously created a google sheet that allows us to import dates from a canvas course, manually update them in the spreadsheet and then export them back to Canvas.   You can find instructions in his document  Adjust All Assignment Dates on One Page.  This is much better than any method available in Canvas, but still requires repeating the same process for each course, even though the dates are exactly the same.  Thank you, James for allowing me to use your work and just add some more functions to the sheet!



Each semester has the same number of class sessions.

Every assignment, quiz, or class plan is attached to one of those class sessions.

In theory, we should be able to schedule Class Sessions and have assignments line up based on their attachment.



SessionDateCanvas Assignment
Session 1Jan 8 2018 Class 1
Session 2 Jan 10 2018Class 2
Assignment 1 due
Session 3 Jan 12 2018 Class 3
Quiz 1 due



Create a 'hook' inside each assignment/quiz that can hold the session number.

After importing the course into the google sheet, apply a LIST of class sessions based on the 'hook' in each assignment.


Or explained another way:  Every assignment or quiz in Canvas requiring a date gets a number matching the class session in which it occurs.  If it happens first day of class, it gets the hook 'session 1'.   If it occurs the 2nd week on the 4th class session, it gets the hook 'session 4'.


OK, I realize this is probably complicated to explain.  But if you have to copy a lot of courses, stick with me and I promise it will save you time in the end.



Go to this google sheet and copy it to your own Google drive:  Canvas Bulk Date Editor - Google Sheets 


Step 1:

In your course in Canvas, open every assignment or quiz that has a date attached and place the 'hook' in the description/instructions.   The hook is the word "session" plus a number.   Neither capitalization nor leading zeros matter.  You can do this quickly if you copy and paste, just changing the number as you go.  This is the most time-consuming part, but certainly doesn't take longer than the usual method and you will never have to do this again!

If you want to make is small and unobtrusive, use the HTML editor and paste this at the top:

"<p style="font-size:8pt;margin-top:-3px;margin-bottom:3px;">session 1</p>"  

In theory you could hide it in an html class if you did not want it to be visible. It really doesn't matter what it looks like, just that it is there at the top.

Picture of Canvas Quiz with the 'hook' circled.



Step 2:

In the Google sheet, you will find the first sheet, called "Dates", where your course data will load.   The sheets following are where you will store the lists of dates for the class sessions.  Use the ones I created or create your own.  You can add or delete as many as you want, but each one must be titled "sessionDates#", with the '#' being replaced by a number.

Image of the sheet titles, with a circle pointing out the sheets with the title "sessionDates3"


In each of those sheets, place a title in cell 1A of each sheet.  This title will not affect anything in Canvas, but will ensure you use the correct list later.

As an example, I used the following titles:

"MWF" for my Monday/Wednesday/Friday classes

"TR" for my Tuesday/Thursday classes

"Full Term Weekly (Mondays)" for my online classes that have assignments due every week.

"2nd Half Term Online (Mondays)" for my online classes that only run half a term.


Fill column 2 with the dates of each class in the semester.  Use the format "(d)d/mm/yyyy".   

Column 1 simply keeps a tally of the number of class sessions, so make sure that list is as long as the list in column 2.


Picture of a sessionDates sheet with the title circled


Step 3:

Follow James' instructions for connecting to a course and loading the data.   You should notice the first column now contains your session numbers.  

Notice in my screenshot how session 1 only has 1 class plan, but day 2 has a class plan, 2 assignments, and a syllabus quiz.   Those four will all end up with the same due date (2nd day of classes).

Picture of the Session column with the header circled

Step 4:

From the Canvas menu, select "Apply Session Dates"

Picture of the Canvas Menu with "Apply Session Dates" circled


You will be presented with a dialog box with your options:

  1. Which set of session dates you want to apply (BLUE in the screenshot below).   These are the lists from the other sheets and will use the titles you used in each sheet.
  2. Which column you want to alter (YELLOW).  You can choose whether to apply the new session dates to the due date, available date, or one of the other date options. 
  3. Whether to change the TIME along with the dates (RED).  If you keep 'no' checked, all of the changed dates will keep their original due times.  If you choose yes, you will be able to select a new time which will be applied to ALL assignments.
  4. The obvious cancel and submit buttons.   Once you click 'submit', the dialog box will go away and you will see all of the dates in your selected column change to your new semester dates.


Image of the selection box with sections circled in corresponding colors to the instructions.

Step 5:

I recommend looking over the dates and then looking over them again just to make sure.  There is one great thing about this method:  If you make a mistake like entering an incorrect date in a list, you can just do it again after you fix the list! Because your session 'hooks' are permanent, you will never lose the possibility of bulk altering the dates again.

From the Canvas menu, select "Save Due Dates".   It will take a few minutes but the new dates will show up in your course.   You can easily look in the calendar to make sure they are lined up exactly where you wanted them to be.


Step 6:

Repeat for as many courses as you need.   Now that you've entered the session numbers in Canvas and the semester dates in google, it only takes a couple minutes to update a course.  This saves me at least 6 hours of work each semester.  


From here on out, the ONLY place you have to edit the dates for your courses is in this one spreadsheet in the session date lists.   Then you can apply them to all of your courses in just a few minutes.   Woohoo!


I hope some of you find this useful!

Let me know of any issues or requests.  I will do my best to help.


171016: Bug Report:   FIXED!

Don't use this in production just yet, though you can play around with it.  Just don't "Send Due Dates".   The date formatting is being applied to the Published column, which unpublishes all the assignments in Canvas.  Will work on this today.