CMSE 495

Logo

Michigan State University Data Science Capstone.

View the Project on GitHub msu-cmse-courses/cmse495-SS25

Project Files - Team Charter and Git Repository

   
Teams Logo Git Logo

This project will use both Microsoft TEAMS and git to organize your files and communications.

  1. TEAMS FOLDER Use this folder to store your team organizational documents. This includes the team charter, secure project data, meeting minutes, NDA/IP agreements, Weekly 3x3 Reports etc, report drafts, and milestones.

  2. Git Repository Use this folder to track your teams code. We expect all teams to use good software management practices when dealing with code and a good version control system is key.


1. Teams Folder

Your instructor should have already created a folder for your team. Organize this folder in a way that makes sense to you. However, you must include files to help the instructors (and your teammates) navigate the folder and quickly find what you need.

This week we just need you to create a folder for your signed NDA/IP agreements as well as a complete “Team Charter” document from the in-class activity on Wednesday. As the semester moves forward the structure of your folder should look something like:

Team_Folder:
    README.docx
    Team_Managment_Files
        TEAMNAME_TeamCharter.docx
        Singed_Agreements
            <<NETID>>_Signed_NDA.pdf
            <<NETID>>_Signed_IP.pdf
            <<NETID>>_Signed_NDA.pdf
            <<NETID>>_Signed_IP.pdf
            ...
        Weekly3x3
            <<NETID>>_3x3s.docx
            <<NETID>>_3x3s.docx
            ...
            TEAM_3x3.docx
        MeetingNotes
            Team_meetings_Agenda_and_Notes.docx
    Project_Deliverables
        Propoal.docx
        Proposal_Storyboard.ppt
        Proposal_Video.mp4
        Closed_loop_Storyboard.ppt
        Closed_Loop_Video.mp4
        Final_presntation_Storyboard.ppt
        Final_presentation_video.mp4
        Media_Release.docx
        Project_Slide.ppt
        TEAMNAME_Final_Report.docx
    Individual_TeamMember_files
        <<NETID>>
        <<NETID>>
        ...
    Data_Files
        DataFile1.csv
        DataFile2.csv

The README files are extremely important and should be the first “touch point” in your files. Assume that people new to the folders will start there. Use that to guild people to the other parts of the project. All files should be documented and clearly labeled. There should be no confusion about what a file is and why it is in the folder. Use YYYYMMDD in filenames to denote Year (YYYY), Month (MM) and Day (DD). Use your MSU NetID to indicate files authored by individual team members and use your short team name to designate files for your team turned into the instructor. The only exception to the previous rule is that anything in the Individual_TeamMember_files will mostly be ignored and should be used by team members to share files with each other.


DO NOT use spaces in file names

When you name all of the files and folders inside of a team directory, please DO NOT include spaces in the folder or file names. Although all modern computer’s have ways to accept names with spaces do not use them. Instead use underscores (_) or CamleCase (capital letters at the beginning of each word in the name). Avoiding spaces in your names will Always save time in the long run.

Points will be taken off if files and folders have spaces in the names.

NDA Signatures

If your project requires an NDA or IP agreement. Please make a copy of the correct form for your project and add a picture of your signature to the agreements. The form that is required for your team is in your project team drive. Sign the document and put a pdf copy in a folder named “Team_Managment_Files” or a “Signed_agreements” folder with your files named “MSUNetID_Team_IP.pdf” and “MSUNETID_Team_NDA.pdf”. For example, if I was on the “Valve” team I would save mine as “colbrydi_Valve_IP.pdf” and “colbrydi_Valve_NDA.pdf”.

This is official document so it is important that you make it look professional. Some guidelines to consider:

The following video may be helpful if you are confused. Note this video is from a previous semester so the way we are organizing files is different. The first part about D2L can be ignored (we are using Teams). The rest of the video takes you step by step through me signing the document.

Direct Link to video

Team Charter

Create a word document, give it a clear name and add it to your Team directory. This will be a “living” document which means it will change as your team grows. Remember that we drafted this document in class on Wednesday. To start make sure it includes the following:

For more information about the motivation behind a team charter see the following link:


2. Git Repository

Create a git repository and share it with your classmates and instructors. This repository will be used for the remainder of the course to track all of your code developed for this project. By the end of the semester your repository needs to be well organized and easy to navigate. Use best practices established by other communities. For example, here is a structure you may want to follow:

ProjectName/
    .gitignore
    docs/
         package_name/
              module1.html
              module2.html
         images/
              image1.jpg
    environments.yml
    Examples/
          datafile1.csv
          datafile2.tiff
          datafile3.xls
    LICENSE.txt
    makefile
    package_name/
          __init__.py
          module1.py
          module2.py
          test/
              __init__.py
              test_module1.py
              test_module2.py
    README.md
    setup.py

Projects structure will vary. The important part is that repositories are well documented so that it is easy to navigate.

Again, the README file is extremely important and should be the first “touch point” in your files in your repository. Write the readme in a way that assumes that people reading it know nothing about the project. This means you include a brief description of the class and then guild people to the other parts of the project. All files should be documented and clearly labeled. There should be no confusion about what a file is and why it is in the folder.

Examples

Here is an example projects you can download from a different course with a similar structure. Note these may have had slightly different expectation and assignment goals relative to your project but are still good representation of the types of projects that would be acceptable for this course. Projects shared with permission by former students:

Even more projects (may require logging into MSU GitLab to access:

GitHub vs GitLab vs Other

If your code is under and IP agreement then you are required to use the MSU Gitlab (https://gitlab.msu.edu) server for hosting your private git repository. This requirement can be waived if you have written permission from the IP owner asking that you use another git service (as long as your instructor has access).

If your code is not under an IP agreement then your instructors are flexible as to which online git source you use. Here are things to consider:

Talk to your instructors if you have any problems.

Basic git INSTRUCTIONS

For this milestone we only need to set up the basic structure with the following. To start, please keep the files simple and do not include files that do not add something to the project (see “what not to include” below):

ProjectName/
    .gitignore
    LICENSE.txt
    README.md

Here is a description of each of these:

HINT: Many of you may find this git template helpful.

If you need help figuring out how to set up your git repository there are a ton of tutorials online. For example here is a good one:

If you continue to need help go see your instructors.

The following video are instructions specifically for how to use the MSU Gitlab. We will be using the MSU gitlab for all projects because it allows us to best maintain file permissions. If you have a completely opensource project with no NDA or IP agreement you are also allowed to post on Github or other public spaces:

Some of you may get some sort of “Authentication” error when trying to use git on a windows machine (especially if you have your computer already set up to use github). If that is the case, the following video may help you set up an SSH key on your windows machine.

As you update and change the files in your repository you will need to push those changes to gitlab. The following instructions walk you though this process:


What not to include (building a .gitignore file)

First thing we want to remember is that not everything should go into a git repository. i.e. we do not want to bloat our repository with unwanted files. The git repository works best with Text files that represent “source” code and not compiled or generated code. Here are some basic guidelines of what not to include:

A good rule of thumb is that if you did not generate the file and/or do not know what it is you probably do NOT want to include it in your repository.

WARNING do not blindly add all files to your repository with the * (star) syntax. This is bad practice. For example do NOT do the following:

git add *

Other files to avoid

In addition to the above files it is good to avoid any type of “Binary” file (with a few exceptions). As stated early, git works best with text files so it can easily track changes. Some example binary files to avoid include:

Note: one exception to the above rules are image files (ex jpg or png) that are used to help markdown or in the documentation. It is typically okay to include these since they tend to get included only once and do not change much as the project evolves.

.gitignore file

The .gitignore (read “dot git ignore”) file is used to help keep unwanted files out of your project. Each line .gitignore file are filenames you want git to ignore. For example, based on what we said above, a good place to start on your .gitignore file would be the following two lines:

.ipynbcheckpoint
__pychache__

What should go into a .gitignore depends a lot on the type of project. However, you don’t need to invent these from scratch. For example, you could just copy the .gitignore file from the course repository or find one on the internet.


README.md file

Make sure your git repository has a README.md file. This file is very important as it will be the first place everyone will look when they first get your repository. Write this as if someone in the future stumbles across your folder. Include a brief description of the class, the community partner, the project and the goals of this repository. Link to any installation instructions or getting started instructions. It is important that this file guides readers to the rest of the repository. A great resource for writing a well thought out README file can be found here:

https://readme.so/editor


Jupyter notebook files in git repositories

Turns out that Jupyter notebook files and git repositories work very poorly together. Jupyter notebook files are a unique combination of source and program generated information. So, every time you run a jupyter file it can add output cells which make git think you you changed something important. In many cases it is just a few numbers or some output text. When you run the git status command it always looks like jupyter notebook files have changed even when they have not changed.

A good rule of thumb is to clear all of the output files before committing any changes to jupyter notebook files.

The following video goes though why we have to treat jupyter notebooks this way:

Direct Link


Licensing file

As authors of software it is important to let people know how they can use our software.

If your project has an IP agreement you should include an unsigned copy of the agreement and include a LICENSE file similar to the following.

License Agreement

This software is the intellectual property of [COMMUNITY PARTNER NAME] and was developed by the [TEAM NAME] Capstone team, consisting of [Name1], [Name2], [Name3]...

The use of this software is governed by the terms and conditions outlined in the attached Intellectual Property Agreement (IP Agreement) identified as [FILENAME].

By using this software, you agree to comply with the terms of the IP Agreement.

If you do not have an NDA or IP agreement that covers the License, the following article is a great resource for learning the types of terminology and logic used when talking about software License.

Creative commons license

Include a ./LICENSE test file in your top directory. Select which license to use using the following website:

Copy and paste your chosen license file into a file named ./LICENSE

The following articles are a great resource for learning the types of terminology and logic used when talking about software License.

Make sure you talk to your instructors to know what type of license is appropriate for your project given. What license you use may also depend on the IP agreement made with you and the community partner.

Include a ./LICENSE.txt test file in your top directory.

3. Working with files professionally

Anytime you are working with files you need to pay attention to what you are doing. Pay attention to whom you will be sharing files and keep things clean and professional. Points will be taken off for unprofessional files.

Consider the following guidelines.


Use Filenames that make sense

Make sure the contents of the files are clear. If something is associated with a specific date then would like to use the following format:

YYYYMMDD-TEAM-Contents.ext

DO NOT use spaces in file names

I said this above and I will say it again.

When you name all of the files and folders inside of a repository, it is important that your names DO NOT include spaces. Although all modern computer’s have ways to accept names with spaces do not use them. Instead use underscores (_) or CamleCase (No spaces and capital letters at the beginning of each word in the name). Avoiding spaces in your names will Alaways save time in the long run.


Always Use Relative Paths

In your code there are two basic ways to determine the location of a folder inside your computer; Relative Paths and Absolute Paths. A relative path is a path starting from your current directory and an absolute path is is a path starting from your computer’s “root” directory.

ALWAYS use relative paths in your git repository. This ensures that others will be able to use your software if they download it onto their computer. For example:

Good: ./data/  or ../data/ is a relative path to a child directory or sibling directory called data. 

Bad (not acceptable): C:/research/data or /mnt/home/data are absolute paths to a data directory

4. Submission

Put all the docents in the required locations.

If you have an IP and NDA agreement have one (and only one) person from your team email the signed documents to your instructors and your community partners. These MUST be professional emails. You can ask an instructor to check it before hitting send.


Evaluation and Rubric

Project will be evaluated primary looking at following directions.

Make sure your instructors and classmates have the correct permissions to access, clone your repositories and provide the full git command/instructions in your team charter.

Your instructor will evaluate your assignment by reviewing the following:

You will be graded on how well directions were followed and the professionalism of the submission.

Points will be taken off if your signed NDA/IP agreemnts are unprofessional.

The following is an approximate rubric that will be used as a guild for evaluating this assignment.

  Meets Expectations Needs Improvement Incomplete  
Repository README Includes description of class and project (10 pts) Present but lacking detail (5 pts) Missing (0 pts)  
Repository gitignore Present and includes approriate filetypes (5 pts) Present but lacking important details (2 pts) Missing (0 pts)  
license Present and correct (10 pts) Incorrect license or doesn’t meet NDA/IP agreement (5 pts) Missing (0 pts)  
Repository forking/cloning Repo can be forked and cloned from link in team charter (10 pts) Repo premissions are incorrect (5 pts) Repo cannot be forked/clones (0 pts)  
NDA/IP Agreements Complete and correctly located (10 pts) Not correctly located or nonprofessional (5 pts) Missing (0 pts)  
Team Charter Content Charter includes all required sections and contact info (45 pts) Charter missing at least one required element (35 pts) No charter provided (0 pts)  
Team Charter & Repository Formatting Overall repository well-organized (10 pts) Some repository organizational issues (5 pts) Major missing or incomplete components (0 pts)  

Post-Evaluation

Review feedback from instructors and ensure that any requested changes are made.

Written by Dr. Dirk Colbry, Michigan State University Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.