Ideas and Proposal

This document describes the the first two phases of the project. Phase 1 of the project is the proposal (see later below). Prior to submitting your proposal, you might want some feedback on your ideas, and I want to give you my thoughts. That's phase 0.

Ideas

For the ideas phase, you should read the proposal information and think about what project(s) you might want to do for the course. You can then describe them in a paragraph or two, each, and then email them to me and drop them as a plain text file from your personal account.

Your description should make it clear that this is a project for CS 304, rather than, say, a course on web design. CS 304 is about web databases: websites that evolve over time thanks to user-supplied content. That content can be a simple as a Facebook "like" or a comment on an article, like almost every online newspaper now does. Or it might be much more complex, where users are contributing significant amounts of information (text, pictures, etc.). So in your idea descriptions, you should be sure to talk about the data that the site will collect.

Because users will be inputting most of the data, one issue you should consider is the quality of that data. Will you need to have logins in order to prevent people from inserting junk into your database? You should also consider, just for the practicalities of this project, where you will get the test data from. Do you have friends and family who can help you out with some data entry (once you've constructed the part of the site that allows that).

You might also describe why this site would be cool, useful or interesting: why is it worth building?

In addition to giving you feedback on your descriptions, I'll collect them and post them to the class, to facilitate forming partnerships for the projects. This means if you send me a project idea but decide you like someone else's project idea and want to pair up with her on that project instead of doing your own, that's fine.

I will collect all the dropped files and copy/paste them into a Google Doc shared with the class, so that you can read other people's ideas and find potential partners for the project.

Please keep them brief!

(If you're stumped for ideas, you could consider these python projects.)

File Format

Your submission should be a plain text file; not MS Word, not PDF, not Google Docs, not RTF (Rich Text Format) or anything else. You can write it with Visual Studio Code, Emacs or any other text editor (like for programming).

The first line of your file must be your name, then a blank line, then the text of your submission. For example:

Wendy Wellesley

I would like to implement a combination of Facebook and eBay, where people 
sell stuff only to their friends and friends of friends.... 

Naming your File

Save it in your remote account on Tempest as P0.text. That's a capital P, the number zero, a period, and the word text.

That turns out to be a really difficult task. Every semester, I'll have students submit as "po.txt" or something, and then my collect script misses their file. Naming things correctly is crucial in coding; put your creativity into the contents of the file, not its name.

How to Submit

From a remote terminal, the following command should display your file. You can copy/paste that command:

cat P0.text

If that works, use the drop command to submit your assignment. That command takes two command line arguments: (1) the name of course, cs304 and the name of the file, P0.text. It looks like this.

[anderson@tempest ~]$ drop cs304 P0.text 
Copying P0.text (from anderson) to /home/cs304/drop/ (uid 1942) 
Successful drop. 

Here's the command, suitable for copy/pasting:

drop cs304 P0.text

These descriptions will be shared with the class, so keep that audience in mind.

Also, please send me an email with the subject line of "CS304-P0". In the body, you will say the same thing; just copy/paste is fine. (You can also ask other project-related questions that are only for me, but this is not the time to ask other questions; send those in a different email.) This email will make it easy for me to reply to you and give you feedback on your idea.

Proposal

Perhaps the easiest way to understand the proposal is to work backward from the destination. The destination for the term project is to have an web database site with some cool features that demonstrates your mastery of the concepts and skills we've learned in this course. You would also have a document describing your site, including a technical description of how it is implemented and the cool features that you are responsible for. Ideally, you would be able to show the document to a potential employer or graduate school to convince them of your knowledge of databases and web application programming using Flask.

My philosophy here is that a portfolio of projects and accomplishments is far more informative and convincing than a letter grade. The grade can bolster that information, essentially adding my judgment that this project was worth an A (or whatever) in this course, but it's the project that is important.

Your Project's Features

You and your teammates (teams of three) will create an web application. It should have some cool features that demonstrate your mastery of the concepts and skills we've learned in this course:

  • Displaying, searching, inserting, updating, and deleting data.
  • Sessions — extended interactions with a user, providing context and state
  • Logins and authentication, probably with different permissions for administrators versus ordinary users, and users from each other.
  • File upload, whether pictures, MS Word files, or whatever.
  • Ajax: to allow seamless and asynchronous updates.

Your project need not have all of these, but most projects will have most of these. I'm flexible, so if you have an idea, please talk to me about it. You can also follow this link to a list of possible project ideas.

What to Cover

Your job in the proposal, then, is to take the first step along that path. Keep that hypothetical conversation with a potential employer or grad school in mind. We ultimately want that conversation to be powerful and convincing. In the proposal, you want to articulate the cool features that your project has and and explain how they will demonstrate mastery of the course content.

Your proposal should explain the basic goals or objectives of the site. Then, describe the basic function of each feature, as if you're describing it to a site user or a high-level manager who doesn't understand or care how things are implemented. You should also argue for each feature, either its usefulness or its coolness, as a worthwhile use of your time (suppose you need to persuade the programmers who have to implement it), and not some silly bell or whistle.

Your features can be anything you like. It's okay to look at the real world web sites for inspiration. However, you are also encouraged to exercise your own creativity and resourcefulness. Surely there are many web sites out there that have irritated you by not having some useful feature. That, too, can be part of the portfolio.

Your proposal should also discuss the concepts and skills, both in database management and web application programming, that your features will require and demonstrate. This discussion can be as technical as necessary. You should describe any database relations you'll need to create, queries and updates you'll need to run, the scripts or programs you'll need to program, the web forms you'll write, and anything else that is necessary. A challenging project will probably touch on all of these and may require learning things that we have not covered in the class. I understand that at this point in the semester, you may not know all that is necessary to implement your features, but you should have an intuition or at least an ambition. I am, of course, happy to meet with you to discuss ideas you are considering.

How to Format The Proposal

There's no reason to get fancy. I'm interested in clear communication. However, there are a few things that you should know anyhow:

  • Put your names at the top of the document, like "Sally Smith, Tara Turner, and Veronica Volta"
  • Put in your project name, like "facebay."
  • Give it a title, like "Design for FaceBay, a combination of Facebook and eBay."

Brevity is always appreciated.

How to Submit Your Proposal

You'll write this as a Google Doc, shared with your teammates and me. This will allow the team to easily co-author it, and allow me to comment on it.

The title of the document is very important, otherwise I will mis-place it and lose time finding it. The title of the document will be CS304-SEM-YYYY-proposal-TEAM where the SEM is the semester (Fall/Spring), the the YYYY is year, and the TEAM is name of your project or team account or your names.

How you'll be Graded

The main thing I'll be looking for in these proposals is an argument that is clear and persuasive. The idea should be cool or useful (ideally, both) and be technically challenging and feasible.

An important part of writing a persuasive argument is good technical writing. I'll be looking not only at local mechanics (spelling, grammar, and stuff like that), but at global properties of coherence and continuity. Show me that you can all be better technical writers than most textbook authors.

Grading checklist:

  • basic idea
  • why it's useful or interesting
  • existing websites/web applications that it is similar to, if any.
  • features
  • data to be collected

Questions

If you have any questions, be sure to ask.

Time and Work

Finally, when you have completed the assignment, make sure you fill out the time and work That report is required.