Developing the Playlister App

HW 1: 1st Technology Learning Assignment - GUIs & JavaScript


The Big Picture

This semester you will be creating a CRUD Web Application using the MERN stack for entering and editing data associated with music playlists, meaning one can use the application to create a playlist of our favorite songs and then play the songs in our very own music player. Note that YouTube will be providing the songs and the API for our player. When completed the program will let the user login to an online account, create playlists, find lists made by others, like or dislike lists, comment on them, and store all created and edited work in an online database. We'll also have a feature where one can import and export playlists and even aggregate data of note, like the frequency of specific songs, etc.) This will be a semester-long project, so before we code our solution, we first will have to learn all about the necessary technologies to use. This is a common first step in Software Engineering, so get used to it. We will then design our solution, and then code. The HWs are divided up as follows:



HW 1 Setup

Now, to get the starting point for HW 1 up an running do the following:

Playlister - Becoming Code Literate

In this assignment I'll be giving you a whole heap of code that is partially working but incomplete. It is vital that you start by learning how it all works. Do your best to figure out how all the pieces fit together and what each piece does. Writing carefully designed, modular code is one of the most important skills for you to develop this semester, and the code I have provided tries to encourage you to do just that by employing established design patterns.

In this first assignment we will be creating a front-end only Web app that will provide the user with a means for making and editing playlists. Note again, it is front-end only. So, once the page is loaded, we are storing all data in JavaScript variables and then saving to the browser's local storage. The app never talks to a database or back-end code of any sort. Should the user press the browser's Refresh button the full page will be reloaded using data from local storage. If you need to reset the data, just delete the Playlister app's entry in local storage.

Once you start the program you'll find that there are some exising Playlists that are loaded and partially edited. In fact, adding a new list works, so does changing the name of a song, as well as undoing that action and redoing that action. However, many other features do not work. In addition, there are many presentation things that need to be updated.


How are we using JSON

JSON stands for JavaScript Object Notation which like XML, is a Web standard for storing data. In fact, it is starting to replace XML in many respects. There are databases that store data in a JSON format, the same for local storage formats and data exchange between client and server many times uses JSON. JSON simply reflects the format of the data in JavaScript Objects, and has become a standard for the exchange of data. In this first assignment we will use a JSON file to load test data so that we can easily test all required functionality. In future HWs we'll use it for other things like for our database and for sending data between our front and back ends.



The Playlister App - Required Functionality

Learn how all the code I have provided you works before getting started. This is essential for software engineering. Going in using guesswork to make changes is no way to build high quality software. You need to map out all the pieces in your mind so that you know where to do your own code editing. To complete this assignment, do the following:

Below are views of the user interface in action. Note that the green color denotes the currently selected list. The black list is currently moused over. Note the views below are the working app in action.

Figure 1 - Playlister workspace view



Figure 2 - Modal view for editing a song



Figure 3 - Modal view for verifying removing a song



There is obviously lots you'll have to do here starting with looking through a ton of my code to figure out what's going on here. Don't take the assignment lightly. When dealing with a large code base like this, everything takes time.


Finally

Remember, one of the most important principles for you to learn this semester is to plan, then do. You must learn how all of the code works and why it is arranged as is before starting, and you must plan your approach before coding. Don't just march off to the north pole in your underwear and hope for the best. Note that further discussions of these requirements will be given during lecture.





Handin Instructions

When you are done, zip up the entire 316-HW1-Playlister directory and submit that single ZIP file via Brightspace. Note, it must be a .zip file, not a .rar file. Do not include the node_modules directory in your zipped up submission. Note, if you include that directory you will lose points for your submission.



Grading Appointments

Note that grades for this assignment will mostly be based on program performance and grading will only be done by appointment with each student's prescribed Teaching Assistant. This part of your grade will be based on how well your program performs specific required tasks. Additionally, points will be deducted if GitHub is not used properly, meaning incrementally over the course of working on the project for each bit of working implementation. Make sure you use GitHub properly from start to finish, committing your progress as you go with each assignment.