Category Archives: teaching

Learning about Github Actions – Day 4

Took a few days off between Day 3 and Day 4 so just getting to write this post now. Turns out that what I wanted to do for Day 4 was actually simpler to do than I thought.

For my course, all assignments are in their own repo, but to avoid having many little repos, I put all the labs for the course into one repo and make them available within the first week. Students who wish to work ahead by reading the course notes are welcome to do so.

However as all labs are in the same repository, I do not want the submission of one lab to trigger a set of tests for every other lab. I was trying to figure out how to do this in the simplest way possible. It turns out, this is really simple to do. All I need to do is set up a separate workflow for each lab. For the labs, the starter files are all stored in separate folders. All that was necessary was to set up each work flow to trigger on changes made to files within a certain folder.

With this last piece, I think I am ready to use Github actions for testing my student’s submission. The next step is to go through my labs to ensure that the instructions are clear. This is not a short process but I believe the results will be well worth the effort. Not only will it make the assignment submission process be simplified, but it will also introduce students to CI process.

GitHub Classroom

Previously I have written about using GitHub for my classes. I have been doing this for a number of years but GitHub has changed over the many years that I have been using this, so I thought, that I should do an update about my current workflow.

Classroom vs Education

GitHub education (education.github.com) is the community for educators using GitHub. Its what you use to get your discount. Its where the education community forums (education.github.community) are located.

GitHub classroom (classroom.github.com) is an application to help you manage repositories for your students. It has been improved over the years and in all honesty I do not use its full feature set. But even that little bit that I do use makes my workflow simpler so I’ll share it with you.

Background

I began using GitHub for teaching many years ago. It was before the classroom.github.com app existed. When I first started, I used google forms to gather GitHub ids and then created repos for my students. Initially I did this manually and later I wrote some bash scripts to help me do this.

In the past 2 years or so however, I have moved from that process to using github classroom. It is a pretty awesome application that has made my life a lot easier.

To use github classroom

To use GitHub classroom, you will need to do the following:

  • create a free GitHub account using your school credentials (your official email helps you get verified a lot faster)
  • apply for a teacher discount here (its been slower since pandemic started so you want to get this done sooner rather than later)
  • after you get approved for the discount, create a free GitHub organization
  • upgrade your free organization to a team plan

The GitHub pricing plans have changed a lot throughout the years. When I first started, you paid for privacy. After that it was pay for collaborators. And now.. you sort of pay for advance features.. You may be able to get away with not upgrading to use GitHub classroom if you are ok with basic feature set (Note, I have not ever tested this.. so I am not sure that it is true.. you may need to do upgrade to use GitHub classroom properly). You can check out the pricing plans here. Some of the features that I like aren’t available for free. The ones I like are: advanced tools and insights on private repos, gh pages, wikis, etc (see GitHub pro features). So if you want those in the private repos for your students, then do the upgrade request.

In any case, bottom line, you need to set up an organization to use GitHub classroom

How many?

One of the first things you will want to decide is how to structure your organization(s) and repositories. Here are some thing to think about in your decision:

Do you do one organization for all your courses or one for each course?
Do you want to create a new organization each year or keep the same organization?
Do you do one repository per student or one repository for assignment?
If there are multiple instructors should every instructor have their own organization or just one organization for everyone?

These decisions will depend on your use case as well as the number of students, number of assignments, number of teachers, familiarity of teacher with GitHub classroom etc. Other considerations include how teachers may interact with the content of their students.. will they go to the organization or they be looking at their students work only through the classroom app? These will also determine how many orgs and repos you need.

For me, my class sizes are around 40 students per section. Some courses I have 1 section, some courses I have two sections. Each course I teach typically has 3 assignments and 8 or 9 labs. Given these numbers, what I usually do is this:

  • Each semester, I create an organization for each course I teach. This allows me to separate the content and more easily distinguish between my organizations. So one org per course per semester. If I have two sections of the same course, I still only create one organization
  • My labs are completely individual while my assignments can be done in pairs. I also allow my students to switch partners for each assignment. Because of this, my students all have one repository for their labs (all labs go to same repository) as well as a repository for each of their 3 assignments.
  • Typically what this means is that there are around 100 to 160 repos per organization (depends on how many work in pairs). This isn’t too bad to manage and there are some tricks that I use to find things quickly.

Classroom to create a private class repo

I like to host each course I teach in a GitHub repository. Every example I code can be hosted as source files that students can clone and play with. If they just want to look at the source code, its available online with proper syntax highlighting.

