OIM3640 - Problem Solving and Software Design

2026 Spring

Session 22 (4/14)

contain

Today's Agenda

  • Announcements/Updates
  • What We've Learned So Far
  • Review Questions
  • Flask Forms and POST Requests (lecture slides)
  • MP3 Work Session
  • Final Project Introduction

Announcements/Updates

  • Mini Project 3 - Web App (MBTA + Mapbox)
    • Due: 4/21
    • Today: learn forms, then hands-on MP3 time
  • Final Project - proposal due 4/17 (Fri)!
  • Elective Projects - bonus opportunities (not required)
  • Communication
    • Office Hours: Walk-in or by appointment
    • Email: Specify course # in subject, e.g., "OIM3640: GitHub settings"
    • You are required to meet with me at least once this semester
  • Questions?

What We've Learned So Far

  • Python Fundamentals: variables, types, functions, conditionals
  • Iteration: for, while, break, continue
  • Strings: indexing, slicing, methods
  • Data Structures: lists, dicts, tuples, sets
  • Error Handling: try/except/finally
  • APIs: requests, JSON, GET/POST, API keys
  • File I/O: read/write files, CSV, JSON
  • Flask basics: routes, templates, URL parameters

🙋 Review Questions

from flask import Flask
app = Flask(__name__)

@app.get('/')
def home():
    return 'Hello!'

@app.get('/greet/<name>')
def greet(name):
    return f'Hi, {name}!'
  • What URL would you visit to see "Hello!"?
  • What URL would you visit to see "Hi, Alice!"?
  • What does <name> do in the route?

🙋 Review Questions (continued)

@app.get('/hello/<name>')
def greet(name):
    return render_template('hello.html', name=name)
<!-- templates/hello.html -->
<h1>Hello, {{ name }}!</h1>
  • What does render_template do?
  • What does {{ name }} become when you visit /hello/Zhi?
  • Where must the hello.html file be located?

Flask Forms and POST Requests

Let's continue with the Flask lecture slides - starting from "GET vs POST".

After the lecture, you'll have time to work on MP3.

Your Turn: MP3 Work Session

Work on your Mini Project 3:

  1. If you haven't started: get Flask running, create app.py with a home page
  2. If you have Flask running: add a form and handle the submission
  3. If forms are working: connect to the Mapbox/MBTA APIs
  4. If APIs are connected: display results in a template

Ask me or a classmate if you get stuck!

Final Project: Overview

Your capstone project - 25% of your grade.

  • You choose the problem, the approach, and the scope
  • Individual project
  • Build something meaningful for your portfolio
  • AI tools are encouraged (and documented)
Milestone Date
Proposal 4/17 (Fri)
Gallery Walk 4/28 (Mon)
Peer Review 4/30 (Wed)
Final Submission 5/1 (Thu)

Final Project: What to Build?

  • Web app (Flask) - build on MP3
  • Data analysis/visualization - build on MP2
  • Automation - APIs and scripts
  • AI-powered tool - OpenAI, Claude APIs
  • Interdisciplinary - apply Python to another course or interest

A project built for someone (a club, a friend, a small business) often turns out better than one built in the abstract.

Final Project: Proposal (due 4/17)

Create proposal.md in a new public GitHub repo:

  1. What are you building? (one or two sentences)
  2. Why? (what motivates you, what problem does it solve)
  3. MVP vs. Stretch Goals (minimum working version vs. nice-to-haves)
  4. What don't you know yet? (be honest about unknowns)

Keep it short and focused. You've done this three times already.

Final Project: Requirements

Your repo must include:

  • Working code that runs without errors
  • README.md - what it does, how to install and run, API keys needed
  • proposal.md - your proposal from 4/17
  • AI_USAGE.md - document what you asked AI, what it generated, what you did with it, and what you learned
  • Consistent commit history - not one big commit at the end
  • No secrets in repo - use .env + .gitignore

Full instructions: project.md

Before You Leave

  • Any questions?
  • Start your Learning Log for this week (logs/wk12.md)
  • Keep working on MP3 - due 4/21
  • Start thinking about your Final Project - proposal due 4/17!
  • Push your work to GitHub

Next session: Deploying your Flask app + MP3 code walk!

global styles