Overview

In this AM, you will work as a group to create your own version of Wellesley Course Browser website and integrate it with the Google Calendar.

Differently from other AMs, there will be no template AM solution that you should follow. Instead, you are free to create the app according to your vision, as long as you follow these generic guidelines:

  1. The data for the courses are retrieved from a JSON feed that is provided to you.
  2. There is a web interface that allows a user to either select or search for courses they are considering to enroll.
  3. The desired courses are added automatically to a user's own Google Calendar in a separate calendar, which then can be deleted entirely, if necessary.

Another difference from other AMs is that you can divide the AM tasks among the team members, given its large scope. For more details read the next sections.

Teams

You will be working in groups of three to implement the AM. I have assigned students to teams, to ensure that you are working with students who you have not worked before.

  1. Team 1: Clara, Clare, Sophia
  2. Team 2: Meridian, Ella, Lee
  3. Team 3: Priscilla, Chimuanya, Jamie
  4. Team 4: Lucy, Jessica B, MR
  5. Team 5: Susie, Diana, Audrey
  6. Team 6: Jessica G, Pamela, Gracie

Meet as a team as soon as possible and work on the following aspects:

  1. Discuss with one another what your strengths and weaknesses are.
  2. Choose to work on a aspect that you are not strong yet, so that you can learn something new in this AM. For example, if you are already good in web design (HTML/CSS/Javascript), you should choose to work on the app part that processes the JSON feed to organize the information in a meaningful and searchable way, or you can decide to work on how to talk to the Google Calendar API.
  3. Make a schedule of all times outside class in which you can meet together to make progress on the AM.
  4. Each of you should write on their blog post a summary of your decisions and what your role in the team will be.

Preparation

There are three sources of information for this AM.

  1. The Wellesley Course Browser website is the starting point, from which the information comes. You can study this website to see the data it contains and the meaning of this data.
  2. The JSON feed of the Course Browser website. This is a feed I've created, which you can access with the $.getJSON() method. Once you have the data in your app, you can reorganize it in any way that makes it easy for you to process, sort it, filter it, search it, etc.
  3. The Wellesley Course Planner an app created by Hannah Bond '15 and Francys Scott '14 for the Mashups 2013 course. This app has several features that your app will have too: allowing a user to choose courses and add them to the Google Calendar. The difference is that the data for the app is local, which means that it was a copy of Spring 2013 and doesn't change overtime, as it would do with the feed. Their Google Calendar part has some bugs, which could have been fixed by using callback functions in the Google Calendar API calls. You are free to look at their code and documentation, but you should strive to create your own version of the app, so that you can benefit from the process of learning to do this on your own.
  4. To make it easy for you to create the user interface for the app, you can use a HTML/CSS/JS framework, such as Bootstrap, that makes creating appealing websites easy. We will give an overview of Bootstrap in class, but you will need to work independently to become proficient in it.
  5. In order to help with sorting and searching, you can choose to use a Javascript/jQuery plugin that takes care of the details for you. There are many to choose from, you can consult this list of resources.

Documentation

A graded component of the AM will be blog posts that summarize your learning and working progress. You don't need to blog everyday, but keep track of every single session that you engage with the AM and write blog posts that combine several of such sessions and enter them in a post in reverse chronological order.

For example, this might be an example of a post combining two sessions:

Mar 1, 2015 Spent some time looking at the JSON feed, learning about the different attributes of each entry. Some of the fields have extranous information, such as a number before the day: "2\n T". It looks like that is the index of the day of the week (0 for Sunday, 1 for Monday, 2 for Tuesday, etc.) It might have been used to sort data in the table of the Course Browser. Given that I have to work with dates and times of day (needed to enter the fields in the calendar), I need to understand Javascript's Date() object. I started with the class, notes, and then I saw some more examples in W3Schools. I think I know more now, but I will have to test this with some concrete small examples.

Feb 27, 2015 First meeting with my team. We discussed our strengths and weaknesses. Given that I have taken CS230 and I have a better understanding of data structures, but still feel unsure about Javascript nested objects, I decided to work on the part that processes the JSON feed to create a meaningful representation of the data, which would be easy to sort (based on different attributes, such as days of week, or times of day). We also made a mockup for our page, Luna Lovegood posted it on her blog.

