辅导案例-COMP1531 /

欢迎使用51辅导,51作业君孵化低价透明的学长辅导平台,服务保持优质,平均费用压低50%以上! 51fudao.top
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 1 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
๋ݸ൉Ի
mailto:[email protected]
Updating config in public /COMP1531/19T3-cs1531-
project/commit/ff393613240f4555100ff0845bc02eb80f3a5857
ኧ Hayden Smith mailto:[email protected] ൉Իԭ ᕅ 9 ੜ෸ڹ
ff393613
ݷᑍ ๋ݸๅෛ
! frontend /COMP1531/19T3-cs1531-pr… Updating config in public /COMP1531/… ᕅ 9 ੜ෸ڹ
! server /COMP1531/19T3-cs1531-proje… Commit for draft release /COMP1531/1… 3 จ๗ڹ
! system_utils /COMP1531/19T3-cs1531… Frontend integrated /COMP1531/19T3… 1 ॠڹ
" .gitignore /COMP1531/19T3-cs1531-pr… Iteration 2 setup /COMP1531/19T3-cs1… 1 จ๗ڹ
" HOWTORUN.md /COMP1531/19T3-cs… Frontend integrated /COMP1531/19T3… 1 ॠڹ
" README.md /COMP1531/19T3-cs1531… Upload photo clarification /COMP1531… 1 ॠڹ
" run /COMP1531/19T3-cs1531-project/… Changing port to something chrome lik… ᕅ 14 ੜ෸ڹ
" server.py /COMP1531/19T3-cs1531-pr… Updating config in public /COMP1531/… ᕅ 9 ੜ෸ڹ
A video describing this project and the background here can be found here.
To provide students with hands on experience testing developing and maintaining a backend server in python.
To develop students' problem solving skills in relation to the software development lifecycle.
Learn to work effectively as part of a team by managing your project planning and allocation of responsibilities among
the members of your team<
Gain experience in collaborating through the use of a source control and other associated modern team-based tools.
Apply appropriate design practices and methodologies in the development of their solution
Develop an appreciation for product design and an intuition of how a typical customer will use a product.
11/10/2019: Search function clarified that it searches over all channels a user is in
13/10/2019: name_first and name_last length requirement inverted to make more sense
14/10/2019: standup/send errors updated to make more sense. One ValueError modified one AccessError modified
15/10/2019: standup/start has error "An active standup is currently running in this channel" added to it
16/10/2019: is_unread removed from the message structure
17/10/2019: Rules for handle creation updated " If the concatenation is longer than 20 characters it is cutoff at 20
characters. If the handle is already taken you may modify the handle in any way you see fit to make it unique."
17/10/2019: Clarification added to "permissions" by providing examples to explain the difference more between general
permissions and channel permissions
18/10/2019: "note: this is not requried to be completed until iteration 3" added to uploadphoto
An overview of this background and this project can be found in a short video found HERE
https://youtu.be/Mzg3UGv3TSw.
" README.md /COMP1531/19T3-cs1531-project/blob/master/README.md
COMP1531 Major Project
Aims:
Changelog cleared 5th October in git hash "84cc5a90 (/COMP1531/19T3-
cs1531-
project/commit/84cc5a90991143babead17179abedf063e78bc6d)"
Overview
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 2 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
To manage the transition from trimesters to hexamesters in 2020 UNSW has established a new focus on building an in-
house digital collaboration and communication tool for groups and teams.
Rather than re-invent the wheel UNSW has decided that it finds the functionality of Slack https://slack.com/intl/en-au/
to be nearly exactly what it needs. For this reason UNSW has contracted out Rayden Pty Ltd a small software business run
by Rob and Hayden to build the new product. In UNSW's attempt to connect with the younger and more "hip" generation
that fell in love with flickr Tumblr etc they would like to call the new UNSW-based product slackr.
Rayden Pty Ltd has sub-contracted two software firms:
BananaPie Pty Ltd two software developers Sally and Bob who will build the initial web-based GUI
YourTeam Pty Ltd a team of talented misfits completing COMP1531 in 19T3 who will build the backend python server
and possibly assist in the GUI later in the project
In summary UNSW contracts Rayden Pty Ltd who sub contracts:
BananaPie Sally and Bob for front end work
YourTeam you and others for backend work
Rayden Pty Ltd met with Sally and Bob the front end development team 2 weeks ago to brief them on this project. While
you are still trying to get up to speed on the requirements of this project Sally and Bob understand the requirements of the
project very well.
Because of this they have already specified a common interface for the front end and backend to operate on. This allows
both parties to go off and do their own development and testing under the assumption that both parties comply will comply
with the common interface. This is the interface you are required to use
Beside the information available in the interface that Sally and Bob provided you have been told so far that the features of
slackr that UNSW would like to see implemented include:
e. Ability to login register if not logged in and log out
f. Ability to reset password if forgotten it
g. Ability to see a list of channels
h. Ability to create a channel join a channel invite someone else to a channel and leave a channel
i. Within a channel ability to view all messages view the members of the channel and the details of the channel
j. Within a channel ability to send a message now or to send a message at a specified time in the future
k. Within a channel ability to edit remove pin unpin react or unreact to a message
l. Ability to view user anyone's user profile and modify a user's own profile name email handle and profile photo
m. Ability to search for messages based on a search string
en. Ability to modify a user's admin privileges: MEMBER ADMIN OWNER
ee. Ability to begin a "standup" which is a 15 minute period where users can send messages that at the end of the period
will automatically be collated and summarised to all users
To get further information about the requirements Rayden Pty Ltd has provided a pre-recorded video briefing with verbal
and visual descriptions of what UNSW would like to see in the Slackr product. This can be found HERE
https://youtu.be/0_jaxpOSoj4. Hint: This video should be the main source of information from which you derive your
user stories
After your week 2 tutorial you should know who your team members are. Follow the instructions on the tutorial sheet to
ensure your team is registered. You need to do this by Thursday 9PM in week 2.
If you registered your team on time then on Sunday of week 2 you should have access to an individual repository at this
URL:
https://gitlab.cse.unsw.edu.au/COMP1531/19T3/team_name https://gitlab.cse.unsw.edu.au/COMP1531/19T3/team_name
where team-name is the name of your group as registered on the course website.
During your lab class in weeks without demonstrations see below you and your team will conduct a short stand-up in the
presence of your tutor. Each member of the team will briefly state what they have done in the past week what they intend
to do over the next week and what issues they faced or are currently facing. This is so your tutor who is acting as a
representative of the client is kept informed of your progress. They will make note of your presence and may ask you to
elaborate on the work you've done.
COMPLETED
Setup
Progress check-in
Iteration 1: Tests and Stories
Iteration 2: Servers and Products
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 3 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
In this iteration you are expected to:
e. Implement the backend interface functions including storage of the data and wrap them in a flask webserver
f. Provide assurances that your backend implementation is fit for purpose. Consider both verification and validation when
doing this. This will at a minimum require acceptance criteria for your user stories.
Briefly describe the strategies you followed and tools you used to achieve this in assurance.md .
g. Track your progress via the task board on GitLab.
h. Reflect on your use of agile practices and how you worked as a team.
Your reflection should at a minimum include:
How often you met and why you met that often
What methods you used to ensure that meetings were successful
What steps you took when things did not go to plan during iteration to
Details on how you had multiple people working on the same code
Write this in teamwork.md .
This iteration is due to be submitted at 8pm Sunday 27th October week 6. You will then be demonstrating this in your
week 7 lab week 8 for monday tutes. All team members must attend this lab session.
To submit one team member must run this command in the CSE environment:
1531 submit iteration2
Only one team member is required to submit for the entire groups submission to be recorded. Make sure that everything
you intend to submit is included in your repo.
When you submit the following commands will be executed in the root of your repo. It is up to you how you choose to use
the results of these commands but you will need to confirm your submission if any of them fail.
python3-coverage run --branch --source=server -m pytest
Runs pytest over all python files in server and collects coverage information.
python3-coverage report
Generates a simple report based on the above test run.
pylint3 server/*
Runs pylint over the all files in server .
Open a terminal and in your project directory run:
python3 server.py
This will begin a very simple server. To play around with this server in another terminal you can run the following
commands to make a GET request and get a response:
curl 'http://127.0.0.1:5000/echo/get?echo=helloworld
curl -d "echo=helloworld" -X POST 'http://127.0.0.1:5000/echo/post'
More information about running this server will be provided in week 4.
As you know in this iteration you will have to store data to implement the backend. This will be discussed in week 5/6
lectures but in the meantime you can simply use a single global variable containing nested dictionaries/lists to store the
data.
Details concerning the front-end will be released in week 5.
Task
Submission
Running the server
Storage of data
Connecting to the frontend
Project/COMP1531/19T3-cs1531-project
Repository/COMP1531/19T3-cs1531-project/tree/master
෈կ/COMP1531/19T3-cs1531-project/tree/master
൉Ի/COMP1531/19T3-cs1531-project/commits/master
ړඪ/COMP1531/19T3-cs1531-project/branches
ຽᓋ/COMP1531/19T3-cs1531-project/tags
ᨯሠᘏ/COMP1531/19T3-cs1531-project/graphs/master
ړඪࢶ/COMP1531/19T3-cs1531-project/network/master
ྲ᫾/COMP1531/19T3-cs1531-project/compare?from=master&to=master
ᕹᦇࢶ/COMP1531/19T3-cs1531-project/graphs/master/charts
CI / CD/COMP1531/19T3-cs1531-project/pipelines
Wiki/COMP1531/19T3-cs1531-project/wikis/home
Snippets/COMP1531/19T3-cs1531-project/snippets
Members/COMP1531/19T3-cs1531-project/settings/members
1



/COMP1531/19T3-
cs1531-project
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 4 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
Section Weighting Criteria
Implementation 50% All interface functions are implemented correctly based on the specification
Backend tested and working with frontend provided
Appropriate data structures are used to store application state.
The flask wrapper for the interface is complete and functional.
Assurance 25% Demonstration of an understanding of the need for software verification and
validation
Development of appropriate acceptance criteria based on user stories and
requirements.
Demonstration of appropriate tool usage for assurance code coverage linting etc.
Teamwork 25% Consistent work towards the goal of a working backend.
Task board is always up to date and reflects ongoing work
Demonstration of appropriate use of agile practices to work effectively as a team.
When you demonstrate this iteration the breakdown will go approximately like this:
5 minutes of presenting your code tests and how it integrates with the provided front-end
10 minutes of Q&A from the tutors including questions about how your team worked as a group
Details will be released in week 7
Variable
name Type
named
exactly
email
string
named
exactly id
integer
named
exactly
password
string
named
exactly
token
string
named
exactly
message
string
contains
substring
name
string
contains
substring
code
string
has prefix
is_
boolean
has prefix
time_
datetime
Marking Criteria
Demonstration
Iteration 3: Improvements from customer feedback
Interface specifications from Sally and Bob
Data types
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 5 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
has suffix
_id
integer
has suffix
_url
string
has suffix
_str
string
has suffix
end
integer
has suffix
start
integer
outputs
only named
exactly
messages
List of dictionaries where each dictionary contains types { message_id u_id message time_created
reacts is_pinned }
outputs
only named
exactly
reacts
List of dictionaries where each dictionary contains types { react_id u_ids is_this_user_reacted } where
react_id is the id of a react and u_ids is a list of user id's of people who've reacted for that react.
is_this_user_reacted is whether or not the authorised user has been one of the reacts to this post
outputs
only named
exactly
channels
List of dictionaries where each dictionary contains types { channel_id name }
outputs
only named
exactly
members
List of dictionaries where each dictionary contains types { u_id name_first name_last }
Many of these functions nearly all of them need to be called from the perspective of a user who is logged in already. When
calling these "authorised" functions we need to know: 1 Which user is calling it 2 That the person who claims they are
that user is actually that user
We could solve this trivially by storing the user ID of the logged in user on the front end and every time the front end from
Sally and Bob calls your background they just sent a user ID. This solves our first problem 1 but doesn't solve our
second problem! Because someone could just "hack" the front end and change their user id and then log themselves in as
someone else.
To solve this when a user logs in or registers the backend should return a "token" an authorisation hash that the front end
will store and pass into most of your functions in future. When these "authorised" functions are called you can check if a
token is valid and determine the user ID.
The details of how to deal with this authroisation will be covered in week 5.
The AccessError is not one of Python's built in types. For iteration one you can either:
Just use another error as a placeholder for now
Make your own AccessError as per instructions that we have provided
https://webcms3.cse.unsw.edu.au/COMP1531/19T3/resources/35860
Members in a channel have two permissions. 1 Owner of the channel the person who created it and whoever else that
creator adds 2 Members of the channel
Slackr user's have three permissions 1 Owners which have the same privileges as an admin permission_id 1. 2
Admins who have special permissions that members don't permission_id 2
Admins have the same capabilities as owners except that admins cannot change owner's permissions 3
Members who do not have any special permissions permission_id 3
All slackr members are by default members except for the very first user who signs up who is an owner
A user's primary permissions are their "Slackr" permissions. Then the channel permissions are layered on top. For example:
An owner of slackr is an owner in every channel
An admin of slackr is an owner in every channel
Token
Access Error
Permissions:
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 6 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
A member of slackr is a member in channels they are not owners of
A member of slackr is an owner in channels they are owners of
Once standups are finished all of the messages sent to standup/send are packaged together in one single message posted
by the user who started the standup and sent as a message to the channel the standup was started in timestamped at the
moment the standup finished.
The structure of the packaged message is like this:
For example hayden: I ate a catfish rob: I went to kmart michelle: I ate a toaster isaac: my catfish ate a toaster
HTTP
Request Endpoint name Parameters Return type Exception Description
POST echo/post echo {echo} Returns the input
GET echo/get echo {echo} Returns the input
POST auth/login email
password
{ u_id token } ValueError when:
Email entered is not a valid email using
the method provided here
https://www.geeksforgeeks.org/check-
if-email-address-valid-or-not-in-
python/ unless you feel you have a
better method
Email entered does not belong to a
user
Password is not correct
Given a registered users'
email and password and
generates a valid token for
the user to remain
authenticated
POST auth/logout token { is_success } N/A Given an active token
invalidates the taken to log
the user out. If a valid
token is given and the
user is successfully
logged out it returns true
otherwise false.
POST auth/register email
password
name_first
name_last
{ u_id token } ValueError when:
Email entered is not a valid email using
the method provided here
https://www.geeksforgeeks.org/check-
if-email-address-valid-or-not-in-
python/ unless you feel you have a
better method.
Email address is already being used by
another user
Password entered is less than 6
characters long
name_first not is between 1 and 50
characters in length
name_last is not between 1 and 50
characters in length
Given a user's first and
last name email address
and password create a
new account for them and
return a new token for
authentication in their
session. A handle is
generated that is the
concatentation of a
lowercase-only first name
and last name. If the
concatenation is longer
than 20 characters it is
cutoff at 20 characters. If
the handle is already
taken you may modify the
handle in any way you see
fit to make it unique.
POST auth/passwordreset/request email {} N/A Given an email address if
the user is a registered
user send's them a an
email containing a specific
secret code that when
entered in
auth_passwordreset_reset
shows that the user trying
to reset the password is
the one who got sent this
email.
POST auth/passwordreset/reset reset_code {} ValueError when: Given a reset code for a
Standups
Interface
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 7 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
new_password reset_code is not a valid reset code
Password entered is not a valid
password
user set that user's new
password to the password
provided
POST channel/invite token
channel_id
u_id
{} ValueError when:
channel_id does not refer to a valid
channel that the authorised user is part
of.
u_id does not refer to a valid user
AccessError when
the authorised user is not already a
member of the channel
Invites a user with user id
u_id to join a channel with
ID channel_id. Once
invited the user is added
to the channel
immediately
GET channel/details token
channel_id
{ name
owner_members
all_members }
ValueError when:
Channel ID is not a valid channel
AccessError when
Authorised user is not a member of
channel with channel_id
Given a Channel with ID
channel_id that the
authorised user is part of
provide basic details
about the channel
GET channel/messages token
channel_id
start
{ messages
start end }
ValueError when:
Channel ID is not a valid channel
start is greater than or equal to the
total number of messages in the
channel
AccessError when
Authorised user is not a member of
channel with channel_id
Given a Channel with ID
channel_id that the
authorised user is part of
return up to 50 messages
between index "start" and
"start + 50". Message with
index 0 is the most recent
message in the channel.
This function returns a
new index "end" which is
the value of "start + 50"
or if this function has
returned the least recent
messages in the channel
returns -1 in "end" to
indicate there are no more
messages to load after
this return.
POST channel/leave token
channel_id
{} ValueError when:
Channel ID is not a valid channel
Given a channel ID the
user removed as a
member of this channel
POST channel/join token
channel_id
{} ValueError when:
Channel ID is not a valid channel
AccessError when
channel_id refers to a channel that is
private when the authorised user is
not an admin
Given a channel_id of a
channel that the
authorised user can join
adds them to that channel
POST channel/addowner token
channel_id
u_id
{} ValueError when:
Channel ID is not a valid channel
When user with user id u_id is already
an owner of the channel
AccessError when the authorised user is
not an owner of the slackr or an owner of
this channel
Make user with user id
u_id an owner of this
channel
POST channel/removeowner token
channel_id
u_id
{} ValueError when:
Channel ID is not a valid channel
When user with user id u_id is not an
owner of the channel
AccessError when the authorised user is
not an owner of the slackr or an owner of
this channel
Remove user with user id
u_id an owner of this
channel
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 8 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
GET channels/list token { channels } N/A Provide a list of all
channels and their
associated details that
the authorised user is part
of
GET channels/listall token { channels } N/A Provide a list of all
channels and their
associated details
POST channels/create token name
is_public
{ channel_id } ValueError when:
Name is more than 20 characters long
Creates a new channel
with that name that is
either a public or private
channel
POST message/sendlater token
channel_id
message
time_sent
{ message_id } ValueError when:
Channel ID is not a valid channel
Message is more than 1000 characters
Time sent is a time in the past
AccessError when: the authorised user has
not joined the channel they are trying to
post to
Send a message from
authorised_user to the
channel specified by
channel_id automatically
at a specified time in the
future
POST message/send token
channel_id
message
{ message_id } ValueError when:
Message is more than 1000 characters
AccessError when: the authorised user has
not joined the channel they are trying to
post to
Send a message from
authorised_user to the
channel specified by
channel_id
DELETE message/remove token
message_id
{} ValueError when:
Message based on ID no longer exists
AccessError when none of the following
are true:
Message with message_id was sent by
the authorised user making this
request
The authorised user is an admin or
owner of this channel or the slackr
Given a message_id for a
message this message is
removed from the channel
PUT message/edit token
message_id
message
{} AccessError when none of the following
are true:
Message with message_id was sent by
the authorised user making this
request
The authorised user is an admin or
owner of this channel or the slackr
Given a message update
it's text with new text
POST message/react token
message_id
react_id
{} ValueError when:
message_id is not a valid message
within a channel that the authorised
user has joined
react_id is not a valid React ID
Message with ID message_id already
contains an active React with ID
react_id
Given a message within a
channel the authorised
user is part of add a
"react" to that particular
message
POST message/unreact token
message_id
react_id
{} ValueError when:
message_id is not a valid message
within a channel that the authorised
user has joined
react_id is not a valid React ID
Message with ID message_id does not
contain an active React with ID react_id
Given a message within a
channel the authorised
user is part of remove a
"react" to that particular
message
POST message/pin token
message_id
{} ValueError when:
message_id is not a valid message
Given a message within a
channel mark it as
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 9 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
The authorised user is not an admin
Message with ID message_id is already
pinned
AccessError when
The authorised user is not a member of
the channel that the message is within
"pinned" to be given
special display treatment
by the frontend
POST message/unpin token
message_id
{} ValueError when:
message_id is not a valid message
The authorised user is not an admin
Message with ID message_id is already
unpinned
AccessError when
The authorised user is not a member of
the channel that the message is within
Given a message within a
channel remove it's mark
as unpinned
GET user/profile token u_id { email
name_first
name_last
handle_str }
ValueError when:
User with u_id is not a valid user
For a valid user returns
information about their
email first name last
name and handle
PUT user/profile/setname token
name_first
name_last
{} ValueError when:
name_first is not between 1 and 50
characters in length
name_last is not between 1 and 50
characters in length
Update the authorised
user's first and last name
PUT user/profile/setemail token email {} ValueError when:
Email entered is not a valid email using
the method provided here
https://www.geeksforgeeks.org/check-
if-email-address-valid-or-not-in-
python/ unless you feel you have a
better method.
Email address is already being used by
another user
Update the authorised
user's email address
PUT user/profile/sethandle token
handle_str
{} ValueError when:
handle_str must be between 3 and 20
characters
handle is already used by another user
Update the authorised
user's handle i.e. display
name
POST user/profiles/uploadphoto
note: this is not requried to
be completed until iteration
3
token
img_url
x_start y_start
x_end y_end
{} ValueError when:
img_url is returns an HTTP status other
than 200.
any of x_start y_start x_end y_end are
not within the dimensions of the image
at the URL.
Given a URL of an image
on the internet crops the
image within bounds
x_start y_start and
x_end y_end. Position
00 is the top left.
POST standup/start token
channel_id
{ time_finish } ValueError when:
Channel ID is not a valid channel
An active standup is currently running
in this channel
AccessError when
The authorised user is not a member of
the channel that the message is within
For a given channel start
the standup period
whereby for the next 15
minutes if someone calls
"standup_send" with a
message it is buffered
during the 15 minute
window then at the end of
the 15 minute window a
message will be added to
the message queue in the
channel from the user who
started the standup.
POST standup/send token {} ValueError when: Sending a message to get
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 10 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
channel_id
message
Channel ID is not a valid channel
Message is more than 1000 characters
An active standup is not currently
running in this channel
AccessError when
The authorised user is not a member of
the channel that the message is within
buffered in the standup
queue assuming a
standup is currently active
GET search token
query_str
{ messages } N/A Given a query string
return a collection of
messages in all of the
channels that the user has
joined that match the
query
POST admin/userpermission/change token u_id
permission_id
{} ValueError when:
u_id does not refer to a valid user
permission_id does not refer to a value
permission
AccessError when
The authorised user is not an admin or
owner
Given a User by their user
ID set their permissions to
new permissions
described by
permission_id
For all functions except auth_register auth_login
Error thrown when token passed in is not a valid token
The behaviour in which channel_messages returns data is called pagination. It's a commonly used method when it comes
to getting theoretially unbounded amounts of data from a server to display on a page in chunks. Most of the timelines you
know and love - Facebook Instagram LinkedIn - do this.
For example if we imagine a user with token "12345" is trying to read messages from channel with ID 6 and this channel
has 124 messages in it 3 calls from the client to the server would be made. These calls and their corresponding return
values would be:
channel_messages"12345" 6 0 => { >messages@ 0 49 }
channel_messages"12345" 6 50 => { >messages@ 50 99 }
channel_messages"12345" 6 100 => { >messages@ 100 -1 }
Iteration Code and report due Demonstration to tutors
Assessment weighting of
project %
1 8pm Sunday 6th October
week 3
In YOUR week 4 laboratory week 5 for
monday tutes
30%
2 8pm Sunday 27th October
week 6
In YOUR week 7 laboratory 40%
3 8pm Sunday 17th November
week 9
In YOUR week 10 laboratory 30%
While it is up to you as a team to decide how work is distributed between you for the purpose of assessment there are
certain key criteria all members must.
Code contribution
Documentation contribution
Usage of git/GitLab
Attendance
Peer assessment
Errors for all functions
AccessError
Pagination
Due Dates and Weightings
Expectations
2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab
第 11 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master
Academic conduct
The details of each of these is below.
While in general all team members will receive the same mark a sum of the marks for each iteration if you as an
individual fail to meet these criteria your final project mark may be scaled down most likely quite significantly.
All team members must contribute code to the project. Tutors will assess the degree to which you have contributed by
looking at your git history and analysing lines of code number of commits timing of commits etc. If you contribute
significantly less code than your team members your work will be closely examined to determine what scaling needs to be
applied.
All team members must contribute documentation to the project. Tutors will assess the degree to which you have
contributed by looking at your git history but also asking questions essentially interviewing you during your
demonstration.
Note that contributing more documentation is not a substitute for not contributing code.
You will be required to complete a form in week 10 where you rate each team member's contribution to the project and
leave any comments you have about them. Information on how you can access this form will be released closer to Week 10.
Your other team members will not be able to see how you rated them or what comments you left.
If your team members give you a less than satisfactory rating your contribution will be scrutinised and you may find your
final mark scaled down.
It is generally assumed that all team members will be present at the demonstrations and at weekly check-ins. If you're
absent for more than 80% of the weekly check-ins or any of the demonstrations your mark may be scaled down.
If due to exceptional circumstances you are unable to attend your lab for a demonstration inform your tutor as soon as
you can so they can record your absence as planned.
The work you and your group submit must be your own work. Submission of work partially or completely derived from any
other person or jointly written with any other person is not permitted. The penalties for such an offence may include
negative marks automatic failure of the course and possibly other academic discipline. Assignment submissions will be
examined both automatically and manually for such submissions.
Relevant scholarship authorities will be informed if students holding scholarships are involved in an incident of plagiarism or
other misconduct.
Do not provide or show your project work to any other person except for your group and the teaching staff of COMP1531. If
you knowingly provide or show your assignment work to another person for any reason and work derived from it is
submitted you may be penalized even if the work was submitted without your knowledge or consent. This may apply even
if your work is submitted by a third party unknown to you.
Note you will not be penalized if your work has the potential to be taken without your consent or knowledge.
Code contribution
Documentation contribution
Peer Assessment
Attendance
Plagiarism
51作业君

Email:51zuoyejun

@gmail.com

添加客服微信: abby12468