Sometimes you want a place to host your course materials without sharing it to general public. There are all kinds of ways to do this but you can actually grant access via GitHub.The way you do this is you start by creating a group assignment on GitHub that allows a maximum of 1 team. Then go to the assignment acceptance link and accept the assignment. Manually make the repository read access for the one team that has access (you will always have access as organization owner)

After you have done this, provide the acceptance link to your students and have them “join” that only team. This will create one big team for every student in class and they will have access to a private repository where your materials can go. Something to consider though.. one of my students went home to be with their parents in Iran during the pandemic… and lost access to all private repositories… Things you never consider pre-pandemic but something to keep in mind if your students are all over the world. I ended up opening up the repo to ensure they have access. In any case, once we resume live classes I will probably go back to this methodology as I thought it was quite nice.

Classroom as a mass repo creation app

The GitHub classroom app was built for teachers so it tries to put GitHub resources in terms of how teachers might view the world. Thus, the classroom app, doesn’t refer to the creation of repositories/organizations often (it does a little bit.. but its more of a means to an ends as opposed to a goal). Instead it uses the term assignments and classrooms.

When you go to classroom.github.com, the first thing it will ask you to do is setup a classroom. The way I always think about this is that for each course you teach each semester, you need at least one classroom. If you teach with multiple instructors in the same course, it may be advantageous to set up separate classrooms for each teacher. For me I find that it is just a lot of extra work so instead I use one classroom per course even when team teaching

Given how I set up my organizations, it means I typically have one classroom associated with one organization. you can however have multiple classrooms per organization if you want.

After setting up a classroom, you will be able to create an “assignment” for the classroom. As someone who came to using GitHub after using it for coding projects, the easiest way to think about the assignment is that it is effectively a tool for repository creation and access. Your assignments can be individual or group based. For reasons I’ll explain later.. I generally create group assignments, even when its individual assignments.

When you create an assignment, you will have to fill out a form. This includes things like assignment name, number of people per team, maximum number of teams, starter template repo, autograding etc.

For me I have not yet explored their autograding feature. I know it uses github actions.. but haven’t had time to really explore this yet.. summer project. So I will skip on this for now.

For my individually done labs, I create a group assignment that only allows one team member called labs. The assignment initializes the repository from a template repo I have that contains all the starter and tester files the students need for their labs. The classroom app provides a link that my stduents can then use to “accept” their assignments. I give my students instructions that basically say that they need to use their given names (the ones that I can find in the LMS) for their team names. The reason I do group assignments instead of individual assignments for this is because the repository names created for group assignment is assignmentname-teamname. since the team name is their actual names, I’ll be able to find the student in the organization by simply doing a filter in the organization.

I generally read my students assignments (code) in the browser and rarely ever download it to my computer. For testing, I use our schools submitter application, so just reading it online is fine. However, a desktop application for GitHub classroom is also available. Using this application, you can download all the accepted assignments. In otherwords it will download every repository associated with a given assignment for all students. This is pretty nice if you want a local copy. One thing to note is that when I used git-LFS (git large file system), the assignments I got from the desktop app had corrupted files. only about 50% of the files opened properly. If I cloned the repo though, the files were just fine. I am not sure why though and I haven’t really looked into it.

For each assignment, I set up a group assignment that allows up to two students and provide instructions for students to use both teammember names as well as assignment number in their repository creation. The assignment number is necessary because when a group assignment is created, it creates a team in the GitHub repo. Since students can change teams for different assignments, I needed them to be able create a new team.. but not all do. many keep the same team so to avoid duplicate team names, I have them add an extra number.

Feedback through GitHub

Since I teach programming, GitHub has amazing tools for code discussion… this has been fantastic because our LMS (the Evil LMS that shall not be named…) has barely any ability to provide relevant feedback when it didn’t erase the feedback completely… because you didn’t hit save TWICE (yes twice.. if you only hit save once, you clearly didn’t want it saved badly enough 3 paragraphs of writing.. no you didn’t want it.. if you wanted it you would have hit both save buttons that were on two different pages…No confirmation needed to delete what you wrote … but if you want to make sure you save, you better confirm that save)…. but I digress.

Usually what I do is I look through my student’s code and provide feedback using the issue tracker. It lets me do things like provide perma links into the code.. for example.. here is a link to a code blurb for my animations:

https://github.com/cathyatseneca/DSAnim/blob/8ea2a7b9579f5609a5d52db40c81e3a5641e67ba/p5js/bubblesort.js#L17-L20

