GitHub Classroom

I want to be known as the king of software-development tools!!!

Just discovered GitHub Classroom.

I’ve been having my students develop and submit their software to me via git and GitHub for several years.

Students can apply to GitHub for an educational account which will give them unlimited private repos.

In the past I would then have the students invite the graders and me as collaborators, so that we could then clone their repo and grade it.

GitHub classroom makes that last step unnecessary.

You create a GitHub Organization, attach it to GitHub Classroom, and then apply for a discount on repos for that organization.

I got the discount in about a day, and I now have unlimited private repos in that organization for my students.

The graders and I are now automatically co-owners with the students of all the repos, and we can now avoid the hassle of getting many, many requests for collaboration.

GitHub Classroom

Written on September 13, 2016

Canvas Quizzes

I create daily quizzes on Canvas.

When I do there are several settings that I choose.

It gets tedious to re-choose those settings every time I create a new quiz.

Instead, I create a blank quiz with those settings, but no content, yet, and then export that quiz.

I later import that blank quiz and just fill in the content.

Written on August 30, 2016


When Bruce gave me CS373: Software Engineering to teach in 2008, he asked that I make my students aware of the various software-development tools used in industry.

I barely knew any, but I’ve learned about many of them from my students and sometimes from the guest speakers from industry that have visited.

I’m now currently using the following:

git and GitHub for source control: I also now use this as a substitute for the old turnin program. Students provide us with a git SHA and we pull that particular commit to grade.

GitHub for issue tracking, too: Issue tracking tracks bugs and enhancements to the software. There’s also a very nice connection between git commits in GitHub and the closing of issues in GitHub.

pylint (Python) and clang-check (C++) for static code analysis: These provide additional checks beyond what the interpreter or compiler would provide.

unittest (Python) and Google Test (C++) for unit testing: Both are very much like JUnit. And probably the single most important thing that I teach my students is to write tests BEFORE writing code!

coverage (Python) and gcov (C++) for test coverage: It’s important to know what percentage of your code your tests are actually testing.

valgrind (C++) for memory checking: I only rarely allow my students to use new and delete, directly, but when they do, valgrind is invaluable.

cProfile (Python) and gprof (C++) for code profiling. This is of very limited value in my class, because none of my programming projects is compute intensive.

pydoc (Python) and Doxygen (C++) for automated documentation: Both are very much like javadoc.

autopep8 (Python) and clang-format (C++) for automated formatting: Everyone has their own favorite coding style. It’s very convenient when we grade for all submissions to have the same style.

NumPy (Python) and Boost (C++) for third-party libraries: Writing real software without making use of libraries is almost impossible, so I show a tiny bit of each of these.

Travis CI for continuous integration: The second most important thing that I teach my students is to set up a system that will automatically run all regression tests as a result of a commit. It’s also invaluable for students to get their software running on “naked” systems that they have to configure with all the dependencies that their software needs (e.g. all of the above).

Now, I’d like to tell you about my latest find. It’s hardly new, but however much I try to stay on top of things, it sometimes still takes me a while to become aware of a very cool tool out there for a particular purpose.

This time the tool is Docker and DockerHub.

Docker is free and runs on Linux, OS X, and Windows, but it will NOT run on the CS machines, because it has to run as root.

Docker creates light-weight Linux virtual machines to run on top of your non-virtual machine.

Like Travis CI, the value to the student is again to get their software running on “naked” systems that they have to configure with all the dependencies that their software needs.

But, now, there’s another value, and this time it’s to the instructor.

It is often the case that my students don’t have the most up-to-date versions of the interpreter or the compiler or some tool on their laptop. When that happens I point them to the CS machines, and dictate that their submissions will be graded there, as well.

Now, with Docker, I can configure an image with a particular set of versions (some even more up-to-date than the CS machines have), I can publish that image to DockherHub (again, free, for public images), and I can ask students to get their software running with that image and we can later grade their submissions with that image.

I think that’s huge.

And I wanted to share it with all of you.


Written on August 18, 2016


Pylint is a static analysis tool for Python.

Written on April 9, 2016


Coverity is a static analysis tool for C++.

It connects to GitHub via Travis CI.

And it’s free for open source repositories.

Written on November 15, 2015


Gradescope is a grading tool to help you create and manage a set of rubrics.

It was created by Arjun Singh, a PhD student in robotcics at Berkeley. It’s used at Berkeley and at 75 other universities, so far.

For example, for an exam:

  1. You upload a blank exam in PDF into Gradescope (GS).

  2. In GS you markup the PDF with the location of where the student will put their name and where they’ll put the answers to the questions. You also indicate how many points each question is worth.

  3. You upload the student roster to GS.

  4. In GS you associate each exam with a student. GS tracks whether you’ve already associated an exam with a particular student.

  5. You scan the exams into PDFs and upload the PDFs into Gradescope (GS). A single PDF can contain several exams. GS will separate them.

  6. It’s now time to grade. You select a question and GS will visit the location of that question on each of the exams.

  7. When you grade a question you create a rubric, deciding how many points to lose for each error. If after grading several exams you decide to reduce or increase the number of points for a particular error, GS will go back and recalculate all already graded questions. You can also annotate the question with feedback.

  8. When you’re done you’ll have statistics on how students did on each of the questions and rubrics.

  9. If you want your students to be able to see their exams you publish the exams in GS, students then sign-up for GS, and they can see their grade, the rubrics, and the feedback.

I think the following benefits are significant:

  1. An electronic copy of all the exams.

  2. An electronic record of the rubrics and the feedback, which if you reuse questions you can refine from term to term.

  3. The ability for you and your graders to grade different parts of the exam simultaneously.

  4. Statistics on performance by question and by rubric, which again can lead to the removal or modification of a question in the future.

Finally, Gradescope has been vetted to be FERPA-compliant. And it’s best to use an encrypted flash drive to retrieve the scans from the scanner.

Written on October 12, 2015

Top Hat

Top Hat is a classroom and student response system.

I’m using it to take attendance and to give daily multiple-choice in-class quizzes.

The students can respond on their website or with a smartphone app or via an SMS text.

The quizzes are then auto-graded.

The results of the attendance and the quizzes are then available on their website.

It’s free for the instructor.

There is a nominal fee for the student.

Written on July 4, 2015

Travis CI

Travis CI is a continuous integration tool.

You log in using your GitHub credentials and then connect it to one or more of your repos.

Then, every time you commit to a repo, Travis CI will spin up a VM (that you configure) and run your regression tests.

Configuring the VM makes it very clear what dependencies your software has.

Written on July 3, 2015


Started a blog today using GitHub Pages.

It’s powered by Jekyll.

Got it up and running with Jekyll Now.

I have a local clone of the repo.

I edit posts locally using Markdown, I commit to the repo, and the posts appear automatically at GitHub.

Written on July 2, 2015