ProjectsΒΆ

_images/2014-cse491-platform-diagram.png

Overall goal: implement features for an image sharing/storage/leaderboard/editing Web site. (So, please assume that most features should be implemented on imageapp. ;)

Testing rules: apart from the testing specific projects, do enough to make sure that your site works. Heh.

Extension offer, in place next HW: before the homework is due, you can ask for an extension until next Thursday, for help in solving technical problems. I will grant extensions where significant work and problem solving has been tried but has failed. I will then choose another student to help you debug and fix your code via pull request review; I will evaluate them on their PR comments, and you on your fixed (or not) code. Details still a bit fuzzy; ask questions.

  1. Propose something that you’ve always been interested in learning!
  2. Reimplement the imageapp functionality (minus the silly JavaScript) in your own app.py, or Django or flask. (5 pts each; app_framework)
  3. Write a WSGI middleware component that does recording and playback of all WSGI traffic between server and component. (5 pts; wsgi)
  4. Swipe a template from oswd.org and put it in place on your imageapp server. (5 pts; browser_app)
  5. Change imageapp to support JPEG and TIFF. (5 pts; app_feature)
  6. Add a URL that provides a list of images, resized to thumbnails (you can just img size, not actual resizing – that will be a separate project ;). (5 pts; app_feature)
  7. Add image “metadata” uploading, storage, and retrieval: image name, description, etc. (5 pts; app_feature)
  8. Add image metadata search (find image by ...) (5 pts.; app_feature)
  9. Add the ability to comment on images. (5 pts.; app_feature)
  10. Add username login via cookies and tracking of image by “owner” (the person who uploaded it). Allow the owner to delete it. (5 pts.; app_feature)
  11. Implement secure cookies (see #9); use UUID. (5 pts; app_feature)
  12. Write something that prevents denial of services by uploading gigabyte files, or “forever” connections that upload things really slowly. Be sure to write a client-side test. (5 pts; app_feature)
  13. Implement AJAX image upload with JQuery. (5 pts; ajax)
  14. Implement a Python client to upload images via a JSON-RPC interface. (5 pts; api)
  15. Write down clear instructions for setting up a new Ubuntu machine on a cloud service of your choice (I have some documentation for Amazon) and installing the imageapp server on port 80. (5 pts; hosting)
  16. Add account creation, login, and authentication (5 pts; app_feature)
  17. Add data persistence in sqlite or MySQL or PostgreSQL (5 pts; app_feature). NOTE that you can use the CSE MySQL server, here: http://www.cse.msu.edu/Facility/Services/MySQL.php
  18. Implement multithreading in your WSGI server (see http://docs.python.org/2/library/threading.html) and explain how you know it’s working. (5 pts; wsgi)
  19. Implement multiprocessing (shared nothing in memory) in your WSGI server (see http://docs.python.org/2/library/multiprocessing.html) and explain how you know it’s working (see Day 28: Thursday, April 17, 2014 code) (5 pts; wsgi)
  20. Implement asynchronous I/O (not multithreading/multiprocessing, but still handling multiple connections) in your WSGI server, and explain how you know it’s working. (5 pts; wsgi)
  21. After #14, set up a domain name and static IP address for your site. (5 pts; hosting)
  22. Write a chef recipe for installing your software from github on a Linux VM/ cloud computer. (5 pts; hosting)
  23. Make a thumbnail list using server-side resizing on the fly (in Python code, using PIL or some other image manipulation library). The distinguishing feature here should be that large images are not downloaded to the browser and resized there (as would happen if you used image attributes; see #5). (5 pts; app_feature)
  24. Write a URL handler so that each image is referred to by its number, e.g. /image_raw/10; make it so that going to the latest image in your imageapp redirects to the right image number. (5 pts; app_feature)
  25. Make a generally useful fake data set to support #6 (~10-20 images, names, etc.) for others to use in testing their own server. (5 pts; platform)
  26. Implement polling for your chat app. (5 pts; browser_app)
  27. Implement Web sockets for chat app updating (5 pts; ajax)
  28. Implement starring, ranking, and a simple recommendation system for your image app image list (5 pts; app_feature)
  29. Add disqus to your Web site (2.5 pts; browser_app)
  30. After #6, implement an RSS feed for new image uploads (2.5 pts; app_feature)
  31. Add data persistence in a NoSQL database (5 pts; app_feature)
  32. Reimplement the most basic imageapp functionality (uploading and serving images) in the Scala Play framework. (5 pts; app_framework)
  33. Reimplement the most basic imageapp functionality in the Node.js framework. (5 pts; app_framework)

This Page

Edit this document!

This file can be edited directly through the Web. Anyone can update and fix errors in this document with few clicks -- no downloads needed.

  1. Go to Projects on GitHub.
  2. Edit files using GitHub's text editor in your web browser (see the 'Edit' tab on the top right of the file)
  3. Fill in the Commit message text box at the bottom of the page describing why you made the changes. Press the Propose file change button next to it when done.
  4. Then click Send a pull request.
  5. Your changes are now queued for review under the project's Pull requests tab on GitHub!

For an introduction to the documentation format please see the reST primer.