HOMEWORK
ASSIGNMENT 4
CSCI 571 – Fall 2024
Abstract
JSON, Node.js, MongoDB and the Tomorrow.io API on Android
This content is protected and may not be shared, uploaded,
or distributed.
Assignment 4: Android Weather App
Table of Contents
1. OBJECTIVES ............................................................................................................................................................................................ 3
2. BACKGROUND ....................................................................................................................................................................................... 4
2.1 ANDROID STUDIO ........................................................................................................................................................................................................ 4
2.2 ANDROID ...................................................................................................................................................................................................................... 4
3. PREREQUISITES ..................................................................................................................................................................................... 5
4. HIGH LEVEL DESIGN .............................................................................................................................................................................. 6
5. IMPLEMENTATION ............................................................................................................................................................................... 7
5.1 APP ICON AND SPLASH SCREEN ................................................................................................................................................................................... 7
5.2 HOME SCREEN / CURRENT LOCATION VIEW .............................................................................................................................................................. 8
5.3 SEARCHING FOR A NEW CITY ..................................................................................................................................................................................... 10
5.4 DETAILED WEATHER INFORMATION VIEW ............................................................................................................................................................... 12
5.4.1 Today tab ............................................................................................................................................................................................................ 13
5.4.2 Weekly tab ......................................................................................................................................................................................................... 14
5.4.3 Weather Data tab ........................................................................................................................................................................................... 15
5.5 FAVORITE CITIES ........................................................................................................................................................................................................ 16
5.5.1 Adding to FavorCites ......S............C.............I........ ........5.............7.............1.............:......... ........W....................E............B.............. .................................... 17
5.5.2 Removing from Favorites ............................................................................................................................................................................. 17
5.6 PROGRESS BAR .......................................................................................................................................................................................................... 18
5.7 SUMMARY OF DETAILING AND ERROR HANDLING .................................................................................................................................................... 19
T E C H N O L O G I E S
5.8 ADDITIONAL INFO ..................................................................................................................................................................................................... 19
6. IMPLEMENTATION HINTS ................................................................................................................................................................. 19
6.0 STRUCTURING YOUR APP .......................................................................................................................................................................................... 19
6.1 ICONS ......................................................................................................................................................................................................................... 20
6.2 GETTING CURRENT LOCATION ................................................................................................................................................................................... 20
6.3 THIRD PARTY LIBRARIES ............................................................................................................................................................................................. 21
6.3.1 Google Play services ....................................................................................................................................................................................... 21
6.3.2 Volley HTTP requests ...................................................................................................................................................................................... 21
6.3.3 HighChart Android .......................................................................................................................................................................................... 21
6.4 ADDING TAB INDICATORS FOR FAVORITE CITIES ....................................................................................................................................................... 21
6.5 WORKING WITH ACTION BARS AND MENUS ............................................................................................................................................................. 21
6.6 FINDING RESOURCE IDS DYNAMICALLY .................................................................................................................................................................... 21
6.7 CONVERTING NUMBER TO DATE IN JAVA ................................................................................................................................................................. 22
6.8 ADDING RIPPLE EFFECT ON CLICK OF A CARD ........................................................................................................................................................... 22
6.9 DISPLAYING PROGRESSBARS .................................................................................................................................................................................... 22
6.10 DYNAMICALLY CHANGING IMAGEVIEW ................................................................................................................................................................. 22
6.11 SEARCHBAR AND AUTOCOMPLETETEXTVIEW ...................................................................................................................................................... 22
6.12 IMPLEMENTING SPLASH SCREEN ............................................................................................................................................................................ 22
6.13 ADDING THE APP ICON ........................................................................................................................................................................................... 22
6.14 STRING MANIPULATION IN JAVA ............................................................................................................................................................................ 22
6.15 ADDING ELLIPSIS TO LONG STRINGS ....................................................................................................................................................................... 23
6.16 FLOATING ACTION BUTTONS ................................................................................................................................................................................. 23
1
6.17 ADDING TABS IN ANDROID ..................................................................................................................................................................................... 23
6.18 ADDING A BUTTON TO ACTIONBAR ....................................................................................................................................................................... 23
6.19 ADDING TOASTS ..................................................................................................................................................................................................... 23
6.20 TO CREATE THE WEEKLY TABLE ............................................................................................................................................................................... 23
6.21 TO IMPLEMENT FAVORITES .................................................................................................................................................................................... 23
6.22 PASSING VARIABLES TO INTENT .............................................................................................................................................................................. 24
6.23 ROUNDING OFF TO INTEGERS ................................................................................................................................................................................. 24
6.24 LOCATION USING EMULATOR SETTINGS ................................................................................................................................................................ 24
7. MATERIAL YIOU NEED TO SUBMIT ........................................................................................................................................ 27
2
1. Objectives
● Become familiar with Java, JSON, Android Lifecycle and Android Studio for Android app
development.
● Learn the essentials of Google’s Material design rules for designing Android apps
● Learn to use the Google Maps APIs and Android SDK.
● Get familiar with third party libraries like Picasso, Glide and Volley.
The objective is to create an Android application as specified in the rest of this document.
3
2. Background
2.1 Android Studio
Android Studio is the official Integrated Development Environment (IDE) for Android application
development, based on IntelliJ IDEA - a powerful Java IDE. On top of the capabilities you expect from
IntelliJ, Android Studio offers:
● Flexible Gradle - based build system.
● Build variants and multiple apk file generation.
● Code templates to help you build common app features.
● Rich layout editor with support for drag and drop theme editing.
● Lint tools to catch performance, usability, version compatibility, and other problems.
● ProGuard and app-signing capabilities.
● Built-in support for Google Cloud Platform, making it easy to integrate Google Cloud Messaging
and App Engine.
More information about Android Studio can be found at:
http://developer.android.com/tools/studio/index.html
2.2 Android
Android is a mobile operating system initially developed by Android Inc.; a firm purchased by Google in
2005. Android is based upon a modified version of the Linux kernel.
The Official Android home page is located at:
http://www.android.com
The Official Android Developer home page is located at:
http://developer.android.com
4
3. Prerequisites
This homework requires the use of the following components:
● Download and install Android Studio. Technically, you may use any other IDE other than
Android Studio such as Eclipse, but the latest SDKs may not be supported with Eclipse. We will
not be providing any help on problems arising due to your choice of alternate IDEs.
● You must use the emulator. Everything should just work out of the box.
● If you are new to Android Development, Hints are going to be your best friends!
5
4. High Level Design
This homework is a mobile app version of Assignment 3 with new features.
In this exercise, you will develop an Android application, which allows users to search for cities to see
weather summary, look at detailed information about them, pin those cities to favorites and post on
Twitter about the weather.
You should reuse the Node.js backend service you developed in Assignment 3 and follow the same API
call requirements. In case you need to change something in Node, make sure you do not break your
Angular assignment (or deploy a separate copy) as the grading will not be finished at least until 2 weeks
later.
PS: This app has been designed and implemented in a Pixel 5 emulator running Android 15. It is highly
recommended that you use the same virtual device to ensure consistency.
Recorded demo video will be on an emulator, no personal devices allowed.
6
5. Implementation
5.1 App Icon and Splash Screen
To get this icon/image, go to the icon’s web page specified in the hints. Using advanced export option,
set the colors and a correct size to download the PNG icon.
The app begins with a welcome screen (Figure 2) which displays the icon downloaded above.
This is also where we credit Tomorrow.io for using their APIs and data. This screen is called Splash
Screen and can be implemented using many different methods. The simplest is to create a resource file
for launcher screen and adding it as a style to AppTheme.Launcher (see hints).
This image is also the app icon as shown in Figure 1
Figure 1: App Icon Figure 2: Splash Screen
7
5.2 Home Screen / Current Location View
As soon as you open the app, the summary view of the current location is displayed. The tabs on the
right swipe are described in a later section.
The location can either be fetched by using the IPinfo API.
Note: The current location tab always stays and cannot be deleted/removed by any means.
Figure 3: The Home page for the app
8
This view is also called the Home screen view. The Home screen view has a selected amount of
information which might be most useful for a user. It has the following fields:
Card 1:
● Icon: Weather Status icon corresponding to the weather code for the current weather condition
(same as in previous assignments).
● Temperature: The current temperature. Make sure that the temperature is rounded off to
nearest integer.
● Summary: The current weather conditions obtained using the weather code.
● City: Name of the city to which this card belongs. You can use either the autocomplete suggestion
or the location information returned in the IPinfo API call.
● On click: Clicking this card will open a new “detailed weather information view” described in
section 5.4.
Card 2:
This card shows 4 selected values from the “currently” property. i.e., humidity, windspeed, visibility,
pressure. Make sure all floats are terminated to exactly 2 digits after the decimal point. Also ensure that
the correct icons are used, mapping is given in the hints.
• “humidity” is returned between 0 and 1 by the API - convert it to % by either mathematical
operations or by dropping everything before “.” followed by a % symbol.
• “windSpeed” property from currently JSON is used. The unit is mph.
• “visibility” property from “currently” JSON is used. The unit is mu.
• “pressure” property from “currently” JSON is used. The unit is inHg.
Card 3:
This card is used to display a quick overview of the next week’s temperature. The predictions are
available inside the “data” array of “daily” JSON. Each row in the table consists of:
• Date: “time” property converted to a YYYY-MM-DD format.
● Icon: based on the “weathercode” property.
● Minimum temperature: “temperatureLow” property in the JSON, rounded off to integer.
● Maximum temperature: “temperatureHigh” property in the JSON, rounded off to integer.
● This must display 5-6 days of information. You can use a ScrollView to achieve this table look. See
hints.
Notes:
● JSON property names are written for reference. For exact structure please refer to HW5
● If any of the details are missing, you can use a default value of 0 or “N/A”.
● All floats are rounded to exactly 2 digits after the decimal point.
● All temperatures must be rounded off to nearest integers. See hints.
● String manipulation in Java.
9
5.3 Searching for a new city
• In a typical weather app, we need to provide only the city name to search. Our app will be a
Google recommended “Searchable” app.
• On top right side, there will be a search button which opens a textbox where the user can type
name of a city. See hints for icon.
• The user is provided with suggestions of city names using the autocomplete API used in
Assignment 3.
• When the user taps on a suggestion, it is filled inside the search box and clicking enter/next
takes the user to the next page.
• Before you get the data from your backend server, a progress bar should display on the screen
as indicated in Figure 12.
• On the next page, the user will then be redirected to a new page/activity which will show the
Home Screen view (described above in section 5.2).
This component involves 2 things:
• Implementing a searchable – see hints.
• Implementing auto-complete – see hints.
Notes:
• If your Node backend from Assignment 3 returns only the city name and not the state and
country, you can still use that.
• If you still must change Node backend, make sure you don’t break the Angular app (if grading is
still in progress) or deploy a newer instance of Node.
• Reusing the Home Screen view and the corresponding logic to dynamically set the value will
make it much faster to implement this.
• Do not forget the static “Search Results” label on top.
• Favorites button: This button will add/remove a city to/from the favorites. This can be
implemented using a Floating Action Button. The icon of the button should also change based on
whether the city currently belongs to favorites or not. For more details see video and
implementation hints.
• Clicking on the top card, also opens the same details view as described in section 5.4.
10
Figure 4: Flow for searching a city
11
5.4 Detailed Weather Information view
• Notice the information icon on card 1 in the Home Screen view. When the user clicks on this
card, a detailed view about the corresponding city is displayed.
• Add a ripple effect to the card.
• The detailed view has 3 tabs. These tabs are called “Fragments”. They can be implemented
either with a tabbed activity or generated programmatically (see hints).
• The tabs are called “Today”, “Weekly” and “Weather Data”.
• There is a X (Tweet) button in the Action Bar click which opens a browser with the X (Twitter)
intent like Assignment 3. See hints.
• The Tweet should be of the form: (Check Out CITY’s Weather! It is X°F!
#CSCI571WeatherSearch)
Figure 5: Tab view with back and X (Twitter)
Figure 6: X (Twitter) intent
buttons and city name
Notes:
• You can try to pass the weather JSON from the Home Screen view to the Detailed View. You can
also choose to query Tomorrow.io again. In any case, there should be a progress bar every time
you are waiting for data.
• The default tab to be opened is the Today tab.
12
• The back button takes the user back to the Home Screen view. See hints.
• The app bar must also contain the name of the city that the current view is for.
5.4.1 Today tab
The Today tab contains information from the “currently” property in JSON. It contains 9 cards with a
gray background an icon, description and the value of that parameter. See hints.
The 9 cards in this tab indicate:
1. Wind Speed: “windSpeed” property of the “now” JSON. Unit: mph/
2. Pressure: “pressureSeaLevel” property of the “now” JSON. Unit: inHg/
3. Precipitation: “precipitationIntensity” property of the “now” JSON. Unit: %/
4. Temperature: “temperature” property of the “now” JSON. Unit: F/
5. Icon: Same as above.
6. Humidity: “humidity” property of the “now” JSON. Unit: %.
7. Visibility: “visibility” property of the “now” JSON. Unit: mi.
8. Cloud Cover: “cloudCover” property of the “now” JSON. Unit: %.
9. UvIndex: “unIndex” property of the “now” JSON.
Figure 7: Today tab
13
Notes:
• Handle any missing values, otherwise the app can crash.
• Make sure all floating values are exactly 2 digits after the decimal point. Temperature must be
rounded off to the nearest integer. See hints.
• If a value is not present/malformed you can choose to display 0 or NA.
• Make sure that the cards are well-styled and have appropriate sizes with centered
images/texts.
5.4.2 Weekly tab
This tab indicates what the weather will look like next week. The data belongs to “daily” API call.
Graph view:
• This view uses Highcharts Android library. You must add this as a dependency.
• This chart contains two LineCharts i.e. AreaRange Chart.
• Extract the “temperatureLow” and “temperatureHigh” for each day from the “data” array and display
the Lines in given color.
• Make sure you change the Legend, font and line colors.
• There are 3 hints which should be enough to implement this graph view.
Figure 8: Weekly Tab
14
5.4.3 Weather Data tab
This tab indicates what the weather will look like in the coming week. The data belongs to “daily”
properties’ “data” array. There are 2 components to this page:
Graph view:
• This view uses HighCharts 3rd party library. You must add this as a dependency.
• This chart contains 3 data: Cloud Cover, Precipitation and Humidity.
• Extract the “Cloud Cover,“ “Precipitation” and “ Humidity” from now and enter the “data” array and
display the chart in given colors.
• Make sure you change the style of the chart as referred in the video.
• There are 3 hints which should be enough to implement this graph view.
Figure 9: Weather Data tab
15
5.5 Favorite cities
This will be one of the most complicated parts of the assignment. The idea is to give users an ability to
add a city to Favorites. The favorite cities persist even after the user has closed the app. The favorite
cities are added as a Dynamic page/tab/fragment on the home page.
Again, consider reusing the view and the code that you wrote for search and the home location tabs.
The view, onclick behaviors are all the same with additional buttons.
Figure 10: Favorite cities – Left to right: Default location without remove button, two cities added to
favorites. Also notice the dot indicators on top
16
5.5.1 Adding to Favorites
Once a user has searched for a city, the summary view contains a FloatingActionButton which indicates
“add to favorites” – icon of a map pin with a plus sign.
5.5.2 Removing from Favorites
“Remove from favorites” is the same FloatingActionButton as add, but with a different icon of marker
with a minus sign. This button appears on 2 places:
• On the corresponding dynamically added page on the home screen
• On the search result page when the city is searched again.
Figure 11: Toast messages on adding/removing a city from favorite
Notes:
• Display “CITY was added/removed to/from favorites” using a Toast Hints.
• Make sure that the add/remove icon toggles correctly.
• The favorite cities must persist across sessions i.e., opening and closing should retain the view.
You should use the data stored in MongoDB Atlas.
17
• The favorite cities are also indicated with dots to indicate the active tab. See hints.
• The favorites tab must update dynamically when the user comes back to home screen from a
search query. E.g. If the favorites are empty and the user searches for New York, from the
search Home Screen view if the user clicks the “add to favorite” button and navigates back to
the home screen, instead of just current location there should now also be the New York tab!
And similarly, removing a favorite city must delete the tab.
• The dynamic tabs can be implemented in multiple ways. See hints.
5.6 Progress bar
Every time the user has to wait before user can see the data, you must display a progress bar. The
progress bar is constant for every screen and just says “Fetching Weather/Loading”. One idea would be
to display the progress bar by default (where needed) and then hide it as soon as the data is
received/view is prepared.
See hints for progress bar related ideas and styling.
Note:
Based on your implementation, you might need to put progress bars on different places. During demo,
there should NOT be any screen with default/dummy/placeholder values or an empty screen.
Figure 12: Progress bar
18
5.7 Summary of detailing and error handling
1. Make sure there are no conditions under which the app crashes.
2. All floating-point numbers must have EXACTLY 2 digits after the decimal point. All temperatures
must be rounded off to nearest integer. See hints.
3. Make sure the units are correct.
4. Make sure all icons and texts are correctly positioned/centered as in the video/screenshots.
5. Make sure the graph legends and axes are correctly displayed.
6. Make sure there is a progress bar every time there is nothing to show.
7. The favorites button work as expected and must dynamically update the tabs on the home screen
8. Make sure you use the right icons as listed in the hints.
5.8 Additional Info
For things not specified in the document, grading guideline, or the video, you can refer Piazza. But keep
in mind about the following points:
● Always display a proper message and don’t crash if an error happens.
● Always display a loading message if the data is loading.
● You can only make HTTP requests to your backend Node.js on AWS/GAE/Azure.
● All HTTP requests should be asynchronous and should not block the main UI thread. You can
use third party libraries like Volley to achieve this in a simple manner.
6. Implementation Hints
6.0 Structuring your app
There are many ways you could do this. The easiest way would be to create following Activities:
(this is just a suggestion and NOT a mandate):
• Main
• Searchable
• Details
And the following Fragments:
• Favorites
• Tabs
Try to reuse as much of your code as you can - there are multiple places which share the same logic –
Home view, favorites view and search view are the same. All the details pages are essentially the same.
19
All the hints below are just pointers, feel free to research and find a different way of doing things. You
do NOT have to stick to these resources.
6.1 Icons
6.1.1 Icons
The images used in this homework are taken from https://materialdesignicons.com/ .
You can choose to work with xml/png/jpg versions. We recommend using xml as it is easy to modify
colors by setting the Fill Colors.
Icon Name Usage
weather-partly-snowy-rainy App Icon and Splash screen
Tomorrow.io attribution logo https://github.com/Tomorrow-IO-API/tomorrow-
weather-codes/blob/master/powered-by-
tomorrow/Powered_by_Tomorrow-Black.png
weather-windy Wind Card
gauge Pressure Card
weather-pouring Rain Card
thermometer Temperature Card
water-percent Humidity card
eye-outline Visibility card
weather-fog Cloud Cover Card
earth UV card
information-outline Information icon for card on summary views
map-marker-plus Add to favorites
map-marker-minus Remove from favorites
map-search-outline Search bar icon
calendar-today For “Today” tab
trending-up For “Weekly” tab
thermometer For “Weather Data” tab
twitter Tweet Icon
6.2 Getting current location
To get the current location, you can use either IPinfo API or Android location services. Refer to
assignment 3 for more details on IPinfo. You can perform this API call locally on device.
20
6.3 Third party libraries
Sometimes using 3rd party libraries can make your implementation much easier and quicker. Some
libraries you may have to use are:
6.3.1 Google Play services
You will need this for various features like getting the current location and using Google Maps in your
app.
You can learn about setting it up here:
https://developers.google.com/android/guides/setup
6.3.2 Volley HTTP requests
Volley can be helpful with asynchronously http request to load data. You can also use Volley network
ImageView to load photos in Google tab. You can learn more about them here:
https://developer.android.com/training/volley/index.html
6.3.3 HighChart Android
In order to create graphs, we will use the HighChart Android. Documentation for Highchart Integration in
Android can be found here: https://www.highcharts.com/blog/tutorials/highcharts-android-wrapper-tutorial/
For our purposes following these links should suffice:
Creating a AreaRange Chart: https://www.highcharts.com/demo/android/arearange
Creating Gauge Chart: https://www.highcharts.com/demo/android/gauge-activity
6.4 Adding tab indicators for favorite cities
https://stackoverflow.com/questions/20586619/android-viewpager-with-bottom-dots
https://stackoverflow.com/questions/38459309/how-do-you-create-an-android-view-pager-with-a-
dots-indicator
6.5 Working with action bars and menus
https://developer.android.com/training/appbar/setting-up
https://stackoverflow.com/questions/38195522/what-is-oncreateoptionsmenumenu-menu
6.6 Finding resource IDs dynamically
This can be helpful in setting the 5 days table in the summary view.
https://stackoverflow.com/questions/4427608/android-getting-resource-id-from-string
21
6.7 Converting number to date in Java
https://stackoverflow.com/questions/535004/unix-epoch-time-to-java-date-object
6.8 Adding Ripple effect on click of a card
https://stackoverflow.com/questions/26942434/ripple-effect-on-android-lollipop-cardview
6.9 Displaying ProgressBars
https://stackoverflow.com/questions/5337613/how-to-change-color-in-circular-progress-bar
6.10 Dynamically changing ImageView
This will be used for icon fields based on summary property.
https://stackoverflow.com/questions/2974862/changing-imageview-source
6.11 SearchBar and AutoCompleteTextView
To implement the search functionality, these pages will help:
https://www.youtube.com/watch?v=9OWmnYPX1uc
https://developer.android.com/guide/topics/search/search-dialog
Working with the AutoCompleteTextView to show the suggestions might be a little challenging. This
tutorial goes over how it is done so that you get an idea of how to go about it.
https://www.truiton.com/2018/06/android-autocompletetextview-suggestions-from-webservice-call/
In order to link your Search Bar with autocomplete suggestions, these links might help:
https://www.dev2qa.com/android-actionbar-searchview-autocomplete-
example/https://stackoverflow.com/questions/34603157/how-to-get-a-text-from-searchview
6.12 Implementing Splash Screen
There are many ways to implement a splash screen. This blog highlights almost all of them with
examples:
https://android.jlelse.eu/the-complete-android-splash-screen-guide-c7db82bce565
6.13 Adding the App Icon
https://dev.to/sfarias051/how-to-create-adaptive-icons-for-android-using-android-studio-459h
6.14 String manipulation in Java
https://www.guru99.com/java-strings.html
22
6.15 Adding ellipsis to long strings
https://stackoverflow.com/questions/6393487/how-can-i-show-ellipses-on-my-textview-if-it-is-
greater-than-the-1-line
6.16 Floating Action Buttons
https://developer.android.com/guide/topics/ui/floating-action-button
6.17 Adding tabs in Android
https://www.spaceotechnologies.com/create-multiple-tabs-using-android-tab-layout/
6.18 Adding a button to ActionBar
https://developer.android.com/training/appbar/actions
https://stackoverflow.com/questions/12070744/add-back-button-to-action-bar
https://stackoverflow.com/questions/38195522/what-is-oncreateoptionsmenumenu-menu
6.19 Adding Toasts
https://stackoverflow.com/questions/3500197/how-to-display-toast-in-android
6.20 To create the weekly table
https://stackoverflow.com/questions/4427608/android-getting-resource-id-from-string
https://stackoverflow.com/questions/535004/unix-epoch-time-to-java-date-object
https://developer.android.com/reference/android/widget/ScrollView
6.21 To implement favorites
• Please read about how ViewPagers work:
https://developer.android.com/training/animation/screen-slide
• Set OffScreenLimit to 10: https://stackoverflow.com/questions/11650152/viewpager-
offscreen-page-limit
• And then follow these links:
o https://medium.com/@rajatsingh1695/making-dynamic-tabs-and-fragments-in-
android-using-JSON-data-70a59eb6f0e0
o https://stackoverflow.com/questions/34306476/dynamically-add-and-remove-tabs-in-
tablayoutmaterial-design-android
o https://stackoverflow.com/questions/10396321/remove-fragment-page-from-
viewpager-in-android
23
6.22 Passing variables to intent
https://stackoverflow.com/questions/2405120/how-to-start-an-intent-by-passing-some-parameters-
to-it
6.23 Rounding off to integers
https://stackoverflow.com/questions/2654839/rounding-a-double-to-turn-it-into-an-int-java
6.24 Location using Emulator Settings
If you choose to use Android location services to get the current location, then you can use the
emulator settings.
Figure 14: Location Setting of Emulator
24
7. Material you need to Submit
You will have to demo your submission using a video recorded with Zoom. Details are included
in a Final Presentation document on D2L Brightspace. Demo is done on a MacBook using the
simulator, and not a physical mobile device.
You should run Android Studio ® Code ® Code Cleanup ® Whole Project, to remove all
compiled object files.
Then generate the following files:
1. Your mobile source code as a ZIP file. This file should contain your front-end code
(Java or Kotlin), by zipping the top Android folder containing your project; name your zip
file Assignment4-
2. Your back-end source code (NodeJS files, possibly the same as Assignment #3), as
a ZIP file of the NodeJS top folder; name your zip file Assignment4-
3. Your video file in .mp4 format, created using Zoom and the Final Presentation
guidelines available on D2L Brightspace. Name the recording as Assignment4-
Then click File Upload. Note: make sure that BOTH the 2 .ZIP files and the .MP4 file (3 files)
are uploaded on the SAME submission, as every submission will overwrite the previous one.
IMPORTANT
All videos, all discussions and explanations on Piazza related to this assignment are part of the
assignment description and will be accounted into grading. So please review all Piazza threads before
finishing the assignment.
25