you can actually highlight which lines of code need attention, and exactly what you want them to pay attention to using GitHub tools. Its pretty fantastic.

On GitHub I provide only feedback. No grades are ever posted there.. the number that goes into the grade is entered into the LMS based on the feedback. When its a group assignment, I only have to post my feedback once to the repo and enter their grades individually (just a number). I really like this process because I can provide details that just doesn’t make sense with the LMS. Students use to ask “I don’t understand what this comment means” a lot when I wrote it in the LMS because the feedback had no relationship with the assignment. On GitHub, comments can refer to very specific issues… that’s huge.

Conclusion

If you use GitHub for your classes but want a more automated workflow, consider checking out classroom. Its actually quite a nice tool for all sorts of purposes.

Summer Fully Online

I taught this summer term fully online This is different from the winter semester where I started with a class in person then went online towards the end the term. I thought it might be a good idea to write about this experience as it is a bit different from the first case.

Preparation and Tools

In the winter semester when we went online we had a week to convert our class. It was pretty fast, however as we already knew our students and had been communicating with them during the term, the way students would find their course materials (notes, assignments, etc.) were generally known to the students already. For me, the only new parts were online delivery and online testing. Once I figured out which platform to use, I was pretty much ready to go.

The summer term however posed a different challenge. I will not have had 9 weeks in person with the students before going online. As such, one of the challenges for me was one of organization. I will start by stating that organization is not my strong suit. Anyone who has ever met me know that my general method of organization is “piles”… throw things into various piles, look for things based on which pile you think it was thrown into… this has never been truly effective but /shrug… This term though, because I was online, I had to be really organized. I took the course led by Seneca’s Teaching and Learning department about teaching remotely. It was a pretty good course and there were a few things that I learned that I thought was really helpful.

  1. Create a welcome video. Because your students are learning remotely make a video to show them how to get started. Mine was posted as an unlisted video on youtube (though learning what I know, next term I’ll have to rethink this for next term… see below). Here is what I posted :
    https://www.youtube.com/watch?v=_KeNE-773eY
  2. Being fully online, I wanted a way to make it clear what materials were being covered and when. I borrowed this technique from the online teaching course as I thought it was a very tidy way to show the things that needed attention each week. Instead of organizing materials by category (reading, assignments, labs etc.) I set up blackboard chronologically and organized the tasks by week. In each week, I posted all the materials that were relevant for that week, all the readings, a blurb about lectures, labs and assignments. The materials were still hosted in my github repo and students were welcome to go to that repo directly. In the repository, the material is organized categorically as opposed to chronologically so students could access the material however they wished. Having the material organized in this way is nice… it makes it clear what materials were being covered, what assessments were required.

Access

In the winter term, when we went online, all my students were still local. That is they lived somewhere nearby…all my students were still in Canada and in same time zone. During the summer term, I had two students who were located far away. To different countries… in different time zones. Ensuring that they could still access the material was crucial.

We seem to take so much for granted that students would have access to what they need when they aren’t located locally that it is always shocking when they don’t. For example, we always think of youtube as being always available, easy to access for everyone. However, during a teachers group seminar, I learned that this was not the case… youtube (and I think google based things in general) is not accessible in China, so if you make your vids available through youtube… this is actually a problem.

Another thing that I thought was pretty widely available was github. As I am teaching software development to students, I think its a good idea for our students to be exposed to github and to learn how to use it effectively. I always set up a github organization for my students and provide private repositories for them via the github education program. I make my own materials available to my students via a github repo (course documents in wiki, code samples in repo). Never had a problem with this… until one of my students went home to be with their family in Iran. Because my student was in Iran, they lost access to their private repository. Work arounds ensued (submitting via other tools, making my course repository public etc.).

For another student, it wasn’t access but rather a 11 hour or so time difference. Even though I held synchronous classes, I recorded my classes so that they could be accessed after class. I think this is pretty important as it is really not reasonable to ask a student to go to class at 3am. Given the schedule for my class, the student would attend when it was reasonable and watch recordings when not. We need to really make this available to them.

TODO

One of the hardest things to do is to guage whether or not my students are following the material properly. In class, you can read the expression on student’s faces whether or not they understand the material. Online, this is simply not possible (most do not use their web cams). One of the things that I still need to work on is to be able guage whether or not the material is absorbed or not. Not too sure how to do this yet… I’m thinking intermitten surveys during class could be useful. I’ll need to think this through on how best to do this though.