Summary: This multi part project will provide you a chance to practice your programming skills and practice with the agile software development methodology, continuous integration, automated testing and other more industry oriented practices that we don't often use in academia.
This semester we are going to build a project for the CUBES project in the college of business here at BSU
Agile: This project will be done in the agile methodology in that it will be done in a series of sprints. Each week there will be a 3-6 hour (estimated – this assumes you start early enough to walk away when things get complected) assignment which builds on the previous assignment. So be sure to be careful to practice good software development techniques so that you don't make life difficult for yourself later.
Individual work: Later in the semester we will work on group work. For this project you will work individually. You may ask your classmates for pointers on getting your git/github/jetbrains toolchain setup, but each student should be doing their own work. You can of course use my "as long as you are just talking and no one is on a recording device like a computer"guidelines to point each other at good libraries to do this work.
Tools: Use the correct Jetbrains IDE for your language of choice (see below). If you have not yet done so, activate your jetbrains student account to get one year of academic use of the jetbrains professional development tools.
Version Control: In this class we will use git for version control.
Git for linux: use your package manager to install git. (eg: on debian based systems like ubuntu use sudo apt install git) for redhat based systems use yum
Git for mac or windows: download and install from The official git download site
We will use github for the first project (and likely the second as well). If you have not already done so, make a github account – and send me your github ID via an official electronic communications mechanism (BSU email or the class slack). It is free for the kind of stuff we are doing in class.
Programming languages: You may use one of several programming languages for this first project so long as you make it works on my machine (not just yours). With that in mind the following language are supported in this class.
Python: use Python versions 3.6-3.10. I've not yet installed python 3.11 but if you are really wanting a feature from 3.11 talk to me, I might be able to get it done in the time frame. Also include a requirements.txt. Use pytest as your testing framework.
Java: Java 17 is the current LTS (Long Term Service) version of Java, that's what I'll run/test your work on. If you are using java, use gradle or maven to manage your dependencies in intellij. Be sure to check in the entire project with the build.gradle or maven files when committing/pushing your version control
Go: if you use go, be sure your go.mod file is setup properly and checked in to github.
Rust: If you use rust, be sure to have all your dependencies properly in your cargo.toml
Other languages, if you want to use other languages, see me to make sure I can support them.
Due: Monday Jan 30th at 11:59pm
Create a project in your jetbrain's IDE for your language of choice. Be sure to include your name in your project name (for example jsantoreCubessProject would be a fine name for me to use for this project. I have 70+ students doing some variation of this project and so I'll have a lot of problems with dozens of "project1" projects.
Add the project to git using either the built in jetbrains tools or command line git
share the project on github using either the built in jetbrains tools or command line git. Be sure to include any build files that I need.
Add the appropriate github actions script to your github project, be sure to include a test runner and a linter.
for example if you are using python you would use https://github.com/actions/starter-workflows/blob/main/ci/python-app.yml The linter flake8 and the test runner pytest are already setup for you (if you want to use a formatter like python-black instead of a linter that is fine too)
for example if you are using java you would start with https://github.com/actions/starter-workflows/blob/main/ci/maven.yml or https://github.com/actions/starter-workflows/blob/main/ci/gradle.yml
You will still need to add the test runner and linter, you will likely need to adjust the default jdk from java 11 to java 17. See https://github.com/actions/setup-java andperhaps https://github.com/marketplace/actions/google-java-format (unlike python java have at least three widely used formatting guides)
For Go programming language you could use the built in https://github.com/actions/starter-workflows/blob/main/ci/go.yml
for other languages choose your best version to start with https://github.com/actions/starter-workflows/tree/main/ci
Register for a free wufoo account API key to get your data :https://secure.wufoo.com/signup/17/register/
Create a wufoo form that is close to the official one: https://bsuform3.wufoo.com/forms/m1sxn0860chkqzx/
enter a bit of sample data into your form
Write a program which will (in at least three methods/functions so you can test properly)
use your API key to get the entries data, see this site: https://wufoo.github.io/docs/#entries for documentation
MAKE SURE YOU get all the pages of data no matter how many entries there are.
Be sure to git commit and git push often so you don’t lose anything to a dead laptop.
For this first sprint, just save the data to a file
Be Sure to use the “secrets file” approach so you don’t commit your api-key to github and push your project
Write a readme.md for your project in the github project (you can do it with your jetbrains IDE if you like)
the readme should have
your name
any install and run directions I need beyond the basics.
a brief description of what your project does
a brief description of what is missing from the project (if anything)
make me a collaborator on the project
to submit, make me a collaborator on your project. I'll git clone it, run it and the tests and linter, make an innocuous change to your project, and make sure the github actions work and grade based on these things.
As Part of my grading for at least one sprint – usually this first one, I generally make a small commit to your project and push it to github. Be prepared to do a merge between your work and mine.
This first sprintis as much about getting all of the tools and devops stuff setup and working properly as it is about getting the code to work right. You can find the grading distribution in the Project1Sprint1Grading file