Please note that all of the deadlines listed below are hard deadlines. This means that you need to meet them. Given the short nature of this course, the time I have to evaluate your work is likewise truncated. Turning things in on time is the only way that I have to make sure that I can meet my deadlines and be fair to you.
- Assigned: 4 February, 2021
- Due: 11 February, 2021, 11:59 PM
This semester, in the course of learning fundamental computational concepts using Python, you've been using structured, semi-guided exercises to explore topics. This project invites you to explore and expand your knowledge in greater detail by applying your skills to a different kind of "problem": one of creating a text work.
What do I mean when I write "text work"? The term is, like so many we use, necessarily ambigious. It could be a translator that turns all words in a text into variations of the word "meow"; it could be a graphic novel generator that uses Flickr images and some image magic to create visual detective comics; it could even be someting madlib-like that tells us what some random fictional, nameless person in a random place is doing as the clock rolls on.
Heck, it could be a list of fake names of people on a list to go to the Moon (that has a narrative quality to it).
Your goal is deceptively complex: come up with an interesting concept and figure out how to make that concept happen -- in code. You could figure out a way to extract every word beginning with the letter p
from Pride & Prejudice. You could choose 20 of your favorite (public domain) texts and select random words from each randomly until you've finished the requirements. Heck, you could even create a graphic novel about ellipses, rectangles, and polygons trying to avoid being erased by using PIL
to generate shapes and paste text.
These readings will be the subject for our activity to close out this week. Concentrate on the Kazemi reading and one or two of the projects there and one or two of the projects I've provided.
They are all much less complex than they seem. Don't focus on the code, though (I provide it as a reference), focus on the process you think the author useked to make them. This is less about "load a file and read a line" and more about thinking (using Generative Detective as a sample):
- I would find a picture and do something to it to make it look like a comic book
- I would find some detective novel or text that's interesting
- I would randomly take a line from that text using some keywords
- I'd then paste that line at the bottom in a box that looks like comic book descriptions
- I will not care if it only vaguely makes sense, but it's better if it does
This post from notoriously great internet person Darius Kazemi should help break down some of the "OMIGOSHICAN'TDOTHATWUT" that tends to accompany the first time you do someting like this:
- Translating World Clock
- This source is less about the translation and more about the process
- Also, like most computational art, the whole thing is available on the internet (courtesy of the author)
- Generative Detective
- And, read about the process in this thread
- Moby Dick in 50,000 Meows
- Of course, the source and more is here
Type | Point value |
---|---|
Documentation | 120 pts. |
Working code and output | 80 pts. |
Total | 200 pts. |
20% of course |
Being a 100% arbitrary measure, your creative intent with this project is the goal.
Simply put, the outcome of this project should be one of the following:
- A single text file containing the complete output of one run of your program, or
- This text file must contain at least 500 individual words
- A series of at least 6 images, named according to the order to "read" them
- These images must contain some text -- be it caption or speech "bubble"
But those general goals are a bit too easy. I have more requirements.
Component | Due Date | Weight |
---|---|---|
Idea | 5 February | 40 pts. |
Progress report | 8 February | 40 pts. |
Final report | 11 February | 40 pts. |
Final code and output | 11 February | 80 pts. |
Total | 200 pts. |
For this assignment, I will not accept any adventure games. I am glad to discuss my reasoning with you.
This project assumes a very high level of autonomy. Meeting due dates is a key way to demonstrate that you're on track and that you're doing well with this kind of "free-range" project. I advise you to work iteratively (that is, in pieces over time) to complete the work and not let the due date sneak up on you. A project like this is no fun if you start it the night before.
Plus, by that time, you've already missed a bunch of deadlines.
Each of these documents already exists in the docs
directory. It is up to you to complete them.
-
An
idea
of no fewer than 100 words which:- Proposes a tentative/working/permanent title for your project
- Describes the project you intend to create
- Your motivation or interest in doing so
- Potential roadblocks or perceived challenges
- A description of the ideal outcome/output
-
A
progress report
of no fewer than 200 words that:- Describes the state of your project: where are you at? What do you still need to complete?
- This should take the form of a Markdown list of outstanding tasks and a brief paragraph describing your progress
- Summarizes your current challenges: where are you stuck? What could you use help with?
- Celebrates your successes: surely you have some.
- Describes the state of your project: where are you at? What do you still need to complete?
-
A
final report
of at least 300 words which:- Contains the final title
- Summarizes your end-of-project thoughts: how do you feel about the outcome of your project?
- Describes how your project changed over time -- did you need to make it more complex? Simpler? How/why?
- Contains a "post-mortem" which thinks about:
- what worked?
- what didn't?
- what would you have done differently?
- what was the biggest challenge that you overcame? How did you do it?
This code should be written in the main.py file in the src
folder and write all of its output to the output
folder. With respect to the last objective, you'll find using ../output
as the beginning of your file path helpful.
Any data source that you use should be placed in the data
folder. Like the above output
folder example, loading these files in main.py
should use the ../data
prefix to the path.
Your code should:
- Contain at least one function
- If your project uses a custom module, functions like
__init__
, et al. do not count
- If your project uses a custom module, functions like
- Use at least one kind of data structure (
list
,tuple
,dictionary
) - Reads at least one file as input
import
s (and uses) at least one additional module- If you write your own module, this counts
- Contains at least one
for
orwhile
loop- Though, I trust you'll have to use more
- Use a productive number of single-line comments
- Here, the number is at least 15, though I imagine you'll need many more
- Be completed in a
*.py
file- I am, however, open to projects which think about Jupyter notebooks as a storytelling device
- Think about this one; it could be interesting
- You need to tell me that's what you want to do, though
- I am, however, open to projects which think about Jupyter notebooks as a storytelling device
- If your program requires input, you will need to provide an example of each prompt's input in the src/inputs file.
You do not have the ability to install additional libraries on the server. However, if you request an additional module, I can. I reserve the right to choose not to install a requested module and provide a reason why. We do have some additional functionality already on the server:
markovify
PIL
opencv
spaCy
textwrap3
Some of these we haven't seen or discussed. Odds are, if there's a module you'd like to use, we haven't. Though I am glad to talk with you about using any "non-standard" modules, it's up to you to really integrate them into your project through exploration or trial-and-error. I suggest reviewing documentation as a start.
This project can be completed with interesting output using only the modules we already have.
Because this work should take place iteratively, this repository requires at least 10 commit
s.
Struggling for what to do with a text or with images? Here are two resources which may help:
- Darius K.'s corpora madness
- These are all
json
files, which seem intimidating, but are relatively easy to use; we'll talk about them in class.
- These are all
- Project Gutenberg
- Creative Commons image search