Working Together

Given that you're working as part of a team, you'll need a way to share code with one-another. The best way would be to use GitHub. GitHub has interfaces for Mac and Windows, which make it easy to push your code in an online repository hotes on GitHub, as well as pull the code from your partners.

If you don't want to spend time learning to work with GitHub at this moment, you can use jsFiddle to fork each-other's code.

Starting Point

It will be beneficial that all students complete this mini-task. You are given a file that contains some jQuery code to access the feed of courses. You should process the entries of the feed to create one list of objects or an object of objects that can be used by your app. Choose whatever organization of data you prefer: group by the distribution requirement, group by departments, by day of week, by time of day, by size of class, etc. Each of you should have this working file in the final AM4 folder.

am4_start.html file for the task of learning the data.

Grading

Working as a team of three is difficult. You need to find time to work together and coordinate with one another. At any given week, one (or more) of you might have something more important in their life going on. Thus, to make it easy for you, in case your team finds itself in such a situation, I'm offering you a "blue pill" or "red pill" choice. This is possible, because in this course you can entirely drop an AM and not suffer a grade penalty (the AMs allocation is 50%, the rest of components together is 50%). Of course, your team can also decide to drop this AM, if you can afford it.

  1. Blue Pill - if you choose the blue pill, you can recieve the solution for the working version of "Searching by Days" introduced in the notes. Then, you can make modifications to it (see below), add the Google Calendar part and submit it. In this case, you get 6 out of 10 points (or a 40% score reduction).
  2. Red Pill - if you choose the red pill, you get to implement everything on your own, and be eligible for the complete 10 points of this AM (but see note about possible extra-credit).

Here are the points if you choose the Red Pill:

  • 3 points: The data is organized in such a way that it makes it easy to choose courses based on one field alone for at least three different fields (e.g., subject, distribution, level (100, 200, etc.), days of week, time of day, cross-registration, instructor, etc.). For at least two of these fields, a conjuction search should be possible. For example, one can search for QR Overlay in the Psych department or for 200-level courses that fulfill Multicultural distribution.
  • 3 points: The user interface allows the user to choose one or more criteria for search, presents useful messages and results after each search, and allows the user to select or deselect courses that they want to consider for entering in their Google calendar.
  • 3 points: The user can add a list of courses to the Google Calendar into a "named" calendar that can be deleted easily with all the course choices.
  • 0.5 points - your code is easy to read, well-organized and commented.
  • 0.5 points - you can present a working, bug-free version in class on Tue, March 10.

If you choose the Blue Pill, you get 1.25 points (out of 3) for the data organization, and 0.75 points for the user interface. This is becasue the prototype already has in place many of the required pieces. The other 4 points are the same.

Extra-credit - to make it appealing to choose the red pill, there will be two extra points to perform the search without a complicated user interface. That is, instead of using buttons, drop-down lists, radio boxes, etc. to gather the user criteria, your interface uses one single search box (like Google), where a user enters a search in free text: "200 level poli-sci courses that meet twice a week". You can choose to restrict the range to three fields of your choice and any combination of them, but you cannot ask users to enter structured text such as: "subject=polisci;level=200;days=M,Th". Dealing with free-form text is difficult, but it's a good challenge for students who consider themselves strong in data structures.

Finally, remember to blog as part of documenting your progress. You should have a few blog posts summarizing the steps toward the completion of your AM4. If such posts are missing, there will be a deduction in the grade.

Submission

Every student should have a subfolder AM4 in their cs249 folder and link to the am4.html file from the index.html page.

You should divide your Javascript code in three files, given that there are three students working on the AM:

  1. data.js - that will contain the code that accesses the JSON feed, cleans, and organizes the data in different ways for immediate access.
  2. ui.js - that will contain the Javascript or jQuery code for manipulating the user interface and dynamically update the page with the results.
  3. calendar.js - that will contain the code for dealing with the Google Calendar API for adding the user entries on the calendar.

You can have other HTML, CSS, or JS pages if necessary.

Remember to comment your code and add information that identifies who was in charge of the file, if you are dividing the work.