3010 Assignment 1
Summer 2020
• Remember to complete the Honesty Declaration in UMLearn
• As a reminder, copying material (text or code) is plagiarism and academic dishonesty (see the Science links in the ROASS page for details on what constitutes academic dishonesty in written/research work).
Writing:
Part 1
Due July 3, 2020, 11:59pm via Crowdmark.
• Limit your answers to 500 words per question.
• Throughout all of the material provided for this assignment there is an abundance of discussions on distributed database design. While that is extremely important, it is beyond the scope of this course and should not be considered relevant to the assignment. It may be impossible to avoid mentioning database issues, but they should not be seen as the focus (i.e. don’t go down that rabbit hole).
• Be sure to not use the buzz words found (as this is not a marketing course) — your overall goal, for all questions, is to connect what industry discusses/provides with the foundational design principles discussed in class.
Answer the following questions:
• 1.1: What is load balancing? What does it problem does it solve? What algorithms are used? What are some popular solutions for load balancing?
• 1.2: Netflix uses Chaos Engineering to what? Why would Netflix choose this as a solution? What is the positive result of the Chaos?
• 1.3: What is a Message Broker? What popular Message Broker solutions exist? Where would it go in a web application, what role would it play? You may want to draw a diagram.
• 1.4: Read Scaling Memcache at Facebook. Provide a summary of the paper, focusing on what Memcache does, how it increase performance (generally), and what ‘tricks’ were used to increase performance even further at Facebook (specifically).
Part 2
Due July 3, 2020, 11:59pm via handin.
1. All website implementations must be executed via the web server found at www-test.cs.umanitoba.ca, since it has the required software installed. You should also include how to access your website as part of your submission (in a README.md file) and keep the site active after handing in your code (the marker will compare the code so don’t change it). This will allow the marker to actually test your website.
2. To implement your website you will first need to create public_html and public_html/cgi-bin directories within your CS Unix home directory. To ensure that your code can be run by the web server you will also need to update permissions such that your home, public_html, and cgi-bin directories are group and world executable (make sure your directories are not readable by other students!). The directories can not be writable by users other than the owner.
◦ In octal the permissions for these directories are: 711
3. All of your CGI scripts must be stored in public_html/cgi-bin/ and must have world execute permissions.
◦ In octal the permissions for these scripts are: 711
4. Your scripts must have the .cgi extension. The web server will refuse to execute scripts with the .py (or any other…) extension.
5. To access the page fred.html, found in your public_html directory, point your browser at www-test.cs.umanitoba.ca/~myumid/fred.html. To access fred.cgi point your browser at www-test.cs.umanitoba.ca/~myumid/cgi-bin/fred.cgi.
◦ In octal the permissions for html files are: 644
6. You cannot use any CGI or HTML packages in your assignment solutions. For example, in Python you cannot “import cgi”. Further, you cannot use any Javascript in your assignment solutions (that’s in A2…).
Implement a party reply system, where a host can send a link to all their invitees. The invitees can then register their name, and their response to the invite. As invitees return to the page, it will remember their previous response.
Use a simple text file on the server to keep track of all the responses. Return an appropriate message if the name is invalid. Names must consist of at least one letter, so “X Æ A-12” would be a valid name, but “1234”. “~!!”, and “💩” would not be.
The “invitation” response page should have a form with a text field for name, and a checkbox for “attending”. On submission, the user should be shown a “replied” page, showing their name and response. On return tho the page, the use should see the “replied” page.
The “replied” page must include an “Anonymize” button. On clicking, the user will be forgotten from the site by clearing (setting to empty) the cookie values and having the visitor automatically returned to the invitation page.
More notes‽
You may write as many cgi scripts as you deem required. You may have some .html files, too. Do what you’re comfortable with!
You may want a redirect.html file. This could also be returned by a cgi script.
Using handin: assuming you have a folder named my_assignment_1_folder. Go to its parent folder (so you can see my_assignment_1_folder in ls) and run handin 3010 a1 my_assignment_1_folder
Bonus (5%)
Assume that all the invitees have different names, not unlike the The Ancient Mystic Society of No Homers, and allow updates to the text file, so users can update their invitation.
Update your front-end “replied” page to allow users to update their attending status.