Objective
Students will collaboratively design and propose a Python-based system for managing the availability of washers and dryers on campus. The project involves:
- Writing a proposal.
- Creating a design document.
- Using ChatGPT and GitHub Copilot for ideation, coding assistance, and development.
Overview of the System
The system will:
- Keep track of the status of all washers and dryers on campus (e.g., available, in-use).
- Estimate when a machine will become available based on usage time.
- Notify users when a machine finishes a cycle.
- Assume the use of external WiFi-enabled devices to monitor machine power consumption via current transformers.
Activity Steps
1. Team Formation (5 minutes)
- Divide the class into small teams of 3-5 students.
- Assign roles within each team:
- Team Leader: Oversees progress and ensures deadlines are met.
- System Architect: Focuses on the technical design.
- Developer: Works on Python code with GitHub Copilot.
- AI Specialist: Leverages ChatGPT to assist with ideation and documentation.
- Presenter: Prepares and delivers the final presentation.
2. Project Proposal (10 minutes)
Each team will write a brief project proposal using ChatGPT for assistance. The proposal should include:
- Title: “Campus Washer & Dryer Tracking System”
- Problem Statement:
- Example: “Students often have to wait for washers and dryers to become available, leading to inefficiencies and frustration.”
- Proposed Solution:
- A system that tracks machine availability, estimates wait times, and notifies users when machines are done.
- Key Features:
- Real-time machine status updates.
- Estimated availability times.
- User notifications via email or text.
- Integration with external WiFi-enabled devices to monitor power usage.
Task: Use ChatGPT to refine the problem statement and propose additional features.
Output: Save the proposal in a proposal.md file and commit it to the team’s GitHub repository.
3. System Design Document (15 minutes)
Each team will create a design document using ChatGPT and GitHub Copilot for structure and content generation. The design document should include:
- System Overview:
- Diagram showing the system’s architecture (students can sketch this and describe it).
- Components:
- External WiFi-enabled devices (current transformer sensors).
- Central server for processing data.
- Frontend interface for users (web or mobile app).
- Key Features:
- Machine status tracking (available/in-use).
- Time estimation based on power consumption patterns.
- User notifications for machine completion.
- Data Flow:
- Sensors detect power usage and send data to the server.
- The server processes data to determine machine status and availability.
- The frontend displays status and sends notifications.
- Database Design:
- Tables:
- Machines:
id,location,type(washer/dryer),status(available/in-use),last_used_time. - Users:
id,name,email,phone. - Notifications:
id,user_id,machine_id,notification_time.
- Machines:
- Tables:
- Technology Stack:
- Python or Ruby or ?? for backend processing.
- Flask or Django for the server.
- SQLite or PostgreSQL for the database.
- Frontend: Simple HTML/JavaScript or a mobile framework like React Native.
Task: Use ChatGPT to brainstorm and GitHub Copilot to help structure the design document.
Output: Save the design document as design.md in the GitHub repository.
4. Initial Code and Git Setup (10 minutes)
Each team will:
- Set Up a GitHub Repository:
- Initialize a new repository and share it with team members.
- Commit the
proposal.mdanddesign.mdfiles.
- Start Writing Code:
- Use GitHub Copilot to scaffold the Python project.
- Example Code with GitHub Copilot:pythonCopy code
from flask import Flask, jsonify, request app = Flask(__name__) # Mock data for machines machines = [ {"id": 1, "type": "washer", "status": "available", "location": "Dorm A"}, {"id": 2, "type": "dryer", "status": "in-use", "location": "Dorm A"}, ] @app.route('/machines', methods=['GET']) def get_machines(): return jsonify(machines) @app.route('/machines/<int:id>', methods=['PUT']) def update_machine(id): machine = next((m for m in machines if m["id"] == id), None) if not machine: return jsonify({"error": "Machine not found"}), 404 machine.update(request.json) return jsonify(machine) if __name__ == '__main__': app.run(debug=True)
- Push the Initial Code:
- Commit and push the initial Python project to GitHub.
5. Presentation Preparation (5 minutes)
Each team prepares a 10-minute presentation that includes:
- Proposal: Summarize the problem and solution.
- Design Document: Highlight system architecture, key features, and database design.
- Demo: Showcase initial code with a simple API or mock UI.
Presentation (10 Minutes per Team)
Each team presents their work:
- Proposal Overview (1 minute).
- Design Highlights (5 minutes).
- Code and GitHub Demo (4 minutes).
Evaluation Criteria
- Completeness:
- Did the team produce a proposal, design document, and initial code?
- Use of Tools:
- Did the team effectively use ChatGPT and GitHub Copilot for assistance?
- Presentation Quality:
- Clarity, organization, and depth of the presentation.
- Collaboration:
- Did the team make effective use of Git and GitHub for version control?
Learning Outcomes
- Understand how to use GitHub for project management.
- Gain hands-on experience with ChatGPT and GitHub Copilot for coding and documentation.
- Collaborate effectively on a small software development project.
- Learn to structure a design document and project proposal.
