Word Salad
- Thomas Lees, ThomasJHLees
- Janet Matthews-Derrico, j-derrico
- Atreyu Sutton, asutton01
- Tyler Kinkade, tyknkd
Mondays, 18:00 MDT, Zoom
Create a web-based dynamic flashcard study app which implements a spaced-repetition algorithm to review user-input content
Traditional blocked learning (i.e., "cramming") is inefficient compared to spaced interleaved learning (Dunlosky et al., 2013; Kornell & Bjork, 2008; Mondria & Mondria-De Vries, 1994), but very few flashcard apps incorporate spaced-repetition with user content. Therefore, we want to create an easy-to-use app to enable users to study the content they want to study efficiently using spaced-repetition.
- New languages/working environment (e.g., HTML, CSS, SQL, JavaScript, Flask, Heroku)
- No prior experience working with team members
- No experience implementing web-based app with user input
- No experience implementing spaced-repetition algorithms
- Scope of project (could fail to deliver working project due to high number of desired features)
- Take advantage of documentation--while the languages and working environments are new to us, they aren't new, and there is extensive documentation and online resources available
- Close communication via multiple channels (Email, Google Chat, Zoom, Google Docs, GitHub Projects)
- Weekly meetings to check in, discuss challenges/obstacles, and make sure everyone is on track
- Take advantage of team member knowledge on spaced-repetition, research available open source spaced-repetition platforms
- Focus first and foremost on minimum viable product, then prioritize additional desired, but not required features. This will ensure ability to deliver a functional project on deadline
- Website interface with a premade English-English vocabulary flashcard set and no user tracking
- Methods for adding flashcards from the website interface
- Categorization of flash cards and ability to organize by category from the website
- A flashcard "deck" concept to organize cards
- User accounts
- Saving decks to user profiles
- Public and Private card decks
- Searching
We plan to use an Agile framework and borrow pieces of several development idealogies to complete our project.
For our meeting schedule we will largely borrow what Scrum recommends, but condensed into a single weekly meeting. We wil give updates about what we've worked on, what we're going to work on and any blockers that may be in place (standup), host a retrospective of our last sprint period, and complete any required sprint planning. Unfortunately, a daily standup and additional scrum meetings do not make the most sense in a classroom environment.
For our planning and prioritization pieces, we will be using more of a Kanban model. We will define user stories, and organize them in a prioritized backlog. New stories will only be pulled into the board to be worked on when the current work has been completed (within reason). We will also adopt some lean principles in planning where we will only be creating new stories slightly before they are needed instead of trying to map out our entire process. Because of our inexperience in developing programs it makes sense to leave planning to the latest possible second so that we have opportunities to learn pieces that we did not know that we did not know.
The following is a summarized list of the practices we hope to implement on our team:
Agile
- Scrum
- Practices - combined into a single weekly meeting
- Release planning
- Sprint planning
- Sprint review
- Sprint retrospective
- Deliverables
- Product backlog
- Sprint backlog
- Burndown charts
- Shippable functionality
- Practices - combined into a single weekly meeting
- Extreme Programming
- Team-wide coding standard
- Collective team ownership
- Continuous integration via GitHub
- Test-driven development
- Simple design/code
- Small, frequent releases
- Sustainable work pace
- Whole team understands whole project
- Kanban - with our GitHub project board
- Visualize workflow
- Limit work in progress
- Agile Modeling
- Requirements envisioning
- Implement in priority order
- Unified information source (GitHub)
- Document late as possible
- Just barely good enough artifacts
(Adapted from Ambler & Holitza, 2012)
This project has the following directory tree:
.
├── wordsalad/
│ ├── __init__.py
│ ├── db.py
│ ├── schema.sql
│ ├── auth.py
│ ├── home.py
│ ├── decks.py
│ ├── cards.py
│ ├── templates/
│ │ ├── base.html
│ │ ├── index.html
│ │ ├── about.html
│ │ ├── decks/
│ │ │ ├── index.html
│ │ │ ├── create.html
│ │ │ ├── edit.html
│ │ │ └── cards/
| │ │ ├── index.html
| │ │ ├── add.html
│ | │ └── edit.html
│ │ └── auth/
│ │ ├── login.html
│ │ └── register.html
│ ├── static/
│ | ├── style.css
│ | ├── js/
| │ | └── cards.js
| │ └── images/
| │ ├── logo.jpg
| │ ├── salad.png
| │ ├── GRE.png
| │ ├── LSAT.png
| │ └── SAT.png
├── instance/
│ └── wordsalad.sqlite
├── tests/
│ ├── data.sql
│ ├── conftest.py
│ ├── setup.cfg
│ ├── test_factory.py
│ ├── test_db.py
│ ├── test_auth.py
│ ├── test_home.py
│ ├── test_decks.py
│ └── test_cards.py
├── .docs/
| ├── _build/
| | ├── doctrees/
| | └── html/
| ├── Makefile
| ├── README.md
| ├── conf.py
| ├── index.rst
│ └── make.bat
├── csv/
| ├── source_info.csv
| ├── SAT_vocab.csv
| ├── GRE_vocab.csv
│ └── LSAT_vocab.csv
├── images/
│ ├── db_schematic.png
│ ├── kanban/
│ │ └── kanban20220*.png
│ └── mockups/
│ ├── about.png
│ ├── createcard.png
│ ├── decks.png
│ ├── flashcard.png
│ ├── home.png
│ ├── homepage.jpg
│ └── login.png
├── Procfile
├── requirements.txt
├── run.py
├── setup.py
├── MANIFEST.in
├── README.md
├── WEEKLY_STATUS.md
├── PAGE_TESTING.md
├── SQL_TESTING.md
└── FINAL_REPORT.md
File | Description |
---|---|
wordsalad/ | Application directory |
__init__.py |
Flask application factory |
db.py | Database initialization script |
schema.sql | SQL database schema |
auth.py | Blueprint to handle authorization requests |
home.py | Blueprint to handle home/about page requests |
decks.py | Blueprint to handle view/add/edit/delete deck requests |
cards.py | Blueprint to handle view/add/edit/delete card requests |
templates/ | Web app templates directory |
base.html | Base web app page template |
index.html | Main web app page |
about.html | About web app page |
decks/ | Web app flashcard decks directory |
index.html | Web app flashcard decks main page |
create.html | Web app page to add new deck |
edit.html | Web app page to edit existing deck |
cards/ | Web app flashcard deck directory |
index.html | Web app flashcard deck cards page |
add.html | Web app page to add flashcards to deck (incl. via CSV) |
edit.html | Web app page to edit flashcard in deck |
auth/ | Web app user authentication directory |
login.html | Web app user authentication login page |
register.html | Web app user registration page |
static/ | Web app static files directory |
style.css | Cascading style sheet |
js/ | JavaScript directory |
cards.js | Card flipping JavaScript |
images/ | Web app images directory |
*.png | Web app images files |
instance/ | Database directory |
wordsalad.sqlite | SQLite sample database for Heroku deployment |
tests/ | Unit tests directory |
data.sql | Unit test SQL data |
conftest.py | Unit test configuration script (runs for every test) |
setup.cfg | Unit test setup configuration file |
test_factory.py | App factory unit tests |
test_db.py | Database unit tests |
test_auth.py | Authentication unit tests |
test_home.py | Home page unit tests |
test_decks.py | Decks pages unit tests |
test_cards.py | Cards pages unit tests |
.docs/ | Autodocumenter directory |
_build/ | Build files directory |
doctrees/ | Document trees directory |
html/ | HTML files directory |
Makefile | Make file |
README.md | Instructions for installing autodocumenter |
conf.py | Configuration script |
index.rst | Documentation index page |
make.bat | Make batch file |
csv/ | Flashcard CSV files directory |
source_info.csv | Source data information |
SAT_vocab.csv | SAT vocabulary source data |
GRE_vocab.csv | GRE vocabulary source data |
LSAT_vocab.csv | LSAT vocabulary source data |
images/ | Documentation images directory |
db_schematic.png | Database schematic diagram |
kanban/ | Kanban screenshots directory |
kanban2022*.png | Weekly Kanban screenshots |
mockups/ | Web page mockup directory |
*.png | Web page mockups |
Procfile | Heroku procfile |
requirements.txt | Dependencies for deploying to Heroku |
run.py | Script for Heroku deployment |
setup.py | Script to install app |
MANIFEST.in | List of other files to include at installation |
README.md | Summary of project |
WEEKLY_STATUS.md | Summary of weekly meeting, progress, tasks |
PAGE_TESTING.md | Summary of web pages, testing to implement |
SQL_TESTING.md | Summary of database schema, methods, testing |
FINAL_REPORT.md | Final project report |
Ambler, S. W., & Holitza, M. (2012). Agile for dummies, IBM limited edition. Wiley.
Dunlosky, J., Rawson, K. A., Marsh, E. J., Nathan, M. J., & Willingham, D. T. (2013). Improving students’ learning with effective learning techniques: Promising directions from cognitive and educational psychology. Psychological Science in the Public Interest, 14(1), 4-58. https://doi.org/10.1177/1529100612453266
Kornell, N., & Bjork, R. A. (2008). Learning concepts and categories: Is spacing the “enemy of induction”? Psychological Science, 19(6), 585-592. https://doi.org/10.1111/j.1467-9280.2008.02127.x
Mondria, J-A., & Mondria-De Vries, S. (1994). Efficiently memorizing words with the help of word cards and “hand computer”: Theory and applications. System, 22(1), 47–57. https://doi.org/10.1016/0346-251X(94)90039-6